@@ -90,6 +90,7 @@ struct PCMQCMC {
9090 Configurable<float > maxRgen{" maxRgen" , 90 .f , " maximum radius for generated particles" };
9191 Configurable<float > margin_z_mc{" margin_z_mc" , 7.0 , " margin for z cut in cm for MC" };
9292 Configurable<bool > cfgRequireTrueAssociation{" cfgRequireTrueAssociation" , false , " flag to require true mc collision association" };
93+ Configurable<bool > cfgResolDetailPlots{" cfgResolDetailPlots" , false , " flag to enable detailed resolution plots" };
9394
9495 EMPhotonEventCut fEMEventCut ;
9596 struct : ConfigurableGroup {
@@ -248,6 +249,9 @@ struct PCMQCMC {
248249 fRegistry .add (" Generated/hRZ" , " conversion point in RZ MC;V_{z} (cm);R_{xy} (cm)" , kTH2F , {{400 , -100 .0f , 100 .0f }, {400 , 0 .f , 100 .0f }}, true );
249250 fRegistry .add (" Generated/hRPhi" , " conversion point of #varphi vs. R_{xy} MC;#varphi (rad.);R_{xy} (cm);N_{e}" , kTH2F , {{360 , 0 .0f , o2::constants::math::TwoPI}, {400 , 0 , 100 }}, true );
250251 fRegistry .add (" Generated/hsConvPoint" , " photon conversion point;r_{xy} (cm);#varphi (rad.);#eta;" , kTHnSparseF , {{100 , 0 .0f , 100 }, {90 , 0 , o2::constants::math::TwoPI}, {80 , -2 , +2 }}, true );
252+ if (cfgResolDetailPlots) {
253+ fRegistry .add (" Generated/hPtEtaPhi" , " Photon pt vs eta, and phi;p_{T, gen} (GeV/c);#eta;#phi" , kTHnSparseF , {{200 , 0 ., 20 .}, {18 , -0.9 , 0.9 }, {36 , 0 , o2::constants::math::TwoPI}}, false );
254+ }
251255 }
252256
253257 // event info
@@ -297,15 +301,21 @@ struct PCMQCMC {
297301 fRegistry .add (" V0/primary/hConvPoint_diffY" , " conversion point diff Y MC;Y_{MC} (cm);Y_{rec} - Y_{MC} (cm)" , kTH2F , {{200 , -100 , +100 }, {100 , -50 .0f , 50 .0f }}, true );
298302 fRegistry .add (" V0/primary/hConvPoint_diffZ" , " conversion point diff Z MC;Z_{MC} (cm);Z_{rec} - Z_{MC} (cm)" , kTH2F , {{200 , -100 , +100 }, {100 , -50 .0f , 50 .0f }}, true );
299303 fRegistry .add (" V0/primary/hPtGen_DeltaPtOverPtGen" , " photon p_{T} resolution;p_{T}^{gen} (GeV/c);(p_{T}^{rec} - p_{T}^{gen})/p_{T}^{gen}" , kTH2F , {{1000 , 0 , 10 }, {200 , -1 .0f , 1 .0f }}, true );
300- fRegistry .add (" V0/primary/hPtGen_DeltaEta" , " photon #eta resolution;p_{T}^{gen} (GeV/c);#eta^{rec} - #eta^{gen}" , kTH2F , {{1000 , 0 , 10 }, {100 , -0 .5f , 0 .5f }}, true );
301- fRegistry .add (" V0/primary/hPtGen_DeltaPhi" , " photon #varphi resolution;p_{T}^{gen} (GeV/c);#varphi^{rec} - #varphi^{gen} (rad.)" , kTH2F , {{1000 , 0 , 10 }, {100 , -0 .5f , 0 .5f }}, true );
304+ fRegistry .add (" V0/primary/hPtGen_DeltaEta" , " photon #eta resolution;p_{T}^{gen} (GeV/c);#eta^{rec} - #eta^{gen}" , kTH2F , {{200 , 0 , 20 }, {199 , -0.099 , 0.099 }}, true );
305+ fRegistry .add (" V0/primary/hPtGen_DeltaPhi" , " photon #varphi resolution;p_{T}^{gen} (GeV/c);#varphi^{rec} - #varphi^{gen} (rad.)" , kTH2F , {{200 , 0 , 20 }, {199 , -0.099 , 0.099 }}, true );
302306 fRegistry .add (" V0/primary/hRxyGen_DeltaPtOverPtGen" , " photon p_{T} resolution; R_{xy}^{gen} (cm);(p_{T}^{rec} - p_{T}^{gen})/p_{T}^{gen}" , kTH2F , {{100 , 0 , 100 }, {200 , -1 .0f , 1 .0f }}, true );
303307 fRegistry .add (" V0/primary/hRxyGen_DeltaEta" , " photon #eta resolution;R_{xy}^{gen} (cm);#eta^{rec} - #eta^{gen}" , kTH2F , {{100 , 0 , 100 }, {100 , -0 .5f , 0 .5f }}, true );
304308 fRegistry .add (" V0/primary/hRxyGen_DeltaPhi" , " photon #varphi resolution;R_{xy}^{gen} (cm);#varphi^{rec} - #varphi^{gen} (rad.)" , kTH2F , {{100 , 0 , 100 }, {100 , -0 .5f , 0 .5f }}, true );
305309 fRegistry .add (" V0/primary/hRxyGen_DeltaR" , " photon #varphi resolution;R_{xy}^{gen} (cm);#varphi^{rec} - #varphi^{gen} (rad.)" , kTH2F , {{100 , 0 , 100 }, {100 , 0 , 100 }}, true );
306310 fRegistry .add (" V0/primary/hXY_MC" , " X vs. Y of true photon conversion point.;X (cm);Y (cm)" , kTH2F , {{400 , -100 .0f , +100 }, {400 , -100 , +100 }}, true );
307311 fRegistry .add (" V0/primary/hRZ_MC" , " R vs. Z of true photon conversion point;Z (cm);R_{xy} (cm)" , kTH2F , {{200 , -100 .0f , +100 }, {200 , 0 , 100 }}, true );
308312 fRegistry .add (" V0/primary/hsConvPoint" , " photon conversion point;r_{xy} (cm);#varphi (rad.);#eta;" , kTHnSparseF , {{100 , 0 .0f , 100 }, {90 , 0 , o2::constants::math::TwoPI}, {80 , -2 , +2 }}, false );
313+ if (cfgResolDetailPlots) {
314+ fRegistry .add (" V0/primary/hEtaPhiResol" , " Photon eta-phi resolution;p_{T} (GeV/c);#eta-diff;#phi-diff" , kTH3F , {{200 , 0 ., 20 .}, {99 , -0.049 , 0.049 }, {99 , -0.049 , 0.049 }}, false );
315+ fRegistry .add (" V0/primary/hPtResolPtEtaPhi" , " Photon resolution vs. pt, eta, and phi;p_{T_rec} - p_{T true} / p_{T true};p_{T} (GeV/c);#eta;#phi" , kTHnSparseF , {{199 , -0.995 , 0.995 }, {200 , 0 ., 20 .}, {18 , -0.9 , 0.9 }, {36 , 0 , o2::constants::math::TwoPI}}, false );
316+ fRegistry .add (" V0/primary/hMomResolPtEtaPhi" , " Photon momentum resolution vs. p, eta, and phi;p_{rec} - p_{true} / p_{true};p_{T} (GeV/c);#eta;#phi" , kTHnSparseF , {{199 , -0.995 , 0.995 }, {200 , 0 ., 20 .}, {18 , -0.9 , 0.9 }, {36 , 0 , o2::constants::math::TwoPI}}, false );
317+ fRegistry .add (" V0/primary/hPtEtaPhi" , " pt, eta, and phi;p_{T} (GeV/c);#eta;#phi" , kTHnSparseF , {{200 , 0 ., 20 .}, {18 , -0.9 , 0.9 }, {36 , 0 , o2::constants::math::TwoPI}}, false );
318+ }
309319 if (pcmcuts.cfg_apply_ml_cuts ) {
310320 if (pcmcuts.cfg_nclasses_ml == 2 ) {
311321 fRegistry .add (" V0/primary/hBDTBackgroundScoreVsPt" , " BDT background score vs pT; pT (GeV/c); BDT background score" , {HistType::kTH2F , {{200 , 0 .0f , 20 .0f }, {100 , 0 .0f , 1 .0f }}});
@@ -514,6 +524,16 @@ struct PCMQCMC {
514524 fRegistry .fill (HIST (" V0/" ) + HIST (mcphoton_types[mctype]) + HIST (" hXY_MC" ), mcleg.vx (), mcleg.vy ());
515525 fRegistry .fill (HIST (" V0/" ) + HIST (mcphoton_types[mctype]) + HIST (" hRZ_MC" ), mcleg.vz (), std::sqrt (std::pow (mcleg.vx (), 2 ) + std::pow (mcleg.vy (), 2 )));
516526
527+ if (cfgResolDetailPlots) {
528+ // Resolution vs. pt, eta and phi
529+ float resolPt = (v0.pt () - mcphoton.pt ()) / mcphoton.pt ();
530+ fRegistry .fill (HIST (" V0/" ) + HIST (mcphoton_types[mctype]) + HIST (" hPtResolPtEtaPhi" ), resolPt, mcphoton.pt (), mcphoton.eta (), mcphoton.phi ());
531+ float resolMom = (v0.p () - mcphoton.p ()) / mcphoton.p ();
532+ fRegistry .fill (HIST (" V0/" ) + HIST (mcphoton_types[mctype]) + HIST (" hMomResolPtEtaPhi" ), resolMom, mcphoton.pt (), mcphoton.eta (), mcphoton.phi ());
533+ fRegistry .fill (HIST (" V0/" ) + HIST (mcphoton_types[mctype]) + HIST (" hPtEtaPhi" ), mcphoton.pt (), mcphoton.eta (), mcphoton.phi ());
534+ fRegistry .fill (HIST (" V0/" ) + HIST (mcphoton_types[mctype]) + HIST (" hEtaPhiResol" ), mcphoton.pt (), v0.eta () - mcphoton.eta (), v0.phi () - mcphoton.phi ());
535+ }
536+
517537 float phi_cp = std::atan2 (v0.vy (), v0.vx ());
518538 o2::math_utils::bringTo02Pi (phi_cp);
519539 float eta_cp = std::atanh (v0.vz () / std::sqrt (std::pow (v0.vx (), 2 ) + std::pow (v0.vy (), 2 ) + std::pow (v0.vz (), 2 )));
@@ -751,6 +771,9 @@ struct PCMQCMC {
751771 }
752772
753773 if (std::abs (mctrack.pdgCode ()) == PDG_t::kGamma && (mctrack.isPhysicalPrimary () || mctrack.producedByGenerator ())) {
774+ if (cfgResolDetailPlots) {
775+ fRegistry .fill (HIST (" Generated/hPtEtaPhi" ), mctrack.pt (), mctrack.eta (), mctrack.phi ()); // fill for all generated photons before any kinematic cut
776+ }
754777 auto daughter = mcparticles.iteratorAt (mctrack.daughtersIds ()[0 ]); // choose ele or pos.
755778 float rxy_gen_e = std::sqrt (std::pow (daughter.vx (), 2 ) + std::pow (daughter.vy (), 2 ));
756779 float phi_cp = std::atan2 (daughter.vy (), daughter.vx ());
0 commit comments