47 TrackerDeviceDPL(std::shared_ptr<o2::base::GRPGeomRequest> gr,
bool isMC,
bool checkMasked) : mGGCCDBRequest(gr), mIsMC(isMC), mCheckMasked(checkMasked) {}
53 mKeepAll = !ic.
options().
get<
bool>(
"mid-tracker-keep-best");
55 auto stop = [
this]() {
56 double scaleFactor = (mNROFs == 0) ? 0. : 1.e6 / mNROFs;
57 LOG(info) <<
"Processing time / " << mNROFs <<
" ROFs: full: " << mTimer.count() * scaleFactor <<
" us tracking: " << mTimerTracker.count() * scaleFactor <<
" us hitMapBuilder: " << mTimerBuilder.count() <<
" us";
64 auto tStart = std::chrono::high_resolution_clock::now();
65 updateTimeDependentParams(pc);
69 auto inROFRecords = pc.
inputs().
get<gsl::span<ROFRecord>>(
"mid_clusters_rof");
71 auto tAlgoStart = std::chrono::high_resolution_clock::now();
72 mTracker->process(
clusters, inROFRecords);
73 mTimerTracker += std::chrono::high_resolution_clock::now() - tAlgoStart;
75 tAlgoStart = std::chrono::high_resolution_clock::now();
76 std::vector<Track> tracks = mTracker->getTracks();
77 mHitMapBuilder->process(tracks,
clusters);
78 mTimerBuilder += std::chrono::high_resolution_clock::now() - tAlgoStart;
82 mTrackLabeler.
process(mTracker->getClusters(), tracks, *labels);
90 LOG(
debug) <<
"Sent " << tracks.size() <<
" tracks.";
92 LOG(
debug) <<
"Sent " << mTracker->getClusters().size() <<
" track clusters.";
95 LOG(
debug) <<
"Sent " << mTracker->getTrackROFRecords().size() <<
" ROFs.";
97 LOG(
debug) <<
"Sent " << mTracker->getClusterROFRecords().size() <<
" ROFs.";
99 mTimer += std::chrono::high_resolution_clock::now() - tStart;
100 mNROFs += inROFRecords.size();
109 bool rebuildMaskedChannels =
false;
111 LOG(info) <<
"Update MID_BAD_CH_TRK";
112 mBadChannels = *
static_cast<std::vector<ColumnData>*
>(obj);
113 rebuildMaskedChannels =
true;
115 LOG(info) <<
"Update MID_REJECTLIST_TRK";
116 mRejectList = *
static_cast<std::vector<ColumnData>*
>(obj);
117 rebuildMaskedChannels =
true;
119 if (rebuildMaskedChannels) {
120 mHitMapBuilder->setMaskedChannels(mBadChannels,
true);
121 mHitMapBuilder->setMaskedChannels(mRejectList,
false);
131 static bool initOnceDone =
false;
135 mTracker = std::make_unique<Tracker>(geoTrans);
136 if (!mTracker->init(mKeepAll)) {
137 LOG(error) <<
"Initialization of MID tracker device failed";
139 mHitMapBuilder = std::make_unique<HitMapBuilder>(geoTrans);
141 pc.
inputs().
get<std::vector<ColumnData>*>(
"mid_bad_channels_forTracks");
142 pc.
inputs().
get<std::vector<ColumnData>*>(
"mid_rejectlist_forTracks");
146 bool mKeepAll =
false;
147 bool mCheckMasked =
false;
148 TrackLabeler mTrackLabeler{};
149 std::shared_ptr<o2::base::GRPGeomRequest> mGGCCDBRequest;
150 std::unique_ptr<Tracker> mTracker{
nullptr};
151 std::unique_ptr<HitMapBuilder> mHitMapBuilder{
nullptr};
152 std::chrono::duration<double> mTimer{0};
153 std::chrono::duration<double> mTimerTracker{0};
154 std::chrono::duration<double> mTimerBuilder{0};
155 unsigned int mNROFs{0};
156 std::vector<ColumnData> mBadChannels{};
157 std::vector<ColumnData> mRejectList{};
162 std::vector<of::InputSpec> inputSpecs;
167 auto ggRequest = std::make_shared<o2::base::GRPGeomRequest>(
false,
175 std::vector<of::OutputSpec> outputSpecs{
192 of::adaptFromTask<o2::mid::TrackerDeviceDPL>(ggRequest, isMC, checkMasked),
193 of::Options{{
"mid-tracker-keep-best", of::VariantType::Bool,
false, {
"Keep only best track (default is keep all)"}}}};
Definition of the GeometryManager class.
Helper for geometry and GRP related CCDB requests.
Utility to build the MID track hit maps.
Track reconstruction algorithm for MID.
Data processor spec for MID tracker device.
Definition of the Names Generator class.
void checkUpdates(o2::framework::ProcessingContext &pc)
static GRPGeomHelper & instance()
void setRequest(std::shared_ptr< GRPGeomRequest > req)
T get(const char *key) const
void snapshot(const Output &spec, T const &object)
ServiceRegistryRef services()
ConfigParamRegistry const & options()
DataAllocator & outputs()
The data allocator is used to allocate memory for the output data.
InputRecord & inputs()
The inputs associated with this processing context.
const o2::dataformats::MCTruthContainer< MCClusterLabel > & getTrackClustersLabels()
Returns the cluster labels.
void process(gsl::span< const Cluster > clusters, gsl::span< const Track > tracks, const o2::dataformats::MCTruthContainer< MCClusterLabel > &inMCContainer)
const std::vector< MCCompLabel > & getTracksLabels()
Returns the tracks labels.
void run(o2::framework::ProcessingContext &pc)
void finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj)
void init(o2::framework::InitContext &ic)
~TrackerDeviceDPL()=default
TrackerDeviceDPL(std::shared_ptr< o2::base::GRPGeomRequest > gr, bool isMC, bool checkMasked)
constexpr o2::header::DataOrigin gDataOriginMID
Defining PrimaryVertex explicitly as messageable.
std::vector< ConfigParamSpec > ccdbParamSpec(std::string const &path, int runDependent, std::vector< CCDBMetadata > metadata={}, int qrate=0)
std::vector< ConfigParamSpec > Options
framework::DataProcessorSpec getTrackerSpec(bool isMC, bool checkMasked)
GeometryTransformer createTransformationFromManager(const TGeoManager *geoManager)
std::vector< Cluster > clusters
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"