Adding extra check for GPU_FORCE_64BIT_PTR env var
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALUnfolding.h
CommitLineData
1186cd2b 1#ifndef ALIEMCALUNFOLDING_H
2#define ALIEMCALUNFOLDING_H
3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5
6//_________________________________________________________________________
7// Base class for the cluster unfolding algorithm
8//*-- Author: Adam Matyja (SUBATECH)
9
10// --- ROOT system ---
11//#include "AliLog.h"
12#include "TObject.h"
13//class TTree;
14class AliLog ;
15
16
17// --- Standard library ---
18
19// --- AliRoot header files ---
20class AliEMCALGeometry ;
21//class AliEMCALCalibData ;
22//class AliCaloCalibPedestal ;
23class AliEMCALRecPoint ;
24class AliEMCALDigit ;
25
26
27class AliEMCALUnfolding : public TObject {
28
29public:
30
31 AliEMCALUnfolding() ; // default ctor
32 virtual ~AliEMCALUnfolding() ; // dtorEM
33 AliEMCALUnfolding(AliEMCALGeometry* geometry);// constructor
34 AliEMCALUnfolding(AliEMCALGeometry* geometry,Float_t ECALocMaxCut,Double_t *SSPars,Double_t *Par5,Double_t *Par6);// constructor
35
36 virtual void Init() ;
37 virtual void SetInput(Int_t numberOfECAClusters,TObjArray *recPoints,TClonesArray *digitsArr);
38
39 //setters and getters
40 virtual void SetNumberOfECAClusters(Int_t n) { fNumberOfECAClusters = n; }
41 virtual Int_t GetNumberOfECAClusters() const { return fNumberOfECAClusters; }
42 virtual void SetRecPoints(TObjArray *rec) { fRecPoints = rec; }
43 virtual TObjArray * GetRecPoints() const { return fRecPoints; }
44 virtual void SetDigitsArr(TClonesArray *digit) { fDigitsArr = digit; }
45 virtual TClonesArray * GetDigitsArr() const { return fDigitsArr; }
46 virtual void SetECALocalMaxCut(Float_t cut) { fECALocMaxCut = cut ; }
47 virtual Float_t GetECALocalMaxCut() const { return fECALocMaxCut; }
48 virtual void SetThreshold(Float_t energy) { fThreshold = energy; }
49 virtual Float_t GetThreshold() const { return fThreshold; }
b410dc6a 50 virtual void SetRejectBelowThreshold(Bool_t reject) { fRejectBelowThreshold = reject; }
51 virtual Bool_t GetRejectBelowThreshold() const { return fRejectBelowThreshold; }
52
1186cd2b 53 //unfolding main methods
54 virtual void MakeUnfolding();
55 static Double_t ShowerShapeV2(Double_t x, Double_t y) ; // Shape of EM shower used in unfolding;
56 //class member function (not object member function)
57 static void UnfoldingChiSquareV2(Int_t & nPar, Double_t * Grad, Double_t & fret, Double_t * x, Int_t iflag) ;
58 // Chi^2 of the fit. Should be static to be passes to MINUIT
59 virtual void SetShowerShapeParams(Double_t *pars) ;
60 virtual Double_t* GetShowerShapeParams() const { return fgSSPars ; }
61 virtual void SetPar5(Double_t *pars) ;
62 virtual Double_t* GetPar5() const { return fgPar5 ; }
63 virtual void SetPar6(Double_t *pars) ;
64 virtual Double_t* GetPar6() const { return fgPar6 ; }
b410dc6a 65
66 virtual Int_t UnfoldOneCluster(AliEMCALRecPoint * iniTower,
67 Int_t nMax,
1186cd2b 68 AliEMCALDigit ** maxAt,
b410dc6a 69 Float_t * maxAtEnergy,
70 TObjArray *list);//input one cluster -> output list
1186cd2b 71
b410dc6a 72protected:
73 Int_t fNumberOfECAClusters ; // number of clusters found in EC section
74 Float_t fECALocMaxCut ; // minimum energy difference to distinguish local maxima in a cluster
75 Float_t fThreshold ; // minimum energy for cell to be joined to a cluster
76 Bool_t fRejectBelowThreshold ; // split (false) or reject (true) cell energy below threshold after UF
77 AliEMCALGeometry * fGeom; //! pointer to geometry for utilities
78 TObjArray * fRecPoints; // Array with EMCAL clusters
79 TClonesArray * fDigitsArr; // Array with EMCAL digits
80
81private:
82 AliEMCALUnfolding(const AliEMCALUnfolding &); //copy ctor
83 AliEMCALUnfolding & operator = (const AliEMCALUnfolding &);
84
85 Bool_t UnfoldClusterV2(AliEMCALRecPoint * iniEmc, Int_t Nmax,
86 AliEMCALDigit ** maxAt,
87 Float_t * maxAtEnergy ); //Unfolds cluster using TMinuit package
88 Bool_t UnfoldClusterV2old(AliEMCALRecPoint * iniEmc, Int_t Nmax,
89 AliEMCALDigit ** maxAt,
90 Float_t * maxAtEnergy ); //Unfolds cluster using TMinuit package
91 Bool_t FindFitV2(AliEMCALRecPoint * emcRP, AliEMCALDigit ** MaxAt, const Float_t * maxAtEnergy,
92 Int_t NPar, Float_t * FitParametres) const; //Used in UnfoldClusters, calls TMinuit
93
1186cd2b 94 static Double_t fgSSPars[8];//! Unfolding shower shape parameters
95 // function:
96 // f(r)=exp(-(p0*r)^p1 * (1/(p2+p3*(p0*r)^p1)+p4/(1+p6*(p0*r)^p5) ) )
97 // p0,p1,p2,p3,p4 are fixed
98 // params p5 and p6 are phi-dependent and set in ShowerShapeV2
99 static Double_t fgPar5[3];//! UF SSPar nr 5 = p0 + phi*p1 + phi^2 *p2
100 static Double_t fgPar6[3];//! UF SSPar nr 6 = p0 + phi*p1 + phi^2 *p2
101 static void EvalPar5(Double_t phi);
102 static void EvalPar6(Double_t phi);
103 static void EvalParsPhiDependence(Int_t absId, const AliEMCALGeometry *geom);
104
b410dc6a 105 ClassDef(AliEMCALUnfolding,3) // Unfolding algorithm class
1186cd2b 106} ;
107
108#endif // AliEMCALUNFOLDING_H