-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTrackerManager.py
More file actions
150 lines (125 loc) · 5.45 KB
/
Copy pathTrackerManager.py
File metadata and controls
150 lines (125 loc) · 5.45 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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import sys
import Setup
import ROOT
import datetime
import time
import Base
import DataBase
import CalibrationManager
import Globals
from subprocess import call
# Overall management class for the autoDAQ and calibration
class TrackerManager:
def __init__(self):
self.afeSetModes = {"bias":self.setBias, "discriminator":self.setDiscriminator, "time":self.setTiming}
self.settingsModes = {"bias":self.generateBiasSettings, "discriminator":self.generateDiscriminatorSettings, "timing":self.generateTimingSettings, "injection":self.generateInjectionSettings}
self.calibrationRunDescriptions = []
self.currentRun = 0
self.dataSetNumber = time.mktime(datetime.datetime.now().timetuple())
self.rootFile = ROOT.TFile("tbias.root","recreate")
# call the generate function from the dictionary using the first entry of the settings as the type
# then filling the remaining entries of the settings list
def generateSettings(self, settings):
if not(isinstance(settings[0], str)):
print "Something wrong with the settings type"
raise TypeError
for s in range(len(settings) - 1):
setting = settings[s+1]
if not(isinstance(setting, float)):
print "Something wrong with the settings"
raise TypeError
self.settingsModes[settings[0]](settings)
# Generate the bias settings based on the start point, end point and interval
def generateBiasSettings(self, settings):
biasStep = settings[3]
biasJump = 1.0/biasStep
if (settings[1] < Globals.MIN_BIAS or settings[2] > Globals.MAX_BIAS):
print "Bias settings out of range"
raise AttributeError
for bias in [biasCount*biasStep for biasCount in range(int(settings[1]*biasJump),int(settings[2]*biasJump))]:
runSetting = CalibrationRunDescription()
runSetting.setType("bias")
runSetting.parameters["bias"] = bias
self.calibrationRunDescriptions.append(runSetting)
def generateDiscriminatorSettings(self, settings):
if (settings[1] < 0 or settings[2] > 255):
print "VTh settings out of range"
raise AttributeError
for vth in range(settings[1], settings[2], settings[3]):
runSetting = CalibrationRunDescription()
runSetting.setType("discriminator")
runSetting.parameters["vth"] = vth
self.calibrationRunDescriptions.append(runSetting)
def generateTimingSettings(self, settings):
if (settings[1] < 0 or settings[2] > 255):
print "IBt settings out of range"
raise AttributeError
for ibt in range(settings[1], settings[2], settings[3]):
runSetting = CalibrationRunDescription()
runSetting.setType("ibt")
runSetting.parameters["ibt"] = ibt
self.calibrationRunDescriptions.append(runSetting)
def generateInjectionSettings(self, settings):
if (settings[1] != 0x5 or settings[1] != 0xA or settings[1] != 0xF):
print "Level settings out of range"
raise AttributeError
if (settings[2] > 10):
print "Injection delay settings out of range"
raise AttributeError
for injectionDelay in range(settings[1]):
runSetting = CalibrationRunDescription()
runSetting.setType("injection")
runSetting.parameters["level"] = settings[1]
runSetting.parameters["delay"] = injectionDelay
self.calibrationRunDescriptions.append(runSetting)
# Call the PyEPICS functions for settings the relevant parameters using the generated settings
def setParameters(self, runDescription):
self.afeSetModes[runDescription.getType()](runDescription.getParameters())
# Activate the readout managers
def readout(self, runNumber):
print "Reading out run" + str(runNumber)
bias = self.calibrationRunDescriptions[self.currentRun].getParameters()["bias"]
#call(["/home/daq/Software/ExtApps/CAENVMElib-2-11/apps/TrDAQ",str(runNumber),str(bias)])
call(["/home/adey/MICE/TrackerCalibration/TrackerCalibration/TrackerDAQ/TrDAQ",str(runNumber),str(bias)])
self.currentRun += 1
# Write the run number and settings to the database, getting the current run number
def writeLog(self, runDescription):
dbManager = DataBase.DataBaseManager()
runNumber = dbManager.writeRunEntry(runDescription, self.dataSetNumber)
dbManager.disconnect()
del dbManager
return runNumber
def performCalibrations(self):
calibrationManager = CalibrationManager.CalibrationManager()
calibrationManager.setupDataSet(self.dataSetNumber)
calibrationManager.calibrate(self.calibrationRunDescriptions[0].getType())
# def engage(self):
def automate(self):
for runDescription in self.calibrationRunDescriptions:
self.setParameters(runDescription)
runNumber = self.writeLog(runDescription)
self.readout(runNumber)
self.performCalibrations()
def setBias(self, biasParameters):
print "Setting with " + str(biasParameters["bias"])
def setDiscriminator(self):
pass
def setTiming(self):
pass
class CalibrationRunDescription:
def __init__(self):
self.type = "NULL"
self.parameterSelections = {"bias":self.getBiasParameters}
self.parameters = {"runNumber":-1, "biasCalibrationTag":-1, "discriminatorCalibrationTag":-1, "bias":00, "vth":150, "vref":150, "ibt":80, "injectionLevel":0x0, "injectionDelay":0x0}
def setType(self, type):
self.type = type
def getType(self):
return self.type
def getAllParameters(self):
return self.parameters
def getParameters(self):
return self.parameterSelections[self.type]()
def getBiasParameters(self):
return {"tag":self.parameters["biasCalibrationTag"], "bias":self.parameters["bias"] }
def getDiscriminatorParameters(self):
return { "tag":self.parameters["discriminatorCalibrationTag"], "vth":self.parameters["vth"], "vref":self.parameters["vref"] }