|
16 | 16 |
|
17 | 17 | #include "Math/Vector4D.h" |
18 | 18 | // 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" |
27 | 19 | #include "ALICE3/DataModel/OTFRICH.h" |
| 20 | +#include "ALICE3/DataModel/OTFTOF.h" |
28 | 21 | #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" |
29 | 30 |
|
30 | 31 | using namespace o2; |
31 | 32 | using namespace o2::aod; |
@@ -128,6 +129,15 @@ struct Alice3Dilepton { |
128 | 129 | registry.addClone("Reconstructed/Pair/ULS/", "Reconstructed/Pair/LSpp/"); |
129 | 130 | registry.addClone("Reconstructed/Pair/ULS/", "Reconstructed/Pair/LSnn/"); |
130 | 131 |
|
| 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 | + |
131 | 141 | HistogramConfigSpec hs_rec{HistType::kTHnSparseF, {axisM, axisPt, axisDCAxy}, 3}; |
132 | 142 | registry.add("Reconstructed/Pair/ULS/hs_rec", "", hs_rec); |
133 | 143 | registry.add("Reconstructed/Pair/LSpp/hs_rec", "", hs_rec); |
@@ -287,6 +297,69 @@ struct Alice3Dilepton { |
287 | 297 | return HFllType::kUndef; |
288 | 298 | } |
289 | 299 |
|
| 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 | + |
290 | 363 | template <PairType pairtype, typename TTracks, typename TMCTracks> |
291 | 364 | void FillPairRec(TTracks const& tracks1, TTracks const& tracks2, TMCTracks const& mcParticles) |
292 | 365 | { |
@@ -314,15 +387,8 @@ struct Alice3Dilepton { |
314 | 387 | } |
315 | 388 | // auto mother = mcparticles.iteratorAt(motherid); |
316 | 389 |
|
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); |
326 | 392 |
|
327 | 393 | registry.fill(HIST("Reconstructed/Pair/ULS/Mass"), v12.M()); |
328 | 394 | registry.fill(HIST("Reconstructed/Pair/ULS/Pt"), v12.Pt()); |
@@ -356,15 +422,8 @@ struct Alice3Dilepton { |
356 | 422 | } |
357 | 423 | // auto mother = mcparticles.iteratorAt(motherid); |
358 | 424 |
|
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); |
368 | 427 |
|
369 | 428 | if constexpr (pairtype == PairType::kLSpp) { |
370 | 429 | registry.fill(HIST("Reconstructed/Pair/LSpp/Mass"), v12.M()); |
@@ -464,6 +523,7 @@ struct Alice3Dilepton { |
464 | 523 | } // end of like-sign pair loop |
465 | 524 | } |
466 | 525 | } |
| 526 | + |
467 | 527 | // Functions for pid |
468 | 528 | template <typename TTrack> |
469 | 529 | bool electronIDTOF(TTrack const& track) |
@@ -545,11 +605,10 @@ struct Alice3Dilepton { |
545 | 605 | Partition<MyFilteredTracksMC> posTracks = o2::aod::track::signed1Pt > 0.f; |
546 | 606 | Partition<MyFilteredTracksMC> negTracks = o2::aod::track::signed1Pt < 0.f; |
547 | 607 |
|
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) |
553 | 612 | { |
554 | 613 | for (const auto& collision : collisions) { |
555 | 614 | registry.fill(HIST("Reconstructed/Event/VtxX"), collision.posX()); |
|
0 commit comments