Skip to content

Commit 8ad4d49

Browse files
committed
Refactor includes and add filtered pair histograms
Reorganized include statements and added new histograms for filtered pairs.
1 parent fe0f0f1 commit 8ad4d49

File tree

1 file changed

+90
-31
lines changed

1 file changed

+90
-31
lines changed

ALICE3/Tasks/alice3-dilepton.cxx

Lines changed: 90 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,17 @@
1616

1717
#include "Math/Vector4D.h"
1818
// O2 includes
19-
#include "Framework/AnalysisTask.h"
20-
#include "Framework/ASoAHelpers.h"
21-
#include "Framework/runDataProcessing.h"
22-
#include "Framework/HistogramRegistry.h"
23-
#include "CommonConstants/PhysicsConstants.h"
24-
#include "Common/DataModel/TrackSelectionTables.h"
25-
#include "Framework/AnalysisDataModel.h"
26-
#include "ALICE3/DataModel/OTFTOF.h"
2719
#include "ALICE3/DataModel/OTFRICH.h"
20+
#include "ALICE3/DataModel/OTFTOF.h"
2821
#include "ALICE3/DataModel/tracksAlice3.h"
22+
#include "Common/DataModel/TrackSelectionTables.h"
23+
24+
#include "CommonConstants/PhysicsConstants.h"
25+
#include "Framework/ASoAHelpers.h"
26+
#include "Framework/AnalysisDataModel.h"
27+
#include "Framework/AnalysisTask.h"
28+
#include "Framework/HistogramRegistry.h"
29+
#include "Framework/runDataProcessing.h"
2930

3031
using namespace o2;
3132
using namespace o2::aod;
@@ -128,6 +129,15 @@ struct Alice3Dilepton {
128129
registry.addClone("Reconstructed/Pair/ULS/", "Reconstructed/Pair/LSpp/");
129130
registry.addClone("Reconstructed/Pair/ULS/", "Reconstructed/Pair/LSnn/");
130131

132+
registry.add("ReconstructedFiltered/Pair/ULS/Mass", "Pair Mass", kTH1F, {axisM});
133+
registry.add("ReconstructedFiltered/Pair/ULS/Pt", "Pair Pt", kTH1F, {axisPt});
134+
registry.add("ReconstructedFiltered/Pair/ULS/Eta", "Pair Eta", kTH1F, {axisEta});
135+
registry.add("ReconstructedFiltered/Pair/ULS/Phi", "Pair Phi", kTH1F, {axisPhi});
136+
registry.add("ReconstructedFiltered/Pair/ULS/Mass_Pt", "Pair Mass vs. Pt", kTH2F, {axisM, axisPt}, true);
137+
138+
registry.addClone("ReconstructedFiltered/Pair/ULS/", "ReconstructedFiltered/Pair/LSpp/");
139+
registry.addClone("ReconstructedFiltered/Pair/ULS/", "ReconstructedFiltered/Pair/LSnn/");
140+
131141
HistogramConfigSpec hs_rec{HistType::kTHnSparseF, {axisM, axisPt, axisDCAxy}, 3};
132142
registry.add("Reconstructed/Pair/ULS/hs_rec", "", hs_rec);
133143
registry.add("Reconstructed/Pair/LSpp/hs_rec", "", hs_rec);
@@ -287,6 +297,69 @@ struct Alice3Dilepton {
287297
return HFllType::kUndef;
288298
}
289299

300+
template <typename T1, typename T2>
301+
ROOT::Math::PtEtaPhiMVector buildPairDCA(T1 const& t1, T2 const& t2, float& pair_dca_xy)
302+
{
303+
304+
const float dcaXY_t1 = t1.dcaXY();
305+
const float dcaXY_t2 = t2.dcaXY();
306+
const float dcaXY_res_t1 = sqrt(t1.cYY());
307+
const float dcaXY_res_t2 = sqrt(t2.cYY());
308+
309+
pair_dca_xy = sqrt((dcaXY_t2 * dcaXY_t2 / dcaXY_res_t2 + dcaXY_t1 * dcaXY_t1 / dcaXY_res_t1) / 2.);
310+
ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), std::abs(pdg) == 11 ? o2::constants::physics::MassElectron : o2::constants::physics::MassMuon); // reconstructed pt/eta/phi
311+
ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), std::abs(pdg) == 11 ? o2::constants::physics::MassElectron : o2::constants::physics::MassMuon); // reconstructed pt/eta/phi
312+
ROOT::Math::PtEtaPhiMVector v12 = v1 + v2;
313+
return v12;
314+
}
315+
316+
template <PairType pairtype, typename TTracks, typename TMCTracks>
317+
void FillPairRecWithPrefilter(TTracks const& tracks1, TTracks const& tracks2, TMCTracks const& mcParticles)
318+
{
319+
std::vector<uint64_t> prefilteredTracks;
320+
if constexpr (pairtype == PairType::kULS) {
321+
for (auto& [t1, t2] : combinations(soa::CombinationsFullIndexPolicy(tracks1, tracks2))) {
322+
if (!t1.has_mcParticle() || !t2.has_mcParticle()) {
323+
continue;
324+
}
325+
326+
float pair_dca_xy = 999.f;
327+
ROOT::Math::PtEtaPhiMVector v12 = buildPairDCA(t1, t2, pair_dca_xy);
328+
// prefilter for low-mass pairs
329+
if (v12.M() > 0.10) {
330+
continue;
331+
}
332+
// prefilter small opening angle pairs
333+
if (std::cos(t1.phi() - t2.phi()) < 0.99) {
334+
continue;
335+
}
336+
prefilteredTracks.push_back(t1.globalIndex());
337+
prefilteredTracks.push_back(t2.globalIndex());
338+
339+
} // end of unlike-sign pair loop
340+
341+
for (auto& [t1, t2] : combinations(soa::CombinationsFullIndexPolicy(tracks1, tracks2))) {
342+
// Skipping tracks that are in the prefiltered list
343+
if (std::find(prefilteredTracks.begin(), prefilteredTracks.end(), t1.globalIndex()) != prefilteredTracks.end()) {
344+
continue;
345+
}
346+
if (std::find(prefilteredTracks.begin(), prefilteredTracks.end(), t2.globalIndex()) != prefilteredTracks.end()) {
347+
continue;
348+
}
349+
350+
float pair_dca_xy = 999.f;
351+
ROOT::Math::PtEtaPhiMVector v12 = buildPairDCA(t1, t2, pair_dca_xy);
352+
353+
registry.fill(HIST("ReconstructedFiltered/Pair/ULS/Mass"), v12.M());
354+
registry.fill(HIST("ReconstructedFiltered/Pair/ULS/Pt"), v12.Pt());
355+
registry.fill(HIST("ReconstructedFiltered/Pair/ULS/Eta"), v12.Eta());
356+
registry.fill(HIST("ReconstructedFiltered/Pair/ULS/Phi"), v12.Phi() < 0.f ? v12.Phi() + TMath::TwoPi() : v12.Phi());
357+
registry.fill(HIST("ReconstructedFiltered/Pair/ULS/Mass_Pt"), v12.M(), v12.Pt());
358+
registry.fill(HIST("ReconstructedFiltered/Pair/ULS/hs_rec"), v12.M(), v12.Pt(), pair_dca_xy);
359+
}
360+
}
361+
}
362+
290363
template <PairType pairtype, typename TTracks, typename TMCTracks>
291364
void FillPairRec(TTracks const& tracks1, TTracks const& tracks2, TMCTracks const& mcParticles)
292365
{
@@ -314,15 +387,8 @@ struct Alice3Dilepton {
314387
}
315388
// auto mother = mcparticles.iteratorAt(motherid);
316389

317-
// float dcaXY_t1 = t1.dcaXY();
318-
// float dcaXY_t2 = t2.dcaXY();
319-
// float dcaXY_res_t1 = sqrt(t1.cYY());
320-
// float dcaXY_res_t2 = sqrt(t2.cYY());
321-
322-
float pair_dca_xy = sqrt((pow(t2.dcaXY() / sqrt(t2.cYY()), 2) + pow(t1.dcaXY() / sqrt(t1.cYY()), 2)) / 2.);
323-
ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), std::abs(pdg) == 11 ? o2::constants::physics::MassElectron : o2::constants::physics::MassMuon); // reconstructed pt/eta/phi
324-
ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), std::abs(pdg) == 11 ? o2::constants::physics::MassElectron : o2::constants::physics::MassMuon); // reconstructed pt/eta/phi
325-
ROOT::Math::PtEtaPhiMVector v12 = v1 + v2;
390+
float pair_dca_xy = 999.f;
391+
ROOT::Math::PtEtaPhiMVector v12 = buildPairDCA(t1, t2, pair_dca_xy);
326392

327393
registry.fill(HIST("Reconstructed/Pair/ULS/Mass"), v12.M());
328394
registry.fill(HIST("Reconstructed/Pair/ULS/Pt"), v12.Pt());
@@ -356,15 +422,8 @@ struct Alice3Dilepton {
356422
}
357423
// auto mother = mcparticles.iteratorAt(motherid);
358424

359-
// float dcaXY_t1 = t1.dcaXY();
360-
// float dcaXY_t2 = t2.dcaXY();
361-
// float dcaXY_res_t1 = sqrt(t1.cYY());
362-
// float dcaXY_res_t2 = sqrt(t2.cYY());
363-
364-
float pair_dca_xy = sqrt((pow(t2.dcaXY() / sqrt(t2.cYY()), 2) + pow(t1.dcaXY() / sqrt(t1.cYY()), 2)) / 2.);
365-
ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), std::abs(pdg) == 11 ? o2::constants::physics::MassElectron : o2::constants::physics::MassMuon); // reconstructed pt/eta/phi
366-
ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), std::abs(pdg) == 11 ? o2::constants::physics::MassElectron : o2::constants::physics::MassMuon); // reconstructed pt/eta/phi
367-
ROOT::Math::PtEtaPhiMVector v12 = v1 + v2;
425+
float pair_dca_xy = 999.f;
426+
ROOT::Math::PtEtaPhiMVector v12 = buildPairDCA(t1, t2, pair_dca_xy);
368427

369428
if constexpr (pairtype == PairType::kLSpp) {
370429
registry.fill(HIST("Reconstructed/Pair/LSpp/Mass"), v12.M());
@@ -464,6 +523,7 @@ struct Alice3Dilepton {
464523
} // end of like-sign pair loop
465524
}
466525
}
526+
467527
// Functions for pid
468528
template <typename TTrack>
469529
bool electronIDTOF(TTrack const& track)
@@ -545,11 +605,10 @@ struct Alice3Dilepton {
545605
Partition<MyFilteredTracksMC> posTracks = o2::aod::track::signed1Pt > 0.f;
546606
Partition<MyFilteredTracksMC> negTracks = o2::aod::track::signed1Pt < 0.f;
547607

548-
void processRec(
549-
const o2::aod::Collisions& collisions,
550-
MyFilteredTracksMC const& tracks,
551-
const o2::aod::McCollisions&,
552-
const aod::McParticles& mcParticles)
608+
void processRec(const o2::aod::Collisions& collisions,
609+
MyFilteredTracksMC const& tracks,
610+
const o2::aod::McCollisions&,
611+
const aod::McParticles& mcParticles)
553612
{
554613
for (const auto& collision : collisions) {
555614
registry.fill(HIST("Reconstructed/Event/VtxX"), collision.posX());

0 commit comments

Comments
 (0)