61 const auto& parts = digitizationContext->getEventParts();
74 for (
auto&
rec : records) {
77 auto& colparts = parts[
index];
80 auto eventID = colparts[0].entryID;
81 auto sourceID = colparts[0].sourceID;
89 mcCollCursor(0, 0 , 0 , header.GetX(), header.GetY(), header.GetZ(),
time, 1. , header.GetB(), 0.0);
93 auto mccoltable = mcCollBuilder.
finalize();
95 TFile outfile(
"aod.root",
"UPDATE");
97 TableToTree t2t(mccoltable, &outfile, aod::description_str(aod::signature<o2::aod::McCollisions::ref>()).
data());
107 TFile
f(
"o2_primary_vertex.root",
"OPEN");
108 auto t = (TTree*)
f.Get(
"o2sim");
111 auto tpctracks = fetchTracks<o2::tpc::TrackTPC>(
"tpctracks.root",
"tpcrec",
"TPCTracks");
112 auto itstracks = fetchTracks<o2::its::TrackITS>(
"o2trac_its.root",
"o2sim",
"ITSTrack");
113 auto itstpctracks = fetchTracks<o2::dataformats::TrackTPCITS>(
"o2match_itstpc.root",
"matchTPCITS",
"TPCITS");
114 LOG(info) <<
"FOUND " << tpctracks->size() <<
" TPC tracks";
115 LOG(info) <<
"FOUND " << itstracks->size() <<
" ITS tracks";
116 LOG(info) <<
"FOUND " << itstpctracks->size() <<
" ITCTPC tracks";
119 auto br = t->GetBranch(
"PrimaryVertex");
120 std::vector<o2::dataformats::PrimaryVertex>* vertices =
nullptr;
121 br->SetAddress(&vertices);
125 auto indexbr = t->GetBranch(
"PVTrackIndices");
126 std::vector<GIndex>* vertexTrackIDs =
nullptr;
127 indexbr->SetAddress(&vertexTrackIDs);
128 indexbr->GetEntry(0);
131 auto v2totrackrefbr = t->GetBranch(
"PV2TrackRefs");
132 std::vector<o2::dataformats::VtxTrackRef>* v2trackref =
nullptr;
133 v2totrackrefbr->SetAddress(&v2trackref);
134 v2totrackrefbr->GetEntry(0);
136 if (vertices && vertexTrackIDs) {
141 auto trackCursor = trackBuilder.
cursor<o2::aod::StoredTracks>();
144 for (
auto&
v : *vertices) {
150 auto& cov =
v.getCov();
151 auto& ts =
v.getTimeStamp();
154 collCursor(0, BCid,
v.getX(),
v.getY(),
v.getZ(),
155 cov[0], cov[1], cov[2], cov[3], cov[4], cov[6],
156 v.getFlags(),
v.getChi2(),
v.getNContributors(), ts.getTimeStamp(), ts.getTimeStampError());
160 auto& trackref = (*v2trackref)[
index];
161 int start = trackref.getFirstEntryOfSource(0);
162 int ntracks = trackref.getEntriesOfSource(0);
163 for (
int ti = 0; ti < ntracks; ++ti) {
164 auto trackindex = (*vertexTrackIDs)[
start + ti];
167 const auto source = trackindex.getSource();
170 track = &((*tpctracks)[trackindex.getIndex()]);
172 track = &((*itstracks)[trackindex.getIndex()]);
174 track = &((*itstpctracks)[trackindex.getIndex()]);
176 LOG(warning) <<
"Unsupported track source";
190 std::array<float, 3> pxpypz;
191 track->getPxPyPzGlo(pxpypz);
192 trackCursor(0,
index, 0 , track->getX(), track->getAlpha(), track->getY(), track->getZ(), track->getSnp(), track->getTgl(),
197 auto colltable = collBuilder.
finalize();
198 auto tracktable = trackBuilder.finalize();
201 TFile outfile(
"aod.root",
"RECREATE");
203 TableToTree t2t(colltable, &outfile, aod::description_str(aod::signature<o2::aod::Collisions::ref>()).
data());
208 TableToTree t2t(tracktable, &outfile, aod::description_str(aod::signature<o2::aod::StoredTracks::ref>()).
data());
std::vector< o2::InteractionTimeRecord > & getEventRecords(bool withQED=false)