]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCTrackHits.cxx
Adding AliTPCTracklet to the repository (M.Mager)
[u/mrichter/AliRoot.git] / TPC / AliTPCTrackHits.cxx
index 49a9448b91a8a94aeffc0d723cc4bff6bea41f04..6729f34a2504303afba5bdf75410b4a027f270ac 100644 (file)
@@ -38,6 +38,8 @@
 
 #include "AliTPC.h"
 #include "AliTPCTrackHits.h"
+//           Interface classes
+#include "AliTPCTrackHitsInterfaces.h"
 
 ClassImp(AliTPCTrackHits) 
 LClassImp(AliTrackHitsInfo) 
@@ -54,10 +56,10 @@ Int_t AliTPCTrackHits::fgCounter1 =0;
 Int_t AliTPCTrackHits::fgCounter2 =0;
 const Double_t AliTPCTrackHits::fgkPrecision=1e-6;  //precision 
 const Double_t AliTPCTrackHits::fgkPrecision2=1e-20;  //precision
+const Double_t AliTPCTrackHits::fgkTimePrecision=20.e-9;  //hit time precision 
 
 
 class AliTPCCurrentHit {
-  friend class AliTPCTrackHits;
 private:
   AliTPChit fHit;     //   - hit in "standard" representation
   UInt_t   fInfoIndex;//   - current info pointer 
@@ -69,7 +71,6 @@ private:
 
 
 class  AliTPCTempHitInfo {
-  friend class AliTPCTrackHits;
 private:
   enum    { kStackSize = 100};
   AliTPCTempHitInfo(); 
@@ -78,8 +79,8 @@ private:
   AliTPCTempHitInfo & operator = (const AliTPCTempHitInfo &)
     {::Fatal("= operator","Not implemented\n");return *this;}
 
-  void     NewParam(Double_t r, Double_t z, Double_t fi, Int_t q);
-  void     SetHit(Double_t r, Double_t z, Double_t fi, Int_t q);
+  void     NewParam(Double_t r, Double_t z, Double_t fi, Int_t q, Float_t time);
+  void     SetHit(Double_t r, Double_t z, Double_t fi, Int_t q, Float_t time);
   Double_t * GetPosition(Int_t index){return &fPositionStack[index*3];}
   void    UpdateParam(Double_t maxdelta); //recal
   void   Fit2(Double_t fSumY, Double_t fSumYX, Double_t fSumYX2,
@@ -100,6 +101,7 @@ private:
   Double_t fOldR;     //previos r
   Double_t fPositionStack[3*kStackSize];  //position stack 
   UInt_t   fQStack[kStackSize];           //Q stack
+  Float_t  fTimeStack[kStackSize];        //time stack
   UInt_t fStackIndex;   //current stack index 
   UInt_t fInfoIndex;    //current track info index
   UInt_t fParamIndex;   //current track parameters index
@@ -121,7 +123,7 @@ AliTPCTempHitInfo::AliTPCTempHitInfo()
 }
 
 
-void AliTPCTempHitInfo::NewParam(Double_t r, Double_t z, Double_t fi, Int_t q)
+void AliTPCTempHitInfo::NewParam(Double_t r, Double_t z, Double_t fi, Int_t q, Float_t time)
 {
   //
   //reset stack and sum parameters
@@ -138,10 +140,10 @@ void AliTPCTempHitInfo::NewParam(Double_t r, Double_t z, Double_t fi, Int_t q)
   fParam->fAd = 0.;
   fParam->fTheta =0.;
   fParam->fThetaD =0.;
-  SetHit(r,z,fi,q);
+  SetHit(r,z,fi,q,time);
 }
 
-void AliTPCTempHitInfo::SetHit(Double_t r, Double_t z, Double_t fi, Int_t q)
+void AliTPCTempHitInfo::SetHit(Double_t r, Double_t z, Double_t fi, Int_t q, Float_t time)
 {
   //
   //add hit to the stack
@@ -151,6 +153,7 @@ void AliTPCTempHitInfo::SetHit(Double_t r, Double_t z, Double_t fi, Int_t q)
   f[1] = z;
   f[2] = fi;
   fQStack[fStackIndex]=q;
+  fTimeStack[fStackIndex]=time;
   if (fStackIndex==0) return;
   Double_t dr  = (r-fParam->fR);
   if (TMath::Abs(dr)<AliTPCTrackHits::fgkPrecision) dr =AliTPCTrackHits::fgkPrecision;
@@ -258,7 +261,35 @@ void   AliTPCTempHitInfo::Fit(AliTrackHitsParam * param)
   
 }
 
+//______________________________________________________________________
+AliTrackHitsInfo::AliTrackHitsInfo() : 
+  fTrackID(0),
+  fVolumeID(0),
+  fHitParamIndex(0)
+{
+  //
+  // Default constructor
+  //
+  fgCounter1++;
+  fgCounter2++;
+}
 
+//______________________________________________________________________
+AliTrackHitsParam::AliTrackHitsParam() :
+  fR(0),
+  fZ(0),
+  fFi(0),
+  fAn(0),
+  fAd(0),
+  fTheta(0),
+  fThetaD(0)
+{
+  //
+  // Default constructor
+  //
+  fgCounter1++;
+  fgCounter2++;
+}
 
 
 AliTPCTrackHits::AliTPCTrackHits()
@@ -324,17 +355,17 @@ void AliTPCTrackHits::Clear()
 
 
 void AliTPCTrackHits::AddHitKartez(Int_t volumeID, Int_t trackID, Double_t x, 
-             Double_t y, Double_t z,Int_t q)
+             Double_t y, Double_t z,Int_t q, Float_t time)
 {
   //add hits (cartesian)
   Double_t r = TMath::Sqrt(x*x+y*y);
   Double_t fi = TMath::ACos(x/r);
   if (y<0) fi*=-1.;
-    AddHit(volumeID,trackID,r,z,fi,q);
+    AddHit(volumeID,trackID,r,z,fi,q,time);
 }
 
 void AliTPCTrackHits::AddHit(Int_t volumeID, Int_t trackID, 
-                            Double_t r, Double_t z, Double_t fi, Int_t q)
+                            Double_t r, Double_t z, Double_t fi, Int_t q, Float_t time)
 {
   //
   Bool_t diff=kFALSE;
@@ -357,7 +388,7 @@ void AliTPCTrackHits::AddHit(Int_t volumeID, Int_t trackID,
     fTempInfo->fParam = 
       (AliTrackHitsParam*) (fTrackHitsParam->At(0));
     fTempInfo->fParamIndex = 0;
-    fTempInfo->NewParam(r,z,fi,q);
+    fTempInfo->NewParam(r,z,fi,q,time);
     return;
   }
   
@@ -368,7 +399,7 @@ void AliTPCTrackHits::AddHit(Int_t volumeID, Int_t trackID,
       fTrackHitsParam->Resize(fTempInfo->fParamIndex+1);    
     fTempInfo->fParam = 
       (AliTrackHitsParam*) (fTrackHitsParam->At(fTempInfo->fParamIndex));  
-    fTempInfo->NewParam(r,z,fi,q);
+    fTempInfo->NewParam(r,z,fi,q,time);
     return;
   }
   
@@ -395,7 +426,7 @@ void AliTPCTrackHits::AddHit(Int_t volumeID, Int_t trackID,
       fTrackHitsParam->Resize(fTempInfo->fParamIndex+1);    
     fTempInfo->fParam = 
       (AliTrackHitsParam*) (fTrackHitsParam->At(fTempInfo->fParamIndex));  
-    fTempInfo->NewParam(r,z,fi,q);
+    fTempInfo->NewParam(r,z,fi,q,time);
     return;
   }
      
@@ -440,7 +471,7 @@ void AliTPCTrackHits::AddHit(Int_t volumeID, Int_t trackID,
     diff=kTRUE;
   else{
     fTempInfo->fStackIndex++;   
-    fTempInfo->SetHit(r,z,fi,q);
+    fTempInfo->SetHit(r,z,fi,q,time);
     return;
   }  
   //if parameter changed 
@@ -450,11 +481,11 @@ void AliTPCTrackHits::AddHit(Int_t volumeID, Int_t trackID,
       fTrackHitsParam->Resize(fTempInfo->fParamIndex+1);    
     fTempInfo->fParam = 
       (AliTrackHitsParam*) (fTrackHitsParam->At(fTempInfo->fParamIndex));  
-    fTempInfo->NewParam(r,z,fi,q);
+    fTempInfo->NewParam(r,z,fi,q,time);
   }
   else{
     fTempInfo->fStackIndex++;
-    fTempInfo->SetHit(r,z,fi,q);              
+    fTempInfo->SetHit(r,z,fi,q,time);              
   }
 }   
 
@@ -531,6 +562,7 @@ Bool_t AliTPCTrackHits::FlushHitStack(Bool_t force)
     info = (AliHitInfo*)(fHitsPosAndQ->At(fTempInfo->fParamIndex,i));
     info->fHitDistance = (TMath::Abs(dl/fStep)<32000) ?Short_t(TMath::Nint(dl/fStep)):0;
     info->fCharge = Short_t(fTempInfo->fQStack[i]);
+    info->fTime = TMath::Nint(fTempInfo->fTimeStack[i]/AliTPCTrackHits::fgkTimePrecision);
     /*
     cout<<"C2";
     cout<<" "<<fTempInfo->fStackIndex<<" \t";
@@ -554,7 +586,7 @@ Bool_t AliTPCTrackHits::FlushHitStack(Bool_t force)
        (AliTrackHitsParam*) (fTrackHitsParam->At(fTempInfo->fParamIndex));    
     Double_t * p = fTempInfo->GetPosition(i);
     UInt_t index2 = fTempInfo->fStackIndex;
-    fTempInfo->NewParam(p[0],p[1],p[2],fTempInfo->fQStack[i]);        
+    fTempInfo->NewParam(p[0],p[1],p[2],fTempInfo->fQStack[i],fTempInfo->fTimeStack[i]);        
     if (i+1<=index2) FlushHitStack2(i+1,index2);
 
     if (force) return      FlushHitStack(kTRUE);      
@@ -571,16 +603,19 @@ void AliTPCTrackHits::FlushHitStack2(Int_t index1, Int_t index2)
   // call only for hits where first iteration were not succesfully interpolated  
   Double_t * positionstack = new Double_t[3*(index2-index1+1)];
   UInt_t   * qstack        = new UInt_t[index2-index1+1];
+  Float_t  * timestack        = new Float_t[index2-index1+1];
   memcpy(positionstack, &fTempInfo->fPositionStack[3*index1],
         (3*(index2-index1+1))*sizeof(Double_t));
   memcpy(qstack, &fTempInfo->fQStack[index1],(index2-index1+1)*sizeof(UInt_t));
+  memcpy(timestack, &fTempInfo->fTimeStack[index1],(index2-index1+1)*sizeof(Float_t));
   Double_t *p = positionstack;
   for (Int_t j=0; j<=index2-index1;j++){ 
     fTempInfo->fStackIndex++;
-    fTempInfo->SetHit(p[3*j+0],p[3*j+1],p[3*j+2],qstack[j]);
+    fTempInfo->SetHit(p[3*j+0],p[3*j+1],p[3*j+2],qstack[j],timestack[j]);
   }  
   delete []positionstack;
   delete []qstack;
+  delete []timestack;
 }
 
 
@@ -614,7 +649,8 @@ Bool_t AliTPCTrackHits::First()
   fCurrentHit->fHit.SetX(param->fR*TMath::Cos(param->fFi));
   fCurrentHit->fHit.SetY(param->fR*TMath::Sin(param->fFi));
   fCurrentHit->fHit.SetZ(param->fZ); 
-  fCurrentHit->fHit.fQ = hinfo->fCharge;
+  fCurrentHit->fHit.fQ = (Float_t)(hinfo->fCharge*AliTPCTrackHits::fgkTimePrecision);
+  fCurrentHit->fHit.fTime = hinfo->fTime;
    
   fCurrentHit->fR = param->fR;
   
@@ -671,6 +707,7 @@ Bool_t AliTPCTrackHits::Next()
   }
 
   fCurrentHit->fHit.fQ = hinfo->fCharge;
+  fCurrentHit->fHit.fTime = (Float_t)(hinfo->fTime*AliTPCTrackHits::fgkTimePrecision);
   fCurrentHit->fR += fStep*hinfo->fHitDistance/ratio;
   Double_t dR = fCurrentHit->fR - param->fR;
   //Double_t dR =0;
@@ -772,6 +809,7 @@ Bool_t AliTPCTrackHits::Next(Int_t id)
   }
 
   fCurrentHit->fHit.fQ = hinfo->fCharge;
+  fCurrentHit->fHit.fTime = (Float_t)(hinfo->fTime*AliTPCTrackHits::fgkTimePrecision);
   fCurrentHit->fR += fStep*hinfo->fHitDistance/ratio;
   Double_t dR = fCurrentHit->fR - param->fR;
   //Double_t dR =0;