1 #ifndef AliHMPIDCluster_h
2 #define AliHMPIDCluster_h
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
6 #include "AliHMPIDDigit.h" //DigAdd()
7 #include <TObjArray.h> //DigAdd()
8 class TClonesArray; //Solve()
10 class AliHMPIDCluster :public TObject
13 enum EClusterStatus {kFor,kCoG,kUnf,kEmp=-1}; //status flags
14 AliHMPIDCluster( ):TObject( ),fSt(kEmp ),fCh(-1 ),fQ(-1 ),fX(-1 ),fY(-1 ),fDigs(0 ) {}
15 AliHMPIDCluster(Int_t c,Float_t x,Float_t y,Int_t q,Int_t s):TObject( ),fSt(s ),fCh(c ),fQ(q ),fX(x ),fY(y ),fDigs(0 ) {}
16 AliHMPIDCluster(const AliHMPIDCluster &c ):TObject(c),fSt(c.fSt),fCh(c.fCh),fQ(c.fQ),fX(c.fX),fY(c.fY),fDigs(c.fDigs ? new TObjArray(*c.fDigs):0) {}
17 AliHMPIDCluster &operator=(const AliHMPIDCluster &c) {
18 if(this == &c)return *this;TObject::operator=(c); fSt=c.fSt; fCh=c.fCh; fQ=c.fQ; fX=c.fX; fY=c.fY; fDigs=c.fDigs ? new TObjArray(*c.fDigs):0; return *this;}
20 virtual ~AliHMPIDCluster( ) {DigDel();}
22 void Print (Option_t *opt="" )const; //overloaded TObject::Print() to print cluster info
23 static void FitFunc(Int_t &, Double_t *, Double_t &, Double_t *, Int_t); //fit function to be used by MINUIT
25 void CoG ( ); //calculates center of gravity
26 void CorrSin ( ); //sinoidal correction
27 Int_t Ch ( )const{return fCh; } //chamber number
28 inline void DigAdd (AliHMPIDDigit *pDig ); //add new digit ot the cluster
29 void DigDel ( ) {if(fDigs) {delete fDigs;fDigs=0;} } //deletes the list of digits (not digits!)
30 AliHMPIDDigit* Dig (Int_t i )const{return (AliHMPIDDigit*)fDigs->At(i); } //pointer to i-th digit
31 TObjArray* DigLst ( )const{return fDigs; } //list of digits
32 void Reset ( ) {DigDel();fQ=fCh=-1;fX=fY=-1;fSt=kEmp; } //cleans the cluster
33 Int_t Solve (TClonesArray *pCluLst,Bool_t isUnfold ); //solve cluster: MINUIT fit or CoG
34 Int_t Size ( )const{return (fDigs)?fDigs->GetEntriesFast():0; } //number of pads in cluster
35 Int_t Q ( )const{return fQ; } //cluster charge in QDC channels
36 Float_t X ( )const{return fX; } //cluster x position in LRS
37 Float_t Y ( )const{return fY; } //cluster y position in LRS
39 Int_t fSt; //flag to mark the quality of the cluster
40 Int_t fCh; //chamber number
42 Float_t fX; //local x postion, [cm]
43 Float_t fY; //local y postion, [cm]
44 TObjArray *fDigs; //! list of digits forming this cluster
45 ClassDef(AliHMPIDCluster,5) //HMPID cluster class
46 };//class AliHMPIDCluster
48 typedef AliHMPIDCluster AliRICHCluster; // for backward compatibility
50 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
51 void AliHMPIDCluster::DigAdd(AliHMPIDDigit *pDig)
53 // Adds a given digit to the list of digits belonging to this cluster, cluster is not owner of digits
54 // Arguments: pDig - pointer to digit to be added
56 if(!fDigs) {fQ=0;fDigs = new TObjArray;}
62 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++