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 chain : mInputChains) {
51 if (mDigitizationContext && mOwningDigiContext) {
52 delete mDigitizationContext;
60 if (a.getTrackID() == b.getTrackID()) {
61 return a.getLength() < b.getLength();
63 return a.getTrackID() <
b.getTrackID();
68 for (
auto&
ref : refs) {
69 if (
ref.getTrackID() >= 0) {
70 indexedrefs.addElement(
ref.getTrackID(),
ref);
75void MCKinematicsReader::initTracksForSource(
int source)
const
80 auto br =
chain->GetBranch(
"MCTrack");
81 mTracks[
source].resize(br->GetEntries(),
nullptr);
85void MCKinematicsReader::loadTracksForSourceAndEvent(
int source,
int event)
const
90 auto br =
chain->GetBranch(
"MCTrack");
92 std::vector<MCTrack>* loadtracks =
nullptr;
93 br->SetAddress(&loadtracks);
95 mTracks[
source][
event] =
new std::vector<o2::MCTrack>;
104 if (mTracks.at(
source).at(eventID) !=
nullptr) {
105 delete mTracks[
source][eventID];
106 mTracks[
source][eventID] =
nullptr;
110void MCKinematicsReader::loadHeadersForSource(
int source)
const
115 auto br =
chain->GetBranch(
"MCEventHeader.");
118 br->SetAddress(&header);
119 mHeaders[
source].resize(br->GetEntries());
120 for (
int event = 0;
event < br->GetEntries(); ++
event) {
127 LOG(warn) <<
"MCHeader branch not found";
132void MCKinematicsReader::loadTrackRefsForSource(
int source)
const
137 auto br =
chain->GetBranch(
"TrackRefs");
139 std::vector<o2::TrackReference>* refs =
nullptr;
140 br->SetAddress(&refs);
141 mIndexedTrackRefs[
source].resize(br->GetEntries());
142 for (
int event = 0;
event < br->GetEntries(); ++
event) {
146 initIndexedTrackRefs(*refs, mIndexedTrackRefs[
source][
event]);
152 LOG(warn) <<
"TrackRefs branch not found";
160 LOG(info) <<
"MCKinematicsReader already initialized; doing nothing";
165 mDigitizationContext = context;
171 mTracks.resize(mInputChains.size());
172 mHeaders.resize(mInputChains.size());
173 mIndexedTrackRefs.resize(mInputChains.size());
184 LOG(info) <<
"MCKinematicsReader already initialized; doing nothing";
192 mOwningDigiContext =
true;
199 LOG(info) <<
"MCKinematicsReader already initialized; doing nothing";
202 mInputChains.emplace_back(
new TChain(
"o2sim"));
206 mIndexedTrackRefs.resize(1);
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 (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"