Skip to content
Snippets Groups Projects
Commit 77799371 authored by Alexandru Bercuci's avatar Alexandru Bercuci
Browse files

update cbm:algo copy of the unpack TRD2D to the new ascii parameters

format
parent b1baadf0
No related branches found
No related tags found
1 merge request!1179WIP : TRD2D fixes asked by the community
......@@ -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)
......
......@@ -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);
......
......@@ -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();
}
......
......@@ -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);
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment