Skip to content

Commit c90afcd

Browse files
authored
[PWGLF] deuteron proton correlaton: fix gen mixed event (#15943)
1 parent 21bac9e commit c90afcd

1 file changed

Lines changed: 59 additions & 11 deletions

File tree

PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx

Lines changed: 59 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ struct HadronNucleiCorrelation {
8787

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

9292
// Event selection
9393
Configurable<float> cutzVertex{"cutzVertex", 10.0, "|vertexZ| value limit"};
@@ -125,7 +125,6 @@ struct HadronNucleiCorrelation {
125125
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"};
126126
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"};
127127
ColumnBinningPolicy<aod::singletrackselector::PosZ, aod::singletrackselector::Mult> colBinning{{confVtxBins, confMultBins}, true};
128-
ColumnBinningPolicy<aod::mccollision::PosZ, o2::aod::mult::MultMCNParticlesEta10> colBinningGen{{confVtxBins, confMultBins}, true};
129128

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

136135
using FilteredCollisions = soa::Filtered<aod::SingleCollSels>;
137-
using SimCollisions = soa::Filtered<soa::Join<aod::McCollisions, aod::MultsExtraMC>>;
136+
using SimCollisions = soa::Filtered<aod::McCollisions>;
138137
using SimParticles = aod::McParticles;
139138
using FilteredTracks = soa::Filtered<soa::Join<aod::SingleTrackSels, aod::SingleTrkExtras, aod::SinglePIDEls, aod::SinglePIDPrs, aod::SinglePIDDes>>; // new tables (v3)
140139
using FilteredTracksMC = soa::Filtered<soa::Join<aod::SingleTrackSels, aod::SingleTrkMCs, aod::SingleTrkExtras, aod::SinglePIDEls, aod::SinglePIDPrs, aod::SinglePIDDes>>; // new tables (v3)
@@ -679,6 +678,30 @@ struct HadronNucleiCorrelation {
679678
LOGP(info, "Opened histogram {}", Form("%s_antideuteron", histname.Data()));
680679
}
681680

681+
template <typename TParticles>
682+
float getMCMultiplicity(TParticles const& particles)
683+
{
684+
float Ncharged = 0.;
685+
for (auto& mcParticle : particles) {
686+
687+
if (!mcParticle.isPhysicalPrimary()) {
688+
continue;
689+
}
690+
691+
if (std::abs(mcParticle.eta()) > 1.0f) {
692+
continue;
693+
}
694+
695+
TParticlePDG* p = pdgDB->GetParticle(mcParticle.pdgCode());
696+
if (std::abs(p->Charge()) > 1E-3) {
697+
Ncharged++;
698+
}
699+
}
700+
701+
registry.fill(HIST("hMult"), Ncharged);
702+
return Ncharged;
703+
}
704+
682705
void processSameEvent(FilteredCollisions::iterator const& collision, FilteredTracks const& tracks)
683706
{
684707

@@ -721,28 +744,28 @@ struct HadronNucleiCorrelation {
721744
QA.fill(HIST("QA/hnSigmaITSVsPt_Pr"), track.pt() * track.sign(), track.itsNSigmaPr());
722745
QA.fill(HIST("QA/hnSigmaITSVsPt_De"), track.pt() * track.sign(), track.itsNSigmaDe());
723746

724-
if (IsProton(track, +1)) {
747+
if (IsProton(track, -1)) {
725748
QA.fill(HIST("QA/hEtaAntiPr"), track.eta());
726749
QA.fill(HIST("QA/hPhiAntiPr"), track.phi());
727750
QA.fill(HIST("QA/hnSigmaTOFVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.tofNSigmaPr());
728751
QA.fill(HIST("QA/hnSigmaTPCVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.tpcNSigmaPr());
729752
QA.fill(HIST("QA/hnSigmaITSVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.itsNSigmaPr());
730753
}
731-
if (IsProton(track, -1)) {
754+
if (IsProton(track, +1)) {
732755
QA.fill(HIST("QA/hEtaPr"), track.eta());
733756
QA.fill(HIST("QA/hPhiPr"), track.phi());
734757
QA.fill(HIST("QA/hnSigmaTOFVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.tofNSigmaPr());
735758
QA.fill(HIST("QA/hnSigmaTPCVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.tpcNSigmaPr());
736759
QA.fill(HIST("QA/hnSigmaITSVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.itsNSigmaPr());
737760
}
738-
if (IsDeuteron(track, +1)) {
761+
if (IsDeuteron(track, -1)) {
739762
QA.fill(HIST("QA/hEtaAntiDe"), track.eta());
740763
QA.fill(HIST("QA/hPhiAntiDe"), track.phi());
741764
QA.fill(HIST("QA/hnSigmaTOFVsPt_De_AfterSel"), track.pt() * track.sign(), track.tofNSigmaDe());
742765
QA.fill(HIST("QA/hnSigmaTPCVsPt_De_AfterSel"), track.pt() * track.sign(), track.tpcNSigmaDe());
743766
QA.fill(HIST("QA/hnSigmaITSVsPt_De_AfterSel"), track.pt() * track.sign(), track.itsNSigmaDe());
744767
}
745-
if (IsDeuteron(track, -1)) {
768+
if (IsDeuteron(track, +1)) {
746769
QA.fill(HIST("QA/hEtaDe"), track.eta());
747770
QA.fill(HIST("QA/hPhiDe"), track.phi());
748771
QA.fill(HIST("QA/hnSigmaTOFVsPt_De_AfterSel"), track.pt() * track.sign(), track.tofNSigmaDe());
@@ -773,6 +796,12 @@ struct HadronNucleiCorrelation {
773796
if (!applyDCAcut(part1))
774797
continue;
775798

799+
// remove tracks outside pt bins
800+
if (part0.pt() < pTBins.value.at(0) || part0.pt() >= pTBins.value.at(nBinspT))
801+
continue;
802+
if (part1.pt() < pTBins.value.at(0) || part1.pt() >= pTBins.value.at(nBinspT))
803+
continue;
804+
776805
// mode 6
777806
if (mode == kPP) {
778807
if (!IsProton(part0, +1))
@@ -809,6 +838,12 @@ struct HadronNucleiCorrelation {
809838
if (!applyDCAcut(part1))
810839
continue;
811840

841+
// remove tracks outside pt bins
842+
if (part0.pt() < pTBins.value.at(0) || part0.pt() >= pTBins.value.at(nBinspT))
843+
continue;
844+
if (part1.pt() < pTBins.value.at(0) || part1.pt() >= pTBins.value.at(nBinspT))
845+
continue;
846+
812847
// modes 0,1,2,3,4,7
813848
if (mode == kDbarPbar) {
814849
if (!IsDeuteron(part0, -1))
@@ -866,7 +901,7 @@ struct HadronNucleiCorrelation {
866901
const auto& magFieldTesla1 = collision1.magField();
867902
const auto& magFieldTesla2 = collision2.magField();
868903

869-
if (magFieldTesla1 != magFieldTesla2) {
904+
if (std::abs(magFieldTesla1 - magFieldTesla2) > 1e-4) {
870905
continue;
871906
}
872907

@@ -889,6 +924,12 @@ struct HadronNucleiCorrelation {
889924
if (!applyDCAcut(part1))
890925
continue;
891926

927+
// remove tracks outside pt bins
928+
if (part0.pt() < pTBins.value.at(0) || part0.pt() >= pTBins.value.at(nBinspT))
929+
continue;
930+
if (part1.pt() < pTBins.value.at(0) || part1.pt() >= pTBins.value.at(nBinspT))
931+
continue;
932+
892933
//{"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"};
893934
if (mode == kDbarPbar) {
894935
if (!IsDeuteron(part0, -1))
@@ -1470,14 +1511,21 @@ struct HadronNucleiCorrelation {
14701511
void processMixedEventGen(SimCollisions const& mcCollisions, SimParticles const& mcParticles)
14711512
{
14721513

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

1475-
// 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());
1520+
using BinningTypeMC = FlexibleBinningPolicy<std::tuple<decltype(getMultiplicity)>, aod::mccollision::PosZ, decltype(getMultiplicity)>;
1521+
BinningTypeMC colBinningGen{{getMultiplicity}, {confVtxBins, confMultBins}, true};
1522+
1523+
for (const auto& [collision1, collision2] : soa::selfCombinations(colBinningGen, 5, -1, mcCollisions, mcCollisions)) {
14761524

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

1480-
registry.fill(HIST("hMult"), collision1.multMCNParticlesEta10());
1528+
// 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));
14811529

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

0 commit comments

Comments
 (0)