Project
Loading...
Searching...
No Matches
MCKinematicsReader.h
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
12#ifndef MC_KINEMATICS_READER_H
13#define MC_KINEMATICS_READER_H
14
21#include <vector>
22
23class TChain;
24
25namespace o2
26{
27
28namespace steer
29{
30
32{
33 public:
34 enum class Mode {
37 };
38
40 MCKinematicsReader() = default;
41
44
50 {
51 if (mode == Mode::kMCKine) {
53 } else if (mode == Mode::kDigiContext) {
55 }
56 }
57
63
66 bool initFromDigitContext(std::string_view filename);
67
69
71 bool initFromKinematics(std::string_view filename);
72
73 bool isInitialized() const { return mInitialized; }
74
77 MCTrack const* getTrack(o2::MCCompLabel const&) const;
78
81 MCTrack const* getTrack(int source, int event, int track) const;
82
85 MCTrack const* getTrack(int event, int track) const;
86
88 std::vector<MCTrack> const& getTracks(int source, int event) const;
89
92
94 std::vector<MCTrack> const& getTracks(int event) const;
95
97
99
101
103 gsl::span<o2::TrackReference> getTrackRefs(int source, int event, int track) const;
105 const std::vector<o2::TrackReference>& getTrackRefsByEvent(int source, int event) const;
107 gsl::span<o2::TrackReference> getTrackRefs(int event, int track) const;
108
111
113 size_t getNSources() const;
114
116 size_t getNEvents(int source) const;
117
119 {
120 return mDigitizationContext;
121 }
122
123 private:
124 void initTracksForSource(int source) const;
125 void loadTracksForSourceAndEvent(int source, int eventID) const;
126 void loadHeadersForSource(int source) const;
127 void loadTrackRefsForSource(int source) const;
128 void initIndexedTrackRefs(std::vector<o2::TrackReference>& refs, o2::dataformats::MCTruthContainer<o2::TrackReference>& indexedrefs) const;
129
130 DigitizationContext const* mDigitizationContext = nullptr;
131 bool mOwningDigiContext = false;
132
133 // chains for each source
134 std::vector<TChain*> mInputChains;
135
136 // a vector of tracks foreach source and each collision
137 mutable std::vector<std::vector<std::vector<o2::MCTrack>*>> mTracks; // the in-memory track container
138 mutable std::vector<std::vector<o2::dataformats::MCEventHeader>> mHeaders; // the in-memory header container
139 mutable std::vector<std::vector<o2::dataformats::MCTruthContainer<o2::TrackReference>>> mIndexedTrackRefs; // the in-memory track ref container
140
141 bool mInitialized = false; // whether initialized
142};
143
145{
146 const auto source = label.getSourceID();
147 const auto event = label.getEventID();
148 const auto track = label.getTrackID();
149 return getTrack(source, event, track);
150}
151
152inline MCTrack const* MCKinematicsReader::getTrack(int source, int event, int track) const
153{
154 return &getTracks(source, event)[track];
155}
156
157inline MCTrack const* MCKinematicsReader::getTrack(int event, int track) const
158{
159 return getTrack(0, event, track);
160}
161
162inline std::vector<MCTrack> const& MCKinematicsReader::getTracks(int source, int event) const
163{
164 if (mTracks[source].size() == 0) {
165 initTracksForSource(source);
166 }
167 if (mTracks[source][event] == nullptr) {
168 loadTracksForSourceAndEvent(source, event);
169 }
170 return *mTracks[source][event];
171}
172
173inline std::vector<MCTrack> const& MCKinematicsReader::getTracks(int event) const
174{
175 return getTracks(0, event);
176}
177
179{
180 if (mHeaders.at(source).size() == 0) {
181 loadHeadersForSource(source);
182 }
183 return mHeaders.at(source)[event];
184}
185
186inline gsl::span<o2::TrackReference> MCKinematicsReader::getTrackRefs(int source, int event, int track) const
187{
188 if (mIndexedTrackRefs[source].size() == 0) {
189 loadTrackRefsForSource(source);
190 }
191 return mIndexedTrackRefs[source][event].getLabels(track);
192}
193
194inline const std::vector<o2::TrackReference>& MCKinematicsReader::getTrackRefsByEvent(int source, int event) const
195{
196 if (mIndexedTrackRefs[source].size() == 0) {
197 loadTrackRefsForSource(source);
198 }
199 return mIndexedTrackRefs[source][event].getTruthArray();
200}
201
202inline gsl::span<o2::TrackReference> MCKinematicsReader::getTrackRefs(int event, int track) const
203{
204 return getTrackRefs(0, event, track);
205}
206
208{
209 return mTracks.size();
210}
211
213{
214 if (mTracks[source].size() == 0) {
215 initTracksForSource(source);
216 }
217 return mTracks[source].size();
218}
219
220} // namespace steer
221} // namespace o2
222
223#endif
Definition of the MCTrack class.
Definition of a container to keep Monte Carlo truth external to simulation objects.
A container to hold and manage MC truth information/labels.
bool initFromKinematics(std::string_view filename)
inits the reader from a simple kinematics file
bool initFromDigitContext(std::string_view filename)
DigitizationContext const * getDigitizationContext() const
MCKinematicsReader()=default
default constructor
MCTrack const * getTrack(o2::MCCompLabel const &) const
size_t getNEvents(int source) const
Get number of events.
MCKinematicsReader(std::string_view name, Mode mode=Mode::kDigiContext)
o2::dataformats::MCEventHeader const & getMCEventHeader(int source, int event) const
retrieves the MCEventHeader for a given eventID and sourceID
void releaseTracksForSourceAndEvent(int source, int event)
API to ask releasing tracks (freeing memory) for source + event.
size_t getNSources() const
Get number of sources.
const std::vector< o2::TrackReference > & getTrackRefsByEvent(int source, int event) const
return all track references associated to a source/event
MCKinematicsReader(o2::steer::DigitizationContext const *context)
constructing directly from a digitization context
gsl::span< o2::TrackReference > getTrackRefs(int source, int event, int track) const
get all primaries for a certain event
std::vector< MCTrack > const & getTracks(int source, int event) const
variant returning all tracks for source and event at once
struct _cl_event * event
Definition glcorearb.h:2982
GLenum mode
Definition glcorearb.h:266
GLsizeiptr size
Definition glcorearb.h:659
GLuint const GLchar * name
Definition glcorearb.h:781
GLsizei GLsizei GLchar * source
Definition glcorearb.h:798
GLuint GLsizei const GLchar * label
Definition glcorearb.h:2519
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
std::string filename()