-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmon_rofailurerate.py
More file actions
100 lines (90 loc) · 3.2 KB
/
mon_rofailurerate.py
File metadata and controls
100 lines (90 loc) · 3.2 KB
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/usr/bin/env python3
from iceboot.iceboot_session import getParser, startIcebootSession
from iceboot.test_waveform import parseTestWaveform, applyPatternSubtraction
import os,sys
import numpy as np
import scope
import tables
import time
import datetime
import signal
from addparser_iceboot import AddParser
from utils import pathSetting, flashFPGA
from wfreadout import beginWaveformStream
def main(parser):
parser.add_option("--nowfs",action="store_true",default=False)
parser.add_option("--grad",action="store_true",default=False)
(options, args) = parser.parse_args()
path = pathSetting(options,'ROFailRate',True)
session = startIcebootSession(parser)
loadfw = flashFPGA(session)
if loadfw == 1:
sys.exit()
readouts = []
intervals = []
interval = 0
threshold = int(options.threshold)
currentbaseline = 0
def signal_handler(*args):
print('\nEnding waveform stream...')
session.endStream()
print('Done')
session.disableHV(int(options.channel))
with open(f'{path}/events.txt','a') as f:
f.write(f'{interval}\n')
with open(f'{path}/baseline.txt','a') as f:
f.write(f'{currentbaseline}\n')
if options.grad:
with open(f'{path}/setthres.txt','a') as f:
f.write(f'{threshold}\n')
if not options.nowfs:
np.save(f'{path}/readouts.npy',np.array(readouts))
np.save(f'{path}/intervals.npy',np.array(intervals))
sys.exit(0)
signal.signal(signal.SIGINT,signal_handler)
mode = beginWaveformStream(session,options)
print(f'Threshold setting: {threshold}')
while(True):
print('\rEvent: %d' % interval,end='')
readout = []
try:
if options.block:
readout = session.readWFBlock()
else:
readout = [parseTestWaveform(session.readWFMFromStream())]
except IOError:
print('\nTimeout! Ending waveform stream and re-flasing the FPGA.')
print(f'The baseline was {currentbaseline}')
session.endStream()
intervals.append(interval)
with open(f'{path}/events.txt','a') as f:
f.write(f'{interval}\n')
with open(f'{path}/baseline.txt','a') as f:
f.write(f'{currentbaseline}\n')
interval = 0
loadfw = flashFPGA(session)
if loadfw == 1:
break
if options.grad:
with open(f'{path}/setthres.txt','a') as f:
f.write(f'{threshold}\n')
threshold += 1
mode = beginWaveformStream(session,options,threshold)
print(f'Threshold setting: {threshold}')
continue
for data in readout:
if data is None:
continue
wf = data['waveform']
currentbaseline = np.mean(wf)
if not options.nowfs:
readouts.append(wf)
interval += 1
if not options.nowfs:
np.save(f'{path}/readouts.npy',np.array(readouts))
np.save(f'{path}/intervals.npy',np.array(intervals))
return
if __name__=='__main__':
parser = getParser()
AddParser(parser)
main(parser)