Changeset 3030
- Timestamp:
- Jan 18, 2005, 8:53:38 AM (22 years ago)
- Location:
- trunk/Ohana/src/opihi
- Files:
-
- 2 added
- 3 edited
-
cmd.astro/imfit.c (modified) (9 diffs)
-
mana/Makefile (modified) (1 diff)
-
mana/fitcontour.c (added)
-
mana/init.c (modified) (1 diff)
-
mana/starcontour.c (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.astro/imfit.c
r2938 r3030 17 17 float tgaussTD (float, float, float *, int, float *); 18 18 float rgaussTD (float, float, float *, int, float *); 19 20 float sersic (float, float, float *, int, float *); 21 float serbulge (float, float, float *, int, float *); 19 22 20 23 static float Npow; … … 122 125 Npar = 4; 123 126 Nfpar = 6; 127 } 128 if (!strcmp(argv[N], "sersic")) { 129 fitfunc = sersic; 130 Npar = 8; 131 } 132 if (!strcmp(argv[N], "serbulge")) { 133 fitfunc = serbulge; 134 Npar = 12; 124 135 } 125 136 if (fitfunc == NULL) { … … 178 189 179 190 /* make initial guesses on parameters */ 180 if (Npar >= 7) { 191 if (Npar >= 7) { /* not Pgauss, Sgauss */ 181 192 par[0] = get_variable_default ("Xg", 0); 182 193 par[1] = get_variable_default ("Yg", 0); … … 187 198 par[6] = get_variable_default ("Sg", 0.0); 188 199 } 189 if (Npar == 4) { 200 if (Npar == 4) { /* Pgauss, Sgauss */ 190 201 par[0] = get_variable_default ("Xg", 0); 191 202 par[1] = get_variable_default ("Yg", 0); … … 193 204 par[3] = get_variable_default ("Sg", 0.0); 194 205 } 195 if ( Npar == 9) { /** vgauss **/206 if (fitfunc == vgaussTD) { 196 207 par[7] = par[8] = 1; 208 } 209 if (fitfunc == sersic) { 210 par[7] = get_variable_default ("Sr", 1.0); 211 } 212 if (fitfunc == serbulge) { 213 Npow = get_variable_default ("Npow", 2.25); 214 Npin = get_variable_default ("Npin", 1.00); 215 par[7] = 2.35 * sqrt(2.0) / get_variable_default ("SXf", 15.0); 216 par[8] = 2.35 * sqrt(2.0) / get_variable_default ("SYf", 15.0); 217 par[9] = get_variable_default ("SXYf", 0.0); 218 par[11] = get_variable_default ("Sr", 1.0); 219 /* arbitrary guess: equal distribution between bulge and disk */ 220 par[10] = par[5]/2.0; 221 par[5] = par[10]; 197 222 } 198 223 if (Npar == 10) { /** sgauss, tgauss, rgauss **/ … … 201 226 par[7] = 2.35 * sqrt(2.0) / get_variable_default ("SXf", 15.0); 202 227 par[8] = 2.35 * sqrt(2.0) / get_variable_default ("SYf", 15.0); 203 par[9] = 0.0;228 par[9] = get_variable_default ("SXYf", 0.0); 204 229 } 205 230 if (fitfunc == PgaussTD) { 206 231 fpar[0] = 2.35 * sqrt(2.0) / get_variable_default ("SXg", 15.0); 207 232 fpar[1] = 2.35 * sqrt(2.0) / get_variable_default ("SYg", 15.0); 208 fpar[2] = get_variable_default ("SXYg", 15.0);233 fpar[2] = get_variable_default ("SXYg", 0.0); 209 234 } 210 235 if (fitfunc == SgaussTD) { 211 236 fpar[0] = 2.35 * sqrt(2.0) / get_variable_default ("SXg", 15.0); 212 237 fpar[1] = 2.35 * sqrt(2.0) / get_variable_default ("SYg", 15.0); 213 fpar[2] = get_variable_default ("SXYg", 15.0);238 fpar[2] = get_variable_default ("SXYg", 0.0); 214 239 fpar[3] = 2.35 * sqrt(2.0) / get_variable_default ("SXf", 15.0); 215 240 fpar[4] = 2.35 * sqrt(2.0) / get_variable_default ("SYf", 15.0); 216 fpar[5] = get_variable_default ("SXYf", 15.0);241 fpar[5] = get_variable_default ("SXYf", 0.0); 217 242 } 218 243 … … 339 364 set_variable ("Sg", par[6]); 340 365 } 341 if ( Npar == 9) {366 if (fitfunc == vgaussTD) { 342 367 set_variable ("SXf", par[7]); 343 368 set_variable ("SYf", par[8]); 369 } 370 if (fitfunc == sersic) { 371 set_variable ("Sr", par[7]); 372 } 373 if (fitfunc == serbulge) { 374 set_variable ("Zb", par[5]); 375 set_variable ("SXf", 2.35 * sqrt(2.0) / par[7]); 376 set_variable ("SYf", 2.35 * sqrt(2.0) / par[8]); 377 set_variable ("SXYf", par[9]); 378 set_variable ("Zd", par[10]); 379 set_variable ("Sr", par[11]); 344 380 } 345 381 if (Npar == 10) { … … 371 407 set_variable ("ChiSq", chisq/(Npts - Npar)); 372 408 409 for (i = 0; i < Npar; i++) { 410 fprintf (stderr, "%g ", par[i]); 411 } 412 fprintf (stderr, "\n"); 413 373 414 free (x); 374 415 free (y); … … 411 452 dpar[5] = +r; 412 453 dpar[6] = +1; 454 } 455 return (f); 456 } 457 458 /* sersic galaxy model -- x, y, sx, sy, sxy, I, sky, n */ 459 /* exp (-b (r/r_e)^(1/n)) */ 460 float sersic (float x, float y, float *par, int Npar, float *dpar) { 461 462 float X, Y, px, py; 463 float z, r, t, q, f; 464 465 X = x - par[0]; 466 Y = y - par[1]; 467 468 px = par[2]*X; 469 py = par[3]*Y; 470 471 z = 0.5*SQ(px) + 0.5*SQ(py) + par[4]*X*Y; 472 t = pow (z, par[7]); 473 r = exp (-t); 474 f = par[5]*r + par[6]; 475 q = par[5]*r*par[7]*pow(z, par[7]-1); 476 477 if (dpar != NULL) { 478 dpar[0] = q*(2*px*par[2] + par[4]*Y); 479 dpar[1] = q*(2*py*par[3] + par[4]*X); 480 dpar[2] = -2*q*px*X; 481 dpar[3] = -2*q*py*Y; 482 dpar[4] = -q*X*Y; 483 dpar[5] = +r; 484 dpar[6] = +1; 485 dpar[7] = -q*log(z)*t; 486 } 487 return (f); 488 } 489 490 /* 0 1 2 3 4 5 6 7 8 9 10 11 */ 491 /* sersic galaxy model w/ bulge: -- x, y, (sx, sy, sxy)_1, I_1, sky, (sx, sy, sxy)_2, I_2, n */ 492 /* exp (-b (r/r_e)^(1/n)) + pgauss (r) */ 493 float serbulge (float x, float y, float *par, int Npar, float *dpar) { 494 495 float X, Y, px1, px2, py1, py2; 496 float z1, z2, r1, r2, t, q1, q2, f; 497 498 X = x - par[0]; 499 Y = y - par[1]; 500 501 px1 = par[2]*X; 502 py1 = par[3]*Y; 503 px2 = par[7]*X; 504 py2 = par[8]*Y; 505 506 z1 = 0.5*SQ(px1) + 0.5*SQ(py1) + par[4]*X*Y; 507 z2 = 0.5*SQ(px2) + 0.5*SQ(py2) + par[9]*X*Y; 508 509 /* bulge component */ 510 r1 = 1.0 / (1 + z1 + 0.5*z1*z1*(1 + z1/3)); /* ~ exp (-Z) */ 511 512 /* disk component */ 513 t = pow (z2, par[11]); 514 r2 = exp (-t); 515 516 f = par[5]*r1 + par[10]*r2 + par[6]; 517 518 q1 = par[5]*r1*r1*(1 + z1 + 0.5*z1*z1); 519 q2 = par[10]*r2*par[11]*pow(z2, par[11]-1); 520 521 if (dpar != NULL) { 522 dpar[0] = q1*(2*px1*par[2] + par[4]*Y) + q2*(2*px2*par[7] + par[9]*Y); 523 dpar[1] = q1*(2*py1*par[3] + par[4]*X) + q2*(2*py2*par[8] + par[9]*X); 524 dpar[2] = -2*q1*px1*X; 525 dpar[3] = -2*q1*py1*Y; 526 dpar[4] = -q1*X*Y; 527 dpar[5] = +r1; 528 dpar[6] = +1; 529 dpar[7] = -2*q2*px2*X*50; 530 dpar[8] = -2*q2*py2*Y*50; 531 dpar[9] = -q2*X*Y*50; 532 dpar[10] = +r2*50; 533 dpar[11] = -q2*log(z2)*t*50; 413 534 } 414 535 return (f); -
trunk/Ohana/src/opihi/mana/Makefile
r2833 r3030 32 32 manacmds = \ 33 33 $(SDIR)/rawstars.$(ARCH).o \ 34 $(SDIR)/fitcontour.$(ARCH).o \ 35 $(SDIR)/starcontour.$(ARCH).o \ 34 36 $(SDIR)/findpeaks.$(ARCH).o 35 37 -
trunk/Ohana/src/opihi/mana/init.c
r2827 r3030 2 2 3 3 int findpeaks PROTO((int, char **)); 4 int fitcontour PROTO((int, char **)); 5 int starcontour PROTO((int, char **)); 4 6 int rawstars PROTO((int, char **)); 5 7 6 8 static Command cmds[] = { 7 9 {"findpeaks", findpeaks, "find image peaks"}, 10 {"fitcontour", fitcontour, "fit ellipse contour"}, 11 {"starcontour", starcontour, "object contour"}, 8 12 {"rawstars", rawstars, "find raw star stats"}, 9 13 };
Note:
See TracChangeset
for help on using the changeset viewer.
