ATLAS Offline Software
PhysDESDM_Stopped.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
2 
3 
4 if len(primRPVLLDESDM.Stopped_triggerFilterFlags.TriggerNames) == 0:
5  if rec.triggerStream() == "Egamma":
6  primRPVLLDESDM.Stopped_triggerFilterFlags.TriggerNames = primRPVLLDESDM.Stopped_triggerFilterFlags.EgammaTriggerNames
7  elif rec.triggerStream() == "JetTauEtmiss":
8  primRPVLLDESDM.Stopped_triggerFilterFlags.TriggerNames = primRPVLLDESDM.Stopped_triggerFilterFlags.JetTauEtmissTriggerNames
9  elif rec.triggerStream() == "Muons":
10  primRPVLLDESDM.Stopped_triggerFilterFlags.TriggerNames = primRPVLLDESDM.Stopped_triggerFilterFlags.MuonsTriggerNames
11  elif rec.triggerStream() == "": # for MC the string will be empty, but we want to use all of the triggers
12  primRPVLLDESDM.Stopped_triggerFilterFlags.TriggerNames = primRPVLLDESDM.Stopped_triggerFilterFlags.EgammaTriggerNames
13  primRPVLLDESDM.Stopped_triggerFilterFlags.TriggerNames += primRPVLLDESDM.Stopped_triggerFilterFlags.JetTauEtmissTriggerNames
14  primRPVLLDESDM.Stopped_triggerFilterFlags.TriggerNames += primRPVLLDESDM.Stopped_triggerFilterFlags.MuonsTriggerNames
15  else:
16  primRPVLLDESDM.Stopped_triggerFilterFlags.TriggerNames = ["dummy"] # back-up, to prevent empty-string failure in test jobs if no triggers used
17 
18 # get rid of potential doubles in the trigger lists, since attempting to add identical algs generates an ERROR
19 primRPVLLDESDM.Stopped_triggerFilterFlags.TriggerNames = list(set(primRPVLLDESDM.Stopped_triggerFilterFlags.TriggerNames))
20 
21 triggerFilterNames=[]
22 
23 from PrimaryDPDMaker.TriggerFilter import TriggerFilter
24 for trigName in primRPVLLDESDM.Stopped_triggerFilterFlags.TriggerNames:
25  TriggerFilterName = "Stopped_TriggerFilter_"+trigName
26  topSequence += TriggerFilter( TriggerFilterName,
27  trigger = trigName )
28  triggerFilterNames.append( TriggerFilterName )
29 
30 # Create a combined filter by ORing together all the trigger filters
31 combinedTriggerFilterName = "Stopped_CombinedTriggerFilter"
32 topSequence += LogicalFilterCombiner( combinedTriggerFilterName )
33 triggerFilterCounter = 0
34 cmdstring = ""
35 for triggerFilterName in triggerFilterNames :
36  if triggerFilterCounter > 0 :
37  cmdstring += " or "
38  cmdstring += triggerFilterName
39  triggerFilterCounter += 1
40 topSequence.Stopped_CombinedTriggerFilter.cmdstring = cmdstring
41 filtersToBookkeep+=["Stopped_CombinedTriggerFilter"]
42 
43 
46 
47 from EventUtils.EventUtilsConf import CutAlg
48 
49 
50 flags = primRPVLLDESDM.Stopped_jetFilterFlags
51 jetFilterName = "Stopped_JetFilter"
52 
53 cutString= "count( "
54 cutString+= flags.jetCollectionName
55 cutString+=".pt > "
56 cutString+= str(flags.cutEtMin)
57 cutString+=" && "
58 cutString+= flags.jetCollectionName
59 cutString+=".pt < "
60 cutString+= str(flags.cutEtMax)
61 cutString+=" && abs("
62 cutString+= flags.jetCollectionName
63 cutString+=".eta) < "
64 cutString+= str(flags.cutEtaMax)
65 cutString+=" && abs("
66 cutString+= flags.jetCollectionName
67 cutString+=".eta) > "
68 cutString+= str(flags.cutEtaMin)
69 cutString+=") >= 1"
70 topSequence += CutAlg(jetFilterName,
71  Cut=cutString)
72 filtersToBookkeep+=[jetFilterName]
73 
74 # NB: Does not have the max jet presampler fraction (flags.cutPSFracMax)
75 
76 
77 from LongLivedParticleDPDMaker.LongLivedParticleDPDMakerConf import MuonSegmentFilterAlg
78 segFilterName = "Stopped_MuonSegmentFilter"
79 segmentFilter = MuonSegmentFilterAlg(segFilterName)
80 flags = primRPVLLDESDM.Stopped_muonSegmentFilterFlags
81 
82 segmentFilter.minNumberSegments = flags.cutNsegMin
83 segmentFilter.maxNumberSegments = flags.cutNsegMax
84 segmentFilter.muonSegmentContainer = flags.muonSegmentCollectionName
85 topSequence += segmentFilter
86 
87 if primRPVLLDESDM.Stopped_muonSegmentFilterFlags.addPrescaledLooseFilter:
88  looseMuSegFilterName = "Stopped_looseMuSegFilter"
89  looseMuSegFilter = MuonSegmentFilterAlg(looseMuSegFilterName)
90  looseMuSegFilter.maxNumberSegments=flags.cutNsegMaxLoose
91  looseMuSegFilter.minNumberSegments=flags.cutNsegMinLoose
92  looseMuSegFilter.muonSegmentContainer=flags.muonSegmentCollectionName
93  topSequence += looseMuSegFilter
94 
95  from PrimaryDPDMaker.PrimaryDPDMakerConf import PrimaryDPDPrescaler
96  prescaledMuSegFilterName = "Stopped_prescaledMuSegFilter"
97  topSequence += PrimaryDPDPrescaler( prescaledMuSegFilterName,
98  Prescale = flags.prescaleFactorForLooseFilter,
99  AcceptAlgs= [looseMuSegFilterName]
100  )
101 
102 
103 
104 combinedOfflineFilterName = "Stopped_CombinedOfflineFilter"
105 topSequence += LogicalFilterCombiner( combinedOfflineFilterName )
106 
107 cmdstring = jetFilterName+" and "+segFilterName;
108 if primRPVLLDESDM.Stopped_muonSegmentFilterFlags.addPrescaledLooseFilter:
109  cmdstring = jetFilterName+" and ("+segFilterName+" or "+prescaledMuSegFilterName+")"
110 
111 print('Josh\'s Stopped_CombinedOfflineFilter: %s' % cmdstring)
112 topSequence.Stopped_CombinedOfflineFilter.cmdstring=cmdstring
113 filtersToBookkeep+=["Stopped_CombinedOfflineFilter"]
114 
115 
116 
117 StoppedCombinedFilter = LogicalFilterCombiner("StoppedCombinedFilter")
118 topSequence+=StoppedCombinedFilter
119 
120 topSequence.StoppedCombinedFilter.cmdstring="Stopped_CombinedTriggerFilter and Stopped_CombinedOfflineFilter"
121 
122 
123 
124 if topCmdString.__len__() > 0:
125  topCmdString+=" or "
126 topCmdString+="StoppedCombinedFilter"
127 
128 filtersToBookkeep+=["StoppedCombinedFilter"]
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:224
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
str
Definition: BTagTrackIpAccessor.cxx:11