28 if (ctx.
services().
active<AliceO2::InfoLogger::InfoLoggerContext>()) {
29 auto& ilctx = ctx.
services().
get<AliceO2::InfoLogger::InfoLoggerContext>();
30 ilctx.setField(AliceO2::InfoLogger::InfoLoggerContext::FieldName::Detector,
"EMC");
33 LOG(
debug) <<
"[EMCALClusterizer - init] Initialize clusterizer ...";
36 double timeCut = 10000, timeMin = 0, timeMax = 10000, gradientCut = 0.03, thresholdSeedEnergy = 0.1, thresholdCellEnergy = 0.05;
37 bool doEnergyGradientCut =
true;
41 mGeometry = Geometry::GetInstanceFromRunNumber(223409);
43 LOG(error) <<
"Failure accessing geometry";
47 mClusterizer.initialize(timeCut, timeMin, timeMax, gradientCut, doEnergyGradientCut, thresholdSeedEnergy, thresholdCellEnergy);
48 mClusterizer.setGeometry(mGeometry);
50 mOutputClusters =
new std::vector<o2::emcal::Cluster>();
51 mOutputCellDigitIndices =
new std::vector<o2::emcal::ClusterIndex>();
52 mOutputTriggerRecord =
new std::vector<o2::emcal::TriggerRecord>();
53 mOutputTriggerRecordIndices =
new std::vector<o2::emcal::TriggerRecord>();
61 LOG(
debug) <<
"[EMCALClusterizer - run] called";
63 std::string inputname;
66 if constexpr (std::is_same<InputType, o2::emcal::Digit>::value) {
68 TrigName =
"digitstrgr";
69 }
else if constexpr (std::is_same<InputType, o2::emcal::Cell>::value) {
71 TrigName =
"cellstrgr";
74 auto Inputs = ctx.
inputs().
get<gsl::span<InputType>>(inputname.c_str());
75 LOG(
debug) <<
"[EMCALClusterizer - run] Received " <<
Inputs.size() <<
" Cells/digits, running clusterizer ...";
77 auto InputTriggerRecord = ctx.
inputs().
get<gsl::span<TriggerRecord>>(TrigName.c_str());
78 LOG(
debug) <<
"[EMCALClusterizer - run] Received " << InputTriggerRecord.size() <<
" Trigger Records, running clusterizer ...";
80 mOutputClusters->clear();
81 mOutputCellDigitIndices->clear();
82 mOutputTriggerRecord->clear();
83 mOutputTriggerRecordIndices->clear();
85 int currentStartClusters = mOutputClusters->size();
86 int currentStartIndices = mOutputCellDigitIndices->size();
87 for (
auto iTrgRcrd : InputTriggerRecord) {
88 if (
Inputs.size() && iTrgRcrd.getNumberOfObjects()) {
89 mClusterizer.findClusters(gsl::span<const InputType>(&
Inputs[iTrgRcrd.getFirstEntry()], iTrgRcrd.getNumberOfObjects()));
97 auto outputClustersTemp = mClusterizer.getFoundClusters();
98 auto outputCellDigitIndicesTemp = mClusterizer.getFoundClustersInputIndices();
100 std::copy(outputClustersTemp->begin(), outputClustersTemp->end(), std::back_inserter(*mOutputClusters));
101 std::copy(outputCellDigitIndicesTemp->begin(), outputCellDigitIndicesTemp->end(), std::back_inserter(*mOutputCellDigitIndices));
103 mOutputTriggerRecord->emplace_back(iTrgRcrd.getBCData(), currentStartClusters, outputClustersTemp->size());
104 mOutputTriggerRecordIndices->emplace_back(iTrgRcrd.getBCData(), currentStartIndices, outputCellDigitIndicesTemp->size());
106 currentStartClusters = mOutputClusters->size();
107 currentStartIndices = mOutputCellDigitIndices->size();
109 LOG(
debug) <<
"[EMCALClusterizer - run] Writing " << mOutputClusters->size() <<
" clusters ...";
126 std::vector<o2::framework::InputSpec> inputs;
127 std::vector<o2::framework::OutputSpec> outputs;
146 o2::framework::adaptFromTask<o2::emcal::reco_workflow::ClusterizerSpec<o2::emcal::Digit>>()};
151 o2::framework::adaptFromTask<o2::emcal::reco_workflow::ClusterizerSpec<o2::emcal::Cell>>()};
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.