]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCTrackHitsV2.cxx
Add support for 64 bits
[u/mrichter/AliRoot.git] / TPC / AliTPCTrackHitsV2.cxx
index db1663db6cea56b60dd771aa244d2ded44dd1b36..1c832c059ceb9ccb0df4ed4df0dd655c588445ff 100644 (file)
@@ -13,9 +13,8 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-*/
+/* $Id$ */
+
 ///////////////////////////////////////////////////////////////////////////////
 //                                                                           //
 //  Time Projection Chamber  track hits object                                //
@@ -59,7 +58,7 @@ $Log$
 #include "TClonesArray.h"    
 #include "AliTPC.h"
 
-#include <iostream.h>
+#include <Riostream.h>
 
 
 
@@ -79,15 +78,6 @@ const Double_t AliTPCTrackHitsV2::fgkPrecision2=1e-20;  //precision
 
 
 
-struct AliTPCCurrentHitV2 {
-  AliTPChit fHit;
-  UInt_t   fParamIndex;//  - current param pointer
-  UInt_t   fStackIndex; // - current hit stack index
-  Double_t fR;   //current Radius
-  Bool_t  fStatus; //current status    
-};   
-
-
 struct  AliTPCTempHitInfoV2 {
   enum    { fkStackSize = 10000};
   AliTPCTempHitInfoV2();   
@@ -315,6 +305,7 @@ AliTPCTrackHitsV2::AliTPCTrackHitsV2()
   fCurrentHit = new AliTPCCurrentHitV2;
   fVolumes =0;
   fNVolumes =0;
+  fHit =0;
   fgCounter1++;
   fgCounter2++;
 
@@ -338,6 +329,10 @@ AliTPCTrackHitsV2::~AliTPCTrackHitsV2()
     fVolumes =0;
     fNVolumes=0;
   }
+  if (fHit){
+    delete fHit;
+    fHit=0;
+  }
   fgCounter1--;
 }
 
@@ -345,6 +340,7 @@ void AliTPCTrackHitsV2::Clear()
 {
   //
   //clear object  
+  fSize = 0;
   if (fArray){
     for (Int_t i=0;i<fArray->GetEntriesFast();i++){
       AliTrackHitsParamV2 * par = (AliTrackHitsParamV2 *)fArray->UncheckedAt(i);
@@ -354,6 +350,8 @@ void AliTPCTrackHitsV2::Clear()
   }
   if (fTempInfo){
     delete fTempInfo; 
+    delete fHit;
+    fHit =0;
     fTempInfo =0;
   } 
   if (fVolumes){
@@ -427,7 +425,12 @@ void AliTPCTrackHitsV2::AddHit(Int_t volumeID, Int_t trackID,
     ddz2*=ddz2;
     ratio = TMath::Sqrt(1.+ dfi2+ ddz2);  
   }
-  dl = fStep * Short_t(TMath::Nint(drhit*ratio/fStep));
+  //
+  //  dl = fStep * Short_t(TMath::Nint(drhit*ratio/fStep));   // MI change - range check
+  dl = drhit*ratio/fStep;
+  if (TMath::Abs(dl)>32765) dl =0;
+  dl = fStep * Short_t(TMath::Nint(dl));
+  //
   ddl = dl - drhit*ratio; 
   fTempInfo->fOldR += dl/ratio; 
 
@@ -501,7 +504,11 @@ Bool_t AliTPCTrackHitsV2::FlushHitStack(Bool_t force)
       ratio = TMath::Sqrt(1.+ dfi2+ ddz2);  
     }
 
-    Double_t dl = fStep*(Short_t)TMath::Nint(dr*ratio/fStep);  
+    //    Double_t dl = fStep*(Short_t)TMath::Nint(dr*ratio/fStep);   //MI change 
+    Double_t dl = dr*ratio/fStep;
+    if (TMath::Abs(dl)>32765) dl =0;
+    dl = fStep * Short_t(TMath::Nint(dl));
+
     dr = dl/ratio; 
     oldr+=dr;
     //calculate precission
@@ -592,7 +599,7 @@ void AliTPCTrackHitsV2::AddVolume(Int_t volume)
   //
   //add volumes to tthe list of volumes
   Int_t * volumes = new Int_t[fNVolumes+1];
-  if (fVolumes) memcpy(volumes,fVolumes,(fNVolumes+1)*sizeof(Int_t));
+  if (fVolumes) memcpy(volumes,fVolumes,(fNVolumes)*sizeof(Int_t));
   volumes[fNVolumes]=volume;
   fNVolumes++;
   if (fVolumes) delete []fVolumes;
@@ -608,7 +615,14 @@ Bool_t AliTPCTrackHitsV2::First()
   //
   //set Current hit for the first hit
   //
+
+  if (fArray->GetSize()<=0) {
+    fCurrentHit->fStatus = kFALSE;
+    return kFALSE;
+  }
+
   AliTrackHitsParamV2 *param = (AliTrackHitsParamV2 *)fArray->At(0);
+  if (!fHit) fHit = new AliTPChit;
   if (!(param) ) {
     fCurrentHit->fStatus = kFALSE;
     return kFALSE;
@@ -617,12 +631,21 @@ Bool_t AliTPCTrackHitsV2::First()
   fCurrentHit->fParamIndex = 0;
   fCurrentHit->fStackIndex = 0;
   //
-  fCurrentHit->fHit.fSector = param->fVolumeID;
-  fCurrentHit->fHit.SetTrack(param->fTrackID);
-  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 = param->fCharge[0];   
+  //
+  ((AliTPChit*)fHit)->fSector = param->fVolumeID;
+  ((AliTPChit*)fHit)->SetTrack(param->fTrackID);
+  ((AliTPChit*)fHit)->SetX(param->fR*TMath::Cos(param->fFi));
+  ((AliTPChit*)fHit)->SetY(param->fR*TMath::Sin(param->fFi));
+  ((AliTPChit*)fHit)->SetZ(param->fZ); 
+  ((AliTPChit*)fHit)->fQ = param->fCharge[0];     
+  /*
+    fCurrentHit->fHit.fSector = param->fVolumeID;
+    fCurrentHit->fHit.SetTrack(param->fTrackID);
+    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 = param->fCharge[0];   
+  */
   fCurrentHit->fR = param->fR;
   
   return fCurrentHit->fStatus = kTRUE;
@@ -667,20 +690,28 @@ Bool_t AliTPCTrackHitsV2::Next()
   Double_t dR = fCurrentHit->fR - param->fR;
   Double_t fi = param->fFi + (param->fAn*dR+param->fAd*dR*dR);
   Double_t z  = param->fZ + (param->fTheta*dR+param->fThetaD*dR*dR);
-
+  /*
   fCurrentHit->fHit.fQ = param->fCharge[fCurrentHit->fStackIndex];  
   fCurrentHit->fHit.SetX(fCurrentHit->fR*TMath::Cos(fi));
   fCurrentHit->fHit.SetY(fCurrentHit->fR*TMath::Sin(fi));
   fCurrentHit->fHit.SetZ(z);   
   fCurrentHit->fHit.fSector = param->fVolumeID;
   fCurrentHit->fHit.SetTrack(param->fTrackID);
+  */
+  ((AliTPChit*)fHit)->fQ = param->fCharge[fCurrentHit->fStackIndex];  
+  ((AliTPChit*)fHit)->SetX(fCurrentHit->fR*TMath::Cos(fi));
+  ((AliTPChit*)fHit)->SetY(fCurrentHit->fR*TMath::Sin(fi));
+  ((AliTPChit*)fHit)->SetZ(z);   
+  ((AliTPChit*)fHit)->fSector = param->fVolumeID;
+  ((AliTPChit*)fHit)->SetTrack(param->fTrackID);
+
   return kTRUE;
 }
   
-AliTPChit * AliTPCTrackHitsV2::GetHit()
+AliHit * AliTPCTrackHitsV2::GetHit()
 {
   //
-   return (fCurrentHit->fStatus)? &fCurrentHit->fHit:0;
+   return (fCurrentHit->fStatus)? fHit:0;
   //return &fCurrentHit->fHit;
 
 }