@@ -51,6 +51,7 @@ DECLARE_SOA_COLUMN(RecoSetting, recoSetting, uint16_t);
5151DECLARE_SOA_COLUMN (RunNumber, runNumber, int32_t );
5252DECLARE_SOA_COLUMN (PosZ, posZ, float );
5353DECLARE_SOA_COLUMN (OccupancyInTime, occupancyInTime, float );
54+ DECLARE_SOA_COLUMN (HadronicRate, hadronicRate, float );
5455// FIT info
5556DECLARE_SOA_COLUMN (TotalFT0AmplitudeA, totalFT0AmplitudeA, float );
5657DECLARE_SOA_COLUMN (TotalFT0AmplitudeC, totalFT0AmplitudeC, float );
@@ -87,7 +88,7 @@ DECLARE_SOA_COLUMN(LeadingTrackPrPID, leadingTrackPrPID, float);
8788DECLARE_SOA_COLUMN (SubleadingTrackPrPID, subleadingTrackPrPID, float );
8889} // namespace reco_tree
8990DECLARE_SOA_TABLE (RecoTree, " AOD" , " RECOTREE" ,
90- reco_tree::RecoSetting, reco_tree::RunNumber, reco_tree::PosZ, reco_tree::OccupancyInTime,
91+ reco_tree::RecoSetting, reco_tree::RunNumber, reco_tree::PosZ, reco_tree::OccupancyInTime, reco_tree::HadronicRate,
9192 reco_tree::TotalFT0AmplitudeA, reco_tree::TotalFT0AmplitudeC, reco_tree::TotalFV0AmplitudeA, reco_tree::TotalFDDAmplitudeA, reco_tree::TotalFDDAmplitudeC,
9293 reco_tree::TimeFT0A, reco_tree::TimeFT0C, reco_tree::TimeFV0A, reco_tree::TimeFDDA, reco_tree::TimeFDDC,
9394 reco_tree::EnergyCommonZNA, reco_tree::EnergyCommonZNC, reco_tree::TimeZNA, reco_tree::TimeZNC, reco_tree::NeutronClass,
@@ -192,6 +193,7 @@ struct UpcRhoAnalysis {
192193 HistogramRegistry rTracks{" rTracks" , {}, OutputObjHandlingPolicy::AnalysisObject};
193194 HistogramRegistry rSystem{" rSystem" , {}, OutputObjHandlingPolicy::AnalysisObject};
194195 HistogramRegistry rMC{" rMC" , {}, OutputObjHandlingPolicy::AnalysisObject};
196+ HistogramRegistry rResolution{" rResolution" , {}, OutputObjHandlingPolicy::AnalysisObject};
195197
196198 void init (o2::framework::InitContext& context)
197199 {
@@ -346,6 +348,14 @@ struct UpcRhoAnalysis {
346348 rMC.add (" MC/system/hPhiChargeVsM" , " ;#it{m} (GeV/#it{c}^{2});#Delta#it{#phi} (rad);counts" , kTH2D , {mAxis , deltaPhiAxis});
347349 rMC.addClone (" MC/system/" , " MC/system/selected/" );
348350 }
351+
352+ if (context.mOptions .get <bool >(" processResolution" )) {
353+ rResolution.add (" MC/resolution/collisions/hMatch" , " ;matched;counts" , kTH1D , {{2 , -0.5 , 1.5 }});
354+ rResolution.add (" MC/resolution/tracks/hMatch" , " ;matched;counts" , kTH1D , {{2 , -0.5 , 1.5 }});
355+ rResolution.add (" MC/resolution/tracks/hPt" , " ;#it{p}_{T, reco} - #it{p}_{T, true} (GeV/#it{c});counts" , kTH1D , {{200 , -1.0 , 1.0 }});
356+ rResolution.add (" MC/resolution/tracks/hEta" , " ;#it{#eta}_{reco} - #it{#eta}_{true};counts" , kTH1D , {{200 , -0.2 , 0.2 }});
357+ rResolution.add (" MC/resolution/tracks/hPhi" , " ;#it{#phi}_{reco} - #it{#phi}_{true} (rad);counts" , kTH1D , {{200 , -0.2 , 0.2 }});
358+ }
349359 }
350360
351361 static constexpr std::string_view AppliedSelections[3 ] = {" all/" , " trackSelections/" , " systemSelections/" };
@@ -800,7 +810,7 @@ struct UpcRhoAnalysis {
800810 return ;
801811
802812 // fill recoTree
803- recoTree (collision.flags (), collision.runNumber (), collision.posZ (), collision.occupancyInTime (),
813+ recoTree (collision.flags (), collision.runNumber (), collision.posZ (), collision.occupancyInTime (), collision. hadronicRate (),
804814 collision.totalFT0AmplitudeA (), collision.totalFT0AmplitudeC (), collision.totalFV0AmplitudeA (), collision.totalFDDAmplitudeA (), collision.totalFDDAmplitudeC (),
805815 collision.timeFT0A (), collision.timeFT0C (), collision.timeFV0A (), collision.timeFDDA (), collision.timeFDDC (),
806816 energyCommonZNA, energyCommonZNC, timeZNA, timeZNC, neutronClass,
@@ -1055,6 +1065,25 @@ struct UpcRhoAnalysis {
10551065 }
10561066 PROCESS_SWITCH (UpcRhoAnalysis, processMCdataWithBCs, " analyse MC data with BCs (only with on-the-fly skimming)" , false );
10571067
1068+ void processResolution (soa::Join<aod::UDCollisions, aod::UDCollisionsSels, aod::UDMcCollsLabels>::iterator const & collision, soa::Join<aod::UDTracks, aod::UDTracksExtra, aod::UDTracksDCA, aod::UDTracksPID, aod::UDTracksFlags, aod::UDMcTrackLabels> const & tracks, aod::UDMcCollisions const &, aod::UDMcParticles const &)
1069+ {
1070+ rResolution.fill (HIST (" MC/resolution/collisions/hMatch" ), 0 );
1071+ if (!collision.has_udMcCollision ())
1072+ return ;
1073+ rResolution.fill (HIST (" MC/resolution/collisions/hMatch" ), 1 );
1074+ for (const auto & track : tracks) {
1075+ rResolution.fill (HIST (" MC/resolution/tracks/hMatch" ), 0 );
1076+ if (!track.has_udMcParticle ())
1077+ continue ;
1078+ rResolution.fill (HIST (" MC/resolution/tracks/hMatch" ), 1 );
1079+ auto mcParticle = track.udMcParticle ();
1080+ rResolution.fill (HIST (" MC/resolution/tracks/hPt" ), pt (track.px (), track.py ()) - pt (mcParticle.px (), mcParticle.py ()));
1081+ rResolution.fill (HIST (" MC/resolution/tracks/hEta" ), eta (track.px (), track.py (), track.pz ()) - eta (mcParticle.px (), mcParticle.py (), mcParticle.pz ()));
1082+ rResolution.fill (HIST (" MC/resolution/tracks/hPhi" ), phi (track.px (), track.py ()) - phi (mcParticle.px (), mcParticle.py ()));
1083+ }
1084+ }
1085+ PROCESS_SWITCH (UpcRhoAnalysis, processResolution, " check resolution of kinematic variables" , false );
1086+
10581087 void processCollisionRecoCheck (aod::UDMcCollision const & /* mcCollision */ , soa::SmallGroups<soa::Join<aod::UDMcCollsLabels, aod::UDCollisions>> const & collisions)
10591088 {
10601089 checkNumberOfCollisionReconstructions (collisions);
0 commit comments