From 1ee9dca44087c08ea523c82a36fea698cafdc98c Mon Sep 17 00:00:00 2001 From: richterm Date: Fri, 18 Jul 2008 13:36:05 +0000 Subject: [PATCH] TPC conformal mapping tracker: setting the diagonal error elements correctly (Gaute) --- HLT/TPCLib/AliHLTTPCConfMapFit.cxx | 28 ++++++++++++++++++++++- HLT/TPCLib/AliHLTTPCTrack.cxx | 31 ++++++++++++++++++++++++++ HLT/TPCLib/AliHLTTPCTrack.h | 4 +++- HLT/TPCLib/AliHLTTPCTrackArray.cxx | 6 +++++ HLT/TPCLib/AliHLTTPCTrackSegmentData.h | 4 +++- 5 files changed, 70 insertions(+), 3 deletions(-) diff --git a/HLT/TPCLib/AliHLTTPCConfMapFit.cxx b/HLT/TPCLib/AliHLTTPCConfMapFit.cxx index be07e5552d9..2bda0fa3d52 100644 --- a/HLT/TPCLib/AliHLTTPCConfMapFit.cxx +++ b/HLT/TPCLib/AliHLTTPCConfMapFit.cxx @@ -414,6 +414,7 @@ Int_t AliHLTTPCConfMapFit::FitCircle() fTrack->SetCenterX(acent); fTrack->SetCenterY(bcent); + fTrack->SetY0err(0.03); //set error for pT and Y. psi, Z and Tgl are set. // @@ -549,7 +550,32 @@ Int_t AliHLTTPCConfMapFit::FitLine ( ) fTrack->SetTglerr(dtanl); fTrack->SetZ0err(dz0); - + + //The calculation of pT comes from "Perticle Physics Booklet": + //24.11 Measurement of particle momenta in a uniform magnetic field. + //(dk)^2=(dk_res)^2 + (dk_ms)^2 + //for now k_ms is 0. Need to find length of track in 3D. + + Double_t lengthXY = fTrack->GetLengthXY(); + //Double_t lengthTot = fTrack->GetLengthTot(); + //Double_t beta = fTrack->GetP()/TMath::Sqrt((fTrack->GetP()*fTrack->GetP())+(0.13957*0.13957)); + //Double_t lambda = TMath::ATan(fTrack->GetTgl()); + Double_t lengthXY2 = lengthXY*lengthXY; + Int_t nCluster4 = fTrack->GetNHits()+4; + + Double_t Kres = 0.03/lengthXY2; + Kres = Kres * TMath::Sqrt(720/nCluster4); + + //Double_t Kres = (0.03/(lengthXY*lengthXY))*TMath::Sqrt(720/(fTrack->GetNHits()+4)); + + //Double_t d = lengthTot*fTrack->GetP()*beta*TMath::Cos(lambda)*TMath::Cos(lambda); + //Double_t Kms = (0.016/d)*TMath::Sqrt(lengthTot/24.0); + Double_t Kms = 0.0; + + Double_t Pterr = (Kres * Kres) + (Kms * Kms); + + fTrack->SetPterr(Pterr); + return 0 ; } diff --git a/HLT/TPCLib/AliHLTTPCTrack.cxx b/HLT/TPCLib/AliHLTTPCTrack.cxx index 33829862123..2e206e9a735 100644 --- a/HLT/TPCLib/AliHLTTPCTrack.cxx +++ b/HLT/TPCLib/AliHLTTPCTrack.cxx @@ -100,6 +100,8 @@ void AliHLTTPCTrack::Copy(AliHLTTPCTrack *tpt) SetPterr(tpt->GetPterr()); SetPsierr(tpt->GetPsierr()); SetTglerr(tpt->GetTglerr()); + SetZ0err(tpt->GetZ0err()); + SetY0err(tpt->GetY0err()); SetCharge(tpt->GetCharge()); SetHits(tpt->GetNHits(),(UInt_t *)tpt->GetHitNumbers()); #ifdef do_mc @@ -695,3 +697,32 @@ void AliHLTTPCTrack::SetHits(Int_t nhits,UInt_t *hits) } memcpy(fHitNumbers,hits,(nhits<=fgkHitArraySize?nhits:fgkHitArraySize)*sizeof(UInt_t)); } + +Double_t AliHLTTPCTrack::GetLengthXY() const +{ + //calculates the length of the arc in XY-plane. This is the length of the track in XY-plane. + //Using a^2 = b^2 + c^2 - 2bc * cosA for finding the angle between first and last point. + //Length of arc is arc = r*A. Where A is the angle between first and last point. + + Double_t dx = GetLastPointX()-GetFirstPointX(); + Double_t dy = GetLastPointY()-GetFirstPointY(); + Double_t a = TMath::Sqrt((dx*dx)+(dy*dy)); + Double_t r = GetRadius(); + Double_t r2 = r*r; + + Double_t A = TMath::ACos((r2+r2-(a*a))/(2*r2)); + + return r*A; +} + +Double_t AliHLTTPCTrack::GetLengthTot() const +{ + //Calculates the length of the track in 3D + + + + + + return 100.0; + +} diff --git a/HLT/TPCLib/AliHLTTPCTrack.h b/HLT/TPCLib/AliHLTTPCTrack.h index 3839e0a9052..2366e60a1e3 100644 --- a/HLT/TPCLib/AliHLTTPCTrack.h +++ b/HLT/TPCLib/AliHLTTPCTrack.h @@ -120,7 +120,9 @@ class AliHLTTPCTrack : public AliTPCtrack { Int_t GetCharge() const {return fQ;} Int_t GetMCid() const {return fMCid;} Double_t GetLength() const {return fLength;} - + Double_t GetLengthXY() const ; + Double_t GetLengthTot() const; + Int_t GetFirstRow() const {return fRowRange[0];} Int_t GetLastRow() const {return fRowRange[1];} Int_t GetSector() const {return fSector;} diff --git a/HLT/TPCLib/AliHLTTPCTrackArray.cxx b/HLT/TPCLib/AliHLTTPCTrackArray.cxx index 55ffa213e23..5107b981e9e 100644 --- a/HLT/TPCLib/AliHLTTPCTrackArray.cxx +++ b/HLT/TPCLib/AliHLTTPCTrackArray.cxx @@ -260,6 +260,8 @@ void AliHLTTPCTrackArray::FillTracks(Int_t ntracks, AliHLTTPCTrackSegmentData* t track->SetTgl(trs->fTgl); track->SetPsierr(trs->fPsierr); track->SetTglerr(trs->fTglerr); + track->SetY0err(trs->fY0err); + track->SetZ0err(trs->fZ0err); track->SetNHits(trs->fNPoints); track->SetCharge(trs->fCharge); Float_t first[3]; @@ -382,6 +384,8 @@ UInt_t AliHLTTPCTrackArray::WriteTracks(AliHLTTPCTrackSegmentData* tr) tP->fTgl = track->GetTgl(); tP->fPsierr = track->GetPsierr(); tP->fTglerr = track->GetTglerr(); + tP->fY0err = track->GetY0err(); + tP->fZ0err = track->GetZ0err(); tP->fCharge = track->GetCharge(); tP->fNPoints = track->GetNHits(); #ifdef INCLUDE_TPC_HOUGH @@ -447,6 +451,8 @@ UInt_t AliHLTTPCTrackArray::WriteConfMapTracks(AliHLTTPCTrackSegmentData* tr) tP->fTgl = track->GetTgl(); tP->fPsierr = track->GetPsierr(); tP->fTglerr = track->GetTglerr(); + tP->fY0err = track->GetY0err(); + tP->fZ0err = track->GetZ0err(); tP->fCharge = track->GetCharge(); #ifdef INCLUDE_TPC_HOUGH #ifdef ROWHOUGHPARAMS diff --git a/HLT/TPCLib/AliHLTTPCTrackSegmentData.h b/HLT/TPCLib/AliHLTTPCTrackSegmentData.h index a5872e0dcca..60888f063a9 100644 --- a/HLT/TPCLib/AliHLTTPCTrackSegmentData.h +++ b/HLT/TPCLib/AliHLTTPCTrackSegmentData.h @@ -27,7 +27,9 @@ struct AliHLTTPCTrackSegmentData Double_t fPt; Double_t fPsi; Double_t fTgl; - Double_t fPterr; + Double_t fY0err; + Double_t fZ0err; + Double_t fPterr; Double_t fPsierr; Double_t fTglerr; Int_t fCharge; -- 2.43.0