1
# Author: Christopher Tunnell <tunnell@hep.uchicago.edu>
6
from src.ReadGenericCalibration import *
7
from src.region import *
9
class GetScans(ReadGenericCalibration):
10
"Grab the graph(s) of CIS scan(s) from the CIS calibration ntuple"
12
def __init__(self, processingDir='/afs/cern.ch/user/t/tilecali/w0/ntuples/cis', getScans=True, getScansRMS=False, all=False):
14
self.processingDir = processingDir
15
self.getScans = getScans
16
self.getScansRMS = getScansRMS
17
self.ftDict = {} # Used for linear constant. Each element is a [TTree, TFile]
20
def get_index(self, ros, mod, chan, gain):
26
def ProcessStart(self):
29
def ProcessStop(self):
30
print 'Grabbed %d scans...' % self.n
32
def ProcessRegion(self, region):
34
if 'gain' not in region.GetHash():
38
foundEventToProcess = False
39
processRequest = False
41
for event in region.GetEvents():
42
if event.runType == 'CIS':
43
foundEventToProcess = True
45
if (event.data.has_key('moreInfo') and event.data['moreInfo']) or self.all:
50
if event.runNumber and\
51
not self.ftDict.has_key(event.runNumber):
52
f, t = self.getFileTree('tileCalibCIS_%s_CIS.0.root' % event.runNumber, 'h3000')
54
if [f, t] == [None, None]:
55
f, t = self.getFileTree('tileCalibCIS_%s_0.root' % event.runNumber, 'h3000')
57
if [f, t] == [None, None]:
58
f, t = self.getFileTree('tileCalibTool_%s_CIS.0.root' % event.runNumber, 'h3000')
60
if [f, t] == [None, None]:
61
if event.runNumber not in self.badRuns:
62
print "Error: ReadCISFile couldn't load run", event.runNumber, "..."
63
self.badRuns.add(event.runNumber)
66
scans = f.Get('cisScans')
67
scans_rms = f.Get('cisScansRMS')
68
if (self.getScans and not scans) or\
69
(self.getScansRMS and not scans_rms) or\
70
(self.getScans and scans.GetName() != 'TMap') or\
71
(self.getScansRMS and scans_rms.GetName() != 'TMap'):
72
if event.runNumber not in self.badRuns:
73
print 'GetScans: Could not find scans. Maybe use ReadOldCISFile?'
74
self.badRuns.add(event.runNumber)
77
self.ftDict[event.runNumber] = [f, t, scans, scans_rms]
79
if not foundEventToProcess:
82
# I used the Upward Lowenheim-Skolem Theorem to determine the validity
83
# of this statement. Actually, not really. :)
84
if not processRequest and not self.all:
92
for event in region.GetEvents():
93
if event.runType == 'CIS':
94
# Load up the tree, file and scans for this run
95
if not self.ftDict.has_key(event.runNumber):
98
[f, t, scans, scans_rms] = self.ftDict[event.runNumber]
101
x,y,z,w = region.GetNumber()
102
key = 'scan%d_%d_%d_%d' % (x, y-1, z, w)
103
if self.getScans and scans:
104
obj = scans.GetValue(key)
107
#gscan.SetFillColor(0)
108
#gscan.SetLineWidth(6)
109
gscan.GetXaxis().SetTitle("Injected Charge (pC)")
110
gscan.GetXaxis().CenterTitle(True)
111
gscan.GetYaxis().SetTitle("Fit CIS Amplitude (ADC counts)")
112
gscan.SetMarkerSize(1.6)
113
gscan.SetMarkerStyle(20)
114
if gscan.GetFunction("fslope"):
115
gscan.GetFunction("fslope").SetLineWidth(5)
116
gscan.GetFunction("fslope").SetLineColor(2)
118
event.data['scan'] = gscan
120
if self.getScansRMS and scans_rms:
121
event.data['scan_rms'] = (scans_rms.GetValue(key)).Clone()
125
region.SetEvents(newevents)