IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Dec 9, 2015, 3:42:26 PM (11 years ago)
Author:
eugene
Message:

move multple copies of gaussian deviates to libohana

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/misc/src/magtomass.c

    r7080 r39242  
    11# include <ohana.h>
    2 extern double drand48();
    3 extern double rnd_gauss();
    4 extern double rnd_integrate ();
    5 extern double gaussian ();
    62# define NEWWAY 1
    7 
    8 double gaussian();
    9 double rnd_gauss();
    10 double rnd_integrate();
    11 
    12 # define NGAUSS 2048
    13 double gaussint[NGAUSS];
    143
    154void main (argc, argv)
     
    5241  fprintf (stderr, "using mags in columns %d & %d\n", col1, col2);
    5342
    54   gauss_init ();
     43  gaussdev_init ();
    5544
    5645  lAo = 0.1;
     
    147136        Ngood = 1.0;
    148137        for (k = 0; k < Ntry; k++) {
    149           v = rnd_gauss (V, dV);
    150           uv = rnd_gauss ((U-V), dUV);
     138          v = gaussdev_rnd (V, dV);
     139          uv = gaussdev_rnd ((U-V), dUV);
    151140          x = (uv - UV0 - 0.7*Av) / DUV;
    152141          y = (v - d - V0 - Av) / DV;
     
    202191*/
    203192
    204 double
    205 rnd_gauss (mean, sigma)
    206 double mean, sigma;
    207 {
    208 
    209   int i;
    210   double y;
    211 
    212   y = drand48();
    213   i = NGAUSS*y;
    214   y = gaussint[i]*sigma + mean;
    215 
    216   return (y);
    217 
    218 }
    219 
    220 
    221 gauss_init ()
    222 {
    223 
    224   int i;
    225   long A, B;
    226   double val, x, dx, dx1, dx2, dx3, df;
    227   double mean, sigma;
    228 
    229   A = time(NULL);
    230   for (B = 0; A == time(NULL); B++);
    231   srand48(B);
    232 
    233   val = 0;
    234   dx = 0.001;
    235   dx1 = dx / 3.0;
    236   dx2 = 2.0*dx/3.0;
    237   dx3 = dx;
    238   mean = 0.0;
    239   sigma = 1.0;
    240 
    241   for (i = 0, x = -7.0; (i < NGAUSS) && (x < 7.0); x += dx)  {
    242     df = (3.0*gaussian(x    , mean, sigma) +
    243           9.0*gaussian(x+dx1, mean, sigma) +
    244           9.0*gaussian(x+dx2, mean, sigma) +
    245           3.0*gaussian(x+dx3, mean, sigma)) * (dx1/8.0);
    246     val += df;
    247     if (val > (i / (double) NGAUSS)) {
    248       gaussint[i] = x + dx / 2.0;
    249       i++;
    250     }
    251   }
    252   return (x + dx / 2.0);
    253 }
    254 
    255 double
    256 rnd_integrate (function, range, mean, sigma)
    257 double (*function) ();
    258 double range, mean, sigma;
    259 {
    260 
    261   double val, x, dx, dx1, dx2, dx3, df;
    262 
    263   range += 0.0001;
    264   val = 0;
    265   dx = sigma / 100.0;
    266   dx1 = dx / 3.0;
    267   dx2 = 2.0*dx/3.0;
    268   dx3 = dx;
    269 
    270   for (x = mean - 7*sigma; (val < range) && (x < mean + 7*sigma); x += dx)  {
    271     df = (3.0*function(x    , mean, sigma) +
    272           9.0*function(x+dx1, mean, sigma) +
    273           9.0*function(x+dx2, mean, sigma) +
    274           3.0*function(x+dx3, mean, sigma)) * (dx1/8.0);
    275     val += df;
    276   }
    277   return (x + dx / 2.0);
    278 }
    279 
    280 double
    281 gaussian (x, mean, sigma)
    282 double x, mean, sigma;
    283 {
    284 
    285   double f, X;
    286 
    287   f = exp (-0.5 * SQ(x - mean) / SQ(sigma)) / sqrt(2 * M_PI * SQ(sigma));
    288 
    289   return (f);
    290 
    291 }
    292 
Note: See TracChangeset for help on using the changeset viewer.