22 input_event_col_ = parameters.
get<std::string>(
"input_event_collection");
23 input_event_pass_name_ = parameters.
get<std::string>(
"input_event_pass_name");
24 input_hit_col_ = parameters.
get<std::string>(
"input_hit_collection");
25 input_hit_pass_name_ = parameters.
get<std::string>(
"input_hit_pass_name");
26 peds_ = parameters.
get<std::vector<double> >(
"pedestals");
27 gain_ = parameters.
get<std::vector<double> >(
"gain");
28 start_sample_ = parameters.
get<
int>(
"start_sample");
30 std::cout <<
" [ QualityFlagAnalyzer ] In configure(), got parameters "
31 <<
"\n\t inputEventCollection = " << input_event_col_
32 <<
"\n\t inputEventPassName = " << input_event_pass_name_
33 <<
"\n\t inputHitCollection = " << input_hit_col_
34 <<
"\n\t inputHitPassName = " << input_hit_pass_name_
35 <<
"\n\t startSample = " << start_sample_
36 <<
"\n\t pedestals[0] = " << peds_[0]
37 <<
"\n\t gain[0] = " << gain_[0] <<
"\t." << std::endl;
44 input_event_col_, input_event_pass_name_)};
46 input_hit_col_, input_hit_pass_name_)};
48 int ev_nb =
event.getEventNumber();
53 int n_chan = channels.size();
54 ldmx_log(debug) <<
"in event " << ev_nb <<
"; n_channels_ = " << n_chan;
56 bool exists_intermediate_pe =
false;
57 float hit_pes[N_CHANNELS] = {0.};
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();
66 int bar = chan.getChanID();
68 int flag = chan.getQualityFlag();
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;
80 ldmx_log(debug) <<
"Got event flag " << flag;
83 if (flag == 0 && ev_nb < n_ev_ &&
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_,
97 if (flag == 0 && n_ev_drawn_[n_flags_ - 1] < n_ev_) {
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)));
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_ -
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];
117 if (flag >= flags_[i_f]) {
118 ldmx_log(debug) <<
"Checking flag " << flags_[i_f];
119 if (fill_nb < n_ev_) {
121 for (
int i_t = 0; i_t < q.size();
124 h_out_flag_[i_f][fill_nb][bar]->SetBinContent(i_t + start_sample_,
126 h_out_flag_[i_f][fill_nb][bar]->SetBinError(i_t + start_sample_,
127 fabs(q_err.at(i_t)));
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));
140 if (exists_intermediate_pe && pe_fill_nb_ < n_ev_) {
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();
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_,
153 h_out_pe_[pe_fill_nb_][bar]->SetBinError(i_t + start_sample_,
154 fabs(q_err.at(i_t)));
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]));
165void QualityFlagAnalyzer::onProcessStart() {
167 <<
"\n\n Process starts! My analyzer should do something -- like "
171 int n_time_samp = 40;
173 int n_p_ebins = 5 * p_emax;
178 ldmx_log(debug) <<
"Setting up histograms... ";
180 for (
int i_b = 0; i_b < N_CHANNELS; i_b++) {
181 h_pe_[i_b] =
new TH1F(Form(
"hPE_chan%i", i_b), Form(
";PE, chan%i", i_b),
182 n_p_ebins, 0, p_emax);
185 for (
int i_e = 0; i_e < n_ev_; i_e++) {
186 for (
int i_b = 0; i_b < N_CHANNELS; i_b++) {
188 new TH1F(Form(
"hCharge_chan%i_ev%i", i_b, i_e),
189 Form(
";time sample; Q, channel %i, event %i [fC]", i_b, i_e),
190 n_time_samp, -0.5, n_time_samp - 0.5);
191 h_out_pe_[i_e][i_b] =
192 new TH1F(Form(
"hCharge_PEcut_chan%i_nb%i", i_b, i_e),
193 Form(
";time sample; Q, channel %i, event %i [fC]", i_b, i_e),
194 n_time_samp, -0.5, n_time_samp - 0.5);
195 for (
int i_f = 0; i_f < n_flags_; i_f++) {
196 h_out_flag_[i_f][i_e][i_b] =
new TH1F(
197 Form(
"hCharge_flag%i_chan%i_nb%i", flags_[i_f], i_b, i_e),
198 Form(
";time sample; Q, flag %i, chan %i, ev %i [fC]", i_f, i_b,
208 h_td_cfire_chan_vs_event_ =
new TH2F(
209 "h_td_cfire_chan_vs_event_",
";channel with TDC < 63;event number",
210 N_CHANNELS, -0.5, N_CHANNELS - 0.5, n_ev_, 0, n_ev_);
213 ldmx_log(debug) <<
"done setting up histograms";