ATLAS Offline Software
PrimaryDPDHelpers.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
2 
3 
12 
13 
14 
15 from AthenaCommon.Logging import logging
16 msg = logging.getLogger( 'PrimaryDPDHelpers' )
17 
18 
19 
20 import PyUtils.RootUtils as ru
21 ROOT = ru.import_root()
22 
23 
24 # This function correctly determines the name of the output file.
25 # If the transform set the FileName to the "official" name and locked
26 # the jobProperty, that one will be used. Otherwise the user sets it.
27 def buildFileName( jobPropFlag ):
28  if jobPropFlag.is_locked() :
29  fileName = jobPropFlag.FileName
30  pass
31  else :
32  from PrimaryDPDMaker.PrimaryDPDFlags import primDPD
33  fileName = primDPD.OutputDirectoryName()+primDPD.OutputPoolRootFileNamePrefix()+jobPropFlag.StreamName+primDPD.OutputMiddleName()+".pool.root"
34  pass
35 
36  return fileName
37 
38 
39 
40 
41 
42 
43 def checkEgammaAuthor(egammaCand, authorName="either"):
44  try:
45  if authorName == "either" or authorName == "" :
46  return True
47 
48  elif authorName == "central" :
49  if ROOT.egamma.author(egammaCand) != 8 :
50  return True
51  else :
52  msg.debug("Egamma object of type=%s failed authorName=%s", type(egammaCand), authorName)
53  return False
54 
55  elif authorName == "forward" :
56  if ROOT.egamma.author(egammaCand) == 8 :
57  return True
58  else :
59  msg.debug("Egamma object of type=%s failed authorName=%s", type(egammaCand), authorName)
60  return False
61 
62  elif authorName == "onlyEgamma" or authorName == "onlyElectron" :
63  if ROOT.egamma.author(egammaCand) == 1 :
64  return True
65  else :
66  msg.debug("Egamma object of type=%s failed authorName=%s", type(egammaCand), authorName)
67  return False
68 
69  elif authorName == "egamma" or authorName == "Electron" :
70  if ROOT.egamma.author(egammaCand) == 1 or ROOT.egamma.author(egammaCand) == 3 :
71  return True
72  else :
73  msg.debug("Egamma object of type=%s failed authorName=%s", type(egammaCand), authorName)
74  return False
75 
76  elif authorName == "onlySofte" :
77  if ROOT.egamma.author(egammaCand) == 2 :
78  return True
79  else :
80  msg.debug("Egamma object of type=%s failed authorName=%s", type(egammaCand), authorName)
81  return False
82 
83  elif authorName == "softe" :
84  if ROOT.egamma.author(egammaCand) == 2 or ROOT.egamma.author(egammaCand) == 3 :
85  return True
86  else :
87  msg.debug("Egamma object of type=%s failed authorName=%s", type(egammaCand), authorName)
88  return False
89 
90  elif authorName == "eitherElectron" :
91  if ROOT.egamma.author(egammaCand) == 1 \
92  or ROOT.egamma.author(egammaCand) == 2 \
93  or ROOT.egamma.author(egammaCand) == 3 :
94  return True
95  else :
96  msg.debug("Egamma object of type=%s failed authorName=%s", type(egammaCand), authorName)
97  return False
98 
99  elif authorName == "Photon" :
100  if ROOT.egamma.author(egammaCand) == 4 :
101  return True
102  else :
103  msg.debug("Egamma object of type=%s failed authorName=%s", type(egammaCand), authorName)
104  return False
105 
106  else :
107  msg.debug("Unrecognized authorName=%s of egamma object of type=%s", authorName, type(egammaCand))
108  return False
109 
110 
111  except TypeError as e:
112  msg.error("Type error when calling checkEgammaAuthor %s",e)
113  import traceback
114  msg.error(traceback.format_exc())
115  return e
116 
117 
118  msg.error("Problem checking the author of the egamm object with provided authorName=%s and type of passed object=%s", authorName, type(egammaCand))
119  return False
120 
121 
122 
123 
124 
125 
126 
127 def checkElectronIsEM(electronCand, isemName="None"):
128  try:
129  if isemName == "None" :
130  return True
131 
132  elif isemName == "Loose" :
133  if electronCand.isem(ROOT.egammaPID.ElectronLoose) == 0 or electronCand.isem(ROOT.egammaPID.frwdElectronLoose) == 0 :
134  return True
135  else :
136  msg.debug("Electron object of type=%s failed isemName=%s", type(electronCand), isemName)
137  return False
138 
139  elif isemName == "Medium" :
140  if electronCand.isem(ROOT.egammaPID.ElectronMedium) == 0 :
141  return True
142  else :
143  msg.debug("Electron object of type=%s failed isemName=%s", type(electronCand), isemName)
144  return False
145 
146  elif isemName == "Tight" :
147  if electronCand.isem(ROOT.egammaPID.ElectronTight) == 0 or electronCand.isem(ROOT.egammaPID.frwdElectronTight) == 0 :
148  return True
149  else :
150  msg.debug("Electron object of type=%s failed isemName=%s", type(electronCand), isemName)
151  return False
152 
153  elif isemName == "TightNoIsolation" :
154  if electronCand.isem(ROOT.egammaPID.ElectronTightNoIsolation) == 0 :
155  return True
156  else :
157  msg.debug("Electron object of type=%s failed isemName=%s", type(electronCand), isemName)
158  return False
159 
160  else :
161  try :
162  assert isinstance( isemName, str )
163  cut = getattr( ROOT.egammaPID, isemName )
164  if electronCand.isem( cut ) == 0 :
165  return True
166  else :
167  msg.debug("Electron object of type=%s failed isemName=%s", type(electronCand), isemName)
168  return False
169  pass
170  except AttributeError as err :
171  msg.error("AttributeError when calling checkElectronIsEM with isemName=%s of electron object of type=%s. The error is %s", isemName, type(electronCand), err)
172  import traceback
173  msg.error(traceback.format_exc())
174  return False
175 
176 
177  except TypeError as e:
178  msg.error("Type error when calling checkElectronIsEM %s",e)
179  import traceback
180  msg.error(traceback.format_exc())
181  return e
182 
183  msg.error("Problem checking the IsEM of the electron object with provided IsEM=%s and type of passed object=%s", isemName, type(electronCand))
184  return False
185 
186 
187 
188 
189 
190 
191 def checkPhotonIsEM(photonCand, isemName="None"):
192  try:
193  if isemName == "None" :
194  return True
195 
196  elif isemName == "Loose" or isemName == "PhotonLoose" :
197  if photonCand.isem(ROOT.egammaPID.PhotonLoose) == 0 :
198  return True
199  else :
200  msg.debug("Photon object of type=%s failed isemName=%s", type(photonCand), isemName)
201  return False
202 
203  elif isemName == "Photon" or isemName == "PhotonTight" or isemName == "Tight" :
204  if photonCand.isem(ROOT.egammaPID.PhotonTight) == 0 :
205  return True
206  else :
207  msg.debug("Photon object of type=%s failed isemName=%s", type(photonCand), isemName)
208  return False
209 
210  else :
211  try :
212  assert isinstance( isemName, str )
213  cut = getattr( ROOT.egammaPID, isemName )
214  if photonCand.isem( cut ) == 0 :
215  return True
216  else :
217  msg.debug("Photon object of type=%s failed isemName=%s", type(photonCand), isemName)
218  return False
219  pass
220  except AttributeError as err :
221  msg.error("AttributeError when calling checkElectronIsEM with isemName=%s of electron object of type=%s. The error is %s", isemName, type(photonCand), err)
222  import traceback
223  msg.error(traceback.format_exc())
224  return False
225 
226  except TypeError as e:
227  msg.error("Type error when calling checkPhotonIsEM %s",e)
228  import traceback
229  msg.error(traceback.format_exc())
230  return e
231 
232  msg.error("Problem checking the IsEM of the photon object with provided IsEM=%s and type of passed object=%s", isemName, type(photonCand))
233  return False
234 
235 
236 
237 def checkMuonAuthor(muonCandidate, authorName="all"):
238 
239  try:
240  if authorName == "all" :
241  return True
242  except TypeError as e:
243  msg.error("Type error when calling checkMuonAuthor %s",e)
244  import traceback
245  msg.error(traceback.format_exc())
246  return e
247 
248  muCandAuthor = ''
249  authorNum = muonCandidate.author()
250  if authorNum == 1 or authorNum == 6 or authorNum == 12:
251  muCandAuthor = 'combined'
252  elif authorNum == 2 or authorNum == 7 or authorNum == 13:
253  muCandAuthor = 'lowpt'
254  elif authorNum == 4 or authorNum == 5 or authorNum == 10 or authorNum == 11 :
255  muCandAuthor = 'standalone'
256  elif authorNum == 14 :
257  muCandAuthor = 'calo'
258  try:
259 
260  if muCandAuthor == authorName :
261  return True
262 
263  else :
264  return False
265  except TypeError as e:
266  msg.error("Type error when calling checkMuonAuthor %s",e)
267  import traceback
268  msg.error(traceback.format_exc())
269  return e
270 
python.PrimaryDPDHelpers.checkMuonAuthor
def checkMuonAuthor(muonCandidate, authorName="all")
A small function that checks the author of the mu object.
Definition: PrimaryDPDHelpers.py:237
python.PrimaryDPDHelpers.checkEgammaAuthor
def checkEgammaAuthor(egammaCand, authorName="either")
A small function that checks the author of the egamma object.
Definition: PrimaryDPDHelpers.py:43
python.PrimaryDPDHelpers.buildFileName
def buildFileName(jobPropFlag)
Definition: PrimaryDPDHelpers.py:27
python.PrimaryDPDHelpers.checkPhotonIsEM
def checkPhotonIsEM(photonCand, isemName="None")
A small function that checks the IsEM particle ID for photons.
Definition: PrimaryDPDHelpers.py:191
python.PrimaryDPDHelpers.checkElectronIsEM
def checkElectronIsEM(electronCand, isemName="None")
A small function that checks the IsEM particle ID for electrons.
Definition: PrimaryDPDHelpers.py:127
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78