Bug#56095: Adding cluster type to the ITS space-points (Francesco)
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 30 Sep 2009 15:39:22 +0000 (15:39 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 30 Sep 2009 15:39:22 +0000 (15:39 +0000)
ITS/AliITSRecPoint.cxx
ITS/AliITSRecPoint.h
ITS/AliITStrackerMI.cxx
STEER/AliTrackPointArray.cxx
STEER/AliTrackPointArray.h

index ebd7b75..2222de9 100644 (file)
@@ -192,7 +192,9 @@ Int_t AliITSRecPoint::GetNpixels() const {
 //----------------------------------------------------------------------
 Int_t AliITSRecPoint::GetSPDclusterType() const {
 //
-// returns the type of cluster according to conventional numbering
+// returns an Int_t with encoded information on cluster size
+//    type <= 16: cluster type identifier according to conventional numbering
+//    type >  16: Npixels+1000*Ny+1000000*Nz
 //
 
  Int_t type = -1;
@@ -212,23 +214,44 @@ Int_t AliITSRecPoint::GetSPDclusterType() const {
               else if(fNz == 2 && fNy == 2) type = 8;
               else if(fNy == 2 && fNz == 3) type = 11;
               else if(fNy == 3 && fNz == 2) type = 9;
-              else if(fNz == 4)             type = 15;
-              else                          type = 17;
+              else                          type = 15;
               break;
      case 5 : if(fNy == 3 && fNz == 2)  type = 10;
               if(fNy == 2 && fNz == 3 ) type = 12;
               if(fNy == 5)              type = 16;
-              else                      type = 17;
+              else                      type = fType+1000*fNy+1000000*fNz;
               break; 
      case 6 : if(fNy ==3 && fNz == 2) type = 13;
               if(fNy ==2 && fNz == 3) type = 14;
-              else type = 17;
+              else                    type = fType+1000*fNy+1000000*fNz;
+              break; 
+     default: type = fType+1000*fNy+1000000*fNz;
+              break; 
    }  
 
    return type;
  }
+}
+
+//----------------------------------------------------------------------
+Int_t AliITSRecPoint::GetSDDclusterType() const {
+// returns an Int_t with encoded information on cluster size
+// Byte1 = fNz Byte0=fNy, other two bytes empty for extra information
+// max. allowed cluster size = 255
+  Int_t typ=(fNz&0xFF)<<8;
+  typ+=fNy&0xFF;
+  return typ;
+}
 
-       }
+//----------------------------------------------------------------------
+Int_t AliITSRecPoint::GetSSDclusterType() const {
+// returns an Int_t with encoded information on cluster size
+// Byte1 = fNz Byte0=fNy, other two bytes empty for extra information
+// max. allowed cluster size = 255
+  Int_t typ=(fNz&0xFF)<<8;
+  typ+=fNy&0xFF;
+  return typ;
+}
 
 //----------------------------------------------------------------------
 void AliITSRecPoint::Read(istream *is){
index af38976..7d354fa 100644 (file)
@@ -75,7 +75,14 @@ class AliITSRecPoint : public AliCluster {
   Float_t GetDriftTime() const{return  fDriftTime;}
   Int_t GetNpixels() const; // for SPD returns fType, i.e. the number of pixels in the cluster (-1 for SDD and SSD)
   Int_t GetSPDclusterType() const; // for SPD returns cluster type according to conventional numbering (-1 for SDD and SSD)
+  Int_t GetSDDclusterType() const; 
+  Int_t GetSSDclusterType() const; 
 
+  Int_t GetClusterType() const {
+    if(fLayer<=1) return GetSPDclusterType();
+    if(fLayer==2 || fLayer==3) return GetSDDclusterType();
+    if(fLayer==4 || fLayer==5) return GetSSDclusterType();
+  }
  protected:
 
   Float_t   fXloc ;        //X of cluster (local coordinates)
index d6d1f72..11a1499 100644 (file)
@@ -802,6 +802,7 @@ Bool_t AliITStrackerMI::GetTrackPoint(Int_t index, AliTrackPoint& p) const {
   p.SetCharge(cl->GetQ());
   p.SetDriftTime(cl->GetDriftTime());
   p.SetChargeRatio(cl->GetChargeRatio());
+  p.SetClusterType(cl->GetClusterType());
   AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer; 
   switch (l) {
   case 0:
@@ -874,6 +875,7 @@ Bool_t AliITStrackerMI::GetTrackPointTrackingError(Int_t index,
   p.SetCharge(cl->GetQ());
   p.SetDriftTime(cl->GetDriftTime());
   p.SetChargeRatio(cl->GetChargeRatio());
+  p.SetClusterType(cl->GetClusterType());
 
   AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer; 
   switch (l) {
index 2b01032..5572817 100644 (file)
@@ -43,6 +43,7 @@ AliTrackPointArray::AliTrackPointArray() :
   fCharge(0),
   fDriftTime(0),
   fChargeRatio(0),
+  fClusterType(0),
   fIsExtra(0),
   fSize(0),
   fCov(0),
@@ -61,6 +62,7 @@ AliTrackPointArray::AliTrackPointArray(Int_t npoints):
   fCharge(new Float_t[npoints]),
   fDriftTime(new Float_t[npoints]),
   fChargeRatio(new Float_t[npoints]),
+  fClusterType(new Int_t[npoints]),
   fIsExtra(new Bool_t[npoints]),
   fSize(6*npoints),
   fCov(new Float_t[fSize]),
@@ -75,6 +77,7 @@ AliTrackPointArray::AliTrackPointArray(Int_t npoints):
     fCharge[ip]=0;
     fDriftTime[ip]=0;
     fChargeRatio[ip]=0;
+    fClusterType[ip]=0;
     fIsExtra[ip]=kFALSE;
     fVolumeID[ip]=0;
     for (Int_t icov=0;icov<6; icov++)
@@ -93,6 +96,7 @@ AliTrackPointArray::AliTrackPointArray(const AliTrackPointArray &array):
   fCharge(new Float_t[fNPoints]),
   fDriftTime(new Float_t[fNPoints]),
   fChargeRatio(new Float_t[fNPoints]),
+  fClusterType(new Int_t[fNPoints]),
   fIsExtra(new Bool_t[fNPoints]),
   fSize(array.fSize),
   fCov(new Float_t[fSize]),
@@ -118,6 +122,11 @@ AliTrackPointArray::AliTrackPointArray(const AliTrackPointArray &array):
   } else {
     memset(fChargeRatio, 0, fNPoints*sizeof(Float_t));
   }
+  if (array.fClusterType) {
+    memcpy(fClusterType,array.fClusterType,fNPoints*sizeof(Int_t));
+  } else {
+    memset(fClusterType, 0, fNPoints*sizeof(Int_t));
+  }
   if (array.fIsExtra) {
     memcpy(fIsExtra,array.fIsExtra,fNPoints*sizeof(Bool_t));
   } else {
@@ -150,6 +159,8 @@ AliTrackPointArray &AliTrackPointArray::operator =(const AliTrackPointArray& arr
   fDriftTime = new Float_t[fNPoints];
   delete [] fChargeRatio;
   fChargeRatio = new Float_t[fNPoints];
+  delete [] fClusterType;
+  fClusterType = new Int_t[fNPoints];
   delete [] fIsExtra;
   fIsExtra = new Bool_t[fNPoints];
   delete [] fVolumeID;
@@ -162,6 +173,7 @@ AliTrackPointArray &AliTrackPointArray::operator =(const AliTrackPointArray& arr
   memcpy(fCharge,array.fCharge,fNPoints*sizeof(Float_t));
   memcpy(fDriftTime,array.fDriftTime,fNPoints*sizeof(Float_t));
   memcpy(fChargeRatio,array.fChargeRatio,fNPoints*sizeof(Float_t));
+  memcpy(fClusterType,array.fClusterType,fNPoints*sizeof(Int_t));
   memcpy(fIsExtra,array.fIsExtra,fNPoints*sizeof(Bool_t));
   memcpy(fVolumeID,array.fVolumeID,fNPoints*sizeof(UShort_t));
   memcpy(fCov,array.fCov,fSize*sizeof(Float_t));
@@ -180,6 +192,7 @@ AliTrackPointArray::~AliTrackPointArray()
   delete [] fCharge;
   delete [] fDriftTime;
   delete [] fChargeRatio;
+  delete [] fClusterType;
   delete [] fIsExtra;
   delete [] fVolumeID;
   delete [] fCov;
@@ -198,6 +211,7 @@ Bool_t AliTrackPointArray::AddPoint(Int_t i, const AliTrackPoint *p)
   fCharge[i] = p->GetCharge();
   fDriftTime[i] = p->GetDriftTime();
   fChargeRatio[i]=p->GetChargeRatio();
+  fClusterType[i]=p->GetClusterType();
   fIsExtra[i] = p->IsExtra();
   fVolumeID[i] = p->GetVolumeID();
   memcpy(&fCov[6*i],p->GetCov(),6*sizeof(Float_t));
@@ -216,6 +230,7 @@ Bool_t AliTrackPointArray::GetPoint(AliTrackPoint &p, Int_t i) const
   p.SetCharge(fCharge ? fCharge[i] : 0);
   p.SetDriftTime(fDriftTime ? fDriftTime[i] : 0);
   p.SetChargeRatio(fChargeRatio ? fChargeRatio[i] : 0);
+  p.SetClusterType(fClusterType ? fClusterType[i] : 0);
   p.SetExtra(fIsExtra ? fIsExtra[i] : kFALSE);
   return kTRUE;
 }
@@ -267,6 +282,7 @@ AliTrackPoint::AliTrackPoint() :
   fCharge(0),
   fDriftTime(0),
   fChargeRatio(0),
+  fClusterType(0),
   fIsExtra(kFALSE),
   fVolumeID(0)
 {
@@ -277,7 +293,7 @@ AliTrackPoint::AliTrackPoint() :
 
 
 //______________________________________________________________________________
-AliTrackPoint::AliTrackPoint(Float_t x, Float_t y, Float_t z, const Float_t *cov, UShort_t volid, Float_t charge, Float_t drifttime,Float_t chargeratio) :
+AliTrackPoint::AliTrackPoint(Float_t x, Float_t y, Float_t z, const Float_t *cov, UShort_t volid, Float_t charge, Float_t drifttime,Float_t chargeratio, Int_t clutyp) :
   TObject(),
   fX(0),
   fY(0),
@@ -285,6 +301,7 @@ AliTrackPoint::AliTrackPoint(Float_t x, Float_t y, Float_t z, const Float_t *cov
   fCharge(0),
   fDriftTime(0),
   fChargeRatio(0),
+  fClusterType(0),
   fIsExtra(kFALSE),
   fVolumeID(0)
 {
@@ -294,11 +311,12 @@ AliTrackPoint::AliTrackPoint(Float_t x, Float_t y, Float_t z, const Float_t *cov
   SetCharge(charge);
   SetDriftTime(drifttime);
   SetChargeRatio(chargeratio);
+  SetClusterType(clutyp);
   SetVolumeID(volid);
 }
 
 //______________________________________________________________________________
-AliTrackPoint::AliTrackPoint(const Float_t *xyz, const Float_t *cov, UShort_t volid, Float_t charge, Float_t drifttime,Float_t chargeratio) :
+AliTrackPoint::AliTrackPoint(const Float_t *xyz, const Float_t *cov, UShort_t volid, Float_t charge, Float_t drifttime,Float_t chargeratio, Int_t clutyp) :
   TObject(),
   fX(0),
   fY(0),
@@ -306,6 +324,7 @@ AliTrackPoint::AliTrackPoint(const Float_t *xyz, const Float_t *cov, UShort_t vo
   fCharge(0),
   fDriftTime(0),
   fChargeRatio(0),
+  fClusterType(0),
   fIsExtra(kFALSE),
   fVolumeID(0)
 {
@@ -316,6 +335,7 @@ AliTrackPoint::AliTrackPoint(const Float_t *xyz, const Float_t *cov, UShort_t vo
   SetDriftTime(drifttime);
   SetChargeRatio(chargeratio);
   SetVolumeID(volid);
+  SetClusterType(clutyp);
 }
 
 //______________________________________________________________________________
@@ -327,6 +347,7 @@ AliTrackPoint::AliTrackPoint(const AliTrackPoint &p):
   fCharge(0),
   fDriftTime(0),
   fChargeRatio(0),
+  fClusterType(0),
   fIsExtra(kFALSE),
   fVolumeID(0)
 {
@@ -336,6 +357,7 @@ AliTrackPoint::AliTrackPoint(const AliTrackPoint &p):
   SetCharge(p.fCharge);
   SetDriftTime(p.fDriftTime);
   SetChargeRatio(p.fChargeRatio);
+  SetClusterType(p.fClusterType);
   SetExtra(p.fIsExtra);
   SetVolumeID(p.fVolumeID);
 }
@@ -352,6 +374,7 @@ AliTrackPoint &AliTrackPoint::operator =(const AliTrackPoint& p)
   SetCharge(p.fCharge);
   SetDriftTime(p.fDriftTime);
   SetChargeRatio(p.fChargeRatio);
+  SetClusterType(p.fClusterType);
   SetExtra(p.fIsExtra);
   SetVolumeID(p.fVolumeID);
 
@@ -604,6 +627,7 @@ void AliTrackPoint::Print(Option_t *) const
   printf("Charge = %f\n", fCharge);
   printf("Drift Time = %f\n", fDriftTime);
   printf("Charge Ratio  = %f\n", fChargeRatio);
+  printf("Cluster Type  = %d\n", fClusterType);
   if(fIsExtra) printf("This is an extra point\n");
 
 }
index 266f0af..551ffba 100644 (file)
@@ -21,8 +21,8 @@ class AliTrackPoint : public TObject {
 
  public:
   AliTrackPoint();
-  AliTrackPoint(Float_t x, Float_t y, Float_t z, const Float_t *cov, UShort_t volid, Float_t charge = 0, Float_t drifttime = 0,Float_t chargeratio = 0);
-  AliTrackPoint(const Float_t *xyz, const Float_t *cov, UShort_t volid, Float_t charge = 0, Float_t drifttime = 0,Float_t chargeratio = 0);
+  AliTrackPoint(Float_t x, Float_t y, Float_t z, const Float_t *cov, UShort_t volid, Float_t charge = 0, Float_t drifttime = 0,Float_t chargeratio = 0, Int_t clutype = 0);
+  AliTrackPoint(const Float_t *xyz, const Float_t *cov, UShort_t volid, Float_t charge = 0, Float_t drifttime = 0,Float_t chargeratio = 0, Int_t clutype=0);
   AliTrackPoint(const AliTrackPoint &p);
   AliTrackPoint& operator= (const AliTrackPoint& p);
   virtual ~AliTrackPoint() {}
@@ -35,6 +35,7 @@ class AliTrackPoint : public TObject {
   void     SetCharge(Float_t charge) { fCharge = charge; }
   void     SetDriftTime(Float_t time) { fDriftTime = time; }
   void     SetChargeRatio(Float_t ratio) {  fChargeRatio= ratio; }
+  void     SetClusterType(Int_t clutype) {  fClusterType= clutype; }
   void     SetExtra(Bool_t flag=kTRUE) { fIsExtra = flag; }
 
   Float_t  GetX() const { return fX; }
@@ -46,6 +47,7 @@ class AliTrackPoint : public TObject {
   Float_t  GetCharge() const { return fCharge; }
   Float_t  GetDriftTime() const { return fDriftTime;}
   Float_t  GetChargeRatio() const { return fChargeRatio;}
+  Int_t    GetClusterType() const { return fClusterType;}
   Bool_t   IsExtra() const { return fIsExtra;}
 
   Float_t  GetResidual(const AliTrackPoint &p, Bool_t weighted = kFALSE) const;
@@ -68,11 +70,12 @@ class AliTrackPoint : public TObject {
   Float_t  fCharge;   // Cluster charge in arbitrary units
   Float_t  fDriftTime;// Drift time in SDD (in ns)
   Float_t  fChargeRatio; // Charge ratio in SSD 
+  Int_t    fClusterType; // Cluster Type (encoded info on size and shape)
   Float_t  fCov[6];   // Cov matrix
   Bool_t   fIsExtra;  // attached by tracker but not used in fit
   UShort_t fVolumeID; // Volume ID
 
-  ClassDef(AliTrackPoint,6)
+  ClassDef(AliTrackPoint,7)
 };
 
 //////////////////////////////////////////////////////////////////////////////
@@ -107,6 +110,7 @@ class AliTrackPointArray : public TObject {
   const Float_t*  GetCharge() const { return &fCharge[0]; }
   const Float_t*  GetDriftTime() const { return &fDriftTime[0]; }
   const Float_t*  GetChargeRatio() const { return &fChargeRatio[0]; }
+  const Int_t*    GetClusterType() const { return &fClusterType[0]; }
   const Bool_t*   GetExtra() const { return &fIsExtra[0]; }
   const Float_t*  GetCov() const { return &fCov[0]; }
   const UShort_t* GetVolumeID() const { return &fVolumeID[0]; }
@@ -125,12 +129,13 @@ class AliTrackPointArray : public TObject {
   Float_t   *fCharge;    //[fNPoints] Array with clusters charge
   Float_t   *fDriftTime; //[fNPoints] Array with drift times
   Float_t   *fChargeRatio; //[fNPoints] Array with charge ratio
+  Int_t     *fClusterType; //[fNPoints] Array with cluster type
   Bool_t    *fIsExtra;   //[fNPoints] Array with extra flags
   Int_t     fSize;       // Size of array with cov matrices = 6*N of points
   Float_t   *fCov;       //[fSize] Array with space point coordinates cov matrix
   UShort_t  *fVolumeID;  //[fNPoints] Array of space point volume IDs
 
-  ClassDef(AliTrackPointArray,6)
+  ClassDef(AliTrackPointArray,7)
 };
 
 #endif