1 #ifndef ALIEMCALUNFOLDING_H
\r\r
2 #define ALIEMCALUNFOLDING_H
\r\r
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
\r\r
4 * See cxx source for full Copyright notice */
\r\r
6 //_________________________________________________________________________
\r\r
7 // Base class for the cluster unfolding algorithm
\r\r
8 //*-- Author: Adam Matyja (SUBATECH)
\r\r
10 // --- ROOT system ---
\r\r
11 #include "AliLog.h"
\r\r
12 #include "TObject.h"
\r\r
15 // --- Standard library ---
\r\r
17 // --- AliRoot header files ---
\r\r
18 class AliEMCALGeometry ;
\r\r
19 //class AliEMCALCalibData ;
\r\r
20 //class AliCaloCalibPedestal ;
\r\r
21 class AliEMCALRecPoint ;
\r\r
22 class AliEMCALDigit ;
\r\r
25 class AliEMCALUnfolding : public TObject {
\r\r
29 AliEMCALUnfolding() ; // default ctor
\r\r
30 virtual ~AliEMCALUnfolding() ; // dtorEM
\r\r
31 AliEMCALUnfolding(AliEMCALGeometry* geometry);// constructor
\r\r
32 AliEMCALUnfolding(AliEMCALGeometry* geometry,Float_t ECALocMaxCut,Double_t *SSPars,Double_t *Par5,Double_t *Par6);// constructor
\r\r
34 virtual void Init() ;
\r\r
35 virtual void SetInput(Int_t numberOfECAClusters,TObjArray *recPoints,TClonesArray *digitsArr);
\r\r
37 //setters and getters
\r\r
38 virtual void SetNumberOfECAClusters(Int_t n) { fNumberOfECAClusters = n; }
\r\r
39 virtual Int_t GetNumberOfECAClusters() const { return fNumberOfECAClusters; }
\r\r
40 virtual void SetRecPoints(TObjArray *rec) { fRecPoints = rec; }
\r\r
41 virtual TObjArray * GetRecPoints() const { return fRecPoints; }
\r\r
42 virtual void SetDigitsArr(TClonesArray *digit) { fDigitsArr = digit; }
\r\r
43 virtual TClonesArray * GetDigitsArr() const { return fDigitsArr; }
\r\r
44 virtual void SetECALocalMaxCut(Float_t cut) { fECALocMaxCut = cut ; }
\r\r
45 virtual Float_t GetECALocalMaxCut() const { return fECALocMaxCut; }
\r\r
46 virtual void SetThreshold(Float_t energy) { fThreshold = energy; }
\r\r
47 virtual Float_t GetThreshold() const { return fThreshold; }
\r\r
49 //unfolding main methods
\r\r
50 virtual void MakeUnfolding();
\r\r
51 static Double_t ShowerShapeV2(Double_t x, Double_t y) ; // Shape of EM shower used in unfolding;
\r\r
52 //class member function (not object member function)
\r\r
53 static void UnfoldingChiSquareV2(Int_t & nPar, Double_t * Grad, Double_t & fret, Double_t * x, Int_t iflag) ;
\r\r
54 // Chi^2 of the fit. Should be static to be passes to MINUIT
\r\r
55 virtual void SetShowerShapeParams(Double_t *pars) ;
\r\r
56 virtual Double_t* GetShowerShapeParams() const { return fSSPars ; }
\r\r
57 virtual void SetPar5(Double_t *pars) ;
\r\r
58 virtual Double_t* GetPar5() const { return fPar5 ; }
\r\r
59 virtual void SetPar6(Double_t *pars) ;
\r\r
60 virtual Double_t* GetPar6() const { return fPar6 ; }
\r\r
63 Int_t fNumberOfECAClusters ; // number of clusters found in EC section
\r\r
64 Float_t fECALocMaxCut ; // minimum energy difference to distinguish local maxima in a cluster
\r\r
65 Float_t fThreshold ; //minimum energy for cell to be joined to a cluster
\r\r
66 AliEMCALGeometry * fGeom; //! pointer to geometry for utilities
\r\r
67 TObjArray *fRecPoints; // Array with EMCAL clusters
\r\r
68 TClonesArray *fDigitsArr; // Array with EMCAL digits
\r\r
71 AliEMCALUnfolding(const AliEMCALUnfolding &); //copy ctor
\r\r
72 AliEMCALUnfolding & operator = (const AliEMCALUnfolding &);
\r\r
74 Bool_t UnfoldClusterV2(AliEMCALRecPoint * iniEmc, Int_t Nmax,
\r\r
75 AliEMCALDigit ** maxAt,
\r\r
76 Float_t * maxAtEnergy ); //Unfolds cluster using TMinuit package
\r\r
77 Bool_t UnfoldClusterV2old(AliEMCALRecPoint * iniEmc, Int_t Nmax,
\r\r
78 AliEMCALDigit ** maxAt,
\r\r
79 Float_t * maxAtEnergy ); //Unfolds cluster using TMinuit package
\r\r
80 Bool_t FindFitV2(AliEMCALRecPoint * emcRP, AliEMCALDigit ** MaxAt, const Float_t * maxAtEnergy,
\r\r
81 Int_t NPar, Float_t * FitParametres) const; //Used in UnfoldClusters, calls TMinuit
\r\r
83 static Double_t fSSPars[8];//! Unfolding shower shape parameters
\r\r
85 // f(r)=exp(-(p0*r)^p1 * (1/(p2+p3*(p0*r)^p1)+p4/(1+p6*(p0*r)^p5) ) )
\r\r
86 // p0,p1,p2,p3,p4 are fixed
\r\r
87 // params p5 and p6 are phi-dependent and set in ShowerShapeV2
\r\r
88 static Double_t fPar5[3];//! UF SSPar nr 5 = p0 + phi*p1 + phi^2 *p2
\r\r
89 static Double_t fPar6[3];//! UF SSPar nr 6 = p0 + phi*p1 + phi^2 *p2
\r\r
90 static void EvalPar5(Double_t phi);
\r\r
91 static void EvalPar6(Double_t phi);
\r\r
92 static void EvalParsPhiDependence(Int_t absId, AliEMCALGeometry *geom);
\r\r
94 ClassDef(AliEMCALUnfolding,2) // Unfolding algorithm class
\r\r
97 #endif // AliEMCALUNFOLDING_H
\r\r