Project
Loading...
Searching...
No Matches
TRDTrackletReaderSpec.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
13
15
18#include "fairlogger/Logger.h"
20
21using namespace o2::framework;
22
23namespace o2
24{
25namespace trd
26{
27
29{
30 // get the option from the init context
31 LOG(info) << "Init TRD tracklet reader!";
32 mInFileNameTrklt = o2::utils::Str::concat_string(o2::utils::Str::rectifyDirectory(ic.options().get<std::string>("input-dir")), ic.options().get<std::string>("trd-tracklet-infile"));
33 mInFileNameCTrklt = o2::utils::Str::concat_string(o2::utils::Str::rectifyDirectory(ic.options().get<std::string>("input-dir")), ic.options().get<std::string>("trd-calib-tracklet-infile"));
34 mInTreeNameTrklt = ic.options().get<std::string>("treename");
35 connectTree();
36 if (mUseTrackletTransform) {
37 connectTreeCTracklet();
38 }
39}
40
41void TRDTrackletReader::connectTreeCTracklet()
42{
43 mTreeCTrklt.reset(nullptr); // in case it was already loaded
44 mFileCTrklt.reset(TFile::Open(mInFileNameCTrklt.c_str()));
45 assert(mFileCTrklt && !mFileCTrklt->IsZombie());
46 mTreeCTrklt.reset((TTree*)mFileCTrklt->Get("ctracklets"));
47 assert(mTreeCTrklt);
48 mTreeCTrklt->SetBranchAddress("CTracklets", &mTrackletsCalPtr);
49 mTreeCTrklt->SetBranchAddress("TrigRecMask", &mTrigRecMaskPtr);
50 LOG(info) << "Loaded tree from trdcalibratedtracklets.root with " << mTreeCTrklt->GetEntries() << " entries";
51}
52
53void TRDTrackletReader::connectTree()
54{
55 mTreeTrklt.reset(nullptr); // in case it was already loaded
56 mFileTrklt.reset(TFile::Open(mInFileNameTrklt.c_str()));
57 assert(mFileTrklt && !mFileTrklt->IsZombie());
58 mTreeTrklt.reset((TTree*)mFileTrklt->Get(mInTreeNameTrklt.c_str()));
59 assert(mTreeTrklt);
60 mTreeTrklt->SetBranchAddress("Tracklet", &mTrackletsPtr);
61 mTreeTrklt->SetBranchAddress("TrackTrg", &mTriggerRecordsPtr);
62 if (mUseMC) {
63 mTreeTrklt->SetBranchAddress("TRKLabels", &mLabelsPtr);
64 }
65 LOG(info) << "Loaded tree from " << mInFileNameTrklt << " with " << mTreeTrklt->GetEntries() << " entries";
66}
67
69{
70 auto currEntry = mTreeTrklt->GetReadEntry() + 1;
71 assert(currEntry < mTreeTrklt->GetEntries()); // this should not happen
72 mTreeTrklt->GetEntry(currEntry);
73 LOG(info) << "Pushing " << mTriggerRecords.size() << " TRD trigger records at entry " << currEntry;
74 LOG(info) << "Pushing " << mTracklets.size() << " uncalibrated TRD tracklets for these trigger records";
75 pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "TRACKLETS", 0}, mTracklets);
76 if (mUseTrackletTransform) {
77 assert(mTreeTrklt->GetEntries() == mTreeCTrklt->GetEntries());
78 mTreeCTrklt->GetEntry(currEntry);
79 LOG(info) << "Pushing " << mTrackletsCal.size() << " calibrated TRD tracklets for these trigger records";
80 LOG(info) << "Pushing " << mTrigRecMask.size() << " flags for the given TRD trigger records";
81 pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "CTRACKLETS", 0}, mTrackletsCal);
82 pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "TRIGRECMASK", 0}, mTrigRecMask);
83 }
84
85 pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "TRKTRGRD", 0}, mTriggerRecords);
86 if (mUseMC) {
87 LOG(info) << "Pushing " << mLabels.getNElements() << " TRD tracklet labels";
88 pc.outputs().snapshot(Output{"TRD", "TRKLABELS", 0}, mLabels);
89 }
90
91 if (mTreeTrklt->GetReadEntry() + 1 >= mTreeTrklt->GetEntries()) {
93 pc.services().get<ControlService>().readyToQuit(QuitRequest::Me);
94 }
95}
96
97DataProcessorSpec getTRDTrackletReaderSpec(bool useMC, bool useCalibratedTracklets)
98{
99 std::vector<OutputSpec> outputs;
100 if (useCalibratedTracklets) {
101 outputs.emplace_back(o2::header::gDataOriginTRD, "CTRACKLETS", 0, Lifetime::Timeframe);
102 outputs.emplace_back(o2::header::gDataOriginTRD, "TRIGRECMASK", 0, Lifetime::Timeframe);
103 }
104 outputs.emplace_back(o2::header::gDataOriginTRD, "TRACKLETS", 0, Lifetime::Timeframe);
105 outputs.emplace_back(o2::header::gDataOriginTRD, "TRKTRGRD", 0, Lifetime::Timeframe);
106 if (useMC) {
107 outputs.emplace_back("TRD", "TRKLABELS", 0, Lifetime::Timeframe);
108 }
109
110 return DataProcessorSpec{
111 "TRDTrackletReader",
112 Inputs{},
113 outputs,
114 AlgorithmSpec{adaptFromTask<TRDTrackletReader>(useMC, useCalibratedTracklets)},
115 Options{
116 {"trd-tracklet-infile", VariantType::String, "trdtracklets.root", {"Name of the tracklets input file"}},
117 {"trd-calib-tracklet-infile", VariantType::String, "trdcalibratedtracklets.root", {"Name of the calibrated tracklets input file"}},
118 {"input-dir", VariantType::String, "none", {"Input directory"}},
119 {"treename", VariantType::String, "o2sim", {"Name of top-level TTree"}},
120 }};
121}
122
123} // namespace trd
124} // namespace o2
Definition of the Names Generator class.
void snapshot(const Output &spec, T const &object)
ConfigParamRegistry const & options()
Definition InitContext.h:33
DataAllocator & outputs()
The data allocator is used to allocate memory for the output data.
ServiceRegistryRef services()
The services registry associated with this processing context.
virtual void endOfStream(EndOfStreamContext &context)
This is invoked whenever we have an EndOfStream event.
Definition Task.h:43
void run(o2::framework::ProcessingContext &pc) final
void init(o2::framework::InitContext &ic) final
constexpr o2::header::DataOrigin gDataOriginTRD
Definition DataHeader.h:577
Defining PrimaryVertex explicitly as messageable.
Definition TFIDInfo.h:20
std::vector< ConfigParamSpec > Options
std::vector< InputSpec > Inputs
framework::DataProcessorSpec getTRDTrackletReaderSpec(bool useMC, bool useCalibratedTracklets)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
static std::string rectifyDirectory(const std::string_view p)
static std::string concat_string(Ts const &... ts)
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"