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