ATLAS Offline Software
Final2012/ParseInsituInput.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
2 
3 from ROOT import *
4 from array import array
5 import glob
6 import re
7 import math
8 import ProviderHistoHelpers
9 
10 # Dictionary to translate from Bogan's names to provider names
11 SystematicNameDictionary = {
12  'gammajetdphi' : 'Gjet_dPhi',
13  'gammajetgenerator' : 'Gjet_Generator',
14  'gammajetoutofcone' : 'Gjet_OOC',
15  'gammajetphscalemat' : 'Gjet_GamESmaterial',
16  'gammajetphscaleps' : 'Gjet_GamESpresampler',
17  'gammajetphscalez' : 'Gjet_GamESZee',
18  'gammajetphsmear' : 'Gjet_GamEsmear',
19  'gammajetpurity' : 'Gjet_Purity',
20  'gammajetstat1' : 'Gjet_Stat1',
21  'gammajetstat2' : 'Gjet_Stat2',
22  'gammajetstat3' : 'Gjet_Stat3',
23  'gammajetstat4' : 'Gjet_Stat4',
24  'gammajetstat5' : 'Gjet_Stat5',
25  'gammajetstat6' : 'Gjet_Stat6',
26  'gammajetstat7' : 'Gjet_Stat7',
27  'gammajetstat8' : 'Gjet_Stat8',
28  'gammajetstat9' : 'Gjet_Stat9',
29  'gammajetstat10' : 'Gjet_Stat10',
30  'gammajetstat11' : 'Gjet_Stat11',
31  'gammajetstat12' : 'Gjet_Stat12',
32  'gammajetstat13' : 'Gjet_Stat13',
33  'gammajetsubleadingjet' : 'Gjet_Veto',
34  'mjbalpha' : 'MJB_Alpha',
35  'mjbbeta' : 'MJB_Beta',
36  'mjbmodelling' : 'MJB_Fragmentation',
37  'mjbptasymm' : 'MJB_Asym',
38  'mjbptthreshold' : 'MJB_Threshold',
39  'mjbstat1' : 'MJB_Stat1',
40  'mjbstat2' : 'MJB_Stat2',
41  'mjbstat3' : 'MJB_Stat3',
42  'mjbstat4' : 'MJB_Stat4',
43  'mjbstat5' : 'MJB_Stat5',
44  'mjbstat6' : 'MJB_Stat6',
45  'mjbstat7' : 'MJB_Stat7',
46  'mjbstat8' : 'MJB_Stat8',
47  'mjbstat9' : 'MJB_Stat9',
48  'mjbstat10' : 'MJB_Stat10',
49  'mjbstat11' : 'MJB_Stat11',
50  'zjetdphi' : 'Zjet_dPhi',
51  'zjetescalemat' : 'Zjet_ElecESmaterial',
52  'zjetescaleps' : 'Zjet_ElecESpresampler',
53  'zjetescalez' : 'Zjet_ElecESZee',
54  'zjetesmear' : 'Zjet_ElecEsmear',
55  'zjetgenerator' : 'Zjet_MC',
56  'zjetjvf' : 'Zjet_JVF',
57  'zjetmuscale' : 'Zjet_MuScale',
58  'zjetmusmearid' : 'Zjet_MuSmearID',
59  'zjetmusmearms' : 'Zjet_MuSmearMS',
60  'zjetoutofcone' : 'Zjet_KTerm',
61  'zjetstat1' : 'Zjet_Stat1',
62  'zjetstat2' : 'Zjet_Stat2',
63  'zjetstat3' : 'Zjet_Stat3',
64  'zjetstat4' : 'Zjet_Stat4',
65  'zjetstat5' : 'Zjet_Stat5',
66  'zjetstat6' : 'Zjet_Stat6',
67  'zjetstat7' : 'Zjet_Stat7',
68  'zjetstat8' : 'Zjet_Stat8',
69  'zjetstat9' : 'Zjet_Stat9',
70  'zjetstat10' : 'Zjet_Stat10',
71  'zjetstat11' : 'Zjet_Stat11',
72  'zjetsubleadingjet' : 'Zjet_Veto'
73  }
74 
75 jetDefDict = {
76  'EMJES_R4' : 'AntiKt4Topo_EMJES',
77  'EMJES_R6' : 'AntiKt6Topo_EMJES',
78  'LCJES_R4' : 'AntiKt4Topo_LCJES',
79  'LCJES_R6' : 'AntiKt6Topo_LCJES'
80  }
81 
82 def ReadInSituHistograms(dirName):
83  if not dirName.endswith("/"):
84  dirName = dirName + "/"
85 
86  # Run over each subdirectory (one per jet definition)
87  histos = {}
88  subDirs = sorted(glob.glob(dirName+"*"))
89  for aSubDirName in subDirs:
90  # Determine the jet definition
91  jetDef = ""
92  for aDirDef,aJetDef in jetDefDict.iteritems():
93  if aDirDef in aSubDirName:
94  jetDef = aJetDef
95  break
96  if jetDef == "":
97  print "Failed to determine jet definition for directory:",aSubDirName
98  return None
99  histos[jetDef] = {}
100 
101  # Loop over the systematic files in the subdirectory
102  systFiles = sorted(glob.glob(aSubDirName+"/SystError_*.txt"))
103  for aSystFile in systFiles:
104  # Figure out which component this is
105  systematicNameHandle = re.sub(aSubDirName+"/SystError_","",aSystFile)
106  systematicNameHandle = re.sub(".txt","",systematicNameHandle)
107  systematicName = SystematicNameDictionary[systematicNameHandle]
108  #print "Making histogram %s --> %s"%(systematicNameHandle,systematicName)
109 
110  # Open the file
111  systematicFile = open(aSystFile,"r")
112 
113  # Read the lines of the file into arrays
114  lowBinEdges = []
115  systValues = []
116  for line in systematicFile.readlines():
117  line = line.strip("\r\n")
118  lowEdge = float(line.split()[0])
119  systVal = float(line.split()[2].strip())
120 
121  lowBinEdges.append(lowEdge)
122  systValues.append(systVal)
123 
124  # Done reading, close the file
125  systematicFile.close()
126 
127  # Make the last bin go up to 2500
128  lowBinEdges.append(2500.)
129  systValues.append(systValues[-1])
130 
131  # Turn the lists into arrays and build the 1D histogram
132  lowBinEdgesArray = array('d',lowBinEdges)
133  systValuesArray = array('d',systValues)
134  histoName = systematicName+"_"+jetDef
135  histo1D = TH1D(histoName+"_1D",histoName+"_1D",len(lowBinEdges)-1,lowBinEdgesArray)
136 
137  # Fill it from the file values
138  for iBin in xrange(1,histo1D.GetNbinsX()+1):
139  histo1D.SetBinContent(iBin,systValues[iBin-1])
140 
141  # Convert to a 2D provider-stlye histo
142  histo = ProviderHistoHelpers.ConvertPtHistoToProviderHisto(histo1D,histoName)
143  histo.SetDirectory(0)
144  histos[jetDef][systematicName] = histo
145 
146  # EM has 10 stat parameters, LC has 11
147  # So for EM algorithms, make an empty histo for stat 11
148  if "EM" in jetDef:
149  systematicName = SystematicNameDictionary['mjbstat11']
150  histos[jetDef][systematicName] = ProviderHistoHelpers.MakeProviderHisto(systematicName+"_"+jetDef)
151  histos[jetDef][systematicName].SetDirectory(0)
152 
153 
154  # Done, return dictionary of histos
155  return histos
156 
157 
158 
159 
xrange
void xrange(TH1 *h, bool symmetric)
Definition: computils.cxx:515
TH1D
Definition: rootspy.cxx:342
ProviderHistoHelpers.MakeProviderHisto
def MakeProviderHisto(histoName, ptBins=GetDefaultPtBins(), etaBins=GetDefaultEtaBins())
Definition: Final2012/ProviderHistoHelpers.py:40
ProviderHistoHelpers.ConvertPtHistoToProviderHisto
def ConvertPtHistoToProviderHisto(histo1D, histoName)
Definition: Final2012/ProviderHistoHelpers.py:44
DerivationFramework::TriggerMatchingUtils::sorted
std::vector< typename T::value_type > sorted(T begin, T end)
Helper function to create a sorted vector from an unsorted one.
array
RCU::SetDirectory
bool SetDirectory(TObject *object, TDirectory *directory)
effects: set the directory this object is associated with returns: whether the object type actively k...
Definition: RootUtils.cxx:28
ParseInsituInput.ReadInSituHistograms
def ReadInSituHistograms(dirName)
Definition: Final2012/ParseInsituInput.py:82
Trk::open
@ open
Definition: BinningType.h:40
readCCLHist.float
float
Definition: readCCLHist.py:83