9from ParseEtaIntercalInput
import ReadEtaIntercalibrationHistograms
10from ParseInsituInput_MJB
import ReadInSituHistograms
11from ParsePileupInput
import ReadPileupHistograms
12from ParseHighPtInput
import ReadHighPtHistograms,ReadHighPtHistogramsFromOldFile
13from ParseFlavourInput
import ReadFlavourHistograms
14from ParsebJESInput
import ReadBJESHistograms
15from ParsePunchthroughInput
import ReadPunchthroughHistograms
16from CreateNonClosureInput
import CreateNonClosureHistograms
19from itertools
import groupby
21 return [int(
''.join(g))
if k
else ''.join(g)
for k, g
in groupby(s[0], str.isdigit)]
45freezeFlavourInPt =
False
51 print "USAGE: Expected the following arguments"
52 print " 1. InSitu directory path"
53 print " 2. Eta intercalibration directory path"
54 print " 3. Path or directory for single-particle: currently 2012 recommendation"
55 print " 5. Pileup directory path"
56 print " 6. Flavour directory path"
57 print " 7. bJES directory path"
58 print " 8. Punchthrough directory path"
61outBaselineFile =
"JESUncertainty_AllComponents.root"
62inSituDir = sys.argv[1]
63etaIntercalDir = sys.argv[2]
64highPtDir = sys.argv[3]
65pileupDir = sys.argv[4]
66flavourDir = sys.argv[5]
68punchthroughDir = sys.argv[7]
71if not outBaselineFile.endswith(
".root"):
72 print "Output baseline ROOT file doesn't appear to be a root file:",outBaselineFile
74if not os.path.exists(inSituDir):
75 print "InSitu directory does not exist:",inSituDir
77if not os.path.exists(etaIntercalDir):
78 print "Eta intercalibration directory does not exist:",etaIntercalDir
80if not os.path.exists(highPtDir):
81 print "HighPt directory does not exist:",highPtDir
83if not os.path.exists(pileupDir):
84 print "Pileup directory does not exist:",pileupDir
86if not os.path.exists(flavourDir):
87 print "Flavour directory does not exist:",flavourDir
89if not os.path.exists(bJESDir):
90 print "bJES directory does not exist:",bJESDir
92if not os.path.exists(punchthroughDir):
93 print "Punchthrough directory does not exist:",punchthroughDir
97currentDir = gDirectory
101print "Reading inputs..."
104inSituHistos = ReadInSituHistograms(inSituDir)
105etaIntercalHistos = ReadEtaIntercalibrationHistograms(etaIntercalDir)
106highPtHistos = ReadHighPtHistogramsFromOldFile(highPtDir)
107pileupHistos = ReadPileupHistograms(pileupDir)
108flavourHistos = ReadFlavourHistograms(flavourDir,freezeFlavourInPt)
109bJESHistos = ReadBJESHistograms(bJESDir)
110punchthroughHistos = ReadPunchthroughHistograms(punchthroughDir)
111nonClosureHists = CreateNonClosureHistograms()
114print "Merging inputs..."
115jetDefs = {
"AntiKt4Topo_EMJES" :
"AntiKt4EMTopo",
"AntiKt4PFlow_EMJES" :
"AntiKt4EMPFlow"}
117for aJetDef
in jetDefs.keys():
119 systematics[aJetDef] = dict(
120 inSituHistos[aJetDef].items() +
121 etaIntercalHistos[aJetDef].items() +
122 highPtHistos[aJetDef].items() +
123 pileupHistos[aJetDef].items() +
124 flavourHistos[aJetDef].items() +
125 bJESHistos[aJetDef].items() +
126 punchthroughHistos[aJetDef].items() +
127 nonClosureHists[aJetDef].items()
131print "Writing to output file",outBaselineFile,
"..."
132baselineFile = TFile(outBaselineFile,
"RECREATE")
133for aJetDef,aSyst
in sorted(systematics.iteritems(),key=natural_sort):
134 for aSystName,aSystHisto
in sorted(aSyst.iteritems(),key=natural_sort):
136 aSystHisto.SetTitle(aSystName+
"_"+jetDefs[aJetDef])
137 aSystHisto.Write(aSystHisto.GetTitle())
141gDirectory = currentDir