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