Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Member Functions | Public Attributes | Static Private Attributes | List of all members
MenuComponents.Chain Class Reference
Inheritance diagram for MenuComponents.Chain:
Collaboration diagram for MenuComponents.Chain:

Public Member Functions

def __init__ (self, name, ChainSteps, L1decisions, nSteps=None, alignmentGroups=None, topoMap=None)
 
def append_bjet_steps (self, new_steps)
 
def append_step_to_jet (self, new_steps)
 
def numberAllSteps (self)
 
def insertEmptySteps (self, empty_step_name, n_new_steps, start_position)
 
def checkMultiplicity (self)
 
def addTopo (self, topoPair, step="last")
 
def __str__ (self)
 
def __repr__ (self)
 

Public Attributes

 name
 
 steps
 
 nSteps
 
 alignmentGroups
 
 topoMap
 
 L1decisions
 

Static Private Attributes

 __slots__
 

Detailed Description

Basic class to define the trigger menu 

Definition at line 480 of file MenuComponents.py.

Constructor & Destructor Documentation

◆ __init__()

def MenuComponents.Chain.__init__ (   self,
  name,
  ChainSteps,
  L1decisions,
  nSteps = None,
  alignmentGroups = None,
  topoMap = None 
)
Construct the Chain from the steps
Out of all arguments the ChainSteps & L1Thresholds are most relevant, the chain name is used in debug messages

Definition at line 483 of file MenuComponents.py.

483  def __init__(self, name, ChainSteps, L1decisions, nSteps = None, alignmentGroups = None, topoMap=None):
484 
485  """
486  Construct the Chain from the steps
487  Out of all arguments the ChainSteps & L1Thresholds are most relevant, the chain name is used in debug messages
488  """
489 
490  # default mutable values must be initialized to None
491  if nSteps is None: nSteps = []
492  if alignmentGroups is None: alignmentGroups = []
493 
494  self.name = name
495  self.steps = ChainSteps
496  self.nSteps = nSteps
497  self.alignmentGroups = alignmentGroups
498 
499 
500  # The chain holds a map of topo ComboHypoTool configurators
501  # This is needed to allow placement of the ComboHypoTool in the right position
502  # for multi-leg chains (defaults to last step)
503  # Format is {"[step name]" : ([topo config function], [topo descriptor string]), ...}
504  # Here, the topo descriptor string would usually be the chain name expression that
505  # configures the topo
506  self.topoMap = {}
507  if topoMap:
508  self.topoMap.update(topoMap)
509 
510  # L1decisions are used to set the seed type (EM, MU,JET), removing the actual threshold
511  # in practice it is the HLTSeeding Decision output
512  self.L1decisions = L1decisions
513  log.debug("[Chain.__init__] Made Chain %s with seeds: %s ", name, self.L1decisions)
514 

Member Function Documentation

◆ __repr__()

def MenuComponents.Chain.__repr__ (   self)

Definition at line 627 of file MenuComponents.py.

627  def __repr__(self):
628  return "\n-*- Chain %s -*- \n + Seeds: %s, Steps: %s, AlignmentGroups: %s \n + Steps: \n %s \n"%(\
629  self.name, ' '.join(map(str, self.L1decisions)), self.nSteps, self.alignmentGroups, '\n '.join(map(str, self.steps)))
630 
631 
632 # next: can we remove multiplicity array, if it can be retrieved from the ChainDict?
633 # next: can we describe emtpy steps with isEmpty flag only (not via multiplicity and setting comboHypoCfg=None)?

◆ __str__()

def MenuComponents.Chain.__str__ (   self)

Definition at line 623 of file MenuComponents.py.

623  def __str__(self):
624  return "\n-*- Chain %s -*- \n + Seeds: %s, Steps: %s, AlignmentGroups: %s "%(\
625  self.name, ' '.join(map(str, self.L1decisions)), self.nSteps, self.alignmentGroups)
626 

◆ addTopo()

def MenuComponents.Chain.addTopo (   self,
  topoPair,
  step = "last" 
)

Definition at line 618 of file MenuComponents.py.

618  def addTopo(self,topoPair,step="last"):
619  stepname = "last step" if step=="last" else step.name
620  log.debug("Adding topo configurator %s for %s to %s", topoPair[0].__qualname__, topoPair[1], "step " + stepname)
621  self.topoMap[step] = topoPair
622 

◆ append_bjet_steps()

def MenuComponents.Chain.append_bjet_steps (   self,
  new_steps 
)

Definition at line 515 of file MenuComponents.py.

515  def append_bjet_steps(self,new_steps):
516  assert len(self.nSteps) == 1, "[Chain.append_bjet_steps] appending already-merged step lists - chain object will be broken. This should only be used to append Bjets to jets!"
517  self.steps = self.steps + new_steps
518  self.nSteps = [len(self.steps)]
519 

◆ append_step_to_jet()

def MenuComponents.Chain.append_step_to_jet (   self,
  new_steps 
)

Definition at line 520 of file MenuComponents.py.

520  def append_step_to_jet(self,new_steps):
521  assert len(self.nSteps) == 1, "[Chain.append_step_to_jet] appending already-merged step lists - chain object will be broken. This is used either for appending Beamspot algorithms to jets!"
522  self.steps = self.steps + new_steps
523  self.nSteps = [len(self.steps)]
524 
525 

◆ checkMultiplicity()

def MenuComponents.Chain.checkMultiplicity (   self)

Definition at line 596 of file MenuComponents.py.

596  def checkMultiplicity(self):
597  #TODO: Not used anymore, can we delete it?
598  if len(self.steps) == 0:
599  return 0
600  mult=[sum(step.multiplicity) for step in self.steps] # on mult per step
601  not_empty_mult = [m for m in mult if m!=0]
602  if len(not_empty_mult) == 0: #empty chain?
603  log.error("checkMultiplicity: Chain %s has all steps with multiplicity =0: what to do?", self.name)
604  return 0
605  if not_empty_mult.count(not_empty_mult[0]) != len(not_empty_mult):
606  log.error("checkMultiplicity: Chain %s has steps with differnt multiplicities: %s", self.name, ' '.join(mult))
607  return 0
608 
609  if not_empty_mult[0] != len(self.L1decisions):
610  log.error("checkMultiplicity: Chain %s has %d multiplicity per step, and %d L1Decisions", self.name, mult, len(self.L1decisions))
611  return 0
612  return not_empty_mult[0]
613 
614 

◆ insertEmptySteps()

def MenuComponents.Chain.insertEmptySteps (   self,
  empty_step_name,
  n_new_steps,
  start_position 
)

Definition at line 549 of file MenuComponents.py.

549  def insertEmptySteps(self, empty_step_name, n_new_steps, start_position):
550  #start position indexed from 0. if start position is 3 and length is 2, it works like:
551  # [old1,old2,old3,old4,old5,old6] ==> [old1,old2,old3,empty1,empty2,old4,old5,old6]
552 
553  if len(self.steps) == 0 :
554  log.error("I can't insert empty steps because the chain doesn't have any steps yet!")
555 
556  if len(self.steps) < start_position :
557  log.error("I can't insert empty steps at step %d because the chain doesn't have that many steps!", start_position)
558 
559 
560  chain_steps_pre_split = self.steps[:start_position]
561  chain_steps_post_split = self.steps[start_position:]
562 
563  next_step_name = ''
564  prev_step_name = ''
565  # copy the same dictionary as the last step, which else?
566  prev_chain_dict = []
567  if start_position == 0:
568  next_step_name = chain_steps_post_split[0].name
569  if re.search('^Step[0-9]_',next_step_name):
570  next_step_name = next_step_name[6:]
571  elif re.search('^Step[0-9]{2}_', next_step_name):
572  next_step_name = next_step_name[7:]
573 
574  prev_step_name = 'empty_'+str(len(self.L1decisions))+'L1in'
575  prev_chain_dict = chain_steps_post_split[0].stepDicts
576  else:
577  if len(chain_steps_post_split) == 0:
578  log.error("Adding empty steps to the end of a chain (%s)- why would you do this?",self.name)
579  else:
580  prev_step_name = chain_steps_pre_split[-1].name
581  next_step_name = chain_steps_post_split[0].name
582  prev_chain_dict = chain_steps_pre_split[-1].stepDicts
583 
584 
585  steps_to_add = []
586  for stepID in range(1,n_new_steps+1):
587  new_step_name = prev_step_name+'_'+empty_step_name+'%d_'%stepID+next_step_name
588 
589  log.debug("Adding empty step %s", new_step_name)
590  steps_to_add += [ChainStep(new_step_name, chainDicts=prev_chain_dict, comboHypoCfg=ComboHypoCfg, isEmpty=True)]
591 
592  self.steps = chain_steps_pre_split + steps_to_add + chain_steps_post_split
593 
594  return
595 

◆ numberAllSteps()

def MenuComponents.Chain.numberAllSteps (   self)

Definition at line 526 of file MenuComponents.py.

526  def numberAllSteps(self):
527  if len(self.steps)==0:
528  return
529  else:
530  for stepID,step in enumerate(self.steps):
531  step_name = step.name
532  if re.search('^Step[0-9]_',step_name):
533  step_name = step_name[6:]
534  elif re.search('^Step[0-9]{2}_', step_name):
535  step_name = step_name[7:]
536  step.name = 'Step%d_'%(stepID+1)+step_name
537  # also modify the empty sequence names to follow the step name change
538  for iseq, seq in enumerate(step.sequenceGens):
539  if isEmptySequenceCfg(seq):
540  name = seq.func.__name__
541  if re.search('Seq[0-9]_',name):
542  newname = re.sub('Seq[0-9]_', 'Seq%d_'%(stepID+1), name)
543  #replace the empty sequence
544  thisEmpty = createEmptyMenuSequenceCfg(flags=None, name=newname)
545  step.sequenceGens[iseq]=functools.partial(thisEmpty, flags=None, name=newname)
546  return
547 
548 

Member Data Documentation

◆ __slots__

MenuComponents.Chain.__slots__
staticprivate

Definition at line 482 of file MenuComponents.py.

◆ alignmentGroups

MenuComponents.Chain.alignmentGroups

Definition at line 497 of file MenuComponents.py.

◆ L1decisions

MenuComponents.Chain.L1decisions

Definition at line 512 of file MenuComponents.py.

◆ name

MenuComponents.Chain.name

Definition at line 494 of file MenuComponents.py.

◆ nSteps

MenuComponents.Chain.nSteps

Definition at line 496 of file MenuComponents.py.

◆ steps

MenuComponents.Chain.steps

Definition at line 495 of file MenuComponents.py.

◆ topoMap

MenuComponents.Chain.topoMap

Definition at line 506 of file MenuComponents.py.


The documentation for this class was generated from the following file:
MenuComponents.isEmptySequenceCfg
def isEmptySequenceCfg(o)
Definition: MenuComponents.py:378
convertTimingResiduals.sum
sum
Definition: convertTimingResiduals.py:55
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
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
str
Definition: BTagTrackIpAccessor.cxx:11
MenuComponents.createEmptyMenuSequenceCfg
def createEmptyMenuSequenceCfg(flags, name)
Definition: MenuComponents.py:368