Skip to content

Commit 6ad8883

Browse files
authored
Update in MFT track selection and added extra colums for global tracks
1 parent 9ee5ef9 commit 6ad8883

1 file changed

Lines changed: 199 additions & 60 deletions

File tree

PWGCF/TwoParticleCorrelations/DataModel/LongRangeDerived.h

Lines changed: 199 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,120 @@ 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 <typename T, float Min, float Max>
188+
struct binningParent {
189+
public:
190+
using binned_t = 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 = static_cast<float>(Min);
197+
static constexpr float binned_max = static_cast<float>(Max);
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 void print()
202+
{
203+
LOG(info) << "Binning: " << binned_min << " - " << binned_max << " with " << nbins << " bins, width = "
204+
<< bin_width << ". Overflow bin " << static_cast<int>(overflowBin) << " Underflow bin " << static_cast<int>(underflowBin);
205+
}
206+
};
207+
208+
using trkdca_v0 = binningParent<int8_t, -2.0f, 2.0f>;
209+
using trkphi_v0 = binningParent<uint16_t, 0.0f, o2::constants::math::TwoPI>;
210+
using trkamp_v0 = binningParent<uint16_t, 0.0f, 5000.0f>;
211+
using trkpt_v0 = binningParent<uint16_t, 0.0f, 20.0f>;
212+
using trketa_v0 = binningParent<int16_t, -5.0f, 5.0f>;
213+
using trkchi2_v0 = binningParent<int8_t, 0.0f, 10.0f>;
214+
215+
using trkdca = trkdca_v0;
216+
using trkchi2 = trkchi2_v0;
217+
using trkpt = trkpt_v0;
218+
using trketa = trketa_v0;
219+
using trkphi = trkphi_v0;
220+
using trkamp = trkamp_v0;
221+
222+
} // namespace binning
223+
141224
DECLARE_SOA_INDEX_COLUMN(LRCollision, lrCollision);
142225
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);
226+
DECLARE_SOA_COLUMN(ChannelID, channelID, uint8_t);
227+
DECLARE_SOA_COLUMN(AmplitudeStore, amplitudeStore, binning::trkamp::binned_t);
149228
DECLARE_SOA_COLUMN(InvMass, invMass, float);
150229
DECLARE_SOA_COLUMN(IdPos, idPos, int64_t);
151230
DECLARE_SOA_COLUMN(IdNeg, idNeg, int64_t);
152231
DECLARE_SOA_COLUMN(TrackType, trackType, uint8_t);
153232
DECLARE_SOA_COLUMN(V0Type, v0Type, uint8_t);
233+
DECLARE_SOA_COLUMN(AmbDegree, ambDegree, uint8_t);
234+
DECLARE_SOA_COLUMN(TPCNClsFound, tpcNClsFound, uint8_t);
235+
DECLARE_SOA_COLUMN(TPCNClsCrossedRows, tpcNClsCrossedRows, uint8_t);
236+
DECLARE_SOA_COLUMN(TPCChi2NClStore, tpcChi2NClStore, binning::trkchi2::binned_t); //! Stored binned chi2
237+
DECLARE_SOA_COLUMN(DCAzStore, dcazStore, binning::trkdca::binned_t); //! Stored binned dcaz
238+
DECLARE_SOA_COLUMN(BestDCAxyStore, bestdcaxyStore, binning::trkdca::binned_t); //! Stored binned best dcaxy
239+
DECLARE_SOA_COLUMN(BestDCAzStore, bestdcazStore, binning::trkdca::binned_t); //! Stored binned best dcaz
240+
DECLARE_SOA_COLUMN(PtStore, ptStore, binning::trkpt::binned_t); //! Stored binned pt
241+
DECLARE_SOA_COLUMN(EtaStore, etaStore, binning::trketa::binned_t); //! Stored binned eta
242+
DECLARE_SOA_COLUMN(PhiStore, phiStore, binning::trkphi::binned_t); //! Stored binned phi
243+
DECLARE_SOA_DYNAMIC_COLUMN(TPCChi2NCl, tpcChi2NCl,
244+
[](binning::trkchi2::binned_t chi2_binned) -> float { return unPack<binning::trkchi2>(chi2_binned); });
245+
DECLARE_SOA_DYNAMIC_COLUMN(DCAz, dcaZ,
246+
[](binning::trkdca::binned_t dcaz_binned) -> float { return unPackSymmetric<binning::trkdca>(dcaz_binned); });
247+
DECLARE_SOA_DYNAMIC_COLUMN(Pt, pt,
248+
[](binning::trkpt::binned_t pt_binned) -> float { return unPack<binning::trkpt>(pt_binned); });
249+
DECLARE_SOA_DYNAMIC_COLUMN(Eta, eta,
250+
[](binning::trketa::binned_t eta_binned) -> float { return unPackSymmetric<binning::trketa>(eta_binned); });
251+
DECLARE_SOA_DYNAMIC_COLUMN(Phi, phi,
252+
[](binning::trkphi::binned_t phi_binned) -> float { return unPackSymmetric<binning::trkphi>(phi_binned); });
253+
DECLARE_SOA_DYNAMIC_COLUMN(BestDCAXY, bestDCAXY,
254+
[](binning::trkdca::binned_t bestdcaxy_binned) -> float { return unPackSymmetric<binning::trkdca>(bestdcaxy_binned); });
255+
DECLARE_SOA_DYNAMIC_COLUMN(BestDCAZ, bestDCAZ,
256+
[](binning::trkdca::binned_t bestdcaz_binned) -> float { return unPackSymmetric<binning::trkdca>(bestdcaz_binned); });
257+
DECLARE_SOA_DYNAMIC_COLUMN(Amplitude, amplitude,
258+
[](binning::trkamp::binned_t amp_binned) -> float { return unPack<binning::trkamp>(amp_binned); });
154259
enum TrackPid {
155260
kSpCharge,
156261
kSpPion,
@@ -168,116 +273,150 @@ enum V0TrackPid {
168273
DECLARE_SOA_TABLE(LRMidTracks, "AOD", "LRMIDTRACK",
169274
o2::soa::Index<>,
170275
lrcorrtrktable::LRCollisionId,
171-
lrcorrtrktable::Pt,
172-
lrcorrtrktable::Eta,
173-
lrcorrtrktable::Phi,
174-
lrcorrtrktable::TrackType);
276+
lrcorrtrktable::TPCNClsFound,
277+
lrcorrtrktable::TPCNClsCrossedRows,
278+
lrcorrtrktable::TPCChi2NClStore,
279+
lrcorrtrktable::PtStore,
280+
lrcorrtrktable::EtaStore,
281+
lrcorrtrktable::PhiStore,
282+
lrcorrtrktable::DCAzStore,
283+
lrcorrtrktable::TrackType,
284+
lrcorrtrktable::TPCChi2NCl<lrcorrtrktable::TPCChi2NClStore>,
285+
lrcorrtrktable::Pt<lrcorrtrktable::PtStore>,
286+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
287+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>,
288+
lrcorrtrktable::DCAz<lrcorrtrktable::DCAzStore>);
175289
using LRMidTrack = LRMidTracks::iterator;
176290

177291
DECLARE_SOA_TABLE(LRFt0aTracks, "AOD", "LRFT0ATRACK",
178292
o2::soa::Index<>,
179293
lrcorrtrktable::LRCollisionId,
180294
lrcorrtrktable::ChannelID,
181-
lrcorrtrktable::Amplitude,
182-
lrcorrtrktable::GainAmplitude,
183-
lrcorrtrktable::Eta,
184-
lrcorrtrktable::Phi);
295+
lrcorrtrktable::AmplitudeStore,
296+
lrcorrtrktable::EtaStore,
297+
lrcorrtrktable::PhiStore,
298+
lrcorrtrktable::Amplitude<lrcorrtrktable::AmplitudeStore>,
299+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
300+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>);
185301
using LRFt0aTrack = LRFt0aTracks::iterator;
186302

187303
DECLARE_SOA_TABLE(LRFt0cTracks, "AOD", "LRFT0CTRACK",
188304
o2::soa::Index<>,
189305
lrcorrtrktable::LRCollisionId,
190306
lrcorrtrktable::ChannelID,
191-
lrcorrtrktable::Amplitude,
192-
lrcorrtrktable::GainAmplitude,
193-
lrcorrtrktable::Eta,
194-
lrcorrtrktable::Phi);
307+
lrcorrtrktable::AmplitudeStore,
308+
lrcorrtrktable::EtaStore,
309+
lrcorrtrktable::PhiStore,
310+
lrcorrtrktable::Amplitude<lrcorrtrktable::AmplitudeStore>,
311+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
312+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>);
195313
using LRFt0cTrack = LRFt0cTracks::iterator;
196314

197315
DECLARE_SOA_TABLE(LRV0Tracks, "AOD", "LRV0TRACK",
198316
o2::soa::Index<>,
199317
lrcorrtrktable::LRCollisionId,
200318
lrcorrtrktable::IdPos,
201319
lrcorrtrktable::IdNeg,
202-
lrcorrtrktable::Pt,
203-
lrcorrtrktable::Eta,
204-
lrcorrtrktable::Phi,
320+
lrcorrtrktable::PtStore,
321+
lrcorrtrktable::EtaStore,
322+
lrcorrtrktable::PhiStore,
205323
lrcorrtrktable::InvMass,
206-
lrcorrtrktable::V0Type);
324+
lrcorrtrktable::V0Type,
325+
lrcorrtrktable::Pt<lrcorrtrktable::PtStore>,
326+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
327+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>);
207328
using LRV0Track = LRV0Tracks::iterator;
208329

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

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-
225347
DECLARE_SOA_TABLE(UpcLRMidTracks, "AOD", "UPCLRMIDTRACK",
226348
o2::soa::Index<>,
227349
lrcorrtrktable::UpcLRCollisionId,
228-
lrcorrtrktable::Pt,
229-
lrcorrtrktable::Eta,
230-
lrcorrtrktable::Phi,
231-
lrcorrtrktable::TrackType);
350+
lrcorrtrktable::TPCNClsFound,
351+
lrcorrtrktable::TPCNClsCrossedRows,
352+
lrcorrtrktable::TPCChi2NClStore,
353+
lrcorrtrktable::PtStore,
354+
lrcorrtrktable::EtaStore,
355+
lrcorrtrktable::PhiStore,
356+
lrcorrtrktable::DCAzStore,
357+
lrcorrtrktable::TrackType,
358+
lrcorrtrktable::TPCChi2NCl<lrcorrtrktable::TPCChi2NClStore>,
359+
lrcorrtrktable::Pt<lrcorrtrktable::PtStore>,
360+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
361+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>,
362+
lrcorrtrktable::DCAz<lrcorrtrktable::DCAzStore>);
232363
using UpcLRMidTrack = UpcLRMidTracks::iterator;
233364

234365
DECLARE_SOA_TABLE(UpcLRFt0aTracks, "AOD", "UPCLRFT0ATRACK",
235366
o2::soa::Index<>,
236367
lrcorrtrktable::UpcLRCollisionId,
237368
lrcorrtrktable::ChannelID,
238-
lrcorrtrktable::Amplitude,
239-
lrcorrtrktable::GainAmplitude,
240-
lrcorrtrktable::Eta,
241-
lrcorrtrktable::Phi);
369+
lrcorrtrktable::AmplitudeStore,
370+
lrcorrtrktable::EtaStore,
371+
lrcorrtrktable::PhiStore,
372+
lrcorrtrktable::Amplitude<lrcorrtrktable::AmplitudeStore>,
373+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
374+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>);
242375
using UpcLRFt0aTrack = UpcLRFt0aTracks::iterator;
243376

244377
DECLARE_SOA_TABLE(UpcLRFt0cTracks, "AOD", "UPCLRFT0CTRACK",
245378
o2::soa::Index<>,
246379
lrcorrtrktable::UpcLRCollisionId,
247380
lrcorrtrktable::ChannelID,
248-
lrcorrtrktable::Amplitude,
249-
lrcorrtrktable::GainAmplitude,
250-
lrcorrtrktable::Eta,
251-
lrcorrtrktable::Phi);
381+
lrcorrtrktable::AmplitudeStore,
382+
lrcorrtrktable::EtaStore,
383+
lrcorrtrktable::PhiStore,
384+
lrcorrtrktable::Amplitude<lrcorrtrktable::AmplitudeStore>,
385+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
386+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>);
252387
using UpcLRFt0cTrack = UpcLRFt0cTracks::iterator;
253388

254389
DECLARE_SOA_TABLE(UpcLRV0Tracks, "AOD", "UPCLRV0TRACK",
255390
o2::soa::Index<>,
256391
lrcorrtrktable::UpcLRCollisionId,
257392
lrcorrtrktable::IdPos,
258393
lrcorrtrktable::IdNeg,
259-
lrcorrtrktable::Pt,
260-
lrcorrtrktable::Eta,
261-
lrcorrtrktable::Phi,
394+
lrcorrtrktable::PtStore,
395+
lrcorrtrktable::EtaStore,
396+
lrcorrtrktable::PhiStore,
262397
lrcorrtrktable::InvMass,
263-
lrcorrtrktable::V0Type);
398+
lrcorrtrktable::V0Type,
399+
lrcorrtrktable::Pt<lrcorrtrktable::PtStore>,
400+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
401+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>);
264402
using UpcLRV0Track = UpcLRV0Tracks::iterator;
265403

266404
DECLARE_SOA_TABLE(UpcLRMftTracks, "AOD", "UPCLRMFTTRACK",
267405
o2::soa::Index<>,
268406
lrcorrtrktable::UpcLRCollisionId,
269-
lrcorrtrktable::Pt,
270-
lrcorrtrktable::Eta,
271-
lrcorrtrktable::Phi);
407+
lrcorrtrktable::AmbDegree,
408+
lrcorrtrktable::PtStore,
409+
lrcorrtrktable::EtaStore,
410+
lrcorrtrktable::PhiStore,
411+
fwdtrack::NClusters,
412+
lrcorrtrktable::BestDCAxyStore,
413+
lrcorrtrktable::BestDCAzStore,
414+
lrcorrtrktable::BestDCAXY<lrcorrtrktable::BestDCAxyStore>,
415+
lrcorrtrktable::BestDCAZ<lrcorrtrktable::BestDCAzStore>,
416+
lrcorrtrktable::Pt<lrcorrtrktable::PtStore>,
417+
lrcorrtrktable::Eta<lrcorrtrktable::EtaStore>,
418+
lrcorrtrktable::Phi<lrcorrtrktable::PhiStore>);
272419
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;
281420
} // namespace o2::aod
282421

283422
#endif // PWGCF_TWOPARTICLECORRELATIONS_DATAMODEL_LONGRANGEDERIVED_H_

0 commit comments

Comments
 (0)