Changeset 28781 for branches/eam_branches/ipp-20100621/psModules/src/objects/models/pmModel_SERSIC.c
- Timestamp:
- Jul 29, 2010, 2:35:46 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20100621/psModules/src/objects/models/pmModel_SERSIC.c
r28656 r28781 126 126 dPAR[PM_PAR_SKY] = +1.0; 127 127 dPAR[PM_PAR_I0] = +f1; 128 dPAR[PM_PAR_7] = (z < 0.01) ? -1.5*z0*pow(0.01,PAR[PM_PAR_7])*log(0.01) : -1.5*z0*f2*log(z); 128 dPAR[PM_PAR_7] = (z < 0.01) ? -z0*pow(0.01,PAR[PM_PAR_7])*log(0.01) : -z0*f2*log(z); 129 dPAR[PM_PAR_7] *= 3.0; 129 130 130 131 assert (isfinite(z1)); … … 133 134 dPAR[PM_PAR_XPOS] = +1.0*z1*(2.0*px/PAR[PM_PAR_SXX] + Y*PAR[PM_PAR_SXY]); 134 135 dPAR[PM_PAR_YPOS] = +1.0*z1*(2.0*py/PAR[PM_PAR_SYY] + X*PAR[PM_PAR_SXY]); 135 dPAR[PM_PAR_SXX] = +2.0*z1*px*px/PAR[PM_PAR_SXX]; 136 dPAR[PM_PAR_SXX] = +2.0*z1*px*px/PAR[PM_PAR_SXX]; // XXX : increase drag? 136 137 dPAR[PM_PAR_SYY] = +2.0*z1*py*py/PAR[PM_PAR_SYY]; 137 138 dPAR[PM_PAR_SXY] = -1.0*z1*X*Y; … … 224 225 psF32 *PAR = model->params->data.F32; 225 226 227 // the other parameters depend on the guess for PAR_7 228 if (!isfinite(PAR[PM_PAR_7])) { 229 PAR[PM_PAR_7] = 0.25; 230 } 231 float index = 0.5 / PAR[PM_PAR_7]; 232 233 // the scale-length is a function of the moments and the index: 234 // Rmajor_guess = Rmajor_moments * Scale * Zero 235 float Scale = 0.70 + 0.053 * PAR[PM_PAR_7]; 236 float Zero = 1.16 - 0.615 * PAR[PM_PAR_7]; 237 226 238 psEllipseMoments emoments; 227 239 emoments.x2 = moments->Mxx; … … 236 248 if (!isfinite(axes.theta)) return false; 237 249 250 // set a lower limit to avoid absurd solutions.. 251 float Rmajor = PS_MAX(1.0, Scale * axes.major + Zero); 252 float Rminor = Rmajor * (axes.minor / axes.major); 253 254 fprintf (stderr, "guess index: %f : %f, %f -> %f, %f\n", index, axes.major, axes.minor, Rmajor, Rminor); 255 256 axes.major = Rmajor; 257 axes.minor = Rminor; 238 258 psEllipseShape shape = psEllipseAxesToShape (axes); 239 259 … … 242 262 if (!isfinite(shape.sxy)) return false; 243 263 244 // the other parameters depend on the guess for PAR_7245 if (!isfinite(PAR[PM_PAR_7])) {246 PAR[PM_PAR_7] = 0.25;247 // PAR[PM_PAR_7] = 0.125;248 // PAR[PM_PAR_7] = 0.5;249 }250 251 float index = 0.5 / PAR[PM_PAR_7];252 264 float bn = 1.9992*index - 0.3271; 253 265 // float fR = 1.0 / (sqrt(2.0) * pow (bn, index)); 254 266 float Io = exp(0.5*bn); 267 268 // XXX do we need this factor of sqrt(2)? 269 // float Sxx = PS_MAX(0.5, M_SQRT2*shape.sx); 270 // float Syy = PS_MAX(0.5, M_SQRT2*shape.sy); 255 271 256 272 float Sxx = PS_MAX(0.5, shape.sx); … … 329 345 psF64 zn = log(PAR[PM_PAR_I0] / flux); 330 346 psF64 radius = axes.major * sqrt (2.0) * pow(zn, 0.5 / PAR[PM_PAR_7]); 347 348 fprintf (stderr, "sersic model %f %f, n %f, radius: %f, zn: %f, f/Io: %f, major: %f\n", PAR[PM_PAR_XPOS], PAR[PM_PAR_YPOS], PAR[PM_PAR_7], radius, zn, flux/PAR[PM_PAR_I0], axes.major); 331 349 332 350 psAssert (isfinite(radius), "fix this code: z should not be nan for %f", PAR[PM_PAR_7]);
Note:
See TracChangeset
for help on using the changeset viewer.
