LDMX Software
ElectronCounter.cxx
1#include "Recon/ElectronCounter.h"
2
3#include "TrigScint/Event/TrigScintTrack.h"
4
5namespace recon {
6
7ElectronCounter::ElectronCounter(const std::string& name,
8 framework::Process& process)
9 : framework::Producer(name, process) {}
10
12
14 input_coll_ = parameters.get<std::string>("input_collection");
15 input_pass_name_ = parameters.get<std::string>("input_pass_name");
16 output_coll_ = parameters.get<std::string>("output_collection");
17 n_electrons_sim_ = parameters.get<int>("simulated_electron_number");
19 parameters.get<bool>("use_simulated_electron_number");
20
21 /* // can rehash this for cluster vs track counting
22 if (mode_ == 0) {
23 algo_name_ = "LayerSumTrig";
24 } else if (mode_ == 1) {
25 algo_name_ = "CenterTower";
26 }
27 */
28 ldmx_log(debug) << "ElectronCounter is using parameters: "
29 << " \n\tinput_collection = " << input_coll_
30 << " \n\tinput_pass_name = " << input_pass_name_
31 << " \n\toutput_collection = " << output_coll_
32 << " \n\tsimulated_electron_number = " << n_electrons_sim_
33 << " \n\tuse_simulated_electron_number = "
35}
36
38 int n_electrons = -1;
39
41 if (n_electrons_sim_ < 0) {
42 ldmx_log(fatal)
43 << "Can't use unset number of simulated electrons as electron count! "
44 "Set with 'simulated_electron_number' ";
45 return;
46 }
47 // then we just set it equal to simulated number and we're done
48 n_electrons = n_electrons_sim_;
49 }
50 // Check if the collection of trig scint tracks exist. If not,
51 // don't bother processing the event.
52 else {
53 if (!event.exists(input_coll_, input_pass_name_)) {
54 ldmx_log(fatal) << "Attemping to use non-existing input collection "
55 << input_coll_ << "_" << input_pass_name_
56 << " to count electrons! Exiting.";
57 return;
58 }
59 // TODO, if cluster counting is needed: have two functions, one with tracks,
60 // one with clusters, and just call one or the other.
61
62 // Get the collection of TS tracks
63 const std::vector<ldmx::TrigScintTrack> tracks =
64 event.getCollection<ldmx::TrigScintTrack>(input_coll_,
66
67 n_electrons = tracks.size();
68 ldmx_log(info) << "Found " << tracks.size()
69 << " electrons (tracks) using input collection "
70 << input_coll_ << "_" << input_pass_name_;
71 }
72 // add number of electrons to event header. allow for it to be unset (-1)
73 event.getEventHeader().setIntParameter("nElectrons", n_electrons);
74 event.setElectronCount(n_electrons);
75}
76} // namespace recon
77
#define DECLARE_PRODUCER(CLASS)
Macro which allows the framework to construct a producer given its name during configuration.
Implements an event buffer system for storing event data.
Definition Event.h:40
bool exists(const std::string &name, const std::string &passName, bool unique=true) const
Check for the existence of an object or collection with the given name and pass name in the event.
Definition Event.cxx:107
Class which represents the process under execution.
Definition Process.h:34
Class encapsulating parameters for configuring a processor.
Definition Parameters.h:26
const T & get(const std::string &name) const
Retrieve the parameter of the given name.
Definition Parameters.h:75
Represents a track of trigger scintillator clusters.
Electron counting processor.
void configure(framework::config::Parameters &parameters) override
Configure the processor using the given user specified parameters.
void produce(framework::Event &event) override
Process the event and put new data products into it.
std::string output_coll_
The name of the output collection used to save some electron counting variables.
int use_sim_electron_count_
Use the number of electrons actually simulated in the event as the electron count.
std::string input_coll_
The name of the input collection used for counting electrons.
ElectronCounter(const std::string &name, framework::Process &process)
Constructor.
int n_electrons_sim_
The number of electrons actually simulated in the event.
std::string input_pass_name_
The pass name of the input collection used for counting electrons.
All classes in the ldmx-sw project use this namespace.