@@ -82,6 +82,11 @@ struct NucleiAntineutronCex {
8282 histos.add (" antin_eta" , " Pseudorapidity;#eta;Entries" , kTH1F , {{100 , -10 ., 10 .}});
8383 histos.add (" antin_p_ITScuts" , " Momentum with ITS cuts;|p| (GeV/c);Entries" , kTH1F , {{100 , 0 ., 10 .}});
8484
85+ histos.add (" antin_pt" , " Antineutron transverse momentum;p_{T,#bar{n}} (GeV/c);Entries" , kTH1F , {{100 , 0 ., 10 .}});
86+ histos.add (" antin_pt_ITScuts" , " Antineutron transverse momentum with ITS cuts;p_{T,#bar{n}} (GeV/c);Entries" , kTH1F , {{100 , 0 ., 10 .}});
87+ histos.add (" antin_pt_closureA" , " Generated antineutron p_{T}, closure sample A;p_{T,#bar{n}} (GeV/c);Entries" , kTH1F , {{100 , 0 ., 10 .}});
88+ histos.add (" antin_pt_closureB" , " Generated antineutron p_{T}, closure sample B;p_{T,#bar{n}} (GeV/c);Entries" , kTH1F , {{100 , 0 ., 10 .}});
89+
8590 // Primary neutrons
8691 histos.add (" n_p" , " Total momentum;|p| (GeV/c);Entries" , kTH1F , {{100 , 0 ., 10 .}});
8792 histos.add (" n_px" , " p_{x};p_{x} (GeV/c);Entries" , kTH1F , {{100 , -10 ., 10 .}});
@@ -120,6 +125,11 @@ struct NucleiAntineutronCex {
120125 histos.add (" cex_pairmc_vtxz" , " MC secondary vertex Z;Z (cm);Entries" , kTH1F , {{200 , -60 ., 60 .}});
121126 histos.add (" cexPairMcPITScuts" , " CEX pair momentum (ITS cuts);|p| (GeV/c);Entries" , kTH1F , {{100 , 0 ., 10 .}});
122127
128+ histos.add (" cexMotherMcP" , " Antineutron momentum for true CEX;p_{#bar{n}} (GeV/c);Entries" , kTH1F , {{100 , 0 ., 10 .}});
129+ histos.add (" cexMotherMcPt" , " Antineutron transverse momentum for true CEX;p_{T,#bar{n}} (GeV/c);Entries" , kTH1F , {{100 , 0 ., 10 .}});
130+ histos.add (" cexMotherMcPt_closureA" , " Antineutron p_{T} for true CEX, closure sample A;p_{T,#bar{n}} (GeV/c);Entries" , kTH1F , {{100 , 0 ., 10 .}});
131+ histos.add (" cexMotherMcPt_closureB" , " Antineutron p_{T} for true CEX, closure sample B;p_{T,#bar{n}} (GeV/c);Entries" , kTH1F , {{100 , 0 ., 10 .}});
132+
123133 // CEX pair normalized to antineutron (MC)
124134 histos.add (" cexn_pairmc_p" , " Pair p / antineutron p;p/p_{#bar{n}};Entries" , kTH1F , {{100 , 0 ., 2 .}});
125135 histos.add (" cexn_pairmc_pt" , " Pair p_{T} / antineutron p_{T};p_{T}/p_{T,#bar{n}};Entries" , kTH1F , {{100 , 0 ., 2 .}});
@@ -137,6 +147,16 @@ struct NucleiAntineutronCex {
137147
138148 // Pi0 events
139149 histos.add (" cexn_pairmc_p_pi0" , " Pair p / antineutron p for CEX + #pi^{0};p/p_{#bar{n}};Entries" , kTH1F , {{100 , 0 ., 2 .}});
150+ histos.add (" cexn_pairmc_pt_pi0" , " Pair p_{T} / antineutron p_{T} for CEX + #pi^{0};p_{T}/p_{T,#bar{n}};Entries" , kTH1F , {{100 , 0 ., 2 .}});
151+
152+ histos.add (" cexn_pairmc_p_noPi0" , " Pair p / antineutron p for two-body CEX;p/p_{#bar{n}};Entries" , kTH1F , {{100 , 0 ., 2 .}});
153+ histos.add (" cexn_pairmc_pt_noPi0" , " Pair p_{T} / antineutron p_{T} for two-body CEX;p_{T}/p_{T,#bar{n}};Entries" , kTH1F , {{100 , 0 ., 2 .}});
154+
155+ histos.add (" cexn_pairtrk_p_pi0" , " Reconstructed pair p / antineutron p for CEX + #pi^{0};p_{p#bar{p}}^{reco}/p_{#bar{n}};Entries" , kTH1F , {{100 , 0 ., 2 .}});
156+ histos.add (" cexn_pairtrk_pt_pi0" , " Reconstructed pair p_{T} / antineutron p_{T} for CEX + #pi^{0};p_{T,p#bar{p}}^{reco}/p_{T,#bar{n}};Entries" , kTH1F , {{100 , 0 ., 2 .}});
157+
158+ histos.add (" cexn_pairtrk_p_noPi0" , " Reconstructed pair p / antineutron p for two-body CEX;p_{p#bar{p}}^{reco}/p_{#bar{n}};Entries" , kTH1F , {{100 , 0 ., 2 .}});
159+ histos.add (" cexn_pairtrk_pt_noPi0" , " Reconstructed pair p_{T} / antineutron p_{T} for two-body CEX;p_{T,p#bar{p}}^{reco}/p_{T,#bar{n}};Entries" , kTH1F , {{100 , 0 ., 2 .}});
140160
141161 // CEX pair from antineutron (TRK)
142162 histos.add (" cex_pairtrk_angle" , " Pair opening angle (tracks);Angle (°);Entries" , kTH1F , {{180 , 0 ., 180 .}});
@@ -148,6 +168,17 @@ struct NucleiAntineutronCex {
148168 histos.add (" cex_pairtrkVtxfitDistToPv" , " Distance from secondary vertex to PV;dist (cm);Entries" , kTH1F , {{240 , 0 ., 120 .}});
149169 histos.add (" cex_pairtrk_vtxfit_secVtxXY" , " Secondary vertex (PCA);X (cm);Y (cm)" , kTH2F , {{200 , -60 ., 60 .}, {200 , -60 ., 60 .}});
150170 histos.add (" cex_pairtrk_vtxfit_secVtxZ" , " Secondary vertex Z (PCA);Z (cm);Entries" , kTH1F , {{240 , -60 ., 60 .}});
171+ histos.add (" cexMotherTrkP" , " Antineutron momentum for reconstructed CEX;p_{#bar{n}} (GeV/c);Entries" , kTH1F , {{100 , 0 ., 10 .}});
172+ histos.add (" cexMotherTrkPt" , " Antineutron transverse momentum for reconstructed CEX;p_{T,#bar{n}} (GeV/c);Entries" , kTH1F , {{100 , 0 ., 10 .}});
173+ histos.add (" cexMotherTrkPt_closureA" , " Antineutron p_{T} for reconstructed CEX, closure sample A;p_{T,#bar{n}} (GeV/c);Entries" , kTH1F , {{100 , 0 ., 10 .}});
174+ histos.add (" cexMotherTrkPt_closureB" , " Antineutron p_{T} for reconstructed CEX, closure sample B;p_{T,#bar{n}} (GeV/c);Entries" , kTH1F , {{100 , 0 ., 10 .}});
175+ histos.add (" cexResponseP" , " CEX momentum response;p_{#bar{n}}^{MC} (GeV/c);p_{p#bar{p}}^{reco} (GeV/c)" , kTH2F , {{100 , 0 ., 10 .}, {100 , 0 ., 10 .}});
176+ histos.add (" cexResponsePt" , " CEX transverse-momentum response;p_{T,#bar{n}}^{MC} (GeV/c);p_{T,p#bar{p}}^{reco} (GeV/c)" , kTH2F , {{100 , 0 ., 10 .}, {100 , 0 ., 10 .}});
177+
178+ // CEX reconstructed pair normalized to antineutron
179+ histos.add (" cexn_pairtrk_p" , " Reconstructed pair p / antineutron p;p_{p#bar{p}}^{reco}/p_{#bar{n}};Entries" , kTH1F , {{100 , 0 ., 2 .}});
180+ histos.add (" cexn_pairtrk_pt" , " Reconstructed pair p_{T} / antineutron p_{T};p_{T,p#bar{p}}^{reco}/p_{T,#bar{n}};Entries" , kTH1F , {{100 , 0 ., 2 .}});
181+ histos.add (" cexn_pairtrk_pz" , " Reconstructed pair p_{z} / antineutron p_{z};p_{z,p#bar{p}}^{reco}/p_{z,#bar{n}};Entries" , kTH1F , {{100 , -2 ., 2 .}});
151182
152183 // BG pair (not from antineutron) (TRK)
153184 histos.add (" cexbg_pairtrk_angle" , " Background opening angle (tracks);Angle (°);Entries" , kTH1F , {{180 , 0 ., 180 .}});
@@ -209,6 +240,8 @@ struct NucleiAntineutronCex {
209240 double pvtxZ = 0 ;
210241 for (auto const & col : cols) {
211242 const auto colId = col.globalIndex ();
243+ const bool isSampleA = (colId % 2 == 0 );
244+
212245 auto mcPartsThis = particles.sliceBy (perMcByColl, colId);
213246
214247 if (std::isfinite (col.posX ()) && std::isfinite (col.posY ()) && std::isfinite (col.posZ ())) {
@@ -225,12 +258,20 @@ struct NucleiAntineutronCex {
225258 // Primary antineutrons
226259 if (particle.pdgCode () == -kNeutron && particle.isPhysicalPrimary ()) {
227260 histos.fill (HIST (" antin_p" ), particle.p ());
261+ histos.fill (HIST (" antin_pt" ), particle.pt ());
228262 histos.fill (HIST (" antin_px" ), particle.px ());
229263 histos.fill (HIST (" antin_py" ), particle.py ());
230264 histos.fill (HIST (" antin_pz" ), particle.pz ());
231265 histos.fill (HIST (" antin_eta" ), particle.eta ());
232- if (std::abs (particle.eta ()) < kAccMaxEta && std::abs (particle.vz ()) < kAccMaxVz )
266+ if (std::abs (particle.eta ()) < kAccMaxEta && std::abs (particle.vz ()) < kAccMaxVz ) {
233267 histos.fill (HIST (" antin_p_ITScuts" ), particle.p ());
268+ histos.fill (HIST (" antin_pt_ITScuts" ), particle.pt ());
269+ }
270+ if (isSampleA) {
271+ histos.fill (HIST (" antin_pt_closureA" ), particle.pt ());
272+ } else {
273+ histos.fill (HIST (" antin_pt_closureB" ), particle.pt ());
274+ }
234275 }
235276 // Primary neutrons
236277 if (particle.pdgCode () == kNeutron && particle.isPhysicalPrimary ()) {
@@ -509,6 +550,13 @@ struct NucleiAntineutronCex {
509550 histos.fill (HIST (" cex_pairmc_angle" ), mcangleDeg);
510551 histos.fill (HIST (" cex_pairmc_vtx" ), antipVx, antipVy);
511552 histos.fill (HIST (" cex_pairmc_vtxz" ), antipVz);
553+ histos.fill (HIST (" cexMotherMcP" ), motherP);
554+ histos.fill (HIST (" cexMotherMcPt" ), motherPt);
555+ if (isSampleA) {
556+ histos.fill (HIST (" cexMotherMcPt_closureA" ), motherPt);
557+ } else {
558+ histos.fill (HIST (" cexMotherMcPt_closureB" ), motherPt);
559+ }
512560 if (std::abs (motherEta) < kStrictEta && std::abs (motherVz) < kAccMaxVz )
513561 histos.fill (HIST (" cexPairMcPITScuts" ), cexPairMcP);
514562 // CEX pair normalized
@@ -518,8 +566,17 @@ struct NucleiAntineutronCex {
518566 histos.fill (HIST (" cexn_pairmc_pt" ), cexPairMcPt / motherPt);
519567 if (motherPz != 0 )
520568 histos.fill (HIST (" cexn_pairmc_pz" ), cexPairMcPz / motherPz);
521- if (motherP != 0 && pion0)
522- histos.fill (HIST (" cexn_pairmc_p_pi0" ), cexPairMcP / motherP);
569+ if (pion0) {
570+ if (motherP != 0 .)
571+ histos.fill (HIST (" cexn_pairmc_p_pi0" ), cexPairMcP / motherP);
572+ if (motherPt != 0 .)
573+ histos.fill (HIST (" cexn_pairmc_pt_pi0" ), cexPairMcPt / motherPt);
574+ } else {
575+ if (motherP != 0 .)
576+ histos.fill (HIST (" cexn_pairmc_p_noPi0" ), cexPairMcP / motherP);
577+ if (motherPt != 0 .)
578+ histos.fill (HIST (" cexn_pairmc_pt_noPi0" ), cexPairMcPt / motherPt);
579+ }
523580 }
524581 // BG mother
525582 if (motherPdg != -kNeutron ) {
@@ -793,6 +850,34 @@ struct NucleiAntineutronCex {
793850 histos.fill (HIST (" cex_pairtrkVtxfitDistToPv" ), distToPrimary);
794851 histos.fill (HIST (" cex_pairtrk_vtxfit_secVtxXY" ), secX, secY);
795852 histos.fill (HIST (" cex_pairtrk_vtxfit_secVtxZ" ), secZ);
853+ histos.fill (HIST (" cexMotherTrkP" ), motherP);
854+ histos.fill (HIST (" cexMotherTrkPt" ), motherPt);
855+ // Response matrices
856+ histos.fill (HIST (" cexResponseP" ), motherP, cexPairTrkP);
857+ histos.fill (HIST (" cexResponsePt" ), motherPt, cexPairTrkPt);
858+ // Pi0 track
859+ if (pion0) {
860+ if (motherP != 0 .)
861+ histos.fill (HIST (" cexn_pairtrk_p_pi0" ), cexPairTrkP / motherP);
862+ if (motherPt != 0 .)
863+ histos.fill (HIST (" cexn_pairtrk_pt_pi0" ), cexPairTrkPt / motherPt);
864+ } else {
865+ if (motherP != 0 .)
866+ histos.fill (HIST (" cexn_pairtrk_p_noPi0" ), cexPairTrkP / motherP);
867+ if (motherPt != 0 .)
868+ histos.fill (HIST (" cexn_pairtrk_pt_noPi0" ), cexPairTrkPt / motherPt);
869+ }
870+ if (isSampleA) {
871+ histos.fill (HIST (" cexMotherTrkPt_closureA" ), motherPt);
872+ } else {
873+ histos.fill (HIST (" cexMotherTrkPt_closureB" ), motherPt);
874+ }
875+ if (motherP != 0 .)
876+ histos.fill (HIST (" cexn_pairtrk_p" ), cexPairTrkP / motherP);
877+ if (motherPt != 0 .)
878+ histos.fill (HIST (" cexn_pairtrk_pt" ), cexPairTrkPt / motherPt);
879+ if (motherPz != 0 .)
880+ histos.fill (HIST (" cexn_pairtrk_pz" ), cexPairTrkPz / motherPz);
796881 } else {
797882 histos.fill (HIST (" cexbg_pairtrk_p" ), cexPairTrkP);
798883 histos.fill (HIST (" cexbg_pairtrk_pt" ), cexPairTrkPt);
0 commit comments