- Timestamp:
- Oct 9, 2013, 4:14:19 PM (13 years ago)
- Location:
- branches/eam_branches/ipp-20130904/psphot
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20130904/psphot
- Property svn:mergeinfo changed
/trunk/psphot (added) merged: 36096,36100,36107-36108,36115,36117-36119,36124,36128
- Property svn:mergeinfo changed
-
branches/eam_branches/ipp-20130904/psphot/src
- Property svn:mergeinfo changed
/trunk/psphot/src merged: 36096,36100,36107-36108,36115,36117-36119,36124,36128
- Property svn:mergeinfo changed
-
branches/eam_branches/ipp-20130904/psphot/src/psphotPetrosianStats.c
r34086 r36198 6 6 // generate the Petrosian radius and flux from the mean surface brightness (r_i) 7 7 8 float InterpolateValuesQuadratic (float *Xin, float *Yin, float X); 8 9 float InterpolateValues (float X0, float Y0, float X1, float Y1, float X); 9 10 float InterpolateValuesErrX (float X0, float Y0, float X1, float Y1, float X, float dX0, float dX1); … … 53 54 float dFsum2 = 0.0; 54 55 55 float nSigma = 3.0;56 float nSigma = 2.0; 56 57 int lowestSignificantRadius = 0; 57 58 float lowestSignificantRatio = 1.0; … … 118 119 petRadiusErr = InterpolateValuesErrX (1.0, 0.0, petRatio->data.F32[nOut], refRadius->data.F32[nOut], PETROSIAN_RATIO, 0.0, petRatioErr->data.F32[nOut]); 119 120 } 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]); 122 132 } 123 133 above = false; … … 235 245 } 236 246 247 // Lagrange's form of the interpolating polynomial... 248 float 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 237 266 float InterpolateValues (float X0, float Y0, float X1, float Y1, float X) { 238 267 float dydx = (Y1 - Y0) / (X1 - X0);
Note:
See TracChangeset
for help on using the changeset viewer.
