@@ -53,7 +53,8 @@ AxisSpec DeltaZAxis = {61, -6.1, 6.1};
5353AxisSpec ZAxis = {301 , -30.1 , 30.1 };
5454AxisSpec PhiAxis = {629 , 0 , o2::constants::math::TwoPI, " Rad" , " phi axis" };
5555// AxisSpec EtaAxis = {18, -4.6, -1.};
56- AxisSpec DCAxyAxis = {100 , -1 , 10 };
56+ AxisSpec DCAxyAxis = {5000 , -1 , 500 };
57+ AxisSpec DCAzAxis = {5000 , -251 , 250 };
5758AxisSpec CentAxis = {{0 , 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 100 }};
5859
5960static constexpr TrackSelectionFlags::flagtype trackSelectionITS =
@@ -93,6 +94,7 @@ struct PseudorapidityDensityMFT {
9394
9495 Configurable<bool > usePhiCut{" usePhiCut" , true , " use azimuthal angle cut" };
9596 Configurable<bool > useDCAxyCut{" useDCAxyCut" , false , " use DCAxy cut" };
97+ Configurable<bool > useDCAzCut{" useDCAzCut" , false , " use DCAz cut" };
9698 Configurable<float > cfgPhiCut{" cfgPhiCut" , 0 .1f ,
9799 " Cut on azimuthal angle of MFT tracks" };
98100 Configurable<float > cfgPhiCut1{" cfgPhiCut1" , 0 .0f ,
@@ -111,6 +113,7 @@ struct PseudorapidityDensityMFT {
111113 " Cut on eta1" };
112114 Configurable<float > cfgChi2NDFMax{" cfgChi2NDFMax" , 2000 .0f , " Max allowed chi2/NDF for MFT tracks" };
113115 Configurable<float > maxDCAxy{" maxDCAxy" , 2 .0f , " Cut on dcaXY" };
116+ Configurable<float > maxDCAz{" maxDCAz" , 2 .0f , " Cut on dcaZ" };
114117
115118 HistogramRegistry registry{
116119 " registry" ,
@@ -142,13 +145,14 @@ struct PseudorapidityDensityMFT {
142145 void init (InitContext&)
143146 {
144147 if (static_cast <int >(doprocessMult) +
145- static_cast <int >(doprocessMultReassoc) +
148+ static_cast <int >(doprocessMultReassoc) +
149+ static_cast <int >(doprocessMultReassoc3d) +
146150 static_cast <int >(doprocessCountingCentrality) >
147151 1 ) {
148152 LOGP (fatal,
149153 " Exactly one process function between processMult, "
150- " processMultReassoc and processCountingCentrality should be "
151- " enabled!" );
154+ " processMultReassoc, processMultReassoc3d, and processCountingCentrality should be "
155+ " enabled!" );
152156 }
153157 AxisSpec MultAxis = {multBinning, " N_{trk}" };
154158 auto hstat = registry.get <TH1>(HIST (" EventSelection" ));
@@ -251,7 +255,7 @@ struct PseudorapidityDensityMFT {
251255 x->SetBinLabel (5 , " Selected INEL>0" );
252256 }
253257
254- if (doprocessMultReassoc) {
258+ if (doprocessMultReassoc || doprocessMultReassoc3d ) {
255259 registry.add ({" Tracks/Control/DeltaZ" ,
256260 " ; #it{z_{orig}}-#it{z_{reass}}" ,
257261 {HistType::kTH1F , {ZAxis}}});
@@ -321,6 +325,8 @@ struct PseudorapidityDensityMFT {
321325 registry.add ({" Tracks/Control/amb/EtaZvtxAmb_gt0" ,
322326 " ; #eta; #it{z}_{vtx} (cm); tracks" ,
323327 {HistType::kTH2F , {EtaAxis, ZAxis}}}); //
328+ registry.add ({" Tracks/Control/amb/DCAxy_amb" , " ; DCA_{xy} (cm) ambiguous" ,
329+ {HistType::kTH1F , {DCAxyAxis}}});
324330
325331 registry.add ({" Tracks/Control/nonamb/nonAmbTracksEtaZvtx" ,
326332 " ; #eta; #it{z}_{vtx} (cm); tracks" ,
@@ -335,13 +341,17 @@ struct PseudorapidityDensityMFT {
335341 registry.add ({" Tracks/Control/nonamb/EtaZvtxNonAmb_gt0" ,
336342 " ; #eta; #it{z}_{vtx} (cm); tracks" ,
337343 {HistType::kTH2F , {EtaAxis, ZAxis}}}); //
344+ registry.add ({" Tracks/Control/nonamb/DCAxy_nonamb" , " ; DCA_{xy}(cm) non-ambiguous" ,
345+ {HistType::kTH1F , {{DCAxyAxis}}}}); //
338346
339347 registry.add ({" Tracks/Control/woOrp/woOrpTracksEtaZvtx" ,
340348 " ; #eta; #it{z}_{vtx} (cm); tracks" ,
341349 {HistType::kTH2F , {EtaAxis, ZAxis}}}); //
342350 registry.add ({" Tracks/Control/woOrp/woOrpEtaZvtx_gt0" ,
343351 " ; #eta; #it{z}_{vtx} (cm); tracks" ,
344352 {HistType::kTH2F , {EtaAxis, ZAxis}}}); //
353+ registry.add ({" Tracks/Control/woOrp/DCAxy_woOrp" , " ; DCA_{xy}(cm) w/o orphan" ,
354+ {HistType::kTH1F , {{DCAxyAxis}}}}); //
345355 registry.add ({" Tracks/2Danalysis/EtaZvtx" ,
346356 " ; #eta; #it{z}_{vtx} (cm); tracks" ,
347357 {HistType::kTH2F , {EtaAxis, ZAxis}}}); //
@@ -360,6 +370,20 @@ struct PseudorapidityDensityMFT {
360370 registry.add ({" Tracks/Control/woOrp/woOrpVertexCorr" ,
361371 " ; #it{z}_{vtx}^{orig} (cm); #it{z}_{vtx}^{re} (cm)" ,
362372 {HistType::kTH2F , {ZAxis, ZAxis}}}); //
373+ if (doprocessMultReassoc3d) {
374+ registry.add ({" Tracks/Control/DCAZ" ,
375+ " ; DCA_{Z} (cm)" ,
376+ {HistType::kTH1F , {DCAzAxis}}});
377+ registry.add ({" Tracks/Control/amb/DCAz_amb" ,
378+ " ; DCA_{z} (cm) ambiguous" ,
379+ {HistType::kTH1F , {DCAzAxis}}});
380+ registry.add ({" Tracks/Control/nonamb/DCAz_nonamb" ,
381+ " ; DCA_{z}(cm) non-ambiguous" ,
382+ {HistType::kTH1F , {DCAzAxis}}});
383+ registry.add ({" Tracks/Control/woOrp/DCAz_woOrp" ,
384+ " ; DCA_{z}(cm) w/o orphan" ,
385+ {HistType::kTH1F , {DCAzAxis}}});
386+ }
363387 registry.add ({" collisionID" , " ; Collision ID" ,
364388 // {HistType::kTH1F,{{100000, 0.5, 100000.0}}}}); //
365389 {HistType::kTH1F , {{100000 , -50000.0 , 50000.0 }}}}); //
@@ -567,10 +591,12 @@ struct PseudorapidityDensityMFT {
567591
568592 PROCESS_SWITCH (PseudorapidityDensityMFT, processMult,
569593 " Process reco or data info" , true );
570- void processMultReassoc (CollwEv::iterator const & collision,
571- o2::aod::MFTTracks const &,
572- soa::SmallGroups<aod::BestCollisionsFwd> const & retracks,
573- FiCentralTracks const & midtracks, aod::Tracks const &)
594+ // Common implementation for both BestCollisionsFwd and BestCollisionsFwd3d
595+ template <typename RetracksT>
596+ void processMultReassocCommon (CollwEv::iterator const & collision,
597+ o2::aod::MFTTracks const &,
598+ RetracksT const & retracks,
599+ FiCentralTracks const & midtracks, aod::Tracks const &)
574600 {
575601 registry.fill (HIST (" EventSelection" ), 1 .);
576602 auto perCollisionSample = sampleCentral->sliceByCached (
@@ -596,6 +622,13 @@ struct PseudorapidityDensityMFT {
596622 if (dcaxy_cut > maxDCAxy)
597623 continue ;
598624 }
625+ if constexpr (std::is_same_v<RetracksT, soa::SmallGroups<aod::BestCollisionsFwd3d>>) {
626+ float dcaz_cut = retrack.bestDCAZ ();
627+ if (useDCAzCut) {
628+ if (dcaz_cut > maxDCAz)
629+ continue ;
630+ }
631+ }
599632 if ((cfgnEta1 < track.eta ()) && (track.eta () < cfgnEta2) && track.nClusters () >= cfgnCluster && retrack.ambDegree () > 0 && chi2ndf < cfgChi2NDFMax && (phi > cfgPhiCut1 && phi < cfgPhiCut2)) {
600633 registry.fill (HIST (" Tracks/2Danalysis/EtaZvtx" ), track.eta (), z);
601634 }
@@ -641,6 +674,13 @@ struct PseudorapidityDensityMFT {
641674 if (dcaxy_cut > maxDCAxy)
642675 continue ;
643676 }
677+ if constexpr (std::is_same_v<RetracksT, soa::SmallGroups<aod::BestCollisionsFwd3d>>) {
678+ float dcaz_cut = retrack.bestDCAZ ();
679+ if (useDCAzCut) {
680+ if (dcaz_cut > maxDCAz)
681+ continue ;
682+ }
683+ }
644684 if ((cfgnEta1 < track.eta ()) && (track.eta () < cfgnEta2) && track.nClusters () >= cfgnCluster && retrack.ambDegree () > 0 && chi2ndf < cfgChi2NDFMax && (phi > cfgPhiCut1 && phi < cfgPhiCut2)) {
645685 registry.fill (HIST (" Tracks/Control/Chi2NDF" ), chi2ndf);
646686 registry.fill (HIST (" Tracks/2Danalysis/EtaZvtx_sel8" ), track.eta (), z);
@@ -670,6 +710,14 @@ struct PseudorapidityDensityMFT {
670710 if (dcaxy_cut > maxDCAxy)
671711 continue ;
672712 }
713+ if constexpr (std::is_same_v<RetracksT, soa::SmallGroups<aod::BestCollisionsFwd3d>>) {
714+ float dcaz_cut = retrack.bestDCAZ ();
715+ if (useDCAzCut) {
716+ if (dcaz_cut > maxDCAz)
717+ continue ;
718+ }
719+ }
720+
673721 registry.fill (HIST (" TracksEtaZvtx" ), track.eta (), z);
674722 if (midtracks.size () > 0 && retrack.ambDegree () > 0 ) {
675723 registry.fill (HIST (" Tracks/EtaZvtx_gt0" ), track.eta (), z);
@@ -721,6 +769,9 @@ struct PseudorapidityDensityMFT {
721769 registry.fill (HIST (" Tracks/Control/TrackAmbDegree" ),
722770 retrack.ambDegree ());
723771 registry.fill (HIST (" Tracks/Control/DCAXY" ), retrack.bestDCAXY ());
772+ if constexpr (std::is_same_v<RetracksT, soa::SmallGroups<aod::BestCollisionsFwd3d>>) {
773+ registry.fill (HIST (" Tracks/Control/DCAZ" ), retrack.bestDCAZ ());
774+ }
724775 int isAmbiguous = 0 ;
725776
726777 if (retrack.ambDegree () > 1 && retrack.ambDegree () != 0 ) {
@@ -735,6 +786,10 @@ struct PseudorapidityDensityMFT {
735786 track.eta ());
736787 registry.fill (HIST (" Tracks/Control/amb/AmbVertexCorr" ),
737788 track.collision_as <CollwEv>().posZ (), z);
789+ registry.fill (HIST (" Tracks/Control/amb/DCAxy_amb" ), retrack.bestDCAXY ());
790+ if constexpr (std::is_same_v<RetracksT, soa::SmallGroups<aod::BestCollisionsFwd3d>>) {
791+ registry.fill (HIST (" Tracks/Control/amb/DCAz_amb" ), retrack.bestDCAZ ());
792+ }
738793 registry.fill (HIST (" Tracks/Control/TrackCount" ), 3 );
739794 if (track.collisionId () == retrack.bestCollisionId ()) {
740795 registry.fill (HIST (" Tracks/Control/TrackCount" ), 5 );
@@ -755,6 +810,10 @@ struct PseudorapidityDensityMFT {
755810 track.eta ());
756811 registry.fill (HIST (" Tracks/Control/nonamb/nonAmbVertexCorr" ),
757812 track.collision_as <CollwEv>().posZ (), z);
813+ registry.fill (HIST (" Tracks/Control/nonamb/DCAxy_nonamb" ), retrack.bestDCAXY ());
814+ if constexpr (std::is_same_v<RetracksT, soa::SmallGroups<aod::BestCollisionsFwd3d>>) {
815+ registry.fill (HIST (" Tracks/Control/nonamb/DCAz_nonamb" ), retrack.bestDCAZ ());
816+ }
758817 registry.fill (HIST (" Tracks/Control/TrackCount" ), 4 );
759818 if (track.collisionId () == retrack.bestCollisionId ()) {
760819 registry.fill (HIST (" Tracks/Control/TrackCount" ), 6 );
@@ -774,6 +833,9 @@ struct PseudorapidityDensityMFT {
774833 registry.fill (HIST (" Tracks/Control/woOrp/woOrpVertexCorr" ),
775834 track.collision_as <CollwEv>().posZ (), z);
776835 registry.fill (HIST (" Tracks/Control/TrackCount" ), 9 ); // without orphan
836+ registry.fill (HIST (" Tracks/Control/woOrp/DCAxy_woOrp" ), retrack.bestDCAXY ());
837+ if constexpr (std::is_same_v<RetracksT, soa::SmallGroups<aod::BestCollisionsFwd3d>>) {
838+ registry.fill (HIST (" Tracks/Control/woOrp/DCAz_woOrp" ), retrack.bestDCAZ ());
777839 }
778840 }
779841 }
@@ -792,8 +854,26 @@ struct PseudorapidityDensityMFT {
792854 registry.fill (HIST (" EventSelection" ), 7 );
793855 }
794856 }
857+ void processMultReassoc (CollwEv::iterator const & collision,
858+ o2::aod::MFTTracks const & mft,
859+ soa::SmallGroups<aod::BestCollisionsFwd> const & retracks,
860+ FiCentralTracks const & midtracks, aod::Tracks const & trk)
861+ {
862+ processMultReassocCommon (collision, mft, retracks, midtracks, trk);
863+ }
864+
865+ void processMultReassoc3d (CollwEv::iterator const & collision,
866+ o2::aod::MFTTracks const & mft,
867+ soa::SmallGroups<aod::BestCollisionsFwd3d> const & retracks,
868+ FiCentralTracks const & midtracks, aod::Tracks const & trk)
869+ {
870+ processMultReassocCommon (collision, mft, retracks, midtracks, trk);
871+ }
795872 PROCESS_SWITCH (PseudorapidityDensityMFT, processMultReassoc,
796- " Process reco or data info" , false );
873+ " Process reco or data info" , false );
874+
875+ PROCESS_SWITCH (PseudorapidityDensityMFT, processMultReassoc3d,
876+ " Process reco or data info (3d)" , false );
797877
798878 using ExColsCent = soa::Join<aod::Collisions, aod::CentFT0Cs, aod::EvSels>;
799879
0 commit comments