282 std::vector<R3BNeulandHitModulePar> allParameters;
286 TCanvas canvasTracks(
"Tracks",
"Tracks");
287 canvasTracks.SetWindowSize(1920, 1200);
288 canvasTracks.Divide(1, 2);
289 auto pad = canvasTracks.cd(1);
305 pad = canvasTracks.cd(2);
313 canvasTracks.Write(
"Tracking");
316 TDirectory* planeDir =
nullptr;
317 for (Int_t plane = 0; plane <
nPlanes; ++plane)
320 planeDir = histoDir->mkdir(TString::Format(
"Plane_%d", plane + 1));
325 <<
"\r" << std::flush;
332 std::cout <<
"Syncing NeuLAND Bars... \r" << std::flush;
335 for (Int_t plane = 0; plane <
nPlanes; ++plane)
342 const auto calibStatus =
fBars[barID].GetCalibrationStatus();
344 if (calibStatus != CalibrationStatus::completeFail && calibStatus != CalibrationStatus::noData)
345 allParameters.push_back(
fBars[barID].GetParameters());
349 TH1F hTDiff(
"R3BNeulandCal2HitPar::TDiff",
"TDiff;BarID;TDiff / ns", nBars, 0.5, 0.5 + nBars);
350 hTDiff.SetStats(
false);
351 TH1F hTSync(
"R3BNeulandCal2HitPar::TSync",
"TSync;BarID;TSync / ns", nBars, 0.5, 0.5 + nBars);
352 hTSync.SetStats(
false);
353 TH1F hVEff(
"R3BNeulandCal2HitPar::VEff",
"VEff;BarID;VEff / cm/ns", nBars, 0.5, 0.5 + nBars);
354 hVEff.SetStats(
false);
355 TH1F hAtt(
"R3BNeulandCal2HitPar::Att",
356 "Attenuation Length;BarID;Attenuation Length / cm",
360 hAtt.SetStats(
false);
362 "R3BNeulandCal2HitPar::PosError",
"Position Error;BarID;\\Delta Pos / cm", nBars, 0.5, 0.5 + nBars);
363 hPosErr.SetStats(
false);
364 TH1F hEPosErr(
"R3BNeulandCal2HitPar::EnergyPosError",
365 "Energy Position Error;BarID;\\Delta Pos / cm",
369 hEPosErr.SetStats(
false);
370 std::array<TH1F, 2> hGain = {
371 TH1F(
"R3BNeulandCal2HitPar::Gain1",
"Gain;BarID;Gain / ns/MeV", nBars, 0.5, 0.5 + nBars),
373 TH1F(
"R3BNeulandCal2HitPar::Gain2",
"Gain;BarID;Gain / ns/MeV", nBars, 0.5, 0.5 + nBars)
375 hGain[0].SetLineColor(kRed);
376 hGain[1].SetLineColor(kGreen);
377 hGain[0].SetStats(
false);
378 hGain[1].SetStats(
false);
380 std::array<TH1F, 2> hSat = {
381 TH1F(
"R3BNeulandCal2HitPar::Sat1",
"Saturation;BarID;Saturation / 1/MeV", nBars, 0.5, 0.5 + nBars),
382 TH1F(
"R3BNeulandCal2HitPar::Sat2",
"Saturation;BarID;Saturation / 1/MeV", nBars, 0.5, 0.5 + nBars)
384 hSat[0].SetLineColor(kRed);
385 hSat[1].SetLineColor(kGreen);
386 hSat[0].SetStats(
false);
387 hSat[1].SetStats(
false);
389 std::array<TH1F, 2> hThr = {
390 TH1F(
"R3BNeulandCal2HitPar::Thr1",
"Threshold;BarID;Threshold / MeV", nBars, 0.5, 0.5 + nBars),
391 TH1F(
"R3BNeulandCal2HitPar::Thr2",
"Threshold;BarID;Threshold / MeV", nBars, 0.5, 0.5 + nBars)
393 hThr[0].SetLineColor(kRed);
394 hThr[1].SetLineColor(kGreen);
395 hThr[0].SetStats(
false);
396 hThr[1].SetStats(
false);
398 for (
auto& parameter : allParameters)
400 const auto barID = parameter.GetModuleId();
401 const auto attLength =
NaN2Value(parameter.GetLightAttenuationLength());
403 hTDiff.Fill(barID, parameter.GetTDiff());
404 hTSync.Fill(barID,
NaN2Value(parameter.GetTSync()));
405 hVEff.Fill(barID,
NaN2Value(parameter.GetEffectiveSpeed()));
406 hAtt.Fill(barID, attLength);
408 for (Int_t side = 0; side < 2; ++side)
410 hGain[side].Fill(barID,
NaN2Value(parameter.GetEnergyGain(side + 1)));
411 hSat[side].Fill(barID,
NaN2Value(parameter.GetPMTSaturation(side + 1)));
412 hThr[side].Fill(barID,
NaN2Value(parameter.GetPMTThreshold(side + 1)));
420 TCanvas canvasOverview(
"Overview",
"Neuland Hit Calibration");
421 canvasOverview.Divide(3, 2);
423 canvasOverview.cd(1);
425 canvasOverview.cd(2);
427 canvasOverview.cd(3);
429 canvasOverview.cd(4);
430 hGain[0].Draw(
"HIST");
431 hGain[1].Draw(
"HIST SAME");
432 canvasOverview.cd(5);
434 canvasOverview.cd(6);
435 hThr[0].Draw(
"HIST");
436 hThr[1].Draw(
"HIST SAME");
437 canvasOverview.Write(
"Overview");
439 return allParameters;
447 std::vector<CalibrationStatus> statuses;
448 statuses.reserve(16);
450 std::cout << std::endl << std::endl <<
" |";
451 for (
auto plane = 0; plane <
nPlanes; ++plane)
453 std::cout << TString::Format(
"%2d|", plane + 1);
455 std::cout << std::endl <<
" ";
456 for (
auto plane = 0; plane <
nPlanes; ++plane)
460 std::cout << std::endl;
463 std::cout << TString::Format(
"%2d |", bar + 1);
464 for (
auto plane = 0; plane <
nPlanes; ++plane)
468 if (cstatus != CalibrationStatus::success &&
469 std::find(statuses.begin(), statuses.end(), cstatus) == statuses.end())
471 statuses.push_back(cstatus);
476 std::cout << std::endl;
479 for (
auto plane = 0; plane <
nPlanes; ++plane)
483 std::cout << std::endl <<
" |";
484 for (
auto plane = 0; plane <
nPlanes; ++plane)
486 std::cout << TString::Format(
"%2d|", plane + 1);
488 std::cout << std::endl << std::endl;
489 if (statuses.size() > 0)
491 for (
const auto status : statuses)
496 std::cout << std::endl;