Skip to content

Commit bd101fe

Browse files
authored
[PWGCF] Update in MFT track selection and added extra colums for global tracks (#16279)
1 parent 2444e50 commit bd101fe

3 files changed

Lines changed: 717 additions & 396 deletions

File tree

PWGCF/TwoParticleCorrelations/DataModel/LongRangeDerived.h

Lines changed: 200 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,12 @@
1818
#ifndef PWGCF_TWOPARTICLECORRELATIONS_DATAMODEL_LONGRANGEDERIVED_H_
1919
#define PWGCF_TWOPARTICLECORRELATIONS_DATAMODEL_LONGRANGEDERIVED_H_
2020

21+
#include "PWGMM/Mult/DataModel/bestCollisionTable.h"
22+
2123
#include "Common/DataModel/Multiplicity.h"
24+
#include "Common/DataModel/TrackSelectionTables.h"
2225

26+
#include <CommonConstants/MathConstants.h>
2327
#include <Framework/ASoA.h>
2428
#include <Framework/AnalysisDataModel.h>
2529

@@ -138,19 +142,121 @@ using LRZdc = LRZdcs::iterator;
138142

139143
namespace lrcorrtrktable
140144
{
145+
146+
template <typename binningType>
147+
inline typename binningType::binned_t packInTable(const float& valueToBin)
148+
{
149+
if (valueToBin <= binningType::binned_min) {
150+
return binningType::underflowBin;
151+
} else if (valueToBin >= binningType::binned_max) {
152+
return binningType::overflowBin;
153+
} else {
154+
return static_cast<typename binningType::binned_t>((valueToBin - binningType::binned_min) / binningType::bin_width);
155+
}
156+
}
157+
158+
template <typename binningType>
159+
inline float unPack(const typename binningType::binned_t& b)
160+
{
161+
return binningType::bin_width * b + binningType::binned_min;
162+
}
163+
164+
template <typename binningType>
165+
inline typename binningType::binned_t packSymmetric(const float& valueToBin)
166+
{
167+
if (valueToBin <= binningType::binned_min) {
168+
return (binningType::underflowBin);
169+
} else if (valueToBin >= binningType::binned_max) {
170+
return (binningType::overflowBin);
171+
} else if (valueToBin >= 0) {
172+
return (static_cast<typename binningType::binned_t>((valueToBin * binningType::inv_bin_width) + 0.5f));
173+
} else {
174+
return (static_cast<typename binningType::binned_t>((valueToBin * binningType::inv_bin_width) - 0.5f));
175+
}
176+
}
177+
178+
template <typename binningType>
179+
inline float unPackSymmetric(const typename binningType::binned_t& b)
180+
{
181+
return binningType::bin_width * static_cast<float>(b);
182+
}
183+
184+
namespace binning
185+
{
186+
187+
template <std::pair<float, float> lim, typename binVariable = int8_t>
188+
struct binningParent {
189+
public:
190+
typedef binVariable binned_t;
191+
192+
// Reserve two bins: one for overflow and one for underflow
193+
static constexpr int nbins = (1 << (8 * sizeof(binned_t))) - 2;
194+
static constexpr binned_t overflowBin = nbins;
195+
static constexpr binned_t underflowBin = -1;
196+
static constexpr float binned_min = lim.first;
197+
static constexpr float binned_max = lim.second;
198+
static constexpr float binned_center = 0.5 * (binned_min + binned_max);
199+
static constexpr float bin_width = (binned_max - binned_min) / static_cast<float>(nbins);
200+
static constexpr float inv_bin_width = 1. / bin_width;
201+
static_assert(binned_min < binned_max, "Invalid binning range");
202+
static void print()
203+
{
204+
LOG(info) << "Binning: " << binned_min << " - " << binned_max << " with " << nbins << " bins, width = "
205+
<< bin_width << ". Overflow bin " << static_cast<int>(overflowBin) << " Underflow bin " << static_cast<int>(underflowBin);
206+
}
207+
};
208+
209+
using trkdca_v0 = binningParent<std::pair<float, float>(-2.0f, 2.0f), int8_t>;
210+
using trkphi_v0 = binningParent<std::pair<float, float>(0.0f, o2::constants::math::TwoPI), uint16_t>;
211+
using trkamp_v0 = binningParent<std::pair<float, float>(0.0f, 5000.0f), uint16_t>;
212+
using trkpt_v0 = binningParent<std::pair<float, float>(0.0f, 10.0f), uint8_t>;
213+
using trketa_v0 = binningParent<std::pair<float, float>(-5.0f, 5.0f), int16_t>;
214+
using trkchi2_v0 = binningParent<std::pair<float, float>(0.0f, 10.0f), int8_t>;
215+
216+
using trkdca = trkdca_v0;
217+
using trkchi2 = trkchi2_v0;
218+
using trkpt = trkpt_v0;
219+
using trketa = trketa_v0;
220+
using trkphi = trkphi_v0;
221+
using trkamp = trkamp_v0;
222+
223+
} // namespace binning
224+
141225
DECLARE_SOA_INDEX_COLUMN(LRCollision, lrCollision);
142226
DECLARE_SOA_INDEX_COLUMN(UpcLRCollision, upcLRCollision);
143-
DECLARE_SOA_COLUMN(Pt, pt, float);
144-
DECLARE_SOA_COLUMN(Eta, eta, float);
145-
DECLARE_SOA_COLUMN(Phi, phi, float);
146-
DECLARE_SOA_COLUMN(ChannelID, channelID, int);
147-
DECLARE_SOA_COLUMN(Amplitude, amplitude, float);
148-
DECLARE_SOA_COLUMN(GainAmplitude, gainAmplitude, float);
227+
DECLARE_SOA_COLUMN(ChannelID, channelID, uint8_t);
228+
DECLARE_SOA_COLUMN(AmplitudeStore, amplitudeStore, binning::trkamp::binned_t);
149229
DECLARE_SOA_COLUMN(InvMass, invMass, float);
150230
DECLARE_SOA_COLUMN(IdPos, idPos, int64_t);
151231
DECLARE_SOA_COLUMN(IdNeg, idNeg, int64_t);
152232
DECLARE_SOA_COLUMN(TrackType, trackType, uint8_t);
153233
DECLARE_SOA_COLUMN(V0Type, v0Type, uint8_t);
234+
DECLARE_SOA_COLUMN(AmbDegree, ambDegree, uint8_t);
235+
DECLARE_SOA_COLUMN(TPCNClsFound, tpcNClsFound, uint8_t);
236+
DECLARE_SOA_COLUMN(TPCNClsCrossedRows, tpcNClsCrossedRows, uint8_t);
237+
DECLARE_SOA_COLUMN(TPCChi2NClStore, tpcChi2NClStore, binning::trkchi2::binned_t); //! Stored binned chi2
238+
DECLARE_SOA_COLUMN(DCAzStore, dcazStore, binning::trkdca::binned_t); //! Stored binned dcaz
239+
DECLARE_SOA_COLUMN(BestDCAxyStore, bestdcaxyStore, binning::trkdca::binned_t); //! Stored binned best dcaxy
240+
DECLARE_SOA_COLUMN(BestDCAzStore, bestdcazStore, binning::trkdca::binned_t); //! Stored binned best dcaz
241+
DECLARE_SOA_COLUMN(PtStore, ptStore, binning::trkpt::binned_t); //! Stored binned pt
242+
DECLARE_SOA_COLUMN(EtaStore, etaStore, binning::trketa::binned_t); //! Stored binned eta
243+
DECLARE_SOA_COLUMN(PhiStore, phiStore, binning::trkphi::binned_t); //! Stored binned phi
244+
DECLARE_SOA_DYNAMIC_COLUMN(TPCChi2NCl, tpcChi2NCl,
245+
[](binning::trkchi2::binned_t chi2_binned) -> float { return unPack<binning::trkchi2>(chi2_binned); });
246+
DECLARE_SOA_DYNAMIC_COLUMN(DCAz, dcaZ,
247+
[](binning::trkdca::binned_t dcaz_binned) -> float { return unPackSymmetric<binning::trkdca>(dcaz_binned); });
248+
DECLARE_SOA_DYNAMIC_COLUMN(Pt, pt,
249+
[](binning::trkpt::binned_t pt_binned) -> float { return unPack<binning::trkpt>(pt_binned); });
250+
DECLARE_SOA_DYNAMIC_COLUMN(Eta, eta,
251+
[](binning::trketa::binned_t eta_binned) -> float { return unPackSymmetric<binning::trketa>(eta_binned); });
252+
DECLARE_SOA_DYNAMIC_COLUMN(Phi, phi,
253+
[](binning::trkphi::binned_t phi_binned) -> float { return unPackSymmetric<binning::trkphi>(phi_binned); });
254+
DECLARE_SOA_DYNAMIC_COLUMN(BestDCAXY, bestDCAXY,
255+
[](binning::trkdca::binned_t bestdcaxy_binned) -> float { return unPackSymmetric<binning::trkdca>(bestdcaxy_binned); });
256+
DECLARE_SOA_DYNAMIC_COLUMN(BestDCAZ, bestDCAZ,
257+
[](binning::trkdca::binned_t bestdcaz_binned) -> float { return unPackSymmetric<binning::trkdca>(bestdcaz_binned); });
258+
DECLARE_SOA_DYNAMIC_COLUMN(Amplitude, amplitude,
259+
[](binning::trkamp::binned_t amp_binned) -> float { return unPack<binning::trkamp>(amp_binned); });
154260
enum TrackPid {
155261
kSpCharge,
156262
kSpPion,
@@ -168,116 +274,150 @@ enum V0TrackPid {
168274
DECLARE_SOA_TABLE(LRMidTracks, "AOD", "LRMIDTRACK",
169275
o2::soa::Index<>,
170276
lrcorrtrktable::LRCollisionId,
171-
lrcorrtrktable::Pt,
172-
lrcorrtrktable::Eta,
173-
lrcorrtrktable::Phi,
174-
lrcorrtrktable::TrackType);
277+
lrcorrtrktable::TPCNClsFound,
278+
lrcorrtrktable::TPCNClsCrossedRows,
279+
lrcorrtrktable::TPCChi2NClStore,
280+
lrcorrtrktable::PtStore,
281+
lrcorrtrktable::EtaStore,
282+
lrcorrtrktable::PhiStore,
283+
lrcorrtrktable::DCAzStore,
284+
lrcorrtrktable::TrackType,
285+
lrcorrtrktable::TPCChi2NCl<lrcorrtrktable::TPCChi2NClStore>,
286+
lrcorrtrktable::Pt<lrcorrtrktable::PtStore>,
287+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
288+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>,
289+
lrcorrtrktable::DCAz<lrcorrtrktable::DCAzStore>);
175290
using LRMidTrack = LRMidTracks::iterator;
176291

177292
DECLARE_SOA_TABLE(LRFt0aTracks, "AOD", "LRFT0ATRACK",
178293
o2::soa::Index<>,
179294
lrcorrtrktable::LRCollisionId,
180295
lrcorrtrktable::ChannelID,
181-
lrcorrtrktable::Amplitude,
182-
lrcorrtrktable::GainAmplitude,
183-
lrcorrtrktable::Eta,
184-
lrcorrtrktable::Phi);
296+
lrcorrtrktable::AmplitudeStore,
297+
lrcorrtrktable::EtaStore,
298+
lrcorrtrktable::PhiStore,
299+
lrcorrtrktable::Amplitude<lrcorrtrktable::AmplitudeStore>,
300+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
301+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>);
185302
using LRFt0aTrack = LRFt0aTracks::iterator;
186303

187304
DECLARE_SOA_TABLE(LRFt0cTracks, "AOD", "LRFT0CTRACK",
188305
o2::soa::Index<>,
189306
lrcorrtrktable::LRCollisionId,
190307
lrcorrtrktable::ChannelID,
191-
lrcorrtrktable::Amplitude,
192-
lrcorrtrktable::GainAmplitude,
193-
lrcorrtrktable::Eta,
194-
lrcorrtrktable::Phi);
308+
lrcorrtrktable::AmplitudeStore,
309+
lrcorrtrktable::EtaStore,
310+
lrcorrtrktable::PhiStore,
311+
lrcorrtrktable::Amplitude<lrcorrtrktable::AmplitudeStore>,
312+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
313+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>);
195314
using LRFt0cTrack = LRFt0cTracks::iterator;
196315

197316
DECLARE_SOA_TABLE(LRV0Tracks, "AOD", "LRV0TRACK",
198317
o2::soa::Index<>,
199318
lrcorrtrktable::LRCollisionId,
200319
lrcorrtrktable::IdPos,
201320
lrcorrtrktable::IdNeg,
202-
lrcorrtrktable::Pt,
203-
lrcorrtrktable::Eta,
204-
lrcorrtrktable::Phi,
321+
lrcorrtrktable::PtStore,
322+
lrcorrtrktable::EtaStore,
323+
lrcorrtrktable::PhiStore,
205324
lrcorrtrktable::InvMass,
206-
lrcorrtrktable::V0Type);
325+
lrcorrtrktable::V0Type,
326+
lrcorrtrktable::Pt<lrcorrtrktable::PtStore>,
327+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
328+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>);
207329
using LRV0Track = LRV0Tracks::iterator;
208330

209331
DECLARE_SOA_TABLE(LRMftTracks, "AOD", "LRMFTTRACK",
210332
o2::soa::Index<>,
211333
lrcorrtrktable::LRCollisionId,
212-
lrcorrtrktable::Pt,
213-
lrcorrtrktable::Eta,
214-
lrcorrtrktable::Phi);
334+
lrcorrtrktable::AmbDegree,
335+
lrcorrtrktable::PtStore,
336+
lrcorrtrktable::EtaStore,
337+
lrcorrtrktable::PhiStore,
338+
fwdtrack::NClusters,
339+
lrcorrtrktable::BestDCAxyStore,
340+
lrcorrtrktable::BestDCAzStore,
341+
lrcorrtrktable::BestDCAXY<lrcorrtrktable::BestDCAxyStore>,
342+
lrcorrtrktable::BestDCAZ<lrcorrtrktable::BestDCAzStore>,
343+
lrcorrtrktable::Pt<lrcorrtrktable::PtStore>,
344+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
345+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>);
215346
using LRMftTrack = LRMftTracks::iterator;
216347

217-
DECLARE_SOA_TABLE(LRMftBestTracks, "AOD", "LRMFTBESTTRACK",
218-
o2::soa::Index<>,
219-
lrcorrtrktable::LRCollisionId,
220-
lrcorrtrktable::Pt,
221-
lrcorrtrktable::Eta,
222-
lrcorrtrktable::Phi);
223-
using LRMftBestTrack = LRMftBestTracks::iterator;
224-
225348
DECLARE_SOA_TABLE(UpcLRMidTracks, "AOD", "UPCLRMIDTRACK",
226349
o2::soa::Index<>,
227350
lrcorrtrktable::UpcLRCollisionId,
228-
lrcorrtrktable::Pt,
229-
lrcorrtrktable::Eta,
230-
lrcorrtrktable::Phi,
231-
lrcorrtrktable::TrackType);
351+
lrcorrtrktable::TPCNClsFound,
352+
lrcorrtrktable::TPCNClsCrossedRows,
353+
lrcorrtrktable::TPCChi2NClStore,
354+
lrcorrtrktable::PtStore,
355+
lrcorrtrktable::EtaStore,
356+
lrcorrtrktable::PhiStore,
357+
lrcorrtrktable::DCAzStore,
358+
lrcorrtrktable::TrackType,
359+
lrcorrtrktable::TPCChi2NCl<lrcorrtrktable::TPCChi2NClStore>,
360+
lrcorrtrktable::Pt<lrcorrtrktable::PtStore>,
361+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
362+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>,
363+
lrcorrtrktable::DCAz<lrcorrtrktable::DCAzStore>);
232364
using UpcLRMidTrack = UpcLRMidTracks::iterator;
233365

234366
DECLARE_SOA_TABLE(UpcLRFt0aTracks, "AOD", "UPCLRFT0ATRACK",
235367
o2::soa::Index<>,
236368
lrcorrtrktable::UpcLRCollisionId,
237369
lrcorrtrktable::ChannelID,
238-
lrcorrtrktable::Amplitude,
239-
lrcorrtrktable::GainAmplitude,
240-
lrcorrtrktable::Eta,
241-
lrcorrtrktable::Phi);
370+
lrcorrtrktable::AmplitudeStore,
371+
lrcorrtrktable::EtaStore,
372+
lrcorrtrktable::PhiStore,
373+
lrcorrtrktable::Amplitude<lrcorrtrktable::AmplitudeStore>,
374+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
375+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>);
242376
using UpcLRFt0aTrack = UpcLRFt0aTracks::iterator;
243377

244378
DECLARE_SOA_TABLE(UpcLRFt0cTracks, "AOD", "UPCLRFT0CTRACK",
245379
o2::soa::Index<>,
246380
lrcorrtrktable::UpcLRCollisionId,
247381
lrcorrtrktable::ChannelID,
248-
lrcorrtrktable::Amplitude,
249-
lrcorrtrktable::GainAmplitude,
250-
lrcorrtrktable::Eta,
251-
lrcorrtrktable::Phi);
382+
lrcorrtrktable::AmplitudeStore,
383+
lrcorrtrktable::EtaStore,
384+
lrcorrtrktable::PhiStore,
385+
lrcorrtrktable::Amplitude<lrcorrtrktable::AmplitudeStore>,
386+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
387+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>);
252388
using UpcLRFt0cTrack = UpcLRFt0cTracks::iterator;
253389

254390
DECLARE_SOA_TABLE(UpcLRV0Tracks, "AOD", "UPCLRV0TRACK",
255391
o2::soa::Index<>,
256392
lrcorrtrktable::UpcLRCollisionId,
257393
lrcorrtrktable::IdPos,
258394
lrcorrtrktable::IdNeg,
259-
lrcorrtrktable::Pt,
260-
lrcorrtrktable::Eta,
261-
lrcorrtrktable::Phi,
395+
lrcorrtrktable::PtStore,
396+
lrcorrtrktable::EtaStore,
397+
lrcorrtrktable::PhiStore,
262398
lrcorrtrktable::InvMass,
263-
lrcorrtrktable::V0Type);
399+
lrcorrtrktable::V0Type,
400+
lrcorrtrktable::Pt<lrcorrtrktable::PtStore>,
401+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
402+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>);
264403
using UpcLRV0Track = UpcLRV0Tracks::iterator;
265404

266405
DECLARE_SOA_TABLE(UpcLRMftTracks, "AOD", "UPCLRMFTTRACK",
267406
o2::soa::Index<>,
268407
lrcorrtrktable::UpcLRCollisionId,
269-
lrcorrtrktable::Pt,
270-
lrcorrtrktable::Eta,
271-
lrcorrtrktable::Phi);
408+
lrcorrtrktable::AmbDegree,
409+
lrcorrtrktable::PtStore,
410+
lrcorrtrktable::EtaStore,
411+
lrcorrtrktable::PhiStore,
412+
fwdtrack::NClusters,
413+
lrcorrtrktable::BestDCAxyStore,
414+
lrcorrtrktable::BestDCAzStore,
415+
lrcorrtrktable::BestDCAXY<lrcorrtrktable::BestDCAxyStore>,
416+
lrcorrtrktable::BestDCAZ<lrcorrtrktable::BestDCAzStore>,
417+
lrcorrtrktable::Pt<lrcorrtrktable::PtStore>,
418+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
419+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>);
272420
using UpcLRMftTrack = UpcLRMftTracks::iterator;
273-
274-
DECLARE_SOA_TABLE(UpcLRMftBestTracks, "AOD", "UPCLRMFTBESTTRACK",
275-
o2::soa::Index<>,
276-
lrcorrtrktable::UpcLRCollisionId,
277-
lrcorrtrktable::Pt,
278-
lrcorrtrktable::Eta,
279-
lrcorrtrktable::Phi);
280-
using UpcLRMftBestTrack = UpcLRMftBestTracks::iterator;
281421
} // namespace o2::aod
282422

283423
#endif // PWGCF_TWOPARTICLECORRELATIONS_DATAMODEL_LONGRANGEDERIVED_H_

0 commit comments

Comments
 (0)