Project
Loading...
Searching...
No Matches
ClustererTask.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14
16
17#include <fairlogger/Logger.h> // for LOG
18#include "FairRootManager.h" // for FairRootManager
19
21
22using namespace o2::tpc;
23using namespace o2::dataformats;
24
25//_____________________________________________________________________
27 : FairTask("TPCClustererTask"),
28 mClusterSector(sectorid),
29 mHwClusterer(),
30 mDigitsArray(),
31 mDigitMCTruthArray(),
32 mHwClustersArray(),
33 mHwClustersMCTruthArray()
34{
35}
36
37//_____________________________________________________________________
41{
42 LOG(debug) << "Enter Initializer of ClustererTask";
43
44 FairRootManager* mgr = FairRootManager::Instance();
45 if (!mgr) {
46 LOG(error) << "Could not instantiate FairRootManager. Exiting ...";
47 return kERROR;
48 }
49
50 if (mClusterSector < 0 || mClusterSector >= Sector::MAXSECTOR) {
51 LOG(error) << "Sector ID " << mClusterSector << " is not supported. Exiting ...";
52 return kERROR;
53 }
54
55 // Register input container
56 std::stringstream sectornamestr;
57 sectornamestr << "TPCDigit" << mClusterSector;
58 LOG(info) << "FETCHING DIGITS FOR SECTOR " << mClusterSector << "\n";
59 mDigitsArray = std::unique_ptr<const std::vector<Digit>>(
60 mgr->InitObjectAs<const std::vector<Digit>*>(sectornamestr.str().c_str()));
61 if (!mDigitsArray) {
62 LOG(error) << "TPC points not registered in the FairRootManager. Exiting ...";
63 return kERROR;
64 }
65 std::stringstream mcsectornamestr;
66 mcsectornamestr << "TPCDigitMCTruth" << mClusterSector;
67 mDigitMCTruthArray = std::unique_ptr<const ConstMCLabelContainerView>(
68 mgr->InitObjectAs<const ConstMCLabelContainerView*>(mcsectornamestr.str().c_str()));
69 if (!mDigitMCTruthArray) {
70 LOG(error) << "TPC MC Truth not registered in the FairRootManager. Exiting ...";
71 return kERROR;
72 }
73
74 // Register output container
75 mHwClustersArray = std::make_unique<std::vector<OutputType>>();
76 // a trick to register the unique pointer with FairRootManager
77 static auto clusterArrayTmpPtr = mHwClustersArray.get();
78 mgr->RegisterAny(Form("TPCClusterHW%i", mClusterSector), clusterArrayTmpPtr, kTRUE);
79
80 // Register MC Truth output container
81 mHwClustersMCTruthArray = std::make_unique<MCLabelContainer>();
82 // a trick to register the unique pointer with FairRootManager
83 static auto clusterMcTruthTmpPtr = mHwClustersMCTruthArray.get();
84 mgr->RegisterAny(Form("TPCClusterHWMCTruth%i", mClusterSector), clusterMcTruthTmpPtr, kTRUE);
85
86 // create clusterer and pass output pointer
87 mHwClusterer = std::make_unique<HwClusterer>(mHwClustersArray.get(), mClusterSector, mHwClustersMCTruthArray.get());
88 mHwClusterer->setContinuousReadout(mIsContinuousReadout);
89
90 // TODO: implement noise/pedestal objects
91 // mHwClusterer->setNoiseObject(...);
92 // mHwClusterer->setPedestalObject(...);
93
94 return kSUCCESS;
95}
96
97//_____________________________________________________________________
98void ClustererTask::Exec(Option_t* option)
99{
100 LOG(debug) << "Running clusterization on event " << mEventCount << " with " << mDigitsArray->size() << " digits.";
101
102 if (mHwClustersArray) {
103 mHwClustersArray->clear();
104 }
105 if (mHwClustersMCTruthArray) {
106 mHwClustersMCTruthArray->clear();
107 }
108
109 mHwClusterer->process(gsl::span<o2::tpc::Digit const>(mDigitsArray->data(), mDigitsArray->size()), *mDigitMCTruthArray.get());
110 LOG(debug) << "Hw clusterer delivered " << mHwClustersArray->size() << " cluster container";
111
112 ++mEventCount;
113}
114
115//_____________________________________________________________________
117{
118 LOG(debug) << "Finish clusterization";
119
120 if (mHwClustersArray) {
121 mHwClustersArray->clear();
122 }
123 if (mHwClustersMCTruthArray) {
124 mHwClustersMCTruthArray->clear();
125 }
126
127 mHwClusterer->finishProcess(*mDigitsArray.get(), *mDigitMCTruthArray.get());
128 LOG(debug) << "Hw clusterer delivered " << mHwClustersArray->size() << " cluster container";
129
130 ++mEventCount;
131}
TPC Clusterer Task.
ClassImp(o2::tpc::ClustererTask)
std::ostringstream debug
void Exec(Option_t *option) override
Clusterization.
ClustererTask(int sectorid=-1)
InitStatus Init() override
Initializes the clusterer and connects input and output container.
void FinishTask() override
Complete Clusterization.
static constexpr int MAXSECTOR
Definition Sector.h:44
Definition of a container to keep/associate and arbitrary number of labels associated to an index wit...
Global TPC definitions and constants.
Definition SimTraits.h:167
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"