1 #ifndef ALIITSCLUSTERFINDER_H
2 #define ALIITSCLUSTERFINDER_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
9 ////////////////////////////////////////////////
10 // ITS Cluster Finder Class //
13 ////////////////////////////////////////////////
16 #include <TClonesArray.h>
21 class AliITSsegmentation;
24 class AliITSDetTypeRec;
27 //----------------------------------------------------------------------
28 class AliITSClusterFinder :public TObject{
30 AliITSClusterFinder(); // Default constructor
31 // Standard Constructor
32 AliITSClusterFinder(AliITSDetTypeRec* dettyp);
33 AliITSClusterFinder(AliITSDetTypeRec* dettyp,TClonesArray *digits);// Standard+ Constructor
34 virtual ~AliITSClusterFinder(); // Destructor
36 // Do the Reconstruction.
37 virtual void FindRawClusters(Int_t /*mod*/)=0; // Finds cluster of digits.
38 virtual void RawdataToClusters(AliRawReader* /*rawReader*/,TClonesArray** /*clusters*/) {
39 AliError("Method not implemented in this class ");
43 virtual void SetDigits(TClonesArray *itsDigits) {// set digits
44 fDigits=itsDigits;fNdigits = fDigits->GetEntriesFast();}
45 virtual AliITSdigit* GetDigit(Int_t i){ // Returns ith digit
46 return (AliITSdigit*) fDigits->UncheckedAt(i);}
47 virtual TClonesArray* Digits(){return fDigits;}// Gets fDigits
48 virtual Int_t NDigits() const {return fNdigits;}// Get Number of Digits
51 virtual void SetClusters(TClonesArray *itsClusters){// set clusters
52 fClusters = itsClusters;}
54 virtual TClonesArray* Clusters(){return fClusters;}
55 // Returns the present number of enteries
56 virtual Int_t NClusters()const {return fClusters->GetEntriesFast();}
58 virtual void SetModule(Int_t module){fModule = module;}// Set module number
59 virtual Int_t GetModule()const {return fModule;}// Returns module number
61 void SetEvent(Int_t event) { fEvent=event; }
64 virtual void SetMap(AliITSMap *m) {fMap=m;}// map
65 AliITSMap* Map(){return fMap;}// map
66 virtual Int_t GetNPeaks() const {return fNPeaks;}// returns fNPeaks
68 virtual Bool_t IsNeighbor(TObjArray *digs,Int_t i,Int_t j[]) const;
69 // Set max. cluster size ; bigger clusters will be rejected
72 void Print(ostream *os) const; // Class ascii print function
73 void Read(istream *os); // Class ascii read function
74 virtual void Print(Option_t *option="") const {TObject::Print(option);}
75 virtual Int_t Read(const char *name) {return TObject::Read(name);}
77 virtual void SetDetTypeRec(AliITSDetTypeRec* dtr) {fDetTypeRec=dtr;}
78 AliITSDetTypeRec* GetDetTypeRec() const {return fDetTypeRec;}
85 void SetY(Float_t y) {fY=y;}
86 void SetQ(Float_t q) {fQ=q;}
87 void SetNd(Int_t n) {fNd=n;}
88 void SetLabels(Int_t *lab) {fLab[0]=lab[0];fLab[1]=lab[1];fLab[2]=lab[2];}
89 Float_t GetY() const {return fY;}
90 Float_t GetQ() const {return fQ;}
91 Int_t GetNd()const {return fNd;}
92 Int_t GetLabel(Int_t lab) const { return fLab[lab]; }
94 Float_t fY; //cluster position
95 Float_t fQ; //cluster charge
96 Int_t fNd; //number of digits
97 Int_t fLab[3]; //track label
101 AliBin():fIndex(0),fMask(0xFFFFFFFE),fQ(0){}
102 void SetIndex(UInt_t idx) {fIndex=idx;}
103 void SetQ(UShort_t q) {fQ=q;}
104 void SetMask(UInt_t m) {fMask=m;}
105 void Reset() {fIndex=0; fMask=0xFFFFFFFE; fQ=0;}
107 void Use() {fMask&=0xFFFFFFFE;}
108 Bool_t IsNotUsed() const {return (fMask&1);}
109 Bool_t IsUsed() const {return !(IsNotUsed());}
111 UInt_t GetIndex() const {return fIndex;}
112 UShort_t GetQ() const {return fQ;}
113 UInt_t GetMask() const {return fMask;}
115 UInt_t fIndex; //digit index
116 UInt_t fMask; //peak mask
117 UShort_t fQ; //signal
119 void MakeCluster(Int_t k,Int_t max,AliBin *bins,UInt_t m,AliITSRecPoint &c);
120 static Bool_t IsMaximum(Int_t k, Int_t max, const AliBin *bins);
121 static void FindPeaks(Int_t k,Int_t m,AliBin*b,Int_t*idx,UInt_t*msk,Int_t&n);
122 static void MarkPeak(Int_t k, Int_t max, AliBin *bins, UInt_t m);
123 static void FindCluster(Int_t k,Int_t maxz,AliBin *bins,Int_t &n,Int_t *idx);
125 static void CheckLabels2(Int_t lab[10]);
126 static void AddLabel(Int_t lab[10], Int_t label);
130 Int_t fModule; //! Module number to be reconstuctted
131 TClonesArray *fDigits; //! digits
132 Int_t fNdigits; //! num of digits
134 AliITSDetTypeRec* fDetTypeRec; //ITS object for reconstruction
135 TClonesArray *fClusters; //! Array of clusters
136 AliITSMap *fMap; //! map
137 Int_t fNPeaks; //! NPeaks
138 // Data members needed to fill AliCluster objects
139 Int_t fNdet[2200]; // detector index
140 Int_t fNlayer[2200]; // detector layer
142 Int_t fNModules; // total number of modules
143 Int_t fEvent; //event number
145 AliITSClusterFinder(const AliITSClusterFinder &source); // copy constructor
146 // assignment operator
147 AliITSClusterFinder& operator=(const AliITSClusterFinder &source);
150 ClassDef(AliITSClusterFinder,9) //Class for clustering and reconstruction of space points
152 // Input and output functions for standard C++ input/output.
153 ostream &operator<<(ostream &os,AliITSClusterFinder &source);
154 istream &operator>>(istream &os,AliITSClusterFinder &source);