]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSclusterSSD.cxx
Bug fix (C.Cheshkov)
[u/mrichter/AliRoot.git] / ITS / AliITSclusterSSD.cxx
index b9c2deeee8f98fa83ad5f040744e3475822dff6a..6a5a54ca15630f06030e51b8214abb827009cd4e 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-Revision 1.9  2002/10/14 14:57:00  hristov
-Merging the VirtualMC branch to the main development branch (HEAD)
-
-Revision 1.7.6.1  2002/10/14 13:14:08  hristov
-Updating VirtualMC to v3-09-02
-
-Revision 1.8  2002/09/09 17:23:28  nilsen
-Minor changes in support of changes to AliITSdigitS?D class'.
-
-*/
+/* $Id$ */
 
 #include <Riostream.h>
 #include "TArrayI.h"
 #include "TClonesArray.h"
-#include "AliITSdigit.h"
+#include "AliITSdigitSSD.h"
 #include "AliITSclusterSSD.h"
 
 ClassImp(AliITSclusterSSD)
@@ -75,7 +64,8 @@ AliITSclusterSSD::~AliITSclusterSSD(){
     delete fCrossedClusterIndexes;
 }
 //______________________________________________________________________
-AliITSclusterSSD::AliITSclusterSSD(const AliITSclusterSSD &OneSCluster){
+AliITSclusterSSD::AliITSclusterSSD(const AliITSclusterSSD &OneSCluster) : 
+    TObject(OneSCluster){
     // copy constructor
 
     if (this == &OneSCluster) return;
@@ -255,6 +245,42 @@ void AliITSclusterSSD::DelCross(Int_t index){
 //______________________________________________________________________
 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<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;
+
+    return fTrack;
+/*
     Int_t *tidx=0;
     Int_t i, j,n;
     Int_t bit =0;
@@ -289,6 +315,7 @@ Int_t  *AliITSclusterSSD::GetTracks(Int_t &nt){
     SetNTracks(ntracks); 
     nt = ntracks;
     return &(fTrack[0]);
+*/
 }
 //______________________________________________________________________
 Double_t AliITSclusterSSD::GetPosition(){