Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from random import random
class detector:
def __init__(self, depth, read_time = 8):
self.events = []
self.depth = depth
self.read_time = read_time
def read_buffer(self,time):
if len(self.events) > 0 and self.events[0] < time:
self.events = self.events[1:]
return True
else:
return False
def add_event(self,time):
# First, clear any event that could be read
while(self.read_buffer(time)):
pass
#self.read_buffer(time)
#Then, try to add event at the end of queue
if len(self.events) < self.depth:
if len(self.events) == 0:
self.events.append(time+self.read_time-1)
else:
self.events.append(self.events[-1]+self.read_time)
return True
else:
return False
def get_eff(proba, depth, read_time = 8, total_time = 1e5):
my_det = detector(depth, read_time)
n_accept = 0
n_total = 0
for time in range(int(total_time)):
if random() < proba:
n_total += 1
if my_det.add_event(time):
n_accept += 1
return n_accept/n_total
def scan_eff(proba, threshold = 0.98, read_time = 8):
queue_depth = 1
detector_eff = get_eff(proba,1, read_time)
print("If no queue and p = {}% : eff = {:3f}%".format(100*proba, 100*detector_eff))
while (detector_eff < threshold and queue_depth < 50):
queue_depth += 1
detector_eff = get_eff(proba,queue_depth, read_time)
print("If {} events queue and p = {} % : eff = {:3f}%".format(queue_depth,100*proba,100*detector_eff))
scan_eff(0.1)
scan_eff(0.125)
scan_eff(0.05)
scan_eff(1)