47 fBars.reserve(totalBars);
48 for (
auto plane = 0; plane <
nPlanes; ++plane)
54 for (
auto i = 0; i < nParameter; i++)
57 const auto barID = modulePar->GetModuleId() - 1;
58 fBars[barID].Update(modulePar);
61 fBarDistribution = TH1F(
62 "HitCalibrationEngine::BarDistribution",
"Bar Distribution; Bar ID", totalBars, 0.5, totalBars + 0.5);
63 fBarDistribution.SetStats(kFALSE);
64 fBarDistribution.SetDirectory(
nullptr);
66 fStoppedDistribution = TH1F(
"HitCalibrationEngine::StoppedDistribution",
67 "Stopped Bar Distribution; Bar ID",
71 fStoppedDistribution.SetStats(kFALSE);
72 fStoppedDistribution.SetDirectory(
nullptr);
74 fInteractionsDistribution = TH1F(
"HitCalibrationEngine::InteractionsDistribution",
75 "Interactions Distribution; Number of Interactions",
79 fInteractionsDistribution.SetStats(kFALSE);
80 fInteractionsDistribution.SetDirectory(
nullptr);
82 fStoppedInteractionsDistribution = TH1F(
"HitCalibrationEngine::StoppedInteractionsDistribution",
83 "Stopped Interactions Distribution; Number of Interactions",
87 fStoppedInteractionsDistribution.SetStats(kFALSE);
88 fStoppedInteractionsDistribution.SetDirectory(
nullptr);
89 fStoppedInteractionsDistribution.SetLineColor(kRed);
91 fTrackLengthDistribution = TH1F(
"HitCalibrationEngine::TrackLengthDistribution",
92 "Track Length Distribution; Track Length / cm",
96 fTrackLengthDistribution.SetStats(kFALSE);
97 fTrackLengthDistribution.SetDirectory(
nullptr);
99 fTotalTrackLengthDistribution = TH1F(
"HitCalibrationEngine::TotalTrackLengthDistribution",
100 "Total Track Length Distribution; Track Length / cm",
104 fTotalTrackLengthDistribution.SetStats(kFALSE);
105 fTotalTrackLengthDistribution.SetDirectory(
nullptr);
107 fTotalStoppedTrackLengthDistribution = TH1F(
"HitCalibrationEngine::fTotalStoppedTrackLengthDistribution",
108 "Total Stopped Track Length Distribution; Track Length / cm",
112 fTotalStoppedTrackLengthDistribution.SetStats(kFALSE);
113 fTotalStoppedTrackLengthDistribution.SetDirectory(
nullptr);
114 fTotalStoppedTrackLengthDistribution.SetLineColor(kRed);
116 fCorrelationMatrix = TH2F(
"HitCalibrationEngine::CorrelationMatrix",
117 "Correlation Matrix;Bar ID;Bar ID",
124 fCorrelationMatrix.SetStats(kFALSE);
125 fCorrelationMatrix.SetDirectory(
nullptr);
127 fTrackEntryPointDistribution = TH3F(
"HitCalibrationEngine::TrackEntryPointDistribution",
128 "Entry Point Distribution; Z / cm; X / cm; Y / cm",
138 fTrackEntryPointDistribution.SetStats(kFALSE);
139 fTrackEntryPointDistribution.SetDirectory(
nullptr);
141 fTrackDirectionDistribution = TH3F(
"HitCalibrationEngine::TrackDirectionDistribution",
142 "Track Direction Distribution; Z / cm/ns; X / cm/ns; Y / cm/ns",
152 fTrackDirectionDistribution.SetStats(kFALSE);
153 fTrackDirectionDistribution.SetDirectory(
nullptr);
175 const auto nPlanes = fHitMask.size();
177 fInteractionsDistribution.Fill(track.
Interactions.size());
180 fStoppedDistribution.Fill(track.
Interactions.back().BarID + 1);
181 fStoppedInteractionsDistribution.Fill(track.
Interactions.size());
185 for (
auto plane = 0; plane <
nPlanes; ++plane)
187 if (!fHitMask[plane])
192 if (!(fHitMask[plane] & (1UL << bar)))
195 for (
auto otherPlane = 0; otherPlane <
nPlanes; ++otherPlane)
197 if (!fHitMask[otherPlane])
200 for (
auto otherBar = 0; otherBar <
BarsPerPlane; ++otherBar)
202 if ((fHitMask[otherPlane] & (1UL << otherBar)) && (plane != otherPlane || bar != otherBar))
212 for (
auto i = 0; i < nInteractions; ++i)
215 const auto barID = interaction.BarID;
219 fBarDistribution.Fill(barID + 1);
220 fTrackLengthDistribution.Fill(interaction.TrackLength);
222 if (fBars[barID].
Add(interaction.EntryTime,
223 interaction.EntryPosition,
224 interaction.ExitPosition,
228 fTSyncer.AddBarData(barID, fBars[barID].GetTime());
231 fBars[barID].Reset();
232 fHitMask[plane] &= ~(1UL << bar);
237 for (
auto plane = 0; plane <
nPlanes; ++plane)
239 if (fHitMask[plane] == 0UL)
244 if (fHitMask[plane] & (1UL << bar))
247 fHitMask[plane] = 0UL;
269 const auto nPlanes = fHitMask.size();
271 std::vector<R3BNeulandHitModulePar> allParameters;
275 TCanvas canvasTracks(
"Tracks",
"Tracks");
276 canvasTracks.SetWindowSize(1920, 1200);
277 canvasTracks.Divide(1, 2);
278 auto pad = canvasTracks.cd(1);
282 fBarDistribution.Draw();
284 fStoppedDistribution.Draw();
286 fInteractionsDistribution.Draw();
287 fStoppedInteractionsDistribution.Draw(
"SAME");
289 fTotalTrackLengthDistribution.Draw();
290 fTotalStoppedTrackLengthDistribution.Draw(
"SAME");
292 fTrackLengthDistribution.Draw();
294 pad = canvasTracks.cd(2);
297 fCorrelationMatrix.Draw(
"COLZ");
299 fTrackEntryPointDistribution.Draw();
301 fTrackDirectionDistribution.Draw();
302 canvasTracks.Write(
"Tracking");
305 TDirectory* planeDir =
nullptr;
306 for (Int_t plane = 0; plane <
nPlanes; ++plane)
309 planeDir = histoDir->mkdir(TString::Format(
"Plane_%d", plane + 1));
314 <<
"\r" << std::flush;
321 std::cout <<
"Syncing NeuLAND Bars... \r" << std::flush;
324 for (Int_t plane = 0; plane <
nPlanes; ++plane)
329 fBars[barID].SetGlobalTSync(
tsync[barID].Value,
tsync[barID].Error);
331 const auto calibStatus = fBars[barID].GetCalibrationStatus();
333 if (calibStatus != CalibrationStatus::completeFail && calibStatus != CalibrationStatus::noData)
334 allParameters.push_back(fBars[barID].GetParameters());
338 TH1F hTDiff(
"R3BNeulandCal2HitPar::TDiff",
"TDiff;BarID;TDiff / ns", nBars, 0.5, 0.5 + nBars);
339 hTDiff.SetStats(
false);
340 TH1F hTSync(
"R3BNeulandCal2HitPar::TSync",
"TSync;BarID;TSync / ns", nBars, 0.5, 0.5 + nBars);
341 hTSync.SetStats(
false);
342 TH1F hVEff(
"R3BNeulandCal2HitPar::VEff",
"VEff;BarID;VEff / cm/ns", nBars, 0.5, 0.5 + nBars);
343 hVEff.SetStats(
false);
344 TH1F hAtt(
"R3BNeulandCal2HitPar::Att",
345 "Attenuation Length;BarID;Attenuation Length / cm",
349 hAtt.SetStats(
false);
351 "R3BNeulandCal2HitPar::PosError",
"Position Error;BarID;\\Delta Pos / cm", nBars, 0.5, 0.5 + nBars);
352 hPosErr.SetStats(
false);
353 TH1F hEPosErr(
"R3BNeulandCal2HitPar::EnergyPosError",
354 "Energy Position Error;BarID;\\Delta Pos / cm",
358 hEPosErr.SetStats(
false);
359 std::array<TH1F, 2> hGain = {
360 TH1F(
"R3BNeulandCal2HitPar::Gain1",
"Gain;BarID;Gain / ns/MeV", nBars, 0.5, 0.5 + nBars),
362 TH1F(
"R3BNeulandCal2HitPar::Gain2",
"Gain;BarID;Gain / ns/MeV", nBars, 0.5, 0.5 + nBars)
364 hGain[0].SetLineColor(kRed);
365 hGain[1].SetLineColor(kGreen);
366 hGain[0].SetStats(
false);
367 hGain[1].SetStats(
false);
369 std::array<TH1F, 2> hSat = {
370 TH1F(
"R3BNeulandCal2HitPar::Sat1",
"Saturation;BarID;Saturation / 1/MeV", nBars, 0.5, 0.5 + nBars),
371 TH1F(
"R3BNeulandCal2HitPar::Sat2",
"Saturation;BarID;Saturation / 1/MeV", nBars, 0.5, 0.5 + nBars)
373 hSat[0].SetLineColor(kRed);
374 hSat[1].SetLineColor(kGreen);
375 hSat[0].SetStats(
false);
376 hSat[1].SetStats(
false);
378 std::array<TH1F, 2> hThr = {
379 TH1F(
"R3BNeulandCal2HitPar::Thr1",
"Threshold;BarID;Threshold / MeV", nBars, 0.5, 0.5 + nBars),
380 TH1F(
"R3BNeulandCal2HitPar::Thr2",
"Threshold;BarID;Threshold / MeV", nBars, 0.5, 0.5 + nBars)
382 hThr[0].SetLineColor(kRed);
383 hThr[1].SetLineColor(kGreen);
384 hThr[0].SetStats(
false);
385 hThr[1].SetStats(
false);
387 for (
auto& parameter : allParameters)
389 const auto barID = parameter.GetModuleId();
390 const auto attLength =
NaN2Value(parameter.GetLightAttenuationLength());
392 hTDiff.Fill(barID, parameter.GetTDiff());
393 hTSync.Fill(barID,
NaN2Value(parameter.GetTSync()));
394 hVEff.Fill(barID,
NaN2Value(parameter.GetEffectiveSpeed()));
395 hAtt.Fill(barID, attLength);
397 for (Int_t side = 0; side < 2; ++side)
399 hGain[side].Fill(barID,
NaN2Value(parameter.GetEnergyGain(side + 1)));
400 hSat[side].Fill(barID,
NaN2Value(parameter.GetPMTSaturation(side + 1)));
401 hThr[side].Fill(barID,
NaN2Value(parameter.GetPMTThreshold(side + 1)));
409 TCanvas canvasOverview(
"Overview",
"Neuland Hit Calibration");
410 canvasOverview.Divide(3, 2);
412 canvasOverview.cd(1);
414 canvasOverview.cd(2);
416 canvasOverview.cd(3);
418 canvasOverview.cd(4);
419 hGain[0].Draw(
"HIST");
420 hGain[1].Draw(
"HIST SAME");
421 canvasOverview.cd(5);
423 canvasOverview.cd(6);
424 hThr[0].Draw(
"HIST");
425 hThr[1].Draw(
"HIST SAME");
426 canvasOverview.Write(
"Overview");
428 return allParameters;