20#include <fairlogger/Logger.h>
24void MCKinematicsReader::reportMissingSource(
int source,
size_t available)
26 throw std::out_of_range(
"MCKinematicsReader: there are " +
std::to_string(available) +
" sources; source " +
30void MCKinematicsReader::reportMissingEvent(
const char* what,
int source,
int event,
size_t available)
36void MCKinematicsReader::ensureTracksForSourceAndEvent(
int source,
int event)
const
46 for (
auto& perSource : mTracks) {
47 for (
auto tracks : perSource) {
53 for (
auto chain : mInputChains) {
58 if (mDigitizationContext && mOwningDigiContext) {
59 delete mDigitizationContext;
67 if (a.getTrackID() == b.getTrackID()) {
68 return a.getLength() < b.getLength();
70 return a.getTrackID() <
b.getTrackID();
75 for (
auto&
ref : refs) {
76 if (
ref.getTrackID() >= 0) {
77 indexedrefs.addElement(
ref.getTrackID(),
ref);
82void MCKinematicsReader::initTracksForSource(
int source)
const
87 auto br =
chain->GetBranch(
"MCTrack");
88 mTracks[
source].resize(br->GetEntries(),
nullptr);
92void MCKinematicsReader::loadTracksForSourceAndEvent(
int source,
int event)
const
97 auto br =
chain->GetBranch(
"MCTrack");
99 std::vector<MCTrack>* loadtracks =
nullptr;
100 br->SetAddress(&loadtracks);
106 auto clusterIt = br->GetTree()->GetClusterIterator(
event);
108 if (
event + 1 >= clusterIt.GetNextEntry()) {
109 br->DropBaskets(
"all");
117 if (mTracks.at(
source).at(eventID) !=
nullptr) {
118 delete mTracks[
source][eventID];
119 mTracks[
source][eventID] =
nullptr;
122 if (
static_cast<size_t>(eventID) < mTrackRefsLoaded.at(
source).size() && mTrackRefsLoaded[
source][eventID]) {
124 mTrackRefsLoaded[
source][eventID] =
false;
128void MCKinematicsReader::loadHeadersForSource(
int source)
const
133 auto br =
chain->GetBranch(
"MCEventHeader.");
136 br->SetAddress(&header);
137 mHeaders[
source].resize(br->GetEntries());
138 for (
int event = 0;
event < br->GetEntries(); ++
event) {
145 LOG(warn) <<
"MCHeader branch not found";
150void MCKinematicsReader::initTrackRefsForSource(
int source)
const
155 auto br =
chain->GetBranch(
"TrackRefs");
157 mIndexedTrackRefs[
source].resize(br->GetEntries());
158 mTrackRefsLoaded[
source].assign(br->GetEntries(),
false);
160 LOG(warn) <<
"TrackRefs branch not found";
165void MCKinematicsReader::loadTrackRefsForSourceAndEvent(
int source,
int event)
const
168 auto br = mInputChains[
source]->GetBranch(
"TrackRefs");
169 std::vector<o2::TrackReference>* refs =
nullptr;
170 br->SetAddress(&refs);
174 initIndexedTrackRefs(*refs, mIndexedTrackRefs[
source][
event]);
179 auto clusterIt = br->GetTree()->GetClusterIterator(
event);
181 if (
event + 1 >= clusterIt.GetNextEntry()) {
182 br->DropBaskets(
"all");
190 LOG(info) <<
"MCKinematicsReader already initialized; doing nothing";
195 mDigitizationContext = context;
201 mTracks.resize(mInputChains.size());
202 mHeaders.resize(mInputChains.size());
203 mIndexedTrackRefs.resize(mInputChains.size());
204 mTrackRefsLoaded.resize(mInputChains.size());
215 LOG(info) <<
"MCKinematicsReader already initialized; doing nothing";
223 mOwningDigiContext =
true;
230 LOG(info) <<
"MCKinematicsReader already initialized; doing nothing";
233 mInputChains.emplace_back(
new TChain(
"o2sim"));
237 mIndexedTrackRefs.resize(1);
238 mTrackRefsLoaded.resize(1);
std::vector< std::string > header
std::vector< o2::its::TrackITS > tracks
Definition of the Names Generator class.
static std::string getMCKinematicsFileName(const std::string_view prefix=STANDARDSIMPREFIX)
bool initSimKinematicsChains(std::vector< TChain * > &simkinematicschains) const
static DigitizationContext * loadFromFile(std::string_view filename="")
bool initFromKinematics(std::string_view filename)
inits the reader from a simple kinematics file
bool initFromDigitContext(std::string_view filename)
~MCKinematicsReader()
destructor
void releaseTracksForSourceAndEvent(int source, int event)
API to ask releasing tracks and track references (freeing memory) for source + event.
GLuint const GLchar * name
GLboolean GLboolean GLboolean b
GLsizei GLsizei GLchar * source
GLboolean GLboolean GLboolean GLboolean a
std::string to_string(gsl::span< T, Size > span)
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"