Process the event and make histograms or summaries.
38 {
40 inputEventCol_, inputEventPassName_)};
42 inputHitCol_, inputHitPassName_)};
43
44 int evNb = event.getEventNumber();
45
46
47
48
49 int nChan = channels.size();
50 ldmx_log(debug) << "in event " << evNb << "; nChannels = " << nChan;
51
52 bool existsIntermediatePE = false;
53 float hitPEs[nChannels] = {0.};
54
55
56
57 for (auto chan : channels) {
58 std::vector<float> q = chan.getQ();
59 std::vector<float> qErr = chan.getQError();
60 std::vector<int> tdc = chan.getTDC();
61
62 int bar = chan.getChanID();
63
64 int flag = chan.getQualityFlag();
65
66
67 for (auto hit : hits) {
68 if (hit.getBarID() == bar) {
69 flag = hit.getQualityFlag();
70 hitPEs[bar] = hit.getPE();
71 if (flag == 0 && bar < 12 && 15 < hit.getPE() && hit.getPE() < 40)
72 existsIntermediatePE = true;
73 }
74 }
75
76 ldmx_log(debug) << "Got event flag " << flag;
77
78
79 if (flag == 0 && evNb < nEv &&
80 bar < nChannels) {
81 for (int iT = 0; iT < q.size(); iT++) {
82 ldmx_log(debug) << "in event " << evNb << "; channel " << bar
83 << ", got charge[" << iT << "] = " << q.at(iT);
84 hOut[evNb][bar]->SetBinContent(iT + startSample_, q.at(iT));
85 hOut[evNb][bar]->SetBinError(iT + startSample_, fabs(qErr.at(iT)));
86 }
87 }
88
89
90
91
92 if (flag == 0 && nEvDrawn[nFlags - 1] <
93 nEv) {
94 int fillNb = nEvDrawn[nFlags - 1];
95 for (int iT = 0; iT < q.size(); iT++) {
96 hOutFlag[nFlags - 1][fillNb][bar]->SetBinContent(iT + startSample_,
97 q.at(iT));
98 hOutFlag[nFlags - 1][fillNb][bar]->SetBinError(iT + startSample_,
99 fabs(qErr.at(iT)));
100 }
101
102 hOutFlag[nFlags - 1][fillNb][bar]->GetYaxis()->SetTitle(
103 Form("Q, flag 0, chan %i, ev %i [fC]", bar, evNb));
104 nEvDrawn[nFlags - 1]++;
105 }
106 else {
107 for (int iF = 0; iF < nFlags - 1; iF++) {
108 int fillNb = nEvDrawn[iF];
109 ldmx_log(debug) << "Checking flag " << flags[iF];
110
111 if (flag >= flags[iF]) {
112 ldmx_log(debug) << "Checking flag " << flags[iF];
113 if (fillNb < nEv) {
114
115 for (int iT = 0; iT < q.size(); iT++) {
116
117 hOutFlag[iF][fillNb][bar]->SetBinContent(iT + startSample_,
118 q.at(iT));
119 hOutFlag[iF][fillNb][bar]->SetBinError(iT + startSample_,
120 fabs(qErr.at(iT)));
121 }
122 hOutFlag[iF][fillNb][bar]->GetYaxis()->SetTitle(
123 Form("Q, flag %i, chan %i, ev %i [fC]", flags[iF], bar, evNb));
124 nEvDrawn[iF]++;
125 }
126 flag -= flags[iF];
127 }
128 }
129 }
130 }
131
132
133 if (existsIntermediatePE &&
134 peFillNb < nEv) {
135
136 ldmx_log(debug) << "Got at least one intermediate PE channel";
137 for (auto chan : channels) {
138 std::vector<float> q = chan.getQ();
139 std::vector<float> qErr = chan.getQError();
140 std::vector<int> tdc = chan.getTDC();
141
142 int bar = chan.getChanID();
143 for (int iT = 0; iT < q.size(); iT++) {
144 hOutPE[peFillNb][bar]->SetBinContent(iT + startSample_, q.at(iT));
145 hOutPE[peFillNb][bar]->SetBinError(iT + startSample_,
146 fabs(qErr.at(iT)));
147 }
148 hOutPE[peFillNb][bar]->GetYaxis()->SetTitle(
149 Form("Q, chan %i, ev %i, PE %.2f", bar, evNb, hitPEs[bar]));
150 }
151 peFillNb++;
152 }
153
154 return;
155}
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).