11from ParseEtaIntercalInput
import ReadEtaIntercalibrationHistograms
12from ParseInsituInput
import ReadInSituHistograms
13from ParsePileupInput
import ReadPileupHistograms
14from ParseFlavourInput
import ReadFlavourHistograms
15from ParsePunchthroughInput
import ReadPunchthroughHistograms
16from Parse2012Input
import Read2012Histograms
19from itertools
import groupby
21 return [int(
''.join(g))
if k
else ''.join(g)
for k, g
in groupby(s[0], str.isdigit)]
43scaleEtaInter3Regions =
True
44scaleEtaInter2Regions =
False
45freezeCrossCalAll =
True
46freezeCrossCalBarrel =
False
47freezeCrossCalCentral =
False
48freezeFlavourInPt =
True
52 print "USAGE: Expected the following arguments"
53 print " 1. Directory path to V+jet calibrations"
54 print " 2. Eta intercalibration directory path"
55 print " 3. Pileup directory path"
56 print " 5. Flavour directory path"
57 print " 6. Old 2012 file from which to get punchthrough"
60outBaselineFile =
"JESUncertainty_forMJB.root"
61theVPlusJetsDir = sys.argv[1]
62etaIntercalDir = sys.argv[2]
63pileupDir = sys.argv[3]
64flavourDir = sys.argv[4]
65the2012Dir = sys.argv[5]
68if not outBaselineFile.endswith(
".root"):
69 print "Output baseline ROOT file doesn't appear to be a root file:",outBaselineFile
71if not os.path.exists(theVPlusJetsDir):
72 print "V+jets directory does not exist:",theVPlusJetsDir
74if not os.path.exists(etaIntercalDir):
75 print "Eta intercalibration directory does not exist:",etaIntercalDir
77if not os.path.exists(pileupDir):
78 print "Pileup directory does not exist:",pileupDir
80if not os.path.exists(flavourDir):
81 print "Flavour directory does not exist:",flavourDir
83if not os.path.exists(the2012Dir) :
84 print "No 2012 file:",the2012Dir
88currentDir = gDirectory
92print "Reading inputs..."
95theVPlusJetsHistos = ReadInSituHistograms(theVPlusJetsDir)
96etaIntercalHistos = ReadEtaIntercalibrationHistograms(etaIntercalDir)
97pileupHistos = ReadPileupHistograms(pileupDir)
98flavourHistos = ReadFlavourHistograms(flavourDir,freezeFlavourInPt)
99the2012Histos = Read2012Histograms(the2012Dir,scaleEtaInter3Regions,scaleEtaInter2Regions)
101punchthroughHistos = {}
102for key
in the2012Histos :
103 innerDict = the2012Histos[key]
105 for name
in innerDict.keys() :
106 if "PunchThrough" in name :
107 newDict[name] = innerDict[name]
108 punchthroughHistos[key] = newDict
111print "Merging inputs..."
112jetDefs = {
"AntiKt4Topo_EMJES" :
"AntiKt4EMTopo",
"AntiKt4Topo_LCJES" :
"AntiKt4LCTopo"}
114for aJetDef
in jetDefs.keys():
116 systematics[aJetDef] = {}
117 dictsToUse = [punchthroughHistos,
123 for dictionary
in dictsToUse :
127 if aJetDef
not in dictionary.keys() :
128 useInstead = dictionary[
"AntiKt4Topo_EMJES"]
132 for item
in useInstead.keys() :
133 thisHist = useInstead[item].Clone()
134 thisHistName = useInstead[item].GetName().
replace(
"EM",
"LC")
135 thisHist.SetName(thisHistName)
136 myNewDict[item] = thisHist
138 dictionary[aJetDef] = myNewDict
140 systematics[aJetDef].update(dictionary[aJetDef].items())
143print "Writing to output file",outBaselineFile,
"..."
144baselineFile = TFile(outBaselineFile,
"RECREATE")
145for aJetDef,aSyst
in sorted(systematics.iteritems(),key=natural_sort):
146 for aSystName,aSystHisto
in sorted(aSyst.iteritems(),key=natural_sort):
148 aSystHisto.SetTitle(aSystName+
"_"+jetDefs[aJetDef])
149 aSystHisto.Write(aSystHisto.GetTitle())
153gDirectory = currentDir
std::string replace(std::string s, const std::string &s2, const std::string &s3)