ATLAS Offline Software
Loading...
Searching...
No Matches
ProviderHistoHelpers Namespace Reference

Functions

 GetDefaultPtBins (numBins=100, lowVal=15.0, highVal=2500.0)
 GetDefaultEtaBins ()
 GetCentredBins (values)
 MakeProviderHisto (histoName, ptBins=GetDefaultPtBins(), etaBins=GetDefaultEtaBins())
 ConvertPtHistoToProviderHisto (histo1D, histoName)
 ConvertTGraphToProviderHisto (graph, histoName)
 ExtendPtRangeOfHisto (histo, histoName)
 SymmetrizeHistoInEta (histo, histoName)
 QuadratureSumHisto (histoName, histos)

Function Documentation

◆ ConvertPtHistoToProviderHisto()

ProviderHistoHelpers.ConvertPtHistoToProviderHisto ( histo1D,
histoName )

Definition at line 44 of file Final2012/ProviderHistoHelpers.py.

44def ConvertPtHistoToProviderHisto(histo1D,histoName):
45 histo2D = MakeProviderHisto(histoName,etaBins=[min(GetDefaultEtaBins()),0,max(GetDefaultEtaBins())])
46
47 oldMinPt = histo1D.GetXaxis().GetBinLowEdge(1)
48 oldMaxPt = histo1D.GetXaxis().GetBinLowEdge(histo1D.GetNbinsX()+1)
49 tolerance = 1.0e-4
50 for ptBin in range(1,histo2D.GetNbinsX()+1):
51 pt = histo2D.GetXaxis().GetBinCenter(ptBin)
52 unc = 0.0
53 if pt <= oldMinPt:
54 unc = histo1D.Interpolate(oldMinPt+tolerance)
55 elif pt >= oldMaxPt:
56 unc = histo1D.Interpolate(oldMaxPt+tolerance)
57 else:
58 unc = histo1D.Interpolate(pt)
59
60 for etaBin in range(1,histo2D.GetNbinsY()+1):
61 histo2D.SetBinContent(ptBin,etaBin,unc)
62
63 return histo2D
64
#define min(a, b)
Definition cfImp.cxx:40
#define max(a, b)
Definition cfImp.cxx:41

◆ ConvertTGraphToProviderHisto()

ProviderHistoHelpers.ConvertTGraphToProviderHisto ( graph,
histoName )

Definition at line 65 of file Final2012/ProviderHistoHelpers.py.

65def ConvertTGraphToProviderHisto(graph,histoName):
66 pointsX = []
67 pointsY = []
68 for iPoint in range(0,graph.GetN()):
69 px = Double(0)
70 py = Double(0)
71 graph.GetPoint(iPoint,px,py)
72 pointsX.append(px)
73 pointsY.append(py)
74
75 # Make bins with the points as the centre where possible
76 bins = GetCentredBins(pointsX)
77
78 # Extend the range to cover [15,2500] if necessary
79 if bins[0] > 15:
80 bins.insert(0,15.)
81 pointsX.inset(0,(bins[0]+bins[1])/2.0)
82 pointsY.insert(0,pointsY[0])
83
84 if bins[-1] < 2500:
85 bins.append(2500.)
86 pointsX.append((bins[-1]+bins[-2])/2.0)
87 pointsY.append(pointsY[-1])
88
89 # Make the histo and fill it
90 histo = MakeProviderHisto(histoName,ptBins=bins,etaBins=[min(GetDefaultEtaBins()),0,max(GetDefaultEtaBins())])
91 for ptBin in range(1,histo.GetNbinsX()+1):
92 for etaBin in range(1,histo.GetNbinsY()+1):
93 histo.SetBinContent(ptBin,etaBin,pointsY[ptBin-1])
94
95 return histo
96

◆ ExtendPtRangeOfHisto()

ProviderHistoHelpers.ExtendPtRangeOfHisto ( histo,
histoName )

Definition at line 97 of file Final2012/ProviderHistoHelpers.py.

97def ExtendPtRangeOfHisto(histo,histoName):
98 # Get the current bins
99 ptBins = []
100 for xBin in range(1,histo.GetNbinsX()+2):
101 ptBins.append(histo.GetXaxis().GetBinLowEdge(xBin))
102
103 # Extend only if necessary
104 if fabs(ptBins[-1] - 2500) < 1.e-4:
105 print "Histo already went to 2500 GeV, doing nothing"
106 return histo
107 elif ptBins[-1] > 2500:
108 print "Histo beyond range, cannot extend"
109 return None
110 ptBins.append(2500.)
111
112 # Get eta bins
113 etaBins = []
114 for yBin in range(1,histo.GetNbinsY()+2):
115 etaBins.append(histo.GetYaxis().GetBinLowEdge(yBin))
116
117 # Make and fill
118 newHisto = MakeProviderHisto(histoName,ptBins=ptBins,etaBins=etaBins)
119 for xBin in range(1,histo.GetNbinsX()+1):
120 for yBin in range(1,histo.GetNbinsY()+1):
121 newHisto.SetBinContent(xBin,yBin,histo.GetBinContent(xBin,yBin))
122 for yBin in range(1,histo.GetNbinsY()+1):
123 newHisto.SetBinContent(histo.GetNbinsX()+1,yBin,histo.GetBinContent(histo.GetNbinsX(),yBin))
124
125 return newHisto
126

◆ GetCentredBins()

ProviderHistoHelpers.GetCentredBins ( values)

Definition at line 28 of file Final2012/ProviderHistoHelpers.py.

28def GetCentredBins(values):
29 if len(values) == 1:
30 return [values[0]*0.5,values[0]*1.5]
31
32 binList = []
33 for iVal in range(0,len(values)-1):
34 binList.append(values[iVal]+(values[iVal+1]-values[iVal])/2.0)
35 binList.insert(0,values[0]-(values[1]-values[0])/2.0)
36 binList.append(values[-1]+(values[-1]-values[-2])/2.0)
37
38 return binList
39

◆ GetDefaultEtaBins()

ProviderHistoHelpers.GetDefaultEtaBins ( )

Definition at line 18 of file Final2012/ProviderHistoHelpers.py.

18def GetDefaultEtaBins():
19 etaValuesAsym = [0,0.15,0.3,0.8,1.0,1.2,1.65,2.1,2.45,2.8,3.0,3.2,3.6,4.5]
20 etaValuesSym = []
21 for aVal in etaValuesAsym:
22 etaValuesSym.append(aVal)
23 if fabs(aVal) > 1.e-4: # Don't double-count zero
24 etaValuesSym.append(-aVal)
25
26 return sorted(etaValuesSym)
27

◆ GetDefaultPtBins()

ProviderHistoHelpers.GetDefaultPtBins ( numBins = 100,
lowVal = 15.0,
highVal = 2500.0 )

Definition at line 10 of file Final2012/ProviderHistoHelpers.py.

10def GetDefaultPtBins(numBins=100,lowVal=15.0,highVal=2500.0):
11 dx = (math.log(highVal)-math.log(lowVal))/numBins
12 bins = []
13 for iBin in range(0,numBins+1):
14 bins.append(math.exp(math.log(lowVal)+iBin*dx))
15
16 return bins
17

◆ MakeProviderHisto()

ProviderHistoHelpers.MakeProviderHisto ( histoName,
ptBins = GetDefaultPtBins(),
etaBins = GetDefaultEtaBins() )

Definition at line 40 of file Final2012/ProviderHistoHelpers.py.

40def MakeProviderHisto(histoName,ptBins=GetDefaultPtBins(),etaBins=GetDefaultEtaBins()):
41 return TH2D(histoName,histoName,len(ptBins)-1,array('d',ptBins),len(etaBins)-1,array('d',etaBins))
42
43
STL class.

◆ QuadratureSumHisto()

ProviderHistoHelpers.QuadratureSumHisto ( histoName,
histos )

Definition at line 153 of file Final2012/ProviderHistoHelpers.py.

153def QuadratureSumHisto(histoName,histos):
154 # If it's one histo, just return it
155 if len(histos) == 1:
156 return histos[0]
157
158 # Ensure that the binning is the same
159 tolerance = 1.e-4
160 for aHisto in histos[1:]:
161 if aHisto.GetNbinsX() != histos[0].GetNbinsX():
162 print "Input histograms have different number of x bins - can't do quadrature sum safely"
163 return None
164 elif aHisto.GetNbinsY() != histos[0].GetNbinsY():
165 print "Input histograms have different number of y bins - can't do quadrature sum safely"
166 return None
167 for xBin in range(1,histos[0].GetNbinsX()+2):
168 edge = None
169 for aHisto in histos:
170 if edge is None:
171 edge = aHisto.GetXaxis().GetBinLowEdge(xBin)
172 elif fabs(edge-aHisto.GetXaxis().GetBinLowEdge(xBin)) > tolerance:
173 print "Input histograms have different x binning - can't do quadrature sum safely"
174 return None
175 for yBin in range(1,histos[0].GetNbinsY()+2):
176 edge = None
177 for aHisto in histos:
178 if edge is None:
179 edge = aHisto.GetYaxis().GetBinLowEdge(yBin)
180 elif fabs(edge-aHisto.GetYaxis().GetBinLowEdge(yBin)) > tolerance:
181 print "Input histograms have different y binning - can't do quadrature sum safely"
182 return None
183
184 # Same binning - good, we can continue
185 # Clone the first histo for the binning
186 quadSumHisto = histos[0].Clone()
187 for xBin in range(1,quadSumHisto.GetNbinsX()+1):
188 for yBin in range(1,quadSumHisto.GetNbinsY()+1):
189 quadSum = 0
190 for aHisto in histos:
191 quadSum += pow(aHisto.GetBinContent(xBin,yBin),2)
192 quadSumHisto.SetBinContent(xBin,yBin,sqrt(quadSum))
193
194 return quadSumHisto
195
196
197
198
constexpr int pow(int base, int exp) noexcept

◆ SymmetrizeHistoInEta()

ProviderHistoHelpers.SymmetrizeHistoInEta ( histo,
histoName )

Definition at line 127 of file Final2012/ProviderHistoHelpers.py.

127def SymmetrizeHistoInEta(histo,histoName):
128 # Get the current eta bins and symmetrize
129 etaBins = []
130 for yBin in range(1,histo.GetNbinsY()+2):
131 etaVal = histo.GetYaxis().GetBinLowEdge(yBin)
132 if fabs(etaVal) > 1.e-4:
133 etaBins.append(-etaVal)
134 etaBins.append(etaVal)
135 etaBins = sorted(etaBins)
136
137 # Get the current pT bins
138 ptBins = []
139 for xBin in range(1,histo.GetNbinsX()+2):
140 ptBins.append(histo.GetXaxis().GetBinLowEdge(xBin))
141
142 # Make and fill
143 newHisto = MakeProviderHisto(histoName,ptBins=ptBins,etaBins=etaBins)
144 for xBin in range(1,histo.GetNbinsX()+1):
145 xVal = histo.GetXaxis().GetBinCenter(xBin)
146 for yBin in range(1,histo.GetNbinsY()+1):
147 yVal = histo.GetYaxis().GetBinCenter(yBin)
148 newHisto.SetBinContent(newHisto.GetXaxis().FindBin(xVal),newHisto.GetYaxis().FindBin(-yVal),histo.GetBinContent(xBin,yBin))
149 newHisto.SetBinContent(newHisto.GetXaxis().FindBin(xVal),newHisto.GetYaxis().FindBin(yVal),histo.GetBinContent(xBin,yBin))
150
151 return newHisto
152