Line data Source code
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 288 : 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 346 : ClassDef(AliMUONClusterSplitterMLEM,2) // Splitter of clusters
106 : };
107 :
108 : #endif
|