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

Public Member Functions

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

Public Attributes

 M
 
 options
 
 xCheck
 
 tag
 
 tdcVetoCalib
 

Detailed Description

Definition at line 216 of file vetoTimeCalibration.py.

Member Function Documentation

◆ ExecuteEvent()

vetoTimeCalibration.vetoTDCchannelCalibration.ExecuteEvent (   self,
  event 
)

Definition at line 238 of file vetoTimeCalibration.py.

238 def ExecuteEvent(self,event):
239 h = self.M.h
240 s = 1
241 vetoHits = {10:[],11:[]}
242 for aHit in event.Digi_MuFilterHits:
243 if not aHit.isValid(): continue
244 detID = aHit.GetDetectorID()//1000
245 if not detID<20: continue
246 vetoHits[detID].append(aHit)
247 if not(len(vetoHits[10])==1) and not(len(vetoHits[11])==1): return
248
249 for aTrack in event.Reco_MuonTracks:
250 if not aTrack.GetUniqueID()==1: continue
251 tdc = {10:{},11:{}}
252 S = aTrack.getFitStatus()
253 if S.isFitConverged(): continue
254 mom = aTrack.getFittedState().getMom()
255 pos = aTrack.getFittedState().getPos()
256
257 for l in range(2):
258 zEx = self.M.zPos['MuFilter'][1*10+l]
259 lam = (zEx-pos.z())/mom.z()
260 yEx = pos.y()+lam*mom.y()
261 xEx = pos.x()+lam*mom.x() # needed for correction of signal propagation
262 for aHit in vetoHits[10+l]:
263 detID = aHit.GetDetectorID()
264 self.M.MuFilter.GetPosition(detID,A,B)
265 D = (A[1]+B[1])/2. - yEx
266 if abs(D)<5:
267 bar = (detID%1000)
268 tdc[10+l][bar] = {'L':{},'R':{}}
269 for k in range(16):
270 qdc = aHit.GetSignal(k)
271 if qdc <0: continue
272 kx = k
273 side = 'L'
274 if not k < 8 :
275 kx = k - 8
276 side = 'R'
277 tdc[10+l][bar][side][kx] = aHit.GetTime(k)
278 if self.xCheck:
279 cor = 0
280 if kx in self.tdcVetoCalib[s*10+l][side][bar]:
281 cor = self.tdcVetoCalib[s*10+l][side][bar][kx][0]
282 tdc[10+l][bar][side][kx] -= cor
283 # make internal alignment
284 for l in range(2):
285 for bar in tdc[10+l]:
286 for side in tdc[10+l][bar]:
287 if not refChannel in tdc[10+l][bar][side]: continue
288 t0 = tdc[10+l][bar][side][refChannel]
289 for k in tdc[10+l][bar][side]:
290 dt = tdc[10+l][bar][side][k]-t0
291 key = self.M.sdict[s]+str(10+l)+'_'+str(bar)+side+str(k)+self.tag
292 rc = h['dtChan_'+key].Fill(dt)
293
void GetPosition(Int_t id, TVector3 &vLeft, TVector3 &vRight)
Definition MuFilter.cxx:639

◆ Finalize()

vetoTimeCalibration.vetoTDCchannelCalibration.Finalize (   self)

Definition at line 294 of file vetoTimeCalibration.py.

294 def Finalize(self):
295 h = self.M.h
296 s = 1
297 h['tdcCalib'] = {10:{'L':{},'R':{}},11:{'L':{},'R':{}}}
298 ut.bookCanvas(h,'dummy','',900,600,1,1)
299 h['dummy'].cd()
300 for l in range(self.M.systemAndPlanes[s]):
301 for side in ['L','R']:
302 tname = 'v'+str(l)+side+self.tag
303 ut.bookCanvas(h,tname,tname,2048,2048,8,8)
304 for bar in range(self.M.systemAndBars[s]):
305 h['tdcCalib'][s*10+l][side][bar] = {}
306 for k in range(0,8):
307 h[tname].cd(bar*8+k+1)
308 key = self.M.sdict[s]+str(10+l)+'_'+str(bar)+side+str(k)+self.tag
309 dt = h['dtChan_'+key]
310 if not k == refChannel:
311 rc = dt.Fit('gaus','SQ')
312 result = rc.Get()
313 if result: h['tdcCalib'][s*10+l][side][bar][k]=[result.Parameter(1),result.Parameter(2)]
314 h['dtChan_'+key].Draw()
315
316 ut.bookHist(h,'TDCshiftsMean'+self.tag,'TDCshiftsMean '+self.tag,100,-0.2,0.2)
317 ut.bookHist(h,'TDCshiftsSigma'+self.tag,'TDCshiftsSigma '+self.tag,100,0.,0.25)
318 for l in h['tdcCalib']:
319 for side in h['tdcCalib'][l]:
320 for bar in h['tdcCalib'][l][side]:
321 for k in h['tdcCalib'][l][side][bar]:
322 if k==refChannel: continue
323 rc = h['TDCshiftsMean'+self.tag].Fill(h['tdcCalib'][l][side][bar][k][0])
324 rc = h['TDCshiftsSigma'+self.tag].Fill(h['tdcCalib'][l][side][bar][k][1])
325 ut.bookCanvas(h,'ChannelSummary'+self.tag,'Channel Summary',1200,600,2,1)
326 tc = h['ChannelSummary'+self.tag].cd(1)
327 h['TDCshiftsMean'+self.tag].Draw()
328 tc = h['ChannelSummary'+self.tag].cd(2)
329 h['TDCshiftsSigma'+self.tag].Draw()
330
331 if not self.xCheck:
332 with open('tdcVetoInternalCalibration', 'wb') as fh:
333 pickle.dump(h['tdcCalib'], fh)
334 ut.writeHists(h,'tdcCalib.root')
335 else:
336 ut.writeHists(h,'tdcCalibCor.root')
337

◆ Init()

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

Definition at line 218 of file vetoTimeCalibration.py.

218 def Init(self,options,monitor):
219 self.M = monitor
220 self.options = options
221 self.xCheck = False
222 self.tag = ""
223 if options.xCheck :
224 self.xCheck = True
225 self.tag = "X"
226 h = self.M.h
227 s = 1
228 for l in range(self.M.systemAndPlanes[s]):
229 for bar in range(self.M.systemAndBars[s]):
230 for side in ['L','R']:
231 for k in range(8):
232 key = self.M.sdict[s]+str(s*10+l)+'_'+str(bar)+side+str(k)+self.tag
233 ut.bookHist(h,'dtChan_'+key,'dt '+key+";dt [timestamp]",200,-1.,1.)
234 if self.xCheck:
235 with open('tdcVetoInternalCalibration', 'rb') as fh:
236 self.tdcVetoCalib = pickle.load(fh)
237

Member Data Documentation

◆ M

vetoTimeCalibration.vetoTDCchannelCalibration.M

Definition at line 219 of file vetoTimeCalibration.py.

◆ options

vetoTimeCalibration.vetoTDCchannelCalibration.options

Definition at line 220 of file vetoTimeCalibration.py.

◆ tag

vetoTimeCalibration.vetoTDCchannelCalibration.tag

Definition at line 222 of file vetoTimeCalibration.py.

◆ tdcVetoCalib

vetoTimeCalibration.vetoTDCchannelCalibration.tdcVetoCalib

Definition at line 236 of file vetoTimeCalibration.py.

◆ xCheck

vetoTimeCalibration.vetoTDCchannelCalibration.xCheck

Definition at line 221 of file vetoTimeCalibration.py.


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