134int NoiseCalibEPN::process(
const gsl::span<const o2::zdc::OrbitData>& orbitData,
const gsl::span<const o2::zdc::BCData>& bcdata,
const gsl::span<const o2::zdc::ChannelData>& chdata)
141 std::map<uint32_t, int>
orbit;
143 for (
int ich = 0; ich <
NChannels; ich++) {
144 offset[ich] = std::numeric_limits<float>::infinity();
146 if (mSaveDebugHistos) {
147 int norb = orbitData.size();
151 for (
int iorb = 0; iorb < norb; iorb++) {
152 orbit[orbitData[iorb].ir.orbit] = iorb;
159 auto nbc = bcdata.size();
160 for (
int ibc = 1; ibc < nbc; ibc++) {
161 auto& bcp = bcdata[ibc - 1];
162 auto& bcc = bcdata[ibc];
163 if (bcc.ir.bc != 0 || bcp.ir.bc != 3563 || (bcp.ir.orbit + 1) != bcc.ir.orbit) {
166 auto chEnt = bcc.ref.getFirstEntry();
167 auto nch = bcc.ref.getEntries();
169 if (mSaveDebugHistos) {
170 std::map<uint32_t, int>::iterator it =
orbit.find(bcc.ir.orbit);
171 if (it !=
orbit.end()) {
172 auto& orbitdata = orbitData[it->second];
173 for (
int ich = 0; ich <
NChannels; ich++) {
174 auto myped = float(orbitdata.data[ich]) * mModuleConfig->
baselineFactor;
179 offset[ich] = std::numeric_limits<float>::infinity();
183 for (
int ich = 0; ich <
NChannels; ich++) {
184 offset[ich] = std::numeric_limits<float>::infinity();
189 for (
int ich = 0; ich < nch; ich++) {
190 const auto& chd = chdata[chEnt++];
194 mtp.
w = bcp.moduleTriggers[mRopt->
amod[chd.id]];
195 mtc.
w = bcc.moduleTriggers[mRopt->
amod[chd.id]];
197 || mtp.
f.Auto_0 || mtp.
f.Alice_0 || (bcp.triggers & mChMask[chd.id])
198 || mtc.
f.Auto_0 || mtc.
f.Alice_0 || (bcc.triggers & mChMask[chd.id])
199 || mtc.
f.Auto_1 || mtc.
f.Alice_1
202 printf(
"%u.%04u SKIP %s%s%s%s%s%s%s%s%s\n",
203 mtp.
f.Auto_m ?
"p.Auto_m" :
"",
204 mtp.
f.Auto_0 ?
"p.Auto_0" :
"",
205 mtp.
f.Alice_0 ?
"p.Alice_0" :
"",
206 (bcp.triggers & mChMask[chd.id]) ?
"p.HIT" :
"",
207 mtc.
f.Auto_0 ?
"c.Auto_0" :
"",
208 mtc.
f.Alice_0 ?
"c.Alice_0" :
"",
209 (bcc.triggers & mChMask[chd.id]) ?
"c.HIT" :
"",
210 mtc.
f.Auto_1 ?
"c.Auto_1" :
"",
211 mtc.
f.Alice_1 ?
"c.Alice_1" :
"");
218 auto s = chd.data[is];
219 mH[0][chd.id]->fill(s);
220 if (mSaveDebugHistos) {
221 mHSum[0][chd.id]->fill(s);
230 if (mSaveDebugHistos) {
235 mH[1][chd.id]->fill(ss);
237 if (mSaveDebugHistos) {
238 mHSum[1][chd.id]->fill(ss);
263 LOG(info) <<
"Saving EPN debug histograms on file " << fn;
269 TDirectory* cwd = gDirectory;
271 TFile*
f =
new TFile(fn.data(),
"update");
273 LOG(error) <<
"Cannot update file: " << fn;
276 for (int32_t is = 0; is <
NChannels; is++) {
277 auto p =
mHSum[0][is]->createTH1F(TString::Format(
"hs%d", is).Data());
278 p->SetTitle(TString::Format(
"EPN Baseline samples %s",
ChannelNames[is].
data()));
279 p->Write(
"", TObject::kOverwrite);
281 for (int32_t is = 0; is <
NChannels; is++) {
282 auto p =
mHSum[1][is]->createTH1F(TString::Format(
"hss%d", is).Data());
283 p->SetTitle(TString::Format(
"EPN Bunch sum of samples %s",
ChannelNames[is].
data()));
284 p->Write(
"", TObject::kOverwrite);
286 for (int32_t is = 0; is <
NChannels; is++) {
287 auto p =
mHSum[2][is]->createTH1F(TString::Format(
"hsd%d", is).Data());
288 p->SetTitle(TString::Format(
"EPN Baseline estimation difference %s",
ChannelNames[is].
data()));
289 p->Write(
"", TObject::kOverwrite);