* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-$Log$
-Revision 1.1 2000/02/28 19:02:07 cblume
-Add new TRD classes
-
-*/
+/* $Id$ */
///////////////////////////////////////////////////////////////////////////////
// //
// //
///////////////////////////////////////////////////////////////////////////////
+#include "AliRun.h"
+
#include "AliTRDgeometry.h"
#include "AliTRDrecPoint.h"
-#include "AliTRD.h"
ClassImp(AliTRDrecPoint)
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();
}
// 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];
}
//_____________________________________________________________________________
-void AliTRDrecPoint::SetLocalPosition(TVector3 &pos)
+void AliTRDrecPoint::SetLocalPosition(TVector3 & /*pos*/)
{
//
// Sets the position of the point in the local coordinate system
// system.
//
- const Float_t kSq12 = 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()
- / kSq12;
- fLocPosM->operator()(1,1) = 0.0;
- fLocPosM->operator()(2,2) = ((AliTRDgeometry *) fGeom)->GetTimeBinSize()
- / kSq12;
+ //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;
+
+}
+
+
+
+
+
+
+