diff --git a/algo/detectors/trd2d/Trd2dReadoutConfig.cxx b/algo/detectors/trd2d/Trd2dReadoutConfig.cxx index e6ca18b123c367078412b83e886421db7b4aa2be..3a7d04e7feca0203fa8e193f13faa25e217d5523 100644 --- a/algo/detectors/trd2d/Trd2dReadoutConfig.cxx +++ b/algo/detectors/trd2d/Trd2dReadoutConfig.cxx @@ -62,21 +62,6 @@ namespace cbm::algo } // ------------------------------------------------------------------------------------ - - // --- Initialise the component mapping structure ---------------------------------- - void Trd2dReadoutConfig::InitComponentMap(const std::map<uint32_t, uint16_t[NCROBMOD]>& map) - { - // Receive map (moduleId, crobId) -> (equipId) - // Invert to obtain component map (equipId) -> (module iq, crob id) - for (auto& entry : map) { - uint16_t mod_id = entry.first; - for (uint8_t crob_id = 0; crob_id < NCROBMOD; crob_id++) { - uint16_t eq_id = entry.second[crob_id]; - fReadoutMap[eq_id] = std::make_pair(mod_id, crob_id); - } - } - } - // --- Initialise the mapping structure -------------------------------------------- void Trd2dReadoutConfig::InitChannelMap( const std::map<size_t, std::map<size_t, std::map<size_t, std::tuple<int32_t, bool, uint64_t>>>>& channelMap) diff --git a/algo/detectors/trd2d/Trd2dReadoutConfig.h b/algo/detectors/trd2d/Trd2dReadoutConfig.h index 7de76995318938c359ee61e0525536303034bc35..e449fabb5816edbb8f8e9631bef454a7a05ac223 100644 --- a/algo/detectors/trd2d/Trd2dReadoutConfig.h +++ b/algo/detectors/trd2d/Trd2dReadoutConfig.h @@ -80,9 +80,6 @@ namespace cbm::algo /** @brief Debug output of readout map **/ std::string PrintReadoutMap(); - /** @brief Initialisation of readout map **/ - void InitComponentMap(const std::map<uint32_t, uint16_t[NCROBMOD]>& crob_map); - /** @brief Initialisation of channel map **/ void InitChannelMap( const std::map<size_t, std::map<size_t, std::map<size_t, std::tuple<int32_t, bool, uint64_t>>>>& channelMap); diff --git a/core/detectors/trd/CbmTrdParSet.cxx b/core/detectors/trd/CbmTrdParSet.cxx index 98165360d5e704c812680bc84cabb126079b6edf..469c8a123c58e7483e27c677db443348eade823e 100644 --- a/core/detectors/trd/CbmTrdParSet.cxx +++ b/core/detectors/trd/CbmTrdParSet.cxx @@ -29,7 +29,7 @@ CbmTrdParSet::CbmTrdParSet(const char* name, const char* title, const char* cont CbmTrdParSet::~CbmTrdParSet() { for (map<Int_t, CbmTrdParMod*>::iterator imod = fModuleMap.begin(); imod != fModuleMap.end(); imod++) - delete imod->second; + if (imod->second) delete imod->second; fModuleMap.clear(); } diff --git a/reco/tasks/CbmTaskUnpack.cxx b/reco/tasks/CbmTaskUnpack.cxx index 69a2ffaffeb977debf461f1397ec14370b34d926..fa3887566df810e44c3a93b66f03dd9ec99a07f6 100644 --- a/reco/tasks/CbmTaskUnpack.cxx +++ b/reco/tasks/CbmTaskUnpack.cxx @@ -12,6 +12,7 @@ #include "CbmDigiTimeslice.h" #include "CbmSourceTs.h" #include "CbmTrdParFasp.h" +#include "CbmTrdParModAsic.h" #include "CbmTrdParModDigi.h" #include "CbmTrdParSetAsic.h" #include "CbmTrdParSetDigi.h" @@ -498,39 +499,6 @@ void CbmTaskUnpack::InitTrd2dReadoutConfig() if (asciiInput.open(asicparfile.data())) { asicparset.init(&asciiInput); } asciiInput.close(); - // Initialize map (moduleId, crobId) -> (equipId) explicitly - std::map<uint32_t, uint16_t[NCROBMOD]> crob_map; - uint16_t cmap[] = {0xffc2, 0xffc5, 0xffc1, 0, 0}; // "crob map 22" for run Id >= 2335 - memcpy(crob_map[5], cmap, NCROBMOD * sizeof(uint16_t)); // only module Id 5 is used! - - // Then pass to Trd2dReadoutConfig, will invert to obain map (equipId) -> (module iq, crob id) - fTrd2dConfig.InitComponentMap(crob_map); - - // FASP mapping update wrt the default setting (optional) - std::map<uint32_t, uint8_t[NFASPMOD]> fasp_map; - - { // Initialize the "fasp remapping" - // Hard coded for run Id >= 2335 (only module Id 5). - uint8_t map[NFASPMOD]; - for (uint32_t i(0); i < NFASPMOD; i++) { - map[i] = i; - } - const size_t nfasp0 = 72; - const size_t nfasps = 36; - uint8_t map22[] = { - 84, 85, 86, 87, 88, 89, // FEB14/0xffc1 - 90, 91, 92, 93, 94, 95, // FEB17/0xffc1 - 96, 97, 98, 99, 100, 101, // FEB18/0xffc1 - 102, 103, 104, 105, 106, 107, // FEB16/0xffc1 - 72, 73, 74, 75, 76, 77, // FEB9/0xffc1 - 78, 79, 80, 81, 82, 83 // FEB8/0xffc1 - }; - for (uint32_t i(0); i < nfasps; i++) { - map[i + nfasp0] = map22[i]; - } - memcpy(fasp_map[5], map, NFASPMOD * sizeof(uint8_t)); - } - // Map (equipId, asicId, chanId) -> (pad address, R pairing flag, daq offset) std::map<size_t, std::map<size_t, std::map<size_t, std::tuple<int32_t, bool, uint64_t>>>> channelMap; @@ -538,13 +506,15 @@ void CbmTaskUnpack::InitTrd2dReadoutConfig() for (auto entry : digiparset.GetModuleMap()) { const auto moduleId = entry.first; - if (crob_map.find(moduleId) == crob_map.end()) { continue; } //skip if no entry in crob_map // Get ASIC parameters for this module - const CbmTrdParSetAsic* setDet = static_cast<const CbmTrdParSetAsic*>(asicparset.GetModuleSet(moduleId)); + CbmTrdParModAsic* setDet = static_cast<CbmTrdParModAsic*>(asicparset.GetModulePar(moduleId)); if (!setDet) continue; - if (setDet->GetAsicType() != int32_t(CbmTrdDigi::eCbmTrdAsicType::kFASP)) continue; + if (setDet->GetAsicType() != CbmTrdDigi::eCbmTrdAsicType::kFASP) continue; + auto digipar = entry.second; + int crob_map[NCROBMOD]; + memcpy(crob_map, setDet->GetCrobAddresses(), NCROBMOD * sizeof(int)); // Loop through ASICs for this module std::vector<int32_t> addresses; setDet->GetAsicAddresses(&addresses); @@ -554,22 +524,17 @@ void CbmTaskUnpack::InitTrd2dReadoutConfig() const int32_t fasp_in_mod = add - 1000 * moduleId; const int32_t fasp_in_eq = fasp_in_mod % (NFASPCROB); const int32_t crob_in_mod = fasp_in_mod / (NFASPCROB); - const uint16_t eq_id = crob_map[moduleId][crob_in_mod]; - - // Apply FASP remapping (optional) - const int32_t add_remap = fasp_map[moduleId][fasp_in_mod]; - add = add_remap + 1000 * moduleId; + const uint16_t eq_id = crob_map[crob_in_mod]; // ASIC parameter set - CbmTrdParFasp* fasppar = (CbmTrdParFasp*) setDet->GetModulePar(add); + CbmTrdParFasp* fasppar = (CbmTrdParFasp*) setDet->GetAsicPar(add); // Loop through channels for this ASIC and fill map - for (size_t chan = 0; chan < fasppar->GetNchannels(); chan++) { + for (int chan = 0; chan < fasppar->GetNchannels(); chan++) { const int32_t pad = fasppar->GetPadAddress(chan); const bool hasPairingR = fasppar->GetChannel(chan)->HasPairingR(); - const CbmTrdParModDigi* modpar = (CbmTrdParModDigi*) digiparset.GetModulePar(moduleId); uint64_t daq_offset = 0; - if (modpar->GetPadRow(pad) % 2 == 0) daq_offset = 3; + if (((CbmTrdParModDigi*) digipar)->GetPadRow(pad) % 2 == 0) daq_offset = 3; channelMap[eq_id][fasp_in_eq][chan] = std::make_tuple(pad, hasPairingR, daq_offset); } }