2121#include " Common/DataModel/EventSelection.h"
2222#include " Common/DataModel/PIDResponse.h"
2323#include " Common/DataModel/TrackSelectionTables.h"
24+ #include " Common/DataModel/Multiplicity.h"
2425#include " Common/Core/RecoDecay.h"
2526#include " Common/Core/trackUtilities.h"
2627#include " DataFormatsParameters/GRPMagField.h"
@@ -54,11 +55,9 @@ struct NPCascCandidate {
5455 int64_t trackITSID;
5556 int64_t collisionID;
5657 float matchingChi2;
57- float deltaPtITS;
5858 float deltaPt;
5959 float itsClusSize;
6060 bool hasReassociatedCluster;
61- bool hasFakeReassociation;
6261 bool isGoodMatch;
6362 bool isGoodCascade;
6463 int pdgCodeMom;
@@ -114,6 +113,9 @@ struct NPCascCandidate {
114113 float pionTOFNSigma;
115114 float bachKaonTOFNSigma;
116115 float bachPionTOFNSigma;
116+ bool sel8;
117+ float multFT0C;
118+ float multFT0A;
117119};
118120
119121std::array<bool , 2 > isFromHF (auto & particle)
@@ -163,8 +165,8 @@ struct NonPromptCascadeTask {
163165
164166 using TracksExtData = soa::Join<aod::TracksIU, aod::TracksCovIU, aod::TracksExtra, aod::pidTPCFullKa, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTOFFullKa, aod::pidTOFFullPi, aod::pidTOFFullPr>;
165167 using TracksExtMC = soa::Join<aod::TracksIU, aod::TracksCovIU, aod::TracksExtra, aod::McTrackLabels, aod::pidTPCFullKa, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTOFFullKa, aod::pidTOFFullPi, aod::pidTOFFullPr>;
166- using CollisionCandidatesRun3 = soa::Join<aod::Collisions, aod::EvSels>;
167- using CollisionCandidatesRun3MC = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels>;
168+ using CollisionCandidatesRun3 = soa::Join<aod::Collisions, aod::EvSels, aod::FT0Mults >;
169+ using CollisionCandidatesRun3MC = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels, aod::FT0Mults >;
168170
169171 Configurable<std::string> ccdbUrl{" ccdbUrl" , " http://alice-ccdb.cern.ch" , " url of the ccdb repository" };
170172 Configurable<bool > cfgPropToPCA{" cfgPropToPCA" , true , " create tracks version propagated to PCA" };
@@ -337,15 +339,13 @@ struct NonPromptCascadeTask {
337339 o2::math_utils::SVector<double , 3 > cascadePos, v0Pos;
338340
339341 float cascCpa = -1 , v0Cpa = -1 ;
340- o2::track::TrackParCov ntCascadeTrack;
341342 if (mDCAFitter .process (pionTrkParCov, protonTrkParCov)) {
342343 auto trackParCovV0 = mDCAFitter .createParentTrackParCov (0 ); // V0 track retrieved from p and pi daughters
343344 v0Pos = mDCAFitter .getPCACandidate ();
344345 if (mDCAFitter .process (trackParCovV0, bachTrkParCov)) {
345346 mDCAFitter .getTrackParamAtPCA (0 ).getPxPyPzGlo (momenta[0 ]);
346347 mDCAFitter .getTrackParamAtPCA (1 ).getPxPyPzGlo (momenta[1 ]);
347- ntCascadeTrack = mDCAFitter .createParentTrackParCov ();
348- ntCascadeTrack.getPxPyPzGlo (cascadeMomentum);
348+ mDCAFitter .createParentTrackParCov ().getPxPyPzGlo (cascadeMomentum);
349349 std::array<float , 3 > pvPos = {primaryVertex.getX (), primaryVertex.getY (), primaryVertex.getZ ()};
350350 cascadePos = mDCAFitter .getPCACandidate ();
351351 cascCpa = RecoDecay::cpa (pvPos, mDCAFitter .getPCACandidate (), cascadeMomentum);
@@ -393,7 +393,6 @@ struct NonPromptCascadeTask {
393393 if (v0part.mothersIds ()[0 ] == bachelor.mcParticle ().mothersIds ()[0 ]) {
394394 if (std::abs (motherV0.pdgCode ()) == 3312 || std::abs (motherV0.pdgCode ()) == 3334 ) {
395395 isGoodCascade = true ;
396-
397396 isOmega = (std::abs (motherV0.pdgCode ()) == 3334 );
398397 fromHF = isFromHF (motherV0);
399398 mcParticleID = v0part.mothersIds ()[0 ];
@@ -418,8 +417,8 @@ struct NonPromptCascadeTask {
418417 o2::base::Propagator::Instance ()->propagateToDCA (primaryVertex, pionTrkParCov, mBz , 2 .f , matCorr, &pionDCA);
419418 o2::base::Propagator::Instance ()->propagateToDCA (primaryVertex, bachTrkParCov, mBz , 2 .f , matCorr, &bachDCA);
420419
421- float deltaPtITSCascade{-1 .e10f }, deltaPtCascade{- 1 . e10f }, cascITSclsSize{-1 .e10f }, matchingChi2{-1 .e10f };
422- bool hasReassociatedClusters{false }, hasFakeReassociation{ false } ;
420+ float deltaPtITSCascade{-1 .e10f }, cascITSclsSize{-1 .e10f }, matchingChi2{-1 .e10f };
421+ bool hasReassociatedClusters{false };
423422 int trackedCascGlobalIndex{-1 }, itsTrackGlobalIndex{-1 }, cascITSclusters{-1 };
424423 if constexpr (requires { candidate.track (); }) {
425424 const auto & track = candidate.template track_as <TrackType>();
@@ -429,7 +428,6 @@ struct NonPromptCascadeTask {
429428 hasReassociatedClusters = (track.itsNCls () != ITStrack.itsNCls ());
430429 cascadeLvector.SetCoordinates (track.pt (), track.eta (), track.phi (), 0 );
431430 deltaPtITSCascade = std::hypot (cascadeMomentum[0 ], cascadeMomentum[1 ]) - ITStrack.pt ();
432- deltaPtCascade = std::hypot (cascadeMomentum[0 ], cascadeMomentum[1 ]) - track.pt ();
433431 trackedCascGlobalIndex = track.globalIndex ();
434432 itsTrackGlobalIndex = ITStrack.globalIndex ();
435433 cascITSclusters = track.itsNCls ();
@@ -441,14 +439,14 @@ struct NonPromptCascadeTask {
441439
442440 if (isGoodMatch) {
443441 pdgCodeMom = track.mcParticle ().has_mothers () ? track.mcParticle ().template mothers_as <aod::McParticles>()[0 ].pdgCode () : 0 ;
444- hasFakeReassociation = track.mcMask () & (1 << 15 );
445442 }
446443 itsTrackPDG = ITStrack.has_mcParticle () ? ITStrack.mcParticle ().pdgCode () : 0 ;
447444 }
448- } else {
449- o2::base::Propagator::Instance ()->propagateToDCA (primaryVertex, ntCascadeTrack, mBz , 2 .f , matCorr, &motherDCA);
450445 }
451- candidates.emplace_back (NPCascCandidate{mcParticleID, trackedCascGlobalIndex, itsTrackGlobalIndex, candidate.collisionId (), matchingChi2, deltaPtITSCascade, deltaPtCascade, cascITSclsSize, hasReassociatedClusters, hasFakeReassociation, isGoodMatch, isGoodCascade, pdgCodeMom, itsTrackPDG, fromHF[0 ], fromHF[1 ],
446+ // bool mysel8 = collision.sel8();
447+ float mc = collision.multFT0C ();
448+ float ma = collision.multFT0A ();
449+ candidates.emplace_back (NPCascCandidate{mcParticleID, trackedCascGlobalIndex, itsTrackGlobalIndex, candidate.collisionId (), matchingChi2, deltaPtITSCascade, cascITSclsSize, hasReassociatedClusters, isGoodMatch, isGoodCascade, pdgCodeMom, itsTrackPDG, fromHF[0 ], fromHF[1 ],
452450 collision.numContrib (), collision.collisionTimeRes (), primaryVertex.getX (), primaryVertex.getY (), primaryVertex.getZ (),
453451 cascadeLvector.pt (), cascadeLvector.eta (), cascadeLvector.phi (),
454452 protonTrack.pt (), protonTrack.eta (), pionTrack.pt (), pionTrack.eta (), bachelor.pt (), bachelor.eta (),
@@ -458,15 +456,15 @@ struct NonPromptCascadeTask {
458456 cascITSclusters, protonTrack.itsNCls (), pionTrack.itsNCls (), bachelor.itsNCls (), protonTrack.tpcNClsFound (), pionTrack.tpcNClsFound (), bachelor.tpcNClsFound (),
459457 protonTrack.tpcNSigmaPr (), pionTrack.tpcNSigmaPi (), bachelor.tpcNSigmaKa (), bachelor.tpcNSigmaPi (),
460458 protonTrack.hasTOF (), pionTrack.hasTOF (), bachelor.hasTOF (),
461- protonTrack.tofNSigmaPr (), pionTrack.tofNSigmaPi (), bachelor.tofNSigmaKa (), bachelor.tofNSigmaPi ()});
459+ protonTrack.tofNSigmaPr (), pionTrack.tofNSigmaPi (), bachelor.tofNSigmaKa (), bachelor.tofNSigmaPi (), collision. sel8 (), mc, ma });
462460 }
463461 }
464462
465463 template <typename CascadeType>
466464 void fillDataTable (auto const & candidates)
467465 {
468466 for (const auto & c : candidates) {
469- getDataTable<CascadeType>()(c.matchingChi2 , c.deltaPtITS , c. deltaPt , c.itsClusSize , c.hasReassociatedCluster ,
467+ getDataTable<CascadeType>()(c.matchingChi2 , c.deltaPt , c.itsClusSize , c.hasReassociatedCluster ,
470468 c.pvContributors , c.pvTimeResolution , c.pvX , c.pvY , c.pvZ ,
471469 c.cascPt , c.cascEta , c.cascPhi ,
472470 c.protonPt , c.protonEta , c.pionPt , c.pionEta , c.bachPt , c.bachEta ,
@@ -477,7 +475,7 @@ struct NonPromptCascadeTask {
477475 c.cascNClusITS , c.protonNClusITS , c.pionNClusITS , c.bachNClusITS , c.protonNClusTPC , c.pionNClusTPC , c.bachNClusTPC ,
478476 c.protonTPCNSigma , c.pionTPCNSigma , c.bachKaonTPCNSigma , c.bachPionTPCNSigma ,
479477 c.protonHasTOF , c.pionHasTOF , c.bachHasTOF ,
480- c.protonTOFNSigma , c.pionTOFNSigma , c.bachKaonTOFNSigma , c.bachPionTOFNSigma );
478+ c.protonTOFNSigma , c.pionTOFNSigma , c.bachKaonTOFNSigma , c.bachPionTOFNSigma , c. sel8 , c. multFT0C , c. multFT0A );
481479 }
482480 }
483481
@@ -490,31 +488,19 @@ struct NonPromptCascadeTask {
490488 continue ;
491489 }
492490 auto particle = mcParticles.iteratorAt (c.mcParticleId );
493- int motherDecayDaughters{0 };
494- if (c.isFromBeauty || c.isFromCharm ) {
495- auto mom = particle.template mothers_as <aod::McParticles>()[0 ];
496- auto daughters = mom.template daughters_as <aod::McParticles>();
497- motherDecayDaughters = daughters.size ();
498- for (const auto & d : daughters) {
499- if (std::abs (d.pdgCode ()) == 11 || std::abs (d.pdgCode ()) == 13 ) {
500- motherDecayDaughters *= -1 ;
501- break ;
502- }
503- }
504- }
505491 auto mcCollision = particle.template mcCollision_as <aod::McCollisions>();
506492 auto recCollision = collisions.iteratorAt (c.collisionID );
507493
508- getMCtable<CascadeType>()(c.matchingChi2 , c.deltaPtITS , c. deltaPt , c.itsClusSize , c.hasReassociatedCluster , c.isGoodMatch , c.isGoodCascade , c.pdgCodeMom , c.pdgCodeITStrack , c.isFromBeauty , c.isFromCharm ,
494+ getMCtable<CascadeType>()(c.matchingChi2 , c.deltaPt , c.itsClusSize , c.hasReassociatedCluster , c.isGoodMatch , c.isGoodCascade , c.pdgCodeMom , c.pdgCodeITStrack , c.isFromBeauty , c.isFromCharm ,
509495 c.pvContributors , c.pvTimeResolution , c.pvX , c.pvY , c.pvZ , c.cascPt , c.cascEta , c.cascPhi ,
510496 c.protonPt , c.protonEta , c.pionPt , c.pionEta , c.bachPt , c.bachEta ,
511497 c.cascDCAxy , c.cascDCAz , c.protonDCAxy , c.protonDCAz , c.pionDCAxy , c.pionDCAz , c.bachDCAxy , c.bachDCAz ,
512498 c.casccosPA , c.v0cosPA , c.massXi , c.massOmega , c.massV0 , c.cascRadius , c.v0radius , c.cascLength , c.v0length ,
513499 c.cascNClusITS , c.protonNClusITS , c.pionNClusITS , c.bachNClusITS , c.protonNClusTPC , c.pionNClusTPC , c.bachNClusTPC , c.protonTPCNSigma ,
514500 c.pionTPCNSigma , c.bachKaonTPCNSigma , c.bachPionTPCNSigma , c.protonHasTOF , c.pionHasTOF , c.bachHasTOF ,
515- c.protonTOFNSigma , c.pionTOFNSigma , c.bachKaonTOFNSigma , c.bachPionTOFNSigma ,
501+ c.protonTOFNSigma , c.pionTOFNSigma , c.bachKaonTOFNSigma , c.bachPionTOFNSigma , c. sel8 , c. multFT0C , c. multFT0A ,
516502 particle.pt (), particle.eta (), particle.phi (), particle.pdgCode (), mcCollision.posX () - particle.vx (), mcCollision.posY () - particle.vy (),
517- mcCollision.posZ () - particle.vz (), mcCollision.globalIndex () == recCollision.mcCollisionId (), c. hasFakeReassociation , motherDecayDaughters );
503+ mcCollision.posZ () - particle.vz (), mcCollision.globalIndex () == recCollision.mcCollisionId ());
518504 }
519505 }
520506
@@ -568,20 +554,7 @@ struct NonPromptCascadeTask {
568554 int pdgCodeMom = p.has_mothers () ? p.template mothers_as <aod::McParticles>()[0 ].pdgCode () : 0 ;
569555 auto mcCollision = p.template mcCollision_as <aod::McCollisions>();
570556
571- int motherDecayDaughters{0 };
572- if (fromHF[0 ] || fromHF[1 ]) {
573- auto mom = p.template mothers_as <aod::McParticles>()[0 ];
574- auto daughters = mom.template daughters_as <aod::McParticles>();
575- motherDecayDaughters = daughters.size ();
576- for (const auto & d : daughters) {
577- if (std::abs (d.pdgCode ()) == 11 || std::abs (d.pdgCode ()) == 13 ) {
578- motherDecayDaughters *= -1 ;
579- break ;
580- }
581- }
582- }
583-
584- NPCTableGen (p.pt (), p.eta (), p.phi (), p.pdgCode (), pdgCodeMom, mcCollision.posX () - p.vx (), mcCollision.posY () - p.vy (), mcCollision.posZ () - p.vz (), fromHF[0 ], fromHF[1 ], motherDecayDaughters);
557+ NPCTableGen (p.pt (), p.eta (), p.phi (), p.pdgCode (), pdgCodeMom, mcCollision.posX () - p.vx (), mcCollision.posY () - p.vy (), mcCollision.posZ () - p.vz (), fromHF[0 ], fromHF[1 ]);
585558 }
586559 }
587560 PROCESS_SWITCH (NonPromptCascadeTask, processGenParticles, " process gen cascades: MC analysis" , false );
0 commit comments