#include "seqTools.h"
+// copy existing virus
+Virus::Virus(const Virus &v)
+: energy(v.energy)
+, mutated_sites(v.mutated_sites)
+, L(v.L)
+{
+}
+
//Constuct a virus object of wildtype
-Virus::Virus(const Hamiltonian &H) {
- this->mutated_sites.clear();
- L=H.size;
- energy=0;
+Virus::Virus(const Hamiltonian &H)
+: energy(0.0)
+, mutated_sites()
+, L(H.size)
+{
}
//Construct a virus and compute its energy.
-Virus::Virus(const Hamiltonian &H, const std::set<unsigned int> &mutated_sites) {
- this->mutated_sites=mutated_sites;
- L=H.size;
+Virus::Virus(const Hamiltonian &H, const std::set<unsigned int> &mutated_sites_in)
+: energy(0.0)
+, mutated_sites(mutated_sites_in)
+, L(H.size)
+{
update_energy(H);
}
return out;
}
+// copy existing virus
+NTVirus::NTVirus(const NTVirus &v)
+: energy(v.energy)
+, nt_seq(v.nt_seq)
+, aa_seq(v.aa_seq)
+, config(v.config)
+, L_nt(v.L_nt)
+, L_aa(v.L_aa)
+{
+}
+
NTVirus::NTVirus(const std::string &NT)
: energy(0.0)
, nt_seq(NT)
double energy;
std::set<unsigned int> mutated_sites;
+ Virus(const Virus &v);
Virus(const Hamiltonian &H);
Virus(const Hamiltonian &H, const std::set<unsigned int> &mutated_sites);
unsigned int L_nt;
unsigned int L_aa;
+ NTVirus(const NTVirus &v);
NTVirus(const std::string &NT);
NTVirus(const PottsHamiltonian &H, const std::string &NT);
void update_energy(const PottsHamiltonian &H);
// sigmoid function
//double z = exp(-E);
//return z/(1.0+z);
- //return (E>0.0) ? 1.0/(1.0+exp(-E)) : exp(E)/(1.0+exp(E));
- return exp(-E);
+ return (E>0.0) ? 1.0/(1.0+exp(-E)) : exp(E)/(1.0+exp(E));
+ //return exp(-E);
}
double VirusReaction::recalc()
// pick how many sites to mutate in the new virus
// adapted from WF Virus::mutate()
- Virus v(H,iter->first.mutated_sites); // TODO: replace with copy constructor
+ //Virus v(H,iter->first.mutated_sites); // TODO: replace with copy constructor
+ Virus v(iter->first);
unsigned int n = gsl_ran_binomial(rnd,mu,H.size);
MutatedSiteSequence sites_to_mutate;
while (sites_to_mutate.size() < n) {
else v.mutated_sites.erase(x);
}
*/
- v.update_energy(H);
+ if (n > 0) // sequence changed, so energy might have too
+ v.update_energy(H);
// update copy numbers
if (V->pop.count(v)==0) V->pop[v] = 1; // new variant
// pick how many sites (nucleotides) to mutate in the new virus
// adapted from WF Virus::mutate()
- NTVirus v(H,iter->first.nt_seq); // TODO: replace with copy constructor
+ //NTVirus v(H,iter->first.nt_seq); // TODO: replace with copy constructor
+ NTVirus v(iter->first);
unsigned int n = gsl_ran_binomial(rnd,mu,3*H.size);
MutatedSiteSequence sites_to_mutate;
while (sites_to_mutate.size() < n) {