if (r.useEpitope) {
- for (unsigned int n=0;n<r.num_runs;n++) {
+ for (unsigned int n=0; n<r.num_runs; n++) {
EpitopeHamiltonian H(r.couplingsInfile);
- for (unsigned ep=0; ep<r.numEpitopes; ++ep)
- H.set_epitope(r.eWT[ep], r.eMut[ep], r.penalty/(double)r.numEpitopes);
+
+ double penalty = 0.0;
+ if (r.penaltyType == RunParameters::PenaltyEACH)
+ penalty = r.penalty;
+ else if (r.penaltyType == RunParameters::PenaltyTOTAL)
+ penalty = r.penalty / (double)r.numEpitopes;
+ for (unsigned ep=0; ep<r.numEpitopes; ++ep) {
+ H.set_epitope(r.eWT[ep], r.eMut[ep], penalty);
+ }
+
H.set_temp(r.bh, r.bJ);
+
Population P(H, r.n, r.mu, r.initPop, r.initFrac);
// print epitopes
" H = sum_i h_i s_i + sum_{i<j} J_{ij} s_i s_j\n"
" although internal representation is opposite)\n"
" -write_mod (int) write out state every 'write_mod' generations\n"
+" -penaltyEach (double) bonus (per epitope) for mutation in epitope\n"
+" -penaltyTotal (double) maximum total bonus if all epitopes contain mutations;\n"
+" bonus per epitope = this / number of epitopes\n"
; std::cout.flush();
}
else if (strcmp(argv[i],"-b")==0) { if (++i==argc) break; else { r.bh=strtodouble(argv[i]); r.bJ=r.bh; } }
else if (strcmp(argv[i],"-bh")==0) { if (++i==argc) break; else r.bh=strtodouble(argv[i]); }
else if (strcmp(argv[i],"-bJ")==0) { if (++i==argc) break; else r.bJ=strtodouble(argv[i]); }
+
+ else if (strcmp(argv[i],"-penaltyEach")==0) { if (++i==argc) break; else { r.penalty=strtodouble(argv[i]); r.penaltyType=RunParameters::PenaltyEACH; } }
+ else if (strcmp(argv[i],"-penaltyTotal")==0) { if (++i==argc) break; else { r.penalty=strtodouble(argv[i]); r.penaltyType=RunParameters::PenaltyTOTAL; } }
else if (strcmp(argv[i],"-r")==0) { r.useRelative=true; }
else if (strcmp(argv[i],"-esc")==0) { r.runUntilEscape=true; }
std::string supplementaryOutfile;
std::string stateInfile;
std::string epitopeInfile;
+
+ enum PenaltyTYPE { PenaltyEACH, PenaltyTOTAL };
+
+ PenaltyTYPE penaltyType;
RunParameters() {
eend = 0;
penalty = 10.0;
+ penaltyType = PenaltyTOTAL;
runUntilEscape=false;
runUntilEscape_all=false;