21 <input>muon-KLMValidation.root</input>
22 <contact>martina.laurenza@roma3.infn.it</contact>
23 <description>Create validation plots for BKLM</description>
31 ROOT.gROOT.SetBatch(ROOT.kTRUE)
33 from ROOT
import TFile, TChain, TH1F, TNamed, gStyle, PyConfig
34 PyConfig.IgnoreCommandLineOptions =
True
38 CONTACT_PERSON = {
'Name':
'Martina Laurenza',
39 'Email':
'martina.laurenza@roma3.infn.it'}
44 Create validation plots for BKLM.
46 print(
'Creating the BKLM validation plots...')
48 parser = argparse.ArgumentParser()
50 parser.add_argument(
'-i',
'--input-file', dest=
'input_file',
51 default=
'../muon-KLMValidation.root',
52 help=
'Root file with Ext/Muid/BKLM/EKLM validation data.'
54 parser.add_argument(
'-o',
'--output-file', dest=
'output_file',
55 default=
'BKLMMuon.root',
56 help=
'Root file with BKLM validation histograms.')
58 args = parser.parse_args()
61 file_chain = TChain(
'tree')
62 file_chain.Add(args.input_file)
66 number_entries = file_chain.GetEntries()
67 except AttributeError:
68 print(
'Could not load input file(s) %s.' % args.input_file)
70 if number_entries == 0:
71 print(
'Data tree is empty or does not exist in file(s) %s. Exit.' % args.input_file)
75 output_root_file = TFile(args.output_file,
'recreate')
79 draw_bklmhists(file_chain)
82 output_root_file.Write()
83 output_root_file.Close()
85 print(
'BKLM validation plots created.')
89 def draw_bklmhists(file_chain):
91 Draw the BKLMHit2d-related distributions.
94 contact =
'Martina Laurenza (martina.laurenza@roma3.infn.it)'
98 inRPC = TH1F(
'InRPC',
'InRPC for BKLMHit2ds', 2, -0.5, 1.5)
99 file_chain.Draw(
'BKLMHit2ds.inRPC()>>InRPC',
'')
100 inRPC.GetXaxis().SetTitle(
'0=scintillator 1=RPC')
101 inRPC.GetListOfFunctions().Add(TNamed(
'Description',
'Flag indicating if a muon hit is in scintillator (0) or RPC (1)'))
102 inRPC.GetListOfFunctions().Add(TNamed(
'Check',
'Mostly in RPC.'))
103 inRPC.GetListOfFunctions().Add(TNamed(
'Contact', contact))
104 inRPC.GetListOfFunctions().Add(TNamed(
'MetaOptions',
'shifter,pvalue-warn=0.50,pvalue-error=0.10'))
105 inRPC.SetMinimum(0.0)
108 section = TH1F(
'Forward',
'Section for BKLMHit2ds', 2, -0.5, 1.5)
109 file_chain.Draw(
'BKLMHit2ds.getSection()>>Forward',
'')
110 section.GetXaxis().SetTitle(
'0=backward 1=forward')
111 section.GetListOfFunctions().Add(TNamed(
'Description',
112 'Flag indicating if a muon hit is in backward (0) or forward (1) BKLM'))
113 section.GetListOfFunctions().Add(TNamed(
'Check',
'More hits in the backward.'))
114 section.GetListOfFunctions().Add(TNamed(
'Contact', contact))
115 section.GetListOfFunctions().Add(TNamed(
'MetaOptions',
'shifter,pvalue-warn=0.50,pvalue-error=0.10'))
116 section.SetMinimum(0.0)
119 isOnTrack = TH1F(
'IsOnTrack',
'IsOnTrack for BKLMHit2ds', 2, -0.5, 1.5)
120 file_chain.Draw(
'BKLMHit2ds.isOnTrack()>>IsOnTrack',
'')
121 isOnTrack.GetXaxis().SetTitle(
'0=not associated with Track 1=associated with Track')
122 isOnTrack.GetListOfFunctions().Add(TNamed(
'Description',
123 'Flag indicating if a muon hit is associated with a CDC Track by Muid'))
124 isOnTrack.GetListOfFunctions().Add(TNamed(
'Check',
'Mostly associated.'))
125 isOnTrack.GetListOfFunctions().Add(TNamed(
'Contact', contact))
126 isOnTrack.GetListOfFunctions().Add(TNamed(
'MetaOptions',
'shifter,pvalue-warn=0.50,pvalue-error=0.10'))
127 isOnTrack.SetMinimum(0.0)
130 sector = TH1F(
'Sector',
'Sector for BKLMHit2ds', 10, -0.5, 9.5)
131 file_chain.Draw(
'BKLMHit2ds.getSector()>>Sector',
'')
132 sector.GetXaxis().SetTitle(
'Sector #')
133 sector.GetListOfFunctions().Add(TNamed(
'Description',
'Sector number of muon hit'))
134 sector.GetListOfFunctions().Add(TNamed(
'Check',
'Roughly flat in sectors 1-8.'))
135 sector.GetListOfFunctions().Add(TNamed(
'Contact', contact))
136 sector.GetListOfFunctions().Add(TNamed(
'MetaOptions',
'shifter,pvalue-warn=1.00,pvalue-error=0.01'))
137 sector.SetMinimum(0.0)
140 layer = TH1F(
'Layer',
'Layer for BKLMHit2ds', 17, -0.5, 16.5)
141 file_chain.Draw(
'BKLMHit2ds.getLayer()>>Layer',
'')
142 layer.GetXaxis().SetTitle(
'Layer #')
143 layer.GetListOfFunctions().Add(TNamed(
'Description',
'Layer number of muon hit'))
144 layer.GetListOfFunctions().Add(TNamed(
'Check',
145 'First peak at layer 1 and second (higher) peak at layer 2, with tail above those.'))
146 layer.GetListOfFunctions().Add(TNamed(
'Contact', contact))
147 layer.GetListOfFunctions().Add(TNamed(
'MetaOptions',
'shifter,pvalue-warn=1.0,pvalue-error=0.01'))
148 layer.SetMinimum(0.0)
151 phistrip = TH1F(
'PhiStrip',
'PhiStrip for BKLMHit2ds', 50, -0.5, 49.5)
152 file_chain.Draw(
'BKLMHit2ds.getPhiStripAve()>>PhiStrip',
'')
153 phistrip.GetXaxis().SetTitle(
'Phi strip #')
154 phistrip.GetListOfFunctions().Add(TNamed(
'Description',
'Strip number in phi plane of muon hit'))
155 phistrip.GetListOfFunctions().Add(TNamed(
'Check',
156 'Roughly flat for 1-36 (all layers) and then for 37-48 (layers 6-15).'))
157 phistrip.GetListOfFunctions().Add(TNamed(
'Contact', contact))
158 phistrip.GetListOfFunctions().Add(TNamed(
'MetaOptions',
'shifter,pvalue-warn=1.00,pvalue-error=0.01'))
159 phistrip.SetMinimum(0.0)
162 zstrip = TH1F(
'ZStrip',
'ZStrip for BKLMHit2ds', 60, -0.5, 59.5)
163 file_chain.Draw(
'BKLMHit2ds.getZStripAve()>>ZStrip',
'')
164 zstrip.GetXaxis().SetTitle(
'Z strip #')
165 zstrip.GetListOfFunctions().Add(TNamed(
'Description',
'Strip number in z plane of muon hit'))
166 zstrip.GetListOfFunctions().Add(TNamed(
'Check',
167 'Downward-sloping for 1-48 (all layers), shoulder for 49-54 (layers 1-2).'))
168 zstrip.GetListOfFunctions().Add(TNamed(
'Contact', contact))
169 zstrip.GetListOfFunctions().Add(TNamed(
'MetaOptions',
'shifter,pvalue-warn=1.00,pvalue-error=0.01'))
170 zstrip.SetMinimum(0.0)
173 timeRPC = TH1F(
'TimeRPC',
'Hit time for BKLMHit2ds in RPCs', 100, -0.5, 1.5)
174 file_chain.Draw(
'BKLMHit2ds.getTime()>>TimeRPC',
'BKLMHit2ds.inRPC()==1')
175 timeRPC.GetXaxis().SetTitle(
't (ns)')
176 timeRPC.GetListOfFunctions().Add(TNamed(
'Description',
'Time of muon hit in RPCs'))
177 timeRPC.GetListOfFunctions().Add(TNamed(
'Check',
'Narrow peak at 0 ns.'))
178 timeRPC.GetListOfFunctions().Add(TNamed(
'Contact', contact))
179 timeRPC.GetListOfFunctions().Add(TNamed(
'MetaOptions',
'shifter,pvalue-warn=1.00,pvalue-error=0.01'))
182 timeSci = TH1F(
'TimeSci',
'Hit time for BKLMHit2ds in scintillators', 150, 0, 15.0)
183 file_chain.Draw(
'BKLMHit2ds.getTime()>>TimeSci',
'BKLMHit2ds.inRPC()==0')
184 timeSci.GetXaxis().SetTitle(
't (ns)')
185 timeSci.GetListOfFunctions().Add(TNamed(
'Description',
'Time of muon hit in scintillators'))
186 timeSci.GetListOfFunctions().Add(TNamed(
'Check',
187 'Broad peak mainly between 2 ns and 8 ns, with the mean around 3.5 ns.'))
188 timeSci.GetListOfFunctions().Add(TNamed(
'Contact', contact))
189 timeSci.GetListOfFunctions().Add(TNamed(
'MetaOptions',
'shifter,pvalue-warn=1.00,pvalue-error=0.01'))
192 nPE = TH1F(
'nGenPE',
'Generated PE in BKLM', 200, 0.0, 200)
193 file_chain.Draw(
'KLMDigits.getNGeneratedPhotoelectrons()>>nGenPE',
'KLMDigits.getSubdetector()==1 && KLMDigits.getLayer() < 3')
194 nPE.GetXaxis().SetTitle(
'# generated PE')
195 nPE.GetListOfFunctions().Add(TNamed(
'Description',
'Number of generated photoelectrons in BKLM'))
196 nPE.GetListOfFunctions().Add(TNamed(
'Check',
'Peak around 50.'))
197 nPE.GetListOfFunctions().Add(TNamed(
'Contact', contact))
198 nPE.GetListOfFunctions().Add(TNamed(
'MetaOptions',
''))
203 edep = TH1F(
'EnergyDeposit',
'Energy deposition for BKLMHit2ds', 260, -1.0, 25.0)
204 file_chain.Draw(
'BKLMHit2ds.getEnergyDeposit()*1000.0>>EnergyDeposit',
'')
205 edep.GetXaxis().SetTitle(
'E (keV)')
206 edep.GetListOfFunctions().Add(TNamed(
'Description',
'dE/dx energy deposition of muon hit'))
207 edep.GetListOfFunctions().Add(TNamed(
'Check',
'Peak near 3 keV.'))
208 edep.GetListOfFunctions().Add(TNamed(
'Contact', contact))
209 edep.GetListOfFunctions().Add(TNamed(
'MetaOptions',
'expert,pvalue-warn=1.00,pvalue-error=0.01'))
214 if __name__ ==
'__main__':
int main(int argc, char **argv)
Run all tests.