Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

glande.cpp

Go to the documentation of this file.
00001 /* glande.f -- translated by f2c (version 19950105).
00002    You must link the resulting object file with the libraries:
00003         -lf2c -lm   (in that order)
00004 */
00005 
00006 #ifdef __cplusplus
00007 extern "C" {
00008 #endif
00009 #include "../gheisha_f2c/f2c.h"
00010 
00011 doublereal glande_(real *x)
00012 {
00013     /* Initialized data */
00014 
00015     static real p1[5] = { (float).4259894875,(float)-.124976255,(float)
00016             .039842437,(float)-.006298287635,(float).001511162253 };
00017     static real q5[5] = { (float)1.,(float)156.9424537,(float)3745.310488,(
00018             float)9834.698876,(float)66924.28357 };
00019     static real p6[5] = { (float)1.000827619,(float)664.9143136,(float)
00020             62972.92665,(float)475554.6998,(float)-5743609.109 };
00021     static real q6[5] = { (float)1.,(float)651.4101098,(float)56974.73333,(
00022             float)165917.4725,(float)-2815759.939 };
00023     static real a1[3] = { (float).04166666667,(float)-.01996527778,(float)
00024             .02709538966 };
00025     static real a2[2] = { (float)-1.84556867,(float)-4.284640743 };
00026     static real q1[5] = { (float)1.,(float)-.3388260629,(float).09594393323,(
00027             float)-.01608042283,(float).003778942063 };
00028     static real p2[5] = { (float).1788541609,(float).1173957403,(float)
00029             .01488850518,(float)-.001394989411,(float)1.283617211e-4 };
00030     static real q2[5] = { (float)1.,(float).7428795082,(float).3153932961,(
00031             float).06694219548,(float).008790609714 };
00032     static real p3[5] = { (float).1788544503,(float).09359161662,(float)
00033             .006325387654,(float)6.611667319e-5,(float)-2.031049101e-6 };
00034     static real q3[5] = { (float)1.,(float).6097809921,(float).2560616665,(
00035             float).04746722384,(float).006957301675 };
00036     static real p4[5] = { (float).9874054407,(float)118.6723273,(float)
00037             849.279436,(float)-743.7792444,(float)427.0262186 };
00038     static real q4[5] = { (float)1.,(float)106.8615961,(float)337.6496214,(
00039             float)2016.712389,(float)1597.063511 };
00040     static real p5[5] = { (float)1.003675074,(float)167.5702434,(float)
00041             4789.711289,(float)21217.86767,(float)-22324.9491 };
00042 
00043     /* System generated locals */
00044     real ret_val, r__1;
00045 
00046     /* Builtin functions */
00047     double exp(doublereal), sqrt(doublereal), log(doublereal);
00048 
00049     /* Local variables */
00050     static real u, v;
00051 
00052 /* . */
00053 /* .    ******************************************************************
00054  */
00055 /* .    *                                                                *
00056  */
00057 /* .    *  Copy of the CERN library routine DENLAN (G110)                *
00058  */
00059 /* .    *                                                                *
00060  */
00061 /* .    ******************************************************************
00062  */
00063 /* . */
00064 
00065 
00066 
00067 
00068 
00069 
00070 
00071 
00072 
00073     v = *x;
00074     if (v < (float)-5.5) {
00075         u = exp(v + (float)1.);
00076         ret_val = exp((float)-1. / u) / sqrt(u) * (float).3989422803 * ((a1[0]
00077                  + (a1[1] + a1[2] * u) * u) * u + (float)1.);
00078     } else if (v < (float)-1.) {
00079         u = exp(-(doublereal)v - (float)1.);
00080         ret_val = exp(-(doublereal)u) * sqrt(u) * (p1[0] + (p1[1] + (p1[2] + (
00081                 p1[3] + p1[4] * v) * v) * v) * v) / (q1[0] + (q1[1] + (q1[2] 
00082                 + (q1[3] + q1[4] * v) * v) * v) * v);
00083     } else if (v < (float)1.) {
00084         ret_val = (p2[0] + (p2[1] + (p2[2] + (p2[3] + p2[4] * v) * v) * v) * 
00085                 v) / (q2[0] + (q2[1] + (q2[2] + (q2[3] + q2[4] * v) * v) * v) 
00086                 * v);
00087     } else if (v < (float)5.) {
00088         ret_val = (p3[0] + (p3[1] + (p3[2] + (p3[3] + p3[4] * v) * v) * v) * 
00089                 v) / (q3[0] + (q3[1] + (q3[2] + (q3[3] + q3[4] * v) * v) * v) 
00090                 * v);
00091     } else if (v < (float)12.) {
00092         u = (float)1. / v;
00093 /* Computing 2nd power */
00094         r__1 = u;
00095         ret_val = r__1 * r__1 * (p4[0] + (p4[1] + (p4[2] + (p4[3] + p4[4] * u)
00096                  * u) * u) * u) / (q4[0] + (q4[1] + (q4[2] + (q4[3] + q4[4] * 
00097                 u) * u) * u) * u);
00098     } else if (v < (float)50.) {
00099         u = (float)1. / v;
00100 /* Computing 2nd power */
00101         r__1 = u;
00102         ret_val = r__1 * r__1 * (p5[0] + (p5[1] + (p5[2] + (p5[3] + p5[4] * u)
00103                  * u) * u) * u) / (q5[0] + (q5[1] + (q5[2] + (q5[3] + q5[4] * 
00104                 u) * u) * u) * u);
00105     } else if (v < (float)300.) {
00106         u = (float)1. / v;
00107 /* Computing 2nd power */
00108         r__1 = u;
00109         ret_val = r__1 * r__1 * (p6[0] + (p6[1] + (p6[2] + (p6[3] + p6[4] * u)
00110                  * u) * u) * u) / (q6[0] + (q6[1] + (q6[2] + (q6[3] + q6[4] * 
00111                 u) * u) * u) * u);
00112     } else {
00113         u = (float)1. / (v - v * log(v) / (v + (float)1.));
00114 /* Computing 2nd power */
00115         r__1 = u;
00116         ret_val = r__1 * r__1 * ((a2[0] + a2[1] * u) * u + (float)1.);
00117     }
00118     return ret_val;
00119 } /* glande_ */
00120 
00121 /* ** */
00122 /* Subroutine */ int glandg_(real *yran)
00123 {
00124     /* Initialized data */
00125 
00126     static real xcum1[100] = { (float)-2.57,(float)-2.15412,(float)-1.94167,(
00127             float)-1.79583,(float)-1.67975,(float)-1.5809,(float)-1.49341,(
00128             float)-1.41397,(float)-1.34057,(float)-1.27185,(float)-1.20686,(
00129             float)-1.1449,(float)-1.08545,(float)-1.02809,(float)-.97249,(
00130             float)-.91839,(float)-.86557,(float)-.81386,(float)-.76308,(float)
00131             -.71311,(float)-.66384,(float)-.61515,(float)-.56696,(float)
00132             -.51919,(float)-.47176,(float)-.42462,(float)-.37769,(float)
00133             -.33092,(float)-.28426,(float)-.23767,(float)-.19109,(float)
00134             -.14447,(float)-.09779,(float)-.051,(float)-.00405,(float).04308,(
00135             float).09044,(float).13806,(float).18598,(float).23423,(float)
00136             .28285,(float).33187,(float).38134,(float).43128,(float).48174,(
00137             float).53275,(float).58435,(float).63658,(float).68948,(float)
00138             .74309,(float).79746,(float).85263,(float).90865,(float).96556,(
00139             float)1.02342,(float)1.08228,(float)1.14219,(float)1.20322,(float)
00140             1.26542,(float)1.32887,(float)1.39362,(float)1.45976,(float)
00141             1.52736,(float)1.5965,(float)1.66727,(float)1.73976,(float)
00142             1.81407,(float)1.89032,(float)1.9686,(float)2.04905,(float)2.1318,
00143             (float)2.21699,(float)2.30477,(float)2.39531,(float)2.48878,(
00144             float)2.5854,(float)2.68535,(float)2.78889,(float)2.89626,(float)
00145             3.00775,(float)3.12364,(float)3.24429,(float)3.37005,(float)
00146             3.50136,(float)3.63866,(float)3.78246,(float)3.93334,(float)
00147             4.09194,(float)4.259,(float)4.43533,(float)4.62186,(float)4.8196,(
00148             float)5.02974,(float)5.25368,(float)5.49312,(float)5.74987,(float)
00149             6.02605,(float)6.32428,(float)6.64773,(float)7. };
00150     static real xcum2[100] = { (float)5.5,(float)5.5612,(float)5.62347,(float)
00151             5.68684,(float)5.75133,(float)5.81699,(float)5.88383,(float)
00152             5.95191,(float)6.02125,(float)6.0919,(float)6.16391,(float)
00153             6.23732,(float)6.31219,(float)6.38855,(float)6.46646,(float)
00154             6.54597,(float)6.62712,(float)6.70998,(float)6.7946,(float)
00155             6.88103,(float)6.96935,(float)7.05962,(float)7.15192,(float)
00156             7.24633,(float)7.34294,(float)7.44182,(float)7.54306,(float)
00157             7.64676,(float)7.753,(float)7.86188,(float)7.97351,(float)8.088,(
00158             float)8.20548,(float)8.3261,(float)8.44997,(float)8.57725,(float)
00159             8.70808,(float)8.84262,(float)8.98103,(float)9.12349,(float)
00160             9.27021,(float)9.42141,(float)9.5773,(float)9.73812,(float)9.9041,
00161             (float)10.07552,(float)10.25265,(float)10.43584,(float)10.6254,(
00162             float)10.82169,(float)11.02508,(float)11.23598,(float)11.45487,(
00163             float)11.68222,(float)11.91855,(float)12.16441,(float)12.42045,(
00164             float)12.68734,(float)12.9658,(float)13.25663,(float)13.56075,(
00165             float)13.87912,(float)14.2128,(float)14.56296,(float)14.93088,(
00166             float)15.31799,(float)15.72593,(float)16.1565,(float)16.6117,(
00167             float)17.09378,(float)17.60523,(float)18.14884,(float)18.72792,(
00168             float)19.34622,(float)20.00796,(float)20.71792,(float)21.48176,(
00169             float)22.30618,(float)23.19862,(float)24.16809,(float)25.22547,(
00170             float)26.3832,(float)27.65658,(float)29.0649,(float)30.63048,(
00171             float)32.38211,(float)34.35555,(float)36.59607,(float)39.16212,(
00172             float)42.13195,(float)45.61204,(float)49.74758,(float)54.74189,(
00173             float)60.89935,(float)68.6737,(float)78.8148,(float)92.61047,(
00174             float)112.50807,(float)143.78539,(float)200. };
00175 
00176     /* System generated locals */
00177     real r__1;
00178 
00179     /* Builtin functions */
00180     double log(doublereal), sqrt(doublereal);
00181 
00182     /* Local variables */
00183     extern doublereal rndm_(real *);
00184     static real a, b;
00185     static integer j;
00186     static real p, q, x, q1, tabpo1, tabpo2, qq, yy;
00187     extern /* Subroutine */ int rannor_(real *, real *);
00188 
00189 /* . */
00190 /* .    ******************************************************************
00191  */
00192 /* .    *                                                                *
00193  */
00194 /* .    *  Copy of the CERN library routine GENLAN                       *
00195  */
00196 /* .    *  Generation of LANDAU-distributed random numbers by 4-point    *
00197  */
00198 /* .    *  interpolation in the previously-tabulated inverse cumulative  *
00199  */
00200 /* .    *  distribution                                                  *
00201  */
00202 /* .    *                                                                *
00203  */
00204 /* .    ******************************************************************
00205  */
00206 /* . */
00207 
00208 
00209 /* ====>  1ST TABLE OF INVERSE CUMULATIVE LANDAU POINTS. ( 0.0<P<0.833 ) 
00210 */
00211 
00212 /* ====>  2ND TABLE OF INVERSE CUMULATIVE LANDAU POINTS. ( 0.791<P<0.995 )
00213  */
00214 /* . */
00215 /* .    ------------------------------------------------------------------
00216  */
00217 /* . */
00218     rannor_(&q, &q1);
00219     x = rndm_(&q);
00220     if (x < (float).004) {
00221 
00222 /* *** Extreme left-hand tail */
00223         *yran = -(doublereal)sqrt((r__1 = log(x), dabs(r__1)));
00224 
00225     } else if (x <= (float).807069) {
00226 
00227 /* *** 4-point interpolation in the first cumulative table */
00228         tabpo1 = (x + (float)0.) * (float)118.836;
00229         j = tabpo1 + 1;
00230         j = max(j,2);
00231         j = min(j,98);
00232         p = tabpo1 - (j - 1);
00233         a = (p + (float)1.) * xcum1[j + 1] - (p - (float)2.) * xcum1[j - 2];
00234         b = (p - (float)1.) * xcum1[j - 1] - p * xcum1[j];
00235         *yran = a * p * (p - (float)1.) * (float).16666667 + b * (p + (float)
00236                 1.) * (p - (float)2.) * (float).5;
00237 
00238     } else if (x <= (float).994869) {
00239 
00240 /* *** 4-point interpolation in the first cumulative table */
00241         tabpo2 = (x - (float).79124) * (float)486.178;
00242         j = tabpo2 + 1;
00243         j = max(j,2);
00244         j = min(j,98);
00245         p = tabpo2 - (j - 1);
00246         a = (p + (float)1.) * xcum2[j + 1] - (p - (float)2.) * xcum2[j - 2];
00247         b = (p - (float)1.) * xcum2[j - 1] - p * xcum2[j];
00248         *yran = a * p * (p - (float)1.) * (float).16666667 + b * (p + (float)
00249                 1.) * (p - (float)2.) * (float).5;
00250 
00251     } else {
00252 
00253 /* *** 1/x**2 sampling for extreme Landau tail */
00254         yy = rndm_(&qq);
00255         *yran = (float)200. / yy;
00256 
00257     }
00258     return 0;
00259 } /* glandg_ */
00260 
00261 /* ** */
00262 doublereal glands_(real *x)
00263 {
00264     /* Initialized data */
00265 
00266     static real p1[5] = { (float).2514091491,(float)-.06250580444,(float)
00267             .0145838123,(float)-.002108817737,(float)7.41124729e-4 };
00268     static real q1[5] = { (float)1.,(float)-.005571175625,(float).06225310236,
00269             (float)-.003137378427,(float).001931496439 };
00270     static real p2[4] = { (float).2868328584,(float).3564363231,(float)
00271             .1523518695,(float).02251304883 };
00272     static real q2[4] = { (float)1.,(float).6191136137,(float).1720721448,(
00273             float).02278594771 };
00274     static real p3[4] = { (float).2868329066,(float).3003828436,(float)
00275             .09950951941,(float).008733827185 };
00276     static real q3[4] = { (float)1.,(float).4237190502,(float).1095631512,(
00277             float).008693851567 };
00278     static real p4[4] = { (float)1.00035163,(float)4.503592498,(float)
00279             10.8588388,(float)7.536052269 };
00280     static real q4[4] = { (float)1.,(float)5.539969678,(float)19.33581111,(
00281             float)27.21321508 };
00282     static real p5[4] = { (float)1.000006517,(float)49.09414111,(float)
00283             85.05544753,(float)153.2153455 };
00284     static real q5[4] = { (float)1.,(float)50.09928881,(float)139.9819104,(
00285             float)420.0002909 };
00286     static real p6[4] = { (float)1.000000983,(float)132.9868456,(float)
00287             916.2149244,(float)-960.5054274 };
00288     static real q6[4] = { (float)1.,(float)133.9887843,(float)1055.990413,(
00289             float)553.2224619 };
00290     static real a1[3] = { (float)-.4583333333,(float).6675347222,(float)
00291             -1.641741416 };
00292     static real a2[3] = { (float)1.,(float)-.4227843351,(float)-2.043403138 };
00293 
00294     /* System generated locals */
00295     real ret_val;
00296 
00297     /* Builtin functions */
00298     double exp(doublereal), sqrt(doublereal), log(doublereal);
00299 
00300     /* Local variables */
00301     static real u, v;
00302 
00303 /* . */
00304 /* .    ******************************************************************
00305  */
00306 /* .    *                                                                *
00307  */
00308 /* .    *  Copy of the CERN library routine DSTLAN (G110)                *
00309  */
00310 /* .    *                                                                *
00311  */
00312 /* .    ******************************************************************
00313  */
00314 /* . */
00315 
00316 
00317 
00318 
00319 
00320 
00321 
00322 
00323 
00324     v = *x;
00325     if (v < (float)-5.5) {
00326         u = exp(v + (float)1.);
00327         ret_val = exp((float)-1. / u) * (float).3989422803 * sqrt(u) * ((a1[0]
00328                  + (a1[1] + a1[2] * u) * u) * u + (float)1.);
00329     } else if (v < (float)-1.) {
00330         u = exp(-(doublereal)v - (float)1.);
00331         ret_val = exp(-(doublereal)u) / sqrt(u) * (p1[0] + (p1[1] + (p1[2] + (
00332                 p1[3] + p1[4] * v) * v) * v) * v) / (q1[0] + (q1[1] + (q1[2] 
00333                 + (q1[3] + q1[4] * v) * v) * v) * v);
00334     } else if (v < (float)1.) {
00335         ret_val = (p2[0] + (p2[1] + (p2[2] + p2[3] * v) * v) * v) / (q2[0] + (
00336                 q2[1] + (q2[2] + q2[3] * v) * v) * v);
00337     } else if (v < (float)4.) {
00338         ret_val = (p3[0] + (p3[1] + (p3[2] + p3[3] * v) * v) * v) / (q3[0] + (
00339                 q3[1] + (q3[2] + q3[3] * v) * v) * v);
00340     } else if (v < (float)12.) {
00341         u = (float)1. / v;
00342         ret_val = (p4[0] + (p4[1] + (p4[2] + p4[3] * u) * u) * u) / (q4[0] + (
00343                 q4[1] + (q4[2] + q4[3] * u) * u) * u);
00344     } else if (v < (float)50.) {
00345         u = (float)1. / v;
00346         ret_val = (p5[0] + (p5[1] + (p5[2] + p5[3] * u) * u) * u) / (q5[0] + (
00347                 q5[1] + (q5[2] + q5[3] * u) * u) * u);
00348     } else if (v < (float)300.) {
00349         u = (float)1. / v;
00350         ret_val = (p6[0] + (p6[1] + (p6[2] + p6[3] * u) * u) * u) / (q6[0] + (
00351                 q6[1] + (q6[2] + q6[3] * u) * u) * u);
00352     } else {
00353         u = (float)1. / (v - v * log(v) / (v + (float)1.));
00354         ret_val = (float)1. - (a2[0] + (a2[1] + a2[2] * u) * u) * u;
00355     }
00356     return ret_val;
00357 } /* glands_ */
00358 
00359 /* ** */
00360 doublereal gvaviv_(real *rkappa, real *beta2, real *ran)
00361 {
00362     /* Initialized data */
00363 
00364     static real fninv[5] = { (float)1.,(float).5,(float).33333333,(float).25,(
00365             float).2 };
00366     static real edgec[6] = { (float).16666667,(float).041666667,(float)
00367             .0083333333,(float).013888889,(float).0069444444,(float)
00368             7.7160493e-4 };
00369     static real u1[13] = { (float).25850868,(float).032477982,(float)
00370             -.0059020496,(float)0.,(float).024880692,(float).0047404356,(
00371             float)-7.444513e-4,(float).0073225731,(float)0.,(float)
00372             .0011668284,(float)0.,(float)-.0015727318,(float)-.0011210142 };
00373     static real u2[13] = { (float).43142611,(float).040797543,(float)
00374             -.0091490215,(float)0.,(float).042127077,(float).0073167928,(
00375             float)-.0014026047,(float).016195241,(float).0024714789,(float)
00376             .0020751278,(float)0.,(float)-.0025141668,(float)-.0014064022 };
00377     static real u3[13] = { (float).25225955,(float).064820468,(float)
00378             -.023615759,(float)0.,(float).023834176,(float).0021624675,(float)
00379             -.0026865597,(float)-.0054891384,(float).0039800522,(float)
00380             .0048447456,(float)-.0089439554,(float)-.0062756944,(float)
00381             -.0024655436 };
00382     static real u4[12] = { (float)1.2593231,(float)-.20374501,(float)
00383             .095055662,(float)-.020771531,(float)-.04686518,(float)
00384             -.0077222986,(float).0032241039,(float).008988292,(float)
00385             -.0067167236,(float)-.013049241,(float).018786468,(float)
00386             .014484097 };
00387     static real u5[13] = { (float)-.024864376,(float)-.0010368495,(float)
00388             .0014330117,(float)2.005273e-4,(float).0018751903,(float)
00389             .0012668869,(float)4.8736023e-4,(float).0034850854,(float)0.,(
00390             float)-3.6597173e-4,(float).0019372124,(float)7.0761825e-4,(float)
00391             4.6898375e-4 };
00392     static real u6[13] = { (float).035855696,(float)-.027542114,(float)
00393             .012631023,(float)-.0030188807,(float)-8.4479939e-4,(float)0.,(
00394             float)4.5675843e-4,(float)-.0069836141,(float).0039876546,(float)
00395             -.0036055679,(float)0.,(float).0015298434,(float).0019247256 };
00396     static real u7[8] = { (float)10.234691,(float)-3.5619655,(float).69387764,
00397             (float)-.14047599,(float)-1.995239,(float)-.45679694,(float)0.,(
00398             float).50505298 };
00399     static real u8[13] = { (float)21.487518,(float)-11.825253,(float)
00400             4.3133087,(float)-1.4500543,(float)-3.4343169,(float)-1.1063164,(
00401             float)-.21000819,(float)1.7891643,(float)-.89601916,(float)
00402             .39120793,(float).73410606,(float)0.,(float)-.32454506 };
00403     static real v1[12] = { (float).27827257,(float)-.0014227603,(float)
00404             .0024848327,(float)0.,(float).045091424,(float).0080559636,(float)
00405             -.0038974523,(float)0.,(float)-.0030634124,(float)7.5633702e-4,(
00406             float).0054730726,(float).0019792507 };
00407     static real v2[12] = { (float).41421789,(float)-.030061649,(float)
00408             .0052249697,(float)0.,(float).12693873,(float).022999801,(float)
00409             -.0086792801,(float).031875584,(float)-.0061757928,(float)0.,(
00410             float).019716857,(float).0032596742 };
00411     static real v3[13] = { (float).20191056,(float)-.046831422,(float)
00412             .0096777473,(float)-.0017995317,(float).053921588,(float)
00413             .003506874,(float)-.012621494,(float)-.0054996531,(float)
00414             -.0090029985,(float).0034958743,(float).018513506,(float)
00415             .0068332334,(float)-.0012940502 };
00416     static real v4[12] = { (float)1.3206081,(float).10036618,(float)
00417             -.022015201,(float).0061667091,(float)-.14986093,(float)
00418             -.012720568,(float).024972042,(float)-.0097751962,(float)
00419             .026087455,(float)-.011399062,(float)-.048282515,(float)
00420             -.0098552378 };
00421     static real v5[13] = { (float).016435243,(float).0360514,(float)
00422             .002303652,(float)-6.1666343e-4,(float)-.010775802,(float)
00423             .0051476061,(float).0056856517,(float)-.013438433,(float)0.,(
00424             float)0.,(float)-.0025421507,(float).0020169108,(float)
00425             -.0015144931 };
00426     static real v6[13] = { (float).033432405,(float).0060583916,(float)
00427             -.0023381379,(float)8.3846081e-4,(float)-.013346861,(float)
00428             -.0017402116,(float).0021052496,(float).0015528195,(float)
00429             .002190067,(float)-.0013202847,(float)-.0045124157,(float)
00430             -.0015629454,(float)2.2499176e-4 };
00431     static real v7[11] = { (float)5.4529572,(float)-.90906096,(float)
00432             .086122438,(float)0.,(float)-1.2218009,(float)-.3232412,(float)
00433             -.027373591,(float).12173464,(float)0.,(float)0.,(float)
00434             .040917471 };
00435     static real v8[11] = { (float)9.3841352,(float)-1.6276904,(float)
00436             .16571423,(float)0.,(float)-1.8160479,(float)-.50919193,(float)
00437             -.051384654,(float).21413992,(float)0.,(float)0.,(float)
00438             .066596366 };
00439     static real w1[13] = { (float).29712951,(float).0097572934,(float)0.,(
00440             float)-.0015291686,(float).035707399,(float).0096221631,(float)
00441             -.0018402821,(float)-.0049821585,(float).0018831112,(float)
00442             .0043541673,(float).0020301312,(float)-.0018723311,(float)
00443             -7.3403108e-4 };
00444     static real w2[11] = { (float).40882635,(float).014474912,(float)
00445             .0025023704,(float)-.0037707379,(float).18719727,(float)
00446             .056954987,(float)0.,(float).023020158,(float).0050574313,(float)
00447             .009455014,(float).019300232 };
00448     static real w3[13] = { (float).16861629,(float)0.,(float).0036317285,(
00449             float)-.0043657818,(float).030144338,(float).013891826,(float)
00450             -.0058030495,(float)-.0038717547,(float).0085359607,(float)
00451             .014507659,(float).0082387775,(float)-.010116105,(float)
00452             -.005513567 };
00453     static real w4[13] = { (float)1.3493891,(float)-.0026863185,(float)
00454             -.003521604,(float).024434909,(float)-.083447911,(float)
00455             -.04806136,(float).0076473951,(float).02449443,(float)-.0162092,(
00456             float)-.037768479,(float)-.047890063,(float).017778596,(float)
00457             .013179324 };
00458     static real w5[13] = { (float).10264945,(float).032738857,(float)0.,(
00459             float).0043608779,(float)-.043097757,(float)-.0022647176,(float)
00460             .009453129,(float)-.012442571,(float)-.0032283517,(float)
00461             -.0075640352,(float)-.0088293329,(float).0052537299,(float)
00462             .0013340546 };
00463     static real w6[13] = { (float).029568177,(float)-.001630006,(float)
00464             -2.1119745e-4,(float).0023599053,(float)-.0048515387,(float)
00465             -.0040797531,(float)4.0403265e-4,(float).0018200105,(float)
00466             -.0014346306,(float)-.0039165276,(float)-.0037432073,(float)
00467             .001995038,(float).0012222675 };
00468     static real w8[8] = { (float)6.6184645,(float)-.73866379,(float)
00469             .044693973,(float)0.,(float)-1.4540925,(float)-.39529833,(float)
00470             -.044293243,(float).088741049 };
00471 
00472     /* System generated locals */
00473     integer i__1;
00474     real ret_val, r__1;
00475 
00476     /* Builtin functions */
00477     double sqrt(doublereal), log(doublereal), exp(doublereal);
00478 
00479     /* Local variables */
00480     static real alfa[4], rlam, h[9];
00481     static integer j, k, n;
00482     static real s, t, x, y, dsigm[5];
00483     static integer itype;
00484     static real p2, p3, q2, q3, x2, x3, y2, ac[13], y3, s0, hc[9], fl, fn;
00485     extern doublereal glande_(real *);
00486     static real fu, pq, wk;
00487     extern doublereal glands_(real *);
00488     static real xx, xy, yy, drk[5];
00489     static integer npt;
00490 
00491 /* . */
00492 /* .    ******************************************************************
00493  */
00494 /* .    *                                                                *
00495  */
00496 /* .    *                                                                *
00497  */
00498 /* .    *  GVAVIV                                                        *
00499  */
00500 /* .    *  ------                                                        *
00501  */
00502 /* .    *                                                                *
00503  */
00504 /* .    *  Initializes the parameters for a Vavilov distribution         *
00505  */
00506 /* .    *                                                                *
00507  */
00508 /* .    *  BETA2 is the particle velocity squared                        *
00509  */
00510 /* .    *  RKAPPA the usual straggling parameter                         *
00511  */
00512 /* .    *                                                                *
00513  */
00514 /* .    *  This routine has been extracted from a proposed CERNLIB       *
00515  */
00516 /* .    *  set of routines (VAVCOE,VAVFSM).                              *
00517  */
00518 /* .    *  The authors of these routines have submitted an article       *
00519  */
00520 /* .    *  to NIM:                                                       *
00521  */
00522 /* .    *                                                                *
00523  */
00524 /* .    *    Alberto Rotondi, Paolo Montagna                             *
00525  */
00526 /* .    *    Fast calculation of Vavilov distribution NIMB 1990          *
00527  */
00528 /* .    *                                                                *
00529  */
00530 /* .    *       Author    K.S.Koelbig     ********                       *
00531  */
00532 /* .    *                                                                *
00533  */
00534 /* .    ******************************************************************
00535  */
00536 /* . */
00537     ret_val = (float)0.;
00538     if (*rkappa < (float).01 || *rkappa > (float)12.) {
00539         return ret_val;
00540     }
00541     if (*rkappa >= (float).29) {
00542         itype = 1;
00543         npt = 100;
00544         wk = 1 / sqrt(*rkappa);
00545         ac[0] = (*beta2 * (float)-.032227 - (float).074275) * *rkappa + (*
00546                 beta2 * (float).24533 + (float).070152) * wk + (*beta2 * (
00547                 float)-.5561 - (float)3.1579);
00548         ac[8] = (*beta2 * (float)-.013483 - (float).048801) * *rkappa + (*
00549                 beta2 * (float)-1.6921 + (float)8.3656) * wk + (*beta2 * (
00550                 float)-.73275 - (float)3.5226);
00551 /* Computing 2nd power */
00552         r__1 = wk;
00553         drk[0] = r__1 * r__1;
00554         dsigm[0] = sqrt(*rkappa / (1 - *beta2 * (float).5));
00555         for (j = 1; j <= 4; ++j) {
00556             drk[j] = drk[0] * drk[j - 1];
00557             dsigm[j] = dsigm[0] * dsigm[j - 1];
00558 /* L1: */
00559             alfa[j - 1] = (fninv[j - 1] - *beta2 * fninv[j]) * drk[j - 1];
00560         }
00561         hc[0] = log(*rkappa) + *beta2 + (float).42278434;
00562         hc[1] = dsigm[0];
00563         hc[2] = alfa[1] * dsigm[2];
00564 /* Computing 2nd power */
00565         r__1 = alfa[0];
00566         hc[3] = (r__1 * r__1 * 3 + alfa[2]) * dsigm[3] - 3;
00567         hc[4] = (alfa[0] * 10 * alfa[1] + alfa[3]) * dsigm[4] - hc[2] * 10;
00568 /* Computing 2nd power */
00569         r__1 = hc[2];
00570         hc[5] = r__1 * r__1;
00571         hc[6] = hc[2] * hc[3];
00572         hc[7] = hc[2] * hc[5];
00573         for (j = 2; j <= 7; ++j) {
00574 /* L2: */
00575             hc[j] = edgec[j - 2] * hc[j];
00576         }
00577         hc[8] = hc[1] * (float).39894228;
00578     } else if (*rkappa >= (float).22) {
00579         itype = 2;
00580         npt = 150;
00581         x = (*rkappa - (float).3) * (float)25.000000000000004 + 1;
00582         y = (sqrt(*beta2) - (float)1.) * (float)2.1052631578947367 + 1;
00583         xx = x * 2;
00584         yy = y * 2;
00585         x2 = xx * x - 1;
00586         x3 = xx * x2 - x;
00587         y2 = yy * y - 1;
00588         y3 = yy * y2 - y;
00589         xy = x * y;
00590         p2 = x2 * y;
00591         p3 = x3 * y;
00592         q2 = y2 * x;
00593         q3 = y3 * x;
00594         pq = x2 * y2;
00595         ac[1] = w1[0] + w1[1] * x + w1[3] * x3 + w1[4] * y + w1[5] * y2 + w1[
00596                 6] * y3 + w1[7] * xy + w1[8] * p2 + w1[9] * p3 + w1[10] * q2 
00597                 + w1[11] * q3 + w1[12] * pq;
00598         ac[2] = w2[0] + w2[1] * x + w2[2] * x2 + w2[3] * x3 + w2[4] * y + w2[
00599                 5] * y2 + w2[7] * xy + w2[8] * p2 + w2[9] * p3 + w2[10] * q2;
00600         ac[3] = w3[0] + w3[2] * x2 + w3[3] * x3 + w3[4] * y + w3[5] * y2 + w3[
00601                 6] * y3 + w3[7] * xy + w3[8] * p2 + w3[9] * p3 + w3[10] * q2 
00602                 + w3[11] * q3 + w3[12] * pq;
00603         ac[4] = w4[0] + w4[1] * x + w4[2] * x2 + w4[3] * x3 + w4[4] * y + w4[
00604                 5] * y2 + w4[6] * y3 + w4[7] * xy + w4[8] * p2 + w4[9] * p3 + 
00605                 w4[10] * q2 + w4[11] * q3 + w4[12] * pq;
00606         ac[5] = w5[0] + w5[1] * x + w5[3] * x3 + w5[4] * y + w5[5] * y2 + w5[
00607                 6] * y3 + w5[7] * xy + w5[8] * p2 + w5[9] * p3 + w5[10] * q2 
00608                 + w5[11] * q3 + w5[12] * pq;
00609         ac[6] = w6[0] + w6[1] * x + w6[2] * x2 + w6[3] * x3 + w6[4] * y + w6[
00610                 5] * y2 + w6[6] * y3 + w6[7] * xy + w6[8] * p2 + w6[9] * p3 + 
00611                 w6[10] * q2 + w6[11] * q3 + w6[12] * pq;
00612         ac[8] = w8[0] + w8[1] * x + w8[2] * x2 + w8[4] * y + w8[5] * y2 + w8[
00613                 6] * y3 + w8[7] * xy;
00614         ac[0] = (float)-3.05;
00615     } else if (*rkappa >= (float).12) {
00616         itype = 3;
00617         npt = 200;
00618         x = (*rkappa - (float).2) * (float)24.999999999999996 + 1;
00619         y = (sqrt(*beta2) - (float)1.) * (float)2.1052631578947367 + 1;
00620         xx = x * 2;
00621         yy = y * 2;
00622         x2 = xx * x - 1;
00623         x3 = xx * x2 - x;
00624         y2 = yy * y - 1;
00625         y3 = yy * y2 - y;
00626         xy = x * y;
00627         p2 = x2 * y;
00628         p3 = x3 * y;
00629         q2 = y2 * x;
00630         q3 = y3 * x;
00631         pq = x2 * y2;
00632         ac[1] = v1[0] + v1[1] * x + v1[2] * x2 + v1[4] * y + v1[5] * y2 + v1[
00633                 6] * y3 + v1[8] * p2 + v1[9] * p3 + v1[10] * q2 + v1[11] * q3;
00634         ac[2] = v2[0] + v2[1] * x + v2[2] * x2 + v2[4] * y + v2[5] * y2 + v2[
00635                 6] * y3 + v2[7] * xy + v2[8] * p2 + v2[10] * q2 + v2[11] * q3;
00636         ac[3] = v3[0] + v3[1] * x + v3[2] * x2 + v3[3] * x3 + v3[4] * y + v3[
00637                 5] * y2 + v3[6] * y3 + v3[7] * xy + v3[8] * p2 + v3[9] * p3 + 
00638                 v3[10] * q2 + v3[11] * q3 + v3[12] * pq;
00639         ac[4] = v4[0] + v4[1] * x + v4[2] * x2 + v4[3] * x3 + v4[4] * y + v4[
00640                 5] * y2 + v4[6] * y3 + v4[7] * xy + v4[8] * p2 + v4[9] * p3 + 
00641                 v4[10] * q2 + v4[11] * q3;
00642         ac[5] = v5[0] + v5[1] * x + v5[2] * x2 + v5[3] * x3 + v5[4] * y + v5[
00643                 5] * y2 + v5[6] * y3 + v5[7] * xy + v5[10] * q2 + v5[11] * q3 
00644                 + v5[12] * pq;
00645         ac[6] = v6[0] + v6[1] * x + v6[2] * x2 + v6[3] * x3 + v6[4] * y + v6[
00646                 5] * y2 + v6[6] * y3 + v6[7] * xy + v6[8] * p2 + v6[9] * p3 + 
00647                 v6[10] * q2 + v6[11] * q3 + v6[12] * pq;
00648         ac[7] = v7[0] + v7[1] * x + v7[2] * x2 + v7[4] * y + v7[5] * y2 + v7[
00649                 6] * y3 + v7[7] * xy + v7[10] * q2;
00650         ac[8] = v8[0] + v8[1] * x + v8[2] * x2 + v8[4] * y + v8[5] * y2 + v8[
00651                 6] * y3 + v8[7] * xy + v8[10] * q2;
00652         ac[0] = (float)-3.04;
00653     } else {
00654         itype = 4;
00655         if (*rkappa >= (float).02) {
00656             itype = 3;
00657         }
00658         npt = 200;
00659         x = (*rkappa - (float).1) * (float)25. + 1;
00660         y = (sqrt(*beta2) - (float)1.) * (float)2.1052631578947367 + 1;
00661         xx = x * 2;
00662         yy = y * 2;
00663         x2 = xx * x - 1;
00664         x3 = xx * x2 - x;
00665         y2 = yy * y - 1;
00666         y3 = yy * y2 - y;
00667         xy = x * y;
00668         p2 = x2 * y;
00669         p3 = x3 * y;
00670         q2 = y2 * x;
00671         q3 = y3 * x;
00672         pq = x2 * y2;
00673         if (itype == 4) {
00674             goto L4;
00675         }
00676         ac[1] = u1[0] + u1[1] * x + u1[2] * x2 + u1[4] * y + u1[5] * y2 + u1[
00677                 6] * y3 + u1[7] * xy + u1[9] * p3 + u1[11] * q3 + u1[12] * pq;
00678         ac[2] = u2[0] + u2[1] * x + u2[2] * x2 + u2[4] * y + u2[5] * y2 + u2[
00679                 6] * y3 + u2[7] * xy + u2[8] * p2 + u2[9] * p3 + u2[11] * q3 
00680                 + u2[12] * pq;
00681         ac[3] = u3[0] + u3[1] * x + u3[2] * x2 + u3[4] * y + u3[5] * y2 + u3[
00682                 6] * y3 + u3[7] * xy + u3[8] * p2 + u3[9] * p3 + u3[10] * q2 
00683                 + u3[11] * q3 + u3[12] * pq;
00684         ac[4] = u4[0] + u4[1] * x + u4[2] * x2 + u4[3] * x3 + u4[4] * y + u4[
00685                 5] * y2 + u4[6] * y3 + u4[7] * xy + u4[8] * p2 + u4[9] * p3 + 
00686                 u4[10] * q2 + u4[11] * q3;
00687         ac[5] = u5[0] + u5[1] * x + u5[2] * x2 + u5[3] * x3 + u5[4] * y + u5[
00688                 5] * y2 + u5[6] * y3 + u5[7] * xy + u5[9] * p3 + u5[10] * q2 
00689                 + u5[11] * q3 + u5[12] * pq;
00690         ac[6] = u6[0] + u6[1] * x + u6[2] * x2 + u6[3] * x3 + u6[4] * y + u6[
00691                 6] * y3 + u6[7] * xy + u6[8] * p2 + u6[9] * p3 + u6[11] * q3 
00692                 + u6[12] * pq;
00693 L4:
00694         ac[7] = u7[0] + u7[1] * x + u7[2] * x2 + u7[3] * x3 + u7[4] * y + u7[
00695                 5] * y2 + u7[7] * xy;
00696         ac[8] = u8[0] + u8[1] * x + u8[2] * x2 + u8[3] * x3 + u8[4] * y + u8[
00697                 5] * y2 + u8[6] * y3 + u8[7] * xy + u8[8] * p2 + u8[9] * p3 + 
00698                 u8[10] * q2 + u8[12] * pq;
00699         ac[0] = (float)-3.03;
00700     }
00701     ac[9] = (ac[8] - ac[0]) / npt;
00702     if (itype == 3) {
00703         x = (ac[7] - ac[8]) / (ac[7] * ac[8]);
00704         y = 1 / log(ac[8] / ac[7]);
00705 /* Computing 2nd power */
00706         r__1 = ac[7];
00707         p2 = r__1 * r__1;
00708         ac[11] = p2 * (ac[1] * exp(-(doublereal)ac[2] * (ac[7] + ac[5] * p2) 
00709                 - ac[3] * exp(-(doublereal)ac[4] * (ac[7] + ac[6] * p2))) - y 
00710                 * (float).045 / ac[7]) / (x * y * ac[7] + 1);
00711         ac[12] = (x * ac[11] + (float).045) * y;
00712     }
00713     if (itype == 4) {
00714         ac[10] = (float).995 / glands_(&ac[8]);
00715     }
00716     t = *ran * 2 / ac[9];
00717     rlam = ac[0];
00718     fl = (float)0.;
00719     s = (float)0.;
00720     i__1 = npt;
00721     for (n = 1; n <= i__1; ++n) {
00722         rlam += ac[9];
00723         if (itype == 1) {
00724             fn = (float)1.;
00725             x = (rlam + hc[0]) * hc[1];
00726             h[0] = x;
00727 /* Computing 2nd power */
00728             r__1 = x;
00729             h[1] = r__1 * r__1 - 1;
00730             for (k = 2; k <= 8; ++k) {
00731                 fn += 1;
00732 /* L31: */
00733                 h[k] = x * h[k - 1] - fn * h[k - 2];
00734             }
00735             y = hc[7] * h[8] + 1;
00736             for (k = 2; k <= 6; ++k) {
00737 /* L32: */
00738                 y += hc[k] * h[k];
00739             }
00740 /* Computing 2nd power */
00741             r__1 = x;
00742             fu = hc[8] * exp(r__1 * r__1 * (float)-.5) * dmax(y,(float)0.);
00743         } else if (itype == 2) {
00744 /* Computing 2nd power */
00745             r__1 = rlam;
00746             x = r__1 * r__1;
00747             fu = ac[1] * exp(-(doublereal)ac[2] * (rlam + ac[5] * x) - ac[3] *
00748                      exp(-(doublereal)ac[4] * (rlam + ac[6] * x)));
00749         } else if (itype == 3) {
00750             if (rlam < ac[7]) {
00751 /* Computing 2nd power */
00752                 r__1 = rlam;
00753                 x = r__1 * r__1;
00754                 fu = ac[1] * exp(-(doublereal)ac[2] * (rlam + ac[5] * x) - ac[
00755                         3] * exp(-(doublereal)ac[4] * (rlam + ac[6] * x)));
00756             } else {
00757                 x = 1 / rlam;
00758                 fu = (ac[11] * x + ac[12]) * x;
00759             }
00760         } else {
00761             fu = ac[10] * glande_(&rlam);
00762         }
00763         s = s + fl + fu;
00764         if (s > t) {
00765             goto L22;
00766         }
00767 /* L21: */
00768         fl = fu;
00769     }
00770 L22:
00771     s0 = s - fl - fu;
00772     ret_val = rlam - ac[9];
00773     if (s > s0) {
00774         ret_val += ac[9] * (t - s0) / (s - s0);
00775     }
00776     return ret_val;
00777 } /* gvaviv_ */
00778 
00779 #ifdef __cplusplus
00780         }
00781 #endif

Generated at Wed Nov 21 12:20:25 2001 by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000