Changeset 14652 for trunk/psModules/src/objects/models/pmModel_QGAUSS.c
- Timestamp:
- Aug 23, 2007, 2:11:02 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/objects/models/pmModel_QGAUSS.c
r14344 r14652 20 20 *****************************************************************************/ 21 21 22 # define PM_MODEL_FUNC pmModelFunc_QGAUSS 23 # define PM_MODEL_FLUX pmModelFlux_QGAUSS 24 # define PM_MODEL_GUESS pmModelGuess_QGAUSS 25 # define PM_MODEL_LIMITS pmModelLimits_QGAUSS 26 # define PM_MODEL_RADIUS pmModelRadius_QGAUSS 27 # define PM_MODEL_FROM_PSF pmModelFromPSF_QGAUSS 28 # define PM_MODEL_FIT_STATUS pmModelFitStatus_QGAUSS 22 # define PM_MODEL_FUNC pmModelFunc_QGAUSS 23 # define PM_MODEL_FLUX pmModelFlux_QGAUSS 24 # define PM_MODEL_GUESS pmModelGuess_QGAUSS 25 # define PM_MODEL_LIMITS pmModelLimits_QGAUSS 26 # define PM_MODEL_RADIUS pmModelRadius_QGAUSS 27 # define PM_MODEL_FROM_PSF pmModelFromPSF_QGAUSS 28 # define PM_MODEL_PARAMS_FROM_PSF pmModelParamsFromPSF_QGAUSS 29 # define PM_MODEL_FIT_STATUS pmModelFitStatus_QGAUSS 29 30 30 31 psF32 PM_MODEL_FUNC (psVector *deriv, … … 350 351 351 352 // we require these two parameters to exist 352 assert (psf->params _NEW->n > PM_PAR_YPOS);353 assert (psf->params _NEW->n > PM_PAR_XPOS);354 355 for (int i = 0; i < psf->params _NEW->n; i++) {356 if (psf->params _NEW->data[i] == NULL) {353 assert (psf->params->n > PM_PAR_YPOS); 354 assert (psf->params->n > PM_PAR_XPOS); 355 356 for (int i = 0; i < psf->params->n; i++) { 357 if (psf->params->data[i] == NULL) { 357 358 out[i] = in[i]; 358 359 } else { 359 psPolynomial2D *poly = psf->params _NEW->data[i];360 psPolynomial2D *poly = psf->params->data[i]; 360 361 out[i] = psPolynomial2DEval(poly, in[PM_PAR_XPOS], in[PM_PAR_YPOS]); 361 362 } … … 372 373 // apply the model limits here: this truncates excessive extrapolation 373 374 // XXX do we need to do this still? should we put in asserts to test? 374 for (int i = 0; i < psf->params _NEW->n; i++) {375 for (int i = 0; i < psf->params->n; i++) { 375 376 // apply the limits to all components or just the psf-model parameters? 376 if (psf->params _NEW->data[i] == NULL)377 if (psf->params->data[i] == NULL) 377 378 continue; 378 379 … … 390 391 } 391 392 393 // construct the PSF model from the FLT model and the psf 394 // XXX is this sufficiently general do be a global function, not a pmModelClass function? 395 bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, pmPSF *psf, float Xo, float Yo, float Io) 396 { 397 psF32 *PAR = model->params->data.F32; 398 399 // we require these two parameters to exist 400 assert (psf->params->n > PM_PAR_YPOS); 401 assert (psf->params->n > PM_PAR_XPOS); 402 403 PAR[PM_PAR_SKY] = 0.0; 404 PAR[PM_PAR_I0] = Io; 405 PAR[PM_PAR_XPOS] = Xo; 406 PAR[PM_PAR_YPOS] = Yo; 407 408 // supply the model-fitted parameters, or copy from the input 409 for (int i = 0; i < psf->params->n; i++) { 410 if (i == PM_PAR_SKY) continue; 411 if (i == PM_PAR_I0) continue; 412 if (i == PM_PAR_XPOS) continue; 413 if (i == PM_PAR_YPOS) continue; 414 psPolynomial2D *poly = psf->params->data[i]; 415 assert (poly); 416 PAR[i] = psPolynomial2DEval(poly, Xo, Yo); 417 } 418 419 // the 2D PSF model fits polarization terms (E0,E1,E2) 420 // convert to shape terms (SXX,SYY,SXY) 421 // XXX user-defined value for limit? 422 if (!pmPSF_FitToModel (PAR, 0.1)) { 423 psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo); 424 return false; 425 } 426 427 // apply the model limits here: this truncates excessive extrapolation 428 // XXX do we need to do this still? should we put in asserts to test? 429 for (int i = 0; i < psf->params->n; i++) { 430 // apply the limits to all components or just the psf-model parameters? 431 if (psf->params->data[i] == NULL) 432 continue; 433 434 bool status = true; 435 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, PAR, NULL); 436 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, PAR, NULL); 437 if (!status) { 438 psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo); 439 model->flags |= PM_MODEL_STATUS_LIMITS; 440 } 441 } 442 return(true); 443 } 444 392 445 bool PM_MODEL_FIT_STATUS (pmModel *model) 393 446 { … … 418 471 # undef PM_MODEL_RADIUS 419 472 # undef PM_MODEL_FROM_PSF 473 # undef PM_MODEL_PARAMS_FROM_PSF 420 474 # undef PM_MODEL_FIT_STATUS
Note:
See TracChangeset
for help on using the changeset viewer.
