Skip to content

Commit c73496c

Browse files
committed
Remapping fIndexMFTTracks and fIndexFwdTracks_MatchMCHTrack indices in O2fwdtrack
1 parent de4c4ab commit c73496c

1 file changed

Lines changed: 29 additions & 2 deletions

File tree

MC/utils/AODBcRewriter.C

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -900,6 +900,8 @@ static const PermMap *findPermByPrefix(
900900
// follow the published parent permutation;
901901
// * every fIndexTracks* / fIndexMFTTracks / fIndexFwdTracks reference is
902902
// remapped through it in processPasteJoinTables.
903+
// * O2fwdtrack match indices (fIndexMFTTracks, fIndexFwdTracks_MatchMCHTrack)
904+
// are remapped here after MFT/Fwd permutations are known.
903905
static bool isCollGroupedTrackTable(const std::string &tname) {
904906
static const char *kPrefixes[] = {"O2track_iu", "O2track",
905907
"O2mfttrack", "O2fwdtrack"};
@@ -916,6 +918,8 @@ static void stage1b_reorderTrackTables(
916918
const PermMap *collPermP = findPermByPrefix(allPerms, "O2collision_");
917919
if (!collPermP) return; // no collisions present — nothing to regroup against
918920

921+
std::unordered_map<std::string, std::vector<Long64_t>> deferredFwd;
922+
919923
TIter it(dirIn->GetListOfKeys());
920924
while (TKey *key = static_cast<TKey *>(it())) {
921925
if (TString(key->GetClassName()) != "TTree") continue;
@@ -960,9 +964,32 @@ static void stage1b_reorderTrackTables(
960964
rowOrder.reserve(nSrc);
961965
for (auto &e : entries) rowOrder.push_back(e.srcRow);
962966

967+
PermMap srcToOut(nSrc, -1);
968+
for (Long64_t outRow = 0; outRow < (Long64_t)rowOrder.size(); ++outRow)
969+
srcToOut[rowOrder[outRow]] = (Int_t)outRow;
970+
allPerms[tname] = std::move(srcToOut);
971+
972+
if (TString(tname.c_str()).BeginsWith("O2fwdtrack")) {
973+
deferredFwd[tname] = std::move(rowOrder);
974+
continue;
975+
}
976+
963977
// Reorder rows and remap fIndexCollisions values through collPerm.
964-
PermMap perm = rewriteTable(src, dirOut, rowOrder, "fIndexCollisions", *collPermP);
965-
allPerms[tname] = std::move(perm);
978+
rewriteTable(src, dirOut, rowOrder, "fIndexCollisions", *collPermP);
979+
written.insert(tname);
980+
}
981+
982+
const PermMap *mftPerm = findPermByPrefix(allPerms, "O2mfttrack");
983+
const PermMap *fwdPerm = findPermByPrefix(allPerms, "O2fwdtrack");
984+
for (auto &[tname, rowOrder] : deferredFwd) {
985+
TTree *src = dynamic_cast<TTree *>(dirIn->Get(tname.c_str()));
986+
if (!src) continue;
987+
std::vector<ExtraRemap> extraRemaps;
988+
if (mftPerm && src->GetBranch("fIndexMFTTracks"))
989+
extraRemaps.push_back({"fIndexMFTTracks", mftPerm});
990+
if (fwdPerm && src->GetBranch("fIndexFwdTracks_MatchMCHTrack"))
991+
extraRemaps.push_back({"fIndexFwdTracks_MatchMCHTrack", fwdPerm});
992+
rewriteTable(src, dirOut, rowOrder, "fIndexCollisions", *collPermP, extraRemaps);
966993
written.insert(tname);
967994
}
968995
}

0 commit comments

Comments
 (0)