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