45 mInputReader = std::make_unique<DigitReader<InputType>>();
53 LOG(error) <<
"Failure accessing geometry";
57 if (!mClusterizer.getGeometry()) {
58 mClusterizer.setGeometry(mGeometry);
60 if (!mClusterizer.getGeometry()) {
61 LOG(error) <<
"Could not set geometry in clusterizer";
64 mClustersArray =
new std::vector<o2::emcal::Cluster>();
65 mClustersInputIndices =
new std::vector<o2::emcal::ClusterIndex>();
66 mClusterTriggerRecordsClusters =
new std::vector<o2::emcal::TriggerRecord>();
67 mClusterTriggerRecordsIndices =
new std::vector<o2::emcal::TriggerRecord>();
74 LOG(
debug) <<
"Running clusterization on new event";
80 std::unique_ptr<TFile> outFile(TFile::Open(outputFileName.data(),
"recreate"));
81 if (!outFile || outFile->IsZombie()) {
82 LOG(fatal) <<
"Failed to open output file " << outputFileName;
86 std::unique_ptr<TTree> outTree = std::make_unique<TTree>(
"o2sim",
"EMCAL clusters");
87 outTree->Branch(
"EMCALCluster", &mClustersArray);
88 outTree->Branch(
"EMCALClusterInputIndex", &mClustersInputIndices);
89 outTree->Branch(
"EMCALClusterTRGR", &mClusterTriggerRecordsClusters);
90 outTree->Branch(
"EMCIndicesTRGR", &mClusterTriggerRecordsIndices);
92 mClustersArray->clear();
93 mClustersInputIndices->clear();
94 mClusterTriggerRecordsClusters->clear();
95 mClusterTriggerRecordsIndices->clear();
98 mInputReader->openInput(inputFileName);
99 while (mInputReader->readNextEntry()) {
101 auto InputVector = mInputReader->getInputArray();
103 int currentStartClusters = mClustersArray->size();
104 int currentStartIndices = mClustersInputIndices->size();
106 for (
auto iTrgRcrd = mInputReader->getTriggerArray()->begin(); iTrgRcrd != mInputReader->getTriggerArray()->end(); ++iTrgRcrd) {
108 mClusterizer.findClusters(gsl::span<const InputType>(InputVector->data() + iTrgRcrd->getFirstEntry(), iTrgRcrd->getNumberOfObjects()));
111 auto clusterstmp = mClusterizer.getFoundClusters();
112 auto clusterIndecestmp = mClusterizer.getFoundClustersInputIndices();
113 std::copy(clusterstmp->begin(), clusterstmp->end(), std::back_inserter(*mClustersArray));
114 std::copy(clusterIndecestmp->begin(), clusterIndecestmp->end(), std::back_inserter(*mClustersInputIndices));
116 mClusterTriggerRecordsClusters->emplace_back(iTrgRcrd->getBCData(), currentStartClusters, clusterstmp->size());
117 mClusterTriggerRecordsIndices->emplace_back(iTrgRcrd->getBCData(), currentStartIndices, clusterIndecestmp->size());
119 currentStartClusters = mClustersArray->size();
120 currentStartIndices = mClustersInputIndices->size();
static Geometry * GetInstanceFromRunNumber(Int_t runNumber, const std::string_view="", const std::string_view mcname="TGeant3", const std::string_view mctitle="")
Instanciate geometry depending on the run number. Mostly used in analysis and MC anchors.