Project
Loading...
Searching...
No Matches
TRDTrackReaderSpec.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
21
23
24namespace o2
25{
26namespace trd
27{
28
30{
31
32 mFileName = o2::utils::Str::concat_string(o2::utils::Str::rectifyDirectory(ic.options().get<std::string>("input-dir")),
33 ic.options().get<std::string>("track-infile"));
34
35 connectTree(mFileName);
36}
37
39{
40 auto ent = mTree->GetReadEntry() + 1;
41 assert(ent < mTree->GetEntries()); // this should not happen
42 mTree->GetEntry(ent);
43 LOG(info) << "Pushing " << mTracks.size() << " tracks and " << mTrigRec.size() << " trigger records at entry " << ent;
44 if (mUseMC) {
45 if (mLabelsTrd.size() != mLabelsMatch.size()) {
46 LOG(error) << "The number of labels for matches and for TRD tracks is different. " << mLabelsTrd.size() << " TRD labels vs. " << mLabelsMatch.size() << " match labels";
47 }
48 LOG(info) << "Pushing " << mLabelsTrd.size() << " MC labels at entry " << ent;
49 }
50
51 if (mMode == Mode::TPCTRD) {
52 uint32_t ss = o2::globaltracking::getSubSpec(mSubSpecStrict ? o2::globaltracking::MatchingType::Strict : o2::globaltracking::MatchingType::Standard);
53 pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "MATCH_TPC", ss}, mTracks);
54 pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "TRGREC_TPC", ss}, mTrigRec);
55 if (mUseMC) {
56 pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "MCLB_TPC", ss}, mLabelsMatch);
57 pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "MCLB_TPC_TRD", ss}, mLabelsTrd);
58 }
59 } else if (mMode == Mode::ITSTPCTRD) {
60 pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "MATCH_ITSTPC", 0}, mTracks);
61 pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "TRGREC_ITSTPC", 0}, mTrigRec);
62 if (mUseMC) {
63 pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "MCLB_ITSTPC", 0}, mLabelsMatch);
64 pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "MCLB_ITSTPC_TRD", 0}, mLabelsTrd);
65 }
66 }
67
68 if (mTree->GetReadEntry() + 1 >= mTree->GetEntries()) {
70 pc.services().get<ControlService>().readyToQuit(QuitRequest::Me);
71 }
72}
73
74void TRDTrackReader::connectTree(const std::string& filename)
75{
76 mTree.reset(nullptr); // in case it was already loaded
77 mFile.reset(TFile::Open(filename.c_str()));
78 assert(mFile && !mFile->IsZombie());
79 mTree.reset((TTree*)mFile->Get("tracksTRD"));
80 assert(mTree);
81 mTree->SetBranchAddress("tracks", &mTracksPtr);
82 mTree->SetBranchAddress("trgrec", &mTrigRecPtr);
83 if (mUseMC) {
84 mTree->SetBranchAddress("labels", &mLabelsMatchPtr);
85 mTree->SetBranchAddress("labelsTRD", &mLabelsTrdPtr);
86 }
87 LOG(info) << "Loaded tree from " << filename << " with " << mTree->GetEntries() << " entries";
88}
89
90DataProcessorSpec getTRDTPCTrackReaderSpec(bool useMC, bool subSpecStrict)
91{
92 std::vector<OutputSpec> outputs;
93 uint32_t sspec = o2::globaltracking::getSubSpec(subSpecStrict ? o2::globaltracking::MatchingType::Strict : o2::globaltracking::MatchingType::Standard);
94 outputs.emplace_back(o2::header::gDataOriginTRD, "MATCH_TPC", sspec, Lifetime::Timeframe);
95 outputs.emplace_back(o2::header::gDataOriginTRD, "TRGREC_TPC", sspec, Lifetime::Timeframe);
96
97 if (useMC) {
98 outputs.emplace_back(o2::header::gDataOriginTRD, "MCLB_TPC", sspec, Lifetime::Timeframe);
99 outputs.emplace_back(o2::header::gDataOriginTRD, "MCLB_TPC_TRD", sspec, Lifetime::Timeframe);
100 }
101 return DataProcessorSpec{
102 "tpctrd-track-reader",
103 Inputs{},
104 outputs,
105 AlgorithmSpec{adaptFromTask<TRDTrackReader>(useMC, TRDTrackReader::Mode::TPCTRD, subSpecStrict)},
106 Options{
107 {"track-infile", VariantType::String, "trdmatches_tpc.root", {"Name of the input file for TPC-TRD matches"}},
108 {"input-dir", VariantType::String, "none", {"Input directory"}}}};
109}
110
112{
113 std::vector<OutputSpec> outputs;
114 outputs.emplace_back(o2::header::gDataOriginTRD, "MATCH_ITSTPC", 0, Lifetime::Timeframe);
115 outputs.emplace_back(o2::header::gDataOriginTRD, "TRGREC_ITSTPC", 0, Lifetime::Timeframe);
116 if (useMC) {
117 outputs.emplace_back(o2::header::gDataOriginTRD, "MCLB_ITSTPC", 0, Lifetime::Timeframe);
118 outputs.emplace_back(o2::header::gDataOriginTRD, "MCLB_ITSTPC_TRD", 0, Lifetime::Timeframe);
119 }
120
121 return DataProcessorSpec{
122 "itstpctrd-track-reader",
123 Inputs{},
124 outputs,
125 AlgorithmSpec{adaptFromTask<TRDTrackReader>(useMC, TRDTrackReader::Mode::ITSTPCTRD)},
126 Options{
127 {"track-infile", VariantType::String, "trdmatches_itstpc.root", {"Name of the input file for ITS-TPC-TRD matches"}},
128 {"input-dir", VariantType::String, "none", {"Input directory"}}}};
129}
130
131} // namespace trd
132} // namespace o2
Global index for barrel track: provides provenance (detectors combination), index in respective array...
Defintions for the inter-detector matching type.
Type wrappers for enfording a specific serialization method.
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(ProcessingContext &pc) final
void init(InitContext &ic) final
constexpr o2::header::DataOrigin gDataOriginTRD
Definition DataHeader.h:577
std::vector< ConfigParamSpec > Options
std::vector< InputSpec > Inputs
framework::DataProcessorSpec getTRDTPCTrackReaderSpec(bool useMC, bool subSpecStrict=false)
read TPC-TRD matched tracks from a root file
framework::DataProcessorSpec getTRDGlobalTrackReaderSpec(bool useMC)
read ITS-TPC-TRD matched tracks from a root file
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
std::string filename()
static std::string rectifyDirectory(const std::string_view p)
static std::string concat_string(Ts const &... ts)
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"