ATLAS Offline Software
Loading...
Searching...
No Matches
xAODBSignalFilter Class Reference

#include <xAODBSignalFilter.h>

Inheritance diagram for xAODBSignalFilter:
Collaboration diagram for xAODBSignalFilter:

Public Member Functions

virtual StatusCode filterInitialize () override final
virtual StatusCode filterEvent (const EventContext &ctx) override final
virtual StatusCode filterFinalize () override final
 GenFilter (const std::string &name, ISvcLocator *pSvcLocator)
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual bool isClonable () const override
 Specify if the algorithm is clonable.
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
virtual bool filterPassed (const EventContext &ctx) const
 Get filter decision:
virtual void setFilterPassed (bool state, const EventContext &ctx) const
 Set filter decision:
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const
Event loop algorithm methods: not to be overloaded
StatusCode initialize ()
StatusCode execute (const EventContext &ctx)
 Execute method.
StatusCode finalize ()
Counters
int nPassed () const
int nFailed () const
int nNeeded () const
bool keepAll () const
Event collection accessors (const and non-const)
HepMC::GenEvent *event ATLAS_NOT_CONST_THREAD_SAFE ()
 Access the current signal event (first in the McEventCollection).
McEventCollection *events ATLAS_NOT_CONST_THREAD_SAFE ()
 Access the current event's McEventCollection.
const HepMC::GenEventevent_const (const EventContext &ctx) const
 Access the current signal event (const).
const McEventCollectionevents_const (const EventContext &ctx) const
 Access the current event's McEventCollection (const).

Protected Member Functions

virtual bool isReEntrant () const override final
 Legacy algorithms are not thread-safe.
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Protected Attributes

Counters and requirements
int m_nPass
int m_nFail
int m_nNeeded
bool m_keepAll

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

void FindAllChildren (const xAOD::TruthParticle *mother, std::string treeIDStr, bool fromFinalB, bool &foundSignal, bool &passedAllCuts, TLorentzVector &p1, TLorentzVector &p2, bool fromSelectedB, TLorentzVector &total_4mom) const
bool FinalStatePassedCuts (const xAOD::TruthParticle *child) const
bool test_cuts (const double myPT, const double testPT, const double myEta, const double testEta) const
bool LVL1_Mu_Trigger (const xAOD::TruthParticle *child) const
bool LVL2_eMu_Trigger (const xAOD::TruthParticle *child) const
void PrintChild (const xAOD::TruthParticle *child, const std::string &treeIDStr, const bool fromFinalB) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

Gaudi::Property< bool > m_localLVL1MuonCutOn {this, "LVL1MuonCutOn", false}
Gaudi::Property< bool > m_localLVL2MuonCutOn {this, "LVL2MuonCutOn", false}
Gaudi::Property< bool > m_localLVL2ElectronCutOn {this, "LVL2ElectronCutOn", false}
Gaudi::Property< double > m_localLVL1MuonCutPT {this, "LVL1MuonCutPT", 0.0}
Gaudi::Property< double > m_localLVL1MuonCutEta {this, "LVL1MuonCutEta", 102.5}
Gaudi::Property< double > m_localLVL2MuonCutPT {this, "LVL2MuonCutPT", 0.0}
Gaudi::Property< double > m_localLVL2MuonCutEta {this, "LVL2MuonCutEta", 102.5}
Gaudi::Property< double > m_localLVL2ElectronCutPT {this, "LVL2ElectronCutPT", 0.0}
Gaudi::Property< double > m_localLVL2ElectronCutEta {this, "LVL2ElectronCutEta", 102.5}
Gaudi::Property< bool > m_cuts_f_e_on {this, "Cuts_Final_e_switch", false}
Gaudi::Property< double > m_cuts_f_e_pT {this, "Cuts_Final_e_pT", 0.}
Gaudi::Property< double > m_cuts_f_e_eta {this, "Cuts_Final_e_eta", 2.5}
Gaudi::Property< bool > m_cuts_f_mu_on {this, "Cuts_Final_mu_switch", false}
Gaudi::Property< double > m_cuts_f_mu_pT {this, "Cuts_Final_mu_pT", 0.}
Gaudi::Property< double > m_cuts_f_mu_eta {this, "Cuts_Final_mu_eta", 102.5}
Gaudi::Property< bool > m_cuts_f_had_on {this, "Cuts_Final_hadrons_switch", false}
Gaudi::Property< double > m_cuts_f_had_pT {this, "Cuts_Final_hadrons_pT", 0.}
Gaudi::Property< double > m_cuts_f_had_eta {this, "Cuts_Final_hadrons_eta", 102.5}
Gaudi::Property< bool > m_cuts_f_gam_on {this, "Cuts_Final_gamma_switch", false}
Gaudi::Property< double > m_cuts_f_gam_pT {this, "Cuts_Final_gamma_pT", 0.}
Gaudi::Property< double > m_cuts_f_gam_eta {this, "Cuts_Final_gamma_eta", 102.5}
Gaudi::Property< bool > m_cuts_f_K0_on {this, "Cuts_Final_K0_switch", false}
Gaudi::Property< double > m_cuts_f_K0_pT {this, "Cuts_Final_K0_pT", 0.}
Gaudi::Property< double > m_cuts_f_K0_eta {this, "Cuts_Final_K0_eta", 102.5}
Gaudi::Property< int > m_B_pdgid {this, "B_PDGCode", 0}
Gaudi::Property< bool > m_InvMass_switch {this, "InvMass_switch", false}
Gaudi::Property< int > m_InvMass_PartId1 {this, "InvMass_PartId1", 13}
Gaudi::Property< int > m_InvMass_PartId2 {this, "InvMass_PartId2", -13}
Gaudi::Property< double > m_InvMass_PartFakeMass1 {this, "InvMass_PartFakeMass1", -1.}
Gaudi::Property< double > m_InvMass_PartFakeMass2 {this, "InvMass_PartFakeMass2", -1.}
Gaudi::Property< double > m_InvMassMin {this, "InvMassMin", 0.0}
Gaudi::Property< double > m_InvMassMax {this, "InvMassMax", 14000000.0}
Gaudi::Property< bool > m_TotalInvMass_switch {this, "TotalInvMass_switch", false}
Gaudi::Property< double > m_TotalInvMassMin {this, "TotalInvMassMin", 0.0}
Gaudi::Property< double > m_TotalInvMassMax {this, "TotalInvMassMax", 14000000.0}
SG::ReadHandleKey< xAOD::TruthParticleContainerm_truthPartContKey {this, "TruthParticleContainerKey", "TruthGen"}
int m_EventCnt {}
double m_LVL1Counter {}
double m_LVL2Counter {}
double m_rejectedTrigger {}
double m_rejectedAll {}
std::shared_ptr< GenDatam_gendata {nullptr}
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default).
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default).
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Properties

SG::ReadHandleKey< McEventCollectionm_mcevents_const { this, "McEventKey", "GEN_EVENT", "StoreGate key of the MC event collection" }
 Const handle to the MC event collection.
std::string m_mcEventKey {}
 StoreGate key for the MC event collection (defaults to GEN_EVENT).
BooleanProperty m_mkMcEvent {this, "MakeMcEvent", false, "Create a new MC event collection if it doesn't exist"}
 Flag to determine if a new MC event collection should be made if it doesn't exist.

Detailed Description

Definition at line 25 of file xAODBSignalFilter.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Function Documentation

◆ ATLAS_NOT_CONST_THREAD_SAFE() [1/2]

McEventCollection *events GenBase::ATLAS_NOT_CONST_THREAD_SAFE ( )
inherited

Access the current event's McEventCollection.

Note
This function will make a new McEventCollection if there is not already a valid one and MakeMcEvent=True.

◆ ATLAS_NOT_CONST_THREAD_SAFE() [2/2]

HepMC::GenEvent *event GenBase::ATLAS_NOT_CONST_THREAD_SAFE ( )
inlineinherited

Access the current signal event (first in the McEventCollection).

Note
This function will make a new McEventCollection if there is not already a valid one and MakeMcEvent=True.

Definition at line 74 of file GenBase.h.

74 {
75 if (events()->empty())
76 ATH_MSG_ERROR("McEventCollection is empty during first event access");
77 return *(events()->begin());
78 }
#define ATH_MSG_ERROR(x)
static const Attributes_t empty

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ event_const()

const HepMC::GenEvent * GenBase::event_const ( const EventContext & ctx) const
inlineinherited

Access the current signal event (const).

Definition at line 81 of file GenBase.h.

81 {
82 const McEventCollection* coll = events_const(ctx);
83 if (coll->empty())
84 ATH_MSG_ERROR("Const McEventCollection is empty during first event access");
85 return *(coll->begin());
86 }
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
bool empty() const noexcept
Returns true if the collection is empty.
const McEventCollection * events_const(const EventContext &ctx) const
Access the current event's McEventCollection (const).
Definition GenBase.h:95

◆ events_const()

const McEventCollection * GenBase::events_const ( const EventContext & ctx) const
inlineinherited

Access the current event's McEventCollection (const).

Definition at line 95 of file GenBase.h.

95 {
96 SG::ReadHandle<McEventCollection> ret = SG::makeHandle(m_mcevents_const, ctx);
97 if (!ret.isValid())
98 ATH_MSG_ERROR("No McEventCollection found in StoreGate with key " << m_mcevents_const.key());
99 return ret.cptr();
100 }
SG::ReadHandleKey< McEventCollection > m_mcevents_const
Const handle to the MC event collection.
Definition GenBase.h:119
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode GenFilter::execute ( const EventContext & ctx)
virtualinherited

Execute method.

Todo
Probably the filter should only look at the first event... right?

Reimplemented from GenBase.

Definition at line 27 of file GenFilter.cxx.

27 {
28 if (events_const(ctx)->empty()) {
29 ATH_MSG_ERROR("No events found in McEventCollection");
30 return StatusCode::FAILURE;
31 } else if (events_const(ctx)->size() > 1) {
33 ATH_MSG_WARNING("More than one event in current McEventCollection -- which is valid?");
34 }
36 if (filterPassed(ctx) || m_keepAll ) {
37 ATH_MSG_DEBUG("Event passed filter");
38 m_nPass += 1;
39 } else {
40 ATH_MSG_DEBUG("Event failed filter");
41 m_nFail += 1;
42 }
43 // Bail out once we have enough events
44 if (m_nPass >= m_nNeeded && m_nNeeded > 0)
45 sc = StatusCode::FAILURE;
46 return sc;
47}
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
static Double_t sc
size_t size() const
Number of registered mappings.
virtual bool filterPassed(const EventContext &ctx) const
bool m_keepAll
Definition GenFilter.h:66
int m_nPass
Definition GenFilter.h:63
int m_nNeeded
Definition GenFilter.h:65
virtual StatusCode filterEvent(const EventContext &ctx)=0
int m_nFail
Definition GenFilter.h:64
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthCommonAlgorithm< Gaudi::Algorithm >::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 89 of file AthCommonAlgorithm.cxx.

54{
55 // If we didn't find any symlinks to add, just return the collection
56 // from the base class. Otherwise, return the extended collection.
57 if (!m_extendedExtraObjects.empty()) {
59 }
61}
Common base class for algorithms.

◆ filterEvent()

StatusCode xAODBSignalFilter::filterEvent ( const EventContext & ctx)
finaloverridevirtual

Implements GenFilter.

Definition at line 42 of file xAODBSignalFilter.cxx.

43{
44 ATH_MSG_INFO("");
45 ATH_MSG_INFO(" ---------------------------------- ");
46 ATH_MSG_INFO(" >>> xAODBSignalFilter::FilterEvent <<< ");
47 ATH_MSG_INFO(" ---------------------------------- ");
48 ATH_MSG_INFO("");
49
50 // ** Return ERROR and exit if the user has not selected the PDGid of the B-meson/hadron signal **
52 if (m_B_pdgid == 0)
53 {
54 ATH_MSG_ERROR("");
55 ATH_MSG_ERROR(" ==>> 'B_PDGCode = 0'! Please define the PDGid of the B-meson/hadron signal!");
56 ATH_MSG_ERROR("");
57 return StatusCode::FAILURE;
58 }
59// Retrieve TruthGen container from xAOD Gen slimmer, contains all particles witout barcode_zero and
60// duplicated barcode ones
61 SG::ReadHandle<xAOD::TruthParticleContainer> xTruthParticleContainer{m_truthPartContKey, ctx};
62 CHECK(xTruthParticleContainer.isValid());
63
64bool acceptEvent = true;
65unsigned int nPart = xTruthParticleContainer->size();
66// ** Check HepMC for particles activating LVL1 trigger, if that is what user wishes **
67//
68bool LVL1Passed = false;
69const xAOD::TruthParticle* LVL1Muon = 0;
70//
72 {
73 //
74
75 // Loop over all particles in the event
76 for (unsigned int iPart = 0; iPart < nPart; ++iPart) {
77 const xAOD::TruthParticle* part = (*xTruthParticleContainer)[iPart];
78
79 bool LVL1Result = LVL1_Mu_Trigger(part);
80 if (LVL1Result)
81 {
82 LVL1Passed = true;
83 LVL1Muon = part; // Remember the muon for LVL2 testing
84 break;
85 }
86 } // loop over TruthParticles
87 }
88
89// ** Check HepMC for particles activating LVL2 trigger, if that is what user wishes **
90//
91bool LVL2Passed = false;
92//
94 {
95 for (unsigned int iPart = 0; iPart < nPart; ++iPart) {
96 const xAOD::TruthParticle* part = (*xTruthParticleContainer)[iPart];
97 bool LVL2Result = LVL2_eMu_Trigger(part);
98 if (LVL2Result)
99 {
100 if (part != LVL1Muon) // Check the particle triggering LVL2 isn't
101 LVL2Passed = true; // the muon that triggered LVL1 --> Artificial,
102 // since, effectively, LVL2 trigger is not applied.
103 // This is needed to "trigger" the 2nd muon!
104 }
105 } //loop over particles
106 }
107
108 // ** Flag event as passing LVL1 if it has passed **
109 //
110 if (m_localLVL1MuonCutOn && LVL1Passed)
111 {
112 ATH_MSG_DEBUG(" LVL1 Trigger activated for event " << m_EventCnt);
114 }
115 // ** Flag event as passing LVL2 if it has passed **
116 //
117 if ((m_localLVL2MuonCutOn || m_localLVL2ElectronCutOn) && LVL2Passed)
118 {
119 ATH_MSG_DEBUG(" LVL2 Trigger activated for event " << m_EventCnt);
121 }
122
123 // ** If user hasn't requested triggers then set everything to true so nothing is thrown away **
124 //
126 {
127 LVL1Passed = true;
128 LVL2Passed = true;
129 }
131 LVL2Passed = true;
132
133 // ** Reject event if an undecayed quark is found **
134 //
135 for (unsigned int iPart = 0; iPart < nPart; ++iPart) {
136 const xAOD::TruthParticle* part = (*xTruthParticleContainer)[iPart];
137 if (MC::isSMQuark(part) && MC::isStable(part))
138 {
139 acceptEvent = false;
140 ATH_MSG_WARNING(" Undecayed quark " << part);
141 }
142 }
143
144 // ** Look for signal events **
145 //
146 bool SignalPassedCuts = false;
147 if (LVL1Passed && LVL2Passed)
148 {
149 // ** Loop on all particles **
150 for (unsigned int iPart = 0; iPart < nPart; ++iPart) {
151 const xAOD::TruthParticle* part = (*xTruthParticleContainer)[iPart];
152 const int particleID = part->pdgId();
153 //
154 bool motherIsB = false;
155 bool newBChain = false;
156
157 if ((MC::isBottomMeson(particleID) || MC::isBottomBaryon(particleID)) && MC::isPhysical(part) )
158 {
159 // ** Reject whole event if any of B-hadrons in the event is not decayed **
160 if (MC::isStable(part) )
161 {
162 acceptEvent = false;
163 }
164
165 for(size_t thisParent_id=0; thisParent_id < part->prodVtx()->nIncomingParticles(); thisParent_id++)
166 {
167 auto parent = part->prodVtx()->incomingParticle(thisParent_id);
168 int parentID = parent->pdgId();
169 if (MC::isBottomMeson(parentID) || MC::isBottomBaryon(parentID))
170 motherIsB = true;
171 }
172 if (motherIsB)
173 {
174 newBChain = false; // Since the chain is not new
175 }
176 else
177 {
178 newBChain = true;
179 }
180 }
181 else
182 {
183 newBChain = false;
184 } // Since particle is not b
185
186 // ** New B-signal found, output message and find whole decay tree **
187 if (newBChain)
188 {
189 const auto HadronData = m_gendata->particleName(std::abs(particleID));
190 std::string HadronName = "unknown particle";
191 if (HadronData) HadronName = ((particleID < 0) ? std::string("anti - ") : std::string("")) + *HadronData;
192 ATH_MSG_DEBUG("");
193 ATH_MSG_DEBUG(" ------------------------------------------ ");
194 ATH_MSG_DEBUG(" *** xAODBSignalFilter.cxx: B-signal found *** ");
195 ATH_MSG_DEBUG(" ------------------------------------------ ");
196 ATH_MSG_DEBUG("");
197 ATH_MSG_DEBUG(" Event " << m_EventCnt << " --> B-hadron/B-meson (" << HadronName << ") " << part);
198 ATH_MSG_DEBUG("");
199
200 // ** Looping on all children checking if they have passed the selection cuts defined by the user **
202 {
203 ATH_MSG_DEBUG(" *** KINEMATIC CUTS ON PARTICLES ACTIVATED *** ");
204 ATH_MSG_DEBUG("");
205 ATH_MSG_DEBUG(" --------------------------------- ");
206 ATH_MSG_DEBUG(" Started looping on all children ");
207 ATH_MSG_DEBUG(" --------------------------------- ");
208 ATH_MSG_DEBUG("");
209 //
210 bool isSignal = false;
211 bool havePassedCuts = true;
212 TLorentzVector CandPart1, CandPart2, total_4mom;
213 //
214 FindAllChildren(part, "", false, isSignal, havePassedCuts, CandPart1, CandPart2, false, total_4mom);
215 //
216 ATH_MSG_DEBUG("");
217 ATH_MSG_DEBUG(" ------------------------------- ");
218 ATH_MSG_DEBUG(" Ended looping on all children ");
219 ATH_MSG_DEBUG(" ------------------------------- ");
220 ATH_MSG_DEBUG("");
221
222 SignalPassedCuts = (isSignal && havePassedCuts);
223
224 // ** If signal event is found and InvMass_switch = true, check if the selected
225 // couple of particles has an invariant mass within the range set by the user **
227 {
228 if (SignalPassedCuts)
229 {
230 bool accept_mass = false;
231 bool accept_total_mass = false;
232 ATH_MSG_DEBUG("");
233 ATH_MSG_DEBUG(" *** INVARIANT MASS CUTS ON PARTICLES ACTIVATED! *** ");
234 ATH_MSG_DEBUG("");
235 ATH_MSG_DEBUG(" -- Mass cuts -->> " << m_InvMassMin << " < mass < " << m_InvMassMax << " MeV");
236 //
237 double invMass = (CandPart1 + CandPart2).M();
238 double invMass_total = total_4mom.M();
239 //
240
242 {
243 ATH_MSG_DEBUG(" -- Invariant mass of the couple of particles = " << invMass << " MeV");
244 if (m_InvMassMin < invMass && invMass < m_InvMassMax)
245 {
246 ATH_MSG_DEBUG(" ==>> Event has passed the mass filter!");
247 ATH_MSG_DEBUG("");
248 accept_mass = true;
249 }
250 else
251 {
252 ATH_MSG_DEBUG(" ==>> Event has NOT passed the mass filter!");
253 ATH_MSG_DEBUG("");
254 }
255 SignalPassedCuts = SignalPassedCuts && accept_mass;
256 }
258 {
259 ATH_MSG_DEBUG(" -- Total invariant mass of the final-state particles = " << invMass_total << " MeV");
260 if (m_TotalInvMassMin < invMass_total && invMass_total < m_TotalInvMassMax)
261 {
262 ATH_MSG_DEBUG(" ==>> Event has passed the total mass filter!");
263 ATH_MSG_DEBUG("");
264 accept_total_mass = true;
265 }
266 else
267 {
268 ATH_MSG_DEBUG(" ==>> Event has NOT passed the total mass filter!");
269 ATH_MSG_DEBUG("");
270 }
271 SignalPassedCuts = SignalPassedCuts && accept_total_mass;
272 }
273 }
274 else
275 {
276 ATH_MSG_DEBUG("");
277 ATH_MSG_DEBUG(" *** INVARIANT MASS CUTS ON PARTICLES NOT APPLIED (since the event is not a signal that passed cuts)! *** ");
278 ATH_MSG_DEBUG("");
279 }
280 }
281 else
282 {
283 ATH_MSG_DEBUG(" *** INVARIANT MASS CUTS ON PARTICLES NOT ACTIVATED *** ");
284 ATH_MSG_DEBUG("");
285 }
286 }
287 else
288 {
289 SignalPassedCuts = true;
290 //
291 ATH_MSG_DEBUG(" *** KINEMATIC CUTS ON PARTICLES NOT ACTIVATED ==>> ACCEPT ALL EVENTS! *** ");
292 ATH_MSG_DEBUG("");
293 }
294 } // End newBChain
295 if (SignalPassedCuts)
296 break; // We have found the signal, we do not need to look for other particles
297 } // End particle iteration
298
299 if (SignalPassedCuts)
300 {
301 ATH_MSG_DEBUG(" -->> All signal children have passed cuts on particles!");
302 }
303 else
304 {
305 ATH_MSG_DEBUG(" -->> Signal children have NOT passed cuts on particles!");
306 }
307 } // end of LVL1/LVL2 selection
308 else
309 {
310 ATH_MSG_DEBUG("");
311 ATH_MSG_DEBUG(" -->> Event has NOT passed the trigger!");
312 }
313 // ** Reject event if it has not passed triggers **
314 // --> If not requested by user these flags will be set
315 // to true so there will be no erroneous rejection
316 if ((!LVL1Passed) || (!LVL2Passed))
317 {
319 acceptEvent = false;
320 }
321
322 // ** Check if all conditions are true **
323 // --> Accept the event if acceptEvent is true and the event is a signal event
324 acceptEvent = acceptEvent && SignalPassedCuts;
325
326 // ** Print whether the event has passed or not **
327 //
328 ATH_MSG_DEBUG("");
329 if (!acceptEvent)
330 {
331 setFilterPassed(false, ctx);
333 ATH_MSG_DEBUG(" ==========================");
334 ATH_MSG_DEBUG(" Event REJECTED by Filter ");
335 ATH_MSG_DEBUG(" ==========================");
336 }
337 else
338 {
339 setFilterPassed(true, ctx);
340 ATH_MSG_DEBUG(" ==========================");
341 ATH_MSG_DEBUG(" Event ACCEPTED by Filter ");
342 ATH_MSG_DEBUG(" ==========================");
343 }
344 ATH_MSG_DEBUG("");
345
346 // End of execution for each event
347 return StatusCode::SUCCESS;
348}
#define ATH_MSG_INFO(x)
#define CHECK(...)
Evaluate an expression and check for errors.
virtual void setFilterPassed(bool state, const EventContext &ctx) const
Gaudi::Property< bool > m_localLVL2ElectronCutOn
bool LVL1_Mu_Trigger(const xAOD::TruthParticle *child) const
Gaudi::Property< bool > m_localLVL1MuonCutOn
std::shared_ptr< GenData > m_gendata
Gaudi::Property< bool > m_localLVL2MuonCutOn
Gaudi::Property< double > m_TotalInvMassMin
void FindAllChildren(const xAOD::TruthParticle *mother, std::string treeIDStr, bool fromFinalB, bool &foundSignal, bool &passedAllCuts, TLorentzVector &p1, TLorentzVector &p2, bool fromSelectedB, TLorentzVector &total_4mom) const
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthPartContKey
Gaudi::Property< bool > m_cuts_f_gam_on
Gaudi::Property< bool > m_InvMass_switch
Gaudi::Property< bool > m_cuts_f_mu_on
Gaudi::Property< double > m_InvMassMin
Gaudi::Property< bool > m_cuts_f_e_on
Gaudi::Property< bool > m_TotalInvMass_switch
bool LVL2_eMu_Trigger(const xAOD::TruthParticle *child) const
Gaudi::Property< int > m_B_pdgid
Gaudi::Property< double > m_InvMassMax
Gaudi::Property< double > m_TotalInvMassMax
Gaudi::Property< bool > m_cuts_f_had_on
Gaudi::Property< bool > m_cuts_f_K0_on
End of vector before end of string
Definition Arrayrep.cxx:228
bool isBottomMeson(const T &p)
bool isBottomBaryon(const T &p)
bool isStable(const T &p)
Identify if the particle is stable, i.e. has not decayed.
bool isSMQuark(const T &p)
bool isPhysical(const T &p)
Identify if the particle is physical, i.e. is stable or decayed.
double invMass(const I4Momentum &pA, const I4Momentum &pB)
invariant mass from two I4momentum references
Definition P4Helpers.h:252
TruthParticle_v1 TruthParticle
Typedef to implementation.

◆ filterFinalize()

StatusCode xAODBSignalFilter::filterFinalize ( )
finaloverridevirtual

Reimplemented from GenFilter.

Definition at line 626 of file xAODBSignalFilter.cxx.

627{
628 double total = m_EventCnt;
629 ATH_MSG_ALWAYS(" I===============================================================================================");
630 ATH_MSG_ALWAYS(" I xAODBSignalFilter Summary Report ");
631 ATH_MSG_ALWAYS(" I===============================================================================================");
633 {
634 ATH_MSG_ALWAYS(" I LVL1 muon trigger report:");
635 ATH_MSG_ALWAYS(" I Muon pT cut " << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << "I" << '\t'
636 << m_localLVL1MuonCutPT << " MeV ");
637 ATH_MSG_ALWAYS(" I Muon pseudo-rapidity cut" << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << "I" << '\t'
639 ATH_MSG_ALWAYS(" I No of events containing at least " << '\t' << '\t' << '\t' << '\t' << '\t' << "I");
640 ATH_MSG_ALWAYS(" I one particle satisfying these cuts " << '\t' << '\t' << '\t' << '\t' << '\t' << "I" << '\t'
641 << m_LVL1Counter);
643 {
644 ATH_MSG_ALWAYS(" I LVL2 muon trigger report:");
645 ATH_MSG_ALWAYS(" I Muon pT cut " << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << "I" << '\t'
646 << m_localLVL2MuonCutPT << " MeV ");
647 ATH_MSG_ALWAYS(" I Muon pseudo-rapidity cut " << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << "I" << '\t'
649 }
651 {
652 ATH_MSG_ALWAYS(" I LVL2 electron trigger report:");
653 ATH_MSG_ALWAYS(" I Electron pT cut " << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << " I" << '\t' << m_localLVL2ElectronCutPT << " MeV ");
654 ATH_MSG_ALWAYS(" I Electron pseudo-rapidity cut " << '\t' << '\t' << '\t' << '\t' << '\t' << "I"
655 << '\t' << m_localLVL2ElectronCutEta);
656 }
658 {
659 ATH_MSG_ALWAYS(" I No of events containing at least one muon satisfying LVL1 cut" << '\t' << "I");
660 ATH_MSG_ALWAYS(" I and at least one separate particle passing these LVL2 cuts " << '\t' << '\t' << "I" << '\t'
661 << m_LVL2Counter);
662 }
663 }
664 ATH_MSG_ALWAYS(" I Total no of input events " << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << "I" << '\t'
665 << total);
666 ATH_MSG_ALWAYS(" I No of events rejected by trigger " << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << "I" << '\t'
668 ATH_MSG_ALWAYS(" I No of events rejected in total " << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << '\t' << "I" << '\t'
669 << m_rejectedAll);
671 ATH_MSG_ALWAYS(" I To obtain correct cross section, multiply BX in PythiaB report by " << '\t' << '\t' << "I" << '\t'
672 << m_LVL1Counter / total);
674 ATH_MSG_ALWAYS(" I To obtain correct cross section, multiply BX in PythiaB report by " << '\t' << '\t' << "I" << '\t'
675 << m_LVL2Counter / total);
677 ATH_MSG_ALWAYS(" I No trigger requests made");
678 //
679 ATH_MSG_ALWAYS(" I=========================================== End of report =====================================");
680
681 return StatusCode::SUCCESS;
682}
#define ATH_MSG_ALWAYS(x)
Gaudi::Property< double > m_localLVL1MuonCutPT
Gaudi::Property< double > m_localLVL2ElectronCutPT
Gaudi::Property< double > m_localLVL2MuonCutPT
Gaudi::Property< double > m_localLVL1MuonCutEta
Gaudi::Property< double > m_localLVL2ElectronCutEta
Gaudi::Property< double > m_localLVL2MuonCutEta

◆ filterInitialize()

StatusCode xAODBSignalFilter::filterInitialize ( )
finaloverridevirtual

Reimplemented from GenFilter.

Definition at line 35 of file xAODBSignalFilter.cxx.

36{
37 CHECK(m_truthPartContKey.initialize());
38 m_gendata = std::make_shared<GenData>();
39 return StatusCode::SUCCESS;
40}

◆ filterPassed()

virtual bool AthCommonAlgorithm< Gaudi::Algorithm >::filterPassed ( const EventContext & ctx) const
inlinevirtualinherited

Get filter decision:

Definition at line 93 of file AthCommonAlgorithm.h.

93 {
94 return execState( ctx ).filterPassed();
95 }

◆ finalize()

StatusCode GenFilter::finalize ( )
inherited

Definition at line 50 of file GenFilter.cxx.

50 {
51 ATH_MSG_INFO("Events passed = " << m_nPass << " Events failed = " << m_nFail);
53 return StatusCode::SUCCESS;
54}
virtual StatusCode filterFinalize()
Definition GenFilter.h:47

◆ FinalStatePassedCuts()

bool xAODBSignalFilter::FinalStatePassedCuts ( const xAOD::TruthParticle * child) const
private

Definition at line 475 of file xAODBSignalFilter.cxx.

476{
477 bool accept = true;
478
479 // ** Look if children has passed the cuts **
480 //
481 int pID = child->pdgId();
482 double myPT = child->pt();
483 double myEta = child->eta();
484
485 ATH_MSG_DEBUG("");
486 ATH_MSG_DEBUG(" ** Found a child with: ");
487 ATH_MSG_DEBUG(" - id = " << pID);
488 ATH_MSG_DEBUG(" - pT = " << myPT << " MeV");
489 ATH_MSG_DEBUG(" - eta = " << myEta);
490 ATH_MSG_DEBUG("");
491
492 if (m_cuts_f_e_on)
493 {
494 if (MC::isElectron(pID))
495 {
496 ATH_MSG_DEBUG(" ** ( pT , eta ) cuts applied on the electron --> ( " << m_cuts_f_e_pT
497 << " , " << m_cuts_f_e_eta << " )");
498 if (test_cuts(myPT, m_cuts_f_e_pT, myEta, m_cuts_f_e_eta))
499 {
500 ATH_MSG_DEBUG(" ==>> Found an electron which passed the pT and eta cuts!");
501 ATH_MSG_DEBUG(" - Electron: pT = " << myPT << " MeV");
502 ATH_MSG_DEBUG(" - Electron: eta = " << myEta);
503 ATH_MSG_DEBUG("");
504 ATH_MSG_DEBUG(" ==>> Accepted the electron!");
505 ATH_MSG_DEBUG("");
506 }
507 else
508 {
509 accept = false;
510 ATH_MSG_DEBUG(" ==>> The electron has NOT passed the pT and eta cuts!");
511 ATH_MSG_DEBUG("");
512 }
513 }
514 }
515 if (m_cuts_f_mu_on)
516 {
517 if (MC::isMuon(pID))
518 {
519 ATH_MSG_DEBUG(" ** ( pT , eta ) cuts applied on the muon --> ( " << m_cuts_f_mu_pT
520 << " , " << m_cuts_f_mu_eta << " )");
521 if (test_cuts(myPT, m_cuts_f_mu_pT, myEta, m_cuts_f_mu_eta))
522 {
523 ATH_MSG_DEBUG(" ==>> Found a muon which passed the pT and eta cuts!");
524 ATH_MSG_DEBUG(" - Muon: pT = " << myPT << " MeV");
525 ATH_MSG_DEBUG(" - Muon: eta = " << myEta);
526 ATH_MSG_DEBUG("");
527 ATH_MSG_DEBUG(" ==>> Accepted the muon!");
528 ATH_MSG_DEBUG("");
529 }
530 else
531 {
532 accept = false;
533 ATH_MSG_DEBUG(" ==>> The muon has NOT passed the pT and eta cuts!");
534 ATH_MSG_DEBUG("");
535 }
536 }
537 }
538 if (m_cuts_f_had_on)
539 {
540 if (MC::isHadron(pID) && MC::isCharged(pID))
541 {
542 ATH_MSG_DEBUG(" ** ( pT , eta ) cuts applied on the charged hadron --> ( " << m_cuts_f_had_pT
543 << " , " << m_cuts_f_had_eta << " )");
544 if (test_cuts(myPT, m_cuts_f_had_pT, myEta, m_cuts_f_had_eta))
545 {
546 ATH_MSG_DEBUG(" ==>> Found a charged hadron which passed the pT and eta cuts!");
547 ATH_MSG_DEBUG(" - Charged hadron: pT = " << myPT << " MeV");
548 ATH_MSG_DEBUG(" - Charged hadron: eta = " << myEta);
549 ATH_MSG_DEBUG("");
550 ATH_MSG_DEBUG(" ==>> Accepted the charged hadron!");
551 ATH_MSG_DEBUG("");
552 }
553 else
554 {
555 accept = false;
556 ATH_MSG_DEBUG(" ==>> The charged hadron has NOT passed the pT and eta cuts!");
557 ATH_MSG_DEBUG("");
558 }
559 }
560 }
561 if (m_cuts_f_gam_on)
562 {
563 if (MC::isPhoton(pID))
564 {
565 ATH_MSG_DEBUG(" ** ( pT , eta ) cuts applied on the gamma --> ( " << m_cuts_f_gam_pT
566 << " , " << m_cuts_f_gam_eta << " )");
567 if (test_cuts(myPT, m_cuts_f_gam_pT, myEta, m_cuts_f_gam_eta))
568 {
569 ATH_MSG_DEBUG(" ==>> Found a gamma which passed the pT and eta cuts!");
570 ATH_MSG_DEBUG(" - Gamma: pT = " << myPT << " MeV");
571 ATH_MSG_DEBUG(" - Gamma: eta = " << myEta);
572 ATH_MSG_DEBUG("");
573 ATH_MSG_DEBUG(" ==>> Accepted the gamma!");
574 ATH_MSG_DEBUG("");
575 }
576 else
577 {
578 accept = false;
579 ATH_MSG_DEBUG(" ==>> The gamma has NOT passed the pT and eta cuts!");
580 ATH_MSG_DEBUG("");
581 }
582 }
583 }
584 if (m_cuts_f_K0_on)
585 {
586 if (std::abs(pID) == MC::K0)
587 {
588 ATH_MSG_DEBUG(" ** ( pT , eta ) cuts applied on the K0 --> ( " << m_cuts_f_K0_pT
589 << " , " << m_cuts_f_K0_eta << " )");
590 if (test_cuts(myPT, m_cuts_f_K0_pT, myEta, m_cuts_f_K0_eta))
591 {
592 ATH_MSG_DEBUG(" ==>> Found a K0 which passed the pT and eta cuts!");
593 ATH_MSG_DEBUG(" - K0: pT = " << myPT << " MeV");
594 ATH_MSG_DEBUG(" - K0: eta = " << myEta);
595 ATH_MSG_DEBUG("");
596 ATH_MSG_DEBUG(" ==>> Accepted the K0!");
597 ATH_MSG_DEBUG("");
598 }
599 else
600 {
601 accept = false;
602 ATH_MSG_DEBUG(" ==>> The K0 has NOT passed the pT and eta cuts!");
603 ATH_MSG_DEBUG("");
604 }
605 }
606 }
607
608 return accept;
609}
Gaudi::Property< double > m_cuts_f_gam_eta
Gaudi::Property< double > m_cuts_f_e_pT
Gaudi::Property< double > m_cuts_f_mu_eta
Gaudi::Property< double > m_cuts_f_mu_pT
Gaudi::Property< double > m_cuts_f_had_pT
Gaudi::Property< double > m_cuts_f_K0_pT
Gaudi::Property< double > m_cuts_f_had_eta
Gaudi::Property< double > m_cuts_f_e_eta
Gaudi::Property< double > m_cuts_f_gam_pT
Gaudi::Property< double > m_cuts_f_K0_eta
bool test_cuts(const double myPT, const double testPT, const double myEta, const double testEta) const
int pdgId() const
PDG ID code.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
StatusCode accept(const xAOD::Muon *mu)
static const int K0
bool isPhoton(const T &p)
bool isElectron(const T &p)
bool isCharged(const T &p)
bool isMuon(const T &p)
bool isHadron(const T &p)

◆ FindAllChildren()

void xAODBSignalFilter::FindAllChildren ( const xAOD::TruthParticle * mother,
std::string treeIDStr,
bool fromFinalB,
bool & foundSignal,
bool & passedAllCuts,
TLorentzVector & p1,
TLorentzVector & p2,
bool fromSelectedB,
TLorentzVector & total_4mom ) const
private

Definition at line 381 of file xAODBSignalFilter.cxx.

384{
385 int pID = mother->pdgId();
386 //
387 if (!(mother->decayVtx()) && MC::isStable(mother)) // i.e. this is a final state
388 {
389 bool hasChildGoodParent = fromFinalB && (fromSelectedB || m_B_pdgid == 0);
390 //
391 if (fromFinalB && hasChildGoodParent)
392 {
393 foundSignal = true;
394 bool passedCut = FinalStatePassedCuts(mother); // X = X && ... in case of multiple particles (e.g. KK)
395 if (m_cuts_f_e_on && MC::isElectron(pID))
396 passedAllCuts = passedAllCuts && passedCut;
397 if (m_cuts_f_mu_on && MC::isMuon(pID))
398 passedAllCuts = passedAllCuts && passedCut;
399 if (m_cuts_f_had_on && MC::isHadron(pID) && MC::isCharged(pID))
400 passedAllCuts = passedAllCuts && passedCut;
401 if (m_cuts_f_gam_on && MC::isPhoton(pID))
402 passedAllCuts = passedAllCuts && passedCut;
403 if (m_cuts_f_K0_on && std::abs(pID) == MC::K0)
404 passedAllCuts = passedAllCuts && passedCut;
405 //
407 {
409 p1.SetPxPyPzE(mother->px(), mother->py(), mother->pz(), mother->e());
410 else
411 p1.SetXYZM(mother->px(), mother->py(), mother->pz(), m_InvMass_PartFakeMass1);
412 total_4mom = total_4mom + p1;
413 }
415 {
417 p2.SetPxPyPzE(mother->px(), mother->py(), mother->pz(), mother->e());
418 else
419 p2.SetXYZM(mother->px(), mother->py(), mother->pz(), m_InvMass_PartFakeMass2);
420 total_4mom = total_4mom + p2;
421 }
422 else if (m_TotalInvMass_switch)
423 {
424 TLorentzVector current_4p;
425 current_4p.SetPxPyPzE(mother->px(), mother->py(), mother->pz(), mother->e());
426 total_4mom = total_4mom + current_4p;
427 }
428 }
429 return;
430 }
431 else
432 {
433 if (!(mother->decayVtx())) // i.e. something is wrong in HepMC
434 {
435 if (MC::isDecayed(mother))
436 ATH_MSG_DEBUG(" Inconsistent entry in HepMC (status 2 particle not decayed), chain rejected!");
437 return;
438 }
439 }
440
441 int childCnt = 0;
442 std::string childIDStr;
443 if (!(treeIDStr == ""))
444 treeIDStr = treeIDStr + ".";
445
446 // ** Find out whether particle is child of final (non-excited) B, used for cuts **
447 if ((!fromFinalB) && (MC::isBottomMeson(pID) || MC::isBottomBaryon(pID)))
448 {
449 fromFinalB = true;
450 int pID;
451 for(size_t thisChild_id=0; thisChild_id < mother->decayVtx()->nOutgoingParticles(); thisChild_id++)
452 {
453 auto child = mother->decayVtx()->outgoingParticle(thisChild_id);
454 pID = child->pdgId();
455 if (MC::isBottomMeson(pID) || MC::isBottomBaryon(pID))
456 fromFinalB = false;
457 }
458 }
459
460 // ** Main loop: iterate over all children, call method recursively.
461 for(size_t thisChild_id=0; thisChild_id < mother->decayVtx()->nOutgoingParticles(); thisChild_id++)
462 {
463 auto child = mother->decayVtx()->outgoingParticle(thisChild_id);
464 childCnt++;
465 std::stringstream childCntSS;
466 childCntSS << childCnt;
467 childIDStr = treeIDStr + childCntSS.str();
468 PrintChild(child, childIDStr, fromFinalB);
469 FindAllChildren(child, childIDStr, fromFinalB, foundSignal, passedAllCuts, p1, p2, (pID == m_B_pdgid) || fromSelectedB, total_4mom);
470 }
471
472 return;
473}
Gaudi::Property< int > m_InvMass_PartId2
void PrintChild(const xAOD::TruthParticle *child, const std::string &treeIDStr, const bool fromFinalB) const
Gaudi::Property< int > m_InvMass_PartId1
bool FinalStatePassedCuts(const xAOD::TruthParticle *child) const
Gaudi::Property< double > m_InvMass_PartFakeMass2
Gaudi::Property< double > m_InvMass_PartFakeMass1
const TruthVertex_v1 * decayVtx() const
The decay vertex of this particle.
float px() const
The x component of the particle's momentum.
virtual double e() const override final
The total energy of the particle.
float py() const
The y component of the particle's momentum.
float pz() const
The z component of the particle's momentum.
const TruthParticle_v1 * outgoingParticle(size_t index) const
Get one of the outgoing particles.
bool isDecayed(const T &p)
Identify if the particle decayed.

◆ GenFilter()

GenFilter::GenFilter ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 33 of file GenFilter.cxx.

9 : GenBase(name, pSvcLocator)
10{
11 declareProperty("TotalPassed", m_nNeeded=-1);
12 declareProperty("KeepAllEvents", m_keepAll=false);
13 m_nPass = 0;
14 m_nFail = 0;
15}
GenBase(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Definition GenBase.cxx:11

◆ initialize()

StatusCode GenFilter::initialize ( )
virtualinherited

Reimplemented from GenBase.

Definition at line 18 of file GenFilter.cxx.

18 {
20 m_nPass = 0;
21 m_nFail = 0;
23 return StatusCode::SUCCESS;
24}
virtual StatusCode initialize() override
Definition GenBase.cxx:17
virtual StatusCode filterInitialize()
Definition GenFilter.h:45

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isClonable()

virtual bool AthCommonAlgorithm< Gaudi::Algorithm >::isClonable ( ) const
inlineoverridevirtualinherited

Specify if the algorithm is clonable.

Only relevant for non-reentrant algorithms. Actual number of clones needs to be set via the "Cardinality" property.

Reimplemented in AFP_DigiTop, AlgB, AlgT, BCM_Digitization, CscDigitBuilder, CscDigitToCscRDO, G4AtlasAlg, G4RunAlg, HGTD_Digitization, HiveAlgBase, InDet::GNNSeedingTrackMaker, InDet::SCT_Clusterization, InDet::SiSPGNNTrackMaker, InDet::SiSPSeededTrackFinder, InDet::SiTrackerSpacePointFinder, ISF::SimKernelMT, ITk::StripDigitization, ITkPixelCablingAlg, ITkStripCablingAlg, LArHitEMapMaker, LArTTL1Maker, LUCID_DigiTop, LVL1::L1TopoSimulation, MergeCalibHits, MergeGenericMuonSimHitColl, MergeHijingPars, MergeMcEventCollection, MergeTrackRecordCollection, MergeTruthJets, MergeTruthParticles, MuonDigitizer, PileUpMTAlg, PixelDigitization, RoIBResultToxAOD, SCT_ByteStreamErrorsTestAlg, SCT_CablingCondAlgFromCoraCool, SCT_CablingCondAlgFromText, SCT_ConditionsParameterTestAlg, SCT_ConditionsSummaryTestAlg, SCT_ConfigurationConditionsTestAlg, SCT_Digitization, SCT_FlaggedConditionTestAlg, SCT_LinkMaskingTestAlg, SCT_MajorityConditionsTestAlg, SCT_ModuleVetoTestAlg, SCT_MonitorConditionsTestAlg, SCT_PrepDataToxAOD, SCT_RawDataToxAOD, SCT_ReadCalibChipDataTestAlg, SCT_ReadCalibDataTestAlg, SCT_RODVetoTestAlg, SCT_SensorsTestAlg, SCT_SiliconConditionsTestAlg, SCT_StripVetoTestAlg, SCT_TdaqEnabledTestAlg, SCT_TestCablingAlg, SCTEventFlagWriter, SCTRawDataProvider, SCTSiLorentzAngleTestAlg, SCTSiPropertiesTestAlg, SGInputLoader, Simulation::BeamEffectsAlg, TileHitVecToCnt, TileMuonFitter, TilePulseForTileMuonReceiver, TileRawChannelMaker, TRTDigitization, and ZDC_DigiTop.

Definition at line 68 of file AthCommonAlgorithm.h.

68 {
69 return true;
70 }

◆ isReEntrant()

virtual bool AthAlgorithm::isReEntrant ( ) const
inlinefinaloverrideprotectedvirtualinherited

Legacy algorithms are not thread-safe.

Definition at line 47 of file AthAlgorithm.h.

47{ return false; }

◆ keepAll()

bool GenFilter::keepAll ( ) const
inlineinherited

Definition at line 55 of file GenFilter.h.

55{return m_keepAll; }

◆ LVL1_Mu_Trigger()

bool xAODBSignalFilter::LVL1_Mu_Trigger ( const xAOD::TruthParticle * child) const
private

Definition at line 355 of file xAODBSignalFilter.cxx.

356{
357 bool accept = false;
358 double myPT = child->pt();
359 double myEta = child->eta();
360
361 if (MC::isMuon(child) && m_localLVL1MuonCutOn)
363
364 return accept;
365}

◆ LVL2_eMu_Trigger()

bool xAODBSignalFilter::LVL2_eMu_Trigger ( const xAOD::TruthParticle * child) const
private

Definition at line 367 of file xAODBSignalFilter.cxx.

368{
369 bool accept = false;
370 double myPT = child->pt();
371 double myEta = child->eta();
372
375 if (MC::isMuon(child) && m_localLVL2MuonCutOn)
377
378 return accept;
379}

◆ msg()

MsgStream & AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ nFailed()

int GenFilter::nFailed ( ) const
inlineinherited

Definition at line 53 of file GenFilter.h.

53{ return m_nFail; }

◆ nNeeded()

int GenFilter::nNeeded ( ) const
inlineinherited

Definition at line 54 of file GenFilter.h.

54{ return m_nNeeded; }

◆ nPassed()

int GenFilter::nPassed ( ) const
inlineinherited

Definition at line 52 of file GenFilter.h.

52{ return m_nPass; }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ PrintChild()

void xAODBSignalFilter::PrintChild ( const xAOD::TruthParticle * child,
const std::string & treeIDStr,
const bool fromFinalB ) const
private

Definition at line 611 of file xAODBSignalFilter.cxx.

613{
614 int pID = child->pdgId();
615 // ** Find name **
616 const auto pData = m_gendata->particleName(std::abs(pID));
617 std::string pName = "unknown particle";
618 if (pData) pName = ((pID < 0) ? std::string("anti - ") : std::string("")) + *pData;
619 ATH_MSG_DEBUG(" " << treeIDStr << " "
620 << "Child (" << pName
621 << ") " << child << " , from final B = " << fromFinalB);
622
623 return;
624}

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ setFilterPassed()

virtual void AthCommonAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool state,
const EventContext & ctx ) const
inlinevirtualinherited

Set filter decision:

Reimplemented in AthFilterAlgorithm.

Definition at line 99 of file AthCommonAlgorithm.h.

99 {
101 }

◆ sysExecute()

StatusCode AthCommonAlgorithm< Gaudi::Algorithm >::sysExecute ( const EventContext & ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Reimplemented in AthAnalysisAlgorithm.

Definition at line 80 of file AthCommonAlgorithm.cxx.

41{
42 return BaseAlg::sysExecute (ctx);
43}

◆ sysInitialize()

StatusCode AthCommonAlgorithm< Gaudi::Algorithm >::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, HypoBase, InputMakerBase, and PyAthena::Alg.

Definition at line 60 of file AthCommonAlgorithm.cxx.

71 {
73
74 if (sc.isFailure()) {
75 return sc;
76 }
77
78 ServiceHandle<ICondSvc> cs("CondSvc",name());
79 for (auto h : outputHandles()) {
80 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
81 // do this inside the loop so we don't create the CondSvc until needed
82 if ( cs.retrieve().isFailure() ) {
83 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
85 }
86 if (cs->regHandle(this,*h).isFailure()) {
88 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
89 << " with CondSvc");
90 }
91 }
92 }
93 return sc;
94}
virtual StatusCode sysInitialize() override
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ test_cuts()

bool xAODBSignalFilter::test_cuts ( const double myPT,
const double testPT,
const double myEta,
const double testEta ) const
private

Definition at line 350 of file xAODBSignalFilter.cxx.

351{
352 return ((myPT >= testPT) && (std::abs(myEta) <= testEta));
353}

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }

Member Data Documentation

◆ m_B_pdgid

Gaudi::Property<int> xAODBSignalFilter::m_B_pdgid {this, "B_PDGCode", 0}
private

Definition at line 66 of file xAODBSignalFilter.h.

66{this, "B_PDGCode", 0}; // pdgID of the mother

◆ m_cuts_f_e_eta

Gaudi::Property<double> xAODBSignalFilter::m_cuts_f_e_eta {this, "Cuts_Final_e_eta", 2.5}
private

Definition at line 52 of file xAODBSignalFilter.h.

52{this, "Cuts_Final_e_eta", 2.5}; // FIXME why is this default different from the rest of the eta cuts?

◆ m_cuts_f_e_on

Gaudi::Property<bool> xAODBSignalFilter::m_cuts_f_e_on {this, "Cuts_Final_e_switch", false}
private

Definition at line 50 of file xAODBSignalFilter.h.

50{this, "Cuts_Final_e_switch", false};

◆ m_cuts_f_e_pT

Gaudi::Property<double> xAODBSignalFilter::m_cuts_f_e_pT {this, "Cuts_Final_e_pT", 0.}
private

Definition at line 51 of file xAODBSignalFilter.h.

51{this, "Cuts_Final_e_pT", 0.};

◆ m_cuts_f_gam_eta

Gaudi::Property<double> xAODBSignalFilter::m_cuts_f_gam_eta {this, "Cuts_Final_gamma_eta", 102.5}
private

Definition at line 61 of file xAODBSignalFilter.h.

61{this, "Cuts_Final_gamma_eta", 102.5};

◆ m_cuts_f_gam_on

Gaudi::Property<bool> xAODBSignalFilter::m_cuts_f_gam_on {this, "Cuts_Final_gamma_switch", false}
private

Definition at line 59 of file xAODBSignalFilter.h.

59{this, "Cuts_Final_gamma_switch", false};

◆ m_cuts_f_gam_pT

Gaudi::Property<double> xAODBSignalFilter::m_cuts_f_gam_pT {this, "Cuts_Final_gamma_pT", 0.}
private

Definition at line 60 of file xAODBSignalFilter.h.

60{this, "Cuts_Final_gamma_pT", 0.};

◆ m_cuts_f_had_eta

Gaudi::Property<double> xAODBSignalFilter::m_cuts_f_had_eta {this, "Cuts_Final_hadrons_eta", 102.5}
private

Definition at line 58 of file xAODBSignalFilter.h.

58{this, "Cuts_Final_hadrons_eta", 102.5};

◆ m_cuts_f_had_on

Gaudi::Property<bool> xAODBSignalFilter::m_cuts_f_had_on {this, "Cuts_Final_hadrons_switch", false}
private

Definition at line 56 of file xAODBSignalFilter.h.

56{this, "Cuts_Final_hadrons_switch", false};

◆ m_cuts_f_had_pT

Gaudi::Property<double> xAODBSignalFilter::m_cuts_f_had_pT {this, "Cuts_Final_hadrons_pT", 0.}
private

Definition at line 57 of file xAODBSignalFilter.h.

57{this, "Cuts_Final_hadrons_pT", 0.};

◆ m_cuts_f_K0_eta

Gaudi::Property<double> xAODBSignalFilter::m_cuts_f_K0_eta {this, "Cuts_Final_K0_eta", 102.5}
private

Definition at line 64 of file xAODBSignalFilter.h.

64{this, "Cuts_Final_K0_eta", 102.5};

◆ m_cuts_f_K0_on

Gaudi::Property<bool> xAODBSignalFilter::m_cuts_f_K0_on {this, "Cuts_Final_K0_switch", false}
private

Definition at line 62 of file xAODBSignalFilter.h.

62{this, "Cuts_Final_K0_switch", false};

◆ m_cuts_f_K0_pT

Gaudi::Property<double> xAODBSignalFilter::m_cuts_f_K0_pT {this, "Cuts_Final_K0_pT", 0.}
private

Definition at line 63 of file xAODBSignalFilter.h.

63{this, "Cuts_Final_K0_pT", 0.};

◆ m_cuts_f_mu_eta

Gaudi::Property<double> xAODBSignalFilter::m_cuts_f_mu_eta {this, "Cuts_Final_mu_eta", 102.5}
private

Definition at line 55 of file xAODBSignalFilter.h.

55{this, "Cuts_Final_mu_eta", 102.5};

◆ m_cuts_f_mu_on

Gaudi::Property<bool> xAODBSignalFilter::m_cuts_f_mu_on {this, "Cuts_Final_mu_switch", false}
private

Definition at line 53 of file xAODBSignalFilter.h.

53{this, "Cuts_Final_mu_switch", false};

◆ m_cuts_f_mu_pT

Gaudi::Property<double> xAODBSignalFilter::m_cuts_f_mu_pT {this, "Cuts_Final_mu_pT", 0.}
private

Definition at line 54 of file xAODBSignalFilter.h.

54{this, "Cuts_Final_mu_pT", 0.};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default).

Definition at line 393 of file AthCommonDataStore.h.

◆ m_EventCnt

int xAODBSignalFilter::m_EventCnt {}
private

Definition at line 82 of file xAODBSignalFilter.h.

82{};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default).

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthCommonAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 108 of file AthCommonAlgorithm.h.

◆ m_gendata

std::shared_ptr<GenData> xAODBSignalFilter::m_gendata {nullptr}
private

Definition at line 109 of file xAODBSignalFilter.h.

109{nullptr};

◆ m_InvMass_PartFakeMass1

Gaudi::Property<double> xAODBSignalFilter::m_InvMass_PartFakeMass1 {this, "InvMass_PartFakeMass1", -1.}
private

Definition at line 71 of file xAODBSignalFilter.h.

71{this, "InvMass_PartFakeMass1", -1.};

◆ m_InvMass_PartFakeMass2

Gaudi::Property<double> xAODBSignalFilter::m_InvMass_PartFakeMass2 {this, "InvMass_PartFakeMass2", -1.}
private

Definition at line 72 of file xAODBSignalFilter.h.

72{this, "InvMass_PartFakeMass2", -1.};

◆ m_InvMass_PartId1

Gaudi::Property<int> xAODBSignalFilter::m_InvMass_PartId1 {this, "InvMass_PartId1", 13}
private

Definition at line 69 of file xAODBSignalFilter.h.

69{this, "InvMass_PartId1", 13}; // pdgID of the couple used for mass cuts

◆ m_InvMass_PartId2

Gaudi::Property<int> xAODBSignalFilter::m_InvMass_PartId2 {this, "InvMass_PartId2", -13}
private

Definition at line 70 of file xAODBSignalFilter.h.

70{this, "InvMass_PartId2", -13}; // pdgID of the couple used for mass cuts

◆ m_InvMass_switch

Gaudi::Property<bool> xAODBSignalFilter::m_InvMass_switch {this, "InvMass_switch", false}
private

Definition at line 68 of file xAODBSignalFilter.h.

68{this, "InvMass_switch", false};

◆ m_InvMassMax

Gaudi::Property<double> xAODBSignalFilter::m_InvMassMax {this, "InvMassMax", 14000000.0}
private

Definition at line 75 of file xAODBSignalFilter.h.

75{this, "InvMassMax", 14000000.0};

◆ m_InvMassMin

Gaudi::Property<double> xAODBSignalFilter::m_InvMassMin {this, "InvMassMin", 0.0}
private

Definition at line 74 of file xAODBSignalFilter.h.

74{this, "InvMassMin", 0.0};

◆ m_keepAll

bool GenFilter::m_keepAll
protectedinherited

Definition at line 66 of file GenFilter.h.

◆ m_localLVL1MuonCutEta

Gaudi::Property<double> xAODBSignalFilter::m_localLVL1MuonCutEta {this, "LVL1MuonCutEta", 102.5}
private

Definition at line 45 of file xAODBSignalFilter.h.

45{this, "LVL1MuonCutEta", 102.5};

◆ m_localLVL1MuonCutOn

Gaudi::Property<bool> xAODBSignalFilter::m_localLVL1MuonCutOn {this, "LVL1MuonCutOn", false}
private

Definition at line 41 of file xAODBSignalFilter.h.

41{this, "LVL1MuonCutOn", false};

◆ m_localLVL1MuonCutPT

Gaudi::Property<double> xAODBSignalFilter::m_localLVL1MuonCutPT {this, "LVL1MuonCutPT", 0.0}
private

Definition at line 44 of file xAODBSignalFilter.h.

44{this, "LVL1MuonCutPT", 0.0};

◆ m_localLVL2ElectronCutEta

Gaudi::Property<double> xAODBSignalFilter::m_localLVL2ElectronCutEta {this, "LVL2ElectronCutEta", 102.5}
private

Definition at line 49 of file xAODBSignalFilter.h.

49{this, "LVL2ElectronCutEta", 102.5};

◆ m_localLVL2ElectronCutOn

Gaudi::Property<bool> xAODBSignalFilter::m_localLVL2ElectronCutOn {this, "LVL2ElectronCutOn", false}
private

Definition at line 43 of file xAODBSignalFilter.h.

43{this, "LVL2ElectronCutOn", false};

◆ m_localLVL2ElectronCutPT

Gaudi::Property<double> xAODBSignalFilter::m_localLVL2ElectronCutPT {this, "LVL2ElectronCutPT", 0.0}
private

Definition at line 48 of file xAODBSignalFilter.h.

48{this, "LVL2ElectronCutPT", 0.0};

◆ m_localLVL2MuonCutEta

Gaudi::Property<double> xAODBSignalFilter::m_localLVL2MuonCutEta {this, "LVL2MuonCutEta", 102.5}
private

Definition at line 47 of file xAODBSignalFilter.h.

47{this, "LVL2MuonCutEta", 102.5};

◆ m_localLVL2MuonCutOn

Gaudi::Property<bool> xAODBSignalFilter::m_localLVL2MuonCutOn {this, "LVL2MuonCutOn", false}
private

Definition at line 42 of file xAODBSignalFilter.h.

42{this, "LVL2MuonCutOn", false};

◆ m_localLVL2MuonCutPT

Gaudi::Property<double> xAODBSignalFilter::m_localLVL2MuonCutPT {this, "LVL2MuonCutPT", 0.0}
private

Definition at line 46 of file xAODBSignalFilter.h.

46{this, "LVL2MuonCutPT", 0.0};

◆ m_LVL1Counter

double xAODBSignalFilter::m_LVL1Counter {}
private

Definition at line 83 of file xAODBSignalFilter.h.

83{}; // Counting variable for events passing LVL1

◆ m_LVL2Counter

double xAODBSignalFilter::m_LVL2Counter {}
private

Definition at line 84 of file xAODBSignalFilter.h.

84{}; // Counting variable for events passing LVL2

◆ m_mcEventKey

std::string GenBase::m_mcEventKey {}
protectedinherited

StoreGate key for the MC event collection (defaults to GEN_EVENT).

Definition at line 110 of file GenBase.h.

110{};

◆ m_mcevents_const

SG::ReadHandleKey<McEventCollection> GenBase::m_mcevents_const { this, "McEventKey", "GEN_EVENT", "StoreGate key of the MC event collection" }
privateinherited

Const handle to the MC event collection.

Definition at line 119 of file GenBase.h.

119{ this, "McEventKey", "GEN_EVENT", "StoreGate key of the MC event collection" };

◆ m_mkMcEvent

BooleanProperty GenBase::m_mkMcEvent {this, "MakeMcEvent", false, "Create a new MC event collection if it doesn't exist"}
protectedinherited

Flag to determine if a new MC event collection should be made if it doesn't exist.

Definition at line 112 of file GenBase.h.

112{this, "MakeMcEvent", false, "Create a new MC event collection if it doesn't exist"};

◆ m_nFail

int GenFilter::m_nFail
protectedinherited

Definition at line 64 of file GenFilter.h.

◆ m_nNeeded

int GenFilter::m_nNeeded
protectedinherited

Definition at line 65 of file GenFilter.h.

◆ m_nPass

int GenFilter::m_nPass
protectedinherited

Definition at line 63 of file GenFilter.h.

◆ m_rejectedAll

double xAODBSignalFilter::m_rejectedAll {}
private

Definition at line 86 of file xAODBSignalFilter.h.

86{}; // Failed to pass filter (both trigger and signal selection)

◆ m_rejectedTrigger

double xAODBSignalFilter::m_rejectedTrigger {}
private

Definition at line 85 of file xAODBSignalFilter.h.

85{}; // Failed to pass trigger

◆ m_TotalInvMass_switch

Gaudi::Property<bool> xAODBSignalFilter::m_TotalInvMass_switch {this, "TotalInvMass_switch", false}
private

Definition at line 76 of file xAODBSignalFilter.h.

76{this, "TotalInvMass_switch", false};

◆ m_TotalInvMassMax

Gaudi::Property<double> xAODBSignalFilter::m_TotalInvMassMax {this, "TotalInvMassMax", 14000000.0}
private

Definition at line 78 of file xAODBSignalFilter.h.

78{this, "TotalInvMassMax", 14000000.0};

◆ m_TotalInvMassMin

Gaudi::Property<double> xAODBSignalFilter::m_TotalInvMassMin {this, "TotalInvMassMin", 0.0}
private

Definition at line 77 of file xAODBSignalFilter.h.

77{this, "TotalInvMassMin", 0.0};

◆ m_truthPartContKey

SG::ReadHandleKey<xAOD::TruthParticleContainer> xAODBSignalFilter::m_truthPartContKey {this, "TruthParticleContainerKey", "TruthGen"}
private

Definition at line 79 of file xAODBSignalFilter.h.

79{this, "TruthParticleContainerKey", "TruthGen"};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: