]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EMCAL/AliEMCALUnfolding.h
Correct index mapping, add L1 amp histogram and other
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALUnfolding.h
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
5      \r\r
6 //_________________________________________________________________________\r\r
7 //  Base class for the cluster unfolding algorithm \r\r
8 //*-- Author: Adam Matyja (SUBATECH)\r\r
9 \r\r
10 // --- ROOT system ---\r\r
11 #include "AliLog.h"\r\r
12 #include "TObject.h" \r\r
13 //class TTree;\r\r
14 \r\r
15 // --- Standard library ---\r\r
16 \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
23 \r\r
24 \r\r
25 class AliEMCALUnfolding : public TObject {\r\r
26 \r\r
27 public:\r\r
28 \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
33 \r\r
34   virtual void Init() ;\r\r
35   virtual void SetInput(Int_t numberOfECAClusters,TObjArray *recPoints,TClonesArray *digitsArr);\r\r
36 \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
48 \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
61 \r\r
62 protected:\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
69 \r\r
70 private:\r\r
71   AliEMCALUnfolding(const AliEMCALUnfolding &); //copy ctor\r\r
72   AliEMCALUnfolding & operator = (const AliEMCALUnfolding &);\r\r
73   \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
82 \r\r
83   static Double_t fSSPars[8];//! Unfolding shower shape parameters\r\r
84   // function:\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
93 \r\r
94   ClassDef(AliEMCALUnfolding,2)  // Unfolding algorithm class \r\r
95 } ;\r\r
96 \r\r
97 #endif // AliEMCALUNFOLDING_H\r\r