11from Parse2012Input
import Read2012Histograms
12from ParseEtaIntercalInput
import ReadEtaIntercalibrationHistograms
13from ParseInsituInput
import ReadInSituHistograms
14from ParsePileupInput
import ReadPileupHistograms
15from ParseNonClosureInput
import ReadNonClosureHistograms
16from ParseHighPtInput
import ReadHighPtHistograms
17from ParseFlavourInput
import ReadFlavourHistograms
18from ParsebJESInput
import ReadBJESHistograms
19from ParsePunchthroughInput
import ReadPunchthroughHistograms
20from ParseCrossCalInput
import ReadCrossCalHistograms,ReadCrossCalValidityHistograms
23from itertools
import groupby
25 return [int(
''.join(g))
if k
else ''.join(g)
for k, g
in groupby(s[0], str.isdigit)]
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"
111outBaselineFile =
"JESUncertainty_BaseComponents_{0}.root".format(ext)
113the2012Dir = sys.argv[1]
114etaIntercalDir = sys.argv[2]
116pileupDir = sys.argv[3]
117nonclosureDir = sys.argv[4]
119flavourDir = sys.argv[5]
122crosscalDir = sys.argv[6]
125if not outBaselineFile.endswith(
".root"):
126 print "Output baseline ROOT file doesn't appear to be a root file:",outBaselineFile
131if not os.path.exists(the2012Dir):
132 print "2012 directory does not exist:",the2012Dir
134if not os.path.exists(etaIntercalDir):
135 print "Eta intercalibration directory does not exist:",etaIntercalDir
140if not os.path.exists(pileupDir):
141 print "Pileup directory does not exist:",pileupDir
143if not os.path.exists(nonclosureDir):
144 print "MC nonclosure directory does not exist:",nonclosureDir
149if not os.path.exists(flavourDir):
150 print "Flavour directory does not exist:",flavourDir
158if not os.path.exists(crosscalDir):
159 print "Cross calibration directory does not exist:",crosscalDir
163currentDir = gDirectory
167print "Reading inputs..."
170the2012Histos = Read2012Histograms(the2012Dir,scaleEtaInter3Regions,scaleEtaInter2Regions)
171etaIntercalHistos = ReadEtaIntercalibrationHistograms(etaIntercalDir)
173pileupHistos = ReadPileupHistograms(pileupDir)
174nonclosureHistos = ReadNonClosureHistograms(nonclosureDir,
True)
176flavourHistos = ReadFlavourHistograms(flavourDir,freezeFlavourInPt)
179crosscalHistos = ReadCrossCalHistograms(crosscalDir,scaleCrossCalVal,freezeCrossCalAll,freezeCrossCalBarrel,freezeCrossCalCentral)
180crosscalValHistos = ReadCrossCalValidityHistograms(crosscalDir)
183print "Merging inputs..."
184jetDefs = {
"AntiKt4Topo_EMJES" :
"AntiKt4EMTopo"}
187for 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()
205print "Writing to output file",outBaselineFile,
"..."
206baselineFile = TFile(outBaselineFile,
"RECREATE")
208for 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())
216for 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])
224gDirectory = currentDir