LDMX Software
Functions
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 daughterID : gamma.getDaughters()) {
52 if (particleMap.find(daughterID) != std::end(particleMap)) {
53 const auto daughter{particleMap.at(daughterID)};
54 const auto processType{daughter.getProcessType()};
55 if (processType == ldmx::SimParticle::ProcessType::photonNuclear) {
56 return true;
57 } // Was it PN?
58 } // Was it in the map?
59 }
60
61 return false;
62}

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 recoilDaughters{recoil->getDaughters()};
68 for (auto recoilDaughterID : recoilDaughters) {
69 // Have we stored the recoil daughter?
70 if (particleMap.find(recoilDaughterID) != std::end(particleMap)) {
71 auto recoilDaughter{particleMap.at(recoilDaughterID)};
72 // Is it a gamma?
73 if (recoilDaughter.getPdgID() == 22) {
74 // Does it have enough energy?
75 if (recoilDaughter.getEnergy() >= energyThreshold) {
76 // Are its daughters PN products?
77 if (doesParticleHavePNDaughters(recoilDaughter, particleMap)) {
78 return &particleMap.at(recoilDaughterID);
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.
std::vector< int > getDaughters() const
Get a vector containing the track IDs of all daughter particles.

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().