]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDrecPoint.cxx
Particle history saved
[u/mrichter/AliRoot.git] / TRD / AliTRDrecPoint.cxx
index 58173cf07a6e426a9e6b67d89c47c412ee86a5fb..c5353e5fc7c38d6c01faadaee406e1310a41a29b 100644 (file)
@@ -13,9 +13,7 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-*/
+/* $Id$ */
 
 ///////////////////////////////////////////////////////////////////////////////
 //                                                                           //
@@ -23,9 +21,10 @@ $Log$
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
+#include "AliRun.h"
+
 #include "AliTRDgeometry.h"
 #include "AliTRDrecPoint.h"
-#include "AliTRD.h"
 
 ClassImp(AliTRDrecPoint)
 
@@ -38,14 +37,29 @@ AliTRDrecPoint::AliTRDrecPoint():AliRecPoint()
 
   fDetector = 0;
 
-  AliTRD *TRD;
-  if ((gAlice) &&
-      (TRD = ((AliTRD*) gAlice->GetDetector("TRD")))) {
-    fGeom = TRD->GetGeometry();
-  }
-  else {
-    fGeom = NULL;
-  }
+  fGeom = AliTRDgeometry::GetGeometry();
+
+}
+
+//_____________________________________________________________________________
+AliTRDrecPoint::AliTRDrecPoint(const char * opt):AliRecPoint(opt)
+{
+  //
+  // Standard constructor
+  //
+
+  fDetector = 0;
+
+  fGeom = AliTRDgeometry::GetGeometry();
+
+}
+
+//_____________________________________________________________________________
+AliTRDrecPoint::~AliTRDrecPoint()
+{
+  //
+  // AliTRDrecPoint destructor
+  //
 
 }
 
@@ -66,7 +80,8 @@ void AliTRDrecPoint::AddDigit(Int_t digit)
 
   // Increase the size of the list if necessary
   if (fMulDigit >= fMaxDigit) { 
-    int *tempo = new (int[fMaxDigit*=2]); 
+    fMaxDigit *= 2;
+    int *tempo = new int[fMaxDigit]; 
     Int_t index; 
     for (index = 0; index < fMulDigit; index++)
       tempo[index] = fDigitsList[index]; 
@@ -79,7 +94,7 @@ void AliTRDrecPoint::AddDigit(Int_t digit)
 }
 
 //_____________________________________________________________________________
-void AliTRDrecPoint::SetLocalPosition(TVector3 &pos)
+void AliTRDrecPoint::SetLocalPosition(TVector3 & /*pos*/)
 {
   //
   // Sets the position of the point in the local coordinate system
@@ -87,19 +102,141 @@ void AliTRDrecPoint::SetLocalPosition(TVector3 &pos)
   // system.
   //
 
-  const Float_t sq12 = 3.464101615;
+  //const Float_t kSq12 = 3.464101615;
 
   // Set the position
-  fLocPos = pos;
+  //fLocPos = pos;
 
   // Set the error matrix
   // row:  pad-size / sqrt(12)
   // col:  not defined yet
   // time: bin-size / sqrt(12)
-  fLocPosM->operator()(0,0) = ((AliTRDgeometry *) fGeom)->GetRowPadSize()  
-                            / sq12;
-  fLocPosM->operator()(1,1) = 0.0;
-  fLocPosM->operator()(2,2) = ((AliTRDgeometry *) fGeom)->GetTimeBinSize() 
-                            / sq12;
+  //Int_t plane   = ((AliTRDgeometry *) fGeom)->GetPlane(fDetector);
+  //Int_t chamber = ((AliTRDgeometry *) fGeom)->GetChamber(fDetector);
+  //Int_t sector  = ((AliTRDgeometry *) fGeom)->GetSector(fDetector);
+  //fLocPosM->operator()(0,0) = ((AliTRDgeometry *) fGeom)->GetRowPadSize(plane
+  //                                                                     ,chamber
+  //                                                                     ,sector) 
+  //                          / kSq12;
+  //fLocPosM->operator()(1,1) = 0.0;
+  //fLocPosM->operator()(2,2) = ((AliTRDgeometry *) fGeom)->GetTimeBinSize() 
+  //                          / kSq12;
+
+  //  printf("rec. point: row = %f, col = %f, time = %f \n",
+  //           fLocPos[0],fLocPos[1],fLocPos[2]); 
 
 }
+
+//_____________________________________________________________________________
+void AliTRDrecPoint::SetTrackingYZ(Float_t /*sigmaY*/, Float_t /*sigmaZ*/)
+{
+ //
+ // Sets the position of the point in the local coordinate system
+ // of tracking sector
+ //
+
+  //Int_t plane = ((AliTRDgeometry *) fGeom)->GetPlane(fDetector);
+  //Int_t chamber = ((AliTRDgeometry *) fGeom)->GetChamber(fDetector);
+  //Int_t sector = ((AliTRDgeometry *) fGeom)->GetSector(fDetector);
+
+
+ // Set the position
+
+  //Float_t   padRow    = fLocPos[0];             // Pad Row position
+  //Float_t   padCol    = fLocPos[1];             // Pad Column position
+
+  //Float_t   col0 = ((AliTRDgeometry *) fGeom)->GetCol0(plane);
+  //Float_t   row0 = ((AliTRDgeometry *) fGeom)->GetRow0(plane,chamber,sector);
+
+  //  Float_t   offset = 0.5 * ((AliTRDgeometry *) fGeom)->GetChamberWidth(plane);
+
+  //fY = - (col0 + padCol * ((AliTRDgeometry *) fGeom)->GetColPadSize(plane));
+  //fZ =    row0 + padRow * ((AliTRDgeometry *) fGeom)->GetRowPadSize(plane
+  //                                                                   ,chamber
+  //                                                                 ,sector);
+
+  //  fSigmaY = sigmaY * sigmaY;
+  //  fSigmaZ = sigmaZ * sigmaZ;
+
+//fSigmaY2 = 0.05 * 0.05;
+
+//fSigmaZ2 = ((AliTRDgeometry *) fGeom)->GetRowPadSize(plane,chamber,sector)
+//         * ((AliTRDgeometry *) fGeom)->GetRowPadSize(plane,chamber,sector) 
+//         / 12.;
+
+}                                    
+
+//_____________________________________________________________________________
+void AliTRDrecPoint::AddTrackIndex(Int_t *track)
+{
+ // Adds track index. Currently assumed that track is an array of
+ // size 9, and up to 3 track indexes are stored in fTracks[3].
+ // Indexes are sorted according to:
+ //  1) index of max number of appearances is stored first
+ //  2) if two or more indexes appear equal number of times, the lowest
+ //     ones are stored first;
+
+  const Int_t kSize = 9;
+
+  Int_t entries[kSize][2], i, j, index;
+
+  Bool_t indexAdded;
+
+  for (i=0; i<kSize; i++) {
+    entries[i][0]=-1;
+    entries[i][1]=0;
+  }
+
+
+  for (Int_t k=0; k<kSize; k++) {
+    index=track[k];
+    indexAdded=kFALSE; j=0;
+    if (index >= 0) {
+      while ( (!indexAdded) && ( j < kSize ) ) {
+        if ((entries[j][0]==index) || (entries[j][1]==0)) {
+          entries[j][0]=index;
+          entries[j][1]=entries[j][1]+1;
+          indexAdded=kTRUE;
+        }
+        j++;
+      }
+    }
+  }                   
+
+  // sort by number of appearances and index value
+  Int_t swap=1, tmp0, tmp1;
+  while ( swap > 0) {
+    swap=0;
+    for(i=0; i<(kSize-1); i++) {
+      if ((entries[i][0] >= 0) && (entries[i+1][0] >= 0)) {
+        if ((entries[i][1] < entries[i+1][1]) ||
+            ((entries[i][1] == entries[i+1][1]) &&
+             (entries[i][0] > entries[i+1][0]))) {
+               tmp0=entries[i][0];
+               tmp1=entries[i][1];
+               entries[i][0]=entries[i+1][0];
+               entries[i][1]=entries[i+1][1];
+               entries[i+1][0]=tmp0;
+               entries[i+1][1]=tmp1;
+               swap++;
+        }
+      }
+    }
+  }
+
+  // set track indexes
+
+  for(i=0; i<3; i++) {
+    fTracks[i] = entries[i][0];
+  }
+
+  return;
+
+}                    
+
+
+
+
+
+
+