From 236e1bda5222a4d551e8e3be05650c6a03e892ae Mon Sep 17 00:00:00 2001 From: wiechula Date: Sun, 13 May 2012 23:23:05 +0000 Subject: [PATCH] o small fix in mixing handler (bin finding) o new variable for pair: angle wrt. to b fiels (Christoph Baumann) --- .../dielectron/AliDielectronMixingHandler.cxx | 9 ++- PWGDQ/dielectron/AliDielectronPair.cxx | 65 +++++++++++++++++++ PWGDQ/dielectron/AliDielectronPair.h | 2 + PWGDQ/dielectron/AliDielectronVarManager.cxx | 1 + PWGDQ/dielectron/AliDielectronVarManager.h | 2 + 5 files changed, 76 insertions(+), 3 deletions(-) diff --git a/PWGDQ/dielectron/AliDielectronMixingHandler.cxx b/PWGDQ/dielectron/AliDielectronMixingHandler.cxx index b43f873f4a4..3e5afbc51ff 100644 --- a/PWGDQ/dielectron/AliDielectronMixingHandler.cxx +++ b/PWGDQ/dielectron/AliDielectronMixingHandler.cxx @@ -441,11 +441,14 @@ void AliDielectronMixingHandler::MoveToSameVertex(AliVTrack * const vtrack, cons //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 diff --git a/PWGDQ/dielectron/AliDielectronPair.cxx b/PWGDQ/dielectron/AliDielectronPair.cxx index abca10cbfc4..f73a0cc44cb 100644 --- a/PWGDQ/dielectron/AliDielectronPair.cxx +++ b/PWGDQ/dielectron/AliDielectronPair.cxx @@ -24,6 +24,7 @@ #include #include #include +#include #include "AliDielectronPair.h" @@ -214,6 +215,70 @@ void AliDielectronPair::GetThetaPhiCM(Double_t &thetaHE, Double_t &phiHE, Double } } +//______________________________________________ +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(fRefD1.GetObject()); + AliExternalTrackParam *d2 = static_cast(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) diff --git a/PWGDQ/dielectron/AliDielectronPair.h b/PWGDQ/dielectron/AliDielectronPair.h index 1d1c5d0e41a..6bd2439e329 100644 --- a/PWGDQ/dielectron/AliDielectronPair.h +++ b/PWGDQ/dielectron/AliDielectronPair.h @@ -120,6 +120,8 @@ public: 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; } diff --git a/PWGDQ/dielectron/AliDielectronVarManager.cxx b/PWGDQ/dielectron/AliDielectronVarManager.cxx index 29f81625404..7b990326d43 100644 --- a/PWGDQ/dielectron/AliDielectronVarManager.cxx +++ b/PWGDQ/dielectron/AliDielectronVarManager.cxx @@ -132,6 +132,7 @@ const char* AliDielectronVarManager::fgkParticleNames[AliDielectronVarManager::k "CosTilPhiHE", "ThetaCS", "PhiCS", + "PsiPair", "Cos2PhiCS", "CosTilPhiCS", "DeltaPhiV0ArpH2", diff --git a/PWGDQ/dielectron/AliDielectronVarManager.h b/PWGDQ/dielectron/AliDielectronVarManager.h index b010cb9e9f7..71fa85a0c60 100644 --- a/PWGDQ/dielectron/AliDielectronVarManager.h +++ b/PWGDQ/dielectron/AliDielectronVarManager.h @@ -182,6 +182,7 @@ public: // 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 @@ -1036,6 +1037,7 @@ inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPa 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; -- 2.43.0