ATLAS Offline Software
Loading...
Searching...
No Matches
runHistoBuilders.py
Go to the documentation of this file.
1# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
2
3
4# External dependencies
5import ROOT
6import sys
7import re
8import math
9ROOT.gSystem.Load("libGenVector.so")
10
11
12# Control switch
13IsDebug = False
14
15
16
17
20
21treeNameJETMET = "qcd"
22treeNameCOMMON = "physics"
23writeBranchInformation = False
24
25if IsDebug:
26 fileNameJETMET="/afs/cern.ch/user/d/delsart/public/COMMON/NTUP_COMMON_ref.root"
27 treeNameJETMET="physics"
28 fileNameCOMMON="/afs/cern.ch/user/d/delsart/public/COMMON/NTUP_COMMON_new.root"
29else:
30 if len(sys.argv) < 3:
31 print ("Too few arguments. Expected the following:")
32 print ("1. JETMET file (required)")
33 print ("2. COMMON file (required)")
34 print ("3. JETMET tree name (optional, default=\"qcd\")")
35 print ("4. COMMON tree name (optional, default=\"physics\")")
36 print ("5. Whether or not to write branch information to files (optional, default=False)")
37 exit(1)
38
39 fileNameJETMET=sys.argv[1]
40 fileNameCOMMON=sys.argv[2]
41 if len(sys.argv) > 3:
42 treeNameJETMET = sys.argv[3]
43 if len(sys.argv) > 4:
44 treeNameCOMMON = sys.argv[4]
45 if len(sys.argv) > 5:
46 if "True" in sys.argv[5] or "true" in sys.argv[5]:
47 writeBranchInformation = True
48 elif "False" in sys.argv[5] or "false" in sys.argv[5]:
49 writeBranchInformation = False
50 else:
51 print ("Could not interpret the branch information control argument: ",sys.argv[5])
52 exit(2)
53
54
55
58
59#fileNameJETMET="/afs/cern.ch/atlas/groups/JetEtmiss/COMMON_validation/JETMET/mc12_8TeV.147914.Pythia8_AU2CT10_jetjet_JZ4W.merge.JETMET.e1126_s1469_s1470_r3542_r3549_r17_2_7_5_3.000212.root"
60#fileNameCOMMON="/afs/cern.ch/atlas/groups/JetEtmiss/COMMON_validation/COMMON/test162_mc12.aod.100evt.physics.12_04_2013.root"
61#fileNameJETMET="/afs/cern.ch/user/t/toshi/public/NTUP_COMMON/test182_mc12.aod.100evt.qcd.root"
62#fileNameJETMET="/afs/cern.ch/user/d/delsart/public/COMMON/NTUP_COMMON_ref.root"
63
64#fileNameCOMMON="/afs/cern.ch/atlas/groups/JetEtmiss/COMMON_validation/COMMON/latesttest_mc12.aod.100evt.physics.root "
65#fileNameCOMMON="/afs/cern.ch/user/t/toshi/public/NTUP_COMMON/test173_mc12.aod.100evt.physics.root"
66#fileNameCOMMON="/afs/cern.ch/user/t/toshi/public/NTUP_COMMON/test182_mc12.aod.100evt.physics.root"
67#fileNameCOMMON="/afs/cern.ch/user/d/delsart/public/COMMON/NTUP_COMMON_new.root"
68
69
70fileJETMET = ROOT.TFile(fileNameJETMET,"READ")
71fileCOMMON = ROOT.TFile(fileNameCOMMON,"READ")
72
73treeJETMET = fileJETMET.Get(treeNameJETMET)
74if not isinstance(treeJETMET,ROOT.TTree) :
75 print ("JETMET file does not contain the specified tree. Is the tree name correct?")
76 print ("File: ",fileNameJETMET)
77 print ("Tree: ",treeNameJETMET)
78 exit(3)
79
80treeCOMMON = fileCOMMON.Get(treeNameCOMMON)
81if not isinstance(treeJETMET,ROOT.TTree):
82 print ("COMMON file does not contain the specified tree. Is the tree name correct?")
83 print ("File: ",fileNameCOMMON)
84 print ("Tree: ",treeNameCOMMON)
85 exit(4)
86
87
88
89
90
93from JetValidation.D3PDHistoBuildLib import MultipleHistoBuilderFromD3PD,JetType,JetVar
94
95
96
99
100branchesJETMET = treeJETMET.GetSetOfTreeBranchNames()
101branchesCOMMON = treeCOMMON.GetSetOfTreeBranchNames()
102branchesBOTH = frozenset.intersection(branchesJETMET,branchesCOMMON)
103brNotInCOMMON = branchesJETMET-branchesCOMMON
104brNotInJETMET = branchesCOMMON-branchesJETMET
105
106if writeBranchInformation:
107 outFile = open('Branches_JETMET.txt','w')
108 outFile.write(str(sorted(branchesJETMET)))
109 outFile.close()
110
111 outFile = open('Branches_COMMON.txt','w')
112 outFile.write(str(sorted(branchesCOMMON)))
113 outFile.close()
114
115 outFile = open('Branches_BOTH.txt','w')
116 outFile.write(str(sorted(branchesBOTH)))
117 outFile.close()
118
119 outFile = open('Branches_NotIn_COMMON.txt','w')
120 outFile.write(str(sorted(brNotInCOMMON)))
121 outFile.close()
122
123 outFile = open('Branches_NotIn_JETMET.txt','w')
124 outFile.write(str(sorted(brNotInJETMET)))
125 outFile.close()
126
127 # Write out in twiki-syntax
128 outFile = open('Twiki_Branches_NotIn_COMMON.txt','w')
129 outFile.write('| *Branch name* | *Expected* | *Confirmed by* ||\n')
130 for aBranch in sorted(brNotInCOMMON):
131 outFile.write('| !%s | ? | ? ||\n'%(aBranch))
132 outFile.close()
133
134
135
138
139if writeBranchInformation:
140 jetTypesJETMET = set([])
141 jetVarsJETMET = set([])
142 for name in branchesJETMET:
143 if "jet_" in name:
144 type = JetType(name)
145 if type is not None:
146 jetTypesJETMET.add(type)
147 jetVarsJETMET.add(JetVar(name))
148
149 jetTypesCOMMON = set([])
150 jetVarsCOMMON = set([])
151 for name in branchesCOMMON:
152 if "jet_" in name:
153 type = JetType(name)
154 if type is not None:
155 jetTypesCOMMON.add(type)
156 jetVarsCOMMON.add(JetVar(name))
157
158 jetTypesBoth = set.intersection(jetTypesJETMET,jetTypesCOMMON)
159 jetVarsBoth = set.intersection(jetVarsJETMET,jetVarsCOMMON)
160
161 # For each jet type, ensure that every variable is included
162 branchesNotExisting = []
163 for aType in jetTypesBoth:
164 for aVar in jetVarsBoth:
165 toCheck = aType + "_" + aVar
166 if toCheck not in branchesBOTH:
167 branchesNotExisting.append(toCheck)
168
169 outFile = open('Branches_JetTypes_NotExisting.txt','w')
170 outFile.write(str(sorted(branchesNotExisting)))
171 outFile.close()
172
173
174
177
178multiBuilder = MultipleHistoBuilderFromD3PD()
179multiBuilder.addTrees(treeJETMET,treeCOMMON)
180multiBuilder.createBuildersFromTrees()
181
182
183#multiBuilder.addHistosWithDefaultSelectors(["jet_AntiKt4LCTopo_constscale_pt"], "jet_AntiKt4LCTopo_pt")
184#multiBuilder.addHistosWithDefaultSelectors(["jet_AntiKt4LCTopo_constscale_pt",100,0,1000e3], "jet_AntiKt4LCTopo_pt")
185#for aBranch in multiBuilder.getBranchIntersection() :
186# if "jet_AntiKt4LC" in aBranch :
187# multiBuilder.addHistosWithDefaultSelectors(aBranch)
188# multiBuilder.addHistosWithHighPtDetscaleSelectors(aBranch)
189
190#multiBuilder.addAllHistosInBranchIntersection()
191#multiBuilder.addAllLeadingJetHistosInBranchIntersection()
192#multiBuilder.addHistosWithDefaultSelectors(*multiBuilder.getBranchIntersection())
193#multiBuilder.addHistosWithHighPtDetscaleSelectors(*multiBuilder.getBranchIntersection())
194
195for aBranch in multiBuilder.getBranchIntersection() :
196#for aBranch in ["jet_AntiKt4LCTopo_emscale_pt","jet_AntiKt4LCTopo_eta"] :
197 if "EventNumber" in aBranch:
198 multiBuilder.addHistos(aBranch)
199 if "jet_AntiKt4" in aBranch and ("LC" in aBranch or "EM" in aBranch) :
200 multiBuilder.addHistosWithLeadingJetSelectors(JetType(aBranch), aBranch)
201
202print ("\nRunning event loop...")
203multiBuilder.eventLoop()
204print ("Done event loop!")
205
206#multiBuilder.draw(0)
207#multiBuilder.canvas.Print("test.pdf")
208twikiLog = open('Twiki_ToleranceResults.log','w')
209twikiLog.write('| *Variable* | *Passes tolerance* | *Num failed/total bins* | *Largest difference (%)* ||\n')
210multiBuilder.writeAllHistoToFile("test.pdf",logFile="failsTolerance.log",twikiLogFile=twikiLog)
211twikiLog.close()
212
213multiBuilder.close()
214fileJETMET.Close()
215fileCOMMON.Close()
216
217
218
219
STL class.