Skip to content

Commit ddf163b

Browse files
ffiondaalibuild
andauthored
[PWGDQ] add decay length related variables for MCtruth pairs (#15634)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent cfb19f2 commit ddf163b

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

PWGDQ/Core/VarManager.h

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1330,6 +1330,8 @@ class VarManager : public TObject
13301330
static void FillTrackCollision(T const& track, C const& collision, float* values = nullptr);
13311331
template <int candidateType, uint32_t fillMap, typename T1, typename T2, typename C>
13321332
static void FillTrackCollisionMC(T1 const& track, T2 const& MotherTrack, C const& collision, float* values = nullptr);
1333+
template <int candidateType, typename T1>
1334+
static void FillTrackCollisionMC(T1 const& track, const std::array<double, 3>& collPos, float massHyp = -1., float* values = nullptr);
13331335
template <uint32_t fillMap, typename T, typename C, typename M, typename P>
13341336
static void FillTrackCollisionMatCorr(T const& track, C const& collision, M const& materialCorr, P const& propagator, float* values = nullptr);
13351337
template <typename U, typename T>
@@ -3304,6 +3306,37 @@ void VarManager::FillTrackCollisionMC(T1 const& track, T2 const& MotherTrack, C
33043306
values[kMCVertexingTauxyzProjected] = values[kMCVertexingLxyzProjected] * m / (MotherTrack.p());
33053307
}
33063308

3309+
template <int candidateType, typename T1>
3310+
void VarManager::FillTrackCollisionMC(T1 const& track, const std::array<double, 3>& collPos, float massHyp, float* values)
3311+
{
3312+
3313+
if (!values) {
3314+
values = fgValues;
3315+
}
3316+
3317+
float m = o2::constants::physics::MassJPsi;
3318+
if (massHyp)
3319+
m = massHyp;
3320+
3321+
// displaced vertex is computed with decay product (track) and vertex collPos
3322+
values[kMCVertexingLxy] = (collPos[0] - track.vx()) * (collPos[0] - track.vx()) +
3323+
(collPos[1] - track.vy()) * (collPos[1] - track.vy());
3324+
values[kMCVertexingLz] = (collPos[2] - track.vz()) * (collPos[2] - track.vz());
3325+
values[kMCVertexingLxyz] = values[kMCVertexingLxy] + values[kMCVertexingLz];
3326+
values[kMCVertexingLxy] = std::sqrt(values[kMCVertexingLxy]);
3327+
values[kMCVertexingLz] = std::sqrt(values[kMCVertexingLz]);
3328+
values[kMCVertexingLxyz] = std::sqrt(values[kMCVertexingLxyz]);
3329+
values[kMCVertexingTauz] = (collPos[2] - track.vz()) * m / (TMath::Abs(track.pz()) * o2::constants::physics::LightSpeedCm2NS);
3330+
values[kMCVertexingTauxy] = values[kMCVertexingLxy] * m / (track.pt() * o2::constants::physics::LightSpeedCm2NS);
3331+
3332+
values[kMCVertexingLzProjected] = ((track.vz() - collPos[2]) * track.pz()) / TMath::Abs(track.pz());
3333+
values[kMCVertexingLxyProjected] = (((track.vx() - collPos[0]) * track.px()) + ((track.vy() - collPos[1]) * track.py())) / TMath::Abs(track.pt());
3334+
values[kMCVertexingLxyzProjected] = (((track.vx() - collPos[0]) * track.px()) + ((track.vy() - collPos[1]) * track.py()) + ((track.vz() - collPos[2]) * track.pz())) / track.p();
3335+
values[kMCVertexingTauxyProjected] = values[kMCVertexingLxyProjected] * m / (track.pt());
3336+
values[kMCVertexingTauzProjected] = values[kMCVertexingLzProjected] * m / TMath::Abs(track.pz());
3337+
values[kMCVertexingTauxyzProjected] = values[kMCVertexingLxyzProjected] * m / (track.p());
3338+
}
3339+
33073340
template <int pairType, typename T, typename T1>
33083341
void VarManager::FillEnergyCorrelatorsMC(T const& track, T1 const& t1, float* values, float Translow, float Transhigh)
33093342
{

PWGDQ/Tasks/dqEfficiency_withAssoc.cxx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
#include <Framework/BinningPolicy.h>
4040
#include <Framework/Configurable.h>
4141
#include <Framework/InitContext.h>
42+
#include <Framework/O2DatabasePDGPlugin.h>
4243
#include <Framework/runDataProcessing.h>
4344

4445
#include <THashList.h>
@@ -1397,6 +1398,9 @@ struct AnalysisSameEventPairing {
13971398

13981399
Service<o2::ccdb::BasicCCDBManager> fCCDB;
13991400

1401+
// PDG database
1402+
Service<o2::framework::O2DatabasePDG> pdgDB;
1403+
14001404
// Filter filterEventSelected = aod::dqanalysisflags::isEventSelected & uint32_t(1);
14011405
Filter eventFilter = aod::dqanalysisflags::isEventSelected > static_cast<uint32_t>(0);
14021406

@@ -2275,6 +2279,16 @@ struct AnalysisSameEventPairing {
22752279
// cout << " Signal matched!" << endl;
22762280
mcDecision |= (static_cast<uint32_t>(1) << isig);
22772281
VarManager::FillPairMC<TPairType>(t1_raw, t2_raw);
2282+
// check if t1_raw and t2_raw have same mother to compute decay length related variables
2283+
if (t1_raw.has_mothers() && t2_raw.has_mothers()) {
2284+
auto motherMCParticle_t1 = t1_raw.template mothers_first_as<ReducedMCTracks>();
2285+
auto motherMCParticle_t2 = t2_raw.template mothers_first_as<ReducedMCTracks>();
2286+
if (motherMCParticle_t1 == motherMCParticle_t2) {
2287+
auto mcEvent = mcEvents.rawIteratorAt(motherMCParticle_t1.reducedMCeventId());
2288+
std::array<double, 3> collVtxPos = {mcEvent.mcPosX(), mcEvent.mcPosY(), mcEvent.mcPosZ()};
2289+
VarManager::FillTrackCollisionMC<TPairType>(motherMCParticle_t1, collVtxPos, pdgDB->Mass(motherMCParticle_t1.pdgCode()));
2290+
}
2291+
}
22782292
// cout << " Filled VarManager for the pair." << endl;
22792293
fHistMan->FillHistClass(Form("MCTruthGenPairSel_%s", sig->GetName()), VarManager::fgValues);
22802294
fHistMan->FillHistClass(Form("MCTruthGenPseudoPolPairSel_%s", sig->GetName()), VarManager::fgValues);

0 commit comments

Comments
 (0)