]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCTrackHits.cxx
Accounted for the AliMagWrapCheb <-> AliMagFCheb class names swap in the
[u/mrichter/AliRoot.git] / TPC / AliTPCTrackHits.cxx
index 59075ecf98ee88a706961c8c488139ca40bd2207..6729f34a2504303afba5bdf75410b4a027f270ac 100644 (file)
 //                                                                          //
 ///////////////////////////////////////////////////////////////////////////////
 
-//#include "TVector3.h"
-//#include "TClonesArray.h"    
-#include "AliTPCTrackHits.h"
-#include "AliTPC.h"
-
-//#include <Riostream.h>
-
+#include <TError.h>
 
+#include "AliTPC.h"
+#include "AliTPCTrackHits.h"
+//           Interface classes
+#include "AliTPCTrackHitsInterfaces.h"
 
 ClassImp(AliTPCTrackHits) 
 LClassImp(AliTrackHitsInfo) 
@@ -58,17 +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 
 
 
-/************************************************************/
-//           Interface classes                              // 
-#include "AliTPCTrackHitsInterfaces.h"
-
-
-
-
-struct AliTPCCurrentHit {
-  friend class AliTPCTrackHits;
+class AliTPCCurrentHit {
 private:
   AliTPChit fHit;     //   - hit in "standard" representation
   UInt_t   fInfoIndex;//   - current info pointer 
@@ -79,18 +70,17 @@ private:
 };   
 
 
-struct  AliTPCTempHitInfo {
-  friend class AliTPCTrackHits;
+class  AliTPCTempHitInfo {
 private:
   enum    { kStackSize = 100};
   AliTPCTempHitInfo(); 
-  AliTPCTempHitInfo(const AliTPCTempHitInfo &t){
-  }
-  AliTPCTempHitInfo   & operator=(const AliTPCTempHitInfo& r){
-    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);
+  AliTPCTempHitInfo(const AliTPCTempHitInfo &)
+    {::Fatal("copy ctor","Not implemented\n");}
+  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, 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,
@@ -111,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
@@ -132,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
@@ -149,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
@@ -162,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;
@@ -269,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()
@@ -335,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;
@@ -368,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;
   }
   
@@ -379,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;
   }
   
@@ -406,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;
   }
      
@@ -451,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 
@@ -461,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);              
   }
 }   
 
@@ -542,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";
@@ -565,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);      
@@ -582,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;
 }
 
 
@@ -625,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;
   
@@ -682,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;
@@ -783,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;