示例#1
0
        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;
            }
        }
示例#2
0
        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();
                }
            }
        }