Skip to content

Commit 573ccd4

Browse files
committed
add decay length related variables for MCtruth pairs
1 parent 055320e commit 573ccd4

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

PWGDQ/Core/VarManager.h

Lines changed: 32 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>
@@ -3301,6 +3303,36 @@ void VarManager::FillTrackCollisionMC(T1 const& track, T2 const& MotherTrack, C
33013303
values[kMCVertexingTauxyzProjected] = values[kMCVertexingLxyzProjected] * m / (MotherTrack.p());
33023304
}
33033305

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

PWGDQ/Tasks/dqEfficiency_withAssoc.cxx

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

4445
#include <THashList.h>
4546
#include <TList.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)