17 input_event_col_ = parameters.
get<std::string>(
"inputEventCollection");
18 input_event_pass_name_ = parameters.
get<std::string>(
"inputEventPassName");
19 input_hit_col_ = parameters.
get<std::string>(
"inputHitCollection");
20 input_hit_pass_name_ = parameters.
get<std::string>(
"inputHitPassName");
21 peds_ = parameters.
get<std::vector<double> >(
"pedestals");
22 gain_ = parameters.
get<std::vector<double> >(
"gain");
23 start_sample_ = parameters.
get<
int>(
"startSample");
25 std::cout <<
" [ QualityFlagAnalyzer ] In configure(), got parameters "
26 <<
"\n\t inputEventCollection = " << input_event_col_
27 <<
"\n\t inputEventPassName = " << input_event_pass_name_
28 <<
"\n\t inputHitCollection = " << input_hit_col_
29 <<
"\n\t inputHitPassName = " << input_hit_pass_name_
30 <<
"\n\t startSample = " << start_sample_
31 <<
"\n\t pedestals[0] = " << peds_[0]
32 <<
"\n\t gain[0] = " << gain_[0] <<
"\t." << std::endl;
39 input_event_col_, input_event_pass_name_)};
41 input_hit_col_, input_hit_pass_name_)};
43 int ev_nb =
event.getEventNumber();
48 int n_chan = channels.size();
49 ldmx_log(debug) <<
"in event " << ev_nb <<
"; n_channels_ = " << n_chan;
51 bool exists_intermediate_pe =
false;
52 float hit_pes[N_CHANNELS] = {0.};
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();
61 int bar = chan.getChanID();
63 int flag = chan.getQualityFlag();
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;
75 ldmx_log(debug) <<
"Got event flag " << flag;
78 if (flag == 0 && ev_nb < n_ev_ &&
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_,
92 if (flag == 0 && n_ev_drawn_[n_flags_ - 1] < n_ev_) {
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)));
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_ -
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];
112 if (flag >= flags_[i_f]) {
113 ldmx_log(debug) <<
"Checking flag " << flags_[i_f];
114 if (fill_nb < n_ev_) {
116 for (
int i_t = 0; i_t < q.size();
119 h_out_flag_[i_f][fill_nb][bar]->SetBinContent(i_t + start_sample_,
121 h_out_flag_[i_f][fill_nb][bar]->SetBinError(i_t + start_sample_,
122 fabs(q_err.at(i_t)));
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));
135 if (exists_intermediate_pe && pe_fill_nb_ < n_ev_) {
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();
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_,
148 h_out_pe_[pe_fill_nb_][bar]->SetBinError(i_t + start_sample_,
149 fabs(q_err.at(i_t)));
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]));
160void QualityFlagAnalyzer::onProcessStart() {
162 <<
"\n\n Process starts! My analyzer should do something -- like "
166 int n_time_samp = 40;
168 int n_p_ebins = 5 * p_emax;
173 ldmx_log(debug) <<
"Setting up histograms... ";
175 for (
int i_b = 0; i_b < N_CHANNELS; i_b++) {
176 h_pe_[i_b] =
new TH1F(Form(
"hPE_chan%i", i_b), Form(
";PE, chan%i", i_b),
177 n_p_ebins, 0, p_emax);
180 for (
int i_e = 0; i_e < n_ev_; i_e++) {
181 for (
int i_b = 0; i_b < N_CHANNELS; i_b++) {
183 new TH1F(Form(
"hCharge_chan%i_ev%i", i_b, i_e),
184 Form(
";time sample; Q, channel %i, event %i [fC]", i_b, i_e),
185 n_time_samp, -0.5, n_time_samp - 0.5);
186 h_out_pe_[i_e][i_b] =
187 new TH1F(Form(
"hCharge_PEcut_chan%i_nb%i", i_b, i_e),
188 Form(
";time sample; Q, channel %i, event %i [fC]", i_b, i_e),
189 n_time_samp, -0.5, n_time_samp - 0.5);
190 for (
int i_f = 0; i_f < n_flags_; i_f++) {
191 h_out_flag_[i_f][i_e][i_b] =
new TH1F(
192 Form(
"hCharge_flag%i_chan%i_nb%i", flags_[i_f], i_b, i_e),
193 Form(
";time sample; Q, flag %i, chan %i, ev %i [fC]", i_f, i_b,
203 h_td_cfire_chan_vs_event_ =
new TH2F(
204 "h_td_cfire_chan_vs_event_",
";channel with TDC < 63;event number",
205 N_CHANNELS, -0.5, N_CHANNELS - 0.5, n_ev_, 0, n_ev_);
208 ldmx_log(debug) <<
"done setting up histograms";