]>
Commit | Line | Data |
---|---|---|
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 | Double_t lowestPixelCharge, | |
33 | Double_t lowestPadCharge, | |
34 | Double_t lowestClusterCharge); | |
35 | ||
36 | virtual ~AliMUONClusterSplitterMLEM(); | |
37 | ||
38 | void AddBin(TH2 *mlem, | |
39 | Int_t ic, Int_t jc, Int_t mode, | |
40 | Bool_t *used, TObjArray *pix); | |
41 | ||
42 | void AddCluster(Int_t ic, Int_t nclust, | |
43 | TMatrixD& aijcluclu, | |
44 | Bool_t *used, Int_t *clustNumb, Int_t &nCoupled); | |
45 | ||
46 | TObject* BinToPix(TH2 *mlem, Int_t jc, Int_t ic); | |
47 | ||
48 | Float_t ChargeIntegration(Double_t x, Double_t y, const AliMUONPad& pad); | |
49 | ||
50 | void Fcn1(const AliMUONCluster& cluster, | |
51 | Int_t & npar, Double_t * gin, | |
52 | Double_t &f, Double_t *par, Int_t iflag); | |
53 | ||
54 | Int_t Fit(const AliMUONCluster& cluster, | |
55 | Int_t iSimple, Int_t nfit, | |
56 | const Int_t *clustFit, TObjArray **clusters, | |
57 | Double_t *parOk, TObjArray& clusterList, TH2 *mlem); | |
58 | ||
59 | void Merge(const AliMUONCluster& cluster, | |
60 | Int_t nForFit, Int_t nCoupled, | |
61 | const Int_t *clustNumb, const Int_t *clustFit, | |
62 | TObjArray **clusters, | |
63 | TMatrixD& aijcluclu, TMatrixD& aijclupad); | |
64 | ||
65 | Double_t MinGroupCoupl(Int_t nCoupled, const Int_t *clustNumb, | |
66 | const TMatrixD& aijcluclu, Int_t *minGroup); | |
67 | ||
68 | Int_t SelectPad(const AliMUONCluster& cluster, | |
69 | Int_t nCoupled, Int_t nForFit, | |
70 | const Int_t *clustNumb, const Int_t *clustFit, | |
71 | const TMatrixD& aijclupad); | |
72 | ||
73 | void Split(const AliMUONCluster& cluster, | |
74 | TH2* mlem, | |
75 | Double_t* coef, TObjArray& clusterList); | |
76 | ||
77 | ||
78 | void UpdatePads(const AliMUONCluster& cluster, Int_t nfit, Double_t *par); | |
79 | /// Set debug level | |
80 | void SetDebug (Int_t debug) { fDebug = debug; } | |
81 | ||
82 | private: | |
83 | /// will not be implemented | |
84 | AliMUONClusterSplitterMLEM(const AliMUONClusterSplitterMLEM&); | |
85 | /// will not be implemented | |
86 | AliMUONClusterSplitterMLEM& operator=(const AliMUONClusterSplitterMLEM&); | |
87 | Double_t Param2Coef(Int_t icand, Double_t coef, Double_t *par) const; | |
88 | ||
89 | private: | |
90 | ||
91 | static const Double_t fgkCouplMin; ///< threshold on coupling | |
92 | ||
93 | TObjArray* fPixArray; //!< \todo add comment | |
94 | AliMUONMathieson* fMathieson; //!< Mathieson | |
95 | Int_t fDetElemId; //!< detection element we are working on | |
96 | Int_t fNpar; //!< number of fit parameters | |
97 | Double_t fQtot; //!< total charge | |
98 | Int_t fnCoupled; //!< number of coupled pixels ? | |
99 | Int_t fDebug; //!< debug level | |
100 | ||
101 | Double_t fLowestPixelCharge; //!< minimum allowed pixel charge | |
102 | Double_t fLowestPadCharge; //!< minimum allowed pad charge | |
103 | Double_t fLowestClusterCharge; //!< minimum allowed cluster charge | |
104 | ||
105 | ClassDef(AliMUONClusterSplitterMLEM,2) // Splitter of clusters | |
106 | }; | |
107 | ||
108 | #endif |