Skip to content
Snippets Groups Projects
Commit 96d4d129 authored by Dominik Smith's avatar Dominik Smith Committed by Dominik Smith
Browse files

Implemented an alternative deadtime check in cbm::algo::tof::Clusterizer,...

Implemented an alternative deadtime check in cbm::algo::tof::Clusterizer, which avoids the use of std::unordered_map and uses a flat vector instead.
parent fa6e31d8
No related branches found
No related tags found
1 merge request!1483Replacement of std::unordered_map in cbm::algo::tof::Calibrate.
......@@ -27,8 +27,7 @@ namespace cbm::algo::tof
auto& monitor = result.second;
calDigiOut.reserve(digiIn.size());
// channel deadtime map
std::unordered_map<int32_t, double> mChannelDeadTime;
std::fill(mChannelDeadTime.begin(), mChannelDeadTime.end(), std::numeric_limits<double>::quiet_NaN());
for (size_t iDigi = 0; iDigi < digiIn.size(); iDigi++) {
......@@ -54,13 +53,14 @@ namespace cbm::algo::tof
}
// Check dead time
const int32_t iAddr = pDigi.GetAddress();
auto it = mChannelDeadTime.find(iAddr);
if (it != mChannelDeadTime.end() && pDigi.GetTime() <= it->second) {
it->second = pDigi.GetTime() + rpcPar.channelDeadtime;
const size_t chanIdx = rpcOffset[smOffset[smTypeOffset[SmType] + Sm] + Rpc] + Chan + Side * rpcPar.chanPar.size();
double& deadTime = mChannelDeadTime[chanIdx];
if (!std::isnan(deadTime) && pDigi.GetTime() <= deadTime) {
mChannelDeadTime[chanIdx] = pDigi.GetTime() + rpcPar.channelDeadtime;
continue;
}
mChannelDeadTime[iAddr] = pDigi.GetTime() + rpcPar.channelDeadtime;
mChannelDeadTime[chanIdx] = pDigi.GetTime() + rpcPar.channelDeadtime;
// Create calibrated digi
CbmTofDigi& pCalDigi = calDigiOut.emplace_back(pDigi);
......
......@@ -65,10 +65,41 @@ namespace cbm::algo::tof
/** @brief Destructor **/
~Calibrate() {};
/** @brief Parameters for TOF hitfinders **/
tof::CalibrateSetup fTofConfig {};
/** @brief Set parameters for TOF calibrator and initialize channel dead time arrays **/
void SetParams(tof::CalibrateSetup params)
{
fTofConfig = params;
smTypeOffset.resize(1, 0);
smOffset.resize(1, 0);
rpcOffset.resize(1, 0);
for (uint32_t SmType = 0; SmType < fTofConfig.NbSm.size(); SmType++) {
int32_t NbSm = fTofConfig.NbSm[SmType];
int32_t NbRpc = fTofConfig.NbRpc[SmType];
smTypeOffset.push_back(smTypeOffset.back() + NbSm);
for (int32_t Sm = 0; Sm < NbSm; Sm++) {
smOffset.push_back(smOffset.back() + NbRpc);
for (int32_t Rpc = 0; Rpc < NbRpc; Rpc++) {
int32_t NbChan = fTofConfig.rpcs[SmType][Sm * NbRpc + Rpc].chanPar.size();
rpcOffset.push_back(rpcOffset.back() + 2 * NbChan); //Factor 2 for channel sides
}
}
}
mChannelDeadTime = std::vector<double>(rpcOffset.back(), std::numeric_limits<double>::quiet_NaN());
}
private: // members
/** @brief Parameters for TOF calibrator **/
tof::CalibrateSetup fTofConfig {};
/** @brief Storage for deadtime check **/
std::vector<double> mChannelDeadTime;
std::vector<size_t> smTypeOffset;
std::vector<size_t> smOffset;
std::vector<size_t> rpcOffset;
};
} // namespace cbm::algo::tof
......
......@@ -10,9 +10,9 @@ using namespace cbm::algo::tof;
void CalibratorChain::Init()
{
auto setup = config::ReadFromFile<CalibrateSetup>(Opts().ParamsDir() / "TofCalibratePar.yaml");
fCalibrate = std::make_unique<Calibrate>();
fCalibrate->fTofConfig = setup;
auto setup = config::ReadFromFile<CalibrateSetup>(Opts().ParamsDir() / "TofCalibratePar.yaml");
fCalibrate = std::make_unique<Calibrate>();
fCalibrate->SetParams(setup);
}
CalibratorChain::ReturnType CalibratorChain::Run(gsl::span<CbmTofDigi> digis)
......
......@@ -314,7 +314,7 @@ bool CbmTaskTofClusterizer::InitAlgos()
cbm::algo::config::ReadFromFile<cbm::algo::tof::HitfindSetup>("TofHitfinderPar.yaml"));
// Read calibration parameters pass to algo
fCalibrate.fTofConfig = cbm::algo::config::ReadFromFile<cbm::algo::tof::CalibrateSetup>("TofCalibratePar.yaml");
fCalibrate.SetParams(cbm::algo::config::ReadFromFile<cbm::algo::tof::CalibrateSetup>("TofCalibratePar.yaml"));
return true;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment