Skip to content

Commit 89990ff

Browse files
rspijkersjpxrk
authored andcommitted
[PWGLF] add competing mass cut for omega's (AliceO2Group#12339)
1 parent 741651c commit 89990ff

File tree

1 file changed

+56
-49
lines changed

1 file changed

+56
-49
lines changed

PWGLF/Tasks/Strangeness/cascadecorrelations.cxx

Lines changed: 56 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ using LabeledCascades = soa::Join<aod::CascDataExt, aod::McCascLabels>;
8686

8787
struct CascadeSelector {
8888
Service<o2::ccdb::BasicCCDBManager> ccdb;
89+
Service<o2::framework::O2DatabasePDG> pdgDB;
8990

9091
Produces<aod::CascadeFlags> cascflags;
9192

@@ -99,6 +100,8 @@ struct CascadeSelector {
99100
Configurable<int> INEL{"INEL", 0, "Number of charged tracks within |eta| < 1 has to be greater than value"};
100101
Configurable<double> maxVertexZ{"maxVertexZ", 10., "Maximum value of z coordinate of PV"};
101102
Configurable<float> etaCascades{"etaCascades", 0.8, "min/max of eta for cascades"};
103+
Configurable<bool> doCompetingMassCut{"doCompetingMassCut", true, "Switch to apply a competing mass cut for the Omega's"};
104+
Configurable<float> competingMassWindow{"competingMassWindow", 0.01, "Mass window for the competing mass cut"};
102105

103106
// Tracklevel
104107
Configurable<float> tpcNsigmaBachelor{"tpcNsigmaBachelor", 3, "TPC NSigma bachelor"};
@@ -302,7 +305,7 @@ struct CascadeSelector {
302305
if (!gen.isPhysicalPrimary())
303306
return;
304307
int genpdg = gen.pdgCode();
305-
if ((flag < 3 && TMath::Abs(genpdg) == 3312) || (flag > 1 && TMath::Abs(genpdg) == 3334)) {
308+
if ((flag < 3 && std::abs(genpdg) == 3312) || (flag > 1 && std::abs(genpdg) == 3334)) {
306309
// if casc is consistent with Xi and has matched gen Xi OR cand is consistent with Omega and has matched gen omega
307310
// have to do this in case we reco true Xi with only Omega hypothesis (or vice versa) (very unlikely)
308311
registry.fill(HIST("truerec/hV0Radius"), rec.v0radius());
@@ -413,18 +416,18 @@ struct CascadeSelector {
413416
casc.v0cosPA(pvx, pvy, pvz) < v0setting_cospa ||
414417
casc.casccosPA(pvx, pvy, pvz) < cascadesetting_cospa ||
415418
casc.dcav0topv(pvx, pvy, pvz) < cascadesetting_mindcav0topv ||
416-
TMath::Abs(casc.mLambda() - 1.115683) > cascadesetting_v0masswindow)
419+
std::abs(casc.mLambda() - 1.115683) > cascadesetting_v0masswindow)
417420
return 0; // It failed at least one topo selection
418421

419422
registry.fill(HIST("hSelectionStatus"), 4); // passes topo
420423
// registry.fill(HIST("hMassXi3"), casc.mXi(), casc.pt());
421424

422-
if (TMath::Abs(posTrack.eta()) > etaTracks || TMath::Abs(negTrack.eta()) > etaTracks || TMath::Abs(bachTrack.eta()) > etaTracks)
425+
if (std::abs(posTrack.eta()) > etaTracks || std::abs(negTrack.eta()) > etaTracks || std::abs(bachTrack.eta()) > etaTracks)
423426
return 0;
424427

425428
registry.fill(HIST("hSelectionStatus"), 5); // passes track eta
426429

427-
if (TMath::Abs(casc.eta()) > etaCascades)
430+
if (std::abs(casc.eta()) > etaCascades)
428431
return 0;
429432

430433
registry.fill(HIST("hSelectionStatus"), 6); // passes candidate eta
@@ -435,56 +438,60 @@ struct CascadeSelector {
435438
// Lambda check
436439
if (casc.sign() < 0) {
437440
// Proton check:
438-
if (TMath::Abs(posTrack.tpcNSigmaPr()) > tpcNsigmaProton)
441+
if (std::abs(posTrack.tpcNSigmaPr()) > tpcNsigmaProton)
439442
return 0;
440443
// Pion check:
441-
if (TMath::Abs(negTrack.tpcNSigmaPi()) > tpcNsigmaPion)
444+
if (std::abs(negTrack.tpcNSigmaPi()) > tpcNsigmaPion)
442445
return 0;
443446
} else {
444447
// Proton check:
445-
if (TMath::Abs(negTrack.tpcNSigmaPr()) > tpcNsigmaProton)
448+
if (std::abs(negTrack.tpcNSigmaPr()) > tpcNsigmaProton)
446449
return 0;
447450
// Pion check:
448-
if (TMath::Abs(posTrack.tpcNSigmaPi()) > tpcNsigmaPion)
451+
if (std::abs(posTrack.tpcNSigmaPi()) > tpcNsigmaPion)
449452
return 0;
450453
}
451454
registry.fill(HIST("hSelectionStatus"), 7); // passes V0 daughters PID
452455
// registry.fill(HIST("hMassXi4"), casc.mXi(), casc.pt());
453456

454-
// Bachelor check
455-
if (TMath::Abs(bachTrack.tpcNSigmaPi()) < tpcNsigmaBachelor) {
456-
if (TMath::Abs(bachTrack.tpcNSigmaKa()) < tpcNsigmaBachelor) {
457-
// consistent with both!
457+
// setting selection flag based on bachelor PID (and competing mass cut for omega's)
458+
int flag = 0;
459+
if (std::abs(bachTrack.tpcNSigmaPi()) < tpcNsigmaBachelor)
460+
flag = 1;
461+
if (std::abs(bachTrack.tpcNSigmaKa()) < tpcNsigmaBachelor && (!doCompetingMassCut || std::abs(pdgDB->Mass(3312) - casc.mXi()) > competingMassWindow))
462+
flag = 3 - flag; // 3 if only consistent with omega, 2 if consistent with both
463+
464+
switch (flag) {
465+
case 1: // only Xi
466+
registry.fill(HIST("hSelectionStatus"), 8); // passes bach PID
467+
if (casc.sign() < 0) {
468+
registry.fill(HIST("hMassXiMinus"), casc.mXi(), casc.pt(), casc.yXi());
469+
} else {
470+
registry.fill(HIST("hMassXiPlus"), casc.mXi(), casc.pt(), casc.yXi());
471+
}
472+
break;
473+
case 2: // Xi or Omega
458474
registry.fill(HIST("hSelectionStatus"), 8); // passes bach PID
459-
// registry.fill(HIST("hMassXi5"), casc.mXi(), casc.pt());
460475
if (casc.sign() < 0) {
461476
registry.fill(HIST("hMassXiMinus"), casc.mXi(), casc.pt(), casc.yXi());
462477
registry.fill(HIST("hMassOmegaMinus"), casc.mOmega(), casc.pt(), casc.yOmega());
463478
} else {
464479
registry.fill(HIST("hMassXiPlus"), casc.mXi(), casc.pt(), casc.yXi());
465480
registry.fill(HIST("hMassOmegaPlus"), casc.mOmega(), casc.pt(), casc.yOmega());
466481
}
467-
return 2;
468-
}
469-
registry.fill(HIST("hSelectionStatus"), 8); // passes bach PID
470-
// registry.fill(HIST("hMassXi5"), casc.mXi(), casc.pt());
471-
if (casc.sign() < 0) {
472-
registry.fill(HIST("hMassXiMinus"), casc.mXi(), casc.pt(), casc.yXi());
473-
} else {
474-
registry.fill(HIST("hMassXiPlus"), casc.mXi(), casc.pt(), casc.yXi());
475-
}
476-
return 1;
477-
} else if (TMath::Abs(bachTrack.tpcNSigmaKa()) < tpcNsigmaBachelor) {
478-
registry.fill(HIST("hSelectionStatus"), 8); // passes bach PID
479-
if (casc.sign() < 0) {
480-
registry.fill(HIST("hMassOmegaMinus"), casc.mOmega(), casc.pt(), casc.yOmega());
481-
} else {
482-
registry.fill(HIST("hMassOmegaPlus"), casc.mOmega(), casc.pt(), casc.yOmega());
483-
}
484-
return 3;
482+
break;
483+
case 3: // only Omega
484+
registry.fill(HIST("hSelectionStatus"), 8); // passes bach PID
485+
if (casc.sign() < 0) {
486+
registry.fill(HIST("hMassOmegaMinus"), casc.mOmega(), casc.pt(), casc.yOmega());
487+
} else {
488+
registry.fill(HIST("hMassOmegaPlus"), casc.mOmega(), casc.pt(), casc.yOmega());
489+
}
490+
break;
485491
}
486-
// if we reach here, the bachelor was neither pion nor kaon
487-
return 0;
492+
493+
return flag;
494+
488495
} // processCandidate
489496

490497
void processGenMC(aod::McCollision const&, soa::SmallGroups<soa::Join<aod::McCollisionLabels, MyCollisions>> const& collisions, aod::McParticles const& mcParticles)
@@ -495,7 +502,7 @@ struct CascadeSelector {
495502
for (auto const& mcPart : mcParticles) {
496503
if (!mcPart.isPhysicalPrimary())
497504
continue;
498-
if (TMath::Abs(mcPart.eta()) > etaCascades)
505+
if (std::abs(mcPart.eta()) > etaCascades)
499506
continue;
500507

501508
switch (mcPart.pdgCode()) {
@@ -532,7 +539,7 @@ struct CascadeSelector {
532539
for (auto const& mcPart : mcParticles) {
533540
if (!mcPart.isPhysicalPrimary())
534541
continue;
535-
if (TMath::Abs(mcPart.eta()) > etaCascades)
542+
if (std::abs(mcPart.eta()) > etaCascades)
536543
continue;
537544

538545
switch (mcPart.pdgCode()) {
@@ -857,30 +864,30 @@ struct CascadeCorrelations {
857864
double weightTrigg = 1.;
858865
double weightAssoc = 1.;
859866

860-
if (trigger.isSelected() <= 2 && TMath::Abs(trigger.yXi()) < maxRapidity) { // trigger Xi
867+
if (trigger.isSelected() <= 2 && std::abs(trigger.yXi()) < maxRapidity) { // trigger Xi
861868
if (doEfficiencyCorrection)
862869
weightTrigg = trigger.sign() < 0 ? getEfficiency(hEffXiMin, trigger.pt()) : getEfficiency(hEffXiPlus, trigger.pt());
863-
if (assoc.isSelected() <= 2 && TMath::Abs(assoc.yXi()) < maxRapidity) { // assoc Xi
870+
if (assoc.isSelected() <= 2 && std::abs(assoc.yXi()) < maxRapidity) { // assoc Xi
864871
if (doEfficiencyCorrection)
865872
weightAssoc = assoc.sign() < 0 ? getEfficiency(hEffXiMin, assoc.pt()) : getEfficiency(hEffXiPlus, assoc.pt());
866873
registry.fill(HIST("hXiXi"), dphi, trigger.yXi() - assoc.yXi(), trigger.sign(), assoc.sign(), trigger.pt(), assoc.pt(), invMassXiTrigg, invMassXiAssoc, collision.posZ(), collision.multFT0M(), weightTrigg * weightAssoc);
867874
}
868-
if (assoc.isSelected() >= 2 && TMath::Abs(assoc.yOmega()) < maxRapidity) { // assoc Omega
875+
if (assoc.isSelected() >= 2 && std::abs(assoc.yOmega()) < maxRapidity) { // assoc Omega
869876
if (doEfficiencyCorrection)
870877
weightAssoc = assoc.sign() < 0 ? getEfficiency(hEffOmegaMin, assoc.pt()) : getEfficiency(hEffOmegaPlus, assoc.pt());
871878
registry.fill(HIST("hXiOm"), dphi, trigger.yXi() - assoc.yOmega(), trigger.sign(), assoc.sign(), trigger.pt(), assoc.pt(), invMassXiTrigg, invMassOmAssoc, collision.posZ(), collision.multFT0M(), weightTrigg * weightAssoc);
872879
}
873880
}
874-
if (trigger.isSelected() >= 2 && TMath::Abs(trigger.yOmega()) < maxRapidity) { // trigger Omega
881+
if (trigger.isSelected() >= 2 && std::abs(trigger.yOmega()) < maxRapidity) { // trigger Omega
875882
if (doEfficiencyCorrection)
876883
weightTrigg = trigger.sign() < 0 ? getEfficiency(hEffOmegaMin, trigger.pt()) : getEfficiency(hEffOmegaPlus, trigger.pt());
877-
if (assoc.isSelected() <= 2 && TMath::Abs(assoc.yXi()) < maxRapidity) { // assoc Xi
884+
if (assoc.isSelected() <= 2 && std::abs(assoc.yXi()) < maxRapidity) { // assoc Xi
878885
if (doEfficiencyCorrection)
879886
weightAssoc = assoc.sign() < 0 ? getEfficiency(hEffXiMin, assoc.pt()) : getEfficiency(hEffXiPlus, assoc.pt());
880887
// if Omega-Xi, fill the Xi-Omega histogram (flip the trigger/assoc and dphy,dy signs)
881888
registry.fill(HIST("hXiOm"), RecoDecay::constrainAngle(assoc.phi() - trigger.phi(), -PIHalf), -(trigger.yOmega() - assoc.yXi()), assoc.sign(), trigger.sign(), assoc.pt(), trigger.pt(), invMassXiAssoc, invMassOmTrigg, collision.posZ(), collision.multFT0M(), weightTrigg * weightAssoc);
882889
}
883-
if (assoc.isSelected() >= 2 && TMath::Abs(assoc.yOmega()) < maxRapidity) { // assoc Omega
890+
if (assoc.isSelected() >= 2 && std::abs(assoc.yOmega()) < maxRapidity) { // assoc Omega
884891
if (doEfficiencyCorrection)
885892
weightAssoc = assoc.sign() < 0 ? getEfficiency(hEffOmegaMin, assoc.pt()) : getEfficiency(hEffOmegaPlus, assoc.pt());
886893
registry.fill(HIST("hOmOm"), dphi, trigger.yOmega() - assoc.yOmega(), trigger.sign(), assoc.sign(), trigger.pt(), assoc.pt(), invMassOmTrigg, invMassOmAssoc, collision.posZ(), collision.multFT0M(), weightTrigg * weightAssoc);
@@ -904,7 +911,7 @@ struct CascadeCorrelations {
904911
for (auto const& [col1, cascades1, col2, cascades2] : pair) {
905912
if (!col1.sel8() || !col2.sel8())
906913
continue;
907-
if (TMath::Abs(col1.posZ()) > zVertexCut || TMath::Abs(col2.posZ()) > zVertexCut)
914+
if (std::abs(col1.posZ()) > zVertexCut || std::abs(col2.posZ()) > zVertexCut)
908915
continue;
909916
if (col1.globalIndex() == col2.globalIndex()) {
910917
registry.fill(HIST("hMEQA"), 0.5);
@@ -943,30 +950,30 @@ struct CascadeCorrelations {
943950
double weightTrigg = 1.;
944951
double weightAssoc = 1.;
945952

946-
if (trigger.isSelected() <= 2 && TMath::Abs(trigger.yXi()) < maxRapidity) { // trigger Xi
953+
if (trigger.isSelected() <= 2 && std::abs(trigger.yXi()) < maxRapidity) { // trigger Xi
947954
if (doEfficiencyCorrection)
948955
weightTrigg = trigger.sign() < 0 ? getEfficiency(hEffXiMin, trigger.pt()) : getEfficiency(hEffXiPlus, trigger.pt());
949-
if (assoc.isSelected() <= 2 && TMath::Abs(assoc.yXi()) < maxRapidity) { // assoc Xi
956+
if (assoc.isSelected() <= 2 && std::abs(assoc.yXi()) < maxRapidity) { // assoc Xi
950957
if (doEfficiencyCorrection)
951958
weightAssoc = assoc.sign() < 0 ? getEfficiency(hEffXiMin, assoc.pt()) : getEfficiency(hEffXiPlus, assoc.pt());
952959
registry.fill(HIST("MixedEvents/hMEXiXi"), dphi, trigger.yXi() - assoc.yXi(), trigger.sign(), assoc.sign(), trigger.pt(), assoc.pt(), invMassXiTrigg, invMassXiAssoc, col1.posZ(), col1.multFT0M(), weightTrigg * weightAssoc);
953960
}
954-
if (assoc.isSelected() >= 2 && TMath::Abs(assoc.yOmega()) < maxRapidity) { // assoc Omega
961+
if (assoc.isSelected() >= 2 && std::abs(assoc.yOmega()) < maxRapidity) { // assoc Omega
955962
if (doEfficiencyCorrection)
956963
weightAssoc = assoc.sign() < 0 ? getEfficiency(hEffOmegaMin, assoc.pt()) : getEfficiency(hEffOmegaPlus, assoc.pt());
957964
registry.fill(HIST("MixedEvents/hMEXiOm"), dphi, trigger.yXi() - assoc.yOmega(), trigger.sign(), assoc.sign(), trigger.pt(), assoc.pt(), invMassXiTrigg, invMassOmAssoc, col1.posZ(), col1.multFT0M(), weightTrigg * weightAssoc);
958965
}
959966
}
960-
if (trigger.isSelected() >= 2 && TMath::Abs(trigger.yOmega()) < maxRapidity) { // trigger Omega
967+
if (trigger.isSelected() >= 2 && std::abs(trigger.yOmega()) < maxRapidity) { // trigger Omega
961968
if (doEfficiencyCorrection)
962969
weightTrigg = trigger.sign() < 0 ? getEfficiency(hEffOmegaMin, trigger.pt()) : getEfficiency(hEffOmegaPlus, trigger.pt());
963-
if (assoc.isSelected() <= 2 && TMath::Abs(assoc.yXi()) < maxRapidity) { // assoc Xi
970+
if (assoc.isSelected() <= 2 && std::abs(assoc.yXi()) < maxRapidity) { // assoc Xi
964971
if (doEfficiencyCorrection)
965972
weightAssoc = assoc.sign() < 0 ? getEfficiency(hEffXiMin, assoc.pt()) : getEfficiency(hEffXiPlus, assoc.pt());
966973
// if Omega-Xi, fill the Xi-Omega histogram (flip the trigger/assoc and dphy,dy signs)
967974
registry.fill(HIST("MixedEvents/hMEXiOm"), RecoDecay::constrainAngle(assoc.phi() - trigger.phi(), -PIHalf), -(trigger.yOmega() - assoc.yXi()), assoc.sign(), trigger.sign(), assoc.pt(), trigger.pt(), invMassXiAssoc, invMassOmTrigg, col1.posZ(), col1.multFT0M(), weightTrigg * weightAssoc);
968975
}
969-
if (assoc.isSelected() >= 2 && TMath::Abs(assoc.yOmega()) < maxRapidity) { // assoc Omega
976+
if (assoc.isSelected() >= 2 && std::abs(assoc.yOmega()) < maxRapidity) { // assoc Omega
970977
if (doEfficiencyCorrection)
971978
weightAssoc = assoc.sign() < 0 ? getEfficiency(hEffOmegaMin, assoc.pt()) : getEfficiency(hEffOmegaPlus, assoc.pt());
972979
registry.fill(HIST("MixedEvents/hMEOmOm"), dphi, trigger.yOmega() - assoc.yOmega(), trigger.sign(), assoc.sign(), trigger.pt(), assoc.pt(), invMassOmTrigg, invMassOmAssoc, col1.posZ(), col1.multFT0M(), weightTrigg * weightAssoc);
@@ -1028,7 +1035,7 @@ struct CascadeCorrelations {
10281035

10291036
if (!trigger.isPhysicalPrimary() || !assoc.isPhysicalPrimary())
10301037
continue; // require the cascades to be primaries
1031-
if (TMath::Abs(trigger.eta()) > etaGenCascades)
1038+
if (std::abs(trigger.eta()) > etaGenCascades)
10321039
continue; // only apply eta cut to trigger - trigger normalization still valid without introducing 2-particle-acceptance effects
10331040

10341041
double dphi = RecoDecay::constrainAngle(trigger.phi() - assoc.phi(), -PIHalf);

0 commit comments

Comments
 (0)