IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Sep 22, 2006, 2:29:31 AM (20 years ago)
Author:
rhl
Message:

[Start to] provide symbolic names for parameters

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psphot/src/models/pmModel_SGAUSS.c

    r5772 r8882  
    2525    psF32 *PAR = params->data.F32;
    2626
    27     psF32 X  = x->data.F32[0] - PAR[2];
    28     psF32 Y  = x->data.F32[1] - PAR[3];
    29     psF32 px = PAR[4]*X;
    30     psF32 py = PAR[5]*Y;
    31     psF32 z  = PS_MAX((0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[6]*X*Y), 1e-8);
    32     // note that if z -> 0, dPAR[7] -> -inf
    33     // also z^(PAR[7]-1) -> Inf
    34 
    35     psF32 pr = z*PAR[8];
     27    psF32 X  = x->data.F32[0] - PAR[PM_PAR_XPOS];
     28    psF32 Y  = x->data.F32[1] - PAR[PM_PAR_YPOS];
     29    psF32 px = PAR[PM_PAR_SXX]*X;
     30    psF32 py = PAR[PM_PAR_SYY]*Y;
     31    psF32 z  = PS_MAX((0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[PM_PAR_SXY]*X*Y), 1e-8);
     32    // note that if z -> 0, dPAR[PM_PAR_7] -> -inf
     33    // also z^(PAR[PM_PAR_7]-1) -> Inf
     34
     35    psF32 pr = z*PAR[PM_PAR_8];
    3636    psF32 pr3 = pr*pr*pr;
    37     psF32 p  = pow(z, PAR[7] - 1.0);
     37    psF32 p  = pow(z, PAR[PM_PAR_7] - 1.0);
    3838    psF32 r  = 1.0 / (1 + z*p + pr*pr3);
    39     psF32 f  = PAR[1]*r + PAR[0];
     39    psF32 f  = PAR[PM_PAR_FLUX]*r + PAR[PM_PAR_SKY];
    4040
    4141    if (deriv != NULL) {
    4242        // note difference from a pure gaussian: q = params->data.F32[1]*r
    43         psF32 t = PAR[1]*r*r;
    44         psF32 q = t*(PAR[7]*p + 4*PAR[8]*pr3);
     43        psF32 t = PAR[PM_PAR_FLUX]*r*r;
     44        psF32 q = t*(PAR[PM_PAR_7]*p + 4*PAR[PM_PAR_8]*pr3);
    4545
    4646        deriv->data.F32[0] = +1.0;
    4747        deriv->data.F32[1] = +r;
    48         deriv->data.F32[2] = q*(2.0*px*PAR[4] + PAR[6]*Y);
    49         deriv->data.F32[3] = q*(2.0*py*PAR[5] + PAR[6]*X);
     48        deriv->data.F32[2] = q*(2.0*px*PAR[PM_PAR_SXX] + PAR[PM_PAR_SXY]*Y);
     49        deriv->data.F32[3] = q*(2.0*py*PAR[PM_PAR_SYY] + PAR[PM_PAR_SXY]*X);
    5050        deriv->data.F32[4] = -2.0*q*px*X;
    5151        deriv->data.F32[5] = -2.0*q*py*Y;
     
    230230    psF32 *PAR = params->data.F32;
    231231
    232     psF64 A1   = PS_SQR(PAR[4]);
    233     psF64 A2   = PS_SQR(PAR[5]);
    234     psF64 A3   = PS_SQR(PAR[6]);
     232    psF64 A1   = PS_SQR(PAR[PM_PAR_SXX]);
     233    psF64 A2   = PS_SQR(PAR[PM_PAR_SYY]);
     234    psF64 A3   = PS_SQR(PAR[PM_PAR_SXY]);
    235235    psF64 Area = 2.0 * M_PI / sqrt(A1*A2 - A3);
    236236    // Area is equivalent to 2 pi sigma^2
     
    239239    norm = 0.0;
    240240    for (z = 0.005; z < 50; z += 0.01) {
    241       psF32 pr = PAR[8]*z;
    242         f = 1.0 / (1 + pow(z, PAR[7]) + SQ(SQ(pr)));
     241      psF32 pr = PAR[PM_PAR_8]*z;
     242        f = 1.0 / (1 + pow(z, PAR[PM_PAR_7]) + SQ(SQ(pr)));
    243243        norm += f;
    244244    }
    245245    norm *= 0.01;
    246246   
    247     psF64 Flux = PAR[1] * Area * norm;
     247    psF64 Flux = PAR[PM_PAR_FLUX] * Area * norm;
    248248
    249249    return(Flux);
     
    262262
    263263    if (flux <= 0) return (1.0);
    264     if (PAR[1] <= 0) return (1.0);
    265     if (flux >= PAR[1]) return (1.0);
     264    if (PAR[PM_PAR_FLUX] <= 0) return (1.0);
     265    if (flux >= PAR[PM_PAR_FLUX]) return (1.0);
    266266
    267267    // convert Sx,Sy,Sxy to major/minor axes
    268     shape.sx = 1.0 / PAR[4];
    269     shape.sy = 1.0 / PAR[5];
    270     shape.sxy = PAR[6];
     268    shape.sx = 1.0 / PAR[PM_PAR_SXX];
     269    shape.sy = 1.0 / PAR[PM_PAR_SYY];
     270    shape.sxy = PAR[PM_PAR_SXY];
    271271
    272272    axes = EllipseShapeToAxes (shape);
    273273    psF64 dr = 1.0 / axes.major;
    274     psF64 limit = flux / PAR[1];
     274    psF64 limit = flux / PAR[PM_PAR_FLUX];
    275275
    276276    // XXX : we can do this faster with an intelligent starting choice
    277277    for (r = 0.0; r < 20.0; r += dr) {
    278278        z = SQ(r);
    279         pr = PAR[8]*z;
    280         f = 1.0 / (1 + pow(z, PAR[7]) + SQ(SQ(pr)));
     279        pr = PAR[PM_PAR_8]*z;
     280        f = 1.0 / (1 + pow(z, PAR[PM_PAR_7]) + SQ(SQ(pr)));
    281281        if (f < limit) break;
    282282    }
     
    315315    psF32 *dPAR = model->dparams->data.F32;
    316316
    317     shape.sx = 1.0 / PAR[4];
    318     shape.sy = 1.0 / PAR[5];
    319     shape.sxy = PAR[6];
     317    shape.sx = 1.0 / PAR[PM_PAR_SXX];
     318    shape.sy = 1.0 / PAR[PM_PAR_SYY];
     319    shape.sxy = PAR[PM_PAR_SXY];
    320320
    321321    axes = EllipseShapeToAxes (shape);
    322322
    323323    dP = 0;
    324     dP += PS_SQR(dPAR[4] / PAR[4]);
    325     dP += PS_SQR(dPAR[5] / PAR[5]);
    326     dP += PS_SQR(dPAR[7] / PAR[7]);
     324    dP += PS_SQR(dPAR[PM_PAR_SXX] / PAR[PM_PAR_SXX]);
     325    dP += PS_SQR(dPAR[PM_PAR_SYY] / PAR[PM_PAR_SYY]);
     326    dP += PS_SQR(dPAR[PM_PAR_7] / PAR[PM_PAR_7]);
    327327    dP = sqrt (dP);
    328328
    329329    status = true;
    330330    status &= (dP < 0.5);
    331     status &= (PAR[1] > 0);
    332     status &= ((dPAR[1]/PAR[1]) < 0.5);
    333     status &= (fabs(PAR[8]) < 0.5);
    334     status &= (dPAR[8] < 0.1);
     331    status &= (PAR[PM_PAR_FLUX] > 0);
     332    status &= ((dPAR[PM_PAR_FLUX]/PAR[PM_PAR_FLUX]) < 0.5);
     333    status &= (fabs(PAR[PM_PAR_8]) < 0.5);
     334    status &= (dPAR[PM_PAR_8] < 0.1);
    335335    status &= (axes.major > 1.41);
    336336    status &= (axes.minor > 1.41);
    337337    status &= ((axes.major / axes.minor) < 5.0);
    338     status &= (PAR[7] > 0.5);
     338    status &= (PAR[PM_PAR_7] > 0.5);
    339339
    340340    if (status) return true;
Note: See TracChangeset for help on using the changeset viewer.