X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=HLT%2Fsrc%2FAliL3Track.cxx;h=7056ecd4589c2a87305521c1a5aaf901162b2868;hb=7f4044f0ab63faa935ed50dc5c54824439c59227;hp=2f11d8ea57342d53d29f3b7eb91a8920366e2385;hpb=6d4f1901671f59674b9f263820e6fcba38d23a12;p=u%2Fmrichter%2FAliRoot.git diff --git a/HLT/src/AliL3Track.cxx b/HLT/src/AliL3Track.cxx index 2f11d8ea573..7056ecd4589 100644 --- a/HLT/src/AliL3Track.cxx +++ b/HLT/src/AliL3Track.cxx @@ -3,20 +3,24 @@ // Author: Anders Vestbo , Uli Frankenfeld //*-- Copyright © ASV +#include "AliL3StandardIncludes.h" #include "AliL3RootTypes.h" - -#include "AliL3Defs.h" #include "AliL3Logging.h" #include "AliL3Track.h" #include "AliL3Transform.h" #include "AliL3Vertex.h" -#include + //_____________________________________________________________ // AliL3Track // // Track base class +//Begin_Html +/* + +*/ +//End_Html ClassImp(AliL3Track) @@ -45,7 +49,7 @@ AliL3Track::AliL3Track() fIsLocal=true; fRowRange[0]=0; fRowRange[1]=0; - memset(fHitNumbers,0,176*sizeof(UInt_t)); + memset(fHitNumbers,0,159*sizeof(UInt_t)); } void AliL3Track::Set(AliL3Track *tpt){ @@ -61,7 +65,9 @@ void AliL3Track::Set(AliL3Track *tpt){ SetTgl(tpt->GetTgl()); SetCharge(tpt->GetCharge()); SetHits(tpt->GetNHits(),(UInt_t *)tpt->GetHitNumbers()); - +#ifdef do_mc + SetMCid(tpt->GetMCid()); +#endif } Int_t AliL3Track::Compare(const AliL3Track *track) const @@ -80,19 +86,20 @@ Double_t AliL3Track::GetP() const { // Returns total momentum. return fabs(GetPt())*sqrt(1. + GetTgl()*GetTgl()); - } Double_t AliL3Track::GetPseudoRapidity() const { return 0.5 * log((GetP() + GetPz()) / (GetP() - GetPz())); } + /* Double_t AliL3Track::GetEta() const { return GetPseudoRapidity(); } */ + Double_t AliL3Track::GetRapidity() const { Double_t m_pi = 0.13957; @@ -105,22 +112,21 @@ void AliL3Track::Rotate(Int_t slice,Bool_t tolocal) //If flag tolocal is set, the track is rotated //to local coordinates. - AliL3Transform *transform = new AliL3Transform(); Float_t psi[1] = {GetPsi()}; if(!tolocal) - transform->Local2GlobalAngle(psi,slice); + AliL3Transform::Local2GlobalAngle(psi,slice); else - transform->Global2LocalAngle(psi,slice); + AliL3Transform::Global2LocalAngle(psi,slice); SetPsi(psi[0]); Float_t first[3]; first[0] = GetFirstPointX(); first[1] = GetFirstPointY(); first[2] = GetFirstPointZ(); if(!tolocal) - transform->Local2Global(first,slice); + AliL3Transform::Local2Global(first,slice); else - transform->Global2Local(first,slice,kTRUE); + AliL3Transform::Global2Local(first,slice,kTRUE); SetFirstPoint(first[0],first[1],first[2]); Float_t last[3]; @@ -128,16 +134,16 @@ void AliL3Track::Rotate(Int_t slice,Bool_t tolocal) last[1] = GetLastPointY(); last[2] = GetLastPointZ(); if(!tolocal) - transform->Local2Global(last,slice); + AliL3Transform::Local2Global(last,slice); else - transform->Global2Local(last,slice,kTRUE); + AliL3Transform::Global2Local(last,slice,kTRUE); SetLastPoint(last[0],last[1],last[2]); Float_t center[3] = {GetCenterX(),GetCenterY(),0}; if(!tolocal) - transform->Local2Global(center,slice); + AliL3Transform::Local2Global(center,slice); else - transform->Global2Local(center,slice,kTRUE); + AliL3Transform::Global2Local(center,slice,kTRUE); SetCenterX(center[0]); SetCenterY(center[1]); @@ -145,15 +151,14 @@ void AliL3Track::Rotate(Int_t slice,Bool_t tolocal) fIsLocal=kFALSE; else fIsLocal=kTRUE; - delete transform; } void AliL3Track::CalculateHelix(){ - //Calculate Radius, CenterX and Centery from Psi, X0, Y0 + //Calculate Radius, CenterX and CenterY from Psi, X0, Y0 // - fRadius = fPt / (BFACT*BField); - if(fRadius) fKappa = 1./fRadius; + fRadius = fPt / (BFACT*AliL3Transform::GetBField()); + if(fRadius) fKappa = -fQ*1./fRadius; else fRadius = 999999; //just zero Double_t trackPhi0 = fPsi + fQ *0.5 * pi; @@ -177,31 +182,33 @@ Double_t AliL3Track::GetCrossingAngle(Int_t padrow) //Take the dot product of the tangent vector of the track, and //vector perpendicular to the padrow. + //In order to do this, we need the tangent vector to the track at the + //point. This is done by rotating the radius vector by 90 degrees; + //rotation matrix: ( 0 1 ) + // ( -1 0 ) Double_t tangent[2]; - tangent[1] = (xyz[0] - GetCenterX())/GetRadius(); tangent[0] = -1.*(xyz[1] - GetCenterY())/GetRadius(); - + tangent[1] = (xyz[0] - GetCenterX())/GetRadius(); + Double_t perp_padrow[2] = {1,0}; //locally in slice - + Double_t cos_beta = fabs(tangent[0]*perp_padrow[0] + tangent[1]*perp_padrow[1]); + if(cos_beta > 1) cos_beta=1; return acos(cos_beta); - } Bool_t AliL3Track::GetCrossingPoint(Int_t padrow,Float_t *xyz) { //Assumes the track is given in local coordinates - AliL3Transform *transform = new AliL3Transform(); - if(!IsLocal()) { printf("GetCrossingPoint: Track is given on global coordinates\n"); return false; } - Double_t xHit = transform->Row2X(padrow); + Double_t xHit = AliL3Transform::Row2X(padrow); xyz[0] = xHit; Double_t aa = (xHit - GetCenterX())*(xHit - GetCenterX()); @@ -217,27 +224,26 @@ Bool_t AliL3Track::GetCrossingPoint(Int_t padrow,Float_t *xyz) Double_t yHit = xyz[1]; Double_t angle1 = atan2((yHit - GetCenterY()),(xHit - GetCenterX())); - if(angle1 < 0) angle1 += 2.*Pi; + if(angle1 < 0) angle1 += 2.*AliL3Transform::Pi(); Double_t angle2 = atan2((GetFirstPointY() - GetCenterY()),(GetFirstPointX() - GetCenterX())); - if(angle2 < 0) angle2 += 2.*Pi; + if(angle2 < 0) angle2 += 2.*AliL3Transform::Pi(); Double_t diff_angle = angle1 - angle2; - diff_angle = fmod(diff_angle,2*Pi); - if((GetCharge()*diff_angle) > 0) diff_angle = diff_angle - GetCharge()*2.*Pi; + diff_angle = fmod(diff_angle,2*AliL3Transform::Pi()); + if((GetCharge()*diff_angle) > 0) diff_angle = diff_angle - GetCharge()*2.*AliL3Transform::Pi(); Double_t s_tot = fabs(diff_angle)*GetRadius(); Double_t zHit = GetFirstPointZ() + s_tot*GetTgl(); xyz[2] = zHit; - delete transform; return true; } Bool_t AliL3Track::CalculateReferencePoint(Double_t angle,Double_t radius){ - // Global coordinate: crossing point with y = ax+ b; a=tan(angle-Pi/2); + // Global coordinate: crossing point with y = ax+ b; a=tan(angle-AliL3Transform::Pi()/2); // - const Double_t rr=radius;//132; //position of referece plane - const Double_t xr = cos(angle) *rr; - const Double_t yr = sin(angle) *rr; + const Double_t rr=radius;//132; //position of reference plane + const Double_t xr = cos(angle) * rr; + const Double_t yr = sin(angle) * rr; Double_t a = tan(angle-pi/2); Double_t b = yr - a * xr; @@ -285,8 +291,8 @@ Bool_t AliL3Track::CalculateReferencePoint(Double_t angle,Double_t radius){ Bool_t AliL3Track::CalculateEdgePoint(Double_t angle){ // Global coordinate: crossing point with y = ax; a=tan(angle); // - Double_t rmin=80; //min Radius of TPC - Double_t rmax=260; //max Radius of TPC + Double_t rmin=AliL3Transform::Row2X(AliL3Transform::GetFirstRow(-1)); //min Radius of TPC + Double_t rmax=AliL3Transform::Row2X(AliL3Transform::GetLastRow(-1)); //max Radius of TPC Double_t a = tan(angle); Double_t pp=(fCenterX+a*fCenterY)/(1+pow(a,2)); @@ -409,15 +415,15 @@ void AliL3Track::GetClosestPoint(AliL3Vertex *vertex,Double_t &closest_x,Double_ //Get the z coordinate: Double_t angle1 = atan2((closest_y-GetCenterY()),(closest_x-GetCenterX())); - if(angle1 < 0) angle1 = angle1 + 2*Pi; + if(angle1 < 0) angle1 = angle1 + 2*AliL3Transform::Pi(); Double_t angle2 = atan2((GetFirstPointY()-GetCenterY()),(GetFirstPointX()-GetCenterX())); - if(angle2 < 0) angle2 = angle2 + 2*Pi; + if(angle2 < 0) angle2 = angle2 + 2*AliL3Transform::Pi(); Double_t diff_angle = angle1 - angle2; - diff_angle = fmod(diff_angle,2*Pi); + diff_angle = fmod(diff_angle,2*AliL3Transform::Pi()); - if((GetCharge()*diff_angle) < 0) diff_angle = diff_angle + GetCharge()*2*Pi; + if((GetCharge()*diff_angle) < 0) diff_angle = diff_angle + GetCharge()*2*AliL3Transform::Pi(); Double_t s_tot = fabs(diff_angle)*GetRadius(); closest_z = GetFirstPointZ() - s_tot*GetTgl();