IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 3030


Ignore:
Timestamp:
Jan 18, 2005, 8:53:38 AM (22 years ago)
Author:
eugene
Message:

added object measurement functions

Location:
trunk/Ohana/src/opihi
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/cmd.astro/imfit.c

    r2938 r3030  
    1717float tgaussTD (float, float, float *, int, float *);
    1818float rgaussTD (float, float, float *, int, float *);
     19
     20float sersic (float, float, float *, int, float *);
     21float serbulge (float, float, float *, int, float *);
    1922
    2023static float Npow;
     
    122125      Npar = 4;
    123126      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;
    124135    }
    125136    if (fitfunc == NULL) {
     
    178189
    179190  /* make initial guesses on parameters */
    180   if (Npar >= 7) {
     191  if (Npar >= 7) { /* not Pgauss, Sgauss */
    181192    par[0] = get_variable_default ("Xg", 0);
    182193    par[1] = get_variable_default ("Yg", 0);
     
    187198    par[6] = get_variable_default ("Sg", 0.0);
    188199  }
    189   if (Npar == 4) {
     200  if (Npar == 4) { /* Pgauss, Sgauss */
    190201    par[0] = get_variable_default ("Xg", 0);
    191202    par[1] = get_variable_default ("Yg", 0);
     
    193204    par[3] = get_variable_default ("Sg", 0.0);
    194205  }
    195   if (Npar == 9) { /** vgauss **/
     206  if (fitfunc == vgaussTD) {
    196207    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];
    197222  }
    198223  if (Npar == 10) { /** sgauss, tgauss, rgauss **/
     
    201226    par[7] = 2.35 * sqrt(2.0) / get_variable_default ("SXf", 15.0);
    202227    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);
    204229  }
    205230  if (fitfunc == PgaussTD) {
    206231    fpar[0] = 2.35 * sqrt(2.0) / get_variable_default ("SXg", 15.0);
    207232    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);
    209234  }   
    210235  if (fitfunc == SgaussTD) {
    211236    fpar[0] = 2.35 * sqrt(2.0) / get_variable_default ("SXg", 15.0);
    212237    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);
    214239    fpar[3] = 2.35 * sqrt(2.0) / get_variable_default ("SXf", 15.0);
    215240    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);
    217242  }   
    218243
     
    339364    set_variable ("Sg",  par[6]);
    340365  }
    341   if (Npar == 9) {
     366  if (fitfunc == vgaussTD) {
    342367    set_variable ("SXf", par[7]);
    343368    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]);
    344380  }
    345381  if (Npar == 10) {
     
    371407  set_variable ("ChiSq", chisq/(Npts - Npar));
    372408
     409  for (i = 0; i < Npar; i++) {
     410    fprintf (stderr, "%g ", par[i]);
     411  }
     412  fprintf (stderr, "\n");
     413
    373414  free (x);
    374415  free (y);
     
    411452    dpar[5] = +r;
    412453    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)) */
     460float 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) */
     493float 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;
    413534  }
    414535  return (f);
  • trunk/Ohana/src/opihi/mana/Makefile

    r2833 r3030  
    3232manacmds = \
    3333$(SDIR)/rawstars.$(ARCH).o \
     34$(SDIR)/fitcontour.$(ARCH).o \
     35$(SDIR)/starcontour.$(ARCH).o \
    3436$(SDIR)/findpeaks.$(ARCH).o
    3537
  • trunk/Ohana/src/opihi/mana/init.c

    r2827 r3030  
    22
    33int findpeaks       PROTO((int, char **));
     4int fitcontour      PROTO((int, char **));
     5int starcontour     PROTO((int, char **));
    46int rawstars        PROTO((int, char **));
    57
    68static Command cmds[] = { 
    79  {"findpeaks",   findpeaks,    "find image peaks"},
     10  {"fitcontour",  fitcontour,   "fit ellipse contour"},
     11  {"starcontour", starcontour,  "object contour"},
    812  {"rawstars",    rawstars,     "find raw star stats"},
    913};
Note: See TracChangeset for help on using the changeset viewer.