@@ -43,9 +43,9 @@ using namespace o2::framework::expressions;
4343
4444struct JetShapeTask {
4545
46- Configurable<int > nBinsNSigma{" nBinsNSigma" , 101 , " Number of nsigma bins" };
47- Configurable<float > nSigmaMin{" nSigmaMin" , -10 .1f , " Min value of nsigma" };
48- Configurable<float > nSigmaMax{" nSigmaMax" , 10 .1f , " Max value of nsigma" };
46+ Configurable<int > nBinsNSigma{" nBinsNSigma" , 100 , " Number of nsigma bins" };
47+ Configurable<float > nSigmaMin{" nSigmaMin" , -10 .0f , " Min value of nsigma" };
48+ Configurable<float > nSigmaMax{" nSigmaMax" , 10 .0f , " Max value of nsigma" };
4949 Configurable<int > nBinsPForDedx{" nBinsPForDedx" , 700 , " Number of p bins" };
5050 Configurable<int > nBinsPForBeta{" nBinsPForBeta" , 500 , " Number of pT bins" };
5151 Configurable<int > nBinsTpcDedx{" nBinsTpcDedx" , 500 , " Number of DEdx bins" };
@@ -62,7 +62,7 @@ struct JetShapeTask {
6262 Configurable<int > nBinsPt{" nBinsPt" , 60 , " Number of pT bins" };
6363 Configurable<int > nBinsJetPt{" nBinsJetPt" , 10 , " Number of jet pT bins" };
6464 Configurable<int > nBinsPForCut{" nBinsPForCut" , 30 , " Number of p track bins" };
65- Configurable<int > nBinsCentrality{" nBinsCentrality" , 20 , " Number of centrality bins" };
65+ Configurable<int > nBinsCentrality{" nBinsCentrality" , 10 , " Number of centrality bins" };
6666 Configurable<int > nBinsDistance{" nBinsDistance" , 7 , " Number of distance bins" };
6767 Configurable<float > distanceMax{" distanceMax" , 0 .7f , " Max value of distance" };
6868 Configurable<float > nSigmaTofCut{" nSigmaTofCut" , 2 .0f , " Number of sigma cut for TOF PID" };
@@ -79,11 +79,10 @@ struct JetShapeTask {
7979 {" tofPi" , " tofPi" , {HistType::kTH2F , {{nBinsPt, 0 , ptMax}, {nBinsNSigma, nSigmaMin, nSigmaMax}}}},
8080 {" tpcPr" , " tpcPr" , {HistType::kTH2F , {{nBinsP, 0 , pMax}, {nBinsNSigma, nSigmaMin, nSigmaMax}}}},
8181 {" tofPr" , " tofPr" , {HistType::kTH2F , {{nBinsPt, 0 , ptMax}, {nBinsNSigma, nSigmaMin, nSigmaMax}}}},
82- {" tpcDedx" , " tpcDedx" , {HistType::kTHnSparseD , {{nBinsPForDedx, 0 , pMax}, {nBinsTpcDedx, 0 , 1000 }}}},
83- {" tofBeta" , " tofBeta" , {HistType::kTH2F , {{nBinsPForBeta, 0 , pMax}, {nBinsTofBeta, 0.4 , 1.1 }}}},
82+ {" tpcDedx" , " tpcDedx" , {HistType::kTHnSparseD , {{nBinsPForDedx, 0 , pMax}, {nBinsTpcDedx, 0 , 1000 }, {nBinsCentrality, centralityMinForCut, centralityMaxForCut} }}},
83+ {" tofBeta" , " tofBeta" , {HistType::kTHnSparseD , {{nBinsPForBeta, 0 , pMax}, {nBinsTofBeta, 0.4 , 1.1 }, {nBinsCentrality, centralityMinForCut, centralityMaxForCut }}}},
8484 {" pVsPtForPr" , " pVsPtForPr" , {HistType::kTHnSparseD , {{nBinsP, 0 , pMax}, {nBinsPt, 0 , ptMax}, {nBinsCentrality, centralityMinForCut, centralityMaxForCut}}}},
8585 {" pVsPtForPi" , " pVsPtPi" , {HistType::kTHnSparseD , {{nBinsP, 0 , pMax}, {nBinsPt, 0 , ptMax}, {nBinsCentrality, centralityMinForCut, centralityMaxForCut}}}},
86- {" tofMass" , " tofMass" , {HistType::kTH1F , {{90 , 0 , 3 }}}},
8786 {" trackPhi" , " trackPhi" , {HistType::kTH1F , {{80 , -1 , 7 }}}},
8887 {" trackEta" , " trackEta" , {HistType::kTH1F , {{100 , -1 , 1 }}}},
8988 {" trackTpcNClsCrossedRows" , " trackTpcNClsCrossedRows" , {HistType::kTH1F , {{50 , 0 , 200 }}}},
@@ -114,7 +113,6 @@ struct JetShapeTask {
114113 {" rho" , " rho" , {HistType::kTH1F , {{120 , 0 , 300 }}}},
115114 {" ptCorr" , " Corrected jet pT; p_{T}^{corr} (GeV/c); Counts" , {HistType::kTH1F , {{200 , 0 , 200 }}}},
116115 {" ptCorrVsDistance" , " ptcorr_vs_distance" , {HistType::kTH2F , {{70 , 0 , 0.7 }, {100 , 0 , 100 }}}},
117- {" distanceVsTrackpt" , " trackpt_vs_distance" , {HistType::kTH2F , {{70 , 0 , 0.7 }, {100 , 0 , 100 }}}},
118116 {" jetDistanceVsTrackpt" , " trackpt_vs_distance_injet" , {HistType::kTH2F , {{70 , 0 , 0.7 }, {100 , 0 , 100 }}}},
119117 {" ptSum" , " ptSum" , {HistType::kTHnSparseD , {{14 , 0 , 0.7 }, {nBinsJetShapeFunc, 0 , jetShapeFuncMax}, {nBinsJetPt, jetPtMinForCut, jetPtMaxForCut}, {nBinsCentrality, centralityMinForCut, centralityMaxForCut}}}},
120118 {" ptSumBg1" , " ptSumBg1" , {HistType::kTHnSparseD , {{14 , 0 , 0.7 }, {nBinsJetShapeFunc, 0 , jetShapeFuncMax}, {nBinsJetPt, jetPtMinForCut, jetPtMaxForCut}, {nBinsCentrality, centralityMinForCut, centralityMaxForCut}}}},
@@ -161,7 +159,7 @@ struct JetShapeTask {
161159 Configurable<float > nclcrossTpcMin{" nclcrossTpcMin" , 70 .0f , " tpc # of crossedRows cut" };
162160 Configurable<float > mcRapidityMax{" mcRapidityMax" , 0 .5f , " maximum mctrack y" };
163161 Configurable<double > epsilon{" epsilon" , 1e-6 , " standard for aboid division of zero" };
164- Configurable<float > maxDeltaEtaSafe{" maxDeltaEtaSafe" , 2 . 0f , " maximum track eta for cut" };
162+ Configurable<float > maxDeltaEtaSafe{" maxDeltaEtaSafe" , 0 . 9f , " maximum track eta for cut" };
165163
166164 Configurable<std::string> triggerMasks{" triggerMasks" , " " , " possible JE Trigger masks: fJetChLowPt,fJetChHighPt,fTrackLowPt,fTrackHighPt,fJetD0ChLowPt,fJetD0ChHighPt,fJetLcChLowPt,fJetLcChHighPt,fEMCALReadout,fJetFullHighPt,fJetFullLowPt,fJetNeutralHighPt,fJetNeutralLowPt,fGammaVeryHighPtEMCAL,fGammaVeryHighPtDCAL,fGammaHighPtEMCAL,fGammaHighPtDCAL,fGammaLowPtEMCAL,fGammaLowPtDCAL,fGammaVeryLowPtEMCAL,fGammaVeryLowPtDCAL" };
167165
@@ -227,8 +225,14 @@ struct JetShapeTask {
227225 Filter collisionFilter = nabs(aod::collision::posZ) < vertexZCut;
228226 Filter mcCollisionFilter = nabs(aod::jmccollision::posZ) < vertexZCut;
229227
228+ using FullTrackInfo = soa::Join<aod::Tracks, aod::pidTPCFullPi, aod::pidTOFFullPi, aod::pidTPCFullPr, aod::pidTOFFullPr, aod::TracksExtra, aod::TracksDCA, aod::pidTOFbeta>;
229+
230230 void processJetShape (soa::Filtered<soa::Join<aod::JetCollisions, aod::BkgChargedRhos>>::iterator const & collision, aod::JetTracks const & tracks, soa::Join<aod::ChargedJets, aod::ChargedJetConstituents> const & jets)
231231 {
232+ if (!jetderiveddatautilities::selectCollision (collision, eventSelectionBits)) {
233+ return ;
234+ }
235+
232236 size_t nBins = distanceCategory->size () - 1 ;
233237
234238 float maxDistance = distanceCategory->at (nBins);
@@ -273,7 +277,9 @@ struct JetShapeTask {
273277 }
274278
275279 for (const auto & track : tracks) {
276-
280+ if (!jetderiveddatautilities::selectTrack (track, trackSelection)) {
281+ continue ;
282+ }
277283 float trkPt = track.pt ();
278284 float trkPhi = track.phi ();
279285 float trkEta = track.eta ();
@@ -367,7 +373,7 @@ struct JetShapeTask {
367373
368374 PROCESS_SWITCH (JetShapeTask, processJetShape, " JetShape" , false );
369375
370- void processJetProductionRatio (soa::Filtered<soa::Join<aod::JetCollisions, aod::BkgChargedRhos>>::iterator const & collision, soa::Join<aod::JetTracks, aod::pidTPCFullPi, aod::pidTOFFullPi, aod::pidTPCFullPr, aod::pidTOFFullPr, aod::TracksExtra, aod::TracksDCA, aod::pidTOFbeta> const & tracks , soa::Join<aod::ChargedJets, aod::ChargedJetConstituents> const & jets)
376+ void processJetProductionRatio (soa::Filtered<soa::Join<aod::JetCollisions, aod::BkgChargedRhos>>::iterator const & collision, soa::Join<aod::JetTracks, aod::JTrackPIs> const & tracks, FullTrackInfo const &, soa::Join<aod::ChargedJets, aod::ChargedJetConstituents> const & jets)
371377 {
372378 if (!jetderiveddatautilities::selectCollision (collision, eventSelectionBits)) {
373379 return ;
@@ -402,7 +408,12 @@ struct JetShapeTask {
402408 {jet.pt (), jet.eta (), jet.phi (), ptCorr, phiBg1, phiBg2});
403409 }
404410
405- for (const auto & track : tracks) {
411+ for (const auto & jetTrack : tracks) {
412+ if (!jetderiveddatautilities::selectTrack (jetTrack, trackSelection)) {
413+ continue ;
414+ }
415+
416+ auto track = jetTrack.track_as <FullTrackInfo>();
406417
407418 if (std::abs (track.eta ()) > etaTrUp)
408419 continue ;
@@ -458,7 +469,7 @@ struct JetShapeTask {
458469 float distBg2 = std::sqrt (dEta * dEta + deltaPhiBg2 * deltaPhiBg2);
459470
460471 // --- Background Fill ---
461- if (distBg1 < jetR || distBg2 < jetR ) {
472+ if (distBg1 < distanceMax || distBg2 < distanceMax ) {
462473 registry.fill (HIST (" tpcDedxOutOfJet" ), trkP, tpcSig);
463474
464475 if (hasTofPi) {
@@ -496,14 +507,23 @@ struct JetShapeTask {
496507 }
497508 }
498509 }
499- PROCESS_SWITCH (JetShapeTask, processJetProductionRatio,
500- " production ratio around jets" , false );
510+ PROCESS_SWITCH (JetShapeTask, processJetProductionRatio, " production ratio around jets" , false );
501511
502- void processInclusiveProductionRatio (soa::Filtered<soa::Join< aod::Collisions, aod::CentFT0Ms>> ::iterator const & collision, soa::Join<aod::Tracks , aod::pidTPCFullPi, aod::pidTOFFullPi, aod::pidTPCFullPr, aod::pidTOFFullPr, aod::TracksExtra, aod::TracksDCA, aod::pidTOFbeta, aod::pidTOFmass> const & tracks )
512+ void processInclusiveProductionRatio (soa::Filtered<aod::JetCollisions> ::iterator const & collision, soa::Join<aod::JetTracks , aod::JTrackPIs> const & tracks, FullTrackInfo const &)
503513 {
514+ if (!jetderiveddatautilities::selectCollision (collision, eventSelectionBits)) {
515+ return ;
516+ }
504517
505518 // tracks conditions
506- for (const auto & track : tracks) {
519+ for (const auto & jetTrack : tracks) {
520+
521+ if (!jetderiveddatautilities::selectTrack (jetTrack, trackSelection)) {
522+ continue ;
523+ }
524+
525+ auto track = jetTrack.track_as <FullTrackInfo>();
526+
507527 registry.fill (HIST (" trackTpcNClsCrossedRows" ), track.tpcNClsCrossedRows ());
508528 registry.fill (HIST (" trackDcaXY" ), track.dcaXY ());
509529 registry.fill (HIST (" trackItsChi2NCl" ), track.itsChi2NCl ());
@@ -529,11 +549,12 @@ struct JetShapeTask {
529549 continue ;
530550
531551 // PID check
532- registry.fill (HIST (" tofMass" ), track.mass ());
533552 registry.fill (HIST (" tpcPi" ), track.p (), track.tpcNSigmaPi ());
534553 registry.fill (HIST (" tofPi" ), track.pt (), track.tofNSigmaPi ());
535554 registry.fill (HIST (" tpcPr" ), track.p (), track.tpcNSigmaPr ());
536555 registry.fill (HIST (" tofPr" ), track.pt (), track.tofNSigmaPr ());
556+ registry.fill (HIST (" tpcDedx" ), track.p (), track.tpcSignal (), collision.centFT0M ());
557+ registry.fill (HIST (" tofBeta" ), track.p (), track.beta (), collision.centFT0M ());
537558
538559 if (std::abs (track.tofNSigmaPr ()) < nSigmaTofCut) {
539560 registry.fill (HIST (" tpcTofPr" ), track.p (), track.tpcNSigmaPr (), collision.centFT0M ());
@@ -551,19 +572,21 @@ struct JetShapeTask {
551572 }
552573 }
553574 }
554- PROCESS_SWITCH (JetShapeTask, processInclusiveProductionRatio,
555- " inclusive Production ratio" , false );
575+ PROCESS_SWITCH (JetShapeTask, processInclusiveProductionRatio, " inclusive Production ratio" , false );
556576
557- void processReco (
558- soa::Filtered<soa::Join<aod::JetCollisionsMCD, aod::BkgChargedRhos>>::iterator const & collision,
559- soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::McTrackLabels> const & tracks, aod::ChargedMCDetectorLevelJets const & jets, aod::McParticles const & mcParticles)
577+ void processReco (soa::Filtered<soa::Join<aod::JetCollisionsMCD, aod::BkgChargedRhos>>::iterator const & collision, soa::Join<aod::JetTracks, aod::TracksExtra, aod::TracksDCA, aod::McTrackLabels> const & tracks, aod::ChargedMCDetectorLevelJets const & jets, aod::McParticles const & mcParticles)
560578 {
579+ if (!jetderiveddatautilities::selectCollision (collision, eventSelectionBits)) {
580+ return ;
581+ }
582+
561583 (void )mcParticles;
562584
563585 registry.fill (HIST (" eventCounter" ), 0.5 );
564586
565587 float centrality = collision.centFT0M ();
566588 float rho = collision.rho ();
589+
567590 registry.fill (HIST (" mcCentralityReco" ), centrality);
568591
569592 struct CachedJet {
@@ -583,6 +606,11 @@ struct JetShapeTask {
583606 }
584607
585608 for (const auto & track : tracks) {
609+
610+ if (!jetderiveddatautilities::selectTrack (track, trackSelection)) {
611+ continue ;
612+ }
613+
586614 if (!track.has_mcParticle ())
587615 continue ;
588616
@@ -657,35 +685,71 @@ struct JetShapeTask {
657685 }
658686 PROCESS_SWITCH (JetShapeTask, processReco, " process reconstructed simulation information" , true );
659687
660- void processSim (soa::Join< aod::McCollisions, aod::McCentFT0Ms>:: iterator const & mcCollision, aod::ChargedMCParticleLevelJets const & mcpjets, aod::McParticles const & mcParticles)
688+ void processSim (aod::JetMcCollisions:: iterator const & mcCollision, aod::ChargedMCParticleLevelJets const & mcpjets, aod::JetParticles const & mcParticles)
661689 {
690+ if (std::abs (mcCollision.posZ ()) > vertexZCut) {
691+ return ;
692+ }
662693
694+ // --- centrality ---
663695 float centrality = mcCollision.centFT0M ();
664696 registry.fill (HIST (" mcCentralitySim" ), centrality);
665697
666- for ( const auto & mcpjet : mcpjets) {
698+ const float maxR2 = distanceMax * distanceMax;
667699
668- for (const auto & mcParticle : mcParticles) {
700+ // --- loop over MC particles only once ---
701+ for (const auto & mcParticle : mcParticles) {
669702
670- float dEta = mcParticle.eta () - mcpjet.eta ();
671- float dPhi = std::abs (mcParticle.phi () - mcpjet.phi ());
703+ // --- early cuts on particle ---
704+ if (!mcParticle.isPhysicalPrimary ()) {
705+ continue ;
706+ }
672707
708+ if (std::abs (mcParticle.y ()) > mcRapidityMax) {
709+ continue ;
710+ }
711+
712+ int absPdg = std::abs (mcParticle.pdgCode ());
713+ if (absPdg != PDG_t::kPiPlus &&
714+ absPdg != PDG_t::kKPlus &&
715+ absPdg != PDG_t::kProton ) {
716+ continue ;
717+ }
718+
719+ const float partPt = mcParticle.pt ();
720+ const float partEta = mcParticle.eta ();
721+ const float partPhi = mcParticle.phi ();
722+
723+ // --- loop over jets ---
724+ for (const auto & mcpjet : mcpjets) {
725+
726+ // --- delta eta cut first ---
727+ float dEta = partEta - mcpjet.eta ();
728+ if (std::abs (dEta) > distanceMax) {
729+ continue ;
730+ }
731+
732+ // --- delta phi ---
733+ float dPhi = std::abs (partPhi - mcpjet.phi ());
673734 if (dPhi > o2::constants::math::PI) {
674735 dPhi = o2::constants::math::TwoPI - dPhi;
675736 }
676737
677- float deltaR = std::sqrt (dEta * dEta + dPhi * dPhi);
678- if (deltaR > distanceMax) {
738+ // --- delta R^2 ---
739+ float dR2 = dEta * dEta + dPhi * dPhi;
740+ if (dR2 > maxR2) {
679741 continue ;
680742 }
681743
682- if (mcParticle.isPhysicalPrimary () && std::fabs (mcParticle.y ()) < mcRapidityMax) {
683- if (std::abs (mcParticle.pdgCode ()) == PDG_t::kPiPlus )
684- registry.fill (HIST (" ptGeneratedPion" ), mcParticle.pt (), mcpjet.pt (), centrality);
685- if (std::abs (mcParticle.pdgCode ()) == PDG_t::kKPlus )
686- registry.fill (HIST (" ptGeneratedKaon" ), mcParticle.pt (), mcpjet.pt (), centrality);
687- if (std::abs (mcParticle.pdgCode ()) == PDG_t::kProton )
688- registry.fill (HIST (" ptGeneratedProton" ), mcParticle.pt (), mcpjet.pt (), centrality);
744+ const float jetPt = mcpjet.pt ();
745+
746+ // --- histogram fill ---
747+ if (absPdg == PDG_t::kPiPlus ) {
748+ registry.fill (HIST (" ptGeneratedPion" ), partPt, jetPt, centrality);
749+ } else if (absPdg == PDG_t::kKPlus ) {
750+ registry.fill (HIST (" ptGeneratedKaon" ), partPt, jetPt, centrality);
751+ } else if (absPdg == PDG_t::kProton ) {
752+ registry.fill (HIST (" ptGeneratedProton" ), partPt, jetPt, centrality);
689753 }
690754 }
691755 }
0 commit comments