Skip to content

Commit ad00338

Browse files
authored
PWGEM/Dilepton: reduce memory consumption (#6878)
1 parent 6be770f commit ad00338

7 files changed

Lines changed: 32 additions & 43 deletions

File tree

PWGEM/Dilepton/TableProducer/skimmerPrimaryElectron.cxx

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
/// \brief write relevant information about primary electrons.
1313
/// \author daiki.sekihata@cern.ch
1414

15-
#include <map>
15+
#include <unordered_map>
1616
#include "Math/Vector4D.h"
1717
#include "Framework/runDataProcessing.h"
1818
#include "Framework/AnalysisTask.h"
@@ -34,7 +34,6 @@ using namespace o2::soa;
3434
using namespace o2::framework;
3535
using namespace o2::framework::expressions;
3636
using namespace o2::constants::physics;
37-
// using namespace o2::aod::pwgem::photonmeson;
3837

3938
using MyTracks = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::TracksCov,
4039
aod::pidTPCFullEl, aod::pidTPCFullMu, aod::pidTPCFullPi, aod::pidTPCFullKa, aod::pidTPCFullPr,
@@ -275,7 +274,7 @@ struct skimmerPrimaryElectron {
275274
template <typename TTrack>
276275
bool isElectron(TTrack const& track)
277276
{
278-
return isElectron_TPChadrej(track) || isElectron_TOFrecovery(track);
277+
return isElectron_TPChadrej(track) || isElectron_TOFreq(track);
279278
}
280279

281280
template <typename TTrack>
@@ -300,7 +299,7 @@ struct skimmerPrimaryElectron {
300299
}
301300

302301
template <typename TTrack>
303-
bool isElectron_TOFrecovery(TTrack const& track)
302+
bool isElectron_TOFreq(TTrack const& track)
304303
{
305304
if (minTPCNsigmaPi < track.tpcNSigmaPi() && track.tpcNSigmaPi() < maxTPCNsigmaPi) {
306305
return false;
@@ -314,7 +313,7 @@ struct skimmerPrimaryElectron {
314313
template <typename TCollision, typename TTrack>
315314
void fillTrackTable(TCollision const& collision, TTrack const& track)
316315
{
317-
if (std::find(stored_trackIds.begin(), stored_trackIds.end(), std::make_pair(collision.globalIndex(), track.globalIndex())) == stored_trackIds.end()) {
316+
if (std::find(stored_trackIds.begin(), stored_trackIds.end(), std::pair<int, int>{collision.globalIndex(), track.globalIndex()}) == stored_trackIds.end()) {
318317
gpu::gpustd::array<float, 2> dcaInfo;
319318
auto track_par_cov_recalc = getTrackParCov(track);
320319
track_par_cov_recalc.setPID(o2::track::PID::Electron);
@@ -356,7 +355,7 @@ struct skimmerPrimaryElectron {
356355
track_par_cov_recalc.getSigma1PtTgl(),
357356
track_par_cov_recalc.getSigma1Pt2());
358357

359-
stored_trackIds.emplace_back(std::make_pair(collision.globalIndex(), track.globalIndex()));
358+
stored_trackIds.emplace_back(std::pair<int, int>{collision.globalIndex(), track.globalIndex()});
360359

361360
if (fillQAHistogram) {
362361
uint32_t itsClusterSizes = track.itsClusterSizes();
@@ -404,7 +403,7 @@ struct skimmerPrimaryElectron {
404403
}
405404
}
406405

407-
std::vector<std::pair<int64_t, int64_t>> stored_trackIds;
406+
std::vector<std::pair<int, int>> stored_trackIds;
408407
Filter trackFilter = o2::aod::track::pt > minpt&& nabs(o2::aod::track::eta) < maxeta&& o2::aod::track::tpcChi2NCl < maxchi2tpc&& o2::aod::track::itsChi2NCl < maxchi2its&& ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::ITS) == true && ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::TPC) == true;
409408
Filter pidFilter = minTPCNsigmaEl < o2::aod::pidtpc::tpcNSigmaEl && o2::aod::pidtpc::tpcNSigmaEl < maxTPCNsigmaEl && ((0.96f < o2::aod::pidtofbeta::beta && o2::aod::pidtofbeta::beta < 1.04f) || o2::aod::pidtofbeta::beta < 0.f) && (o2::aod::pidtpc::tpcNSigmaPi < minTPCNsigmaPi || maxTPCNsigmaPi < o2::aod::pidtpc::tpcNSigmaPi);
410409
using MyFilteredTracks = soa::Filtered<MyTracks>;
@@ -755,7 +754,7 @@ struct prefilterPrimaryElectron {
755754

756755
void processPrefilter_TTCA(Join<aod::Collisions, aod::EvSels> const& collisions, aod::BCsWithTimestamps const&, MyTracks const&, aod::EMPrimaryElectrons const& primaryelectrons, aod::TrackAssoc const& trackIndices)
757756
{
758-
std::map<int, uint8_t> pfb_map; // map track.globalIndex -> prefilter bit
757+
std::unordered_map<int, uint8_t> pfb_map; // map track.globalIndex -> prefilter bit
759758

760759
for (auto& collision : collisions) {
761760
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
@@ -834,7 +833,7 @@ struct prefilterPrimaryElectron {
834833

835834
void processPrefilter_SA(Join<aod::Collisions, aod::EvSels> const& collisions, aod::BCsWithTimestamps const&, MyFilteredTracks const&, aod::EMPrimaryElectrons const& primaryelectrons)
836835
{
837-
std::map<int, uint8_t> pfb_map; // map track.globalIndex -> prefilter bit
836+
std::unordered_map<int, uint8_t> pfb_map; // map track.globalIndex -> prefilter bit
838837

839838
for (auto& collision : collisions) {
840839
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
@@ -908,11 +907,11 @@ struct associateAmbiguousElectron {
908907
for (auto& electron : electrons) {
909908
auto electrons_with_same_trackId = electrons.sliceBy(perTrack, electron.trackId());
910909
ambele_self_Ids.reserve(electrons_with_same_trackId.size());
911-
for (auto& amp_ele : electrons_with_same_trackId) {
912-
if (amp_ele.globalIndex() == electron.globalIndex()) { // don't store myself.
910+
for (auto& amb_ele : electrons_with_same_trackId) {
911+
if (amb_ele.globalIndex() == electron.globalIndex()) { // don't store myself.
913912
continue;
914913
}
915-
ambele_self_Ids.emplace_back(amp_ele.globalIndex());
914+
ambele_self_Ids.emplace_back(amb_ele.globalIndex());
916915
}
917916
em_amb_ele_ids(ambele_self_Ids);
918917
ambele_self_Ids.clear();

PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,6 @@ using MFTTracksMC = soa::Join<o2::aod::MFTTracks, aod::McMFTTrackLabels>;
5151
using MFTTrackMC = MFTTracksMC::iterator;
5252

5353
struct skimmerPrimaryMuon {
54-
enum class EM_MuMuPairType : int {
55-
kULS = 0,
56-
kLSpp = +1,
57-
kLSnn = -1,
58-
};
59-
6054
// Index used to set different options for Muon propagation
6155
enum class MuonExtrapolation : int {
6256
kToVertex = 0, // propagtion to vertex by default
@@ -80,14 +74,12 @@ struct skimmerPrimaryMuon {
8074
Configurable<std::string> grpPath{"grpPath", "GLO/GRP/GRP", "Path of the grp file"};
8175
Configurable<std::string> grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"};
8276
Configurable<std::string> geoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"};
83-
// Configurable<float> minpt{"minpt", 0.1, "min pt for track"};
8477
Configurable<float> mineta{"mineta", -4.0, "eta acceptance"};
8578
Configurable<float> maxeta{"maxeta", -2.5, "eta acceptance"};
8679
Configurable<float> mineta_mft{"mineta_mft", -3.6, "eta acceptance"};
8780
Configurable<float> maxeta_mft{"maxeta_mft", -2.5, "eta acceptance"};
8881
Configurable<float> minRabs{"minRabs", 17.6, "min. R at absorber end"};
8982
Configurable<float> maxRabs{"maxRabs", 89.5, "max. R at absorber end"};
90-
// Configurable<float> maxPDCA{"maxPDCA", 1e+3, "max. p DCA to reject beam-gas background"};
9183

9284
o2::ccdb::CcdbApi ccdbApi;
9385
Service<o2::ccdb::BasicCCDBManager> ccdb;
@@ -268,9 +260,9 @@ struct skimmerPrimaryMuon {
268260
{
269261
double chi2 = muon.chi2();
270262
SMatrix5 tpars(muon.x(), muon.y(), muon.phi(), muon.tgl(), muon.signed1Pt());
271-
std::vector<double> v1{muon.cXX(), muon.cXY(), muon.cYY(), muon.cPhiX(), muon.cPhiY(),
272-
muon.cPhiPhi(), muon.cTglX(), muon.cTglY(), muon.cTglPhi(), muon.cTglTgl(),
273-
muon.c1PtX(), muon.c1PtY(), muon.c1PtPhi(), muon.c1PtTgl(), muon.c1Pt21Pt2()};
263+
std::vector<float> v1{muon.cXX(), muon.cXY(), muon.cYY(), muon.cPhiX(), muon.cPhiY(),
264+
muon.cPhiPhi(), muon.cTglX(), muon.cTglY(), muon.cTglPhi(), muon.cTglTgl(),
265+
muon.c1PtX(), muon.c1PtY(), muon.c1PtPhi(), muon.c1PtTgl(), muon.c1Pt21Pt2()};
274266
SMatrix55 tcovs(v1.begin(), v1.end());
275267
o2::track::TrackParCovFwd fwdtrack{muon.z(), tpars, tcovs, chi2};
276268
o2::dataformats::GlobalFwdTrack propmuon;
@@ -307,6 +299,10 @@ struct skimmerPrimaryMuon {
307299
propmuon.setZ(fwdtrack.getZ());
308300
propmuon.setCovariances(fwdtrack.getCovariances());
309301
}
302+
303+
v1.clear();
304+
v1.shrink_to_fit();
305+
310306
return propmuon;
311307
}
312308

PWGEM/Dilepton/TableProducer/treeCreatorSingleElectronQA.cxx

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
/// \brief write relevant information for dalitz ee analysis to an AO2D.root file. This file is then the only necessary input to perform pcm analysis.
1313
/// \author daiki.sekihata@cern.ch
1414

15-
#include <unordered_map>
1615
#include <random>
1716

1817
#include "Framework/runDataProcessing.h"
@@ -318,21 +317,14 @@ struct TreeCreatorSingleElectronQA {
318317

319318
SliceCache cache;
320319
Preslice<aod::Tracks> perCollision_track = o2::aod::track::collisionId;
321-
PresliceUnsorted<MyCollisions_Cent> preslice_collisions_per_bc = o2::aod::evsel::foundBCId;
322-
std::unordered_map<uint64_t, int> map_ncolls_per_bc;
323320

324321
Filter trackFilter = o2::aod::track::pt > minpt&& nabs(o2::aod::track::eta) < maxeta&& nabs(o2::aod::track::dcaXY) < dca_xy_max&& nabs(o2::aod::track::dcaZ) < dca_z_max&& o2::aod::track::tpcChi2NCl < maxchi2tpc&& o2::aod::track::itsChi2NCl < maxchi2its&& ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::ITS) == true && ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::TPC) == true;
325322
Filter pidFilter = (minTPCNsigmaEl < o2::aod::pidtpc::tpcNSigmaEl && o2::aod::pidtpc::tpcNSigmaEl < maxTPCNsigmaEl) && (o2::aod::pidtpc::tpcNSigmaPi < minTPCNsigmaPi || maxTPCNsigmaPi < o2::aod::pidtpc::tpcNSigmaPi);
326323
using MyFilteredTracks = soa::Filtered<MyTracks>;
327324

328325
// ---------- for data ----------
329-
void processRec(MyCollisions_Cent const& collisions, MyBCs const& bcs, MyFilteredTracks const& tracks)
326+
void processRec(MyCollisions_Cent const& collisions, MyBCs const&, MyFilteredTracks const& tracks)
330327
{
331-
for (auto& bc : bcs) {
332-
auto collisions_per_bc = collisions.sliceBy(preslice_collisions_per_bc, bc.globalIndex());
333-
map_ncolls_per_bc[bc.globalIndex()] = collisions_per_bc.size();
334-
}
335-
336328
for (auto& collision : collisions) {
337329
auto bc = collision.bc_as<MyBCs>();
338330
initCCDB(bc);
@@ -366,13 +358,8 @@ struct TreeCreatorSingleElectronQA {
366358

367359
// ---------- for MC ----------
368360
using MyFilteredTracksMC = soa::Filtered<MyTracksMC>;
369-
void processMC(MyCollisionsMC_Cent const& collisions, aod::McCollisions const&, MyBCs const& bcs, MyFilteredTracksMC const& tracks)
361+
void processMC(MyCollisionsMC_Cent const& collisions, aod::McCollisions const&, MyBCs const&, MyFilteredTracksMC const& tracks)
370362
{
371-
for (auto& bc : bcs) {
372-
auto collisions_per_bc = collisions.sliceBy(preslice_collisions_per_bc, bc.globalIndex());
373-
map_ncolls_per_bc[bc.globalIndex()] = collisions_per_bc.size();
374-
}
375-
376363
for (auto& collision : collisions) {
377364
if (!collision.has_mcCollision()) {
378365
continue;

PWGEM/Dilepton/Tasks/dielectronQC.cxx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,6 @@ struct dielectronQC {
6969
Configurable<bool> skipGRPOquery{"skipGRPOquery", true, "skip grpo query"};
7070
Configurable<float> d_bz_input{"d_bz_input", -999, "bz field in kG, -999 is automatic"};
7171

72-
// Configurable<std::string> beam1_str{"beam1_str", "p", "p or Pb"};
73-
// Configurable<std::string> beam2_str{"beam2_str", "p", "p or Pb"};
74-
// Configurable<float> beam1_energy_GeV{"beam1_energy_GeV", 6800, "beam energy for beam1"};
75-
// Configurable<float> beam2_energy_GeV{"beam2_energy_GeV", 6800, "beam energy for beam2"};
76-
7772
Configurable<int> cfgAnalysisType{"cfgAnalysisType", static_cast<int>(o2::aod::pwgem::dilepton::utils::pairutil::DileptonAnalysisType::kQC), "kQC:0, kUPC:1, kFlowV2:2, kFlowV3:3, kFlowV4:4, kPolarization:5, kHFll:6"};
7873
Configurable<int> cfgQvecEstimator{"cfgQvecEstimator", 0, "FT0M:0, FT0A:1, FT0C:2"};
7974
Configurable<int> cfgCentEstimator{"cfgCentEstimator", 2, "FT0M:0, FT0A:1, FT0C:2"};
@@ -387,6 +382,7 @@ struct dielectronQC {
387382
fRegistry.add("Track/hEtaPhi", "#eta vs. #varphi;#varphi (rad.);#eta", kTH2F, {{180, 0, 2 * M_PI}, {40, -2.0f, 2.0f}}, false);
388383
fRegistry.add("Track/hDCAxyz", "DCA xy vs. z;DCA_{xy} (cm);DCA_{z} (cm)", kTH2F, {{200, -1.0f, 1.0f}, {200, -1.0f, 1.0f}}, false);
389384
fRegistry.add("Track/hDCAxyzSigma", "DCA xy vs. z;DCA_{xy} (#sigma);DCA_{z} (#sigma)", kTH2F, {{200, -10.0f, 10.0f}, {200, -10.0f, 10.0f}}, false);
385+
fRegistry.add("Track/hDCA3DSigma", "DCA 3D;DCA_{3D} (#sigma);", kTH1F, {{100, 0.0f, 10.0f}}, false);
390386
fRegistry.add("Track/hDCAxy_Pt", "DCA_{xy} vs. pT;p_{T} (GeV/c);DCA_{xy} (cm)", kTH2F, {{1000, 0, 10}, {200, -1, 1}}, false);
391387
fRegistry.add("Track/hDCAz_Pt", "DCA_{z} vs. pT;p_{T} (GeV/c);DCA_{z} (cm)", kTH2F, {{1000, 0, 10}, {200, -1, 1}}, false);
392388
fRegistry.add("Track/hDCAxyRes_Pt", "DCA_{xy} resolution vs. pT;p_{T} (GeV/c);DCA_{xy} resolution (#mum)", kTH2F, {{1000, 0, 10}, {500, 0., 500}}, false);
@@ -727,11 +723,13 @@ struct dielectronQC {
727723
template <typename TTrack>
728724
void fillTrackInfo(TTrack const& track)
729725
{
726+
float dca_3d = dca3DinSigma(track);
730727
fRegistry.fill(HIST("Track/hPt"), track.pt());
731728
fRegistry.fill(HIST("Track/hQoverPt"), track.sign() / track.pt());
732729
fRegistry.fill(HIST("Track/hEtaPhi"), track.phi(), track.eta());
733730
fRegistry.fill(HIST("Track/hDCAxyz"), track.dcaXY(), track.dcaZ());
734731
fRegistry.fill(HIST("Track/hDCAxyzSigma"), track.dcaXY() / sqrt(track.cYY()), track.dcaZ() / sqrt(track.cZZ()));
732+
fRegistry.fill(HIST("Track/hDCA3DSigma"), dca_3d);
735733
fRegistry.fill(HIST("Track/hDCAxy_Pt"), track.pt(), track.dcaXY());
736734
fRegistry.fill(HIST("Track/hDCAz_Pt"), track.pt(), track.dcaZ());
737735
fRegistry.fill(HIST("Track/hDCAxyRes_Pt"), track.pt(), sqrt(track.cYY()) * 1e+4); // convert cm to um

PWGEM/Dilepton/Tasks/dielectronQCMC.cxx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ struct dielectronQCMC {
236236
fRegistry.add("Track/lf/hEtaPhi", "#eta vs. #varphi;#varphi (rad.);#eta", kTH2F, {{180, 0, 2 * M_PI}, {40, -2.0f, 2.0f}}, false);
237237
fRegistry.add("Track/lf/hDCAxyz", "DCA xy vs. z;DCA_{xy} (cm);DCA_{z} (cm)", kTH2F, {{200, -1.0f, 1.0f}, {200, -1.0f, 1.0f}}, false);
238238
fRegistry.add("Track/lf/hDCAxyzSigma", "DCA xy vs. z;DCA_{xy} (#sigma);DCA_{z} (#sigma)", kTH2F, {{200, -10.0f, 10.0f}, {200, -10.0f, 10.0f}}, false);
239+
fRegistry.add("Track/lf/hDCA3DSigma", "DCA 3D;DCA_{3D} (#sigma);", kTH1F, {{100, 0.0f, 10.0f}}, false);
239240
fRegistry.add("Track/lf/hDCAxy_Pt", "DCA_{xy} vs. pT;p_{T} (GeV/c);DCA_{xy} (cm)", kTH2F, {{1000, 0, 10}, {200, -1, 1}}, false);
240241
fRegistry.add("Track/lf/hDCAz_Pt", "DCA_{z} vs. pT;p_{T} (GeV/c);DCA_{z} (cm)", kTH2F, {{1000, 0, 10}, {200, -1, 1}}, false);
241242
fRegistry.add("Track/lf/hDCAxyRes_Pt", "DCA_{xy} resolution vs. pT;p_{T} (GeV/c);DCA_{xy} resolution (#mum)", kTH2F, {{1000, 0, 10}, {500, 0., 500}}, false);
@@ -468,11 +469,13 @@ struct dielectronQCMC {
468469
// fill track info that belong to true pairs.
469470
if (std::find(used_trackIds.begin(), used_trackIds.end(), track.globalIndex()) == used_trackIds.end()) {
470471
auto mctrack = track.template emmcparticle_as<TMCParticles>();
472+
float dca_3d = dca3DinSigma(track);
471473
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hPt"), track.pt());
472474
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hQoverPt"), track.sign() / track.pt());
473475
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hEtaPhi"), track.phi(), track.eta());
474476
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hDCAxyz"), track.dcaXY(), track.dcaZ());
475477
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hDCAxyzSigma"), track.dcaXY() / sqrt(track.cYY()), track.dcaZ() / sqrt(track.cZZ()));
478+
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hDCA3DSigma"), dca_3d);
476479
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hDCAxy_Pt"), track.pt(), track.dcaXY());
477480
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hDCAz_Pt"), track.pt(), track.dcaZ());
478481
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hDCAxyRes_Pt"), track.pt(), sqrt(track.cYY()) * 1e+4); // convert cm to um

PWGEM/Dilepton/Tasks/dimuonQC.cxx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,7 @@ struct dimuonQC {
284284
fRegistry.add("Track/hTrackType", "track type", kTH1F, {{6, -0.5f, 5.5}}, false);
285285
fRegistry.add("Track/hDCAxy", "DCA x vs. y;DCA_{x} (cm);DCA_{y} (cm)", kTH2F, {{200, -1.0f, 1.0f}, {200, -1.0f, 1.0f}}, false);
286286
fRegistry.add("Track/hDCAxySigma", "DCA x vs. y;DCA_{x} (#sigma);DCA_{y} (#sigma)", kTH2F, {{200, -10.0f, 10.0f}, {200, -10.0f, 10.0f}}, false);
287+
fRegistry.add("Track/hDCA2DSigma", "DCA xy;DCA_{xy} (#sigma)", kTH1F, {{100, 0.0f, 10.0f}}, false);
287288
fRegistry.add("Track/hDCAxRes_Pt", "DCA_{x} resolution vs. pT;p_{T} (GeV/c);DCA_{x} resolution (#mum)", kTH2F, {{1000, 0, 10}, {200, 0., 200}}, false);
288289
fRegistry.add("Track/hDCAyRes_Pt", "DCA_{y} resolution vs. pT;p_{T} (GeV/c);DCA_{y} resolution (#mum)", kTH2F, {{1000, 0, 10}, {200, 0., 200}}, false);
289290
fRegistry.add("Track/hNclsMCH", "number of MCH clusters", kTH1F, {{21, -0.5, 20.5}}, false);
@@ -463,12 +464,14 @@ struct dimuonQC {
463464
template <typename TTrack>
464465
void fillTrackInfo(TTrack const& track)
465466
{
467+
float dca_xy = fwdDcaXYinSigma(track);
466468
fRegistry.fill(HIST("Track/hPt"), track.pt());
467469
fRegistry.fill(HIST("Track/hQoverPt"), track.sign() / track.pt());
468470
fRegistry.fill(HIST("Track/hEtaPhi"), track.phi(), track.eta());
469471
fRegistry.fill(HIST("Track/hTrackType"), track.trackType());
470472
fRegistry.fill(HIST("Track/hDCAxy"), track.fwdDcaX(), track.fwdDcaY());
471473
fRegistry.fill(HIST("Track/hDCAxySigma"), track.fwdDcaX() / sqrt(track.cXX()), track.fwdDcaY() / sqrt(track.cYY()));
474+
fRegistry.fill(HIST("Track/hDCA2DSigma"), dca_xy);
472475
fRegistry.fill(HIST("Track/hDCAxRes_Pt"), track.pt(), sqrt(track.cXX()) * 1e+4); // convert cm to um
473476
fRegistry.fill(HIST("Track/hDCAyRes_Pt"), track.pt(), sqrt(track.cYY()) * 1e+4); // convert cm to um
474477
fRegistry.fill(HIST("Track/hNclsMFT"), track.nClustersMFT());

PWGEM/Dilepton/Tasks/dimuonQCMC.cxx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ struct dimuonQCMC {
203203
fRegistry.add("Track/lf/hTrackType", "track type", kTH1F, {{6, -0.5f, 5.5}}, false);
204204
fRegistry.add("Track/lf/hDCAxy", "DCA x vs. y;DCA_{x} (cm);DCA_{y} (cm)", kTH2F, {{200, -1.0f, 1.0f}, {200, -1.0f, 1.0f}}, false);
205205
fRegistry.add("Track/lf/hDCAxySigma", "DCA x vs. y;DCA_{x} (#sigma);DCA_{y} (#sigma)", kTH2F, {{200, -10.0f, 10.0f}, {200, -10.0f, 10.0f}}, false);
206+
fRegistry.add("Track/lf/hDCA2DSigma", "DCA xy;DCA_{xy} (#sigma)", kTH1F, {{100, 0.0f, 10.0f}}, false);
206207
fRegistry.add("Track/lf/hDCAxRes_Pt", "DCA_{x} resolution vs. pT;p_{T} (GeV/c);DCA_{x} resolution (#mum)", kTH2F, {{1000, 0, 10}, {200, 0., 200}}, false);
207208
fRegistry.add("Track/lf/hDCAyRes_Pt", "DCA_{y} resolution vs. pT;p_{T} (GeV/c);DCA_{y} resolution (#mum)", kTH2F, {{1000, 0, 10}, {200, 0., 200}}, false);
208209
fRegistry.add("Track/lf/hNclsMCH", "number of MCH clusters", kTH1F, {{21, -0.5, 20.5}}, false);
@@ -383,12 +384,14 @@ struct dimuonQCMC {
383384
// fill track info that belong to true pairs.
384385
if (std::find(used_trackIds.begin(), used_trackIds.end(), track.globalIndex()) == used_trackIds.end()) {
385386
auto mctrack = track.template emmcparticle_as<TMCParticles>();
387+
float dca_xy = fwdDcaXYinSigma(track);
386388
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hPt"), track.pt());
387389
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hQoverPt"), track.sign() / track.pt());
388390
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hEtaPhi"), track.phi(), track.eta());
389391
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hTrackType"), track.trackType());
390392
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hDCAxy"), track.fwdDcaX(), track.fwdDcaY());
391393
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hDCAxySigma"), track.fwdDcaX() / std::sqrt(track.cXX()), track.fwdDcaY() / std::sqrt(track.cYY()));
394+
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hDCA2DSigma"), dca_xy);
392395
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hDCAxRes_Pt"), track.pt(), std::sqrt(track.cXX()) * 1e+4);
393396
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hDCAyRes_Pt"), track.pt(), std::sqrt(track.cYY()) * 1e+4);
394397
fRegistry.fill(HIST("Track/") + HIST(ele_source_types[e_source_id]) + HIST("hNclsMCH"), track.nClusters());

0 commit comments

Comments
 (0)