21 for (uint32_t SmType = 0; SmType <
fSetup.
NbSm.size(); SmType++) {
25 for (int32_t Sm = 0; Sm < NbSm; Sm++) {
27 for (int32_t Rpc = 0; Rpc < NbRpc; Rpc++) {
28 int32_t NbChan =
fSetup.
rpcs[SmType][Sm * NbRpc + Rpc].chanPar.size();
40 xpu::push_timer(
"TofCalibrate");
41 xpu::t_add_bytes(digiIn.size_bytes());
46 auto& calDigiOut = result.first;
47 auto& monitor = result.second;
48 calDigiOut.reserve(digiIn.size());
52 for (
const auto& digi : digiIn) {
53 const double SmType = digi.GetType();
54 const double Sm = digi.GetSm();
55 const double Rpc = digi.GetRpc();
56 const double Chan = digi.GetChannel();
57 const double Side = digi.GetSide();
61 if (SmType >= rpcs.size() || Sm * NbRpc + Rpc >= rpcs.at(SmType).size()) {
62 monitor.fDigiCalibUnknownRPC++;
73 if (!std::isnan(deadTime) && digi.GetTime() <= deadTime) {
75 monitor.fDigiDeadTimeCount++;
81 CbmTofDigi& pCalDigi = calDigiOut.emplace_back(digi);
85 pCalDigi.
SetAddress(Sm, Rpc, Chan, (0 == Side) ? 1 : 0, SmType);
92 const double dTot = std::max(pCalDigi.
GetTot() - chanPar.
vCPTotOff[Side], 0.001);
98 std::vector<double>& walk = chanPar.
vCPWalk[Side];
100 int32_t iWx = std::max((int32_t)((pCalDigi.
GetTot() - rpcPar.
TOTMin) / dTotBinSize), 0);
103 const double dDTot = (pCalDigi.
GetTot() - rpcPar.
TOTMin) / dTotBinSize - (double) iWx - 0.5;
104 double dWT = walk[iWx];
109 dWT += dDTot * (walk[iWx + 1] - walk[iWx]);
114 dWT -= dDTot * (walk[iWx - 1] - walk[iWx]);
122 for (std::size_t i = 1; i < calDigiOut.size(); ++i) {
125 while (j > 0 && calDigiOut[j - 1].GetTime() > digi.
GetTime()) {
126 calDigiOut[j] = calDigiOut[j - 1];
129 calDigiOut[j] = digi;
136 monitor.fTime = xpu::pop_timer();
137 monitor.fNumDigis = digiIn.size();