00001
00008 #include "variousFunctions.h"
00009 #include <math.h>
00010 #include <valarray>
00011 #include <iostream>
00012 #include <sstream>
00013
00014 using namespace std;
00015
00016 namespace VF {
00017
00019 double G(double x) {
00020
00021 return cos(x)*sin(x)*(1.3802-0.3198*(sin(x) + pow(sin(x), 0.5)));
00022 }
00027 double B (double Lparam) {
00028 return 0.31/pow(Lparam, 3);
00029 }
00030
00032 double Df (double L, double Kp) {
00033 return pow(10, 0.506*Kp-9.325)*pow(L,10);
00034 }
00035
00039 double pfunc(double K) {
00040 return sqrt( pow( K / VC::mc2 + 1, 2) - 1) * VC::mc2;
00041 }
00042
00046 double Kfunc(double pc) {
00047 return ( sqrt( 1.0 + pow( pc / VC::mc2, 2) ) - 1) * VC::mc2;
00048 }
00049
00051 double bounce_time(double E, double L) {
00052 double E0=0.511;
00053 double E1=E/E0;
00054
00055 double alphalc=alc(L);
00056 double tau=0.117/4*L*(E1+1.)/sqrt(E1*(2.+E1))*(1.-0.4635*(pow(sin(alphalc),(3./4))));
00057 return tau;
00058 }
00059
00063 double J_L7 (double K, double x1, double y1, double x2, double y2) {
00064
00065
00066
00067
00068
00069
00070
00071
00072 double bcoef = log(y1/y2)/(x2-x1);
00073 double acoef = y2*exp(bcoef*x2);
00074 return acoef*exp(-bcoef*K);
00075 }
00076
00080 double J_L7_corrected (double K) {
00081 double x[10] = {1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 2e-1, 1e0, 3e0, 1e1, 2e1};
00082 double y[10] = {3e9, 2e7, 9e6, 3e5, 1e4, 2e3, 7e0, 3e-3, 1e-3, 1e-3};
00083
00084 unsigned i=0;
00085
00086 while (x[++i] < K && i < sizeof(x)/8-1);
00087 double result = J_L7 (K, x[i-1], y[i-1], x[i], y[i]);
00088 return result;
00089 }
00090
00094 double mu2pc (double L, double mu, double alpha) {
00095 return sqrt( mu * 2 * B(L) * VC::mc2 ) / sin(alpha);
00096
00097 }
00098
00102 double pc2mu (double L, double pc, double alpha) {
00103 return pow(pc, 2) * pow(sin(alpha), 2) / (B(L) * 2 * VC::mc2);
00104 }
00105
00106
00107
00108
00109
00110
00114 double Alpha2J (double L, double pc, double Alpha) {
00115 double a = 1;
00116 return 2.0 * 0.7405 * a * L * pc* pow(cos(Alpha), 2);
00117 }
00118
00123 double alc(double L) {
00124 return asin(pow(L, -1.5)*pow(4-3./L,-0.25));
00125 }
00126
00130 double f_interp(double E, double f1, double E1, double f2, double E2) {
00131 double a, b, f_epc;
00132 if (E < E1 || E > E2) {
00133 return -1;
00134 }
00135 if (f1 <= 0 || f2 <= 0) return 0;
00136 b = log(f2/f1)/(E1 - E2);
00137 a = f1/exp(-b*E1);
00138 f_epc = a * exp(-b*E);
00139 return f_epc;
00140 }
00141
00145 double mu_calc(double L, double pc, double Alpha) {
00146 return pow(pc,2)/VC::mc2 * pow(sin(Alpha),2) / (2 * B(L));
00147 }
00148
00152 double Jc_calc(double L, double pc, double Alpha) {
00153 return 2*pc*L*Y(Alpha);
00154 }
00155
00159 double Y_old(double alpha) {
00160 return 0.7405*(1 - pow(sin(alpha), 2));
00161 }
00162
00163
00167 double Y(double alpha) {
00168 double T0 = 1.3802;
00169 double T1 = 0.7405;
00170
00171 return 2.0*(1.0-sin(alpha))*T0 + (T0 - T1)*(sin(alpha)*log(sin(alpha)) + 2.0*sin(alpha) - 2.0*sqrt(sin(alpha)));
00172 }
00173
00177 double density(double L) {
00178 return pow(10, (-0.3145*L + 3.9043));
00179 }
00180
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00195 double max(double v1, double v2) {
00196 return (v1>v2)?v1:v2;
00197 }
00198
00200 string dtostr(double n) {
00201 std::ostringstream o;
00202 o << n;
00203 return o.str();
00204 }
00205
00206 }