4 from array
import array
11 from Parse2012Input
import Read2012Histograms
12 from ParseEtaIntercalInput
import ReadEtaIntercalibrationHistograms
13 from ParseInsituInput
import ReadInSituHistograms
14 from ParsePileupInput
import ReadPileupHistograms
15 from ParseNonClosureInput
import ReadNonClosureHistograms
16 from ParseHighPtInput
import ReadHighPtHistograms
17 from ParseFlavourInput
import ReadFlavourHistograms
18 from ParsebJESInput
import ReadBJESHistograms
19 from ParsePunchthroughInput
import ReadPunchthroughHistograms
20 from ParseCrossCalInput
import ReadCrossCalHistograms,ReadCrossCalValidityHistograms
23 from itertools
import groupby
25 return [
int(
''.
join(g))
if k
else ''.
join(g)
for k, g
in groupby(s[0], str.isdigit)]
46 if flag ==
"NOMINAL" :
47 ext =
"3EtaScaleRegions_FreezeCrossCalEverywhereSingle"
49 scaleEtaInter3Regions =
True
50 scaleEtaInter2Regions =
False
51 freezeCrossCalAll =
True
52 freezeCrossCalBarrel =
False
53 freezeCrossCalCentral =
False
54 freezeFlavourInPt =
True
57 ext =
"3EtaScaleRegions_FreezeCrossCalEverywhereDouble"
59 scaleEtaInter3Regions =
True
60 scaleEtaInter2Regions =
False
61 freezeCrossCalAll =
True
62 freezeCrossCalBarrel =
False
63 freezeFlavourInPt =
True
64 freezeCrossCalCentral =
False
67 ext =
"2EtaScaleRegions_FreezeCrossCalBarrelSingle"
69 scaleEtaInter3Regions =
False
70 scaleEtaInter2Regions =
True
71 freezeCrossCalAll =
False
72 freezeCrossCalBarrel =
True
73 freezeCrossCalCentral =
False
74 freezeFlavourInPt =
True
77 ext =
"3EtaScaleRegions_FreezeCrossCalBarrelSingle"
79 scaleEtaInter3Regions =
True
80 scaleEtaInter2Regions =
False
81 freezeCrossCalAll =
False
82 freezeCrossCalBarrel =
True
83 freezeFlavourInPt =
True
84 freezeCrossCalCentral =
False
87 ext =
"2EtaScaleRegions_FreezeCrossCalEverywhereDouble"
89 scaleEtaInter3Regions =
False
90 scaleEtaInter2Regions =
True
91 freezeCrossCalAll =
True
92 freezeCrossCalBarrel =
False
93 freezeCrossCalCentral =
False
94 freezeFlavourInPt =
True
98 print "USAGE: Expected the following arguments"
99 print " 1. Directory path to 2012 final calibrations"
100 print " 2. Eta intercalibration directory path"
102 print " 3. Pileup directory path"
103 print " 4. MC nonclosure directory path"
105 print " 5. Flavour directory path"
108 print " 6. Cross calibration directory path"
111 outBaselineFile =
"JESUncertainty_BaseComponents_{0}.root".
format(ext)
113 the2012Dir = sys.argv[1]
114 etaIntercalDir = sys.argv[2]
116 pileupDir = sys.argv[3]
117 nonclosureDir = sys.argv[4]
119 flavourDir = sys.argv[5]
122 crosscalDir = sys.argv[6]
125 if not outBaselineFile.endswith(
".root"):
126 print "Output baseline ROOT file doesn't appear to be a root file:",outBaselineFile
131 if not os.path.exists(the2012Dir):
132 print "2012 directory does not exist:",the2012Dir
134 if not os.path.exists(etaIntercalDir):
135 print "Eta intercalibration directory does not exist:",etaIntercalDir
140 if not os.path.exists(pileupDir):
141 print "Pileup directory does not exist:",pileupDir
143 if not os.path.exists(nonclosureDir):
144 print "MC nonclosure directory does not exist:",nonclosureDir
149 if not os.path.exists(flavourDir):
150 print "Flavour directory does not exist:",flavourDir
158 if not os.path.exists(crosscalDir):
159 print "Cross calibration directory does not exist:",crosscalDir
163 currentDir = gDirectory
167 print "Reading inputs..."
179 crosscalHistos =
ReadCrossCalHistograms(crosscalDir,scaleCrossCalVal,freezeCrossCalAll,freezeCrossCalBarrel,freezeCrossCalCentral)
183 print "Merging inputs..."
184 jetDefs = {
"AntiKt4Topo_EMJES" :
"AntiKt4EMTopo"}
187 for aJetDef
in jetDefs.keys():
188 systematics[aJetDef] =
dict(
189 the2012Histos[aJetDef].
items() +
190 etaIntercalHistos[aJetDef].
items() +
192 pileupHistos[aJetDef].
items() +
193 nonclosureHistos[aJetDef].
items() +
195 flavourHistos[aJetDef].
items() +
198 crosscalHistos[aJetDef].
items()
200 validities[aJetDef] =
dict(
201 crosscalValHistos[aJetDef].
items()
205 print "Writing to output file",outBaselineFile,
"..."
206 baselineFile = TFile(outBaselineFile,
"RECREATE")
208 for aJetDef,aSyst
in sorted(systematics.iteritems(),key=natural_sort):
209 for aSystName,aSystHisto
in sorted(aSyst.iteritems(),key=natural_sort):
214 aSystHisto.SetTitle(aSystName+
"_"+jetDefs[aJetDef])
215 aSystHisto.Write(aSystHisto.GetTitle())
216 for aJetDef,aVal
in sorted(validities.iteritems(),key=natural_sort):
217 for aSystName,aValHisto
in sorted(aVal.iteritems(),key=natural_sort):
219 aValHisto.SetTitle(
"valid_"+aSystName+
"_"+jetDefs[aJetDef])
224 gDirectory = currentDir