CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Public Attributes | Static Public Attributes
objects.PhotonAnalyzer.PhotonAnalyzer Class Reference
Inheritance diagram for objects.PhotonAnalyzer.PhotonAnalyzer:

Public Member Functions

def __init__
 
def attachFootprintRemovedIsolation
 
def beginLoop
 
def checkMatch
 
def computeRandomCone
 
def declareHandles
 
def makePhotons
 
def matchPhotons
 
def printInfo
 
def process
 
def randomCone
 

Public Attributes

 etaCentral
 
 footprintRemovedIsolationPUCorr
 
 IsolationComputer
 

Static Public Attributes

 conf = cfg_ana.doPhotonScaleCorrections
 
 conversionSafe_eleVeto = False,
 
 do_mc_match = True,
 
 do_randomCone = False,
 
 doFootprintRemovedIsolation = False,
 
 doPhotonScaleCorrections = False,
 
float etaMax = 2.5
 
string footprintRemovedIsolationPUCorr = 'rhoArea'
 
string gamma_isoCorr = 'rhoArea'
 
string gammaID = "PhotonCutBasedIDLoose_CSA14"
 
string packedCandidates = 'packedPFCandidates'
 
string photons = 'slimmedPhotons'
 
int ptMin = 20
 
string rhoPhoton = 'fixedGridRhoFastjetAll'
 

Detailed Description

Definition at line 23 of file PhotonAnalyzer.py.

Constructor & Destructor Documentation

def objects.PhotonAnalyzer.PhotonAnalyzer.__init__ (   self,
  cfg_ana,
  cfg_comp,
  looperName 
)

Definition at line 26 of file PhotonAnalyzer.py.

26 
27  def __init__(self, cfg_ana, cfg_comp, looperName ):
28  super(PhotonAnalyzer,self).__init__(cfg_ana,cfg_comp,looperName)
29  self.etaCentral = self.cfg_ana.etaCentral if hasattr(self.cfg_ana, 'etaCentral') else 9999
30  # footprint removed isolation
31  self.doFootprintRemovedIsolation = getattr(cfg_ana, 'doFootprintRemovedIsolation', False)
33  self.footprintRemovedIsolationPUCorr = self.cfg_ana.footprintRemovedIsolationPUCorr
self.IsolationComputer = heppy.IsolationComputer()

Member Function Documentation

def objects.PhotonAnalyzer.PhotonAnalyzer.attachFootprintRemovedIsolation (   self,
  gamma 
)

Definition at line 301 of file PhotonAnalyzer.py.

References SiStripPI.max, and str.

Referenced by objects.PhotonAnalyzer.PhotonAnalyzer.makePhotons().

302  def attachFootprintRemovedIsolation(self, gamma):
303  # cone deltar=0.3
304  gamma.ftprAbsIsoCharged03 = self.IsolationComputer.chargedAbsIso(gamma.physObj, 0.3, 0, 0.0);
305  gamma.ftprAbsIsoPho03 = self.IsolationComputer.photonAbsIsoRaw( gamma.physObj, 0.3, 0, 0.0);
306  gamma.ftprAbsIsoNHad03 = self.IsolationComputer.neutralHadAbsIsoRaw( gamma.physObj, 0.3, 0, 0.0);
307  gamma.ftprAbsIso03 = gamma.ftprAbsIsoCharged03 + gamma.ftprAbsIsoPho03 + gamma.ftprAbsIsoNHad03
308  if self.cfg_ana.gamma_isoCorr == "rhoArea":
309  gamma.ftprAbsIso03 = (max(gamma.ftprAbsIsoCharged03-gamma.rho*gamma.EffectiveArea03[0],0) + max(gamma.ftprAbsIsoPho03-gamma.rho*gamma.EffectiveArea03[1],0) + max(gamma.ftprAbsIsoNHad03 - gamma.rho*gamma.EffectiveArea03[2],0))
310  elif self.cfg_ana.gamma_isoCorr != 'raw':
311  raise RuntimeError("Unsupported gamma_isoCorr name '" + str(self.cfg_ana.gamma_isoCorr) + "'! For now only 'rhoArea', 'raw' are supported.")
312  gamma.ftprRelIso03 = gamma.ftprAbsIso03/gamma.pt()
#define str(s)
def objects.PhotonAnalyzer.PhotonAnalyzer.beginLoop (   self,
  setup 
)

Definition at line 59 of file PhotonAnalyzer.py.

59 
60  def beginLoop(self, setup):
61  super(PhotonAnalyzer,self).beginLoop(setup)
62  self.counters.addCounter('events')
63  count = self.counters.counter('events')
64  count.register('all events')
65  count.register('has >=1 gamma at preselection')
66  count.register('has >=1 selected gamma')
def objects.PhotonAnalyzer.PhotonAnalyzer.checkMatch (   self,
  eta,
  phi,
  particles,
  deltar 
)

Definition at line 232 of file PhotonAnalyzer.py.

References HLT_FULL_cff.deltaR.

Referenced by objects.PhotonAnalyzer.PhotonAnalyzer.computeRandomCone().

233  def checkMatch( self, eta, phi, particles, deltar ):
234 
235  for part in particles:
236  if deltaR(eta, phi, part.eta(), part.phi()) < deltar:
237  return True
238 
239  return False
240 
241 
242 
243 
def objects.PhotonAnalyzer.PhotonAnalyzer.computeRandomCone (   self,
  event,
  eta,
  phi,
  deltarmax,
  charged,
  jets,
  photons 
)

Definition at line 244 of file PhotonAnalyzer.py.

References objects.PhotonAnalyzer.PhotonAnalyzer.checkMatch(), and HLT_FULL_cff.deltaR.

Referenced by objects.PhotonAnalyzer.PhotonAnalyzer.randomCone().

245  def computeRandomCone( self, event, eta, phi, deltarmax, charged, jets, photons ):
246 
247  if self.checkMatch( eta, phi, jets, 2.*deltarmax ):
248  return -1.
249 
250  if self.checkMatch( eta, phi, photons, 2.*deltarmax ):
251  return -1.
252 
253  if self.checkMatch( eta, phi, event.selectedLeptons, deltarmax ):
254  return -1.
255 
256  iso = 0.
257 
258  for part in charged:
259  if deltaR(eta, phi, part.eta(), part.phi()) > deltarmax : continue
260  #if deltaR(eta, phi, part.eta(), part.phi()) < 0.02: continue
261  iso += part.pt()
262 
263  return iso
264 
265 
266 
267 
268 
def objects.PhotonAnalyzer.PhotonAnalyzer.declareHandles (   self)

Definition at line 43 of file PhotonAnalyzer.py.

References core.AutoHandle.AutoHandle.handles, core.Analyzer.Analyzer.handles, HTTP.RequestManager.handles, and core.Analyzer.Analyzer.mchandles.

43 
44  def declareHandles(self):
45  super(PhotonAnalyzer, self).declareHandles()
46  self.handles['rhoPhoton'] = AutoHandle( self.cfg_ana.rhoPhoton, 'double')
def objects.PhotonAnalyzer.PhotonAnalyzer.makePhotons (   self,
  event 
)

Definition at line 67 of file PhotonAnalyzer.py.

References funct.abs(), objects.PhotonAnalyzer.PhotonAnalyzer.attachFootprintRemovedIsolation(), objects.PhotonAnalyzer.PhotonAnalyzer.doFootprintRemovedIsolation, objects.PhotonAnalyzer.PhotonAnalyzer.etaCentral, core.AutoHandle.AutoHandle.handles, core.Analyzer.Analyzer.handles, HTTP.RequestManager.handles, and SiStripPI.max.

Referenced by objects.PhotonAnalyzer.PhotonAnalyzer.process().

67 
68  def makePhotons(self, event):
69  event.allphotons = map( Photon, self.handles['photons'].product() )
70  event.allphotons.sort(key = lambda l : l.pt(), reverse = True)
71 
72  event.selectedPhotons = []
73  event.selectedPhotonsCentral = []
74 
76  # values are taken from EGamma implementation: https://github.com/cms-sw/cmssw/blob/CMSSW_7_6_X/RecoEgamma/PhotonIdentification/plugins/PhotonIDValueMapProducer.cc#L198-L199
77  self.IsolationComputer.setPackedCandidates(self.handles['packedCandidates'].product(), -1, 0.1, 0.2)
78 
79  # Photon scale calibrations
80  if self.cfg_ana.doPhotonScaleCorrections:
81  for gamma in event.allphotons:
82  self.photonEnergyCalibrator.correct(gamma, event.run)
83 
84  foundPhoton = False
85  for gamma in event.allphotons:
86  if gamma.pt() < self.cfg_ana.ptMin: continue
87  if abs(gamma.eta()) > self.cfg_ana.etaMax: continue
88  foundPhoton = True
89 
90  gamma.rho = float(self.handles['rhoPhoton'].product()[0])
91  # https://twiki.cern.ch/twiki/bin/view/CMS/CutBasedPhotonIdentificationRun2#Selection_implementation_details
92  if abs(gamma.eta()) < 1.0: gamma.EffectiveArea03 = [ 0.0234, 0.0053, 0.078 ]
93  elif abs(gamma.eta()) < 1.479: gamma.EffectiveArea03 = [ 0.0189, 0.0103, 0.0629 ]
94  elif abs(gamma.eta()) < 2.0: gamma.EffectiveArea03 = [ 0.0171, 0.0057, 0.0264 ]
95  elif abs(gamma.eta()) < 2.2: gamma.EffectiveArea03 = [ 0.0129, 0.0070, 0.0462 ]
96  elif abs(gamma.eta()) < 2.3: gamma.EffectiveArea03 = [ 0.0110, 0.0152, 0.0740 ]
97  elif abs(gamma.eta()) < 2.4: gamma.EffectiveArea03 = [ 0.0074, 0.0232, 0.0924 ]
98  else: gamma.EffectiveArea03 = [ 0.0035, 0.1709, 0.1484 ]
99 
102 
103  gamma.relIso = (max(gamma.chargedHadronIso()-gamma.rho*gamma.EffectiveArea03[0],0) + max(gamma.neutralHadronIso()-gamma.rho*gamma.EffectiveArea03[1],0) + max(gamma.photonIso() - gamma.rho*gamma.EffectiveArea03[2],0))/gamma.pt()
104 
105  def idWP(gamma,X):
106  """Create an integer equal to 1-2-3 for (loose,medium,tight)"""
107 
108  id=0
109  if gamma.photonID(X%"Loose"):
110  id=1
111  #if gamma.photonID(X%"Medium"):
112  # id=2
113  if gamma.photonID(X%"Tight"):
114  id=3
115  return id
116 
117  gamma.idCutBased = idWP(gamma, "PhotonCutBasedID%s")
118 
119 
120  keepThisPhoton = True
121 
122  if self.cfg_ana.gammaID=="PhotonCutBasedIDLoose_CSA14" or self.cfg_ana.gammaID=="PhotonCutBasedIDLoose_PHYS14" :
123  gamma.idCutBased = gamma.photonIDCSA14(self.cfg_ana.gammaID)
124  # we're keeing sigmaietaieta sidebands:
125  keepThisPhoton = gamma.photonIDCSA14(self.cfg_ana.gammaID, True)
126 
127  if gamma.hasPixelSeed():
128  keepThisPhoton = False
129  gamma.idCutBased = 0
130  elif "NoIso" in self.cfg_ana.gammaID:
131  idName = re.split('_NoIso',self.cfg_ana.gammaID)
132  keepThisPhoton = gamma.passPhotonID(idName[0],self.cfg_ana.conversionSafe_eleVeto)
133  basenameID = re.split('_looseSieie',idName[0])
134  gamma.idCutBased = gamma.passPhotonID(basenameID[0],self.cfg_ana.conversionSafe_eleVeto)
135  else:
136  # Reading from miniAOD directly
137  #keepThisPhoton = gamma.photonID(self.cfg_ana.gammaID)
138 
139  # implement cut based ID with CMGTools
140  keepThisPhoton = gamma.passPhotonID(self.cfg_ana.gammaID,self.cfg_ana.conversionSafe_eleVeto) and gamma.passPhotonIso(self.cfg_ana.gammaID,self.cfg_ana.gamma_isoCorr)
141 
142  if keepThisPhoton:
143  event.selectedPhotons.append(gamma)
144 
145  if keepThisPhoton and abs(gamma.eta()) < self.etaCentral:
146  event.selectedPhotonsCentral.append(gamma)
147 
148  event.selectedPhotons.sort(key = lambda l : l.pt(), reverse = True)
149  event.selectedPhotonsCentral.sort(key = lambda l : l.pt(), reverse = True)
150 
151  self.counters.counter('events').inc('all events')
152  if foundPhoton: self.counters.counter('events').inc('has >=1 gamma at preselection')
153  if len(event.selectedPhotons): self.counters.counter('events').inc('has >=1 selected gamma')
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
def objects.PhotonAnalyzer.PhotonAnalyzer.matchPhotons (   self,
  event 
)

Definition at line 154 of file PhotonAnalyzer.py.

References funct.abs(), HLT_FULL_cff.deltaR, deltar.matchObjectCollection3(), and core.Analyzer.Analyzer.mchandles.

Referenced by objects.PhotonAnalyzer.PhotonAnalyzer.process().

155  def matchPhotons(self, event):
156  event.genPhotons = [ x for x in event.genParticles if x.status() == 1 and abs(x.pdgId()) == 22 ]
157  event.genPhotonsWithMom = [ x for x in event.genPhotons if x.numberOfMothers()>0 ]
158  event.genPhotonsWithoutMom = [ x for x in event.genPhotons if x.numberOfMothers()==0 ]
159  event.genPhotonsMatched = [ x for x in event.genPhotonsWithMom if abs(x.mother(0).pdgId())<23 or x.mother(0).pdgId()==2212 ]
160  match = matchObjectCollection3(event.allphotons, event.genPhotonsMatched, deltaRMax = 0.1)
161  matchNoMom = matchObjectCollection3(event.allphotons, event.genPhotonsWithoutMom, deltaRMax = 0.1)
162  packedGenParts = [ p for p in self.mchandles['packedGen'].product() if abs(p.eta()) < 3.1 ]
163  partons = [ p for p in self.mchandles['prunedGen'].product() if (p.status()==23 or p.status()==22) and abs(p.pdgId())<22 ]
164  for gamma in event.allphotons:
165  gen = match[gamma]
166  gamma.mcGamma = gen
167  if gen and gen.pt()>=0.5*gamma.pt() and gen.pt()<=2.*gamma.pt():
168  gamma.mcMatchId = 22
169  sumPt03 = 0.;
170  sumPt04 = 0.;
171  for part in packedGenParts:
172  if abs(part.pdgId())==12: continue # exclude neutrinos
173  if abs(part.pdgId())==14: continue
174  if abs(part.pdgId())==16: continue
175  if abs(part.pdgId())==18: continue
176  deltar = deltaR(gen.eta(), gen.phi(), part.eta(), part.phi())
177  if deltar <= 0.3:
178  sumPt03 += part.pt()
179  if deltar <= 0.4:
180  sumPt04 += part.pt()
181  sumPt03 -= gen.pt()
182  sumPt04 -= gen.pt()
183  if sumPt03<0. : sumPt03=0.
184  if sumPt04<0. : sumPt04=0.
185  gamma.genIso03 = sumPt03
186  gamma.genIso04 = sumPt04
187  # match to parton
188  deltaRmin = 999.
189  for p in partons:
190  deltar = deltaR(gen.eta(), gen.phi(), p.eta(), p.phi())
191  if deltar < deltaRmin:
192  deltaRmin = deltar
193  gamma.drMinParton = deltaRmin
194  else:
195  genNoMom = matchNoMom[gamma]
196  if genNoMom:
197  gamma.mcMatchId = 7
198  sumPt03 = 0.;
199  sumPt04 = 0.;
200  for part in packedGenParts:
201  if abs(part.pdgId())==12: continue # exclude neutrinos
202  if abs(part.pdgId())==14: continue
203  if abs(part.pdgId())==16: continue
204  if abs(part.pdgId())==18: continue
205  deltar = deltaR(genNoMom.eta(), genNoMom.phi(), part.eta(), part.phi())
206  if deltar <= 0.3:
207  sumPt03 += part.pt()
208  if deltar <= 0.4:
209  sumPt04 += part.pt()
210  sumPt03 -= genNoMom.pt()
211  sumPt04 -= genNoMom.pt()
212  if sumPt03<0. : sumPt03=0.
213  if sumPt04<0. : sumPt04=0.
214  gamma.genIso03 = sumPt03
215  gamma.genIso04 = sumPt04
216  # match to parton
217  deltaRmin = 999.
218  for p in partons:
219  deltar = deltaR(genNoMom.eta(), genNoMom.phi(), p.eta(), p.phi())
220  if deltar < deltaRmin:
221  deltaRmin = deltar
222  gamma.drMinParton = deltaRmin
223  else:
224  gamma.mcMatchId = 0
225  gamma.genIso03 = -1.
226  gamma.genIso04 = -1.
227  gamma.drMinParton = -1.
228 
229 
230 
231 
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
def matchObjectCollection3
Definition: deltar.py:41
def objects.PhotonAnalyzer.PhotonAnalyzer.printInfo (   self,
  event 
)

Definition at line 313 of file PhotonAnalyzer.py.

References PVValHelper.eta, ResonanceBuilder.mass, print(), and DiDispStaMuonMonitor_cfi.pt.

314  def printInfo(self, event):
315  print('----------------')
316  if len(event.selectedPhotons)>0:
317  print('lenght: ',len(event.selectedPhotons))
318  print('gamma candidate pt: ',event.selectedPhotons[0].pt())
319  print('gamma candidate eta: ',event.selectedPhotons[0].eta())
320  print('gamma candidate phi: ',event.selectedPhotons[0].phi())
321  print('gamma candidate mass: ',event.selectedPhotons[0].mass())
322  print('gamma candidate HoE: ',event.selectedPhotons[0].hOVERe())
323  print('gamma candidate r9: ',event.selectedPhotons[0].full5x5_r9())
324  print('gamma candidate sigmaIetaIeta: ',event.selectedPhotons[0].full5x5_sigmaIetaIeta())
325  print('gamma candidate had iso: ',event.selectedPhotons[0].chargedHadronIso())
326  print('gamma candidate neu iso: ',event.selectedPhotons[0].neutralHadronIso())
327  print('gamma candidate gamma iso: ',event.selectedPhotons[0].photonIso())
328  print('gamma idCutBased',event.selectedPhotons[0].idCutBased)
329 
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
def objects.PhotonAnalyzer.PhotonAnalyzer.process (   self,
  event 
)

Definition at line 330 of file PhotonAnalyzer.py.

References objects.PhotonAnalyzer.PhotonAnalyzer.makePhotons(), objects.PhotonAnalyzer.PhotonAnalyzer.matchPhotons(), objects.PhotonAnalyzer.PhotonAnalyzer.randomCone(), and core.Analyzer.Analyzer.readCollections().

331  def process(self, event):
332  self.readCollections( event.input )
333  self.makePhotons(event)
334 # self.printInfo(event)
335 
336  if self.cfg_ana.do_randomCone:
337  self.randomCone(event)
338 
339  if not self.cfg_comp.isMC:
340  return True
341 
342  if self.cfg_ana.do_mc_match and hasattr(event, 'genParticles'):
343  self.matchPhotons(event)
344 
345 
346  return True
347 
348 
setattr(PhotonAnalyzer,"defaultConfig",cfg.Analyzer(
def objects.PhotonAnalyzer.PhotonAnalyzer.randomCone (   self,
  event 
)

Definition at line 269 of file PhotonAnalyzer.py.

References funct.abs(), objects.PhotonAnalyzer.PhotonAnalyzer.computeRandomCone(), core.AutoHandle.AutoHandle.handles, core.Analyzer.Analyzer.handles, and HTTP.RequestManager.handles.

Referenced by objects.PhotonAnalyzer.PhotonAnalyzer.process().

270  def randomCone( self, event ):
271 
272  patcands = self.handles['packedCandidates'].product()
273  jets = self.handles['jets'].product()
274 
275  charged = [ p for p in patcands if ( p.charge() != 0 and abs(p.pdgId())>20 and abs(p.dz())<=0.1 and p.fromPV()>1 and p.trackHighPurity() ) ]
276  photons10 = [ p for p in patcands if ( p.pdgId() == 22 and p.pt()>10. ) ]
277  jets20 = [ j for j in jets if j.pt() > 20 and abs(j.eta())<2.5 ]
278 
279  for gamma in event.allphotons:
280 
281  etaPhot = gamma.eta()
282  phiPhot = gamma.eta()
283  pi = 3.14159
284  phiRC = phiPhot + 0.5*pi
285  while phiRC>pi:
286  phiRC -= 2.*pi
287 
288 
289  gamma.chHadIsoRC03 = self.computeRandomCone( event, etaPhot, phiRC, 0.3, charged, jets20, photons10 )
290  gamma.chHadIsoRC04 = self.computeRandomCone( event, etaPhot, phiRC, 0.4, charged, jets20, photons10 )
291 
292 
293  #try other side
294  phiRC = phiPhot - 0.5*pi
295  while phiRC<-pi:
296  phiRC += 2.*pi
297 
298  if gamma.chHadIsoRC03<0. : gamma.chHadIsoRC03 = self.computeRandomCone( event, etaPhot, phiRC, 0.3, charged, jets20, photons10 )
299  if gamma.chHadIsoRC04<0. : gamma.chHadIsoRC04 = self.computeRandomCone( event, etaPhot, phiRC, 0.4, charged, jets20, photons10 )
300 
Abs< T >::type abs(const T &t)
Definition: Abs.h:22

Member Data Documentation

objects.PhotonAnalyzer.PhotonAnalyzer.conf = cfg_ana.doPhotonScaleCorrections
static

Definition at line 36 of file PhotonAnalyzer.py.

objects.PhotonAnalyzer.PhotonAnalyzer.conversionSafe_eleVeto = False,
static

Definition at line 362 of file PhotonAnalyzer.py.

objects.PhotonAnalyzer.PhotonAnalyzer.do_mc_match = True,
static

Definition at line 363 of file PhotonAnalyzer.py.

objects.PhotonAnalyzer.PhotonAnalyzer.do_randomCone = False,
static

Definition at line 364 of file PhotonAnalyzer.py.

objects.PhotonAnalyzer.PhotonAnalyzer.doFootprintRemovedIsolation = False,
static

Definition at line 359 of file PhotonAnalyzer.py.

Referenced by objects.PhotonAnalyzer.PhotonAnalyzer.makePhotons().

objects.PhotonAnalyzer.PhotonAnalyzer.doPhotonScaleCorrections = False,
static

Definition at line 354 of file PhotonAnalyzer.py.

objects.PhotonAnalyzer.PhotonAnalyzer.etaCentral

Definition at line 28 of file PhotonAnalyzer.py.

Referenced by objects.PhotonAnalyzer.PhotonAnalyzer.makePhotons().

float objects.PhotonAnalyzer.PhotonAnalyzer.etaMax = 2.5
static

Definition at line 352 of file PhotonAnalyzer.py.

objects.PhotonAnalyzer.PhotonAnalyzer.footprintRemovedIsolationPUCorr

Definition at line 32 of file PhotonAnalyzer.py.

string objects.PhotonAnalyzer.PhotonAnalyzer.footprintRemovedIsolationPUCorr = 'rhoArea'
static

Definition at line 361 of file PhotonAnalyzer.py.

string objects.PhotonAnalyzer.PhotonAnalyzer.gamma_isoCorr = 'rhoArea'
static

Definition at line 357 of file PhotonAnalyzer.py.

string objects.PhotonAnalyzer.PhotonAnalyzer.gammaID = "PhotonCutBasedIDLoose_CSA14"
static

Definition at line 355 of file PhotonAnalyzer.py.

objects.PhotonAnalyzer.PhotonAnalyzer.IsolationComputer

Definition at line 33 of file PhotonAnalyzer.py.

string objects.PhotonAnalyzer.PhotonAnalyzer.packedCandidates = 'packedPFCandidates'
static

Definition at line 360 of file PhotonAnalyzer.py.

string objects.PhotonAnalyzer.PhotonAnalyzer.photons = 'slimmedPhotons'
static

Definition at line 350 of file PhotonAnalyzer.py.

int objects.PhotonAnalyzer.PhotonAnalyzer.ptMin = 20
static

Definition at line 351 of file PhotonAnalyzer.py.

string objects.PhotonAnalyzer.PhotonAnalyzer.rhoPhoton = 'fixedGridRhoFastjetAll'
static

Definition at line 356 of file PhotonAnalyzer.py.