Belle II Software  release-05-02-19
svdCoGCalibrationAnalysisToolModule.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 
4 from basf2 import *
5 from svd import *
6 import ROOT
7 from ROOT import Belle2, TFile, TTree, TH1F, TCanvas, TH2F, TGraph, TMultiGraph, TH2D, TLegend, TROOT, gROOT, TF1, TMath
8 import os
9 import numpy
10 import math
11 from array import array
12 import basf2
13 
14 import simulation
15 
16 import matplotlib.pyplot as plt
17 import numpy as np
18 
19 import sys
20 
21 inputFile = sys.argv[1]
22 outputFile = sys.argv[2]
23 time0 = "EventT0"
24 svd_Clusters = "SVDClusters"
25 svd_ClustersFromTracks = "SVDClustersFromTracks"
26 svd_EventInfo = "SVDEventInfo"
27 svd_EventMD = "EventMetaData"
28 
29 set_random_seed(11)
30 
31 gROOT.SetBatch(True)
32 
33 
34 class svdCoGCalibrationAnalysisTool(basf2.Module):
35  """
36  Class used to check the goodness of the CoG time calibration
37  """
38 
39  def initialize(self):
40  """
41  Initialize object (histograms, lists, ...) used by the class
42  """
43 
44  self.outputFileName = outputFile
45 
46  self.layer = np.zeros(1, dtype=int)
47 
48  self.ladder = np.zeros(1, dtype=int)
49 
50  self.sensor = np.zeros(1, dtype=int)
51 
52  self.side = np.zeros(1, dtype=int)
53 
54  self.TB = np.zeros(1, dtype=int)
55 
56  self.evtTime = np.zeros(1, dtype=float)
57 
58  self.evtTimeSync = np.zeros(1, dtype=float)
59 
60  self.clsTime = np.zeros(1, dtype=float)
61 
62  self.clsSize = np.zeros(1, dtype=float)
63 
64  self.clsCharge = np.zeros(1, dtype=float)
65 
66  self.clsSNR = np.zeros(1, dtype=float)
67 
68  self.run = np.zeros(1, dtype=int)
69 
70  self.exp = np.zeros(1, dtype=int)
71 
72 
73  self.layerTracks = np.zeros(1, dtype=int)
74 
75  self.ladderTracks = np.zeros(1, dtype=int)
76 
77  self.sensorTracks = np.zeros(1, dtype=int)
78 
79  self.sideTracks = np.zeros(1, dtype=int)
80 
81  self.evtTimeTracks = np.zeros(1, dtype=float)
82 
83  self.evtTimeSyncTracks = np.zeros(1, dtype=float)
84 
85  self.clsTimeTracks = np.zeros(1, dtype=float)
86 
87  self.clsSizeTracks = np.zeros(1, dtype=float)
88 
89  self.clsChargeTracks = np.zeros(1, dtype=float)
90 
91  self.clsSNRTracks = np.zeros(1, dtype=float)
92 
93  # self.tFile = TFile(self.outputFileName, 'recreate')
94  # self.tFile.cd()
95 
96 
97  self.tree = TTree('cls', 'tree')
98 
99  self.tree.Branch('layer', self.layer, 'layer/I')
100 
101  self.tree.Branch('ladder', self.ladder, 'ladder/I')
102 
103  self.tree.Branch('sensor', self.sensor, 'sensor/I')
104 
105  self.tree.Branch('side', self.side, 'side/I')
106 
107  self.tree.Branch('tb', self.TB, 'tb/I')
108 
109  self.tree.Branch('evtT0', self.evtTime, 'evtT0/D')
110 
111  self.tree.Branch('evtT0Sync', self.evtTimeSync, 'evtT0Sync/D')
112 
113  self.tree.Branch('clsTime', self.clsTime, 'clsTime/D')
114 
115  self.tree.Branch('clsSize', self.clsSize, 'clsSize/D')
116 
117  self.tree.Branch('clsCharge', self.clsCharge, 'clsCharge/D')
118 
119  self.tree.Branch('clsSNR', self.clsSNR, 'clsSNR/D')
120 
121  self.tree.Branch('run', self.run, 'run/I')
122 
123  self.tree.Branch('exp', self.exp, 'exp/I')
124 
125 
126  self.treeTracks = TTree('clsTracks', 'treeTracks')
127 
128  self.treeTracks.Branch('layer', self.layerTracks, 'layer/I')
129 
130  self.treeTracks.Branch('ladder', self.ladderTracks, 'ladder/I')
131 
132  self.treeTracks.Branch('sensor', self.sensorTracks, 'sensor/I')
133 
134  self.treeTracks.Branch('side', self.sideTracks, 'side/I')
135 
136  self.treeTracks.Branch('tb', self.TB, 'tb/I')
137 
138  self.treeTracks.Branch('evtT0', self.evtTimeTracks, 'evtT0/D')
139 
140  self.treeTracks.Branch('evtT0Sync', self.evtTimeSyncTracks, 'evtT0Sync/D')
141 
142  self.treeTracks.Branch('clsTime', self.clsTimeTracks, 'clsTime/D')
143 
144  self.treeTracks.Branch('clsSize', self.clsSizeTracks, 'clsSize/D')
145 
146  self.treeTracks.Branch('clsCharge', self.clsChargeTracks, 'clsCharge/D')
147 
148  self.treeTracks.Branch('clsSNR', self.clsSNRTracks, 'clsSNR/D')
149 
150  self.treeTracks.Branch('run', self.run, 'run/I')
151 
152  self.treeTracks.Branch('exp', self.exp, 'exp/I')
153 
154  def event(self):
155  """
156  Function that allows to cicle on the events
157  """
158  svd_cls = Belle2.PyStoreArray(svd_Clusters)
159  svd_clsFromTrks = Belle2.PyStoreArray(svd_ClustersFromTracks)
160  et0 = Belle2.PyStoreObj(time0)
161  svd_evtInfo = Belle2.PyStoreObj(svd_EventInfo)
162  clsTB = svd_evtInfo.getModeByte().getTriggerBin()
163  self.TB[0] = ord(clsTB)
164  svd_evtMD = Belle2.PyStoreObj(svd_EventMD)
165  self.run[0] = svd_evtMD.getRun()
166  self.exp[0] = svd_evtMD.getExperiment()
167 
168  for svdCluster in svd_cls:
169  self.clsTime[0] = svdCluster.getClsTime()
170  self.clsSize[0] = svdCluster.getSize()
171  self.clsCharge[0] = svdCluster.getCharge()
172  self.clsSNR[0] = svdCluster.getSNR()
173  self.layer[0] = svdCluster.getSensorID().getLayerNumber()
174  self.ladder[0] = svdCluster.getSensorID().getLadderNumber()
175  self.sensor[0] = svdCluster.getSensorID().getSensorNumber()
176  self.side[0] = svdCluster.isUCluster()
177 
178  self.ftswShift = svd_evtInfo.getSVD2FTSWTimeShift(svdCluster.getFirstFrame())
179  hasT0 = et0.hasEventT0()
180  if hasT0:
181  self.evtTime[0] = et0.getEventT0()
182  self.evtTimeSync[0] = et0.getEventT0() - self.ftswShift
183  else:
184  self.evtTime[0] = -999
185  self.evtTimeSync[0] = -999
186  self.tree.Fill()
187 
188  for svdClusterTracks in svd_clsFromTrks:
189  self.clsTimeTracks[0] = svdClusterTracks.getClsTime()
190  self.clsSizeTracks[0] = svdClusterTracks.getSize()
191  self.clsChargeTracks[0] = svdClusterTracks.getCharge()
192  self.clsSNRTracks[0] = svdClusterTracks.getSNR()
193  self.layerTracks[0] = svdClusterTracks.getSensorID().getLayerNumber()
194  self.ladderTracks[0] = svdClusterTracks.getSensorID().getLadderNumber()
195  self.sensorTracks[0] = svdClusterTracks.getSensorID().getSensorNumber()
196  self.sideTracks[0] = svdClusterTracks.isUCluster()
197 
198  self.ftswShiftTracks = svd_evtInfo.getSVD2FTSWTimeShift(svdCluster.getFirstFrame())
199  hasT0 = et0.hasEventT0()
200  if hasT0:
201  self.evtTimeTracks[0] = et0.getEventT0()
202  self.evtTimeSyncTracks[0] = et0.getEventT0() - self.ftswShiftTracks
203  else:
204  self.evtTimeTracks[0] = -999
205  self.evtTimeSyncTracks[0] = -999
206  self.treeTracks.Fill()
207 
208  def terminate(self):
209  """
210  Terminates te class and produces the output rootfile
211  """
212 
213  self.tFile = TFile(self.outputFileName, 'recreate')
214  self.tFile.cd()
215  self.tree.Write()
216  self.treeTracks.Write()
217  self.tFile.Close()
218  del self.tFile
219 
220 # conditions.override_globaltags()
221 # conditions.globaltags = ["online"]
222 
223 main = create_path()
224 
225 rootinput = register_module('RootInput')
226 rootinput.param('inputFileName', inputFile)
227 main.add_module(rootinput)
228 
229 # main.add_module("Gearbox")
230 # main.add_module("Geometry", useDB = True)
231 
232 main.add_module(svdCoGCalibrationAnalysisTool())
233 
234 # Show progress of processing
235 progress = register_module('Progress')
236 main.add_module(progress)
237 
238 # Process events
239 process(main)
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.initialize
def initialize(self)
Definition: svdCoGCalibrationAnalysisToolModule.py:39
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.layer
layer
layer array for the tree
Definition: svdCoGCalibrationAnalysisToolModule.py:46
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.TB
TB
TB array for the tree.
Definition: svdCoGCalibrationAnalysisToolModule.py:54
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.outputFileName
outputFileName
name of the output file provided by the user
Definition: svdCoGCalibrationAnalysisToolModule.py:44
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.clsCharge
clsCharge
cluster charge array for the tree
Definition: svdCoGCalibrationAnalysisToolModule.py:64
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.sideTracks
sideTracks
side array for the tree for clusters associated to tracks
Definition: svdCoGCalibrationAnalysisToolModule.py:79
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.tFile
tFile
creation of TFile
Definition: svdCoGCalibrationAnalysisToolModule.py:213
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.tree
tree
tree for clusters
Definition: svdCoGCalibrationAnalysisToolModule.py:97
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.clsTimeTracks
clsTimeTracks
cluster time array for the tree for clusters associated to tracks
Definition: svdCoGCalibrationAnalysisToolModule.py:85
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.clsChargeTracks
clsChargeTracks
cluster charge array for the tree for clusters associated to tracks
Definition: svdCoGCalibrationAnalysisToolModule.py:89
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.sensorTracks
sensorTracks
sensor array for the tree for clusters associated to tracks
Definition: svdCoGCalibrationAnalysisToolModule.py:77
Belle2::PyStoreObj
a (simplified) python wrapper for StoreObjPtr.
Definition: PyStoreObj.h:69
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.sensor
sensor
sensor array for the tree
Definition: svdCoGCalibrationAnalysisToolModule.py:50
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.ladderTracks
ladderTracks
ladder array for the tree for clusters associated to tracks
Definition: svdCoGCalibrationAnalysisToolModule.py:75
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.evtTime
evtTime
T0 array for the tree.
Definition: svdCoGCalibrationAnalysisToolModule.py:56
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.clsSize
clsSize
cluster size array for the tree
Definition: svdCoGCalibrationAnalysisToolModule.py:62
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.evtTimeSyncTracks
evtTimeSyncTracks
T0Sync array for the tree for clusters associated to tracks.
Definition: svdCoGCalibrationAnalysisToolModule.py:83
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.exp
exp
experiment number array for the tree
Definition: svdCoGCalibrationAnalysisToolModule.py:70
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.clsSNR
clsSNR
cluster SNR array for the tree
Definition: svdCoGCalibrationAnalysisToolModule.py:66
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.run
run
run number array for the tree
Definition: svdCoGCalibrationAnalysisToolModule.py:68
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.evtTimeSync
evtTimeSync
T0Sync array for the tree.
Definition: svdCoGCalibrationAnalysisToolModule.py:58
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.clsTime
clsTime
cluster time array for the tree
Definition: svdCoGCalibrationAnalysisToolModule.py:60
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.evtTimeTracks
evtTimeTracks
T0 array for the tree for clusters associated to tracks.
Definition: svdCoGCalibrationAnalysisToolModule.py:81
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.treeTracks
treeTracks
tree for clusters, branch for layer number
Definition: svdCoGCalibrationAnalysisToolModule.py:126
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.ftswShift
ftswShift
correction to pass to the FTSW reference system
Definition: svdCoGCalibrationAnalysisToolModule.py:178
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.layerTracks
layerTracks
layer array for the tree for clusters associated to tracks
Definition: svdCoGCalibrationAnalysisToolModule.py:73
Belle2::PyStoreArray
a (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:58
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.clsSNRTracks
clsSNRTracks
cluster SNR array for the tree for clusters associated to tracks
Definition: svdCoGCalibrationAnalysisToolModule.py:91
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.side
side
side array for the tree
Definition: svdCoGCalibrationAnalysisToolModule.py:52
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool
Definition: svdCoGCalibrationAnalysisToolModule.py:34
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.event
def event(self)
Definition: svdCoGCalibrationAnalysisToolModule.py:154
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.terminate
def terminate(self)
Definition: svdCoGCalibrationAnalysisToolModule.py:208
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.ftswShiftTracks
ftswShiftTracks
correction to pass to the FTSW reference system
Definition: svdCoGCalibrationAnalysisToolModule.py:198
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.clsSizeTracks
clsSizeTracks
cluster size array for the tree for clusters associated to tracks
Definition: svdCoGCalibrationAnalysisToolModule.py:87
svd.svdCoGCalibrationAnalysisToolModule.svdCoGCalibrationAnalysisTool.ladder
ladder
ladder array for the tree
Definition: svdCoGCalibrationAnalysisToolModule.py:48