- Timestamp:
- Aug 17, 2007, 11:01:59 AM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branch_20070817/psModules/src/objects/models/pmModel_GAUSS.c
r14220 r14544 19 19 *****************************************************************************/ 20 20 21 # define PM_MODEL_FUNC pmModelFunc_GAUSS 22 # define PM_MODEL_FLUX pmModelFlux_GAUSS 23 # define PM_MODEL_GUESS pmModelGuess_GAUSS 24 # define PM_MODEL_LIMITS pmModelLimits_GAUSS 25 # define PM_MODEL_RADIUS pmModelRadius_GAUSS 26 # define PM_MODEL_FROM_PSF pmModelFromPSF_GAUSS 27 # define PM_MODEL_FIT_STATUS pmModelFitStatus_GAUSS 21 # define PM_MODEL_FUNC pmModelFunc_GAUSS 22 # define PM_MODEL_FLUX pmModelFlux_GAUSS 23 # define PM_MODEL_GUESS pmModelGuess_GAUSS 24 # define PM_MODEL_LIMITS pmModelLimits_GAUSS 25 # define PM_MODEL_RADIUS pmModelRadius_GAUSS 26 # define PM_MODEL_FROM_PSF pmModelFromPSF_GAUSS 27 # define PM_MODEL_PARAMS_FROM_PSF pmModelParamsFromPSF_GAUSS 28 # define PM_MODEL_FIT_STATUS pmModelFitStatus_GAUSS 28 29 29 30 psF32 PM_MODEL_FUNC(psVector *deriv, … … 185 186 186 187 // make an initial guess for parameters 187 bool PM_MODEL_GUESS (pmModel *model, pmSource *source) 188 { 188 bool PM_MODEL_GUESS (void *inModel, void *inSource) 189 { 190 pmModel *model = inModel; 191 pmSource *source = inSource; 192 189 193 pmMoments *moments = source->moments; 190 194 psF32 *PAR = model->params->data.F32; … … 255 259 256 260 // construct the PSF model from the FLT model and the psf 257 bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, pmPSF *psf) 258 { 261 bool PM_MODEL_FROM_PSF (void *inModelPSF, void *inModelFLT, void *inPSF) 262 { 263 pmModel *modelPSF = inModelPSF; 264 pmModel *modelFLT = inModelFLT; 265 pmPSF *psf = inPSF; 259 266 260 267 psF32 *out = modelPSF->params->data.F32; … … 306 313 } 307 314 315 // construct the PSF model from the FLT model and the psf 316 // XXX is this sufficiently general do be a global function, not a pmModelClass function? 317 bool PM_MODEL_PARAMS_FROM_PSF (void *inModel, void *inPSF, float Xo, float Yo, float Io) 318 { 319 pmModel *model = inModel; 320 pmPSF *psf = inPSF; 321 322 psF32 *PAR = model->params->data.F32; 323 324 // we require these two parameters to exist 325 assert (psf->params_NEW->n > PM_PAR_YPOS); 326 assert (psf->params_NEW->n > PM_PAR_XPOS); 327 328 PAR[PM_PAR_SKY] = 0.0; 329 PAR[PM_PAR_I0] = Io; 330 PAR[PM_PAR_XPOS] = Xo; 331 PAR[PM_PAR_YPOS] = Yo; 332 333 // supply the model-fitted parameters, or copy from the input 334 for (int i = 0; i < psf->params_NEW->n; i++) { 335 if (i == PM_PAR_SKY) continue; 336 psPolynomial2D *poly = psf->params_NEW->data[i]; 337 assert (poly); 338 PAR[i] = psPolynomial2DEval(poly, Xo, Yo); 339 } 340 341 // the 2D PSF model fits polarization terms (E0,E1,E2) 342 // convert to shape terms (SXX,SYY,SXY) 343 // XXX user-defined value for limit? 344 if (!pmPSF_FitToModel (PAR, 0.1)) { 345 psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo); 346 return false; 347 } 348 349 // apply the model limits here: this truncates excessive extrapolation 350 // XXX do we need to do this still? should we put in asserts to test? 351 for (int i = 0; i < psf->params_NEW->n; i++) { 352 // apply the limits to all components or just the psf-model parameters? 353 if (psf->params_NEW->data[i] == NULL) 354 continue; 355 356 bool status = true; 357 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, PAR, NULL); 358 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, PAR, NULL); 359 if (!status) { 360 psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo); 361 model->flags |= PM_MODEL_STATUS_LIMITS; 362 } 363 } 364 return(true); 365 } 366 308 367 // check the status of the fitted model 309 368 // this test is invalid if the parameters are derived 310 369 // from the PSF model 311 bool PM_MODEL_FIT_STATUS (pmModel *model) 312 { 370 bool PM_MODEL_FIT_STATUS (void *inModel) 371 { 372 pmModel *model = inModel; 313 373 314 374 psF32 dP; … … 339 399 # undef PM_MODEL_RADIUS 340 400 # undef PM_MODEL_FROM_PSF 401 # undef PM_MODEL_PARAMS_FROM_PSF 341 402 # undef PM_MODEL_FIT_STATUS
Note:
See TracChangeset
for help on using the changeset viewer.
