Loading [MathJax]/extensions/tex2jax.js
 |
ATLAS Offline Software
|
#include <TruthParentDecoratorAlg.h>
|
| TruthParentDecoratorAlg (const std::string &name, ISvcLocator *loc) |
|
virtual StatusCode | initialize () override |
|
virtual StatusCode | execute (const EventContext &) const override |
|
virtual StatusCode | finalize () override |
|
virtual StatusCode | sysInitialize () override |
| Override sysInitialize. More...
|
|
virtual bool | isClonable () const override |
| Specify if the algorithm is clonable. More...
|
|
virtual unsigned int | cardinality () const override |
| Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant. More...
|
|
virtual StatusCode | sysExecute (const EventContext &ctx) override |
| Execute an algorithm. More...
|
|
virtual const DataObjIDColl & | extraOutputDeps () const override |
| Return the list of extra output dependencies. More...
|
|
virtual bool | filterPassed (const EventContext &ctx) const |
|
virtual void | setFilterPassed (bool state, const EventContext &ctx) const |
|
ServiceHandle< StoreGateSvc > & | evtStore () |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | evtStore () const |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | detStore () const |
| The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
Definition at line 31 of file TruthParentDecoratorAlg.h.
◆ Barcodex
◆ cascade_counter_property_t
◆ IPMap
◆ JC
◆ JL
◆ StoreGateSvc_t
◆ TPC
◆ TruthParentDecoratorAlg()
TruthParentDecoratorAlg::TruthParentDecoratorAlg |
( |
const std::string & |
name, |
|
|
ISvcLocator * |
loc |
|
) |
| |
◆ addTruthContainer()
void TruthParentDecoratorAlg::addTruthContainer |
( |
Barcodex & |
barcodex, |
|
|
IPMap & |
ipmap, |
|
|
const TPC & |
container |
|
) |
| const |
|
private |
Definition at line 447 of file TruthParentDecoratorAlg.cxx.
454 auto cascadeWants = [
461 if (
int n_parents =
p->nParents(); n_parents == 1) {
462 if (vsl && isSoftLepton(
p))
return false;
463 if (vsc && isSoftCharm(
p))
return false;
465 if (targid.contains(
p->pdgId()))
return true;
466 if (
b &&
p->hasBottom())
return true;
467 if (
c &&
p->hasCharm())
return true;
478 if (cascadeWants(
p)) {
479 auto& child_set = insert(
p);
480 for (
unsigned int child_n = 0; child_n <
p->nChildren(); child_n++) {
491 if(ok_missing.contains(
p->pdgId())) {
495 "null truth child [barcode={},pdg_id={},child={}of{}]",
498 if (warn_missing.contains(
p->pdgId())) {
502 throw std::runtime_error(problem);
505 }
else if (cascadeWants(
c)) {
◆ cardinality()
Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.
Override this to return 0 for reentrant algorithms.
Override this to return 0 for reentrant algorithms.
Definition at line 75 of file AthCommonReentrantAlgorithm.cxx.
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleBase
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 245 of file AthCommonDataStore.h.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleKey
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 221 of file AthCommonDataStore.h.
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This is the generic version, for types that do not derive from SG::VarHandleKey
. It just forwards to the base class version of declareProperty
.
Definition at line 333 of file AthCommonDataStore.h.
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This dispatches to either the generic declareProperty
or the one for VarHandle/Key/KeyArray.
Definition at line 352 of file AthCommonDataStore.h.
◆ declareProperty() [6/6]
◆ detStore()
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ execute()
StatusCode TruthParentDecoratorAlg::execute |
( |
const EventContext & |
cxt | ) |
const |
|
overridevirtual |
Definition at line 271 of file TruthParentDecoratorAlg.cxx.
280 using uc_t =
unsigned char;
291 if (targets->empty())
return StatusCode::SUCCESS;
296 std::vector<const xAOD::TruthParticle*> psort;
298 if (!parentids.contains(
p->pdgId()))
continue;
299 if (!isOriginal(
p))
continue;
303 std::sort(psort.begin(), psort.end(),[](
const auto*
p1,
const auto*
p2) {return p1->m() > p2->m();});
305 constexpr
size_t max_idx = std::numeric_limits<parent_mask_t>::digits;
306 if (psort.size() > max_idx) {
308 "Found too many parent particles to store in parent match mask "
309 "truncating the parent collection [max: " << max_idx <<
", "
310 "n: " << psort.size() <<
"]");
311 psort.resize(max_idx);
315 std::vector<SG::ReadHandle<TPC>> cascades_raw;
317 cascades_raw.emplace_back(
key, cxt);
319 logInputs(msgStream(), targets, phandle, cascades_raw);
327 for (
auto& cascade: cascades_raw) {
330 logIPMap(
msg(), ipmap);
332 ATH_MSG_DEBUG(
"merged cascade contains " << barcodex.size() <<
" particles");
337 std::unordered_map<const J*, std::vector<MatchedParent>> labeled_targets;
338 unsigned int n_parents = 0;
339 for (
const auto*
p: psort) {
340 unsigned int parent_index = n_parents++;
342 for (
auto& [cbar, histbars]: findAllDescendants(
HepMC::barcode(
p), barcodex)) {
343 IPMap::mapped_type& barkids = ipmap.at(cbar);
345 std::vector<std::pair<float, const J*>> drs;
347 const J* drsMinMatch = 0;
348 for (
const auto* j: *targets) {
349 if(j->p4().DeltaR(child->
p4()) < drsMinDR) {
350 drsMinDR=j->
p4().DeltaR(child->
p4());
358 match.deltaR = drsMinDR;
359 match.parent_index = parent_index;
361 for (
auto& histbar: histbars) {
362 match.cascade_pids.insert(selectChild(ipmap.at(histbar))->pdgId());
365 labeled_targets[drsMinMatch].push_back(
match);
375 for (
const J* j: *targets) {
376 if (labeled_targets.contains(j)) {
377 const std::vector<MatchedParent>& matches = labeled_targets.at(j);
379 return p1.deltaR <
p2.deltaR;
382 matches.begin(), matches.end(),
min_dr);
384 pdgid(*j) =
p->pdgId();
386 auto* container =
dynamic_cast<const TPC*
>(
p->container());
387 link(*j) =
JL(*container,
p->index());
389 nMatched(*j) = matches.size();
390 mask(*j) = matchMask(matches);
392 matchPdgId(*j) = child->
pdgId();
393 matchChildCount(*j) = child->
nChildren();
394 auto* matchedContainer =
dynamic_cast<const TPC*
>(child->
container());
395 matchLink(*j) =
JL(*matchedContainer, child->
index());
397 cascadeCount.decorate(*j, matches);
407 matchChildCount(*j) = 0;
408 matchLink(*j) =
JL();
410 cascadeCount.decorateDefault(*j);
420 dec.lock(targets.get());
423 return StatusCode::SUCCESS;
◆ extraDeps_update_handler()
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()
Return the list of extra output dependencies.
This list is extended to include symlinks implied by inheritance relations.
Definition at line 94 of file AthCommonReentrantAlgorithm.cxx.
◆ filterPassed()
◆ finalize()
StatusCode TruthParentDecoratorAlg::finalize |
( |
| ) |
|
|
overridevirtual |
◆ initialize()
StatusCode TruthParentDecoratorAlg::initialize |
( |
| ) |
|
|
overridevirtual |
◆ inputHandles()
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()
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ outputHandles()
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.
◆ renounce()
◆ renounceArray()
◆ setFilterPassed()
◆ sysExecute()
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.
Definition at line 85 of file AthCommonReentrantAlgorithm.cxx.
◆ sysInitialize()
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 InputMakerBase, and HypoBase.
Definition at line 61 of file AthCommonReentrantAlgorithm.cxx.
110 if (
sc.isFailure()) {
118 if ( cs.retrieve().isFailure() ) {
120 return StatusCode::SUCCESS;
122 if (cs->regHandle(
this,*
h).isFailure()) {
123 sc = StatusCode::FAILURE;
124 ATH_MSG_ERROR(
"unable to register WriteCondHandle " <<
h->fullKey()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ updateVHKA()
◆ m_add_b
Gaudi::Property<bool> TruthParentDecoratorAlg::m_add_b |
|
private |
Initial value:{
this, "addBsToCascade", false, "add all bhadrons to cascade"
}
Definition at line 59 of file TruthParentDecoratorAlg.h.
◆ m_add_c
Gaudi::Property<bool> TruthParentDecoratorAlg::m_add_c |
|
private |
Initial value:{
this, "addCsToCascade", false, "add all chadrons to cascade"
}
Definition at line 62 of file TruthParentDecoratorAlg.h.
◆ m_allow_missing_children_pdgids
Gaudi::Property<std::unordered_set<int> > TruthParentDecoratorAlg::m_allow_missing_children_pdgids |
|
private |
Initial value:{
this, "allowMissingChildrenPdgIds", {},
"Allow particles matching these PDG IDs to have missing children"
}
Definition at line 101 of file TruthParentDecoratorAlg.h.
◆ m_cascade_count_decorators
◆ m_cascade_count_writer_keys
◆ m_cascade_pdgids
Gaudi::Property<std::vector<int> > TruthParentDecoratorAlg::m_cascade_pdgids |
|
private |
Initial value:{
this, "cascadePdgIds", {}, "PDGIDs of particles in the decay chain"
}
Definition at line 56 of file TruthParentDecoratorAlg.h.
◆ m_cascades_key
◆ m_counts_matching_cascade
Initial value:{
this, "countChildrenInCascadeWithPdgIds", {},
"Create one counter for each entry, named by key. Counts children "
"with at least one overlapping value in the cascade."
}
Definition at line 93 of file TruthParentDecoratorAlg.h.
◆ m_detStore
◆ m_evtStore
◆ m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Empty if no symlinks were found.
Definition at line 114 of file AthCommonReentrantAlgorithm.h.
◆ m_match_children_key
◆ m_match_delta_r
Gaudi::Property<float> TruthParentDecoratorAlg::m_match_delta_r |
|
private |
Initial value:{
this, "matchDeltaR", -1,
"width of delta R cone for matching (zero or less -> infinite)"
}
Definition at line 73 of file TruthParentDecoratorAlg.h.
◆ m_match_link_key
◆ m_match_pdgid_key
◆ m_missing_children_fraction_warning_threshold
Gaudi::Property<float> TruthParentDecoratorAlg::m_missing_children_fraction_warning_threshold |
|
private |
Initial value:{
this, "missingChildrenFractionWarningThreshold", 0.01,
"Turn the missing children info into a warning above this"
}
Definition at line 105 of file TruthParentDecoratorAlg.h.
◆ m_missing_n_ignored
std::atomic<unsigned long long> TruthParentDecoratorAlg::m_missing_n_ignored |
|
mutableprivate |
◆ m_missing_n_warned
std::atomic<unsigned long long> TruthParentDecoratorAlg::m_missing_n_warned |
|
mutableprivate |
◆ m_parent_pdgids
Gaudi::Property<std::vector<int> > TruthParentDecoratorAlg::m_parent_pdgids |
|
private |
Initial value:{
this, "parentPdgIds", {}, "PDGIDs of allowed parent particles"
}
Definition at line 53 of file TruthParentDecoratorAlg.h.
◆ m_parents_key
◆ m_prefix
Gaudi::Property<std::string> TruthParentDecoratorAlg::m_prefix |
|
private |
Initial value:{
this, "decoratorPrefix", "parentBoson", "prefix for decorations"
}
Definition at line 50 of file TruthParentDecoratorAlg.h.
◆ m_target_container_key
◆ m_target_dr_truth_key
◆ m_target_index_key
◆ m_target_link_key
◆ m_target_match_mask_key
◆ m_target_n_matched_key
◆ m_target_pdgid_key
◆ m_total_children
std::atomic<unsigned long long> TruthParentDecoratorAlg::m_total_children |
|
mutableprivate |
◆ m_varHandleArraysDeclared
◆ m_veto_soft_charm
Gaudi::Property<bool> TruthParentDecoratorAlg::m_veto_soft_charm |
|
private |
Initial value:{
this, "vetoSoftCharmCascade", false,
"veto soft charm decays from cascade"
}
Definition at line 69 of file TruthParentDecoratorAlg.h.
◆ m_veto_soft_lepton
Gaudi::Property<bool> TruthParentDecoratorAlg::m_veto_soft_lepton |
|
private |
Initial value:{
this, "vetoSoftLeptonCascade", false,
"veto soft lepton decays from cascade"
}
Definition at line 65 of file TruthParentDecoratorAlg.h.
◆ m_vhka
◆ m_warn_missing_children_pdgids
Gaudi::Property<std::unordered_set<int> > TruthParentDecoratorAlg::m_warn_missing_children_pdgids |
|
private |
Initial value:{
this, "warnMissingChildrenPdgIds", {},
"Warn if particles matching these PDF IDs have missing children"
}
Definition at line 109 of file TruthParentDecoratorAlg.h.
The documentation for this class was generated from the following files:
Gaudi::Property< std::vector< int > > m_parent_pdgids
SG::ReadHandleKeyArray< TPC > m_cascades_key
const xAOD::TruthParticle * child
Gaudi::Property< bool > m_veto_soft_lepton
void addTruthContainer(Barcodex &, IPMap &, const TPC &) const
SG::WriteDecorHandleKey< JC > m_match_link_key
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
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)
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
SG::ReadHandleKey< JC > m_target_container_key
Gaudi::Property< bool > m_add_b
#define ATH_MSG_VERBOSE(x)
xAOD::TruthParticleContainer TPC
std::vector< CascadeCountDecorator > m_cascade_count_decorators
SG::ReadHandleKey< TPC > m_parents_key
SG::WriteDecorHandleKey< JC > m_target_pdgid_key
virtual void setOwner(IDataHandleHolder *o)=0
An algorithm that can be simultaneously executed in multiple threads.
Gaudi::Property< float > m_match_delta_r
virtual const DataObjIDColl & extraOutputDeps() const override
Return the list of extra output dependencies.
std::map< int, std::set< const xAOD::TruthParticle * > > IPMap
Gaudi::Property< bool > m_add_c
Gaudi::Property< std::vector< int > > m_cascade_pdgids
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
std::atomic< unsigned long long > m_total_children
::StatusCode StatusCode
StatusCode definition for legacy code.
std::map< int, std::set< int > > Barcodex
Class describing a truth particle in the MC record.
Handle class for adding a decoration to an object.
Gaudi::Property< cascade_counter_property_t > m_counts_matching_cascade
virtual StatusCode sysExecute(const EventContext &ctx) override
Execute an algorithm.
SG::WriteDecorHandleKey< JC > m_match_children_key
SG::WriteDecorHandleKey< JC > m_target_n_matched_key
Gaudi::Property< std::unordered_set< int > > m_warn_missing_children_pdgids
std::atomic< unsigned long long > m_missing_n_ignored
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
SG::WriteDecorHandleKeyArray< JC > m_cascade_count_writer_keys
unsigned int parent_index
size_t index() const
Return the index of this element within its container.
Gaudi::Property< std::string > m_prefix
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Gaudi::Property< float > m_missing_children_fraction_warning_threshold
SG::WriteDecorHandleKey< JC > m_target_index_key
size_t nChildren() const
Number of children of this particle.
virtual FourMom_t p4() const =0
The full 4-momentum of the particle.
SG::WriteDecorHandleKey< JC > m_target_dr_truth_key
Gaudi::Property< bool > m_veto_soft_charm
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
#define ATH_MSG_WARNING(x)
SG::WriteDecorHandleKey< JC > m_target_match_mask_key
Gaudi::Property< std::unordered_set< int > > m_allow_missing_children_pdgids
SG::WriteDecorHandleKey< JC > m_target_link_key
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
virtual StatusCode sysInitialize() override
Override sysInitialize.
SG::WriteDecorHandleKey< JC > m_match_pdgid_key
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
const SG::AuxVectorData * container() const
Return the container holding this element.
int pdgId() const
PDG ID code.
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
const xAOD::TruthParticle * parent
std::atomic< unsigned long long > m_missing_n_warned
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
bool match(std::string s1, std::string s2)
match the individual directories of two strings