Added the Jetfinder classes and merge with old HEAD
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALHadronCorrectionv0.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2002, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16
17 /*
18 $Log$
19 Revision 1.4  2002/10/14 14:55:35  hristov
20 Merging the VirtualMC branch to the main development branch (HEAD)
21
22 Revision 1.2.6.2  2002/07/24 10:06:16  alibrary
23 Updating VirtualMC
24
25 Revision 1.3  2002/04/11 19:24:42  nilsen
26 fixed a complation warning about not brace-enclosing the sub-elements of
27 the static Double_t c[naxVariant][nPol].
28
29 Revision 1.2  2002/02/04 15:11:44  hristov
30 Use TMath::Abs instead of fabs (Alpha)
31
32 Revision 1.1  2002/01/17 23:52:43  morsch
33 First commit.
34
35 */
36
37
38 #include "AliEMCALHadronCorrectionv0.h"
39
40 const Int_t maxVariant = 8;  // size eta grid
41 const Int_t nVec = 10;       // size momentum grid
42 const Int_t nPol = 4;        // number coefficients of polinom
43 static Double_t etaGrid[maxVariant]={ 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.67};
44 static Double_t pGrid[nVec]={ 0.2, 0.5, 1.0, 2.0, 3.0, 5.0,10.0,15.0,25.0,40.0};
45 // c[][] - first index for eta, second for momentum 
46 static Double_t c[maxVariant][nPol] ={
47     {1.305705e-01, 3.725653e-01, -1.219962e-02, 1.806235e-04},
48     {1.296153e-01, 3.827408e-01, -1.238640e-02, 1.822804e-04},
49     {1.337690e-01, 3.797454e-01, -1.245227e-02, 1.848243e-04},
50     {1.395796e-01, 3.623994e-01, -9.196803e-03, 1.243278e-04},
51     {1.457184e-01, 3.753655e-01, -1.035324e-02, 1.473447e-04},
52     {1.329164e-01, 4.219044e-01, -1.310515e-02, 1.948883e-04},
53     {8.136581e-02, 4.646087e-01, -1.531917e-02, 2.274749e-04},
54     {1.119836e-01, 4.262497e-01, -1.160125e-02, 1.628738e-04} };
55
56 ClassImp(AliEMCALHadronCorrectionv0)
57
58 AliEMCALHadronCorrectionv0* AliEMCALHadronCorrectionv0::fHadrCorr = 0;
59
60 AliEMCALHadronCorrectionv0::AliEMCALHadronCorrectionv0(const char *name,const char *title) 
61                            :AliEMCALHadronCorrection(name, title)
62 {
63   fHadrCorr = this;
64 }
65
66 AliEMCALHadronCorrectionv0*
67 AliEMCALHadronCorrectionv0::Instance()
68 {
69   fHadrCorr = new AliEMCALHadronCorrectionv0();
70   return fHadrCorr;
71 }
72
73 Double_t 
74 AliEMCALHadronCorrectionv0::GetEnergy(const Double_t pmom,const Double_t eta,const Int_t gid)
75 {
76   Int_t iEta=0; // index 
77   Double_t etaw = TMath::Abs(eta);
78   if(etaw > etaGrid[maxVariant-1]) etaw = etaGrid[maxVariant-1];
79   for(Int_t i=0; i<maxVariant; i++) if(eta>=etaGrid[i]) {iEta = i; break;}
80
81   Double_t e[2], y, pw = pmom;
82   if(pmom > pGrid[nVec-1]) pw = pGrid[nVec-1];
83   for(Int_t i=0; i<2; i++){ // e for two eta value
84     e[i] = c[iEta][0];
85     y = 1.;
86     for(Int_t j=1; j<nPol; j++){
87       y *= pw;
88       e[i] += c[iEta][j]*y;
89     }
90     if(i==0) iEta ++;
91   }
92
93   Double_t deta = etaGrid[iEta] - etaGrid[iEta-1];
94   Double_t a = (e[1] - e[0])/deta; // slope 
95   Double_t energy = e[0] + a*(eta-etaGrid[iEta-1]);
96   return energy;
97 }