technial fix to suppress the warning
[u/mrichter/AliRoot.git] / ITS / AliITSClusterFinder.h
CommitLineData
b0f5e3fc 1#ifndef ALIITSCLUSTERFINDER_H
2#define ALIITSCLUSTERFINDER_H
9de0700b 3
4/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
6
7/* $Id$ */
b0f5e3fc 8
9////////////////////////////////////////////////
e8189707 10// ITS Cluster Finder Class //
04366a57 11// //
12// //
b0f5e3fc 13////////////////////////////////////////////////
14
e8189707 15#include <TObject.h>
16#include <TClonesArray.h>
87f41a67 17#include "AliLog.h"
e8189707 18
19class AliITSMap;
20class AliITSresponse;
21class AliITSsegmentation;
8ca6a9a5 22class AliITSdigit;
9355b256 23class AliITSRecPoint;
7d62fb64 24class AliITSDetTypeRec;
5d2c2f86 25class AliRawReader;
6c8e94cf 26class TArrayI;
b0f5e3fc 27
fe7d86eb 28using std::istream;
29
9de0700b 30//----------------------------------------------------------------------
31class AliITSClusterFinder :public TObject{
aacedc3e 32 public:
28a570fd 33 AliITSClusterFinder(); // Default constructor
aacedc3e 34 // Standard Constructor
8ba39da9 35 AliITSClusterFinder(AliITSDetTypeRec* dettyp);
36 AliITSClusterFinder(AliITSDetTypeRec* dettyp,TClonesArray *digits);// Standard+ Constructor
28a570fd 37 virtual ~AliITSClusterFinder(); // Destructor
9de0700b 38 //
aacedc3e 39 // Do the Reconstruction.
87f41a67 40 virtual void FindRawClusters(Int_t /*mod*/)=0; // Finds cluster of digits.
01ef1bd4 41 virtual void RawdataToClusters(AliRawReader* /*rawReader*/) {
87f41a67 42 AliError("Method not implemented in this class ");
43 }
44
aacedc3e 45 // Digit
46 virtual void SetDigits(TClonesArray *itsDigits) {// set digits
47 fDigits=itsDigits;fNdigits = fDigits->GetEntriesFast();}
48 virtual AliITSdigit* GetDigit(Int_t i){ // Returns ith digit
49 return (AliITSdigit*) fDigits->UncheckedAt(i);}
50 virtual TClonesArray* Digits(){return fDigits;}// Gets fDigits
51 virtual Int_t NDigits() const {return fNdigits;}// Get Number of Digits
87f41a67 52
aacedc3e 53 // Set fClusters up
54 virtual void SetClusters(TClonesArray *itsClusters){// set clusters
87f41a67 55 fClusters = itsClusters;}
aacedc3e 56 // Get fCluters
57 virtual TClonesArray* Clusters(){return fClusters;}
aacedc3e 58 // Returns the present number of enteries
59 virtual Int_t NClusters()const {return fClusters->GetEntriesFast();}
d2f55a22 60
aacedc3e 61 virtual void SetModule(Int_t module){fModule = module;}// Set module number
00a7cc50 62 virtual Int_t GetModule()const {return fModule;}// Returns module number
5d2c2f86 63
87f41a67 64 void SetEvent(Int_t event) { fEvent=event; }
5d2c2f86 65
aacedc3e 66 // Others
67 virtual void SetMap(AliITSMap *m) {fMap=m;}// map
68 AliITSMap* Map(){return fMap;}// map
aacedc3e 69 virtual Int_t GetNPeaks() const {return fNPeaks;}// returns fNPeaks
70 //
71 virtual Bool_t IsNeighbor(TObjArray *digs,Int_t i,Int_t j[]) const;
aacedc3e 72 // Set max. cluster size ; bigger clusters will be rejected
87f41a67 73
aacedc3e 74 // IO functions
7d62fb64 75 void Print(ostream *os) const; // Class ascii print function
aacedc3e 76 void Read(istream *os); // Class ascii read function
d2f55a22 77 virtual void Print(Option_t *option="") const {TObject::Print(option);}
78 virtual Int_t Read(const char *name) {return TObject::Read(name);}
e8189707 79
7d62fb64 80 virtual void SetDetTypeRec(AliITSDetTypeRec* dtr) {fDetTypeRec=dtr;}
81 AliITSDetTypeRec* GetDetTypeRec() const {return fDetTypeRec;}
04366a57 82
7d62fb64 83 void InitGeometry();
6c8e94cf 84 //
85 Int_t GetNClusters() const {return fNClusters;}
86 void SetRawID2ClusID(TArrayI *arr) {fRawID2ClusID = arr;}
87 TArrayI* GetRawID2ClusID() const {return fRawID2ClusID;}
88 //
aacedc3e 89 protected:
5d2c2f86 90 class Ali1Dcluster {
91 public:
92 void SetY(Float_t y) {fY=y;}
93 void SetQ(Float_t q) {fQ=q;}
94 void SetNd(Int_t n) {fNd=n;}
95 void SetLabels(Int_t *lab) {fLab[0]=lab[0];fLab[1]=lab[1];fLab[2]=lab[2];}
96 Float_t GetY() const {return fY;}
97 Float_t GetQ() const {return fQ;}
98 Int_t GetNd()const {return fNd;}
99 Int_t GetLabel(Int_t lab) const { return fLab[lab]; }
100 protected:
101 Float_t fY; //cluster position
102 Float_t fQ; //cluster charge
103 Int_t fNd; //number of digits
104 Int_t fLab[3]; //track label
105 };
106 class AliBin {
107 public:
6c8e94cf 108 AliBin():fIndex(0),fMask(0xFFFFFFFE),fRawID(-1),fQ(0){}
5d2c2f86 109 void SetIndex(UInt_t idx) {fIndex=idx;}
110 void SetQ(UShort_t q) {fQ=q;}
111 void SetMask(UInt_t m) {fMask=m;}
6c8e94cf 112 void SetRawID(Int_t id) {fRawID=id;}
113 void Reset() {fIndex=0; fMask=0xFFFFFFFE; fQ=0; fRawID=-1;}
5d2c2f86 114
115 void Use() {fMask&=0xFFFFFFFE;}
116 Bool_t IsNotUsed() const {return (fMask&1);}
117 Bool_t IsUsed() const {return !(IsNotUsed());}
118
119 UInt_t GetIndex() const {return fIndex;}
120 UShort_t GetQ() const {return fQ;}
121 UInt_t GetMask() const {return fMask;}
6c8e94cf 122 Int_t GetRawID() const {return fRawID;}
5d2c2f86 123 protected:
124 UInt_t fIndex; //digit index
125 UInt_t fMask; //peak mask
6c8e94cf 126 Int_t fRawID; // ID of raw word (used for embedding)
5d2c2f86 127 UShort_t fQ; //signal
128 };
129 void MakeCluster(Int_t k,Int_t max,AliBin *bins,UInt_t m,AliITSRecPoint &c);
130 static Bool_t IsMaximum(Int_t k, Int_t max, const AliBin *bins);
131 static void FindPeaks(Int_t k,Int_t m,AliBin*b,Int_t*idx,UInt_t*msk,Int_t&n);
132 static void MarkPeak(Int_t k, Int_t max, AliBin *bins, UInt_t m);
133 static void FindCluster(Int_t k,Int_t maxz,AliBin *bins,Int_t &n,Int_t *idx);
134
135 static void CheckLabels2(Int_t lab[10]);
136 static void AddLabel(Int_t lab[10], Int_t label);
88cb7938 137
87f41a67 138 // data members
139
140 Int_t fModule; //! Module number to be reconstuctted
141 TClonesArray *fDigits; //! digits
142 Int_t fNdigits; //! num of digits
143
144 AliITSDetTypeRec* fDetTypeRec; //ITS object for reconstruction
145 TClonesArray *fClusters; //! Array of clusters
146 AliITSMap *fMap; //! map
147 Int_t fNPeaks; //! NPeaks
148 // Data members needed to fill AliCluster objects
149 Int_t fNdet[2200]; // detector index
150 Int_t fNlayer[2200]; // detector layer
151
152 Int_t fNModules; // total number of modules
153 Int_t fEvent; //event number
d59a647b 154 Int_t fZmin; // minimum channel in Zloc
155 Int_t fZmax; // maximum channel in Zloc
156 Int_t fXmin; // minimum channel in Xloc
157 Int_t fXmax; // maximum channel in Xloc
6c8e94cf 158 //
159 UInt_t fNClusters; // total number of clusters found
160 //
161 TArrayI* fRawID2ClusID; //! optional array to store raw word ID -> ClusID for embedding (not owned)
87f41a67 162
163 AliITSClusterFinder(const AliITSClusterFinder &source); // copy constructor
164 // assignment operator
165 AliITSClusterFinder& operator=(const AliITSClusterFinder &source);
166
167
6c8e94cf 168 ClassDef(AliITSClusterFinder,11) //Class for clustering and reconstruction of space points
9de0700b 169};
aacedc3e 170// Input and output functions for standard C++ input/output.
171ostream &operator<<(ostream &os,AliITSClusterFinder &source);
172istream &operator>>(istream &os,AliITSClusterFinder &source);
b0f5e3fc 173#endif