1313// Analysis task to produce smeared pt, eta, phi for electrons/muons in dilepton analysis
1414// Please write to: daiki.sekihata@cern.ch
1515
16- #include < array>
17- #include < string>
18- #include < chrono>
16+ #include " PWGEM/Dilepton/DataModel/dileptonTables.h"
17+ #include " PWGEM/Dilepton/Utils/MomentumSmearer.h"
1918
2019#include " CCDB/BasicCCDBManager.h"
21- #include " Framework/runDataProcessing.h"
22- #include " Framework/AnalysisTask.h"
23- #include " Framework/AnalysisDataModel.h"
24- #include " Framework/ASoAHelpers.h"
2520#include " Framework/ASoA.h"
21+ #include " Framework/ASoAHelpers.h"
22+ #include " Framework/AnalysisDataModel.h"
23+ #include " Framework/AnalysisTask.h"
2624#include " Framework/DataTypes.h"
2725#include " Framework/HistogramRegistry.h"
28- // #include "PWGDQ/DataModel/ReducedInfoTables.h" // remove this later, because 2 data tables (covariant matrix) in this header confilict against EM tables.
29- #include " PWGEM/Dilepton/Utils/MomentumSmearer.h"
30- #include " PWGEM/Dilepton/DataModel/dileptonTables.h"
26+ #include " Framework/runDataProcessing.h"
27+
28+ #include < array>
29+ #include < chrono>
30+ #include < string>
3131
3232using namespace o2 ;
3333using namespace o2 ::framework;
@@ -292,20 +292,16 @@ struct ApplySmearing {
292292 }
293293
294294 void processDummyMCanalysisEM (aod::EMMCParticles const &) {}
295- // void processDummyMCanalysisDQ(ReducedMCTracks const&) {}
296295
297296 PROCESS_SWITCH (ApplySmearing, processMCanalysisEM, " Run for MC analysis which uses skimmed EM data format" , false );
298- // PROCESS_SWITCH(ApplySmearing, processMCanalysisDQ, "Run for MC analysis which uses skimmed DQ data format", false);
299297 PROCESS_SWITCH (ApplySmearing, processCocktail, " Run for cocktail analysis" , false );
300298 PROCESS_SWITCH (ApplySmearing, processDummyMCanalysisEM, " Dummy process function" , false );
301- // PROCESS_SWITCH(ApplySmearing, processDummyMCanalysisDQ, "Dummy process function", false);
302299 PROCESS_SWITCH (ApplySmearing, processDummyCocktail, " Dummy process function" , true );
303300};
304301
305302struct CheckSmearing {
306- using EMMCParticlesWithSmearing = soa::Join<aod::EMMCParticles, aod::SmearedElectrons>; // this is only for electrons
307- // using MyReducedTracks = soa::Join<ReducedMCTracks, aod::SmearedElectrons>; // this is only for electrons
308- using MyCocktailTracks = soa::Join<aod::McParticles, aod::SmearedElectrons>; // this is only for electrons
303+ using EMMCParticlesWithSmearing = soa::Join<aod::EMMCParticles, aod::SmearedElectrons, aod::SmearedMuons>;
304+ using MyCocktailTracks = soa::Join<aod::McParticles, aod::SmearedElectrons, aod::SmearedMuons>;
309305
310306 // Run for electrons or muons
311307 Configurable<int > fPdgCode {" cfgPdgCode" , 11 , " Set the type of particle to be checked" };
@@ -322,9 +318,9 @@ struct CheckSmearing {
322318
323319 void init (o2::framework::InitContext&)
324320 {
325- registry.add <TH2>(" hCorrelation_Pt" , " pT correlation;p_{T,l}^{gen} (GeV/c);p_{T,l}^{smeared} (GeV/c)" , {HistType::kTH2F , {{1000 , 0 .0f , 10 .0f }, {1000 , 0 .0f , 10 .0f }}});
326- registry.add <TH2>(" hCorrelation_Eta" , " eta correlation;#eta_{l}^{gen};#eta_{l}^{smeared}" , {HistType::kTH2F , {{200 , -1 .0f , +1 .0f }, {200 , -1 .0f , +1 .0f }}});
327- registry.add <TH2>(" hCorrelation_Phi" , " phi correlation;#varphi_{l}^{gen} (rad.);#varphi_{l}^{smeared} (rad.)" , {HistType::kTH2F , {{100 , 0 .0f , TMath::TwoPi ()}, {100 , 0 .0f , TMath::TwoPi ()}}});
321+ registry.add <TH2>(" Electron/ hCorrelation_Pt" , " pT correlation;p_{T,l}^{gen} (GeV/c);p_{T,l}^{smeared} (GeV/c)" , {HistType::kTH2F , {{1000 , 0 .0f , 10 .0f }, {1000 , 0 .0f , 10 .0f }}});
322+ registry.add <TH2>(" Electron/ hCorrelation_Eta" , " eta correlation;#eta_{l}^{gen};#eta_{l}^{smeared}" , {HistType::kTH2F , {{200 , -1 .0f , +1 .0f }, {200 , -1 .0f , +1 .0f }}});
323+ registry.add <TH2>(" Electron/ hCorrelation_Phi" , " phi correlation;#varphi_{l}^{gen} (rad.);#varphi_{l}^{smeared} (rad.)" , {HistType::kTH2F , {{100 , 0 .0f , TMath::TwoPi ()}, {100 , 0 .0f , TMath::TwoPi ()}}});
328324
329325 // Binning for resolution
330326 AxisSpec axisPtRes{ptResBins, " #it{p}^{gen}_{T,l} (GeV/#it{c})" };
@@ -333,16 +329,19 @@ struct CheckSmearing {
333329 AxisSpec axisDeltaphiRes{deltaphiResBins, " #varphi^{gen} - #varphi^{rec} (rad.)" };
334330
335331 if (!fConfigUsePtVecRes ) {
336- registry.add <TH2>(" PtGen_DeltaPtOverPtGen" , " " , HistType::kTH2D , {axisPtRes, axisDeltaptRes}, true );
337- registry.add <TH2>(" PtGen_DeltaEta" , " " , HistType::kTH2D , {axisPtRes, axisDeltaetaRes}, true );
338- registry.add <TH2>(" PtGen_DeltaPhi_Neg" , " " , HistType::kTH2D , {axisPtRes, axisDeltaphiRes}, true );
339- registry.add <TH2>(" PtGen_DeltaPhi_Pos" , " " , HistType::kTH2D , {axisPtRes, axisDeltaphiRes}, true );
332+ registry.add <TH2>(" Electron/ PtGen_DeltaPtOverPtGen" , " " , HistType::kTH2D , {axisPtRes, axisDeltaptRes}, true );
333+ registry.add <TH2>(" Electron/ PtGen_DeltaEta" , " " , HistType::kTH2D , {axisPtRes, axisDeltaetaRes}, true );
334+ registry.add <TH2>(" Electron/ PtGen_DeltaPhi_Neg" , " " , HistType::kTH2D , {axisPtRes, axisDeltaphiRes}, true );
335+ registry.add <TH2>(" Electron/ PtGen_DeltaPhi_Pos" , " " , HistType::kTH2D , {axisPtRes, axisDeltaphiRes}, true );
340336 } else {
341- registry.add <TH2>(" PtGen_DeltaPtOverPtGen" , " " , HistType::kTH2D , {{ptResBinsVec, " #it{p}^{gen}_{T,l} (GeV/#it{c})" }, axisDeltaptRes}, true );
342- registry.add <TH2>(" PtGen_DeltaEta" , " " , HistType::kTH2D , {{ptResBinsVec, " #it{p}^{gen}_{T,l} (GeV/#it{c})" }, axisDeltaetaRes}, true );
343- registry.add <TH2>(" PtGen_DeltaPhi_Neg" , " " , HistType::kTH2D , {{ptResBinsVec, " #it{p}^{gen}_{T,l} (GeV/#it{c})" }, axisDeltaphiRes}, true );
344- registry.add <TH2>(" PtGen_DeltaPhi_Pos" , " " , HistType::kTH2D , {{ptResBinsVec, " #it{p}^{gen}_{T,l} (GeV/#it{c})" }, axisDeltaphiRes}, true );
337+ registry.add <TH2>(" Electron/ PtGen_DeltaPtOverPtGen" , " " , HistType::kTH2D , {{ptResBinsVec, " #it{p}^{gen}_{T,l} (GeV/#it{c})" }, axisDeltaptRes}, true );
338+ registry.add <TH2>(" Electron/ PtGen_DeltaEta" , " " , HistType::kTH2D , {{ptResBinsVec, " #it{p}^{gen}_{T,l} (GeV/#it{c})" }, axisDeltaetaRes}, true );
339+ registry.add <TH2>(" Electron/ PtGen_DeltaPhi_Neg" , " " , HistType::kTH2D , {{ptResBinsVec, " #it{p}^{gen}_{T,l} (GeV/#it{c})" }, axisDeltaphiRes}, true );
340+ registry.add <TH2>(" Electron/ PtGen_DeltaPhi_Pos" , " " , HistType::kTH2D , {{ptResBinsVec, " #it{p}^{gen}_{T,l} (GeV/#it{c})" }, axisDeltaphiRes}, true );
345341 }
342+
343+ registry.addClone (" Electron/" , " GlobalMuon/" );
344+ registry.addClone (" Electron/" , " StandaloneMuon/" );
346345 }
347346
348347 template <o2::aod::pwgem::dilepton::smearing::EMAnaType type, typename TTracksMC, typename TMCCollisions>
@@ -360,21 +359,59 @@ struct CheckSmearing {
360359 }
361360 }
362361
363- float deltaptoverpt = -1000 .;
364- if (mctrack.pt () > 0 .)
365- deltaptoverpt = (mctrack.pt () - mctrack.ptSmeared ()) / mctrack.pt ();
366- float deltaeta = mctrack.eta () - mctrack.etaSmeared ();
367- float deltaphi = mctrack.phi () - mctrack.phiSmeared ();
368- registry.fill (HIST (" PtGen_DeltaPtOverPtGen" ), mctrack.pt (), deltaptoverpt);
369- registry.fill (HIST (" PtGen_DeltaEta" ), mctrack.pt (), deltaeta);
370- if (mctrack.pdgCode () < 0 ) {
371- registry.fill (HIST (" PtGen_DeltaPhi_Neg" ), mctrack.pt (), deltaphi);
372- } else {
373- registry.fill (HIST (" PtGen_DeltaPhi_Pos" ), mctrack.pt (), deltaphi);
362+ if (std::abs (mctrack.pdgCode ()) == 11 ) { // for electrons
363+ float deltaptoverpt = -1000 .f ;
364+ if (mctrack.pt () > 0 .f ) {
365+ deltaptoverpt = (mctrack.pt () - mctrack.ptSmeared ()) / mctrack.pt ();
366+ }
367+ float deltaeta = mctrack.eta () - mctrack.etaSmeared ();
368+ float deltaphi = mctrack.phi () - mctrack.phiSmeared ();
369+ registry.fill (HIST (" Electron/PtGen_DeltaPtOverPtGen" ), mctrack.pt (), deltaptoverpt);
370+ registry.fill (HIST (" Electron/PtGen_DeltaEta" ), mctrack.pt (), deltaeta);
371+ if (mctrack.pdgCode () < 0 ) { // e+
372+ registry.fill (HIST (" Electron/PtGen_DeltaPhi_Pos" ), mctrack.pt (), deltaphi);
373+ } else { // e-
374+ registry.fill (HIST (" Electron/PtGen_DeltaPhi_Neg" ), mctrack.pt (), deltaphi);
375+ }
376+ registry.fill (HIST (" Electron/hCorrelation_Pt" ), mctrack.pt (), mctrack.ptSmeared ());
377+ registry.fill (HIST (" Electron/hCorrelation_Eta" ), mctrack.eta (), mctrack.etaSmeared ());
378+ registry.fill (HIST (" Electron/hCorrelation_Phi" ), mctrack.phi (), mctrack.phiSmeared ());
379+ } else if (std::abs (mctrack.pdgCode ()) == 13 ) { // for muons
380+ float deltaptoverpt = -1000 .f ;
381+ // for standalone muons
382+ if (mctrack.pt () > 0 .f ) {
383+ deltaptoverpt = (mctrack.pt () - mctrack.ptSmeared_sa_muon ()) / mctrack.pt ();
384+ }
385+ float deltaeta = mctrack.eta () - mctrack.etaSmeared_sa_muon ();
386+ float deltaphi = mctrack.phi () - mctrack.phiSmeared_sa_muon ();
387+ registry.fill (HIST (" StandaloneMuon/PtGen_DeltaPtOverPtGen" ), mctrack.pt (), deltaptoverpt);
388+ registry.fill (HIST (" StandaloneMuon/PtGen_DeltaEta" ), mctrack.pt (), deltaeta);
389+ if (mctrack.pdgCode () < 0 ) { // mu+
390+ registry.fill (HIST (" StandaloneMuon/PtGen_DeltaPhi_Pos" ), mctrack.pt (), deltaphi);
391+ } else { // mu-
392+ registry.fill (HIST (" StandaloneMuon/PtGen_DeltaPhi_Neg" ), mctrack.pt (), deltaphi);
393+ }
394+ registry.fill (HIST (" StandaloneMuon/hCorrelation_Pt" ), mctrack.pt (), mctrack.ptSmeared_sa_muon ());
395+ registry.fill (HIST (" StandaloneMuon/hCorrelation_Eta" ), mctrack.eta (), mctrack.etaSmeared_sa_muon ());
396+ registry.fill (HIST (" StandaloneMuon/hCorrelation_Phi" ), mctrack.phi (), mctrack.phiSmeared_sa_muon ());
397+
398+ // for global muons
399+ if (mctrack.pt () > 0 .f ) {
400+ deltaptoverpt = (mctrack.pt () - mctrack.ptSmeared_gl_muon ()) / mctrack.pt ();
401+ }
402+ deltaeta = mctrack.eta () - mctrack.etaSmeared_gl_muon ();
403+ deltaphi = mctrack.phi () - mctrack.phiSmeared_gl_muon ();
404+ registry.fill (HIST (" GlobalMuon/PtGen_DeltaPtOverPtGen" ), mctrack.pt (), deltaptoverpt);
405+ registry.fill (HIST (" GlobalMuon/PtGen_DeltaEta" ), mctrack.pt (), deltaeta);
406+ if (mctrack.pdgCode () < 0 ) { // mu+
407+ registry.fill (HIST (" GlobalMuon/PtGen_DeltaPhi_Pos" ), mctrack.pt (), deltaphi);
408+ } else { // mu-
409+ registry.fill (HIST (" GlobalMuon/PtGen_DeltaPhi_Neg" ), mctrack.pt (), deltaphi);
410+ }
411+ registry.fill (HIST (" GlobalMuon/hCorrelation_Pt" ), mctrack.pt (), mctrack.ptSmeared_gl_muon ());
412+ registry.fill (HIST (" GlobalMuon/hCorrelation_Eta" ), mctrack.eta (), mctrack.etaSmeared_gl_muon ());
413+ registry.fill (HIST (" GlobalMuon/hCorrelation_Phi" ), mctrack.phi (), mctrack.phiSmeared_gl_muon ());
374414 }
375- registry.fill (HIST (" hCorrelation_Pt" ), mctrack.pt (), mctrack.ptSmeared ());
376- registry.fill (HIST (" hCorrelation_Eta" ), mctrack.eta (), mctrack.etaSmeared ());
377- registry.fill (HIST (" hCorrelation_Phi" ), mctrack.phi (), mctrack.phiSmeared ());
378415 } // end of mctrack loop
379416 }
380417
@@ -383,25 +420,17 @@ struct CheckSmearing {
383420 Check<o2::aod::pwgem::dilepton::smearing::EMAnaType::kEfficiency >(tracksMC, mccollisions);
384421 }
385422
386- // void processCheckMCanalysisDQ(MyReducedTracks const& tracksMC)
387- // {
388- // Check(tracksMC);
389- // }
390-
391423 void processCheckCocktail (MyCocktailTracks const & tracksMC)
392424 {
393425 Check<o2::aod::pwgem::dilepton::smearing::EMAnaType::kCocktail >(tracksMC, nullptr );
394426 }
395427
396428 void processDummyMCanalysisEM (aod::EMMCParticles const &) {}
397- // void processDummyMCanalysisDQ(ReducedMCTracks const&) {}
398429 void processDummyCocktail (aod::McParticles const &) {}
399430
400431 PROCESS_SWITCH (CheckSmearing, processCheckMCanalysisEM, " Run for MC analysis" , false );
401- // PROCESS_SWITCH(CheckSmearing, processCheckMCanalysisDQ, "Run for MC analysis", false);
402432 PROCESS_SWITCH (CheckSmearing, processCheckCocktail, " Run for cocktail analysis" , false );
403433 PROCESS_SWITCH (CheckSmearing, processDummyMCanalysisEM, " Dummy process function" , false );
404- // PROCESS_SWITCH(CheckSmearing, processDummyMCanalysisDQ, "Dummy process function", false);
405434 PROCESS_SWITCH (CheckSmearing, processDummyCocktail, " Dummy process function" , true );
406435};
407436WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments