1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
17 //_________________________________________________________________________
18 // Class for the management by the CPV reconstruction.
20 //*-- Author : Boris Polichtchouk (IHEP, Protvino) 6 Mar 2001
22 // --- ROOT system ---
24 // --- Standard library ---
26 // --- AliRoot header files ---
28 #include "AliPHOSRecCpvManager.h"
29 #include "AliPHOSGeometry.h"
30 #include "AliPHOSLoader.h"
32 ClassImp(AliPHOSRecCpvManager)
34 //____________________________________________________________________________
35 AliPHOSRecCpvManager::AliPHOSRecCpvManager() :
37 fOneGamInitialStep(0.00005),
39 fOneGamStepMin(0.0005),
40 fOneGamNumOfIterations(50),
41 fTwoGamInitialStep(0.00005),
44 fTwoGamStepMin(0.00005),
45 fTwoGamNumOfIterations(50),
50 SetTitle("Cpv Reconstruction Manager");
53 AliPHOSRecCpvManager::~AliPHOSRecCpvManager(void)
58 Float_t AliPHOSRecCpvManager::Dispersion(Float_t etot, Float_t ai) const
60 //"Dispresion" of energy deposition in the cell.
61 // etot is the total shower energy, ai is the
62 // calculated cell response,
63 // ei is the measured cell response.
65 const Float_t kConst = 1.5;
66 return kConst*ai*(1.-ai/etot);
69 Float_t AliPHOSRecCpvManager::OneGamChi2(Float_t ai, Float_t ei, Float_t etot, Float_t& Gi) const
71 //"Chi2" for one cell.
72 // etot is the total "shower" energy, ai is the
73 // calculated cell response,
74 // ei is the measured cell response.
76 const Float_t kConst = 1.5;
79 Float_t d = kConst*ai*(1.-ai/etot);
82 Gi = dd*(2.- dd*kConst*(1.-2.*ai/etot));
84 Info("OneGamChi2", " OneGamChi2 (ai,ei,etot,&Gi,chi2) %f %f %f %f %f", ai, ei, etot, Gi, da*da/d );
90 Float_t AliPHOSRecCpvManager::TwoGamChi2(Float_t ai, Float_t ei, Float_t etot, Float_t& gi) const
94 const Float_t kConst = 1.5;
97 Float_t d = kConst*ai*(1.-ai/etot);
100 gi = dd*(2.- dd*kConst*(1.-2.*ai/etot));
106 void AliPHOSRecCpvManager::AG(Float_t ei, Float_t xi, Float_t yi, Float_t& ai, Float_t& gxi, Float_t& gyi )
108 //Calculates amplitude (ai) and gradients (gxi, gyi) of CPV pad response.
109 //Integrated response (total "shower energy") is e,
110 //xi and yi are the distances along x and y from reference point
111 // to the pad center.
113 AliPHOSGeometry * geom = AliPHOSLoader::GetPHOSGeometry();
115 Float_t celZ = geom->GetPadSizeZ();
116 Float_t celY = geom->GetPadSizePhi();
118 // // Info("AG", "celZ: %f celY: %f", celZ, celY) ;
120 Float_t dx = celZ/2.;
121 Float_t dy = celY/2.;
123 // // Float_t x = xi*celZ;
124 // // Float_t y = yi*celZ;
131 Float_t a = Fcml(x+dx,y+dy) - Fcml(x+dx,y-dy) - Fcml(x-dx,y+dy) + Fcml(x-dx,y-dy);
135 Float_t gx = GradX(x+dx,y+dy) - GradX(x+dx,y-dy) - GradX(x-dx,y+dy) + GradX(x-dx,y-dy);
138 Float_t gy = GradY(x+dx,y+dy) - GradY(x+dx,y-dy) - GradY(x-dx,y+dy) + GradY(x-dx,y-dy);
143 Float_t AliPHOSRecCpvManager::Fcml(Float_t x, Float_t y)
145 //Cumulative function
147 const Float_t ka = 1.0;
148 const Float_t kb = 0.70;
150 Float_t fff = TMath::ATan(x*y/( kb*TMath::Sqrt( (kb*kb) + x*x+y*y)))
151 - TMath::ATan(x*y/(3*kb*TMath::Sqrt((3*kb)*(3*kb) + x*x+y*y)))
152 + TMath::ATan(x*y/(5*kb*TMath::Sqrt((5*kb)*(5*kb) + x*x+y*y)))
153 - TMath::ATan(x*y/(7*kb*TMath::Sqrt((7*kb)*(7*kb) + x*x+y*y)))
154 + TMath::ATan(x*y/(9*kb*TMath::Sqrt((9*kb)*(9*kb) + x*x+y*y)));
156 Float_t fcml = ka*fff/TMath::TwoPi();
157 // Info("Fcml", "fcml: %f", fcml) ;
163 Float_t AliPHOSRecCpvManager::GradX(Float_t x, Float_t y)
165 // Put a comment here
167 const Float_t ka = 1.0;
168 const Float_t kb = 0.70;
170 Float_t skv = kb*kb + x*x + y*y;
172 Float_t gradient = y*(1.-x*x/skv)* kb*TMath::Sqrt(skv)/( kb*kb*skv+x*x*y*y)
173 - y*(1.-x*x/skv)*3*kb*TMath::Sqrt(skv)/((3*kb)*(3*kb)*skv+x*x*y*y)
174 + y*(1.-x*x/skv)*5*kb*TMath::Sqrt(skv)/((5*kb)*(5*kb)*skv+x*x*y*y)
175 - y*(1.-x*x/skv)*7*kb*TMath::Sqrt(skv)/((7*kb)*(7*kb)*skv+x*x*y*y)
176 + y*(1.-x*x/skv)*9*kb*TMath::Sqrt(skv)/((9*kb)*(9*kb)*skv+x*x*y*y);
178 Float_t grad = ka*gradient/TMath::TwoPi();
183 Float_t AliPHOSRecCpvManager::GradY(Float_t x, Float_t y)
185 // Put a comment here
187 const Float_t ka = 1.0;
188 const Float_t kb = 0.70;
190 Float_t skv = kb*kb + x*x + y*y;
191 Float_t gradient = x*(1.-y*y/skv)* kb*TMath::Sqrt(skv)/( kb*kb*skv+x*x*y*y)
192 - x*(1.-y*y/skv)*3*kb*TMath::Sqrt(skv)/((3*kb)*(3*kb)*skv+x*x*y*y)
193 + x*(1.-y*y/skv)*5*kb*TMath::Sqrt(skv)/((5*kb)*(5*kb)*skv+x*x*y*y)
194 - x*(1.-y*y/skv)*7*kb*TMath::Sqrt(skv)/((7*kb)*(7*kb)*skv+x*x*y*y)
195 + x*(1.-y*y/skv)*9*kb*TMath::Sqrt(skv)/((9*kb)*(9*kb)*skv+x*x*y*y);
197 Float_t grad = ka*gradient/TMath::TwoPi();