Changeset 39242 for trunk/Ohana/src/misc/src/magtomass.c
- Timestamp:
- Dec 9, 2015, 3:42:26 PM (11 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/misc/src/magtomass.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/misc/src/magtomass.c
r7080 r39242 1 1 # include <ohana.h> 2 extern double drand48();3 extern double rnd_gauss();4 extern double rnd_integrate ();5 extern double gaussian ();6 2 # define NEWWAY 1 7 8 double gaussian();9 double rnd_gauss();10 double rnd_integrate();11 12 # define NGAUSS 204813 double gaussint[NGAUSS];14 3 15 4 void main (argc, argv) … … 52 41 fprintf (stderr, "using mags in columns %d & %d\n", col1, col2); 53 42 54 gauss _init ();43 gaussdev_init (); 55 44 56 45 lAo = 0.1; … … 147 136 Ngood = 1.0; 148 137 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); 151 140 x = (uv - UV0 - 0.7*Av) / DUV; 152 141 y = (v - d - V0 - Av) / DV; … … 202 191 */ 203 192 204 double205 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 double256 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 double281 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.
