LDMX Software
NuclearDQM.h
1#ifndef DQM_NUCLEARDQM_H
2#define DQM_NUCLEARDQM_H
3
4#include <map>
5#include <string>
6#include <vector>
7
8#include "Framework/Configure/Parameters.h"
10#include "SimCore/Event/SimParticle.h"
11
12namespace dqm {
13
21 public:
27 enum class EventType {
28 nothing_hard = 0,
29 single_neutron = 1,
30 two_neutrons = 2,
31 three_or_more_neutrons = 3,
32 single_charged_pion = 4,
33 two_charged_pions = 5,
34 single_neutral_pion = 6,
35 single_charged_pion_and_nucleon = 7,
36 single_charged_pion_and_two_nucleons = 8,
37 two_charged_pions_and_nucleon = 9,
38 single_neutral_pion_and_nucleon = 10,
39 single_neutral_pion_and_two_nucleons = 11,
40 single_neutral_pion_charged_pion_and_nucleon = 12,
41 single_proton = 13,
42 two_protons = 14,
43 proton_neutron = 15,
44 klong = 16,
45 charged_kaon = 17,
46 kshort = 18,
47 exotics = 19,
48 multibody = 20,
49 };
50
54 enum class CompactEventType {
55 single_neutron = 0,
56 single_charged_kaon = 1,
57 single_neutral_kaon = 2,
58 two_neutrons = 3,
59 soft = 4,
60 other = 5,
61 };
62
63 NuclearDQM(const std::string& name, framework::Process& process);
64 virtual ~NuclearDQM() = default;
65
70 void configure(framework::config::Parameters& parameters) override;
71
72 protected:
85 std::vector<const ldmx::SimParticle*> findDaughters(
86 const std::map<int, ldmx::SimParticle>& particleMap,
87 const ldmx::SimParticle* parent, int require_process_type = -1) const;
88
105 const std::vector<const ldmx::SimParticle*>& daughters,
106 const std::string& prefix);
107
118 const std::vector<const ldmx::SimParticle*>& daughters,
119 const std::string& prefix);
120
129 const ldmx::SimParticle* initiator,
130 const std::vector<const ldmx::SimParticle*>& daughters,
131 EventType eventType);
132
138 const std::vector<const ldmx::SimParticle*>& daughters, double threshold);
139
145 const ldmx::SimParticle* initiator,
146 const std::vector<const ldmx::SimParticle*>& daughters, double threshold);
147
152 constexpr bool isLightIon(int pdgCode) const {
153 if (pdgCode > 1000000000) {
154 return ((pdgCode / 10) % 1000) <= 4;
155 }
156 return false;
157 }
158
159 std::string sim_particles_coll_name_;
160 std::string sim_particles_passname_;
161 bool count_light_ions_{true};
162};
163
164} // namespace dqm
165
166#endif // DQM_NUCLEARDQM_H
Base classes for all user event processing components to extend.
Base class for nuclear interaction DQM analyzers.
Definition NuclearDQM.h:20
void configure(framework::config::Parameters &parameters) override
Read common configuration parameters: sim_particles_coll_name, sim_particles_passname,...
std::vector< const ldmx::SimParticle * > findDaughters(const std::map< int, ldmx::SimParticle > &particleMap, const ldmx::SimParticle *parent, int require_process_type=-1) const
Return daughters of parent that pass PDG-based filtering:
EventType classifyEvent(const std::vector< const ldmx::SimParticle * > &daughters, double threshold)
Classify the event by the number and type of hard daughters above threshold [MeV] of kinetic energy.
CompactEventType classifyCompactEvent(const ldmx::SimParticle *initiator, const std::vector< const ldmx::SimParticle * > &daughters, double threshold)
Compact classification: looks for a single particle carrying >= 80% of the initiator energy,...
constexpr bool isLightIon(int pdgCode) const
Return true if pdgCode is a light ion (Z <= 4).
Definition NuclearDQM.h:152
EventType
Classification of PN/EN events by the hard particles produced above a kinetic-energy threshold.
Definition NuclearDQM.h:27
void findSubleadingKinematics(const ldmx::SimParticle *initiator, const std::vector< const ldmx::SimParticle * > &daughters, EventType eventType)
Fill subleading-kinematics histograms for 1n, 2n, charged-kaon and neutral-kaon event types.
void findParticleKinematics(const std::vector< const ldmx::SimParticle * > &daughters, const std::string &prefix)
Fill kinematic histograms for the nuclear interaction products.
void findExtendedKinematics(const std::vector< const ldmx::SimParticle * > &daughters, const std::string &prefix)
Fill extended kinematic histograms for EN interactions: hardest_pi_ke/theta (π± only),...
CompactEventType
Compact classification focusing on very-high-energy single particles.
Definition NuclearDQM.h:54
Base class for a module which does not produce a data product.
virtual void process(Event &event) final
Processing an event for an Analyzer is calling analyze.
Class which represents the process under execution.
Definition Process.h:34
Class encapsulating parameters for configuring a processor.
Definition Parameters.h:26
Class representing a simulated particle.
Definition SimParticle.h:25