ATLAS Offline Software
Public Member Functions | Public Attributes | List of all members
python.EventSelectionConfig.EventSelectionConfig Class Reference
Inheritance diagram for python.EventSelectionConfig.EventSelectionConfig:
Collaboration diagram for python.EventSelectionConfig.EventSelectionConfig:

Public Member Functions

def __init__ (self, name='')
 
def makeAlgs (self, config)
 
def interpret (self, text, cfg)
 
def raise_misconfig (self, text, keyword)
 
def raise_missinginput (self, collection)
 
def check_float (self, test, requirePositive=True)
 
def check_int (self, test, requirePositive=True)
 
def check_string (self, test)
 
def check_sign (self, test)
 
def check_btagging (self, test)
 
def check_ghosts (self, test)
 
def getCutflow (self)
 
def setDecorationName (self, algorithm, config, decoration)
 
def checkDecorationName (self, decoration)
 
def add_IMPORT (self, text, config)
 
def add_NEL_selector (self, text, config)
 
def add_NMU_selector (self, text, config)
 
def add_SUMNELNMU_selector (self, text, config)
 
def add_NJET_selector (self, text, config)
 
def add_NBJET_selector (self, text, config)
 
def add_NPH_selector (self, text, config)
 
def add_NTAU_selector (self, text, config)
 
def add_NLJET_selector (self, text, config)
 
def add_NLJETMASS_selector (self, text, config)
 
def add_NLJETMASSWINDOW_selector (self, text, config)
 
def add_NJETGHOST_selector (self, text, config)
 
def add_NLJETGHOST_selector (self, text, config)
 
def add_MET_selector (self, text, config)
 
def add_MWT_selector (self, text, config)
 
def add_METMWT_selector (self, text, config)
 
def add_MLL_selector (self, text, config)
 
def add_MLLWINDOW_selector (self, text, config)
 
def add_OS_selector (self, text, config)
 
def add_SS_selector (self, text, config)
 
def add_MLL_OSSF_selector (self, text, config)
 
def add_EVENTFLAG (self, text, config)
 
def add_GLOBALTRIGMATCH (self, text, config)
 
def add_RUNNUMBER (self, text, config)
 
def add_SAVE (self, text, config)
 

Public Attributes

 step
 
 currentDecoration
 
 cutflow
 
 name
 

Detailed Description

ConfigBlock for interpreting text-based event selections

Definition at line 34 of file EventSelectionConfig.py.

Constructor & Destructor Documentation

◆ __init__()

def python.EventSelectionConfig.EventSelectionConfig.__init__ (   self,
  name = '' 
)

Definition at line 37 of file EventSelectionConfig.py.

37  def __init__(self, name=''):
38  super(EventSelectionConfig, self).__init__()
39  self.addOption('name', name, type=str,
40  noneAction='error',
41  info="the name of the event selection, used to uniquely identify "
42  "the EventSelectionConfig block.")
43  self.addOption('electrons', "", type=str,
44  info="the input electron container, with a possible selection, in "
45  "the format container or container.selection. The default is '' "
46  "(empty string).")
47  self.addOption('muons', "", type=str,
48  info="the input muon container, with a possible selection, in the "
49  "format container or container.selection. The default is '' "
50  "(empty string).")
51  self.addOption('jets', "", type=str,
52  info="the input jet container, with a possible selection, in the "
53  "format container or container.selection. The default is '' "
54  "(empty string).")
55  self.addOption('largeRjets', "", type=str,
56  info="the large-R jet container, with a possible selection, in "
57  "the format container or container.selection. The default is '' "
58  "(empty string).")
59  self.addOption('photons', "", type=str,
60  info="the input photon container, with a possible selection, in "
61  "the format container or container.selection. The default is '' "
62  "(empty string).")
63  self.addOption('taus', "", type=str,
64  info="the input tau-jet container, with a possible selection, in "
65  "the format container or container.selection. The default is '' "
66  "(empty string).")
67  self.addOption('met', "", type=str,
68  info="he input MET container. The default is '' (empty string).")
69  #TODO: add info string
70  self.addOption('metTerm', "Final", type=str,
71  info="")
72  self.addOption('btagDecoration', "", type=str,
73  info="the b-tagging decoration to use when defining b-jets. "
74  "The default is '' (empty string).")
75  self.addOption('preselection', "", type=str,
76  info="the event-wise selection flag to start this event selection "
77  "from. The default is '' (empty string).")
78  self.addOption('selectionCuts', "", type=str,
79  noneAction='error',
80  info="a single string listing one selection cut per line.")
81  self.addOption('noFilter', False, type=bool,
82  info="do not apply an event filter. The default is False, i.e. "
83  "remove events not passing the full list of selection cuts.")
84  self.addOption('debugMode', False, type=bool,
85  info="whether to create an output branch for every single line "
86  "of the selection cuts. The default is False (only saves the"
87  " final decision).")
88  self.addOption('useDressedProperties', True, type=bool,
89  info="whether to use dressed truth electron and truth muon "
90  "kinematics rather than simple P4 kinematics.")
91  self.step = 0
92  self.currentDecoration = ''
93  self.cutflow = []
94  self.name = name
95 

Member Function Documentation

◆ add_EVENTFLAG()

def python.EventSelectionConfig.EventSelectionConfig.add_EVENTFLAG (   self,
  text,
  config 
)

Definition at line 807 of file EventSelectionConfig.py.

807  def add_EVENTFLAG(self, text, config):
808  items = text.split()
809  if items[0] != "EVENTFLAG":
810  self.raise_misconfig(text, "EVENTFLAG")
811  if len(items) != 2:
812  self.raise_misconfig(text, "number of arguments")
813  existingDecoration = self.check_string(items[1])
814  self.setDecorationName(None, config, existingDecoration)
815  return
816 

◆ add_GLOBALTRIGMATCH()

def python.EventSelectionConfig.EventSelectionConfig.add_GLOBALTRIGMATCH (   self,
  text,
  config 
)

Definition at line 817 of file EventSelectionConfig.py.

817  def add_GLOBALTRIGMATCH(self, text, config):
818  items = text.split()
819  if items[0] != "GLOBALTRIGMATCH":
820  self.raise_misconfig(text, "GLOBALTRIGMATCH")
821  if len(items) != 1 and len(items) != 2 :
822  self.raise_misconfig(text, "number of arguments")
823  if len(items) == 1:
824  self.setDecorationName(None, config, "globalTriggerMatch_%SYS%,as_char")
825  else:
826  postfix = self.check_string(items[1])
827  self.setDecorationName(None, config, f"globalTriggerMatch{postfix}_%SYS%,as_char")
828  return
829 

◆ add_IMPORT()

def python.EventSelectionConfig.EventSelectionConfig.add_IMPORT (   self,
  text,
  config 
)

Definition at line 265 of file EventSelectionConfig.py.

265  def add_IMPORT(self, text, config):
266  # this is used to import a previous selection
267  items = text.split()
268  if items[0] != "IMPORT":
269  self.raise_misconfig(text, "IMPORT")
270  if len(items) != 2:
271  self.raise_misconfig(text, "number of arguments")
272  region = self.check_string(items[1])
273  if not self.currentDecoration:
274  self.currentDecoration = f'pass_{region}_%SYS%,as_char'
275  else:
276  self.currentDecoration = f'{self.currentDecoration},as_char&&pass_{region}_%SYS%'
277  # for the cutflow, we need to retrieve all the cuts corresponding to this IMPORT
278  imported_cuts = [cut for cut in config.getSelectionCutFlow('EventInfo', '') if cut.startswith(region)]
279  self.cutflow += imported_cuts
280  return
281 

◆ add_MET_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_MET_selector (   self,
  text,
  config 
)

Definition at line 623 of file EventSelectionConfig.py.

623  def add_MET_selector(self, text, config):
624  items = text.split()
625  if items[0] != "MET":
626  self.raise_misconfig(text, "MET")
627  if len(items) != 3:
628  self.raise_misconfig(text, "number of arguments")
629  if not self.met:
630  self.raise_missinginput("MET")
631  thisalg = f'{self.name}_MET_{self.step}'
632  alg = config.createAlgorithm('CP::MissingETSelectorAlg', thisalg)
633  alg.met = config.readName(self.met)
634  alg.metTerm = self.metTerm
635  alg.sign = self.check_sign(items[1])
636  alg.refMET = self.check_float(items[2])
637  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
638  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
639  return
640 

◆ add_METMWT_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_METMWT_selector (   self,
  text,
  config 
)

Definition at line 663 of file EventSelectionConfig.py.

663  def add_METMWT_selector(self, text, config):
664  items = text.split()
665  if items[0] != "MET+MWT":
666  self.raise_misconfig(text, "MET+MWT")
667  if len(items) != 3:
668  self.raise_misconfig(text, "number of arguments")
669  if not self.met:
670  self.raise_missinginput("MET")
671  if not self.electrons and not self.muons:
672  self.raise_missinginput("electrons or muons")
673  thisalg = f'{self.name}_METMWT_{self.step}'
674  alg = config.createAlgorithm('CP::MissingETPlusTransverseMassSelectorAlg', thisalg)
675  alg.met = config.readName(self.met)
676  alg.metTerm = self.metTerm
677  alg.electrons, alg.electronSelection = config.readNameAndSelection(self.electrons)
678  alg.muons, alg.muonSelection = config.readNameAndSelection(self.muons)
679  if "Truth" in self.electrons or "Truth" in self.muons:
680  alg.useDressedProperties = self.useDressedProperties
681  alg.sign = self.check_sign(items[1])
682  alg.refMETMWT = self.check_float(items[2])
683  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
684  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
685  return
686 

◆ add_MLL_OSSF_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_MLL_OSSF_selector (   self,
  text,
  config 
)

Definition at line 778 of file EventSelectionConfig.py.

778  def add_MLL_OSSF_selector(self, text, config):
779  items = text.split()
780  if items[0] != "MLL_OSSF":
781  self.raise_misconfig(text, "MLL_OSSF")
782  if len(items) != 3 and len(items) != 4:
783  self.raise_misconfig(text, "number of arguments")
784  if not self.electrons and not self.muons:
785  self.raise_missinginput("electrons or muons")
786  thisalg = f'{self.name}_MLL_OSSF_{self.step}'
787  alg = config.createAlgorithm('CP::DileptonOSSFInvariantMassWindowSelectorAlg', thisalg)
788  if self.electrons:
789  if "Particle" in self.electrons or "Truth" in self.electrons:
790  alg.truthElectrons, alg.truthElectronSelection = config.readNameAndSelection(self.electrons)
791  else:
792  alg.electrons, alg.electronSelection = config.readNameAndSelection(self.electrons)
793  if self.muons:
794  if "Particle" in self.muons or "Truth" in self.muons:
795  alg.truthMuons, alg.truthMuonSelection = config.readNameAndSelection(self.muons)
796  else:
797  alg.muons, alg.muonSelection = config.readNameAndSelection(self.muons)
798  if "Truth" in self.electrons or "Truth" in self.muons:
799  alg.useDressedProperties = self.useDressedProperties
800  alg.lowMll = self.check_float(items[1])
801  alg.highMll = self.check_float(items[2])
802  alg.vetoMode = (len(items) == 4 and self.check_string(items[3]).lower() == "veto")
803  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
804  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
805  return
806 

◆ add_MLL_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_MLL_selector (   self,
  text,
  config 
)

Definition at line 687 of file EventSelectionConfig.py.

687  def add_MLL_selector(self, text, config):
688  items = text.split()
689  if items[0] != "MLL":
690  self.raise_misconfig(text, "MLL")
691  if len(items) != 3:
692  self.raise_misconfig(text, "number of arguments")
693  if not self.electrons and not self.muons:
694  self.raise_missinginput("electrons or muons")
695  thisalg = f'{self.name}_MLL_{self.step}'
696  alg = config.createAlgorithm('CP::DileptonInvariantMassSelectorAlg', thisalg)
697  if self.electrons:
698  alg.electrons, alg.electronSelection = config.readNameAndSelection(self.electrons)
699  if self.muons:
700  alg.muons, alg.muonSelection = config.readNameAndSelection(self.muons)
701  if "Truth" in self.electrons or "Truth" in self.muons:
702  alg.useDressedProperties = self.useDressedProperties
703  alg.sign = self.check_sign(items[1])
704  alg.refMLL = self.check_float(items[2])
705  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
706  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
707  return
708 

◆ add_MLLWINDOW_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_MLLWINDOW_selector (   self,
  text,
  config 
)

Definition at line 709 of file EventSelectionConfig.py.

709  def add_MLLWINDOW_selector(self, text, config):
710  items = text.split()
711  if items[0] != "MLLWINDOW":
712  self.raise_misconfig(text, "MLLWINDOW")
713  if len(items) != 3 and len(items) != 4:
714  self.raise_misconfig(text, "number of arguments")
715  if not self.electrons and not self.muons:
716  self.raise_missinginput("electrons or muons")
717  thisalg = f'{self.name}_MLLWINDOW_{self.step}'
718  alg = config.createAlgorithm('CP::DileptonInvariantMassWindowSelectorAlg', thisalg)
719  if self.electrons:
720  alg.electrons, alg.electronSelection = config.readNameAndSelection(self.electrons)
721  if self.muons:
722  alg.muons, alg.muonSelection = config.readNameAndSelection(self.muons)
723  if "Truth" in self.electrons or "Truth" in self.muons:
724  alg.useDressedProperties = self.useDressedProperties
725  alg.lowMLL = self.check_float(items[1])
726  alg.highMLL = self.check_float(items[2])
727  alg.vetoMode = (len(items) == 4 and self.check_string(items[3]).lower() == "veto")
728  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
729  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
730  return
731 

◆ add_MWT_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_MWT_selector (   self,
  text,
  config 
)

Definition at line 641 of file EventSelectionConfig.py.

641  def add_MWT_selector(self, text, config):
642  items = text.split()
643  if items[0] != "MWT":
644  self.raise_misconfig(text, "MWT")
645  if len(items) != 3:
646  self.raise_misconfig(text, "number of arguments")
647  if not self.electrons and not self.muons:
648  self.raise_missinginput("electrons or muons")
649  thisalg = f'{self.name}_MWT_{self.step}'
650  alg = config.createAlgorithm('CP::TransverseMassSelectorAlg', thisalg)
651  alg.met = config.readName(self.met)
652  alg.metTerm = self.metTerm
653  alg.electrons, alg.electronSelection = config.readNameAndSelection(self.electrons)
654  alg.muons, alg.muonSelection = config.readNameAndSelection(self.muons)
655  if "Truth" in self.electrons or "Truth" in self.muons:
656  alg.useDressedProperties = self.useDressedProperties
657  alg.sign = self.check_sign(items[1])
658  alg.refMWT = self.check_float(items[2])
659  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
660  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
661  return
662 

◆ add_NBJET_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_NBJET_selector (   self,
  text,
  config 
)

Definition at line 398 of file EventSelectionConfig.py.

398  def add_NBJET_selector(self, text, config):
399  items = text.split()
400  if items[0] != "JET_N_BTAG":
401  self.raise_misconfig(text, "JET_N_BTAG")
402  if len(items) != 3 and len(items) != 4 and len(items) != 5:
403  self.raise_misconfig(text, "number of arguments")
404  if not self.jets:
405  self.raise_missinginput("jets")
406  thisalg = f'{self.name}_NBJET_{self.step}'
407  alg = config.createAlgorithm('CP::NObjectPtSelectorAlg', thisalg)
408  particles, selection = config.readNameAndSelection(self.jets)
409  alg.particles = particles
410  alg.objectSelection = f'{selection}&&{self.btagDecoration},as_char' if selection else f'{self.btagDecoration},as_char'
411  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
412  if len(items) == 3:
413  alg.sign = self.check_sign(items[1])
414  alg.count = self.check_int(items[2])
415  elif len(items) == 4:
416  if ":" in text:
417  btagger, btagWP = self.check_btagging(items[1])
418  customBtag = f'ftag_select_{btagger}_{btagWP}'
419  alg.objectSelection = f'{selection}&&{customBtag},as_char' if selection else f'{customBtag},as_char'
420  else:
421  extraSel = self.check_string(items[1])
422  alg.objectSelection += "&&" + config.getFullSelection(self.jets.split(".")[0], extraSel)
423  alg.sign = self.check_sign(items[2])
424  alg.count = self.check_int(items[3])
425  elif len(items) == 5:
426  extraSel = self.check_string(items[1])
427  btagger, btagWP = self.check_btagging(items[2])
428  customBtag = f'ftag_select_{btagger}_{btagWP}'
429  alg.objectSelection = f'{selection}&&{customBtag},as_char' if selection else f'{customBtag},as_char'
430  alg.objectSelection+= "&&" + config.getFullSelection(self.jets.split(".")[0], extraSel)
431  alg.sign = self.check_sign(items[3])
432  alg.count = self.check_int(items[4])
433  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
434  return
435 

◆ add_NEL_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_NEL_selector (   self,
  text,
  config 
)

Definition at line 282 of file EventSelectionConfig.py.

282  def add_NEL_selector(self, text, config):
283  items = text.split()
284  if items[0] != "EL_N":
285  self.raise_misconfig(text, "EL_N")
286  if len(items) != 4 and len(items) != 5:
287  self.raise_misconfig(text, "number of arguments")
288  if not self.electrons:
289  self.raise_missinginput("electrons")
290  thisalg = f'{self.name}_NEL_{self.step}'
291  alg = config.createAlgorithm('CP::NObjectPtSelectorAlg', thisalg)
292  alg.particles, alg.objectSelection = config.readNameAndSelection(self.electrons)
293  if "Truth" in self.electrons:
294  alg.useDressedProperties = self.useDressedProperties
295  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
296  if len(items) == 4:
297  alg.minPt = self.check_float(items[1])
298  alg.sign = self.check_sign(items[2])
299  alg.count = self.check_int(items[3])
300  elif len(items) == 5:
301  extraSel = self.check_string(items[1])
302  if alg.objectSelection:
303  alg.objectSelection += "&&" + config.getFullSelection(self.electrons.split(".")[0], extraSel)
304  else:
305  alg.objectSelection = config.getFullSelection(self.electrons.split(".")[0], extraSel)
306  alg.minPt = self.check_float(items[2])
307  alg.sign = self.check_sign(items[3])
308  alg.count = self.check_int(items[4])
309  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
310  return
311 

◆ add_NJET_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_NJET_selector (   self,
  text,
  config 
)

Definition at line 370 of file EventSelectionConfig.py.

370  def add_NJET_selector(self, text, config):
371  items = text.split()
372  if items[0] != "JET_N":
373  self.raise_misconfig(text, "JET_N")
374  if len(items) != 4 and len(items) != 5:
375  self.raise_misconfig(text, "number of arguments")
376  if not self.jets:
377  self.raise_missinginput("jets")
378  thisalg = f'{self.name}_NJET_{self.step}'
379  alg = config.createAlgorithm('CP::NObjectPtSelectorAlg', thisalg)
380  alg.particles, alg.objectSelection = config.readNameAndSelection(self.jets)
381  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
382  if len(items) == 4:
383  alg.minPt = self.check_float(items[1])
384  alg.sign = self.check_sign(items[2])
385  alg.count = self.check_int(items[3])
386  elif len(items) == 5:
387  extraSel = self.check_string(items[1])
388  if alg.objectSelection:
389  alg.objectSelection += "&&" + config.getFullSelection(self.jets.split(".")[0], extraSel)
390  else:
391  alg.objectSelection = config.getFullSelection(self.jets.split(".")[0], extraSel)
392  alg.minPt = self.check_float(items[2])
393  alg.sign = self.check_sign(items[3])
394  alg.count = self.check_int(items[4])
395  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
396  return
397 

◆ add_NJETGHOST_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_NJETGHOST_selector (   self,
  text,
  config 
)

Definition at line 575 of file EventSelectionConfig.py.

575  def add_NJETGHOST_selector(self, text, config):
576  items = text.split()
577  if items[0] != "JET_N_GHOST":
578  self.raise_misconfig(text, "JET_N_GHOST")
579  if len(items) != 4 and len(items) != 5:
580  self.raise_misconfig(text, "number of arguments")
581  thisalg = f'{self.name}_NJETGHOST_{self.step}'
582  alg = config.createAlgorithm('CP::JetNGhostSelectorAlg', thisalg)
583  alg.jets, alg.jetSelection = config.readNameAndSelection(self.jets)
584  ghosts = self.check_ghosts(items[1])
585  alg.ghost = ghosts[0]
586  if len(ghosts) > 1 :
587  alg.veto = ghosts[1]
588  if len(items) == 4:
589  alg.sign = self.check_sign(items[2])
590  alg.count = self.check_int(items[3])
591  elif len(items) == 5:
592  alg.minPt = self.check_float(items[2])
593  alg.sign = self.check_sign(items[3])
594  alg.count = self.check_int(items[4])
595  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
596  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
597  return
598 

◆ add_NLJET_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_NLJET_selector (   self,
  text,
  config 
)

Definition at line 492 of file EventSelectionConfig.py.

492  def add_NLJET_selector(self, text, config):
493  items = text.split()
494  if items[0] != "LJET_N":
495  self.raise_misconfig(text, "LJET_N")
496  if len(items) != 4 and len(items) != 5:
497  self.raise_misconfig(text, "number of arguments")
498  thisalg = f'{self.name}_NLJET_{self.step}'
499  alg = config.createAlgorithm('CP::NObjectPtSelectorAlg', thisalg)
500  alg.particles, alg.objectSelection = config.readNameAndSelection(self.largeRjets)
501  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
502  if len(items) == 4:
503  alg.minPt = self.check_float(items[1])
504  alg.sign = self.check_sign(items[2])
505  alg.count = self.check_int(items[3])
506  elif len(items) == 5:
507  extraSel = self.check_string(items[1])
508  if alg.objectSelection:
509  alg.objectSelection += "&&" + config.getFullSelection(self.largeRjets.split(".")[0], extraSel)
510  else:
511  alg.objectSelection = config.getFullSelection(self.largeRjets.split(".")[0], extraSel)
512  alg.minPt = self.check_float(items[2])
513  alg.sign = self.check_sign(items[3])
514  alg.count = self.check_int(items[4])
515  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
516  return
517 

◆ add_NLJETGHOST_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_NLJETGHOST_selector (   self,
  text,
  config 
)

Definition at line 599 of file EventSelectionConfig.py.

599  def add_NLJETGHOST_selector(self, text, config):
600  items = text.split()
601  if items[0] != "LJET_N_GHOST":
602  self.raise_misconfig(text, "LJET_N_GHOST")
603  if len(items) != 4 and len(items) != 5:
604  self.raise_misconfig(text, "number of arguments")
605  thisalg = f'{self.name}_NLJETGHOST_{self.step}'
606  alg = config.createAlgorithm('CP::JetNGhostSelectorAlg', thisalg)
607  alg.jets, alg.jetSelection = config.readNameAndSelection(self.largeRjets)
608  ghosts = self.check_ghosts(items[1])
609  alg.ghost = ghosts[0]
610  if len(ghosts) > 1 :
611  alg.veto = ghosts[1]
612  if len(items) == 4:
613  alg.sign = self.check_sign(items[2])
614  alg.count = self.check_int(items[3])
615  elif len(items) == 5:
616  alg.minPt = self.check_float(items[2])
617  alg.sign = self.check_sign(items[3])
618  alg.count = self.check_int(items[4])
619  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
620  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
621  return
622 

◆ add_NLJETMASS_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_NLJETMASS_selector (   self,
  text,
  config 
)

Definition at line 518 of file EventSelectionConfig.py.

518  def add_NLJETMASS_selector(self, text, config):
519  items = text.split()
520  if items[0] != "LJETMASS_N":
521  self.raise_misconfig(text, "LJETMASS_N")
522  if len(items) != 4 and len(items) != 5:
523  self.raise_misconfig(text, "number of arguments")
524  thisalg = f'{self.name}_NLJETMASS_{self.step}'
525  alg = config.createAlgorithm('CP::NObjectMassSelectorAlg', thisalg)
526  alg.particles, alg.objectSelection = config.readNameAndSelection(self.largeRjets)
527  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
528  if len(items) == 4:
529  alg.minMass = self.check_float(items[1])
530  alg.sign = self.check_sign(items[2])
531  alg.count = self.check_int(items[3])
532  elif len(items) == 5:
533  extraSel = self.check_string(items[1])
534  if alg.objectSelection:
535  alg.objectSelection += "&&" + config.getFullSelection(self.largeRjets.split(".")[0], extraSel)
536  else:
537  alg.objectSelection = config.getFullSelection(self.largeRjets.split(".")[0], extraSel)
538  alg.minMass = self.check_float(items[2])
539  alg.sign = self.check_sign(items[3])
540  alg.count = self.check_int(items[4])
541  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
542  return
543 

◆ add_NLJETMASSWINDOW_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_NLJETMASSWINDOW_selector (   self,
  text,
  config 
)

Definition at line 544 of file EventSelectionConfig.py.

544  def add_NLJETMASSWINDOW_selector(self, text, config):
545  items = text.split()
546  if items[0] != "LJETMASSWINDOW_N":
547  self.raise_misconfig(text, "LJETMASSWINDOW_N")
548  if len(items) != 5 and len(items) != 6 and len(items) != 7:
549  self.raise_misconfig(text, "number of arguments")
550  thisalg = f'{self.name}_NLJETMASSWINDOW_{self.step}'
551  alg = config.createAlgorithm('CP::NLargeRJetMassWindowSelectorAlg', thisalg)
552  alg.ljets, alg.ljetSelection = config.readNameAndSelection(self.largeRjets)
553  vetoMode = items[-1] == 'veto' or items[-1] == 'VETO'
554  if len(items) == 5 or (len(items) == 6 and vetoMode):
555  alg.lowMass = self.check_float(items[1])
556  alg.highMass = self.check_float(items[2])
557  alg.sign = self.check_sign(items[3])
558  alg.count = self.check_int(items[4])
559  alg.vetoMode = vetoMode
560  elif (len(items) == 6 and not vetoMode) or len(items) == 7:
561  extraSel = self.check_string(items[1])
562  if alg.ljetSelection:
563  alg.ljetSelection += "&&" + config.getFullSelection(self.largeRjets.split(".")[0], extraSel)
564  else:
565  alg.ljetSelection = config.getFullSelection(self.largeRjets.split(".")[0], extraSel)
566  alg.lowMass = self.check_float(items[2])
567  alg.highMass = self.check_float(items[3])
568  alg.sign = self.check_sign(items[4])
569  alg.count = self.check_int(items[5])
570  alg.vetoMode = vetoMode
571  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
572  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
573  return
574 

◆ add_NMU_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_NMU_selector (   self,
  text,
  config 
)

Definition at line 312 of file EventSelectionConfig.py.

312  def add_NMU_selector(self, text, config):
313  items = text.split()
314  if items[0] != "MU_N":
315  self.raise_misconfig(text, "MU_N")
316  if len(items) != 4 and len(items) != 5:
317  self.raise_misconfig(text, "number of arguments")
318  if not self.muons:
319  self.raise_missinginput("muons")
320  thisalg = f'{self.name}_NMU_{self.step}'
321  alg = config.createAlgorithm('CP::NObjectPtSelectorAlg', thisalg)
322  alg.particles, alg.objectSelection = config.readNameAndSelection(self.muons)
323  if "Truth" in self.muons:
324  alg.useDressedProperties = self.useDressedProperties
325  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
326  if len(items) == 4:
327  alg.minPt = self.check_float(items[1])
328  alg.sign = self.check_sign(items[2])
329  alg.count = self.check_int(items[3])
330  elif len(items) == 5:
331  extraSel = self.check_string(items[1])
332  if alg.objectSelection:
333  alg.objectSelection += "&&" + config.getFullSelection(self.muons.split(".")[0], extraSel)
334  else:
335  alg.objectSelection = config.getFullSelection(self.muons.split(".")[0], extraSel)
336  alg.minPt = self.check_float(items[2])
337  alg.sign = self.check_sign(items[3])
338  alg.count = self.check_int(items[4])
339  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
340  return
341 

◆ add_NPH_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_NPH_selector (   self,
  text,
  config 
)

Definition at line 436 of file EventSelectionConfig.py.

436  def add_NPH_selector(self, text, config):
437  items = text.split()
438  if items[0] != "PH_N":
439  self.raise_misconfig(text, "PH_N")
440  if len(items) != 4 and len(items) != 5:
441  self.raise_misconfig(text, "number of arguments")
442  if not self.photons:
443  self.raise_missinginput("photons")
444  thisalg = f'{self.name}_NPH_{self.step}'
445  alg = config.createAlgorithm('CP::NObjectPtSelectorAlg', thisalg)
446  alg.particles, alg.objectSelection = config.readNameAndSelection(self.photons)
447  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
448  if len(items) == 4:
449  alg.minPt = self.check_float(items[1])
450  alg.sign = self.check_sign(items[2])
451  alg.count = self.check_int(items[3])
452  elif len(items) == 5:
453  extraSel = self.check_string(items[1])
454  if alg.objectSelection:
455  alg.objectSelection += "&&" + config.getFullSelection(self.photons.split(".")[0], extraSel)
456  else:
457  alg.objectSelection = config.getFullSelection(self.photons.split(".")[0], extraSel)
458  alg.minPt = self.check_float(items[2])
459  alg.sign = self.check_sign(items[3])
460  alg.count = self.check_int(items[4])
461  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
462  return
463 

◆ add_NTAU_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_NTAU_selector (   self,
  text,
  config 
)

Definition at line 464 of file EventSelectionConfig.py.

464  def add_NTAU_selector(self, text, config):
465  items = text.split()
466  if items[0] != "TAU_N":
467  self.raise_misconfig(text, "TAU_N")
468  if len(items) != 4 and len(items) != 5:
469  self.raise_misconfig(text, "number of arguments")
470  if not self.taus:
471  self.raise_missinginput("taus")
472  thisalg = f'{self.name}_NTAU_{self.step}'
473  alg = config.createAlgorithm('CP::NObjectPtSelectorAlg', thisalg)
474  alg.particles, alg.objectSelection = config.readNameAndSelection(self.taus)
475  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
476  if len(items) == 4:
477  alg.minPt = self.check_float(items[1])
478  alg.sign = self.check_sign(items[2])
479  alg.count = self.check_int(items[3])
480  elif len(items) == 5:
481  extraSel = self.check_string(items[1])
482  if alg.objectSelection:
483  alg.objectSelection += "&&" + config.getFullSelection(self.taus.split(".")[0], extraSel)
484  else:
485  alg.objectSelection = config.getFullSelection(self.taus.split(".")[0], extraSel)
486  alg.minPt = self.check_float(items[2])
487  alg.sign = self.check_sign(items[3])
488  alg.count = self.check_int(items[4])
489  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
490  return
491 

◆ add_OS_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_OS_selector (   self,
  text,
  config 
)

Definition at line 732 of file EventSelectionConfig.py.

732  def add_OS_selector(self, text, config):
733  items = text.split()
734  if len(items) != 1:
735  self.raise_misconfig(text, "number of arguments")
736  if not self.electrons and not self.muons:
737  self.raise_missinginput("electrons or muons")
738  thisalg = f'{self.name}_OS_{self.step}'
739  alg = config.createAlgorithm('CP::ChargeSelectorAlg', thisalg)
740  if self.electrons:
741  if "Particle" in self.electrons or "Truth" in self.electrons:
742  alg.truthElectrons, alg.truthElectronSelection = config.readNameAndSelection(self.electrons)
743  else:
744  alg.electrons, alg.electronSelection = config.readNameAndSelection(self.electrons)
745  if self.muons:
746  if "Particle" in self.muons or "Truth" in self.muons:
747  alg.truthMuons, alg.truthMuonSelection = config.readNameAndSelection(self.muons)
748  else:
749  alg.muons, alg.muonSelection = config.readNameAndSelection(self.muons)
750  alg.OS = True
751  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
752  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
753  return
754 

◆ add_RUNNUMBER()

def python.EventSelectionConfig.EventSelectionConfig.add_RUNNUMBER (   self,
  text,
  config 
)

Definition at line 830 of file EventSelectionConfig.py.

830  def add_RUNNUMBER(self, text, config):
831  items = text.split()
832  if items[0] != "RUN_NUMBER":
833  self.raise_misconfig(text, "RUN_NUMBER")
834  if len(items) != 3:
835  self.raise_misconfig(text, "number of arguments")
836  thisalg = f'{self.name}_RUN_NUMBER_{self.step}'
837  alg = config.createAlgorithm('CP::RunNumberSelectorAlg', thisalg)
838  alg.sign = self.check_sign(items[1])
839  alg.runNumber = self.check_int(items[2])
840  alg.useRandomRunNumber = config.dataType() is not DataType.Data
841  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
842  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
843  return
844 

◆ add_SAVE()

def python.EventSelectionConfig.EventSelectionConfig.add_SAVE (   self,
  text,
  config 
)

Definition at line 845 of file EventSelectionConfig.py.

845  def add_SAVE(self, text, config):
846  items = text.split()
847  if items[0] != "SAVE":
848  self.raise_misconfig(text, "SAVE")
849  if len(items) != 1:
850  self.raise_misconfig(text, "number of arguments")
851  thisalg = f'{self.name}_SAVE'
852  alg = config.createAlgorithm('CP::SaveFilterAlg', thisalg)
853  alg.FilterDescription = f'events passing < {self.name} >'
854  alg.eventDecisionOutputDecoration = f'ignore_{self.name}_%SYS%'
855  alg.selection = self.checkDecorationName(self.currentDecoration)
856  alg.noFilter = self.noFilter
857  alg.selectionName = f'pass_{self.name}_%SYS%,as_char' # this one is used as a selection
858  alg.decorationName = f'ntuplepass_{self.name}_%SYS%' # this one is saved to file
859  config.addOutputVar('EventInfo', f'ntuplepass_{self.name}_%SYS%', f'pass_{self.name}')
860  return
861 

◆ add_SS_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_SS_selector (   self,
  text,
  config 
)

Definition at line 755 of file EventSelectionConfig.py.

755  def add_SS_selector(self, text, config):
756  items = text.split()
757  if len(items) != 1:
758  self.raise_misconfig(text, "number of arguments")
759  if not self.electrons and not self.muons:
760  self.raise_missinginput("electrons or muons")
761  thisalg = f'{self.name}_SS_{self.step}'
762  alg = config.createAlgorithm('CP::ChargeSelectorAlg', thisalg)
763  if self.electrons:
764  if "Particle" in self.electrons or "Truth" in self.electrons:
765  alg.truthElectrons, alg.truthElectronSelection = config.readNameAndSelection(self.electrons)
766  else:
767  alg.electrons, alg.electronSelection = config.readNameAndSelection(self.electrons)
768  if self.muons:
769  if "Particle" in self.muons or "Truth" in self.muons:
770  alg.truthMuons, alg.truthMuonSelection = config.readNameAndSelection(self.muons)
771  else:
772  alg.muons, alg.muonSelection = config.readNameAndSelection(self.muons)
773  alg.OS = False
774  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
775  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
776  return
777 

◆ add_SUMNELNMU_selector()

def python.EventSelectionConfig.EventSelectionConfig.add_SUMNELNMU_selector (   self,
  text,
  config 
)

Definition at line 342 of file EventSelectionConfig.py.

342  def add_SUMNELNMU_selector(self, text, config):
343  items = text.split()
344  if items[0] != "SUM_EL_N_MU_N":
345  self.raise_misconfig(text, "SUM_EL_N_MU_N")
346  if len(items) != 4 and len(items) != 5:
347  self.raise_misconfig(text, "number of arguments")
348  if not self.electrons and not self.muons:
349  self.raise_missinginput("electrons or muons")
350  thisalg = f'{self.name}_SUMNELNMU_{self.step}'
351  alg = config.createAlgorithm('CP::SumNElNMuPtSelectorAlg', thisalg)
352  alg.electrons, alg.electronSelection = config.readNameAndSelection(self.electrons)
353  alg.muons, alg.muonSelection = config.readNameAndSelection(self.muons)
354  if "Truth" in self.electrons:
355  alg.useDressedProperties = self.useDressedProperties
356  alg.eventPreselection = self.checkDecorationName(self.currentDecoration)
357  if len(items) == 4:
358  alg.minPtEl = self.check_float(items[1])
359  alg.minPtMu = self.check_float(items[1])
360  alg.sign = self.check_sign(items[2])
361  alg.count = self.check_int(items[3])
362  elif len(items) == 5:
363  alg.minPtEl = self.check_float(items[1])
364  alg.minPtMu = self.check_float(items[2])
365  alg.sign = self.check_sign(items[3])
366  alg.count = self.check_int(items[4])
367  self.setDecorationName(alg, config, f'{thisalg}_%SYS%')
368  return
369 

◆ check_btagging()

def python.EventSelectionConfig.EventSelectionConfig.check_btagging (   self,
  test 
)

Definition at line 219 of file EventSelectionConfig.py.

219  def check_btagging(self, test):
220  test = test.split(":")
221  if len(test) != 2:
222  raise ValueError (f"[EventSelectionConfig] Misconfiguration! {test} should be provided as 'btagger:btagWP'")
223  else:
224  return test
225 

◆ check_float()

def python.EventSelectionConfig.EventSelectionConfig.check_float (   self,
  test,
  requirePositive = True 
)

Definition at line 177 of file EventSelectionConfig.py.

177  def check_float(self, test, requirePositive=True):
178  try:
179  value = float(test)
180  if not requirePositive or value >= 0:
181  return value
182  else:
183  raise ValueError (f"[EventSelectionConfig] Misconfiguration! Float {test} is not positive!")
184  except ValueError:
185  raise ValueError (f"[EventSelectionConfig] Misconfiguration! {test} should be a float, not {type(test)}!")
186 

◆ check_ghosts()

def python.EventSelectionConfig.EventSelectionConfig.check_ghosts (   self,
  test 
)

Definition at line 226 of file EventSelectionConfig.py.

226  def check_ghosts(self, test):
227  test = self.check_string(test)
228  values = test.split("!")
229  ghost_map = {
230  "B": "GhostBHadronsFinalCount",
231  "C": "GhostCHadronsFinalCount",
232  "T": "GhostTQuarksFinalCount",
233  "W": "GhostWBosonsCount",
234  "Z": "GhostZBosonsCount",
235  "H": "GhostHBosonsCount",
236  "TAU": "GhostTausFinalCount"
237  }
238  return [ghost_map.get(value.upper(), value) for value in values]
239 

◆ check_int()

def python.EventSelectionConfig.EventSelectionConfig.check_int (   self,
  test,
  requirePositive = True 
)

Definition at line 187 of file EventSelectionConfig.py.

187  def check_int(self, test, requirePositive=True):
188  try:
189  value = int(test)
190  if value == float(test):
191  if not requirePositive or value >= 0:
192  return value
193  else:
194  raise ValueError (f"[EventSelectionConfig] Misconfiguration! Int {test} us not positive!")
195  else:
196  raise ValueError (f"[EventSelectionConfig] Misconfiguration! {test} should be an int, not a float!")
197  except ValueError:
198  raise ValueError (f"[EventSelectionConfig] Misconfiguration! {test} should be an int, not {type(test)}")
199 

◆ check_sign()

def python.EventSelectionConfig.EventSelectionConfig.check_sign (   self,
  test 
)

Definition at line 206 of file EventSelectionConfig.py.

206  def check_sign(self, test):
207  mapping = {
208  "<" : "LT",
209  ">" : "GT",
210  "==": "EQ",
211  ">=": "GE",
212  "<=": "LE"
213  }
214  try:
215  return mapping[test]
216  except KeyError:
217  raise KeyError (f"[EventSelectionConfig] Misconfiguration! {test} should be one of {list(mapping.keys())}")
218 

◆ check_string()

def python.EventSelectionConfig.EventSelectionConfig.check_string (   self,
  test 
)

Definition at line 200 of file EventSelectionConfig.py.

200  def check_string(self, test):
201  if not isinstance(test, str):
202  raise ValueError (f"[EventSelectionConfig] Misconfiguration! {test} should be a string, not a number!")
203  else:
204  return test
205 

◆ checkDecorationName()

def python.EventSelectionConfig.EventSelectionConfig.checkDecorationName (   self,
  decoration 
)

Definition at line 258 of file EventSelectionConfig.py.

258  def checkDecorationName(self, decoration):
259  if decoration == '':
260  return decoration
261  decoration = decoration.split("&&")
262  decoration = [sub + ',as_char' if ',as_char' not in sub else sub for sub in decoration]
263  return '&&'.join(decoration)
264 

◆ getCutflow()

def python.EventSelectionConfig.EventSelectionConfig.getCutflow (   self)

Definition at line 240 of file EventSelectionConfig.py.

240  def getCutflow(self):
241  return self.cutflow
242 

◆ interpret()

def python.EventSelectionConfig.EventSelectionConfig.interpret (   self,
  text,
  cfg 
)

Definition at line 111 of file EventSelectionConfig.py.

111  def interpret(self, text, cfg):
112  text = text.strip()
113  if not text:
114  return
115  if text.startswith("#"):
116  return
117  self.step += 1
118  if "EL_N" in text.split():
119  self.add_NEL_selector(text, cfg)
120  elif "MU_N" in text.split():
121  self.add_NMU_selector(text, cfg)
122  elif "SUM_EL_N_MU_N" in text.split():
123  self.add_SUMNELNMU_selector(text, cfg)
124  elif "JET_N_GHOST" in text.split():
125  self.add_NJETGHOST_selector(text, cfg)
126  elif "JET_N" in text.split():
127  self.add_NJET_selector(text, cfg)
128  elif "JET_N_BTAG" in text.split():
129  self.add_NBJET_selector(text, cfg)
130  elif "PH_N" in text.split():
131  self.add_NPH_selector(text, cfg)
132  elif "TAU_N" in text.split():
133  self.add_NTAU_selector(text, cfg)
134  elif "LJET_N_GHOST" in text.split():
135  self.add_NLJETGHOST_selector(text, cfg)
136  elif "LJET_N" in text.split():
137  self.add_NLJET_selector(text, cfg)
138  elif "MET" in text.split():
139  self.add_MET_selector(text, cfg)
140  elif "MWT" in text.split():
141  self.add_MWT_selector(text, cfg)
142  elif "MET+MWT" in text.split():
143  self.add_METMWT_selector(text, cfg)
144  elif "MLL" in text.split():
145  self.add_MLL_selector(text, cfg)
146  elif "MLLWINDOW" in text.split():
147  self.add_MLLWINDOW_selector(text, cfg)
148  elif "OS" in text.split():
149  self.add_OS_selector(text, cfg)
150  elif "SS" in text.split():
151  self.add_SS_selector(text, cfg)
152  elif "MLL_OSSF" in text.split():
153  self.add_MLL_OSSF_selector(text, cfg)
154  elif "LJETMASS_N" in text.split():
155  self.add_NLJETMASS_selector(text, cfg)
156  elif "LJETMASSWINDOW_N" in text.split():
157  self.add_NLJETMASSWINDOW_selector(text, cfg)
158  elif "SAVE" in text.split():
159  self.add_SAVE(text, cfg)
160  elif "IMPORT" in text.split():
161  self.add_IMPORT(text, cfg)
162  elif "EVENTFLAG" in text.split():
163  self.add_EVENTFLAG(text, cfg)
164  elif "GLOBALTRIGMATCH" in text.split():
165  self.add_GLOBALTRIGMATCH(text, cfg)
166  elif "RUN_NUMBER" in text.split():
167  self.add_RUNNUMBER(text, cfg)
168  else:
169  raise ValueError (f"[EventSelectionConfig] The following selection cut is not recognised! --> {text}")
170 

◆ makeAlgs()

def python.EventSelectionConfig.EventSelectionConfig.makeAlgs (   self,
  config 
)

Definition at line 96 of file EventSelectionConfig.py.

96  def makeAlgs(self, config):
97  # need to re-initialize here to deal with multiple passes
98  self.step = 0
99  # initialize the pre-selection
100  self.currentDecoration = self.preselection
101  # re-initialize the cutflow
102  self.cutflow = []
103  # read the selection cuts
104  if self.selectionCuts is None:
105  raise ValueError ("[EventSelectionConfig] You must provide the 'selectionCuts' option to 'EventSelectionConfig': "
106  "a single string where each line represents a different selection cut to apply in order.")
107  for line in self.selectionCuts.split("\n"):
108  self.interpret(line, config)
109  config.addEventCutFlow(self.name, self.getCutflow())
110 

◆ raise_misconfig()

def python.EventSelectionConfig.EventSelectionConfig.raise_misconfig (   self,
  text,
  keyword 
)

Definition at line 171 of file EventSelectionConfig.py.

171  def raise_misconfig(self, text, keyword):
172  raise ValueError (f"[EventSelectionConfig] Misconfiguration! Check {keyword} in: {text}")
173 

◆ raise_missinginput()

def python.EventSelectionConfig.EventSelectionConfig.raise_missinginput (   self,
  collection 
)

Definition at line 174 of file EventSelectionConfig.py.

174  def raise_missinginput(self, collection):
175  raise ValueError (f"[EventSelectionConfig] Misconfiguration! Missing input collection for {collection}")
176 

◆ setDecorationName()

def python.EventSelectionConfig.EventSelectionConfig.setDecorationName (   self,
  algorithm,
  config,
  decoration 
)

Definition at line 243 of file EventSelectionConfig.py.

243  def setDecorationName(self, algorithm, config, decoration):
244  self.cutflow.append( decoration )
245  if algorithm is not None:
246  algorithm.decorationName = f'{decoration},as_char'
247  self.currentDecoration = decoration
248  if self.debugMode:
249  config.addOutputVar('EventInfo', decoration, decoration.split("_%SYS%")[0])
250  else:
251  if self.currentDecoration:
252  self.currentDecoration += '&&' + decoration
253  else:
254  self.currentDecoration = decoration
255  config.addSelection('EventInfo', '', decoration)
256  return
257 

Member Data Documentation

◆ currentDecoration

python.EventSelectionConfig.EventSelectionConfig.currentDecoration

Definition at line 92 of file EventSelectionConfig.py.

◆ cutflow

python.EventSelectionConfig.EventSelectionConfig.cutflow

Definition at line 93 of file EventSelectionConfig.py.

◆ name

python.EventSelectionConfig.EventSelectionConfig.name

Definition at line 94 of file EventSelectionConfig.py.

◆ step

python.EventSelectionConfig.EventSelectionConfig.step

Definition at line 91 of file EventSelectionConfig.py.


The documentation for this class was generated from the following file:
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
dumpHVPathFromNtuple.append
bool append
Definition: dumpHVPathFromNtuple.py:91
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.processes.powheg.ZZ.ZZ.__init__
def __init__(self, base_directory, **kwargs)
Constructor: all process options are set here.
Definition: ZZ.py:18
readCCLHist.float
float
Definition: readCCLHist.py:83
Trk::split
@ split
Definition: LayerMaterialProperties.h:38