]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSclusterSSD.cxx
Reduced QA output (Yves)
[u/mrichter/AliRoot.git] / ITS / AliITSclusterSSD.cxx
index 150d3283242cbc61b80bd039f6feeddf5043ef7c..43b2616df7a71fc7dde4c707f1f58874418fef0c 100644 (file)
-#include <iostream.h>
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
 
+/* $Id$ */
+////////////////////////////////////////////////////////////////////////////
+//Piotr Krzysztof Skowronski                                              //
+//Warsaw University of Technology                                         // 
+//skowron@if.pw.edu.pl                                                    //
+//                                                                        // 
+// Describes set of neighbouring digits on one side of detector,          //
+// that are supposed to be generated by one particle.                     //
+// includes information about clusters on other side that it crosses with //
+////////////////////////////////////////////////////////////////////////////
+
+#include <TArrayI.h>
+#include <TMath.h>
+#include <TClonesArray.h>
+
+
+#include "AliITSdigitSSD.h"
 #include "AliITSclusterSSD.h"
 
 ClassImp(AliITSclusterSSD)
 
-AliITSclusterSSD::AliITSclusterSSD()
-{
-  // default constructor
-       fSide        = true;
-       fDigits      = 0;
-       fNDigits     = 0;
-       fDigitsIndex = 0;
-        fNCrosses    = 0;
-       fTotalSignal = -1;
-       fNTrack      = -1;
-       fLeftNeighbour  = kFALSE;
-       fRightNeighbour = kFALSE;
-       fCrossedClusterIndexes = new TArrayI(300);
-       fConsumed=kFALSE;
+//______________________________________________________________________
+AliITSclusterSSD::AliITSclusterSSD():
+fSide(kTRUE),
+fDigits(0),
+fNDigits(0),
+fDigitsIndex(0),
+fNCrosses(0),
+fCrossedClusterIndexes(0),
+fLeftNeighbour(kFALSE),
+fRightNeighbour(kFALSE),
+fConsumed(kFALSE),
+fTotalSignal(-1),
+fNTracks(-1){
+    // default constructor
+}
+//______________________________________________________________________
+AliITSclusterSSD::AliITSclusterSSD(Int_t ndigits, Int_t *DigitIndexes, 
+                                  TObjArray *Digits, Bool_t side):
+fSide(side),
+fDigits(Digits),
+fNDigits(ndigits),
+fDigitsIndex(0),
+fNCrosses(0),
+fCrossedClusterIndexes(0),
+fLeftNeighbour(kFALSE),
+fRightNeighbour(kFALSE),
+fConsumed(kFALSE),
+fTotalSignal(-1),
+fNTracks(-1){
+    // non-default constructor
 
+    fDigitsIndex = new TArrayI(fNDigits,DigitIndexes );        
+    fCrossedClusterIndexes = new TArrayI(300);
 }
-/*************************************************************************/
+//______________________________________________________________________
+AliITSclusterSSD::~AliITSclusterSSD(){
+    // destructor
 
-AliITSclusterSSD::AliITSclusterSSD
-  (Int_t ndigits, Int_t *DigitIndexes, 
-   TObjArray *Digits, Bool_t side)
-{
-  // comment to be written
-       fNDigits = ndigits;
-       fDigits = Digits;
-       fSide = side;
-       fDigitsIndex = new TArrayI(fNDigits,DigitIndexes );     
-       fNCrosses    = 0;
-       fCrossedClusterIndexes = new TArrayI(300);
-       fLeftNeighbour  = kFALSE;
-       fRightNeighbour = kFALSE;
-       fTotalSignal =-1;
-       fNTrack      = -1;
-        fConsumed=kFALSE;
+    delete fDigitsIndex;
+    delete fCrossedClusterIndexes;
 }
-/*************************************************************************/
-AliITSclusterSSD::~AliITSclusterSSD()
-{
-  // destructor
-  delete fDigitsIndex;
-  delete fCrossedClusterIndexes;
+//______________________________________________________________________
+AliITSclusterSSD::AliITSclusterSSD(const AliITSclusterSSD &OneSCluster) : 
+TObject(OneSCluster),
+fSide(OneSCluster.fSide),
+fDigits(OneSCluster.fDigits),
+fNDigits(OneSCluster.fNDigits),
+fDigitsIndex(0),
+fNCrosses(OneSCluster.fNCrosses),
+fCrossedClusterIndexes(0),
+fLeftNeighbour(OneSCluster.fLeftNeighbour),
+fRightNeighbour(OneSCluster.fRightNeighbour),
+fConsumed(OneSCluster.fConsumed),
+fTotalSignal(-1),
+fNTracks(-1){
+    // copy constructor
+
+    fDigitsIndex = new TArrayI(fNDigits);
+    fTotalSignal =-1;
+    fNTracks     = -1;
+    Int_t i;
+    for (i = 0; i< fNCrosses ; i++){
+       fCrossedClusterIndexes[i] = OneSCluster.fCrossedClusterIndexes[i];
+    }
+    for (i = 0; i< fNDigits ; i++){
+       fDigitsIndex[i]=OneSCluster.fDigitsIndex[i];
+    }
+    return;
 }
-/*************************************************************************/
-AliITSclusterSSD::AliITSclusterSSD(const AliITSclusterSSD &OneSCluster)
-{
-  // copy constructor
-  if (this == &OneSCluster) return;
-  fNDigits = OneSCluster.fNDigits;
-  fSide=OneSCluster.fSide;
-  fDigits=OneSCluster.fDigits;
-  fDigitsIndex = new TArrayI(fNDigits);
-  fLeftNeighbour  = OneSCluster.fLeftNeighbour;
-  fRightNeighbour = OneSCluster.fRightNeighbour;
-  fTotalSignal =-1;
-  fNTrack      = -1;
-  fNCrosses = OneSCluster.fNCrosses;
-  fConsumed = OneSCluster.fConsumed;
-  Int_t i;
-  for(i = 0; i< fNCrosses ; i++)
-   {
-     fCrossedClusterIndexes[i] = OneSCluster.fCrossedClusterIndexes[i];
-   }
-  for(i = 0; i< fNDigits ; i++)
-  {
-    fDigitsIndex[i]=OneSCluster.fDigitsIndex[i];
-  }
-  return;
-}      
+//______________________________________________________________________
+AliITSclusterSSD& AliITSclusterSSD::operator=(const AliITSclusterSSD 
+                                             &OneSCluster){
+    // assignment operator
 
-/*************************************************************************/
-AliITSclusterSSD& AliITSclusterSSD::operator=(const AliITSclusterSSD & OneSCluster)
-{
-  // assignment operator
-  if (this == &OneSCluster) return *this;
-  fNDigits = OneSCluster.fNDigits;
-  fSide=OneSCluster.fSide;
-  fDigits=OneSCluster.fDigits;
-  fDigitsIndex = new TArrayI(fNDigits);
-  fLeftNeighbour  = OneSCluster.fLeftNeighbour;
-  fRightNeighbour = OneSCluster.fRightNeighbour;
-  fTotalSignal =-1;
-  fNTrack      = -1;
-  fNCrosses = OneSCluster.fNCrosses;
-  fConsumed = OneSCluster.fConsumed;
-  Int_t i;
-  for(i = 0; i< fNCrosses ; i++)
-   {
-     fCrossedClusterIndexes[i] = OneSCluster.fCrossedClusterIndexes[i];
-   }
-  for(i = 0; i< fNDigits ; i++)
-  {
-    fDigitsIndex[i]=OneSCluster.fDigitsIndex[i];
-  }
-  return *this;
-}      
+    if (this == &OneSCluster) return *this;
+    fNDigits = OneSCluster.fNDigits;
+    fSide=OneSCluster.fSide;
+    fDigits=OneSCluster.fDigits;
+    fDigitsIndex = new TArrayI(fNDigits);
+    fLeftNeighbour  = OneSCluster.fLeftNeighbour;
+    fRightNeighbour = OneSCluster.fRightNeighbour;
+    fTotalSignal =-1;
+    fNTracks     = -1;
+    fNCrosses = OneSCluster.fNCrosses;
+    fConsumed = OneSCluster.fConsumed;
+    Int_t i;
+    for (i = 0; i< fNCrosses ; i++){
+       fCrossedClusterIndexes[i] = OneSCluster.fCrossedClusterIndexes[i];
+    }
+    for (i = 0; i< fNDigits ; i++){
+       fDigitsIndex[i]=OneSCluster.fDigitsIndex[i];
+    }
+    return *this;
+}
+//______________________________________________________________________
+Int_t AliITSclusterSSD::SplitCluster(Int_t where, Int_t *outdigits){
+    //This methods generate data necessery to make new object of this class
+    //I choosen this way, because methods TClonesArray::Add* dont work
+    //so I have to use constraction: new (a[i]) Creator(params...);
+    //where 'a' is a TClonesArray 
+    //This method generate params - see AliITSmoduleSSD::SplitCluster;
+    Int_t tmp = fNDigits;
+    Int_t ind = 0;
 
-/*************************************************************************/
-Int_t AliITSclusterSSD::SplitCluster(Int_t where, Int_t *outdigits)
-{
-//This methods generate data necessery to make new object of this class
-//I choosen this way, because methods TClonesArray::Add* dont work
-//so I have to use constraction: new (a[i]) Creator(params...);
-//where 'a' is a TClonesArray 
-//This method generate params - see AliITSmoduleSSD::SplitCluster;
-               
-       
-  Int_t tmp = fNDigits;
-  Int_t ind = 0;
     outdigits[ind++]=(*fDigitsIndex)[where];
-                     //coping border strip (it is shared by this two clusters)
-    Int_t i;
-    for(i = (where+1); i < tmp; i++)
-     {
-       outdigits[ind++]=(*fDigitsIndex)[i];  //"moving" strips from this to the new one 
-       (*fDigitsIndex)[i]=-1;   
-       fNDigits--;   //deleting strips from this cluster
-     } 
-  return ind;          
+    //coping border strip (it is shared by this two clusters)
+    for (Int_t i = (where+1); i < tmp; i++) {
+       outdigits[ind++]=(*fDigitsIndex)[i];  
+       //"moving" strips from this to the new one 
+       (*fDigitsIndex)[i]=-1;   
+       fNDigits--;   //deleting strips from this cluster
+    } 
+    return ind;                
 }
-               
-/*******************************************************************/
-Int_t AliITSclusterSSD::GetDigitStripNo(Int_t digit)
-{
-  // comment to be written
-       if (digit<0) return -1;
-       return (digit>(fNDigits-1))?-1 :
-            ((AliITSdigitSSD*)((*fDigits)[(*fDigitsIndex)[digit]]))->GetStripNumber();
+//______________________________________________________________________
+Int_t AliITSclusterSSD::GetDigitStripNo(Int_t digit){
+    // return strip no of a digit
+    if (digit<0) return -1;
+    return (digit>(fNDigits-1)) ? -1 :
+       ((AliITSdigitSSD*)(fDigits->At((*fDigitsIndex)[digit])))->GetStripNumber();
 }
-/************************************************************/
-Int_t AliITSclusterSSD::GetDigitSignal(Int_t digit)
-{
-  Int_t index,signal;
-  // returns digit signal
-  if (digit<0||digit>=fNDigits) return -1;
-  index  = (*fDigitsIndex)[digit];
-  signal = ((AliITSdigitSSD*)((*fDigits)[index]))->GetSignal();
-  /*
-  if(signal>1.e5) printf("GetDigitSignal: digit %d index %d signal %d\n",
-                        digit,index, signal);
-  */
-  return  signal;
+//______________________________________________________________________
+Int_t AliITSclusterSSD::GetDigitSignal(Int_t digit){
+    // returns digit signal
+    Int_t index,signal;
+    if (digit<0||digit>=fNDigits) return -1;
+    index  = (*fDigitsIndex)[digit];
+    signal = ((AliITSdigitSSD*)(fDigits->At(index)))->GetSignal();
+    /*
+      if(signal>1.e5) printf("GetDigitSignal: digit %d index %d signal %d\n",
+      digit,index, signal);
+    */
+    return  signal;
 }
-
-/***********************************************************/
-void  AliITSclusterSSD::AddCross(Int_t clIndex)
-{
-  // comment to be written
-       (*fCrossedClusterIndexes)[fNCrosses++] = clIndex;
+//______________________________________________________________________
+void  AliITSclusterSSD::AddCross(Int_t clIndex){
+    // add cluster cross to list of cluster crosses
+  
+    (*fCrossedClusterIndexes)[fNCrosses++] = clIndex;
 }
-/***********************************************************/
+//______________________________________________________________________
+Int_t AliITSclusterSSD::GetCross(Int_t crIndex) const {
+    // return crossing cluster
 
-Int_t AliITSclusterSSD::GetCross(Int_t crIndex)
-{
-  // comment to be written
-  return ((crIndex>-1)&&(crIndex<fNCrosses))?(*fCrossedClusterIndexes)[crIndex]:-1;
+    return ((crIndex>-1)&&(crIndex<fNCrosses))?(*fCrossedClusterIndexes)[crIndex]:-1;
 }
-/***********************************************************/
-Double_t AliITSclusterSSD::CentrOfGravity()
-{
-  // comment to be written
-  Float_t ret=0;
+//______________________________________________________________________
+Double_t AliITSclusterSSD::CentrOfGravity(){
+    // return center of gravity of the cluster
+    Float_t ret=0;
   
-  if (fLeftNeighbour) ret+=(GetDigitStripNo(0)*0.5*GetDigitSignal(0));
-      else ret+=(GetDigitStripNo(0)*GetDigitSignal(0));
+    if (fLeftNeighbour) ret+=(GetDigitStripNo(0)*0.5*GetDigitSignal(0));
+    else ret+=(GetDigitStripNo(0)*GetDigitSignal(0));
+    if (fRightNeighbour) ret+=(GetDigitStripNo(fNDigits -1)*0.5*GetDigitSignal(fNDigits -1));
+    else ret+=(GetDigitStripNo(fNDigits -1)*GetDigitSignal(fNDigits-1));
+    for (Int_t i=1;i<fNDigits-1;i++){
+       ret +=GetDigitStripNo(i)*GetDigitSignal(i);
+    }// end for i
   
-  if (fRightNeighbour) ret+=(GetDigitStripNo(fNDigits -1)*0.5*GetDigitSignal(fNDigits -1));
-      else ret+=(GetDigitStripNo(fNDigits -1)*GetDigitSignal(fNDigits-1));
-  Int_t i;
-  for(i=1;i<fNDigits-1;i++)
-    {
-      ret +=GetDigitStripNo(i)*GetDigitSignal(i);
-    }
-  
-  if (fTotalSignal<0) GetTotalSignal();
+    if (fTotalSignal<0) GetTotalSignal();
        
     return (ret/fTotalSignal);
 }
-
-/***********************************************************/
-Float_t AliITSclusterSSD::GetTotalSignal()
-{
-  // comment to be written
-  if(fTotalSignal <0)
-    {
-      fTotalSignal=0;
-      if (fNDigits ==1)  {
-          fTotalSignal = (Float_t)GetDigitSignal(0);
-         //printf("1 digit: signal %d \n",GetDigitSignal(0)); 
-         return fTotalSignal;
-      }
-
-      if (fLeftNeighbour) fTotalSignal += (Float_t)(0.5*GetDigitSignal(0));
-      else fTotalSignal += (Float_t) GetDigitSignal(0);
-      //printf("GetTotalSignal :i  DigitSignal %d %d \n",0,GetDigitSignal(0)); 
-               
-      if (fRightNeighbour) fTotalSignal += (Float_t)(0.5*GetDigitSignal(fNDigits -1));
+//______________________________________________________________________
+Float_t AliITSclusterSSD::GetTotalSignal(){
+    // return total signal
+  
+    if(fTotalSignal <0){
+       fTotalSignal=0;
+       if (fNDigits ==1)  {
+           fTotalSignal = (Float_t)GetDigitSignal(0);
+           //printf("1 digit: signal %d \n",GetDigitSignal(0)); 
+           return fTotalSignal;
+       }
+       if (fLeftNeighbour) fTotalSignal += (Float_t)(0.5*GetDigitSignal(0));
+       else fTotalSignal += (Float_t) GetDigitSignal(0);
+       //printf("GetTotalSignal :i DigitSignal %d %d \n",0,GetDigitSignal(0));
+       if (fRightNeighbour) fTotalSignal += (Float_t)(0.5*GetDigitSignal(
+                                                                 fNDigits -1));
       else fTotalSignal += (Float_t)GetDigitSignal(fNDigits-1);
-      //printf("GetTotalSignal :i  DigitSignal %d %d \n",fNDigits -1,GetDigitSignal(fNDigits -1)); 
-      Int_t i;         
-      for(i = 1;i<fNDigits -1;i++) 
-        {
-         fTotalSignal += (Float_t)GetDigitSignal(i);
-         //printf("GetTotalSignal :i  DigitSignal %d %d \n",i,GetDigitSignal(i)); 
+       //printf("GetTotalSignal :i  DigitSignal %d %d \n",fNDigits -1,GetDigitSignal(fNDigits -1));
+       for (Int_t i = 1;i<fNDigits -1;i++){
+           fTotalSignal += (Float_t)GetDigitSignal(i);
+           //printf("GetTotalSignal :i  DigitSignal %d %d \n",i,GetDigitSignal(i)); 
        }
-      //printf("GetTotalSignal: fNDigits %d fTotalSignal %.0f \n",fNDigits,fTotalSignal); 
+       //printf("GetTotalSignal: fNDigits %d fTotalSignal %.0f \n",fNDigits,fTotalSignal); 
     }
-   return fTotalSignal;
+    return fTotalSignal;
 }
-/***********************************************************/
-
-Float_t  AliITSclusterSSD::GetTotalSignalError()
-{
-  // comment to be written
-  Float_t err =0;
-  Int_t i;
-  for(i =1; i<fNDigits -1; i++)
-    {
-      err+=0.1*GetDigitSignal(i);   
+//______________________________________________________________________
+Float_t  AliITSclusterSSD::GetTotalSignalError(){
+    // return the error on the signal
+    Float_t err =0;
+    for (Int_t i =1; i<fNDigits -1; i++){
+       err+=0.1*GetDigitSignal(i);   
     } 
-  if (GetLeftNeighbour())
-   {
-    err+=GetDigitSignal(0);
-   }
-  else
-   {
-    err+=0.1*GetDigitSignal(0);
-   } 
-  if (GetRightNeighbour())
-   {
-    err+=GetDigitSignal(fNDigits -1);
-   }
-  else
-   {
-    err+=0.1*GetDigitSignal(fNDigits -1);
-   }
-  return err; 
-   
+    if (GetLeftNeighbour()){
+       err+=GetDigitSignal(0);
+    }else{
+       err+=0.1*GetDigitSignal(0);
+    } 
+    if (GetRightNeighbour()){
+       err+=GetDigitSignal(fNDigits -1);
+    }else{
+       err+=0.1*GetDigitSignal(fNDigits -1);
+    }
+    return err;
 }
+//______________________________________________________________________
+void AliITSclusterSSD::DelCross(Int_t index){
+    // remove cross clusters from the list of cross clusters
+    Int_t i,j; //iterators
 
-/***********************************************************/
-
-void AliITSclusterSSD::DelCross(Int_t index)
-{
-  // comment to be written
-Int_t i,j; //iterators
+    for (i =0;i<fNCrosses;i++){
+       if ((*fCrossedClusterIndexes)[i] == index){
+           for (j=i;j<fNCrosses-1;j++){
+               (*fCrossedClusterIndexes)[j]=(*fCrossedClusterIndexes)[j+1];
+           }
+           fNCrosses--;
+           return; 
+       }
+    }
+}
+//______________________________________________________________________
+Int_t  *AliITSclusterSSD::GetTracks(Int_t &nt){
+    // return the track number of the cluster
+    Int_t ntrk = GetDigit(0)->GetNTracks();
+    Int_t ndig = GetNumOfDigits();
+    Int_t *idig = new Int_t[ndig];
+    Int_t *sdig = new Int_t[ndig];
+    Int_t *itrk = new Int_t[ndig*ntrk];
+    Int_t i,j,k,l,trk;
+    Bool_t b;
 
-for(i =0;i<fNCrosses;i++)
- {
-  if ((*fCrossedClusterIndexes)[i] == index)
-   {
-     for(j=i;j<fNCrosses-1;j++)
-      {
-        (*fCrossedClusterIndexes)[j]=(*fCrossedClusterIndexes)[j+1];
-      }
-     fNCrosses--;
-     return; 
-   }
- }
+    for(i=0;i<ndig;i++){idig[i] = i;sdig[i] = GetDigit(i)->GetSignal();}
+    TMath::Sort(ndig,sdig,idig,kTRUE);
+    for(i=0;i<ndig*ntrk;i++) itrk[i] = -3;
+    j = k = l = 0;
+    for(i=0;i<ndig;i++){ // fill itrk with track numbers in order of digit size
+       j = idig[i];
+       for(k=0;k<ntrk;k++) if((trk = GetDigit(j)->GetTrack(k))>=0) {
+           itrk[l] = trk;
+           l++;
+       } // end for k/if
+    } // end for i
+    for(i=0;i<10;i++) fTrack[i] = -3;
+    fTrack[0] = itrk[0]; // first element
+    k = 1;
+    b = kTRUE;
+    for(i=1;i<l;i++){
+       for(j=0;j<k;j++) if(fTrack[j]==itrk[i]) b = kFALSE;
+       if(b){fTrack[k] = itrk[i]; k++;}
+       if(k>9) break;
+    } // end for i
+    nt = k;
 
-}
-/***********************************************************/
+    delete[] idig;
+    delete[] sdig;
+    delete[] itrk;
 
-Int_t  *AliITSclusterSSD::GetTracks(Int_t &nt)
-{
-  // comment to be written
-  Int_t *tidx=0;
-  Int_t i, bit;
-  nt=0;
+    return fTrack;
+/*
+    Int_t *tidx=0;
+    Int_t i, j,n;
+    Int_t bit =0;
+    Int_t ntracks=0;
+    nt=0;
 
-  
-   
-   fNTrack =0;
-   for(i=0;i<10;i++)
-    {
-     fTrack[i] = 0;
-    }
+    for (i=0;i<10;i++) fTrack[i] = -3;
    
-   tidx=GetDigit(0)->GetTracks();
-        
-   for(i = 0; i<3;i++)
-   {
-    fTrack[i]=tidx[i];
-    if (fTrack[i] != 0) fNTrack++;
-   }
-   for(i = 1; i<fNDigits; i++)
-   {
-    tidx=GetDigit(i)->GetTracks();
-    Int_t j;
-    for(j = 0; j<3;j++)
-    {
-     bit = 1;
-     if (tidx[j]==0) break;
-     Int_t k;
-     for(k = 0; k < fNTrack;k++)
-      {
-       if (tidx[j]==fTrack[k]) bit =0;
-      }
-     if (bit) fTrack[fNTrack++]=tidx[j];       
-    }
-   }
-       
-  if (fNTrack > 10)
-   {
-     cout<<"\n\n Error AliITSclusterSSD::GetTracks  OUT  "<<fNDigits<<"   "<<fNTrack<<"\n\n\n\n\n";
-     
-   }
+    //cout<<"GetTrack start -------: fNDigits ="<<fNDigits<<endl;
 
- nt = fNTrack;
- if(!nt) return 0;
- return &(fTrack[0]);
-}
-/***********************************************************/
+    for (i = 0; i<fNDigits; i++) {
+       tidx = GetDigit(i)->GetTracks();
+       n    = GetDigit(i)->GetNTracks();
+       for (j = 0; j<n && j<10;j++) {
+           if (tidx[j] >= 0) {
+               if(ntracks == 0){
+                   fTrack[ntracks] = tidx[j];
+                   ntracks++; 
+               }else if(tidx[j] != fTrack[ntracks-1]){
+                   ntracks++; 
+                   if(ntracks > 9) {
+                       bit = 1;
+                       break;
+                   } // end if ntracks > 9
+                   fTrack[ntracks-1] = tidx[j];
+               } // end if ntracke == 0
+           } // end if tidx[j] >=0
+       } // 3-tracks loop for the digit 
+       if(bit == 1) break;
+    } // digit loop
 
-Double_t AliITSclusterSSD::GetPosition()
-{
-  // comment to be written
-  Float_t ret;
-  switch(fNDigits)
-   {
-     case  1:
-       ret = GetDigitStripNo(0);
-       break;
-     case  2:
-       ret = EtaAlgorithm();
-       break;       
-     default:
-       ret = CentrOfGravity();   
-   }
-  return ret;
+    SetNTracks(ntracks); 
+    nt = ntracks;
+    return &(fTrack[0]);
+*/
 }
+//______________________________________________________________________
+Double_t AliITSclusterSSD::GetPosition(){
+    // return position of the cluster
+    Float_t ret;
 
-/***********************************************************/
-
-Double_t AliITSclusterSSD::EtaAlgorithm()
-{
-  // comment to be written
-  if (fNDigits != 2) return -1;
+    switch(fNDigits){
+    case  1:
+       ret = GetDigitStripNo(0);
+       break;
+    case  2:
+       ret = EtaAlgorithm();
+       break;       
+    default:
+       ret = CentrOfGravity();   
+    }
+    return ret;
+}
+//______________________________________________________________________
+Double_t AliITSclusterSSD::EtaAlgorithm(){
+    // algorithm for determing cluster position
+    if (fNDigits != 2) return -1;
 
-  Int_t strip1  = GetDigit(0)->GetStripNumber(); 
-  Int_t strip2  = GetDigit(1)->GetStripNumber();
-  Int_t signal1 = GetDigit(0)->GetSignal();
-  Int_t signal2 = GetDigit(1)->GetSignal();
+    Int_t strip1  = GetDigit(0)->GetStripNumber(); 
+    Int_t strip2  = GetDigit(1)->GetStripNumber();
+    Int_t signal1 = GetDigit(0)->GetSignal();
+    Int_t signal2 = GetDigit(1)->GetSignal();
 
-  Double_t eta;
+    Double_t eta;
   
  
-  if (strip1<strip2)
-   {
-    eta = ((Double_t)signal2)/((Double_t)(signal1+signal2));
-    if (eta<0.04) return strip1;
-    if (eta>0.96) return strip2;
-    return (strip1 + 0.43478261*eta + 0.2826087);   
-   }
-  else
-  {
-    eta = ((Double_t)signal1)/((Double_t)(signal1+signal2));
-    if (eta<0.04) return strip2;
-    if (eta>0.96) return strip1;
-    return (strip2 + 0.43478261*eta + 0.2826087);   
-  }
-
+    if (strip1<strip2){
+       eta = ((Double_t)signal2)/((Double_t)(signal1+signal2));
+       if (eta<0.04) return strip1;
+       if (eta>0.96) return strip2;
+       return (strip1 + 0.43478261*eta + 0.2826087);   
+    } else{
+       eta = ((Double_t)signal1)/((Double_t)(signal1+signal2));
+       if (eta<0.04) return strip2;
+       if (eta>0.96) return strip1;
+       return (strip2 + 0.43478261*eta + 0.2826087);   
+    }
 }
-
-Double_t  AliITSclusterSSD::GetPositionError()
-{
-  // comment to be written
- return (GetNumOfDigits()+1)/2;
+//______________________________________________________________________
+Double_t  AliITSclusterSSD::GetPositionError() const {
+    // return the position error
+    return (GetNumOfDigits()+1)/2;
 }
+//______________________________________________________________________
+Bool_t AliITSclusterSSD::IsCrossingWith(Int_t idx) const{
+    // return the cluster to which he crosses
 
-Bool_t AliITSclusterSSD::IsCrossingWith(Int_t idx)
-{
-  // comment to be written
- Int_t i;
- for(i =0; i< fNCrosses;i++)
-  {
-    if (GetCross(i) == idx) return kTRUE;
-  }
- return kFALSE;
+    for (Int_t i =0; i< fNCrosses;i++){
+       if (GetCross(i) == idx) return kTRUE;
+    }
+    return kFALSE;
 }