30 #include "TClonesArray.h"
67 r=(*fEnergyDistribution)[
i].r;
68 sum+=(*fEnergyDistribution)[
i].deposited_energy*r*
r;
82 sum+=(*fEnergyDistribution)[
i].deposited_energy*r*
r;
96 sum+=(*fEnergyDistribution)[
i].deposited_energy*r*
r;
107 if ((m>n) || ((n-m)%2 != 0) || (n<0) || (m<0))
114 if ((n>20) || (R0<=5))
139 tmp=n2; n2=n1; n1=tmp;
147 n2 = n1; n1 =
i; n=tmp;
154 r = (*fEnergyDistribution)[
n].r;
155 redmoment+= r*r* (*fEnergyDistribution)[
n].deposited_energy;
157 Double_t e1 = (*fEnergyDistribution)[n1].deposited_energy;
158 Double_t e2 = (*fEnergyDistribution)[n2].deposited_energy;
160 Double_t lat = redmoment/(redmoment+r0*r0*(e1+e2));
169 TVector3 ClusDirection(cl.x(),cl.y(),cl.z());
170 ClusDirection *= 1.0/ClusDirection.Mag();
171 TVector3 theta_axis(ClusDirection.y(),-ClusDirection.x(),0.0);
172 theta_axis *= 1.0/theta_axis.Mag();
173 TVector3 phi_axis = theta_axis.Cross(ClusDirection);
176 std::vector<Int_t>::iterator current;
179 std::cout <<
"Dump of PndEmcCluster with CoG at (" << cl.x() <<
"," << cl.y()
180 <<
"," << cl.z() <<
")" << endl;
181 std::cout <<
"-------------------------------------------------------------"<< endl;
182 std::cout <<
" theta - axis : (" << theta_axis.x() <<
"," << theta_axis.y() <<
","
183 << theta_axis.z() <<
")" << endl;
184 std::cout <<
" phi - axis : (" << phi_axis.x() <<
"," << phi_axis.y() <<
","
185 << phi_axis.z() <<
")" << endl;
188 for (current=digiList.begin();current<digiList.end();++current){
189 clEdep = (*fEnergyDistribution)[
i];
192 std::cout <<
"Polar coords : (" << clEdep.
r <<
"," << clEdep.
phi <<
")" << endl;
196 for (
int j=0; j<=8; j++)
198 std::cout <<
"f[" << j <<
"](5) = " << (this->*
fFcn[j])(5.0) << endl;
201 std::cout <<
"--------------------------------------------------------------"<< endl;
246 int index = (n/2)*(n/2)+(n/2)+m;
249 r = (*fEnergyDistribution)[
i].r / R0;
252 ph = ((*fEnergyDistribution)[
i]).
phi;
253 e = (*fEnergyDistribution)[
i].deposited_energy;
254 Re = Re + e/TotalEnergy * (this->*
fFcn[index])(r) *
cos( (
Double_t) m * ph);
255 Im = Im - e/TotalEnergy * (this->*
fFcn[index])(r) *
sin( (
Double_t) m * ph);
258 result =
sqrt(Re*Re+Im*Im);
270 r = (*fEnergyDistribution)[
i].r / R0;
273 ph = ((*fEnergyDistribution)[
i]).
phi;
274 e = (*fEnergyDistribution)[
i].deposited_energy;
276 for (
int s=0;
s<=(n-
m)/2;
s++) {
283 Re = Re + e/TotalEnergy * f_nm *
cos( (
Double_t) m*ph);
284 Im = Im - e/TotalEnergy * f_nm *
sin( (
Double_t) m*ph);
287 result =
sqrt(Re*Re+Im*Im);
296 for (
int i=2;
i<=
n;
i++)
318 TVector3 ClusDirection(cl.x(),cl.y(),cl.z());
319 ClusDirection *= 1.0/ClusDirection.Mag();
320 TVector3 theta_axis(ClusDirection.y(),-ClusDirection.x(),0.0);
321 theta_axis *= 1.0/theta_axis.Mag();
322 TVector3 phi_axis = theta_axis.Cross(ClusDirection);
325 std::vector<Int_t>::iterator current;
333 for (current=digiList.begin();current<digiList.end();++current)
338 TVector3 diff = digi->
where() - cl;
339 TVector3 DigiVect = diff - diff.Dot(ClusDirection) * ClusDirection;
340 clEdep.
r = DigiVect.Mag() / rescaleFactor;
341 clEdep.
phi = DigiVect.Angle(theta_axis);
342 if (DigiVect.Dot(phi_axis)<0)
344 clEdep.
phi = 2*M_PI - clEdep.
phi;
347 (*fEnergyDistribution)[
i] = clEdep;
Double_t f00(Double_t r) const
friend F32vec4 cos(const F32vec4 &a)
std::vector< PndEmcClEnergyDeposition > * fEnergyDistribution
Double_t f55(Double_t r) const
virtual Double_t GetEnergy() const
represents the reconstructed hit of one emc crystal
friend F32vec4 sqrt(const F32vec4 &a)
virtual Double_t Lat() const
Double_t f33(Double_t r) const
friend F32vec4 sin(const F32vec4 &a)
virtual ~PndEmcXClMoments()
const std::vector< Int_t > & DigiList() const
virtual Double_t SecondMoment() const
virtual Double_t AbsZernikeMoment(int n, int m, Double_t R0=15) const
virtual Double_t SecondMomentTheta() const
Double_t f31(Double_t r) const
Double_t f40(Double_t r) const
static Double_t getRescaleFactor()
Double_t Fast_AbsZernikeMoment(int n, int m, Double_t R0) const
const PndEmcCluster & MyCluster() const
Double_t f44(Double_t r) const
Double_t f53(Double_t r) const
basic_ostream< char, char_traits< char > > ostream
virtual const PndEmcDigi * Maxima(const TClonesArray *digiArray) const
Double_t f20(Double_t r) const
a cluster (group of neighboring crystals) of hit emc crystals
const TClonesArray * DigiArray() const
Double_t f22(Double_t r) const
Double_t(PndEmcXClMoments::* fFcn[12])(Double_t) const
Double_t Fak(int n) const
Double_t f42(Double_t r) const
Double_t f11(Double_t r) const
virtual Double_t energy() const
Double_t Calc_AbsZernikeMoment(int n, int m, Double_t R0) const
const TVector3 & where() const
virtual void Print(const Option_t *opt="") const
virtual void Print(const Option_t *opt="") const
Double_t f51(Double_t r) const
Double_t deposited_energy
virtual Double_t SecondMomentPhi() const