Changeset 15834 for trunk/psModules/src/objects/models/pmModel_QGAUSS.c
- Timestamp:
- Dec 14, 2007, 2:58:11 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/objects/models/pmModel_QGAUSS.c
r15056 r15834 6 6 * may thus vary depending on the specifics of the model. All models which are used a PSF 7 7 * representations share a few parameters, for which # define names are listed in pmModel.h: 8 8 9 9 power-law with fitted linear term 10 10 1 / (1 + kz + z^2.25) 11 11 12 12 * PM_PAR_SKY 0 - local sky : note that this is unused and may be dropped in the future 13 13 * PM_PAR_I0 1 - central intensity … … 20 20 *****************************************************************************/ 21 21 22 # define PM_MODEL_FUNC pmModelFunc_QGAUSS23 # define PM_MODEL_FLUX pmModelFlux_QGAUSS24 # define PM_MODEL_GUESS pmModelGuess_QGAUSS25 # define PM_MODEL_LIMITS pmModelLimits_QGAUSS26 # define PM_MODEL_RADIUS pmModelRadius_QGAUSS27 # define PM_MODEL_FROM_PSF pmModelFromPSF_QGAUSS22 # 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 28 # define PM_MODEL_PARAMS_FROM_PSF pmModelParamsFromPSF_QGAUSS 29 29 # define PM_MODEL_FIT_STATUS pmModelFitStatus_QGAUSS … … 89 89 f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]); 90 90 q1 = PS_SQR(f1)*AR_RATIO - PS_SQR(f2); 91 q1 = (q1 < 0.0) ? 0.0 : q1;92 // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg.. Saturate at that93 // angle and let f2,f1 fight it out91 q1 = (q1 < 0.0) ? 0.0 : q1; 92 // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg.. Saturate at that 93 // angle and let f2,f1 fight it out 94 94 q2 = 0.5*sqrt (q1); 95 95 } … … 127 127 if (fabs(beta[nParam]) > fabs(beta_lim)) { 128 128 beta[nParam] = (beta[nParam] > 0) ? fabs(beta_lim) : -fabs(beta_lim); 129 psTrace ("psModules.objects", 5, "|beta[nParam==%d]| > |beta_lim|; %g v. %g",130 nParam, beta[nParam], beta_lim);129 psTrace ("psModules.objects", 5, "|beta[nParam==%d]| > |beta_lim|; %g v. %g", 130 nParam, beta[nParam], beta_lim); 131 131 return false; 132 132 } … … 163 163 if (params[nParam] < params_min) { 164 164 params[nParam] = params_min; 165 psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g",166 nParam, params[nParam], params_min);165 psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g", 166 nParam, params[nParam], params_min); 167 167 return false; 168 168 } … … 199 199 if (params[nParam] > params_max) { 200 200 params[nParam] = params_max; 201 psTrace ("psModules.objects", 5, "params[nParam==%d] > params_max; %g v. %g",202 nParam, params[nParam], params_max);201 psTrace ("psModules.objects", 5, "params[nParam==%d] > params_max; %g v. %g", 202 nParam, params[nParam], params_max); 203 203 return false; 204 204 } … … 344 344 } 345 345 346 bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, pmPSF *psf)346 bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, const pmPSF *psf) 347 347 { 348 348 … … 366 366 // convert to shape terms (SXX,SYY,SXY) 367 367 if (!pmPSF_FitToModel (out, 0.1)) { 368 psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)",369 in[PM_PAR_YPOS], in[PM_PAR_XPOS]);370 return false;368 psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", 369 in[PM_PAR_YPOS], in[PM_PAR_XPOS]); 370 return false; 371 371 } 372 372 … … 378 378 continue; 379 379 380 bool status = true;380 bool status = true; 381 381 status &= PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MIN, i, out, NULL); 382 status &= PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MAX, i, out, NULL);383 if (!status) {384 psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)",385 in[PM_PAR_XPOS], in[PM_PAR_YPOS]);386 modelPSF->flags |= PM_MODEL_STATUS_LIMITS;387 }382 status &= PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MAX, i, out, NULL); 383 if (!status) { 384 psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", 385 in[PM_PAR_XPOS], in[PM_PAR_YPOS]); 386 modelPSF->flags |= PM_MODEL_STATUS_LIMITS; 387 } 388 388 } 389 389 … … 393 393 // construct the PSF model from the FLT model and the psf 394 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)395 bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, const pmPSF *psf, float Xo, float Yo, float Io) 396 396 { 397 397 psF32 *PAR = model->params->data.F32; … … 405 405 PAR[PM_PAR_XPOS] = Xo; 406 406 PAR[PM_PAR_YPOS] = Yo; 407 407 408 408 // supply the model-fitted parameters, or copy from the input 409 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 pmTrend2D *trend = psf->params->data[i];415 PAR[i] = pmTrend2DEval(trend, Xo, Yo);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 pmTrend2D *trend = psf->params->data[i]; 415 PAR[i] = pmTrend2DEval(trend, Xo, Yo); 416 416 } 417 417 … … 420 420 // XXX user-defined value for limit? 421 421 if (!pmPSF_FitToModel (PAR, 0.1)) { 422 psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo);423 return false;422 psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo); 423 return false; 424 424 } 425 425 … … 431 431 continue; 432 432 433 bool status = true;433 bool status = true; 434 434 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, PAR, NULL); 435 435 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, PAR, NULL); 436 if (!status) {437 psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo);438 model->flags |= PM_MODEL_STATUS_LIMITS;439 }436 if (!status) { 437 psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo); 438 model->flags |= PM_MODEL_STATUS_LIMITS; 439 } 440 440 } 441 441 return(true);
Note:
See TracChangeset
for help on using the changeset viewer.
