@@ -86,6 +86,7 @@ using LabeledCascades = soa::Join<aod::CascDataExt, aod::McCascLabels>;
8686
8787struct 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