131 if (fVerbose > 0 && ++fEventNumber % 10000 == 0)
132 std::cout <<
"\rR3BNeulandCal2Hit " << fEventNumber <<
" Events converted." << std::flush;
137 auto calData = fCalData.Retrieve();
139 const auto start = fEventHeader->GetTStart();
140 const bool beam = !std::isnan(start);
142 for (
auto calDataPtrPtr = calData.begin(); calDataPtrPtr != calData.end(); calDataPtrPtr++)
144 const auto barID = (*calDataPtrPtr)->GetBarId() - 1;
147 fmt::format(
"Input calData barID: {}, side: {}, time: {}, fTriggerTime: {}, fQdc: {}",
148 (*calDataPtrPtr)->GetBarId(),
149 (*calDataPtrPtr)->GetSide(),
150 (*calDataPtrPtr)->GetTime(),
151 (*calDataPtrPtr)->GetTriggerTime(),
152 (*calDataPtrPtr)->GetQdc()));
154 if (fParMap.find(barID) == fParMap.end())
157 if (fHitMap.find(barID) == fHitMap.end())
160 fHitMap[barID] = *calDataPtrPtr;
164 const auto& parameter = fParMap[barID];
166 std::array<const R3BNeulandCalData*, 2> cal;
167 if ((*calDataPtrPtr)->GetSide() == 1)
168 cal = { *calDataPtrPtr, fHitMap[barID] };
170 cal = { fHitMap[barID], *calDataPtrPtr };
172 const std::array<double, 2> qdc = { std::max(cal[0]->GetQdc() - parameter.GetPedestal(1), 1.),
173 std::max(cal[1]->GetQdc() - parameter.GetPedestal(2), 1.) };
175 const std::array<Double_t, 2> unsatEnergy = {
176 GetUnsaturatedEnergy(qdc[0], parameter.GetEnergyGain(1), parameter.GetPMTSaturation(1)),
177 GetUnsaturatedEnergy(qdc[1], parameter.GetEnergyGain(2), parameter.GetPMTSaturation(2))
180 const auto energy = TMath::Sqrt(fAttenuationValues[barID] * unsatEnergy[0] * unsatEnergy[1]);
182 if (energy < fEnergyCutoff)
185 std::array<Double_t, 2> tdc;
187 if (std::isnan(cal[0]->GetTriggerTime()) || std::isnan(cal[0]->GetTriggerTime()))
189 tdc = { cal[0]->GetTime() + parameter.GetTimeOffset(1), cal[1]->GetTime() + parameter.GetTimeOffset(2) };
193 tdc = { cal[0]->GetTime() - cal[0]->GetTriggerTime() + parameter.GetTimeOffset(1),
194 cal[1]->GetTime() - cal[1]->GetTriggerTime() + parameter.GetTimeOffset(2) };
212 auto time = (tdc[0] + tdc[1]) * 0.5 - fGlobalTimeOffset;
216 time = time + WalkCorrection(energy);
223 fmt::print(
"time: {}, start: {}\n", time, start);
232 const auto bar = (barID) % 50;
240 pos[0] = parameter.GetEffectiveSpeed() * (tdc[1] - tdc[0]);
243 pixel[0] = std::min(std::max(0., pos[0] / 5. + 25), 49.);
249 pos[1] = parameter.GetEffectiveSpeed() * (tdc[1] - tdc[0]);
252 pixel[1] = std::min(std::max(0., pos[1] / 5. + 25), 49.);
255 pos[2] = fDistanceToTarget + fDistancesToFirstPlane[plane];
258 auto hit =
R3BNeulandHit{ barID + 1, tdc[0], tdc[1], time, unsatEnergy[0], unsatEnergy[1], energy, pos, pixel };
259 R3BLOG(debug1, fmt::format(
"Neuland hit: {}", hit));