[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