//translation
Double_t vt[3] = {vMix[0]-vFirst[0],vMix[1]-vFirst[1],vMix[2]-vFirst[2]};
//rotate to the track frame
- track->Global2LocalPosition(vt,track->GetAlpha());
+// track->Global2LocalPosition(vt,track->GetAlpha());
//add to track position
- x = x -vt[0];
- param[0] = param[0]-vt[1];
+// x = x -vt[0];
+// param[0] = param[0]-vt[1];
+// param[1] = param[1]-vt[2];
+ x = x;
+ param[0] = param[0];
param[1] = param[1]-vt[2];
//set updated track information
#include <AliVTrack.h>
#include <AliVVertex.h>
#include <AliPID.h>
+#include <AliExternalTrackParam.h>
#include "AliDielectronPair.h"
}
}
+//______________________________________________
+Double_t AliDielectronPair::PsiPair(Double_t MagField) const
+{
+ //Following idea to use opening of colinear pairs in magnetic field from e.g. PHENIX
+ //to ID conversions. Adapted from AliTRDv0Info class
+ Double_t x, y, z;
+ x = fPair.GetX();
+ y = fPair.GetY();
+ z = fPair.GetZ();
+
+ Double_t m1[3] = {0,0,0};
+ Double_t m2[3] = {0,0,0};
+
+ m1[0] = fD1.GetPx();
+ m1[1] = fD1.GetPy();
+ m1[2] = fD1.GetPz();
+
+ m2[0] = fD2.GetPx();
+ m2[1] = fD2.GetPy();
+ m2[2] = fD2.GetPz();
+
+ Double_t deltat = 1.;
+ deltat = TMath::ATan(m2[2]/(TMath::Sqrt(m2[0]*m2[0] + m2[1]*m2[1])+1.e-13))-
+ TMath::ATan(m1[2]/(TMath::Sqrt(m1[0]*m1[0] + m1[1]*m1[1])+1.e-13));//difference of angles of the two daughter tracks with z-axis
+
+ Double_t radiussum = TMath::Sqrt(x*x + y*y) + 50;//radius to which tracks shall be propagated
+
+ Double_t mom1Prop[3];
+ Double_t mom2Prop[3];
+
+ AliExternalTrackParam *d1 = static_cast<AliExternalTrackParam*>(fRefD1.GetObject());
+ AliExternalTrackParam *d2 = static_cast<AliExternalTrackParam*>(fRefD2.GetObject());
+
+ AliExternalTrackParam nt(*d1), pt(*d2);
+ //AliExternalTrackParam nt(), pt();
+ nt.CopyFromVTrack(d1);
+ pt.CopyFromVTrack(d2);
+
+ Double_t fPsiPair = 4.;
+ if(nt.PropagateTo(radiussum,MagField) == 0)//propagate tracks to the outside
+ fPsiPair = -5.;
+ if(pt.PropagateTo(radiussum,MagField) == 0)
+ fPsiPair = -5.;
+ pt.GetPxPyPz(mom1Prop);//Get momentum vectors of tracks after propagation
+ nt.GetPxPyPz(mom2Prop);
+
+
+
+ Double_t pEle =
+ TMath::Sqrt(mom2Prop[0]*mom2Prop[0]+mom2Prop[1]*mom2Prop[1]+mom2Prop[2]*mom2Prop[2]);//absolute momentum val
+ Double_t pPos =
+ TMath::Sqrt(mom1Prop[0]*mom1Prop[0]+mom1Prop[1]*mom1Prop[1]+mom1Prop[2]*mom1Prop[2]);//absolute momentum val
+
+ Double_t scalarproduct =
+ mom1Prop[0]*mom2Prop[0]+mom1Prop[1]*mom2Prop[1]+mom1Prop[2]*mom2Prop[2];//scalar product of propagated posit
+
+ Double_t chipair = TMath::ACos(scalarproduct/(pEle*pPos));//Angle between propagated daughter tracks
+
+ fPsiPair = TMath::Abs(TMath::ASin(deltat/chipair));
+
+ return fPsiPair;
+
+}
+
//______________________________________________
Double_t AliDielectronPair::ThetaPhiCM(const AliVParticle* d1, const AliVParticle* d2,
const Bool_t isHE, const Bool_t isTheta)
Double_t ThetaPhiCM(Bool_t isHE, Bool_t isTheta) const;
static Double_t ThetaPhiCM(const AliVParticle* d1, const AliVParticle* d2,
const Bool_t isHE, const Bool_t isTheta);
+
+ Double_t PsiPair(Double_t MagField)const; //Angle cut w.r.t. to magnetic field
// internal KF particle
const AliKFParticle& GetKFParticle() const { return fPair; }
const AliKFParticle& GetKFFirstDaughter() const { return fD1; }
// the 3-mom vectors of target and projectile beams
kThetaCS, // theta in mother's rest frame in Collins-Soper picture
kPhiCS, // phi in mother's rest frame in Collins-Soper picture
+ kPsiPair, // phi in mother's rest frame in Collins-Soper picture
kCos2PhiCS, // Cosine of 2*phi in mother's rest frame in the Collins-Soper picture
kCosTilPhiCS, // Sin(phi) +/- Cos(phi) in mother's rest frame in Collins-Soper picture; Sign is sign(Cos(phi))
kDeltaPhiV0ArpH2, // Delta phi of the pair with respect to the 2nd order harmonic reaction plane from V0-A
values[AliDielectronVarManager::kPairType] = pair->GetType();
Double_t errPseudoProperTime2 = -1;
+ values[AliDielectronVarManager::kPsiPair] = pair->PsiPair(fgEvent->GetMagneticField());
values[AliDielectronVarManager::kPseudoProperTime] = fgEvent ? pair->GetKFParticle().GetPseudoProperDecayTime(*(fgEvent->GetPrimaryVertex()), TDatabasePDG::Instance()->GetParticle(443)->Mass(), &errPseudoProperTime2 ) : -1e10;
// values[AliDielectronVarManager::kPseudoProperTime] = fgEvent ? pair->GetPseudoProperTime(fgEvent->GetPrimaryVertex()): -1e10;