- Timestamp:
- Jun 11, 2013, 9:15:36 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20130509/psModules/src/objects/models/pmModel_GAUSS.c
r35560 r35644 200 200 201 201 // set the shape parameters 202 if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments )) {202 if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments, false)) { 203 203 return false; 204 204 } … … 219 219 psF64 PM_MODEL_FLUX (const psVector *params) 220 220 { 221 222 psEllipseShape shape;223 224 221 psF32 *PAR = params->data.F32; 225 222 226 shape.sx = PAR[PM_PAR_SXX] / M_SQRT2; 227 shape.sy = PAR[PM_PAR_SYY] / M_SQRT2; 228 shape.sxy = PAR[PM_PAR_SXY]; 223 psEllipseAxes axes; 224 pmModelParamsToAxes (&axes, PAR[PM_PAR_SXX], PAR[PM_PAR_SXY], PAR[PM_PAR_SYY], false); 229 225 230 226 // Area is equivalent to 2 pi sigma^2 231 // axes ratio < 20232 psEllipseAxes axes = psEllipseShapeToAxes (shape, 20.0);233 227 psF64 Area = 2.0 * M_PI * axes.major * axes.minor; 234 228 … … 242 236 psF64 PM_MODEL_RADIUS (const psVector *params, psF64 flux) 243 237 { 244 psEllipseShape shape;245 246 238 psF32 *PAR = params->data.F32; 247 239 … … 253 245 return (1.0); 254 246 255 shape.sx = PAR[PM_PAR_SXX] / M_SQRT2; 256 shape.sy = PAR[PM_PAR_SYY] / M_SQRT2; 257 shape.sxy = PAR[PM_PAR_SXY]; 258 259 psEllipseAxes axes = psEllipseShapeToAxes (shape, 20.0); 247 psEllipseAxes axes; 248 pmModelParamsToAxes (&axes, PAR[PM_PAR_SXX], PAR[PM_PAR_SXY], PAR[PM_PAR_SYY], false); 249 260 250 psF64 radius = axes.major * sqrt (2.0 * log(PAR[PM_PAR_I0] / flux)); 261 251 psAssert (isfinite(radius), "fix this code: radius should not be nan for Io = %f, flux = %f, major = %f (%f, %f, %f)", … … 285 275 } 286 276 287 // the OLD 2D model for SXY actually fitted SXY / (SXX^-2 + SYY^-2); correct here288 // out[PM_PAR_SXY] = pmPSF_SXYtoModel (out);289 290 277 // the 2D PSF model fits polarization terms (E0,E1,E2) 291 278 // convert to shape terms (SXX,SYY,SXY) 292 // XXX user-defined value for limit? 293 if (!pmPSF_FitToModel (out, 0.1)) { 294 // psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", in[PM_PAR_YPOS], in[PM_PAR_XPOS]); 279 bool useReff = pmModelUseReff (modelPSF->type); 280 if (!pmPSF_FitToModel (out, 0.1, useReff)) { 295 281 psTrace ("psModules.objects", 3, "Failed to fit object at (r,c) = (%.1f,%.1f)", in[PM_PAR_YPOS], in[PM_PAR_XPOS]); 296 282 return false; … … 343 329 // the 2D PSF model fits polarization terms (E0,E1,E2) 344 330 // convert to shape terms (SXX,SYY,SXY) 345 // XXX user-defined value for limit?346 if (!pmPSF_FitToModel (PAR, 0.1 )) {331 bool useReff = pmModelUseReff (model->type); 332 if (!pmPSF_FitToModel (PAR, 0.1, useReff)) { 347 333 psTrace ("psModules.objects", 3, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo); 348 334 return false;
Note:
See TracChangeset
for help on using the changeset viewer.
