]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSclusterSSD.cxx
Updated version of the macros used to produce the default SDD calibration files ...
[u/mrichter/AliRoot.git] / ITS / AliITSclusterSSD.cxx
index b9c2deeee8f98fa83ad5f040744e3475822dff6a..43b2616df7a71fc7dde4c707f1f58874418fef0c 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
+/* $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 //
+////////////////////////////////////////////////////////////////////////////
 
-Revision 1.8  2002/09/09 17:23:28  nilsen
-Minor changes in support of changes to AliITSdigitS?D class'.
+#include <TArrayI.h>
+#include <TMath.h>
+#include <TClonesArray.h>
 
-*/
 
-#include <Riostream.h>
-#include "TArrayI.h"
-#include "TClonesArray.h"
-#include "AliITSdigit.h"
+#include "AliITSdigitSSD.h"
 #include "AliITSclusterSSD.h"
 
 ClassImp(AliITSclusterSSD)
 
 //______________________________________________________________________
-AliITSclusterSSD::AliITSclusterSSD(){
+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
-
-    fSide        = kTRUE;
-    fDigits      = 0;
-    fNDigits     = 0;
-    fDigitsIndex = 0;
-    fNCrosses    = 0;
-    fTotalSignal = -1;
-    fNTracks      = -1;
-    fLeftNeighbour  = kFALSE;
-    fRightNeighbour = kFALSE;
-    fCrossedClusterIndexes = 0;
-    fConsumed=kFALSE;
 }
 //______________________________________________________________________
 AliITSclusterSSD::AliITSclusterSSD(Int_t ndigits, Int_t *DigitIndexes, 
-                                  TObjArray *Digits, Bool_t side){
+                                  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
 
-    fNDigits = ndigits;
-    fDigits = Digits;
-    fSide = side;
     fDigitsIndex = new TArrayI(fNDigits,DigitIndexes );        
-    fNCrosses    = 0;
     fCrossedClusterIndexes = new TArrayI(300);
-    fLeftNeighbour  = kFALSE;
-    fRightNeighbour = kFALSE;
-    fTotalSignal =-1;
-    fNTracks    = -1;
-    fConsumed=kFALSE;
 }
 //______________________________________________________________________
 AliITSclusterSSD::~AliITSclusterSSD(){
@@ -75,20 +76,24 @@ AliITSclusterSSD::~AliITSclusterSSD(){
     delete fCrossedClusterIndexes;
 }
 //______________________________________________________________________
-AliITSclusterSSD::AliITSclusterSSD(const AliITSclusterSSD &OneSCluster){
+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
 
-    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;
     fNTracks     = -1;
-    fNCrosses = OneSCluster.fNCrosses;
-    fConsumed = OneSCluster.fConsumed;
     Int_t i;
     for (i = 0; i< fNCrosses ; i++){
        fCrossedClusterIndexes[i] = OneSCluster.fCrossedClusterIndexes[i];
@@ -170,7 +175,7 @@ void  AliITSclusterSSD::AddCross(Int_t clIndex){
     (*fCrossedClusterIndexes)[fNCrosses++] = clIndex;
 }
 //______________________________________________________________________
-Int_t AliITSclusterSSD::GetCross(Int_t crIndex){
+Int_t AliITSclusterSSD::GetCross(Int_t crIndex) const {
     // return crossing cluster
 
     return ((crIndex>-1)&&(crIndex<fNCrosses))?(*fCrossedClusterIndexes)[crIndex]:-1;
@@ -255,6 +260,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 +330,7 @@ Int_t  *AliITSclusterSSD::GetTracks(Int_t &nt){
     SetNTracks(ntracks); 
     nt = ntracks;
     return &(fTrack[0]);
+*/
 }
 //______________________________________________________________________
 Double_t AliITSclusterSSD::GetPosition(){
@@ -333,12 +375,12 @@ Double_t AliITSclusterSSD::EtaAlgorithm(){
     }
 }
 //______________________________________________________________________
-Double_t  AliITSclusterSSD::GetPositionError(){
+Double_t  AliITSclusterSSD::GetPositionError() const {
     // return the position error
     return (GetNumOfDigits()+1)/2;
 }
 //______________________________________________________________________
-Bool_t AliITSclusterSSD::IsCrossingWith(Int_t idx){
+Bool_t AliITSclusterSSD::IsCrossingWith(Int_t idx) const{
     // return the cluster to which he crosses
 
     for (Int_t i =0; i< fNCrosses;i++){