* 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(){
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];
(*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;
//______________________________________________________________________
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;
SetNTracks(ntracks);
nt = ntracks;
return &(fTrack[0]);
+*/
}
//______________________________________________________________________
Double_t AliITSclusterSSD::GetPosition(){
}
}
//______________________________________________________________________
-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++){