]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONClusterSplitterMLEM.h
Some leftover changes (Jean-Luc C.)
[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 Splitter class for the MLEM algorithm
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, TH2 *mlem);
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   Double_t Param2Coef(Int_t icand, Double_t coef, Double_t *par);
85
86 private:
87   
88     static const Double_t fgkCouplMin; ///< threshold on coupling 
89
90   TObjArray* fPixArray; //!< \todo add comment
91   AliMUONMathieson* fMathieson; //!< Mathieson
92   Int_t fDetElemId; //!< detection element we are working on
93   Int_t fNpar; //!< number of fit parameters
94   Double_t fQtot; //!< total charge
95   Int_t fnCoupled; //!< number of coupled pixels ?
96   Int_t fDebug; //!< debug level
97   
98   ClassDef(AliMUONClusterSplitterMLEM,1) // 
99 };
100
101 #endif