11from Parse2012Input
import Read2012Histograms
12from ParseEtaIntercalInput
import ReadEtaIntercalibrationHistograms
13from ParseInsituInput
import ReadInSituHistograms
14from ParsePileupInput
import ReadPileupHistograms
15from ParseNonClosureInput
import ReadNonClosureHistograms
16from ParseHighPtInput
import ReadHighPtHistograms,ReadHighPtHistogramsFromOldFile
17from ParseFlavourInput
import ReadFlavourHistograms
18from ParsebJESInput
import ReadBJESHistograms
19from ParsePunchthroughInput
import ReadPunchthroughHistograms
22from itertools
import groupby
24 return [int(
''.join(g))
if k
else ''.join(g)
for k, g
in groupby(s[0], str.isdigit)]
48freezeFlavourInPt =
True
54 print "USAGE: Expected the following arguments"
55 print " 1. InSitu directory path"
56 print " 2. Eta intercalibration directory path"
57 print " 3. Path or directory for single-particle: currently 2012 recommendation"
58 print " 4. MC nonclosure directory path"
59 print " 5. Pileup directory path"
60 print " 6. Flavour directory path"
61 print " 7. bJES directory path"
62 print " 8. Punchthrough directory path"
65outBaselineFile =
"JESUncertainty_AllComponents_Moriond2016.root"
66inSituDir = sys.argv[1]
67etaIntercalDir = sys.argv[2]
68highPtDir = sys.argv[3]
69nonclosureDir = sys.argv[4]
70pileupDir = sys.argv[5]
71flavourDir = sys.argv[6]
73punchthroughDir = sys.argv[8]
76if not outBaselineFile.endswith(
".root"):
77 print "Output baseline ROOT file doesn't appear to be a root file:",outBaselineFile
79if not os.path.exists(inSituDir):
80 print "InSitu directory does not exist:",inSituDir
82if not os.path.exists(etaIntercalDir):
83 print "Eta intercalibration directory does not exist:",etaIntercalDir
85if not os.path.exists(highPtDir):
86 print "HighPt directory does not exist:",highPtDir
88if not os.path.exists(nonclosureDir):
89 print "MC nonclosure directory does not exist:",nonclosureDir
91if not os.path.exists(pileupDir):
92 print "Pileup directory does not exist:",pileupDir
94if not os.path.exists(flavourDir):
95 print "Flavour directory does not exist:",flavourDir
97if not os.path.exists(bJESDir):
98 print "bJES directory does not exist:",bJESDir
100if not os.path.exists(punchthroughDir):
101 print "Punchthrough directory does not exist:",punchthroughDir
105currentDir = gDirectory
109print "Reading inputs..."
112inSituHistos = ReadInSituHistograms(inSituDir)
113etaIntercalHistos = ReadEtaIntercalibrationHistograms(etaIntercalDir)
114highPtHistos = ReadHighPtHistogramsFromOldFile(highPtDir)
115nonclosureHistos = ReadNonClosureHistograms(nonclosureDir,
True)
116pileupHistos = ReadPileupHistograms(pileupDir)
117flavourHistos = ReadFlavourHistograms(flavourDir,freezeFlavourInPt)
118bJESHistos = ReadBJESHistograms(bJESDir)
119punchthroughHistos = ReadPunchthroughHistograms(punchthroughDir)
122print "Merging inputs..."
123jetDefs = {
"AntiKt4Topo_EMJES" :
"AntiKt4EMTopo"}
125for aJetDef
in jetDefs.keys():
127 print etaIntercalHistos
129 systematics[aJetDef] = dict(
130 inSituHistos[aJetDef].items() +
131 etaIntercalHistos[aJetDef].items() +
132 highPtHistos[aJetDef].items() +
133 nonclosureHistos[aJetDef].items() +
134 pileupHistos[aJetDef].items() +
135 flavourHistos[aJetDef].items() +
136 bJESHistos[aJetDef].items() +
137 punchthroughHistos[aJetDef].items()
141print "Writing to output file",outBaselineFile,
"..."
142baselineFile = TFile(outBaselineFile,
"RECREATE")
143for aJetDef,aSyst
in sorted(systematics.iteritems(),key=natural_sort):
144 for aSystName,aSystHisto
in sorted(aSyst.iteritems(),key=natural_sort):
146 aSystHisto.SetTitle(aSystName+
"_"+jetDefs[aJetDef])
147 aSystHisto.Write(aSystHisto.GetTitle())
151gDirectory = currentDir