IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 9, 2013, 4:14:19 PM (13 years ago)
Author:
eugene
Message:

merge from trunk

Location:
branches/eam_branches/ipp-20130904/psphot
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20130904/psphot

  • branches/eam_branches/ipp-20130904/psphot/src

  • branches/eam_branches/ipp-20130904/psphot/src/psphotPetrosianStats.c

    r34086 r36198  
    66// generate the Petrosian radius and flux from the mean surface brightness (r_i)
    77
     8float InterpolateValuesQuadratic (float *Xin, float *Yin, float X);
    89float InterpolateValues     (float X0, float Y0, float X1, float Y1, float X);
    910float InterpolateValuesErrX (float X0, float Y0, float X1, float Y1, float X, float dX0, float dX1);
     
    5354    float dFsum2 = 0.0;
    5455
    55     float nSigma = 3.0;
     56    float nSigma = 2.0;
    5657    int lowestSignificantRadius = 0;
    5758    float lowestSignificantRatio = 1.0;
     
    118119                petRadiusErr = InterpolateValuesErrX (1.0, 0.0, petRatio->data.F32[nOut], refRadius->data.F32[nOut], PETROSIAN_RATIO, 0.0, petRatioErr->data.F32[nOut]);
    119120            } else {
    120                 petRadius    = InterpolateValues     (petRatio->data.F32[nOut-1], refRadius->data.F32[nOut-1], petRatio->data.F32[nOut], refRadius->data.F32[nOut], PETROSIAN_RATIO);
    121                 petRadiusErr = InterpolateValuesErrX (petRatio->data.F32[nOut-1], refRadius->data.F32[nOut-1], petRatio->data.F32[nOut], refRadius->data.F32[nOut], PETROSIAN_RATIO, petRatioErr->data.F32[nOut-1], petRatioErr->data.F32[nOut]);
     121              // petRadius    = InterpolateValues     (petRatio->data.F32[nOut-1], refRadius->data.F32[nOut-1], petRatio->data.F32[nOut], refRadius->data.F32[nOut], PETROSIAN_RATIO);
     122              if (nOut > 1) {
     123                petRadius    = InterpolateValuesQuadratic (&petRatio->data.F32[nOut-2],   &refRadius->data.F32[nOut-2],   PETROSIAN_RATIO);
     124              } else {
     125                petRadius    = InterpolateValuesQuadratic (&petRatio->data.F32[nOut-3], &refRadius->data.F32[nOut-3], PETROSIAN_RATIO);
     126              }
     127              float petRadiusLinear = InterpolateValues     (petRatio->data.F32[nOut-1], refRadius->data.F32[nOut-1], petRatio->data.F32[nOut], refRadius->data.F32[nOut], PETROSIAN_RATIO);
     128              if (fabs(petRadius - petRadiusLinear) > fabs(refRadius->data.F32[nOut] - refRadius->data.F32[nOut-1])) {
     129                fprintf (stderr, "big difference : %f vs %f\n", petRadius, petRadiusLinear);
     130              }
     131              petRadiusErr = InterpolateValuesErrX (petRatio->data.F32[nOut-1], refRadius->data.F32[nOut-1], petRatio->data.F32[nOut], refRadius->data.F32[nOut], PETROSIAN_RATIO, petRatioErr->data.F32[nOut-1], petRatioErr->data.F32[nOut]);
    122132            }
    123133            above = false;
     
    235245}
    236246
     247// Lagrange's form of the interpolating polynomial...
     248float InterpolateValuesQuadratic (float *Xin, float *Yin, float X) {
     249
     250  float dx01 = Xin[0] - Xin[1];
     251  float dx02 = Xin[0] - Xin[2];
     252  float dx12 = Xin[1] - Xin[2];
     253
     254  float dx0  = X - Xin[0];
     255  float dx1  = X - Xin[1];
     256  float dx2  = X - Xin[2];
     257
     258  float y0 = Yin[0]*dx1*dx2/(dx01*dx02);
     259  float y1 = Yin[1]*dx0*dx2/(dx01*dx12); // need - sign
     260  float y2 = Yin[2]*dx0*dx1/(dx02*dx12);
     261
     262  float Y = y0 - y1 + y2;
     263  return Y;
     264}
     265
    237266float InterpolateValues (float X0, float Y0, float X1, float Y1, float X) {
    238267    float dydx = (Y1 - Y0) / (X1 - X0);
Note: See TracChangeset for help on using the changeset viewer.