]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - PHOS/AliPHOSRecCpvManager.cxx
Bug correction
[u/mrichter/AliRoot.git] / PHOS / AliPHOSRecCpvManager.cxx
... / ...
CommitLineData
1/**************************************************************************
2 * Copyright(c) 1998-1999, 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// Class for the management by the CPV reconstruction.
19////
20//*-- Author : Boris Polichtchouk (IHEP, Protvino) 6 Mar 2001
21//
22// --- ROOT system ---
23
24// --- Standard library ---
25
26// --- AliRoot header files ---
27
28#include "AliPHOSRecCpvManager.h"
29#include "AliPHOSGeometry.h"
30#include "AliPHOSLoader.h"
31
32ClassImp(AliPHOSRecCpvManager)
33
34//____________________________________________________________________________
35
36 AliPHOSRecCpvManager::AliPHOSRecCpvManager()
37{
38 // Put a comment here
39
40 fOneGamChisqCut = 3.; // If Chi2/dof > fOneGamChisqCut, split point.
41
42 fOneGamInitialStep = 0.00005;
43 fOneGamChisqMin = 1.;
44 fOneGamStepMin = 0.0005;
45 fOneGamNumOfIterations = 50;
46
47 fTwoGamInitialStep = 0.00005;
48 fTwoGamChisqMin = 1.;
49 fTwoGamEmin = 0.1;
50 fTwoGamStepMin = 0.00005;
51 fTwoGamNumOfIterations = 50;
52
53// fThr0 = 0.0285; // Min. energy of rec. point. If E<fThr0, point deleted.
54// fSqdCut = 3.; // Min. distance (in cm) between two rec points.
55
56 fThr0 = 0.;
57 fSqdCut = 0.;
58
59 SetTitle("Cpv Reconstruction Manager");
60}
61
62AliPHOSRecCpvManager::~AliPHOSRecCpvManager(void)
63{
64 // Put a comment here
65}
66
67Float_t AliPHOSRecCpvManager::Dispersion(Float_t etot, Float_t ai) const
68{
69 //"Dispresion" of energy deposition in the cell.
70 // etot is the total shower energy, ai is the
71 // calculated cell response,
72 // ei is the measured cell response.
73
74 const Float_t kConst = 1.5;
75 return kConst*ai*(1.-ai/etot);
76}
77
78Float_t AliPHOSRecCpvManager::OneGamChi2(Float_t ai, Float_t ei, Float_t etot, Float_t& Gi) const
79{
80 //"Chi2" for one cell.
81 // etot is the total "shower" energy, ai is the
82 // calculated cell response,
83 // ei is the measured cell response.
84
85 const Float_t kConst = 1.5;
86
87 Float_t da = ai - ei;
88 Float_t d = kConst*ai*(1.-ai/etot);
89
90 Float_t dd = da/d;
91 Gi = dd*(2.- dd*kConst*(1.-2.*ai/etot));
92
93 Info("OneGamChi2", " OneGamChi2 (ai,ei,etot,&Gi,chi2) %f %f %f %f %f", ai, ei, etot, Gi, da*da/d );
94
95 return da*da/d;
96
97}
98
99Float_t AliPHOSRecCpvManager::TwoGamChi2(Float_t ai, Float_t ei, Float_t etot, Float_t& gi) const
100{
101 // Put a comment here
102
103 const Float_t kConst = 1.5;
104
105 Float_t da = ai - ei;
106 Float_t d = kConst*ai*(1.-ai/etot);
107
108 Float_t dd = da/d;
109 gi = dd*(2.- dd*kConst*(1.-2.*ai/etot));
110
111 return da*da/d;
112
113}
114
115void AliPHOSRecCpvManager::AG(Float_t ei, Float_t xi, Float_t yi, Float_t& ai, Float_t& gxi, Float_t& gyi )
116{
117 //Calculates amplitude (ai) and gradients (gxi, gyi) of CPV pad response.
118 //Integrated response (total "shower energy") is e,
119 //xi and yi are the distances along x and y from reference point
120 // to the pad center.
121
122 AliPHOSGeometry * geom = AliPHOSLoader::GetPHOSGeometry();
123
124 Float_t celZ = geom->GetPadSizeZ();
125 Float_t celY = geom->GetPadSizePhi();
126
127// // Info("AG", "celZ: %f celY: %f", celZ, celY) ;
128
129 Float_t dx = celZ/2.;
130 Float_t dy = celY/2.;
131
132// // Float_t x = xi*celZ;
133// // Float_t y = yi*celZ;
134
135 Float_t x = xi*celZ;
136 Float_t y = yi*celY;
137
138 Float_t e = ei;
139
140 Float_t a = Fcml(x+dx,y+dy) - Fcml(x+dx,y-dy) - Fcml(x-dx,y+dy) + Fcml(x-dx,y-dy);
141 ai = a*e;
142
143
144 Float_t gx = GradX(x+dx,y+dy) - GradX(x+dx,y-dy) - GradX(x-dx,y+dy) + GradX(x-dx,y-dy);
145 gxi = gx*e*e;
146
147 Float_t gy = GradY(x+dx,y+dy) - GradY(x+dx,y-dy) - GradY(x-dx,y+dy) + GradY(x-dx,y-dy);
148 gyi = gy*e*e;
149
150}
151
152Float_t AliPHOSRecCpvManager::Fcml(Float_t x, Float_t y)
153{
154 //Cumulative function
155
156 const Float_t ka = 1.0;
157 const Float_t kb = 0.70;
158
159 Float_t fff = TMath::ATan(x*y/( kb*TMath::Sqrt( (kb*kb) + x*x+y*y)))
160 - TMath::ATan(x*y/(3*kb*TMath::Sqrt((3*kb)*(3*kb) + x*x+y*y)))
161 + TMath::ATan(x*y/(5*kb*TMath::Sqrt((5*kb)*(5*kb) + x*x+y*y)))
162 - TMath::ATan(x*y/(7*kb*TMath::Sqrt((7*kb)*(7*kb) + x*x+y*y)))
163 + TMath::ATan(x*y/(9*kb*TMath::Sqrt((9*kb)*(9*kb) + x*x+y*y)));
164
165 Float_t fcml = ka*fff/TMath::TwoPi();
166// Info("Fcml", "fcml: %f", fcml) ;
167 return fcml;
168
169}
170
171
172Float_t AliPHOSRecCpvManager::GradX(Float_t x, Float_t y)
173{
174 // Put a comment here
175
176 const Float_t ka = 1.0;
177 const Float_t kb = 0.70;
178
179 Float_t skv = kb*kb + x*x + y*y;
180
181 Float_t gradient = y*(1.-x*x/skv)* kb*TMath::Sqrt(skv)/( kb*kb*skv+x*x*y*y)
182 - y*(1.-x*x/skv)*3*kb*TMath::Sqrt(skv)/((3*kb)*(3*kb)*skv+x*x*y*y)
183 + y*(1.-x*x/skv)*5*kb*TMath::Sqrt(skv)/((5*kb)*(5*kb)*skv+x*x*y*y)
184 - y*(1.-x*x/skv)*7*kb*TMath::Sqrt(skv)/((7*kb)*(7*kb)*skv+x*x*y*y)
185 + y*(1.-x*x/skv)*9*kb*TMath::Sqrt(skv)/((9*kb)*(9*kb)*skv+x*x*y*y);
186
187 Float_t grad = ka*gradient/TMath::TwoPi();
188 return grad;
189}
190
191
192Float_t AliPHOSRecCpvManager::GradY(Float_t x, Float_t y)
193{
194 // Put a comment here
195
196 const Float_t ka = 1.0;
197 const Float_t kb = 0.70;
198
199 Float_t skv = kb*kb + x*x + y*y;
200 Float_t gradient = x*(1.-y*y/skv)* kb*TMath::Sqrt(skv)/( kb*kb*skv+x*x*y*y)
201 - x*(1.-y*y/skv)*3*kb*TMath::Sqrt(skv)/((3*kb)*(3*kb)*skv+x*x*y*y)
202 + x*(1.-y*y/skv)*5*kb*TMath::Sqrt(skv)/((5*kb)*(5*kb)*skv+x*x*y*y)
203 - x*(1.-y*y/skv)*7*kb*TMath::Sqrt(skv)/((7*kb)*(7*kb)*skv+x*x*y*y)
204 + x*(1.-y*y/skv)*9*kb*TMath::Sqrt(skv)/((9*kb)*(9*kb)*skv+x*x*y*y);
205
206 Float_t grad = ka*gradient/TMath::TwoPi();
207 return grad;
208}
209
210