222
221
@return True if no errors or False if no "slab_hits" in
225
# Return if we cannot find slab_hits in the spill.
226
if 'slab_hits' not in spill:
229
slabhits = spill['slab_hits']
231
# setup the detectors for which we want to look at hits
232
dets = ['tof0', 'tof1', 'tof2']
224
if 'recon_events' not in spill:
225
raise ValueError("recon_events not in spill")
226
# print 'nevt = ', len(spill['recon_events']), spill['recon_events']
227
for evn in range(len(spill['recon_events'])):
228
if 'tof_event' not in spill['recon_events'][evn]:
229
# print 'no tof event'
230
raise ValueError("tof_event not in recon_events")
231
# Return if we cannot find slab_hits in the event.
232
if 'tof_slab_hits' not in spill['recon_events'][evn]['tof_event']:
235
slabhits = spill['recon_events'][evn]['tof_event']['tof_slab_hits']
237
# setup the detectors for which we want to look at hits
238
dets = ['tof0', 'tof1', 'tof2']
234
# loop over detector stations ie tof0,tof1,tof2
235
for index, station in enumerate(dets):
236
# leave if we cannot find slab hits for this detector
237
if station not in slabhits:
239
dethits = slabhits[station]
240
# loop over all slab hits for this detector station
241
for i in range(len(dethits)):
242
# make sure it is not null
244
for j in range(len(dethits[i])): #loop over planes
245
pos = dethits[i][j]['slab']
246
plane_num = dethits[i][j]["plane"]
240
# loop over detector stations ie tof0,tof1,tof2
241
for index, station in enumerate(dets):
242
# leave if we cannot find slab hits for this detector
243
if station not in slabhits:
245
dethits = slabhits[station]
246
# print 'idx,stn: ',index,station,len(dethits),dethits
247
# loop over all slab hits for this detector station
250
for i in range(len(dethits)):
251
# make sure it is not null
253
# wrong. no further loop. ie no j
254
# for j in range(len(dethits[i])): #loop over planes
255
pos = dethits[i]['slab']
256
plane_num = dethits[i]["plane"]
247
257
# make sure the plane number is valid so
248
258
# we don't overflow bounds
249
259
if plane_num < 0 or plane_num > 1:
251
261
self.hslabhits[index][plane_num].Fill(pos)
252
#plane 0, pmt0 hit for this slab
253
if ("pmt0" in dethits[i][j]):
262
# plane 0, pmt0 hit for this slab
263
if ("pmt0" in dethits[i]):
254
264
self.hpmthits[index][plane_num][0].Fill(pos)
255
#plane 0, pmt1 hit for this slab
256
if ("pmt1" in dethits[i][j]):
265
# plane 0, pmt1 hit for this slab
266
if ("pmt1" in dethits[i]):
257
267
self.hpmthits[index][plane_num][1].Fill(pos)
273
283
@return True if no errors or False if no "space_points" in
276
if 'space_points' not in spill:
279
# check for NoneType --there are events with no reconstructed SP
280
if spill['space_points'] is None:
283
space_points = spill['space_points']
285
# if there are no TOF0,1,2 space point objects, return false
286
# not sure if we require all 3,
287
# -obviously this causes probs when eg. no TOF2 - fixed 3/24
291
if 'tof0' in space_points:
292
sp_tof0 = space_points['tof0']
294
if 'tof1' in space_points:
295
sp_tof1 = space_points['tof1']
297
if 'tof2' in space_points:
298
sp_tof2 = space_points['tof2']
303
for i in range(len(sp_tof0)):
305
self.hnsp_0.Fill(len(sp_tof0[i]))
306
spnt_x = sp_tof0[i][0]["slabX"]
307
spnt_y = sp_tof0[i][0]["slabY"]
308
self.hspxy[0].Fill(spnt_x, spnt_y)
309
self.hspslabx_0.Fill(spnt_x)
310
self.hspslaby_0.Fill(spnt_y)
313
if sp_tof0[i] and sp_tof1[i] :
314
if len(sp_tof0[i])==1 and len(sp_tof1[i])==1:
315
t_0 = sp_tof0[i][0]["time"]
316
t_1 = sp_tof1[i][0]["time"]
320
for i in range(len(sp_tof2)):
322
self.hnsp_2.Fill(len(sp_tof2[i]))
323
spnt_x = sp_tof2[i][0]["slabX"]
324
spnt_y = sp_tof2[i][0]["slabY"]
325
self.hspxy[2].Fill(spnt_x, spnt_y)
326
self.hspslabx_2.Fill(spnt_x)
327
self.hspslaby_2.Fill(spnt_y)
330
if sp_tof2[i] and sp_tof1[i] :
331
if len(sp_tof2[i])==1 and len(sp_tof1[i])==1:
332
t_2 = sp_tof2[i][0]["time"]
333
t_1 = sp_tof1[i][0]["time"]
334
self._ht12.Fill(t_2-t_1)
335
if sp_tof2[i] and sp_tof0[i] :
336
if len(sp_tof2[i])==1 and len(sp_tof0[i])==1:
337
t_2 = sp_tof2[i][0]["time"]
338
t_0 = sp_tof0[i][0]["time"]
339
self._ht02.Fill(t_2-t_0)
343
for i in range(len(sp_tof1)):
345
self.hnsp_1.Fill(len(sp_tof1[i]))
346
spnt_x = sp_tof1[i][0]["slabX"]
347
spnt_y = sp_tof1[i][0]["slabY"]
348
self.hspxy[1].Fill(spnt_x, spnt_y)
349
self.hspslabx_1.Fill(spnt_x)
350
self.hspslaby_1.Fill(spnt_y)
353
if sp_tof0[i] and sp_tof1[i] :
354
if len(sp_tof0[i])==1 and len(sp_tof1[i])==1:
355
t_0 = sp_tof0[i][0]["time"]
356
t_1 = sp_tof1[i][0]["time"]
357
self._ht01.Fill(t_1-t_0)
286
if 'recon_events' not in spill:
290
for evn in range(len(spill['recon_events'])):
291
if 'tof_event' not in spill['recon_events'][evn]:
292
# print 'no tof event'
294
# print spill['recon_events'][evn]['tof_event']
295
# Return if we cannot find slab_hits in the spill.
296
if 'tof_space_points' not in \
297
spill['recon_events'][evn]['tof_event']:
300
spill['recon_events'][evn]['tof_event']['tof_space_points']
302
# print 'evt: ', evn, ' nsp: ',len(space_points)
303
# if there are no TOF0,1,2 space point objects, return false
308
if 'tof0' in space_points:
309
sp_tof0 = space_points['tof0']
311
if 'tof1' in space_points:
312
sp_tof1 = space_points['tof1']
314
if 'tof2' in space_points:
315
sp_tof2 = space_points['tof2']
317
# print 'nsp012= ', len(sp_tof0), len(sp_tof1), len(sp_tof2)
321
# print '..evt ',evn,' nsp0: ',len(sp_tof0)
322
self.hnsp_0.Fill(len(sp_tof0))
323
for i in range(len(sp_tof0)):
325
# print 'nsp0: ',i,sp_tof0[i]
326
spnt_x = sp_tof0[i]["slabX"]
327
spnt_y = sp_tof0[i]["slabY"]
328
self.hspxy[0].Fill(spnt_x, spnt_y)
329
self.hspslabx_0.Fill(spnt_x)
330
self.hspslaby_0.Fill(spnt_y)
332
if sp_tof1 is not None :
333
if len(sp_tof0)==1 and len(sp_tof1)==1:
334
t_0 = sp_tof0[i]["time"]
335
t_1 = sp_tof1[i]["time"]
341
# print '..evt ', evn, ' nsp2: ', len(sp_tof2)
342
self.hnsp_2.Fill(len(sp_tof2))
343
for i in range(len(sp_tof2)):
345
spnt_x = sp_tof2[i]["slabX"]
346
spnt_y = sp_tof2[i]["slabY"]
347
self.hspxy[2].Fill(spnt_x, spnt_y)
348
self.hspslabx_2.Fill(spnt_x)
349
self.hspslaby_2.Fill(spnt_y)
350
if sp_tof1 is not None :
351
# print '2&1: ', len(sp_tof1)
352
if len(sp_tof2)==1 and len(sp_tof1)==1:
353
t_2 = sp_tof2[i]["time"]
354
t_1 = sp_tof1[i]["time"]
355
self._ht12.Fill(t_2-t_1)
356
# print 'tof: ', t_2-t_1
358
if sp_tof0 is not None :
359
if len(sp_tof2)==1 and len(sp_tof0)==1:
360
t_2 = sp_tof2[i]["time"]
361
t_0 = sp_tof0[i]["time"]
362
self._ht02.Fill(t_2-t_0)
367
# print '..evt ',evn,' nsp1: ',len(sp_tof1)
368
self.hnsp_1.Fill(len(sp_tof1))
369
for i in range(len(sp_tof1)):
371
# print 'nsp1: ', i, sp_tof1[i]
372
spnt_x = sp_tof1[i]["slabX"]
373
spnt_y = sp_tof1[i]["slabY"]
374
self.hspxy[1].Fill(spnt_x, spnt_y)
375
self.hspslabx_1.Fill(spnt_x)
376
self.hspslaby_1.Fill(spnt_y)
378
if sp_tof0 is not None :
379
if len(sp_tof1)==1 and len(sp_tof0)==1:
381
t_0 = sp_tof0[i]["time"]
382
t_1 = sp_tof1[i]["time"]
383
self._ht01.Fill(t_1-t_0)
384
# print 'tof01: ', t_1-t_0
360
389
def __init_histos(self): #pylint: disable=R0201, R0914
378
407
# xy grid on canvas
379
408
ROOT.gStyle.SetPadGridX(1)
380
409
ROOT.gStyle.SetPadGridY(1)
410
self.legend = ROOT.TLegend(0.6, 0.7, 0.89, 0.89)
411
ROOT.SetOwnership( self.legend, 1 )
412
ROOT.gStyle.SetFillColor(0)
382
413
# define histograms
383
414
self._ht01 = ROOT.TH1F("ht01", "TOF0->1;Time (ns);;", 200, 20, 40)
384
415
self._ht12 = ROOT.TH1F("ht12", "TOF1->2;Time (ns);;", 200, 0, 20)
385
416
self._ht02 = ROOT.TH1F("ht02", "TOF0->2;Time (ns);;", 200, 30, 50)
388
self.hspslabx_0 = ROOT.TH1F("spx0", "SpacePoints X slabs hit;SlabX;",
390
self.hspslaby_0 = ROOT.TH1F("spy0", "SpacePoints Y slabs hit;SlabY;",
392
self.hspslabx_1 = ROOT.TH1F("spx1", "SpacePoints X slabs hit;SlabX;",
394
self.hspslaby_1 = ROOT.TH1F("spy1", "SpacePoints Y slabs hit;SlabY;",
419
self.hspslabx_0 = ROOT.TH1F("spx0", "SpacePoints X-plane;SlabX;",
421
self.hspslaby_0 = ROOT.TH1F("spy0", "SpacePoints Y-plane;SlabY;",
423
self.hspslabx_1 = ROOT.TH1F("spx1", "SpacePoints X-plane;SlabX;",
425
self.hspslaby_1 = ROOT.TH1F("spy1", "SpacePoints Y-plane;SlabY;",
396
427
self.hspslabx_1.SetFillColor(2)
428
self.hspslabx_1.SetLineColor(2)
397
429
self.hspslaby_1.SetFillColor(2)
398
self.hspslabx_2 = ROOT.TH1F("spx2", "SpacePoints X slabs hit;SlabX;",
430
self.hspslaby_1.SetLineColor(2)
431
self.hspslabx_2 = ROOT.TH1F("spx2", "SpacePoints X-plane;SlabX;",
400
self.hspslaby_2 = ROOT.TH1F("spy2", "SpacePoints Y slabs hit;SlabY;",
433
self.hspslaby_2 = ROOT.TH1F("spy2", "SpacePoints Y-plane;SlabY;",
402
435
self.hspslabx_2.SetFillColor(4)
436
self.hspslabx_2.SetLineColor(4)
403
437
self.hspslaby_2.SetFillColor(4)
438
self.hspslaby_2.SetLineColor(4)
405
self.hnsp_0 = ROOT.TH1F("hnsp_0", ";#space points in particle event;;",
440
self.hnsp_0 = ROOT.TH1F("hnsp_0",
441
"#Space Points;#space points in event;;",
407
self.hnsp_1 = ROOT.TH1F("hnsp_1", ";#space points in particle event;;",
443
self.hnsp_0.SetLineColor(1)
444
self.hnsp_1 = ROOT.TH1F("hnsp_1",
445
"#Space Points;#space points in event;;",
409
447
self.hnsp_1.SetFillColor(2)
410
self.hnsp_2 = ROOT.TH1F("hnsp_2", ";#space points in particle event;;",
448
self.hnsp_1.SetLineColor(2)
449
#self.hnsp_1.SetFillStyle(4000)
450
self.hnsp_2 = ROOT.TH1F("hnsp_2",
451
"#Space Points;#space points in event;;",
412
453
self.hnsp_2.SetFillColor(4)
454
self.hnsp_2.SetLineColor(4)
414
456
self.hslabhits = [[]]
415
457
for i in range (0, 3):
540
590
number of spills is divisible by the refresh rate.
541
591
@param self Object reference.
594
#ll = ROOT.TLegend(0.6, 0.7, 0.89, 0.89)
595
self.canvas_hits_x.cd()
596
leg = self.canvas_hits_x.BuildLegend(0.6, 0.7, 0.89, 0.89)
598
leg.AddEntry(self.hslabhits[0][0], "TOF0", "l")
599
leg.AddEntry(self.hslabhits[1][0], "TOF1", "l")
600
leg.AddEntry(self.hslabhits[2][0], "TOF2", "l")
543
604
self.canvas_hits_x.Update()
606
self.canvas_hits_y.cd()
607
leg = self.canvas_hits_y.BuildLegend(0.6, 0.7, 0.89, 0.89)
609
leg.AddEntry(self.hslabhits[0][1], "TOF0", "l")
610
leg.AddEntry(self.hslabhits[1][1], "TOF1", "l")
611
leg.AddEntry(self.hslabhits[2][1], "TOF2", "l")
544
615
self.canvas_hits_y.Update()
545
617
for plane in range (2):
546
618
for pmt in range (2):
547
619
ind = 2*plane + pmt
620
leg = self.canvas_pmt[ind].BuildLegend(0.6, 0.7, 0.89, 0.89)
623
pnum = "Plane%d,PMT%d" % (plane, pmt)
624
leg.AddEntry(self.hpmthits[0][plane][pmt], "TOF0,"+pnum, "l")
625
leg.AddEntry(self.hpmthits[1][plane][pmt], "TOF1,"+pnum, "l")
626
leg.AddEntry(self.hpmthits[2][plane][pmt], "TOF2,"+pnum, "l")
548
627
self.canvas_pmt[ind].Update()
629
leg = self.canvas_nsp.BuildLegend(0.6, 0.7, 0.89, 0.89)
631
leg.AddEntry(self.hnsp_0, "TOF0", "l")
632
leg.AddEntry(self.hnsp_1, "TOF1", "l")
633
leg.AddEntry(self.hnsp_2, "TOF2", "l")
549
634
self.canvas_nsp.Update()
636
leg = self.canvas_sp_x.BuildLegend(0.6, 0.7, 0.89, 0.89)
638
leg.AddEntry(self.hspslabx_0, "TOF0", "l")
639
leg.AddEntry(self.hspslabx_1, "TOF1", "l")
640
leg.AddEntry(self.hspslabx_2, "TOF2", "l")
550
641
self.canvas_sp_x.Update()
642
leg = self.canvas_sp_y.BuildLegend(0.6, 0.7, 0.89, 0.89)
644
leg.AddEntry(self.hspslaby_0, "TOF0", "l")
645
leg.AddEntry(self.hspslaby_1, "TOF1", "l")
646
leg.AddEntry(self.hspslaby_2, "TOF2", "l")
551
647
self.canvas_sp_y.Update()
552
648
for i in range (3):
553
649
self.canvas_sp_xy[i].Update()