Skip to content

Commit

Permalink
Add table with event-plane Q vectors and centrality (AliceO2Group#4352)
Browse files Browse the repository at this point in the history
* Add table for the flow of nuclei

* Fill flow table in the right place
  • Loading branch information
lbariogl authored Jan 18, 2024
1 parent e38a5f7 commit 916d318
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 6 deletions.
62 changes: 61 additions & 1 deletion PWGLF/DataModel/LFSlimNucleiTables.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

#include "Framework/AnalysisDataModel.h"
#include "Framework/ASoAHelpers.h"
#include "Common/DataModel/Centrality.h"

#ifndef PWGLF_DATAMODEL_LFSLIMNUCLEITABLES_H_
#define PWGLF_DATAMODEL_LFSLIMNUCLEITABLES_H_
Expand Down Expand Up @@ -46,6 +47,64 @@ DECLARE_SOA_COLUMN(gPhi, genPhi, float);
DECLARE_SOA_COLUMN(PDGcode, pdgCode, int);

} // namespace NucleiTableNS
namespace NucleiFlowTableNS
{
DECLARE_SOA_COLUMN(CentFV0A, centFV0A, float);
DECLARE_SOA_COLUMN(CentFT0M, centFT0M, float);
DECLARE_SOA_COLUMN(CentFT0A, centFT0A, float);
DECLARE_SOA_COLUMN(CentFT0C, centFT0C, float);
DECLARE_SOA_COLUMN(XQvecFV0A, xQvecFV0A, float);
DECLARE_SOA_COLUMN(YQvecFV0A, yQvecFV0A, float);
DECLARE_SOA_COLUMN(AmplQvecFV0A, amplQvecFV0A, float);
DECLARE_SOA_COLUMN(XQvecFT0M, xQvecFT0M, float);
DECLARE_SOA_COLUMN(YQvecFT0M, yQvecFT0M, float);
DECLARE_SOA_COLUMN(AmplQvecFT0M, amplQvecFT0M, float);
DECLARE_SOA_COLUMN(XQvecFT0A, xQvecFT0A, float);
DECLARE_SOA_COLUMN(YQvecFT0A, yQvecFT0A, float);
DECLARE_SOA_COLUMN(AmplQvecFT0A, amplQvecFT0A, float);
DECLARE_SOA_COLUMN(XQvecFT0C, xQvecFT0C, float);
DECLARE_SOA_COLUMN(YQvecFT0C, yQvecFT0C, float);
DECLARE_SOA_COLUMN(AmplQvecFT0C, amplQvecFT0C, float);
DECLARE_SOA_COLUMN(XQvecTPCpos, xQvecTPCpos, float);
DECLARE_SOA_COLUMN(YQvecTPCpos, yQvecTPCpos, float);
DECLARE_SOA_COLUMN(AmplQvecTPCpos, amplQvecTPCpos, float);
DECLARE_SOA_COLUMN(XQvecTPCneg, xQvecTPCneg, float);
DECLARE_SOA_COLUMN(YQvecTPCneg, yQvecTPCneg, float);
DECLARE_SOA_COLUMN(AmplQvecTPCneg, amplQvecTPCneg, float);
} // namespace NucleiFlowTableNS

DECLARE_SOA_TABLE(NucleiFlowColls, "AOD", "NUCLEIFLOWCOLLS",
o2::soa::Index<>,
NucleiFlowTableNS::CentFV0A,
NucleiFlowTableNS::CentFT0M,
NucleiFlowTableNS::CentFT0A,
NucleiFlowTableNS::CentFT0C,
NucleiFlowTableNS::XQvecFV0A,
NucleiFlowTableNS::YQvecFV0A,
NucleiFlowTableNS::AmplQvecFV0A,
NucleiFlowTableNS::XQvecFT0M,
NucleiFlowTableNS::YQvecFT0M,
NucleiFlowTableNS::AmplQvecFT0M,
NucleiFlowTableNS::XQvecFT0A,
NucleiFlowTableNS::YQvecFT0A,
NucleiFlowTableNS::AmplQvecFT0A,
NucleiFlowTableNS::XQvecFT0C,
NucleiFlowTableNS::YQvecFT0C,
NucleiFlowTableNS::AmplQvecFT0C,
NucleiFlowTableNS::XQvecTPCpos,
NucleiFlowTableNS::YQvecTPCpos,
NucleiFlowTableNS::AmplQvecTPCpos,
NucleiFlowTableNS::XQvecTPCneg,
NucleiFlowTableNS::YQvecTPCneg,
NucleiFlowTableNS::AmplQvecTPCneg)

using NucleiFlowColl = NucleiFlowColls::iterator;

namespace NucleiTableNS
{
DECLARE_SOA_INDEX_COLUMN(NucleiFlowColl, nucleiFlowColl);
}

DECLARE_SOA_TABLE(NucleiTable, "AOD", "NUCLEITABLE",
NucleiTableNS::Pt,
NucleiTableNS::Eta,
Expand All @@ -62,7 +121,8 @@ DECLARE_SOA_TABLE(NucleiTable, "AOD", "NUCLEITABLE",
NucleiTableNS::TPCfindableCls,
NucleiTableNS::TPCcrossedRows,
NucleiTableNS::ITSclsMap,
NucleiTableNS::TPCnCls)
NucleiTableNS::TPCnCls,
NucleiTableNS::NucleiFlowCollId)

DECLARE_SOA_TABLE(NucleiTableMC, "AOD", "NUCLEITABLEMC",
NucleiTableNS::Pt,
Expand Down
54 changes: 49 additions & 5 deletions PWGLF/TableProducer/nucleiSpectra.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
// Data (run3):
// o2-analysis-lf-nuclei-spectra, o2-analysis-timestamp
// o2-analysis-pid-tof-base, o2-analysis-multiplicity-table, o2-analysis-event-selection
// (to add flow: o2-analysis-qvector-table, o2-analysis-centrality-table)

#include <cmath>

Expand All @@ -32,6 +33,8 @@
#include "Common/DataModel/TrackSelectionTables.h"
#include "Common/Core/PID/PIDTOF.h"
#include "Common/TableProducer/PID/pidTOFBase.h"
#include "Common/Core/EventPlaneHelper.h"
#include "Common/DataModel/Qvectors.h"

#include "DataFormatsParameters/GRPMagField.h"
#include "DataFormatsParameters/GRPObject.h"
Expand Down Expand Up @@ -72,6 +75,7 @@ struct NucleusCandidate {
uint8_t TPCcrossedRows;
uint8_t ITSclsMap;
uint8_t TPCnCls;
int selCollIndex;
};

namespace nuclei
Expand Down Expand Up @@ -161,6 +165,7 @@ struct nucleiSpectra {

Produces<o2::aod::NucleiTable> nucleiTable;
Produces<o2::aod::NucleiTableMC> nucleiTableMC;
Produces<o2::aod::NucleiFlowColls> nucleiFlowTable;
Service<o2::ccdb::BasicCCDBManager> ccdb;

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

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

// Flow analysis
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;

HistogramRegistry spectra{"spectra", {}, OutputObjHandlingPolicy::AnalysisObject, true, true};
o2::pid::tof::Beta<TrackCandidates::iterator> responseBeta;

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

template <typename TC>
void fillDataInfo(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels>>::iterator const& collision, TC const& tracks)
template <typename Tcoll, typename Ttrks>
void fillDataInfo(Tcoll const& collision, Ttrks const& tracks)
{
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
initCCDB(bc);

// collision process loop
Expand Down Expand Up @@ -422,8 +430,34 @@ struct nucleiSpectra {
}
}
if (flag & (kProton | kDeuteron | kTriton | kHe3 | kHe4)) {
if constexpr (std::is_same<Tcoll, CollWithQvec>::value) {
if (nuclei::candidates.empty()) {
nucleiFlowTable(collision.centFV0A(),
collision.centFT0M(),
collision.centFT0A(),
collision.centFT0C(),
collision.qvecFV0ARe(),
collision.qvecFV0AIm(),
collision.sumAmplFV0A(),
collision.qvecFT0MRe(),
collision.qvecFT0MIm(),
collision.sumAmplFT0M(),
collision.qvecFT0ARe(),
collision.qvecFT0AIm(),
collision.sumAmplFT0A(),
collision.qvecFT0CRe(),
collision.qvecFT0CIm(),
collision.sumAmplFT0C(),
collision.qvecBPosRe(),
collision.qvecBPosIm(),
collision.nTrkBPos(),
collision.qvecBNegRe(),
collision.qvecBNegIm(),
collision.nTrkBNeg());
}
}
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(),
track.tpcChi2NCl(), flag, track.tpcNClsFindable(), static_cast<uint8_t>(track.tpcNClsCrossedRows()), track.itsClusterMap(), static_cast<uint8_t>(track.tpcNClsFound())});
track.tpcChi2NCl(), flag, track.tpcNClsFindable(), static_cast<uint8_t>(track.tpcNClsCrossedRows()), track.itsClusterMap(), static_cast<uint8_t>(track.tpcNClsFound()), static_cast<int>(nucleiFlowTable.lastIndex())});
}
} // end loop over tracks

Expand All @@ -436,11 +470,21 @@ struct nucleiSpectra {
nuclei::candidates.clear();
fillDataInfo(collision, tracks);
for (auto& c : nuclei::candidates) {
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);
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);
}
}
PROCESS_SWITCH(nucleiSpectra, processData, "Data analysis", true);

void processDataFlow(CollWithQvec const& collision, TrackCandidates const& tracks, aod::BCsWithTimestamps const&)
{
nuclei::candidates.clear();
fillDataInfo(collision, tracks);
for (auto& c : nuclei::candidates) {
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);
}
}
PROCESS_SWITCH(nucleiSpectra, processDataFlow, "Data analysis with flow", false);

Preslice<TrackCandidates> tracksPerCollisions = aod::track::collisionId;
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&)
{
Expand Down

0 comments on commit 916d318

Please sign in to comment.