Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions PWGEM/Dilepton/Core/DielectronCut.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.

Check failure on line 1 in PWGEM/Dilepton/Core/DielectronCut.h

View workflow job for this annotation

GitHub Actions / O2 linter

[doc/file]

Provide mandatory file documentation.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
Expand All @@ -8,7 +8,7 @@
// 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.

Check failure on line 11 in PWGEM/Dilepton/Core/DielectronCut.h

View workflow job for this annotation

GitHub Actions / O2 linter

[doc/file]

Documentation for \author is missing, incorrect or misplaced.

Check failure on line 11 in PWGEM/Dilepton/Core/DielectronCut.h

View workflow job for this annotation

GitHub Actions / O2 linter

[doc/file]

Documentation for \brief is missing, incorrect or misplaced.

Check failure on line 11 in PWGEM/Dilepton/Core/DielectronCut.h

View workflow job for this annotation

GitHub Actions / O2 linter

[doc/file]

Documentation for \file is missing, incorrect or misplaced.
//
// Class for dielectron selection
//
Expand All @@ -32,8 +32,8 @@
#include "PWGEM/Dilepton/Utils/PairUtilities.h"
#include "PWGEM/Dilepton/Utils/EMTrackUtilities.h"

using namespace o2::aod::pwgem::dilepton::utils::emtrackutil;

Check failure on line 35 in PWGEM/Dilepton/Core/DielectronCut.h

View workflow job for this annotation

GitHub Actions / O2 linter

[using-directive]

Do not put using directives at global scope in headers.
using namespace o2::aod::pwgem::dilepton::utils::pairutil;

Check failure on line 36 in PWGEM/Dilepton/Core/DielectronCut.h

View workflow job for this annotation

GitHub Actions / O2 linter

[using-directive]

Do not put using directives at global scope in headers.

class DielectronCut : public TNamed
{
Expand Down Expand Up @@ -359,13 +359,13 @@
{
switch (cut) {
case DielectronCuts::kTrackPtRange:
return track.pt() >= mMinTrackPt && track.pt() <= mMaxTrackPt;
return track.pt() > mMinTrackPt && track.pt() < mMaxTrackPt;

case DielectronCuts::kTrackEtaRange:
return track.eta() >= mMinTrackEta && track.eta() <= mMaxTrackEta;
return track.eta() > mMinTrackEta && track.eta() < mMaxTrackEta;

case DielectronCuts::kTrackPhiRange:
return track.phi() >= mMinTrackPhi && track.phi() <= mMaxTrackPhi;
return track.phi() > mMinTrackPhi && track.phi() < mMaxTrackPhi;

case DielectronCuts::kTPCNCls:
return track.tpcNClsFound() >= mMinNClustersTPC;
Expand All @@ -374,10 +374,10 @@
return track.tpcNClsCrossedRows() >= mMinNCrossedRowsTPC;

case DielectronCuts::kTPCCrossedRowsOverNCls:
return track.tpcCrossedRowsOverFindableCls() >= mMinNCrossedRowsOverFindableClustersTPC;
return track.tpcCrossedRowsOverFindableCls() > mMinNCrossedRowsOverFindableClustersTPC;

case DielectronCuts::kTPCFracSharedClusters:
return track.tpcFractionSharedCls() <= mMaxFracSharedClustersTPC;
return track.tpcFractionSharedCls() < mMaxFracSharedClustersTPC;

case DielectronCuts::kRelDiffPin:
return mMinRelDiffPin < (track.tpcInnerParam() - track.p()) / track.p() && (track.tpcInnerParam() - track.p()) / track.p() < mMaxRelDiffPin;
Expand All @@ -386,13 +386,13 @@
return mMinChi2PerClusterTPC < track.tpcChi2NCl() && track.tpcChi2NCl() < mMaxChi2PerClusterTPC;

case DielectronCuts::kDCA3Dsigma:
return mMinDca3D <= dca3DinSigma(track) && dca3DinSigma(track) <= mMaxDca3D; // in sigma for single leg
return mMinDca3D < dca3DinSigma(track) && dca3DinSigma(track) < mMaxDca3D; // in sigma for single leg

case DielectronCuts::kDCAxy:
return std::fabs(track.dcaXY()) <= ((mMaxDcaXYPtDep) ? mMaxDcaXYPtDep(track.pt()) : mMaxDcaXY);
return std::fabs(track.dcaXY()) < ((mMaxDcaXYPtDep) ? mMaxDcaXYPtDep(track.pt()) : mMaxDcaXY);

case DielectronCuts::kDCAz:
return std::fabs(track.dcaZ()) <= mMaxDcaZ;
return std::fabs(track.dcaZ()) < mMaxDcaZ;

case DielectronCuts::kITSNCls:
return mMinNClustersITS <= track.itsNCls() && track.itsNCls() <= mMaxNClustersITS;
Expand Down Expand Up @@ -424,7 +424,7 @@

void SetTrackPtRange(float minPt = 0.f, float maxPt = 1e10f);
void SetTrackEtaRange(float minEta = -1e10f, float maxEta = 1e10f);
void SetTrackPhiRange(float minPhi = 0.f, float maxPhi = 2.f * M_PI);

Check failure on line 427 in PWGEM/Dilepton/Core/DielectronCut.h

View workflow job for this annotation

GitHub Actions / O2 linter

[pi-multiple-fraction]

Use multiples/fractions of PI defined in o2::constants::math.

Check failure on line 427 in PWGEM/Dilepton/Core/DielectronCut.h

View workflow job for this annotation

GitHub Actions / O2 linter

[external-pi]

Use the PI constant (and its multiples and fractions) defined in o2::constants::math.
void SetMinNClustersTPC(int minNClustersTPC);
void SetMinNCrossedRowsTPC(int minNCrossedRowsTPC);
void SetMinNCrossedRowsOverFindableClustersTPC(float minNCrossedRowsOverFindableClustersTPC);
Expand Down Expand Up @@ -499,7 +499,7 @@
// kinematic cuts
float mMinTrackPt{0.f}, mMaxTrackPt{1e10f}; // range in pT
float mMinTrackEta{-1e10f}, mMaxTrackEta{1e10f}; // range in eta
float mMinTrackPhi{0.f}, mMaxTrackPhi{2.f * M_PI}; // range in phi

Check failure on line 502 in PWGEM/Dilepton/Core/DielectronCut.h

View workflow job for this annotation

GitHub Actions / O2 linter

[pi-multiple-fraction]

Use multiples/fractions of PI defined in o2::constants::math.

Check failure on line 502 in PWGEM/Dilepton/Core/DielectronCut.h

View workflow job for this annotation

GitHub Actions / O2 linter

[external-pi]

Use the PI constant (and its multiples and fractions) defined in o2::constants::math.

// track quality cuts
int mMinNClustersTPC{0}; // min number of TPC clusters
Expand Down
6 changes: 6 additions & 0 deletions PWGEM/Dilepton/Core/Dilepton.h
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,10 @@ struct Dilepton {
Configurable<float> cfg_min_rabs{"cfg_min_rabs", 17.6, "min Radius at the absorber end"};
Configurable<float> cfg_max_rabs{"cfg_max_rabs", 89.5, "max Radius at the absorber end"};
Configurable<bool> enableTTCA{"enableTTCA", true, "Flag to enable or disable TTCA"};
Configurable<float> cfg_max_relDPt_wrt_matchedMCHMID{"cfg_max_relDPt_wrt_matchedMCHMID", 1e+10f, "max. relative dpt between MFT-MCH-MID and MCH-MID"};
Configurable<float> cfg_max_DEta_wrt_matchedMCHMID{"cfg_max_DEta_wrt_matchedMCHMID", 1e+10f, "max. deta between MFT-MCH-MID and MCH-MID"};
Configurable<float> cfg_max_DPhi_wrt_matchedMCHMID{"cfg_max_DPhi_wrt_matchedMCHMID", 1e+10f, "max. dphi between MFT-MCH-MID and MCH-MID"};
Configurable<std::vector<int>> requiredMFTDisks{"requiredMFTDisks", std::vector<int>{0}, "hit map on MFT disks [0,1,2,3,4]. logical-OR of each double-sided disk"};
} dimuoncuts;

o2::aod::rctsel::RCTFlagsChecker rctChecker;
Expand Down Expand Up @@ -749,6 +753,8 @@ struct Dilepton {
fDimuonCut.SetDCAxy(0.f, dimuoncuts.cfg_max_dcaxy);
fDimuonCut.SetRabs(dimuoncuts.cfg_min_rabs, dimuoncuts.cfg_max_rabs);
fDimuonCut.SetMaxPDCARabsDep([&](float rabs) { return (rabs < 26.5 ? 594.f : 324.f); });
fDimuonCut.SetMaxdPtdEtadPhiwrtMCHMID(dimuoncuts.cfg_max_relDPt_wrt_matchedMCHMID, dimuoncuts.cfg_max_DEta_wrt_matchedMCHMID, dimuoncuts.cfg_max_DPhi_wrt_matchedMCHMID); // this is relevant for global muons
fDimuonCut.SetMFTHitMap(dimuoncuts.requiredMFTDisks);
}

template <typename TQvectors>
Expand Down
6 changes: 6 additions & 0 deletions PWGEM/Dilepton/Core/DileptonMC.h
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,10 @@ struct DileptonMC {
Configurable<float> cfg_min_rabs{"cfg_min_rabs", 17.6, "min Radius at the absorber end"};
Configurable<float> cfg_max_rabs{"cfg_max_rabs", 89.5, "max Radius at the absorber end"};
Configurable<bool> enableTTCA{"enableTTCA", true, "Flag to enable or disable TTCA"};
Configurable<float> cfg_max_relDPt_wrt_matchedMCHMID{"cfg_max_relDPt_wrt_matchedMCHMID", 1e+10f, "max. relative dpt between MFT-MCH-MID and MCH-MID"};
Configurable<float> cfg_max_DEta_wrt_matchedMCHMID{"cfg_max_DEta_wrt_matchedMCHMID", 1e+10f, "max. deta between MFT-MCH-MID and MCH-MID"};
Configurable<float> cfg_max_DPhi_wrt_matchedMCHMID{"cfg_max_DPhi_wrt_matchedMCHMID", 1e+10f, "max. dphi between MFT-MCH-MID and MCH-MID"};
Configurable<std::vector<int>> requiredMFTDisks{"requiredMFTDisks", std::vector<int>{0}, "hit map on MFT disks [0,1,2,3,4]. logical-OR of each double-sided disk"};
} dimuoncuts;

o2::aod::rctsel::RCTFlagsChecker rctChecker;
Expand Down Expand Up @@ -715,6 +719,8 @@ struct DileptonMC {
fDimuonCut.SetDCAxy(0.f, dimuoncuts.cfg_max_dcaxy);
fDimuonCut.SetRabs(dimuoncuts.cfg_min_rabs, dimuoncuts.cfg_max_rabs);
fDimuonCut.SetMaxPDCARabsDep([&](float rabs) { return (rabs < 26.5 ? 594.f : 324.f); });
fDimuonCut.SetMaxdPtdEtadPhiwrtMCHMID(dimuoncuts.cfg_max_relDPt_wrt_matchedMCHMID, dimuoncuts.cfg_max_DEta_wrt_matchedMCHMID, dimuoncuts.cfg_max_DPhi_wrt_matchedMCHMID); // this is relevant for global muons
fDimuonCut.SetMFTHitMap(dimuoncuts.requiredMFTDisks);
}

template <typename TTrack, typename TMCParticles>
Expand Down
16 changes: 16 additions & 0 deletions PWGEM/Dilepton/Core/DimuonCut.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -119,3 +119,19 @@ void DimuonCut::SetMaxPDCARabsDep(std::function<float(float)> RabsDepCut)
mMaxPDCARabsDep = RabsDepCut;
LOG(info) << "Dimuon Cut, set max pDCA as a function of Rabs: " << mMaxPDCARabsDep(10.0);
}
void DimuonCut::SetMFTHitMap(std::vector<int> hitMap)
{
mRequiredMFTDisks = hitMap;
for (const auto& iDisk : mRequiredMFTDisks) {
LOG(info) << "Dimuon Cut, require MFT hit on Disk: " << iDisk;
}
}
void DimuonCut::SetMaxdPtdEtadPhiwrtMCHMID(float reldPtMax, float dEtaMax, float dPhiMax)
{
mMaxReldPtwrtMCHMID = reldPtMax;
mMaxdEtawrtMCHMID = dEtaMax;
mMaxdPhiwrtMCHMID = dPhiMax;
LOG(info) << "Dimuon Cut, set max rel. dpt between MFT-MCH-MID and associated MCH-MID: " << mMaxReldPtwrtMCHMID;
LOG(info) << "Dimuon Cut, set max deta between MFT-MCH-MID and associated MCH-MID: " << mMaxdEtawrtMCHMID;
LOG(info) << "Dimuon Cut, set max dphi between MFT-MCH-MID and associated MCH-MID: " << mMaxdPhiwrtMCHMID;
}
25 changes: 25 additions & 0 deletions PWGEM/Dilepton/Core/DimuonCut.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ class DimuonCut : public TNamed
kMatchingChi2MCHMID,
kRabs,
kPDCA,
kMFTHitMap,
kDPtDEtaDPhiwrtMCHMID,
kNCuts
};

Expand Down Expand Up @@ -154,6 +156,12 @@ class DimuonCut : public TNamed
if (!IsSelectedTrack(track, DimuonCuts::kRabs)) {
return false;
}
if (track.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) && !IsSelectedTrack(track, DimuonCuts::kMFTHitMap)) {
return false;
}
if (track.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) && !IsSelectedTrack(track, DimuonCuts::kDPtDEtaDPhiwrtMCHMID)) {
return false;
}

return true;
}
Expand Down Expand Up @@ -198,6 +206,19 @@ class DimuonCut : public TNamed
case DimuonCuts::kRabs:
return mMinRabs < track.rAtAbsorberEnd() && track.rAtAbsorberEnd() < mMaxRabs;

case DimuonCuts::kMFTHitMap: {
std::vector<bool> mftHitMap{checkMFTHitMap<0, 1>(track), checkMFTHitMap<2, 3>(track), checkMFTHitMap<4, 5>(track), checkMFTHitMap<6, 7>(track), checkMFTHitMap<8, 9>(track)};
for (const auto& iDisk : mRequiredMFTDisks) {
if (!mftHitMap[iDisk]) {
return false;
}
}
return true;
}

case DimuonCuts::kDPtDEtaDPhiwrtMCHMID:
return std::fabs(track.ptMatchedMCHMID() - track.pt()) / track.pt() < mMaxReldPtwrtMCHMID && std::sqrt(std::pow((track.etaMatchedMCHMID() - track.eta()) / mMaxdEtawrtMCHMID, 2) + std::pow((track.phiMatchedMCHMID() - track.phi()) / mMaxdPhiwrtMCHMID, 2)) < 1.f;

default:
return false;
}
Expand All @@ -222,6 +243,8 @@ class DimuonCut : public TNamed
void SetDCAxy(float min, float max); // in cm
void SetRabs(float min, float max); // in cm
void SetMaxPDCARabsDep(std::function<float(float)> RabsDepCut);
void SetMFTHitMap(std::vector<int> hitMap);
void SetMaxdPtdEtadPhiwrtMCHMID(float reldPtMax, float dEtaMax, float dPhiMax); // this is relevant for global muons

private:
// pair cuts
Expand Down Expand Up @@ -249,6 +272,8 @@ class DimuonCut : public TNamed

float mMinRabs{17.6}, mMaxRabs{89.5};
float mMinDcaXY{0.0f}, mMaxDcaXY{1e10f};
float mMaxReldPtwrtMCHMID{1e10f}, mMaxdEtawrtMCHMID{1e10f}, mMaxdPhiwrtMCHMID{1e10f};
std::vector<int> mRequiredMFTDisks{};

ClassDef(DimuonCut, 1);
};
Expand Down
14 changes: 14 additions & 0 deletions PWGEM/Dilepton/Core/SingleTrackQC.h
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,10 @@ struct SingleTrackQC {
Configurable<float> cfg_min_rabs{"cfg_min_rabs", 17.6, "min Radius at the absorber end"};
Configurable<float> cfg_max_rabs{"cfg_max_rabs", 89.5, "max Radius at the absorber end"};
Configurable<bool> enableTTCA{"enableTTCA", true, "Flag to enable or disable TTCA"};
Configurable<float> cfg_max_relDPt_wrt_matchedMCHMID{"cfg_max_relDPt_wrt_matchedMCHMID", 1e+10f, "max. relative dpt between MFT-MCH-MID and MCH-MID"};
Configurable<float> cfg_max_DEta_wrt_matchedMCHMID{"cfg_max_DEta_wrt_matchedMCHMID", 1e+10f, "max. deta between MFT-MCH-MID and MCH-MID"};
Configurable<float> cfg_max_DPhi_wrt_matchedMCHMID{"cfg_max_DPhi_wrt_matchedMCHMID", 1e+10f, "max. dphi between MFT-MCH-MID and MCH-MID"};
Configurable<std::vector<int>> requiredMFTDisks{"requiredMFTDisks", std::vector<int>{0}, "hit map on MFT disks [0,1,2,3,4]. logical-OR of each double-sided disk"};
} dimuoncuts;

o2::aod::rctsel::RCTFlagsChecker rctChecker;
Expand Down Expand Up @@ -282,6 +286,7 @@ struct SingleTrackQC {
// track info
fRegistry.add("Track/positive/hs", "rec. single muon", kTHnSparseD, {axis_pt, axis_eta, axis_phi, axis_dca}, true);
fRegistry.add("Track/positive/hEtaPhi_MatchMCHMID", "#eta vs. #varphi of matched MCHMID", kTH2F, {{180, 0, 2.f * M_PI}, {100, -6, -1}}, false);
fRegistry.add("Track/positive/hdEtadPhi", "#Delta#eta vs. #Delta#varphi between MFT-MCH-MID and MCH-MID;#varphi_{sa} - #varphi_{gl} (rad.);#eta_{sa} - #eta_{gl}", kTH2F, {{90, -M_PI / 4, M_PI / 4}, {100, -0.5, +0.5}}, false);
fRegistry.add("Track/positive/hQoverPt", "q/pT;q/p_{T} (GeV/c)^{-1}", kTH1F, {{400, -20, 20}}, false);
fRegistry.add("Track/positive/hTrackType", "track type", kTH1F, {{6, -0.5f, 5.5}}, false);
fRegistry.add("Track/positive/hDCAxy", "DCA x vs. y;DCA_{x} (cm);DCA_{y} (cm)", kTH2F, {{200, -0.5f, 0.5f}, {200, -0.5f, 0.5f}}, false);
Expand Down Expand Up @@ -452,6 +457,8 @@ struct SingleTrackQC {
fDimuonCut.SetDCAxy(0.f, dimuoncuts.cfg_max_dcaxy);
fDimuonCut.SetRabs(dimuoncuts.cfg_min_rabs, dimuoncuts.cfg_max_rabs);
fDimuonCut.SetMaxPDCARabsDep([&](float rabs) { return (rabs < 26.5 ? 594.f : 324.f); });
fDimuonCut.SetMaxdPtdEtadPhiwrtMCHMID(dimuoncuts.cfg_max_relDPt_wrt_matchedMCHMID, dimuoncuts.cfg_max_DEta_wrt_matchedMCHMID, dimuoncuts.cfg_max_DPhi_wrt_matchedMCHMID); // this is relevant for global muons
fDimuonCut.SetMFTHitMap(dimuoncuts.requiredMFTDisks);
}

template <typename TTrack>
Expand Down Expand Up @@ -560,9 +567,15 @@ struct SingleTrackQC {
weight = map_weight[track.globalIndex()];
}
float dca_xy = fwdDcaXYinSigma(track);

float deta = track.etaMatchedMCHMID() - track.eta();
float dphi = track.phiMatchedMCHMID() - track.phi();
o2::math_utils::bringToPMPi(dphi);

if (track.sign() > 0) {
fRegistry.fill(HIST("Track/positive/hs"), track.pt(), track.eta(), track.phi(), dca_xy, weight);
fRegistry.fill(HIST("Track/positive/hEtaPhi_MatchMCHMID"), track.phiMatchedMCHMID(), track.etaMatchedMCHMID(), weight);
fRegistry.fill(HIST("Track/positive/hdEtadPhi"), dphi, deta, weight);
fRegistry.fill(HIST("Track/positive/hQoverPt"), track.sign() / track.pt());
fRegistry.fill(HIST("Track/positive/hTrackType"), track.trackType());
fRegistry.fill(HIST("Track/positive/hDCAxy"), track.fwdDcaX(), track.fwdDcaY());
Expand All @@ -580,6 +593,7 @@ struct SingleTrackQC {
} else {
fRegistry.fill(HIST("Track/negative/hs"), track.pt(), track.eta(), track.phi(), dca_xy, weight);
fRegistry.fill(HIST("Track/negative/hEtaPhi_MatchMCHMID"), track.phiMatchedMCHMID(), track.etaMatchedMCHMID(), weight);
fRegistry.fill(HIST("Track/negative/hdEtadPhi"), dphi, deta, weight);
fRegistry.fill(HIST("Track/negative/hQoverPt"), track.sign() / track.pt());
fRegistry.fill(HIST("Track/negative/hTrackType"), track.trackType());
fRegistry.fill(HIST("Track/negative/hDCAxy"), track.fwdDcaX(), track.fwdDcaY());
Expand Down
12 changes: 12 additions & 0 deletions PWGEM/Dilepton/Core/SingleTrackQCMC.h
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,10 @@ struct SingleTrackQCMC {
Configurable<float> cfg_min_rabs{"cfg_min_rabs", 17.6, "min Radius at the absorber end"};
Configurable<float> cfg_max_rabs{"cfg_max_rabs", 89.5, "max Radius at the absorber end"};
Configurable<bool> enableTTCA{"enableTTCA", true, "Flag to enable or disable TTCA"};
Configurable<float> cfg_max_relDPt_wrt_matchedMCHMID{"cfg_max_relDPt_wrt_matchedMCHMID", 1e+10f, "max. relative dpt between MFT-MCH-MID and MCH-MID"};
Configurable<float> cfg_max_DEta_wrt_matchedMCHMID{"cfg_max_DEta_wrt_matchedMCHMID", 1e+10f, "max. deta between MFT-MCH-MID and MCH-MID"};
Configurable<float> cfg_max_DPhi_wrt_matchedMCHMID{"cfg_max_DPhi_wrt_matchedMCHMID", 1e+10f, "max. dphi between MFT-MCH-MID and MCH-MID"};
Configurable<std::vector<int>> requiredMFTDisks{"requiredMFTDisks", std::vector<int>{0}, "hit map on MFT disks [0,1,2,3,4]. logical-OR of each double-sided disk"};
} dimuoncuts;

o2::aod::rctsel::RCTFlagsChecker rctChecker;
Expand Down Expand Up @@ -339,6 +343,7 @@ struct SingleTrackQCMC {
fRegistry.add("Track/lf/positive/hs", "rec. single muon", kTHnSparseD, {axis_pt, axis_eta, axis_phi, axis_dca, axis_charge_gen}, true);
if (cfgFillQA) {
fRegistry.add("Track/lf/positive/hEtaPhi_MatchMCHMID", "#eta vs. #varphi of matched MCHMID", kTH2F, {{180, 0, 2.f * M_PI}, {100, -6, -1}}, false);
fRegistry.add("Track/lf/positive/hdEtadPhi", "#Delta#eta vs. #Delta#varphi between MFT-MCH-MID and MCH-MID;#varphi_{sa} - #varphi_{gl} (rad.);#eta_{sa} - #eta_{gl}", kTH2F, {{90, -M_PI / 4, M_PI / 4}, {100, -0.5, +0.5}}, false);
fRegistry.add("Track/lf/positive/hQoverPt", "q/pT;q/p_{T} (GeV/c)^{-1}", kTH1F, {{400, -20, 20}}, false);
fRegistry.add("Track/lf/positive/hTrackType", "track type", kTH1F, {{6, -0.5f, 5.5}}, false);
fRegistry.add("Track/lf/positive/hDCAxy", "DCA x vs. y;DCA_{x} (cm);DCA_{y} (cm)", kTH2F, {{200, -0.5f, 0.5f}, {200, -0.5f, 0.5f}}, false);
Expand Down Expand Up @@ -511,6 +516,8 @@ struct SingleTrackQCMC {
fDimuonCut.SetDCAxy(0.f, dimuoncuts.cfg_max_dcaxy);
fDimuonCut.SetRabs(dimuoncuts.cfg_min_rabs, dimuoncuts.cfg_max_rabs);
fDimuonCut.SetMaxPDCARabsDep([&](float rabs) { return (rabs < 26.5 ? 594.f : 324.f); });
fDimuonCut.SetMaxdPtdEtadPhiwrtMCHMID(dimuoncuts.cfg_max_relDPt_wrt_matchedMCHMID, dimuoncuts.cfg_max_DEta_wrt_matchedMCHMID, dimuoncuts.cfg_max_DPhi_wrt_matchedMCHMID); // this is relevant for global muons
fDimuonCut.SetMFTHitMap(dimuoncuts.requiredMFTDisks);
}

template <bool isSmeared, typename T>
Expand Down Expand Up @@ -670,6 +677,9 @@ struct SingleTrackQCMC {
{
auto mctrack = track.template emmcparticle_as<TMCParticles>();
float dca_xy = fwdDcaXYinSigma(track);
float deta = track.etaMatchedMCHMID() - track.eta();
float dphi = track.phiMatchedMCHMID() - track.phi();
o2::math_utils::bringToPMPi(dphi);

float weight = 1.f;
if (cfgApplyWeightTTCA) {
Expand All @@ -681,6 +691,7 @@ struct SingleTrackQCMC {
fRegistry.fill(HIST("Track/") + HIST(lepton_source_types[lepton_source_id]) + HIST("positive/hs"), track.pt(), track.eta(), track.phi(), dca_xy, -mctrack.pdgCode() / pdg_lepton, weight);
if (cfgFillQA) {
fRegistry.fill(HIST("Track/") + HIST(lepton_source_types[lepton_source_id]) + HIST("positive/hEtaPhi_MatchMCHMID"), track.phiMatchedMCHMID(), track.etaMatchedMCHMID(), weight);
fRegistry.fill(HIST("Track/") + HIST(lepton_source_types[lepton_source_id]) + HIST("positive/hdEtadPhi"), dphi, deta, weight);
fRegistry.fill(HIST("Track/") + HIST(lepton_source_types[lepton_source_id]) + HIST("positive/hQoverPt"), track.sign() / track.pt());
fRegistry.fill(HIST("Track/") + HIST(lepton_source_types[lepton_source_id]) + HIST("positive/hTrackType"), track.trackType());
fRegistry.fill(HIST("Track/") + HIST(lepton_source_types[lepton_source_id]) + HIST("positive/hDCAxy"), track.fwdDcaX(), track.fwdDcaY());
Expand All @@ -703,6 +714,7 @@ struct SingleTrackQCMC {
fRegistry.fill(HIST("Track/") + HIST(lepton_source_types[lepton_source_id]) + HIST("negative/hs"), track.pt(), track.eta(), track.phi(), dca_xy, -mctrack.pdgCode() / pdg_lepton, weight);
if (cfgFillQA) {
fRegistry.fill(HIST("Track/") + HIST(lepton_source_types[lepton_source_id]) + HIST("negative/hEtaPhi_MatchMCHMID"), track.phiMatchedMCHMID(), track.etaMatchedMCHMID(), weight);
fRegistry.fill(HIST("Track/") + HIST(lepton_source_types[lepton_source_id]) + HIST("negative/hdEtadPhi"), dphi, deta, weight);
fRegistry.fill(HIST("Track/") + HIST(lepton_source_types[lepton_source_id]) + HIST("negative/hQoverPt"), track.sign() / track.pt());
fRegistry.fill(HIST("Track/") + HIST(lepton_source_types[lepton_source_id]) + HIST("negative/hTrackType"), track.trackType());
fRegistry.fill(HIST("Track/") + HIST(lepton_source_types[lepton_source_id]) + HIST("negative/hDCAxy"), track.fwdDcaX(), track.fwdDcaY());
Expand Down
Loading
Loading