LDMX Software
NuclearDQM.h
1#ifndef DQM_NUCLEARDQM_H
2#define DQM_NUCLEARDQM_H
3
4#include <Math/Vector3D.h>
5
6#include <algorithm>
7#include <map>
8#include <string>
9#include <vector>
10
11#include "Framework/Configure/Parameters.h"
12#include "Framework/Event.h"
14#include "SimCore/Event/SimParticle.h"
15
16namespace dqm {
17
25 public:
31 enum class EventType {
32 nothing_hard = 0,
33 single_neutron = 1,
34 two_neutrons = 2,
35 three_or_more_neutrons = 3,
36 single_charged_pion = 4,
37 two_charged_pions = 5,
38 single_neutral_pion = 6,
39 single_charged_pion_and_nucleon = 7,
40 single_charged_pion_and_two_nucleons = 8,
41 two_charged_pions_and_nucleon = 9,
42 single_neutral_pion_and_nucleon = 10,
43 single_neutral_pion_and_two_nucleons = 11,
44 single_neutral_pion_charged_pion_and_nucleon = 12,
45 single_proton = 13,
46 two_protons = 14,
47 proton_neutron = 15,
48 klong = 16,
49 charged_kaon = 17,
50 kshort = 18,
51 exotics = 19,
52 multibody = 20,
53 };
54
58 enum class CompactEventType {
59 single_neutron = 0,
60 single_charged_kaon = 1,
61 single_neutral_kaon = 2,
62 two_neutrons = 3,
63 soft = 4,
64 other = 5,
65 };
66
67 NuclearDQM(const std::string& name, framework::Process& process);
68 virtual ~NuclearDQM() = default;
69
74 void configure(framework::config::Parameters& parameters) override;
75
76 protected:
89 std::vector<const ldmx::SimParticle*> findDaughters(
90 const std::map<int, ldmx::SimParticle>& particleMap,
91 const ldmx::SimParticle* parent, int require_process_type = -1) const;
92
109 const std::vector<const ldmx::SimParticle*>& daughters,
110 const std::string& prefix);
111
122 const std::vector<const ldmx::SimParticle*>& daughters,
123 const std::string& prefix);
124
133 const ldmx::SimParticle* initiator,
134 const std::vector<const ldmx::SimParticle*>& daughters,
135 EventType eventType);
136
142 const std::vector<const ldmx::SimParticle*>& daughters, double threshold);
143
149 const ldmx::SimParticle* initiator,
150 const std::vector<const ldmx::SimParticle*>& daughters, double threshold);
151
156 constexpr bool isLightIon(int pdgCode) const {
157 if (pdgCode > 1000000000) {
158 return ((pdgCode / 10) % 1000) <= 4;
159 }
160 return false;
161 }
162
163 std::string sim_particles_coll_name_;
164 std::string sim_particles_passname_;
165 bool count_light_ions_{true};
166};
167
168} // namespace dqm
169
170#endif // DQM_NUCLEARDQM_H
Base classes for all user event processing components to extend.
Class implementing an event buffer system for storing event data.
Base class for nuclear interaction DQM analyzers.
Definition NuclearDQM.h:24
void configure(framework::config::Parameters &parameters) override
Read common configuration parameters: sim_particles_coll_name, sim_particles_passname,...
Definition NuclearDQM.cxx:9
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:156
EventType
Classification of PN/EN events by the hard particles produced above a kinetic-energy threshold.
Definition NuclearDQM.h:31
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:58
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:37
Class encapsulating parameters for configuring a processor.
Definition Parameters.h:29
Class representing a simulated particle.
Definition SimParticle.h:24