- Timestamp:
- Aug 17, 2007, 11:27:05 AM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branch_20070817/psphot/src/models/pmModel_TEST1.c
r11702 r14545 16 16 *****************************************************************************/ 17 17 18 # define PM_MODEL_FUNC pmModelFunc_TEST1 19 # define PM_MODEL_FLUX pmModelFlux_TEST1 20 # define PM_MODEL_GUESS pmModelGuess_TEST1 21 # define PM_MODEL_LIMITS pmModelLimits_TEST1 22 # define PM_MODEL_RADIUS pmModelRadius_TEST1 23 # define PM_MODEL_FROM_PSF pmModelFromPSF_TEST1 24 # define PM_MODEL_FIT_STATUS pmModelFitStatus_TEST1 25 26 // XXX consider changing to form PAR[SXY]*(1/PAR[SXX]^2 + 1/PAR[SYY]^2)*X*Y 27 // this would provide natural limits on PAR[SXY] of -0.25 : +0.25 18 # define PM_MODEL_FUNC pmModelFunc_TEST1 19 # define PM_MODEL_FLUX pmModelFlux_TEST1 20 # define PM_MODEL_GUESS pmModelGuess_TEST1 21 # define PM_MODEL_LIMITS pmModelLimits_TEST1 22 # define PM_MODEL_RADIUS pmModelRadius_TEST1 23 # define PM_MODEL_FROM_PSF pmModelFromPSF_TEST1 24 # define PM_MODEL_PARAMS_FROM_PSF pmModelParamsFromPSF_TEST1 25 # define PM_MODEL_FIT_STATUS pmModelFitStatus_TEST1 28 26 29 27 // the model is a function of the pixel coordinate (pixcoord[0,1] = x,y) 30 28 psF32 PM_MODEL_FUNC(psVector *deriv, 31 const psVector *params,32 const psVector *pixcoord)29 const psVector *params, 30 const psVector *pixcoord) 33 31 { 34 32 psF32 *PAR = params->data.F32; … … 125 123 126 124 // make an initial guess for parameters 127 bool PM_MODEL_GUESS (pmModel *model, pmSource *source) 128 { 125 bool PM_MODEL_GUESS (void *inModel, void *inSource) 126 { 127 pmModel *model = inModel; 128 pmSource *source = inSource; 129 129 130 130 pmMoments *moments = source->moments; … … 160 160 norm = 0.0; 161 161 162 # define DZ 0.25162 # define DZ 0.25 163 163 164 164 float f0 = 1.0; … … 207 207 } 208 208 209 bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, pmPSF *psf) 210 { 209 bool PM_MODEL_FROM_PSF (void *inModelPSF, void *inModelFLT, void *inPSF) 210 { 211 pmModel *modelPSF = inModelPSF; 212 pmModel *modelFLT = inModelFLT; 213 pmPSF *psf = inPSF; 211 214 212 215 psF32 *out = modelPSF->params->data.F32; … … 232 235 } 233 236 237 // construct the PSF model from the FLT model and the psf 238 // XXX is this sufficiently general do be a global function, not a pmModelClass function? 239 bool PM_MODEL_PARAMS_FROM_PSF (void *inModel, void *inPSF, float Xo, float Yo, float Io) 240 { 241 pmModel *model = inModel; 242 pmPSF *psf = inPSF; 243 244 psF32 *PAR = model->params->data.F32; 245 246 // we require these two parameters to exist 247 assert (psf->params_NEW->n > PM_PAR_YPOS); 248 assert (psf->params_NEW->n > PM_PAR_XPOS); 249 250 PAR[PM_PAR_SKY] = 0.0; 251 PAR[PM_PAR_I0] = Io; 252 PAR[PM_PAR_XPOS] = Xo; 253 PAR[PM_PAR_YPOS] = Yo; 254 255 // supply the model-fitted parameters, or copy from the input 256 for (int i = 0; i < psf->params_NEW->n; i++) { 257 if (i == PM_PAR_SKY) continue; 258 psPolynomial2D *poly = psf->params_NEW->data[i]; 259 assert (poly); 260 PAR[i] = psPolynomial2DEval(poly, Xo, Yo); 261 } 262 263 // the 2D PSF model fits polarization terms (E0,E1,E2) 264 // convert to shape terms (SXX,SYY,SXY) 265 // XXX user-defined value for limit? 266 if (!pmPSF_FitToModel (PAR, 0.1)) { 267 psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo); 268 return false; 269 } 270 271 // apply the model limits here: this truncates excessive extrapolation 272 // XXX do we need to do this still? should we put in asserts to test? 273 for (int i = 0; i < psf->params_NEW->n; i++) { 274 // apply the limits to all components or just the psf-model parameters? 275 if (psf->params_NEW->data[i] == NULL) 276 continue; 277 278 bool status = true; 279 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, PAR, NULL); 280 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, PAR, NULL); 281 if (!status) { 282 psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo); 283 model->flags |= PM_MODEL_STATUS_LIMITS; 284 } 285 } 286 return(true); 287 } 288 234 289 // XXX double-check these definitions below 235 290 // this test is invalid if the parameters are derived 236 291 // from the PSF model 237 bool PM_MODEL_FIT_STATUS (pmModel *model) 238 { 292 bool PM_MODEL_FIT_STATUS (void *inModel) 293 { 294 pmModel *model = inModel; 239 295 240 296 psF32 dP; … … 265 321 # undef PM_MODEL_RADIUS 266 322 # undef PM_MODEL_FROM_PSF 323 # undef PM_MODEL_PARAMS_FROM_PSF 267 324 # undef PM_MODEL_FIT_STATUS
Note:
See TracChangeset
for help on using the changeset viewer.
