Skip to content

Commit 3063cce

Browse files
committed
PWGEM/Dilepton: add muons in struct CheckSmearing
1 parent eb98f56 commit 3063cce

File tree

2 files changed

+90
-56
lines changed

2 files changed

+90
-56
lines changed

PWGEM/Dilepton/Tasks/smearing.cxx

Lines changed: 78 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,21 @@
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

3232
using namespace o2;
3333
using 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

305302
struct 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
};
407436
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

PWGEM/Dilepton/Utils/MomentumSmearer.h

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,27 @@
1515
#ifndef PWGEM_DILEPTON_UTILS_MOMENTUMSMEARER_H_
1616
#define PWGEM_DILEPTON_UTILS_MOMENTUMSMEARER_H_
1717

18-
#include <vector>
18+
#include "CCDB/BasicCCDBManager.h"
19+
#include "Framework/ASoAHelpers.h"
20+
#include "Framework/AnalysisTask.h"
21+
#include "Framework/Logger.h"
22+
#include "Framework/runDataProcessing.h"
1923

24+
#include <TFile.h>
25+
#include <TGrid.h>
2026
#include <TH1.h>
2127
#include <TH2.h>
2228
#include <TH3.h>
2329
#include <THnSparse.h>
24-
#include <TString.h>
25-
#include <TGrid.h>
26-
#include <TFile.h>
2730
#include <TKey.h>
31+
#include <TString.h>
2832

29-
#include "CCDB/BasicCCDBManager.h"
30-
#include "Framework/Logger.h"
33+
#include <vector>
3134

32-
using namespace o2::framework;
3335
using namespace o2;
36+
using namespace o2::framework;
37+
using namespace o2::framework::expressions;
38+
using namespace o2::soa;
3439

3540
class MomentumSmearer
3641
{

0 commit comments

Comments
 (0)