From fc80f61199d937b721112a0695c578f7aee01f7d Mon Sep 17 00:00:00 2001 From: Josue-MiniPC Date: Thu, 9 May 2024 14:59:09 -0600 Subject: [PATCH 01/22] improving the analysis --- PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 120 +++++++++++++++------ 1 file changed, 86 insertions(+), 34 deletions(-) diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index bbec3c1dcda..9296ae663cd 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -40,14 +40,20 @@ struct upcPhotonuclearAnalysisJMG { Configurable cutMyTimeZNA{"cutMyTimeZNA", 2., {"My collision cut"}}; Configurable cutMyTimeZNC{"cutMyTimeZNC", 2., {"My collision cut"}}; // Declare configurables on side A gap - Configurable cutAGapMyEnergyZNA{"cutAGapMyEnergyZNA", 4., {"My collision cut. A Gap"}}; - Configurable cutAGapMyEnergyZNC{"cutAGapMyEnergyZNC", 4., {"My collision cut. A Gap"}}; + Configurable cutAGapMyEnergyZNAMax{"cutAGapMyEnergyZNAMax", 0., {"My collision cut. A Gap"}}; + Configurable cutAGapMyAmplitudeFT0AMax{"cutAGapMyAmplitudeFT0AMax", 200., {"My collision cut. A Gap"}}; + Configurable cutAGapMyEnergyZNCMin{"cutAGapMyEnergyZNCMin", 1., {"My collision cut. A Gap"}}; + Configurable cutAGapMyAmplitudeFT0CMin{"cutAGapMyAmplitudeFT0CMin", 0., {"My collision cut. A Gap"}}; // Declare configurables on side C gap - Configurable cutCGapMyEnergyZNA{"cutCGapMyEnergyZNA", 4., {"My collision cut. C Gap"}}; - Configurable cutCGapMyEnergyZNC{"cutCGapMyEnergyZNC", 4., {"My collision cut. C Gap"}}; + Configurable cutCGapMyEnergyZNAMin{"cutCGapMyEnergyZNAMin", 1., {"My collision cut. C Gap"}}; + Configurable cutCGapMyAmplitudeFT0AMin{"cutCGapMyAmplitudeFT0AMin", 0., {"My collision cut. A Gap"}}; + Configurable cutCGapMyEnergyZNCMax{"cutCGapMyEnergyZNCMax", 0., {"My collision cut. C Gap"}}; + Configurable cutCGapMyAmplitudeFT0CMax{"cutCGapMyAmplitudeFT0CMax", 200., {"My collision cut. A Gap"}}; // Declare configurables on both side gap - Configurable cutBothGapMyEnergyZNA{"cutBothGapMyEnergyZNA", 4., {"My collision cut. Both Gap"}}; - Configurable cutBothGapMyEnergyZNC{"cutBothGapMyEnergyZNC", 4., {"My collision cut. Both Gap"}}; + Configurable cutBothGapMyEnergyZNAMax{"cutBothGapMyEnergyZNAMax", 0., {"My collision cut. Both Gap"}}; + Configurable cutBothGapMyAmplitudeFT0AMax{"cutBothGapMyAmplitudeFT0AMax", 200., {"My collision cut. A Gap"}}; + Configurable cutBothGapMyEnergyZNCMax{"cutBothGapMyEnergyZNCMax", 0., {"My collision cut. Both Gap"}}; + Configurable cutBothGapMyAmplitudeFT0CMax{"cutBothGapMyAmplitudeFT0CMax", 200., {"My collision cut. A Gap"}}; // Declare configurables on tracks Configurable cutMyptMin{"cutMyptMin", 0.15, {"My Track cut"}}; Configurable cutMyptMax{"cutMyptMax", 10., {"My Track cut"}}; @@ -60,8 +66,8 @@ struct upcPhotonuclearAnalysisJMG { Configurable cutMyITSNClsMin{"cutMyITSNClsMin", 1, {"My Track cut"}}; Configurable cutMyITSChi2NClMax{"cutMyITSChi2NClMax", 36.f, {"My Track cut"}}; Configurable cutMyHasTPC{"cutMyHasTPC", true, {"MyGlobalTrack cut"}}; - Configurable cutMyTPCNClsMin{"cutMyTPCNClsMin", 0, {"My Track cut"}}; Configurable cutMyTPCNClsCrossedRowsMin{"cutMyTPCNClsCrossedRowsMin", 50, {"My Track cut"}}; + Configurable cutMyTPCNClsFindableMin{"cutMyTPCNClsFindableMin", 50, {"My Track cut"}}; Configurable cutMyTPCNClsCrossedRowsOverNClsMin{"cutMyTPCNClsCrossedRowsOverNClsMin", 1.f, {"My Track cut"}}; Configurable cutMyTPCChi2NclMax{"cutMyTPCChi2NclMax", 4.f, {"My Track cut"}}; @@ -73,13 +79,14 @@ struct upcPhotonuclearAnalysisJMG { const AxisSpec axisCollision{4, -0.5, 3.5}; const AxisSpec axisZvtx{40, -20., 20.}; const AxisSpec axisPt{402, -0.05, 20.05}; - const AxisSpec axisTPCSignal{402, -0.05, 200.05}; + const AxisSpec axisP{402, -10.05, 10.05}; + const AxisSpec axisTPCSignal{802, -0.05, 400.05}; const AxisSpec axisPhi{64, -2 * o2::constants::math::PI, 2 * o2::constants::math::PI}; const AxisSpec axisEta{50, -1.2, 1.2}; - const AxisSpec axisRapidity{40, -10, 10}; const AxisSpec axisNch{101, -0.5, 100.5}; const AxisSpec axisZNEnergy{1002, -0.5, 500.5}; const AxisSpec axisZNTime{21, -10.5, 10.5}; + const AxisSpec axisFT0Amplitud{201, -0.5, 200.5}; const AxisSpec axisNCls{201, -0.5, 200.5}; const AxisSpec axisChi2NCls{100, 0, 50}; const AxisSpec axisTPCNClsCrossedRowsMin{100, -0.05, 2.05}; @@ -90,61 +97,77 @@ struct upcPhotonuclearAnalysisJMG { histos.add("Tracks/SGsideA/hTrackPt", "#it{p_{T}} distribution; #it{p_{T}}; counts", kTH1F, {axisPt}); histos.add("Tracks/SGsideA/hTrackPhi", "#it{#phi} distribution; #it{#phi}; counts", kTH1F, {axisPhi}); histos.add("Tracks/SGsideA/hTrackEta", "#it{#eta} distribution; #it{#eta}; counts", kTH1F, {axisEta}); - histos.add("Tracks/SGsideA/hTrackRapidity", "#it{y} distribution; #it{y}; counts", kTH1F, {axisRapidity}); + histos.add("Tracks/SGsideA/hTrackTPCSignnalP", "#it{TPC dE/dx vs p}; #it{p*charge}; #it{TPC dE/dx}", kTH2F, {axisP, axisTPCSignal}); histos.add("Tracks/SGsideA/hTrackITSNCls", "#it{N Clusters ITS} distribution; #it{N Clusters ITS}; counts", kTH1F, {axisNCls}); histos.add("Tracks/SGsideA/hTrackITSChi2NCls", "#it{N Clusters Chi2 ITS} distribution; #it{N Clusters Chi2 ITS}; counts", kTH1F, {axisChi2NCls}); - histos.add("Tracks/SGsideA/hTrackTPCNCls", "#it{N Clusters TPC} distribution; #it{N Clusters TPC}; counts", kTH1F, {axisTPCNClsCrossedRowsMin}); + histos.add("Tracks/SGsideA/hTrackNClsCrossedRowsOverNCls", "#it{NClsCrossedRows/FindableNCls} distribution in TPC; #it{NClsCrossedRows/FindableNCls}; counts", kTH1F, {axisTPCNClsCrossedRowsMin}); histos.add("Tracks/SGsideA/hTrackTPCNClsCrossedRows", "#it{Number of crossed TPC Rows} distribution; #it{Number of crossed TPC Rows}; counts", kTH1F, {axisNCls}); histos.add("Tracks/SGsideA/hTrackTPCNClsFindable", "#it{Findable TPC clusters for this track} distribution; #it{Findable TPC clusters for this track}; counts", kTH1F, {axisNCls}); histos.add("Tracks/SGsideA/hTrackTPCChi2NCls", "#it{N Clusters Chi2 TPC} distribution; #it{N Clusters Chi2 TPC}; counts", kTH1F, {axisChi2NCls}); histos.add("Tracks/SGsideA/hTrackITSNClsTPCCls", "#it{ITS Clusters vs TPC Clusters}; #it{TPC Clusters}; #it{ITS Clusters}", kTH2F, {axisNCls, axisNCls}); - histos.add("Tracks/SGsideA/hTrackTPCSignnalP", "#it{TPC dE/dx vs p}; #it{TPC dE/dx}; #it{p}", kTH2F, {axisPt, axisTPCSignal}); histos.add("Events/SGsideA/hTrackZVtx", "vertex in z; z (cm); counts", kTH1F, {axisZvtx}); - histos.add("Events/SGsideA/hNch", "#it{N_{ch}} distribution; #it{N_{ch}}; counts", kTH1F, {axisNch}); - histos.add("Events/SGsideA/hPtVSNch", "#it{ #LT p_{T} #GT } vs #it{N_{ch}}; #it{N_{ch}}; #it{ #LT p_{T} #GT }", kTH2F, {axisNch, axisPt}); + histos.add("Events/SGsideA/hNch", "#it{Charged Tracks Multiplicity} distribution; #it{Charged Tracks Multiplicity}; counts", kTH1F, {axisNch}); + histos.add("Events/SGsideA/hPtVSNch", "#it{ #LT p_{T} #GT } vs #it{Charged Tracks Multiplicity}; #it{Charged Tracks Multiplicity}; #it{ #LT p_{T} #GT }", kTH2F, {axisNch, axisPt}); histos.add("Events/SGsideA/hEnergyZNA", "Energy in side A distribution; Energy in side A; counts", kTH1F, {axisZNEnergy}); histos.add("Events/SGsideA/hEnergyZNC", "Energy in side C distribution; Energy in side C; counts", kTH1F, {axisZNEnergy}); histos.add("Events/SGsideA/hEnergyRelationSides", "Energy in side A vs energy in side C; Energy in side A; Energy in side C", kTH2F, {axisZNEnergy, axisZNEnergy}); histos.add("Events/SGsideA/hTimeZNA", "Time in side A distribution; Time in side A; counts", kTH1F, {axisZNTime}); histos.add("Events/SGsideA/hTimeZNC", "Time in side C distribution; Time in side C; counts", kTH1F, {axisZNTime}); histos.add("Events/SGsideA/hTimeRelationSides", "Time in side A vs time in side C; Time in side A; Time in side C", kTH2F, {axisZNTime, axisZNTime}); + histos.add("Events/SGsideA/hAmplitudFT0A", "Amplitud in side A distribution; Amplitud in side A; counts", kTH1F, {axisFT0Amplitud}); + histos.add("Events/SGsideA/hAmplitudFT0C", "Amplitud in side C distribution; Amplitud in side C; counts", kTH1F, {axisFT0Amplitud}); + // histos to selection gap in side C histos.add("Tracks/SGsideC/hTrackPt", "#it{p_{T}} distribution; #it{p_{T}}; counts", kTH1F, {axisPt}); histos.add("Tracks/SGsideC/hTrackPhi", "#it{#phi} distribution; #it{#phi}; counts", kTH1F, {axisPhi}); histos.add("Tracks/SGsideC/hTrackEta", "#it{#eta} distribution; #it{#eta}; counts", kTH1F, {axisEta}); - histos.add("Tracks/SGsideC/hTrackRapidity", "#it{y} distribution; #it{y}; counts", kTH1F, {axisRapidity}); + histos.add("Tracks/SGsideC/hTrackTPCSignnalP", "#it{TPC dE/dx vs p}; #it{p*charge}; #it{TPC dE/dx}", kTH2F, {axisP, axisTPCSignal}); + histos.add("Tracks/SGsideC/hTrackITSNCls", "#it{N Clusters ITS} distribution; #it{N Clusters ITS}; counts", kTH1F, {axisNCls}); + histos.add("Tracks/SGsideC/hTrackITSChi2NCls", "#it{N Clusters Chi2 ITS} distribution; #it{N Clusters Chi2 ITS}; counts", kTH1F, {axisChi2NCls}); + histos.add("Tracks/SGsideC/hTrackNClsCrossedRowsOverNCls", "#it{NClsCrossedRows/FindableNCls} distribution in TPC; #it{NClsCrossedRows/FindableNCls}; counts", kTH1F, {axisTPCNClsCrossedRowsMin}); + histos.add("Tracks/SGsideC/hTrackTPCNClsCrossedRows", "#it{Number of crossed TPC Rows} distribution; #it{Number of crossed TPC Rows}; counts", kTH1F, {axisNCls}); + histos.add("Tracks/SGsideC/hTrackTPCNClsFindable", "#it{Findable TPC clusters for this track} distribution; #it{Findable TPC clusters for this track}; counts", kTH1F, {axisNCls}); + histos.add("Tracks/SGsideC/hTrackTPCChi2NCls", "#it{N Clusters Chi2 TPC} distribution; #it{N Clusters Chi2 TPC}; counts", kTH1F, {axisChi2NCls}); histos.add("Tracks/SGsideC/hTrackITSNClsTPCCls", "#it{ITS Clusters vs TPC Clusters}; #it{TPC Clusters}; #it{ITS Clusters}", kTH2F, {axisNCls, axisNCls}); - histos.add("Tracks/SGsideC/hTrackTPCSignnalP", "#it{TPC dE/dx vs p}; #it{TPC dE/dx}; #it{p}", kTH2F, {axisPt, axisTPCSignal}); histos.add("Events/SGsideC/hTrackZVtx", "vertex in z; z (cm); counts", kTH1F, {axisZvtx}); - histos.add("Events/SGsideC/hNch", "#it{N_{ch}} distribution; #it{N_{ch}}; counts", kTH1F, {axisNch}); - histos.add("Events/SGsideC/hPtVSNch", "#it{ #LT p_{T} #GT } vs #it{N_{ch}}; #it{N_{ch}}; #it{ #LT p_{T} #GT }", kTH2F, {axisNch, axisPt}); + histos.add("Events/SGsideC/hNch", "#it{Charged Tracks Multiplicity} distribution; #it{Charged Tracks Multiplicity}; counts", kTH1F, {axisNch}); + histos.add("Events/SGsideC/hPtVSNch", "#it{ #LT p_{T} #GT } vs #it{Charged Tracks Multiplicity}; #it{Charged Tracks Multiplicity}; #it{ #LT p_{T} #GT }", kTH2F, {axisNch, axisPt}); histos.add("Events/SGsideC/hEnergyZNA", "Energy in side A distribution; Energy in side A; counts", kTH1F, {axisZNEnergy}); histos.add("Events/SGsideC/hEnergyZNC", "Energy in side C distribution; Energy in side C; counts", kTH1F, {axisZNEnergy}); histos.add("Events/SGsideC/hEnergyRelationSides", "Energy in side A vs energy in side C; Energy in side A; Energy in side C", kTH2F, {axisZNEnergy, axisZNEnergy}); histos.add("Events/SGsideC/hTimeZNA", "Time in side A distribution; Time in side A; counts", kTH1F, {axisZNTime}); histos.add("Events/SGsideC/hTimeZNC", "Time in side C distribution; Time in side C; counts", kTH1F, {axisZNTime}); histos.add("Events/SGsideC/hTimeRelationSides", "Time in side A vs time in side C; Time in side A; Time in side C", kTH2F, {axisZNTime, axisZNTime}); + histos.add("Events/SGsideC/hAmplitudFT0A", "Amplitud in side A distribution; Amplitud in side A; counts", kTH1F, {axisFT0Amplitud}); + histos.add("Events/SGsideC/hAmplitudFT0C", "Amplitud in side C distribution; Amplitud in side C; counts", kTH1F, {axisFT0Amplitud}); // histos to selection gap in both sides histos.add("Tracks/SGsideBoth/hTrackPt", "#it{p_{T}} distribution; #it{p_{T}}; counts", kTH1F, {axisPt}); histos.add("Tracks/SGsideBoth/hTrackPhi", "#it{#phi} distribution; #it{#phi}; counts", kTH1F, {axisPhi}); histos.add("Tracks/SGsideBoth/hTrackEta", "#it{#eta} distribution; #it{#eta}; counts", kTH1F, {axisEta}); - histos.add("Tracks/SGsideBoth/hTrackRapidity", "#it{y} distribution; #it{y}; counts", kTH1F, {axisRapidity}); + histos.add("Tracks/SGsideBoth/hTrackTPCSignnalP", "#it{TPC dE/dx vs p}; #it{p*charge}; #it{TPC dE/dx}", kTH2F, {axisP, axisTPCSignal}); + histos.add("Tracks/SGsideBoth/hTrackITSNCls", "#it{N Clusters ITS} distribution; #it{N Clusters ITS}; counts", kTH1F, {axisNCls}); + histos.add("Tracks/SGsideBoth/hTrackITSChi2NCls", "#it{N Clusters Chi2 ITS} distribution; #it{N Clusters Chi2 ITS}; counts", kTH1F, {axisChi2NCls}); + histos.add("Tracks/SGsideBoth/hTrackNClsCrossedRowsOverNCls", "#it{NClsCrossedRows/FindableNCls} distribution in TPC; #it{NClsCrossedRows/FindableNCls}; counts", kTH1F, {axisTPCNClsCrossedRowsMin}); + histos.add("Tracks/SGsideBoth/hTrackTPCNClsCrossedRows", "#it{Number of crossed TPC Rows} distribution; #it{Number of crossed TPC Rows}; counts", kTH1F, {axisNCls}); + histos.add("Tracks/SGsideBoth/hTrackTPCNClsFindable", "#it{Findable TPC clusters for this track} distribution; #it{Findable TPC clusters for this track}; counts", kTH1F, {axisNCls}); + histos.add("Tracks/SGsideBoth/hTrackTPCChi2NCls", "#it{N Clusters Chi2 TPC} distribution; #it{N Clusters Chi2 TPC}; counts", kTH1F, {axisChi2NCls}); histos.add("Tracks/SGsideBoth/hTrackITSNClsTPCCls", "#it{ITS Clusters vs TPC Clusters}; #it{TPC Clusters}; #it{ITS Clusters}", kTH2F, {axisNCls, axisNCls}); - histos.add("Tracks/SGsideBoth/hTrackTPCSignnalP", "#it{TPC dE/dx vs p}; #it{TPC dE/dx}; #it{p}", kTH2F, {axisPt, axisTPCSignal}); histos.add("Events/SGsideBoth/hTrackZVtx", "vertex in z; z (cm); counts", kTH1F, {axisZvtx}); - histos.add("Events/SGsideBoth/hNch", "#it{N_{ch}} distribution; #it{N_{ch}}; counts", kTH1F, {axisNch}); - histos.add("Events/SGsideBoth/hPtVSNch", "#it{ #LT p_{T} #GT } vs #it{N_{ch}}; #it{N_{ch}}; #it{ #LT p_{T} #GT }", kTH2F, {axisNch, axisPt}); + histos.add("Events/SGsideBoth/hNch", "#it{Charged Tracks Multiplicity} distribution; #it{Charged Tracks Multiplicity}; counts", kTH1F, {axisNch}); + histos.add("Events/SGsideBoth/hPtVSNch", "#it{ #LT p_{T} #GT } vs #it{Charged Tracks Multiplicity}; #it{Charged Tracks Multiplicity}; #it{ #LT p_{T} #GT }", kTH2F, {axisNch, axisPt}); histos.add("Events/SGsideBoth/hEnergyZNA", "Energy in side A distribution; Energy in side A; counts", kTH1F, {axisZNEnergy}); histos.add("Events/SGsideBoth/hEnergyZNC", "Energy in side C distribution; Energy in side C; counts", kTH1F, {axisZNEnergy}); histos.add("Events/SGsideBoth/hEnergyRelationSides", "Energy in side A vs energy in side C; Energy in side A; Energy in side C", kTH2F, {axisZNEnergy, axisZNEnergy}); histos.add("Events/SGsideBoth/hTimeZNA", "Time in side A distribution; Time in side A; counts", kTH1F, {axisZNTime}); histos.add("Events/SGsideBoth/hTimeZNC", "Time in side C distribution; Time in side C; counts", kTH1F, {axisZNTime}); histos.add("Events/SGsideBoth/hTimeRelationSides", "Time in side A vs time in side C; Time in side A; Time in side C", kTH2F, {axisZNTime, axisZNTime}); + histos.add("Events/SGsideBoth/hAmplitudFT0A", "Amplitud in side A distribution; Amplitud in side A; counts", kTH1F, {axisFT0Amplitud}); + histos.add("Events/SGsideBoth/hAmplitudFT0C", "Amplitud in side C distribution; Amplitud in side C; counts", kTH1F, {axisFT0Amplitud}); } template @@ -164,17 +187,26 @@ struct upcPhotonuclearAnalysisJMG { { switch (SideGap) { case 0: // Gap in A side - if ((collision.energyCommonZNA() < cutAGapMyEnergyZNA && collision.energyCommonZNC() > cutAGapMyEnergyZNC) == false) { // 0n - A side && Xn - C Side + if ((collision.energyCommonZNA() < cutAGapMyEnergyZNAMax && collision.energyCommonZNC() >= cutAGapMyEnergyZNCMin) == false) { // 0n - A side && Xn - C Side + return false; + } + if ((collision.totalFT0AmplitudeA() < cutAGapMyAmplitudeFT0AMax && collision.totalFT0AmplitudeC() >= cutAGapMyAmplitudeFT0CMin) == false ){ return false; } break; case 1: // Gap in C side - if ((collision.energyCommonZNA() > cutCGapMyEnergyZNA && collision.energyCommonZNC() < cutCGapMyEnergyZNC) == false) { // Xn - A side && 0n - C Side + if ((collision.energyCommonZNA() >= cutCGapMyEnergyZNAMin && collision.energyCommonZNC() < cutCGapMyEnergyZNCMax) == false) { // Xn - A side && 0n - C Side + return false; + } + if ((collision.totalFT0AmplitudeA() >= cutCGapMyAmplitudeFT0AMin && collision.totalFT0AmplitudeC() < cutCGapMyAmplitudeFT0CMax) == false){ return false; } break; case 2: // Gap in Both Sides - if ((collision.energyCommonZNA() < cutBothGapMyEnergyZNA && collision.energyCommonZNC() < cutBothGapMyEnergyZNC) == false) { // 0n - A side && 0n - C Side + if ((collision.energyCommonZNA() < cutBothGapMyEnergyZNAMax && collision.energyCommonZNC() < cutBothGapMyEnergyZNCMax) == false) { // 0n - A side && 0n - C Side + return false; + } + if ((collision.totalFT0AmplitudeA() < cutBothGapMyAmplitudeFT0AMax && collision.totalFT0AmplitudeC() < cutBothGapMyAmplitudeFT0CMax) == false){ return false; } break; @@ -222,8 +254,11 @@ struct upcPhotonuclearAnalysisJMG { if (track.tpcNClsCrossedRows() < cutMyTPCNClsCrossedRowsMin) { return false; } - if ((static_cast(track.tpcNClsCrossedRows()) / static_cast(track.tpcNClsFindable())) < cutMyTPCNClsMin) { - return false; // tpcNClsFound() + if (track.tpcNClsFindable() < cutMyTPCNClsFindableMin) { + return false; + } + if ((static_cast(track.tpcNClsCrossedRows()) / static_cast(track.tpcNClsFindable())) < cutMyTPCNClsCrossedRowsOverNClsMin) { + return false; // } if (track.tpcChi2NCl() > cutMyTPCChi2NclMax) { return false; // TPC chi2 @@ -255,6 +290,8 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Events/SGsideA/hTimeZNC"), reconstructedCollision.timeZNC()); histos.fill(HIST("Events/SGsideA/hTimeRelationSides"), reconstructedCollision.timeZNA(), reconstructedCollision.timeZNC()); histos.fill(HIST("Events/SGsideA/hTrackZVtx"), reconstructedCollision.posZ()); + histos.fill(HIST("Events/SGsideA/hAmplitudFT0A"), reconstructedCollision.totalFT0AmplitudeA()); + histos.fill(HIST("Events/SGsideA/hAmplitudFT0C"), reconstructedCollision.totalFT0AmplitudeC()); for (auto& track : reconstructedTracks) { if (track.sign() == 1 || track.sign() == -1) { if (isTrackCut(track) == false) { @@ -265,12 +302,11 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Tracks/SGsideA/hTrackPt"), track.pt()); histos.fill(HIST("Tracks/SGsideA/hTrackPhi"), phi(track.px(), track.py())); histos.fill(HIST("Tracks/SGsideA/hTrackEta"), eta(track.px(), track.py(), track.pz())); - histos.fill(HIST("Tracks/SGsideA/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz()), track.tpcSignal()); - // histos.fill(HIST("Tracks/SGsideA/hTrackRapidity"), track.rapidity()); + histos.fill(HIST("Tracks/SGsideA/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz())*track.sign(), track.tpcSignal()); histos.fill(HIST("Tracks/SGsideA/hTrackITSNCls"), track.itsNCls()); histos.fill(HIST("Tracks/SGsideA/hTrackITSChi2NCls"), track.itsChi2NCl()); - histos.fill(HIST("Tracks/SGsideA/hTrackTPCNCls"), (static_cast(track.tpcNClsCrossedRows()) / static_cast(track.tpcNClsFindable()))); + histos.fill(HIST("Tracks/SGsideA/hTrackNClsCrossedRowsOverNCls"), (static_cast(track.tpcNClsCrossedRows()) / static_cast(track.tpcNClsFindable()))); histos.fill(HIST("Tracks/SGsideA/hTrackTPCNClsCrossedRows"), track.tpcNClsCrossedRows()); histos.fill(HIST("Tracks/SGsideA/hTrackTPCNClsFindable"), track.tpcNClsFindable()); histos.fill(HIST("Tracks/SGsideA/hTrackTPCChi2NCls"), track.tpcChi2NCl()); @@ -293,6 +329,8 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Events/SGsideC/hTimeZNC"), reconstructedCollision.timeZNC()); histos.fill(HIST("Events/SGsideC/hTimeRelationSides"), reconstructedCollision.timeZNA(), reconstructedCollision.timeZNC()); histos.fill(HIST("Events/SGsideC/hTrackZVtx"), reconstructedCollision.posZ()); + histos.fill(HIST("Events/SGsideC/hAmplitudFT0A"), reconstructedCollision.totalFT0AmplitudeA()); + histos.fill(HIST("Events/SGsideC/hAmplitudFT0C"), reconstructedCollision.totalFT0AmplitudeC()); for (auto& track : reconstructedTracks) { if (track.sign() == 1 || track.sign() == -1) { if (isTrackCut(track) == false) { @@ -303,9 +341,15 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Tracks/SGsideC/hTrackPt"), track.pt()); histos.fill(HIST("Tracks/SGsideC/hTrackPhi"), phi(track.px(), track.py())); histos.fill(HIST("Tracks/SGsideC/hTrackEta"), eta(track.px(), track.py(), track.pz())); - // histos.fill(HIST("Tracks/SGsideC/hTrackRapidity"), track.rapidity()); + histos.fill(HIST("Tracks/SGsideC/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz())*track.sign(), track.tpcSignal()); + + histos.fill(HIST("Tracks/SGsideC/hTrackITSNCls"), track.itsNCls()); + histos.fill(HIST("Tracks/SGsideC/hTrackITSChi2NCls"), track.itsChi2NCl()); + histos.fill(HIST("Tracks/SGsideC/hTrackNClsCrossedRowsOverNCls"), (static_cast(track.tpcNClsCrossedRows()) / static_cast(track.tpcNClsFindable()))); + histos.fill(HIST("Tracks/SGsideC/hTrackTPCNClsCrossedRows"), track.tpcNClsCrossedRows()); + histos.fill(HIST("Tracks/SGsideC/hTrackTPCNClsFindable"), track.tpcNClsFindable()); + histos.fill(HIST("Tracks/SGsideC/hTrackTPCChi2NCls"), track.tpcChi2NCl()); histos.fill(HIST("Tracks/SGsideC/hTrackITSNClsTPCCls"), track.tpcNClsFindable(), track.itsNCls()); - histos.fill(HIST("Tracks/SGsideC/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz()), track.tpcSignal()); } } histos.fill(HIST("Events/SGsideC/hNch"), nTracksCharged); @@ -324,6 +368,8 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Events/SGsideBoth/hTimeZNC"), reconstructedCollision.timeZNC()); histos.fill(HIST("Events/SGsideBoth/hTimeRelationSides"), reconstructedCollision.timeZNA(), reconstructedCollision.timeZNC()); histos.fill(HIST("Events/SGsideBoth/hTrackZVtx"), reconstructedCollision.posZ()); + histos.fill(HIST("Events/SGsideBoth/hAmplitudFT0A"), reconstructedCollision.totalFT0AmplitudeA()); + histos.fill(HIST("Events/SGsideBoth/hAmplitudFT0C"), reconstructedCollision.totalFT0AmplitudeC()); for (auto& track : reconstructedTracks) { if (track.sign() == 1 || track.sign() == -1) { if (isTrackCut(track) == false) { @@ -334,9 +380,15 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Tracks/SGsideBoth/hTrackPt"), track.pt()); histos.fill(HIST("Tracks/SGsideBoth/hTrackPhi"), phi(track.px(), track.py())); histos.fill(HIST("Tracks/SGsideBoth/hTrackEta"), eta(track.px(), track.py(), track.pz())); - // histos.fill(HIST("Tracks/SGsideBoth/hTrackRapidity"), track.rapidity()); + histos.fill(HIST("Tracks/SGsideBoth/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz())*track.sign(), track.tpcSignal()); + + histos.fill(HIST("Tracks/SGsideBoth/hTrackITSNCls"), track.itsNCls()); + histos.fill(HIST("Tracks/SGsideBoth/hTrackITSChi2NCls"), track.itsChi2NCl()); + histos.fill(HIST("Tracks/SGsideBoth/hTrackNClsCrossedRowsOverNCls"), (static_cast(track.tpcNClsCrossedRows()) / static_cast(track.tpcNClsFindable()))); + histos.fill(HIST("Tracks/SGsideBoth/hTrackTPCNClsCrossedRows"), track.tpcNClsCrossedRows()); + histos.fill(HIST("Tracks/SGsideBoth/hTrackTPCNClsFindable"), track.tpcNClsFindable()); + histos.fill(HIST("Tracks/SGsideBoth/hTrackTPCChi2NCls"), track.tpcChi2NCl()); histos.fill(HIST("Tracks/SGsideBoth/hTrackITSNClsTPCCls"), track.tpcNClsFindable(), track.itsNCls()); - histos.fill(HIST("Tracks/SGsideBoth/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz()), track.tpcSignal()); } } histos.fill(HIST("Events/SGsideBoth/hNch"), nTracksCharged); From 4cae5d67c5fc3afe24878f4d886e759c72db03ed Mon Sep 17 00:00:00 2001 From: Josue-MiniPC Date: Thu, 9 May 2024 15:04:06 -0600 Subject: [PATCH 02/22] improving the analysis --- PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index 9296ae663cd..068ab5b3e6e 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -118,7 +118,6 @@ struct upcPhotonuclearAnalysisJMG { histos.add("Events/SGsideA/hAmplitudFT0A", "Amplitud in side A distribution; Amplitud in side A; counts", kTH1F, {axisFT0Amplitud}); histos.add("Events/SGsideA/hAmplitudFT0C", "Amplitud in side C distribution; Amplitud in side C; counts", kTH1F, {axisFT0Amplitud}); - // histos to selection gap in side C histos.add("Tracks/SGsideC/hTrackPt", "#it{p_{T}} distribution; #it{p_{T}}; counts", kTH1F, {axisPt}); histos.add("Tracks/SGsideC/hTrackPhi", "#it{#phi} distribution; #it{#phi}; counts", kTH1F, {axisPhi}); @@ -186,27 +185,27 @@ struct upcPhotonuclearAnalysisJMG { bool isCollisionCutSG(CSG const& collision, int SideGap) { switch (SideGap) { - case 0: // Gap in A side + case 0: // Gap in A side if ((collision.energyCommonZNA() < cutAGapMyEnergyZNAMax && collision.energyCommonZNC() >= cutAGapMyEnergyZNCMin) == false) { // 0n - A side && Xn - C Side return false; } - if ((collision.totalFT0AmplitudeA() < cutAGapMyAmplitudeFT0AMax && collision.totalFT0AmplitudeC() >= cutAGapMyAmplitudeFT0CMin) == false ){ + if ((collision.totalFT0AmplitudeA() < cutAGapMyAmplitudeFT0AMax && collision.totalFT0AmplitudeC() >= cutAGapMyAmplitudeFT0CMin) == false) { return false; } break; - case 1: // Gap in C side + case 1: // Gap in C side if ((collision.energyCommonZNA() >= cutCGapMyEnergyZNAMin && collision.energyCommonZNC() < cutCGapMyEnergyZNCMax) == false) { // Xn - A side && 0n - C Side return false; } - if ((collision.totalFT0AmplitudeA() >= cutCGapMyAmplitudeFT0AMin && collision.totalFT0AmplitudeC() < cutCGapMyAmplitudeFT0CMax) == false){ + if ((collision.totalFT0AmplitudeA() >= cutCGapMyAmplitudeFT0AMin && collision.totalFT0AmplitudeC() < cutCGapMyAmplitudeFT0CMax) == false) { return false; } break; - case 2: // Gap in Both Sides + case 2: // Gap in Both Sides if ((collision.energyCommonZNA() < cutBothGapMyEnergyZNAMax && collision.energyCommonZNC() < cutBothGapMyEnergyZNCMax) == false) { // 0n - A side && 0n - C Side return false; } - if ((collision.totalFT0AmplitudeA() < cutBothGapMyAmplitudeFT0AMax && collision.totalFT0AmplitudeC() < cutBothGapMyAmplitudeFT0CMax) == false){ + if ((collision.totalFT0AmplitudeA() < cutBothGapMyAmplitudeFT0AMax && collision.totalFT0AmplitudeC() < cutBothGapMyAmplitudeFT0CMax) == false) { return false; } break; @@ -302,7 +301,7 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Tracks/SGsideA/hTrackPt"), track.pt()); histos.fill(HIST("Tracks/SGsideA/hTrackPhi"), phi(track.px(), track.py())); histos.fill(HIST("Tracks/SGsideA/hTrackEta"), eta(track.px(), track.py(), track.pz())); - histos.fill(HIST("Tracks/SGsideA/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz())*track.sign(), track.tpcSignal()); + histos.fill(HIST("Tracks/SGsideA/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz()) * track.sign(), track.tpcSignal()); histos.fill(HIST("Tracks/SGsideA/hTrackITSNCls"), track.itsNCls()); histos.fill(HIST("Tracks/SGsideA/hTrackITSChi2NCls"), track.itsChi2NCl()); @@ -341,7 +340,7 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Tracks/SGsideC/hTrackPt"), track.pt()); histos.fill(HIST("Tracks/SGsideC/hTrackPhi"), phi(track.px(), track.py())); histos.fill(HIST("Tracks/SGsideC/hTrackEta"), eta(track.px(), track.py(), track.pz())); - histos.fill(HIST("Tracks/SGsideC/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz())*track.sign(), track.tpcSignal()); + histos.fill(HIST("Tracks/SGsideC/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz()) * track.sign(), track.tpcSignal()); histos.fill(HIST("Tracks/SGsideC/hTrackITSNCls"), track.itsNCls()); histos.fill(HIST("Tracks/SGsideC/hTrackITSChi2NCls"), track.itsChi2NCl()); @@ -380,7 +379,7 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Tracks/SGsideBoth/hTrackPt"), track.pt()); histos.fill(HIST("Tracks/SGsideBoth/hTrackPhi"), phi(track.px(), track.py())); histos.fill(HIST("Tracks/SGsideBoth/hTrackEta"), eta(track.px(), track.py(), track.pz())); - histos.fill(HIST("Tracks/SGsideBoth/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz())*track.sign(), track.tpcSignal()); + histos.fill(HIST("Tracks/SGsideBoth/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz()) * track.sign(), track.tpcSignal()); histos.fill(HIST("Tracks/SGsideBoth/hTrackITSNCls"), track.itsNCls()); histos.fill(HIST("Tracks/SGsideBoth/hTrackITSChi2NCls"), track.itsChi2NCl()); From 7f09d3d7d93e4b6a21be47add395abd48d26938b Mon Sep 17 00:00:00 2001 From: Josue-MiniPC Date: Sun, 9 Jun 2024 03:35:58 -0600 Subject: [PATCH 03/22] new changes --- PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 48 ++++++++++++++++------ 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index 068ab5b3e6e..81834492eca 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -66,9 +66,11 @@ struct upcPhotonuclearAnalysisJMG { Configurable cutMyITSNClsMin{"cutMyITSNClsMin", 1, {"My Track cut"}}; Configurable cutMyITSChi2NClMax{"cutMyITSChi2NClMax", 36.f, {"My Track cut"}}; Configurable cutMyHasTPC{"cutMyHasTPC", true, {"MyGlobalTrack cut"}}; - Configurable cutMyTPCNClsCrossedRowsMin{"cutMyTPCNClsCrossedRowsMin", 50, {"My Track cut"}}; + Configurable cutMyTPCNClsCrossedRowsMin{"cutMyTPCNClsCrossedRowsMin", 70, {"My Track cut"}}; Configurable cutMyTPCNClsFindableMin{"cutMyTPCNClsFindableMin", 50, {"My Track cut"}}; - Configurable cutMyTPCNClsCrossedRowsOverNClsMin{"cutMyTPCNClsCrossedRowsOverNClsMin", 1.f, {"My Track cut"}}; + Configurable cutMyTPCNClsMin{"cutMyTPCNClsMin", 1, {"My Track cut"}}; + Configurable cutMyTPCNClsCrossedRowsOverNClsFindableMin{"cutMyTPCNClsCrossedRowsOverNClsFindableMin", 0.8f, {"My Track cut"}}; + Configurable cutMyTPCNClsOverFindableNClsMin{"cutMyTPCNClsOverFindableNClsMin", 0.5f, {"My Track cut"}}; Configurable cutMyTPCChi2NclMax{"cutMyTPCChi2NclMax", 4.f, {"My Track cut"}}; using FullSGUDCollision = soa::Join::iterator; @@ -100,9 +102,13 @@ struct upcPhotonuclearAnalysisJMG { histos.add("Tracks/SGsideA/hTrackTPCSignnalP", "#it{TPC dE/dx vs p}; #it{p*charge}; #it{TPC dE/dx}", kTH2F, {axisP, axisTPCSignal}); histos.add("Tracks/SGsideA/hTrackITSNCls", "#it{N Clusters ITS} distribution; #it{N Clusters ITS}; counts", kTH1F, {axisNCls}); histos.add("Tracks/SGsideA/hTrackITSChi2NCls", "#it{N Clusters Chi2 ITS} distribution; #it{N Clusters Chi2 ITS}; counts", kTH1F, {axisChi2NCls}); - histos.add("Tracks/SGsideA/hTrackNClsCrossedRowsOverNCls", "#it{NClsCrossedRows/FindableNCls} distribution in TPC; #it{NClsCrossedRows/FindableNCls}; counts", kTH1F, {axisTPCNClsCrossedRowsMin}); + histos.add("Tracks/SGsideA/hTrackNClsCrossedRowsOverNClsFindable", "#it{NClsCrossedRows/FindableNCls} distribution in TPC; #it{NClsCrossedRows/FindableNCls}; counts", kTH1F, {axisTPCNClsCrossedRowsMin}); + histos.add("Tracks/SGsideA/hTrackNClsCrossedRowsOverNCls", "#it{NClsCrossedRows/NCls} distribution in TPC; #it{NClsCrossedRows/NCls}; counts", kTH1F, {axisTPCNClsCrossedRowsMin}); histos.add("Tracks/SGsideA/hTrackTPCNClsCrossedRows", "#it{Number of crossed TPC Rows} distribution; #it{Number of crossed TPC Rows}; counts", kTH1F, {axisNCls}); - histos.add("Tracks/SGsideA/hTrackTPCNClsFindable", "#it{Findable TPC clusters for this track} distribution; #it{Findable TPC clusters for this track}; counts", kTH1F, {axisNCls}); + histos.add("Tracks/SGsideA/hTrackTPCNClsFindable", "#it{Findable TPC clusters per track} distribution; #it{Findable TPC clusters per track}; counts", kTH1F, {axisNCls}); + histos.add("Tracks/SGsideA/hTrackTPCNClsFound", "#it{Found TPC clusters per track} distribution; #it{Found TPC clusters per track}; counts", kTH1F, {axisNCls}); + histos.add("Tracks/SGsideA/hTrackTPCNClsFindableMinusFound", "#it{TPCNCls: Findable - Found per track} distribution; #it{TPCNCls: Findable - Found per track}; counts", kTH1F, {axisNCls}); + histos.add("Tracks/SGsideA/hTrackTPCNClsFindableMinusCrossedRows", "#it{TPCNCls: Findable - CrossedRows per track} distribution; #it{TPCNCls: Findable - CrossedRows per track}; counts", kTH1F, {axisNCls}); histos.add("Tracks/SGsideA/hTrackTPCChi2NCls", "#it{N Clusters Chi2 TPC} distribution; #it{N Clusters Chi2 TPC}; counts", kTH1F, {axisChi2NCls}); histos.add("Tracks/SGsideA/hTrackITSNClsTPCCls", "#it{ITS Clusters vs TPC Clusters}; #it{TPC Clusters}; #it{ITS Clusters}", kTH2F, {axisNCls, axisNCls}); @@ -125,9 +131,13 @@ struct upcPhotonuclearAnalysisJMG { histos.add("Tracks/SGsideC/hTrackTPCSignnalP", "#it{TPC dE/dx vs p}; #it{p*charge}; #it{TPC dE/dx}", kTH2F, {axisP, axisTPCSignal}); histos.add("Tracks/SGsideC/hTrackITSNCls", "#it{N Clusters ITS} distribution; #it{N Clusters ITS}; counts", kTH1F, {axisNCls}); histos.add("Tracks/SGsideC/hTrackITSChi2NCls", "#it{N Clusters Chi2 ITS} distribution; #it{N Clusters Chi2 ITS}; counts", kTH1F, {axisChi2NCls}); - histos.add("Tracks/SGsideC/hTrackNClsCrossedRowsOverNCls", "#it{NClsCrossedRows/FindableNCls} distribution in TPC; #it{NClsCrossedRows/FindableNCls}; counts", kTH1F, {axisTPCNClsCrossedRowsMin}); + histos.add("Tracks/SGsideC/hTrackNClsCrossedRowsOverNClsFindable", "#it{NClsCrossedRows/FindableNCls} distribution in TPC; #it{NClsCrossedRows/FindableNCls}; counts", kTH1F, {axisTPCNClsCrossedRowsMin}); + histos.add("Tracks/SGsideC/hTrackNClsCrossedRowsOverNCls", "#it{NClsCrossedRows/NCls} distribution in TPC; #it{NClsCrossedRows/NCls}; counts", kTH1F, {axisTPCNClsCrossedRowsMin}); histos.add("Tracks/SGsideC/hTrackTPCNClsCrossedRows", "#it{Number of crossed TPC Rows} distribution; #it{Number of crossed TPC Rows}; counts", kTH1F, {axisNCls}); - histos.add("Tracks/SGsideC/hTrackTPCNClsFindable", "#it{Findable TPC clusters for this track} distribution; #it{Findable TPC clusters for this track}; counts", kTH1F, {axisNCls}); + histos.add("Tracks/SGsideC/hTrackTPCNClsFindable", "#it{Findable TPC clusters per track} distribution; #it{Findable TPC clusters per track}; counts", kTH1F, {axisNCls}); + histos.add("Tracks/SGsideC/hTrackTPCNClsFound", "#it{Found TPC clusters per track} distribution; #it{Found TPC clusters per track}; counts", kTH1F, {axisNCls}); + histos.add("Tracks/SGsideC/hTrackTPCNClsFindableMinusFound", "#it{TPCNCls: Findable - Found per track} distribution; #it{TPCNCls: Findable - Found per track}; counts", kTH1F, {axisNCls}); + histos.add("Tracks/SGsideC/hTrackTPCNClsFindableMinusCrossedRows", "#it{TPCNCls: Findable - CrossedRows per track} distribution; #it{TPCNCls: Findable - CrossedRows per track}; counts", kTH1F, {axisNCls}); histos.add("Tracks/SGsideC/hTrackTPCChi2NCls", "#it{N Clusters Chi2 TPC} distribution; #it{N Clusters Chi2 TPC}; counts", kTH1F, {axisChi2NCls}); histos.add("Tracks/SGsideC/hTrackITSNClsTPCCls", "#it{ITS Clusters vs TPC Clusters}; #it{TPC Clusters}; #it{ITS Clusters}", kTH2F, {axisNCls, axisNCls}); @@ -253,10 +263,16 @@ struct upcPhotonuclearAnalysisJMG { if (track.tpcNClsCrossedRows() < cutMyTPCNClsCrossedRowsMin) { return false; } + if ((track.tpcNClsFindable() - track.tpcNClsFindableMinusFound()) < cutMyTPCNClsMin) { + return false; // tpcNClsFound() + } if (track.tpcNClsFindable() < cutMyTPCNClsFindableMin) { return false; } - if ((static_cast(track.tpcNClsCrossedRows()) / static_cast(track.tpcNClsFindable())) < cutMyTPCNClsCrossedRowsOverNClsMin) { + if ((static_cast(track.tpcNClsCrossedRows()) / static_cast(track.tpcNClsFindable())) < cutMyTPCNClsCrossedRowsOverNClsFindableMin) { + return false; // + } + if ((static_cast(track.tpcNClsFindable() - track.tpcNClsFindableMinusFound()) / static_cast(track.tpcNClsFindable())) < cutMyTPCNClsCrossedRowsOverNClsFindableMin) { return false; // } if (track.tpcChi2NCl() > cutMyTPCChi2NclMax) { @@ -305,11 +321,15 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Tracks/SGsideA/hTrackITSNCls"), track.itsNCls()); histos.fill(HIST("Tracks/SGsideA/hTrackITSChi2NCls"), track.itsChi2NCl()); - histos.fill(HIST("Tracks/SGsideA/hTrackNClsCrossedRowsOverNCls"), (static_cast(track.tpcNClsCrossedRows()) / static_cast(track.tpcNClsFindable()))); + histos.fill(HIST("Tracks/SGsideA/hTrackNClsCrossedRowsOverNClsFindable"), (static_cast(track.tpcNClsCrossedRows()) / static_cast(track.tpcNClsFindable()))); + histos.fill(HIST("Tracks/SGsideA/hTrackNClsCrossedRowsOverNCls"), (static_cast(track.tpcNClsFindable() - track.tpcNClsFindableMinusFound()) / static_cast(track.tpcNClsFindable()))); histos.fill(HIST("Tracks/SGsideA/hTrackTPCNClsCrossedRows"), track.tpcNClsCrossedRows()); histos.fill(HIST("Tracks/SGsideA/hTrackTPCNClsFindable"), track.tpcNClsFindable()); + histos.fill(HIST("Tracks/SGsideA/hTrackTPCNClsFound"), track.tpcNClsFindable() - track.tpcNClsFindableMinusFound()); + histos.fill(HIST("Tracks/SGsideA/hTrackTPCNClsFindableMinusFound"), track.tpcNClsFindableMinusFound()); + histos.fill(HIST("Tracks/SGsideA/hTrackTPCNClsFindableMinusCrossedRows"), track.tpcNClsFindableMinusCrossedRows()); histos.fill(HIST("Tracks/SGsideA/hTrackTPCChi2NCls"), track.tpcChi2NCl()); - histos.fill(HIST("Tracks/SGsideA/hTrackITSNClsTPCCls"), track.tpcNClsFindable(), track.itsNCls()); + histos.fill(HIST("Tracks/SGsideA/hTrackITSNClsTPCCls"), track.tpcNClsFindable() - track.tpcNClsFindableMinusFound(), track.itsNCls()); } } histos.fill(HIST("Events/SGsideA/hNch"), nTracksCharged); @@ -344,11 +364,15 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Tracks/SGsideC/hTrackITSNCls"), track.itsNCls()); histos.fill(HIST("Tracks/SGsideC/hTrackITSChi2NCls"), track.itsChi2NCl()); - histos.fill(HIST("Tracks/SGsideC/hTrackNClsCrossedRowsOverNCls"), (static_cast(track.tpcNClsCrossedRows()) / static_cast(track.tpcNClsFindable()))); + histos.fill(HIST("Tracks/SGsideC/hTrackNClsCrossedRowsOverNClsFindable"), (static_cast(track.tpcNClsCrossedRows()) / static_cast(track.tpcNClsFindable()))); + histos.fill(HIST("Tracks/SGsideC/hTrackNClsCrossedRowsOverNCls"), (static_cast(track.tpcNClsFindable() - track.tpcNClsFindableMinusFound()) / static_cast(track.tpcNClsFindable()))); histos.fill(HIST("Tracks/SGsideC/hTrackTPCNClsCrossedRows"), track.tpcNClsCrossedRows()); histos.fill(HIST("Tracks/SGsideC/hTrackTPCNClsFindable"), track.tpcNClsFindable()); + histos.fill(HIST("Tracks/SGsideC/hTrackTPCNClsFound"), track.tpcNClsFindable() - track.tpcNClsFindableMinusFound()); + histos.fill(HIST("Tracks/SGsideC/hTrackTPCNClsFindableMinusFound"), track.tpcNClsFindableMinusFound()); + histos.fill(HIST("Tracks/SGsideC/hTrackTPCNClsFindableMinusCrossedRows"), track.tpcNClsFindableMinusCrossedRows()); histos.fill(HIST("Tracks/SGsideC/hTrackTPCChi2NCls"), track.tpcChi2NCl()); - histos.fill(HIST("Tracks/SGsideC/hTrackITSNClsTPCCls"), track.tpcNClsFindable(), track.itsNCls()); + histos.fill(HIST("Tracks/SGsideC/hTrackITSNClsTPCCls"), track.tpcNClsFindable() - track.tpcNClsFindableMinusFound(), track.itsNCls()); } } histos.fill(HIST("Events/SGsideC/hNch"), nTracksCharged); @@ -387,7 +411,7 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Tracks/SGsideBoth/hTrackTPCNClsCrossedRows"), track.tpcNClsCrossedRows()); histos.fill(HIST("Tracks/SGsideBoth/hTrackTPCNClsFindable"), track.tpcNClsFindable()); histos.fill(HIST("Tracks/SGsideBoth/hTrackTPCChi2NCls"), track.tpcChi2NCl()); - histos.fill(HIST("Tracks/SGsideBoth/hTrackITSNClsTPCCls"), track.tpcNClsFindable(), track.itsNCls()); + histos.fill(HIST("Tracks/SGsideBoth/hTrackITSNClsTPCCls"), track.tpcNClsFindable() - track.tpcNClsFindableMinusFound(), track.itsNCls()); } } histos.fill(HIST("Events/SGsideBoth/hNch"), nTracksCharged); From 7234a79841aeb84443fcb61390ba7ae0e60ca7bc Mon Sep 17 00:00:00 2001 From: Josue-MiniPC Date: Sun, 1 Sep 2024 17:09:50 -0600 Subject: [PATCH 04/22] adding angular correlation analysis --- PWGUD/Tasks/CMakeLists.txt | 2 +- PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 31 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/PWGUD/Tasks/CMakeLists.txt b/PWGUD/Tasks/CMakeLists.txt index a93b9c01311..b21e4374754 100644 --- a/PWGUD/Tasks/CMakeLists.txt +++ b/PWGUD/Tasks/CMakeLists.txt @@ -135,7 +135,7 @@ o2physics_add_dpl_workflow(exclusive-phi o2physics_add_dpl_workflow(upc-photonuclear-jmg SOURCES upcPhotonuclearAnalysisJMG.cxx - PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2::ReconstructionDataFormats O2::DetectorsBase O2::DetectorsCommonDataFormats + PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2Physics::PWGCFCore O2::ReconstructionDataFormats O2::DetectorsBase O2::DetectorsCommonDataFormats COMPONENT_NAME Analysis) o2physics_add_dpl_workflow(exclusive-two-protons diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index 81834492eca..09969445178 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -15,6 +15,8 @@ #include "Framework/AnalysisDataModel.h" #include "Framework/AnalysisTask.h" #include "Framework/runDataProcessing.h" +#include "CCDB/BasicCCDBManager.h" +#include "Framework/StepTHn.h" #include "Common/CCDB/EventSelectionParams.h" #include "Common/Core/TrackSelection.h" @@ -22,6 +24,9 @@ #include "Common/Core/trackUtilities.h" #include "Common/DataModel/EventSelection.h" #include "Common/DataModel/TrackSelectionTables.h" +#include "PWGCF/Core/CorrelationContainer.h" +#include "PWGCF/Core/PairCuts.h" +#include "DataFormatsParameters/GRPObject.h" #include "PWGUD/DataModel/UDTables.h" #include "PWGUD/Core/UPCTauCentralBarrelHelperRL.h" @@ -76,6 +81,12 @@ struct upcPhotonuclearAnalysisJMG { using FullSGUDCollision = soa::Join::iterator; using FullUDTracks = soa::Join; + // Output definitions + OutputObj same{"sameEvent"}; + OutputObj mixed{"mixedEvent"}; + + Service ccdb; + void init(InitContext const&) { const AxisSpec axisCollision{4, -0.5, 3.5}; @@ -177,6 +188,24 @@ struct upcPhotonuclearAnalysisJMG { histos.add("Events/SGsideBoth/hTimeRelationSides", "Time in side A vs time in side C; Time in side A; Time in side C", kTH2F, {axisZNTime, axisZNTime}); histos.add("Events/SGsideBoth/hAmplitudFT0A", "Amplitud in side A distribution; Amplitud in side A; counts", kTH1F, {axisFT0Amplitud}); histos.add("Events/SGsideBoth/hAmplitudFT0C", "Amplitud in side C distribution; Amplitud in side C; counts", kTH1F, {axisFT0Amplitud}); + + ccdb->setURL("http://alice-ccdb.cern.ch"); + ccdb->setCaching(true); + ccdb->setLocalObjectValidityChecking(); + } + + int getMagneticField() + { + static o2::parameters::GRPObject* grpo = nullptr; + if (grpo == nullptr) { + grpo = ccdb->get("GLO/GRP/GRP"); + if (grpo == nullptr) { + LOGF(fatal, "GRP object not found for timestamp %llu"); + return 0; + } + LOGF(info, "Retrieved GRP for timestamp %llu with magnetic field of %d kG", grpo->getNominalL3Field()); + } + return grpo->getNominalL3Field(); } template @@ -288,6 +317,7 @@ struct upcPhotonuclearAnalysisJMG { int nTracksCharged = 0; float sumPt = 0; + if (isGlobalCollisionCut(reconstructedCollision) == false) { return; } @@ -297,6 +327,7 @@ struct upcPhotonuclearAnalysisJMG { if (isCollisionCutSG(reconstructedCollision, 0) == false) { return; } + std::cout << "Magnetic Field: " << getMagneticField() << std::endl; histos.fill(HIST("Events/hCountCollisions"), 1); histos.fill(HIST("Events/SGsideA/hEnergyZNA"), reconstructedCollision.energyCommonZNA()); histos.fill(HIST("Events/SGsideA/hEnergyZNC"), reconstructedCollision.energyCommonZNC()); From 2768e383beaa740c7f96344906d19deaa08f9a8a Mon Sep 17 00:00:00 2001 From: Josue laptop Date: Tue, 8 Oct 2024 11:08:09 +0200 Subject: [PATCH 05/22] saving the last changes --- PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 68 +++++++++++++++++----- 1 file changed, 52 insertions(+), 16 deletions(-) diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index 09969445178..6f80802b4e0 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -77,6 +77,8 @@ struct upcPhotonuclearAnalysisJMG { Configurable cutMyTPCNClsCrossedRowsOverNClsFindableMin{"cutMyTPCNClsCrossedRowsOverNClsFindableMin", 0.8f, {"My Track cut"}}; Configurable cutMyTPCNClsOverFindableNClsMin{"cutMyTPCNClsOverFindableNClsMin", 0.5f, {"My Track cut"}}; Configurable cutMyTPCChi2NclMax{"cutMyTPCChi2NclMax", 4.f, {"My Track cut"}}; + // Declare configurables for correlations + Configurable cfgTwoTrackCut{"cfgTwoTrackCut", -1, {"Two track cut"}}; using FullSGUDCollision = soa::Join::iterator; using FullUDTracks = soa::Join; @@ -87,6 +89,15 @@ struct upcPhotonuclearAnalysisJMG { Service ccdb; + PairCuts mPairCuts; + + struct Config { + bool mPairCuts = false; + THn* mEfficiencyTrigger = nullptr; + THn* mEfficiencyAssociated = nullptr; + bool efficiencyLoaded = false; + } cfg; + void init(InitContext const&) { const AxisSpec axisCollision{4, -0.5, 3.5}; @@ -194,20 +205,6 @@ struct upcPhotonuclearAnalysisJMG { ccdb->setLocalObjectValidityChecking(); } - int getMagneticField() - { - static o2::parameters::GRPObject* grpo = nullptr; - if (grpo == nullptr) { - grpo = ccdb->get("GLO/GRP/GRP"); - if (grpo == nullptr) { - LOGF(fatal, "GRP object not found for timestamp %llu"); - return 0; - } - LOGF(info, "Retrieved GRP for timestamp %llu with magnetic field of %d kG", grpo->getNominalL3Field()); - } - return grpo->getNominalL3Field(); - } - template bool isGlobalCollisionCut(C const& collision) { @@ -310,13 +307,51 @@ struct upcPhotonuclearAnalysisJMG { return true; } + template + void fillCorrelationUPC(TTarget target, TTracks1& tracks1, TTracks2& tracks2, float multiplicity, float posZ, int magField, float eventWeight) + { + for (auto& track1: tracks1) { + for (auto& track2: tracks2) { + if constexpr (std::is_same::value) { + if (track1.globalIndex() == track2.globalIndex()) { + continue; + } + } + + if constexpr (std::is_same::value) { + if constexpr (step >= CorrelationContainer::kCFStepReconstructed) { + if (cfg.mPairCuts && mPairCuts.conversionCuts(track1, track2)) { + continue; + } + + if (cfgTwoTrackCut > 0 && mPairCuts.twoTrackCut(track1, track2, magField)) { + continue; + } + } + } + + float associatedWeight = eventWeight; + float deltaPhi = phi(track1.px(), track1.py()) - phi(track2.px(), track2.py()); + if (deltaPhi > 1.5f * PI) { + deltaPhi -= TwoPI; + } + if (deltaPhi < -PIHalf) { + deltaPhi += TwoPI; + } + + //target->getPairHist()->Fill(step, eta(track1.px(), track1.py(), track1.pz()) - eta(track2.px(), track2.py(), track2.pz()), track2.pt(), track1.pt(), multiplicity, deltaPhi, posZ, associatedWeight); + + } + } + } + void processSG(FullSGUDCollision const& reconstructedCollision, FullUDTracks const& reconstructedTracks) { histos.fill(HIST("Events/hCountCollisions"), 0); int SGside = reconstructedCollision.gapSide(); int nTracksCharged = 0; float sumPt = 0; - + int multiplicity = 0; if (isGlobalCollisionCut(reconstructedCollision) == false) { return; @@ -327,7 +362,6 @@ struct upcPhotonuclearAnalysisJMG { if (isCollisionCutSG(reconstructedCollision, 0) == false) { return; } - std::cout << "Magnetic Field: " << getMagneticField() << std::endl; histos.fill(HIST("Events/hCountCollisions"), 1); histos.fill(HIST("Events/SGsideA/hEnergyZNA"), reconstructedCollision.energyCommonZNA()); histos.fill(HIST("Events/SGsideA/hEnergyZNC"), reconstructedCollision.energyCommonZNC()); @@ -363,6 +397,8 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Tracks/SGsideA/hTrackITSNClsTPCCls"), track.tpcNClsFindable() - track.tpcNClsFindableMinusFound(), track.itsNCls()); } } + multiplicity = nTracksCharged; + //fillCorrelationUPC(same, reconstructedTracks, reconstructedTracks, multiplicity, reconstructedCollision.posZ(), 5, 1.0f); histos.fill(HIST("Events/SGsideA/hNch"), nTracksCharged); histos.fill(HIST("Events/SGsideA/hPtVSNch"), nTracksCharged, (sumPt / nTracksCharged)); nTracksCharged = sumPt = 0; From 03cd5bebd43f1a6b0a532ab5115d6f28ef1d3212 Mon Sep 17 00:00:00 2001 From: Josue-MiniPC Date: Tue, 12 Nov 2024 13:43:51 -0600 Subject: [PATCH 06/22] adding helper to pair cuts for UD tables --- PWGUD/Core/UPCPairCuts.h | 344 +++++++++++++++++++++ PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 182 +++++++++-- 2 files changed, 495 insertions(+), 31 deletions(-) create mode 100644 PWGUD/Core/UPCPairCuts.h diff --git a/PWGUD/Core/UPCPairCuts.h b/PWGUD/Core/UPCPairCuts.h new file mode 100644 index 00000000000..d4b103f8f15 --- /dev/null +++ b/PWGUD/Core/UPCPairCuts.h @@ -0,0 +1,344 @@ +// Copyright 2019-2020 CERN and copyright holders of ALICE O2. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. +// All rights not expressly granted are reserved. +// +// This software is distributed under the terms of the GNU General Public +// License v3 (GPL Version 3), copied verbatim in the file "COPYING". +// +// In applying this license CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +#ifndef O2_ANALYSIS_PAIRCUTS_H +#define O2_ANALYSIS_PAIRCUTS_H + +#include + +#include "Framework/Logger.h" +#include "Framework/HistogramRegistry.h" +#include "CommonConstants/MathConstants.h" + +#include "PWGUD/Core/UPCTauCentralBarrelHelperRL.h" + +// Functions which cut on particle pairs (decays, conversions, two-track cuts) adapted for data from UD tables +// Based on the code "PWGCF/Core/PairCuts.h" made by Jan Fiete Grosse-Oetringhaus +// Author: + +using namespace o2; +using namespace o2::framework; +using namespace constants::math; + +class UPCPairCuts +{ +public: + enum Particle { Photon = 0, + K0, + Lambda, + Phi, + Rho, + ParticlesLastEntry }; + + void SetHistogramRegistry(HistogramRegistry* registry) { histogramRegistry = registry; } + + void SetPairCut(Particle particle, float cut) + { + LOGF(info, "Enabled pair cut for %d with value %f", static_cast(particle), cut); + mCuts[particle] = cut; + if (histogramRegistry != nullptr && histogramRegistry->contains(HIST("ControlConvResonances")) == false) { + histogramRegistry->add("ControlConvResonances", "", {HistType::kTH2F, {{6, -0.5, 5.5, "id"}, {500, -0.5, 0.5, "delta mass"}}}); + } + } + + void SetTwoTrackCuts(float distance = 0.02f, float radius = 0.8f) + { + LOGF(info, "Enabled two-track cut with distance %f and radius %f", distance, radius); + mTwoTrackDistance = distance; + mTwoTrackRadius = radius; + + if (histogramRegistry != nullptr && histogramRegistry->contains(HIST("TwoTrackDistancePt_0")) == false) { + histogramRegistry->add("TwoTrackDistancePt_0", "", {HistType::kTH3F, {{100, -0.15, 0.15, "#Delta#eta"}, {100, -0.05, 0.05, "#Delta#varphi^{*}_{min}"}, {20, 0, 10, "#Delta p_{T}"}}}); + histogramRegistry->addClone("TwoTrackDistancePt_0", "TwoTrackDistancePt_1"); + } + } + + template + bool conversionCuts(T const& track1, T const& track2); + + template + bool twoTrackCut(T const& track1, T const& track2, int magField); +protected: + float mCuts[ParticlesLastEntry] = {-1}; + float mTwoTrackDistance = -1; // distance below which the pair is flagged as to be removed + float mTwoTrackRadius = 0.8f; // radius at which the two track cuts are applied + int magField = 5 // magField: B field in kG + + HistogramRegistry* histogramRegistry = nullptr; // if set, control histograms are stored here + + template + bool conversionCut(T const& track1, T const& track2, Particle conv, double cut); + + template + double getInvMassSquared(T const& track1, double m0_1, T const& track2, double m0_2); + + template + double getInvMassSquaredFast(T const& track1, double m0_1, T const& track2, double m0_2); + + template + float getDPhiStar(T const& track1, T const& track2, float radius, int magField); +}; + +template +bool PairCuts::conversionCuts(T const& track1, T const& track2) +{ + // skip if like sign + if (track1.sign() * track2.sign() > 0) { + return false; + } + + for (int i = 0; i < static_cast(ParticlesLastEntry); i++) { + Particle particle = static_cast(i); + if (mCuts[i] > 0) { + if (conversionCut(track1, track2, particle, mCuts[i])) { + return true; + } + if (particle == Lambda) { + if (conversionCut(track2, track1, particle, mCuts[i])) { + return true; + } + } + } + } + + return false; +} + +template +bool PairCuts::twoTrackCut(T const& track1, T const& track2) +{ + // the variables & cut have been developed in Run 1 by the CF - HBT group + // + // Parameters: + // magField: B field in kG + + auto deta = eta(track1.px(), track1.py(), track1.pz()) - eta(track2.px(), track2.py(), track2.pz()); + + // optimization + if (std::fabs(deta) < mTwoTrackDistance * 2.5 * 3) { + // check first boundaries to see if is worth to loop and find the minimum + float dphistar1 = getDPhiStar(track1, track2, mTwoTrackRadius, magField); + float dphistar2 = getDPhiStar(track1, track2, 2.5, magField); + + const float kLimit = mTwoTrackDistance * 3; + + if (std::fabs(dphistar1) < kLimit || std::fabs(dphistar2) < kLimit || dphistar1 * dphistar2 < 0) { + float dphistarminabs = 1e5; + float dphistarmin = 1e5; + for (Double_t rad = mTwoTrackRadius; rad < 2.51; rad += 0.01) { + float dphistar = getDPhiStar(track1, track2, rad, magField); + + float dphistarabs = std::fabs(dphistar); + + if (dphistarabs < dphistarminabs) { + dphistarmin = dphistar; + dphistarminabs = dphistarabs; + } + } + + if (histogramRegistry != nullptr) { + histogramRegistry->fill(HIST("TwoTrackDistancePt_0"), deta, dphistarmin, std::fabs(track1.pt() - track2.pt())); + } + + if (dphistarminabs < mTwoTrackDistance && std::fabs(deta) < mTwoTrackDistance) { + //LOGF(debug, "Removed track pair %ld %ld with %f %f %f %f %d %f %f %d %d", track1.index(), track2.index(), deta, dphistarminabs, track1.phi2(), track1.pt(), track1.sign(), track2.phi2(), track2.pt(), track2.sign(), magField); + return true; + } + + if (histogramRegistry != nullptr) { + histogramRegistry->fill(HIST("TwoTrackDistancePt_1"), deta, dphistarmin, std::fabs(track1.pt() - track2.pt())); + } + } + } + + return false; +} + +template +bool PairCuts::conversionCut(T const& track1, T const& track2, Particle conv, double cut) +{ + //LOGF(info, "pt is %f %f", track1.pt(), track2.pt()); + + if (cut < 0) { + return false; + } + + double massD1, massD2, massM; + + switch (conv) { + case Photon: + massD1 = 0.51e-3; + massD2 = 0.51e-3; + massM = 0; + break; + case K0: + massD1 = 0.1396; + massD2 = 0.1396; + massM = 0.4976; + break; + case Lambda: + massD1 = 0.9383; + massD2 = 0.1396; + massM = 1.115; + break; + case Phi: + massD1 = 0.4937; + massD2 = 0.4937; + massM = 1.019; + break; + case Rho: + massD1 = 0.1396; + massD2 = 0.1396; + massM = 0.770; + break; + default: + LOGF(fatal, "Particle now known"); + return false; + break; + } + + auto massC = getInvMassSquaredFast(track1, massD1, track2, massD2); + + if (std::fabs(massC - massM * massM) > cut * 5) { + return false; + } + + massC = getInvMassSquared(track1, massD1, track2, massD2); + + if (histogramRegistry != nullptr) { + histogramRegistry->fill(HIST("ControlConvResonances"), static_cast(conv), massC - massM * massM); + } + + if (massC > (massM - cut) * (massM - cut) && massC < (massM + cut) * (massM + cut)) { + return true; + } + + return false; +} + +template +double PairCuts::getInvMassSquared(T const& track1, double m0_1, T const& track2, double m0_2) +{ + // calculate inv mass squared + // same can be achieved, but with more computing time with + /*TLorentzVector photon, p1, p2; + p1.SetPtEtaPhiM(triggerParticle->Pt(), triggerEta, triggerParticle->Phi(), 0.510e-3); + p2.SetPtEtaPhiM(particle->Pt(), eta[j], particle->Phi(), 0.510e-3); + photon = p1+p2; + photon.M()*/ + + float tantheta1 = 1e10; + + if (eta(track1.px(), track1.py(), track1.pz()) < -1e-10 || eta(track1.px(), track1.py(), track1.pz()) > 1e-10) { + float expTmp = std::exp(-eta(track1.px(), track1.py(), track1.pz())); + tantheta1 = 2.0 * expTmp / (1.0 - expTmp * expTmp); + } + + float tantheta2 = 1e10; + if (eta(track2.px(), track2.py(), track2.pz()) < -1e-10 || eta(track2.px(), track2.py(), track2.pz()) > 1e-10) { + float expTmp = std::exp(-eta(track2.px(), track2.py(), track2.pz())); + tantheta2 = 2.0 * expTmp / (1.0 - expTmp * expTmp); + } + + float e1squ = m0_1 * m0_1 + track1.pt() * track1.pt() * (1.0 + 1.0 / tantheta1 / tantheta1); + float e2squ = m0_2 * m0_2 + track2.pt() * track2.pt() * (1.0 + 1.0 / tantheta2 / tantheta2); + + float mass2 = m0_1 * m0_1 + m0_2 * m0_2 + 2 * (std::sqrt(e1squ * e2squ) - (track1.pt() * track2.pt() * (std::cos(phi(track1.px(), track1.py()) - phi(track2.px(), track2.py())) + 1.0 / tantheta1 / tantheta2))); + + // LOGF(debug, "%f %f %f %f %f %f %f %f %f", pt1, eta1, phi1, pt2, eta2, phi2, m0_1, m0_2, mass2); + + return mass2; +} + +template +double PairCuts::getInvMassSquaredFast(T const& track1, double m0_1, T const& track2, double m0_2) +{ + // calculate inv mass squared approximately + + const float eta1 = eta(track1.px(), track1.py(), track1.pz()); + const float eta2 = eta(track2.px(), track2.py(), track2.pz()); + const float phi1 = phi(track1.px(), track1.py()); + const float phi2 = phi(track2.px(), track2.py()); + const float pt1 = track1.pt(); + const float pt2 = track2.pt(); + + float tantheta1 = 1e10f; + + if (eta1 < -1e-10f || eta1 > 1e-10f) { + float expTmp = 1.0f - eta1 + eta1 * eta1 / 2.0f - eta1 * eta1 * eta1 / 6.0f + eta1 * eta1 * eta1 * eta1 / 24.0f; + tantheta1 = 2.0f * expTmp / (1.0f - expTmp * expTmp); + } + + float tantheta2 = 1e10f; + if (eta2 < -1e-10f || eta2 > 1e-10f) { + float expTmp = 1.0f - eta2 + eta2 * eta2 / 2.0f - eta2 * eta2 * eta2 / 6.0f + eta2 * eta2 * eta2 * eta2 / 24.0f; + tantheta2 = 2.0f * expTmp / (1.0f - expTmp * expTmp); + } + + float e1squ = m0_1 * m0_1 + pt1 * pt1 * (1.0f + 1.0f / tantheta1 / tantheta1); + float e2squ = m0_2 * m0_2 + pt2 * pt2 * (1.0f + 1.0f / tantheta2 / tantheta2); + + // fold onto 0...pi + float deltaPhi = std::fabs(phi1 - phi2); + while (deltaPhi > TwoPI) { + deltaPhi -= TwoPI; + } + if (deltaPhi > PI) { + deltaPhi = TwoPI - deltaPhi; + } + + float cosDeltaPhi = 0; + if (deltaPhi < PI / 3.0f) { + cosDeltaPhi = 1.0 - deltaPhi * deltaPhi / 2 + deltaPhi * deltaPhi * deltaPhi * deltaPhi / 24; + } else if (deltaPhi < 2.0f * PI / 3.0f) { + cosDeltaPhi = -(deltaPhi - PI / 2) + 1.0 / 6 * std::pow((deltaPhi - PI / 2), 3); + } else { + cosDeltaPhi = -1.0f + 1.0f / 2.0f * (deltaPhi - PI) * (deltaPhi - PI) - 1.0f / 24.0f * std::pow(deltaPhi - PI, 4.0f); + } + + double mass2 = m0_1 * m0_1 + m0_2 * m0_2 + 2.0f * (std::sqrt(e1squ * e2squ) - (pt1 * pt2 * (cosDeltaPhi + 1.0f / tantheta1 / tantheta2))); + + //LOGF(debug, "%f %f %f %f %f %f %f %f %f", pt1, eta1, phi1, pt2, eta2, phi2, m0_1, m0_2, mass2); + + return mass2; +} + +template +float PairCuts::getDPhiStar(T const& track1, T const& track2, float radius, int magField) +{ + // + // calculates dphistar + // + + auto phi1 = phi(track1.px(), track1.py()); + auto pt1 = track1.pt(); + auto charge1 = track1.sign(); + + auto phi2 = phi(track2.px(), track2.py()); + auto pt2 = track2.pt(); + auto charge2 = track2.sign(); + + float dphistar = phi1 - phi2 - charge1 * std::asin(0.015 * magField * radius / pt1) + charge2 * std::asin(0.015 * magField * radius / pt2); + + if (dphistar > PI) { + dphistar = TwoPI - dphistar; + } + if (dphistar < -PI) { + dphistar = -TwoPI - dphistar; + } + if (dphistar > PI) { // might look funny but is needed + dphistar = TwoPI - dphistar; + } + + return dphistar; +} + +#endif \ No newline at end of file diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index 6f80802b4e0..40db88a7930 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -17,6 +17,7 @@ #include "Framework/runDataProcessing.h" #include "CCDB/BasicCCDBManager.h" #include "Framework/StepTHn.h" +#include #include "Common/CCDB/EventSelectionParams.h" #include "Common/Core/TrackSelection.h" @@ -34,9 +35,21 @@ using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; +namespace o2::aod{ + namespace tree{ + DECLARE_SOA_COLUMN(PT, Pt, float); + DECLARE_SOA_COLUMN(RAP, rap, float); + DECLARE_SOA_COLUMN(PHI, Phi, float); + } // namespace tree + DECLARE_SOA_TABLE(TREE, "AOD", "Tree", + tree::PT, + tree::RAP, + tree::PHI); +} // namespace o2:aod struct upcPhotonuclearAnalysisJMG { + Produces tree; HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject}; // Declare configurables on events/collisions @@ -79,6 +92,15 @@ struct upcPhotonuclearAnalysisJMG { Configurable cutMyTPCChi2NclMax{"cutMyTPCChi2NclMax", 4.f, {"My Track cut"}}; // Declare configurables for correlations Configurable cfgTwoTrackCut{"cfgTwoTrackCut", -1, {"Two track cut"}}; + ConfigurableAxis axisVertex{"axisVertex", {7, -7, 7}, "vertex axis for histograms"}; + ConfigurableAxis axisDeltaPhi{"axisDeltaPhi", {72, -constants::math::PIHalf, constants::math::PIHalf * 3}, "delta phi axis for histograms"}; + ConfigurableAxis axisDeltaEta{"axisDeltaEta", {40, -2, 2}, "delta eta axis for histograms"}; + ConfigurableAxis axisPtTrigger{"axisPtTrigger", {VARIABLE_WIDTH, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 10.0}, "pt trigger axis for histograms"}; + ConfigurableAxis axisPtAssoc{"axisPtAssoc", {VARIABLE_WIDTH, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0}, "pt associated axis for histograms"}; + ConfigurableAxis axisMultiplicity{"axisMultiplicity", {VARIABLE_WIDTH, 0, 5, 10, 20, 30, 40, 50, 100.1},"multiplicity / centrality axis for histograms"}; + ConfigurableAxis axisVertexEfficiency{"axisVertexEfficiency", {10, -10, 10}, "vertex axis for efficiency histograms"}; + ConfigurableAxis axisEtaEfficiency{"axisEtaEfficiency", {20, -1.0, 1.0}, "eta axis for efficiency histograms"}; + ConfigurableAxis axisPtEfficiency{"axisPtEfficiency", {VARIABLE_WIDTH, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25,2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0}, "pt axis for efficiency histograms"}; using FullSGUDCollision = soa::Join::iterator; using FullUDTracks = soa::Join; @@ -89,7 +111,7 @@ struct upcPhotonuclearAnalysisJMG { Service ccdb; - PairCuts mPairCuts; + //PairCuts mPairCuts; struct Config { bool mPairCuts = false; @@ -115,6 +137,11 @@ struct upcPhotonuclearAnalysisJMG { const AxisSpec axisChi2NCls{100, 0, 50}; const AxisSpec axisTPCNClsCrossedRowsMin{100, -0.05, 2.05}; + histos.add("yields", "multiplicity/centrality vs pT vs eta", {HistType::kTH3F, {{100, 0, 100, "/multiplicity/centrality"}, {40, 0, 20, "p_{T}"}, {100, -2, 2, "#eta"}}}); + histos.add("etaphi", "multiplicity/centrality vs eta vs phi", {HistType::kTH3F, {{100, 0, 100, "multiplicity/centrality"}, {100, -2, 2, "#eta"}, {200, 0, 2 * M_PI, "#varphi"}}}); + + const int maxMixBin = axisMultiplicity->size() * axisVertex->size(); + histos.add("eventcount", "bin", {HistType::kTH1F, {{maxMixBin + 2, -2.5, -0.5 + maxMixBin, "bin"}}}); histos.add("Events/hCountCollisions", "0 total - 1 side A - 2 side C - 3 both side; Number of analysed collision; counts", kTH1F, {axisCollision}); // histos to selection gap in side A @@ -200,6 +227,19 @@ struct upcPhotonuclearAnalysisJMG { histos.add("Events/SGsideBoth/hAmplitudFT0A", "Amplitud in side A distribution; Amplitud in side A; counts", kTH1F, {axisFT0Amplitud}); histos.add("Events/SGsideBoth/hAmplitudFT0C", "Amplitud in side C distribution; Amplitud in side C; counts", kTH1F, {axisFT0Amplitud}); + std::vector corrAxis = {{axisDeltaEta, "#Delta#eta"}, + {axisPtAssoc, "p_{T} (GeV/c)"}, + {axisPtTrigger, "p_{T} (GeV/c)"}, + {axisMultiplicity, "multiplicity / centrality"}, + {axisDeltaPhi, "#Delta#varphi (rad)"}, + {axisVertex, "z-vtx (cm)"}}; + std::vector effAxis = {{axisEtaEfficiency, "#eta"}, + {axisEtaEfficiency, "#eta"}, + {axisPtEfficiency, "p_{T} (GeV/c)"}, + {axisVertexEfficiency, "z-vtx (cm)"}}; + same.setObject(new CorrelationContainer("sameEvent", "sameEvent", corrAxis, effAxis, {})); + mixed.setObject(new CorrelationContainer("mixedEvent", "mixedEvent", corrAxis, effAxis, {})); + ccdb->setURL("http://alice-ccdb.cern.ch"); ccdb->setCaching(true); ccdb->setLocalObjectValidityChecking(); @@ -225,25 +265,25 @@ struct upcPhotonuclearAnalysisJMG { if ((collision.energyCommonZNA() < cutAGapMyEnergyZNAMax && collision.energyCommonZNC() >= cutAGapMyEnergyZNCMin) == false) { // 0n - A side && Xn - C Side return false; } - if ((collision.totalFT0AmplitudeA() < cutAGapMyAmplitudeFT0AMax && collision.totalFT0AmplitudeC() >= cutAGapMyAmplitudeFT0CMin) == false) { + /*if ((collision.totalFT0AmplitudeA() < cutAGapMyAmplitudeFT0AMax && collision.totalFT0AmplitudeC() >= cutAGapMyAmplitudeFT0CMin) == false) { return false; - } + }*/ break; case 1: // Gap in C side if ((collision.energyCommonZNA() >= cutCGapMyEnergyZNAMin && collision.energyCommonZNC() < cutCGapMyEnergyZNCMax) == false) { // Xn - A side && 0n - C Side return false; } - if ((collision.totalFT0AmplitudeA() >= cutCGapMyAmplitudeFT0AMin && collision.totalFT0AmplitudeC() < cutCGapMyAmplitudeFT0CMax) == false) { + /*if ((collision.totalFT0AmplitudeA() >= cutCGapMyAmplitudeFT0AMin && collision.totalFT0AmplitudeC() < cutCGapMyAmplitudeFT0CMax) == false) { return false; - } + }*/ break; case 2: // Gap in Both Sides if ((collision.energyCommonZNA() < cutBothGapMyEnergyZNAMax && collision.energyCommonZNC() < cutBothGapMyEnergyZNCMax) == false) { // 0n - A side && 0n - C Side return false; } - if ((collision.totalFT0AmplitudeA() < cutBothGapMyAmplitudeFT0AMax && collision.totalFT0AmplitudeC() < cutBothGapMyAmplitudeFT0CMax) == false) { + /*if ((collision.totalFT0AmplitudeA() < cutBothGapMyAmplitudeFT0AMax && collision.totalFT0AmplitudeC() < cutBothGapMyAmplitudeFT0CMax) == false) { return false; - } + }*/ break; } return true; @@ -307,30 +347,38 @@ struct upcPhotonuclearAnalysisJMG { return true; } - template - void fillCorrelationUPC(TTarget target, TTracks1& tracks1, TTracks2& tracks2, float multiplicity, float posZ, int magField, float eventWeight) + template + void fillQAUD(TCollision collision, float centrality, TTracks tracks) { - for (auto& track1: tracks1) { - for (auto& track2: tracks2) { - if constexpr (std::is_same::value) { - if (track1.globalIndex() == track2.globalIndex()) { - continue; - } - } + for (auto& track : tracks) { + histos.fill(HIST("yields"), centrality, track.pt(), eta(track.px(), track.py(), track.pz())); + histos.fill(HIST("etaphi"), centrality, eta(track.px(), track.py(), track.pz()), phi(track.px(), track.py())); + } + } - if constexpr (std::is_same::value) { - if constexpr (step >= CorrelationContainer::kCFStepReconstructed) { - if (cfg.mPairCuts && mPairCuts.conversionCuts(track1, track2)) { - continue; - } + template + bool fillCollisionUD(TTarget target, TCollision collision, float centrality) + { + target->fillEvent(centrality, CorrelationContainer::kCFStepAll); + /*if (!collision.alias_bit(kINT7) || !collision.sel7()) { + return false; + }*/ + target->fillEvent(centrality, CorrelationContainer::kCFStepReconstructed); + return true; + } - if (cfgTwoTrackCut > 0 && mPairCuts.twoTrackCut(track1, track2, magField)) { - continue; - } - } + template + void fillCorrelationsUD(TTarget target, TTracks tracks1, TTracks tracks2, float centrality, float posZ) + { + for (auto& track1 : tracks1) { + target->getTriggerHist()->Fill(CorrelationContainer::kCFStepReconstructed, track1.pt(), centrality, posZ, 1.0); + for (auto& track2 : tracks2) { + if (track1 == track2) { + continue; } - - float associatedWeight = eventWeight; + /*if (doPairCuts && mPairCuts.conversionCuts(track1, track2)) { + continue; + }*/ float deltaPhi = phi(track1.px(), track1.py()) - phi(track2.px(), track2.py()); if (deltaPhi > 1.5f * PI) { deltaPhi -= TwoPI; @@ -338,9 +386,7 @@ struct upcPhotonuclearAnalysisJMG { if (deltaPhi < -PIHalf) { deltaPhi += TwoPI; } - - //target->getPairHist()->Fill(step, eta(track1.px(), track1.py(), track1.pz()) - eta(track2.px(), track2.py(), track2.pz()), track2.pt(), track1.pt(), multiplicity, deltaPhi, posZ, associatedWeight); - + target->getPairHist()->Fill(CorrelationContainer::kCFStepReconstructed, eta(track1.px(), track1.py(), track1.pz()) - eta(track2.px(), track2.py(), track2.pz()), track2.pt(), track1.pt(), centrality, deltaPhi, posZ, 1.0); } } } @@ -357,6 +403,7 @@ struct upcPhotonuclearAnalysisJMG { return; } + float centrality = 50.0; switch (SGside) { case 0: // for side A if (isCollisionCutSG(reconstructedCollision, 0) == false) { @@ -379,6 +426,8 @@ struct upcPhotonuclearAnalysisJMG { } nTracksCharged++; sumPt += track.pt(); + // filling tree + tree(track.pt(), eta(track.px(), track.py(), track.pz()), phi(track.px(), track.py())); histos.fill(HIST("Tracks/SGsideA/hTrackPt"), track.pt()); histos.fill(HIST("Tracks/SGsideA/hTrackPhi"), phi(track.px(), track.py())); histos.fill(HIST("Tracks/SGsideA/hTrackEta"), eta(track.px(), track.py(), track.pz())); @@ -395,10 +444,12 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Tracks/SGsideA/hTrackTPCNClsFindableMinusCrossedRows"), track.tpcNClsFindableMinusCrossedRows()); histos.fill(HIST("Tracks/SGsideA/hTrackTPCChi2NCls"), track.tpcChi2NCl()); histos.fill(HIST("Tracks/SGsideA/hTrackITSNClsTPCCls"), track.tpcNClsFindable() - track.tpcNClsFindableMinusFound(), track.itsNCls()); + + //histos.fill(HIST("yields"), centrality, track.pt(), eta(track.px(), track.py(), track.pz())); + //histos.fill(HIST("etaphi"), centrality, eta(track.px(), track.py(), track.pz()), phi(track.px(), track.py())); } } multiplicity = nTracksCharged; - //fillCorrelationUPC(same, reconstructedTracks, reconstructedTracks, multiplicity, reconstructedCollision.posZ(), 5, 1.0f); histos.fill(HIST("Events/SGsideA/hNch"), nTracksCharged); histos.fill(HIST("Events/SGsideA/hPtVSNch"), nTracksCharged, (sumPt / nTracksCharged)); nTracksCharged = sumPt = 0; @@ -491,6 +542,75 @@ struct upcPhotonuclearAnalysisJMG { } } PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processSG, "Process in UD tables", true); + + void processSame(FullSGUDCollision const& reconstructedCollision, FullUDTracks const& reconstructedTracks) + { + int SGside = reconstructedCollision.gapSide(); + //int nTracksCharged = 0; + //float sumPt = 0; + //int multiplicity = 0; + + if (isGlobalCollisionCut(reconstructedCollision) == false) { + return; + } + + float centrality = 50.0; + switch (SGside) { + case 0: // for side A + if (isCollisionCutSG(reconstructedCollision, 0) == false) { + return; + } + if (fillCollisionUD(same, reconstructedCollision, centrality) == false) { + return; + } + histos.fill(HIST("eventcount"), -2); + fillQAUD(reconstructedCollision, centrality, reconstructedTracks); + fillCorrelationsUD(same, reconstructedTracks, reconstructedTracks, centrality, reconstructedCollision.posZ()); + break; + case 1: // for side C + if (isCollisionCutSG(reconstructedCollision, 1) == false) { + return; + } + break; + default: + return; + break; + } + } + PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processSame, "Process same event", true); + + void processMixed(FullSGUDCollision const& reconstructedCollision, FullUDTracks const& reconstructedTracks) + { + int SGside = reconstructedCollision.gapSide(); + + if (isGlobalCollisionCut(reconstructedCollision) == false) { + return; + } + + float centrality = 50.0; + switch (SGside) { + case 0: // for side A + if (isCollisionCutSG(reconstructedCollision, 0) == false) { + return; + } + if (fillCollisionUD(mixed, reconstructedCollision, centrality) == false) { + return; + } + histos.fill(HIST("eventcount"), -2); + fillQAUD(reconstructedCollision, centrality, reconstructedTracks); + fillCorrelationsUD(mixed, reconstructedTracks, reconstructedTracks, centrality, reconstructedCollision.posZ()); + break; + case 1: // for side C + if (isCollisionCutSG(reconstructedCollision, 1) == false) { + return; + } + break; + default: + return; + break; + } + } + PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processMixed, "Process mixed events", true); }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) From 62739d21ea14afc36715d3bd78915238085355da Mon Sep 17 00:00:00 2001 From: Josue-MiniPC Date: Wed, 13 Nov 2024 20:47:12 -0600 Subject: [PATCH 07/22] new changes --- PWGUD/Core/UPCPairCuts.h | 16 ++-- PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 105 ++++++++++++--------- 2 files changed, 71 insertions(+), 50 deletions(-) diff --git a/PWGUD/Core/UPCPairCuts.h b/PWGUD/Core/UPCPairCuts.h index d4b103f8f15..8d020276f07 100644 --- a/PWGUD/Core/UPCPairCuts.h +++ b/PWGUD/Core/UPCPairCuts.h @@ -65,12 +65,12 @@ class UPCPairCuts bool conversionCuts(T const& track1, T const& track2); template - bool twoTrackCut(T const& track1, T const& track2, int magField); + bool twoTrackCut(T const& track1, T const& track2); protected: float mCuts[ParticlesLastEntry] = {-1}; float mTwoTrackDistance = -1; // distance below which the pair is flagged as to be removed float mTwoTrackRadius = 0.8f; // radius at which the two track cuts are applied - int magField = 5 // magField: B field in kG + int magField = 5; // magField: B field in kG HistogramRegistry* histogramRegistry = nullptr; // if set, control histograms are stored here @@ -88,7 +88,7 @@ class UPCPairCuts }; template -bool PairCuts::conversionCuts(T const& track1, T const& track2) +bool UPCPairCuts::conversionCuts(T const& track1, T const& track2) { // skip if like sign if (track1.sign() * track2.sign() > 0) { @@ -113,7 +113,7 @@ bool PairCuts::conversionCuts(T const& track1, T const& track2) } template -bool PairCuts::twoTrackCut(T const& track1, T const& track2) +bool UPCPairCuts::twoTrackCut(T const& track1, T const& track2) { // the variables & cut have been developed in Run 1 by the CF - HBT group // @@ -163,7 +163,7 @@ bool PairCuts::twoTrackCut(T const& track1, T const& track2) } template -bool PairCuts::conversionCut(T const& track1, T const& track2, Particle conv, double cut) +bool UPCPairCuts::conversionCut(T const& track1, T const& track2, Particle conv, double cut) { //LOGF(info, "pt is %f %f", track1.pt(), track2.pt()); @@ -225,7 +225,7 @@ bool PairCuts::conversionCut(T const& track1, T const& track2, Particle conv, do } template -double PairCuts::getInvMassSquared(T const& track1, double m0_1, T const& track2, double m0_2) +double UPCPairCuts::getInvMassSquared(T const& track1, double m0_1, T const& track2, double m0_2) { // calculate inv mass squared // same can be achieved, but with more computing time with @@ -259,7 +259,7 @@ double PairCuts::getInvMassSquared(T const& track1, double m0_1, T const& track2 } template -double PairCuts::getInvMassSquaredFast(T const& track1, double m0_1, T const& track2, double m0_2) +double UPCPairCuts::getInvMassSquaredFast(T const& track1, double m0_1, T const& track2, double m0_2) { // calculate inv mass squared approximately @@ -312,7 +312,7 @@ double PairCuts::getInvMassSquaredFast(T const& track1, double m0_1, T const& tr } template -float PairCuts::getDPhiStar(T const& track1, T const& track2, float radius, int magField) +float UPCPairCuts::getDPhiStar(T const& track1, T const& track2, float radius, int magField) { // // calculates dphistar diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index 40db88a7930..07cf9eb16c9 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -26,10 +26,10 @@ #include "Common/DataModel/EventSelection.h" #include "Common/DataModel/TrackSelectionTables.h" #include "PWGCF/Core/CorrelationContainer.h" -#include "PWGCF/Core/PairCuts.h" #include "DataFormatsParameters/GRPObject.h" #include "PWGUD/DataModel/UDTables.h" +#include "PWGUD/Core/UPCPairCuts.h" #include "PWGUD/Core/UPCTauCentralBarrelHelperRL.h" using namespace o2; @@ -47,6 +47,8 @@ namespace o2::aod{ tree::PHI); } // namespace o2:aod +static constexpr float cfgPairCutDefaults[1][5] = {{-1, -1, -1, -1, -1}}; + struct upcPhotonuclearAnalysisJMG { Produces tree; @@ -91,6 +93,15 @@ struct upcPhotonuclearAnalysisJMG { Configurable cutMyTPCNClsOverFindableNClsMin{"cutMyTPCNClsOverFindableNClsMin", 0.5f, {"My Track cut"}}; Configurable cutMyTPCChi2NclMax{"cutMyTPCChi2NclMax", 4.f, {"My Track cut"}}; // Declare configurables for correlations + Configurable cfgZVtxCut = {"zvtxcut", 7.0, "Vertex z cut. Default 7 cm"}; + Configurable cfgPtCutMin = {"minpt", 0.2, "Minimum accepted track pT. Default 0.2 GeV"}; + Configurable cfgPtCutMax = {"maxpt", 10.0, "Maximum accepted track pT. Default 5.0 GeV"}; + Configurable cfgEtaCut = {"etacut", 0.8, "Eta cut. Default 0.8"}; + Configurable> cfgPairCut{"cfgPairCut", + {cfgPairCutDefaults[0], + 5, + {"Photon", "K0", "Lambda", "Phi", "Rho"}}, + "Pair cuts on various particles"}; Configurable cfgTwoTrackCut{"cfgTwoTrackCut", -1, {"Two track cut"}}; ConfigurableAxis axisVertex{"axisVertex", {7, -7, 7}, "vertex axis for histograms"}; ConfigurableAxis axisDeltaPhi{"axisDeltaPhi", {72, -constants::math::PIHalf, constants::math::PIHalf * 3}, "delta phi axis for histograms"}; @@ -109,16 +120,8 @@ struct upcPhotonuclearAnalysisJMG { OutputObj same{"sameEvent"}; OutputObj mixed{"mixedEvent"}; - Service ccdb; - - //PairCuts mPairCuts; - - struct Config { - bool mPairCuts = false; - THn* mEfficiencyTrigger = nullptr; - THn* mEfficiencyAssociated = nullptr; - bool efficiencyLoaded = false; - } cfg; + UPCPairCuts mPairCuts; + bool doPairCuts = false; void init(InitContext const&) { @@ -142,6 +145,16 @@ struct upcPhotonuclearAnalysisJMG { const int maxMixBin = axisMultiplicity->size() * axisVertex->size(); histos.add("eventcount", "bin", {HistType::kTH1F, {{maxMixBin + 2, -2.5, -0.5 + maxMixBin, "bin"}}}); + mPairCuts.SetHistogramRegistry(&histos); + if (cfgPairCut->get("Photon") > 0 || cfgPairCut->get("K0") > 0 || cfgPairCut->get("Lambda") > 0 || + cfgPairCut->get("Phi") > 0 || cfgPairCut->get("Rho") > 0) { + mPairCuts.SetPairCut(UPCPairCuts::Photon, cfgPairCut->get("Photon")); + mPairCuts.SetPairCut(UPCPairCuts::K0, cfgPairCut->get("K0")); + mPairCuts.SetPairCut(UPCPairCuts::Lambda, cfgPairCut->get("Lambda")); + mPairCuts.SetPairCut(UPCPairCuts::Phi, cfgPairCut->get("Phi")); + mPairCuts.SetPairCut(UPCPairCuts::Rho, cfgPairCut->get("Rho")); + doPairCuts = true; + } histos.add("Events/hCountCollisions", "0 total - 1 side A - 2 side C - 3 both side; Number of analysed collision; counts", kTH1F, {axisCollision}); // histos to selection gap in side A @@ -233,18 +246,24 @@ struct upcPhotonuclearAnalysisJMG { {axisMultiplicity, "multiplicity / centrality"}, {axisDeltaPhi, "#Delta#varphi (rad)"}, {axisVertex, "z-vtx (cm)"}}; - std::vector effAxis = {{axisEtaEfficiency, "#eta"}, - {axisEtaEfficiency, "#eta"}, - {axisPtEfficiency, "p_{T} (GeV/c)"}, - {axisVertexEfficiency, "z-vtx (cm)"}}; - same.setObject(new CorrelationContainer("sameEvent", "sameEvent", corrAxis, effAxis, {})); - mixed.setObject(new CorrelationContainer("mixedEvent", "mixedEvent", corrAxis, effAxis, {})); - - ccdb->setURL("http://alice-ccdb.cern.ch"); - ccdb->setCaching(true); - ccdb->setLocalObjectValidityChecking(); + std::vector effAxis = {{axisEtaEfficiency, "#eta"}, + {axisEtaEfficiency, "#eta"}, + {axisPtEfficiency, "p_{T} (GeV/c)"}, + {axisVertexEfficiency, "z-vtx (cm)"}}; + same.setObject(new CorrelationContainer("sameEvent", "sameEvent", corrAxis, effAxis, {})); + mixed.setObject(new CorrelationContainer("mixedEvent", "mixedEvent", corrAxis, effAxis, {})); } + std::vector vtxBinsEdges{VARIABLE_WIDTH, -7.0f, -5.0f, -3.0f, -1.0f, 1.0f, 3.0f, 5.0f, 7.0f}; + SliceCache cache; + + // Binning only on PosZ without centrality + ColumnBinningPolicy bindingOnVtx{{vtxBinsEdges}, true}; + + SameKindPair>, + soa::Filtered>, + ColumnBinningPolicy> pair{bindingOnVtx, 5, -1, &cache}; + template bool isGlobalCollisionCut(C const& collision) { @@ -554,7 +573,7 @@ struct upcPhotonuclearAnalysisJMG { return; } - float centrality = 50.0; + float centrality = 100.0; switch (SGside) { case 0: // for side A if (isCollisionCutSG(reconstructedCollision, 0) == false) { @@ -587,28 +606,30 @@ struct upcPhotonuclearAnalysisJMG { return; } - float centrality = 50.0; - switch (SGside) { - case 0: // for side A - if (isCollisionCutSG(reconstructedCollision, 0) == false) { - return; - } - if (fillCollisionUD(mixed, reconstructedCollision, centrality) == false) { - return; - } - histos.fill(HIST("eventcount"), -2); - fillQAUD(reconstructedCollision, centrality, reconstructedTracks); - fillCorrelationsUD(mixed, reconstructedTracks, reconstructedTracks, centrality, reconstructedCollision.posZ()); - break; - case 1: // for side C - if (isCollisionCutSG(reconstructedCollision, 1) == false) { + for (auto& [collision1, tracks1, collision2, tracks2] : pair) { + float centrality = 100.0; + switch (SGside) { + case 0: // for side A + if (isCollisionCutSG(reconstructedCollision, 0) == false) { + return; + } + if (fillCollisionUD(mixed, collision1, centrality) == false) { + return; + } + histos.fill(HIST("eventcount"), bindingOnVtx.getBin({collision1.posZ()})); + fillCorrelationsUD(mixed, tracks1, tracks2, centrality, collision1.posZ()); + break; + case 1: // for side C + if (isCollisionCutSG(reconstructedCollision, 1) == false) { + return; + } + break; + default: return; - } - break; - default: - return; - break; + break; + } } + } PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processMixed, "Process mixed events", true); }; From 907fc670ddb310f7afb475130c9c00a63b9c3582 Mon Sep 17 00:00:00 2001 From: Josue-MiniPC Date: Mon, 9 Dec 2024 12:59:19 -0600 Subject: [PATCH 08/22] new changes, using correlation container. output object empty --- PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index 07cf9eb16c9..d8aecf2c4ba 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -580,7 +580,7 @@ struct upcPhotonuclearAnalysisJMG { return; } if (fillCollisionUD(same, reconstructedCollision, centrality) == false) { - return; + return; } histos.fill(HIST("eventcount"), -2); fillQAUD(reconstructedCollision, centrality, reconstructedTracks); From c463936b86f2d0293ea3c20b92d7a9e23eeb1706 Mon Sep 17 00:00:00 2001 From: Josue-MiniPC Date: Fri, 24 Jan 2025 10:34:10 -0600 Subject: [PATCH 09/22] probe of correlation container tutorial --- .../src/firstcfcorrelations.cxx | 142 +++++++++++++++++- 1 file changed, 136 insertions(+), 6 deletions(-) diff --git a/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx b/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx index cdec4f3ca95..d7614c09aaa 100644 --- a/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx +++ b/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx @@ -30,39 +30,169 @@ using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; +static constexpr float cfgPairCutDefaults[1][5] = {{-1, -1, -1, -1, -1}}; + struct firstcorrelations { + // Declare configurables for correlations + Configurable cfgZVtxCut = {"zvtxcut", 7.0, "Vertex z cut. Default 7 cm"}; + Configurable cfgPtCutMin = {"minpt", 0.2, "Minimum accepted track pT. Default 0.2 GeV"}; + Configurable cfgPtCutMax = {"maxpt", 10.0, "Maximum accepted track pT. Default 5.0 GeV"}; + Configurable cfgEtaCut = {"etacut", 0.8, "Eta cut. Default 0.8"}; + Configurable> cfgPairCut{"cfgPairCut", + {cfgPairCutDefaults[0], + 5, + {"Photon", "K0", "Lambda", "Phi", "Rho"}}, + "Pair cuts on various particles"}; + //Configurable cfgTwoTrackCut{"cfgTwoTrackCut", -1, {"Two track cut"}}; + ConfigurableAxis axisVertex{"axisVertex", {7, -7, 7}, "vertex axis for histograms"}; + ConfigurableAxis axisDeltaPhi{"axisDeltaPhi", {72, -constants::math::PIHalf, constants::math::PIHalf * 3}, "delta phi axis for histograms"}; + ConfigurableAxis axisDeltaEta{"axisDeltaEta", {40, -2, 2}, "delta eta axis for histograms"}; + ConfigurableAxis axisPtTrigger{"axisPtTrigger", {VARIABLE_WIDTH, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 10.0}, "pt trigger axis for histograms"}; + ConfigurableAxis axisPtAssoc{"axisPtAssoc", {VARIABLE_WIDTH, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0}, "pt associated axis for histograms"}; + ConfigurableAxis axisMultiplicity{"axisMultiplicity", {VARIABLE_WIDTH, 0, 5, 10, 20, 30, 40, 50, 100.1},"multiplicity / centrality axis for histograms"}; + ConfigurableAxis axisVertexEfficiency{"axisVertexEfficiency", {10, -10, 10}, "vertex axis for efficiency histograms"}; + ConfigurableAxis axisEtaEfficiency{"axisEtaEfficiency", {20, -1.0, 1.0}, "eta axis for efficiency histograms"}; + ConfigurableAxis axisPtEfficiency{"axisPtEfficiency", {VARIABLE_WIDTH, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25,2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0}, "pt axis for efficiency histograms"}; + + // Output definitions + OutputObj same{"sameEvent"}; + OutputObj mixed{"mixedEvent"}; + HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject}; + PairCuts mPairCuts; + bool doPairCuts = false; + void init(InitContext&) { LOGF(info, "Starting init"); + histos.add("yields", "multiplicity/centrality vs pT vs eta", {HistType::kTH3F, {{100, 0, 100, "/multiplicity/centrality"}, {40, 0, 20, "p_{T}"}, {100, -2, 2, "#eta"}}}); + histos.add("etaphi", "multiplicity/centrality vs eta vs phi", {HistType::kTH3F, {{100, 0, 100, "multiplicity/centrality"}, {100, -2, 2, "#eta"}, {200, 0, 2 * M_PI, "#varphi"}}}); + + const int maxMixBin = axisMultiplicity->size() * axisVertex->size(); + histos.add("eventcount", "bin", {HistType::kTH1F, {{maxMixBin + 2, -2.5, -0.5 + maxMixBin, "bin"}}}); + mPairCuts.SetHistogramRegistry(&histos); + if (cfgPairCut->get("Photon") > 0 || cfgPairCut->get("K0") > 0 || cfgPairCut->get("Lambda") > 0 || + cfgPairCut->get("Phi") > 0 || cfgPairCut->get("Rho") > 0) { + mPairCuts.SetPairCut(PairCuts::Photon, cfgPairCut->get("Photon")); + mPairCuts.SetPairCut(PairCuts::K0, cfgPairCut->get("K0")); + mPairCuts.SetPairCut(PairCuts::Lambda, cfgPairCut->get("Lambda")); + mPairCuts.SetPairCut(PairCuts::Phi, cfgPairCut->get("Phi")); + mPairCuts.SetPairCut(PairCuts::Rho, cfgPairCut->get("Rho")); + doPairCuts = true; + } + + std::vector corrAxis = {{axisDeltaEta, "#Delta#eta"}, + {axisPtAssoc, "p_{T} (GeV/c)"}, + {axisPtTrigger, "p_{T} (GeV/c)"}, + {axisMultiplicity, "multiplicity / centrality"}, + {axisDeltaPhi, "#Delta#varphi (rad)"}, + {axisVertex, "z-vtx (cm)"}}; + std::vector effAxis = {{axisEtaEfficiency, "#eta"}, + {axisEtaEfficiency, "#eta"}, + {axisPtEfficiency, "p_{T} (GeV/c)"}, + {axisVertexEfficiency, "z-vtx (cm)"}}; + same.setObject(new CorrelationContainer("sameEvent", "sameEvent", corrAxis, effAxis, {})); + mixed.setObject(new CorrelationContainer("mixedEvent", "mixedEvent", corrAxis, effAxis, {})); LOGF(info, "Finishing init"); } + std::vector vtxBinsEdges{VARIABLE_WIDTH, -7.0f, -5.0f, -3.0f, -1.0f, 1.0f, 3.0f, 5.0f, 7.0f}; + std::vector multBinsEdges{VARIABLE_WIDTH, 0.0f, 5.0f, 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 100.0f}; + SliceCache cache; + + ColumnBinningPolicy bindingOnVtxAndMult{{vtxBinsEdges, multBinsEdges}, true}; // true is for ’ignore overflows’ (true by default) + + SameKindPair>, + soa::Filtered>, + ColumnBinningPolicy> + pair{bindingOnVtxAndMult, 5, -1, &cache}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored + + Filter collisionZVtxFilter = nabs(aod::collision::posZ) < cfgZVtxCut; + Filter trackFilter = (nabs(aod::track::eta) < cfgEtaCut) && (aod::track::pt > cfgPtCutMin) && (aod::track::pt < cfgPtCutMax) && (requireGlobalTrackInFilter() || (aod::track::isGlobalTrackSDD == (uint8_t) true)); + template - void fillQA(TCollision /*collision*/, float /*centrality*/, TTracks /*tracks*/) + void fillQA(TCollision collision, float centrality, TTracks tracks) { + for (auto& track: tracks) { + histos.fill(HIST("yields"), centrality, track.pt(), track.eta()); + histos.fill(HIST("etaphi"), centrality, track.eta(), track.phi()); + } } template - bool fillCollision(TTarget /*target*/, TCollision /*collision*/, float /*centrality*/) + bool fillCollision(TTarget target, TCollision collision, float centrality) { + target->fillEvent(centrality, CorrelationContainer::kCFStepAll); + + if (!collision.alias_bit(kINT7) || !collision.sel7()){ + return false; + } + + target->fillEvent(centrality, CorrelationContainer::kCFStepReconstructed); return true; } template - void fillCorrelations(TTarget /*target*/, TTracks /*tracks1*/, TTracks /*tracks2*/, float /*centrality*/, float /*posZ*/) + void fillCorrelations(TTarget target, TTracks tracks1, TTracks tracks2, float centrality, float posZ) { + for (auto& track1 : tracks1) { + target->getTriggerHist()->Fill(CorrelationContainer::kCFStepReconstructed, track1.pt(), centrality, posZ, 1.0); + for (auto& track2 : tracks2) { + if (track1 == track2) { + continue; + } + if (doPairCuts && mPairCuts.conversionCuts(track1, track2)) { + continue; + } + float deltaPhi = track1.phi() - track2.phi(); + if (deltaPhi > 1.5f * PI) { + deltaPhi -= TwoPI; + } + if (deltaPhi < -PIHalf) { + deltaPhi += TwoPI; + } + target->getPairHist()->Fill(CorrelationContainer::kCFStepReconstructed,track1.eta() - track2.eta(), track2.pt(), track1.pt(), centrality, deltaPhi, posZ,1.0); + } + } } - void processSame() + void processSame(soa::Filtered>::iterator const& collision, soa::Filtered> const& tracks) { + const auto centrality = collision.centRun2V0M(); + if (fillCollision(same, collision, centrality) == false) { + return; + } + histos.fill(HIST("eventcount"), -2); + fillQA(collision, centrality, tracks); + fillCorrelations(same, tracks, tracks, centrality, collision.posZ()); } - void processMixed() + PROCESS_SWITCH(firstcorrelations, processSame, "Process same event", true); + + void processMixed(soa::Filtered>::iterator const& collisions, soa::Filtered> const& tracks) { + for (auto& [collision1, tracks1, collision2, tracks2] : pair) { + if (fillCollision(mixed, collision1, collision1.centRun2V0M()) == false) { + continue; + } + histos.fill(HIST("eventcount"), bindingOnVtxAndMult.getBin({collision1.posZ(), collision1.centRun2V0M()})); + fillCorrelations(mixed, tracks1, tracks2, collision1.centRun2V0M(), collision1.posZ()); + } } - void process(aod::Collision const&, aod::Tracks const&) + + PROCESS_SWITCH(firstcorrelations, processMixed, "Process mixed events", true); + + void process(soa::Join::iterator const& collision, aod::Tracks const& tracks) { + LOGF(info, "Received %d collisions", collision.size()); + + const auto centrality = collision.centRun2V0M(); + + if (fillCollision(same, collision, centrality) == false) { + return; + } + histos.fill(HIST("eventcount"), -2); + fillQA(collision, centrality, tracks); } }; From ddd10830e3acd4fc29ea2e34ea1bb1b1a95b7157 Mon Sep 17 00:00:00 2001 From: Josue-MiniPC Date: Fri, 28 Feb 2025 01:07:36 -0600 Subject: [PATCH 10/22] a little change to test --- .../PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx b/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx index d7614c09aaa..25e89c2bd48 100644 --- a/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx +++ b/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx @@ -105,7 +105,7 @@ struct firstcorrelations { SameKindPair>, soa::Filtered>, ColumnBinningPolicy> - pair{bindingOnVtxAndMult, 5, -1, &cache}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored + pair{bindingOnVtxAndMult, 10, -1, &cache}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored Filter collisionZVtxFilter = nabs(aod::collision::posZ) < cfgZVtxCut; Filter trackFilter = (nabs(aod::track::eta) < cfgEtaCut) && (aod::track::pt > cfgPtCutMin) && (aod::track::pt < cfgPtCutMax) && (requireGlobalTrackInFilter() || (aod::track::isGlobalTrackSDD == (uint8_t) true)); From 81251f29aea4146c91eb17379de383aa784099cf Mon Sep 17 00:00:00 2001 From: Josue-MiniPC Date: Tue, 25 Mar 2025 12:35:45 -0600 Subject: [PATCH 11/22] recent changes on the correlation analysis, container still empty --- PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 72 ++++++--- .../src/firstcfcorrelations.cxx | 144 +----------------- 2 files changed, 54 insertions(+), 162 deletions(-) diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index d8aecf2c4ba..59502fdf302 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -17,7 +17,7 @@ #include "Framework/runDataProcessing.h" #include "CCDB/BasicCCDBManager.h" #include "Framework/StepTHn.h" -#include +//#include #include "Common/CCDB/EventSelectionParams.h" #include "Common/Core/TrackSelection.h" @@ -35,7 +35,7 @@ using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; -namespace o2::aod{ +/*namespace o2::aod{ namespace tree{ DECLARE_SOA_COLUMN(PT, Pt, float); DECLARE_SOA_COLUMN(RAP, rap, float); @@ -45,13 +45,15 @@ namespace o2::aod{ tree::PT, tree::RAP, tree::PHI); -} // namespace o2:aod +}*/ // namespace o2:aod + +DECLARE_SOA_COLUMN(FakeMult, fakeMult, float); static constexpr float cfgPairCutDefaults[1][5] = {{-1, -1, -1, -1, -1}}; struct upcPhotonuclearAnalysisJMG { - Produces tree; + //Produces tree; HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject}; // Declare configurables on events/collisions @@ -174,7 +176,7 @@ struct upcPhotonuclearAnalysisJMG { histos.add("Tracks/SGsideA/hTrackTPCChi2NCls", "#it{N Clusters Chi2 TPC} distribution; #it{N Clusters Chi2 TPC}; counts", kTH1F, {axisChi2NCls}); histos.add("Tracks/SGsideA/hTrackITSNClsTPCCls", "#it{ITS Clusters vs TPC Clusters}; #it{TPC Clusters}; #it{ITS Clusters}", kTH2F, {axisNCls, axisNCls}); - histos.add("Events/SGsideA/hTrackZVtx", "vertex in z; z (cm); counts", kTH1F, {axisZvtx}); + histos.add("Events/SGsideA/hZVtx", "vertex in z; z (cm); counts", kTH1F, {axisZvtx}); histos.add("Events/SGsideA/hNch", "#it{Charged Tracks Multiplicity} distribution; #it{Charged Tracks Multiplicity}; counts", kTH1F, {axisNch}); histos.add("Events/SGsideA/hPtVSNch", "#it{ #LT p_{T} #GT } vs #it{Charged Tracks Multiplicity}; #it{Charged Tracks Multiplicity}; #it{ #LT p_{T} #GT }", kTH2F, {axisNch, axisPt}); histos.add("Events/SGsideA/hEnergyZNA", "Energy in side A distribution; Energy in side A; counts", kTH1F, {axisZNEnergy}); @@ -203,7 +205,7 @@ struct upcPhotonuclearAnalysisJMG { histos.add("Tracks/SGsideC/hTrackTPCChi2NCls", "#it{N Clusters Chi2 TPC} distribution; #it{N Clusters Chi2 TPC}; counts", kTH1F, {axisChi2NCls}); histos.add("Tracks/SGsideC/hTrackITSNClsTPCCls", "#it{ITS Clusters vs TPC Clusters}; #it{TPC Clusters}; #it{ITS Clusters}", kTH2F, {axisNCls, axisNCls}); - histos.add("Events/SGsideC/hTrackZVtx", "vertex in z; z (cm); counts", kTH1F, {axisZvtx}); + histos.add("Events/SGsideC/hZVtx", "vertex in z; z (cm); counts", kTH1F, {axisZvtx}); histos.add("Events/SGsideC/hNch", "#it{Charged Tracks Multiplicity} distribution; #it{Charged Tracks Multiplicity}; counts", kTH1F, {axisNch}); histos.add("Events/SGsideC/hPtVSNch", "#it{ #LT p_{T} #GT } vs #it{Charged Tracks Multiplicity}; #it{Charged Tracks Multiplicity}; #it{ #LT p_{T} #GT }", kTH2F, {axisNch, axisPt}); histos.add("Events/SGsideC/hEnergyZNA", "Energy in side A distribution; Energy in side A; counts", kTH1F, {axisZNEnergy}); @@ -228,7 +230,7 @@ struct upcPhotonuclearAnalysisJMG { histos.add("Tracks/SGsideBoth/hTrackTPCChi2NCls", "#it{N Clusters Chi2 TPC} distribution; #it{N Clusters Chi2 TPC}; counts", kTH1F, {axisChi2NCls}); histos.add("Tracks/SGsideBoth/hTrackITSNClsTPCCls", "#it{ITS Clusters vs TPC Clusters}; #it{TPC Clusters}; #it{ITS Clusters}", kTH2F, {axisNCls, axisNCls}); - histos.add("Events/SGsideBoth/hTrackZVtx", "vertex in z; z (cm); counts", kTH1F, {axisZvtx}); + histos.add("Events/SGsideBoth/hZVtx", "vertex in z; z (cm); counts", kTH1F, {axisZvtx}); histos.add("Events/SGsideBoth/hNch", "#it{Charged Tracks Multiplicity} distribution; #it{Charged Tracks Multiplicity}; counts", kTH1F, {axisNch}); histos.add("Events/SGsideBoth/hPtVSNch", "#it{ #LT p_{T} #GT } vs #it{Charged Tracks Multiplicity}; #it{Charged Tracks Multiplicity}; #it{ #LT p_{T} #GT }", kTH2F, {axisNch, axisPt}); histos.add("Events/SGsideBoth/hEnergyZNA", "Energy in side A distribution; Energy in side A; counts", kTH1F, {axisZNEnergy}); @@ -254,15 +256,23 @@ struct upcPhotonuclearAnalysisJMG { mixed.setObject(new CorrelationContainer("mixedEvent", "mixedEvent", corrAxis, effAxis, {})); } - std::vector vtxBinsEdges{VARIABLE_WIDTH, -7.0f, -5.0f, -3.0f, -1.0f, 1.0f, 3.0f, 5.0f, 7.0f}; + std::vector vtxBinsEdges{VARIABLE_WIDTH, -10.0f, 0.0f, 10.0f}; + std::vector multBinsEdges{VARIABLE_WIDTH, 0.0f, 50.0f, 400.0f}; SliceCache cache; + // Binning only on PosZ without centrality - ColumnBinningPolicy bindingOnVtx{{vtxBinsEdges}, true}; + ColumnBinningPolicy bindingOnVtx{{vtxBinsEdges, multBinsEdges}, true}; + //ColumnBinningPolicy bindingOnVtx{{vtxBinsEdges}, true}; - SameKindPair>, - soa::Filtered>, - ColumnBinningPolicy> pair{bindingOnVtx, 5, -1, &cache}; + SameKindPair, + FullUDTracks, + ColumnBinningPolicy> + pair{bindingOnVtx, 3, -1, &cache}; + + /*SameKindPair, + FullUDTracks, + ColumnBinningPolicy> pair{bindingOnVtx, 5, -1, &cache};*/ template bool isGlobalCollisionCut(C const& collision) @@ -422,9 +432,9 @@ struct upcPhotonuclearAnalysisJMG { return; } - float centrality = 50.0; + //float centrality = 50.0; switch (SGside) { - case 0: // for side A + case 0: // gap for side A if (isCollisionCutSG(reconstructedCollision, 0) == false) { return; } @@ -435,7 +445,7 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Events/SGsideA/hTimeZNA"), reconstructedCollision.timeZNA()); histos.fill(HIST("Events/SGsideA/hTimeZNC"), reconstructedCollision.timeZNC()); histos.fill(HIST("Events/SGsideA/hTimeRelationSides"), reconstructedCollision.timeZNA(), reconstructedCollision.timeZNC()); - histos.fill(HIST("Events/SGsideA/hTrackZVtx"), reconstructedCollision.posZ()); + histos.fill(HIST("Events/SGsideA/hZVtx"), reconstructedCollision.posZ()); histos.fill(HIST("Events/SGsideA/hAmplitudFT0A"), reconstructedCollision.totalFT0AmplitudeA()); histos.fill(HIST("Events/SGsideA/hAmplitudFT0C"), reconstructedCollision.totalFT0AmplitudeC()); for (auto& track : reconstructedTracks) { @@ -446,7 +456,7 @@ struct upcPhotonuclearAnalysisJMG { nTracksCharged++; sumPt += track.pt(); // filling tree - tree(track.pt(), eta(track.px(), track.py(), track.pz()), phi(track.px(), track.py())); + //tree(track.pt(), eta(track.px(), track.py(), track.pz()), phi(track.px(), track.py())); histos.fill(HIST("Tracks/SGsideA/hTrackPt"), track.pt()); histos.fill(HIST("Tracks/SGsideA/hTrackPhi"), phi(track.px(), track.py())); histos.fill(HIST("Tracks/SGsideA/hTrackEta"), eta(track.px(), track.py(), track.pz())); @@ -473,7 +483,7 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Events/SGsideA/hPtVSNch"), nTracksCharged, (sumPt / nTracksCharged)); nTracksCharged = sumPt = 0; break; - case 1: // for side C + case 1: // gap for side C if (isCollisionCutSG(reconstructedCollision, 1) == false) { return; } @@ -484,7 +494,7 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Events/SGsideC/hTimeZNA"), reconstructedCollision.timeZNA()); histos.fill(HIST("Events/SGsideC/hTimeZNC"), reconstructedCollision.timeZNC()); histos.fill(HIST("Events/SGsideC/hTimeRelationSides"), reconstructedCollision.timeZNA(), reconstructedCollision.timeZNC()); - histos.fill(HIST("Events/SGsideC/hTrackZVtx"), reconstructedCollision.posZ()); + histos.fill(HIST("Events/SGsideC/hZVtx"), reconstructedCollision.posZ()); histos.fill(HIST("Events/SGsideC/hAmplitudFT0A"), reconstructedCollision.totalFT0AmplitudeA()); histos.fill(HIST("Events/SGsideC/hAmplitudFT0C"), reconstructedCollision.totalFT0AmplitudeC()); for (auto& track : reconstructedTracks) { @@ -527,7 +537,7 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Events/SGsideBoth/hTimeZNA"), reconstructedCollision.timeZNA()); histos.fill(HIST("Events/SGsideBoth/hTimeZNC"), reconstructedCollision.timeZNC()); histos.fill(HIST("Events/SGsideBoth/hTimeRelationSides"), reconstructedCollision.timeZNA(), reconstructedCollision.timeZNC()); - histos.fill(HIST("Events/SGsideBoth/hTrackZVtx"), reconstructedCollision.posZ()); + histos.fill(HIST("Events/SGsideBoth/hZVtx"), reconstructedCollision.posZ()); histos.fill(HIST("Events/SGsideBoth/hAmplitudFT0A"), reconstructedCollision.totalFT0AmplitudeA()); histos.fill(HIST("Events/SGsideBoth/hAmplitudFT0C"), reconstructedCollision.totalFT0AmplitudeC()); for (auto& track : reconstructedTracks) { @@ -575,18 +585,19 @@ struct upcPhotonuclearAnalysisJMG { float centrality = 100.0; switch (SGside) { - case 0: // for side A + case 0: // gap for side A if (isCollisionCutSG(reconstructedCollision, 0) == false) { return; } if (fillCollisionUD(same, reconstructedCollision, centrality) == false) { return; } + LOGF(info, "Filling same events"); histos.fill(HIST("eventcount"), -2); fillQAUD(reconstructedCollision, centrality, reconstructedTracks); fillCorrelationsUD(same, reconstructedTracks, reconstructedTracks, centrality, reconstructedCollision.posZ()); break; - case 1: // for side C + case 1: // gap for side C if (isCollisionCutSG(reconstructedCollision, 1) == false) { return; } @@ -596,6 +607,7 @@ struct upcPhotonuclearAnalysisJMG { break; } } + PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processSame, "Process same event", true); void processMixed(FullSGUDCollision const& reconstructedCollision, FullUDTracks const& reconstructedTracks) @@ -605,21 +617,30 @@ struct upcPhotonuclearAnalysisJMG { if (isGlobalCollisionCut(reconstructedCollision) == false) { return; } - + //LOGF(info, "Process mixed events"); + //LOGF(info, ">>> Collision posZ: %f", reconstructedCollision.posZ()); for (auto& [collision1, tracks1, collision2, tracks2] : pair) { + if (collision1.size() == 0 || collision2.size() == 0) { + LOGF(info, "One or both collisions are empty."); + continue; + } + //LOGF(info, "Mixed event collisions: (%d, %d)", collision1.globalIndex(), collision2.globalIndex()); float centrality = 100.0; + LOGF(info, "Filling mixed events"); switch (SGside) { - case 0: // for side A + case 0: // gap for side A if (isCollisionCutSG(reconstructedCollision, 0) == false) { return; } if (fillCollisionUD(mixed, collision1, centrality) == false) { return; } - histos.fill(HIST("eventcount"), bindingOnVtx.getBin({collision1.posZ()})); + //LOGF(info, ">>> Bin of collision: ", bindingOnVtx.getBin({collision1.posZ()})); + histos.fill(HIST("eventcount"), bindingOnVtx.getBin({collision1.posZ(), collision1.totalFT0AmplitudeC()})); + //histos.fill(HIST("eventcount"), bindingOnVtx.getBin({collision1.posZ()})); fillCorrelationsUD(mixed, tracks1, tracks2, centrality, collision1.posZ()); break; - case 1: // for side C + case 1: // gap for side C if (isCollisionCutSG(reconstructedCollision, 1) == false) { return; } @@ -631,6 +652,7 @@ struct upcPhotonuclearAnalysisJMG { } } + PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processMixed, "Process mixed events", true); }; diff --git a/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx b/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx index 25e89c2bd48..c6df8c737da 100644 --- a/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx +++ b/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx @@ -30,169 +30,39 @@ using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; -static constexpr float cfgPairCutDefaults[1][5] = {{-1, -1, -1, -1, -1}}; - struct firstcorrelations { - // Declare configurables for correlations - Configurable cfgZVtxCut = {"zvtxcut", 7.0, "Vertex z cut. Default 7 cm"}; - Configurable cfgPtCutMin = {"minpt", 0.2, "Minimum accepted track pT. Default 0.2 GeV"}; - Configurable cfgPtCutMax = {"maxpt", 10.0, "Maximum accepted track pT. Default 5.0 GeV"}; - Configurable cfgEtaCut = {"etacut", 0.8, "Eta cut. Default 0.8"}; - Configurable> cfgPairCut{"cfgPairCut", - {cfgPairCutDefaults[0], - 5, - {"Photon", "K0", "Lambda", "Phi", "Rho"}}, - "Pair cuts on various particles"}; - //Configurable cfgTwoTrackCut{"cfgTwoTrackCut", -1, {"Two track cut"}}; - ConfigurableAxis axisVertex{"axisVertex", {7, -7, 7}, "vertex axis for histograms"}; - ConfigurableAxis axisDeltaPhi{"axisDeltaPhi", {72, -constants::math::PIHalf, constants::math::PIHalf * 3}, "delta phi axis for histograms"}; - ConfigurableAxis axisDeltaEta{"axisDeltaEta", {40, -2, 2}, "delta eta axis for histograms"}; - ConfigurableAxis axisPtTrigger{"axisPtTrigger", {VARIABLE_WIDTH, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 10.0}, "pt trigger axis for histograms"}; - ConfigurableAxis axisPtAssoc{"axisPtAssoc", {VARIABLE_WIDTH, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0}, "pt associated axis for histograms"}; - ConfigurableAxis axisMultiplicity{"axisMultiplicity", {VARIABLE_WIDTH, 0, 5, 10, 20, 30, 40, 50, 100.1},"multiplicity / centrality axis for histograms"}; - ConfigurableAxis axisVertexEfficiency{"axisVertexEfficiency", {10, -10, 10}, "vertex axis for efficiency histograms"}; - ConfigurableAxis axisEtaEfficiency{"axisEtaEfficiency", {20, -1.0, 1.0}, "eta axis for efficiency histograms"}; - ConfigurableAxis axisPtEfficiency{"axisPtEfficiency", {VARIABLE_WIDTH, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25,2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0}, "pt axis for efficiency histograms"}; - - // Output definitions - OutputObj same{"sameEvent"}; - OutputObj mixed{"mixedEvent"}; - HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject}; - PairCuts mPairCuts; - bool doPairCuts = false; - void init(InitContext&) { LOGF(info, "Starting init"); - histos.add("yields", "multiplicity/centrality vs pT vs eta", {HistType::kTH3F, {{100, 0, 100, "/multiplicity/centrality"}, {40, 0, 20, "p_{T}"}, {100, -2, 2, "#eta"}}}); - histos.add("etaphi", "multiplicity/centrality vs eta vs phi", {HistType::kTH3F, {{100, 0, 100, "multiplicity/centrality"}, {100, -2, 2, "#eta"}, {200, 0, 2 * M_PI, "#varphi"}}}); - - const int maxMixBin = axisMultiplicity->size() * axisVertex->size(); - histos.add("eventcount", "bin", {HistType::kTH1F, {{maxMixBin + 2, -2.5, -0.5 + maxMixBin, "bin"}}}); - mPairCuts.SetHistogramRegistry(&histos); - if (cfgPairCut->get("Photon") > 0 || cfgPairCut->get("K0") > 0 || cfgPairCut->get("Lambda") > 0 || - cfgPairCut->get("Phi") > 0 || cfgPairCut->get("Rho") > 0) { - mPairCuts.SetPairCut(PairCuts::Photon, cfgPairCut->get("Photon")); - mPairCuts.SetPairCut(PairCuts::K0, cfgPairCut->get("K0")); - mPairCuts.SetPairCut(PairCuts::Lambda, cfgPairCut->get("Lambda")); - mPairCuts.SetPairCut(PairCuts::Phi, cfgPairCut->get("Phi")); - mPairCuts.SetPairCut(PairCuts::Rho, cfgPairCut->get("Rho")); - doPairCuts = true; - } - - std::vector corrAxis = {{axisDeltaEta, "#Delta#eta"}, - {axisPtAssoc, "p_{T} (GeV/c)"}, - {axisPtTrigger, "p_{T} (GeV/c)"}, - {axisMultiplicity, "multiplicity / centrality"}, - {axisDeltaPhi, "#Delta#varphi (rad)"}, - {axisVertex, "z-vtx (cm)"}}; - std::vector effAxis = {{axisEtaEfficiency, "#eta"}, - {axisEtaEfficiency, "#eta"}, - {axisPtEfficiency, "p_{T} (GeV/c)"}, - {axisVertexEfficiency, "z-vtx (cm)"}}; - same.setObject(new CorrelationContainer("sameEvent", "sameEvent", corrAxis, effAxis, {})); - mixed.setObject(new CorrelationContainer("mixedEvent", "mixedEvent", corrAxis, effAxis, {})); LOGF(info, "Finishing init"); } - std::vector vtxBinsEdges{VARIABLE_WIDTH, -7.0f, -5.0f, -3.0f, -1.0f, 1.0f, 3.0f, 5.0f, 7.0f}; - std::vector multBinsEdges{VARIABLE_WIDTH, 0.0f, 5.0f, 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 100.0f}; - SliceCache cache; - - ColumnBinningPolicy bindingOnVtxAndMult{{vtxBinsEdges, multBinsEdges}, true}; // true is for ’ignore overflows’ (true by default) - - SameKindPair>, - soa::Filtered>, - ColumnBinningPolicy> - pair{bindingOnVtxAndMult, 10, -1, &cache}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored - - Filter collisionZVtxFilter = nabs(aod::collision::posZ) < cfgZVtxCut; - Filter trackFilter = (nabs(aod::track::eta) < cfgEtaCut) && (aod::track::pt > cfgPtCutMin) && (aod::track::pt < cfgPtCutMax) && (requireGlobalTrackInFilter() || (aod::track::isGlobalTrackSDD == (uint8_t) true)); - template - void fillQA(TCollision collision, float centrality, TTracks tracks) + void fillQA(TCollision /*collision*/, float /*centrality*/, TTracks /*tracks*/) { - for (auto& track: tracks) { - histos.fill(HIST("yields"), centrality, track.pt(), track.eta()); - histos.fill(HIST("etaphi"), centrality, track.eta(), track.phi()); - } } template - bool fillCollision(TTarget target, TCollision collision, float centrality) + bool fillCollision(TTarget /*target*/, TCollision /*collision*/, float /*centrality*/) { - target->fillEvent(centrality, CorrelationContainer::kCFStepAll); - - if (!collision.alias_bit(kINT7) || !collision.sel7()){ - return false; - } - - target->fillEvent(centrality, CorrelationContainer::kCFStepReconstructed); return true; } template - void fillCorrelations(TTarget target, TTracks tracks1, TTracks tracks2, float centrality, float posZ) + void fillCorrelations(TTarget /*target*/, TTracks /*tracks1*/, TTracks /*tracks2*/, float /*centrality*/, float /*posZ*/) { - for (auto& track1 : tracks1) { - target->getTriggerHist()->Fill(CorrelationContainer::kCFStepReconstructed, track1.pt(), centrality, posZ, 1.0); - for (auto& track2 : tracks2) { - if (track1 == track2) { - continue; - } - if (doPairCuts && mPairCuts.conversionCuts(track1, track2)) { - continue; - } - float deltaPhi = track1.phi() - track2.phi(); - if (deltaPhi > 1.5f * PI) { - deltaPhi -= TwoPI; - } - if (deltaPhi < -PIHalf) { - deltaPhi += TwoPI; - } - target->getPairHist()->Fill(CorrelationContainer::kCFStepReconstructed,track1.eta() - track2.eta(), track2.pt(), track1.pt(), centrality, deltaPhi, posZ,1.0); - } - } } - void processSame(soa::Filtered>::iterator const& collision, soa::Filtered> const& tracks) + void processSame() { - const auto centrality = collision.centRun2V0M(); - if (fillCollision(same, collision, centrality) == false) { - return; - } - histos.fill(HIST("eventcount"), -2); - fillQA(collision, centrality, tracks); - fillCorrelations(same, tracks, tracks, centrality, collision.posZ()); } - PROCESS_SWITCH(firstcorrelations, processSame, "Process same event", true); - - void processMixed(soa::Filtered>::iterator const& collisions, soa::Filtered> const& tracks) + void processMixed() { - for (auto& [collision1, tracks1, collision2, tracks2] : pair) { - if (fillCollision(mixed, collision1, collision1.centRun2V0M()) == false) { - continue; - } - histos.fill(HIST("eventcount"), bindingOnVtxAndMult.getBin({collision1.posZ(), collision1.centRun2V0M()})); - fillCorrelations(mixed, tracks1, tracks2, collision1.centRun2V0M(), collision1.posZ()); - } } - - PROCESS_SWITCH(firstcorrelations, processMixed, "Process mixed events", true); - - void process(soa::Join::iterator const& collision, aod::Tracks const& tracks) + void process(aod::Collision const&, aod::Tracks const&) { - LOGF(info, "Received %d collisions", collision.size()); - - const auto centrality = collision.centRun2V0M(); - - if (fillCollision(same, collision, centrality) == false) { - return; - } - histos.fill(HIST("eventcount"), -2); - fillQA(collision, centrality, tracks); } }; @@ -201,4 +71,4 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) return WorkflowSpec{ adaptAnalysisTask(cfgc), }; -} +} \ No newline at end of file From 35e7ea81ee08071220ed0d2c1af3f2f022a43cd8 Mon Sep 17 00:00:00 2001 From: Josue-MiniPC Date: Mon, 31 Mar 2025 22:32:28 -0600 Subject: [PATCH 12/22] saving updates to change to Lumi work --- PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 122 ++++----------- .../src/firstcfcorrelations.cxx | 146 +++++++++++++++++- 2 files changed, 169 insertions(+), 99 deletions(-) diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index 59502fdf302..22c23abbeac 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -57,10 +57,9 @@ struct upcPhotonuclearAnalysisJMG { HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject}; // Declare configurables on events/collisions - Configurable cutMyPosZMin{"cutMyPosZMin", -10., {"My collision cut"}}; - Configurable cutMyPosZMax{"cutMyPosZMax", 10., {"My collision cut"}}; - Configurable cutMyTimeZNA{"cutMyTimeZNA", 2., {"My collision cut"}}; - Configurable cutMyTimeZNC{"cutMyTimeZNC", 2., {"My collision cut"}}; + Configurable myZVtxCut{"myZVtxCut", 10., {"My collision cut"}}; + Configurable myTimeZNACut{"myTimeZNACut", 2., {"My collision cut"}}; + Configurable myTimeZNCCut{"myTimeZNCCut", 2., {"My collision cut"}}; // Declare configurables on side A gap Configurable cutAGapMyEnergyZNAMax{"cutAGapMyEnergyZNAMax", 0., {"My collision cut. A Gap"}}; Configurable cutAGapMyAmplitudeFT0AMax{"cutAGapMyAmplitudeFT0AMax", 200., {"My collision cut. A Gap"}}; @@ -115,7 +114,10 @@ struct upcPhotonuclearAnalysisJMG { ConfigurableAxis axisEtaEfficiency{"axisEtaEfficiency", {20, -1.0, 1.0}, "eta axis for efficiency histograms"}; ConfigurableAxis axisPtEfficiency{"axisPtEfficiency", {VARIABLE_WIDTH, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25,2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0}, "pt axis for efficiency histograms"}; - using FullSGUDCollision = soa::Join::iterator; + Filter collisionZVtxFilter = nabs(aod::collision::posZ) < myZVtxCut; + Filter collisionZNTimeFilter = nabs(aod::udzdc::timeZNA) < myTimeZNACut && nabs(aod::udzdc::timeZNC) < myTimeZNCCut; + + using FullSGUDCollision = soa::Filtered>::iterator; using FullUDTracks = soa::Join; // Output definitions @@ -217,31 +219,6 @@ struct upcPhotonuclearAnalysisJMG { histos.add("Events/SGsideC/hAmplitudFT0A", "Amplitud in side A distribution; Amplitud in side A; counts", kTH1F, {axisFT0Amplitud}); histos.add("Events/SGsideC/hAmplitudFT0C", "Amplitud in side C distribution; Amplitud in side C; counts", kTH1F, {axisFT0Amplitud}); - // histos to selection gap in both sides - histos.add("Tracks/SGsideBoth/hTrackPt", "#it{p_{T}} distribution; #it{p_{T}}; counts", kTH1F, {axisPt}); - histos.add("Tracks/SGsideBoth/hTrackPhi", "#it{#phi} distribution; #it{#phi}; counts", kTH1F, {axisPhi}); - histos.add("Tracks/SGsideBoth/hTrackEta", "#it{#eta} distribution; #it{#eta}; counts", kTH1F, {axisEta}); - histos.add("Tracks/SGsideBoth/hTrackTPCSignnalP", "#it{TPC dE/dx vs p}; #it{p*charge}; #it{TPC dE/dx}", kTH2F, {axisP, axisTPCSignal}); - histos.add("Tracks/SGsideBoth/hTrackITSNCls", "#it{N Clusters ITS} distribution; #it{N Clusters ITS}; counts", kTH1F, {axisNCls}); - histos.add("Tracks/SGsideBoth/hTrackITSChi2NCls", "#it{N Clusters Chi2 ITS} distribution; #it{N Clusters Chi2 ITS}; counts", kTH1F, {axisChi2NCls}); - histos.add("Tracks/SGsideBoth/hTrackNClsCrossedRowsOverNCls", "#it{NClsCrossedRows/FindableNCls} distribution in TPC; #it{NClsCrossedRows/FindableNCls}; counts", kTH1F, {axisTPCNClsCrossedRowsMin}); - histos.add("Tracks/SGsideBoth/hTrackTPCNClsCrossedRows", "#it{Number of crossed TPC Rows} distribution; #it{Number of crossed TPC Rows}; counts", kTH1F, {axisNCls}); - histos.add("Tracks/SGsideBoth/hTrackTPCNClsFindable", "#it{Findable TPC clusters for this track} distribution; #it{Findable TPC clusters for this track}; counts", kTH1F, {axisNCls}); - histos.add("Tracks/SGsideBoth/hTrackTPCChi2NCls", "#it{N Clusters Chi2 TPC} distribution; #it{N Clusters Chi2 TPC}; counts", kTH1F, {axisChi2NCls}); - histos.add("Tracks/SGsideBoth/hTrackITSNClsTPCCls", "#it{ITS Clusters vs TPC Clusters}; #it{TPC Clusters}; #it{ITS Clusters}", kTH2F, {axisNCls, axisNCls}); - - histos.add("Events/SGsideBoth/hZVtx", "vertex in z; z (cm); counts", kTH1F, {axisZvtx}); - histos.add("Events/SGsideBoth/hNch", "#it{Charged Tracks Multiplicity} distribution; #it{Charged Tracks Multiplicity}; counts", kTH1F, {axisNch}); - histos.add("Events/SGsideBoth/hPtVSNch", "#it{ #LT p_{T} #GT } vs #it{Charged Tracks Multiplicity}; #it{Charged Tracks Multiplicity}; #it{ #LT p_{T} #GT }", kTH2F, {axisNch, axisPt}); - histos.add("Events/SGsideBoth/hEnergyZNA", "Energy in side A distribution; Energy in side A; counts", kTH1F, {axisZNEnergy}); - histos.add("Events/SGsideBoth/hEnergyZNC", "Energy in side C distribution; Energy in side C; counts", kTH1F, {axisZNEnergy}); - histos.add("Events/SGsideBoth/hEnergyRelationSides", "Energy in side A vs energy in side C; Energy in side A; Energy in side C", kTH2F, {axisZNEnergy, axisZNEnergy}); - histos.add("Events/SGsideBoth/hTimeZNA", "Time in side A distribution; Time in side A; counts", kTH1F, {axisZNTime}); - histos.add("Events/SGsideBoth/hTimeZNC", "Time in side C distribution; Time in side C; counts", kTH1F, {axisZNTime}); - histos.add("Events/SGsideBoth/hTimeRelationSides", "Time in side A vs time in side C; Time in side A; Time in side C", kTH2F, {axisZNTime, axisZNTime}); - histos.add("Events/SGsideBoth/hAmplitudFT0A", "Amplitud in side A distribution; Amplitud in side A; counts", kTH1F, {axisFT0Amplitud}); - histos.add("Events/SGsideBoth/hAmplitudFT0C", "Amplitud in side C distribution; Amplitud in side C; counts", kTH1F, {axisFT0Amplitud}); - std::vector corrAxis = {{axisDeltaEta, "#Delta#eta"}, {axisPtAssoc, "p_{T} (GeV/c)"}, {axisPtTrigger, "p_{T} (GeV/c)"}, @@ -262,29 +239,29 @@ struct upcPhotonuclearAnalysisJMG { // Binning only on PosZ without centrality - ColumnBinningPolicy bindingOnVtx{{vtxBinsEdges, multBinsEdges}, true}; - //ColumnBinningPolicy bindingOnVtx{{vtxBinsEdges}, true}; + //ColumnBinningPolicy bindingOnVtx{{vtxBinsEdges, multBinsEdges}, true}; + ColumnBinningPolicy bindingOnVtx{{vtxBinsEdges}, true}; - SameKindPair, + /*SameKindPair, FullUDTracks, - ColumnBinningPolicy> - pair{bindingOnVtx, 3, -1, &cache}; + ColumnBinningPolicy> + pair{bindingOnVtx, 5, -1, &cache};*/ - /*SameKindPair, + SameKindPair, FullUDTracks, - ColumnBinningPolicy> pair{bindingOnVtx, 5, -1, &cache};*/ + ColumnBinningPolicy> pair{bindingOnVtx, 5, -1, &cache}; - template - bool isGlobalCollisionCut(C const& collision) - { - if (collision.posZ() < cutMyPosZMin || cutMyPosZMax < collision.posZ()) { + // template + // bool isGlobalCollisionCut(C const& collision) + // { + /*if (collision.posZ() < cutMyPosZMin || myZVtxCut < collision.posZ()) { return false; - } - if ((std::abs(collision.timeZNA()) < cutMyTimeZNA && std::abs(collision.timeZNC()) < cutMyTimeZNC) == false) { + }*/ + /*if ((std::abs(collision.timeZNA()) < myTimeZNACut && std::abs(collision.timeZNC()) < myTimeZNCCut) == false) { return false; } - return true; - } + return true;*/ + // } template bool isCollisionCutSG(CSG const& collision, int SideGap) @@ -428,9 +405,9 @@ struct upcPhotonuclearAnalysisJMG { float sumPt = 0; int multiplicity = 0; - if (isGlobalCollisionCut(reconstructedCollision) == false) { + /*if (isGlobalCollisionCut(reconstructedCollision) == false) { return; - } + }*/ //float centrality = 50.0; switch (SGside) { @@ -526,45 +503,6 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Events/SGsideC/hPtVSNch"), nTracksCharged, (sumPt / nTracksCharged)); nTracksCharged = sumPt = 0; break; - case 2: // for both sides - if (isCollisionCutSG(reconstructedCollision, 2) == false) { - return; - } - histos.fill(HIST("Events/hCountCollisions"), 3); - histos.fill(HIST("Events/SGsideBoth/hEnergyZNA"), reconstructedCollision.energyCommonZNA()); - histos.fill(HIST("Events/SGsideBoth/hEnergyZNC"), reconstructedCollision.energyCommonZNC()); - histos.fill(HIST("Events/SGsideBoth/hEnergyRelationSides"), reconstructedCollision.energyCommonZNA(), reconstructedCollision.energyCommonZNC()); - histos.fill(HIST("Events/SGsideBoth/hTimeZNA"), reconstructedCollision.timeZNA()); - histos.fill(HIST("Events/SGsideBoth/hTimeZNC"), reconstructedCollision.timeZNC()); - histos.fill(HIST("Events/SGsideBoth/hTimeRelationSides"), reconstructedCollision.timeZNA(), reconstructedCollision.timeZNC()); - histos.fill(HIST("Events/SGsideBoth/hZVtx"), reconstructedCollision.posZ()); - histos.fill(HIST("Events/SGsideBoth/hAmplitudFT0A"), reconstructedCollision.totalFT0AmplitudeA()); - histos.fill(HIST("Events/SGsideBoth/hAmplitudFT0C"), reconstructedCollision.totalFT0AmplitudeC()); - for (auto& track : reconstructedTracks) { - if (track.sign() == 1 || track.sign() == -1) { - if (isTrackCut(track) == false) { - continue; - } - nTracksCharged++; - sumPt += track.pt(); - histos.fill(HIST("Tracks/SGsideBoth/hTrackPt"), track.pt()); - histos.fill(HIST("Tracks/SGsideBoth/hTrackPhi"), phi(track.px(), track.py())); - histos.fill(HIST("Tracks/SGsideBoth/hTrackEta"), eta(track.px(), track.py(), track.pz())); - histos.fill(HIST("Tracks/SGsideBoth/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz()) * track.sign(), track.tpcSignal()); - - histos.fill(HIST("Tracks/SGsideBoth/hTrackITSNCls"), track.itsNCls()); - histos.fill(HIST("Tracks/SGsideBoth/hTrackITSChi2NCls"), track.itsChi2NCl()); - histos.fill(HIST("Tracks/SGsideBoth/hTrackNClsCrossedRowsOverNCls"), (static_cast(track.tpcNClsCrossedRows()) / static_cast(track.tpcNClsFindable()))); - histos.fill(HIST("Tracks/SGsideBoth/hTrackTPCNClsCrossedRows"), track.tpcNClsCrossedRows()); - histos.fill(HIST("Tracks/SGsideBoth/hTrackTPCNClsFindable"), track.tpcNClsFindable()); - histos.fill(HIST("Tracks/SGsideBoth/hTrackTPCChi2NCls"), track.tpcChi2NCl()); - histos.fill(HIST("Tracks/SGsideBoth/hTrackITSNClsTPCCls"), track.tpcNClsFindable() - track.tpcNClsFindableMinusFound(), track.itsNCls()); - } - } - histos.fill(HIST("Events/SGsideBoth/hNch"), nTracksCharged); - histos.fill(HIST("Events/SGsideBoth/hPtVSNch"), nTracksCharged, (sumPt / nTracksCharged)); - nTracksCharged = sumPt = 0; - break; default: return; break; @@ -579,9 +517,9 @@ struct upcPhotonuclearAnalysisJMG { //float sumPt = 0; //int multiplicity = 0; - if (isGlobalCollisionCut(reconstructedCollision) == false) { + /*if (isGlobalCollisionCut(reconstructedCollision) == false) { return; - } + }*/ float centrality = 100.0; switch (SGside) { @@ -614,9 +552,9 @@ struct upcPhotonuclearAnalysisJMG { { int SGside = reconstructedCollision.gapSide(); - if (isGlobalCollisionCut(reconstructedCollision) == false) { + /*if (isGlobalCollisionCut(reconstructedCollision) == false) { return; - } + }*/ //LOGF(info, "Process mixed events"); //LOGF(info, ">>> Collision posZ: %f", reconstructedCollision.posZ()); for (auto& [collision1, tracks1, collision2, tracks2] : pair) { @@ -636,8 +574,8 @@ struct upcPhotonuclearAnalysisJMG { return; } //LOGF(info, ">>> Bin of collision: ", bindingOnVtx.getBin({collision1.posZ()})); - histos.fill(HIST("eventcount"), bindingOnVtx.getBin({collision1.posZ(), collision1.totalFT0AmplitudeC()})); - //histos.fill(HIST("eventcount"), bindingOnVtx.getBin({collision1.posZ()})); + //histos.fill(HIST("eventcount"), bindingOnVtx.getBin({collision1.posZ(), collision1.totalFT0AmplitudeC()})); + histos.fill(HIST("eventcount"), bindingOnVtx.getBin({collision1.posZ()})); fillCorrelationsUD(mixed, tracks1, tracks2, centrality, collision1.posZ()); break; case 1: // gap for side C diff --git a/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx b/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx index c6df8c737da..b3e076a8421 100644 --- a/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx +++ b/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx @@ -30,39 +30,171 @@ using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; +static constexpr float cfgPairCutDefaults[1][5] = {{-1, -1, -1, -1, -1}}; + struct firstcorrelations { + // Declare configurables for correlations + Configurable cfgZVtxCut = {"zvtxcut", 7.0, "Vertex z cut. Default 7 cm"}; + Configurable cfgPtCutMin = {"minpt", 0.2, "Minimum accepted track pT. Default 0.2 GeV"}; + Configurable cfgPtCutMax = {"maxpt", 10.0, "Maximum accepted track pT. Default 5.0 GeV"}; + Configurable cfgEtaCut = {"etacut", 0.8, "Eta cut. Default 0.8"}; + Configurable> cfgPairCut{"cfgPairCut", + {cfgPairCutDefaults[0], + 5, + {"Photon", "K0", "Lambda", "Phi", "Rho"}}, + "Pair cuts on various particles"}; + //Configurable cfgTwoTrackCut{"cfgTwoTrackCut", -1, {"Two track cut"}}; + ConfigurableAxis axisVertex{"axisVertex", {7, -7, 7}, "vertex axis for histograms"}; + ConfigurableAxis axisDeltaPhi{"axisDeltaPhi", {72, -constants::math::PIHalf, constants::math::PIHalf * 3}, "delta phi axis for histograms"}; + ConfigurableAxis axisDeltaEta{"axisDeltaEta", {40, -2, 2}, "delta eta axis for histograms"}; + ConfigurableAxis axisPtTrigger{"axisPtTrigger", {VARIABLE_WIDTH, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 10.0}, "pt trigger axis for histograms"}; + ConfigurableAxis axisPtAssoc{"axisPtAssoc", {VARIABLE_WIDTH, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0}, "pt associated axis for histograms"}; + ConfigurableAxis axisMultiplicity{"axisMultiplicity", {VARIABLE_WIDTH, 0, 5, 10, 20, 30, 40, 50, 100.1},"multiplicity / centrality axis for histograms"}; + ConfigurableAxis axisVertexEfficiency{"axisVertexEfficiency", {10, -10, 10}, "vertex axis for efficiency histograms"}; + ConfigurableAxis axisEtaEfficiency{"axisEtaEfficiency", {20, -1.0, 1.0}, "eta axis for efficiency histograms"}; + ConfigurableAxis axisPtEfficiency{"axisPtEfficiency", {VARIABLE_WIDTH, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25,2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0}, "pt axis for efficiency histograms"}; + + // Output definitions + OutputObj same{"sameEvent"}; + OutputObj mixed{"mixedEvent"}; + HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject}; + PairCuts mPairCuts; + bool doPairCuts = false; + void init(InitContext&) { LOGF(info, "Starting init"); + histos.add("yields", "multiplicity/centrality vs pT vs eta", {HistType::kTH3F, {{100, 0, 100, "/multiplicity/centrality"}, {40, 0, 20, "p_{T}"}, {100, -2, 2, "#eta"}}}); + histos.add("etaphi", "multiplicity/centrality vs eta vs phi", {HistType::kTH3F, {{100, 0, 100, "multiplicity/centrality"}, {100, -2, 2, "#eta"}, {200, 0, 2 * M_PI, "#varphi"}}}); + + const int maxMixBin = axisMultiplicity->size() * axisVertex->size(); + histos.add("eventcount", "bin", {HistType::kTH1F, {{maxMixBin + 2, -2.5, -0.5 + maxMixBin, "bin"}}}); + mPairCuts.SetHistogramRegistry(&histos); + if (cfgPairCut->get("Photon") > 0 || cfgPairCut->get("K0") > 0 || cfgPairCut->get("Lambda") > 0 || + cfgPairCut->get("Phi") > 0 || cfgPairCut->get("Rho") > 0) { + mPairCuts.SetPairCut(PairCuts::Photon, cfgPairCut->get("Photon")); + mPairCuts.SetPairCut(PairCuts::K0, cfgPairCut->get("K0")); + mPairCuts.SetPairCut(PairCuts::Lambda, cfgPairCut->get("Lambda")); + mPairCuts.SetPairCut(PairCuts::Phi, cfgPairCut->get("Phi")); + mPairCuts.SetPairCut(PairCuts::Rho, cfgPairCut->get("Rho")); + doPairCuts = true; + } + + std::vector corrAxis = {{axisDeltaEta, "#Delta#eta"}, + {axisPtAssoc, "p_{T} (GeV/c)"}, + {axisPtTrigger, "p_{T} (GeV/c)"}, + {axisMultiplicity, "multiplicity / centrality"}, + {axisDeltaPhi, "#Delta#varphi (rad)"}, + {axisVertex, "z-vtx (cm)"}}; + std::vector effAxis = {{axisEtaEfficiency, "#eta"}, + {axisEtaEfficiency, "#eta"}, + {axisPtEfficiency, "p_{T} (GeV/c)"}, + {axisVertexEfficiency, "z-vtx (cm)"}}; + same.setObject(new CorrelationContainer("sameEvent", "sameEvent", corrAxis, effAxis, {})); + mixed.setObject(new CorrelationContainer("mixedEvent", "mixedEvent", corrAxis, effAxis, {})); LOGF(info, "Finishing init"); } + std::vector vtxBinsEdges{VARIABLE_WIDTH, -7.0f, -5.0f, -3.0f, -1.0f, 1.0f, 3.0f, 5.0f, 7.0f}; + std::vector multBinsEdges{VARIABLE_WIDTH, 0.0f, 5.0f, 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 100.0f}; + SliceCache cache; + + ColumnBinningPolicy bindingOnVtxAndMult{{vtxBinsEdges, multBinsEdges}, true}; // true is for ’ignore overflows’ (true by default) + + SameKindPair>, + soa::Filtered>, + ColumnBinningPolicy> + pair{bindingOnVtxAndMult, 10, -1, &cache}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored + + Filter collisionZVtxFilter = nabs(aod::collision::posZ) < cfgZVtxCut; + Filter trackFilter = (nabs(aod::track::eta) < cfgEtaCut) && (aod::track::pt > cfgPtCutMin) && (aod::track::pt < cfgPtCutMax) && (requireGlobalTrackInFilter() || (aod::track::isGlobalTrackSDD == (uint8_t) true)); + template - void fillQA(TCollision /*collision*/, float /*centrality*/, TTracks /*tracks*/) + void fillQA(TCollision collision, float centrality, TTracks tracks) { + for (auto& track: tracks) { + histos.fill(HIST("yields"), centrality, track.pt(), track.eta()); + histos.fill(HIST("etaphi"), centrality, track.eta(), track.phi()); + } } template - bool fillCollision(TTarget /*target*/, TCollision /*collision*/, float /*centrality*/) + bool fillCollision(TTarget target, TCollision collision, float centrality) { + target->fillEvent(centrality, CorrelationContainer::kCFStepAll); + + if (!collision.alias_bit(kINT7) || !collision.sel7()){ + return false; + } + + target->fillEvent(centrality, CorrelationContainer::kCFStepReconstructed); return true; } template - void fillCorrelations(TTarget /*target*/, TTracks /*tracks1*/, TTracks /*tracks2*/, float /*centrality*/, float /*posZ*/) + void fillCorrelations(TTarget target, TTracks tracks1, TTracks tracks2, float centrality, float posZ) { + for (auto& track1 : tracks1) { + target->getTriggerHist()->Fill(CorrelationContainer::kCFStepReconstructed, track1.pt(), centrality, posZ, 1.0); + for (auto& track2 : tracks2) { + if (track1 == track2) { + continue; + } + if (doPairCuts && mPairCuts.conversionCuts(track1, track2)) { + continue; + } + float deltaPhi = track1.phi() - track2.phi(); + if (deltaPhi > 1.5f * PI) { + deltaPhi -= TwoPI; + } + if (deltaPhi < -PIHalf) { + deltaPhi += TwoPI; + } + target->getPairHist()->Fill(CorrelationContainer::kCFStepReconstructed,track1.eta() - track2.eta(), track2.pt(), track1.pt(), centrality, deltaPhi, posZ,1.0); + } + } } - void processSame() + void processSame(soa::Filtered>::iterator const& collision, soa::Filtered> const& tracks) { + const auto centrality = collision.centRun2V0M(); + if (fillCollision(same, collision, centrality) == false) { + return; + } + LOGF(info, "Filling same events"); + histos.fill(HIST("eventcount"), -2); + fillQA(collision, centrality, tracks); + fillCorrelations(same, tracks, tracks, centrality, collision.posZ()); } - void processMixed() + PROCESS_SWITCH(firstcorrelations, processSame, "Process same event", true); + + void processMixed(soa::Filtered>::iterator const& collisions, soa::Filtered> const& tracks) { + for (auto& [collision1, tracks1, collision2, tracks2] : pair) { + if (fillCollision(mixed, collision1, collision1.centRun2V0M()) == false) { + continue; + } + LOGF(info, "Filling mixed events"); + histos.fill(HIST("eventcount"), bindingOnVtxAndMult.getBin({collision1.posZ(), collision1.centRun2V0M()})); + fillCorrelations(mixed, tracks1, tracks2, collision1.centRun2V0M(), collision1.posZ()); + } } - void process(aod::Collision const&, aod::Tracks const&) + + PROCESS_SWITCH(firstcorrelations, processMixed, "Process mixed events", true); + + void process(soa::Join::iterator const& collision, aod::Tracks const& tracks) { + LOGF(info, "Received %d collisions", collision.size()); + + const auto centrality = collision.centRun2V0M(); + + if (fillCollision(same, collision, centrality) == false) { + return; + } + histos.fill(HIST("eventcount"), -2); + fillQA(collision, centrality, tracks); } }; @@ -71,4 +203,4 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) return WorkflowSpec{ adaptAnalysisTask(cfgc), }; -} \ No newline at end of file +} From 48cd940df2e3d0d8a1dbd6c068c79a1de7187055 Mon Sep 17 00:00:00 2001 From: Josue-MiniPC Date: Wed, 9 Apr 2025 23:23:47 -0600 Subject: [PATCH 13/22] new changes --- PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 63 +++++----------------- 1 file changed, 14 insertions(+), 49 deletions(-) diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index 22c23abbeac..0cb30fb8005 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -117,7 +117,7 @@ struct upcPhotonuclearAnalysisJMG { Filter collisionZVtxFilter = nabs(aod::collision::posZ) < myZVtxCut; Filter collisionZNTimeFilter = nabs(aod::udzdc::timeZNA) < myTimeZNACut && nabs(aod::udzdc::timeZNC) < myTimeZNCCut; - using FullSGUDCollision = soa::Filtered>::iterator; + using FullSGUDCollision = soa::Filtered>; using FullUDTracks = soa::Join; // Output definitions @@ -237,32 +237,18 @@ struct upcPhotonuclearAnalysisJMG { std::vector multBinsEdges{VARIABLE_WIDTH, 0.0f, 50.0f, 400.0f}; SliceCache cache; - // Binning only on PosZ without centrality + using BinningType = ColumnBinningPolicy; + BinningType bindingOnVtx{{vtxBinsEdges}, true}; + SameKindPair pairs{bindingOnVtx, 5, -1, &cache}; + //ColumnBinningPolicy bindingOnVtx{{vtxBinsEdges, multBinsEdges}, true}; - ColumnBinningPolicy bindingOnVtx{{vtxBinsEdges}, true}; /*SameKindPair, FullUDTracks, ColumnBinningPolicy> pair{bindingOnVtx, 5, -1, &cache};*/ - SameKindPair, - FullUDTracks, - ColumnBinningPolicy> pair{bindingOnVtx, 5, -1, &cache}; - - // template - // bool isGlobalCollisionCut(C const& collision) - // { - /*if (collision.posZ() < cutMyPosZMin || myZVtxCut < collision.posZ()) { - return false; - }*/ - /*if ((std::abs(collision.timeZNA()) < myTimeZNACut && std::abs(collision.timeZNC()) < myTimeZNCCut) == false) { - return false; - } - return true;*/ - // } - template bool isCollisionCutSG(CSG const& collision, int SideGap) { @@ -283,14 +269,6 @@ struct upcPhotonuclearAnalysisJMG { return false; }*/ break; - case 2: // Gap in Both Sides - if ((collision.energyCommonZNA() < cutBothGapMyEnergyZNAMax && collision.energyCommonZNC() < cutBothGapMyEnergyZNCMax) == false) { // 0n - A side && 0n - C Side - return false; - } - /*if ((collision.totalFT0AmplitudeA() < cutBothGapMyAmplitudeFT0AMax && collision.totalFT0AmplitudeC() < cutBothGapMyAmplitudeFT0CMax) == false) { - return false; - }*/ - break; } return true; } @@ -397,7 +375,7 @@ struct upcPhotonuclearAnalysisJMG { } } - void processSG(FullSGUDCollision const& reconstructedCollision, FullUDTracks const& reconstructedTracks) + void processSG(FullSGUDCollision::iterator const& reconstructedCollision, FullUDTracks const& reconstructedTracks) { histos.fill(HIST("Events/hCountCollisions"), 0); int SGside = reconstructedCollision.gapSide(); @@ -405,10 +383,6 @@ struct upcPhotonuclearAnalysisJMG { float sumPt = 0; int multiplicity = 0; - /*if (isGlobalCollisionCut(reconstructedCollision) == false) { - return; - }*/ - //float centrality = 50.0; switch (SGside) { case 0: // gap for side A @@ -510,16 +484,9 @@ struct upcPhotonuclearAnalysisJMG { } PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processSG, "Process in UD tables", true); - void processSame(FullSGUDCollision const& reconstructedCollision, FullUDTracks const& reconstructedTracks) + void processSame(FullSGUDCollision::iterator const& reconstructedCollision, FullUDTracks const& reconstructedTracks) { int SGside = reconstructedCollision.gapSide(); - //int nTracksCharged = 0; - //float sumPt = 0; - //int multiplicity = 0; - - /*if (isGlobalCollisionCut(reconstructedCollision) == false) { - return; - }*/ float centrality = 100.0; switch (SGside) { @@ -550,14 +517,12 @@ struct upcPhotonuclearAnalysisJMG { void processMixed(FullSGUDCollision const& reconstructedCollision, FullUDTracks const& reconstructedTracks) { - int SGside = reconstructedCollision.gapSide(); + //int SGside = reconstructedCollision::iterator.gapSide(); + int SGside = 0; - /*if (isGlobalCollisionCut(reconstructedCollision) == false) { - return; - }*/ //LOGF(info, "Process mixed events"); //LOGF(info, ">>> Collision posZ: %f", reconstructedCollision.posZ()); - for (auto& [collision1, tracks1, collision2, tracks2] : pair) { + for (auto& [collision1, tracks1, collision2, tracks2] : pairs) { if (collision1.size() == 0 || collision2.size() == 0) { LOGF(info, "One or both collisions are empty."); continue; @@ -567,9 +532,9 @@ struct upcPhotonuclearAnalysisJMG { LOGF(info, "Filling mixed events"); switch (SGside) { case 0: // gap for side A - if (isCollisionCutSG(reconstructedCollision, 0) == false) { + /*if (isCollisionCutSG(reconstructedCollision, 0) == false) { return; - } + }*/ if (fillCollisionUD(mixed, collision1, centrality) == false) { return; } @@ -579,9 +544,9 @@ struct upcPhotonuclearAnalysisJMG { fillCorrelationsUD(mixed, tracks1, tracks2, centrality, collision1.posZ()); break; case 1: // gap for side C - if (isCollisionCutSG(reconstructedCollision, 1) == false) { + /*if (isCollisionCutSG(reconstructedCollision, 1) == false) { return; - } + }*/ break; default: return; From 1dff56214e966f13d82ba00ca6485397a77149e8 Mon Sep 17 00:00:00 2001 From: josue-MiniPC-Ubuntu Date: Fri, 23 May 2025 06:27:16 -0600 Subject: [PATCH 14/22] new changes to do correlations --- PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 235 +++++++++++---------- 1 file changed, 127 insertions(+), 108 deletions(-) diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index 0cb30fb8005..87aee4f9203 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -17,7 +17,7 @@ #include "Framework/runDataProcessing.h" #include "CCDB/BasicCCDBManager.h" #include "Framework/StepTHn.h" -//#include +// #include #include "Common/CCDB/EventSelectionParams.h" #include "Common/Core/TrackSelection.h" @@ -35,25 +35,39 @@ using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; -/*namespace o2::aod{ - namespace tree{ - DECLARE_SOA_COLUMN(PT, Pt, float); - DECLARE_SOA_COLUMN(RAP, rap, float); - DECLARE_SOA_COLUMN(PHI, Phi, float); - } // namespace tree - DECLARE_SOA_TABLE(TREE, "AOD", "Tree", - tree::PT, - tree::RAP, - tree::PHI); -}*/ // namespace o2:aod - -DECLARE_SOA_COLUMN(FakeMult, fakeMult, float); +namespace o2::aod +{ +namespace tree +{ +DECLARE_SOA_COLUMN(PTsideA, PtsideA, std::vector); +DECLARE_SOA_COLUMN(RAPsideA, RapsideA, std::vector); +DECLARE_SOA_COLUMN(PHIsideA, PhisideA, std::vector); +DECLARE_SOA_COLUMN(PTsideC, PtsideC, std::vector); +DECLARE_SOA_COLUMN(RAPsideC, RapsideC, std::vector); +DECLARE_SOA_COLUMN(PHIsideC, PhisideC, std::vector); +DECLARE_SOA_COLUMN(NCHsideA, NchsideA, int); +DECLARE_SOA_COLUMN(MULTIPLICITYsideA, MultiplicitysideA, int); +DECLARE_SOA_COLUMN(NCHsideC, NchsideC, int); +DECLARE_SOA_COLUMN(MULTIPLICITYsideC, MultiplicitysideC, int); +} // namespace tree +DECLARE_SOA_TABLE(TREE, "AOD", "Tree", + tree::PTsideA, + tree::RAPsideA, + tree::PHIsideA, + tree::PTsideC, + tree::RAPsideC, + tree::PHIsideC, + tree::NCHsideA, + tree::MULTIPLICITYsideA, + tree::NCHsideC, + tree::MULTIPLICITYsideC); +} // namespace o2::aod static constexpr float cfgPairCutDefaults[1][5] = {{-1, -1, -1, -1, -1}}; struct upcPhotonuclearAnalysisJMG { - //Produces tree; + Produces tree; HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject}; // Declare configurables on events/collisions @@ -62,19 +76,14 @@ struct upcPhotonuclearAnalysisJMG { Configurable myTimeZNCCut{"myTimeZNCCut", 2., {"My collision cut"}}; // Declare configurables on side A gap Configurable cutAGapMyEnergyZNAMax{"cutAGapMyEnergyZNAMax", 0., {"My collision cut. A Gap"}}; - Configurable cutAGapMyAmplitudeFT0AMax{"cutAGapMyAmplitudeFT0AMax", 200., {"My collision cut. A Gap"}}; + // Configurable cutAGapMyAmplitudeFT0AMax{"cutAGapMyAmplitudeFT0AMax", 200., {"My collision cut. A Gap"}}; Configurable cutAGapMyEnergyZNCMin{"cutAGapMyEnergyZNCMin", 1., {"My collision cut. A Gap"}}; - Configurable cutAGapMyAmplitudeFT0CMin{"cutAGapMyAmplitudeFT0CMin", 0., {"My collision cut. A Gap"}}; + // Configurable cutAGapMyAmplitudeFT0CMin{"cutAGapMyAmplitudeFT0CMin", 0., {"My collision cut. A Gap"}}; // Declare configurables on side C gap Configurable cutCGapMyEnergyZNAMin{"cutCGapMyEnergyZNAMin", 1., {"My collision cut. C Gap"}}; - Configurable cutCGapMyAmplitudeFT0AMin{"cutCGapMyAmplitudeFT0AMin", 0., {"My collision cut. A Gap"}}; + // Configurable cutCGapMyAmplitudeFT0AMin{"cutCGapMyAmplitudeFT0AMin", 0., {"My collision cut. A Gap"}}; Configurable cutCGapMyEnergyZNCMax{"cutCGapMyEnergyZNCMax", 0., {"My collision cut. C Gap"}}; - Configurable cutCGapMyAmplitudeFT0CMax{"cutCGapMyAmplitudeFT0CMax", 200., {"My collision cut. A Gap"}}; - // Declare configurables on both side gap - Configurable cutBothGapMyEnergyZNAMax{"cutBothGapMyEnergyZNAMax", 0., {"My collision cut. Both Gap"}}; - Configurable cutBothGapMyAmplitudeFT0AMax{"cutBothGapMyAmplitudeFT0AMax", 200., {"My collision cut. A Gap"}}; - Configurable cutBothGapMyEnergyZNCMax{"cutBothGapMyEnergyZNCMax", 0., {"My collision cut. Both Gap"}}; - Configurable cutBothGapMyAmplitudeFT0CMax{"cutBothGapMyAmplitudeFT0CMax", 200., {"My collision cut. A Gap"}}; + // Configurable cutCGapMyAmplitudeFT0CMax{"cutCGapMyAmplitudeFT0CMax", 200., {"My collision cut. A Gap"}}; // Declare configurables on tracks Configurable cutMyptMin{"cutMyptMin", 0.15, {"My Track cut"}}; Configurable cutMyptMax{"cutMyptMax", 10., {"My Track cut"}}; @@ -93,26 +102,21 @@ struct upcPhotonuclearAnalysisJMG { Configurable cutMyTPCNClsCrossedRowsOverNClsFindableMin{"cutMyTPCNClsCrossedRowsOverNClsFindableMin", 0.8f, {"My Track cut"}}; Configurable cutMyTPCNClsOverFindableNClsMin{"cutMyTPCNClsOverFindableNClsMin", 0.5f, {"My Track cut"}}; Configurable cutMyTPCChi2NclMax{"cutMyTPCChi2NclMax", 4.f, {"My Track cut"}}; - // Declare configurables for correlations - Configurable cfgZVtxCut = {"zvtxcut", 7.0, "Vertex z cut. Default 7 cm"}; - Configurable cfgPtCutMin = {"minpt", 0.2, "Minimum accepted track pT. Default 0.2 GeV"}; - Configurable cfgPtCutMax = {"maxpt", 10.0, "Maximum accepted track pT. Default 5.0 GeV"}; - Configurable cfgEtaCut = {"etacut", 0.8, "Eta cut. Default 0.8"}; Configurable> cfgPairCut{"cfgPairCut", - {cfgPairCutDefaults[0], - 5, - {"Photon", "K0", "Lambda", "Phi", "Rho"}}, - "Pair cuts on various particles"}; + {cfgPairCutDefaults[0], + 5, + {"Photon", "K0", "Lambda", "Phi", "Rho"}}, + "Pair cuts on various particles"}; Configurable cfgTwoTrackCut{"cfgTwoTrackCut", -1, {"Two track cut"}}; - ConfigurableAxis axisVertex{"axisVertex", {7, -7, 7}, "vertex axis for histograms"}; + ConfigurableAxis axisVertex{"axisVertex", {10, -10, 10}, "vertex axis for histograms"}; ConfigurableAxis axisDeltaPhi{"axisDeltaPhi", {72, -constants::math::PIHalf, constants::math::PIHalf * 3}, "delta phi axis for histograms"}; ConfigurableAxis axisDeltaEta{"axisDeltaEta", {40, -2, 2}, "delta eta axis for histograms"}; ConfigurableAxis axisPtTrigger{"axisPtTrigger", {VARIABLE_WIDTH, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 10.0}, "pt trigger axis for histograms"}; ConfigurableAxis axisPtAssoc{"axisPtAssoc", {VARIABLE_WIDTH, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0}, "pt associated axis for histograms"}; - ConfigurableAxis axisMultiplicity{"axisMultiplicity", {VARIABLE_WIDTH, 0, 5, 10, 20, 30, 40, 50, 100.1},"multiplicity / centrality axis for histograms"}; + ConfigurableAxis axisMultiplicity{"axisMultiplicity", {VARIABLE_WIDTH, 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110.1}, "multiplicity / multiplicity axis for histograms"}; ConfigurableAxis axisVertexEfficiency{"axisVertexEfficiency", {10, -10, 10}, "vertex axis for efficiency histograms"}; ConfigurableAxis axisEtaEfficiency{"axisEtaEfficiency", {20, -1.0, 1.0}, "eta axis for efficiency histograms"}; - ConfigurableAxis axisPtEfficiency{"axisPtEfficiency", {VARIABLE_WIDTH, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25,2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0}, "pt axis for efficiency histograms"}; + ConfigurableAxis axisPtEfficiency{"axisPtEfficiency", {VARIABLE_WIDTH, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0}, "pt axis for efficiency histograms"}; Filter collisionZVtxFilter = nabs(aod::collision::posZ) < myZVtxCut; Filter collisionZNTimeFilter = nabs(aod::udzdc::timeZNA) < myTimeZNACut && nabs(aod::udzdc::timeZNC) < myTimeZNCCut; @@ -136,7 +140,7 @@ struct upcPhotonuclearAnalysisJMG { const AxisSpec axisTPCSignal{802, -0.05, 400.05}; const AxisSpec axisPhi{64, -2 * o2::constants::math::PI, 2 * o2::constants::math::PI}; const AxisSpec axisEta{50, -1.2, 1.2}; - const AxisSpec axisNch{101, -0.5, 100.5}; + const AxisSpec axisNch{201, -0.5, 200.5}; const AxisSpec axisZNEnergy{1002, -0.5, 500.5}; const AxisSpec axisZNTime{21, -10.5, 10.5}; const AxisSpec axisFT0Amplitud{201, -0.5, 200.5}; @@ -144,20 +148,20 @@ struct upcPhotonuclearAnalysisJMG { const AxisSpec axisChi2NCls{100, 0, 50}; const AxisSpec axisTPCNClsCrossedRowsMin{100, -0.05, 2.05}; - histos.add("yields", "multiplicity/centrality vs pT vs eta", {HistType::kTH3F, {{100, 0, 100, "/multiplicity/centrality"}, {40, 0, 20, "p_{T}"}, {100, -2, 2, "#eta"}}}); - histos.add("etaphi", "multiplicity/centrality vs eta vs phi", {HistType::kTH3F, {{100, 0, 100, "multiplicity/centrality"}, {100, -2, 2, "#eta"}, {200, 0, 2 * M_PI, "#varphi"}}}); + histos.add("yields", "multiplicity vs pT vs eta", {HistType::kTH3F, {{100, 0, 100, "multiplicity"}, {40, 0, 20, "p_{T}"}, {100, -2, 2, "#eta"}}}); + histos.add("etaphi", "multiplicity vs eta vs phi", {HistType::kTH3F, {{100, 0, 100, "multiplicity"}, {100, -2, 2, "#eta"}, {200, 0, 2 * M_PI, "#varphi"}}}); const int maxMixBin = axisMultiplicity->size() * axisVertex->size(); histos.add("eventcount", "bin", {HistType::kTH1F, {{maxMixBin + 2, -2.5, -0.5 + maxMixBin, "bin"}}}); mPairCuts.SetHistogramRegistry(&histos); if (cfgPairCut->get("Photon") > 0 || cfgPairCut->get("K0") > 0 || cfgPairCut->get("Lambda") > 0 || - cfgPairCut->get("Phi") > 0 || cfgPairCut->get("Rho") > 0) { - mPairCuts.SetPairCut(UPCPairCuts::Photon, cfgPairCut->get("Photon")); - mPairCuts.SetPairCut(UPCPairCuts::K0, cfgPairCut->get("K0")); - mPairCuts.SetPairCut(UPCPairCuts::Lambda, cfgPairCut->get("Lambda")); - mPairCuts.SetPairCut(UPCPairCuts::Phi, cfgPairCut->get("Phi")); - mPairCuts.SetPairCut(UPCPairCuts::Rho, cfgPairCut->get("Rho")); - doPairCuts = true; + cfgPairCut->get("Phi") > 0 || cfgPairCut->get("Rho") > 0) { + mPairCuts.SetPairCut(UPCPairCuts::Photon, cfgPairCut->get("Photon")); + mPairCuts.SetPairCut(UPCPairCuts::K0, cfgPairCut->get("K0")); + mPairCuts.SetPairCut(UPCPairCuts::Lambda, cfgPairCut->get("Lambda")); + mPairCuts.SetPairCut(UPCPairCuts::Phi, cfgPairCut->get("Phi")); + mPairCuts.SetPairCut(UPCPairCuts::Rho, cfgPairCut->get("Rho")); + doPairCuts = true; } histos.add("Events/hCountCollisions", "0 total - 1 side A - 2 side C - 3 both side; Number of analysed collision; counts", kTH1F, {axisCollision}); @@ -180,6 +184,7 @@ struct upcPhotonuclearAnalysisJMG { histos.add("Events/SGsideA/hZVtx", "vertex in z; z (cm); counts", kTH1F, {axisZvtx}); histos.add("Events/SGsideA/hNch", "#it{Charged Tracks Multiplicity} distribution; #it{Charged Tracks Multiplicity}; counts", kTH1F, {axisNch}); + histos.add("Events/SGsideA/hMultiplicity", "#it{Multiplicity} distribution; #it{Multiplicity}; counts", kTH1F, {axisNch}); histos.add("Events/SGsideA/hPtVSNch", "#it{ #LT p_{T} #GT } vs #it{Charged Tracks Multiplicity}; #it{Charged Tracks Multiplicity}; #it{ #LT p_{T} #GT }", kTH2F, {axisNch, axisPt}); histos.add("Events/SGsideA/hEnergyZNA", "Energy in side A distribution; Energy in side A; counts", kTH1F, {axisZNEnergy}); histos.add("Events/SGsideA/hEnergyZNC", "Energy in side C distribution; Energy in side C; counts", kTH1F, {axisZNEnergy}); @@ -209,6 +214,7 @@ struct upcPhotonuclearAnalysisJMG { histos.add("Events/SGsideC/hZVtx", "vertex in z; z (cm); counts", kTH1F, {axisZvtx}); histos.add("Events/SGsideC/hNch", "#it{Charged Tracks Multiplicity} distribution; #it{Charged Tracks Multiplicity}; counts", kTH1F, {axisNch}); + histos.add("Events/SGsideC/hMultiplicity", "#it{Multiplicity} distribution; #it{Multiplicity}; counts", kTH1F, {axisNch}); histos.add("Events/SGsideC/hPtVSNch", "#it{ #LT p_{T} #GT } vs #it{Charged Tracks Multiplicity}; #it{Charged Tracks Multiplicity}; #it{ #LT p_{T} #GT }", kTH2F, {axisNch, axisPt}); histos.add("Events/SGsideC/hEnergyZNA", "Energy in side A distribution; Energy in side A; counts", kTH1F, {axisZNEnergy}); histos.add("Events/SGsideC/hEnergyZNC", "Energy in side C distribution; Energy in side C; counts", kTH1F, {axisZNEnergy}); @@ -220,34 +226,34 @@ struct upcPhotonuclearAnalysisJMG { histos.add("Events/SGsideC/hAmplitudFT0C", "Amplitud in side C distribution; Amplitud in side C; counts", kTH1F, {axisFT0Amplitud}); std::vector corrAxis = {{axisDeltaEta, "#Delta#eta"}, - {axisPtAssoc, "p_{T} (GeV/c)"}, - {axisPtTrigger, "p_{T} (GeV/c)"}, - {axisMultiplicity, "multiplicity / centrality"}, - {axisDeltaPhi, "#Delta#varphi (rad)"}, - {axisVertex, "z-vtx (cm)"}}; + {axisPtAssoc, "p_{T} (GeV/c)"}, + {axisPtTrigger, "p_{T} (GeV/c)"}, + {axisMultiplicity, "multiplicity / multiplicity"}, + {axisDeltaPhi, "#Delta#varphi (rad)"}, + {axisVertex, "z-vtx (cm)"}}; std::vector effAxis = {{axisEtaEfficiency, "#eta"}, - {axisEtaEfficiency, "#eta"}, - {axisPtEfficiency, "p_{T} (GeV/c)"}, - {axisVertexEfficiency, "z-vtx (cm)"}}; + {axisEtaEfficiency, "#eta"}, + {axisPtEfficiency, "p_{T} (GeV/c)"}, + {axisVertexEfficiency, "z-vtx (cm)"}}; same.setObject(new CorrelationContainer("sameEvent", "sameEvent", corrAxis, effAxis, {})); mixed.setObject(new CorrelationContainer("mixedEvent", "mixedEvent", corrAxis, effAxis, {})); } - std::vector vtxBinsEdges{VARIABLE_WIDTH, -10.0f, 0.0f, 10.0f}; + std::vector vtxBinsEdges{VARIABLE_WIDTH, -10.0f, -7.0f, -5.0f, -2.0f, 0.0f, 2.0f, 5.0f, 7.0f, 10.0f}; std::vector multBinsEdges{VARIABLE_WIDTH, 0.0f, 50.0f, 400.0f}; SliceCache cache; - // Binning only on PosZ without centrality + // Binning only on PosZ without multiplicity using BinningType = ColumnBinningPolicy; BinningType bindingOnVtx{{vtxBinsEdges}, true}; SameKindPair pairs{bindingOnVtx, 5, -1, &cache}; - //ColumnBinningPolicy bindingOnVtx{{vtxBinsEdges, multBinsEdges}, true}; + // ColumnBinningPolicy bindingOnVtx{{vtxBinsEdges, multBinsEdges}, true}; - /*SameKindPair, - FullUDTracks, - ColumnBinningPolicy> - pair{bindingOnVtx, 5, -1, &cache};*/ + // SameKindPair, + // FullUDTracks, + // ColumnBinningPolicy> + // pair{bindingOnVtx, 5, -1, &cache}; template bool isCollisionCutSG(CSG const& collision, int SideGap) @@ -257,17 +263,17 @@ struct upcPhotonuclearAnalysisJMG { if ((collision.energyCommonZNA() < cutAGapMyEnergyZNAMax && collision.energyCommonZNC() >= cutAGapMyEnergyZNCMin) == false) { // 0n - A side && Xn - C Side return false; } - /*if ((collision.totalFT0AmplitudeA() < cutAGapMyAmplitudeFT0AMax && collision.totalFT0AmplitudeC() >= cutAGapMyAmplitudeFT0CMin) == false) { - return false; - }*/ + // if ((collision.totalFT0AmplitudeA() < cutAGapMyAmplitudeFT0AMax && collision.totalFT0AmplitudeC() >= cutAGapMyAmplitudeFT0CMin) == false) { + // return false; + // } break; case 1: // Gap in C side if ((collision.energyCommonZNA() >= cutCGapMyEnergyZNAMin && collision.energyCommonZNC() < cutCGapMyEnergyZNCMax) == false) { // Xn - A side && 0n - C Side return false; } - /*if ((collision.totalFT0AmplitudeA() >= cutCGapMyAmplitudeFT0AMin && collision.totalFT0AmplitudeC() < cutCGapMyAmplitudeFT0CMax) == false) { - return false; - }*/ + // if ((collision.totalFT0AmplitudeA() >= cutCGapMyAmplitudeFT0AMin && collision.totalFT0AmplitudeC() < cutCGapMyAmplitudeFT0CMax) == false) { + // return false; + // } break; } return true; @@ -332,34 +338,41 @@ struct upcPhotonuclearAnalysisJMG { } template - void fillQAUD(TCollision collision, float centrality, TTracks tracks) + void fillQAUD(TCollision collision, float multiplicity, TTracks tracks) { for (auto& track : tracks) { - histos.fill(HIST("yields"), centrality, track.pt(), eta(track.px(), track.py(), track.pz())); - histos.fill(HIST("etaphi"), centrality, eta(track.px(), track.py(), track.pz()), phi(track.px(), track.py())); + histos.fill(HIST("yields"), tracks.size(), track.pt(), eta(track.px(), track.py(), track.pz())); + histos.fill(HIST("etaphi"), tracks.size(), eta(track.px(), track.py(), track.pz()), phi(track.px(), track.py())); } } template - bool fillCollisionUD(TTarget target, TCollision collision, float centrality) + bool fillCollisionUD(TTarget target, TCollision collision, float multiplicity) { - target->fillEvent(centrality, CorrelationContainer::kCFStepAll); + target->fillEvent(multiplicity, CorrelationContainer::kCFStepAll); /*if (!collision.alias_bit(kINT7) || !collision.sel7()) { return false; }*/ - target->fillEvent(centrality, CorrelationContainer::kCFStepReconstructed); + target->fillEvent(multiplicity, CorrelationContainer::kCFStepReconstructed); return true; } template - void fillCorrelationsUD(TTarget target, TTracks tracks1, TTracks tracks2, float centrality, float posZ) + void fillCorrelationsUD(TTarget target, TTracks tracks1, TTracks tracks2, float multiplicity, float posZ) { + multiplicity = tracks1.size(); for (auto& track1 : tracks1) { - target->getTriggerHist()->Fill(CorrelationContainer::kCFStepReconstructed, track1.pt(), centrality, posZ, 1.0); + if (isTrackCut(track1) == false) { + continue; + } + target->getTriggerHist()->Fill(CorrelationContainer::kCFStepReconstructed, track1.pt(), multiplicity, posZ, 1.0); for (auto& track2 : tracks2) { if (track1 == track2) { continue; } + if (isTrackCut(track2) == false) { + continue; + } /*if (doPairCuts && mPairCuts.conversionCuts(track1, track2)) { continue; }*/ @@ -370,7 +383,7 @@ struct upcPhotonuclearAnalysisJMG { if (deltaPhi < -PIHalf) { deltaPhi += TwoPI; } - target->getPairHist()->Fill(CorrelationContainer::kCFStepReconstructed, eta(track1.px(), track1.py(), track1.pz()) - eta(track2.px(), track2.py(), track2.pz()), track2.pt(), track1.pt(), centrality, deltaPhi, posZ, 1.0); + target->getPairHist()->Fill(CorrelationContainer::kCFStepReconstructed, eta(track1.px(), track1.py(), track1.pz()) - eta(track2.px(), track2.py(), track2.pz()), track2.pt(), track1.pt(), multiplicity, deltaPhi, posZ, 1.0); } } } @@ -381,9 +394,11 @@ struct upcPhotonuclearAnalysisJMG { int SGside = reconstructedCollision.gapSide(); int nTracksCharged = 0; float sumPt = 0; - int multiplicity = 0; + std::vector vTrackPtSideA, vTrackEtaSideA, vTrackPhiSideA; + std::vector vTrackPtSideC, vTrackEtaSideC, vTrackPhiSideC; + int nTracksChargedSideA(-222), nTracksChargedSideC(-222); + int multiplicitySideA(-222), multiplicitySideC(-222); - //float centrality = 50.0; switch (SGside) { case 0: // gap for side A if (isCollisionCutSG(reconstructedCollision, 0) == false) { @@ -406,12 +421,13 @@ struct upcPhotonuclearAnalysisJMG { } nTracksCharged++; sumPt += track.pt(); - // filling tree - //tree(track.pt(), eta(track.px(), track.py(), track.pz()), phi(track.px(), track.py())); histos.fill(HIST("Tracks/SGsideA/hTrackPt"), track.pt()); histos.fill(HIST("Tracks/SGsideA/hTrackPhi"), phi(track.px(), track.py())); histos.fill(HIST("Tracks/SGsideA/hTrackEta"), eta(track.px(), track.py(), track.pz())); histos.fill(HIST("Tracks/SGsideA/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz()) * track.sign(), track.tpcSignal()); + vTrackPtSideA.push_back(track.pt()); + vTrackEtaSideA.push_back(eta(track.px(), track.py(), track.pz())); + vTrackPhiSideA.push_back(phi(track.px(), track.py())); histos.fill(HIST("Tracks/SGsideA/hTrackITSNCls"), track.itsNCls()); histos.fill(HIST("Tracks/SGsideA/hTrackITSChi2NCls"), track.itsChi2NCl()); @@ -424,14 +440,13 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Tracks/SGsideA/hTrackTPCNClsFindableMinusCrossedRows"), track.tpcNClsFindableMinusCrossedRows()); histos.fill(HIST("Tracks/SGsideA/hTrackTPCChi2NCls"), track.tpcChi2NCl()); histos.fill(HIST("Tracks/SGsideA/hTrackITSNClsTPCCls"), track.tpcNClsFindable() - track.tpcNClsFindableMinusFound(), track.itsNCls()); - - //histos.fill(HIST("yields"), centrality, track.pt(), eta(track.px(), track.py(), track.pz())); - //histos.fill(HIST("etaphi"), centrality, eta(track.px(), track.py(), track.pz()), phi(track.px(), track.py())); } } - multiplicity = nTracksCharged; histos.fill(HIST("Events/SGsideA/hNch"), nTracksCharged); + histos.fill(HIST("Events/SGsideA/hMultiplicity"), reconstructedTracks.size()); histos.fill(HIST("Events/SGsideA/hPtVSNch"), nTracksCharged, (sumPt / nTracksCharged)); + nTracksChargedSideA = nTracksCharged; + multiplicitySideA = reconstructedTracks.size(); nTracksCharged = sumPt = 0; break; case 1: // gap for side C @@ -459,6 +474,9 @@ struct upcPhotonuclearAnalysisJMG { histos.fill(HIST("Tracks/SGsideC/hTrackPhi"), phi(track.px(), track.py())); histos.fill(HIST("Tracks/SGsideC/hTrackEta"), eta(track.px(), track.py(), track.pz())); histos.fill(HIST("Tracks/SGsideC/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz()) * track.sign(), track.tpcSignal()); + vTrackPtSideC.push_back(track.pt()); + vTrackEtaSideC.push_back(eta(track.px(), track.py(), track.pz())); + vTrackPhiSideC.push_back(phi(track.px(), track.py())); histos.fill(HIST("Tracks/SGsideC/hTrackITSNCls"), track.itsNCls()); histos.fill(HIST("Tracks/SGsideC/hTrackITSChi2NCls"), track.itsChi2NCl()); @@ -474,13 +492,18 @@ struct upcPhotonuclearAnalysisJMG { } } histos.fill(HIST("Events/SGsideC/hNch"), nTracksCharged); + histos.fill(HIST("Events/SGsideC/hMultiplicity"), reconstructedTracks.size()); histos.fill(HIST("Events/SGsideC/hPtVSNch"), nTracksCharged, (sumPt / nTracksCharged)); + nTracksChargedSideC = nTracksCharged; + multiplicitySideC = reconstructedTracks.size(); nTracksCharged = sumPt = 0; break; default: return; break; } + tree(vTrackPtSideA, vTrackEtaSideA, vTrackPhiSideA, vTrackPtSideC, vTrackEtaSideC, vTrackPhiSideC, nTracksChargedSideA, multiplicitySideA, nTracksChargedSideC, multiplicitySideC); + // nTracksChargedSideA = nTracksChargedSideC = multiplicitySideA = multiplicitySideC = 0; } PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processSG, "Process in UD tables", true); @@ -488,24 +511,24 @@ struct upcPhotonuclearAnalysisJMG { { int SGside = reconstructedCollision.gapSide(); - float centrality = 100.0; + float multiplicity = reconstructedTracks.size(); switch (SGside) { case 0: // gap for side A if (isCollisionCutSG(reconstructedCollision, 0) == false) { return; } - if (fillCollisionUD(same, reconstructedCollision, centrality) == false) { + if (fillCollisionUD(same, reconstructedCollision, multiplicity) == false) { return; } LOGF(info, "Filling same events"); histos.fill(HIST("eventcount"), -2); - fillQAUD(reconstructedCollision, centrality, reconstructedTracks); - fillCorrelationsUD(same, reconstructedTracks, reconstructedTracks, centrality, reconstructedCollision.posZ()); + fillQAUD(reconstructedCollision, multiplicity, reconstructedTracks); + fillCorrelationsUD(same, reconstructedTracks, reconstructedTracks, multiplicity, reconstructedCollision.posZ()); break; case 1: // gap for side C - if (isCollisionCutSG(reconstructedCollision, 1) == false) { - return; - } + // if (isCollisionCutSG(reconstructedCollision, 1) == false) { + // return; + // } break; default: return; @@ -515,45 +538,41 @@ struct upcPhotonuclearAnalysisJMG { PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processSame, "Process same event", true); - void processMixed(FullSGUDCollision const& reconstructedCollision, FullUDTracks const& reconstructedTracks) + void processMixed(FullSGUDCollision::iterator const& reconstructedCollision, FullUDTracks const& reconstructedTracks) { - //int SGside = reconstructedCollision::iterator.gapSide(); - int SGside = 0; + int SGside = reconstructedCollision.gapSide(); + // int SGside = 0; - //LOGF(info, "Process mixed events"); - //LOGF(info, ">>> Collision posZ: %f", reconstructedCollision.posZ()); for (auto& [collision1, tracks1, collision2, tracks2] : pairs) { if (collision1.size() == 0 || collision2.size() == 0) { LOGF(info, "One or both collisions are empty."); continue; } - //LOGF(info, "Mixed event collisions: (%d, %d)", collision1.globalIndex(), collision2.globalIndex()); - float centrality = 100.0; + float multiplicity = tracks1.size(); LOGF(info, "Filling mixed events"); switch (SGside) { case 0: // gap for side A - /*if (isCollisionCutSG(reconstructedCollision, 0) == false) { + if (isCollisionCutSG(reconstructedCollision, 0) == false) { return; - }*/ - if (fillCollisionUD(mixed, collision1, centrality) == false) { + } + if (fillCollisionUD(mixed, collision1, multiplicity) == false) { return; } - //LOGF(info, ">>> Bin of collision: ", bindingOnVtx.getBin({collision1.posZ()})); - //histos.fill(HIST("eventcount"), bindingOnVtx.getBin({collision1.posZ(), collision1.totalFT0AmplitudeC()})); + // LOGF(info, ">>> Bin of collision: ", bindingOnVtx.getBin({collision1.posZ()})); + // histos.fill(HIST("eventcount"), bindingOnVtx.getBin({collision1.posZ(), collision1.totalFT0AmplitudeC()})); histos.fill(HIST("eventcount"), bindingOnVtx.getBin({collision1.posZ()})); - fillCorrelationsUD(mixed, tracks1, tracks2, centrality, collision1.posZ()); + fillCorrelationsUD(mixed, tracks1, tracks2, multiplicity, collision1.posZ()); break; case 1: // gap for side C - /*if (isCollisionCutSG(reconstructedCollision, 1) == false) { - return; - }*/ + // if (isCollisionCutSG(reconstructedCollision, 1) == false) { + // return; + // } break; default: return; break; } } - } PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processMixed, "Process mixed events", true); From 5a137f4b8b32b01e9703136263190ea6747beb61 Mon Sep 17 00:00:00 2001 From: josue-MiniPC-Ubuntu Date: Fri, 23 May 2025 06:42:46 -0600 Subject: [PATCH 15/22] formatting issues --- .../src/firstcfcorrelations.cxx | 146 +----------------- 1 file changed, 7 insertions(+), 139 deletions(-) diff --git a/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx b/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx index b3e076a8421..c6df8c737da 100644 --- a/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx +++ b/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx @@ -30,171 +30,39 @@ using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; -static constexpr float cfgPairCutDefaults[1][5] = {{-1, -1, -1, -1, -1}}; - struct firstcorrelations { - // Declare configurables for correlations - Configurable cfgZVtxCut = {"zvtxcut", 7.0, "Vertex z cut. Default 7 cm"}; - Configurable cfgPtCutMin = {"minpt", 0.2, "Minimum accepted track pT. Default 0.2 GeV"}; - Configurable cfgPtCutMax = {"maxpt", 10.0, "Maximum accepted track pT. Default 5.0 GeV"}; - Configurable cfgEtaCut = {"etacut", 0.8, "Eta cut. Default 0.8"}; - Configurable> cfgPairCut{"cfgPairCut", - {cfgPairCutDefaults[0], - 5, - {"Photon", "K0", "Lambda", "Phi", "Rho"}}, - "Pair cuts on various particles"}; - //Configurable cfgTwoTrackCut{"cfgTwoTrackCut", -1, {"Two track cut"}}; - ConfigurableAxis axisVertex{"axisVertex", {7, -7, 7}, "vertex axis for histograms"}; - ConfigurableAxis axisDeltaPhi{"axisDeltaPhi", {72, -constants::math::PIHalf, constants::math::PIHalf * 3}, "delta phi axis for histograms"}; - ConfigurableAxis axisDeltaEta{"axisDeltaEta", {40, -2, 2}, "delta eta axis for histograms"}; - ConfigurableAxis axisPtTrigger{"axisPtTrigger", {VARIABLE_WIDTH, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 10.0}, "pt trigger axis for histograms"}; - ConfigurableAxis axisPtAssoc{"axisPtAssoc", {VARIABLE_WIDTH, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0}, "pt associated axis for histograms"}; - ConfigurableAxis axisMultiplicity{"axisMultiplicity", {VARIABLE_WIDTH, 0, 5, 10, 20, 30, 40, 50, 100.1},"multiplicity / centrality axis for histograms"}; - ConfigurableAxis axisVertexEfficiency{"axisVertexEfficiency", {10, -10, 10}, "vertex axis for efficiency histograms"}; - ConfigurableAxis axisEtaEfficiency{"axisEtaEfficiency", {20, -1.0, 1.0}, "eta axis for efficiency histograms"}; - ConfigurableAxis axisPtEfficiency{"axisPtEfficiency", {VARIABLE_WIDTH, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25,2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0}, "pt axis for efficiency histograms"}; - - // Output definitions - OutputObj same{"sameEvent"}; - OutputObj mixed{"mixedEvent"}; - HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject}; - PairCuts mPairCuts; - bool doPairCuts = false; - void init(InitContext&) { LOGF(info, "Starting init"); - histos.add("yields", "multiplicity/centrality vs pT vs eta", {HistType::kTH3F, {{100, 0, 100, "/multiplicity/centrality"}, {40, 0, 20, "p_{T}"}, {100, -2, 2, "#eta"}}}); - histos.add("etaphi", "multiplicity/centrality vs eta vs phi", {HistType::kTH3F, {{100, 0, 100, "multiplicity/centrality"}, {100, -2, 2, "#eta"}, {200, 0, 2 * M_PI, "#varphi"}}}); - - const int maxMixBin = axisMultiplicity->size() * axisVertex->size(); - histos.add("eventcount", "bin", {HistType::kTH1F, {{maxMixBin + 2, -2.5, -0.5 + maxMixBin, "bin"}}}); - mPairCuts.SetHistogramRegistry(&histos); - if (cfgPairCut->get("Photon") > 0 || cfgPairCut->get("K0") > 0 || cfgPairCut->get("Lambda") > 0 || - cfgPairCut->get("Phi") > 0 || cfgPairCut->get("Rho") > 0) { - mPairCuts.SetPairCut(PairCuts::Photon, cfgPairCut->get("Photon")); - mPairCuts.SetPairCut(PairCuts::K0, cfgPairCut->get("K0")); - mPairCuts.SetPairCut(PairCuts::Lambda, cfgPairCut->get("Lambda")); - mPairCuts.SetPairCut(PairCuts::Phi, cfgPairCut->get("Phi")); - mPairCuts.SetPairCut(PairCuts::Rho, cfgPairCut->get("Rho")); - doPairCuts = true; - } - - std::vector corrAxis = {{axisDeltaEta, "#Delta#eta"}, - {axisPtAssoc, "p_{T} (GeV/c)"}, - {axisPtTrigger, "p_{T} (GeV/c)"}, - {axisMultiplicity, "multiplicity / centrality"}, - {axisDeltaPhi, "#Delta#varphi (rad)"}, - {axisVertex, "z-vtx (cm)"}}; - std::vector effAxis = {{axisEtaEfficiency, "#eta"}, - {axisEtaEfficiency, "#eta"}, - {axisPtEfficiency, "p_{T} (GeV/c)"}, - {axisVertexEfficiency, "z-vtx (cm)"}}; - same.setObject(new CorrelationContainer("sameEvent", "sameEvent", corrAxis, effAxis, {})); - mixed.setObject(new CorrelationContainer("mixedEvent", "mixedEvent", corrAxis, effAxis, {})); LOGF(info, "Finishing init"); } - std::vector vtxBinsEdges{VARIABLE_WIDTH, -7.0f, -5.0f, -3.0f, -1.0f, 1.0f, 3.0f, 5.0f, 7.0f}; - std::vector multBinsEdges{VARIABLE_WIDTH, 0.0f, 5.0f, 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 100.0f}; - SliceCache cache; - - ColumnBinningPolicy bindingOnVtxAndMult{{vtxBinsEdges, multBinsEdges}, true}; // true is for ’ignore overflows’ (true by default) - - SameKindPair>, - soa::Filtered>, - ColumnBinningPolicy> - pair{bindingOnVtxAndMult, 10, -1, &cache}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored - - Filter collisionZVtxFilter = nabs(aod::collision::posZ) < cfgZVtxCut; - Filter trackFilter = (nabs(aod::track::eta) < cfgEtaCut) && (aod::track::pt > cfgPtCutMin) && (aod::track::pt < cfgPtCutMax) && (requireGlobalTrackInFilter() || (aod::track::isGlobalTrackSDD == (uint8_t) true)); - template - void fillQA(TCollision collision, float centrality, TTracks tracks) + void fillQA(TCollision /*collision*/, float /*centrality*/, TTracks /*tracks*/) { - for (auto& track: tracks) { - histos.fill(HIST("yields"), centrality, track.pt(), track.eta()); - histos.fill(HIST("etaphi"), centrality, track.eta(), track.phi()); - } } template - bool fillCollision(TTarget target, TCollision collision, float centrality) + bool fillCollision(TTarget /*target*/, TCollision /*collision*/, float /*centrality*/) { - target->fillEvent(centrality, CorrelationContainer::kCFStepAll); - - if (!collision.alias_bit(kINT7) || !collision.sel7()){ - return false; - } - - target->fillEvent(centrality, CorrelationContainer::kCFStepReconstructed); return true; } template - void fillCorrelations(TTarget target, TTracks tracks1, TTracks tracks2, float centrality, float posZ) + void fillCorrelations(TTarget /*target*/, TTracks /*tracks1*/, TTracks /*tracks2*/, float /*centrality*/, float /*posZ*/) { - for (auto& track1 : tracks1) { - target->getTriggerHist()->Fill(CorrelationContainer::kCFStepReconstructed, track1.pt(), centrality, posZ, 1.0); - for (auto& track2 : tracks2) { - if (track1 == track2) { - continue; - } - if (doPairCuts && mPairCuts.conversionCuts(track1, track2)) { - continue; - } - float deltaPhi = track1.phi() - track2.phi(); - if (deltaPhi > 1.5f * PI) { - deltaPhi -= TwoPI; - } - if (deltaPhi < -PIHalf) { - deltaPhi += TwoPI; - } - target->getPairHist()->Fill(CorrelationContainer::kCFStepReconstructed,track1.eta() - track2.eta(), track2.pt(), track1.pt(), centrality, deltaPhi, posZ,1.0); - } - } } - void processSame(soa::Filtered>::iterator const& collision, soa::Filtered> const& tracks) + void processSame() { - const auto centrality = collision.centRun2V0M(); - if (fillCollision(same, collision, centrality) == false) { - return; - } - LOGF(info, "Filling same events"); - histos.fill(HIST("eventcount"), -2); - fillQA(collision, centrality, tracks); - fillCorrelations(same, tracks, tracks, centrality, collision.posZ()); } - PROCESS_SWITCH(firstcorrelations, processSame, "Process same event", true); - - void processMixed(soa::Filtered>::iterator const& collisions, soa::Filtered> const& tracks) + void processMixed() { - for (auto& [collision1, tracks1, collision2, tracks2] : pair) { - if (fillCollision(mixed, collision1, collision1.centRun2V0M()) == false) { - continue; - } - LOGF(info, "Filling mixed events"); - histos.fill(HIST("eventcount"), bindingOnVtxAndMult.getBin({collision1.posZ(), collision1.centRun2V0M()})); - fillCorrelations(mixed, tracks1, tracks2, collision1.centRun2V0M(), collision1.posZ()); - } } - - PROCESS_SWITCH(firstcorrelations, processMixed, "Process mixed events", true); - - void process(soa::Join::iterator const& collision, aod::Tracks const& tracks) + void process(aod::Collision const&, aod::Tracks const&) { - LOGF(info, "Received %d collisions", collision.size()); - - const auto centrality = collision.centRun2V0M(); - - if (fillCollision(same, collision, centrality) == false) { - return; - } - histos.fill(HIST("eventcount"), -2); - fillQA(collision, centrality, tracks); } }; @@ -203,4 +71,4 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) return WorkflowSpec{ adaptAnalysisTask(cfgc), }; -} +} \ No newline at end of file From 5b6cd2a2c5f9369c4d43c5471628c55f69f6a785 Mon Sep 17 00:00:00 2001 From: josue-MiniPC-Ubuntu Date: Fri, 23 May 2025 06:46:06 -0600 Subject: [PATCH 16/22] formatting issues --- PWGUD/Core/UPCPairCuts.h | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/PWGUD/Core/UPCPairCuts.h b/PWGUD/Core/UPCPairCuts.h index 8d020276f07..7676b8b4db5 100644 --- a/PWGUD/Core/UPCPairCuts.h +++ b/PWGUD/Core/UPCPairCuts.h @@ -30,17 +30,17 @@ using namespace constants::math; class UPCPairCuts { -public: - enum Particle { Photon = 0, + public: + enum Particle { Photon = 0, K0, Lambda, Phi, Rho, ParticlesLastEntry }; - void SetHistogramRegistry(HistogramRegistry* registry) { histogramRegistry = registry; } + void SetHistogramRegistry(HistogramRegistry* registry) { histogramRegistry = registry; } - void SetPairCut(Particle particle, float cut) + void SetPairCut(Particle particle, float cut) { LOGF(info, "Enabled pair cut for %d with value %f", static_cast(particle), cut); mCuts[particle] = cut; @@ -66,11 +66,12 @@ class UPCPairCuts template bool twoTrackCut(T const& track1, T const& track2); -protected: + + protected: float mCuts[ParticlesLastEntry] = {-1}; float mTwoTrackDistance = -1; // distance below which the pair is flagged as to be removed float mTwoTrackRadius = 0.8f; // radius at which the two track cuts are applied - int magField = 5; // magField: B field in kG + int magField = 5; // magField: B field in kG HistogramRegistry* histogramRegistry = nullptr; // if set, control histograms are stored here @@ -149,7 +150,7 @@ bool UPCPairCuts::twoTrackCut(T const& track1, T const& track2) } if (dphistarminabs < mTwoTrackDistance && std::fabs(deta) < mTwoTrackDistance) { - //LOGF(debug, "Removed track pair %ld %ld with %f %f %f %f %d %f %f %d %d", track1.index(), track2.index(), deta, dphistarminabs, track1.phi2(), track1.pt(), track1.sign(), track2.phi2(), track2.pt(), track2.sign(), magField); + // LOGF(debug, "Removed track pair %ld %ld with %f %f %f %f %d %f %f %d %d", track1.index(), track2.index(), deta, dphistarminabs, track1.phi2(), track1.pt(), track1.sign(), track2.phi2(), track2.pt(), track2.sign(), magField); return true; } @@ -165,7 +166,7 @@ bool UPCPairCuts::twoTrackCut(T const& track1, T const& track2) template bool UPCPairCuts::conversionCut(T const& track1, T const& track2, Particle conv, double cut) { - //LOGF(info, "pt is %f %f", track1.pt(), track2.pt()); + // LOGF(info, "pt is %f %f", track1.pt(), track2.pt()); if (cut < 0) { return false; @@ -306,7 +307,7 @@ double UPCPairCuts::getInvMassSquaredFast(T const& track1, double m0_1, T const& double mass2 = m0_1 * m0_1 + m0_2 * m0_2 + 2.0f * (std::sqrt(e1squ * e2squ) - (pt1 * pt2 * (cosDeltaPhi + 1.0f / tantheta1 / tantheta2))); - //LOGF(debug, "%f %f %f %f %f %f %f %f %f", pt1, eta1, phi1, pt2, eta2, phi2, m0_1, m0_2, mass2); + // LOGF(debug, "%f %f %f %f %f %f %f %f %f", pt1, eta1, phi1, pt2, eta2, phi2, m0_1, m0_2, mass2); return mass2; } @@ -341,4 +342,4 @@ float UPCPairCuts::getDPhiStar(T const& track1, T const& track2, float radius, i return dphistar; } -#endif \ No newline at end of file +#endif From 0ae71ee7981a0bad370abe30947f8dfd40d54590 Mon Sep 17 00:00:00 2001 From: josue-MiniPC-Ubuntu Date: Fri, 23 May 2025 06:50:04 -0600 Subject: [PATCH 17/22] formatting issues --- .../PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx b/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx index c6df8c737da..cdec4f3ca95 100644 --- a/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx +++ b/Tutorials/PWGCF/TwoParticleCorrelations/src/firstcfcorrelations.cxx @@ -71,4 +71,4 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) return WorkflowSpec{ adaptAnalysisTask(cfgc), }; -} \ No newline at end of file +} From aea10e21a31f929e6aa8cefd2bea28ac58e0b452 Mon Sep 17 00:00:00 2001 From: josue-MiniPC-Ubuntu Date: Mon, 26 May 2025 14:24:35 -0600 Subject: [PATCH 18/22] resolving issues --- PWGUD/Core/UPCPairCuts.h | 6 ++--- PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 26 ++++++++++------------ 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/PWGUD/Core/UPCPairCuts.h b/PWGUD/Core/UPCPairCuts.h index 7676b8b4db5..03644b7ce4b 100644 --- a/PWGUD/Core/UPCPairCuts.h +++ b/PWGUD/Core/UPCPairCuts.h @@ -9,8 +9,8 @@ // granted to it by virtue of its status as an Intergovernmental Organization // or submit itself to any jurisdiction. -#ifndef O2_ANALYSIS_PAIRCUTS_H -#define O2_ANALYSIS_PAIRCUTS_H +#ifndef PWGUD_CORE_UPCPAIRCUTS_H_ +#define PWGUD_CORE_UPCPAIRCUTS_H_ #include @@ -342,4 +342,4 @@ float UPCPairCuts::getDPhiStar(T const& track1, T const& track2, float radius, i return dphistar; } -#endif +#endif // PWGUD_CORE_UPCPAIRCUTS_H_ diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index 87aee4f9203..85519b14a12 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -17,7 +17,8 @@ #include "Framework/runDataProcessing.h" #include "CCDB/BasicCCDBManager.h" #include "Framework/StepTHn.h" -// #include +#include +#include #include "Common/CCDB/EventSelectionParams.h" #include "Common/Core/TrackSelection.h" @@ -337,8 +338,8 @@ struct upcPhotonuclearAnalysisJMG { return true; } - template - void fillQAUD(TCollision collision, float multiplicity, TTracks tracks) + template + void fillQAUD(TTracks tracks) { for (auto& track : tracks) { histos.fill(HIST("yields"), tracks.size(), track.pt(), eta(track.px(), track.py(), track.pz())); @@ -346,13 +347,10 @@ struct upcPhotonuclearAnalysisJMG { } } - template - bool fillCollisionUD(TTarget target, TCollision collision, float multiplicity) + template + bool fillCollisionUD(TTarget target, float multiplicity) { target->fillEvent(multiplicity, CorrelationContainer::kCFStepAll); - /*if (!collision.alias_bit(kINT7) || !collision.sel7()) { - return false; - }*/ target->fillEvent(multiplicity, CorrelationContainer::kCFStepReconstructed); return true; } @@ -373,9 +371,9 @@ struct upcPhotonuclearAnalysisJMG { if (isTrackCut(track2) == false) { continue; } - /*if (doPairCuts && mPairCuts.conversionCuts(track1, track2)) { + if (doPairCuts && mPairCuts.conversionCuts(track1, track2)) { continue; - }*/ + } float deltaPhi = phi(track1.px(), track1.py()) - phi(track2.px(), track2.py()); if (deltaPhi > 1.5f * PI) { deltaPhi -= TwoPI; @@ -517,12 +515,12 @@ struct upcPhotonuclearAnalysisJMG { if (isCollisionCutSG(reconstructedCollision, 0) == false) { return; } - if (fillCollisionUD(same, reconstructedCollision, multiplicity) == false) { + if (fillCollisionUD(same, multiplicity) == false) { return; } LOGF(info, "Filling same events"); histos.fill(HIST("eventcount"), -2); - fillQAUD(reconstructedCollision, multiplicity, reconstructedTracks); + fillQAUD(reconstructedTracks); fillCorrelationsUD(same, reconstructedTracks, reconstructedTracks, multiplicity, reconstructedCollision.posZ()); break; case 1: // gap for side C @@ -538,7 +536,7 @@ struct upcPhotonuclearAnalysisJMG { PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processSame, "Process same event", true); - void processMixed(FullSGUDCollision::iterator const& reconstructedCollision, FullUDTracks const& reconstructedTracks) + void processMixed(FullSGUDCollision::iterator const& reconstructedCollision) { int SGside = reconstructedCollision.gapSide(); // int SGside = 0; @@ -555,7 +553,7 @@ struct upcPhotonuclearAnalysisJMG { if (isCollisionCutSG(reconstructedCollision, 0) == false) { return; } - if (fillCollisionUD(mixed, collision1, multiplicity) == false) { + if (fillCollisionUD(mixed, multiplicity) == false) { return; } // LOGF(info, ">>> Bin of collision: ", bindingOnVtx.getBin({collision1.posZ()})); From 80fff5f692c5a87130f318a4b13f20048e406436 Mon Sep 17 00:00:00 2001 From: josue-MiniPC-Ubuntu Date: Mon, 26 May 2025 14:58:44 -0600 Subject: [PATCH 19/22] resolving issues --- PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 68 +++++++++++----------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index 85519b14a12..019de8676bc 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -19,6 +19,7 @@ #include "Framework/StepTHn.h" #include #include +#include "CommonConstants/MathConstants.h" #include "Common/CCDB/EventSelectionParams.h" #include "Common/Core/TrackSelection.h" @@ -36,35 +37,36 @@ using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; +using namespace constants::math; namespace o2::aod { namespace tree { -DECLARE_SOA_COLUMN(PTsideA, PtsideA, std::vector); -DECLARE_SOA_COLUMN(RAPsideA, RapsideA, std::vector); -DECLARE_SOA_COLUMN(PHIsideA, PhisideA, std::vector); -DECLARE_SOA_COLUMN(PTsideC, PtsideC, std::vector); -DECLARE_SOA_COLUMN(RAPsideC, RapsideC, std::vector); -DECLARE_SOA_COLUMN(PHIsideC, PhisideC, std::vector); -DECLARE_SOA_COLUMN(NCHsideA, NchsideA, int); -DECLARE_SOA_COLUMN(MULTIPLICITYsideA, MultiplicitysideA, int); -DECLARE_SOA_COLUMN(NCHsideC, NchsideC, int); -DECLARE_SOA_COLUMN(MULTIPLICITYsideC, MultiplicitysideC, int); +DECLARE_SOA_COLUMN(PtSideA, ptSideA, std::vector); +DECLARE_SOA_COLUMN(RapSideA, rapSideA, std::vector); +DECLARE_SOA_COLUMN(PhiSideA, phiSideA, std::vector); +DECLARE_SOA_COLUMN(PtSideC, ptSideC, std::vector); +DECLARE_SOA_COLUMN(RapSideC, rapSideC, std::vector); +DECLARE_SOA_COLUMN(PhiSideC, phiSideC, std::vector); +DECLARE_SOA_COLUMN(NchSideA, nchSideA, int); +DECLARE_SOA_COLUMN(MultiplicitySideA, multiplicitySideA, int); +DECLARE_SOA_COLUMN(NchSideC, nchSideC, int); +DECLARE_SOA_COLUMN(MultiplicitySideC, multiplicitySideC, int); } // namespace tree DECLARE_SOA_TABLE(TREE, "AOD", "Tree", - tree::PTsideA, - tree::RAPsideA, - tree::PHIsideA, - tree::PTsideC, - tree::RAPsideC, - tree::PHIsideC, - tree::NCHsideA, - tree::MULTIPLICITYsideA, - tree::NCHsideC, - tree::MULTIPLICITYsideC); + tree::PtSideA, + tree::RapSideA, + tree::PhiSideA, + tree::PtSideC, + tree::RapSideC, + tree::PhiSideC, + tree::NchSideA, + tree::MultiplicitySideA, + tree::NchSideC, + tree::MultiplicitySideC); } // namespace o2::aod -static constexpr float cfgPairCutDefaults[1][5] = {{-1, -1, -1, -1, -1}}; +static constexpr float CFGPairCutDefaults[1][5] = {{-1, -1, -1, -1, -1}}; struct upcPhotonuclearAnalysisJMG { @@ -104,7 +106,7 @@ struct upcPhotonuclearAnalysisJMG { Configurable cutMyTPCNClsOverFindableNClsMin{"cutMyTPCNClsOverFindableNClsMin", 0.5f, {"My Track cut"}}; Configurable cutMyTPCChi2NclMax{"cutMyTPCChi2NclMax", 4.f, {"My Track cut"}}; Configurable> cfgPairCut{"cfgPairCut", - {cfgPairCutDefaults[0], + {CFGPairCutDefaults[0], 5, {"Photon", "K0", "Lambda", "Phi", "Rho"}}, "Pair cuts on various particles"}; @@ -139,7 +141,7 @@ struct upcPhotonuclearAnalysisJMG { const AxisSpec axisPt{402, -0.05, 20.05}; const AxisSpec axisP{402, -10.05, 10.05}; const AxisSpec axisTPCSignal{802, -0.05, 400.05}; - const AxisSpec axisPhi{64, -2 * o2::constants::math::PI, 2 * o2::constants::math::PI}; + const AxisSpec axisPhi{64, -2 * PI, 2 * PI}; const AxisSpec axisEta{50, -1.2, 1.2}; const AxisSpec axisNch{201, -0.5, 200.5}; const AxisSpec axisZNEnergy{1002, -0.5, 500.5}; @@ -150,7 +152,7 @@ struct upcPhotonuclearAnalysisJMG { const AxisSpec axisTPCNClsCrossedRowsMin{100, -0.05, 2.05}; histos.add("yields", "multiplicity vs pT vs eta", {HistType::kTH3F, {{100, 0, 100, "multiplicity"}, {40, 0, 20, "p_{T}"}, {100, -2, 2, "#eta"}}}); - histos.add("etaphi", "multiplicity vs eta vs phi", {HistType::kTH3F, {{100, 0, 100, "multiplicity"}, {100, -2, 2, "#eta"}, {200, 0, 2 * M_PI, "#varphi"}}}); + histos.add("etaphi", "multiplicity vs eta vs phi", {HistType::kTH3F, {{100, 0, 100, "multiplicity"}, {100, -2, 2, "#eta"}, {200, 0, 2 * PI, "#varphi"}}}); const int maxMixBin = axisMultiplicity->size() * axisVertex->size(); histos.add("eventcount", "bin", {HistType::kTH1F, {{maxMixBin + 2, -2.5, -0.5 + maxMixBin, "bin"}}}); @@ -339,7 +341,7 @@ struct upcPhotonuclearAnalysisJMG { } template - void fillQAUD(TTracks tracks) + void fillQAUD(const TTracks tracks) { for (auto& track : tracks) { histos.fill(HIST("yields"), tracks.size(), track.pt(), eta(track.px(), track.py(), track.pz())); @@ -356,7 +358,7 @@ struct upcPhotonuclearAnalysisJMG { } template - void fillCorrelationsUD(TTarget target, TTracks tracks1, TTracks tracks2, float multiplicity, float posZ) + void fillCorrelationsUD(TTarget target, const TTracks tracks1, const TTracks tracks2, float multiplicity, float posZ) { multiplicity = tracks1.size(); for (auto& track1 : tracks1) { @@ -389,7 +391,7 @@ struct upcPhotonuclearAnalysisJMG { void processSG(FullSGUDCollision::iterator const& reconstructedCollision, FullUDTracks const& reconstructedTracks) { histos.fill(HIST("Events/hCountCollisions"), 0); - int SGside = reconstructedCollision.gapSide(); + int sgSide = reconstructedCollision.gapSide(); int nTracksCharged = 0; float sumPt = 0; std::vector vTrackPtSideA, vTrackEtaSideA, vTrackPhiSideA; @@ -397,7 +399,7 @@ struct upcPhotonuclearAnalysisJMG { int nTracksChargedSideA(-222), nTracksChargedSideC(-222); int multiplicitySideA(-222), multiplicitySideC(-222); - switch (SGside) { + switch (sgSide) { case 0: // gap for side A if (isCollisionCutSG(reconstructedCollision, 0) == false) { return; @@ -507,10 +509,10 @@ struct upcPhotonuclearAnalysisJMG { void processSame(FullSGUDCollision::iterator const& reconstructedCollision, FullUDTracks const& reconstructedTracks) { - int SGside = reconstructedCollision.gapSide(); + int sgSide = reconstructedCollision.gapSide(); float multiplicity = reconstructedTracks.size(); - switch (SGside) { + switch (sgSide) { case 0: // gap for side A if (isCollisionCutSG(reconstructedCollision, 0) == false) { return; @@ -538,8 +540,8 @@ struct upcPhotonuclearAnalysisJMG { void processMixed(FullSGUDCollision::iterator const& reconstructedCollision) { - int SGside = reconstructedCollision.gapSide(); - // int SGside = 0; + int sgSide = reconstructedCollision.gapSide(); + // int sgSide = 0; for (auto& [collision1, tracks1, collision2, tracks2] : pairs) { if (collision1.size() == 0 || collision2.size() == 0) { @@ -548,7 +550,7 @@ struct upcPhotonuclearAnalysisJMG { } float multiplicity = tracks1.size(); LOGF(info, "Filling mixed events"); - switch (SGside) { + switch (sgSide) { case 0: // gap for side A if (isCollisionCutSG(reconstructedCollision, 0) == false) { return; From bf3358191a113c5edf2485ca0e0687a42b5534f2 Mon Sep 17 00:00:00 2001 From: josue-MiniPC-Ubuntu Date: Wed, 28 May 2025 23:55:41 -0600 Subject: [PATCH 20/22] resolving o2 linter issues --- PWGUD/Core/UPCPairCuts.h | 41 +++++++++++----------- PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 13 +++---- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/PWGUD/Core/UPCPairCuts.h b/PWGUD/Core/UPCPairCuts.h index 03644b7ce4b..eef1d888baf 100644 --- a/PWGUD/Core/UPCPairCuts.h +++ b/PWGUD/Core/UPCPairCuts.h @@ -9,6 +9,10 @@ // granted to it by virtue of its status as an Intergovernmental Organization // or submit itself to any jurisdiction. +// Functions which cut on particle pairs (decays, conversions, two-track cuts) adapted for data from UD tables +// Based on the code "PWGCF/Core/PairCuts.h" made by Jan Fiete Grosse-Oetringhaus +// Author: + #ifndef PWGUD_CORE_UPCPAIRCUTS_H_ #define PWGUD_CORE_UPCPAIRCUTS_H_ @@ -17,13 +21,10 @@ #include "Framework/Logger.h" #include "Framework/HistogramRegistry.h" #include "CommonConstants/MathConstants.h" +#include "CommonConstants/PhysicsConstants.h" #include "PWGUD/Core/UPCTauCentralBarrelHelperRL.h" -// Functions which cut on particle pairs (decays, conversions, two-track cuts) adapted for data from UD tables -// Based on the code "PWGCF/Core/PairCuts.h" made by Jan Fiete Grosse-Oetringhaus -// Author: - using namespace o2; using namespace o2::framework; using namespace constants::math; @@ -38,9 +39,9 @@ class UPCPairCuts Rho, ParticlesLastEntry }; - void SetHistogramRegistry(HistogramRegistry* registry) { histogramRegistry = registry; } + void setHistogramRegistry(HistogramRegistry* registry) { histogramRegistry = registry; } - void SetPairCut(Particle particle, float cut) + void setPairCut(Particle particle, float cut) { LOGF(info, "Enabled pair cut for %d with value %f", static_cast(particle), cut); mCuts[particle] = cut; @@ -49,7 +50,7 @@ class UPCPairCuts } } - void SetTwoTrackCuts(float distance = 0.02f, float radius = 0.8f) + void setTwoTrackCuts(float distance = 0.02f, float radius = 0.8f) { LOGF(info, "Enabled two-track cut with distance %f and radius %f", distance, radius); mTwoTrackDistance = distance; @@ -176,28 +177,28 @@ bool UPCPairCuts::conversionCut(T const& track1, T const& track2, Particle conv, switch (conv) { case Photon: - massD1 = 0.51e-3; - massD2 = 0.51e-3; + massD1 = o2::constants::physics::MassElectron; + massD2 = o2::constants::physics::MassElectron; massM = 0; break; case K0: - massD1 = 0.1396; - massD2 = 0.1396; - massM = 0.4976; + massD1 = o2::constants::physics::MassPiPlus; + massD2 = o2::constants::physics::MassPiPlus; + massM = o2::constants::physics::MassK0; break; case Lambda: - massD1 = 0.9383; - massD2 = 0.1396; - massM = 1.115; + massD1 = o2::constants::physics::MassProton; + massD2 = o2::constants::physics::MassPiPlus; + massM = o2::constants::physics::MassLambda0; break; case Phi: - massD1 = 0.4937; - massD2 = 0.4937; - massM = 1.019; + massD1 = o2::constants::physics::MassKPlus; + massD2 = o2::constants::physics::MassKPlus; + massM = o2::constants::physics::MassPhi; break; case Rho: - massD1 = 0.1396; - massD2 = 0.1396; + massD1 = o2::constants::physics::MassPiPlus; + massD2 = o2::constants::physics::MassPiPlus; massM = 0.770; break; default: diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index 019de8676bc..d1fd54a7b00 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -11,6 +11,7 @@ /// /// \brief /// \author Josué Martínez García, josuem@cern.ch +/// \file upcPhotonuclearAnalysisJMG.cxx #include "Framework/AnalysisDataModel.h" #include "Framework/AnalysisTask.h" @@ -156,14 +157,14 @@ struct upcPhotonuclearAnalysisJMG { const int maxMixBin = axisMultiplicity->size() * axisVertex->size(); histos.add("eventcount", "bin", {HistType::kTH1F, {{maxMixBin + 2, -2.5, -0.5 + maxMixBin, "bin"}}}); - mPairCuts.SetHistogramRegistry(&histos); + mPairCuts.setHistogramRegistry(&histos); if (cfgPairCut->get("Photon") > 0 || cfgPairCut->get("K0") > 0 || cfgPairCut->get("Lambda") > 0 || cfgPairCut->get("Phi") > 0 || cfgPairCut->get("Rho") > 0) { - mPairCuts.SetPairCut(UPCPairCuts::Photon, cfgPairCut->get("Photon")); - mPairCuts.SetPairCut(UPCPairCuts::K0, cfgPairCut->get("K0")); - mPairCuts.SetPairCut(UPCPairCuts::Lambda, cfgPairCut->get("Lambda")); - mPairCuts.SetPairCut(UPCPairCuts::Phi, cfgPairCut->get("Phi")); - mPairCuts.SetPairCut(UPCPairCuts::Rho, cfgPairCut->get("Rho")); + mPairCuts.setPairCut(UPCPairCuts::Photon, cfgPairCut->get("Photon")); + mPairCuts.setPairCut(UPCPairCuts::K0, cfgPairCut->get("K0")); + mPairCuts.setPairCut(UPCPairCuts::Lambda, cfgPairCut->get("Lambda")); + mPairCuts.setPairCut(UPCPairCuts::Phi, cfgPairCut->get("Phi")); + mPairCuts.setPairCut(UPCPairCuts::Rho, cfgPairCut->get("Rho")); doPairCuts = true; } histos.add("Events/hCountCollisions", "0 total - 1 side A - 2 side C - 3 both side; Number of analysed collision; counts", kTH1F, {axisCollision}); From 3331e647802549971189a8172caafd9e2b5b99e3 Mon Sep 17 00:00:00 2001 From: josue-MiniPC-Ubuntu Date: Thu, 29 May 2025 00:01:45 -0600 Subject: [PATCH 21/22] resolving o2 linter issues --- PWGUD/Core/UPCPairCuts.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PWGUD/Core/UPCPairCuts.h b/PWGUD/Core/UPCPairCuts.h index eef1d888baf..6b0e37adca0 100644 --- a/PWGUD/Core/UPCPairCuts.h +++ b/PWGUD/Core/UPCPairCuts.h @@ -9,9 +9,9 @@ // granted to it by virtue of its status as an Intergovernmental Organization // or submit itself to any jurisdiction. -// Functions which cut on particle pairs (decays, conversions, two-track cuts) adapted for data from UD tables -// Based on the code "PWGCF/Core/PairCuts.h" made by Jan Fiete Grosse-Oetringhaus -// Author: +/// \brief Functions which cut on particle pairs (decays, conversions, two-track cuts) adapted for data from UD tables +/// Based on the code "PWGCF/Core/PairCuts.h" made by Jan Fiete Grosse-Oetringhaus +/// Author: #ifndef PWGUD_CORE_UPCPAIRCUTS_H_ #define PWGUD_CORE_UPCPAIRCUTS_H_ From 385beee65cc023aaaeb81e8e5da5a0e8d32fdefd Mon Sep 17 00:00:00 2001 From: josue-MiniPC-Ubuntu Date: Thu, 29 May 2025 00:26:23 -0600 Subject: [PATCH 22/22] resolving o2 linter issues --- PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx index d1fd54a7b00..995e04a8335 100644 --- a/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx +++ b/PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx @@ -13,14 +13,15 @@ /// \author Josué Martínez García, josuem@cern.ch /// \file upcPhotonuclearAnalysisJMG.cxx +#include + #include "Framework/AnalysisDataModel.h" #include "Framework/AnalysisTask.h" #include "Framework/runDataProcessing.h" #include "CCDB/BasicCCDBManager.h" #include "Framework/StepTHn.h" -#include -#include #include "CommonConstants/MathConstants.h" +#include #include "Common/CCDB/EventSelectionParams.h" #include "Common/Core/TrackSelection.h"