@@ -701,13 +701,16 @@ 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+ kVertexingTauxyProjectedPoleJPsiMass ,
713+ kVertexingTauxyProjectedPoleJPsiMassRecalculatePV ,
711714 kVertexingTauxyProjectedNs ,
712715 kVertexingTauxyzProjected ,
713716 kMCVertexingTauzProjected ,
@@ -1236,7 +1239,8 @@ class VarManager : public TObject
12361239 }
12371240 return deltaPsi;
12381241 }
1239-
1242+ template <typename T, typename T1>
1243+ static o2::dataformats::VertexBase RecalculatePrimaryVertex (T const & track0, T const & track1, const T1& collision);
12401244 template <typename T, typename C>
12411245 static o2::track::TrackParCovFwd FwdToTrackPar (const T& track, const C& cov);
12421246 template <typename T, typename C>
@@ -1558,6 +1562,43 @@ KFPVertex VarManager::createKFPVertexFromCollision(const T& collision)
15581562 return kfpVertex;
15591563}
15601564
1565+ template <typename T, typename T1>
1566+ o2::dataformats::VertexBase VarManager::RecalculatePrimaryVertex (T const & track0, T const & track1, const T1& collision)
1567+ {
1568+ KFParticle trk0KF;
1569+ KFPTrack kfpTrack0 = createKFPTrackFromTrack (track0);
1570+ trk0KF = KFParticle (kfpTrack0, -11 * track0.sign ());
1571+ KFParticle trk1KF;
1572+ KFPTrack kfpTrack1 = createKFPTrackFromTrack (track1);
1573+ trk1KF = KFParticle (kfpTrack1, -11 * track1.sign ());
1574+
1575+ KFParticle kVtx ;
1576+ kVtx .Initialize ();
1577+ kVtx .Parameter (0 ) = collision.posX ();
1578+ kVtx .Parameter (1 ) = collision.posY ();
1579+ kVtx .Parameter (2 ) = collision.posZ ();
1580+ kVtx .Covariance (0 ) = collision.covXX ();
1581+ kVtx .Covariance (1 ) = collision.covXY ();
1582+ kVtx .Covariance (2 ) = collision.covYY ();
1583+ kVtx .Covariance (3 ) = collision.covXZ ();
1584+ kVtx .Covariance (4 ) = collision.covYZ ();
1585+ kVtx .Covariance (5 ) = collision.covZZ ();
1586+ kVtx .Chi2 () = collision.chi2 (); // FIX THIS! to be added in AliReducedEventInfo
1587+ kVtx .NDF () = 2 * collision.multNTracksPV () - 3 ;
1588+ // KFVertex kfpVertex(kVtx); // kfpVertex.Initialize();
1589+
1590+ if ((track0.flags () & o2::aod::track::PVContributor) > 0 ) {
1591+ trk0KF.SubtractFromVertex (kVtx ); /* printf("track1 -> subtracting \n");*/
1592+ }
1593+ if ((track1.flags () & o2::aod::track::PVContributor) > 0 ) {
1594+ trk1KF.SubtractFromVertex (kVtx ); /* printf("track2 -> subtracting \n");*/
1595+ }
1596+
1597+ o2::math_utils::Point3D<float > vtxXYZ (kVtx .Parameter (0 ), kVtx .Parameter (1 ), kVtx .Parameter (2 ));
1598+ std::array<float , 6 > vtxCov{kVtx .Covariance (0 ), kVtx .Covariance (1 ), kVtx .Covariance (2 ), kVtx .Covariance (3 ), kVtx .Covariance (4 ), kVtx .Covariance (5 )};
1599+ o2::dataformats::VertexBase primaryVertexRec = {std::move (vtxXYZ), std::move (vtxCov)};
1600+ return primaryVertexRec;
1601+ }
15611602template <typename T, typename C>
15621603o2::dataformats::GlobalFwdTrack VarManager::PropagateMuon (const T& muon, const C& collision, const int endPoint)
15631604{
@@ -4139,6 +4180,7 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2,
41394180 }
41404181
41414182 Vec3D secondaryVertex;
4183+ o2::dataformats::VertexBase primaryVertexNew;
41424184
41434185 if constexpr (eventHasVtxCov) {
41444186
@@ -4161,6 +4203,7 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2,
41614203 v1 = {trackParVar0.getPt (), trackParVar0.getEta (), trackParVar0.getPhi (), m1};
41624204 v2 = {trackParVar1.getPt (), trackParVar1.getEta (), trackParVar1.getPhi (), m2};
41634205 v12 = v1 + v2;
4206+ primaryVertexNew = RecalculatePrimaryVertex (t1, t2, collision);
41644207
41654208 } else if constexpr (pairType == kDecayToMuMu && muonHasCov) {
41664209 // Get pca candidate from forward DCA fitter
@@ -4218,9 +4261,13 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2,
42184261 values[kVertexingLxyProjected ] = values[kVertexingLxyProjected ] / TMath::Sqrt ((v12.Px () * v12.Px ()) + (v12.Py () * v12.Py ()));
42194262 values[kVertexingLxyzProjected ] = ((secondaryVertex[0 ] - collision.posX ()) * v12.Px ()) + ((secondaryVertex[1 ] - collision.posY ()) * v12.Py ()) + ((secondaryVertex[2 ] - collision.posZ ()) * v12.Pz ());
42204263 values[kVertexingLxyzProjected ] = values[kVertexingLxyzProjected ] / TMath::Sqrt ((v12.Px () * v12.Px ()) + (v12.Py () * v12.Py ()) + (v12.Pz () * v12.Pz ()));
4264+ values[kVertexingLxyProjectedRecalculatePV ] = (secondaryVertex[0 ] - primaryVertexNew.getX ()) * v12.Px () + (secondaryVertex[1 ] - primaryVertexNew.getY ()) * v12.Py ();
4265+ values[kVertexingLxyProjectedRecalculatePV ] = values[kVertexingLxyProjectedRecalculatePV ] / v12.Pt ();
4266+
42214267 values[kVertexingTauxyProjected ] = values[kVertexingLxyProjected ] * v12.M () / (v12.Pt ());
42224268 values[kVertexingTauxyProjectedPoleJPsiMass ] = values[kVertexingLxyProjected ] * o2::constants::physics::MassJPsi / (v12.Pt ());
42234269 values[kVertexingTauxyProjectedNs ] = values[kVertexingTauxyProjected ] / o2::constants::physics::LightSpeedCm2NS;
4270+ values[kVertexingTauxyProjectedPoleJPsiMassRecalculatePV ] = values[kVertexingLxyProjectedRecalculatePV ] * o2::constants::physics::MassJPsi / (v12.Pt ());
42244271 values[kVertexingTauzProjected ] = values[kVertexingLzProjected ] * v12.M () / TMath::Abs (v12.Pz ());
42254272 values[kVertexingTauxyzProjected ] = values[kVertexingLxyzProjected ] * v12.M () / (v12.P ());
42264273 }
0 commit comments