Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 59 additions & 11 deletions PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@

Configurable<std::string> fCorrectionPath{"fCorrectionPath", "", "Correction path to file"};
Configurable<std::string> fCorrectionHisto{"fCorrectionHisto", "", "Correction histogram"};
Configurable<std::string> cfgUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};
Configurable<std::string> cfgUrl{"cfgUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};

// Event selection
Configurable<float> cutzVertex{"cutzVertex", 10.0, "|vertexZ| value limit"};
Expand Down Expand Up @@ -125,7 +125,6 @@
ConfigurableAxis confMultBins{"confMultBins", {VARIABLE_WIDTH, 0.0f, 4.0f, 8.0f, 12.0f, 16.0f, 20.0f, 24.0f, 28.0f, 50.0f, 100.0f, 99999.f}, "Mixing bins - multiplicity"};
ConfigurableAxis confVtxBins{"confVtxBins", {VARIABLE_WIDTH, -10.0f, -8.f, -6.f, -4.f, -2.f, 0.f, 2.f, 4.f, 6.f, 8.f, 10.f}, "Mixing bins - z-vertex"};
ColumnBinningPolicy<aod::singletrackselector::PosZ, aod::singletrackselector::Mult> colBinning{{confVtxBins, confMultBins}, true};
ColumnBinningPolicy<aod::mccollision::PosZ, o2::aod::mult::MultMCNParticlesEta10> colBinningGen{{confVtxBins, confMultBins}, true};

// pT/A bins
Configurable<std::vector<double>> pTBins{"pTBins", {0.6f, 1.0f, 1.2f, 2.f}, "p_{T} bins"};
Expand All @@ -134,7 +133,7 @@
ConfigurableAxis DeltaPhiAxis = {"DeltaPhiAxis", {46, -1 * o2::constants::math::PIHalf, 3 * o2::constants::math::PIHalf}, "#Delta#phi (rad)"};

using FilteredCollisions = soa::Filtered<aod::SingleCollSels>;
using SimCollisions = soa::Filtered<soa::Join<aod::McCollisions, aod::MultsExtraMC>>;
using SimCollisions = soa::Filtered<aod::McCollisions>;
using SimParticles = aod::McParticles;
using FilteredTracks = soa::Filtered<soa::Join<aod::SingleTrackSels, aod::SingleTrkExtras, aod::SinglePIDEls, aod::SinglePIDPrs, aod::SinglePIDDes>>; // new tables (v3)
using FilteredTracksMC = soa::Filtered<soa::Join<aod::SingleTrackSels, aod::SingleTrkMCs, aod::SingleTrkExtras, aod::SinglePIDEls, aod::SinglePIDPrs, aod::SinglePIDDes>>; // new tables (v3)
Expand Down Expand Up @@ -679,6 +678,30 @@
LOGP(info, "Opened histogram {}", Form("%s_antideuteron", histname.Data()));
}

template <typename TParticles>
float getMCMultiplicity(TParticles const& particles)
{
float Ncharged = 0.;
for (auto& mcParticle : particles) {

Check failure on line 685 in PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[const-ref-in-for-loop]

Use constant references for non-modified iterators in range-based for loops.

if (!mcParticle.isPhysicalPrimary()) {
continue;
}

if (std::abs(mcParticle.eta()) > 1.0f) {
continue;
}

TParticlePDG* p = pdgDB->GetParticle(mcParticle.pdgCode());
if (std::abs(p->Charge()) > 1E-3) {
Ncharged++;
}
}

registry.fill(HIST("hMult"), Ncharged);
return Ncharged;
}

void processSameEvent(FilteredCollisions::iterator const& collision, FilteredTracks const& tracks)
{

Expand Down Expand Up @@ -721,28 +744,28 @@
QA.fill(HIST("QA/hnSigmaITSVsPt_Pr"), track.pt() * track.sign(), track.itsNSigmaPr());
QA.fill(HIST("QA/hnSigmaITSVsPt_De"), track.pt() * track.sign(), track.itsNSigmaDe());

if (IsProton(track, +1)) {
if (IsProton(track, -1)) {
QA.fill(HIST("QA/hEtaAntiPr"), track.eta());
QA.fill(HIST("QA/hPhiAntiPr"), track.phi());
QA.fill(HIST("QA/hnSigmaTOFVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.tofNSigmaPr());
QA.fill(HIST("QA/hnSigmaTPCVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.tpcNSigmaPr());
QA.fill(HIST("QA/hnSigmaITSVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.itsNSigmaPr());
}
if (IsProton(track, -1)) {
if (IsProton(track, +1)) {
QA.fill(HIST("QA/hEtaPr"), track.eta());
QA.fill(HIST("QA/hPhiPr"), track.phi());
QA.fill(HIST("QA/hnSigmaTOFVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.tofNSigmaPr());
QA.fill(HIST("QA/hnSigmaTPCVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.tpcNSigmaPr());
QA.fill(HIST("QA/hnSigmaITSVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.itsNSigmaPr());
}
if (IsDeuteron(track, +1)) {
if (IsDeuteron(track, -1)) {
QA.fill(HIST("QA/hEtaAntiDe"), track.eta());
QA.fill(HIST("QA/hPhiAntiDe"), track.phi());
QA.fill(HIST("QA/hnSigmaTOFVsPt_De_AfterSel"), track.pt() * track.sign(), track.tofNSigmaDe());
QA.fill(HIST("QA/hnSigmaTPCVsPt_De_AfterSel"), track.pt() * track.sign(), track.tpcNSigmaDe());
QA.fill(HIST("QA/hnSigmaITSVsPt_De_AfterSel"), track.pt() * track.sign(), track.itsNSigmaDe());
}
if (IsDeuteron(track, -1)) {
if (IsDeuteron(track, +1)) {
QA.fill(HIST("QA/hEtaDe"), track.eta());
QA.fill(HIST("QA/hPhiDe"), track.phi());
QA.fill(HIST("QA/hnSigmaTOFVsPt_De_AfterSel"), track.pt() * track.sign(), track.tofNSigmaDe());
Expand Down Expand Up @@ -773,6 +796,12 @@
if (!applyDCAcut(part1))
continue;

// remove tracks outside pt bins
if (part0.pt() < pTBins.value.at(0) || part0.pt() >= pTBins.value.at(nBinspT))
continue;
if (part1.pt() < pTBins.value.at(0) || part1.pt() >= pTBins.value.at(nBinspT))
continue;

// mode 6
if (mode == kPP) {
if (!IsProton(part0, +1))
Expand Down Expand Up @@ -809,6 +838,12 @@
if (!applyDCAcut(part1))
continue;

// remove tracks outside pt bins
if (part0.pt() < pTBins.value.at(0) || part0.pt() >= pTBins.value.at(nBinspT))
continue;
if (part1.pt() < pTBins.value.at(0) || part1.pt() >= pTBins.value.at(nBinspT))
continue;

// modes 0,1,2,3,4,7
if (mode == kDbarPbar) {
if (!IsDeuteron(part0, -1))
Expand Down Expand Up @@ -866,7 +901,7 @@
const auto& magFieldTesla1 = collision1.magField();
const auto& magFieldTesla2 = collision2.magField();

if (magFieldTesla1 != magFieldTesla2) {
if (std::abs(magFieldTesla1 - magFieldTesla2) > 1e-4) {

Check failure on line 904 in PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
continue;
}

Expand All @@ -889,6 +924,12 @@
if (!applyDCAcut(part1))
continue;

// remove tracks outside pt bins
if (part0.pt() < pTBins.value.at(0) || part0.pt() >= pTBins.value.at(nBinspT))
continue;
if (part1.pt() < pTBins.value.at(0) || part1.pt() >= pTBins.value.at(nBinspT))
continue;

//{"mode", 0, "0: antid-antip, 1: d-p, 2: antid-p, 3: d-antip, 4: antip-p, 5: antip-antip, 6: p-p, 7: p-antip"};
if (mode == kDbarPbar) {
if (!IsDeuteron(part0, -1))
Expand Down Expand Up @@ -966,7 +1007,7 @@
registry.fill(HIST("hPrimPrDCAxy"), track.dcaXY(), track.pt());
if (track.origin() == 1)
registry.fill(HIST("hSecWeakPrDCAxy"), track.dcaXY(), track.pt());
if (track.origin() == 2)

Check failure on line 1010 in PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("hSecMatPrDCAxy"), track.dcaXY(), track.pt());
}
if (IsProton(track, -1) && track.pdgCode() == -PDG_t::kProton) {
Expand All @@ -975,7 +1016,7 @@
registry.fill(HIST("hPrimAntiPrDCAxy"), track.dcaXY(), track.pt());
if (track.origin() == 1)
registry.fill(HIST("hSecWeakAntiPrDCAxy"), track.dcaXY(), track.pt());
if (track.origin() == 2)

Check failure on line 1019 in PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("hSecMatAntiPrDCAxy"), track.dcaXY(), track.pt());
}
if (IsDeuteron(track, +1) && track.pdgCode() == o2::constants::physics::Pdg::kDeuteron) {
Expand All @@ -984,7 +1025,7 @@
registry.fill(HIST("hPrimDeDCAxy"), track.dcaXY(), track.pt());
if (track.origin() == 1)
registry.fill(HIST("hSecWeakDeDCAxy"), track.dcaXY(), track.pt());
if (track.origin() == 2)

Check failure on line 1028 in PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("hSecMatDeDCAxy"), track.dcaXY(), track.pt());
}
if (IsDeuteron(track, -1) && track.pdgCode() == -o2::constants::physics::Pdg::kDeuteron) {
Expand All @@ -993,7 +1034,7 @@
registry.fill(HIST("hPrimAntiDeDCAxy"), track.dcaXY(), track.pt());
if (track.origin() == 1)
registry.fill(HIST("hSecWeakAntiDeDCAxy"), track.dcaXY(), track.pt());
if (track.origin() == 2)

Check failure on line 1037 in PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("hSecMatAntiDeDCAxy"), track.dcaXY(), track.pt());
}

Expand Down Expand Up @@ -1027,13 +1068,13 @@

if (isPr) {
registry.fill(HIST("hPrimSec_EtaPhiPt_Proton"), track.eta(), track.phi(), track.pt() * +1);
if (track.origin() == 1 || track.origin() == 2) { // secondaries

Check failure on line 1071 in PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("hSec_EtaPhiPt_Proton"), track.eta(), track.phi(), track.pt() * +1);
}
}
if (isAntiPr) {
registry.fill(HIST("hPrimSec_EtaPhiPt_Proton"), track.eta(), track.phi(), track.pt() * -1);
if (track.origin() == 1 || track.origin() == 2) {

Check failure on line 1077 in PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("hSec_EtaPhiPt_Proton"), track.eta(), track.phi(), track.pt() * -1);
}
}
Expand Down Expand Up @@ -1339,10 +1380,10 @@
registry.fill(HIST("Generated/hQADeuterons"), 1.5);
}

if (particle.pdgCode() == o2::constants::physics::Pdg::kDeuteron && std::abs(particle.y()) < 0.5) {

Check failure on line 1383 in PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("Generated/hDeuteronsVsPt"), particle.pt());
}
if (particle.pdgCode() == -o2::constants::physics::Pdg::kDeuteron && std::abs(particle.y()) < 0.5) {

Check failure on line 1386 in PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("Generated/hAntiDeuteronsVsPt"), particle.pt());
}

Expand Down Expand Up @@ -1470,14 +1511,21 @@
void processMixedEventGen(SimCollisions const& mcCollisions, SimParticles const& mcParticles)
{

for (const auto& [collision1, collision2] : soa::selfCombinations(colBinningGen, 5, -1, mcCollisions, mcCollisions)) {
auto getMultiplicity = [this, &mcParticles](SimCollisions::iterator const& collision) {
auto particlesPerCol = mcParticles.sliceBy(perMcCollision, collision.globalIndex());
auto multiplicity = getMCMultiplicity(particlesPerCol);
return multiplicity;
};

// LOGF(info, "Mixed event collisions: (%d, %d) zvtx (%.1f, %.1f) mult (%d, %d)", collision1.globalIndex(), collision2.globalIndex(), collision1.posZ(), collision2.posZ(), collision1.multMCNParticlesEta10(), collision2.multMCNParticlesEta10());
using BinningTypeMC = FlexibleBinningPolicy<std::tuple<decltype(getMultiplicity)>, aod::mccollision::PosZ, decltype(getMultiplicity)>;
BinningTypeMC colBinningGen{{getMultiplicity}, {confVtxBins, confMultBins}, true};

for (const auto& [collision1, collision2] : soa::selfCombinations(colBinningGen, 5, -1, mcCollisions, mcCollisions)) {

auto groupPartsOne = mcParticles.sliceBy(perMcCollision, collision1.globalIndex());
auto groupPartsTwo = mcParticles.sliceBy(perMcCollision, collision2.globalIndex());

registry.fill(HIST("hMult"), collision1.multMCNParticlesEta10());
// LOGF(info, "Mixed event collisions: (%d, %d) zvtx (%.1f, %.1f) mult (%.1f, %.1f)", collision1.globalIndex(), collision2.globalIndex(), collision1.posZ(), collision2.posZ(), getMCMultiplicity(groupPartsOne), getMCMultiplicity(groupPartsTwo));

for (const auto& [part0, part1] : combinations(CombinationsFullIndexPolicy(groupPartsOne, groupPartsTwo))) {

Expand Down
Loading