210 def configureMonitor( self ):
211
212 acc = self.helper.resobj
213 EgammaMatchTool = CompFactory.TrigEgammaMatchingToolMT()
214 EgammaMatchTool.DeltaR=0.4
215 acc.addPublicTool(EgammaMatchTool)
216 cppyy.load_library('libElectronPhotonSelectorToolsDict')
217
218
219
220 LooseElectronSelector = CompFactory.AsgElectronIsEMSelector("T0HLTLooseElectronSelector")
221 MediumElectronSelector = CompFactory.AsgElectronIsEMSelector("T0HLTMediumElectronSelector")
222 TightElectronSelector = CompFactory.AsgElectronIsEMSelector("T0HLTTightElectronSelector")
223 LooseLHSelector = CompFactory.AsgElectronLikelihoodTool("T0HLTLooseLHSelector")
224 MediumLHSelector = CompFactory.AsgElectronLikelihoodTool("T0HLTMediumLHSelector")
225 TightLHSelector = CompFactory.AsgElectronLikelihoodTool("T0HLTTightLHSelector")
226 VeryLooseLHSelector = CompFactory.AsgElectronLikelihoodTool("T0HLTVeryLooseLHSelector")
227
228
229 LooseDNNElectronSelector = CompFactory.AsgElectronSelectorTool("T0HLTLooseElectronDNNSelector")
230 MediumDNNElectronSelector = CompFactory.AsgElectronSelectorTool("T0HLTMediumElectronDNNSelector")
231 TightDNNElectronSelector = CompFactory.AsgElectronSelectorTool("T0HLTTightElectronDNNSelector")
232
233 LoosePhotonSelector = CompFactory.AsgPhotonIsEMSelector( "T0HLTLoosePhotonSelector" )
234 MediumPhotonSelector = CompFactory.AsgPhotonIsEMSelector( "T0HLTMediumPhotonSelector" )
235 TightPhotonSelector = CompFactory.AsgPhotonIsEMSelector( "T0HLTTightPhotonSelector" )
236
237 LoosePhotonSelector.ForceConvertedPhotonPID = True
238 LoosePhotonSelector.isEMMask = SelectionDefPhoton.PhotonLoose
239 MediumPhotonSelector.ForceConvertedPhotonPID = True
240 MediumPhotonSelector.isEMMask = SelectionDefPhoton.PhotonMedium
241 TightPhotonSelector.ForceConvertedPhotonPID = True
242 TightPhotonSelector.isEMMask = SelectionDefPhoton.PhotonTight
243
244
245 acc.addPublicTool(LooseElectronSelector)
246 acc.addPublicTool(MediumElectronSelector)
247 acc.addPublicTool(TightElectronSelector)
248 acc.addPublicTool(LooseLHSelector)
249 acc.addPublicTool(MediumLHSelector)
250 acc.addPublicTool(TightLHSelector)
251 acc.addPublicTool(VeryLooseLHSelector)
252 acc.addPublicTool(LooseDNNElectronSelector)
253 acc.addPublicTool(MediumDNNElectronSelector)
254 acc.addPublicTool(TightDNNElectronSelector)
255
256 if self.runFlag == '2022':
257 raise RuntimeError( '2022 (Run 3) configuration not available yet' )
258
259
260 elif self.runFlag == '2018':
261
262 LooseElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMLooseSelectorCutDefs.conf"
263 MediumElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMMediumSelectorCutDefs.conf"
264 TightElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMTightSelectorCutDefs.conf"
265
266 LooseLHSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc20_20210514/ElectronLikelihoodLooseOfflineConfig2017_CutBL_Smooth.conf"
267 MediumLHSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc20_20210514/ElectronLikelihoodMediumOfflineConfig2017_Smooth.conf"
268 TightLHSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc20_20210514/ElectronLikelihoodTightOfflineConfig2017_Smooth.conf"
269 VeryLooseLHSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc20_20210514/ElectronLikelihoodVeryLooseOfflineConfig2017_Smooth.conf"
270
271 LooseDNNElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc20_20240628/ElectronDNNMulticlassLoose.conf"
272 MediumDNNElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc20_20240628/ElectronDNNMulticlassMedium.conf"
273 TightDNNElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc20_20240628/ElectronDNNMulticlassTight.conf"
274
275 TightPhotonSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/PhotonIsEMTightSelectorCutDefs.conf"
276 MediumPhotonSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/PhotonIsEMMediumSelectorCutDefs.conf"
277 LoosePhotonSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/PhotonIsEMLooseSelectorCutDefs.conf"
278
279 elif self.runFlag == '2017':
280
281 LooseElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMLooseSelectorCutDefs.conf"
282 MediumElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMMediumSelectorCutDefs.conf"
283 TightElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMTightSelectorCutDefs.conf"
284
285 LooseLHSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20160512/ElectronLikelihoodLooseOfflineConfig2016_CutBL_Smooth.conf"
286 MediumLHSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20160512/ElectronLikelihoodMediumOfflineConfig2016_Smooth.conf"
287 TightLHSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20160512/ElectronLikelihoodTightOfflineConfig2016_Smooth.conf"
288 VeryLooseLHSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20160512/ElectronLikelihoodVeryLooseOfflineConfig2016_Smooth.conf"
289
290 LooseDNNElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc16_20210430/ElectronDNNMulticlassLoose.conf"
291 MediumDNNElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc16_20210430/ElectronDNNMulticlassMedium.conf"
292 TightDNNElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc16_20210430/ElectronDNNMulticlassTight.conf"
293
294 TightPhotonSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/PhotonIsEMTightSelectorCutDefs.conf"
295 MediumPhotonSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/PhotonIsEMMediumSelectorCutDefs.conf"
296 LoosePhotonSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/PhotonIsEMLooseSelectorCutDefs.conf"
297
298 else:
299
300 raise RuntimeError( 'Wrong run flag configuration' )
301
302
303
304 if self.activate_zee:
305 tpList = treat_list_of_chains_by_name(self.tpList, 'lh')
306 tagItems = treat_list_of_chains_by_name(self.tagItems, 'lh')
307 self.__logger.info( "Creating the Zee monitor algorithm LH only...")
308 self.zeeMonAlg = self.helper.addAlgorithm( CompFactory.TrigEgammaMonitorTagAndProbeAlgorithm, "TrigEgammaMonitorTagAndProbeAlgorithm_Zee_LH" )
309 self.zeeMonAlg.Analysis='Zee'
310 self.zeeMonAlg.MatchTool = EgammaMatchTool
311 self.zeeMonAlg.TPTrigger=False
312 self.zeeMonAlg.ElectronKey = 'Electrons'
313 self.zeeMonAlg.isEMResultNames=self.isemnames
314 self.zeeMonAlg.LHResultNames=self.lhnames
315 self.zeeMonAlg.DNNResultNames=self.dnnnames
316 self.zeeMonAlg.ElectronIsEMSelector =[TightElectronSelector,MediumElectronSelector,LooseElectronSelector]
317 self.zeeMonAlg.ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector,VeryLooseLHSelector]
318 self.zeeMonAlg.ElectronDNNSelectorTool =[TightDNNElectronSelector,MediumDNNElectronSelector,LooseDNNElectronSelector]
319 self.zeeMonAlg.ZeeLowerMass=80
320 self.zeeMonAlg.ZeeUpperMass=100
321 self.zeeMonAlg.OfflineTagMinEt=25
322 self.zeeMonAlg.OfflineTagSelector='lhtight'
323 self.zeeMonAlg.OfflineProbeSelector='lhloose'
324 self.zeeMonAlg.OppositeCharge=True
325 self.zeeMonAlg.RemoveCrack=False
326 self.zeeMonAlg.TagTriggerList=tagItems
327 self.zeeMonAlg.TriggerList=tpList
328 self.zeeMonAlg.DetailedHistograms=self.detailedHistograms
329 self.zeeMonAlg.DoEmulation = False
330 self.zeeMonAlg.ApplyJetNearProbeSelection = False
331
332
333
334 tpList = treat_list_of_chains_by_name(self.tpList, 'dnn')
335 tagItems = treat_list_of_chains_by_name(self.tagItems, 'dnn')
336 self.__logger.info( "Creating the Zee monitor algorithm DNN only...")
337 self.zeeMonAlg_dnn = self.helper.addAlgorithm( CompFactory.TrigEgammaMonitorTagAndProbeAlgorithm, "TrigEgammaMonitorTagAndProbeAlgorithm_Zee_DNN" )
338 self.zeeMonAlg_dnn.Analysis='Zee_DNN'
339 self.zeeMonAlg_dnn.MatchTool = EgammaMatchTool
340 self.zeeMonAlg_dnn.TPTrigger=False
341 self.zeeMonAlg_dnn.ElectronKey = 'Electrons'
342 self.zeeMonAlg_dnn.isEMResultNames=self.isemnames
343 self.zeeMonAlg_dnn.LHResultNames=self.lhnames
344 self.zeeMonAlg_dnn.DNNResultNames=self.dnnnames
345 self.zeeMonAlg_dnn.ElectronIsEMSelector =[TightElectronSelector,MediumElectronSelector,LooseElectronSelector]
346 self.zeeMonAlg_dnn.ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector,VeryLooseLHSelector]
347 self.zeeMonAlg_dnn.ElectronDNNSelectorTool =[TightDNNElectronSelector,MediumDNNElectronSelector,LooseDNNElectronSelector]
348 self.zeeMonAlg_dnn.ZeeLowerMass=80
349 self.zeeMonAlg_dnn.ZeeUpperMass=100
350 self.zeeMonAlg_dnn.OfflineTagMinEt=25
351 self.zeeMonAlg_dnn.OfflineTagSelector='dnntight'
352 self.zeeMonAlg_dnn.OfflineProbeSelector='dnnloose'
353 self.zeeMonAlg_dnn.OppositeCharge=True
354 self.zeeMonAlg_dnn.RemoveCrack=False
355 self.zeeMonAlg_dnn.TagTriggerList=tagItems
356 self.zeeMonAlg_dnn.TriggerList=tpList
357 self.zeeMonAlg_dnn.DetailedHistograms=self.detailedHistograms
358 self.zeeMonAlg_dnn.DoEmulation = False
359 self.zeeMonAlg_dnn.ApplyJetNearProbeSelection = False
360
361 if self.emulator:
362 self.emulator.TriggerList += self.tpList
363 self.zeeMonAlg.DoEmulation = True
364 self.zeeMonAlg.EmulationTool = self.emulator.core()
365 self.zeeMonAlg_dnn.DoEmulation = True
366 self.zeeMonAlg_dnn.EmulationTool = self.emulator.core()
367
368
369
370
371 if self.activate_jpsiee:
372
373 self.__logger.info( "Creating the Jpsiee monitor algorithm...")
374 self.jpsieeMonAlg = self.helper.addAlgorithm( CompFactory.TrigEgammaMonitorTagAndProbeAlgorithm, "TrigEgammaMonitorTagAndProbeAlgorithm_Jpsiee" )
375 self.jpsieeMonAlg.DoJpsiee=True
376 self.jpsieeMonAlg.Analysis='Jpsiee'
377 self.jpsieeMonAlg.MatchTool = EgammaMatchTool
378 self.jpsieeMonAlg.TPTrigger=False
379 self.jpsieeMonAlg.ElectronKey = 'Electrons'
380 self.jpsieeMonAlg.isEMResultNames=self.isemnames
381 self.jpsieeMonAlg.LHResultNames=self.lhnames
382 self.jpsieeMonAlg.DNNResultNames=self.dnnnames
383 self.jpsieeMonAlg.ElectronIsEMSelector =[TightElectronSelector,MediumElectronSelector,LooseElectronSelector]
384 self.jpsieeMonAlg.ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector,VeryLooseLHSelector]
385 self.jpsieeMonAlg.ElectronDNNSelectorTool =[TightDNNElectronSelector,MediumDNNElectronSelector,LooseDNNElectronSelector]
386 self.jpsieeMonAlg.ZeeLowerMass=2
387 self.jpsieeMonAlg.ZeeUpperMass=5
388 self.jpsieeMonAlg.OfflineTagMinEt=5
389 self.jpsieeMonAlg.OfflineTagSelector='lhtight'
390 self.jpsieeMonAlg.OfflineProbeSelector='lhloose'
391 self.jpsieeMonAlg.OppositeCharge=True
392 self.jpsieeMonAlg.RemoveCrack=False
393 self.jpsieeMonAlg.TagTriggerList=self.jpsitagItems
394 self.jpsieeMonAlg.TriggerList=self.jpsiList
395 self.jpsieeMonAlg.DetailedHistograms=self.detailedHistograms
396 self.jpsieeMonAlg.DoEmulation = False
397 self.jpsieeMonAlg.ApplyJetNearProbeSelection = False
398
399 if self.activate_electron:
400
401 self.__logger.info( "Creating the Electron monitor algorithm...")
402 self.elMonAlg = self.helper.addAlgorithm( CompFactory.TrigEgammaMonitorElectronAlgorithm, "TrigEgammaMonitorElectronAlgorithm" )
403 self.elMonAlg.MatchTool = EgammaMatchTool
404 self.elMonAlg.Analysis = "Electrons"
405 self.elMonAlg.ElectronKey = 'Electrons'
406 self.elMonAlg.isEMResultNames=self.isemnames
407 self.elMonAlg.LHResultNames=self.lhnames
408 self.elMonAlg.DNNResultNames=self.dnnnames
409 self.elMonAlg.ElectronIsEMSelector =[TightElectronSelector,MediumElectronSelector,LooseElectronSelector]
410 self.elMonAlg.ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector,VeryLooseLHSelector]
411 self.elMonAlg.ForcePidSelection=True
412 self.elMonAlg.ForceProbeIsolation=False
413 self.elMonAlg.ForceEtThreshold=True
414 self.elMonAlg.TriggerList=self.electronList
415 self.elMonAlg.DetailedHistograms=self.detailedHistograms
416 self.elMonAlg.DoEmulation = False
417 self.elMonAlg.ComputeEffLH = self.computeEffLH
418 self.elMonAlg.ComputeEffDNN = self.computeEffDNN
419
420 if self.emulator:
421 self.elMonAlg.DoEmulation = True
422 self.emulator.TriggerList += self.electronList
423 self.elMonAlg.EmulationTool = self.emulator.core()
424
425
426 if self.activate_photon:
427
428 self.__logger.info( "Creating the Photon monitor algorithm...")
429 self.phMonAlg = self.helper.addAlgorithm( CompFactory.TrigEgammaMonitorPhotonAlgorithm, "TrigEgammaMonitorPhotonAlgorithm" )
430 self.phMonAlg.Analysis = "Photons"
431 self.phMonAlg.MatchTool = EgammaMatchTool
432 self.phMonAlg.PhotonKey = 'Photons'
433 self.phMonAlg.PhotonIsolationKeys = ["Photons.topoetcone20", "Photons.topoetcone40"]
434 self.phMonAlg.isEMResultNames=self.isemnames
435 self.phMonAlg.LHResultNames=self.lhnames
436 self.phMonAlg.PhotonIsEMSelector =[TightPhotonSelector,MediumPhotonSelector,LoosePhotonSelector]
437 self.phMonAlg.TriggerList=self.photonList
438 self.phMonAlg.BootstrapTriggerMap = self.bootstrapMap
439 self.phMonAlg.DetailedHistograms=self.detailedHistograms
440 self.phMonAlg.ForcePidSelection=True
441 self.phMonAlg.DoUnconverted=False
442 self.phMonAlg.DoEmulation = False
443 self.phMonAlg.OnlyHLT = self.onlyHLT
444
445
446 if self.emulator:
447 self.phMonAlg.DoEmulation = True
448 self.emulator.TriggerList += self.photonList
449 self.phMonAlg.EmulationTool = self.emulator.core()
450
451
452 if self.activate_topo:
453
454 self.__logger.info( "Creating the combo monitor algorithm...")
455 self.topoMonAlg = self.helper.addAlgorithm( CompFactory.TrigEgammaMonitorTopoAlgorithm, "TrigEgammaMonitorTopoAlgorithm" )
456 self.topoMonAlg.MatchTool = EgammaMatchTool
457 self.topoMonAlg.ElectronKey = 'Electrons'
458 self.topoMonAlg.PhotonKey = 'Photons'
459 self.topoMonAlg.isEMResultNames=self.isemnames
460 self.topoMonAlg.LHResultNames=self.lhnames
461 self.topoMonAlg.DNNResultNames=self.dnnnames
462 self.topoMonAlg.ElectronIsEMSelector =[TightElectronSelector,MediumElectronSelector,LooseElectronSelector]
463 self.topoMonAlg.ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector]
464 self.topoMonAlg.DetailedHistograms=self.detailedHistograms
465 self.topoMonAlg.TriggerListConfig = self.topoList
466
467