11 #include <utl/ErrorLogger.h>
12 #include <utl/AugerUnits.h>
28 " Azimuthal asymmetry: " << (fAsymmetry ?
"On" :
"Off");
46 if (theta < GetThetaMin()) theta = GetThetaMin();
47 else if (theta > GetThetaMax()) theta = GetThetaMax();
55 double xShower, yShower;
62 xp = cos(phi)*x + sin(phi)*y;
63 yp =-sin(phi)*x + cos(phi)*y;
67 xShower = cos(theta)*xp - sin(theta)*zp;
73 double azi = atan2(yShower,xShower);
74 double azideg = azi*TMath::RadToDeg();
77 double r =
sqrt(xShower*xShower + yShower*yShower);
79 double rlog = log10(r);
80 const double rlogup=3.7;
84 meanratio=ffitnearEm(rlog,theta)/ffitnearMu(rlog,theta);
85 else if (2<=rlog && rlog<rlogup)
86 meanratio=ffitEm(rlog,theta)/ffitMu(rlog,theta);
88 meanratio=ffitEm(rlogup,theta)/ffitMu(rlogup,theta);
97 asym = ratioasym(rlog,th,azideg);
99 asym = ratioasym(rlogup,th,azideg);
103 double ratio = meanratio*(1+asym);
113 double costh=cos(theta);
116 double A1 = 2.398568e+00;
117 double A2 = 6.620959e+01;
118 double A3 = 1.371171e+02;
119 double A4 = -1.482223e+02;
120 double A = A1 + (A2*costh) + (A3*
pow(costh,2.)) + (A4*
pow(costh,3.));
124 double C1 = 6.364131e-01;
125 double C2 = 5.880061e-01;
126 double C3 = 4.025384e-03;
127 double C = C1 + (C2*costh) + (C3*
pow(costh,2.));
129 double D1 = 4.299209e+00;
130 double D2 = 5.668097e+00;
131 double D3 = -1.345011e+01;
132 double D4 = 1.195753e+01;
133 double D = D1 + (D2*costh) + (D3*
pow(costh,2.)) + (D4*
pow(costh,3.));
137 double E1 = -6.214005e-03;
138 double E2 = 1.735574e-02;
139 double E3 = 3.047811e-02;
140 double E4 = -3.364831e-01;
141 double E5 = 3.505095e-01;
142 double E = E1 + (E2*costh) + (E3*
pow(costh,2.))+ (E4*
pow(costh,3.))+ (E5*
pow(costh,4.));
150 double fmu= A *
pow(t1,-C)*
pow(t2,-D) + E;
159 double costh=cos(theta);
162 double thetathr1 = 70.*TMath::DegToRad();
163 double thetathr2 = 72.*TMath::DegToRad();
165 double A1,A2,A3,A4,A;
167 double D1,D2,D3,D4,D;
188 D = D1 + (D2*costh)+ (D3*
pow(costh,2.)) +(D4*
pow(costh,3.));
204 A = A1 + (A2*costh)+ (A3*
pow(costh,2.)) + (A4*
pow(costh,3.));
212 C = C1 + (C2*costh)+ (C3*
pow(costh,2.));
220 A = A1 + (A2*costh)+ (A3*
pow(costh,2.));
230 double t2= 1 +(xx/B);
232 double fem=A *
pow(t1,-C)*
pow(t2,-D) + E;
241 double costh=cos(theta);
245 double A1 = 2.658940e+02;
246 double A2 = 7.586829e+03;
247 double A3 = 3.467820e+04;
248 double A4 = 5.973019e+03;
249 double A5 = 5.735970e+04;
250 double A = A1 + (A2*costh) + (A3*
pow(costh,2.)) + (A4*
pow(costh,3.))+ (A5*
pow(costh,4.));
255 double d=
pow(10.,ld);
256 double fgeneral=ffitMu(ld,theta);
257 double fact=
pow(d,-B);
258 double denom=fgeneral/(A*fact);
259 double C = -d/log(denom);
266 double fmu2 = A*
pow(t1,-B)*exp(t2);
277 double costh=cos(theta);
278 double thetathr = 72.*TMath::DegToRad();
281 double B1,B2,B3,B4,B;
284 if (theta < thetathr)
290 B = B1 + (B2*costh) + (B3*
pow(costh,2.)) + (B4*
pow(costh,3.));
301 double d=
pow(10.,ld);
302 double fgeneral=ffitEm(ld,theta);
303 double fact1=
pow(d,-B);
304 double fact2=exp(-d/C);
306 double A = fgeneral/(fact1*fact2);
312 double fem2 = A*
pow(t1,-B)*exp(t2);
325 double xx=
pow(10.,r);
328 double phirad = phi*TMath::DegToRad();
330 if (phi>180.) phi = phi-360.;
334 double p0b = -30.1068;
336 double p0 = p0a + (p0b*theta);
340 double p1b = 21.3549;
341 double p1c = 11.1303;
342 double var = (90.-theta-p1b)/
sqrt(p1c);
343 double p1 =p1a*(1-TMath::Erfc(var));
346 double p2a =0.0526881;
347 double p2b =-0.00175893;
348 double p2c =1.52561e-05;
349 double p2 = p2a + (p2b*theta)+ (p2c*theta*theta);
353 double p3 = 0.492845;
354 double p4 = -0.281903;
357 double Norm = p0*((1./TMath::Pi())*(p1/(
pow(phi,2)+
pow(p1,2)))-p2);
359 double B = p3 *cos(p4*phirad);
361 double A = Norm /
pow(xxc,B);
364 double asy = A*
pow(xx,B);
virtual double SignalRatio(double x, double y, double rmu, double theta, double phi)
double ffitnearMu(double r, double theta) const
#define INFO(message)
Macro for logging informational messages.
double ffitMu(double r, double theta) const
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
double pow(const double x, const unsigned int i)
Class representing a document branch.
double ffitEm(double r, double theta) const
void GetData(bool &b) const
Overloads of the GetData member template function.
double ffitnearEm(double r, double theta) const
double ratioasym(double r, double theta, double phi) const
EMComponentIVR(utl::Branch branch)
virtual ~EMComponentIVR()