SND@LHC Software
Loading...
Searching...
No Matches
vetoTimeCalibration.vetoTDCplaneCalibration Class Reference
Inheritance diagram for vetoTimeCalibration.vetoTDCplaneCalibration:
Collaboration diagram for vetoTimeCalibration.vetoTDCplaneCalibration:

Public Member Functions

 Init (self, options, monitor)
 
 ExecuteEvent (self, event)
 
 minimize (self)
 
 Finalize (self)
 

Public Attributes

 M
 
 minChannels
 
 tag
 
 xCheck
 
 nbars
 
 tdcVetoCalib
 
 tdcVetoPlaneCalib
 

Detailed Description

Definition at line 25 of file vetoTimeCalibration.py.

Member Function Documentation

◆ ExecuteEvent()

vetoTimeCalibration.vetoTDCplaneCalibration.ExecuteEvent (   self,
  event 
)

Definition at line 60 of file vetoTimeCalibration.py.

60 def ExecuteEvent(self,event):
61 h = self.M.h
62 s = 1
63 vetoHits = {10:[],11:[]}
64 for aHit in event.Digi_MuFilterHits:
65 if not aHit.isValid(): continue
66 detID = aHit.GetDetectorID()//1000
67 if not detID<20: continue
68 vetoHits[detID].append(aHit)
69 if not(len(vetoHits[10])==1) and not(len(vetoHits[11])==1): return
70 for aTrack in event.Reco_MuonTracks:
71 if not aTrack.GetUniqueID()==1: continue
72 tdc = {10:{},11:{}}
73 S = aTrack.getFitStatus()
74 if S.isFitConverged(): continue
75 state = aTrack.getFittedState()
76 mom = state.getMom()
77 slopeX = mom.X()/mom.Z()
78 slopeY = mom.Y()/mom.Z()
79 pos = state.getPos()
80 rc = h[detector+'trackSlopes'].Fill(slopeX*1000,slopeY*1000)
81 rc = h[detector+'trackSlopesXL'].Fill(slopeX,slopeY)
82 rc = h[detector+'trackPos'].Fill(pos.X(),pos.Y())
83 if abs(slopeX)<0.1 and abs(slopeY)<0.1: rc = h[detector+'trackPosBeam'].Fill(pos.X(),pos.Y())
84
85 if abs(mom.x()/mom.z())>0.25: continue # 4cm distance, 250mrad = 1cm
86 if mom.y()/mom.z()>0.05: continue
87
88 for l in range(2):
89 zEx = self.M.zPos['MuFilter'][1*10+l]
90 lam = (zEx-pos.z())/mom.z()
91 yEx = pos.y()+lam*mom.y()
92 xEx = pos.x()+lam*mom.x() # needed for correction of signal propagation
93 for aHit in vetoHits[10+l]:
94 detID = aHit.GetDetectorID()
95 bar = (detID%1000)
96 self.M.MuFilter.GetPosition(detID,A,B)
97 D = (A[1]+B[1])/2. - yEx
98 rc = h['exBar_'+str(l)+str(bar)].Fill(D)
99 if abs(D)<5:
100 tdc[10+l][bar] = {'L':{},'R':{}}
101 for k in range(16):
102 qdc = aHit.GetSignal(k)
103 if qdc <0: continue
104 kx = k
105 side = 'L'
106 if not k < 8 :
107 kx = k - 8
108 side = 'R'
109 cor = 0
110 if kx in self.tdcVetoCalib[s*10+l][side][bar]:
111 cor = self.tdcVetoCalib[s*10+l][side][bar][kx][0]
112 elif kx>0: print('no correction:',s,l,side,bar,kx)
113 tdc[10+l][bar][side][kx] = aHit.GetTime(k) - cor
114 if self.xCheck:
115 tdc[10+l][bar][side][kx] -= self.tdcVetoPlaneCalib[s*10+l][side][bar]
116
117 # make plane alignment
118 l0 = 0
119 l1 = 1
120 for bar in tdc[10+l0]:
121 for side in tdc[10+l0][bar]:
122 tdc0 = 0
123 n=0
124 fastTDC0 = 999.
125 for k in tdc[10+l0][bar][side]:
126 n+=1
127 tdc0+=tdc[10+l0][bar][side][k]
128 if tdc[10+l0][bar][side][k] < fastTDC0 : fastTDC0 = tdc[10+l0][bar][side][k]
129
130 if n<self.minChannels: continue
131 tdc0 = tdc0/n
132 for bar1 in [bar-1,bar,bar+1]:
133 if not bar1 in tdc[10+l1]: continue
134 if not side in tdc[10+l1][bar1]: continue
135 tdc1 = 0
136 n=0
137 fastTDC1 = 999.
138 for k in tdc[10+l1][bar1][side]:
139 n+=1
140 tdc1+=tdc[10+l1][bar1][side][k]
141 if tdc[10+l1][bar1][side][k] < fastTDC1 : fastTDC1 = tdc[10+l1][bar1][side][k]
142 if n<self.minChannels: continue
143 tdc1 = tdc1/n
144 # dt = tdc1-tdc0
145 dt = fastTDC1 - fastTDC0
146 key = self.M.sdict[s]+str(bar)+'_'+str(bar1)+side+self.tag
147 rc = h['dtBar_'+key].Fill(dt)
148
void GetPosition(Int_t id, TVector3 &vLeft, TVector3 &vRight)
Definition MuFilter.cxx:639

◆ Finalize()

vetoTimeCalibration.vetoTDCplaneCalibration.Finalize (   self)

Definition at line 200 of file vetoTimeCalibration.py.

200 def Finalize(self):
201 h = self.M.h
202 s = 1
203 h['matrix'+self.tag] = {}
204 ut.bookCanvas(h,'dummy','',900,600,1,1)
205 h['dummy'].cd()
206 for side in ['L','R']:
207 h['matrix'+self.tag][side] = {}
208 for bar in range(self.nbars):
209 h['matrix'+self.tag][side][bar] = {}
210 for bar1 in [bar-1,bar,bar+1]:
211 if bar1 < 0 or bar1 > self.nbars: continue
212 histo = h['dtBar_Veto'+str(bar)+'_'+str(bar1)+side+self.tag]
213 rc = histo.Fit('gaus','SQ')
214 h['matrix'+self.tag][side][bar][bar1] = [histo.GetMean(),histo.GetMeanError()]
215

◆ Init()

vetoTimeCalibration.vetoTDCplaneCalibration.Init (   self,
  options,
  monitor 
)

Definition at line 27 of file vetoTimeCalibration.py.

27 def Init(self,options,monitor):
28 self.M = monitor
29 h = self.M.h
30 self.minChannels = 4
31 self.tag = ""
32 self.xCheck = False
33 if options.xCheck :
34 self.xCheck = True
35 self.tag = "X"
36
37 s = 1
38 # delta T between bar i of plane 0 and bar i-1,i,i+1 of plane 1
39 l = 0
40 self.nbars = self.M.systemAndBars[s]
41 for bar in range(self.nbars):
42 ut.bookHist(h,'exBar_0'+str(bar),'ex y;dy [cm]',50,-10.,10.)
43 ut.bookHist(h,'exBar_1'+str(bar),'ex y;dy [cm]',50,-10.,10.)
44 for side in ['L','R']:
45 for bar1 in [bar-1,bar,bar+1]:
46 if bar1 < 0 or bar1 > self.nbars: continue
47 key = self.M.sdict[s]+str(bar)+'_'+str(bar1)+side+self.tag
48 ut.bookHist(h,'dtBar_'+key,'dt '+key+";dt [timestamp]",200,-1.,1.)
49 with open('tdcVetoInternalCalibration', 'rb') as fh:
50 self.tdcVetoCalib = pickle.load(fh)
51 if self.xCheck:
52 with open('tdcVetoPlaneCalibration', 'rb') as fh:
53 self.tdcVetoPlaneCalib = pickle.load(fh)
54
55 ut.bookHist(h,detector+'trackSlopes','track slope; x/z [mrad]; y/z [mrad]',1000,-100,100,1000,-100,100)
56 ut.bookHist(h,detector+'trackSlopesXL','track slope; x/z [rad]; y/z [rad]',120,-1.1,1.1,120,-1.1,1.1)
57 ut.bookHist(h,detector+'trackPos','track pos; x [cm]; y [cm]',100,-90,10.,80,0.,80.)
58 ut.bookHist(h,detector+'trackPosBeam','beam track pos slopes<0.1rad; x [cm]; y [cm]',100,-90,10.,80,0.,80.)
59

◆ minimize()

vetoTimeCalibration.vetoTDCplaneCalibration.minimize (   self)

Definition at line 149 of file vetoTimeCalibration.py.

149 def minimize(self):
150 h = self.M.h
151 s = 1
152 h['tdcCalibPlane'] = {10:{'L':{},'R':{}},11:{'L':{},'R':{}}}
153 for side in ['L','R']:
154 global X
155 X = h['matrix'][side]
156 global nbars
157 nbars = self.M.systemAndBars[s]
158 npar = nbars*2
159 ierflg = ctypes.c_int(0)
160 vstart = array('d',[0]*npar)
161 gMinuit = ROOT.TMinuit(npar)
162 gMinuit.SetFCN(FCN)
163 gMinuit.SetErrorDef(1.0)
164 gMinuit.SetMaxIterations(10000)
165 p = 0
166 err = 1E-3
167 for l in range(2):
168 for o in range(nbars):
169 name = "o"+str(10*l+o)
170 gMinuit.mnparm(p, name, vstart[p], err, 0.,0.,ierflg)
171 p+=1
172 gMinuit.FixParameter(4)
173 strat = array('d',[0])
174 gMinuit.mnexcm("SET STR",strat,1,ierflg) # 0 faster, 2 more reliable
175 gMinuit.mnexcm("SIMPLEX",vstart,npar,ierflg)
176 gMinuit.mnexcm("MIGRAD",vstart,npar,ierflg)
177 cor0 = ctypes.c_double(0)
178 ecor0 = ctypes.c_double(0)
179 cor1 = ctypes.c_double(0)
180 ecor1 = ctypes.c_double(0)
181
182 for bar in range(npar):
183 if bar<7: l=0
184 else: l=1
185 rc = gMinuit.GetParameter(bar,cor0,ecor0)
186 h['tdcCalibPlane'][10+l][side][bar-7*l] = cor0.value
187
188 for bar in range(nbars):
189 for bar1 in [bar-1,bar,bar+1]:
190 if bar1 < 0 or bar1 > nbars: continue
191 if X[bar][bar1][0]==0: continue
192 rc = gMinuit.GetParameter(bar,cor0,ecor0)
193 rc = gMinuit.GetParameter(bar1+nbars,cor1,ecor1)
194 d = X[bar][bar1][0] - (cor1.value - cor0.value)
195 print("relation between veto0 %i and veto1 %i, before correction %6.4F and after %6.4F"%(bar,bar1,X[bar][bar1][0],d))
196
197 with open('tdcVetoPlaneCalibration', 'wb') as fh:
198 pickle.dump(h['tdcCalibPlane'], fh)
199

Member Data Documentation

◆ M

vetoTimeCalibration.vetoTDCplaneCalibration.M

Definition at line 28 of file vetoTimeCalibration.py.

◆ minChannels

vetoTimeCalibration.vetoTDCplaneCalibration.minChannels

Definition at line 30 of file vetoTimeCalibration.py.

◆ nbars

vetoTimeCalibration.vetoTDCplaneCalibration.nbars

Definition at line 40 of file vetoTimeCalibration.py.

◆ tag

vetoTimeCalibration.vetoTDCplaneCalibration.tag

Definition at line 31 of file vetoTimeCalibration.py.

◆ tdcVetoCalib

vetoTimeCalibration.vetoTDCplaneCalibration.tdcVetoCalib

Definition at line 50 of file vetoTimeCalibration.py.

◆ tdcVetoPlaneCalib

vetoTimeCalibration.vetoTDCplaneCalibration.tdcVetoPlaneCalib

Definition at line 53 of file vetoTimeCalibration.py.

◆ xCheck

vetoTimeCalibration.vetoTDCplaneCalibration.xCheck

Definition at line 32 of file vetoTimeCalibration.py.


The documentation for this class was generated from the following file: