diff --git a/MQ/mcbm/CbmDeviceUnpack.cxx b/MQ/mcbm/CbmDeviceUnpack.cxx index bfdf0cd7db418fd8f6a559d1c256621d9741ec50..48a547c65c356b48b17908fb3d30c4bf99dd8233 100644 --- a/MQ/mcbm/CbmDeviceUnpack.cxx +++ b/MQ/mcbm/CbmDeviceUnpack.cxx @@ -320,25 +320,18 @@ Bool_t CbmDeviceUnpack::InitContainers() trdfasp2dconfig->SetDoWriteOutput(); // Activate the line below to write Trd1D digis to a separate "TrdFaspDigi" branch. Can be used to separate between Fasp and Spadic digis //trdfasp2dconfig->SetOutputBranchName("TrdFaspDigi"); - uint8_t map[NFASPMOD]; - uint16_t crob_map[NCROBMOD]; - for (uint32_t i(0); i < NFASPMOD; i++) - map[i] = i; - if (fuRunId <= 1588) { - const size_t nfasps = 12; - uint8_t map21[] = {9, 2, 3, 11, 10, 7, 8, 0, 1, 4, 6, 5}; - for (uint32_t i(0); i < nfasps; i++) - map[i] = map21[i]; - uint16_t crob_map21[] = {0x00f0, 0, 0, 0, 0}; - for (uint32_t i(0); i < NCROBMOD; i++) - crob_map[i] = crob_map21[i]; - } - else if (fuRunId >= 2335) { - uint16_t crob_map22[] = {0xffc2, 0xffc5, 0xffc1, 0, 0}; - for (uint32_t i(0); i < NCROBMOD; i++) - crob_map[i] = crob_map22[i]; - } - trdfasp2dconfig->SetCrobMapping(5, crob_map); + // uint16_t crob_map[NCROBMOD]; + // if (fuRunId <= 1588) { + // uint16_t crob_map21[] = {0x00f0, 0, 0, 0, 0}; + // for (uint32_t i(0); i < NCROBMOD; i++) + // crob_map[i] = crob_map21[i]; + // } + // else if (fuRunId >= 2335) { + // uint16_t crob_map22[] = {0xffc2, 0xffc5, 0xffc1, 0, 0}; + // for (uint32_t i(0); i < NCROBMOD; i++) + // crob_map[i] = crob_map22[i]; + // } + // trdfasp2dconfig->SetCrobMapping(5, crob_map); std::string parfilesbasepathTrdfasp2d = Form("%s/parameters/trd", srcDir.Data()); trdfasp2dconfig->SetParFilesBasePath(parfilesbasepathTrdfasp2d); trdfasp2dconfig->SetSystemTimeOffset(-1800); // [ns] value to be updated diff --git a/algo/detectors/trd/UnpackTrd.h b/algo/detectors/trd/UnpackTrd.h index 915535c1f22eb91a105cbe3ca46fe410f06478ad..51d2ad038e03e1bf396e7f2485bde7d26fb3b58c 100644 --- a/algo/detectors/trd/UnpackTrd.h +++ b/algo/detectors/trd/UnpackTrd.h @@ -219,7 +219,7 @@ namespace cbm::algo ** @param samples ** @return ULong64_t **/ - uint64_t GetBinTimeShift(const std::vector<std::int16_t>* samples) { return 0.; }; + uint64_t GetBinTimeShift(const std::vector<std::int16_t>* /*samples*/) { return 0.; }; /** ** @brief Get the MaxAdc value diff --git a/core/detectors/trd/CMakeLists.txt b/core/detectors/trd/CMakeLists.txt index e746a1b64a2a038f3061a94cfc4e0b72e8fe1e45..5b61e9fcad3753415b49edb8214e7909e695eff1 100644 --- a/core/detectors/trd/CMakeLists.txt +++ b/core/detectors/trd/CMakeLists.txt @@ -20,6 +20,7 @@ set(SRCS CbmTrdSpadic.cxx CbmTrdFASP.cxx CbmTrdParFasp.cxx + CbmTrdParModAsic.cxx CbmTrdParModDigi.cxx CbmTrdParModGas.cxx CbmTrdParModGain.cxx diff --git a/core/detectors/trd/CbmTrdBaseLinkDef.h b/core/detectors/trd/CbmTrdBaseLinkDef.h index 46238360fd717db0f93cc1adde9ead39d65b8381..6f08f8e0b7b6c0a9d8efa596fd0e65266728e19e 100644 --- a/core/detectors/trd/CbmTrdBaseLinkDef.h +++ b/core/detectors/trd/CbmTrdBaseLinkDef.h @@ -30,6 +30,7 @@ #pragma link C++ class std::map<int, std::array<int, 16>> + ; #pragma link C++ class CbmTrdParFasp + ; #pragma link C++ class CbmTrdParFaspChannel + ; +#pragma link C++ class CbmTrdParModAsic + ; #pragma link C++ class CbmTrdParModGas + ; #pragma link C++ class CbmTrdParModGain + ; #pragma link C++ class CbmTrdParModGeo + ; diff --git a/core/detectors/trd/CbmTrdHardwareSetupR.cxx b/core/detectors/trd/CbmTrdHardwareSetupR.cxx index effca837817516276af651f4f267e6bde0d66cc1..a280366b59e49f37439815c97b7d5a677d755f0d 100644 --- a/core/detectors/trd/CbmTrdHardwareSetupR.cxx +++ b/core/detectors/trd/CbmTrdHardwareSetupR.cxx @@ -10,7 +10,7 @@ */ #include "CbmTrdHardwareSetupR.h" -#include "CbmTrdParSetAsic.h" // for CbmTrdParSetAsic +#include "CbmTrdParModAsic.h" // for CbmTrdParSetAsic #include "CbmTrdParSpadic.h" // for CbmTrdParSpadic #include <FairParAsciiFileIo.h> // for FairParAsciiFileIo @@ -83,7 +83,7 @@ std::map<size_t, Int_t> CbmTrdHardwareSetupR::CreateHwToSwAsicAddressTranslatorM TArrayI uniqueModuleIds(nModuleAsicParSets); moduleAsicParSetsList.fill("ModuleId", &uniqueModuleIds); - CbmTrdParSetAsic* moduleAsicsParSet = nullptr; + CbmTrdParModAsic* moduleAsicsParSet = nullptr; CbmTrdParSpadic* currentSpadicPar = nullptr; Int_t currentUniqueModuleId(-1); @@ -94,7 +94,7 @@ std::map<size_t, Int_t> CbmTrdHardwareSetupR::CreateHwToSwAsicAddressTranslatorM for (Int_t iModule = 0; iModule < nModuleAsicParSets; iModule++) { currentUniqueModuleId = uniqueModuleIds[iModule]; - moduleAsicsParSet = (CbmTrdParSetAsic*) moduleparsets->GetModuleSet(currentUniqueModuleId); + moduleAsicsParSet = (CbmTrdParModAsic*) moduleparsets->GetModulePar(currentUniqueModuleId); std::vector<Int_t> asicAddresses; moduleAsicsParSet->GetAsicAddresses(&asicAddresses); for (auto iAsicIt : asicAddresses) { @@ -149,7 +149,7 @@ std::map<Int_t, std::vector<Int_t>> CbmTrdHardwareSetupR::CreateAsicChannelMap(C TArrayI uniqueModuleIds(nModuleAsicParSets); moduleAsicParSetsList.fill("ModuleId", &uniqueModuleIds); - CbmTrdParSetAsic* moduleAsicsParSet = nullptr; + CbmTrdParModAsic* moduleAsicsParSet = nullptr; CbmTrdParSpadic* currentSpadicPar = nullptr; Int_t currentUniqueModuleId(-1); @@ -159,7 +159,7 @@ std::map<Int_t, std::vector<Int_t>> CbmTrdHardwareSetupR::CreateAsicChannelMap(C std::vector<Int_t> channelAddressVec; for (Int_t iModule = 0; iModule < nModuleAsicParSets; iModule++) { currentUniqueModuleId = uniqueModuleIds[iModule]; - moduleAsicsParSet = (CbmTrdParSetAsic*) moduleparsets->GetModuleSet(currentUniqueModuleId); + moduleAsicsParSet = (CbmTrdParModAsic*) moduleparsets->GetModulePar(currentUniqueModuleId); std::vector<Int_t> asicAddresses; moduleAsicsParSet->GetAsicAddresses(&asicAddresses); for (auto iAsicIt : asicAddresses) { @@ -219,7 +219,7 @@ bool CbmTrdHardwareSetupR::WriteComponentIdsToParams() TArrayI uniqueModuleIds(nModuleAsicParSets); moduleAsicParSetsList.fill("ModuleId", &uniqueModuleIds); - CbmTrdParSetAsic* moduleAsicsParSet = nullptr; + CbmTrdParModAsic* moduleAsicsParSet = nullptr; CbmTrdParSpadic* currentSpadicPar = nullptr; Int_t currentUniqueModuleId(-1); @@ -227,7 +227,7 @@ bool CbmTrdHardwareSetupR::WriteComponentIdsToParams() for (Int_t iModule = 0; iModule < nModuleAsicParSets; iModule++) { currentUniqueModuleId = uniqueModuleIds[iModule]; - moduleAsicsParSet = (CbmTrdParSetAsic*) moduleAsicParSets->GetModuleSet(currentUniqueModuleId); + moduleAsicsParSet = (CbmTrdParModAsic*) moduleAsicParSets->GetModulePar(currentUniqueModuleId); std::vector<Int_t> asicAddresses; moduleAsicsParSet->GetAsicAddresses(&asicAddresses); for (auto iAsicIt : asicAddresses) { diff --git a/core/detectors/trd/CbmTrdModuleAbstract.h b/core/detectors/trd/CbmTrdModuleAbstract.h index 3a04a3bed8933323cf0abfe7ec360b388d281afa..75bc0ad3bfbc6ae9ff4e3f7c3570575d65bb903b 100644 --- a/core/detectors/trd/CbmTrdModuleAbstract.h +++ b/core/detectors/trd/CbmTrdModuleAbstract.h @@ -5,9 +5,9 @@ #ifndef CBMTRDMODULEABSTRACT_H #define CBMTRDMODULEABSTRACT_H +#include "CbmTrdParModAsic.h" // for CbmTrdParSetAsic #include "CbmTrdParModDigi.h" // for CbmTrdParModDigi #include "CbmTrdParModGeo.h" // for CbmTrdParModGeo -#include "CbmTrdParSetAsic.h" // for CbmTrdParSetAsic #include <Rtypes.h> // for THashConsistencyHolder, ClassDef #include <RtypesCore.h> // for Int_t, Double_t, Char_t, UChar_t, USho... @@ -80,7 +80,7 @@ public: virtual void LocalToMaster(Double_t in[3], Double_t out[3]); - virtual void SetAsicPar(CbmTrdParSetAsic* p = nullptr) { fAsicPar = p; } + virtual void SetAsicPar(CbmTrdParModAsic* p = nullptr) { fAsicPar = p; } virtual void SetChmbPar(const CbmTrdParModGas* p) { fChmbPar = p; } virtual void SetDigiPar(const CbmTrdParModDigi* p) { fDigiPar = p; } virtual void SetGainPar(const CbmTrdParModGain* p) { fGainPar = p; } @@ -121,7 +121,7 @@ protected: // calibration objects const CbmTrdParModDigi* fDigiPar; ///< read-out description of module const CbmTrdParModGas* fChmbPar; ///< detection description (HV, drift) of module - CbmTrdParSetAsic* fAsicPar; ///< the set of ASIC operating on the module (owned) + CbmTrdParModAsic* fAsicPar; ///< the set of ASIC operating on the module (owned) const CbmTrdParModGain* fGainPar; ///< Analog to digital conversion for module const CbmTrdParModGeo* fGeoPar; ///< link to gGeometry for module diff --git a/core/detectors/trd/CbmTrdParManager.cxx b/core/detectors/trd/CbmTrdParManager.cxx index f74a687ca6e6259cfe7d224cc9c0fee52f13e587..0bd84c6077cee706f0bd65beda5ec08167ef57c6 100644 --- a/core/detectors/trd/CbmTrdParManager.cxx +++ b/core/detectors/trd/CbmTrdParManager.cxx @@ -13,6 +13,7 @@ #include "CbmTrdPads.h" // for fst1_pad_type, fst1_sect_count #include "CbmTrdParAsic.h" // for CbmTrdParAsic, CbmTrdParAsic::kCriId... #include "CbmTrdParFasp.h" // for CbmTrdParFasp +#include "CbmTrdParModAsic.h" // for CbmTrdParModAsic #include "CbmTrdParModDigi.h" // for CbmTrdParModDigi #include "CbmTrdParModGain.h" // for CbmTrdParModGain #include "CbmTrdParModGas.h" // for CbmTrdParModGas @@ -207,11 +208,11 @@ void CbmTrdParManager::CreateModuleParameters(const TString& path) fDigiPar->addParam(digi); // Create new asic par for this module - CbmTrdParSetAsic* asics(nullptr); + CbmTrdParModAsic* asics(nullptr); // if(moduleType>=9 && fFASP){ // I do not think this check is required, actually I think it creates a bug in parameter creation if (moduleType >= 9) { - asics = new CbmTrdParSetAsic("TrdParModFasp", Form("Fasp set for Module %d", moduleAddress) /*, GetContext()*/); - asics->SetAsicType(moduleType); + asics = new CbmTrdParModAsic(Form("FaspPars%03d", moduleAddress), Form("Fasp set for Module %d", moduleAddress)); + asics->SetChamberType(moduleType); Double_t par[6]; par[1] = 14; par[4] = 4.181e-6; @@ -220,7 +221,7 @@ void CbmTrdParManager::CreateModuleParameters(const TString& path) for (Int_t r(0); r < digi->GetNofRows(); r++) { for (Int_t c(0); c < ncol; c++) { if (c % 8 == 0) { - if (asic) asics->SetAsicPar(asicAddress, asic); + if (asic) asics->SetAsicPar(asic); asicAddress = moduleAddress * 1000 + iasic; asic = new CbmTrdParFasp(asicAddress); iasic++; @@ -237,11 +238,11 @@ void CbmTrdParManager::CreateModuleParameters(const TString& path) } } } - if (asic) asics->SetAsicPar(asicAddress, asic); + if (asic) asics->SetAsicPar(asic); } else { // Here only rectangular modules should enter. Hence, we have spadics in use. - asics = new CbmTrdParSetAsic("TrdParModSpadic", Form("Spadic set for Module %d", moduleAddress)); - asics->SetAsicType(moduleType); + asics = new CbmTrdParModAsic("TrdParModSpadic", Form("Spadic set for Module %d", moduleAddress)); + asics->SetChamberType(moduleType); CbmTrdParSpadic* asic(nullptr); // To write the channelAddresses to the parameter files we first of all need to now the number of columns, rows and channels. The numbering of the channels starts at the bottom left and goes along the short side (column) of the pads row by row, for a not rotated module. The rotation is also taken care about in the following code. @@ -299,13 +300,13 @@ void CbmTrdParManager::CreateModuleParameters(const TString& path) asic->SetChannelAddresses(chAddressesVec); // Get the according hardware component Id for the real asic placed at the according position in the experiment asic->SetComponentId(fHardwareSetup.GetComponentId(asic->GetAddress())); - asics->SetAsicPar(asic->GetAddress(), asic); + asics->SetAsicPar(asic); } } asics->Print(); - fAsicPar->AddParameters(asics); + fAsicPar->addParam(asics); // Create new gas par for this module CbmTrdParModGas* gas(nullptr); diff --git a/core/detectors/trd/CbmTrdParSetAsic.cxx b/core/detectors/trd/CbmTrdParSetAsic.cxx index b64098723cb4f002641cf15defed56d8e2b93dd3..5eef369005e3b8ed54f018206d46858b6d75e29b 100644 --- a/core/detectors/trd/CbmTrdParSetAsic.cxx +++ b/core/detectors/trd/CbmTrdParSetAsic.cxx @@ -8,6 +8,7 @@ #include "CbmTrdParAsic.h" // for CbmTrdParAsic #include "CbmTrdParFasp.h" // for CbmTrdParFasp, NFASPCH, CbmTrdParFasp... #include "CbmTrdParMod.h" // for CbmTrdParMod +#include "CbmTrdParModAsic.h" // for CbmTrdParModAsic #include "CbmTrdParSpadic.h" // for CbmTrdParSpadic, NSPADICCH #include <FairParamList.h> // for FairParamList @@ -30,33 +31,9 @@ using std::map; //_______________________________________________________________________________ CbmTrdParSetAsic::CbmTrdParSetAsic(const char* name, const char* title, const char* context) : CbmTrdParSet(name, title, context) - , fType(8) - , fModPar() { } -//_______________________________________________________________________________ -CbmTrdParSetAsic::~CbmTrdParSetAsic() -{ - if (fNrOfModules) { - // std::map<Int_t, CbmTrdParSetAsic*>::iterator it=fModPar.begin(); - // while(it!=fModPar.end()){ - // if(it->second) delete it->second; - // it++; - // } - fModPar.clear(); - } -} - -//_______________________________________________________________________________ -void CbmTrdParSetAsic::addParam(CbmTrdParMod* mod) -{ - if (mod->IsA() != CbmTrdParFasp::Class() && mod->IsA() != CbmTrdParSpadic::Class()) return; - - fModuleMap[((CbmTrdParAsic*) mod)->GetAddress()] = mod; - fNrOfModules++; -} - //_______________________________________________________________________________ Bool_t CbmTrdParSetAsic::getParams(FairParamList* l) { @@ -75,14 +52,17 @@ Bool_t CbmTrdParSetAsic::getParams(FairParamList* l) if (nAsic[imod] > maxNrAsics) maxNrAsics = nAsic[imod]; } Int_t address(0); - fType = 0xff; + CbmTrdParModAsic* mod(nullptr); CbmTrdParAsic* asic(nullptr); for (Int_t i = 0; i < fNrOfModules; i++) { - fModPar[moduleId[i]] = - new CbmTrdParSetAsic(GetName(), Form("%s for Module %d", GetTitle(), moduleId[i]) /*, GetContext()*/); + mod = new CbmTrdParModAsic(GetName(), Form("%s for Module %d", GetTitle(), moduleId[i])); + mod->SetChamberType(typeAsic[i]); // only for FASP if (9 == typeAsic[i]) { + TArrayI crobAddress(NCROBMOD); + if (!l->fill(Form("CrobInfo - Module %d", moduleId[i]), &crobAddress)) continue; + mod->SetCrobAddresses(crobAddress.GetArray()); Int_t maxValues = maxNrAsics * (NFASPPARS); TArrayI values(maxValues); if (!l->fill(Form("FaspInfo - Module %d", moduleId[i]), &values)) continue; @@ -92,9 +72,8 @@ Bool_t CbmTrdParSetAsic::getParams(FairParamList* l) if (address == moduleId[i] * 1000 + 999) continue; asic = new CbmTrdParFasp(address); static_cast<CbmTrdParFasp*>(asic)->LoadParams(&(values.GetArray()[offset])); - fModPar[moduleId[i]]->SetAsicPar(address, asic); + mod->SetAsicPar(asic); } - fModPar[moduleId[i]]->SetAsicType((int) CbmTrdDigi::eCbmTrdAsicType::kFASP); } else { Int_t maxValues = maxNrAsics * (5 + NSPADICCH); @@ -112,10 +91,10 @@ Bool_t CbmTrdParSetAsic::getParams(FairParamList* l) addresses.push_back(values[j]); } asic->SetChannelAddresses(addresses); - fModPar[moduleId[i]]->SetAsicPar(address, asic); + mod->SetAsicPar(asic); } - fModPar[moduleId[i]]->SetAsicType((int) CbmTrdDigi::eCbmTrdAsicType::kSPADIC); } + fModuleMap[moduleId[i]] = mod; } return kTRUE; } @@ -127,34 +106,34 @@ void CbmTrdParSetAsic::putParams(FairParamList* l) // LOG(info) << GetName() << "::putParams(FairParamList*)"; Int_t idx(0); - TArrayI moduleId(fNrOfModules), nAsic(fNrOfModules), typeAsic(fNrOfModules); - for (std::map<Int_t, CbmTrdParSetAsic*>::iterator imod = fModPar.begin(); imod != fModPar.end(); imod++) { - moduleId[idx] = imod->first; - nAsic[idx] = imod->second->GetNofAsics(); - typeAsic[idx++] = imod->second->GetAsicType(); + TArrayI moduleId(fNrOfModules), nAsic(fNrOfModules), typeChmb(fNrOfModules); + for (auto mod : fModuleMap) { + moduleId[idx] = mod.first; + nAsic[idx] = ((CbmTrdParModAsic*) mod.second)->GetNofAsics(); + typeChmb[idx] = ((CbmTrdParModAsic*) mod.second)->GetChamberType(); + idx++; } l->add("NrOfModules", fNrOfModules); l->add("ModuleId", moduleId); l->add("nAsic", nAsic); - l->add("typeAsic", typeAsic); - - CbmTrdParSetAsic* mod(nullptr); - for (Int_t i = 0; i < fNrOfModules; i++) { - mod = (CbmTrdParSetAsic*) fModPar[moduleId[i]]; + l->add("typeAsic", typeChmb); + idx = 0; + for (auto mapEntry : fModuleMap) { Int_t iAsicNr(0); Int_t currentAsicAddress(-1); - if (mod->fModuleMap.begin()->second->IsA() == CbmTrdParSpadic::Class()) { + CbmTrdParModAsic* mod = (CbmTrdParModAsic*) mapEntry.second; + if (mod->GetAsicType() == CbmTrdDigi::eCbmTrdAsicType::kSPADIC) { // Calculate the size of the array to hold all values realted to all // asics of a full detector module // each ASCIC has a maximum of NSPADICCH channels attached + 5 values // for AsicID, CriId, CrobId, CrobNumber and ElinkId Int_t sizePerSpadic = 5 + NSPADICCH; - Int_t fullSize = nAsic[i] * sizePerSpadic; + Int_t fullSize = nAsic[idx] * sizePerSpadic; TArrayI asicInfo(fullSize); iAsicNr = 0; - for (auto iModuleIt : mod->fModuleMap) { + for (auto iModuleIt : mod->fModPar) { size_t asicComponentId(100098); // 100098 = undefined currentAsicAddress = iModuleIt.first; asicComponentId = ((CbmTrdParSpadic*) iModuleIt.second)->GetComponentId(); @@ -177,14 +156,17 @@ void CbmTrdParSetAsic::putParams(FairParamList* l) } iAsicNr++; } - l->add(Form("SpadicInfo - Module %d", moduleId[i]), asicInfo); + l->add(Form("SpadicInfo - Module %d", mapEntry.first), asicInfo); } - if (mod->fModuleMap.begin()->second->IsA() == CbmTrdParFasp::Class()) { - Int_t fullSize = nAsic[i] * NFASPPARS; + if (mod->GetAsicType() == CbmTrdDigi::eCbmTrdAsicType::kFASP) { + TArrayI crobAddress(NCROBMOD); + crobAddress.Set(NCROBMOD, mod->GetCrobAddresses()); + l->add(Form("CrobInfo - Module %d", mapEntry.first), crobAddress); + Int_t fullSize = nAsic[idx] * NFASPPARS; TArrayI asicInfo(fullSize); iAsicNr = 0; - for (auto iModuleIt : mod->fModuleMap) { + for (auto iModuleIt : mod->fModPar) { int offset = iAsicNr * NFASPPARS; asicInfo[offset++] = iModuleIt.first; @@ -192,13 +174,13 @@ void CbmTrdParSetAsic::putParams(FairParamList* l) asicInfo[offset++] = fasp->GetChannelMask(); Int_t ich(0); for (auto chAddress : fasp->GetChannelAddresses()) { - asicInfo[offset + ich] = chAddress; const CbmTrdParFaspChannel* ch = fasp->GetChannel(ich); if (!ch) { LOG(info) << "Missing calib for Fasp[" << offset << "] pad " << chAddress; ich++; continue; } + asicInfo[offset + ich] = (ch->HasPairingT() ? -1 : 1) * chAddress; asicInfo[offset + (1 * NFASPCH) + ich] = ch->GetPileUpTime(); asicInfo[offset + (2 * NFASPCH) + ich] = ch->GetThreshold(); asicInfo[offset + (3 * NFASPCH) + ich] = ch->GetMinDelaySignal(); @@ -206,97 +188,21 @@ void CbmTrdParSetAsic::putParams(FairParamList* l) } iAsicNr++; } - l->add(Form("FaspInfo - Module %d", moduleId[i]), asicInfo); + l->add(Form("FaspInfo - Module %d", mapEntry.first), asicInfo); } + idx++; } } -//_______________________________________________________________________________ -void CbmTrdParSetAsic::AddParameters(CbmTrdParSetAsic* mod) -{ - //printf("CbmTrdParSetAsic::addParam() :\n"); - - fModPar[mod->fModuleMap.begin()->first / 1000] = mod; - fNrOfModules++; -} - -//_______________________________________________________________________________ -Int_t CbmTrdParSetAsic::GetAsicAddress(Int_t chAddress) const -{ - /** Query the ASICs in the module set for the specified read-out channel. - * Returns the id of the ASIC within the module or -1 if all returns false. - */ - std::map<Int_t, CbmTrdParMod*>::const_iterator it = fModuleMap.begin(); - CbmTrdParAsic* asic(nullptr); - while (it != fModuleMap.end()) { - asic = (CbmTrdParAsic*) it->second; - if (asic->QueryChannel(chAddress) >= 0) return it->first; - it++; - } - return -1; -} - -//_______________________________________________________________________________ -void CbmTrdParSetAsic::GetAsicAddresses(std::vector<Int_t>* a) const -{ - /** Query the ASICs in the module set for their addresses. - * Returns the list of these addresses in the vector prepared by the user - */ - std::map<Int_t, CbmTrdParMod*>::const_iterator it = fModuleMap.begin(); - CbmTrdParAsic* asic(nullptr); - while (it != fModuleMap.end()) { - asic = (CbmTrdParAsic*) it->second; - a->push_back(asic->GetAddress()); - it++; - } -} - -//_______________________________________________________________________________ -const CbmTrdParSet* CbmTrdParSetAsic::GetModuleSet(Int_t detId) const -{ - /** Access the list of ASICs operating on detector detId. Use the class in the sense of - * container of all module wise containers. - */ - map<Int_t, CbmTrdParSetAsic*>::const_iterator imod = fModPar.find(detId); - if (imod == fModPar.end()) return nullptr; - return imod->second; -} - //_______________________________________________________________________________ void CbmTrdParSetAsic::Print(Option_t* opt) const { - if (fModPar.size()) { - printf(" %s Modules[%d]\n", GetName(), fNrOfModules); - map<Int_t, CbmTrdParSetAsic*>::const_iterator imod = fModPar.begin(); - while (imod != fModPar.end()) { - printf(" %d %s(%s)\n", imod->first, imod->second->GetName(), imod->second->GetTitle()); - imod->second->Print(opt); - imod++; - } - } - else if (fModuleMap.size()) { - printf(" %s Asics[%d]\n", GetName(), GetNofAsics()); - if (strcmp(opt, "all") == 0) { - map<Int_t, CbmTrdParMod*>::const_iterator iasic = fModuleMap.begin(); - while (iasic != fModuleMap.end()) { - iasic->second->Print(opt); - iasic++; - } - } - } -} + printf(" %s Modules[%d]\n", GetName(), fNrOfModules); + for (auto imod : fModuleMap) { -//_______________________________________________________________________________ -void CbmTrdParSetAsic::SetAsicPar(Int_t address, CbmTrdParAsic* p) -{ - std::map<Int_t, CbmTrdParMod*>::iterator it = fModuleMap.find(address); - if (it != fModuleMap.end()) { - if (address % 1000 == 999) return; - LOG(warn) << GetName() << "::SetAsicPar : The ASIC @ " << address << " already initialized. Skip."; - return; + printf(" %d %s(%s)\n", imod.first, imod.second->GetName(), imod.second->GetTitle()); + imod.second->Print(opt); } - fModuleMap[address] = p; - fNrOfModules++; } ClassImp(CbmTrdParSetAsic) diff --git a/core/detectors/trd/CbmTrdParSetAsic.h b/core/detectors/trd/CbmTrdParSetAsic.h index b2ad65cdd794930565b9a751aae0e8b6dabb5c19..b433124b00f04a047372399ac7e77806a8342a84 100644 --- a/core/detectors/trd/CbmTrdParSetAsic.h +++ b/core/detectors/trd/CbmTrdParSetAsic.h @@ -32,20 +32,10 @@ public: const char* context = "Default"); /** \brief Destructor **/ - virtual ~CbmTrdParSetAsic(); + virtual ~CbmTrdParSetAsic() { ; } /** \brief Reset all parameters **/ virtual void clear() { ; } - /** \brief Add ASIC par to the current module - * It applies to the list of ASICs. - * \param mod ASIC par (FASP or SPADIC) - */ - virtual void addParam(CbmTrdParMod* mod); - /** \brief Add Module list of ASIC par to the setup list - * It applies to the list of lists. - * \param module list - */ - void AddParameters(CbmTrdParSetAsic*); // (VF) renamed to avoid shadowing of virtual method /** \brief Build the ASICs par for the current module from the info stored in the param file * It applies to the list of ASICs. @@ -58,57 +48,12 @@ public: */ void putParams(FairParamList*); - /** \brief Query the ASICs in the module for their DAQ address. - * It applies to the list of ASICs. - * Returns the list of id of the ASICs within the module. - */ - virtual void GetAsicAddresses(std::vector<Int_t>* a) const; - /** \brief Look for the ASIC which operates on a specific channel - * It applies to the list of ASICs. - *\param chAddress Pad address of the channel - *\return id of the ASIC operating on the channel. -1 in case of failure - */ - virtual Int_t GetAsicAddress(Int_t chAddress) const; - /** \brief Look for the ASIC parameters of a given DAQ id - * It applies to the list of ASICs. - * \param address ASIC address from DAQ - * \return A read-only pointer to the parameters - */ - virtual const CbmTrdParAsic* GetAsicPar(Int_t address) const { return (CbmTrdParAsic*) GetModulePar(address); } - /** \brief Look for the ASIC parameters of a given DAQ id - * It applies to the list of ASICs. - * \param address ASIC address from DAQ - * \return A read-write pointer to the parameters - */ - virtual CbmTrdParAsic* GetAsicPar(Int_t address) { return (CbmTrdParAsic*) GetModulePar(address); } - /** \brief Query the type of ASICs in the list - * It applies to the list of ASICs. - */ - virtual Int_t GetAsicType() const { return fType; } - /** \brief Returns the set of ASIC pars corresponding to a whole module - * It applies to the list of lists. - * \param detId module Identifier in the CBM geometry - */ - virtual const CbmTrdParSet* GetModuleSet(Int_t detId) const; - /** \brief Returns the number of ASICs for the current module - * It applies to the list of ASICs. - */ - virtual Int_t GetNofAsics() const { return GetNrOfModules(); } - virtual void Print(Option_t* opt = "") const; - /** \brief Initialize the ASIC parameters for DAQ id - * It applies to the list of ASICs. - * \param address DAQ id of the ASIC in the current module - */ - virtual void SetAsicPar(Int_t address, CbmTrdParAsic* p); - virtual void SetAsicType(Int_t t) { fType = t; } private: CbmTrdParSetAsic(const CbmTrdParSetAsic& ref); const CbmTrdParSetAsic& operator=(const CbmTrdParSetAsic& ref); - UChar_t fType; ///< type of ASIC for current se - std::map<Int_t, CbmTrdParSetAsic*> fModPar; ///< module wise list of ASIC sets ClassDef(CbmTrdParSetAsic, 1); // The set of ASIC settings for all TRD modules }; diff --git a/macro/run/run_unpack_online.C b/macro/run/run_unpack_online.C index d11d8b5015514590e8977f57586045bb6ac24560..67ee8802220eaa7af9aa0b3aef89030dfc48b94e 100644 --- a/macro/run/run_unpack_online.C +++ b/macro/run/run_unpack_online.C @@ -291,38 +291,38 @@ void run_unpack_online(std::vector<std::string> publisher = {"tcp://localhost:55 trdfasp2dconfig->SetDoWriteOutput(); // Activate the line below to write Trd1D digis to a separate "TrdFaspDigi" branch. Can be used to separate between Fasp and Spadic digis // trdfasp2dconfig->SetOutputBranchName("TrdFaspDigi"); - uint8_t map[NFASPMOD]; - uint16_t crob_map[NCROBMOD]; - for (uint32_t i(0); i < NFASPMOD; i++) - map[i] = i; - if (runid <= 1588) { - const size_t nfasps = 12; - uint8_t map21[] = {9, 2, 3, 11, 10, 7, 8, 0, 1, 4, 6, 5}; - for (uint32_t i(0); i < nfasps; i++) - map[i] = map21[i]; - uint16_t crob_map21[] = {0x00f0, 0, 0, 0, 0}; - for (uint32_t i(0); i < NCROBMOD; i++) - crob_map[i] = crob_map21[i]; - } - else if (runid >= 2335) { - 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]; - uint16_t crob_map22[] = {0xffc2, 0xffc5, 0xffc1, 0, 0}; - for (uint32_t i(0); i < NCROBMOD; i++) - crob_map[i] = crob_map22[i]; - } - trdfasp2dconfig->SetFaspMapping(5, map); - trdfasp2dconfig->SetCrobMapping(5, crob_map); + // uint8_t map[NFASPMOD]; + // uint16_t crob_map[NCROBMOD]; + // for (uint32_t i(0); i < NFASPMOD; i++) + // map[i] = i; + // if (runid <= 1588) { + // const size_t nfasps = 12; + // uint8_t map21[] = {9, 2, 3, 11, 10, 7, 8, 0, 1, 4, 6, 5}; + // for (uint32_t i(0); i < nfasps; i++) + // map[i] = map21[i]; + // uint16_t crob_map21[] = {0x00f0, 0, 0, 0, 0}; + // for (uint32_t i(0); i < NCROBMOD; i++) + // crob_map[i] = crob_map21[i]; + // } + // else if (runid >= 2335) { + // 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]; + // uint16_t crob_map22[] = {0xffc2, 0xffc5, 0xffc1, 0, 0}; + // for (uint32_t i(0); i < NCROBMOD; i++) + // crob_map[i] = crob_map22[i]; + // } + // trdfasp2dconfig->SetFaspMapping(5, map); + // trdfasp2dconfig->SetCrobMapping(5, crob_map); std::string parfilesbasepathTrdfasp2d = Form("%s/parameters/trd", srcDir.Data()); trdfasp2dconfig->SetParFilesBasePath(parfilesbasepathTrdfasp2d); trdfasp2dconfig->SetSystemTimeOffset(-1800); // [ns] value to be updated diff --git a/macro/run/run_unpack_tsa.C b/macro/run/run_unpack_tsa.C index 65f975eab1b8d4ff357f9cad968ff388606f0f27..c8128016ed3fb0dc9aeea2220ed5ad6c8941f6f8 100644 --- a/macro/run/run_unpack_tsa.C +++ b/macro/run/run_unpack_tsa.C @@ -317,25 +317,25 @@ void run_unpack_tsa(std::vector<std::string> infile = {"test.tsa"}, UInt_t runid trdfasp2dconfig->SetDoWriteOutput(); // Activate the line below to write Trd1D digis to a separate "TrdFaspDigi" branch. Can be used to separate between Fasp and Spadic digis // trdfasp2dconfig->SetOutputBranchName("TrdFaspDigi"); - uint8_t map[NFASPMOD]; - uint16_t crob_map[NCROBMOD]; - for (uint32_t i(0); i < NFASPMOD; i++) - map[i] = i; - if (runid <= 1588) { - const size_t nfasps = 12; - uint8_t map21[] = {9, 2, 3, 11, 10, 7, 8, 0, 1, 4, 6, 5}; - for (uint32_t i(0); i < nfasps; i++) - map[i] = map21[i]; - uint16_t crob_map21[] = {0x00f0, 0, 0, 0, 0}; - for (uint32_t i(0); i < NCROBMOD; i++) - crob_map[i] = crob_map21[i]; - } - else if (runid >= 2335) { - uint16_t crob_map22[] = {0xffc2, 0xffc5, 0xffc1, 0, 0}; - for (uint32_t i(0); i < NCROBMOD; i++) - crob_map[i] = crob_map22[i]; - } - trdfasp2dconfig->SetCrobMapping(5, crob_map); + // uint8_t map[NFASPMOD]; + // uint16_t crob_map[NCROBMOD]; + // for (uint32_t i(0); i < NFASPMOD; i++) + // map[i] = i; + // if (runid <= 1588) { + // const size_t nfasps = 12; + // uint8_t map21[] = {9, 2, 3, 11, 10, 7, 8, 0, 1, 4, 6, 5}; + // for (uint32_t i(0); i < nfasps; i++) + // map[i] = map21[i]; + // uint16_t crob_map21[] = {0x00f0, 0, 0, 0, 0}; + // for (uint32_t i(0); i < NCROBMOD; i++) + // crob_map[i] = crob_map21[i]; + // } + // else if (runid >= 2335) { + // uint16_t crob_map22[] = {0xffc2, 0xffc5, 0xffc1, 0, 0}; + // for (uint32_t i(0); i < NCROBMOD; i++) + // crob_map[i] = crob_map22[i]; + // } + // trdfasp2dconfig->SetCrobMapping(5, crob_map); std::string parfilesbasepathTrdfasp2d = Form("%s/parameters/trd", srcDir.Data()); trdfasp2dconfig->SetParFilesBasePath(parfilesbasepathTrdfasp2d); trdfasp2dconfig->SetSystemTimeOffset(-1800); // [ns] value to be updated @@ -345,7 +345,7 @@ void run_unpack_tsa(std::vector<std::string> infile = {"test.tsa"}, UInt_t runid if (2350 <= runid) { trdfasp2dconfig->SetSystemTimeOffset(-510); // [ns] value to be updated } - // trdfasp2dconfig->SetMonitor(dynamic_pointer_cast<CbmTrdUnpackFaspMonitor>(GetTrdMonitor(outfilename, 1))); + trdfasp2dconfig->SetMonitor(dynamic_pointer_cast<CbmTrdUnpackFaspMonitor>(GetTrdMonitor(outfilename, 1))); } // ------------- diff --git a/reco/detectors/trd/CbmTrdClusterFinder.cxx b/reco/detectors/trd/CbmTrdClusterFinder.cxx index d470d6825f368b2a38a02166ab9e1e91326bd316..abcdab7a8a82aee73a307e450ae468be4897f50f 100644 --- a/reco/detectors/trd/CbmTrdClusterFinder.cxx +++ b/reco/detectors/trd/CbmTrdClusterFinder.cxx @@ -185,8 +185,8 @@ CbmTrdModuleRec* CbmTrdClusterFinder::AddModule(const CbmTrdDigi* digi) module->SetDigiPar(pDigi); // try to load ASIC parameters for module - CbmTrdParSetAsic* pAsic(NULL); - if (!fAsicPar || !(pAsic = (CbmTrdParSetAsic*) fAsicPar->GetModuleSet(address))) { + CbmTrdParModAsic* pAsic(NULL); + if (!fAsicPar || !(pAsic = (CbmTrdParModAsic*) fAsicPar->GetModulePar(address))) { LOG(warn) << GetName() << "::AddModule : No ASIC params for modAddress " << address << ". Using default."; // module->SetAsicPar(); // map ASIC channels to read-out channels - need ParModDigi already loaded } diff --git a/reco/detectors/trd/CbmTrdHitProducer.cxx b/reco/detectors/trd/CbmTrdHitProducer.cxx index 7f77912475a412d1ce63b07fb2c27da8b264b0fb..c2179dc3475a455890914d88e73c9aefee079d14 100644 --- a/reco/detectors/trd/CbmTrdHitProducer.cxx +++ b/reco/detectors/trd/CbmTrdHitProducer.cxx @@ -120,8 +120,8 @@ CbmTrdModuleRec* CbmTrdHitProducer::AddModule(Int_t address, const CbmTrdParModG module->SetDigiPar(pDigi); // try to load ASIC parameters for module - CbmTrdParSetAsic* pAsic(NULL); - if (!fAsicPar || !(pAsic = (CbmTrdParSetAsic*) fAsicPar->GetModuleSet(address))) { + CbmTrdParModAsic* pAsic(NULL); + if (!fAsicPar || !(pAsic = (CbmTrdParModAsic*) fAsicPar->GetModulePar(address))) { LOG(warn) << GetName() << "::AddModule : No ASIC params for modAddress " << address << ". Using default."; // module->SetAsicPar(); // map ASIC channels to read-out channels - need ParModDigi already loaded } diff --git a/reco/detectors/trd/qa/CbmTrdHitDensityQa.cxx b/reco/detectors/trd/qa/CbmTrdHitDensityQa.cxx index 581d94d51bc2c2e75bdefad90448b43b0c427401..58531faaa3f6249b989bb675bf502e2aa7750ddb 100644 --- a/reco/detectors/trd/qa/CbmTrdHitDensityQa.cxx +++ b/reco/detectors/trd/qa/CbmTrdHitDensityQa.cxx @@ -9,6 +9,7 @@ #include "CbmTrdDigi.h" #include "CbmTrdGeoHandler.h" #include "CbmTrdHit.h" +#include "CbmTrdParModAsic.h" #include "CbmTrdParModDigi.h" #include "CbmTrdParModGeo.h" #include "CbmTrdParSetAsic.h" @@ -229,7 +230,7 @@ void CbmTrdHitDensityQa::Exec(Option_t*) Int_t moduleAddress = CbmTrdAddress::GetModuleAddress(digiAddress); // Int_t moduleId = CbmTrdAddress::GetModuleId(moduleAddress);// TODO fLayer = CbmTrdAddress::GetLayerId(moduleAddress); - CbmTrdParSetAsic* fModuleAsic = (CbmTrdParSetAsic*) fAsicPar->GetModuleSet(moduleAddress); + CbmTrdParModAsic* fModuleAsic = (CbmTrdParModAsic*) fAsicPar->GetModulePar(moduleAddress); CbmTrdParModDigi* fModuleDigi = (CbmTrdParModDigi*) fDigiPar->GetModulePar(moduleAddress); if (fModuleHitMap.find(moduleAddress) == fModuleHitMap.end()) { title.Form("hd_Module_%i", moduleAddress); @@ -273,7 +274,7 @@ void CbmTrdHitDensityQa::Exec(Option_t*) // Int_t moduleId = CbmTrdAddress::GetModuleId(moduleAddress);// TODO fLayer = CbmTrdAddress::GetLayerId(moduleAddress); CbmTrdParModDigi* fModuleDigi = (CbmTrdParModDigi*) fDigiPar->GetModulePar(moduleAddress); - CbmTrdParSetAsic* fModuleAsic = (CbmTrdParSetAsic*) fAsicPar->GetModuleSet(moduleAddress); + CbmTrdParModAsic* fModuleAsic = (CbmTrdParModAsic*) fAsicPar->GetModulePar(moduleAddress); if (digi->GetCharge() > fTriggerThreshold) { if (fModuleHitMap.find(moduleAddress) == fModuleHitMap.end()) { title.Form("hd_Module_%i", moduleAddress); @@ -498,7 +499,7 @@ void CbmTrdHitDensityQa::Finish() CbmTrdParModDigi* fModuleDigi = (CbmTrdParModDigi*) fDigiPar->GetModulePar(fModuleHitMapIt->first); CbmTrdParModGeo* fModuleGeo = (CbmTrdParModGeo*) fGeoPar->GetModulePar(fModuleHitMapIt->first); gGeoManager->FindNode(fModuleGeo->GetX(), fModuleGeo->GetY(), fModuleGeo->GetZ()); - CbmTrdParSetAsic* fModuleAsic = (CbmTrdParSetAsic*) fAsicPar->GetModuleSet(fModuleHitMapIt->first); + CbmTrdParModAsic* fModuleAsic = (CbmTrdParModAsic*) fAsicPar->GetModulePar(fModuleHitMapIt->first); std::vector<Int_t> AsicAddresses; fModuleAsic->GetAsicAddresses(&AsicAddresses); Int_t nofAsics = fModuleAsic->GetNofAsics(); diff --git a/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.cxx b/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.cxx index 028ec5e7838457275e277c990169c9d51d320418..c0ba18bc928ac359919904a2ca57f968dc27b0aa 100644 --- a/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.cxx +++ b/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.cxx @@ -7,6 +7,7 @@ #include "CbmTrdDigi.h" #include "CbmTrdParFasp.h" +#include "CbmTrdParModAsic.h" #include "CbmTrdParModDigi.h" #include "CbmTrdParSetDigi.h" #include "CbmTrdParSetGain.h" @@ -55,23 +56,23 @@ Bool_t CbmTrdUnpackFaspAlgo::initParSet(FairParGenericSet* parset) if (strcmp(parset->ClassName(), "CbmTrdParSetAsic") == 0) { CbmTrdParSetAsic* setPar = static_cast<CbmTrdParSetAsic*>(parset); for (auto did : fModuleId) { - const CbmTrdParSetAsic* setDet = static_cast<const CbmTrdParSetAsic*>(setPar->GetModuleSet(did)); + auto setDet = static_cast<const CbmTrdParModAsic*>(setPar->GetModulePar(did)); if (!setDet) continue; - if (setDet->GetAsicType() != Int_t(CbmTrdDigi::eCbmTrdAsicType::kFASP)) continue; + if (setDet->GetAsicType() != CbmTrdDigi::eCbmTrdAsicType::kFASP) continue; if (fMonitor) fMonitor->addParam(did, setDet); nModules++; std::vector<Int_t> a; setDet->GetAsicAddresses(&a); for (auto add : a) { - CbmTrdParAsic* asic = (CbmTrdParAsic*) setDet->GetModulePar(add); + CbmTrdParAsic* asic = (CbmTrdParAsic*) setDet->GetAsicPar(add); if (asic->IsA() == CbmTrdParSpadic::Class()) continue; - fAsicPar.addParam(asic); + fAsicSet.addParam(asic); if (VERBOSE > 2) asic->Print(); } } // setPar->printParams(); LOG(info) << GetName() << "::initParSet - for container " << parset->ClassName() << " modules " << nModules - << " asics " << fAsicPar.GetNrOfModules(); + << " asics " << fAsicSet.GetNrOfModules(); } else if (strcmp(parset->ClassName(), "CbmTrdParSetDigi") == 0) { fDigiSet = static_cast<CbmTrdParSetDigi*>(parset); @@ -198,7 +199,8 @@ void CbmTrdUnpackFaspAlgo::mess_prt(CbmTrdFaspMessage* mess) bool CbmTrdUnpackFaspAlgo::pushDigis(std::vector<CbmTrdUnpackFaspAlgo::CbmTrdFaspMessage> messes, const uint16_t mod_id) { const UChar_t lFasp = messes[0].fasp; - const CbmTrdParFasp* faspPar = (CbmTrdParFasp*) fAsicPar.GetAsicPar(mod_id * 1000 + lFasp); + const CbmTrdParModAsic* asicPar = (CbmTrdParModAsic*) fAsicSet.GetModulePar(mod_id); + const CbmTrdParFasp* faspPar = (CbmTrdParFasp*) asicPar->GetAsicPar(mod_id * 1000 + lFasp); const CbmTrdParModDigi* digiPar = (CbmTrdParModDigi*) fDigiSet->GetModulePar(mod_id); // link data to the position on the padplane diff --git a/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.h b/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.h index bff7160f9d691eab75abd005f430e147d586695e..cb05bb7e4a1739787284b25f53b533ed1701af37 100644 --- a/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.h +++ b/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.h @@ -101,7 +101,7 @@ public: uint8_t fasp = 0; ///< FASP id in the module }; /** Access the asic parameter list, read-only*/ - virtual const CbmTrdParSetAsic* GetAsicPar() const { return &fAsicPar; } + virtual const CbmTrdParSetAsic* GetAsicPar() const { return &fAsicSet; } /** * @brief Get the requested parameter containers. * Return the required parameter containers together with the paths to the ascii @@ -207,7 +207,7 @@ private: std::shared_ptr<CbmTrdUnpackFaspMonitor> fMonitor = nullptr; uint16_t fCrob = 0xffff; //! current crob being processed std::vector<uint16_t> fModuleId = {}; ///> list of modules for which there is are calibration parameters - CbmTrdParSetAsic fAsicPar; + CbmTrdParSetAsic fAsicSet; CbmTrdParSetDigi* fDigiSet = nullptr; ClassDef(CbmTrdUnpackFaspAlgo, 3) // unpack FASP read-out detectors diff --git a/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.cxx b/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.cxx index b2bef6097604c4c06e8b87e1208bc7245e8f0a0c..681684bf6030e8e34d627797f441fc813cb67b7e 100644 --- a/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.cxx +++ b/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.cxx @@ -115,35 +115,40 @@ Bool_t CbmTrdUnpackFaspMonitor::Init() } //_________________________________________________________________________________ -void CbmTrdUnpackFaspMonitor::MapMaskedChannels(const CbmTrdParSetAsic* par) +void CbmTrdUnpackFaspMonitor::MapMaskedChannels(const CbmTrdParSetAsic* set) { int ncol(-1), modAddress(-1); std::shared_ptr<TH1> histo = nullptr; std::vector<int> faspAddress; - par->GetAsicAddresses(&faspAddress); - for (auto address : faspAddress) { - CbmTrdParFasp* fasp = (CbmTrdParFasp*) par->GetModulePar(address); - - if (modAddress != address / 1000) { - modAddress = address / 1000; - auto modpair = fDigiHistoMap[eDigiHistos::kMap_St]; - if (modpair.find(modAddress) == modpair.end()) continue; - if (!(histo = modpair[modAddress])) continue; - - if (fModuleDef.find(modAddress) == fModuleDef.end()) continue; - ncol = std::get<1>(fModuleDef[modAddress]); - } - for (int ich(0); ich < NFASPCH; ich++) { - const CbmTrdParFaspChannel* faspCh = fasp->GetChannel(ich); - int pad = fasp->GetPadAddress(ich), row = pad / ncol, col = pad % ncol; - if (faspCh->IsMasked()) histo->Fill(col + (faspCh->HasPairingR() ? 1 : -1) * 0.25, row); + for (int idet(0); idet < set->GetNrOfModules(); idet++) { + CbmTrdParModAsic* par = (CbmTrdParModAsic*) set->GetModulePar(set->GetModuleId(idet)); + if (par->GetAsicType() != CbmTrdDigi::eCbmTrdAsicType::kFASP) continue; + + par->GetAsicAddresses(&faspAddress); + for (auto address : faspAddress) { + CbmTrdParFasp* fasp = (CbmTrdParFasp*) par->GetAsicPar(address); + + if (modAddress != address / 1000) { + modAddress = address / 1000; + auto modpair = fDigiHistoMap[eDigiHistos::kMap_St]; + if (modpair.find(modAddress) == modpair.end()) continue; + if (!(histo = modpair[modAddress])) continue; + + if (fModuleDef.find(modAddress) == fModuleDef.end()) continue; + ncol = std::get<1>(fModuleDef[modAddress]); + } + for (int ich(0); ich < NFASPCH; ich++) { + const CbmTrdParFaspChannel* faspCh = fasp->GetChannel(ich); + int pad = fasp->GetPadAddress(ich), row = pad / ncol, col = pad % ncol; + if (faspCh->IsMasked()) histo->Fill(col + (faspCh->HasPairingR() ? 1 : -1) * 0.25, row); + } } } } //_________________________________________________________________________ -void CbmTrdUnpackFaspMonitor::addParam(uint32_t madd, const CbmTrdParSetAsic* asics) +void CbmTrdUnpackFaspMonitor::addParam(uint32_t madd, const CbmTrdParModAsic* asics) { auto moduleDef = fModuleDef.find(madd); if (moduleDef == fModuleDef.end()) { @@ -155,7 +160,7 @@ void CbmTrdUnpackFaspMonitor::addParam(uint32_t madd, const CbmTrdParSetAsic* as std::vector<Int_t> add; asics->GetAsicAddresses(&add); for (auto afasp : add) { - CbmTrdParFasp* fasp = (CbmTrdParFasp*) asics->GetModulePar(afasp); + CbmTrdParFasp* fasp = (CbmTrdParFasp*) asics->GetAsicPar(afasp); int faspid(afasp % 1000), ich(faspid * 100); for (auto ach : fasp->GetChannelAddresses()) { diff --git a/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.h b/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.h index ca6e7507bfe9b6e00e033147c09fe7b7e0c550a7..f42558d021e99617c5d4b208bb623f69b8ff2f60 100644 --- a/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.h +++ b/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.h @@ -19,6 +19,7 @@ #define CbmTrdUnpackFaspMonitor_H #include "CbmTrdDigi.h" +#include "CbmTrdParModAsic.h" #include "CbmTrdParModDigi.h" #include "CbmTrdParSetAsic.h" #include "CbmTrdUnpackMonitor.h" @@ -84,7 +85,7 @@ protected: * @param madd module address to be added * @param asics asic properties for the current module */ - void addParam(uint32_t madd, const CbmTrdParSetAsic* asics); + void addParam(uint32_t madd, const CbmTrdParModAsic* asics); /** @brief Init module pad-plane parameters * @param madd module address to be checked * @param digis pad-plane properties for the current module diff --git a/reco/detectors/trd/unpack/CbmTrdUnpackMonitor.cxx b/reco/detectors/trd/unpack/CbmTrdUnpackMonitor.cxx index b294a1fb4dcea089fe52f3959daeecfd9103b2c9..7659647d4da57750e58cf3edc4537775a9441446 100644 --- a/reco/detectors/trd/unpack/CbmTrdUnpackMonitor.cxx +++ b/reco/detectors/trd/unpack/CbmTrdUnpackMonitor.cxx @@ -5,6 +5,7 @@ #include "CbmTrdUnpackMonitor.h" #include "CbmTrdDigi.h" +#include "CbmTrdParModAsic.h" #include "CbmTrdParModDigi.h" #include "CbmTrdRawMessageSpadic.h" @@ -158,8 +159,8 @@ Bool_t CbmTrdUnpackMonitor::Init(CbmTrdParSetDigi* digiParSet, CbmTrdParSetAsic* for (auto modulepair : modulemap) { auto parmoddigi = static_cast<CbmTrdParModDigi*>(modulepair.second); if (asicParSet) { - auto asicParMod = static_cast<const CbmTrdParSetAsic*>(asicParSet->GetModuleSet(modulepair.first)); - if (asicParMod->GetAsicType() != Int_t(CbmTrdDigi::eCbmTrdAsicType::kSPADIC)) continue; + auto asicParMod = static_cast<const CbmTrdParModAsic*>(asicParSet->GetModulePar(modulepair.first)); + if (asicParMod->GetAsicType() != CbmTrdDigi::eCbmTrdAsicType::kSPADIC) continue; } fModuleIdsVec.emplace_back(modulepair.first); diff --git a/reco/tasks/CbmTaskUnpack.cxx b/reco/tasks/CbmTaskUnpack.cxx index 60db004b8a0b59b602b4b24ec730ada67757f2f8..9441187a3724762af1bb32429c7aee28b7344154 100644 --- a/reco/tasks/CbmTaskUnpack.cxx +++ b/reco/tasks/CbmTaskUnpack.cxx @@ -271,10 +271,10 @@ cbm::algo::TrdReadoutConfig CbmTaskUnpack::InitTrdReadoutConfig() channelMap; //[criId][crobId][elinkId][chanId] -> chanAddress for (auto module : moduleIds) { - CbmTrdParSetAsic* moduleSet = (CbmTrdParSetAsic*) trdpar.GetModuleSet(module); + CbmTrdParModAsic* moduleSet = (CbmTrdParModAsic*) trdpar.GetModulePar(module); // Skip entries for "Fasp" modules in .asic.par file - if (moduleSet->GetAsicType() != static_cast<int32_t>(CbmTrdDigi::eCbmTrdAsicType::kSPADIC)) continue; + if (moduleSet->GetAsicType() != CbmTrdDigi::eCbmTrdAsicType::kSPADIC) continue; std::vector<int> asicAddresses; moduleSet->GetAsicAddresses(&asicAddresses); diff --git a/sim/detectors/trd/CbmTrdDigitizer.cxx b/sim/detectors/trd/CbmTrdDigitizer.cxx index 2a36c4f66251a91d7774de25bb4ff9ddce4c6799..8ac36826bbee615517723f735b380127572948bb 100644 --- a/sim/detectors/trd/CbmTrdDigitizer.cxx +++ b/sim/detectors/trd/CbmTrdDigitizer.cxx @@ -15,6 +15,7 @@ #include "CbmTrdModuleSimR.h" #include "CbmTrdPads.h" #include "CbmTrdParAsic.h" +#include "CbmTrdParModAsic.h" #include "CbmTrdParModDigi.h" #include "CbmTrdParModGain.h" #include "CbmTrdParModGas.h" @@ -378,8 +379,8 @@ CbmTrdModuleSim* CbmTrdDigitizer::AddModule(Int_t detId) // TODO check if this works also for ModuleR (moduleType < 9) modules if (moduleType >= 9) { // try to load ASIC parameters for module - CbmTrdParSetAsic* pAsic(NULL); - if (!fAsicPar || !(pAsic = (CbmTrdParSetAsic*) fAsicPar->GetModuleSet(detId))) { + CbmTrdParModAsic* pAsic(NULL); + if (!fAsicPar || !(pAsic = (CbmTrdParModAsic*) fAsicPar->GetModulePar(detId))) { LOG(debug) << GetName() << "::AddModule : No ASIC params for module @ " << path << ". Using default."; module->SetAsicPar(); // map ASIC channels to read-out channels - need ParModDigi already loaded } diff --git a/sim/detectors/trd/CbmTrdModuleSim2D.cxx b/sim/detectors/trd/CbmTrdModuleSim2D.cxx index 5d68a3de0106cbba3896db630486adf3924aecaa..020eed0b558fa62aafa9959ad61bf4228f03876e 100644 --- a/sim/detectors/trd/CbmTrdModuleSim2D.cxx +++ b/sim/detectors/trd/CbmTrdModuleSim2D.cxx @@ -798,7 +798,7 @@ void CbmTrdModuleSim2D::DumpBuffer() const //_______________________________________________________________________________ -void CbmTrdModuleSim2D::SetAsicPar(CbmTrdParSetAsic* p) +void CbmTrdModuleSim2D::SetAsicPar(CbmTrdParModAsic* p) { /** Build local set of ASICs and perform initialization. Need a proper fDigiPar already defined. */ diff --git a/sim/detectors/trd/CbmTrdModuleSim2D.h b/sim/detectors/trd/CbmTrdModuleSim2D.h index 4341b778f2d10d17dee1e18c57f245d6d8affd4d..e7765f73683781456a5dde92c3213ee1a35e4664 100644 --- a/sim/detectors/trd/CbmTrdModuleSim2D.h +++ b/sim/detectors/trd/CbmTrdModuleSim2D.h @@ -10,7 +10,7 @@ class CbmTimeSlice; class CbmTrdFASP; class CbmTrdTrianglePRF; -class CbmTrdParSetAsic; +class CbmTrdParModAsic; /** @class CbmTrdModuleSim2D ** @brief Simulation module implementation for TRD-2D physics and FEE ** @author Alex Bercuci <abercuci@niham.nipne.ro> @@ -69,7 +69,7 @@ public: * \param[in] set default use FASP/GETS via CbmTrdFASP class. If set to false use SPADIC TODO **/ void SetFasp(Bool_t set = kTRUE) { set ? SETBIT(fConfig, kFEE) : CLRBIT(fConfig, kFEE); } - void SetAsicPar(CbmTrdParSetAsic* p = NULL); + void SetAsicPar(CbmTrdParModAsic* p = NULL); Bool_t UseFasp() const { return TESTBIT(fConfig, kFEE); } private: diff --git a/sim/detectors/trd/CbmTrdModuleSimR.cxx b/sim/detectors/trd/CbmTrdModuleSimR.cxx index cfb1e3547f3ce75cb7a51da18c48650cccd1c4ef..8a54c57fe52f2180bf757886be07997cd0967c46 100644 --- a/sim/detectors/trd/CbmTrdModuleSimR.cxx +++ b/sim/detectors/trd/CbmTrdModuleSimR.cxx @@ -8,8 +8,8 @@ #include "CbmTrdAddress.h" #include "CbmTrdDigi.h" #include "CbmTrdDigitizer.h" +#include "CbmTrdParModAsic.h" #include "CbmTrdParModDigi.h" -#include "CbmTrdParSetAsic.h" #include "CbmTrdParSpadic.h" #include "CbmTrdPoint.h" #include "CbmTrdRadiator.h" @@ -1607,7 +1607,7 @@ void CbmTrdModuleSimR::SetAsicPar(CbmTrdParSetAsic* /*p*/) LOG(warn) << GetName() << "::SetAsicPar : The list for module " << fModAddress << " already initialized."; return; } - fAsicPar = new CbmTrdParSetAsic(); + fAsicPar = new CbmTrdParModAsic(); CbmTrdParSpadic* asic(NULL); Int_t iFebGroup = 0; // 1; 2; // normal, super, ultimate @@ -1645,7 +1645,7 @@ void CbmTrdModuleSimR::SetAsicPar(CbmTrdParSetAsic* /*p*/) // local_point[i] must be >= 0 at this point Double_t local_point[3]; Double_t fDx(GetDx()), fDy(GetDy()); asic = new CbmTrdParSpadic(iAsic, iFebGroup, local_point[0] - fDx, local_point[1] - fDy); - fAsicPar->SetAsicPar(iAsic, asic); + fAsicPar->SetAsicPar(asic); if (local_point[0] > 2 * fDx) { LOG(error) << "CbmTrdModuleSimR::SetAsicPar: asic position x=" << local_point[0] << " is out of bounds [0," << 2 * fDx << "]!"; diff --git a/sim/detectors/trd/qa/CbmTrdHitRateFastQa.cxx b/sim/detectors/trd/qa/CbmTrdHitRateFastQa.cxx index 05f9a807eb81ebc4463cf438d0bb0a6cafdb2d42..9f9b49953ca9900cd296a7dcc402a8fb64bc837b 100644 --- a/sim/detectors/trd/qa/CbmTrdHitRateFastQa.cxx +++ b/sim/detectors/trd/qa/CbmTrdHitRateFastQa.cxx @@ -7,6 +7,7 @@ #include "CbmTrdAddress.h" #include "CbmTrdGeoHandler.h" #include "CbmTrdParAsic.h" +#include "CbmTrdParModAsic.h" #include "CbmTrdParModDigi.h" #include "CbmTrdParModGeo.h" #include "CbmTrdParSetAsic.h" @@ -616,7 +617,7 @@ void CbmTrdHitRateFastQa::ScanModulePlane(const Int_t moduleAddress, TCanvas*& c Double_t ratePerModule = 0; // sum of data from this module TVector3 padPos; TVector3 padSize; - CbmTrdParSetAsic* fModuleAsic = (CbmTrdParSetAsic*) fAsicPar->GetModuleSet(moduleAddress); + CbmTrdParModAsic* fModuleAsic = (CbmTrdParModAsic*) fAsicPar->GetModulePar(moduleAddress); CbmTrdParModDigi* fModuleInfo = (CbmTrdParModDigi*) fDigiPar->GetModulePar(moduleAddress); CbmTrdParModGeo* fModuleGeo = (CbmTrdParModGeo*) fGeoPar->GetModulePar(moduleAddress); gGeoManager->FindNode(fModuleGeo->GetX(), fModuleGeo->GetY(), fModuleGeo->GetZ());