@@ -149,7 +149,7 @@ struct preProcessMCcollisions {
149149 histos.add (" h2dPVResolutionXYWithXi" , " h2dPVResolutionXYWithXi" , kTH2D , {axisPVResolutionXY, axisTwenty});
150150 histos.add (" h2dPVResolutionZWithXi" , " h2dPVResolutionZWithXi" , kTH2D , {axisPVResolutionZ, axisTwenty});
151151 histos.add (" h2dPVResolutionTWithXi" , " h2dPVResolutionTWithXi" , kTH2D , {axisPVResolutionT, axisTwenty});
152-
152+
153153 // Helper to decipher this histogram
154154 histos.get <TH2 >(HIST (" h2dNContributors" ))->GetYaxis ()->SetBinLabel (1 , " Recoed 1 time, 1st PV" ); // size 1 = 0
155155 histos.get <TH2 >(HIST (" h2dNContributors" ))->GetYaxis ()->SetBinLabel (2 , " Recoed 2 times, Biggest PV" ); // size 2 = 1
@@ -380,6 +380,10 @@ struct straRecoStudy {
380380
381381 const AxisSpec axisITSClu{10 , -0 .5f , +9 .5f , " ITS clusters" };
382382 const AxisSpec axisTPCCroRo{160 , -0 .5f , +159 .5f , " TPC crossed rows" };
383+
384+ // bit packed ITS cluster map
385+ const AxisSpec axisITSCluMap{(int )128 , -0 .5f , +127 .5f , " Packed ITS map" };
386+ const AxisSpec axisRadius{(int )160 , 0 .0f , +80 .0f , " Radius (cm)" };
383387
384388 TString lSpecies[] = {" K0Short" , " Lambda" , " AntiLambda" , " XiMinus" , " XiPlus" , " OmegaMinus" , " OmegaPlus" };
385389 const AxisSpec lMassAxis[] = {axisK0ShortMass, axisLambdaMass, axisLambdaMass, axisXiMass, axisXiMass, axisOmegaMass, axisOmegaMass};
@@ -428,6 +432,12 @@ struct straRecoStudy {
428432 histos.add (" h2dOmegaMinusQADCABachToPV" , " h2dOmegaMinusQADCABachToPV" , kTH2F , {axisVsPtCoarse, axisDCA});
429433 histos.add (" h2dOmegaMinusQADCACascToPV" , " h2dOmegaMinusQADCACascToPV" , kTH2F , {axisVsPtCoarse, axisDCAWD});
430434 histos.add (" h2dOmegaMinusQAPointingAngle" , " h2dOmegaMinusQAPointingAngle" , kTH2F , {axisVsPtCoarse, axisPA});
435+
436+ histos.add (" h2dITSCluMap_V0Positive" , " h2dITSCluMap_V0Positive" , kTH2D , {axisITSCluMap, axisRadius});
437+ histos.add (" h2dITSCluMap_V0Negative" , " h2dITSCluMap_V0Negative" , kTH2D , {axisITSCluMap, axisRadius});
438+ histos.add (" h2dITSCluMap_CascPositive" , " h2dITSCluMap_CascPositive" , kTH2D , {axisITSCluMap, axisRadius});
439+ histos.add (" h2dITSCluMap_CascNegative" , " h2dITSCluMap_CascNegative" , kTH2D , {axisITSCluMap, axisRadius});
440+ histos.add (" h2dITSCluMap_CascBachelor" , " h2dITSCluMap_CascBachelor" , kTH2D , {axisITSCluMap, axisRadius});
431441
432442 // Track quality tests
433443 histos.add (" h3dTrackPtsK0ShortP" , " h3dTrackPtsK0ShortP" , kTH3F , {axisVsPtCoarse, axisITSClu, axisTPCCroRo});
@@ -533,6 +543,47 @@ struct straRecoStudy {
533543 resetCounters ();
534544 }
535545 PROCESS_SWITCH (straRecoStudy, processV0, " Regular V0 analysis" , true );
546+
547+ void processV0RealData (soa::Join<aod::Collisions, aod::EvSels>::iterator const & collision, aod::V0Datas const & v0tables, aod::CascDataExt const & Cascades, TracksCompleteIU const & tracks, aod::V0sLinked const &)
548+ {
549+ evselstats[kEvSelAll ]++;
550+ if (event_sel8_selection && !collision.sel8 ()) {
551+ return ;
552+ }
553+ evselstats[kEvSelBool ]++;
554+ if (event_posZ_selection && abs (collision.posZ ()) > 10 .f ) { // 10cm
555+ return ;
556+ }
557+ evselstats[kEvSelVtxZ ]++;
558+ for (auto & v0 : v0tables) {
559+ // MC association
560+ auto posPartTrack = v0.posTrack_as <TracksCompleteIU>();
561+ auto negPartTrack = v0.negTrack_as <TracksCompleteIU>();
562+ histos.fill (HIST (" h2dITSCluMap_V0Positive" ), (float )posPartTrack.itsClusterMap (), v0.v0radius ());
563+ histos.fill (HIST (" h2dITSCluMap_V0Negative" ), (float )negPartTrack.itsClusterMap (), v0.v0radius ());
564+
565+ if (posPartTrack.itsNCls () < itsminclusters || negPartTrack.itsNCls () < itsminclusters)
566+ continue ;
567+ if (posPartTrack.tpcNClsCrossedRows () < tpcmincrossedrows || negPartTrack.tpcNClsCrossedRows () < tpcmincrossedrows)
568+ continue ;
569+
570+ if (v0.v0radius () > v0setting_radius && v0.v0radius () < maxV0Radius) {
571+ if (v0.v0cosPA (collision.posX (), collision.posY (), collision.posZ ()) > v0setting_cospa) {
572+ if (v0.dcaV0daughters () < v0setting_dcav0dau) {
573+ // *+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*
574+ // Fill invariant masses
575+ histos.fill (HIST (" h2dMassK0Short" ), v0.pt (), v0.mK0Short ());
576+ histos.fill (HIST (" h2dMassLambda" ), v0.pt (), v0.mLambda ());
577+ histos.fill (HIST (" h2dMassAntiLambda" ), v0.pt (), v0.mAntiLambda ());
578+ // *+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*
579+ }
580+ }
581+ }
582+ } // end v0 loop
583+ fillHistos ();
584+ resetCounters ();
585+ }
586+ PROCESS_SWITCH (straRecoStudy, processV0RealData, " Regular V0 analysis in real data" , false );
536587
537588 void processCascade (soa::Join<aod::Collisions, aod::EvSels>::iterator const & collision, aod::V0Datas const &, soa::Filtered<CascMC> const & Cascades, TracksCompleteIUMC const & tracks, aod::McParticles const &, aod::V0sLinked const &)
538589 {
@@ -651,6 +702,10 @@ struct straRecoStudy {
651702 auto v0 = v0index.v0Data (); // de-reference index to correct v0data in case it exists
652703 auto posPartTrack = v0.posTrack_as <TracksCompleteIU>();
653704 auto negPartTrack = v0.negTrack_as <TracksCompleteIU>();
705+
706+ histos.fill (HIST (" h2dITSCluMap_CascPositive" ), (float )posPartTrack.itsClusterMap (), casc.v0radius ());
707+ histos.fill (HIST (" h2dITSCluMap_CascNegative" ), (float )negPartTrack.itsClusterMap (), casc.v0radius ());
708+ histos.fill (HIST (" h2dITSCluMap_CascBachelor" ), (float )bachPartTrack.itsClusterMap (), casc.cascradius ());
654709
655710 if (casc.sign () < 0 ) {
656711 histos.fill (HIST (" h3dTrackPtsXiMinusP" ), casc.pt (), posPartTrack.itsNCls (), posPartTrack.tpcNClsCrossedRows ());
@@ -692,7 +747,7 @@ struct straRecoStudy {
692747 }
693748 }
694749 PROCESS_SWITCH (straRecoStudy, processCascadeRealData, " Regular cascade analysis, real data" , false );
695-
750+
696751 void processGeneratedReconstructible (soa::Filtered<RecoedMCCollisions>::iterator const & collision, aod::McParticles const & mcParticles)
697752 {
698753 // check if collision successfully reconstructed
0 commit comments