[Avida-SVN] r3309 - in development/source: actions cpu drivers main targets/avida-viewer targets/viewer-text
brysonda at myxo.css.msu.edu
brysonda at myxo.css.msu.edu
Wed Jun 10 13:49:04 PDT 2009
Author: brysonda
Date: 2009-06-10 16:49:03 -0400 (Wed, 10 Jun 2009)
New Revision: 3309
Modified:
development/source/actions/PopulationActions.cc
development/source/cpu/cHardwareBase.cc
development/source/drivers/cDefaultRunDriver.cc
development/source/main/cAvidaConfig.h
development/source/main/cMutationRates.cc
development/source/main/cMutationRates.h
development/source/main/cOrganism.h
development/source/main/cPopulation.cc
development/source/main/cPopulation.h
development/source/targets/avida-viewer/cTextViewerDriver.cc
development/source/targets/viewer-text/cDriver_TextViewer.cc
Log:
Add support for per cell death rates (tested once per update).
Modified: development/source/actions/PopulationActions.cc
===================================================================
--- development/source/actions/PopulationActions.cc 2009-06-10 17:57:13 UTC (rev 3308)
+++ development/source/actions/PopulationActions.cc 2009-06-10 20:49:03 UTC (rev 3309)
@@ -1414,7 +1414,7 @@
C_MUT, C_INS, C_DEL, C_UNIFORM, C_SLIP,
DS_MUT, DS_INS, DS_DEL, DS_UNIFORM, DS_SLIP,
D1_MUT, D1_INS, D1_DEL, D1_UNIFORM, D1_SLIP,
- PARENT,
+ PARENT, DEATH,
I_MUT, I_INS, I_DEL
} m_mut_type;
@@ -1456,6 +1456,7 @@
else if (mutstr == "DIVIDE_SLIP") m_mut_type = D1_SLIP;
else if (mutstr == "PARENT") m_mut_type = PARENT;
+ else if (mutstr == "DEATH") m_mut_type = DEATH;
else if (mutstr == "INJECT_MUT") m_mut_type = I_MUT;
else if (mutstr == "INJECT_INS") m_mut_type = I_INS;
else if (mutstr == "INJECT_DEL") m_mut_type = I_DEL;
@@ -1502,6 +1503,7 @@
case D1_SLIP: m_world->GetConfig().DIVIDE_SLIP_PROB.Set(m_prob); break;
case PARENT: m_world->GetConfig().PARENT_MUT_PROB.Set(m_prob); break;
+ case DEATH: m_world->GetConfig().DEATH_PROB.Set(m_prob); break;
case I_MUT: m_world->GetConfig().INJECT_MUT_PROB.Set(m_prob); break;
case I_INS: m_world->GetConfig().INJECT_INS_PROB.Set(m_prob); break;
case I_DEL: m_world->GetConfig().INJECT_DEL_PROB.Set(m_prob); break;
@@ -1531,6 +1533,7 @@
case D1_SLIP: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDivideSlipProb(m_prob); break;
case PARENT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetParentMutProb(m_prob); break;
+ case DEATH: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDeathProb(m_prob); break;
case I_MUT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInjectMutProb(m_prob); break;
case I_INS: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInjectInsProb(m_prob); break;
case I_DEL: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInjectDelProb(m_prob); break;
@@ -1548,7 +1551,7 @@
C_MUT, C_INS, C_DEL, C_UNIFORM, C_SLIP,
DS_MUT, DS_INS, DS_DEL, DS_UNIFORM, DS_SLIP,
D1_MUT, D1_INS, D1_DEL, D1_UNIFORM, D1_SLIP,
- PARENT,
+ PARENT, DEATH,
I_MUT, I_INS, I_DEL
} m_mut_type;
@@ -1589,6 +1592,7 @@
else if (mutstr == "DIVIDE_SLIP") m_mut_type = D1_SLIP;
else if (mutstr == "PARENT") m_mut_type = PARENT;
+ else if (mutstr == "DEATH") m_mut_type = DEATH;
else if (mutstr == "INJECT_MUT") m_mut_type = I_MUT;
else if (mutstr == "INJECT_INS") m_mut_type = I_INS;
else if (mutstr == "INJECT_DEL") m_mut_type = I_DEL;
@@ -1635,6 +1639,7 @@
case D1_SLIP: prob += m_world->GetConfig().DIVIDE_MUT_PROB.Get(); break;
case PARENT: prob += m_world->GetConfig().PARENT_MUT_PROB.Get(); break;
+ case DEATH: prob += m_world->GetConfig().DEATH_PROB.Get(); break;
case I_MUT: prob += m_world->GetConfig().INJECT_MUT_PROB.Get(); break;
case I_INS: prob += m_world->GetConfig().INJECT_INS_PROB.Get(); break;
case I_DEL: prob += m_world->GetConfig().INJECT_DEL_PROB.Get(); break;
@@ -1665,6 +1670,7 @@
case D1_SLIP: m_world->GetConfig().DIVIDE_SLIP_PROB.Set(prob); break;
case PARENT: m_world->GetConfig().PARENT_MUT_PROB.Set(prob); break;
+ case DEATH: m_world->GetConfig().DEATH_PROB.Set(prob); break;
case I_MUT: m_world->GetConfig().INJECT_MUT_PROB.Set(prob); break;
case I_INS: m_world->GetConfig().INJECT_INS_PROB.Set(prob); break;
case I_DEL: m_world->GetConfig().INJECT_DEL_PROB.Set(prob); break;
@@ -1694,6 +1700,7 @@
case PARENT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetParentMutProb(prob); break;
+ case DEATH: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetDeathProb(prob); break;
case I_MUT: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInjectMutProb(prob); break;
case I_INS: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInjectInsProb(prob); break;
case I_DEL: for (int i = m_start; i < m_end; i++) m_world->GetPopulation().GetCell(i).MutationRates().SetInjectDelProb(prob); break;
Modified: development/source/cpu/cHardwareBase.cc
===================================================================
--- development/source/cpu/cHardwareBase.cc 2009-06-10 17:57:13 UTC (rev 3308)
+++ development/source/cpu/cHardwareBase.cc 2009-06-10 20:49:03 UTC (rev 3309)
@@ -388,7 +388,7 @@
}
}
}
-
+
return totalMutations;
}
Modified: development/source/drivers/cDefaultRunDriver.cc
===================================================================
--- development/source/drivers/cDefaultRunDriver.cc 2009-06-10 17:57:13 UTC (rev 3308)
+++ development/source/drivers/cDefaultRunDriver.cc 2009-06-10 20:49:03 UTC (rev 3309)
@@ -121,13 +121,8 @@
}
// end of update stats...
- population.CalcUpdateStats();
-
- // Process the update for each deme.
- for(int i=0; i<population.GetNumDemes(); ++i) {
- population.GetDeme(i).ProcessUpdate();
- }
-
+ population.ProcessPostUpdate(ctx);
+
// No viewer; print out status for this update....
if (m_world->GetVerbosity() > VERBOSE_SILENT) {
cout.setf(ios::left);
Modified: development/source/main/cAvidaConfig.h
===================================================================
--- development/source/main/cAvidaConfig.h 2009-06-10 17:57:13 UTC (rev 3308)
+++ development/source/main/cAvidaConfig.h 2009-06-10 20:49:03 UTC (rev 3309)
@@ -404,6 +404,8 @@
CONFIG_ADD_VAR(DIVIDE_POISSON_SLIP_MEAN, double, 0.0, "Slip rate (Poisson distributed, per divide)");
CONFIG_ADD_VAR(DIVIDE_UNIFORM_PROB, double, 0.0, "Uniform mutation probability (per divide)\n- Randomly applies any of the three classes of mutations (ins, del, point).");
+
+ CONFIG_ADD_VAR(DEATH_PROB, double, 0.0, "Death rate (parent organism, per divide)");
CONFIG_ADD_VAR(INJECT_INS_PROB, double, 0.0, "Insertion rate (per site, applied on inject)");
CONFIG_ADD_VAR(INJECT_DEL_PROB, double, 0.0, "Deletion rate (per site, applied on inject)");
Modified: development/source/main/cMutationRates.cc
===================================================================
--- development/source/main/cMutationRates.cc 2009-06-10 17:57:13 UTC (rev 3308)
+++ development/source/main/cMutationRates.cc 2009-06-10 20:49:03 UTC (rev 3309)
@@ -56,6 +56,7 @@
divide.divide_slip_prob = world->GetConfig().DIVIDE_SLIP_PROB.Get();
divide.parent_mut_prob = world->GetConfig().PARENT_MUT_PROB.Get();
+ divide.death_prob = world->GetConfig().DEATH_PROB.Get();
inject.ins_prob = world->GetConfig().INJECT_INS_PROB.Get();
inject.del_prob = world->GetConfig().INJECT_DEL_PROB.Get();
@@ -92,6 +93,8 @@
divide.divide_slip_prob = 0.0;
divide.parent_mut_prob = 0.0;
+
+ divide.death_prob = 0.0;
inject.ins_prob = 0.0;
inject.del_prob = 0.0;
@@ -128,6 +131,7 @@
divide.divide_slip_prob = in_muts.divide.divide_slip_prob;
divide.parent_mut_prob = in_muts.divide.parent_mut_prob;
+ divide.death_prob = in_muts.divide.death_prob;
inject.ins_prob = in_muts.inject.ins_prob;
inject.del_prob = in_muts.inject.del_prob;
Modified: development/source/main/cMutationRates.h
===================================================================
--- development/source/main/cMutationRates.h 2009-06-10 17:57:13 UTC (rev 3308)
+++ development/source/main/cMutationRates.h 2009-06-10 20:49:03 UTC (rev 3309)
@@ -67,6 +67,7 @@
double divide_slip_prob; // Max one per divide
double divide_uniform_prob;
double parent_mut_prob;
+ double death_prob;
};
sDivideMuts divide;
@@ -126,7 +127,8 @@
}
- bool TestParentMut(cAvidaContext& ctx) const { return ctx.GetRandom().P(divide.parent_mut_prob); }
+ bool TestParentMut(cAvidaContext& ctx) const { return ctx.GetRandom().P(divide.parent_mut_prob); }
+ bool TestDeath(cAvidaContext& ctx) const { return (divide.death_prob == 0.0) ? false : ctx.GetRandom().P(divide.death_prob); }
double DoMetaCopyMut(cAvidaContext& ctx) {
if (meta.copy_mut_prob == 0.0 || !ctx.GetRandom().P(meta.copy_mut_prob)) return 1.0;
@@ -156,6 +158,7 @@
double GetDivideSlipProb() const { return divide.divide_slip_prob; }
double GetParentMutProb() const { return divide.parent_mut_prob; }
+ double GetDeathProb() const { return divide.death_prob; }
double GetInjectInsProb() const { return inject.ins_prob; }
double GetInjectDelProb() const { return inject.del_prob; }
@@ -184,6 +187,7 @@
void SetDivideSlipProb(double in_prob) { divide.divide_del_prob = in_prob; }
void SetParentMutProb(double in_prob) { divide.parent_mut_prob = in_prob; }
+ void SetDeathProb(double in_prob) { divide.death_prob = in_prob; }
void SetInjectInsProb(double in_prob) { inject.ins_prob = in_prob; }
void SetInjectDelProb(double in_prob) { inject.del_prob = in_prob; }
Modified: development/source/main/cOrganism.h
===================================================================
--- development/source/main/cOrganism.h 2009-06-10 17:57:13 UTC (rev 3308)
+++ development/source/main/cOrganism.h 2009-06-10 20:49:03 UTC (rev 3309)
@@ -343,6 +343,7 @@
bool TestDivideSlip(cAvidaContext& ctx) const { return m_mut_rates.TestDivideSlip(ctx); }
bool TestParentMut(cAvidaContext& ctx) const { return m_mut_rates.TestParentMut(ctx); }
+ bool TestDeath(cAvidaContext& ctx) const { return m_mut_rates.TestDeath(ctx); }
double GetCopyMutProb() const { return m_mut_rates.GetCopyMutProb(); }
double GetCopyInsProb() const { return m_mut_rates.GetCopyInsProb(); }
@@ -360,6 +361,7 @@
double GetDivSlipProb() const { return m_mut_rates.GetDivSlipProb(); }
double GetParentMutProb() const { return m_mut_rates.GetParentMutProb();}
+ double GetDeathProb() const { return m_mut_rates.GetDeathProb();}
double GetInjectInsProb() const { return m_mut_rates.GetInjectInsProb(); }
double GetInjectDelProb() const { return m_mut_rates.GetInjectDelProb(); }
Modified: development/source/main/cPopulation.cc
===================================================================
--- development/source/main/cPopulation.cc 2009-06-10 17:57:13 UTC (rev 3308)
+++ development/source/main/cPopulation.cc 2009-06-10 20:49:03 UTC (rev 3309)
@@ -4224,8 +4224,10 @@
stats.SetDomInjSequence(dom_inj_genotype->GetGenome().AsString());
}
-void cPopulation::CalcUpdateStats()
+void cPopulation::ProcessPostUpdate(cAvidaContext& ctx)
{
+ //ProcessUpdateCellActions(ctx);
+
cStats& stats = m_world->GetStats();
// Reset the Genebank to prepare it for stat collection.
m_world->GetClassificationManager().UpdateReset();
@@ -4245,9 +4247,18 @@
// Have stats calculate anything it now can...
stats.CalcEnergy();
stats.CalcFidelity();
+
+ for (int i = 0; i < deme_array.GetSize(); i++) deme_array[i].ProcessUpdate();
}
+void cPopulation::ProcessUpdateCellActions(cAvidaContext& ctx)
+{
+ for (int i = 0; i < cell_array.GetSize(); i++) {
+ if (cell_array[i].MutationRates().TestDeath(ctx)) KillOrganism(cell_array[i]);
+ }
+}
+
bool cPopulation::SaveClone(ofstream& fp)
{
if (fp.good() == false) return false;
@@ -5255,7 +5266,7 @@
//is processed, they accurately reflect this trial only...
cStats& stats = m_world->GetStats();
stats.ProcessUpdate();
- CalcUpdateStats();
+ ProcessPostUpdate(ctx);
}
/*
Modified: development/source/main/cPopulation.h
===================================================================
--- development/source/main/cPopulation.h 2009-06-10 17:57:13 UTC (rev 3308)
+++ development/source/main/cPopulation.h 2009-06-10 20:49:03 UTC (rev 3309)
@@ -267,7 +267,8 @@
void ProcessStepSpeculative(cAvidaContext& ctx, double step_size, int cell_id);
// Calculate the statistics from the most recent update.
- void CalcUpdateStats();
+ void ProcessPostUpdate(cAvidaContext& ctx);
+ void ProcessUpdateCellActions(cAvidaContext& ctx);
// Clear all but a subset of cells...
void SerialTransfer(int transfer_size, bool ignore_deads);
Modified: development/source/targets/avida-viewer/cTextViewerDriver.cc
===================================================================
--- development/source/targets/avida-viewer/cTextViewerDriver.cc 2009-06-10 17:57:13 UTC (rev 3308)
+++ development/source/targets/avida-viewer/cTextViewerDriver.cc 2009-06-10 20:49:03 UTC (rev 3309)
@@ -135,7 +135,7 @@
// end of update stats...
- population.CalcUpdateStats();
+ population.ProcessPostUpdate(ctx);
// Setup the viewer for the new update.
if (m_view->GetStepOrganism() == -1) {
Modified: development/source/targets/viewer-text/cDriver_TextViewer.cc
===================================================================
--- development/source/targets/viewer-text/cDriver_TextViewer.cc 2009-06-10 17:57:13 UTC (rev 3308)
+++ development/source/targets/viewer-text/cDriver_TextViewer.cc 2009-06-10 20:49:03 UTC (rev 3309)
@@ -170,7 +170,7 @@
// end of update stats...
- population.CalcUpdateStats();
+ population.ProcessPostUpdate(ctx);
// Setup the viewer for the new update.
More information about the Avida-cvs
mailing list