TPC conformal mapping tracker: setting the diagonal error elements correctly (Gaute)
authorrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 18 Jul 2008 13:36:05 +0000 (13:36 +0000)
committerrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 18 Jul 2008 13:36:05 +0000 (13:36 +0000)
HLT/TPCLib/AliHLTTPCConfMapFit.cxx
HLT/TPCLib/AliHLTTPCTrack.cxx
HLT/TPCLib/AliHLTTPCTrack.h
HLT/TPCLib/AliHLTTPCTrackArray.cxx
HLT/TPCLib/AliHLTTPCTrackSegmentData.h

index be07e55..2bda0fa 100644 (file)
@@ -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 ;
 } 
 
index 3382986..2e206e9 100644 (file)
@@ -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;
+
+}
index 3839e0a..2366e60 100644 (file)
@@ -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;}
index 55ffa21..5107b98 100644 (file)
@@ -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
index a5872e0..60888f0 100644 (file)
@@ -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;