Skip to content

Commit 59c4bc8

Browse files
victor-gonzalezVictor
andauthored
[PWGCF] DptDpt - Tracking relative separation within TPC sectors (#10511)
Co-authored-by: Victor <victor@cern.ch>
1 parent 6279688 commit 59c4bc8

File tree

1 file changed

+46
-20
lines changed

1 file changed

+46
-20
lines changed

PWGCF/TwoParticleCorrelations/Tasks/dptDptEfficiencyAndQc.cxx

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <TPDGCode.h>
1919
#include <CCDB/BasicCCDBManager.h>
2020
#include <vector>
21+
#include <algorithm>
2122
#include <cstdio>
2223
#include <memory>
2324
#include <string>
@@ -581,11 +582,11 @@ struct QAExtraDataCollectingEngine {
581582
//===================================================
582583
/* pairs histograms */
583584
std::vector<std::vector<std::vector<std::shared_ptr<TH2>>>> fhPhiPhiA{2, {nsp, {nsp, nullptr}}};
584-
std::vector<std::vector<std::vector<std::shared_ptr<TH3>>>> fhDeltaPhiVsPhiPhiA{2, {nsp, {nsp, nullptr}}};
585-
std::vector<std::vector<std::vector<std::shared_ptr<TH3>>>> fhDeltaPhiVsEtaEtaA{2, {nsp, {nsp, nullptr}}};
586585
std::vector<std::vector<std::vector<std::shared_ptr<TH2>>>> fhEtaEtaA{2, {nsp, {nsp, nullptr}}};
587-
std::vector<std::vector<std::vector<std::shared_ptr<TH3>>>> fhDeltaEtaVsEtaEtaA{2, {nsp, {nsp, nullptr}}};
588-
std::vector<std::vector<std::vector<std::shared_ptr<TH3>>>> fhDeltaEtaVsPhiPhiA{2, {nsp, {nsp, nullptr}}};
586+
TAxis ptAxis{analysis::dptdptfilter::ptbins, analysis::dptdptfilter::ptlow, analysis::dptdptfilter::ptup};
587+
Configurable<std::vector<int>> cfgPtBinsOfInterest{"cfgPtBinsOfInterest", {1, 2, 3}, "The pt bins of interest"};
588+
std::vector<std::vector<std::vector<std::vector<std::vector<std::shared_ptr<TH3>>>>>> fhInSectorDeltaPhiVsPhiPhiPerPtBinA{2, {nsp, {nsp, {cfgPtBinsOfInterest->size(), {cfgPtBinsOfInterest->size(), nullptr}}}}};
589+
std::vector<std::vector<std::vector<std::vector<std::vector<std::shared_ptr<TH3>>>>>> fhInSectorDeltaPhiVsEtaEtaPerPtBinA{2, {nsp, {nsp, {cfgPtBinsOfInterest->size(), {cfgPtBinsOfInterest->size(), nullptr}}}}};
589590

590591
template <efficiencyandqatask::KindOfData kindOfData>
591592
void init(HistogramRegistry& registry, const char* dirname)
@@ -594,26 +595,31 @@ struct QAExtraDataCollectingEngine {
594595
using namespace analysis::dptdptfilter;
595596

596597
AxisSpec phiAxis = {phibins, 0.0f, constants::math::TwoPI, "#varphi"};
597-
AxisSpec deltaPhiAxis = {phibins, 0.0f, constants::math::TwoPI, "#Delta#varphi"};
598+
AxisSpec phiSectorAxis = {144, 0.0f, kTpcPhiSectorWidth, "#varphi (mod(2#pi/18)) (rad)"};
599+
AxisSpec deltaPhiAxis = {phibins, 0.0f, constants::math::TwoPI, "#Delta#varphi (rad)"};
600+
AxisSpec deltaPhiInSectorAxis = {288, -kTpcPhiSectorWidth, kTpcPhiSectorWidth, "#Delta#varphi (rad)"};
598601
AxisSpec etaAxis = {etabins, etalow, etaup, "#eta"};
599-
AxisSpec deltaEtaAxis = {2 * etabins - 1, etalow - etaup, etaup - etalow, "#Delta#eta"};
600602

601603
/* the reconstructed and generated levels histograms */
602604
std::string recogen = (kindOfData == kReco) ? "Reco" : "Gen";
603605
for (uint isp = 0; isp < nsp; ++isp) {
604606
for (uint jsp = 0; jsp < nsp; ++jsp) {
605607
fhPhiPhiA[kindOfData][isp][jsp] = ADDHISTOGRAM(TH2, DIRECTORYSTRING("%s/%s/%s", dirname, recogen.c_str(), "After"), HNAMESTRING("PhiPhi_%s%s", tnames[isp].c_str(), tnames[jsp].c_str()),
606608
HTITLESTRING("%s%s pairs", tnames[isp].c_str(), tnames[jsp].c_str()), kTH2F, {phiAxis, phiAxis});
607-
fhDeltaPhiVsPhiPhiA[kindOfData][isp][jsp] = ADDHISTOGRAM(TH3, DIRECTORYSTRING("%s/%s/%s", dirname, recogen.c_str(), "After"), HNAMESTRING("DeltaPhiVsPhiPhi_%s%s", tnames[isp].c_str(), tnames[jsp].c_str()),
608-
HTITLESTRING("%s%s pairs", tnames[isp].c_str(), tnames[jsp].c_str()), kTH3F, {phiAxis, phiAxis, deltaPhiAxis});
609-
fhDeltaEtaVsPhiPhiA[kindOfData][isp][jsp] = ADDHISTOGRAM(TH3, DIRECTORYSTRING("%s/%s/%s", dirname, recogen.c_str(), "After"), HNAMESTRING("DeltaEtaVsPhiPhi_%s%s", tnames[isp].c_str(), tnames[jsp].c_str()),
610-
HTITLESTRING("%s%s pairs", tnames[isp].c_str(), tnames[jsp].c_str()), kTH3F, {phiAxis, phiAxis, deltaEtaAxis});
611609
fhEtaEtaA[kindOfData][isp][jsp] = ADDHISTOGRAM(TH2, DIRECTORYSTRING("%s/%s/%s", dirname, recogen.c_str(), "After"), HNAMESTRING("EtaEta_%s%s", tnames[isp].c_str(), tnames[jsp].c_str()),
612610
HTITLESTRING("%s%s pairs", tnames[isp].c_str(), tnames[jsp].c_str()), kTH2F, {etaAxis, etaAxis});
613-
fhDeltaEtaVsEtaEtaA[kindOfData][isp][jsp] = ADDHISTOGRAM(TH3, DIRECTORYSTRING("%s/%s/%s", dirname, recogen.c_str(), "After"), HNAMESTRING("DeltaEtaVsEtaEta_%s%s", tnames[isp].c_str(), tnames[jsp].c_str()),
614-
HTITLESTRING("%s%s pairs", tnames[isp].c_str(), tnames[jsp].c_str()), kTH3F, {etaAxis, etaAxis, deltaEtaAxis});
615-
fhDeltaPhiVsEtaEtaA[kindOfData][isp][jsp] = ADDHISTOGRAM(TH3, DIRECTORYSTRING("%s/%s/%s", dirname, recogen.c_str(), "After"), HNAMESTRING("DeltaPhiVsEtaEta_%s%s", tnames[isp].c_str(), tnames[jsp].c_str()),
616-
HTITLESTRING("%s%s pairs", tnames[isp].c_str(), tnames[jsp].c_str()), kTH3F, {etaAxis, etaAxis, deltaPhiAxis});
611+
/* first resize them to the actual configured size */
612+
fhInSectorDeltaPhiVsPhiPhiPerPtBinA[kindOfData][isp][jsp].resize(cfgPtBinsOfInterest->size());
613+
for (uint ipt = 0; ipt < cfgPtBinsOfInterest->size(); ++ipt) {
614+
/* first resize them to the actual configured size */
615+
fhInSectorDeltaPhiVsPhiPhiPerPtBinA[kindOfData][isp][jsp][ipt].resize(cfgPtBinsOfInterest->size(), nullptr);
616+
for (uint jpt = 0; jpt < cfgPtBinsOfInterest->size(); ++jpt) {
617+
fhInSectorDeltaPhiVsPhiPhiPerPtBinA[kindOfData][isp][jsp][ipt][jpt] = ADDHISTOGRAM(TH3, DIRECTORYSTRING("%s/%s/%s", dirname, recogen.c_str(), "After"), HNAMESTRING("DeltaPhiVsPhiPhiPt%02d%02d_%s%s", ipt, jpt, tnames[isp].c_str(), tnames[jsp].c_str()),
618+
HTITLESTRING("%s%s pairs", tnames[isp].c_str(), tnames[jsp].c_str()), kTH3F, {phiSectorAxis, phiSectorAxis, deltaPhiInSectorAxis});
619+
fhInSectorDeltaPhiVsEtaEtaPerPtBinA[kindOfData][isp][jsp][ipt][jpt] = ADDHISTOGRAM(TH3, DIRECTORYSTRING("%s/%s/%s", dirname, recogen.c_str(), "After"), HNAMESTRING("DeltaPhiVsEtaEtaPt%02d%02d_%s%s", ipt, jpt, tnames[isp].c_str(), tnames[jsp].c_str()),
620+
HTITLESTRING("%s%s pairs", tnames[isp].c_str(), tnames[jsp].c_str()), kTH3F, {etaAxis, etaAxis, deltaPhiInSectorAxis});
621+
}
622+
}
617623
}
618624
}
619625
}
@@ -626,20 +632,40 @@ struct QAExtraDataCollectingEngine {
626632

627633
/* we should only receive accepted tracks */
628634
for (auto const& track1 : tracks1) {
635+
auto indexForPt = [&](auto const& track) {
636+
int ptBin = ptAxis.FindFixBin(track.pt());
637+
if (std::find(cfgPtBinsOfInterest->begin(), cfgPtBinsOfInterest->end(), ptBin) != cfgPtBinsOfInterest->end()) {
638+
/* of interest */
639+
return ptBin - 1;
640+
} else {
641+
return -1;
642+
}
643+
};
644+
int ptBinIx1 = indexForPt(track1);
645+
if (ptBinIx1 < 0) {
646+
continue;
647+
}
648+
float inTpcSectorPhi1 = std::fmod(track1.phi(), kTpcPhiSectorWidth);
629649
for (auto const& track2 : tracks2) {
630650
/* checking the same track id condition */
631651
if (track1 == track2) {
632652
/* exclude autocorrelations */
633653
continue;
634654
}
635-
float deltaPhi = RecoDecay::constrainAngle(track1.phi() - track2.phi());
636-
float deltaEta = track1.eta() - track2.eta();
655+
int ptBinIx2 = indexForPt(track2);
656+
if (ptBinIx2 < 0) {
657+
continue;
658+
}
637659
fhPhiPhiA[kindOfData][track1.trackacceptedid()][track2.trackacceptedid()]->Fill(track1.phi(), track2.phi());
638-
fhDeltaPhiVsPhiPhiA[kindOfData][track1.trackacceptedid()][track2.trackacceptedid()]->Fill(track1.phi(), track2.phi(), deltaPhi);
639-
fhDeltaEtaVsPhiPhiA[kindOfData][track1.trackacceptedid()][track2.trackacceptedid()]->Fill(track1.phi(), track2.phi(), deltaEta);
640660
fhEtaEtaA[kindOfData][track1.trackacceptedid()][track2.trackacceptedid()]->Fill(track1.eta(), track2.eta());
641-
fhDeltaEtaVsEtaEtaA[kindOfData][track1.trackacceptedid()][track2.trackacceptedid()]->Fill(track1.eta(), track2.eta(), deltaEta);
642-
fhDeltaPhiVsEtaEtaA[kindOfData][track1.trackacceptedid()][track2.trackacceptedid()]->Fill(track1.eta(), track2.eta(), deltaPhi);
661+
if (static_cast<int>(track1.phi() / kTpcPhiSectorWidth) == static_cast<int>(track2.phi() / kTpcPhiSectorWidth)) {
662+
/* only if, for sure, both tracks are within the same sector */
663+
float inTpcSectorPhi2 = std::fmod(track2.phi(), kTpcPhiSectorWidth);
664+
float deltaPhi = inTpcSectorPhi1 - inTpcSectorPhi2;
665+
666+
fhInSectorDeltaPhiVsPhiPhiPerPtBinA[kindOfData][track1.trackacceptedid()][track2.trackacceptedid()][ptBinIx1][ptBinIx2]->Fill(track1.phi(), track2.phi(), deltaPhi);
667+
fhInSectorDeltaPhiVsEtaEtaPerPtBinA[kindOfData][track1.trackacceptedid()][track2.trackacceptedid()][ptBinIx1][ptBinIx2]->Fill(track1.eta(), track2.eta(), deltaPhi);
668+
}
643669
}
644670
}
645671
}

0 commit comments

Comments
 (0)