@@ -81,14 +81,7 @@ DECLARE_SOA_TABLE(ResoCollisions, "AOD", "RESOCOLLISION",
8181 collision::PosY,
8282 collision::PosZ,
8383 resocollision::Cent,
84- resocollision::Spherocity,
85- resocollision::EvtPl,
86- resocollision::EvtPlResAB,
87- resocollision::EvtPlResAC,
88- resocollision::EvtPlResBC,
89- resocollision::BMagField,
90- timestamp::Timestamp,
91- evsel::NumTracksInTimeRange);
84+ resocollision::BMagField);
9285using ResoCollision = ResoCollisions::iterator;
9386
9487DECLARE_SOA_TABLE (ResoMCCollisions, " AOD" , " RESOMCCOLLISION" ,
@@ -139,6 +132,36 @@ using ResoCollisionDF = ResoCollisionDFs::iterator;
139132// inspired from PWGCF/DataModel/FemtoDerived.h
140133namespace resodaughter
141134{
135+ struct ResoTrackFlags {
136+ public:
137+ typedef uint8_t flagtype;
138+ static constexpr flagtype kPassedITSRefit = 1 << 0 ;
139+ static constexpr flagtype kPassedTPCRefit = 1 << 1 ;
140+ static constexpr flagtype kIsGlobalTrackWoDCA = 1 << 2 ;
141+ static constexpr flagtype kIsGlobalTrack = 1 << 3 ;
142+ static constexpr flagtype kIsPrimaryTrack = 1 << 4 ;
143+ static constexpr flagtype kIsPVContributor = 1 << 5 ;
144+ static constexpr flagtype kHasTOF = 1 << 6 ;
145+ static constexpr flagtype kSign = 1 << 7 ;
146+ // / @brief check if the flag is set
147+ static bool checkFlag (const flagtype flags, const flagtype mask)
148+ {
149+ return (flags & mask) == mask;
150+ }
151+ };
152+ #define requireTrackFlag (mask ) ((o2::aod::resodaughter::trackFlags & o2::aod::resodaughter::mask) == o2::aod::resodaughter::mask)
153+
154+ #define requirePassedITSRefit () requireTrackFlag(ResoTrackFlags::kPassedITSRefit )
155+ #define requirePassedTPCRefit () requireTrackFlag(ResoTrackFlags::kPassedTPCRefit )
156+ #define requireGlobalTrack () requireTrackFlag(ResoTrackFlags::kIsGlobalTrack )
157+ #define requireGlobalTrackWoDCA () requireTrackFlag(ResoTrackFlags::kIsGlobalTrackWoDCA )
158+ #define requirePrimaryTrack () requireTrackFlag(ResoTrackFlags::kIsPrimaryTrack )
159+ #define requirePVContributor () requireTrackFlag(ResoTrackFlags::kIsPVContributor )
160+ #define requireHasTOF () requireTrackFlag(ResoTrackFlags::kHasTOF )
161+ #define requireSign () requireTrackFlag(ResoTrackFlags::kSign )
162+
163+ #define DECLARE_DYN_TRKSEL_COLUMN (name, getter, mask ) \
164+ DECLARE_SOA_DYNAMIC_COLUMN (name, getter, [](ResoTrackFlags::flagtype flags) -> bool { return ResoTrackFlags::checkFlag (flags, mask); });
142165
143166DECLARE_SOA_INDEX_COLUMN (ResoCollision, resoCollision);
144167DECLARE_SOA_INDEX_COLUMN (ResoCollisionDF, resoCollisionDF);
@@ -155,6 +178,8 @@ DECLARE_SOA_COLUMN(Indices, indices, int[2]);
155178DECLARE_SOA_COLUMN (CascadeIndices, cascadeIndices, int [3 ]); // ! Field for the track indices to remove auto-correlations (ordered: positive, negative, bachelor)
156179DECLARE_SOA_COLUMN (TpcNClsCrossedRows, tpcNClsCrossedRows, uint8_t ); // ! Number of TPC crossed rows
157180DECLARE_SOA_COLUMN (TpcNClsFound, tpcNClsFound, uint8_t ); // ! Number of TPC clusters found
181+ DECLARE_SOA_COLUMN (DcaXY10000, dcaXY10000, int16_t ); // ! DCA_xy x10,000 in int16_t, resolution 10 um
182+ DECLARE_SOA_COLUMN (DcaZ10000, dcaZ10000, int16_t ); // ! DCA_z x10,000 in int16_t, resolution 10 um
158183DECLARE_SOA_COLUMN (TrackFlags, trackFlags, uint8_t ); // ! Track flags
159184DECLARE_SOA_COLUMN (TpcNSigmaPi10, tpcNSigmaPi10, int8_t ); // ! TPC PID x10 of the track as Pion
160185DECLARE_SOA_COLUMN (TpcNSigmaKa10, tpcNSigmaKa10, int8_t ); // ! TPC PID x10 of the track as Kaon
@@ -208,6 +233,12 @@ DECLARE_SOA_COLUMN(SiblingIds, siblingIds, int[2]); //! Index of the particles
208233DECLARE_SOA_COLUMN (BachTrkID, bachTrkID, int ); // ! Id of the bach track from cascade
209234DECLARE_SOA_COLUMN (V0ID, v0ID, int ); // ! Id of the V0 from cascade
210235// Dynamic columns
236+ // DCA_xy x10,000
237+ DECLARE_SOA_DYNAMIC_COLUMN (DcaXY, dcaXY,
238+ [](int16_t dcaXY10000) { return (float )dcaXY10000 / 10000 .f ; });
239+ // DCA_z x10,000
240+ DECLARE_SOA_DYNAMIC_COLUMN (DcaZ, dcaZ,
241+ [](int16_t dcaZ10000) { return (float )dcaZ10000 / 10000 .f ; });
211242// TPC PID return value/10
212243DECLARE_SOA_DYNAMIC_COLUMN (TpcNSigmaPi, tpcNSigmaPi,
213244 [](int8_t tpcNSigmaPi10) { return (float )tpcNSigmaPi10 / 10 .f ; });
@@ -266,21 +297,38 @@ DECLARE_SOA_DYNAMIC_COLUMN(Eta, eta, [](float px, float py, float pz) -> float {
266297DECLARE_SOA_DYNAMIC_COLUMN (Phi, phi, [](float px, float py) -> float { return RecoDecay::phi (px, py); });
267298// Track flags
268299DECLARE_SOA_DYNAMIC_COLUMN (PassedITSRefit, passedITSRefit,
269- [](uint8_t trackFlags) -> bool { return (trackFlags & (1 << 0 )) != 0 ; });
300+ [](ResoTrackFlags::flagtype trackFlags) -> bool {
301+ return ResoTrackFlags::checkFlag (trackFlags, ResoTrackFlags::kPassedITSRefit );
302+ });
270303DECLARE_SOA_DYNAMIC_COLUMN (PassedTPCRefit, passedTPCRefit,
271- [](uint8_t trackFlags) -> bool { return (trackFlags & (1 << 1 )) != 0 ; });
304+ [](ResoTrackFlags::flagtype trackFlags) -> bool {
305+ return ResoTrackFlags::checkFlag (trackFlags, ResoTrackFlags::kPassedTPCRefit );
306+ });
272307DECLARE_SOA_DYNAMIC_COLUMN (IsGlobalTrackWoDCA, isGlobalTrackWoDCA,
273- [](uint8_t trackFlags) -> bool { return (trackFlags & (1 << 2 )) != 0 ; });
308+ [](ResoTrackFlags::flagtype trackFlags) -> bool {
309+ return ResoTrackFlags::checkFlag (trackFlags, ResoTrackFlags::kIsGlobalTrackWoDCA );
310+ });
274311DECLARE_SOA_DYNAMIC_COLUMN (IsGlobalTrack, isGlobalTrack,
275- [](uint8_t trackFlags) -> bool { return (trackFlags & (1 << 3 )) != 0 ; });
312+ [](ResoTrackFlags::flagtype trackFlags) -> bool {
313+ return ResoTrackFlags::checkFlag (trackFlags, ResoTrackFlags::kIsGlobalTrack );
314+ });
276315DECLARE_SOA_DYNAMIC_COLUMN (IsPrimaryTrack, isPrimaryTrack,
277- [](uint8_t trackFlags) -> bool { return (trackFlags & (1 << 4 )) != 0 ; });
316+ [](ResoTrackFlags::flagtype trackFlags) -> bool {
317+ return ResoTrackFlags::checkFlag (trackFlags, ResoTrackFlags::kIsPrimaryTrack );
318+ });
278319DECLARE_SOA_DYNAMIC_COLUMN (IsPVContributor, isPVContributor,
279- [](uint8_t trackFlags) -> bool { return (trackFlags & (1 << 5 )) != 0 ; });
320+ [](ResoTrackFlags::flagtype trackFlags) -> bool {
321+ return ResoTrackFlags::checkFlag (trackFlags, ResoTrackFlags::kIsPVContributor );
322+ });
280323DECLARE_SOA_DYNAMIC_COLUMN (HasTOF, hasTOF,
281- [](uint8_t trackFlags) -> bool { return (trackFlags & (1 << 6 )) != 0 ; });
324+ [](ResoTrackFlags::flagtype trackFlags) -> bool {
325+ return ResoTrackFlags::checkFlag (trackFlags, ResoTrackFlags::kHasTOF );
326+ });
282327DECLARE_SOA_DYNAMIC_COLUMN (Sign, sign,
283- [](uint8_t trackFlags) -> int8_t { return (trackFlags & (1 << 7 )) ? 1 : -1 ; });
328+ [](ResoTrackFlags::flagtype trackFlags) -> int8_t {
329+ return (trackFlags & ResoTrackFlags::kSign ) ? 1 : -1 ;
330+ });
331+
284332} // namespace resodaughter
285333DECLARE_SOA_TABLE (ResoTracks, " AOD" , " RESOTRACK" ,
286334 o2::soa::Index<>,
@@ -292,8 +340,8 @@ DECLARE_SOA_TABLE(ResoTracks, "AOD", "RESOTRACK",
292340 resodaughter::Pz,
293341 resodaughter::TpcNClsCrossedRows,
294342 resodaughter::TpcNClsFound,
295- o2::aod::track::DcaXY ,
296- o2::aod::track::DcaZ ,
343+ resodaughter::DcaXY10000 ,
344+ resodaughter::DcaZ10000 ,
297345 resodaughter::TpcNSigmaPi10,
298346 resodaughter::TpcNSigmaKa10,
299347 resodaughter::TpcNSigmaPr10,
@@ -311,6 +359,8 @@ DECLARE_SOA_TABLE(ResoTracks, "AOD", "RESOTRACK",
311359 resodaughter::TofNSigmaPr<resodaughter::TofNSigmaPr10>,
312360 resodaughter::TpcSignal<resodaughter::TpcSignal10>,
313361 // resodaughter::Pt<resodaughter::Px, resodaughter::Py>,
362+ resodaughter::DcaXY<resodaughter::DcaXY10000>,
363+ resodaughter::DcaZ<resodaughter::DcaZ10000>,
314364 resodaughter::Eta<resodaughter::Px, resodaughter::Py, resodaughter::Pz>,
315365 resodaughter::Phi<resodaughter::Px, resodaughter::Py>,
316366 resodaughter::PassedITSRefit<resodaughter::TrackFlags>,
@@ -334,8 +384,8 @@ DECLARE_SOA_TABLE(ResoTrackDFs, "AOD", "RESOTRACKDF",
334384 resodaughter::Pz,
335385 resodaughter::TpcNClsCrossedRows,
336386 resodaughter::TpcNClsFound,
337- o2::aod::track::DcaXY ,
338- o2::aod::track::DcaZ ,
387+ resodaughter::DcaXY10000 ,
388+ resodaughter::DcaZ10000 ,
339389 resodaughter::TpcNSigmaPi10,
340390 resodaughter::TpcNSigmaKa10,
341391 resodaughter::TpcNSigmaPr10,
@@ -353,6 +403,8 @@ DECLARE_SOA_TABLE(ResoTrackDFs, "AOD", "RESOTRACKDF",
353403 resodaughter::TofNSigmaPr<resodaughter::TofNSigmaPr10>,
354404 resodaughter::TpcSignal<resodaughter::TpcSignal10>,
355405 // resodaughter::Pt<resodaughter::Px, resodaughter::Py>,
406+ resodaughter::DcaXY<resodaughter::DcaXY10000>,
407+ resodaughter::DcaZ<resodaughter::DcaZ10000>,
356408 resodaughter::Eta<resodaughter::Px, resodaughter::Py, resodaughter::Pz>,
357409 resodaughter::Phi<resodaughter::Px, resodaughter::Py>,
358410 resodaughter::PassedITSRefit<resodaughter::TrackFlags>,
0 commit comments