[Avida-SVN] r3164 - in branches/interrupt/source: actions main

beckma24 at myxo.css.msu.edu beckma24 at myxo.css.msu.edu
Thu Feb 26 12:59:42 PST 2009


Author: beckma24
Date: 2009-02-26 15:59:42 -0500 (Thu, 26 Feb 2009)
New Revision: 3164

Modified:
   branches/interrupt/source/actions/PrintActions.cc
   branches/interrupt/source/main/cPopulation.cc
   branches/interrupt/source/main/cPopulation.h
Log:
Added PrintWithinDemeGeneticDistance print action

Modified: branches/interrupt/source/actions/PrintActions.cc
===================================================================
--- branches/interrupt/source/actions/PrintActions.cc	2009-02-25 18:54:04 UTC (rev 3163)
+++ branches/interrupt/source/actions/PrintActions.cc	2009-02-26 20:59:42 UTC (rev 3164)
@@ -2625,10 +2625,10 @@
   }
 };
 
-class cActionPrintDemeSpacialSleep : public cAction
+class cActionPrintDemeSpatialSleep : public cAction
 {
 public:
-  cActionPrintDemeSpacialSleep(cWorld* world, const cString& args) : cAction(world, args) { ; }
+  cActionPrintDemeSpatialSleep(cWorld* world, const cString& args) : cAction(world, args) { ; }
   
   static const cString GetDescription() { return "No Arguments"; }
   
@@ -2651,6 +2651,18 @@
   }
 };
 
+class cActionPrintWithinDemeGeneticDistance : public cAction {
+	public:
+		cActionPrintWithinDemeGeneticDistance(cWorld* world, const cString& args) : cAction(world, args) { ; }
+		
+		static const cString GetDescription() { return "No Arguments"; }
+		
+		void Process(cAvidaContext& ctx)
+		{
+			m_world->GetPopulation().PrintWithinDemeGeneticDistance();
+		}
+};
+
 class cActionSaveDemeFounders : public cAction
 {
 private:
@@ -2779,7 +2791,7 @@
   action_lib->Register<cActionPrintDemeEnergySharingStats>("PrintDemeEnergySharingStats");
   action_lib->Register<cActionPrintDemeDonorStats>("PrintDemeDonorStats");
   action_lib->Register<cActionPrintDemeSpacialEnergy>("PrintDemeSpacialEnergyStats");
-  action_lib->Register<cActionPrintDemeSpacialSleep>("PrintDemeSpacialSleepStats");
+  action_lib->Register<cActionPrintDemeSpatialSleep>("PrintDemeSpatialSleepStats");
   action_lib->Register<cActionPrintDemeResources>("PrintDemeResourceStats");
   action_lib->Register<cActionPrintDemeReplicationData>("PrintDemeReplicationData");
   action_lib->Register<cActionPrintDemeCompetitionData>("PrintDemeCompetitionData");
@@ -2801,6 +2813,7 @@
   action_lib->Register<cActionPrintDemeMigrationSuicidePoints>("PrintDemeMigrationSuicidePoints");
   action_lib->Register<cActionPrintDemeInterrupt>("PrintDemeInterrupt");
   action_lib->Register<cActionDumpInterruptGrid>("DumpInterruptGrid");
+	action_lib->Register<cActionPrintWithinDemeGeneticDistance>("PrintWithinDemeGeneticDistance");
 	
 
   //Coalescence Clade Actions

Modified: branches/interrupt/source/main/cPopulation.cc
===================================================================
--- branches/interrupt/source/main/cPopulation.cc	2009-02-25 18:54:04 UTC (rev 3163)
+++ branches/interrupt/source/main/cPopulation.cc	2009-02-26 20:59:42 UTC (rev 3164)
@@ -3038,6 +3038,36 @@
   df_task.Endl();
 }
 
+void cPopulation::PrintWithinDemeGeneticDistance() const {
+	static const int num_demes = deme_array.GetSize();
+	cDataFile & df = m_world->GetDataFile("deme_genetic_distance.dat");
+	cDoubleSum allDemeHammingDistances;
+	cDoubleSum allDemeLevenshteinDistances;
+	for (int deme_id = 0; deme_id < num_demes; deme_id++) {
+    const cDeme & cur_deme = deme_array[deme_id];
+		cIntSum inCurrentDemeHammingDistances;
+		cIntSum inCurrentDemeLevenshteinDistances;
+		
+		for (int i = 0; i < cur_deme.GetSize(); ++i) {
+      int cell_i = cur_deme.GetCellID(i);
+      if (cell_array[cell_i].IsOccupied() == false)
+				continue;
+			for (int j = i; j < cur_deme.GetSize(); ++j) {
+				int cell_j = cur_deme.GetCellID(j);
+				if (cell_array[cell_j].IsOccupied() == false)
+					break;
+				inCurrentDemeHammingDistances.Add(cGenomeUtil::FindHammingDistance(cell_array[cell_i].GetOrganism()->GetGenome(), cell_array[cell_j].GetOrganism()->GetGenome()));
+				inCurrentDemeLevenshteinDistances.Add(cGenomeUtil::FindEditDistance(cell_array[cell_i].GetOrganism()->GetGenome(), cell_array[cell_j].GetOrganism()->GetGenome()));
+			}
+    }
+		allDemeHammingDistances.Add(inCurrentDemeHammingDistances.Average());
+		allDemeLevenshteinDistances.Add(inCurrentDemeLevenshteinDistances.Average());
+	}
+	// print average
+	df.Write(allDemeHammingDistances.Average(), "Average genetic Hamming distance between all orgnaisms in deme averaged over all demes ");
+	df.Write(allDemeLevenshteinDistances.Average(), "Average genetic Levenshtein distance between all orgnaisms in deme averaged over all demes ");
+}
+
 void cPopulation::DumpDemeFounders(ofstream& fp) {
   fp << "#filetype deme_founders" << endl
   << "#format deme_id num_founders genotype_ids" << endl

Modified: branches/interrupt/source/main/cPopulation.h
===================================================================
--- branches/interrupt/source/main/cPopulation.h	2009-02-25 18:54:04 UTC (rev 3163)
+++ branches/interrupt/source/main/cPopulation.h	2009-02-26 20:59:42 UTC (rev 3164)
@@ -244,6 +244,7 @@
   void PrintDemeSpatialSleepData() const;
   void PrintDemeTasks();
 	void PrintDemeTotalAvgEnergy();
+	void PrintWithinDemeGeneticDistance() const;
   
   // Print deme founders
   void DumpDemeFounders(ofstream& fp);




More information about the Avida-cvs mailing list