Skip to content

Commit 49ed3b1

Browse files
victor-gonzalezVictor
andauthored
[PWGCF] DptDpt - Tracking delta eta and delta phi (#10280)
Co-authored-by: Victor <victor@cern.ch>
1 parent a38b365 commit 49ed3b1

File tree

1 file changed

+116
-1
lines changed

1 file changed

+116
-1
lines changed

PWGCF/TwoParticleCorrelations/Tasks/dptDptEfficiencyAndQc.cxx

Lines changed: 116 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ enum KindOfData {
7070
/// \brief The kind of processing for templating the procedures and produce histograms
7171
enum KindOfProcess {
7272
kBASIC, ///< produce the basic histograms
73+
kEXTRA, ///< produce the extra pair based histograms
7374
kPID, ///< produce the basic PID histograms
7475
kPIDEXTRA ///< produce the extra PID histograms
7576
};
@@ -569,6 +570,73 @@ struct QADataCollectingEngine {
569570
}
570571
};
571572

573+
/* the QA extra data, pairs, collecting engine */
574+
struct QAExtraDataCollectingEngine {
575+
uint nsp = static_cast<uint>(efficiencyandqatask::tnames.size());
576+
uint nmainsp = static_cast<uint>(efficiencyandqatask::mainspnames.size());
577+
uint nallmainsp = static_cast<uint>(efficiencyandqatask::allmainspnames.size());
578+
579+
//===================================================
580+
// The QA output objects
581+
//===================================================
582+
/* pairs histograms */
583+
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<TH2>>>> fhEtaEtaA{2, {nsp, {nsp, nullptr}}};
586+
std::vector<std::vector<std::vector<std::shared_ptr<TH3>>>> fhDeltaEtaVsEtaEtaA{2, {nsp, {nsp, nullptr}}};
587+
588+
template <efficiencyandqatask::KindOfData kindOfData>
589+
void init(HistogramRegistry& registry, const char* dirname)
590+
{
591+
using namespace efficiencyandqatask;
592+
using namespace analysis::dptdptfilter;
593+
594+
AxisSpec phiAxis = {72, 0.0f, constants::math::TwoPI, "#varphi"};
595+
AxisSpec deltaPhiAxis = {72, 0.0f, constants::math::TwoPI, "#Delta#varphi"};
596+
AxisSpec etaAxis = {etabins, etalow, etaup, "#eta"};
597+
AxisSpec deltaEta = {2 * etabins - 1, etalow - etaup, etaup - etalow, "#DeltaEta"};
598+
599+
/* the reconstructed and generated levels histograms */
600+
std::string recogen = (kindOfData == kReco) ? "Reco" : "Gen";
601+
for (uint isp = 0; isp < nsp; ++isp) {
602+
for (uint jsp = 0; jsp < nsp; ++jsp) {
603+
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()),
604+
HTITLESTRING("%s%s pairs", tnames[isp].c_str(), tnames[jsp].c_str()), kTH2F, {phiAxis, phiAxis});
605+
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()),
606+
HTITLESTRING("%s%s pairs", tnames[isp].c_str(), tnames[jsp].c_str()), kTH3F, {phiAxis, phiAxis, deltaPhiAxis});
607+
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()),
608+
HTITLESTRING("%s%s pairs", tnames[isp].c_str(), tnames[jsp].c_str()), kTH2F, {etaAxis, etaAxis});
609+
fhDeltaEtaVsEtaEtaA[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()),
610+
HTITLESTRING("%s%s pairs", tnames[isp].c_str(), tnames[jsp].c_str()), kTH3F, {phiAxis, phiAxis, deltaPhiAxis});
611+
}
612+
}
613+
}
614+
615+
template <efficiencyandqatask::KindOfData kindOfData, typename CollisionsObject, typename TracksObject>
616+
void processTrackPairs(TracksObject const& tracks1, TracksObject const& tracks2)
617+
{
618+
using namespace efficiencyandqatask;
619+
using namespace analysis::dptdptfilter;
620+
621+
/* we should only receive accepted tracks */
622+
for (auto const& track1 : tracks1) {
623+
for (auto const& track2 : tracks2) {
624+
/* checking the same track id condition */
625+
if (track1 == track2) {
626+
/* exclude autocorrelations */
627+
continue;
628+
}
629+
float deltaPhi = RecoDecay::constrainAngle(track1.phi() - track2.phi());
630+
float deltaEta = track1.eta() - track2.eta();
631+
fhPhiPhiA[kindOfData][track1.trackacceptedid()][track2.trackacceptedid()]->Fill(track1.phi(), track2.phi());
632+
fhDeltaPhiVsPhiPhiA[kindOfData][track1.trackacceptedid()][track2.trackacceptedid()]->Fill(track1.phi(), track2.phi(), deltaPhi);
633+
fhEtaEtaA[kindOfData][track1.trackacceptedid()][track2.trackacceptedid()]->Fill(track1.eta(), track2.eta());
634+
fhDeltaEtaVsEtaEtaA[kindOfData][track1.trackacceptedid()][track2.trackacceptedid()]->Fill(track1.eta(), track2.eta(), deltaEta);
635+
}
636+
}
637+
}
638+
};
639+
572640
/* the PID data collecting engine */
573641
struct PidDataCollectingEngine {
574642
uint nsp = static_cast<uint>(efficiencyandqatask::tnames.size());
@@ -850,6 +918,7 @@ struct DptDptEfficiencyAndQc {
850918

851919
/* the data collecting engine instances */
852920
QADataCollectingEngine** qaDataCE;
921+
QAExtraDataCollectingEngine** qaExtraDataCE;
853922
PidDataCollectingEngine** pidDataCE;
854923
PidExtraDataCollectingEngine** pidExtraDataCE;
855924

@@ -892,11 +961,13 @@ struct DptDptEfficiencyAndQc {
892961

893962
/* do nothing if not active */
894963
if (!doprocessDetectorLevelNotStored &&
964+
!doprocessExtraDetectorLevelNotStored &&
895965
!doprocessDetectorLevelNotStoredPID &&
896966
!doprocessDetectorLevelNotStoredTunedOnDataPID &&
897967
!doprocessDetectorLevelNotStoredPIDExtra &&
898968
!doprocessDetectorLevelNotStoredTunedOnDataPIDExtra &&
899969
!doprocessGeneratorLevelNotStored &&
970+
!doprocessExtraGeneratorLevelNotStored &&
900971
!doprocessReconstructedNotStored &&
901972
!doprocessReconstructedNotStoredPID &&
902973
!doprocessReconstructedNotStoredPIDExtra) {
@@ -982,13 +1053,17 @@ struct DptDptEfficiencyAndQc {
9821053
widthNSigmaBin = cfgWidthNSigmaBin.value;
9831054
noOfNSigmaBins = static_cast<int>((maxNSigma - minNSigma) / widthNSigmaBin);
9841055

985-
bool doBasicAnalysis = doprocessDetectorLevelNotStored || doprocessReconstructedNotStored;
1056+
bool doBasicAnalysis = doprocessDetectorLevelNotStored || doprocessReconstructedNotStored || doprocessGeneratorLevelNotStored;
1057+
bool doExtraAnalysis = doprocessExtraDetectorLevelNotStored || doprocessExtraReconstructedNotStored || doprocessExtraGeneratorLevelNotStored;
9861058
bool doPidAnalysis = doprocessDetectorLevelNotStoredPID || doprocessDetectorLevelNotStoredTunedOnDataPID || doprocessReconstructedNotStoredPID;
9871059
bool doPidExtraAnalysis = doprocessDetectorLevelNotStoredPIDExtra || doprocessDetectorLevelNotStoredTunedOnDataPIDExtra || doprocessReconstructedNotStoredPIDExtra;
9881060

9891061
if (doBasicAnalysis) {
9901062
qaDataCE = new QADataCollectingEngine*[ncmranges];
9911063
}
1064+
if (doExtraAnalysis) {
1065+
qaExtraDataCE = new QAExtraDataCollectingEngine*[ncmranges];
1066+
}
9921067
if (doPidAnalysis) {
9931068
pidDataCE = new PidDataCollectingEngine*[ncmranges];
9941069
}
@@ -1014,6 +1089,11 @@ struct DptDptEfficiencyAndQc {
10141089
initializeCEInstance(dce, TString::Format("EfficiencyAndQaData-%d-%d", static_cast<int>(min), static_cast<int>(max)), *registrybank[i]);
10151090
return dce;
10161091
};
1092+
auto buildQACEExtraInstance = [&](float min, float max) {
1093+
auto* dce = new QAExtraDataCollectingEngine();
1094+
initializeCEInstance(dce, TString::Format("EfficiencyAndQaExtraData-%d-%d", static_cast<int>(min), static_cast<int>(max)), *registrybank[i]);
1095+
return dce;
1096+
};
10171097
auto buildPidCEInstance = [&](float min, float max) {
10181098
auto* dce = new PidDataCollectingEngine();
10191099
initializeCEInstance(dce, TString::Format("EfficiencyAndPidData-%d-%d", static_cast<int>(min), static_cast<int>(max)), *pidregistrybank[i]);
@@ -1028,6 +1108,9 @@ struct DptDptEfficiencyAndQc {
10281108
if (doBasicAnalysis) {
10291109
qaDataCE[ncmranges - i - 1] = buildQACEInstance(fCentMultMin[ncmranges - i - 1], fCentMultMax[ncmranges - i - 1]);
10301110
}
1111+
if (doExtraAnalysis) {
1112+
qaExtraDataCE[ncmranges - i - 1] = buildQACEExtraInstance(fCentMultMin[ncmranges - i - 1], fCentMultMax[ncmranges - i - 1]);
1113+
}
10311114
if (doPidAnalysis) {
10321115
pidDataCE[ncmranges - i - 1] = buildPidCEInstance(fCentMultMin[ncmranges - i - 1], fCentMultMax[ncmranges - i - 1]);
10331116
}
@@ -1075,6 +1158,9 @@ struct DptDptEfficiencyAndQc {
10751158
if constexpr (kindOfProcess == kBASIC) {
10761159
qaDataCE[ixDCE]->newCollision<kindOfData>();
10771160
}
1161+
if constexpr (kindOfProcess == kEXTRA) {
1162+
qaExtraDataCE[ixDCE]->processTrackPairs<kindOfData, FilteredCollisions>(tracks, tracks);
1163+
}
10781164
for (auto const& track : tracks) {
10791165
float tpcmom = track.p();
10801166
float tofmom = track.p();
@@ -1109,6 +1195,7 @@ struct DptDptEfficiencyAndQc {
11091195
using TofPID = soa::Join<aod::pidTOFFullEl, aod::pidTOFFullMu, aod::pidTOFFullPi, aod::pidTOFFullKa, aod::pidTOFFullPr, aod::TOFSignal, aod::pidTOFbeta, aod::pidTOFmass>;
11101196

11111197
Filter onlyacceptedcollisions = (aod::dptdptfilter::collisionaccepted == uint8_t(true));
1198+
Filter onlyacceptedtracks = (aod::dptdptfilter::trackacceptedid >= int8_t(0));
11121199

11131200
void processReconstructedNotStored(soa::Filtered<soa::Join<aod::Collisions, aod::DptDptCFCollisionsInfo>>::iterator const& collision,
11141201
soa::Join<aod::FullTracks, aod::DptDptCFTracksInfo, aod::TrackSelection> const& tracks)
@@ -1138,6 +1225,34 @@ struct DptDptEfficiencyAndQc {
11381225
}
11391226
PROCESS_SWITCH(DptDptEfficiencyAndQc, processGeneratorLevelNotStored, "Process MC generator level efficiency and QA for not stored derived data", true);
11401227

1228+
void processExtraReconstructedNotStored(soa::Filtered<soa::Join<aod::Collisions, aod::DptDptCFCollisionsInfo>>::iterator const& collision,
1229+
soa::Filtered<soa::Join<aod::FullTracks, aod::DptDptCFTracksInfo, aod::TrackSelection>> const& tracks)
1230+
{
1231+
using namespace efficiencyandqatask;
1232+
1233+
processTracks<soa::Filtered<soa::Join<aod::Collisions, aod::DptDptCFCollisionsInfo>>, kEXTRA, kReco>(collision, tracks);
1234+
}
1235+
PROCESS_SWITCH(DptDptEfficiencyAndQc, processExtraReconstructedNotStored, "Process reconstructed extra efficiency and QA for not stored derived data", false);
1236+
1237+
void processExtraDetectorLevelNotStored(soa::Filtered<soa::Join<aod::Collisions, aod::DptDptCFCollisionsInfo>>::iterator const& collision,
1238+
soa::Filtered<soa::Join<aod::FullTracks, aod::DptDptCFTracksInfo, aod::TrackSelection, aod::McTrackLabels>> const& tracks,
1239+
soa::Join<aod::McParticles, aod::DptDptCFGenTracksInfo> const&)
1240+
{
1241+
using namespace efficiencyandqatask;
1242+
1243+
processTracks<soa::Filtered<soa::Join<aod::Collisions, aod::DptDptCFCollisionsInfo>>, kEXTRA, kReco>(collision, tracks);
1244+
}
1245+
PROCESS_SWITCH(DptDptEfficiencyAndQc, processExtraDetectorLevelNotStored, "Process MC detector level extra efficiency and QA for not stored derived data", false);
1246+
1247+
void processExtraGeneratorLevelNotStored(soa::Filtered<soa::Join<aod::McCollisions, aod::DptDptCFGenCollisionsInfo>>::iterator const& collision,
1248+
soa::Filtered<soa::Join<aod::McParticles, aod::DptDptCFGenTracksInfo>> const& particles)
1249+
{
1250+
using namespace efficiencyandqatask;
1251+
1252+
processTracks<soa::Filtered<soa::Join<aod::McCollisions, aod::DptDptCFGenCollisionsInfo>>, kEXTRA, kGen>(collision, particles);
1253+
}
1254+
PROCESS_SWITCH(DptDptEfficiencyAndQc, processExtraGeneratorLevelNotStored, "Process MC generator level extra efficiency and QA for not stored derived data", true);
1255+
11411256
void processReconstructedNotStoredPID(soa::Filtered<soa::Join<aod::Collisions, aod::DptDptCFCollisionsInfo>>::iterator const& collision,
11421257
soa::Join<aod::FullTracks, aod::DptDptCFTracksInfo, aod::TrackSelection, TpcPID, TofPID> const& tracks)
11431258
{

0 commit comments

Comments
 (0)