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
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()
93 for aHit in vetoHits[10+l]:
94 detID = aHit.GetDetectorID()
95 bar = (detID%1000)
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
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
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)