diff --git a/reco/detectors/trd/CbmTrdClusterFinder.cxx b/reco/detectors/trd/CbmTrdClusterFinder.cxx index d9a0499e53ea56a61ed773ad472fec4b7fb7eb7f..5e07540503181353201f9b14c08c6b45c14c9464 100644 --- a/reco/detectors/trd/CbmTrdClusterFinder.cxx +++ b/reco/detectors/trd/CbmTrdClusterFinder.cxx @@ -84,30 +84,18 @@ InitStatus CbmTrdClusterFinder::Init() CbmDigiManager::Instance()->Init(); if (!CbmDigiManager::Instance()->IsPresent(ECbmModuleId::kTrd)) LOG(fatal) << GetName() << "Missing Trd digi branch."; + fClusters = new std::vector<CbmTrdCluster>(); FairRootManager* ioman = FairRootManager::Instance(); - - fClusters = new std::vector<CbmTrdCluster>(); ioman->RegisterAny("TrdCluster", fClusters, true); - // // Get the full geometry information of the detector gas layers and store - // // them with the CbmTrdModuleRec. This information can then be used for - // // transformation calculations - // std::map<Int_t, TGeoPhysicalNode*> moduleMap = fGeoHandler->FillModuleMap(); - // - // Int_t nrModules = fDigiPar->GetNrOfModules(); - // Int_t nrNodes = moduleMap.size(); - // if (nrModules != nrNodes) LOG(fatal) << "Geometry and parameter files have different number of modules."; - // for (Int_t loop=0; loop< nrModules; ++loop) { - // Int_t address = fDigiPar->GetModuleId(loop); - // std::map<Int_t, TGeoPhysicalNode*>::iterator it = moduleMap.find(address); - // if ( it == moduleMap.end() ) { - // LOG(fatal) << "Expected module with address " << address << " wasn't found in the map with TGeoNode information."; - // } - // AddModule(address, it->second); - // } + for (auto entry : fDigiPar->GetModuleMap()) { + const auto moduleId = entry.first; - // // new call needed when parameters are initialized from ROOT file - // fDigiPar->Initialize(); + // Get ASIC parameters for this module + CbmTrdParModAsic* setDet = static_cast<CbmTrdParModAsic*>(fAsicPar->GetModulePar(moduleId)); + if (!setDet) continue; + AddModule(moduleId, setDet->GetAsicType()); + } LOG(info) << "================ TRD Cluster Finder ==============="; LOG(info) << " Free streaming : " << (IsTimeBased() ? "yes" : "no"); @@ -142,23 +130,21 @@ void CbmTrdClusterFinder::Exec(Option_t* /*option*/) TStopwatch timerTs; timerTs.Start(); - UInt_t nDigis = static_cast<UInt_t>(std::abs(CbmDigiManager::Instance()->GetNofDigis(ECbmModuleId::kTrd))); - CbmTrdModuleRec* mod = nullptr; + UInt_t nDigis = static_cast<UInt_t>(std::abs(CbmDigiManager::Instance()->GetNofDigis(ECbmModuleId::kTrd))); for (size_t idigi(0); idigi < nDigis; idigi++) { const CbmTrdDigi* digi = CbmDigiManager::Instance()->Get<CbmTrdDigi>(idigi); auto imod = fModules.find(digi->GetAddressModule()); if (imod == fModules.end()) { - mod = AddModule(digi->GetAddressModule(), digi->GetType()); - } - else { - mod = imod->second; + LOG(error) << "CbmTrdClusterFinder: Digi with unknown module ID."; + continue; } + CbmTrdModuleRec* mod = imod->second; mod->AddDigi(digi, idigi); } for (auto imod = fModules.begin(); imod != fModules.end(); imod++) { - mod = imod->second; + CbmTrdModuleRec* mod = imod->second; fNrClusters += mod->FindClusters(); AddClusters(mod->GetClusters()); imod->second->Clear("cls");