Skip to content
Snippets Groups Projects
Commit 96f90f16 authored by Felix Weiglhofer's avatar Felix Weiglhofer
Browse files

DigiManager: Add function to access digi branch as array.

parent b2439e1a
No related branches found
No related tags found
1 merge request!1068DigiManager: Add function to access digi branch as array.
Pipeline #20746 passed
......@@ -17,11 +17,11 @@ set(SRCS
CbmMatchRecoToMC.cxx
CbmTrackingDetectorInterfaceBase.cxx
draw/CbmDrawHist.cxx
report/CbmReport.cxx
report/CbmReport.cxx
report/CbmStudyReport.cxx
report/CbmSimulationReport.cxx
report/CbmTextReportElement.cxx
report/CbmHtmlReportElement.cxx
report/CbmHtmlReportElement.cxx
report/CbmLatexReportElement.cxx
utils/CbmUtils.cxx
utils/CbmGeometryUtils.cxx
......@@ -32,22 +32,24 @@ set(SRCS
set(LIBRARY_NAME CbmBase)
set(LINKDEF ${LIBRARY_NAME}LinkDef.h)
set(PUBLIC_DEPENDENCIES
CbmData
set(PUBLIC_DEPENDENCIES
CbmData
FairRoot::Base
ROOT::Core
ROOT::Gpad
GSL
ROOT::Core
ROOT::Gpad
ROOT::Hist
)
set(PRIVATE_DEPENDENCIES
FairLogger::FairLogger
FairRoot::GeoBase
set(PRIVATE_DEPENDENCIES
FairLogger::FairLogger
FairRoot::GeoBase
Boost::filesystem
ROOT::Geom
ROOT::Graf
ROOT::MathCore
ROOT::RIO
ROOT::Geom
ROOT::Graf
ROOT::MathCore
ROOT::RIO
ROOT::Tree
)
......
......@@ -23,6 +23,7 @@
#include <boost/any.hpp> // for any_cast, bad_any_cast (ptr...
#include <boost/exception/exception.hpp> // for clone_impl, error_info_inje...
#include <gsl/span>
#include <iosfwd> // for string
#include <map> // for map, map<>::mapped_type
#include <vector> // for vector
......@@ -69,6 +70,25 @@ public:
return nullptr;
}
template<class Digi>
gsl::span<const Digi> GetArray() const
{
assert(fIsInitialised);
ECbmModuleId system = Digi::GetSystem();
auto branch = fBranches.find(system);
if (branch == fBranches.end()) {
LOG(error) << "Failed to find branch for Digi of type " << Digi::GetClassName();
return {};
}
boost::any container = branch->second->GetBranchContainer();
LOG_IF(fatal, container.type() != typeid(const std::vector<Digi>*))
<< "Digis of type " << Digi::GetClassName() << " not stored with std::vector";
return *boost::any_cast<const std::vector<Digi>*>(container);
}
/** @brief Access to a digi branch
** @param system System identifier
** @return Digi branch
......
......@@ -518,14 +518,13 @@ void CbmRecoSts::ProcessData(CbmEvent* event)
// --- Number of input digis
fTimer.Start();
Int_t nDigis = (event ? event->GetNofData(ECbmDataType::kStsDigi) : fDigiManager->GetNofDigis(ECbmModuleId::kSts));
auto digis = fDigiManager->GetArray<CbmStsDigi>();
// --- Distribute digis to modules
//#pragma omp parallel for schedule(static) if(fParallelism_enabled)
for (Int_t iDigi = 0; iDigi < nDigis; iDigi++) {
Int_t digiIndex = (event ? event->GetIndex(ECbmDataType::kStsDigi, iDigi) : iDigi);
const CbmStsDigi* digi = fDigiManager->Get<const CbmStsDigi>(digiIndex);
assert(digi);
const CbmStsDigi* digi = &digis[digiIndex];
// Check system ID. There are pulser digis in which will be ignored here.
Int_t systemId = CbmAddress::GetSystemId(digi->GetAddress());
......
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