Initial commit
This commit is contained in:
27
_simulations/event.py
Normal file
27
_simulations/event.py
Normal file
@ -0,0 +1,27 @@
|
||||
import bisect
|
||||
import random
|
||||
|
||||
class Event:
|
||||
def __init__(self, dist, parent=None, daughter=None):
|
||||
self.parent = parent
|
||||
self.daughter = daughter
|
||||
|
||||
if not parent == daughter == None:
|
||||
self.name = f'{parent.name} => {daughter.name}'
|
||||
|
||||
self.event_time = self.generate_event_time(dist.cdf, dist.time_range)
|
||||
|
||||
def generate_event_time(self, cdf, time_range):
|
||||
d_bin = time_range[1] - time_range[0] # define discrete bin
|
||||
r = random.random()
|
||||
i = bisect.bisect_left(cdf, r) # from the left, find the nearest value to r in the CDF
|
||||
|
||||
if i:
|
||||
pass
|
||||
else:
|
||||
i = 0
|
||||
|
||||
t = time_range[i]
|
||||
t += random.random() * d_bin # this avoids issues with the discretization selection (for continuum quantities)
|
||||
|
||||
return t
|
Reference in New Issue
Block a user