From: wiechula Date: Wed, 27 Nov 2013 22:54:46 +0000 (+0000) Subject: added new parameter kGetPairPlaneAngle to AliDielectronPair and new variables kPairPl... X-Git-Url: http://git.uio.no/git/?a=commitdiff_plain;h=d6c07bf1a5f2c705b72a2e0a74cc68255803f4a0;p=u%2Fmrichter%2FAliRoot.git added new parameter kGetPairPlaneAngle to AliDielectronPair and new variables kPairPlaneAngleXY to AliDielectronVarManager. kGetPairPlaneAngle can calculate three variables kPairPlaneAngleXY by setting Double_t v0roH2 and Int_t VariNum in AliDielectronVarManager (Asako) --- diff --git a/PWGDQ/dielectron/AliDielectronPair.cxx b/PWGDQ/dielectron/AliDielectronPair.cxx index 48fcae73d37..2ce04a40e95 100644 --- a/PWGDQ/dielectron/AliDielectronPair.cxx +++ b/PWGDQ/dielectron/AliDielectronPair.cxx @@ -252,45 +252,6 @@ void AliDielectronPair::GetThetaPhiCM(Double_t &thetaHE, Double_t &phiHE, Double } } -//______________________________________________ -void AliDielectronPair::GetRotPair(Double_t &RotPairx, Double_t &RotPairy, Double_t &RotPairz) const -{ - // calculation of rotation p1 p2 - Double_t px1=-9999.,py1=-9999.,pz1=-9999.; - Double_t px2=-9999.,py2=-9999.,pz2=-9999.; - - px1 = fD1.GetPx(); - py1 = fD1.GetPy(); - pz1 = fD1.GetPz(); - - px2 = fD2.GetPx(); - py2 = fD2.GetPy(); - pz2 = fD2.GetPz(); - - // normal vector of ee plane - Double_t pnorx = py1*pz2 - pz1*py2; - Double_t pnory = pz1*px2 - px1*pz2; - Double_t pnorz = px1*py2 - py1*px2; - Double_t pnor = TMath::Sqrt( pnorx*pnorx + pnory*pnory + pnorz*pnorz ); - - //unit vector - Double_t upnx = -9999.; - Double_t upny = -9999.; - Double_t upnz = -9999.; - if (pnor !=0) - { - upnx= pnorx/pnor; - upny= pnory/pnor; - upnz= pnorz/pnor; - } - - - RotPairx = upnx; - RotPairy = upny; - RotPairz = upnz; - -} - //______________________________________________ Double_t AliDielectronPair::PsiPair(Double_t MagField) const @@ -653,11 +614,11 @@ Double_t AliDielectronPair::PhivPair(Double_t MagField) const } //______________________________________________ -Double_t AliDielectronPair::PairPlaneAngle() const +Double_t AliDielectronPair::GetPairPlaneAngle(const Double_t v0rpH2,const Int_t VariNum)const { - // Calculate the angle between electron pair plane and VZERO-C reaction plane for 2nd harmonic - + // Calculate the angle between electron pair plane and variables + // kv0rpH2 is reaction plane angle using V0-A,C,AC,Random Double_t px1=-9999.,py1=-9999.,pz1=-9999.; Double_t px2=-9999.,py2=-9999.,pz2=-9999.; @@ -673,7 +634,7 @@ Double_t AliDielectronPair::PairPlaneAngle() const //p1+p2 Double_t px = px1+px2; Double_t py = py1+py2; - //Double_t pz = pz1+pz2; + Double_t pz = pz1+pz2; // normal vector of ee plane Double_t pnorx = py1*pz2 - pz1*py2; @@ -681,48 +642,87 @@ Double_t AliDielectronPair::PairPlaneAngle() const Double_t pnorz = px1*py2 - py1*px2; Double_t pnor = TMath::Sqrt( pnorx*pnorx + pnory*pnory + pnorz*pnorz ); - //unit vector + //unit vector Double_t upnx = -9999.; Double_t upny = -9999.; Double_t upnz = -9999.; - if (pnor !=0) - { - upnx= pnorx/pnor; - upny= pnory/pnor; - upnz= pnorz/pnor; - } - - // normal vector of strong magnetic field plane - //rotation coordinates (x,y,z)->(x',y',z') - //(p1+p2),(0,0,1) - Double_t ax = py; - Double_t ay = -px; - Double_t az = 0.0; - - Double_t denomHelper = ax*ax + ay*ay +az*az; - Double_t uax = -9999.; - Double_t uay = -9999.; - Double_t uaz = -9999.; - if (denomHelper !=0) { - uax = ax/TMath::Sqrt(denomHelper); - uay = ay/TMath::Sqrt(denomHelper); - uaz = az/TMath::Sqrt(denomHelper); - } - //PM is the angle between Pair plane and Magnetic field plane - Double_t cosPM = upnx*uax + upny*uay + upnz*uaz; - Double_t PM = TMath::ACos(cosPM); + if (pnor !=0) + { + upnx= pnorx/pnor; + upny= pnory/pnor; + upnz= pnorz/pnor; + } - //keep interval [0,pi/2] - if(PM > TMath::Pi()/2){ - PM -= TMath::Pi(); - PM *= -1.0; - } - return PM; + Double_t ax = -9999.; + Double_t ay = -9999.; + Double_t az = -9999.; + + //variable 1 + //seeing the angle between ee decay plane and reaction plane by using V0-A,C,AC,Random + if(VariNum == 1){ + ax = TMath::Sin(v0rpH2); + ay = -TMath::Cos(v0rpH2); + az = 0.0; + } + + + //variable 2 + //seeing the angle between ee decay plane and (p1+p2) rot ez + else if (VariNum == 2 ){ + ax = py; + ay = -px; + az = 0.0; + } + + //variable 3 + //seeing the angle between ee decay plane and (p1+p2) rot (p1+p2)x'z + else if (VariNum == 3 ){ + Double_t rotpx = px*TMath::Cos(v0rpH2)+py*TMath::Sin(v0rpH2); + //Double_t rotpy = 0.0; + // Double_t rotpz = pz; + + ax = py*pz; + ay = pz*rotpx-pz*px; + az = -rotpx*py; + } + + //variable 4 + //seeing the angle between ee decay plane and (p1+p2) rot ey' + else if (VariNum == 4){ + ax = 0.0; + ay = 0.0; + az = pz; + } + + Double_t denomHelper = ax*ax + ay*ay +az*az; + Double_t uax = -9999.; + Double_t uay = -9999.; + Double_t uaz = -9999.; + + if (denomHelper !=0) { + uax = ax/TMath::Sqrt(denomHelper); + uay = ay/TMath::Sqrt(denomHelper); + uaz = az/TMath::Sqrt(denomHelper); + } + + //PM is the angle between Pair plane and a plane decided by using variable 1-4 + + Double_t cosPM = upnx*uax + upny*uay + upnz*uaz; + Double_t PM = TMath::ACos(cosPM); + + //keep interval [0,pi/2] + if(PM > TMath::Pi()/2){ + PM -= TMath::Pi(); + PM *= -1.0; + + } + return PM; } + //______________________________________________ void AliDielectronPair::SetBeamEnergy(AliVEvent *ev, Double_t beamEbyHand) { diff --git a/PWGDQ/dielectron/AliDielectronPair.h b/PWGDQ/dielectron/AliDielectronPair.h index 527db298d9f..b71c73db149 100644 --- a/PWGDQ/dielectron/AliDielectronPair.h +++ b/PWGDQ/dielectron/AliDielectronPair.h @@ -134,18 +134,14 @@ public: Double_t PsiPair(Double_t MagField)const; //Angle cut w.r.t. to magnetic field Double_t PhivPair(Double_t MagField)const; //Angle of ee plane w.r.t. to magnetic field - // Double_t PairPlanev0rpH2Angle(Double_t kv0CrpH2)const; - // Double_t PairPlaneMagAngle(Double_t kv0CrpH2)const; - Double_t PairPlaneAngle()const; + + //Calculate the angle between ee decay plane and variables + Double_t GetPairPlaneAngle(const Double_t kv0CrpH2, const Int_t VariNum) const; Double_t GetCosPointingAngle(const AliVVertex *primVtx) const; Double_t GetArmAlpha() const; Double_t GetArmPt() const; - // calculate rotation of p1 p2 - void GetRotPair(Double_t &RotPairx, Double_t &RotPairy, Double_t &RotPairz) const; - - // 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 c95de43aed7..98c5d410b63 100644 --- a/PWGDQ/dielectron/AliDielectronVarManager.cxx +++ b/PWGDQ/dielectron/AliDielectronVarManager.cxx @@ -156,10 +156,23 @@ const char* AliDielectronVarManager::fgkParticleNames[AliDielectronVarManager::k {"ThetaSqCS", "cos^{2}(#theta_{CS})", ""}, {"PsiPair", "#Psi^{pair}", "(rad.)"}, {"PhivPair", "#Phi_{v}^{pair}", "(rad.)"}, - {"PairPlaneAngle", "PairPlaneAngle", "(rad.)"}, - {"kRotPairx", "kRotPairx", "(rad.)"}, - {"kRotPairy", "kRotPairy", "(rad.)"}, - {"kRotPairz", "kRotPairz", "(rad.)"}, + {"PairPlaneAngle1A", "#Phi_{1A}", "(rad.)"}, + {"PairPlaneAngle2A", "#Phi_{2A}", "(rad.)"}, + {"PairPlaneAngle3A", "#Phi_{3A}", "(rad.)"}, + {"PairPlaneAngle4A", "#Phi_{4A}", "(rad.)"}, + {"PairPlaneAngle1C", "#Phi_{1C}", "(rad.)"}, + {"PairPlaneAngle2C", "#Phi_{2C}", "(rad.)"}, + {"PairPlaneAngle3C", "#Phi_{3C}", "(rad.)"}, + {"PairPlaneAngle4C", "#Phi_{4C}", "(rad.)"}, + {"PairPlaneAngle1AC", "#Phi_{1AC}", "(rad.)"}, + {"PairPlaneAngle2AC", "#Phi_{2AC}", "(rad.)"}, + {"PairPlaneAngle3AC", "#Phi_{3AC}", "(rad.)"}, + {"PairPlaneAngle4AC", "#Phi_{4AC}", "(rad.)"}, + {"PairPlaneAngle1Ran", "#Phi_{1Ran}", "(rad.)"}, + {"PairPlaneAngle2Ran", "#Phi_{2Ran}", "(rad.)"}, + {"PairPlaneAngle3Ran", "#Phi_{3Ran}", "(rad.)"}, + {"PairPlaneAngle4Ran", "#Phi_{4Ran}", "(rad.)"}, + {"DeltaPhiRandomRP", "#Phi_{RanRP}", "(rad.)"}, {"Cos2PhiCS", "cos(2#phi_{CS})", ""}, {"CosTilPhiCS", "cos(#phi_{CS})", ""}, {"CosPhiH2", "cos(2#phi)", ""}, diff --git a/PWGDQ/dielectron/AliDielectronVarManager.h b/PWGDQ/dielectron/AliDielectronVarManager.h index bab3f4ec575..5eab983fd00 100644 --- a/PWGDQ/dielectron/AliDielectronVarManager.h +++ b/PWGDQ/dielectron/AliDielectronVarManager.h @@ -216,10 +216,26 @@ public: kThetaSqCS, // squared value of kThetaCS kPsiPair, // phi in mother's rest frame in Collins-Soper picture kPhivPair, // angle between ee plane and the magnetic field (can be useful for conversion rejection) - kPairPlaneAngle, // angle between ee plane and strong magnetic field - kRotPairx, //ee plane vector - kRotPairy, //ee plane vector - kRotPairz, //ee plane vector + + kPairPlaneAngle1A, // angle between ee decay plane and x'-z reaction plane by using V0-A + kPairPlaneAngle2A, // angle between ee decay plane and (p1+p2) rot ez + kPairPlaneAngle3A, // angle between ee decay plane and (p1+p2) rot (p1+p2)x'z + kPairPlaneAngle4A, // angle between ee decay plane and x'-y' plane + kPairPlaneAngle1C, // using v0-C + kPairPlaneAngle2C, + kPairPlaneAngle3C, + kPairPlaneAngle4C, + kPairPlaneAngle1AC, // using v0-AC + kPairPlaneAngle2AC, + kPairPlaneAngle3AC, + kPairPlaneAngle4AC, + kPairPlaneAngle1Ran, // using random reaction plane + kPairPlaneAngle2Ran, + kPairPlaneAngle3Ran, + kPairPlaneAngle4Ran, + kRandomRP, //Random reaction plane + kDeltaPhiRandomRP, //delta phi of the pair + kCos2PhiCS, // Cosine of 2*phi in mother's rest frame in the Collins-Soper picture kCosTilPhiCS, // Shifted phi depending on kThetaCS kCosPhiH2, // cosine of pair phi for 2nd harmonic @@ -1412,16 +1428,36 @@ inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPa if ( values[AliDielectronVarManager::kDeltaPhiTPCrpH2] < -1.*TMath::Pi() ) values[AliDielectronVarManager::kDeltaPhiTPCrpH2] += TMath::TwoPi(); - //angle between ee plane and Mag/Reaction plane - values[AliDielectronVarManager::kPairPlaneAngle] = pair->PairPlaneAngle(); - //ee plane vector - Double_t RotPairx = 0; - Double_t RotPairy = 0; - Double_t RotPairz = 0; - pair->GetRotPair(RotPairx,RotPairy,RotPairz); - values[AliDielectronVarManager::kRotPairx]=RotPairx; - values[AliDielectronVarManager::kRotPairy]=RotPairy; - values[AliDielectronVarManager::kRotPairz]=RotPairz; + //Calculate the angle between electrons decay plane and variables 1-4 + values[AliDielectronVarManager::kPairPlaneAngle1A] = pair->GetPairPlaneAngle(values[AliDielectronVarManager::kv0ArpH2],1); + values[AliDielectronVarManager::kPairPlaneAngle2A] = pair->GetPairPlaneAngle(values[AliDielectronVarManager::kv0ArpH2],2); + values[AliDielectronVarManager::kPairPlaneAngle3A] = pair->GetPairPlaneAngle(values[AliDielectronVarManager::kv0ArpH2],3); + values[AliDielectronVarManager::kPairPlaneAngle4A] = pair->GetPairPlaneAngle(values[AliDielectronVarManager::kv0ArpH2],4); + + values[AliDielectronVarManager::kPairPlaneAngle1C] = pair->GetPairPlaneAngle(values[AliDielectronVarManager::kv0CrpH2],1); + values[AliDielectronVarManager::kPairPlaneAngle2C] = pair->GetPairPlaneAngle(values[AliDielectronVarManager::kv0CrpH2],2); + values[AliDielectronVarManager::kPairPlaneAngle3C] = pair->GetPairPlaneAngle(values[AliDielectronVarManager::kv0CrpH2],3); + values[AliDielectronVarManager::kPairPlaneAngle4C] = pair->GetPairPlaneAngle(values[AliDielectronVarManager::kv0CrpH2],4); + + values[AliDielectronVarManager::kPairPlaneAngle1AC] = pair->GetPairPlaneAngle(values[AliDielectronVarManager::kv0ACrpH2],1); + values[AliDielectronVarManager::kPairPlaneAngle2AC] = pair->GetPairPlaneAngle(values[AliDielectronVarManager::kv0ACrpH2],2); + values[AliDielectronVarManager::kPairPlaneAngle3AC] = pair->GetPairPlaneAngle(values[AliDielectronVarManager::kv0ACrpH2],3); + values[AliDielectronVarManager::kPairPlaneAngle4AC] = pair->GetPairPlaneAngle(values[AliDielectronVarManager::kv0ACrpH2],4); + + //Random reaction plane + values[AliDielectronVarManager::kRandomRP] = (TMath::Pi()/2.0)*((Double_t)rand()/RAND_MAX * 2.0 -1.0 ); + //delta phi of pair fron random reaction plane + values[AliDielectronVarManager::kDeltaPhiRandomRP] = values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kRandomRP]; + // keep the interval [-pi,+pi] + if ( values[AliDielectronVarManager::kDeltaPhiRandomRP] > TMath::Pi() ) + values[AliDielectronVarManager::kDeltaPhiRandomRP] -= TMath::TwoPi(); + + values[AliDielectronVarManager::kPairPlaneAngle1Ran]= pair->GetPairPlaneAngle(values[AliDielectronVarManager::kRandomRP],1); + values[AliDielectronVarManager::kPairPlaneAngle2Ran]= pair->GetPairPlaneAngle(values[AliDielectronVarManager::kRandomRP],2); + values[AliDielectronVarManager::kPairPlaneAngle3Ran]= pair->GetPairPlaneAngle(values[AliDielectronVarManager::kRandomRP],3); + values[AliDielectronVarManager::kPairPlaneAngle4Ran]= pair->GetPairPlaneAngle(values[AliDielectronVarManager::kRandomRP],4); + + AliDielectronMC *mc=AliDielectronMC::Instance();