ATLAS Offline Software
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 checkNumberOfLegs (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 433 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 436 of file MenuComponents.py.

436  def __init__(self, name, ChainSteps, L1decisions, nSteps = None, alignmentGroups = None, topoMap=None):
437 
438  """
439  Construct the Chain from the steps
440  Out of all arguments the ChainSteps & L1Thresholds are most relevant, the chain name is used in debug messages
441  """
442 
443  # default mutable values must be initialized to None
444  if nSteps is None: nSteps = []
445  if alignmentGroups is None: alignmentGroups = []
446 
447  self.name = name
448  self.steps = ChainSteps
449  self.nSteps = nSteps
450  self.alignmentGroups = alignmentGroups
451 
452 
453  # The chain holds a map of topo ComboHypoTool configurators
454  # This is needed to allow placement of the ComboHypoTool in the right position
455  # for multi-leg chains (defaults to last step)
456  # Format is {"[step name]" : ([topo config function], [topo descriptor string]), ...}
457  # Here, the topo descriptor string would usually be the chain name expression that
458  # configures the topo
459  self.topoMap = {}
460  if topoMap:
461  self.topoMap.update(topoMap)
462 
463  # L1decisions are used to set the seed type (EM, MU,JET), removing the actual threshold
464  # in practice it is the HLTSeeding Decision output
465  self.L1decisions = L1decisions
466  log.debug("[Chain.__init__] Made Chain %s with seeds: %s ", name, self.L1decisions)
467 

Member Function Documentation

◆ __repr__()

def MenuComponents.Chain.__repr__ (   self)

Definition at line 585 of file MenuComponents.py.

585  def __repr__(self):
586  return "\n-*- Chain %s -*- \n + Seeds: %s, Steps: %s, AlignmentGroups: %s \n + Steps: \n %s \n"%(\
587  self.name, ' '.join(map(str, self.L1decisions)), self.nSteps, self.alignmentGroups, '\n '.join(map(str, self.steps)))
588 
589 
590 

◆ __str__()

def MenuComponents.Chain.__str__ (   self)

Definition at line 581 of file MenuComponents.py.

581  def __str__(self):
582  return "\n-*- Chain %s -*- \n + Seeds: %s, Steps: %s, AlignmentGroups: %s "%(\
583  self.name, ' '.join(map(str, self.L1decisions)), self.nSteps, self.alignmentGroups)
584 

◆ addTopo()

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

Definition at line 576 of file MenuComponents.py.

576  def addTopo(self,topoPair,step="last"):
577  stepname = "last step" if step=="last" else step.name
578  log.debug("Adding topo configurator %s for %s to %s", topoPair[0].__qualname__, topoPair[1], "step " + stepname)
579  self.topoMap[step] = topoPair
580 

◆ append_bjet_steps()

def MenuComponents.Chain.append_bjet_steps (   self,
  new_steps 
)

Definition at line 468 of file MenuComponents.py.

468  def append_bjet_steps(self,new_steps):
469  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!"
470  self.steps = self.steps + new_steps
471  self.nSteps = [len(self.steps)]
472 

◆ append_step_to_jet()

def MenuComponents.Chain.append_step_to_jet (   self,
  new_steps 
)

Definition at line 473 of file MenuComponents.py.

473  def append_step_to_jet(self,new_steps):
474  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!"
475  self.steps = self.steps + new_steps
476  self.nSteps = [len(self.steps)]
477 
478 

◆ checkNumberOfLegs()

def MenuComponents.Chain.checkNumberOfLegs (   self)
return 0 if the chain has unexpected number of step legs 

Definition at line 549 of file MenuComponents.py.

549  def checkNumberOfLegs(self):
550  """ return 0 if the chain has unexpected number of step legs """
551  if len(self.steps) == 0: # skip if it's noAlg chains
552  return 1
553 
554  mult=[step.nLegs for step in self.steps] # one nLegs per step
555  not_empty_mult = [m for m in mult if m!=0]
556  # cannot accept chains with all empty steps
557  if len(not_empty_mult) == 0:
558  log.error("checkNumberOfLegs: Chain %s has all steps with nLegs =0: what to do?", self.name)
559  return 0
560 
561  # cannot accept chains with steps with different number of legs
562  if not_empty_mult.count(not_empty_mult[0]) != len(not_empty_mult):
563  log.error("checkNumberOfLegs: Chain %s has steps with differnt number of legs: %s", self.name, ' '.join(mult))
564  return 0
565 
566  # check that the chain number of legs is the same as the number of L1 seeds
567  if not_empty_mult[0] != len(self.L1decisions):
568  log.error("checkNumberOfLegs: Chain %s has %i legs per step, and %d L1Decisions", self.name, mult, len(self.L1decisions))
569  return 0
570  return not_empty_mult[0]
571 
572 

◆ insertEmptySteps()

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

Definition at line 502 of file MenuComponents.py.

502  def insertEmptySteps(self, empty_step_name, n_new_steps, start_position):
503  #start position indexed from 0. if start position is 3 and length is 2, it works like:
504  # [old1,old2,old3,old4,old5,old6] ==> [old1,old2,old3,empty1,empty2,old4,old5,old6]
505 
506  if len(self.steps) == 0 :
507  log.error("I can't insert empty steps because the chain doesn't have any steps yet!")
508 
509  if len(self.steps) < start_position :
510  log.error("I can't insert empty steps at step %d because the chain doesn't have that many steps!", start_position)
511 
512 
513  chain_steps_pre_split = self.steps[:start_position]
514  chain_steps_post_split = self.steps[start_position:]
515 
516  next_step_name = ''
517  prev_step_name = ''
518  # copy the same dictionary as the last step, which else?
519  prev_chain_dict = []
520  if start_position == 0:
521  next_step_name = chain_steps_post_split[0].name
522  if re.search('^Step[0-9]_',next_step_name):
523  next_step_name = next_step_name[6:]
524  elif re.search('^Step[0-9]{2}_', next_step_name):
525  next_step_name = next_step_name[7:]
526 
527  prev_step_name = 'empty_'+str(len(self.L1decisions))+'L1in'
528  prev_chain_dict = chain_steps_post_split[0].stepDicts
529  else:
530  if len(chain_steps_post_split) == 0:
531  log.error("Adding empty steps to the end of a chain (%s)- why would you do this?",self.name)
532  else:
533  prev_step_name = chain_steps_pre_split[-1].name
534  next_step_name = chain_steps_post_split[0].name
535  prev_chain_dict = chain_steps_pre_split[-1].stepDicts
536 
537 
538  steps_to_add = []
539  for stepID in range(1,n_new_steps+1):
540  new_step_name = prev_step_name+'_'+empty_step_name+'%d_'%stepID+next_step_name
541 
542  log.debug("Adding empty step %s", new_step_name)
543  steps_to_add += [ChainStep(new_step_name, chainDicts=prev_chain_dict, comboHypoCfg=ComboHypoCfg, isEmpty=True)]
544 
545  self.steps = chain_steps_pre_split + steps_to_add + chain_steps_post_split
546 
547  return
548 

◆ numberAllSteps()

def MenuComponents.Chain.numberAllSteps (   self)

Definition at line 479 of file MenuComponents.py.

479  def numberAllSteps(self):
480  if len(self.steps)==0:
481  return
482  else:
483  for stepID,step in enumerate(self.steps):
484  step_name = step.name
485  if re.search('^Step[0-9]_',step_name):
486  step_name = step_name[6:]
487  elif re.search('^Step[0-9]{2}_', step_name):
488  step_name = step_name[7:]
489  step.name = 'Step%d_'%(stepID+1)+step_name
490  # also modify the empty sequence names to follow the step name change
491  for iseq, seq in enumerate(step.sequenceGens):
492  if isEmptySequenceCfg(seq):
493  name = seq.func.__name__
494  if re.search('Seq[0-9]_',name):
495  newname = re.sub('Seq[0-9]_', 'Seq%d_'%(stepID+1), name)
496  #replace the empty sequence
497  thisEmpty = createEmptyMenuSequenceCfg(flags=None, name=newname)
498  step.sequenceGens[iseq]=functools.partial(thisEmpty, flags=None, name=newname)
499  return
500 
501 

Member Data Documentation

◆ __slots__

MenuComponents.Chain.__slots__
staticprivate

Definition at line 435 of file MenuComponents.py.

◆ alignmentGroups

MenuComponents.Chain.alignmentGroups

Definition at line 450 of file MenuComponents.py.

◆ L1decisions

MenuComponents.Chain.L1decisions

Definition at line 465 of file MenuComponents.py.

◆ name

MenuComponents.Chain.name

Definition at line 447 of file MenuComponents.py.

◆ nSteps

MenuComponents.Chain.nSteps

Definition at line 449 of file MenuComponents.py.

◆ steps

MenuComponents.Chain.steps

Definition at line 448 of file MenuComponents.py.

◆ topoMap

MenuComponents.Chain.topoMap

Definition at line 459 of file MenuComponents.py.


The documentation for this class was generated from the following file:
MenuComponents.isEmptySequenceCfg
def isEmptySequenceCfg(o)
Definition: MenuComponents.py:331
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
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:321