@@ -701,13 +701,15 @@ class VarManager : public TObject
701701 kMCVertexingTauxy ,
702702 kVertexingLzProjected ,
703703 kVertexingLxyProjected ,
704+ kVertexingLxyProjectedRecalculatePV ,
704705 kVertexingLxyzProjected ,
705706 kMCVertexingLzProjected ,
706707 kMCVertexingLxyProjected ,
707708 kMCVertexingLxyzProjected ,
708709 kVertexingTauzProjected ,
709710 kVertexingTauxyProjected ,
710711 kVertexingTauxyProjectedPoleJPsiMass ,
712+ kVertexingTauxyProjectedPoleJPsiMassRecalculatePV ,
711713 kVertexingTauxyProjectedNs ,
712714 kVertexingTauxyzProjected ,
713715 kMCVertexingTauzProjected ,
@@ -1236,7 +1238,8 @@ class VarManager : public TObject
12361238 }
12371239 return deltaPsi;
12381240 }
1239-
1241+ template <typename T, typename T1>
1242+ static o2::dataformats::VertexBase RecalculatePrimaryVertex (T const & track0, T const & track1, const T1& collision);
12401243 template <typename T, typename C>
12411244 static o2::track::TrackParCovFwd FwdToTrackPar (const T& track, const C& cov);
12421245 template <typename T, typename C>
@@ -1558,6 +1561,43 @@ KFPVertex VarManager::createKFPVertexFromCollision(const T& collision)
15581561 return kfpVertex;
15591562}
15601563
1564+ template <typename T, typename T1>
1565+ o2::dataformats::VertexBase VarManager::RecalculatePrimaryVertex (T const & track0, T const & track1, const T1& collision)
1566+ {
1567+ KFParticle trk0KF;
1568+ KFPTrack kfpTrack0 = createKFPTrackFromTrack (track0);
1569+ trk0KF = KFParticle (kfpTrack0, -11 * track0.sign ());
1570+ KFParticle trk1KF;
1571+ KFPTrack kfpTrack1 = createKFPTrackFromTrack (track1);
1572+ trk1KF = KFParticle (kfpTrack1, -11 * track1.sign ());
1573+
1574+ KFParticle kVtx ;
1575+ kVtx .Initialize ();
1576+ kVtx .Parameter (0 ) = collision.posX ();
1577+ kVtx .Parameter (1 ) = collision.posY ();
1578+ kVtx .Parameter (2 ) = collision.posZ ();
1579+ kVtx .Covariance (0 ) = collision.covXX ();
1580+ kVtx .Covariance (1 ) = collision.covXY ();
1581+ kVtx .Covariance (2 ) = collision.covYY ();
1582+ kVtx .Covariance (3 ) = collision.covXZ ();
1583+ kVtx .Covariance (4 ) = collision.covYZ ();
1584+ kVtx .Covariance (5 ) = collision.covZZ ();
1585+ kVtx .Chi2 () = collision.chi2 (); // FIX THIS! to be added in AliReducedEventInfo
1586+ kVtx .NDF () = 2 * collision.multNTracksPV () - 3 ;
1587+ // KFVertex kfpVertex(kVtx); // kfpVertex.Initialize();
1588+
1589+ if ((track0.flags () & o2::aod::track::PVContributor) > 0 ) {
1590+ trk0KF.SubtractFromVertex (kVtx ); /* printf("track1 -> subtracting \n");*/
1591+ }
1592+ if ((track1.flags () & o2::aod::track::PVContributor) > 0 ) {
1593+ trk1KF.SubtractFromVertex (kVtx ); /* printf("track2 -> subtracting \n");*/
1594+ }
1595+
1596+ o2::math_utils::Point3D<float > vtxXYZ (kVtx .Parameter (0 ), kVtx .Parameter (1 ), kVtx .Parameter (2 ));
1597+ std::array<float , 6 > vtxCov{kVtx .Covariance (0 ), kVtx .Covariance (1 ), kVtx .Covariance (2 ), kVtx .Covariance (3 ), kVtx .Covariance (4 ), kVtx .Covariance (5 )};
1598+ o2::dataformats::VertexBase primaryVertexRec = {std::move (vtxXYZ), std::move (vtxCov)};
1599+ return primaryVertexRec;
1600+ }
15611601template <typename T, typename C>
15621602o2::dataformats::GlobalFwdTrack VarManager::PropagateMuon (const T& muon, const C& collision, const int endPoint)
15631603{
@@ -4139,6 +4179,7 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2,
41394179 }
41404180
41414181 Vec3D secondaryVertex;
4182+ o2::dataformats::VertexBase primaryVertexNew;
41424183
41434184 if constexpr (eventHasVtxCov) {
41444185
@@ -4161,6 +4202,7 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2,
41614202 v1 = {trackParVar0.getPt (), trackParVar0.getEta (), trackParVar0.getPhi (), m1};
41624203 v2 = {trackParVar1.getPt (), trackParVar1.getEta (), trackParVar1.getPhi (), m2};
41634204 v12 = v1 + v2;
4205+ primaryVertexNew = RecalculatePrimaryVertex (t1, t2, collision);
41644206
41654207 } else if constexpr (pairType == kDecayToMuMu && muonHasCov) {
41664208 // Get pca candidate from forward DCA fitter
@@ -4218,9 +4260,13 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2,
42184260 values[kVertexingLxyProjected ] = values[kVertexingLxyProjected ] / TMath::Sqrt ((v12.Px () * v12.Px ()) + (v12.Py () * v12.Py ()));
42194261 values[kVertexingLxyzProjected ] = ((secondaryVertex[0 ] - collision.posX ()) * v12.Px ()) + ((secondaryVertex[1 ] - collision.posY ()) * v12.Py ()) + ((secondaryVertex[2 ] - collision.posZ ()) * v12.Pz ());
42204262 values[kVertexingLxyzProjected ] = values[kVertexingLxyzProjected ] / TMath::Sqrt ((v12.Px () * v12.Px ()) + (v12.Py () * v12.Py ()) + (v12.Pz () * v12.Pz ()));
4263+ values[kVertexingLxyProjectedRecalculatePV ] = (secondaryVertex[0 ] - primaryVertexNew.getX ()) * v12.Px () + (secondaryVertex[1 ] - primaryVertexNew.getY ()) * v12.Py ();
4264+ values[kVertexingLxyProjectedRecalculatePV ] = values[kVertexingLxyProjectedRecalculatePV ] / v12.Pt ();
4265+
42214266 values[kVertexingTauxyProjected ] = values[kVertexingLxyProjected ] * v12.M () / (v12.Pt ());
42224267 values[kVertexingTauxyProjectedPoleJPsiMass ] = values[kVertexingLxyProjected ] * o2::constants::physics::MassJPsi / (v12.Pt ());
42234268 values[kVertexingTauxyProjectedNs ] = values[kVertexingTauxyProjected ] / o2::constants::physics::LightSpeedCm2NS;
4269+ values[kVertexingTauxyProjectedPoleJPsiMassRecalculatePV ] = values[kVertexingLxyProjectedRecalculatePV ] * o2::constants::physics::MassJPsi / (v12.Pt ());
42244270 values[kVertexingTauzProjected ] = values[kVertexingLzProjected ] * v12.M () / TMath::Abs (v12.Pz ());
42254271 values[kVertexingTauxyzProjected ] = values[kVertexingLxyzProjected ] * v12.M () / (v12.P ());
42264272 }
0 commit comments