rev |
line source |
ksenia_yashina@20
|
1 class Petri (object): |
ksenia_yashina@22
|
2 def __init__ (self, num=1, bacteria=[], radius=150, delta=5, bact_r=10, full_lifetime=1000,total=0,total_mut=0,\ |
ksenia_yashina@22
|
3 total_min=0,total_max=0,s_num=0,a_num=0): |
ksenia_yashina@20
|
4 self.num=num |
ksenia_yashina@20
|
5 self.bacteria=bacteria |
ksenia_yashina@20
|
6 self.radius=radius |
ksenia_yashina@20
|
7 self.delta=delta |
ksenia_yashina@20
|
8 self.bact_r=bact_r |
ksenia_yashina@20
|
9 self.full_lifetime=full_lifetime |
ksenia_yashina@22
|
10 self.total=self.num |
ksenia_yashina@22
|
11 self.total_max=self.num |
ksenia_yashina@22
|
12 self.total_min=self.num |
ksenia_yashina@22
|
13 self.total_mut=total_mut |
ksenia_yashina@22
|
14 self.s_num=s_num |
ksenia_yashina@22
|
15 self.a_num=a_num |
ksenia_yashina@20
|
16 |
ksenia_yashina@20
|
17 def step (self, delta_t, env,a,s): |
ksenia_yashina@20
|
18 for bact in self.bacteria: |
ksenia_yashina@20
|
19 bact.lifetime-=delta_t |
ksenia_yashina@20
|
20 if bact.lifetime <= 0: |
ksenia_yashina@20
|
21 self.bacteria.remove(bact) |
ksenia_yashina@20
|
22 self.num-=1 |
ksenia_yashina@22
|
23 if self.num<self.total_min: |
ksenia_yashina@22
|
24 self.total_min=self.num |
ksenia_yashina@20
|
25 continue |
ksenia_yashina@20
|
26 collide=bact.check_collision(self.bacteria,1,self.bact_r,delta_t) |
ksenia_yashina@20
|
27 if not(collide): |
ksenia_yashina@20
|
28 if bact.reprod('a', env, 0.1) and a: |
ksenia_yashina@22
|
29 diff=bact.asexual(self.bacteria, delta_t, self.radius, self.delta, self.bact_r, self.full_lifetime) |
ksenia_yashina@22
|
30 self.total+=diff*2 |
ksenia_yashina@22
|
31 self.num+=diff |
ksenia_yashina@22
|
32 if diff>0: |
ksenia_yashina@22
|
33 self.a_num+=1 |
ksenia_yashina@22
|
34 if bact.mutated and diff>0: |
ksenia_yashina@22
|
35 self.total_mut+=2 |
ksenia_yashina@22
|
36 if self.num>self.total_max: |
ksenia_yashina@22
|
37 self.total_max=self.num |
ksenia_yashina@20
|
38 continue |
ksenia_yashina@20
|
39 bact.move(self.bacteria, delta_t, self.radius, self.delta, self.bact_r) |
ksenia_yashina@20
|
40 continue |
ksenia_yashina@20
|
41 if bact.reprod('s', env,1) and s: |
ksenia_yashina@22
|
42 diff=bact.sexual(collide, self.bacteria, delta_t, self.radius, self.delta, self.bact_r, self.full_lifetime) |
ksenia_yashina@22
|
43 if diff>0: |
ksenia_yashina@22
|
44 self.total+=4 |
ksenia_yashina@22
|
45 self.s_num+=1 |
ksenia_yashina@22
|
46 self.num+=2 |
ksenia_yashina@22
|
47 self.total_mut+=diff-1 |
ksenia_yashina@22
|
48 if self.num>self.total_max: |
ksenia_yashina@22
|
49 self.total_max=self.num |
ksenia_yashina@20
|
50 continue |
ksenia_yashina@20
|
51 bact.collision(collide, self.bacteria, delta_t, self.radius, self.delta, self.bact_r) |
ksenia_yashina@22
|
52 if self.num<=0: |
ksenia_yashina@22
|
53 return False |
ksenia_yashina@22
|
54 return True |