Skip to content

Commit 3f3e174

Browse files
javiereccjavierecc
andauthored
Add MCH clusters to AO2Ds (#12421)
* Add MCH clusters to AO2Ds * use truncateFloatFraction for added MCH clsuter position --------- Co-authored-by: javierecc <javier.castillo.castellanos@cern.ch>
1 parent fb00c8b commit 3f3e174

File tree

4 files changed

+70
-5
lines changed

4 files changed

+70
-5
lines changed

Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ class AODProducerWorkflowDPL : public Task
507507
// * interaction time is for TOF information
508508
template <typename TracksCursorType, typename TracksCovCursorType, typename TracksExtraCursorType, typename TracksQACursorType, typename AmbigTracksCursorType,
509509
typename MFTTracksCursorType, typename AmbigMFTTracksCursorType,
510-
typename FwdTracksCursorType, typename FwdTracksCovCursorType, typename AmbigFwdTracksCursorType>
510+
typename FwdTracksCursorType, typename FwdTracksCovCursorType, typename AmbigFwdTracksCursorType, typename FwdTrkClsCursorType>
511511
void fillTrackTablesPerCollision(int collisionID,
512512
std::uint64_t collisionBC,
513513
const o2::dataformats::VtxTrackRef& trackRef,
@@ -523,8 +523,12 @@ class AODProducerWorkflowDPL : public Task
523523
FwdTracksCursorType& fwdTracksCursor,
524524
FwdTracksCovCursorType& fwdTracksCovCursor,
525525
AmbigFwdTracksCursorType& ambigFwdTracksCursor,
526+
FwdTrkClsCursorType& fwdTrkClsCursor,
526527
const std::map<uint64_t, int>& bcsMap);
527528

529+
template <typename FwdTrkClsCursorType>
530+
void addClustersToFwdTrkClsTable(const o2::globaltracking::RecoContainer& recoData, FwdTrkClsCursorType& fwdTrkClsCursor, GIndex trackID, int fwdTrackId);
531+
528532
void fillIndexTablesPerCollision(const o2::dataformats::VtxTrackRef& trackRef, const gsl::span<const GIndex>& GIndices, const o2::globaltracking::RecoContainer& data);
529533

530534
template <typename V0CursorType, typename CascadeCursorType, typename Decay3bodyCursorType>

Detectors/AOD/src/AODProducerWorkflowSpec.cxx

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ void AODProducerWorkflowDPL::addToMFTTracksTable(mftTracksCursorType& mftTracksC
409409

410410
template <typename TracksCursorType, typename TracksCovCursorType, typename TracksExtraCursorType, typename TracksQACursorType, typename AmbigTracksCursorType,
411411
typename MFTTracksCursorType, typename AmbigMFTTracksCursorType,
412-
typename FwdTracksCursorType, typename FwdTracksCovCursorType, typename AmbigFwdTracksCursorType>
412+
typename FwdTracksCursorType, typename FwdTracksCovCursorType, typename AmbigFwdTracksCursorType, typename FwdTrkClsCursorType>
413413
void AODProducerWorkflowDPL::fillTrackTablesPerCollision(int collisionID,
414414
std::uint64_t collisionBC,
415415
const o2::dataformats::VtxTrackRef& trackRef,
@@ -425,6 +425,7 @@ void AODProducerWorkflowDPL::fillTrackTablesPerCollision(int collisionID,
425425
FwdTracksCursorType& fwdTracksCursor,
426426
FwdTracksCovCursorType& fwdTracksCovCursor,
427427
AmbigFwdTracksCursorType& ambigFwdTracksCursor,
428+
FwdTrkClsCursorType& fwdTrkClsCursor,
428429
const std::map<uint64_t, int>& bcsMap)
429430
{
430431
for (int src = GIndex::NSources; src--;) {
@@ -460,6 +461,7 @@ void AODProducerWorkflowDPL::fillTrackTablesPerCollision(int collisionID,
460461
}
461462
addToFwdTracksTable(fwdTracksCursor, fwdTracksCovCursor, ambigFwdTracksCursor, trackIndex, data, collisionID, collisionBC, bcsMap);
462463
mGIDToTableFwdID.emplace(trackIndex, mTableTrFwdID);
464+
addClustersToFwdTrkClsTable(data, fwdTrkClsCursor, trackIndex, mTableTrFwdID);
463465
mTableTrFwdID++;
464466
} else {
465467
// barrel track: normal tracks table
@@ -1284,6 +1286,37 @@ void AODProducerWorkflowDPL::fillSecondaryVertices(const o2::globaltracking::Rec
12841286
}
12851287
}
12861288

1289+
template <typename FwdTrkClsCursorType>
1290+
void AODProducerWorkflowDPL::addClustersToFwdTrkClsTable(const o2::globaltracking::RecoContainer& recoData, FwdTrkClsCursorType& fwdTrkClsCursor, GIndex trackID, int fwdTrackId)
1291+
{
1292+
const auto& mchTracks = recoData.getMCHTracks();
1293+
const auto& mchmidMatches = recoData.getMCHMIDMatches();
1294+
const auto& mchClusters = recoData.getMCHTrackClusters();
1295+
1296+
int mchTrackID = -1;
1297+
if (trackID.getSource() == GIndex::MCH) { // This is an MCH track
1298+
mchTrackID = trackID.getIndex();
1299+
} else if (trackID.getSource() == GIndex::MCHMID) { // This is an MCH-MID track
1300+
auto mchmidMatch = mchmidMatches[trackID.getIndex()];
1301+
mchTrackID = mchmidMatch.getMCHRef().getIndex();
1302+
} // Others are Global Forward Tracks, their clusters will be or were added with the corresponding MCH track
1303+
1304+
if (mchTrackID > -1 && mchTrackID < mchTracks.size()) {
1305+
const auto& mchTrack = mchTracks[mchTrackID];
1306+
fwdTrkClsCursor.reserve(mchTrack.getNClusters() + fwdTrkClsCursor.lastIndex());
1307+
int first = mchTrack.getFirstClusterIdx();
1308+
int last = mchTrack.getLastClusterIdx();
1309+
for (int i = first; i <= last; i++) {
1310+
const auto& cluster = mchClusters[i];
1311+
fwdTrkClsCursor(fwdTrackId,
1312+
truncateFloatFraction(cluster.x, mMuonCl),
1313+
truncateFloatFraction(cluster.y, mMuonCl),
1314+
truncateFloatFraction(cluster.z, mMuonCl),
1315+
(((cluster.ey < 5.) & 0x1) << 12) | (((cluster.ex < 5.) & 0x1) << 11) | cluster.getDEId());
1316+
}
1317+
}
1318+
}
1319+
12871320
template <typename HMPCursorType>
12881321
void AODProducerWorkflowDPL::fillHMPID(const o2::globaltracking::RecoContainer& recoData, HMPCursorType& hmpCursor)
12891322
{
@@ -1798,6 +1831,7 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
17981831
auto fv0aCursor = createTableCursor<o2::aod::FV0As>(pc);
17991832
auto fwdTracksCursor = createTableCursor<o2::aod::StoredFwdTracks>(pc);
18001833
auto fwdTracksCovCursor = createTableCursor<o2::aod::StoredFwdTracksCov>(pc);
1834+
auto fwdTrkClsCursor = createTableCursor<o2::aod::FwdTrkCls>(pc);
18011835
auto mcColLabelsCursor = createTableCursor<o2::aod::McCollisionLabels>(pc);
18021836
auto mcCollisionsCursor = createTableCursor<o2::aod::McCollisions>(pc);
18031837
auto mcMFTTrackLabelCursor = createTableCursor<o2::aod::McMFTTrackLabels>(pc);
@@ -2115,7 +2149,7 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
21152149
// fixme: interaction time is undefined for unassigned tracks (?)
21162150
fillTrackTablesPerCollision(-1, std::uint64_t(-1), trackRef, primVerGIs, recoData, tracksCursor, tracksCovCursor, tracksExtraCursor, tracksQACursor,
21172151
ambigTracksCursor, mftTracksCursor, ambigMFTTracksCursor,
2118-
fwdTracksCursor, fwdTracksCovCursor, ambigFwdTracksCursor, bcsMap);
2152+
fwdTracksCursor, fwdTracksCovCursor, ambigFwdTracksCursor, fwdTrkClsCursor, bcsMap);
21192153

21202154
// filling collisions and tracks into tables
21212155
collisionID = 0;
@@ -2157,7 +2191,7 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
21572191
// passing interaction time in [ps]
21582192
fillTrackTablesPerCollision(collisionID, globalBC, trackRef, primVerGIs, recoData, tracksCursor, tracksCovCursor, tracksExtraCursor, tracksQACursor, ambigTracksCursor,
21592193
mftTracksCursor, ambigMFTTracksCursor,
2160-
fwdTracksCursor, fwdTracksCovCursor, ambigFwdTracksCursor, bcsMap);
2194+
fwdTracksCursor, fwdTracksCovCursor, ambigFwdTracksCursor, fwdTrkClsCursor, bcsMap);
21612195
collisionID++;
21622196
}
21632197

@@ -2940,6 +2974,7 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool enableSV, boo
29402974
OutputForTable<AmbiguousTracks>::spec(),
29412975
OutputForTable<AmbiguousMFTTracks>::spec(),
29422976
OutputForTable<AmbiguousFwdTracks>::spec(),
2977+
OutputForTable<FwdTrkCls>::spec(),
29432978
OutputForTable<V0s>::spec(),
29442979
OutputForTable<HMPIDs>::spec(),
29452980
OutputForTable<Zdcs>::spec(),

Framework/Core/include/Framework/AnalysisDataModel.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -770,6 +770,32 @@ DECLARE_SOA_TABLE(AmbiguousFwdTracks, "AOD", "AMBIGUOUSFWDTR", //! Table for Fwd
770770

771771
using AmbiguousFwdTrack = AmbiguousFwdTracks::iterator;
772772

773+
// Forward Tracks Cluster information
774+
namespace fwdtrkcl
775+
{
776+
DECLARE_SOA_INDEX_COLUMN(FwdTrack, fwdtrack); //! Track index
777+
DECLARE_SOA_COLUMN(X, x, float); //! Cluster x coordinate
778+
DECLARE_SOA_COLUMN(Y, y, float); //! Cluster y coordinate
779+
DECLARE_SOA_COLUMN(Z, z, float); //! Cluster z coordinate
780+
DECLARE_SOA_COLUMN(ClInfo, clInfo, uint16_t); //! Encoded detection element of cluster and cluster type along x and y
781+
DECLARE_SOA_DYNAMIC_COLUMN(DEId, deId, [](uint16_t info) -> uint16_t { return (info & 0x7FF); });
782+
DECLARE_SOA_DYNAMIC_COLUMN(IsGoodX, isGoodX, [](uint16_t info) -> bool { return ((info & 0x800) >> 11); });
783+
DECLARE_SOA_DYNAMIC_COLUMN(IsGoodY, isGoodY, [](uint16_t info) -> bool { return ((info & 0x1000) >> 12); });
784+
} // namespace fwdtrkcl
785+
786+
DECLARE_SOA_TABLE(FwdTrkCls, "AOD", "FWDTRKCL", //! Forward Track Cluster information
787+
o2::soa::Index<>,
788+
fwdtrkcl::FwdTrackId,
789+
fwdtrkcl::X,
790+
fwdtrkcl::Y,
791+
fwdtrkcl::Z,
792+
fwdtrkcl::ClInfo,
793+
fwdtrkcl::DEId<fwdtrkcl::ClInfo>,
794+
fwdtrkcl::IsGoodX<fwdtrkcl::ClInfo>,
795+
fwdtrkcl::IsGoodY<fwdtrkcl::ClInfo>);
796+
797+
using FwdTrkCl = FwdTrkCls::iterator;
798+
773799
// HMPID information
774800
namespace hmpid
775801
{

scripts/datamodel-doc/inputCard.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
o2::aod::Tracks, o2::aod::TracksIU, o2::aod::TracksCov, o2::aod::TracksCovIU, o2::aod::TracksExtra, o2::aod::StoredTracks, o2::aod::StoredTracksIU, o2::aod::StoredTracksCov, o2::aod::StoredTracksCovIU, o2::aod::StoredTracksExtra, o2::aod::MFTTracks, o2::aod::StoredMFTTracks, o2::aod::FwdTracks, o2::aod::FwdTracksCov, o2::aod::StoredFwdTracks, o2::aod::StoredFwdTracksCov, o2::aod::AmbiguousTracks, o2::aod::AmbiguousMFTTracks, o2::aod::AmbiguousFwdTracks
107107
</category>
108108
<category name="Detectors">
109-
o2::aod::FV0As, o2::aod::FT0s, o2::aod::FDDs, so2::aod::HMPIDs, o2::aod::Calos, o2::aod::CaloTriggers, o2::aod::Zdcs, o2::aod::FV0Cs, o2::aod::HMPIDs, o2::aod::CPVClusters
109+
o2::aod::FV0As, o2::aod::FT0s, o2::aod::FDDs, so2::aod::HMPIDs, o2::aod::Calos, o2::aod::CaloTriggers, o2::aod::Zdcs, o2::aod::FV0Cs, o2::aod::HMPIDs, o2::aod::CPVClusters, o2::aod::FwdTrkCls
110110
</category>
111111
<category name="Strangeness">
112112
o2::aod::V0s, o2::aod::TransientV0s, o2::aod::StoredV0s, o2::aod::Cascades, o2::aod::TransientCascades, o2::aod::StoredCascades, o2::aod::Decays3Body

0 commit comments

Comments
 (0)