LDMX Software
ElectronCounter.cxx
1#include "Recon/ElectronCounter.h"
2
3namespace recon {
4
5ElectronCounter::ElectronCounter(const std::string& name,
6 framework::Process& process)
7 : framework::Producer(name, process) {}
8
10
12 input_coll_ = parameters.get<std::string>("input_collection");
13 input_pass_name_ = parameters.get<std::string>("input_pass_name");
14 output_coll_ = parameters.get<std::string>("output_collection");
15 n_electrons_sim_ = parameters.get<int>("simulated_electron_number");
17 parameters.get<bool>("use_simulated_electron_number");
18
19 /* // can rehash this for cluster vs track counting
20 if (mode_ == 0) {
21 algo_name_ = "LayerSumTrig";
22 } else if (mode_ == 1) {
23 algo_name_ = "CenterTower";
24 }
25 */
26 ldmx_log(debug) << "ElectronCounter is using parameters: "
27 << " \n\tinput_collection = " << input_coll_
28 << " \n\tinput_pass_name = " << input_pass_name_
29 << " \n\toutput_collection = " << output_coll_
30 << " \n\tsimulated_electron_number = " << n_electrons_sim_
31 << " \n\tuse_simulated_electron_number = "
33}
34
36 int n_electrons = -1;
37
39 if (n_electrons_sim_ < 0) {
40 ldmx_log(fatal)
41 << "Can't use unset number of simulated electrons as electron count! "
42 "Set with 'simulated_electron_number' ";
43 return;
44 }
45 // then we just set it equal to simulated number and we're done
46 n_electrons = n_electrons_sim_;
47 }
48 // Check if the collection of trig scint tracks exist. If not,
49 // don't bother processing the event.
50 else {
51 if (!event.exists(input_coll_, input_pass_name_)) {
52 ldmx_log(fatal) << "Attemping to use non-existing input collection "
53 << input_coll_ << "_" << input_pass_name_
54 << " to count electrons! Exiting.";
55 return;
56 }
57 // TODO, if cluster counting is needed: have two functions, one with tracks,
58 // one with clusters, and just call one or the other.
59
60 // Get the collection of TS tracks
61 const std::vector<ldmx::TrigScintTrack> tracks =
62 event.getCollection<ldmx::TrigScintTrack>(input_coll_,
64
65 n_electrons = tracks.size();
66 ldmx_log(info) << "Found " << tracks.size()
67 << " electrons (tracks) using input collection "
68 << input_coll_ << "_" << input_pass_name_;
69 }
70 // add number of electrons to event header. allow for it to be unset (-1)
71 event.getEventHeader().setIntParameter("nElectrons", n_electrons);
72 event.setElectronCount(n_electrons);
73}
74} // namespace recon
75
#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:42
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:92
Class which represents the process under execution.
Definition Process.h:36
Class encapsulating parameters for configuring a processor.
Definition Parameters.h:29
const T & get(const std::string &name) const
Retrieve the parameter of the given name.
Definition Parameters.h:78
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.