96d9ac629fb1f947396d61b5ec44c1a99b928083
[u/mrichter/AliRoot.git] / MUON / AliMUONClusterSplitterMLEM.h
1 #ifndef AliMUONClusterSplitterMLEM_H
2 #define AliMUONClusterSplitterMLEM_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice                               */
6
7 // $Id$
8
9 /// \ingroup rec
10 /// \class AliMUONClusterSplitterMLEM
11 /// \brief
12 /// 
13 //  Author Alexander Zinchenko, JINR Dubna; Laurent Aphecetche, SUBATECH
14 //
15
16 #ifndef ROOT_TObject
17 #  include "TObject.h"
18 #endif
19
20 #include "TMatrixDfwd.h"
21
22 class AliMUONCluster;
23 class TH2;
24 class TObjArray;
25 class AliMUONPad;
26 class AliMUONMathieson;
27
28 class AliMUONClusterSplitterMLEM : public TObject
29 {
30 public:
31   AliMUONClusterSplitterMLEM(Int_t detElemId, TObjArray* pixArray);
32   
33   virtual ~AliMUONClusterSplitterMLEM();
34
35   void AddBin(TH2 *mlem, 
36               Int_t ic, Int_t jc, Int_t mode, 
37               Bool_t *used, TObjArray *pix);
38   
39   void AddCluster(Int_t ic, Int_t nclust, 
40                   TMatrixD& aijcluclu, 
41                   Bool_t *used, Int_t *clustNumb, Int_t &nCoupled);
42   
43   TObject* BinToPix(TH2 *mlem, Int_t jc, Int_t ic);
44   
45   Float_t ChargeIntegration(Double_t x, Double_t y, const AliMUONPad& pad);
46   
47   void Fcn1(const AliMUONCluster& cluster, 
48             Int_t & npar, Double_t * gin, 
49             Double_t &f, Double_t *par, Int_t iflag);
50   
51   Int_t Fit(const AliMUONCluster& cluster,
52             Int_t iSimple, Int_t nfit,
53             Int_t *clustFit, TObjArray **clusters, 
54             Double_t *parOk, TObjArray& clusterList);
55     
56   void Merge(const AliMUONCluster& cluster,
57              Int_t nForFit, Int_t nCoupled, 
58              Int_t *clustNumb, Int_t *clustFit, 
59              TObjArray **clusters, 
60              TMatrixD& aijcluclu, TMatrixD& aijclupad);
61     
62   Double_t MinGroupCoupl(Int_t nCoupled, Int_t *clustNumb, 
63                          TMatrixD& aijcluclu, Int_t *minGroup);
64       
65   Int_t SelectPad(const AliMUONCluster& cluster,
66                   Int_t nCoupled, Int_t nForFit, 
67                   Int_t *clustNumb, Int_t *clustFit, 
68                   TMatrixD& aijclupad);
69   
70   void Split(const AliMUONCluster& cluster,
71                TH2* mlem,
72                Double_t* coef, TObjArray& clusterList);
73   
74   
75   void UpdatePads(const AliMUONCluster& cluster, Int_t nfit, Double_t *par);
76   /// Set debug level
77   void SetDebug (Int_t debug) { fDebug = debug; }
78
79 private:
80   /// will not be implemented
81   AliMUONClusterSplitterMLEM(const AliMUONClusterSplitterMLEM&);
82   /// will not be implemented
83   AliMUONClusterSplitterMLEM& operator=(const AliMUONClusterSplitterMLEM&);
84   
85 private:
86   
87     static const Double_t fgkCouplMin; ///< threshold on coupling 
88
89   TObjArray* fPixArray; //!< \todo add comment
90   AliMUONMathieson* fMathieson; //!< Mathieson
91   Int_t fDetElemId; //!< detection element we are working on
92   Int_t fNpar; //!< number of fit parameters
93   Double_t fQtot; //!< total charge
94   Int_t fnCoupled; //!< number of coupled pixels ?
95   Int_t fDebug; //!< debug level
96   
97   ClassDef(AliMUONClusterSplitterMLEM,1) // 
98 };
99
100 #endif