LDMX Software
AnalysisUtils.h File Reference

Collection of utility functions useful for analysis. More...

#include <cmath>
#include <map>
#include <unordered_map>
#include <vector>

Go to the source code of this file.

Functions

std::tuple< int, const ldmx::SimParticle * > analysis::getRecoil (const std::map< int, ldmx::SimParticle > &particleMap)
 Find and return the sim particle associated with the recoil electron.
 
bool analysis::doesParticleHavePNDaughters (const ldmx::SimParticle &gamma, const std::map< int, ldmx::SimParticle > &particleMap)
 Helper function to getPNGamma.
 
const ldmx::SimParticleanalysis::getPNGamma (const std::map< int, ldmx::SimParticle > &particleMap, const ldmx::SimParticle *recoil, const float &energyThreshold)
 Get a pointer to the sim particle associated with the photon that underwent a photo-nuclear reaction.
 

Detailed Description

Collection of utility functions useful for analysis.

Author
Omar Moreno, SLAC National Accelerator Laboratory

Definition in file AnalysisUtils.h.

Function Documentation

◆ doesParticleHavePNDaughters()

bool analysis::doesParticleHavePNDaughters ( const ldmx::SimParticle & gamma,
const std::map< int, ldmx::SimParticle > & particleMap )

Helper function to getPNGamma.

Checks if a particle has daughter particles produced by the photonNuclear process type that are present in the particle map.

Definition at line 48 of file AnalysisUtils.cxx.

50 {
51 for (auto daughter_id : gamma.getDaughters()) {
52 if (particleMap.find(daughter_id) != std::end(particleMap)) {
53 const auto daughter{particleMap.at(daughter_id)};
54 const auto process_type{daughter.getProcessType()};
55 if (process_type == ldmx::SimParticle::ProcessType::photonNuclear) {
56 return true;
57 } // Was it PN?
58 } // Was it in the map?
59 }
60
61 return false;
62}
std::vector< int > getDaughters() const
Get a vector containing the track IDs of all daughter particles.

References analysis::doesParticleHavePNDaughters(), and ldmx::SimParticle::getDaughters().

Referenced by analysis::doesParticleHavePNDaughters(), and analysis::getPNGamma().

◆ getPNGamma()

const ldmx::SimParticle * analysis::getPNGamma ( const std::map< int, ldmx::SimParticle > & particleMap,
const ldmx::SimParticle * recoil,
const float & energyThreshold )

Get a pointer to the sim particle associated with the photon that underwent a photo-nuclear reaction.

Returns the first particle in the map that underwent a PN interaction and has an energy above the threshold. If more than one particle satisfied this condition, this will NOT notice.

Parameters
[in]particleMapMap of sim particles
[in]recoilThe recoil electron
[in]energyThresholdThe energy that the photon energy must be greater than.
Returns
[out] Pointer to sim particle labeled as PN Gamma photon (nullptr if not found)

Definition at line 64 of file AnalysisUtils.cxx.

66 {
67 auto recoil_daughters{recoil->getDaughters()};
68 for (auto recoil_daughter_id : recoil_daughters) {
69 // Have we stored the recoil daughter?
70 if (particleMap.find(recoil_daughter_id) != std::end(particleMap)) {
71 auto recoil_daughter{particleMap.at(recoil_daughter_id)};
72 // Is it a gamma?
73 if (recoil_daughter.getPdgID() == 22) {
74 // Does it have enough energy?
75 if (recoil_daughter.getEnergy() >= energyThreshold) {
76 // Are its daughters PN products?
77 if (doesParticleHavePNDaughters(recoil_daughter, particleMap)) {
78 return &particleMap.at(recoil_daughter_id);
79 }
80 }
81 }
82 }
83 }
84 return nullptr;
85}
bool doesParticleHavePNDaughters(const ldmx::SimParticle &gamma, const std::map< int, ldmx::SimParticle > &particleMap)
Helper function to getPNGamma.

References analysis::doesParticleHavePNDaughters(), ldmx::SimParticle::getDaughters(), and analysis::getPNGamma().

Referenced by analysis::getPNGamma().

◆ getRecoil()

std::tuple< int, const ldmx::SimParticle * > analysis::getRecoil ( const std::map< int, ldmx::SimParticle > & particleMap)

Find and return the sim particle associated with the recoil electron.

Parameters
[in]particleMapmap of sim particles
Returns
[out] Pointer to sim particle labeled as recoil electron (nullptr if not found)

Definition at line 28 of file AnalysisUtils.cxx.

29 {
30 // The recoil electron is "produced" in the dark brem geneartion
31 for (const auto &[trackID, particle] : particleMap) {
32 if (particle.getPdgID() == 11 and
33 particle.getProcessType() ==
34 ldmx::SimParticle::ProcessType::eDarkBrem) {
35 return {trackID, &particle};
36 }
37 }
38 // only get here if recoil electron was not "produced" by dark brem
39 // in this case (bkgd), we interpret the primary electron as also the recoil
40 // electron
41 return {1, &(particleMap.at(1))};
42}

References analysis::getRecoil().

Referenced by analysis::getRecoil().