ATLAS Offline Software
Functions | Variables
python.FullCPAlgorithmsTest Namespace Reference

Functions

def addOutputCopyAlgorithms (algSeq, ca, postfix, inputContainer, outputContainer, selection)
 
def makeSequenceOld (dataType, algSeq, forCompare, isPhyslite, noSystematics, forceEGammaFullSimConfig=False)
 
def makeSequenceBlocks (dataType, algSeq, forCompare, isPhyslite, geometry=None, autoconfigFromFlags=None, noSystematics=None, onlyNominalOR=False, forceEGammaFullSimConfig=False, returnConfigSeq=False)
 
def printSequenceAlgs (sequence)
 
def makeSequence (dataType, useBlocks, yamlPath, forCompare, noSystematics, hardCuts=False, isPhyslite=False, geometry=None, autoconfigFromFlags=None, onlyNominalOR=False, forceEGammaFullSimConfig=False)
 

Variables

dictionary triggerChainsPerYear
 
list triggerChains
 
dictionary tauTriggerChainsSF
 
dictionary exampleSelectionCuts
 
int electronMinPt = 10e3
 
 electronMaxEta = None
 
int photonMinPt = 10e3
 
 photonMaxEta = None
 
 muonMinPt = None
 
 muonMaxEta = None
 
 tauMinPt = None
 
 tauMaxEta = None
 
 jetMinPt = None
 
 jetMaxEta = None
 

Function Documentation

◆ addOutputCopyAlgorithms()

def python.FullCPAlgorithmsTest.addOutputCopyAlgorithms (   algSeq,
  ca,
  postfix,
  inputContainer,
  outputContainer,
  selection 
)
add a uniformly filtered set of deep copies based on the
systematics dependent selection

Definition at line 67 of file FullCPAlgorithmsTest.py.

67 def addOutputCopyAlgorithms (algSeq, ca, postfix, inputContainer, outputContainer, selection) :
68  """add a uniformly filtered set of deep copies based on the
69  systematics dependent selection"""
70 
71  if postfix[0] != '_' :
72  postfix = '_' + postfix
73 
74  if selection != '' :
75  unionalg = createAlgorithm( 'CP::AsgUnionSelectionAlg', 'UnionSelectionAlg' + postfix)
76  unionalg.preselection = selection
77  unionalg.particles = inputContainer
78  unionalg.selectionDecoration = 'outputSelect'
79  if ca:
80  ca.addEventAlgo(unionalg, algSeq.name if algSeq else None)
81  else:
82  algSeq += unionalg
83 
84  copyalg = createAlgorithm( 'CP::AsgViewFromSelectionAlg', 'DeepCopyAlg' + postfix )
85  copyalg.input = inputContainer
86  copyalg.output = outputContainer
87  if selection != '' :
88  copyalg.selection = ['outputSelect']
89  else :
90  copyalg.selection = []
91  copyalg.deepCopy = False
92  if ca:
93  ca.addEventAlgo(copyalg, algSeq.name if algSeq else None)
94  else:
95  algSeq += copyalg
96 
97 

◆ makeSequence()

def python.FullCPAlgorithmsTest.makeSequence (   dataType,
  useBlocks,
  yamlPath,
  forCompare,
  noSystematics,
  hardCuts = False,
  isPhyslite = False,
  geometry = None,
  autoconfigFromFlags = None,
  onlyNominalOR = False,
  forceEGammaFullSimConfig = False 
)

Definition at line 1068 of file FullCPAlgorithmsTest.py.

1068 def makeSequence (dataType, useBlocks, yamlPath, forCompare,
1069  noSystematics, hardCuts = False, isPhyslite = False, geometry = None,
1070  autoconfigFromFlags = None, onlyNominalOR = False,
1071  forceEGammaFullSimConfig = False) :
1072 
1073  # do some harder cuts on all object types, this is mostly used for
1074  # benchmarking
1075  if hardCuts :
1076  global electronMinPt
1077  electronMinPt = 27e3
1078  global photonMinPt
1079  photonMinPt = 27e3
1080  global muonMinPt
1081  muonMinPt = 27e3
1082  global tauMinPt
1083  tauMinPt = 27e3
1084  global jetMinPt
1085  jetMinPt = 45e3
1086 
1087  algSeq = AlgSequence('AnalysisSequence')
1088 
1089  ca = None
1090  if useBlocks :
1091  ca = makeSequenceBlocks (dataType, algSeq, forCompare=forCompare,
1092  isPhyslite=isPhyslite,
1093  geometry=geometry, onlyNominalOR=onlyNominalOR,
1094  autoconfigFromFlags=autoconfigFromFlags,
1095  noSystematics=noSystematics,
1096  forceEGammaFullSimConfig=forceEGammaFullSimConfig)
1097  elif yamlPath :
1098  from AnalysisAlgorithmsConfig.ConfigText import makeSequence as makeSequenceText
1099  ca = makeSequenceText(yamlPath, dataType, algSeq, geometry=geometry,
1100  isPhyslite=isPhyslite,
1101  autoconfigFromFlags=autoconfigFromFlags,
1102  noSystematics=noSystematics)
1103  else :
1104  ca = makeSequenceOld (dataType, algSeq, forCompare=forCompare,
1105  isPhyslite=isPhyslite,
1106  noSystematics=noSystematics,
1107  forceEGammaFullSimConfig=forceEGammaFullSimConfig)
1108 
1109  if ca is not None:
1110  return ca
1111  else:
1112  return algSeq

◆ makeSequenceBlocks()

def python.FullCPAlgorithmsTest.makeSequenceBlocks (   dataType,
  algSeq,
  forCompare,
  isPhyslite,
  geometry = None,
  autoconfigFromFlags = None,
  noSystematics = None,
  onlyNominalOR = False,
  forceEGammaFullSimConfig = False,
  returnConfigSeq = False 
)

Definition at line 658 of file FullCPAlgorithmsTest.py.

658 def makeSequenceBlocks (dataType, algSeq, forCompare, isPhyslite,
659  geometry=None, autoconfigFromFlags=None, noSystematics=None,
660  onlyNominalOR=False, forceEGammaFullSimConfig=False,
661  returnConfigSeq=False) :
662 
663  vars = []
664  metVars = []
665 
666  # it seems the right containers are in the test input files so far
667  largeRJets = False
668  # there are no track jets in PHYSLITE, or in the sequence configuration
669  trackJets = not isPhyslite and not forCompare
670 
671  if autoconfigFromFlags is not None:
672  if geometry is None:
673  geometry = autoconfigFromFlags.GeoModel.Run
674 
675  configSeq = ConfigSequence ()
676 
677  outputContainers = {'mu_' : 'OutMuons',
678  'ph_' : 'OutPhotons',
679  'tau_': 'OutTauJets',
680  'jet_': 'OutJets',
681  'met_': 'AnaMET',
682  '' : 'EventInfo'}
683  if not(forceEGammaFullSimConfig and dataType is DataType.FastSim and forCompare):
684  outputContainers['el_'] = 'OutElectrons'
685 
686  # create factory object to build block configurations
687  from AnalysisAlgorithmsConfig.ConfigFactory import ConfigFactory
688  config = ConfigFactory()
689 
690  configSeq += config.makeConfig('CommonServices')
691  configSeq.setOptionValue('.systematicsHistogram', 'systematicsList')
692  if forCompare:
693  configSeq.setOptionValue('.filterSystematics', "^(?:(?!PseudoData).)*$")
694 
695  # FIXME: this should probably be run on PHYSLITE, but the test fails with:
696  # overran integrated luminosity for RunNumber=363262 (0.000000 vs 0.000000)
697  if not isPhyslite:
698  configSeq += config.makeConfig('PileupReweighting')
699  if dataType is DataType.FastSim and forCompare:
700  prwfiles, lumicalcfiles = pileupConfigFiles(dataType)
701  configSeq.setOptionValue('.userPileupConfigs', prwfiles)
702  configSeq.setOptionValue('.userLumicalcFiles', lumicalcfiles)
703  configSeq.setOptionValue('.useDefaultConfig', False)
704  else :
705  # ideally the above block would work both for PHYS and PHYSLITE, but
706  # since we disabled it we need to add these variables manually.
707  vars += [ 'EventInfo.runNumber -> runNumber',
708  'EventInfo.eventNumber -> eventNumber',
709  'EventInfo.mcChannelNumber -> mcChannelNumber']
710 
711 
712  # Skip events with no primary vertex,
713  # and perform loose jet cleaning
714  configSeq += config.makeConfig ('EventCleaning')
715  configSeq.setOptionValue ('.runEventCleaning', True)
716 
717  # Include, and then set up the jet analysis algorithm sequence:
718  configSeq += config.makeConfig( 'Jets',
719  containerName='AnaJets',
720  jetCollection='AntiKt4EMPFlowJets')
721  configSeq.setOptionValue ('.runJvtUpdate', False )
722  configSeq.setOptionValue ('.runNNJvtUpdate', True )
723  if not forCompare :
724  configSeq.setOptionValue ('.recalibratePhyslite', False)
725 
726  configSeq += config.makeConfig( 'Jets.JVT',
727  containerName='AnaJets' )
728 
729  btagger = "DL1dv01"
730  btagWP = "FixedCutBEff_60"
731  configSeq += config.makeConfig( 'Jets.FlavourTagging',
732  containerName='AnaJets',
733  selectionName='ftag' )
734  configSeq.setOptionValue ('.noEffSF', forCompare)
735  configSeq.setOptionValue ('.btagger', btagger)
736  configSeq.setOptionValue ('.btagWP', btagWP)
737  configSeq.setOptionValue ('.saveScores', 'All')
738 
739  if not forCompare:
740  configSeq += config.makeConfig( 'Jets.FlavourTaggingEventSF',
741  containerName='AnaJets.baselineJvt',
742  selectionName='ftag')
743  configSeq.setOptionValue ('.btagger', btagger)
744  configSeq.setOptionValue ('.btagWP', btagWP)
745 
746  if largeRJets :
747  configSeq += config.makeConfig( 'Jets',
748  containerName='AnaLargeRJets',
749  jetCollection='AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets' )
750  configSeq.setOptionValue ('.postfix', 'largeR_jets' )
751  outputContainers['larger_jet_'] = 'OutLargeRJets'
752  if not forCompare :
753  configSeq.setOptionValue ('.recalibratePhyslite', False)
754 
755  if trackJets :
756  configSeq += config.makeConfig( 'Jets',
757  containerName='AnaTrackJets',
758  jetCollection='AntiKtVR30Rmax4Rmin02PV0TrackJets' )
759  configSeq.setOptionValue ('.postfix', 'track_jets' )
760  outputContainers['track_jet_'] = 'OutTrackJets'
761 
762  configSeq += config.makeConfig ('Jets.PtEtaSelection',
763  containerName='AnaJets')
764  configSeq.setOptionValue ('.selectionDecoration', 'selectPtEta')
765  configSeq.setOptionValue ('.minPt', jetMinPt)
766  configSeq.setOptionValue ('.maxEta', jetMaxEta)
767  if largeRJets :
768  configSeq += config.makeConfig ('Jets.PtEtaSelection',
769  containerName='AnaLargeRJets')
770  configSeq.setOptionValue ('.selectionDecoration', 'selectPtEta')
771  configSeq.setOptionValue ('.minPt', jetMinPt)
772  configSeq.setOptionValue ('.maxEta', jetMaxEta)
773  if trackJets :
774  configSeq += config.makeConfig ('Jets.PtEtaSelection',
775  containerName='AnaTrackJets')
776  configSeq.setOptionValue ('.selectionDecoration', 'selectPtEta')
777  configSeq.setOptionValue ('.minPt', jetMinPt)
778  configSeq.setOptionValue ('.maxEta', jetMaxEta)
779 
780 
781  # Include, and then set up the electron analysis algorithm sequence:
782  likelihood = True
783  recomputeLikelihood=False
784  configSeq += config.makeConfig ('Electrons',
785  containerName='AnaElectrons' )
786  configSeq.setOptionValue ('.forceFullSimConfig', forceEGammaFullSimConfig)
787  if not forCompare :
788  configSeq.setOptionValue ('.recalibratePhyslite', False)
789  configSeq += config.makeConfig ('Electrons.WorkingPoint',
790  containerName='AnaElectrons',
791  selectionName='loose')
792  configSeq.setOptionValue ('.forceFullSimConfig', forceEGammaFullSimConfig)
793  if forCompare :
794  configSeq.setOptionValue ('.noEffSF', True)
795  if likelihood:
796  configSeq.setOptionValue ('.likelihoodWP', 'LooseBLayerLH')
797  else:
798  configSeq.setOptionValue ('.likelihoodWP', 'LooseDNN')
799  configSeq.setOptionValue ('.isolationWP', 'Loose_VarRad')
800  configSeq.setOptionValue ('.recomputeLikelihood', recomputeLikelihood)
801  configSeq.setOptionValue ('.writeTrackD0Z0', True)
802 
803  configSeq += config.makeConfig ('Electrons.PtEtaSelection',
804  containerName='AnaElectrons')
805  configSeq.setOptionValue ('.selectionDecoration', 'selectPtEta')
806  configSeq.setOptionValue ('.minPt', electronMinPt)
807  configSeq.setOptionValue ('.maxEta', electronMaxEta)
808 
809 
810  # Include, and then set up the photon analysis algorithm sequence:
811  configSeq += config.makeConfig ('Photons',
812  containerName='AnaPhotons' )
813  configSeq.setOptionValue ('.forceFullSimConfig', forceEGammaFullSimConfig)
814  configSeq.setOptionValue ('.recomputeIsEM', False)
815  if not forCompare :
816  configSeq.setOptionValue ('.recalibratePhyslite', False)
817  configSeq += config.makeConfig ('Photons.WorkingPoint',
818  containerName='AnaPhotons',
819  selectionName='tight')
820  configSeq.setOptionValue ('.forceFullSimConfig', forceEGammaFullSimConfig)
821  if forCompare :
822  configSeq.setOptionValue ('.noEffSF', True)
823  configSeq.setOptionValue ('.qualityWP', 'Tight')
824  configSeq.setOptionValue ('.isolationWP', 'FixedCutTight')
825  configSeq.setOptionValue ('.recomputeIsEM', False)
826 
827  configSeq += config.makeConfig ('Photons.PtEtaSelection',
828  containerName='AnaPhotons')
829  configSeq.setOptionValue ('.selectionDecoration', 'selectPtEta')
830  configSeq.setOptionValue ('.minPt', photonMinPt)
831  configSeq.setOptionValue ('.maxEta', photonMaxEta)
832 
833 
834  # set up the muon analysis algorithm sequence:
835  configSeq += config.makeConfig ('Muons',
836  containerName='AnaMuons')
837  if not forCompare :
838  configSeq.setOptionValue ('.recalibratePhyslite', False)
839  configSeq += config.makeConfig ('Muons.WorkingPoint',
840  containerName='AnaMuons',
841  selectionName='medium')
842  configSeq.setOptionValue ('.quality', 'Medium')
843  configSeq.setOptionValue ('.isolation', 'Loose_VarRad')
844  if forCompare :
845  configSeq.setOptionValue ('.onlyRecoEffSF', True)
846  configSeq.setOptionValue ('.writeTrackD0Z0', True)
847 
848  # TODO: MCP should restore this when the recommendations for Tight WP exist in R23
849  # configSeq += config.makeConfig ('Muons.Selection', 'AnaMuons.tight')
850  # configSeq.setOptionValue ('.quality', 'Tight')
851  # configSeq.setOptionValue ('.isolation', 'Loose_VarRad')
852 
853  configSeq += config.makeConfig ('Muons.PtEtaSelection',
854  containerName='AnaMuons')
855  configSeq.setOptionValue ('.selectionDecoration', 'selectPtEta')
856  configSeq.setOptionValue ('.minPt', muonMinPt)
857  configSeq.setOptionValue ('.maxEta', muonMaxEta)
858 
859  # Include, and then set up the tau analysis algorithm sequence:
860  configSeq += config.makeConfig ('TauJets',
861  containerName='AnaTauJets')
862  configSeq += config.makeConfig ('TauJets.WorkingPoint',
863  containerName='AnaTauJets',
864  selectionName='tight')
865  configSeq.setOptionValue ('.quality', 'Tight')
866 
867  if not forCompare:
868  configSeq += config.makeConfig('TauJets.TriggerSF')
869  configSeq.setOptionValue('.containerName', 'AnaTauJets')
870  configSeq.setOptionValue('.tauID', 'Tight')
871  configSeq.setOptionValue('.triggerChainsPerYear', tauTriggerChainsSF)
872 
873  configSeq += config.makeConfig ('TauJets.PtEtaSelection',
874  containerName='AnaTauJets')
875  configSeq.setOptionValue ('.selectionDecoration', 'selectPtEta')
876  configSeq.setOptionValue ('.minPt', tauMinPt)
877  configSeq.setOptionValue ('.maxEta', tauMaxEta)
878 
879 
880  # Add systematic object links
881  configSeq += config.makeConfig('SystObjectLink', containerName='AnaJets')
882  if largeRJets:
883  configSeq += config.makeConfig('SystObjectLink', containerName='AnaLargeRJets')
884  if trackJets:
885  configSeq += config.makeConfig('SystObjectLink', containerName='AnaTrackJets')
886  configSeq += config.makeConfig('SystObjectLink', containerName='AnaElectrons')
887  configSeq += config.makeConfig('SystObjectLink', containerName='AnaPhotons')
888  configSeq += config.makeConfig('SystObjectLink', containerName='AnaMuons')
889  configSeq += config.makeConfig('SystObjectLink', containerName='AnaTauJets')
890 
891 
892  if dataType is not DataType.Data :
893  # Include, and then set up the generator analysis sequence:
894  configSeq += config.makeConfig( 'GeneratorLevelAnalysis')
895  configSeq.setOptionValue ('.saveCutBookkeepers', True)
896  configSeq.setOptionValue ('.runNumber', 284500)
897  configSeq.setOptionValue ('.cutBookkeepersSystematics', True)
898 
899 
900  # Include, and then set up the met analysis algorithm config:
901  configSeq += config.makeConfig ('MissingET',
902  containerName='AnaMET')
903  configSeq.setOptionValue ('.jets', 'AnaJets')
904  configSeq.setOptionValue ('.taus', 'AnaTauJets.tight')
905  configSeq.setOptionValue ('.electrons', 'AnaElectrons.loose')
906  configSeq.setOptionValue ('.photons', 'AnaPhotons.tight')
907  # Note that the configuration for the muons is not what you'd
908  # normally do. This is specifically here because this is a unit
909  # test and I wanted to make sure that selection expressions work.
910  # For an actual analysis that would just be `AnaMuons.medium`, but
911  # since `tight` is a strict subset of `medium` it doesn't matter
912  # if we do an "or" of the two.
913  # TODO: MCP should restore this when the recommendations for Tight WP exist in R23
914  # configSeq.setOptionValue ('.muons', 'AnaMuons.medium||tight')
915  configSeq.setOptionValue ('.muons', 'AnaMuons.medium')
916 
917 
918  # Include, and then set up the overlap analysis algorithm config:
919  configSeq += config.makeConfig( 'OverlapRemoval' )
920  configSeq.setOptionValue ('.electrons', 'AnaElectrons.loose')
921  configSeq.setOptionValue ('.photons', 'AnaPhotons.tight')
922  # TODO: MCP should restore this when the recommendations for Tight WP exist in R23
923  # configSeq.setOptionValue ('.muons', 'AnaMuons.medium||tight')
924  configSeq.setOptionValue ('.muons', 'AnaMuons.medium')
925  configSeq.setOptionValue ('.jets', 'AnaJets')
926  configSeq.setOptionValue ('.taus', 'AnaTauJets.tight')
927  configSeq.setOptionValue ('.inputLabel', 'preselectOR')
928  configSeq.setOptionValue ('.outputLabel', 'passesOR' )
929  configSeq.setOptionValue ('.nominalOnly', onlyNominalOR )
930  if not forCompare :
931  # ask to be added to the baseline selection for all objects, and to
932  # provide a preselection for the objects in subsequent algorithms
933  configSeq.setOptionValue ('.addToAllSelections', True)
934  configSeq.setOptionValue ('.addPreselection', True)
935 
936  # Include and set up a basic run of the event selection algorithm config:
937  if not forCompare:
938  # configSeq += config.makeConfig( 'EventSelection', None )
939  # configSeq.setOptionValue ('.electrons', 'AnaElectrons.loose')
940  # configSeq.setOptionValue ('.muons', 'AnaMuons.medium')
941  # configSeq.setOptionValue ('.jets', 'AnaJets')
942  # configSeq.setOptionValue ('.met', 'AnaMET')
943  # configSeq.setOptionValue ('.selectionCutsDict', exampleSelectionCuts)
944  from EventSelectionAlgorithms.EventSelectionConfig import makeMultipleEventSelectionConfigs
945  makeMultipleEventSelectionConfigs(configSeq, electrons = 'AnaElectrons.loose', muons = 'AnaMuons.medium', jets = 'AnaJets',
946  met = 'AnaMET', btagDecoration = 'ftag_select_ftag',
947  selectionCutsDict = exampleSelectionCuts, noFilter = True)
948 
949 
950  # ObjectCutFlow blocks
951  configSeq += config.makeConfig ('ObjectCutFlow',
952  containerName='AnaJets',
953  selectionName='jvt')
954  configSeq += config.makeConfig ('ObjectCutFlow',
955  containerName='AnaElectrons',
956  selectionName='loose')
957  configSeq += config.makeConfig ('ObjectCutFlow',
958  containerName='AnaPhotons',
959  selectionName='tight')
960  configSeq += config.makeConfig ('ObjectCutFlow',
961  containerName='AnaMuons',
962  selectionName='medium')
963  configSeq += config.makeConfig ('ObjectCutFlow',
964  containerName='AnaTauJets',
965  selectionName='tight')
966 
967 
968  # Thinning blocks
969  configSeq += config.makeConfig ('Thinning',
970  containerName='AnaElectrons')
971  configSeq.setOptionValue ('.selectionName', 'loose')
972  configSeq.setOptionValue ('.outputName', 'OutElectrons')
973  configSeq += config.makeConfig ('Thinning',
974  containerName='AnaPhotons')
975  configSeq.setOptionValue ('.selectionName', 'tight')
976  configSeq.setOptionValue ('.outputName', 'OutPhotons')
977  configSeq += config.makeConfig ('Thinning',
978  containerName='AnaMuons')
979  configSeq.setOptionValue ('.selectionName', 'medium')
980  configSeq.setOptionValue ('.outputName', 'OutMuons')
981  configSeq += config.makeConfig ('Thinning',
982  containerName='AnaTauJets')
983  configSeq.setOptionValue ('.selectionName', 'tight')
984  configSeq.setOptionValue ('.outputName', 'OutTauJets')
985  configSeq += config.makeConfig ('Thinning',
986  containerName='AnaJets')
987  configSeq.setOptionValue ('.outputName', 'OutJets')
988  if largeRJets :
989  configSeq += config.makeConfig ('Thinning',
990  containerName='AnaLargeRJets')
991  configSeq.setOptionValue ('.outputName', 'OutLargeRJets')
992  if trackJets :
993  configSeq += config.makeConfig ('Thinning',
994  containerName='AnaTrackJets')
995  configSeq.setOptionValue ('.outputName', 'OutTrackJets')
996 
997  # disabling comparisons for triggers, because the config blocks do a lot
998  # more than the sequences
999  if not forCompare :
1000  # Include, and then set up the trigger analysis sequence:
1001  configSeq += config.makeConfig( 'Trigger' )
1002  configSeq.setOptionValue ('.triggerChainsPerYear', triggerChainsPerYear )
1003  configSeq.setOptionValue ('.noFilter', True )
1004  configSeq.setOptionValue ('.electronID', 'Tight' )
1005  configSeq.setOptionValue ('.electronIsol', 'Tight_VarRad')
1006  configSeq.setOptionValue ('.photonIsol', 'TightCaloOnly')
1007  configSeq.setOptionValue ('.muonID', 'Tight')
1008  configSeq.setOptionValue ('.electrons', 'AnaElectrons' )
1009  configSeq.setOptionValue ('.photons', 'AnaPhotons' )
1010  configSeq.setOptionValue ('.muons', 'AnaMuons' )
1011 
1012  if not forCompare:
1013  configSeq += config.makeConfig ('Bootstraps')
1014  configSeq.setOptionValue ('.nReplicas', 2000 )
1015  configSeq.setOptionValue ('.runOnMC', True )
1016 
1017  configSeq += config.makeConfig ('Output')
1018  configSeq.setOptionValue ('.treeName', 'analysis')
1019  configSeq.setOptionValue ('.vars', vars)
1020  configSeq.setOptionValue ('.metVars', metVars)
1021  configSeq.setOptionValue ('.containers', outputContainers)
1022  disable_commands = []
1023  if forCompare:
1024  disable_commands += [
1025  'disable jet_select_baselineJvt.*',
1026  'disable mu_select_medium.*',
1027  'disable ph_select_tight.*',
1028  'disable tau_select_tight.*',
1029  ]
1030  if not (dataType is DataType.FastSim and forceEGammaFullSimConfig):
1031  disable_commands.append('disable el_select_loose.*')
1032  configSeq.setOptionValue ('.commands', disable_commands)
1033 
1034  # return configSeq for unit test
1035  if returnConfigSeq:
1036  return configSeq
1037 
1038  configAccumulator = ConfigAccumulator (algSeq, dataType, isPhyslite, geometry, autoconfigFromFlags=autoconfigFromFlags, noSystematics=noSystematics)
1039  configSeq.fullConfigure (configAccumulator)
1040 
1041  # order can change during fullConfigure
1042  configSeq.printOptions()
1043 
1044  from AnaAlgorithm.DualUseConfig import isAthena, useComponentAccumulator
1045  if isAthena and useComponentAccumulator:
1046  return configAccumulator.CA
1047  else:
1048  return None
1049 
1050 
1051 

◆ makeSequenceOld()

def python.FullCPAlgorithmsTest.makeSequenceOld (   dataType,
  algSeq,
  forCompare,
  isPhyslite,
  noSystematics,
  forceEGammaFullSimConfig = False 
)

Definition at line 98 of file FullCPAlgorithmsTest.py.

98 def makeSequenceOld (dataType, algSeq, forCompare, isPhyslite, noSystematics, forceEGammaFullSimConfig=False) :
99 
100  if isinstance(dataType, DataType):
101  dataType = {
102  DataType.Data: 'data',
103  DataType.FullSim: 'mc',
104  DataType.FastSim: 'afii',
105  }.get(dataType)
106 
107  vars = []
108  metVars = []
109 
110  from AnaAlgorithm.DualUseConfig import isAthena, useComponentAccumulator
111  if isAthena and useComponentAccumulator:
112  from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
113  ca = ComponentAccumulator()
114  caSeq = None
115  if algSeq:
116  ca.addSequence(algSeq)
117  caSeq = algSeq.name
118  else:
119  ca = None
120 
121  from AsgAnalysisAlgorithms.CommonServiceSequence import makeCommonServiceSequence
122  makeCommonServiceSequence (algSeq, runSystematics = not noSystematics, ca=ca)
123 
124  # Include, and then set up the pileup analysis sequence:
125  if not isPhyslite :
126  campaign, files, prwfiles, lumicalcfiles = None, None, None, None
127  useDefaultConfig = False
128 
129  # need to convert dataType from string to enum for the call to pileupConfigFiles
130  prwfiles, lumicalcfiles = pileupConfigFiles( {'data': DataType.Data, 'mc': DataType.FullSim, 'afii': DataType.FastSim}.get(dataType, None) )
131 
132  from AsgAnalysisAlgorithms.PileupAnalysisSequence import \
133  makePileupAnalysisSequence
134  pileupSequence = makePileupAnalysisSequence(
135  dataType,
136  campaign=campaign,
137  files=files,
138  useDefaultConfig=useDefaultConfig,
139  userPileupConfigs=prwfiles,
140  userLumicalcFiles=lumicalcfiles,
141  )
142  pileupSequence.configure( inputName = {}, outputName = {} )
143 
144  # Add the pileup sequence to the job:
145  if ca:
146  for element in pileupSequence.getGaudiConfig2Algorithms():
147  ca.addEventAlgo(element, caSeq)
148  else:
149  algSeq += pileupSequence
150 
151  # Add the pileup sequence to the job:
152  vars += [ 'EventInfo.runNumber -> runNumber',
153  'EventInfo.eventNumber -> eventNumber', ]
154  if dataType != 'data':
155  vars += [ 'EventInfo.mcChannelNumber -> mcChannelNumber' ]
156  if not isPhyslite and dataType in ['mc']:
157  vars += [ 'EventInfo.PileupWeight_%SYS% -> weight_pileup_%SYS%' ]
158  if not isPhyslite and dataType in ['mc', 'afii']:
159  vars += [ 'EventInfo.beamSpotWeight -> weight_beamspot' ]
160 
161 
162  # Skip events with no primary vertex:
163  from AsgAnalysisAlgorithms.EventSelectionAnalysisSequence import makeEventSelectionAnalysisSequence
164  eventCleaningSequence = makeEventSelectionAnalysisSequence(
165  dataType,
166  runPrimaryVertexSelection=True,
167  runEventCleaning=True,
168  )
169  eventCleaningSequence.configure( inputName = {}, outputName = {} )
170  if ca:
171  for element in eventCleaningSequence.getGaudiConfig2Algorithms():
172  ca.addEventAlgo(element, caSeq)
173  else:
174  algSeq += eventCleaningSequence
175 
176 
177  # Include, and then set up the jet analysis algorithm sequence:
178  from JetAnalysisAlgorithms.JetAnalysisSequence import makeJetAnalysisSequence
179  jetContainer = 'AntiKt4EMPFlowJets'
180  if isPhyslite :
181  input = 'AnalysisJets'
182  else :
183  input = jetContainer
184  jetSequence = makeJetAnalysisSequence( dataType, jetContainer,
185  runJvtUpdate = False, runNNJvtUpdate = True,
186  enableCutflow=True, enableKinematicHistograms=True, shallowViewOutput = False,
187  runGhostMuonAssociation = not isPhyslite)
188 
189  from FTagAnalysisAlgorithms.FTagAnalysisSequence import makeFTagAnalysisSequence
190  btagger = "DL1dv01"
191  btagWP = "FixedCutBEff_60"
192  makeFTagAnalysisSequence( jetSequence, dataType, jetContainer, noEfficiency = False,
193  enableCutflow=True, btagger = btagger, btagWP = btagWP, kinematicSelection = False )
194  vars += [
195  'OutJets_NOSYS.ftag_select_' + btagger + '_' + btagWP + ' -> jet_ftag_select',
196  ]
197  if dataType != 'data' and not forCompare:
198  vars += [
199  'OutJets_%SYS%.ftag_effSF_' + btagger + '_' + btagWP + '_%SYS% -> jet_ftag_eff_%SYS%'
200  ]
201 
202  jetSequence.configure( inputName = input, outputName = 'AnaJets_%SYS%' )
203 
204  # Add the sequences to the job:
205  if ca:
206  for element in jetSequence.getGaudiConfig2Algorithms():
207  ca.addEventAlgo(element, caSeq)
208  else:
209  algSeq += jetSequence
210  vars += ['OutJets_%SYS%.pt -> jet_pt_%SYS%',
211  'OutJets_NOSYS.phi -> jet_phi',
212  'OutJets_NOSYS.eta -> jet_eta'
213  ]
214  if not forCompare:
215  vars += ['OutJets_%SYS%.jvt_selection -> jet_select_jvt_%SYS%']
216 
217  # Include, and then set up the muon analysis algorithm sequence:
218  from MuonAnalysisAlgorithms.MuonAnalysisSequence import makeMuonAnalysisSequence
219  if isPhyslite :
220  input = 'AnalysisMuons'
221  else :
222  input = 'Muons'
223 
224  muonSequenceMedium = makeMuonAnalysisSequence( dataType, deepCopyOutput = False, shallowViewOutput = False,
225  workingPoint = 'Medium.Loose_VarRad', postfix = 'medium',
226  enableCutflow=True, enableKinematicHistograms=True, ptSelectionOutput = True )
227  muonSequenceMedium.configure( inputName = input,
228  outputName = 'AnaMuons_%SYS%' )
229  if ca:
230  for element in muonSequenceMedium.getGaudiConfig2Algorithms():
231  ca.addEventAlgo(element, caSeq)
232  else:
233  algSeq += muonSequenceMedium
234 
235  # TODO: MCP should restore this when the recommendations for Tight WP exist in R23
236  # muonSequenceTight = makeMuonAnalysisSequence( dataType, deepCopyOutput = False, shallowViewOutput = False,
237  # workingPoint = 'Tight.Loose_VarRad', postfix = 'tight',
238  # enableCutflow=True, enableKinematicHistograms=True, ptSelectionOutput = True )
239  # muonSequenceTight.removeStage ("calibration")
240  # # FIX ME: the current version of the `MuonSelectionTool` doesn't work
241  # # on the current version of PHYSLITE, and needs a new PHYSLITE production
242  # # campaign
243  # muonSequenceTight.configure( inputName = 'AnaMuonsMedium_%SYS%',
244  # outputName = 'AnaMuons_%SYS%')
245  # if ca:
246  # for element in muonSequenceTight.getGaudiConfig2Algorithms():
247  # ca.addEventAlgo(element, caSeq)
248  # else:
249  # algSeq += muonSequenceTight
250 
251  vars += [ 'OutMuons_NOSYS.eta -> mu_eta',
252  'OutMuons_NOSYS.phi -> mu_phi',
253  'OutMuons_%SYS%.pt -> mu_pt_%SYS%',
254  'OutMuons_NOSYS.charge -> mu_charge',]
255  if not forCompare:
256  vars += [ 'OutMuons_%SYS%.baselineSelection_medium -> mu_select_medium_%SYS%', ]
257  #'OutMuons_%SYS%.baselineSelection_tight -> mu_select_tight_%SYS%', ]
258  if dataType != 'data':
259  vars += [ 'OutMuons_%SYS%.muon_effSF_medium_%SYS% -> mu_reco_effSF_medium_%SYS%', ]
260  #'OutMuons_%SYS%.muon_effSF_tight_%SYS% -> mu_reco_effSF_tight_%SYS%', ]
261 
262  # Include, and then set up the electron analysis sequence:
263  from EgammaAnalysisAlgorithms.ElectronAnalysisSequence import \
264  makeElectronAnalysisSequence
265  if isPhyslite :
266  input = 'AnalysisElectrons'
267  else :
268  input = 'Electrons'
269  likelihood = True
270  recomputeLikelihood=False
271  if likelihood:
272  workingpoint = 'LooseBLayerLHElectron.Loose_VarRad'
273  else:
274  workingpoint = 'LooseDNNElectron.Loose_VarRad'
275  electronSequence = makeElectronAnalysisSequence(
276  dataType, workingpoint, postfix = 'loose',
277  recomputeLikelihood=recomputeLikelihood, enableCutflow=True,
278  enableKinematicHistograms=True, shallowViewOutput = False,
279  forceFullSimConfig=forceEGammaFullSimConfig)
280  electronSequence.configure( inputName = input,
281  outputName = 'AnaElectrons_%SYS%' )
282  if ca:
283  for element in electronSequence.getGaudiConfig2Algorithms():
284  ca.addEventAlgo(element, caSeq)
285  else:
286  algSeq += electronSequence
287 
288  if not(forceEGammaFullSimConfig and dataType=='afii' and forCompare):
289  vars += [ 'OutElectrons_%SYS%.pt -> el_pt_%SYS%',
290  'OutElectrons_NOSYS.phi -> el_phi',
291  'OutElectrons_NOSYS.eta -> el_eta',
292  'OutElectrons_NOSYS.charge -> el_charge', ]
293  if not forCompare:
294  vars += [ 'OutElectrons_%SYS%.baselineSelection_loose -> el_select_loose_%SYS%', ]
295  if dataType != 'data' and not forCompare:
296  vars += [ 'OutElectrons_%SYS%.effSF_loose_%SYS% -> el_effSF_loose_%SYS%',]
297 
298 
299  # Include, and then set up the photon analysis sequence:
300  from EgammaAnalysisAlgorithms.PhotonAnalysisSequence import \
301  makePhotonAnalysisSequence
302  if isPhyslite :
303  input = 'AnalysisPhotons'
304  else :
305  input = 'Photons'
306  photonSequence = makePhotonAnalysisSequence(
307  dataType, 'Tight.FixedCutTight', postfix = 'tight',
308  recomputeIsEM=False, enableCutflow=True,
309  enableKinematicHistograms=True, shallowViewOutput = False,
310  forceFullSimConfig=forceEGammaFullSimConfig)
311  photonSequence.configure( inputName = input,
312  outputName = 'AnaPhotons_%SYS%' )
313  if ca:
314  for element in photonSequence.getGaudiConfig2Algorithms():
315  ca.addEventAlgo(element, caSeq)
316  else:
317  algSeq += photonSequence
318  vars += [ 'OutPhotons_%SYS%.pt -> ph_pt_%SYS%',
319  'OutPhotons_NOSYS.phi -> ph_phi',
320  'OutPhotons_NOSYS.eta -> ph_eta', ]
321  if not forCompare:
322  vars += [ 'OutPhotons_%SYS%.baselineSelection_tight -> ph_select_tight_%SYS%', ]
323  if dataType != 'data' and not forCompare:
324  vars += [ 'OutPhotons_%SYS%.ph_effSF_tight_%SYS% -> ph_effSF_tight_%SYS%', ]
325 
326 
327  # Include, and then set up the tau analysis algorithm sequence:
328  from TauAnalysisAlgorithms.TauAnalysisSequence import makeTauAnalysisSequence
329  if isPhyslite :
330  input = 'AnalysisTauJets'
331  else :
332  input = 'TauJets'
333  tauSequence = makeTauAnalysisSequence( dataType, 'Tight', postfix = 'tight',
334  enableCutflow=True, enableKinematicHistograms=True, shallowViewOutput = False )
335  tauSequence.configure( inputName = input, outputName = 'AnaTauJets_%SYS%' )
336 
337  # Add the sequence to the job:
338  if ca:
339  for element in tauSequence.getGaudiConfig2PublicTools():
340  ca.addPublicTool(element)
341  for element in tauSequence.getGaudiConfig2Algorithms():
342  ca.addEventAlgo(element, caSeq)
343  else:
344  algSeq += tauSequence
345  vars += [ 'OutTauJets_%SYS%.pt -> tau_pt_%SYS%',
346  'OutTauJets_NOSYS.phi -> tau_phi',
347  'OutTauJets_NOSYS.eta -> tau_eta',
348  'OutTauJets_NOSYS.charge -> tau_charge',
349  'OutTauJets_NOSYS.NNDecayMode -> tau_NNDecayMode',
350  ]
351  if not forCompare:
352  vars += [ 'OutTauJets_%SYS%.baselineSelection_tight -> tau_select_tight_%SYS%', ]
353  if dataType != 'data':
354  vars += [ 'OutTauJets_%SYS%.tau_effSF_tight_%SYS% -> tau_effSF_tight_%SYS%', ]
355 
356 
357 
358  # FIX ME: temporarily disabled until di-taus are supported in R22
359  # # Include, and then set up the tau analysis algorithm sequence:
360  # from TauAnalysisAlgorithms.DiTauAnalysisSequence import makeDiTauAnalysisSequence
361  # diTauSequence = makeDiTauAnalysisSequence( dataType, 'Tight', postfix = 'tight' )
362  # diTauSequence.configure( inputName = 'DiTauJets', outputName = 'AnaDiTauJets_%SYS%' )
363 
364  # Add the sequence to the job:
365  # disabling this, the standard test files don't have DiTauJets
366  # algSeq += diTauSequence
367 
368 
369  # set up pt-eta selection for all the object types
370  # currently disabling most cuts, but leaving these as placeholders
371  # the cuts I have are mostly to silence MET building warnings
372 
373  selalg = createAlgorithm( 'CP::AsgSelectionAlg', 'UserElectronsSelectionAlg' )
374  addPrivateTool( selalg, 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
375  if electronMinPt is not None :
376  selalg.selectionTool.minPt = electronMinPt
377  if electronMaxEta is not None :
378  selalg.selectionTool.maxEta = electronMaxEta
379  selalg.selectionDecoration = 'selectPtEta'
380  selalg.particles = 'AnaElectrons_%SYS%'
381  if ca:
382  ca.addEventAlgo(selalg, caSeq)
383  else:
384  algSeq += selalg
385 
386  selalg = createAlgorithm( 'CP::AsgSelectionAlg', 'UserPhotonsSelectionAlg' )
387  addPrivateTool( selalg, 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
388  if photonMinPt is not None :
389  selalg.selectionTool.minPt = photonMinPt
390  if photonMaxEta is not None :
391  selalg.selectionTool.maxEta = photonMaxEta
392  selalg.selectionDecoration = 'selectPtEta'
393  selalg.particles = 'AnaPhotons_%SYS%'
394  if ca:
395  ca.addEventAlgo(selalg, caSeq)
396  else:
397  algSeq += selalg
398 
399  selalg = createAlgorithm( 'CP::AsgSelectionAlg', 'UserMuonsSelectionAlg' )
400  addPrivateTool( selalg, 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
401  if muonMinPt is not None :
402  selalg.selectionTool.minPt = muonMinPt
403  if muonMaxEta is not None :
404  selalg.selectionTool.maxEta = muonMaxEta
405  selalg.selectionDecoration = 'selectPtEta'
406  selalg.particles = 'AnaMuons_%SYS%'
407  if ca:
408  ca.addEventAlgo(selalg, caSeq)
409  else:
410  algSeq += selalg
411 
412  selalg = createAlgorithm( 'CP::AsgSelectionAlg', 'UserTauJetsSelectionAlg' )
413  addPrivateTool( selalg, 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
414  if tauMinPt is not None :
415  selalg.selectionTool.minPt = tauMinPt
416  if tauMaxEta is not None :
417  selalg.selectionTool.maxEta = tauMaxEta
418  selalg.selectionDecoration = 'selectPtEta'
419  selalg.particles = 'AnaTauJets_%SYS%'
420  if ca:
421  ca.addEventAlgo(selalg, caSeq)
422  else:
423  algSeq += selalg
424 
425  selalg = createAlgorithm( 'CP::AsgSelectionAlg', 'UserJetsSelectionAlg' )
426  addPrivateTool( selalg, 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
427  if jetMinPt is not None :
428  selalg.selectionTool.minPt = jetMinPt
429  if jetMaxEta is not None :
430  selalg.selectionTool.maxEta = jetMaxEta
431  selalg.selectionDecoration = 'selectPtEta'
432  selalg.particles = 'AnaJets_%SYS%'
433  if ca:
434  ca.addEventAlgo(selalg, caSeq)
435  else:
436  algSeq += selalg
437 
438 
439 
440  # Now make view containers for the inputs to the met calculation
441  metInputs = { 'jets' : 'AnaJets_%SYS%',
442  'taus' : 'AnaTauJets_%SYS%',
443  'muons' : 'AnaMuons_%SYS%',
444  'electrons' : 'AnaElectrons_%SYS%',
445  'photons' : 'AnaPhotons_%SYS%' }
446  # Include, and then set up the met analysis algorithm sequence:
447  from MetAnalysisAlgorithms.MetAnalysisSequence import makeMetAnalysisSequence
448  if isPhyslite :
449  metSuffix = 'AnalysisMET'
450  else :
451  metSuffix = jetContainer[:-4]
452  metSequence = makeMetAnalysisSequence(
453  dataType,
454  metSuffix=metSuffix,
455  electronsSelection = "selectPtEta && baselineSelection_loose,as_char",
456  photonsSelection = "selectPtEta && baselineSelection_tight,as_char",
457  muonsSelection = "selectPtEta && baselineSelection_medium,as_char",
458  tausSelection = "selectPtEta && baselineSelection_tight,as_char" )
459  metSequence.configure( inputName = metInputs,
460  outputName = 'AnaMET_%SYS%' )
461 
462  # Add the sequence to the job:
463  if ca:
464  for element in metSequence.getGaudiConfig2Algorithms():
465  ca.addEventAlgo(element, caSeq)
466  else:
467  algSeq += metSequence
468  metVars += [
469  'AnaMET_%SYS%.met -> met_met_%SYS%',
470  'AnaMET_%SYS%.phi -> met_phi_%SYS%',
471  'AnaMET_%SYS%.sumet -> met_sumet_%SYS%',
472  ]
473 
474 
475  # Make view containers holding as inputs for OR
476  orInputs = {
477  'photons' : 'AnaPhotons_%SYS%',
478  'muons' : 'AnaMuons_%SYS%',
479  'jets' : 'AnaJets_%SYS%',
480  'taus' : 'AnaTauJets_%SYS%'
481  }
482 
483  selectalg = createAlgorithm( 'CP::AsgSelectionAlg','ORElectronsSelectAlg' )
484  selectalg.preselection = 'selectPtEta&&baselineSelection_loose,as_char'
485  selectalg.particles = 'AnaElectrons_%SYS%'
486  selectalg.selectionDecoration = 'preselectOR,as_char'
487  if ca:
488  ca.addEventAlgo(selectalg, caSeq)
489  else:
490  algSeq += selectalg
491  orInputs['electrons'] = 'AnaElectrons_%SYS%'
492 
493  selectalg = createAlgorithm( 'CP::AsgSelectionAlg','ORPhotonsSelectAlg' )
494  selectalg.preselection = 'selectPtEta&&baselineSelection_tight,as_char'
495  selectalg.particles = 'AnaPhotons_%SYS%'
496  selectalg.selectionDecoration = 'preselectOR,as_char'
497  if ca:
498  ca.addEventAlgo(selectalg, caSeq)
499  else:
500  algSeq += selectalg
501 
502  selectalg = createAlgorithm( 'CP::AsgSelectionAlg','ORMuonsSelectAlg' )
503  selectalg.preselection = 'selectPtEta&&baselineSelection_medium,as_char'
504  selectalg.particles = 'AnaMuons_%SYS%'
505  selectalg.selectionDecoration = 'preselectOR,as_char'
506  if ca:
507  ca.addEventAlgo(selectalg, caSeq)
508  else:
509  algSeq += selectalg
510 
511  selectalg = createAlgorithm( 'CP::AsgSelectionAlg','ORTauJetsSelectAlg' )
512  selectalg.preselection = 'selectPtEta&&baselineSelection_tight,as_char'
513  selectalg.particles = 'AnaTauJets_%SYS%'
514  selectalg.selectionDecoration = 'preselectOR,as_char'
515  if ca:
516  ca.addEventAlgo(selectalg, caSeq)
517  else:
518  algSeq += selectalg
519 
520  selectalg = createAlgorithm( 'CP::AsgSelectionAlg','ORJetsSelectAlg' )
521  selectalg.preselection = 'selectPtEta'
522  selectalg.particles = 'AnaJets_%SYS%'
523  selectalg.selectionDecoration = 'preselectOR,as_char'
524  if ca:
525  ca.addEventAlgo(selectalg, caSeq)
526  else:
527  algSeq += selectalg
528 
529 
530  # Include, and then set up the overlap analysis algorithm sequence:
531  from AsgAnalysisAlgorithms.OverlapAnalysisSequence import \
532  makeOverlapAnalysisSequence
533  overlapSequence = makeOverlapAnalysisSequence( dataType, doTaus=True, enableCutflow=True, shallowViewOutput = False, inputLabel = 'preselectOR', outputLabel = 'passesOR' )
534  overlapSequence.configure(
535  inputName = {
536  'electrons' : 'AnaElectrons_%SYS%',
537  'photons' : 'AnaPhotons_%SYS%',
538  'muons' : 'AnaMuons_%SYS%',
539  'jets' : 'AnaJets_%SYS%',
540  'taus' : 'AnaTauJets_%SYS%'
541  },
542  outputName = { } )
543 
544  if ca:
545  for element in overlapSequence.getGaudiConfig2Algorithms():
546  ca.addEventAlgo(element, caSeq)
547  else:
548  algSeq += overlapSequence
549  vars += [
550  'OutJets_%SYS%.passesOR_%SYS% -> jet_select_or_%SYS%',
551  'OutPhotons_%SYS%.passesOR_%SYS% -> ph_select_or_%SYS%',
552  'OutMuons_%SYS%.passesOR_%SYS% -> mu_select_or_%SYS%',
553  'OutTauJets_%SYS%.passesOR_%SYS% -> tau_select_or_%SYS%',
554  ]
555  if not(forceEGammaFullSimConfig and dataType=='afii' and forCompare):
556  vars += ['OutElectrons_%SYS%.passesOR_%SYS% -> el_select_or_%SYS%']
557 
558  if dataType != 'data' :
559  # Include, and then set up the generator analysis sequence:
560  from AsgAnalysisAlgorithms.GeneratorAnalysisSequence import \
561  makeGeneratorAnalysisSequence
562  generatorSequence = makeGeneratorAnalysisSequence( dataType, saveCutBookkeepers=True, runNumber=284500, cutBookkeepersSystematics=True )
563  if ca:
564  for element in generatorSequence.getGaudiConfig2Algorithms():
565  ca.addEventAlgo(element, caSeq)
566  else:
567  algSeq += generatorSequence
568  vars += [ 'EventInfo.generatorWeight_%SYS% -> weight_mc_%SYS%', ]
569 
570 
571  # disabling comparisons for triggers, because the config blocks do a lot
572  # more than the sequences
573  if not forCompare :
574  # Include, and then set up the trigger analysis sequence:
575  from TriggerAnalysisAlgorithms.TriggerAnalysisSequence import \
576  makeTriggerAnalysisSequence
577  triggerSequence = makeTriggerAnalysisSequence( dataType, triggerChains=triggerChains, noFilter=True )
578  if ca:
579  for element in triggerSequence.getGaudiConfig2Algorithms():
580  ca.addEventAlgo(element, caSeq)
581  else:
582  algSeq += triggerSequence
583  vars += ['EventInfo.trigPassed_' + t + ' -> trigPassed_' + t for t in triggerChains]
584 
585 
586 
587  # make filtered output containers
588 
589  addOutputCopyAlgorithms (algSeq, ca, 'Electrons', 'AnaElectrons_%SYS%', 'OutElectrons_%SYS%',
590  'selectPtEta&&baselineSelection_loose,as_char&&passesOR_%SYS%,as_char')
591  addOutputCopyAlgorithms (algSeq, ca, 'Photons', 'AnaPhotons_%SYS%', 'OutPhotons_%SYS%',
592  'selectPtEta&&baselineSelection_tight,as_char&&passesOR_%SYS%,as_char')
593  addOutputCopyAlgorithms (algSeq, ca, 'Muons', 'AnaMuons_%SYS%', 'OutMuons_%SYS%',
594  'selectPtEta&&baselineSelection_medium,as_char&&passesOR_%SYS%,as_char')
595  addOutputCopyAlgorithms (algSeq, ca, 'TauJets', 'AnaTauJets_%SYS%', 'OutTauJets_%SYS%',
596  'selectPtEta&&baselineSelection_tight,as_char&&passesOR_%SYS%,as_char')
597  addOutputCopyAlgorithms (algSeq, ca, 'Jets', 'AnaJets_%SYS%', 'OutJets_%SYS%',
598  'selectPtEta&&passesOR_%SYS%,as_char')
599 
600  # Include, and then set up the jet analysis algorithm sequence:
601  from JetAnalysisAlgorithms.JetJvtAnalysisSequence import makeJetJvtAnalysisSequence
602  jvtSequence = makeJetJvtAnalysisSequence( dataType, jetContainer, enableCutflow=True, shallowViewOutput = False,
603  preselection='selectPtEta&&passesOR_%SYS%,as_char' )
604  jvtSequence.configure( inputName = { 'jets' : 'OutJets_%SYS%' },
605  outputName = { } )
606 
607  # Add the sequences to the job:
608  if ca:
609  for element in jvtSequence.getGaudiConfig2Algorithms():
610  ca.addEventAlgo(element, caSeq)
611  else:
612  algSeq += jvtSequence
613 
614  if dataType != 'data' :
615  vars += [ 'OutJets_%SYS%.jvt_effSF_%SYS% -> jet_jvtEfficiency_%SYS%', ]
616  vars += [
617  'EventInfo.jvt_effSF_%SYS% -> weight_jvt_effSF_%SYS%',
618  # 'EventInfo.fjvt_effSF_%SYS% -> weight_fjvt_effSF_%SYS%',
619  # 'OutJets_%SYS%.fjvt_effSF_NOSYS -> jet_fjvtEfficiency_%SYS%',
620  ]
621 
622  # Add an ntuple dumper algorithm:
623  treeMaker = createAlgorithm( 'CP::TreeMakerAlg', 'TreeMaker' )
624  treeMaker.TreeName = 'analysis'
625  # the auto-flush setting still needs to be figured out
626  #treeMaker.TreeAutoFlush = 0
627  if ca:
628  ca.addEventAlgo(treeMaker, caSeq)
629  else:
630  algSeq += treeMaker
631  ntupleMaker = createAlgorithm( 'CP::AsgxAODNTupleMakerAlg', 'NTupleMaker' )
632  ntupleMaker.TreeName = 'analysis'
633  ntupleMaker.Branches = vars
634  # ntupleMaker.OutputLevel = 2 # For output validation
635  if ca:
636  ca.addEventAlgo(ntupleMaker, caSeq)
637  else:
638  algSeq += ntupleMaker
639  if len (metVars) > 0:
640  ntupleMaker = createAlgorithm( 'CP::AsgxAODMetNTupleMakerAlg', 'MetNTupleMaker' )
641  ntupleMaker.TreeName = 'analysis'
642  ntupleMaker.Branches = metVars
643  #ntupleMaker.OutputLevel = 2 # For output validation
644  if ca:
645  ca.addEventAlgo(ntupleMaker, caSeq)
646  else:
647  algSeq += ntupleMaker
648  treeFiller = createAlgorithm( 'CP::TreeFillerAlg', 'TreeFiller' )
649  treeFiller.TreeName = 'analysis'
650  if ca:
651  ca.addEventAlgo(treeFiller, caSeq)
652  else:
653  algSeq += treeFiller
654 
655  return ca
656 
657 

◆ printSequenceAlgs()

def python.FullCPAlgorithmsTest.printSequenceAlgs (   sequence)
print the algorithms in the sequence without the sequence structure

This is mostly meant for easy comparison of different sequences
during configuration, particularly the sequences resulting from
the old sequence configuration and the new block configuration.
Those have different sequence structures in the output, but the
algorithms should essentially be configured the same way.

Definition at line 1052 of file FullCPAlgorithmsTest.py.

1052 def printSequenceAlgs (sequence) :
1053  """print the algorithms in the sequence without the sequence structure
1054 
1055  This is mostly meant for easy comparison of different sequences
1056  during configuration, particularly the sequences resulting from
1057  the old sequence configuration and the new block configuration.
1058  Those have different sequence structures in the output, but the
1059  algorithms should essentially be configured the same way."""
1060  if isinstance (sequence, AlgSequence) :
1061  for alg in sequence :
1062  printSequenceAlgs (alg)
1063  else :
1064  # assume this is an algorithm then
1065  print (sequence)
1066 
1067 

Variable Documentation

◆ electronMaxEta

python.FullCPAlgorithmsTest.electronMaxEta = None

Definition at line 57 of file FullCPAlgorithmsTest.py.

◆ electronMinPt

int python.FullCPAlgorithmsTest.electronMinPt = 10e3

Definition at line 56 of file FullCPAlgorithmsTest.py.

◆ exampleSelectionCuts

dictionary python.FullCPAlgorithmsTest.exampleSelectionCuts
Initial value:
1 = {
2  'SUBcommon': ,
3  'ejets': ,
4  'mujets':
5 }

Definition at line 32 of file FullCPAlgorithmsTest.py.

◆ jetMaxEta

python.FullCPAlgorithmsTest.jetMaxEta = None

Definition at line 65 of file FullCPAlgorithmsTest.py.

◆ jetMinPt

python.FullCPAlgorithmsTest.jetMinPt = None

Definition at line 64 of file FullCPAlgorithmsTest.py.

◆ muonMaxEta

python.FullCPAlgorithmsTest.muonMaxEta = None

Definition at line 61 of file FullCPAlgorithmsTest.py.

◆ muonMinPt

python.FullCPAlgorithmsTest.muonMinPt = None

Definition at line 60 of file FullCPAlgorithmsTest.py.

◆ photonMaxEta

python.FullCPAlgorithmsTest.photonMaxEta = None

Definition at line 59 of file FullCPAlgorithmsTest.py.

◆ photonMinPt

int python.FullCPAlgorithmsTest.photonMinPt = 10e3

Definition at line 58 of file FullCPAlgorithmsTest.py.

◆ tauMaxEta

python.FullCPAlgorithmsTest.tauMaxEta = None

Definition at line 63 of file FullCPAlgorithmsTest.py.

◆ tauMinPt

python.FullCPAlgorithmsTest.tauMinPt = None

Definition at line 62 of file FullCPAlgorithmsTest.py.

◆ tauTriggerChainsSF

dictionary python.FullCPAlgorithmsTest.tauTriggerChainsSF
Initial value:
1 = {
2  '2015': ['HLT_tau25_medium1_tracktwo', 'HLT_tau35_medium1_tracktwo'],
3  '2016': ['HLT_tau25_medium1_tracktwo', 'HLT_tau35_medium1_tracktwo'],
4  '2017': ['HLT_tau25_medium1_tracktwo', 'HLT_tau35_medium1_tracktwo'],
5  '2018': ['HLT_tau25_medium1_tracktwoEF_OR_mediumRNN_tracktwoMVA', 'HLT_tau35_medium1_tracktwoEF_OR_mediumRNN_tracktwoMVA'],
6 }

Definition at line 24 of file FullCPAlgorithmsTest.py.

◆ triggerChains

list python.FullCPAlgorithmsTest.triggerChains
Initial value:
1 = [
2  'HLT_2mu14',
3  'HLT_mu20_mu8noL1',
4  'HLT_2e17_lhvloose_nod0'
5 ]

Definition at line 19 of file FullCPAlgorithmsTest.py.

◆ triggerChainsPerYear

dictionary python.FullCPAlgorithmsTest.triggerChainsPerYear
Initial value:
1 = {
2  '2015': ['HLT_e24_lhmedium_L1EM20VH || HLT_e60_lhmedium || HLT_e120_lhloose', 'HLT_mu20_iloose_L1MU15 || HLT_mu40', 'HLT_2g20_tight'],
3  '2016': ['HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0', 'HLT_mu26_ivarmedium || HLT_mu50', 'HLT_g35_loose_g25_loose'],
4  '2017': ['HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0', 'HLT_2g22_tight_L12EM15VHI', 'HLT_mu50'],
5  '2018': ['HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0', 'HLT_g35_medium_g25_medium_L12EM20VH', 'HLT_mu26_ivarmedium', 'HLT_2mu14'],
6  '2022': ['HLT_e26_lhtight_ivarloose_L1EM22VHI || HLT_e60_lhmedium_L1EM22VHI || HLT_e140_lhloose_L1EM22VHI'],
7 }

Definition at line 12 of file FullCPAlgorithmsTest.py.

python.PhotonAnalysisSequence.makePhotonAnalysisSequence
def makePhotonAnalysisSequence(dataType, workingPoint, deepCopyOutput=False, shallowViewOutput=True, postfix='', crackVeto=False, enableCleaning=True, cleaningAllowLate=False, recomputeIsEM=False, ptSelectionOutput=False, enableCutflow=False, enableKinematicHistograms=False, defineSystObjectLinks=False, forceFullSimConfig=False)
Definition: PhotonAnalysisSequence.py:16
python.FullCPAlgorithmsTest.makeSequenceBlocks
def makeSequenceBlocks(dataType, algSeq, forCompare, isPhyslite, geometry=None, autoconfigFromFlags=None, noSystematics=None, onlyNominalOR=False, forceEGammaFullSimConfig=False, returnConfigSeq=False)
Definition: FullCPAlgorithmsTest.py:658
python.TriggerAnalysisSequence.makeTriggerAnalysisSequence
def makeTriggerAnalysisSequence(dataType, triggerChains=[], prescaleLumiCalcFiles=[], noFilter=False)
Definition: TriggerAnalysisSequence.py:8
python.GeneratorAnalysisSequence.makeGeneratorAnalysisSequence
def makeGeneratorAnalysisSequence(dataType, saveCutBookkeepers=False, runNumber=0, cutBookkeepersSystematics=False)
Definition: GeneratorAnalysisSequence.py:7
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
python.DualUseConfig.addPrivateTool
def addPrivateTool(alg, toolName, typeName)
Definition: DualUseConfig.py:180
python.AlgSequence.AlgSequence
AlgSequence
Definition: PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/AlgSequence.py:7
python.EventSelectionAnalysisSequence.makeEventSelectionAnalysisSequence
def makeEventSelectionAnalysisSequence(dataType, runPrimaryVertexSelection=True, runEventCleaning=False, minTracksPerVertex=2, userGRLFiles=[], userSelectionFlags=['DFCommonJets_eventClean_LooseBad'], userInvertFlags=[0])
Definition: EventSelectionAnalysisSequence.py:10
python.FTagAnalysisSequence.makeFTagAnalysisSequence
def makeFTagAnalysisSequence(seq, dataType, jetCollection, btagWP="FixedCutBEff_77", btagger="DL1r", generator="default", postfix="", preselection=None, kinematicSelection=False, noEfficiency=False, enableCutflow=False, minPt=None, makeViewContainer=False)
Definition: FTagAnalysisSequence.py:6
python.JetAnalysisSequence.makeJetAnalysisSequence
def makeJetAnalysisSequence(dataType, jetCollection, postfix='', deepCopyOutput=False, shallowViewOutput=True, runGhostMuonAssociation=True, enableCutflow=False, enableKinematicHistograms=False, defineSystObjectLinks=False, **kwargs)
Definition: JetAnalysisSequence.py:21
python.DualUseConfig.createAlgorithm
def createAlgorithm(typeName, instanceName)
Definition: DualUseConfig.py:56
python.MetAnalysisSequence.makeMetAnalysisSequence
def makeMetAnalysisSequence(dataType, metSuffix, postfix='', useFJVT=False, treatPUJets=False, setMuonJetEMScale=True, electronsSelection="", muonsSelection="", photonsSelection="", tausSelection="")
Definition: MetAnalysisSequence.py:7
python.EventSelectionConfig.makeMultipleEventSelectionConfigs
def makeMultipleEventSelectionConfigs(seq, electrons=None, muons=None, jets=None, largeRjets=None, photons=None, taus=None, met=None, metTerm=None, btagDecoration=None, preselection=None, selectionCutsDict=None, noFilter=None, debugMode=None, cutFlowHistograms=None)
Definition: EventSelectionConfig.py:786
python.JetJvtAnalysisSequence.makeJetJvtAnalysisSequence
def makeJetJvtAnalysisSequence(dataType, jetCollection, preselection='', enableFJvt=False, globalSF=True, runSelection=True, runNNJvt=False, shallowViewOutput=True, enableCutflow=False)
Definition: JetJvtAnalysisSequence.py:7
python.FullCPAlgorithmsTest.makeSequenceOld
def makeSequenceOld(dataType, algSeq, forCompare, isPhyslite, noSystematics, forceEGammaFullSimConfig=False)
Definition: FullCPAlgorithmsTest.py:98
python.AsgAnalysisAlgorithmsTest.pileupConfigFiles
def pileupConfigFiles(dataType)
Definition: AsgAnalysisAlgorithmsTest.py:238
python.TauAnalysisSequence.makeTauAnalysisSequence
def makeTauAnalysisSequence(dataType, workingPoint, postfix='', deepCopyOutput=False, shallowViewOutput=True, rerunTruthMatching=True, enableCutflow=False, enableKinematicHistograms=False, defineSystObjectLinks=False)
Definition: TauAnalysisSequence.py:9
python.MuonAnalysisSequence.makeMuonAnalysisSequence
def makeMuonAnalysisSequence(dataType, workingPoint, deepCopyOutput=False, shallowViewOutput=True, postfix='', ptSelectionOutput=False, trackSelection=True, maxEta=2.7, qualitySelectionOutput=True, enableCutflow=False, enableKinematicHistograms=False, isRun3Geo=False, defineSystObjectLinks=False)
Definition: MuonAnalysisSequence.py:8
python.OverlapAnalysisSequence.makeOverlapAnalysisSequence
def makeOverlapAnalysisSequence(dataType, inputLabel='', outputLabel='passesOR', linkOverlapObjects=False, doEleEleOR=False, doElectrons=True, doMuons=True, doJets=True, doTaus=True, doTauAntiTauJetOR=False, doPhotons=True, doFatJets=False, enableUserPriority=False, bJetLabel='', antiTauIDTauLabel='', antiTauLabel='', antiTauBJetLabel='', boostedLeptons=False, postfix='', shallowViewOutput=True, enableCutflow=False)
Definition: OverlapAnalysisSequence.py:7
python.PileupAnalysisSequence.makePileupAnalysisSequence
def makePileupAnalysisSequence(dataType, campaign=None, files=None, useDefaultConfig=False, userLumicalcFiles=None, userPileupConfigs=None)
Definition: PileupAnalysisSequence.py:12
python.FullCPAlgorithmsTest.addOutputCopyAlgorithms
def addOutputCopyAlgorithms(algSeq, ca, postfix, inputContainer, outputContainer, selection)
Definition: FullCPAlgorithmsTest.py:67
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition: hcg.cxx:127
python.FullCPAlgorithmsTest.printSequenceAlgs
def printSequenceAlgs(sequence)
Definition: FullCPAlgorithmsTest.py:1052
python.ElectronAnalysisSequence.makeElectronAnalysisSequence
def makeElectronAnalysisSequence(dataType, workingPoint, deepCopyOutput=False, shallowViewOutput=True, postfix='', recomputeLikelihood=False, chargeIDSelection=False, isolationCorrection=False, crackVeto=False, ptSelectionOutput=False, trackSelection=True, enableCutflow=False, enableKinematicHistograms=False, defineSystObjectLinks=False, forceFullSimConfig=False)
Definition: ElectronAnalysisSequence.py:13
python.FullCPAlgorithmsTest.makeSequence
def makeSequence(dataType, useBlocks, yamlPath, forCompare, noSystematics, hardCuts=False, isPhyslite=False, geometry=None, autoconfigFromFlags=None, onlyNominalOR=False, forceEGammaFullSimConfig=False)
Definition: FullCPAlgorithmsTest.py:1068