public Tube(TubeParameters TP,double MaxTime) { this.TP = TP; dt=1; GrowDivision = new double[Convert.ToInt32(Math.Ceiling(MaxTime/dt)),TP.NumberOfStrains]; //init to 0 for (int i=0; i<GrowDivision.GetLength(0) ; i++) { for (int s=0; s<GrowDivision.GetLength(1) ; s++) GrowDivision[i,s]=0; } _LastT = 0; LastN = new double[TP.NumberOfStrains]; for(int s=0;s<TP.NumberOfStrains;s++) { LastN[s] = TP.Strains[s].No; } }
private static void RunOneSimulation(object o) { try { SimulationParameters PS = (SimulationParameters)o; int rep = PS.rep; int mi = PS.mi; int sid = PS.sid; double MutationRate = MutationRates[mi]; TubeParameters TP = new TubeParameters(Nmax,new StrainParameters[]{ new StrainParameters("WT",1e4,0,LagTS,1000,LagTS,1000,21,3,new StrainMutationParameters[]{new StrainMutationParameters(1,MutationRate,0)}), new StrainParameters("ResistanceMutant",0,0,LagTS,1000,0,0,21,3) }); Tube tube = new Tube(TP,maxTime); SimulateTube SimulateTube = new SimulateTube(PS.sid); tube = SimulateTube.GrowToNmax(tube); int s; for(s=0;s<maxsycles;s++) { tube = SimulateTube.Kill(tube,240); tube = SimulateTube.GrowToNmax(tube); //arize of mutant if(tube.LastN[1]>0) { Cycle2Mutant[mi,rep]=s; } //test 4 fixsasion or extiction. if(((double)tube.LastN[1]/(tube.LastN[0]+tube.LastN[1])>0.7) || double.IsNaN((double)tube.LastN[1]/(tube.LastN[0]+tube.LastN[1]))) { break; } } if(double.IsNaN((double)tube.LastN[1]/(tube.LastN[0]+tube.LastN[1]))) { Cycle2Fixsation[mi,rep] = 0; } else { if(((double)tube.LastN[1]/(tube.LastN[0]+tube.LastN[1])>0.7)) { Cycle2Fixsation[mi,rep] = s; } } if(DebugPrint) { PrintTube2File("Lag=" + LagTS.ToString() + "Repetition=" + rep.ToString() + "MutationRate=" + MutationRate.ToString("e") ,tube); } SimulateTube = null; PrintMutFix2File( simResultsFilename, mi, rep); } finally { //Console.WriteLine(numerOfThreadsNotYetCompleted); PrintPresentege(MutationRates.Length*Repetitions-numerOfThreadsNotYetCompleted ,MutationRates.Length*Repetitions); if (Interlocked.Decrement(ref numerOfThreadsNotYetCompleted) == 0) { _doneEvent.Set(); } } }