Skip to content

Commit 3cf1c3b

Browse files
authored
Merge branch 'AliceO2Group:master' into master
2 parents 6ea5bd6 + d5fa083 commit 3cf1c3b

39 files changed

+2432
-1227
lines changed

Common/TableProducer/fwdtrackPropagation.cxx

Lines changed: 12 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ struct FwdTrackPropagation {
6161
Configurable<float> maxEtaSA{"maxEtaSA", -2.5, "max. eta acceptance for MCH-MID"};
6262
Configurable<float> minEtaGL{"minEtaGL", -3.6, "min. eta acceptance for MFT-MCH-MID"};
6363
Configurable<float> maxEtaGL{"maxEtaGL", -2.5, "max. eta acceptance for MFT-MCH-MID"};
64+
Configurable<float> minRabsGL{"minRabsGL", 27.6, "min. R at absorber end for global muon (min. eta = -3.6)"}; // std::tan(2.f * std::atan(std::exp(- -3.6)) ) * -505.
6465
Configurable<float> minRabs{"minRabs", 17.6, "min. R at absorber end"};
6566
Configurable<float> midRabs{"midRabs", 26.5, "middle R at absorber end for pDCA cut"};
6667
Configurable<float> maxRabs{"maxRabs", 89.5, "max. R at absorber end"};
@@ -69,11 +70,8 @@ struct FwdTrackPropagation {
6970
Configurable<float> maxPDCAforSmallR{"maxPDCAforSmallR", 594.f, "max. pDCA for small R at absorber end"};
7071
Configurable<float> maxMatchingChi2MCHMFT{"maxMatchingChi2MCHMFT", 50.f, "max. chi2 for MCH-MFT matching"};
7172
Configurable<float> maxChi2SA{"maxChi2SA", 1e+6, "max. chi2 for standalone muon"};
72-
Configurable<float> maxChi2GL{"maxChi2GL", 1e+6, "max. chi2 for global muon"};
73+
Configurable<float> maxChi2GL{"maxChi2GL", 50.f, "max. chi2 for global muon"};
7374
Configurable<bool> refitGlobalMuon{"refitGlobalMuon", true, "flag to refit global muon"};
74-
Configurable<bool> applyDEtaDPhi{"cfgApplyDEtaDPhi", false, "flag to apply deta-dphi elliptic cut"};
75-
Configurable<float> minDEta{"minDEta", 0.1, "min deta between MFT-MCH-MID and its attached MID-MCH at PV"};
76-
Configurable<float> minDPhi{"minDPhi", 0.1, "min dphi between MFT-MCH-MID and its attached MID-MCH at PV"};
7775

7876
HistogramRegistry fRegistry{"fRegistry"};
7977
static constexpr std::string_view muon_types[5] = {"MFTMCHMID/", "MFTMCHMIDOtherMatch/", "MFTMCH/", "MCHMID/", "MCH/"};
@@ -175,6 +173,9 @@ struct FwdTrackPropagation {
175173
if (chi2 < 0.f || maxChi2GL < chi2) {
176174
return false;
177175
}
176+
if (rAtAbsorberEnd < minRabsGL || maxRabs < rAtAbsorberEnd) {
177+
return false;
178+
}
178179
} else if (trackType == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack)) {
179180
if (eta < minEtaSA || maxEtaSA < eta) {
180181
return false;
@@ -189,89 +190,16 @@ struct FwdTrackPropagation {
189190
return true;
190191
}
191192

192-
template <typename TFwdTracks, typename TMFTTracks, typename TCollision, typename TTarget, typename TCandidates>
193-
bool isBestMatch(TCollision const& collision, TTarget const& target, TCandidates const& candidates)
193+
template <typename TCollision, typename TFwdTrack, typename TFwdTracks, typename TMFTTracks>
194+
void fillFwdTrackTable(TCollision const& collision, TFwdTrack fwdtrack, TFwdTracks const&, TMFTTracks const&, const bool isAmbiguous)
194195
{
195-
std::map<int64_t, float> map_chi2MFTMCH;
196-
for (const auto& matchedtrack : candidates) { // MFT-MCH-MID or MFT-MCH
197-
if (matchedtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
198-
continue;
199-
}
200-
o2::dataformats::GlobalFwdTrack propmuonAtPV = propagateMuon(matchedtrack, collision, propagationPoint::kToVertex);
201-
float eta = propmuonAtPV.getEta();
202-
float phi = propmuonAtPV.getPhi();
203-
if (refitGlobalMuon) {
204-
const auto& mfttrack = matchedtrack.template matchMFTTrack_as<TMFTTracks>();
205-
eta = mfttrack.eta();
206-
phi = mfttrack.phi();
207-
}
208-
o2::math_utils::bringTo02Pi(phi);
209-
if (eta < minEtaGL || maxEtaGL < eta) {
210-
continue;
211-
}
212-
213-
const auto& mchtrack = matchedtrack.template matchMCHTrack_as<TFwdTracks>(); // MCH-MID
214-
o2::dataformats::GlobalFwdTrack propmuonAtPV_Matched = propagateMuon(mchtrack, collision, propagationPoint::kToVertex);
215-
float etaMatchedMCHMID = propmuonAtPV_Matched.getEta();
216-
float phiMatchedMCHMID = propmuonAtPV_Matched.getPhi();
217-
o2::math_utils::bringTo02Pi(phiMatchedMCHMID);
218-
219-
float deta = etaMatchedMCHMID - eta;
220-
float dphi = phiMatchedMCHMID - phi;
221-
o2::math_utils::bringToPMPi(dphi);
222-
if (applyDEtaDPhi && std::sqrt(std::pow(deta / minDEta, 2) + std::pow(dphi / minDPhi, 2)) > 1.f) {
223-
continue;
224-
}
225-
226-
if (matchedtrack.chi2() < 0.f || maxChi2GL < matchedtrack.chi2()) {
227-
continue;
228-
}
229-
230-
float rAtAbsorberEnd = matchedtrack.rAtAbsorberEnd(); // this works only for GlobalMuonTrack
231-
if (rAtAbsorberEnd < minRabs || maxRabs < rAtAbsorberEnd) {
232-
continue;
233-
}
234-
o2::dataformats::GlobalFwdTrack propmuonAtDCA = propagateMuon(matchedtrack, collision, propagationPoint::kToDCA);
235-
float dcaX = propmuonAtDCA.getX() - collision.posX();
236-
float dcaY = propmuonAtDCA.getY() - collision.posY();
237-
float dcaXY = std::sqrt(dcaX * dcaX + dcaY * dcaY);
238-
if (maxDCAxy < dcaXY) {
239-
continue;
240-
}
241-
242-
o2::dataformats::GlobalFwdTrack propmuonAtDCA_Matched = propagateMuon(mchtrack, collision, propagationPoint::kToDCA);
243-
float dcaX_Matched = propmuonAtDCA_Matched.getX() - collision.posX();
244-
float dcaY_Matched = propmuonAtDCA_Matched.getY() - collision.posY();
245-
float dcaXY_Matched = std::sqrt(dcaX_Matched * dcaX_Matched + dcaY_Matched * dcaY_Matched);
246-
float pDCA = mchtrack.p() * dcaXY_Matched;
247-
248-
if (rAtAbsorberEnd < midRabs ? pDCA > maxPDCAforSmallR : pDCA > maxPDCAforLargeR) {
249-
continue;
250-
}
251-
252-
map_chi2MFTMCH[matchedtrack.globalIndex()] = matchedtrack.chi2MatchMCHMFT();
253-
}
254-
if (map_chi2MFTMCH.begin()->first != target.globalIndex()) { // search for minimum matching chi2
255-
map_chi2MFTMCH.clear();
256-
return false;
257-
}
258-
map_chi2MFTMCH.clear();
196+
if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && (fwdtrack.chi2MatchMCHMFT() > maxMatchingChi2MCHMFT || fwdtrack.chi2() > maxChi2GL)) {
197+
return;
198+
} // Users have to decide the best match between MFT and MCH-MID at analysis level. The same global muon is repeatedly stored.
259199

260-
if (target.chi2MatchMCHMFT() > maxMatchingChi2MCHMFT) {
261-
return false;
200+
if (fwdtrack.chi2MatchMCHMID() < 0.f) { // this should never happen. only for protection.
201+
return;
262202
}
263-
return true;
264-
}
265-
266-
template <typename TCollision, typename TFwdTrack, typename TFwdTracks, typename TMFTTracks>
267-
void fillFwdTrackTable(TCollision const& collision, TFwdTrack fwdtrack, TFwdTracks const& fwdtracks, TMFTTracks const&, const bool isAmbiguous)
268-
{
269-
if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
270-
const auto& matchedGlobalTracks = fwdtracks.sliceBy(perMFTTrack, fwdtrack.matchMFTTrackId()); // MFT-MCH-MID or MFT-MCH
271-
if (!isBestMatch<TFwdTracks, TMFTTracks>(collision, fwdtrack, matchedGlobalTracks)) {
272-
return;
273-
}
274-
} // find the best match between MFT and MCH-MID
275203

276204
o2::dataformats::GlobalFwdTrack propmuonAtPV = propagateMuon(fwdtrack, collision, propagationPoint::kToVertex);
277205
o2::dataformats::GlobalFwdTrack propmuonAtDCA = propagateMuon(fwdtrack, collision, propagationPoint::kToDCA);

EventFiltering/PWGEM/HeavyNeutralMesonFilter.cxx

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,12 @@ struct HeavyNeutralMesonFilter {
208208
false,
209209
"Evt sel: check for offline selection"};
210210

211+
Configurable<bool> ConfDoEMCShift{"ConfDoEMCShift", false, "Apply SM-wise shift in eta and phi to EMCal clusters to align with TPC tracks"};
212+
Configurable<std::vector<float>> ConfEMCEtaShift{"ConfEMCEtaShift", {0.f}, "values for SM-wise shift in eta to be added to EMCal clusters to align with TPC tracks"};
213+
Configurable<std::vector<float>> ConfEMCPhiShift{"ConfEMCPhiShift", {0.f}, "values for SM-wise shift in phi to be added to EMCal clusters to align with TPC tracks"};
214+
std::array<float, 20> EMCEtaShift = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
215+
std::array<float, 20> EMCPhiShift = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
216+
211217
template <typename T>
212218
bool isSelectedTrack(T const& track, CFTrigger::FemtoPartners partSpecies)
213219
{
@@ -760,6 +766,14 @@ struct HeavyNeutralMesonFilter {
760766
mHistManager.add("etaprimep/fetaprimePtVskstar_EMC", "Same Event distribution", HistType::kTH1F, {{8000, 0, 8}});
761767
mHistManager.add("etaprimep/fProtonPtVskstar_EMC", "Same Event distribution", HistType::kTH1F, {{8000, 0, 8}});
762768
mHistManager.add("etaprimep/fAntiProtonPtVskstar_EMC", "Same Event distribution", HistType::kTH1F, {{8000, 0, 8}});
769+
770+
if (ConfDoEMCShift.value) {
771+
for (unsigned short iSM = 0; iSM < 20; iSM++) {
772+
EMCEtaShift[iSM] = ConfEMCEtaShift.value[iSM];
773+
EMCPhiShift[iSM] = ConfEMCPhiShift.value[iSM];
774+
LOG(info) << "SM-wise shift in eta/phi for SM " << iSM << ": " << EMCEtaShift[iSM] << " / " << EMCPhiShift[iSM];
775+
}
776+
}
763777
}
764778
Preslice<aod::V0PhotonsKF> perCollision_pcm = aod::v0photonkf::collisionId;
765779
Preslice<aod::SkimEMCClusters> perCollision_emc = aod::skimmedcluster::collisionId;
@@ -817,10 +831,11 @@ struct HeavyNeutralMesonFilter {
817831
mHistManager.fill(HIST("Event/nClustersVsV0s"), clustersInThisCollision.size(), v0sInThisCollision.size());
818832
mHistManager.fill(HIST("Event/nTracks"), tracksWithItsPid.size());
819833

820-
hnmutilities::reconstructGGs(clustersInThisCollision, v0sInThisCollision, vGGs);
834+
std::vector<hnmutilities::Photon> vGammas;
835+
hnmutilities::storeGammasInVector(clustersInThisCollision, v0sInThisCollision, vGammas, EMCEtaShift, EMCPhiShift);
836+
hnmutilities::reconstructGGs(vGammas, vGGs);
837+
vGammas.clear();
821838
processGGs(vGGs);
822-
// hnmutilities::reconstructHeavyNeutralMesons(tracks, vGGs, vHNMs);
823-
// processHNMs(vHNMs);
824839

825840
bool isProton = false;
826841
bool isDeuteron = false;

EventFiltering/Zorro.cxx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ void Zorro::populateExternalHists(int runNumber, TH2* ZorroHisto, TH2* ToiHisto)
113113
}
114114
if (!ToiHisto) {
115115
LOGF(info, "TOI histogram not set, creating a new one");
116-
ToiHisto = new TH2D("TOI", "TOI", 1, -0.5, 0.5, mTOIs.size(), -0.5, mTOIs.size() - 0.5);
116+
ToiHisto = new TH2D("TOI", "TOI", 1, -0.5, 0.5, mTOIs.size() * 2, -0.5, mTOIs.size() * 2 - 0.5);
117117
}
118118
// if it is the first run, initialize the histogram
119119
if (mRunNumberHistos.size() == 0) {
@@ -126,17 +126,22 @@ void Zorro::populateExternalHists(int runNumber, TH2* ZorroHisto, TH2* ToiHisto)
126126
ZorroHisto->GetYaxis()->SetBinLabel(i + 2 + mTOIs.size(), Form("%s scalers", mTOIs[i].data()));
127127
}
128128
// TOI histogram
129-
ToiHisto->SetBins(1, -0.5, 0.5, mTOIs.size(), -0.5, mTOIs.size() - 0.5);
129+
ToiHisto->SetBins(1, -0.5, 0.5, mTOIs.size() * 2, -0.5, mTOIs.size() * 2 - 0.5);
130130
ToiHisto->GetXaxis()->SetBinLabel(1, Form("%d", runNumber));
131131
for (size_t i{0}; i < mTOIs.size(); ++i) {
132-
ToiHisto->GetYaxis()->SetBinLabel(i + 1, mTOIs[i].data());
132+
ToiHisto->GetYaxis()->SetBinLabel(i * 2 + 1, mTOIs[i].data());
133+
ToiHisto->GetYaxis()->SetBinLabel(i * 2 + 2, Form("%s AnalysedTriggers", mTOIs[i].data()));
133134
}
134135
}
135136
if (mInspectedTVX) {
136137
ZorroHisto->Fill(Form("%d", runNumber), "inspected TVX", mInspectedTVX->GetBinContent(1));
137138
ZorroHisto->SetBinError(mRunNumberHistos.size() + 1, 1, mInspectedTVX->GetBinError(1));
138139
}
139140
if (mSelections) {
141+
mAnalysedTriggers = new TH1D("AnalysedTriggers", "", mSelections->GetNbinsX() - 2, -0.5, mSelections->GetNbinsX() - 2.5);
142+
for (int iBin{2}; iBin < mSelections->GetNbinsX(); ++iBin) { // Exclude first and last bins as they are total number of analysed and selected events, respectively
143+
mAnalysedTriggers->GetXaxis()->SetBinLabel(iBin - 1, mSelections->GetXaxis()->GetBinLabel(iBin));
144+
}
140145
for (size_t i{0}; i < mTOIs.size(); ++i) {
141146
int bin = findBin(mSelections, mTOIs[i]);
142147
ZorroHisto->Fill(Form("%d", runNumber), Form("%s selections", mTOIs[i].data()), mSelections->GetBinContent(bin));
@@ -248,6 +253,11 @@ bool Zorro::isSelected(uint64_t bcGlobalId, uint64_t tolerance, TH2* ToiHisto)
248253
if (mTOIidx[i] < 0) {
249254
continue;
250255
} else if (mLastResult.test(mTOIidx[i])) {
256+
if (ToiHisto && mAnalysedTriggers) {
257+
int binX = ToiHisto->GetXaxis()->FindBin(Form("%d", mRunNumber));
258+
int binY = ToiHisto->GetYaxis()->FindBin(Form("%s AnalysedTriggers", mTOIs[i].data()));
259+
ToiHisto->SetBinContent(binX, binY, mAnalysedTriggers->GetBinContent(mAnalysedTriggers->GetXaxis()->FindBin(mTOIs[i].data())));
260+
}
251261
mTOIcounts[i] += (lastSelectedIdx != mLastSelectedIdx); /// Avoid double counting
252262
if (mAnalysedTriggersOfInterest && lastSelectedIdx != mLastSelectedIdx) {
253263
mAnalysedTriggersOfInterest->Fill(i);

PWGCF/FemtoUniverse/TableProducer/femtoUniverseProducerTask.cxx

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ struct FemtoUniverseProducerTask {
130130
Configurable<bool> confIsForceGRP{"confIsForceGRP", false, "Set true if the magnetic field configuration is not available in the usual CCDB directory (e.g. for Run 2 converted data or unanchorad Monte Carlo)"};
131131

132132
Configurable<bool> confDoSpher{"confDoSpher", false, "Calculate sphericity. If false sphericity will take value of 2."};
133+
Configurable<bool> confStoreMCmothers{"confStoreMCmothers", false, "MC truth: Fill with not only primary particles and store mothers' PDG in tempFitVar."};
133134
Configurable<bool> confFillCollExt{"confFillCollExt", false, "Option to fill collision extended table"};
134135

135136
/// Event cuts
@@ -675,20 +676,23 @@ struct FemtoUniverseProducerTask {
675676
}
676677

677678
template <typename ParticleType>
678-
void fillDebugParticleMC(ParticleType const& particle)
679+
int32_t getMotherPDG(ParticleType particle)
679680
{
680681
auto motherparticlesMC = particle.template mothers_as<aod::McParticles>();
681682
if (!motherparticlesMC.empty()) {
682683
auto motherparticleMC = motherparticlesMC.front();
683-
if (particle.isPhysicalPrimary())
684-
outputDebugPartsMC(0);
685-
else
686-
outputDebugPartsMC(motherparticleMC.pdgCode());
684+
return particle.isPhysicalPrimary() ? 0 : motherparticleMC.pdgCode();
687685
} else {
688-
outputDebugPartsMC(9999);
686+
return 9999;
689687
}
690688
}
691689

690+
template <typename ParticleType>
691+
void fillDebugParticleMC(ParticleType const& particle)
692+
{
693+
outputDebugPartsMC(getMotherPDG(particle));
694+
}
695+
692696
template <typename ParticleType>
693697
void fillMCParticle(ParticleType const& particle, o2::aod::femtouniverseparticle::ParticleType fdparttype)
694698
{
@@ -1691,7 +1695,7 @@ struct FemtoUniverseProducerTask {
16911695
if (pdgCode == 333) { // && (recoMcIds && recoMcIds->get().contains(particle.globalIndex()))) { // ATTENTION: all Phi mesons are NOT primary particles
16921696
pass = true;
16931697
} else {
1694-
if (particle.isPhysicalPrimary() || (confActivateSecondaries && recoMcIds && recoMcIds->get().contains(particle.globalIndex())))
1698+
if (confStoreMCmothers || particle.isPhysicalPrimary() || (confActivateSecondaries && recoMcIds && recoMcIds->get().contains(particle.globalIndex())))
16951699
pass = true;
16961700
}
16971701
}
@@ -1711,6 +1715,8 @@ struct FemtoUniverseProducerTask {
17111715
// auto cutContainer = trackCuts.getCutContainer<aod::femtouniverseparticle::CutContainerType>(track);
17121716
// instead of the bitmask, the PDG of the particle is stored as uint32_t
17131717

1718+
int32_t variablePDG = confStoreMCmothers ? getMotherPDG(particle) : particle.pdgCode();
1719+
17141720
// now the table is filled
17151721
if constexpr (resolveDaughs) {
17161722
tmpIDtrack.push_back(particle.globalIndex());
@@ -1724,7 +1730,7 @@ struct FemtoUniverseProducerTask {
17241730
aod::femtouniverseparticle::ParticleType::kMCTruthTrack,
17251731
0,
17261732
pdgCode,
1727-
pdgCode,
1733+
variablePDG,
17281734
childIDs,
17291735
0,
17301736
0);
@@ -1770,6 +1776,9 @@ struct FemtoUniverseProducerTask {
17701776
}
17711777
}
17721778
}
1779+
1780+
int32_t variablePDG = confStoreMCmothers ? getMotherPDG(particle) : particle.pdgCode();
1781+
17731782
if (!confIsActivateCascade) {
17741783
outputParts(outputCollision.lastIndex(),
17751784
particle.pt(),
@@ -1778,7 +1787,7 @@ struct FemtoUniverseProducerTask {
17781787
aod::femtouniverseparticle::ParticleType::kMCTruthTrack,
17791788
0,
17801789
static_cast<uint32_t>(particle.pdgCode()),
1781-
particle.pdgCode(),
1790+
variablePDG,
17821791
childIDs,
17831792
0,
17841793
0);

PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackV0Extended.cxx

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,8 @@ struct FemtoUniversePairTaskTrackV0Extended {
248248
registryMCtruth.add("minus/MCtruthPiPt", "MC truth pions;#it{p}_{T} (GeV/c)", {HistType::kTH1F, {{500, 0, 5}}});
249249
registryMCtruth.add("minus/MCtruthPrPt", "MC truth protons;#it{p}_{T} (GeV/c)", {HistType::kTH1F, {{500, 0, 5}}});
250250

251+
registryMCtruth.add("motherParticle", "pair fractions;part1 mother PDG;part2 mother PDG", {HistType::kTH2F, {{8001, -4000, 4000}, {8001, -4000, 4000}}});
252+
251253
// MC reco
252254
registryMCreco.add("plus/MCrecoLambda", "MC reco Lambdas;#it{p}_{T} (GeV/c); #eta", {HistType::kTH2F, {{500, 0, 5}, {400, -1.0, 1.0}}});
253255
registryMCreco.add("plus/MCrecoLambdaChildPr", "MC reco Lambdas;#it{p}_{T} (GeV/c); #eta", {HistType::kTH2F, {{500, 0, 5}, {400, -1.0, 1.0}}});
@@ -1013,6 +1015,39 @@ struct FemtoUniversePairTaskTrackV0Extended {
10131015
}
10141016
PROCESS_SWITCH(FemtoUniversePairTaskTrackV0Extended, processPairFractionsV0, "Process MC data to obtain pair fractions for V0V0 pairs", false);
10151017

1018+
void processPairFractionsMCTruthV0(FilteredFDCollisions const& cols, FemtoFullParticles const& /*parts*/)
1019+
{
1020+
ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultNtr> colBinningMult{{confVtxBins, confMultBins}, true};
1021+
ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultV0M> colBinningCent{{confVtxBins, confMultBins}, true};
1022+
1023+
auto mixedCollProcessFunc = [&](auto& collision1, auto& collision2) -> void {
1024+
auto groupPartsOne = partsTwoMC->sliceByCached(aod::femtouniverseparticle::fdCollisionId, collision1.globalIndex(), cache);
1025+
auto groupPartsTwo = partsTwoMC->sliceByCached(aod::femtouniverseparticle::fdCollisionId, collision2.globalIndex(), cache);
1026+
1027+
for (const auto& [p1, p2] : combinations(CombinationsFullIndexPolicy(groupPartsOne, groupPartsTwo))) {
1028+
int pdgCode1 = static_cast<int>(p1.pidCut());
1029+
if ((confV0Type1 == 0 && pdgCode1 != kLambda0) || (confV0Type1 == 1 && pdgCode1 != kLambda0Bar))
1030+
continue;
1031+
int pdgCode2 = static_cast<int>(p2.pidCut());
1032+
if ((confV0Type2 == 0 && pdgCode2 != kLambda0) || (confV0Type2 == 1 && pdgCode2 != kLambda0Bar))
1033+
continue;
1034+
1035+
registryMCtruth.fill(HIST("motherParticle"), p1.tempFitVar(), p2.tempFitVar());
1036+
}
1037+
};
1038+
1039+
if (confUseCent) {
1040+
for (const auto& [collision1, collision2] : soa::selfCombinations(colBinningCent, confNEventsMix, -1, cols, cols)) {
1041+
mixedCollProcessFunc(collision1, collision2);
1042+
}
1043+
} else {
1044+
for (const auto& [collision1, collision2] : soa::selfCombinations(colBinningMult, confNEventsMix, -1, cols, cols)) {
1045+
mixedCollProcessFunc(collision1, collision2);
1046+
}
1047+
}
1048+
}
1049+
PROCESS_SWITCH(FemtoUniversePairTaskTrackV0Extended, processPairFractionsMCTruthV0, "Process MC data to obtain pair fractions for V0V0 MC truth pairs", false);
1050+
10161051
void processMCReco(FemtoRecoParticles const& parts, aod::FdMCParticles const& mcparts)
10171052
{
10181053
for (const auto& part : parts) {

0 commit comments

Comments
 (0)