Process the event and make histograms or summaries.
37 {
39 input_event_col_, input_event_pass_name_)};
41 input_hit_col_, input_hit_pass_name_)};
42
43 int ev_nb = event.getEventNumber();
44
45
46
47
48 int n_chan = channels.size();
49 ldmx_log(debug) << "in event " << ev_nb << "; n_channels_ = " << n_chan;
50
51 bool exists_intermediate_pe = false;
52 float hit_pes[N_CHANNELS] = {0.};
53
54
55
56 for (auto chan : channels) {
57 std::vector<float> q = chan.getQ();
58 std::vector<float> q_err = chan.getQError();
59 std::vector<int> tdc = chan.getTDC();
60
61 int bar = chan.getChanID();
62
63 int flag = chan.getQualityFlag();
64
65
66 for (auto hit : hits) {
67 if (hit.getBarID() == bar) {
68 flag = hit.getQualityFlag();
69 hit_pes[bar] = hit.getPE();
70 if (flag == 0 && bar < 12 && 15 < hit.getPE() && hit.getPE() < 40)
71 exists_intermediate_pe = true;
72 }
73 }
74
75 ldmx_log(debug) << "Got event flag " << flag;
76
77
78 if (flag == 0 && ev_nb < n_ev_ &&
79 bar < N_CHANNELS) {
80 for (int i_t = 0; i_t < q.size(); i_t++) {
81 ldmx_log(debug) << "in event " << ev_nb << "; channel " << bar
82 << ", got charge[" << i_t << "] = " << q.at(i_t);
83 h_out_[ev_nb][bar]->SetBinContent(i_t + start_sample_, q.at(i_t));
84 h_out_[ev_nb][bar]->SetBinError(i_t + start_sample_,
85 fabs(q_err.at(i_t)));
86 }
87 }
88
89
90
91
92 if (flag == 0 && n_ev_drawn_[n_flags_ - 1] < n_ev_) {
93
94 int fill_nb = n_ev_drawn_[n_flags_ - 1];
95 for (int i_t = 0; i_t < q.size(); i_t++) {
96 h_out_flag_[n_flags_ - 1][fill_nb][bar]->SetBinContent(
97 i_t + start_sample_, q.at(i_t));
98 h_out_flag_[n_flags_ - 1][fill_nb][bar]->SetBinError(
99 i_t + start_sample_, fabs(q_err.at(i_t)));
100 }
101
102 h_out_flag_[n_flags_ - 1][fill_nb][bar]->GetYaxis()->SetTitle(
103 Form("Q, flag 0, chan %i, ev %i [fC]", bar, ev_nb));
104 n_ev_drawn_[n_flags_ -
105 1]++;
106 }
107 else {
108 for (int i_f = 0; i_f < n_flags_ - 1; i_f++) {
109 int fill_nb = n_ev_drawn_[i_f];
110 ldmx_log(debug) << "Checking flag " << flags_[i_f];
111
112 if (flag >= flags_[i_f]) {
113 ldmx_log(debug) << "Checking flag " << flags_[i_f];
114 if (fill_nb < n_ev_) {
115
116 for (int i_t = 0; i_t < q.size();
117 i_t++) {
118
119 h_out_flag_[i_f][fill_nb][bar]->SetBinContent(i_t + start_sample_,
120 q.at(i_t));
121 h_out_flag_[i_f][fill_nb][bar]->SetBinError(i_t + start_sample_,
122 fabs(q_err.at(i_t)));
123 }
124 h_out_flag_[i_f][fill_nb][bar]->GetYaxis()->SetTitle(Form(
125 "Q, flag %i, chan %i, ev %i [fC]", flags_[i_f], bar, ev_nb));
126 n_ev_drawn_[i_f]++;
127 }
128 flag -= flags_[i_f];
129 }
130 }
131 }
132 }
133
134
135 if (exists_intermediate_pe && pe_fill_nb_ < n_ev_) {
136
137
138 ldmx_log(debug) << "Got at least one intermediate PE channel";
139 for (auto chan : channels) {
140 std::vector<float> q = chan.getQ();
141 std::vector<float> q_err = chan.getQError();
142 std::vector<int> tdc = chan.getTDC();
143
144 int bar = chan.getChanID();
145 for (int i_t = 0; i_t < q.size(); i_t++) {
146 h_out_pe_[pe_fill_nb_][bar]->SetBinContent(i_t + start_sample_,
147 q.at(i_t));
148 h_out_pe_[pe_fill_nb_][bar]->SetBinError(i_t + start_sample_,
149 fabs(q_err.at(i_t)));
150 }
151 h_out_pe_[pe_fill_nb_][bar]->GetYaxis()->SetTitle(
152 Form("Q, chan %i, ev %i, PE %.2f", bar, ev_nb, hit_pes[bar]));
153 }
154 pe_fill_nb_++;
155 }
156
157 return;
158}
This class represents the linearised QIE output from the trigger scintillator, in charge (fC).
This class represents the linearised QIE output from the trigger scintillator, in charge (fC).