]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDrecPoint.cxx
Put vacuum in beam-pipe not air.
[u/mrichter/AliRoot.git] / TRD / AliTRDrecPoint.cxx
index 9633603e8d16eae75b9ddb656ac70d782583e49e..d46fa75023a6ad7ef423c92b58435f811e35269f 100644 (file)
 
 /*
 $Log$
+Revision 1.5  2000/11/14 14:40:27  cblume
+Correction for the Sun compiler (kTRUE and kFALSE)
+
+Revision 1.4  2000/11/01 14:53:21  cblume
+Merge with TRD-develop
+
+Revision 1.1.4.2  2000/10/04 16:34:58  cblume
+Replace include files by forward declarations
+
+Revision 1.1.4.1  2000/09/22 14:50:39  cblume
+Adapted to tracking code
+
+Revision 1.3  2000/06/09 11:10:07  cblume
+Compiler warnings and coding conventions, next round
+
+Revision 1.2  2000/06/08 18:32:58  cblume
+Make code compliant to coding conventions
+
 Revision 1.1  2000/02/28 19:02:07  cblume
 Add new TRD classes
 
@@ -26,6 +44,8 @@ Add new TRD classes
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
+#include "AliRun.h"
+
 #include "AliTRDgeometry.h"
 #include "AliTRDrecPoint.h"
 #include "AliTRD.h"
@@ -78,7 +98,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]; 
@@ -108,10 +129,125 @@ void AliTRDrecPoint::SetLocalPosition(TVector3 &pos)
   // row:  pad-size / sqrt(12)
   // col:  not defined yet
   // time: bin-size / sqrt(12)
-  fLocPosM->operator()(0,0) = ((AliTRDgeometry *) fGeom)->GetRowPadSize()  
+  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 size = 9;
+
+  Int_t entries[size][2], i, j, index;
+
+  Bool_t index_added;
+
+  for (i=0; i<size; i++) {
+    entries[i][0]=-1;
+    entries[i][1]=0;
+  }
+
+
+  for (Int_t k=0; k<size; k++) {
+    index=track[k];
+    index_added=kFALSE; j=0;
+    if (index >= 0) {
+      while ( (!index_added) && ( j < size ) ) {
+        if ((entries[j][0]==index) || (entries[j][1]==0)) {
+          entries[j][0]=index;
+          entries[j][1]=entries[j][1]+1;
+          index_added=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<(size-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;
+
+}