Skip to content

Commit 916d318

Browse files
authored
Add table with event-plane Q vectors and centrality (AliceO2Group#4352)
* Add table for the flow of nuclei * Fill flow table in the right place
1 parent e38a5f7 commit 916d318

2 files changed

Lines changed: 110 additions & 6 deletions

File tree

PWGLF/DataModel/LFSlimNucleiTables.h

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#include "Framework/AnalysisDataModel.h"
1818
#include "Framework/ASoAHelpers.h"
19+
#include "Common/DataModel/Centrality.h"
1920

2021
#ifndef PWGLF_DATAMODEL_LFSLIMNUCLEITABLES_H_
2122
#define PWGLF_DATAMODEL_LFSLIMNUCLEITABLES_H_
@@ -46,6 +47,64 @@ DECLARE_SOA_COLUMN(gPhi, genPhi, float);
4647
DECLARE_SOA_COLUMN(PDGcode, pdgCode, int);
4748

4849
} // namespace NucleiTableNS
50+
namespace NucleiFlowTableNS
51+
{
52+
DECLARE_SOA_COLUMN(CentFV0A, centFV0A, float);
53+
DECLARE_SOA_COLUMN(CentFT0M, centFT0M, float);
54+
DECLARE_SOA_COLUMN(CentFT0A, centFT0A, float);
55+
DECLARE_SOA_COLUMN(CentFT0C, centFT0C, float);
56+
DECLARE_SOA_COLUMN(XQvecFV0A, xQvecFV0A, float);
57+
DECLARE_SOA_COLUMN(YQvecFV0A, yQvecFV0A, float);
58+
DECLARE_SOA_COLUMN(AmplQvecFV0A, amplQvecFV0A, float);
59+
DECLARE_SOA_COLUMN(XQvecFT0M, xQvecFT0M, float);
60+
DECLARE_SOA_COLUMN(YQvecFT0M, yQvecFT0M, float);
61+
DECLARE_SOA_COLUMN(AmplQvecFT0M, amplQvecFT0M, float);
62+
DECLARE_SOA_COLUMN(XQvecFT0A, xQvecFT0A, float);
63+
DECLARE_SOA_COLUMN(YQvecFT0A, yQvecFT0A, float);
64+
DECLARE_SOA_COLUMN(AmplQvecFT0A, amplQvecFT0A, float);
65+
DECLARE_SOA_COLUMN(XQvecFT0C, xQvecFT0C, float);
66+
DECLARE_SOA_COLUMN(YQvecFT0C, yQvecFT0C, float);
67+
DECLARE_SOA_COLUMN(AmplQvecFT0C, amplQvecFT0C, float);
68+
DECLARE_SOA_COLUMN(XQvecTPCpos, xQvecTPCpos, float);
69+
DECLARE_SOA_COLUMN(YQvecTPCpos, yQvecTPCpos, float);
70+
DECLARE_SOA_COLUMN(AmplQvecTPCpos, amplQvecTPCpos, float);
71+
DECLARE_SOA_COLUMN(XQvecTPCneg, xQvecTPCneg, float);
72+
DECLARE_SOA_COLUMN(YQvecTPCneg, yQvecTPCneg, float);
73+
DECLARE_SOA_COLUMN(AmplQvecTPCneg, amplQvecTPCneg, float);
74+
} // namespace NucleiFlowTableNS
75+
76+
DECLARE_SOA_TABLE(NucleiFlowColls, "AOD", "NUCLEIFLOWCOLLS",
77+
o2::soa::Index<>,
78+
NucleiFlowTableNS::CentFV0A,
79+
NucleiFlowTableNS::CentFT0M,
80+
NucleiFlowTableNS::CentFT0A,
81+
NucleiFlowTableNS::CentFT0C,
82+
NucleiFlowTableNS::XQvecFV0A,
83+
NucleiFlowTableNS::YQvecFV0A,
84+
NucleiFlowTableNS::AmplQvecFV0A,
85+
NucleiFlowTableNS::XQvecFT0M,
86+
NucleiFlowTableNS::YQvecFT0M,
87+
NucleiFlowTableNS::AmplQvecFT0M,
88+
NucleiFlowTableNS::XQvecFT0A,
89+
NucleiFlowTableNS::YQvecFT0A,
90+
NucleiFlowTableNS::AmplQvecFT0A,
91+
NucleiFlowTableNS::XQvecFT0C,
92+
NucleiFlowTableNS::YQvecFT0C,
93+
NucleiFlowTableNS::AmplQvecFT0C,
94+
NucleiFlowTableNS::XQvecTPCpos,
95+
NucleiFlowTableNS::YQvecTPCpos,
96+
NucleiFlowTableNS::AmplQvecTPCpos,
97+
NucleiFlowTableNS::XQvecTPCneg,
98+
NucleiFlowTableNS::YQvecTPCneg,
99+
NucleiFlowTableNS::AmplQvecTPCneg)
100+
101+
using NucleiFlowColl = NucleiFlowColls::iterator;
102+
103+
namespace NucleiTableNS
104+
{
105+
DECLARE_SOA_INDEX_COLUMN(NucleiFlowColl, nucleiFlowColl);
106+
}
107+
49108
DECLARE_SOA_TABLE(NucleiTable, "AOD", "NUCLEITABLE",
50109
NucleiTableNS::Pt,
51110
NucleiTableNS::Eta,
@@ -62,7 +121,8 @@ DECLARE_SOA_TABLE(NucleiTable, "AOD", "NUCLEITABLE",
62121
NucleiTableNS::TPCfindableCls,
63122
NucleiTableNS::TPCcrossedRows,
64123
NucleiTableNS::ITSclsMap,
65-
NucleiTableNS::TPCnCls)
124+
NucleiTableNS::TPCnCls,
125+
NucleiTableNS::NucleiFlowCollId)
66126

67127
DECLARE_SOA_TABLE(NucleiTableMC, "AOD", "NUCLEITABLEMC",
68128
NucleiTableNS::Pt,

PWGLF/TableProducer/nucleiSpectra.cxx

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
// Data (run3):
1818
// o2-analysis-lf-nuclei-spectra, o2-analysis-timestamp
1919
// o2-analysis-pid-tof-base, o2-analysis-multiplicity-table, o2-analysis-event-selection
20+
// (to add flow: o2-analysis-qvector-table, o2-analysis-centrality-table)
2021

2122
#include <cmath>
2223

@@ -32,6 +33,8 @@
3233
#include "Common/DataModel/TrackSelectionTables.h"
3334
#include "Common/Core/PID/PIDTOF.h"
3435
#include "Common/TableProducer/PID/pidTOFBase.h"
36+
#include "Common/Core/EventPlaneHelper.h"
37+
#include "Common/DataModel/Qvectors.h"
3538

3639
#include "DataFormatsParameters/GRPMagField.h"
3740
#include "DataFormatsParameters/GRPObject.h"
@@ -72,6 +75,7 @@ struct NucleusCandidate {
7275
uint8_t TPCcrossedRows;
7376
uint8_t ITSclsMap;
7477
uint8_t TPCnCls;
78+
int selCollIndex;
7579
};
7680

7781
namespace nuclei
@@ -161,6 +165,7 @@ struct nucleiSpectra {
161165

162166
Produces<o2::aod::NucleiTable> nucleiTable;
163167
Produces<o2::aod::NucleiTableMC> nucleiTableMC;
168+
Produces<o2::aod::NucleiFlowColls> nucleiFlowTable;
164169
Service<o2::ccdb::BasicCCDBManager> ccdb;
165170

166171
Configurable<std::string> cfgCentralityEstimator{"cfgCentralityEstimator", "V0A", "Centrality estimator name"};
@@ -214,6 +219,9 @@ struct nucleiSpectra {
214219

215220
using TrackCandidates = soa::Filtered<soa::Join<aod::TracksIU, aod::TracksCovIU, aod::TracksExtra, aod::TOFSignal, aod::TOFEvTime>>;
216221

222+
// Flow analysis
223+
using CollWithQvec = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::QvectorFT0Cs, aod::QvectorFT0As, aod::QvectorFT0Ms, aod::QvectorFV0As, aod::QvectorBPoss, aod::QvectorBNegs, aod::CentFV0As, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs>>::iterator;
224+
217225
HistogramRegistry spectra{"spectra", {}, OutputObjHandlingPolicy::AnalysisObject, true, true};
218226
o2::pid::tof::Beta<TrackCandidates::iterator> responseBeta;
219227

@@ -308,10 +316,10 @@ struct nucleiSpectra {
308316
o2::base::Propagator::Instance(true)->setMatLUT(nuclei::lut);
309317
}
310318

311-
template <typename TC>
312-
void fillDataInfo(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels>>::iterator const& collision, TC const& tracks)
319+
template <typename Tcoll, typename Ttrks>
320+
void fillDataInfo(Tcoll const& collision, Ttrks const& tracks)
313321
{
314-
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
322+
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
315323
initCCDB(bc);
316324

317325
// collision process loop
@@ -422,8 +430,34 @@ struct nucleiSpectra {
422430
}
423431
}
424432
if (flag & (kProton | kDeuteron | kTriton | kHe3 | kHe4)) {
433+
if constexpr (std::is_same<Tcoll, CollWithQvec>::value) {
434+
if (nuclei::candidates.empty()) {
435+
nucleiFlowTable(collision.centFV0A(),
436+
collision.centFT0M(),
437+
collision.centFT0A(),
438+
collision.centFT0C(),
439+
collision.qvecFV0ARe(),
440+
collision.qvecFV0AIm(),
441+
collision.sumAmplFV0A(),
442+
collision.qvecFT0MRe(),
443+
collision.qvecFT0MIm(),
444+
collision.sumAmplFT0M(),
445+
collision.qvecFT0ARe(),
446+
collision.qvecFT0AIm(),
447+
collision.sumAmplFT0A(),
448+
collision.qvecFT0CRe(),
449+
collision.qvecFT0CIm(),
450+
collision.sumAmplFT0C(),
451+
collision.qvecBPosRe(),
452+
collision.qvecBPosIm(),
453+
collision.nTrkBPos(),
454+
collision.qvecBNegRe(),
455+
collision.qvecBNegIm(),
456+
collision.nTrkBNeg());
457+
}
458+
}
425459
nuclei::candidates.emplace_back(NucleusCandidate{static_cast<int>(track.globalIndex()), (1 - 2 * iC) * trackParCov.getPt(), trackParCov.getEta(), trackParCov.getPhi(), track.tpcInnerParam(), beta, collision.posZ(), dcaInfo[0], dcaInfo[1], track.tpcSignal(), track.itsChi2NCl(),
426-
track.tpcChi2NCl(), flag, track.tpcNClsFindable(), static_cast<uint8_t>(track.tpcNClsCrossedRows()), track.itsClusterMap(), static_cast<uint8_t>(track.tpcNClsFound())});
460+
track.tpcChi2NCl(), flag, track.tpcNClsFindable(), static_cast<uint8_t>(track.tpcNClsCrossedRows()), track.itsClusterMap(), static_cast<uint8_t>(track.tpcNClsFound()), static_cast<int>(nucleiFlowTable.lastIndex())});
427461
}
428462
} // end loop over tracks
429463

@@ -436,11 +470,21 @@ struct nucleiSpectra {
436470
nuclei::candidates.clear();
437471
fillDataInfo(collision, tracks);
438472
for (auto& c : nuclei::candidates) {
439-
nucleiTable(c.pt, c.eta, c.phi, c.tpcInnerParam, c.beta, c.zVertex, c.DCAxy, c.DCAz, c.TPCsignal, c.ITSchi2, c.TPCchi2, c.flags, c.TPCfindableCls, c.TPCcrossedRows, c.ITSclsMap, c.TPCnCls);
473+
nucleiTable(c.pt, c.eta, c.phi, c.tpcInnerParam, c.beta, c.zVertex, c.DCAxy, c.DCAz, c.TPCsignal, c.ITSchi2, c.TPCchi2, c.flags, c.TPCfindableCls, c.TPCcrossedRows, c.ITSclsMap, c.TPCnCls, c.selCollIndex);
440474
}
441475
}
442476
PROCESS_SWITCH(nucleiSpectra, processData, "Data analysis", true);
443477

478+
void processDataFlow(CollWithQvec const& collision, TrackCandidates const& tracks, aod::BCsWithTimestamps const&)
479+
{
480+
nuclei::candidates.clear();
481+
fillDataInfo(collision, tracks);
482+
for (auto& c : nuclei::candidates) {
483+
nucleiTable(c.pt, c.eta, c.phi, c.tpcInnerParam, c.beta, c.zVertex, c.DCAxy, c.DCAz, c.TPCsignal, c.ITSchi2, c.TPCchi2, c.flags, c.TPCfindableCls, c.TPCcrossedRows, c.ITSclsMap, c.TPCnCls, c.selCollIndex);
484+
}
485+
}
486+
PROCESS_SWITCH(nucleiSpectra, processDataFlow, "Data analysis with flow", false);
487+
444488
Preslice<TrackCandidates> tracksPerCollisions = aod::track::collisionId;
445489
void processMC(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels>> const& collisions, TrackCandidates const& tracks, aod::McTrackLabels const& trackLabelsMC, aod::McParticles const& particlesMC, aod::BCsWithTimestamps const&)
446490
{

0 commit comments

Comments
 (0)