LDMX Software
ClusterTripletMaker.cxx
2
3#include <algorithm>
4
5namespace tools {
6
7ClusterTripletMaker::ClusterTripletMaker(const std::string& name,
8 framework::Process& process)
9 : Analyzer(name, process) {}
10
11void ClusterTripletMaker::configure(framework::config::Parameters& ps) {
12 pass_name_ = ps.get<std::string>("pass_name");
13 cluster_input_collections_ =
14 ps.get<std::vector<std::string>>("cluster_input_collections");
15 output_file_ = ps.get<std::string>("output_file");
16 verbose_ = ps.get<int>("verbosity");
17
18 if (verbose_) {
19 ldmx_log(info)
20 << "In ClusterTripletMaker: configure done!"
21 << "\nInput collection 1: " << cluster_input_collections_.at(0)
22 << "\nInput collection 2: " << cluster_input_collections_.at(1)
23 << "\nInput collection 3: " << cluster_input_collections_.at(2)
24 << "\nPass name: " << pass_name_ << "\nOutput file: " << output_file_
25 << "\nVerbosity: " << verbose_;
26 }
27 return;
28}
29
30void ClusterTripletMaker::onProcessStart() {
31 output_stream_.open(output_file_);
32
33 if (verbose_) {
34 ldmx_log(info) << "Opened output file " << output_file_;
35 }
36 return;
37}
38
39void ClusterTripletMaker::analyze(const framework::Event& event) {
40 const auto clusters_pad1{event.getCollection<ldmx::TrigScintCluster>(
41 cluster_input_collections_.at(0), pass_name_)};
42 const auto clusters_pad2{event.getCollection<ldmx::TrigScintCluster>(
43 cluster_input_collections_.at(1), pass_name_)};
44 const auto clusters_pad3{event.getCollection<ldmx::TrigScintCluster>(
45 cluster_input_collections_.at(2), pass_name_)};
46
47 const size_t num_clusters = std::min( // in the event of multiple clusters in
48 {clusters_pad1
49 .size(), // one pad in one event, select that with the lowest
50 clusters_pad2
51 .size(), // centroid value for simplicity (not always accurate
52 clusters_pad3.size()}); // unfortunately)
53
54 ldmx_log(debug) << "Event " << event.getEventNumber() << " has "
55 << clusters_pad1.size() << ", " << clusters_pad2.size()
56 << ", " << clusters_pad3.size()
57 << " clusters in pads 1, 2, and 3.";
58
59 for (size_t cluster_index = 0; cluster_index < num_clusters;
60 ++cluster_index) {
61 const int event_number = event.getEventNumber();
62 const float pad1_centroid = clusters_pad1.at(cluster_index).getCentroid();
63 const float pad2_centroid = clusters_pad2.at(cluster_index).getCentroid();
64 const float pad3_centroid = clusters_pad3.at(cluster_index).getCentroid();
65
66 // write to output file
67 output_stream_ << event_number << " " << pad1_centroid << " "
68 << pad2_centroid << " " << pad3_centroid << " " << "\n";
69 }
70
71 if (verbose_) {
72 for (size_t cluster_index = 1; cluster_index < clusters_pad1.size();
73 ++cluster_index) {
74 ldmx_log(info) << "Event " << event.getEventNumber()
75 << ", extra cluster in pad 1: "
76 << clusters_pad1.at(cluster_index).getCentroid();
77 }
78
79 for (size_t cluster_index = 1; cluster_index < clusters_pad2.size();
80 ++cluster_index) {
81 ldmx_log(info) << "Event " << event.getEventNumber()
82 << ", extra cluster in pad 2: "
83 << clusters_pad2.at(cluster_index).getCentroid();
84 }
85
86 for (size_t cluster_index = 1; cluster_index < clusters_pad3.size();
87 ++cluster_index) {
88 ldmx_log(info) << "Event " << event.getEventNumber()
89 << ", extra cluster in pad 3: "
90 << clusters_pad3.at(cluster_index).getCentroid();
91 }
92 }
93 return;
94}
95
96void ClusterTripletMaker::onProcessEnd() {
97 if (output_stream_.is_open()) {
98 output_stream_.close();
99 }
100
101 if (verbose_) {
102 ldmx_log(info) << "Closed output file " << output_file_;
103 }
104 return;
105}
106
107} // namespace tools
108
Writes cluster combinations to text file.
#define DECLARE_ANALYZER(CLASS)
Macro which allows the framework to construct an analyzer given its name during configuration.
Implements an event buffer system for storing event data.
Definition Event.h:42
Class which represents the process under execution.
Definition Process.h:37
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
Stores cluster information from the trigger scintillator pads.
Write trigger scintillator cluster triplets to a text file.