42 double timeCut = 10000, timeMin = 0, timeMax = 10000, gradientCut = 0.03, thresholdSeedEnergy = 0.1, thresholdCellEnergy = 0.05;
46 mClusterizer.initialize(timeCut, timeMin, timeMax, gradientCut, doEnergyGradientCut, thresholdSeedEnergy, thresholdCellEnergy);
83 LOG(
debug) <<
"[EMCALClusterizer - run] called";
84 updateTimeDependentParams(ctx);
85 std::string inputname;
88 if constexpr (std::is_same<InputType, o2::emcal::Digit>::value) {
90 TrigName =
"digitstrgr";
91 }
else if constexpr (std::is_same<InputType, o2::emcal::Cell>::value) {
93 TrigName =
"cellstrgr";
96 auto Inputs = ctx.
inputs().
get<gsl::span<InputType>>(inputname.c_str());
97 LOG(
debug) <<
"[EMCALClusterizer - run] Received " <<
Inputs.size() <<
" Cells/digits, running clusterizer ...";
99 auto InputTriggerRecord = ctx.
inputs().
get<gsl::span<TriggerRecord>>(TrigName.c_str());
100 LOG(
debug) <<
"[EMCALClusterizer - run] Received " << InputTriggerRecord.size() <<
" Trigger Records, running clusterizer ...";
102 mOutputAnaClusters->clear();
104 std::vector<o2::emcal::Cluster> outputClusters;
105 std::vector<int> outputCellDigitIndices;
106 std::vector<o2::emcal::TriggerRecord> outputTriggerRecord;
107 std::vector<o2::emcal::TriggerRecord> outputTriggerRecordIndices;
109 int currentStartClusters = 0;
110 int currentStartIndices = 0;
112 for (
auto iTrgRcrd : InputTriggerRecord) {
114 mClusterizer.findClusters(gsl::span<const InputType>(&
Inputs[iTrgRcrd.getFirstEntry()], iTrgRcrd.getNumberOfObjects()));
120 auto outputClustersTemp = mClusterizer.getFoundClusters();
121 auto outputCellDigitIndicesTemp = mClusterizer.getFoundClustersInputIndices();
123 std::copy(outputClustersTemp->begin(), outputClustersTemp->end(), std::back_inserter(outputClusters));
124 std::copy(outputCellDigitIndicesTemp->begin(), outputCellDigitIndicesTemp->end(), std::back_inserter(outputCellDigitIndices));
126 outputTriggerRecord.emplace_back(iTrgRcrd.getBCData(), currentStartClusters, outputClustersTemp->size());
127 outputTriggerRecordIndices.emplace_back(iTrgRcrd.getBCData(), currentStartIndices, outputCellDigitIndicesTemp->size());
129 currentStartClusters = outputClusters.size();
130 currentStartIndices = outputCellDigitIndices.size();
133 mEventHandler->setClusterData(outputClusters, outputCellDigitIndices, outputTriggerRecord, outputTriggerRecordIndices);
134 mEventHandler->setCellData(
Inputs, InputTriggerRecord);
137 for (
int iev = 0; iev < mEventHandler->getNumberOfEvents(); iev++) {
138 auto inputEvent = mEventHandler->buildEvent(iev);
140 mClusterFactory->reset();
141 mClusterFactory->setContainer(inputEvent.mClusters,
Inputs, inputEvent.mCellIndices);
144 for (
int icl = 0; icl < mClusterFactory->getNumberOfClusters(); icl++) {
145 auto analysisCluster = mClusterFactory->buildCluster(icl);
146 mOutputAnaClusters->push_back(analysisCluster);
150 LOG(
debug) <<
"[EMCALClusterizer - run] Writing " << mOutputAnaClusters->size() <<
" clusters ...";
156 std::vector<o2::framework::InputSpec> inputs;
157 std::vector<o2::framework::OutputSpec> outputs;
166 auto ggRequest = std::make_shared<o2::base::GRPGeomRequest>(
false,
181 o2::framework::adaptFromTask<o2::emcal::reco_workflow::AnalysisClusterSpec<o2::emcal::Digit>>(ggRequest)};
186 o2::framework::adaptFromTask<o2::emcal::reco_workflow::AnalysisClusterSpec<o2::emcal::Cell>>(ggRequest)};
ServiceRegistryRef services()
DataAllocator & outputs()
The data allocator is used to allocate memory for the output data.
InputRecord & inputs()
The inputs associated with this processing context.