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

Public Member Functions

 Init (self, options, monitor)
 
 ExecuteEvent (self, event)
 
 beamSpot (self, event)
 
 Plot (self)
 

Public Attributes

 M
 
 trackTask
 
 OT
 
 mufi_vsignal
 
 xing
 
 listOfHits
 

Static Public Attributes

list listSipmTypes = ['L','R','S']
 
dict plane_label = {}
 
 q05 = np.array([0.5])
 
dict signal_attributes = {}
 
int s = 1
 
int l = 1
 
int Xaxis_bin = 1
 
 tc = h[tag+'signalUSVeto'+xi].cd(l)
 
 rc = h[detector+tag+'sig'+side+'_'+str( s*10+plane)+xi]
 
 med = np.array([0.])
 
list signal_medians = [ROOT.TGraphErrors(), ROOT.TGraphErrors(), ROOT.TGraphErrors()]
 
list signal_maxima = [ROOT.TGraphErrors(), ROOT.TGraphErrors(), ROOT.TGraphErrors()]
 
list signal_overflow = [ROOT.TGraphErrors(), ROOT.TGraphErrors(), ROOT.TGraphErrors()]
 
dict Area = {}
 
dict point_count = {}
 
list graph_list = [signal_medians, signal_maxima, signal_overflow]
 
 xAxis = graph.GetXaxis()
 
 ymin = graph.GetHistogram().GetMinimum()
 
 ymax = graph.GetHistogram().GetMaximum()
 
 bin_index = xAxis.FindBin(item)
 
 grid = ROOT.TLine(graph.GetPointX(index), ymin, graph.GetPointX(index), ymax)
 
 tick = ROOT.TLine(graph.GetPointX(index), ymin, graph.GetPointX(index), ymin + 0.03*(ymax-ymin))
 
str opt = ""
 
 y = self.M.systemAndPlanes[s]
 
int maxN = 0
 
str hname = detector+'chanmult_'+str(s*1000+100*l+bar)+xi
 
 nmax = h[hname].GetBinContent(h[hname].GetMaximumBin())
 
 maxN
 
int i = l+1 + (self.M.systemAndBars[s]-bar-1)*self.M.systemAndPlanes[s]
 
int ix = bar//15 + 1 + (l//2)*4
 
int iy = 15 - bar%15
 
int counter = 1
 
 subdir
 
str canvas = detector+'signalsSummary'+xi
 
 canvas
 
 xi
 
 nh
 
 nv
 
str t = detector+"residualsVs"+p.replace('res','').replace('_','')+xi
 
 hname = detector+p+sdict[s]+str(s*10+l)+xi
 
 fitResult = rc.Get()
 
 stats = h[hname+'proj'].FindObject('stats')
 

Detailed Description

Definition at line 17 of file Mufi_monitoring.py.

Member Function Documentation

◆ beamSpot()

Mufi_monitoring.Mufi_hitMaps.beamSpot (   self,
  event 
)

Definition at line 317 of file Mufi_monitoring.py.

317 def beamSpot(self,event):
318 if not self.trackTask: return
319 h = self.M.h
320 W = self.M.Weight
321 Xbar = -10
322 Ybar = -10
323 for aTrack in self.M.Reco_MuonTracks:
324 if not aTrack.GetUniqueID()==3: continue
325 state = aTrack.getFittedState()
326 pos = state.getPos()
327 rc = h[detector+'bs'].Fill(pos.x(),pos.y(),W)
328 mom = state.getMom()
329 slopeX= mom.X()/mom.Z()
330 slopeY= mom.Y()/mom.Z()
331 pos = state.getPos()
332
333 self.M.fillHist2(detector+'slopes',slopeX,slopeY)
334 self.M.fillHist2(detector+'trackPos',pos.X(),pos.Y())
335 if abs(slopeX)<0.1 and abs(slopeY)<0.1: self.M.fillHist2(detector+'trackPosBeam',pos.X(),pos.Y())
336 if not Ybar<0 and not Xbar<0 and abs(slopeY)<0.01: self.M.fillHist2(detector+'bsDS',Xbar,Ybar)
337

◆ ExecuteEvent()

Mufi_monitoring.Mufi_hitMaps.ExecuteEvent (   self,
  event 
)

Definition at line 143 of file Mufi_monitoring.py.

143 def ExecuteEvent(self,event):
144 systemAndPlanes =self.M.systemAndPlanes
145 sdict = self.M.sdict
146 h = self.M.h
147 mult = {}
148 planes = {}
149 for i in self.listOfHits: self.listOfHits[i].clear()
150 for s in systemAndPlanes:
151 for l in range(systemAndPlanes[s]): mult[s*10+l]=0
152
153 self.beamSpot(event)
154 withDSTrack = False
155 for aTrack in self.M.Reco_MuonTracks:
156 if aTrack.GetUniqueID()==3: withDSTrack = True
157
158 for aHit in event.Digi_MuFilterHits:
159 Minfo = self.M.MuFilter_PlaneBars(aHit.GetDetectorID())
160 s,l,bar = Minfo['station'],Minfo['plane'],Minfo['bar']
161 nSiPMs = aHit.GetnSiPMs()
162 nSides = aHit.GetnSides()
163 for c in aHit.GetAllSignals(False,False):
164 if aHit.isMasked(c.first):
165 channel = bar*nSiPMs*nSides + c.first
166 self.M.fillHist1(detector+'Xhit_'+str(s)+str(l),channel)
167
168 if not aHit.isValid(): continue
169 mult[s*10+l]+=1
170 key = s*100+l
171 if not key in planes: planes[key] = {}
172 sumSignal = self.M.map2Dict(aHit,'SumOfSignals')
173 planes[key][bar] = [sumSignal['SumL'],sumSignal['SumR']]
174# check left/right
175 allChannels = self.M.map2Dict(aHit,'GetAllSignals')
176 for c in allChannels:
177 self.listOfHits[s].append(allChannels[c])
178 Nleft,Nright,Sleft,Sright = 0,0,0,0
179 # count the small SiPMs seperately
180 NSmallLeft, NSmallRight = 0,0
181 for c in allChannels:
182 if nSiPMs > c: # left side
183 Nleft+=1
184 if s==2 and (c==2 or c==5): NSmallLeft+=1
185 Sleft+=allChannels[c]
186 h[detector+'chanActiveLeft_'+str(s*10+l)].Fill(c, bar)
187 else:
188 Nright+=1
189 if s==2 and (c==10 or c==13): NSmallRight+=1
190 Sright+=allChannels[c]
191 h[detector+'chanActiveRight_'+str(s*10+l)].Fill(c-nSiPMs, bar)
192 self.M.fillHist1(detector+'chanmult_'+str(s*1000+100*l+bar),Nleft)
193 self.M.fillHist1(detector+'chanmult_'+str(s*1000+100*l+bar),10+Nright)
194 h[detector+'chanNfiredLeft_'+str(s*10+l)].Fill(Nleft-NSmallLeft, bar)
195 h[detector+'chanNfiredRight_'+str(s*10+l)].Fill(Nright-NSmallRight, bar)
196 if not aHit.isVertical(): # vertical DS plane is read out only on one side
197 self.M.fillHist2(detector+'leftvsright_'+str(s),Nleft,Nright)
198 self.M.fillHist2(detector+'leftvsright_signal_'+str(s),Sleft,Sright)
199#
200 for c in allChannels:
201 channel = bar*nSiPMs*nSides + c
202 self.M.fillHist1(detector+'hit_'+str(s)+str(l),int(channel))
203 self.M.fillHist1(detector+'bar_'+str(s)+str(l),bar)
204 if s==2 and self.M.smallSiPMchannel(c) :
205 self.M.fillHist1(detector+'sigS_'+str(s)+str(l),allChannels[c])
206 if withDSTrack: self.M.fillHist1(detector+'TsigS_'+str(s)+str(l),allChannels[c])
207 elif c<nSiPMs:
208 self.M.fillHist1(detector+'sigL_'+str(s)+str(l),allChannels[c])
209 if withDSTrack: self.M.fillHist1(detector+'TsigL_'+str(s)+str(l),allChannels[c])
210 else :
211 self.M.fillHist1(detector+'sigR_'+str(s)+str(l),allChannels[c])
212 if withDSTrack: self.M.fillHist1(detector+'sigR_'+str(s)+str(l),allChannels[c])
213 self.M.fillHist1(detector+'sig_'+str(s)+str(l),allChannels[c])
214 if withDSTrack: self.M.fillHist1(detector+'sig_'+str(s)+str(l),allChannels[c])
215 allChannels.clear()
216#
217 # noise event with many hits in one plane
218 onePlane = []
219 for x in mult:
220 if mult[x]>3: onePlane.append(x)
221 if len(onePlane)==1:
222 self.M.fillHist1(detector+'Noise',onePlane[0])
223
224#
225 for s in self.listOfHits:
226 nhits = len(self.listOfHits[s])
227 qcdsum = 0
228 for i in range(nhits):
229 self.M.fillHist2(sdict[s]+'Mult',nhits, self.listOfHits[s][i])
230 for s in systemAndPlanes:
231 for l in range(systemAndPlanes[s]):
232 self.M.fillHist1(detector+'hitmult_'+str(s*10+l),mult[s*10+l])
233# mufi residuals with scifi tracks
234 for aTrack in self.M.Reco_MuonTracks:
235 if not aTrack.GetUniqueID()==1: continue
236 fitStatus = aTrack.getFitStatus()
237 if not fitStatus.isFitConverged(): continue
238 posMom = {}
239 fstate = aTrack.getFittedState()
240 posMom['first'] = [fstate.getPos(),fstate.getMom()]
241 # fstate = aTrack.getFittedState(aTrack.getNumPointsWithMeasurement()-1) does not make a difference
242 posMom['last'] = [fstate.getPos(),fstate.getMom()]
243 rc = self.trackTask.trackDir(aTrack)
244 scifi_time0 = rc[2]
245 pos,mom = posMom['first']
246 lam = (self.trackTask.firstScifi_z-pos.z())/mom.z()
247 # nominal first position
248 pos1 = ROOT.TVector3(pos.x()+lam*mom.x(),pos.y()+lam*mom.y(),self.trackTask.firstScifi_z)
249 dsHitTimes = []
250 for aHit in event.Digi_MuFilterHits:
251 if not aHit.isValid(): continue
252 detID = aHit.GetDetectorID()
253 Minfo = self.M.MuFilter_PlaneBars(detID)
254 s,l,bar = Minfo['station'],Minfo['plane'],Minfo['bar']
255 self.M.MuFilter.GetPosition(detID,A,B)
256# calculate DOCA
257 if s==1: pos,mom = posMom['first']
258 else: pos,mom = posMom['last']
259 zEx = self.M.zPos['MuFilter'][s*10+l]
260 lam = (zEx-pos.z())/mom.z()
261 xEx,yEx = pos.x()+lam*mom.x(),pos.y()+lam*mom.y()
262 pq = A-pos
263 uCrossv= (B-A).Cross(mom)
264 doca = pq.Dot(uCrossv)/uCrossv.Mag()
265 self.M.fillHist2(detector+'resX_'+sdict[s]+str(s*10+l),doca/u.cm,xEx)
266 self.M.fillHist2(detector+'resY_'+sdict[s]+str(s*10+l),doca/u.cm,yEx)
267# calculate time difference for DS
268 if (s==3 and abs(doca)<2.5*u.cm) or (s==1 and abs(doca)<6*u.cm):
269 # horizontal layers have left and right sipms
270 if aHit.isVertical(): nmax = 1
271 else: nmax = 2
272 barMult = 2
273 if s==1:
274 nmax = 16
275 barMult = 16
276 for i in range(nmax):
277 if aHit.GetTime(i) < 0: continue # not valid time
278 posM = ROOT.TVector3(xEx,yEx,zEx)
279 # correct for flight length
280 trajLength = (posM-pos1).Mag()
281 # correct for signal speed, need to know left or right
282 if s==3:
283 if i==1: X = B-posM # B is right only horizontal planes have a second readout
284 else: X = A-posM # A is on the left, or top for vertical planes
285 if s==1:
286 if i<8: X = A-posM
287 else: X = B-posM
288 L = X.Mag()/self.mufi_vsignal
289 tM = aHit.GetTime(i)*self.M.TDC2ns - L - trajLength/u.speedOfLight
290 self.M.fillHist2(detector+'dT_'+str(s*10+l),tM-scifi_time0,bar*barMult+i)
291 # use corrected time
292 if s==3:
293 corTime = self.M.MuFilter.GetCorrectedTime(detID, i, aHit.GetTime(i)*self.M.TDC2ns, X.Mag())
294 tM = corTime - trajLength/u.speedOfLight
295 self.M.fillHist2(detector+'dTcor_'+str(s*10+l),tM-scifi_time0,bar*barMult+i)
296 if s==3 and l==2:
297 timeLeft = aHit.GetTime(0)
298 timeRight = aHit.GetTime(1)
299 if timeLeft>0 and timeRight>0:
300 dL = abs(A[0]-B[0])
301 avTime = self.M.MuFilter.GetCorrectedTime(detID, 0, timeLeft*self.M.TDC2ns,0) + \
302 self.M.MuFilter.GetCorrectedTime(detID, 1, timeRight*self.M.TDC2ns,0)
303 dsHitTimes.append( (avTime-abs(A[0]-B[0])/15)/2) # L/2 / 15cm/ns
304# fill histograms with time difference of earliest scifi hit in station i and last horizontal DS time, average left and right
305 if len(dsHitTimes)>0:
306 dsHitTimes.sort()
307 scifiHitTimes = {1:[],2:[],3:[],4:[],5:[]}
308 for scifiHit in event.Digi_ScifiHits:
309 detID = scifiHit.GetDetectorID()
310 s = int(scifiHit.GetDetectorID()/1000000)
311 scifiHitTimes[s].append(self.M.Scifi.GetCorrectedTime(detID,scifiHit.GetTime()*self.M.TDC2ns,0))
312 for s in scifiHitTimes:
313 if len(scifiHitTimes[s])<1: continue
314 scifiHitTimes[s].sort()
315 deltaT = dsHitTimes[0] - scifiHitTimes[s][0] - (self.M.zPos['MuFilter'][34]-self.M.zPos['Scifi'][s*10])/u.speedOfLight
316 self.M.fillHist1('deltaTScifiMufiHit_'+str(s),deltaT)
void GetPosition(Int_t id, TVector3 &vLeft, TVector3 &vRight)
Definition MuFilter.cxx:639
Float_t GetCorrectedTime(Int_t id, Int_t c, Double_t t, Double_t L)
Definition MuFilter.cxx:579
Double_t GetCorrectedTime(Int_t fDetectorID, Double_t rawTime, Double_t L)
Definition Scifi.cxx:517

◆ Init()

Mufi_monitoring.Mufi_hitMaps.Init (   self,
  options,
  monitor 
)

Definition at line 26 of file Mufi_monitoring.py.

26 def Init(self,options,monitor):
27 self.M = monitor
28 sdict = self.M.sdict
29 h = self.M.h
30 run = ROOT.FairRunAna.Instance()
31 self.trackTask = self.M.trackTask
32 if not self.trackTask: self.trackTask = run.GetTask('houghTransform')
33 ioman = ROOT.FairRootManager.Instance()
34 self.OT = ioman.GetSink().GetOutTree()
35 self.mufi_vsignal = self.M.Scifi.GetConfParF("Scifi/signalSpeed")
36
37 channelsPerSystem = {1:self.M.MuFilter.GetConfParI("MuFilter/VetonSiPMs"),
38 2:self.M.MuFilter.GetConfParI("MuFilter/UpstreamnSiPMs"),
39 3:self.M.MuFilter.GetConfParI("MuFilter/DownstreamnSiPMs")}
40
41# type of crossing, check for b1only,b2nob1,nobeam
42 if self.M.fsdict or self.M.hasBunchInfo: self.xing = {'':True,'B1only':False,'B2noB1':False,'noBeam':False}
43 else: self.xing = {'':True}
44 for xi in self.xing:
45 ut.bookHist(h,detector+'Noise'+xi,'events with hits in single plane; s*10+l;',40,0.5,39.5)
46 for s in monitor.systemAndPlanes:
47 ut.bookHist(h,sdict[s]+'Mult'+xi,'QDCs vs nr hits; #hits; QDC [a.u.]',200,0.,800.,200,0.,300.)
48 for l in range(monitor.systemAndPlanes[s]):
49 ut.bookHist(h,detector+'hitmult_'+str(s*10+l)+xi,'hit mult / plane '+sdict[s]+str(l)+'; #hits',61,-0.5,60.5)
50 ut.bookHist(h,detector+'hit_'+str(s*10+l)+xi,'channel map / plane '+sdict[s]+str(l)+'; #channel',160,-0.5,159.5)
51 ut.bookHist(h,detector+'Xhit_'+str(s*10+l)+xi,'Xchannel map / plane '+sdict[s]+str(l)+'; #channel',160,-0.5,159.5)
52
53 # Only large SiPMs will be monitored.
54 # Small SiPMs suffer from large time offsets extending to other events!
55 note = ''
56 NSmallSiPMs = 0
57 if s==2:
58 note = ', large only'
59 NSmallSiPMs = 2
60 ut.bookHist(h,detector+'chanActiveRight_'+str(s*10+l),
61 sdict[s]+' '+str(l)+'R channel hit multiplicity; #channel; bar',
62 channelsPerSystem[s],-0.5,channelsPerSystem[s]-0.5,
63 monitor.systemAndBars[s],-0.5,monitor.systemAndBars[s]-0.5)
64 ut.bookHist(h,detector+'chanNfiredRight_'+str(s*10+l),
65 sdict[s]+' '+str(l)+'R number of fired channels '+note+'; N fired channels; bar',
66 channelsPerSystem[s]+1-NSmallSiPMs,-0.5,channelsPerSystem[s]+0.5-NSmallSiPMs,
67 monitor.systemAndBars[s],-0.5,monitor.systemAndBars[s]-0.5)
68 side = 'L'
69 if (s==1 and l==2) or (s==3 and (l%2==1 or l==6)):
70 side = 'T'
71 ut.bookHist(h,detector+'chanActiveLeft_'+str(s*10+l),
72 sdict[s]+' '+str(l)+side+' channel hit multiplicity; #channel; bar',
73 channelsPerSystem[s],-0.5,channelsPerSystem[s]-0.5,
74 monitor.systemAndBars[s],-0.5,monitor.systemAndBars[s]-0.5)
75 ut.bookHist(h,detector+'chanNfiredLeft_'+str(s*10+l),
76 sdict[s]+' '+str(l)+side+' number of fired channels '+note+'; N fired channels; bar',
77 channelsPerSystem[s]+1-NSmallSiPMs,-0.5,channelsPerSystem[s]+0.5-NSmallSiPMs,
78 monitor.systemAndBars[s],-0.5,monitor.systemAndBars[s]-0.5)
79
80 if s==3:
81 ut.bookHist(h,detector+'bar_'+str(s*10+l)+xi,'bar map / plane '+sdict[s]+str(l)+'; bar',60,-0.5,59.5)
82 ut.bookHist(h,detector+'dT_'+str(s*10+l)+xi,'dT with respect to first scifi '+sdict[s]+str(l)+'; dt [ns] ;# bar + channel', 100,-25.,5.,120,-0.5,2*60-0.5)
83 ut.bookHist(h,detector+'dTcor_'+str(s*10+l)+xi,'dTcor with respect to first scifi '+sdict[s]+str(l)+'; dt [ns] ;# bar + channel',100,-25.,5.,120,-0.5,2*60-0.5)
84 if l == 4:
85 for ss in range(1,6):
86 ut.bookHist(h,'deltaTScifiMufiHit_'+str(ss)+xi,'deltaT scifi earliest hit versus DS hit 2H',200,-25.,25.)
87 else:
88 ut.bookHist(h,detector+'bar_'+str(s*10+l)+xi,'bar map / plane '+sdict[s]+str(l)+'; bar',10,-0.5,9.5)
89 if s==1:
90 ut.bookHist(h,detector+'dT_'+str(s*10+l)+xi,'dT with respect to first scifi '+sdict[s]+str(l)+'; dt [ns] ;# bar + channel', 100,-25.,5.,120,-0.5,2*8*7-0.5)
91 ut.bookHist(h,detector+'dTcor_'+str(s*10+l)+xi,'dTcor with respect to first scifi '+sdict[s]+str(l)+'; dt [ns] ;# bar + channel',100,-25.,5.,120,-0.5,2*8*7-0.5)
92 ut.bookHist(h,detector+'sig_'+str(s*10+l)+xi,'signal / plane '+sdict[s]+str(l)+'; QDC [a.u.]',200,0.0,200.)
93 if s==2:
94 ut.bookHist(h,detector+'sigS_'+str(s*10+l)+xi,'signal / plane '+sdict[s]+str(l)+'; QDC [a.u.]',200,0.0,200.)
95 ut.bookHist(h,detector+'TsigS_'+str(s*10+l)+xi,'signal / plane '+sdict[s]+str(l)+'; QDC [a.u.]',200,0.0,200.)
96 tagL = US_gel_dict[s*10+l][0]+": "
97 tagR = US_gel_dict[s*10+l][1]+": "
98 else:
99 tagL = ""
100 tagR = ""
101 histo_title_helper = 'signal / plane '+sdict[s]+str(l)
102 ut.bookHist(h,detector+'sigL_'+str(s*10+l)+xi,tagL+histo_title_helper+'; QDC [a.u.]',200,0.0,200.)
103 ut.bookHist(h,detector+'sigR_'+str(s*10+l)+xi,tagR+histo_title_helper+'; QDC [a.u.]',200,0.0,200.)
104 ut.bookHist(h,detector+'Tsig_'+str(s*10+l)+xi,histo_title_helper+'; QDC [a.u.]',200,0.0,200.)
105 ut.bookHist(h,detector+'TsigL_'+str(s*10+l)+xi,tagL+histo_title_helper+'; QDC [a.u.]',200,0.0,200.)
106 ut.bookHist(h,detector+'TsigR_'+str(s*10+l)+xi,tagR+histo_title_helper+'; QDC [a.u.]',200,0.0,200.)
107 # not used currently?
108 ut.bookHist(h,detector+'occ_'+str(s*10+l)+xi,'channel occupancy '+sdict[s]+str(l),100,0.0,200.)
109 ut.bookHist(h,detector+'occTag_'+str(s*10+l)+xi,'channel occupancy '+sdict[s]+str(l),100,0.0,200.)
110
111 ut.bookHist(h,detector+'leftvsright_1'+xi,'Veto hits in left / right; Left: # hits; Right: # hits',10,-0.5,9.5,10,-0.5,9.5)
112 ut.bookHist(h,detector+'leftvsright_2'+xi,'US hits in left / right; L: # hits; R: # hits',10,-0.5,9.5,10,-0.5,9.5)
113 ut.bookHist(h,detector+'leftvsright_3'+xi,'DS hits in left / right; L: # hits; R: # hits',2,-0.5,1.5,2,-0.5,1.5)
114 ut.bookHist(h,detector+'leftvsright_signal_1'+xi,'Veto signal in left / right; Left: QDC [a.u.]; Right: QDC [a.u.]',100,-0.5,200.,100,-0.5,200.)
115 ut.bookHist(h,detector+'leftvsright_signal_2'+xi,'US signal in left / right; L: QDC [a.u.]; R: QDC [a.u.]',100,-0.5,200.,100,-0.5,200.)
116 ut.bookHist(h,detector+'leftvsright_signal_3'+xi,'DS signal in left / right; L: QDC [a.u.]; R: QDC [a.u.]',100,-0.5,200.,100,-0.5,200.)
117
118 ut.bookHist(h,detector+'dtime'+xi,'delta event time; dt [ns]',100,0.0,1000.)
119 ut.bookHist(h,detector+'dtimeu'+xi,'delta event time; dt [us]',100,0.0,1000.)
120 ut.bookHist(h,detector+'dtimem'+xi,'delta event time; dt [ms]',100,0.0,1000.)
121
122 ut.bookHist(h,detector+'bs'+xi,'beam spot; x[cm]; y[cm]',100,-100.,10.,100,0.,80.)
123 ut.bookHist(h,detector+'bsDS'+xi,'beam spot,#bar X, #bar Y',60,-0.5,59.5,60,-0.5,59.5)
124 ut.bookHist(h,detector+'slopes'+xi,'muon DS track slopes; slope X [rad]; slope Y [rad]',150,-1.5,1.5,150,-1.5,1.5)
125 ut.bookHist(h,detector+'trackPos'+xi,'muon DS track pos; x [cm]; y [cm]',100,-90,10.,80,0.,80.)
126 ut.bookHist(h,detector+'trackPosBeam'+xi,'beam track pos slopes<0.1rad; x [cm]; y [cm]',100,-90,10.,80,0.,80.)
127
128 for bar in range(monitor.systemAndBars[s]):
129 ut.bookHist(h,detector+'chanmult_'+str(s*1000+100*l+bar)+xi,'channels firing per bar '+sdict[s]+str(l)+" bar "+str(bar)+'; fired channels',20,-0.5,19.5)
130#
131 xmin = options.Mufixmin
132 xmax = -xmin
133 ut.bookHist(h,detector+'resX_'+sdict[s]+str(s*10+l)+xi,'residual X'+str(s*10+l)+'; [#cm]',
134 100,xmin,xmax,60,-60.,0.)
135 ut.bookHist(h,detector+'resY_'+sdict[s]+str(s*10+l)+xi,'residual Y'+str(s*10+l)+'; [#cm]',
136 100,xmin,xmax,70,2.,68.)
137
138 for x in h:
139 if isinstance(h[x], ROOT.TH2):
140 h[x].SetStats(0)
141
142 self.listOfHits = {1:[],2:[],3:[]}
Int_t GetConfParI(TString name)
Definition MuFilter.h:47
Float_t GetConfParF(TString name)
Definition Scifi.h:49

◆ Plot()

Mufi_monitoring.Mufi_hitMaps.Plot (   self)

Definition at line 338 of file Mufi_monitoring.py.

338 def Plot(self):
339 h = self.M.h
340 sdict = self.M.sdict
341 systemAndPlanes =self.M.systemAndPlanes
342 S = {1:[1800,800,systemAndPlanes[1],1],2:[1800,1500,2,3],3:[1800,1800,2,4]}
343 for xi in self.xing:
344 if not self.M.fsdict and not self.M.hasBunchInfo and xi!='': continue
345
346 for s in S:
347 ut.bookCanvas(h,detector+'hitmaps' +sdict[s]+xi,'hitmaps' +sdict[s],S[s][0],S[s][1],S[s][2],S[s][3])
348 ut.bookCanvas(h,detector+'Xhitmaps' +sdict[s]+xi,'Xhitmaps' +sdict[s],S[s][0],S[s][1],S[s][2],S[s][3])
349 ut.bookCanvas(h,detector+'barmaps'+sdict[s]+xi,'barmaps'+sdict[s],S[s][0],S[s][1],S[s][2],S[s][3])
350 if s==3 or s==1:
351 ut.bookCanvas(h,detector+'dTScifi'+sdict[s]+xi,'dt rel to scifi'+sdict[s],S[s][0],S[s][1],S[s][2],S[s][3])
352 ut.bookCanvas(h,detector+'dTcorScifi'+sdict[s]+xi,'dtcor rel to scifi'+sdict[s],S[s][0],S[s][1],S[s][2],S[s][3])
353
354 for l in range(systemAndPlanes[s]):
355 n = l+1
356 if s==3 and n==7: n=8
357 tc = h[detector+'hitmaps'+sdict[s]+xi].cd(n)
358 tag = str(s)+str(l)+xi
359 h[detector+'hit_'+tag].Draw()
360 tc = h[detector+'Xhitmaps'+sdict[s]+xi].cd(n)
361 h[detector+'Xhit_'+tag].Draw()
362
363 tc = h[detector+'barmaps'+sdict[s]+xi].cd(n)
364 h[detector+'bar_'+tag].Draw()
365 if s==3 or s==1:
366 tc = h[detector+'dTScifi'+sdict[s]+xi].cd(n)
367 h[detector+'dT_'+tag].Draw('colz')
368 tc = h[detector+'dTcorScifi'+sdict[s]+xi].cd(n)
369 h[detector+'dTcor_'+tag].Draw('colz')
370
371 ut.bookCanvas(h,detector+'hitmult'+xi,'hit multiplicities per plane',2000,1600,4,3)
372 k=1
373 for s in systemAndPlanes:
374 for l in range(systemAndPlanes[s]):
375 tc = h[detector+'hitmult'+xi].cd(k)
376 tc.SetLogy(1)
377 k+=1
378 rc = h[detector+'hitmult_'+str(s*10+l)+xi].Draw()
379 ut.bookCanvas(h,'noise'+xi,' ',1200,1800,1,1)
380 tc = h['noise'+xi].cd()
381 h[detector+'Noise'+xi].Draw()
382
383 ut.bookCanvas(h,'VETO'+xi,' ',1200,1800,1,2)
384 for l in range(2):
385 tc = h['VETO'+xi].cd(l+1)
386 hname = detector+'hit_'+str(1)+str(l)+xi
387 h[hname].SetStats(0)
388 h[hname].Draw()
389 for n in range(7):
390 x = (n+1)*16-0.5
391 y = h[detector+'hit_'+str(1)+str(l)+xi].GetMaximum()
392 lname = 'L'+str(n)+hname
393 h[lname] = ROOT.TLine(x,0,x,y)
394 h[lname].SetLineColor(ROOT.kRed)
395 h[lname].SetLineStyle(9)
396 h[lname].Draw('same')
397
398 ut.bookCanvas(h,'USBars'+xi,' ',1200,900,1,1)
399 colours = {0:ROOT.kOrange,1:ROOT.kRed,2:ROOT.kGreen,3:ROOT.kBlue,4:ROOT.kMagenta,5:ROOT.kCyan,
400 6:ROOT.kAzure,7:ROOT.kPink,8:ROOT.kSpring}
401 for i in range(5):
402 h[detector+'bar_2'+str(i)+xi].SetLineColor(colours[i])
403 h[detector+'bar_2'+str(i)+xi].SetLineWidth(2)
404 h[detector+'bar_2'+str(i)+xi].SetStats(0)
405 h[detector+'bar_20'+xi].Draw()
406 h[detector+'bar_21'+xi].Draw('same')
407 h[detector+'bar_22'+xi].Draw('same')
408 h[detector+'bar_23'+xi].Draw('same')
409 h[detector+'bar_24'+xi].Draw('same')
410 h[detector+'lbar2'+xi]=ROOT.TLegend(0.6,0.6,0.99,0.99)
411 for i in range(5):
412 h[detector+'lbar2'+xi].AddEntry(h[detector+'bar_2'+str(i)+xi],'plane '+str(i+1),"f")
413 h[detector+'lbar2'+xi].Draw()
414 for i in range(7):
415 h[detector+'hit_3'+str(i)+xi].SetLineColor(colours[i])
416 h[detector+'hit_3'+str(i)+xi].SetLineWidth(2)
417 h[detector+'hit_3'+str(i)+xi].SetStats(0)
418 h[detector+'hit_30'+xi].Draw()
419 for i in range(1,7):
420 h[detector+'hit_3'+str(i)+xi].Draw('same')
421 h[detector+'lbar3'+xi]=ROOT.TLegend(0.6,0.6,0.99,0.99)
422 for i in range(7):
423 h[detector+'lbar3'+xi].AddEntry(h[detector+'hit_3'+str(i)+xi],'plane '+str(i+1),"f")
424 h[detector+'lbar3'+xi].Draw()
425
426 ut.bookCanvas(h,detector+'LR'+xi,' ',1800,900,3,2)
427 for i in range(1,4):
428 h[detector+'LR'+xi].cd(i)
429 h[detector+'leftvsright_'+str(i)+xi].Draw('textBox')
430 h[detector+'LR'+xi].cd(i+3)
431 h[detector+'leftvsright_signal_'+str(i)+xi].SetMaximum(h[detector+'leftvsright_signal_'+str(i)+xi].GetBinContent(10,10))
432 h[detector+'leftvsright_signal_'+str(i)+xi].Draw('colz')
433
434 ut.bookCanvas(h,detector+'LRinEff'+xi,' ',1800,450,3,1)
435 for s in range(1,4):
436 h[detector+'lLRinEff'+str(s)+xi]=ROOT.TLegend(0.6,0.54,0.99,0.93)
437 name = detector+'leftvsright_signal_'+str(s)+xi
438 h[name+'0Y'] = h[name].ProjectionY(name+'0Y',1,1)
439 h[name+'0X'] = h[name].ProjectionX(name+'0X',1,1)
440 h[name+'1X'] = h[name].ProjectionY(name+'1Y')
441 h[name+'1Y'] = h[name].ProjectionX(name+'1X')
442 tc = h[detector+'LRinEff'+xi].cd(s)
443 tc.SetLogy()
444 h[name+'0X'].SetStats(0)
445 h[name+'0Y'].SetStats(0)
446 h[name+'1X'].SetStats(0)
447 h[name+'1Y'].SetStats(0)
448 h[name+'0X'].SetLineColor(ROOT.kRed)
449 h[name+'0Y'].SetLineColor(ROOT.kGreen)
450 h[name+'1X'].SetLineColor(ROOT.kMagenta)
451 h[name+'1Y'].SetLineColor(ROOT.kCyan)
452 h[name+'0X'].SetMaximum(max(h[name+'1X'].GetMaximum(),h[name+'1Y'].GetMaximum()))
453 h[name+'0X'].Draw()
454 h[name+'0Y'].Draw('same')
455 h[name+'1X'].Draw('same')
456 h[name+'1Y'].Draw('same')

Member Data Documentation

◆ Area

dict Mufi_monitoring.Mufi_hitMaps.Area = {}
static

Definition at line 538 of file Mufi_monitoring.py.

◆ bin_index

Mufi_monitoring.Mufi_hitMaps.bin_index = xAxis.FindBin(item)
static

Definition at line 571 of file Mufi_monitoring.py.

◆ canvas [1/2]

str Mufi_monitoring.Mufi_hitMaps.canvas = detector+'signalsSummary'+xi
static

Definition at line 709 of file Mufi_monitoring.py.

◆ canvas [2/2]

Mufi_monitoring.Mufi_hitMaps.canvas
static

Definition at line 711 of file Mufi_monitoring.py.

◆ counter

int Mufi_monitoring.Mufi_hitMaps.counter = 1
static

Definition at line 634 of file Mufi_monitoring.py.

◆ fitResult

Mufi_monitoring.Mufi_hitMaps.fitResult = rc.Get()
static

Definition at line 771 of file Mufi_monitoring.py.

◆ graph_list

list Mufi_monitoring.Mufi_hitMaps.graph_list = [signal_medians, signal_maxima, signal_overflow]
static

Definition at line 559 of file Mufi_monitoring.py.

◆ grid

Mufi_monitoring.Mufi_hitMaps.grid = ROOT.TLine(graph.GetPointX(index), ymin, graph.GetPointX(index), ymax)
static

Definition at line 574 of file Mufi_monitoring.py.

◆ hname [1/2]

str Mufi_monitoring.Mufi_hitMaps.hname = detector+'chanmult_'+str(s*1000+100*l+bar)+xi
static

Definition at line 612 of file Mufi_monitoring.py.

◆ hname [2/2]

Mufi_monitoring.Mufi_hitMaps.hname = detector+p+sdict[s]+str(s*10+l)+xi
static

Definition at line 765 of file Mufi_monitoring.py.

◆ i

int Mufi_monitoring.Mufi_hitMaps.i = l+1 + (self.M.systemAndBars[s]-bar-1)*self.M.systemAndPlanes[s]
static

Definition at line 622 of file Mufi_monitoring.py.

◆ ix

int Mufi_monitoring.Mufi_hitMaps.ix = bar//15 + 1 + (l//2)*4
static

Definition at line 624 of file Mufi_monitoring.py.

◆ iy

int Mufi_monitoring.Mufi_hitMaps.iy = 15 - bar%15
static

Definition at line 625 of file Mufi_monitoring.py.

◆ l

int Mufi_monitoring.Mufi_hitMaps.l = 1
static

Definition at line 473 of file Mufi_monitoring.py.

◆ listOfHits

Mufi_monitoring.Mufi_hitMaps.listOfHits

Definition at line 142 of file Mufi_monitoring.py.

◆ listSipmTypes

list Mufi_monitoring.Mufi_hitMaps.listSipmTypes = ['L','R','S']
static

Definition at line 464 of file Mufi_monitoring.py.

◆ M

Mufi_monitoring.Mufi_hitMaps.M

Definition at line 27 of file Mufi_monitoring.py.

◆ maxN [1/2]

int Mufi_monitoring.Mufi_hitMaps.maxN = 0
static

Definition at line 610 of file Mufi_monitoring.py.

◆ maxN [2/2]

Mufi_monitoring.Mufi_hitMaps.maxN
static

Definition at line 614 of file Mufi_monitoring.py.

◆ med

Mufi_monitoring.Mufi_hitMaps.med = np.array([0.])
static

Definition at line 485 of file Mufi_monitoring.py.

◆ mufi_vsignal

Mufi_monitoring.Mufi_hitMaps.mufi_vsignal

Definition at line 35 of file Mufi_monitoring.py.

◆ nh

Mufi_monitoring.Mufi_hitMaps.nh
static

Definition at line 752 of file Mufi_monitoring.py.

◆ nmax

Mufi_monitoring.Mufi_hitMaps.nmax = h[hname].GetBinContent(h[hname].GetMaximumBin())
static

Definition at line 613 of file Mufi_monitoring.py.

◆ nv

Mufi_monitoring.Mufi_hitMaps.nv
static

Definition at line 752 of file Mufi_monitoring.py.

◆ opt

str Mufi_monitoring.Mufi_hitMaps.opt = ""
static

Definition at line 601 of file Mufi_monitoring.py.

◆ OT

Mufi_monitoring.Mufi_hitMaps.OT

Definition at line 34 of file Mufi_monitoring.py.

◆ plane_label

dict Mufi_monitoring.Mufi_hitMaps.plane_label = {}
static

Definition at line 465 of file Mufi_monitoring.py.

◆ point_count

dict Mufi_monitoring.Mufi_hitMaps.point_count = {}
static

Definition at line 539 of file Mufi_monitoring.py.

◆ q05

Mufi_monitoring.Mufi_hitMaps.q05 = np.array([0.5])
static

Definition at line 467 of file Mufi_monitoring.py.

◆ rc

Mufi_monitoring.Mufi_hitMaps.rc = h[detector+tag+'sig'+side+'_'+str( s*10+plane)+xi]
static

Definition at line 480 of file Mufi_monitoring.py.

◆ s

int Mufi_monitoring.Mufi_hitMaps.s = 1
static

Definition at line 472 of file Mufi_monitoring.py.

◆ signal_attributes

dict Mufi_monitoring.Mufi_hitMaps.signal_attributes = {}
static

Definition at line 468 of file Mufi_monitoring.py.

◆ signal_maxima

list Mufi_monitoring.Mufi_hitMaps.signal_maxima = [ROOT.TGraphErrors(), ROOT.TGraphErrors(), ROOT.TGraphErrors()]
static

Definition at line 536 of file Mufi_monitoring.py.

◆ signal_medians

list Mufi_monitoring.Mufi_hitMaps.signal_medians = [ROOT.TGraphErrors(), ROOT.TGraphErrors(), ROOT.TGraphErrors()]
static

Definition at line 535 of file Mufi_monitoring.py.

◆ signal_overflow

list Mufi_monitoring.Mufi_hitMaps.signal_overflow = [ROOT.TGraphErrors(), ROOT.TGraphErrors(), ROOT.TGraphErrors()]
static

Definition at line 537 of file Mufi_monitoring.py.

◆ stats

Mufi_monitoring.Mufi_hitMaps.stats = h[hname+'proj'].FindObject('stats')
static

Definition at line 774 of file Mufi_monitoring.py.

◆ subdir

Mufi_monitoring.Mufi_hitMaps.subdir
static

Definition at line 647 of file Mufi_monitoring.py.

◆ t

str Mufi_monitoring.Mufi_hitMaps.t = detector+"residualsVs"+p.replace('res','').replace('_','')+xi
static

Definition at line 758 of file Mufi_monitoring.py.

◆ tc

Mufi_monitoring.Mufi_hitMaps.tc = h[tag+'signalUSVeto'+xi].cd(l)
static

Definition at line 477 of file Mufi_monitoring.py.

◆ tick

Mufi_monitoring.Mufi_hitMaps.tick = ROOT.TLine(graph.GetPointX(index), ymin, graph.GetPointX(index), ymin + 0.03*(ymax-ymin))
static

Definition at line 578 of file Mufi_monitoring.py.

◆ trackTask

Mufi_monitoring.Mufi_hitMaps.trackTask

Definition at line 31 of file Mufi_monitoring.py.

◆ xAxis

Mufi_monitoring.Mufi_hitMaps.xAxis = graph.GetXaxis()
static

Definition at line 565 of file Mufi_monitoring.py.

◆ Xaxis_bin

int Mufi_monitoring.Mufi_hitMaps.Xaxis_bin = 1
static

Definition at line 474 of file Mufi_monitoring.py.

◆ xi

Mufi_monitoring.Mufi_hitMaps.xi
static

Definition at line 744 of file Mufi_monitoring.py.

◆ xing

Mufi_monitoring.Mufi_hitMaps.xing

Definition at line 42 of file Mufi_monitoring.py.

◆ y

Mufi_monitoring.Mufi_hitMaps.y = self.M.systemAndPlanes[s]
static

Definition at line 605 of file Mufi_monitoring.py.

◆ ymax

Mufi_monitoring.Mufi_hitMaps.ymax = graph.GetHistogram().GetMaximum()
static

Definition at line 569 of file Mufi_monitoring.py.

◆ ymin

Mufi_monitoring.Mufi_hitMaps.ymin = graph.GetHistogram().GetMinimum()
static

Definition at line 568 of file Mufi_monitoring.py.


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