@@ -62,6 +62,8 @@ DECLARE_SOA_COLUMN(GenDecayLength, genDecayLength, float);
6262DECLARE_SOA_COLUMN (PdgDoubleOmega, pdgDoubleOmega, int );
6363DECLARE_SOA_COLUMN (GenMotherId, genMotherId, int64_t ); // MC particle index within the input dataframe.
6464DECLARE_SOA_COLUMN (IsReco, isReco, bool );
65+
66+ DECLARE_SOA_COLUMN (MixingType, mixingType, uint8_t ); // 1: Omega, 2: Lambda, 3: kaon from another collision; 4: Omega, Lambda and kaon from three different collisions.
6567} // namespace DoubleOmegaTables
6668
6769#define DOUBLE_OMEGA_RECO_COLUMNS \
@@ -107,8 +109,116 @@ DECLARE_SOA_TABLE(DoubleOmegaTableMC, "AOD", "DBLOMEGAMCTABLE",
107109 DoubleOmegaTables::GenMotherId,
108110 DoubleOmegaTables::IsReco);
109111
112+ DECLARE_SOA_TABLE (DoubleOmegaMixedTable, " AOD" , " DBLOMEGAMIXTABLE" ,
113+ DOUBLE_OMEGA_RECO_COLUMNS ,
114+ DoubleOmegaTables::MixingType);
115+
110116#undef DOUBLE_OMEGA_RECO_COLUMNS
111117
118+ // Derived data: Omega, Lambda and kaon candidates of the collisions with at least one Omega, one
119+ // Lambda and one kaon candidate not sharing tracks with it. The tables only index each other, so
120+ // they are self-contained and dataframes can be merged.
121+ namespace domega
122+ {
123+ DECLARE_SOA_COLUMN (MultFT0M, multFT0M, float ); // ! FT0M multiplicity of the collision
124+ DECLARE_SOA_COLUMN (Bz, bz, float ); // ! Nominal magnetic field (kG)
125+ } // namespace domega
126+
127+ DECLARE_SOA_TABLE (DOmegaColls, " AOD" , " DOMEGACOLL" , // ! Collisions with double-Omega building blocks
128+ o2::soa::Index<>,
129+ collision::PosX, collision::PosY, collision::PosZ,
130+ domega::MultFT0M,
131+ bc::RunNumber,
132+ domega::Bz);
133+
134+ namespace domega
135+ {
136+ DECLARE_SOA_INDEX_COLUMN_FULL (DOmegaColl, dOmegaColl, int , DOmegaColls, " " ); // ! Collision index
137+
138+ // Track parametrisation covariance, in the order expected by getTrackParCov.
139+ DECLARE_SOA_COLUMN (CYY , cYY, float );
140+ DECLARE_SOA_COLUMN (CZY , cZY, float );
141+ DECLARE_SOA_COLUMN (CZZ , cZZ, float );
142+ DECLARE_SOA_COLUMN (CSnpY, cSnpY, float );
143+ DECLARE_SOA_COLUMN (CSnpZ, cSnpZ, float );
144+ DECLARE_SOA_COLUMN (CSnpSnp, cSnpSnp, float );
145+ DECLARE_SOA_COLUMN (CTglY, cTglY, float );
146+ DECLARE_SOA_COLUMN (CTglZ, cTglZ, float );
147+ DECLARE_SOA_COLUMN (CTglSnp, cTglSnp, float );
148+ DECLARE_SOA_COLUMN (CTglTgl, cTglTgl, float );
149+ DECLARE_SOA_COLUMN (C1PtY, c1PtY, float );
150+ DECLARE_SOA_COLUMN (C1PtZ, c1PtZ, float );
151+ DECLARE_SOA_COLUMN (C1PtSnp, c1PtSnp, float );
152+ DECLARE_SOA_COLUMN (C1PtTgl, c1PtTgl, float );
153+ DECLARE_SOA_COLUMN (C1Pt21Pt2, c1Pt21Pt2, float );
154+
155+ DECLARE_SOA_COLUMN (TPCNSigmaKa, tpcNSigmaKa, float ); // ! -999 when TPC is unavailable
156+ DECLARE_SOA_COLUMN (TOFNSigmaKa, tofNSigmaKa, float ); // ! -999 when TOF is unavailable
157+ DECLARE_SOA_COLUMN (DetectorMap, detectorMap, uint8_t ); // ! ITS, TPC, TOF bits
158+ DECLARE_SOA_COLUMN (DcaXYToPV, dcaXYToPV, float ); // ! Transverse DCA to the primary vertex of its collision
159+ DECLARE_SOA_COLUMN (IsKaon, isKaon, bool ); // ! Selected as a direct-kaon candidate
160+ } // namespace domega
161+
162+ #define DOMEGA_TRACK_PAR_COV_COLUMNS \
163+ track::X, track::Alpha, track::Y, track::Z, track::Snp, track::Tgl, track::Signed1Pt, \
164+ domega::CYY , domega::CZY , domega::CZZ , domega::CSnpY, domega::CSnpZ, domega::CSnpSnp, \
165+ domega::CTglY, domega::CTglZ, domega::CTglSnp, domega::CTglTgl, \
166+ domega::C1PtY, domega::C1PtZ, domega::C1PtSnp, domega::C1PtTgl, domega::C1Pt21Pt2
167+
168+ DECLARE_SOA_TABLE (DOmegaTracks, " AOD" , " DOMEGATRACK" , // ! Direct-kaon candidates and Omega/Lambda daughters, at the innermost update
169+ o2::soa::Index<>,
170+ domega::DOmegaCollId,
171+ DOMEGA_TRACK_PAR_COV_COLUMNS ,
172+ domega::TPCNSigmaKa,
173+ domega::TOFNSigmaKa,
174+ domega::DetectorMap,
175+ domega::DcaXYToPV,
176+ domega::IsKaon,
177+ track::Sign<track::Signed1Pt>);
178+
179+ namespace domega
180+ {
181+ DECLARE_SOA_INDEX_COLUMN_FULL (PosTrack, posTrack, int , DOmegaTracks, " _Pos" ); // ! Positive daughter
182+ DECLARE_SOA_INDEX_COLUMN_FULL (NegTrack, negTrack, int , DOmegaTracks, " _Neg" ); // ! Negative daughter
183+ DECLARE_SOA_INDEX_COLUMN_FULL (Bachelor, bachelor, int , DOmegaTracks, " _Bach" ); // ! Bachelor kaon of the Omega
184+
185+ DECLARE_SOA_COLUMN (DecayX, decayX, float );
186+ DECLARE_SOA_COLUMN (DecayY, decayY, float );
187+ DECLARE_SOA_COLUMN (DecayZ, decayZ, float );
188+ DECLARE_SOA_COLUMN (Px, px, float );
189+ DECLARE_SOA_COLUMN (Py, py, float );
190+ DECLARE_SOA_COLUMN (Pz, pz, float );
191+ DECLARE_SOA_COLUMN (MassOmega, massOmega, float );
192+ DECLARE_SOA_COLUMN (MassXi, massXi, float );
193+ DECLARE_SOA_COLUMN (MassLambda, massLambda, float );
194+ DECLARE_SOA_COLUMN (DcaDaughters, dcaDaughters, float ); // ! DCA between the daughters
195+ DECLARE_SOA_COLUMN (Sign, sign, int8_t ); // ! Charge of the Omega (Omega table) or of the Omega the Lambda can be paired with (Lambda table)
196+ } // namespace domega
197+
198+ DECLARE_SOA_TABLE (DOmegaOmegas, " AOD" , " DOMEGAOMEGA" , // ! Omega candidates; track parameters at the Omega decay vertex
199+ o2::soa::Index<>,
200+ domega::DOmegaCollId,
201+ domega::PosTrackId, domega::NegTrackId, domega::BachelorId,
202+ DOMEGA_TRACK_PAR_COV_COLUMNS ,
203+ domega::DecayX, domega::DecayY, domega::DecayZ,
204+ domega::Px, domega::Py, domega::Pz,
205+ domega::MassOmega, domega::MassXi,
206+ domega::DcaDaughters,
207+ domega::Sign);
208+
209+ DECLARE_SOA_TABLE (DOmegaLambdas, " AOD" , " DOMEGALAMBDA" , // ! Lambda candidates; neutral track parameters at the Lambda decay vertex
210+ o2::soa::Index<>,
211+ domega::DOmegaCollId,
212+ domega::PosTrackId, domega::NegTrackId,
213+ DOMEGA_TRACK_PAR_COV_COLUMNS ,
214+ domega::DecayX, domega::DecayY, domega::DecayZ,
215+ domega::Px, domega::Py, domega::Pz,
216+ domega::MassLambda,
217+ domega::DcaDaughters,
218+ domega::Sign);
219+
220+ #undef DOMEGA_TRACK_PAR_COV_COLUMNS
221+
112222} // namespace o2::aod
113223
114224#endif // PWGLF_DATAMODEL_LFDOUBLEOMEGATABLES_H_
0 commit comments