Changeset 14612
- Timestamp:
- Aug 22, 2007, 2:55:49 PM (19 years ago)
- Location:
- branches/eam_branch_20070817/psModules/src/objects
- Files:
-
- 36 edited
-
models/pmModel_GAUSS.c (modified) (11 diffs)
-
models/pmModel_PGAUSS.c (modified) (10 diffs)
-
models/pmModel_QGAUSS.c (modified) (5 diffs)
-
models/pmModel_RGAUSS.c (modified) (5 diffs)
-
models/pmModel_SERSIC.c (modified) (5 diffs)
-
pmGrowthCurve.c (modified) (2 diffs)
-
pmModel.c (modified) (2 diffs)
-
pmModel.h (modified) (7 diffs)
-
pmModelClass.c (modified) (3 diffs)
-
pmModelGroup.c (modified) (2 diffs)
-
pmModelUtils.c (modified) (2 diffs)
-
pmModelUtils.h (modified) (3 diffs)
-
pmPSF.c (modified) (10 diffs)
-
pmPSF.h (modified) (4 diffs)
-
pmPSF_IO.c (modified) (25 diffs)
-
pmPSF_IO.h (modified) (2 diffs)
-
pmPSFtry.c (modified) (6 diffs)
-
pmSource.c (modified) (2 diffs)
-
pmSource.h (modified) (3 diffs)
-
pmSourceContour.c (modified) (2 diffs)
-
pmSourceFitModel.c (modified) (2 diffs)
-
pmSourceFitSet.c (modified) (2 diffs)
-
pmSourceIO.c (modified) (2 diffs)
-
pmSourceIO_CMP.c (modified) (2 diffs)
-
pmSourceIO_OBJ.c (modified) (2 diffs)
-
pmSourceIO_PS1_DEV_0.c (modified) (2 diffs)
-
pmSourceIO_RAW.c (modified) (2 diffs)
-
pmSourceIO_SMPDATA.c (modified) (2 diffs)
-
pmSourceIO_SX.c (modified) (2 diffs)
-
pmSourcePhotometry.c (modified) (2 diffs)
-
pmSourcePlotApResid.c (modified) (2 diffs)
-
pmSourcePlotMoments.c (modified) (2 diffs)
-
pmSourcePlotPSFModel.c (modified) (2 diffs)
-
pmSourceSky.c (modified) (2 diffs)
-
pmSourceUtils.c (modified) (6 diffs)
-
pmSourceUtils.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branch_20070817/psModules/src/objects/models/pmModel_GAUSS.c
r14544 r14612 28 28 # define PM_MODEL_FIT_STATUS pmModelFitStatus_GAUSS 29 29 30 // the model is a function of the pixel coordinate (pixcoord[0,1] = x,y) 30 31 psF32 PM_MODEL_FUNC(psVector *deriv, 31 32 const psVector *params, … … 39 40 psF32 py = Y / PAR[PM_PAR_SYY]; 40 41 psF32 z = PS_SQR(px) + PS_SQR(py) + PAR[PM_PAR_SXY]*X*Y; 42 assert (z >= 0.0); 43 41 44 psF32 r = exp(-z); 42 45 psF32 q = PAR[PM_PAR_I0]*r; … … 62 65 # define AR_MAX 20.0 63 66 # define AR_RATIO 0.99 67 64 68 bool PM_MODEL_LIMITS (psMinConstraintMode mode, int nParam, float *params, float *beta) 65 69 { … … 94 98 break; 95 99 case PM_PAR_SXX: 96 beta_lim = 0.5;100 beta_lim = 2.0; 97 101 break; 98 102 case PM_PAR_SYY: 99 beta_lim = 0.5;103 beta_lim = 2.0; 100 104 break; 101 105 case PM_PAR_SXY: … … 186 190 187 191 // make an initial guess for parameters 188 bool PM_MODEL_GUESS (void *inModel, void *inSource) 189 { 190 pmModel *model = inModel; 191 pmSource *source = inSource; 192 192 bool PM_MODEL_GUESS (pmModel *model, pmSource *source) 193 { 193 194 pmMoments *moments = source->moments; 194 195 psF32 *PAR = model->params->data.F32; … … 259 260 260 261 // construct the PSF model from the FLT model and the psf 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; 266 262 bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, pmPSF *psf) 263 { 267 264 psF32 *out = modelPSF->params->data.F32; 268 265 psF32 *in = modelFLT->params->data.F32; 269 266 270 267 // we require these two parameters to exist 271 assert (psf->params _NEW->n > PM_PAR_YPOS);272 assert (psf->params _NEW->n > PM_PAR_XPOS);268 assert (psf->params->n > PM_PAR_YPOS); 269 assert (psf->params->n > PM_PAR_XPOS); 273 270 274 271 // supply the model-fitted parameters, or copy from the input 275 for (int i = 0; i < psf->params _NEW->n; i++) {276 if (psf->params _NEW->data[i] == NULL) {272 for (int i = 0; i < psf->params->n; i++) { 273 if (psf->params->data[i] == NULL) { 277 274 out[i] = in[i]; 278 275 } else { 279 psPolynomial2D *poly = psf->params _NEW->data[i];276 psPolynomial2D *poly = psf->params->data[i]; 280 277 out[i] = psPolynomial2DEval(poly, in[PM_PAR_XPOS], in[PM_PAR_YPOS]); 281 278 } … … 296 293 // apply the model limits here: this truncates excessive extrapolation 297 294 // XXX do we need to do this still? should we put in asserts to test? 298 for (int i = 0; i < psf->params _NEW->n; i++) {295 for (int i = 0; i < psf->params->n; i++) { 299 296 // apply the limits to all components or just the psf-model parameters? 300 if (psf->params _NEW->data[i] == NULL)297 if (psf->params->data[i] == NULL) 301 298 continue; 302 299 … … 315 312 // construct the PSF model from the FLT model and the psf 316 313 // 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 314 bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, pmPSF *psf, float Xo, float Yo, float Io) 315 { 322 316 psF32 *PAR = model->params->data.F32; 323 317 324 318 // 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);319 assert (psf->params->n > PM_PAR_YPOS); 320 assert (psf->params->n > PM_PAR_XPOS); 327 321 328 322 PAR[PM_PAR_SKY] = 0.0; … … 332 326 333 327 // supply the model-fitted parameters, or copy from the input 334 for (int i = 0; i < psf->params _NEW->n; i++) {328 for (int i = 0; i < psf->params->n; i++) { 335 329 if (i == PM_PAR_SKY) continue; 336 psPolynomial2D *poly = psf->params_NEW->data[i]; 330 if (i == PM_PAR_I0) continue; 331 if (i == PM_PAR_XPOS) continue; 332 if (i == PM_PAR_YPOS) continue; 333 psPolynomial2D *poly = psf->params->data[i]; 337 334 assert (poly); 338 335 PAR[i] = psPolynomial2DEval(poly, Xo, Yo); … … 349 346 // apply the model limits here: this truncates excessive extrapolation 350 347 // 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++) {348 for (int i = 0; i < psf->params->n; i++) { 352 349 // apply the limits to all components or just the psf-model parameters? 353 if (psf->params _NEW->data[i] == NULL)350 if (psf->params->data[i] == NULL) 354 351 continue; 355 352 … … 368 365 // this test is invalid if the parameters are derived 369 366 // from the PSF model 370 bool PM_MODEL_FIT_STATUS (void *inModel) 371 { 372 pmModel *model = inModel; 373 367 bool PM_MODEL_FIT_STATUS (pmModel *model) 368 { 374 369 psF32 dP; 375 370 bool status; -
branches/eam_branch_20070817/psModules/src/objects/models/pmModel_PGAUSS.c
r14220 r14612 19 19 *****************************************************************************/ 20 20 21 # define PM_MODEL_FUNC pmModelFunc_PGAUSS 22 # define PM_MODEL_FLUX pmModelFlux_PGAUSS 23 # define PM_MODEL_GUESS pmModelGuess_PGAUSS 24 # define PM_MODEL_LIMITS pmModelLimits_PGAUSS 25 # define PM_MODEL_RADIUS pmModelRadius_PGAUSS 26 # define PM_MODEL_FROM_PSF pmModelFromPSF_PGAUSS 27 # define PM_MODEL_FIT_STATUS pmModelFitStatus_PGAUSS 21 # define PM_MODEL_FUNC pmModelFunc_PGAUSS 22 # define PM_MODEL_FLUX pmModelFlux_PGAUSS 23 # define PM_MODEL_GUESS pmModelGuess_PGAUSS 24 # define PM_MODEL_LIMITS pmModelLimits_PGAUSS 25 # define PM_MODEL_RADIUS pmModelRadius_PGAUSS 26 # define PM_MODEL_FROM_PSF pmModelFromPSF_PGAUSS 27 # define PM_MODEL_PARAMS_FROM_PSF pmModelParamsFromPSF_PGAUSS 28 # define PM_MODEL_FIT_STATUS pmModelFitStatus_PGAUSS 28 29 29 30 // the model is a function of the pixel coordinate (pixcoord[0,1] = x,y) … … 66 67 # define AR_RATIO 0.99 67 68 68 // we constraint limits by the min valid minor axis:69 # define MIN_MINOR_AXIS 0.570 71 // f3 = (s_b^-2 - s_a^-2); F3_SQ_MAX is MIN_MINOR_AXIS^-472 # define F3_SQ_MAX 16.073 74 static float saveParams[8];75 76 69 bool PM_MODEL_LIMITS (psMinConstraintMode mode, int nParam, float *params, float *beta) 77 70 { … … 150 143 psAbort("invalid parameter %d for param min test", nParam); 151 144 } 152 saveParams[nParam] = params[nParam];153 145 if (params[nParam] < params_min) { 154 146 params[nParam] = params_min; … … 184 176 psAbort("invalid parameter %d for param max test", nParam); 185 177 } 186 saveParams[nParam] = params[nParam];187 178 if (params[nParam] > params_max) { 188 179 params[nParam] = params_max; … … 263 254 psF64 PM_MODEL_RADIUS (const psVector *params, psF64 flux) 264 255 { 256 psF64 z, f; 257 int Nstep = 0; 265 258 psEllipseShape shape; 266 259 … … 280 273 // this estimates the radius assuming f(z) is roughly exp(-z) 281 274 psEllipseAxes axes = psEllipseShapeToAxes (shape, 20.0); 282 psF64 radius = axes.major * sqrt (2.0 * log(PAR[PM_PAR_I0] / flux)); 275 psF64 sigma = axes.major; 276 277 psF64 limit = flux / PAR[PM_PAR_I0]; 278 279 // use the fact that f is monotonically decreasing 280 z = 0; 281 Nstep = 0; 282 283 // choose a z value guaranteed to be beyond our limit 284 float z0 = pow((1.0 / limit), (1.0 / 3.0)); 285 float z1 = (1.0 / limit); 286 z1 = PS_MAX (z0, z1); 287 z0 = 0.0; 288 289 // perform a type of bisection to find the value 290 float f0 = 1.0 / (1 + z0 + z0*z0/2.0 + z0*z0*z0/6.0); 291 float f1 = 1.0 / (1 + z1 + z1*z1/2.0 + z1*z1*z1/6.0); 292 while ((Nstep < 10) && (fabs(z1 - z0) > 0.5)) { 293 z = 0.5*(z0 + z1); 294 f = 1.0 / (1 + z + z*z/2.0 + z*z*z/6.0); 295 if (f > limit) { 296 z0 = z; 297 f0 = f; 298 } else { 299 z1 = z; 300 f1 = f; 301 } 302 Nstep ++; 303 } 304 psF64 radius = sigma * sqrt (2.0 * z); 305 306 // psF64 radius = axes.major * sqrt (2.0 * log(PAR[PM_PAR_I0] / flux)); 283 307 284 308 if (isnan(radius)) … … 297 321 298 322 // we require these two parameters to exist 299 assert (psf->params _NEW->n > PM_PAR_YPOS);300 assert (psf->params _NEW->n > PM_PAR_XPOS);301 302 for (int i = 0; i < psf->params _NEW->n; i++) {303 if (psf->params _NEW->data[i] == NULL) {323 assert (psf->params->n > PM_PAR_YPOS); 324 assert (psf->params->n > PM_PAR_XPOS); 325 326 for (int i = 0; i < psf->params->n; i++) { 327 if (psf->params->data[i] == NULL) { 304 328 out[i] = in[i]; 305 329 } else { 306 psPolynomial2D *poly = psf->params _NEW->data[i];330 psPolynomial2D *poly = psf->params->data[i]; 307 331 out[i] = psPolynomial2DEval(poly, in[PM_PAR_XPOS], in[PM_PAR_YPOS]); 308 332 } … … 322 346 // apply the model limits here: this truncates excessive extrapolation 323 347 // XXX do we need to do this still? should we put in asserts to test? 324 for (int i = 0; i < psf->params _NEW->n; i++) {348 for (int i = 0; i < psf->params->n; i++) { 325 349 // apply the limits to all components or just the psf-model parameters? 326 if (psf->params _NEW->data[i] == NULL)350 if (psf->params->data[i] == NULL) 327 351 continue; 328 352 … … 339 363 } 340 364 365 // construct the PSF model from the FLT model and the psf 366 // XXX is this sufficiently general do be a global function, not a pmModelClass function? 367 bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, pmPSF *psf, float Xo, float Yo, float Io) 368 { 369 psF32 *PAR = model->params->data.F32; 370 371 // we require these two parameters to exist 372 assert (psf->params->n > PM_PAR_YPOS); 373 assert (psf->params->n > PM_PAR_XPOS); 374 375 PAR[PM_PAR_SKY] = 0.0; 376 PAR[PM_PAR_I0] = Io; 377 PAR[PM_PAR_XPOS] = Xo; 378 PAR[PM_PAR_YPOS] = Yo; 379 380 // supply the model-fitted parameters, or copy from the input 381 for (int i = 0; i < psf->params->n; i++) { 382 if (i == PM_PAR_SKY) continue; 383 if (i == PM_PAR_I0) continue; 384 if (i == PM_PAR_XPOS) continue; 385 if (i == PM_PAR_YPOS) continue; 386 psPolynomial2D *poly = psf->params->data[i]; 387 assert (poly); 388 PAR[i] = psPolynomial2DEval(poly, Xo, Yo); 389 } 390 391 // the 2D PSF model fits polarization terms (E0,E1,E2) 392 // convert to shape terms (SXX,SYY,SXY) 393 // XXX user-defined value for limit? 394 if (!pmPSF_FitToModel (PAR, 0.1)) { 395 psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo); 396 return false; 397 } 398 399 // apply the model limits here: this truncates excessive extrapolation 400 // XXX do we need to do this still? should we put in asserts to test? 401 for (int i = 0; i < psf->params->n; i++) { 402 // apply the limits to all components or just the psf-model parameters? 403 if (psf->params->data[i] == NULL) 404 continue; 405 406 bool status = true; 407 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, PAR, NULL); 408 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, PAR, NULL); 409 if (!status) { 410 psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo); 411 model->flags |= PM_MODEL_STATUS_LIMITS; 412 } 413 } 414 return(true); 415 } 416 341 417 bool PM_MODEL_FIT_STATUS (pmModel *model) 342 418 { … … 367 443 # undef PM_MODEL_RADIUS 368 444 # undef PM_MODEL_FROM_PSF 445 # undef PM_MODEL_PARAMS_FROM_PSF 369 446 # undef PM_MODEL_FIT_STATUS -
branches/eam_branch_20070817/psModules/src/objects/models/pmModel_QGAUSS.c
r14344 r14612 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 -
branches/eam_branch_20070817/psModules/src/objects/models/pmModel_RGAUSS.c
r14323 r14612 20 20 *****************************************************************************/ 21 21 22 # define PM_MODEL_FUNC pmModelFunc_RGAUSS 23 # define PM_MODEL_FLUX pmModelFlux_RGAUSS 24 # define PM_MODEL_GUESS pmModelGuess_RGAUSS 25 # define PM_MODEL_LIMITS pmModelLimits_RGAUSS 26 # define PM_MODEL_RADIUS pmModelRadius_RGAUSS 27 # define PM_MODEL_FROM_PSF pmModelFromPSF_RGAUSS 28 # define PM_MODEL_FIT_STATUS pmModelFitStatus_RGAUSS 22 # define PM_MODEL_FUNC pmModelFunc_RGAUSS 23 # define PM_MODEL_FLUX pmModelFlux_RGAUSS 24 # define PM_MODEL_GUESS pmModelGuess_RGAUSS 25 # define PM_MODEL_LIMITS pmModelLimits_RGAUSS 26 # define PM_MODEL_RADIUS pmModelRadius_RGAUSS 27 # define PM_MODEL_FROM_PSF pmModelFromPSF_RGAUSS 28 # define PM_MODEL_PARAMS_FROM_PSF pmModelParamsFromPSF_RGAUSS 29 # define PM_MODEL_FIT_STATUS pmModelFitStatus_RGAUSS 29 30 30 31 psF32 PM_MODEL_FUNC (psVector *deriv, … … 343 344 344 345 // we require these two parameters to exist 345 assert (psf->params _NEW->n > PM_PAR_YPOS);346 assert (psf->params _NEW->n > PM_PAR_XPOS);347 348 for (int i = 0; i < psf->params _NEW->n; i++) {349 if (psf->params _NEW->data[i] == NULL) {346 assert (psf->params->n > PM_PAR_YPOS); 347 assert (psf->params->n > PM_PAR_XPOS); 348 349 for (int i = 0; i < psf->params->n; i++) { 350 if (psf->params->data[i] == NULL) { 350 351 out[i] = in[i]; 351 352 } else { 352 psPolynomial2D *poly = psf->params _NEW->data[i];353 psPolynomial2D *poly = psf->params->data[i]; 353 354 out[i] = psPolynomial2DEval(poly, in[PM_PAR_XPOS], in[PM_PAR_YPOS]); 354 355 } … … 365 366 // apply the model limits here: this truncates excessive extrapolation 366 367 // XXX do we need to do this still? should we put in asserts to test? 367 for (int i = 0; i < psf->params _NEW->n; i++) {368 for (int i = 0; i < psf->params->n; i++) { 368 369 // apply the limits to all components or just the psf-model parameters? 369 if (psf->params _NEW->data[i] == NULL)370 if (psf->params->data[i] == NULL) 370 371 continue; 371 372 … … 383 384 } 384 385 386 // construct the PSF model from the FLT model and the psf 387 // XXX is this sufficiently general do be a global function, not a pmModelClass function? 388 bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, pmPSF *psf, float Xo, float Yo, float Io) 389 { 390 psF32 *PAR = model->params->data.F32; 391 392 // we require these two parameters to exist 393 assert (psf->params->n > PM_PAR_YPOS); 394 assert (psf->params->n > PM_PAR_XPOS); 395 396 PAR[PM_PAR_SKY] = 0.0; 397 PAR[PM_PAR_I0] = Io; 398 PAR[PM_PAR_XPOS] = Xo; 399 PAR[PM_PAR_YPOS] = Yo; 400 401 // supply the model-fitted parameters, or copy from the input 402 for (int i = 0; i < psf->params->n; i++) { 403 if (i == PM_PAR_SKY) continue; 404 if (i == PM_PAR_I0) continue; 405 if (i == PM_PAR_XPOS) continue; 406 if (i == PM_PAR_YPOS) continue; 407 psPolynomial2D *poly = psf->params->data[i]; 408 assert (poly); 409 PAR[i] = psPolynomial2DEval(poly, Xo, Yo); 410 } 411 412 // the 2D PSF model fits polarization terms (E0,E1,E2) 413 // convert to shape terms (SXX,SYY,SXY) 414 // XXX user-defined value for limit? 415 if (!pmPSF_FitToModel (PAR, 0.1)) { 416 psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo); 417 return false; 418 } 419 420 // apply the model limits here: this truncates excessive extrapolation 421 // XXX do we need to do this still? should we put in asserts to test? 422 for (int i = 0; i < psf->params->n; i++) { 423 // apply the limits to all components or just the psf-model parameters? 424 if (psf->params->data[i] == NULL) 425 continue; 426 427 bool status = true; 428 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, PAR, NULL); 429 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, PAR, NULL); 430 if (!status) { 431 psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo); 432 model->flags |= PM_MODEL_STATUS_LIMITS; 433 } 434 } 435 return(true); 436 } 437 385 438 bool PM_MODEL_FIT_STATUS (pmModel *model) 386 439 { … … 411 464 # undef PM_MODEL_RADIUS 412 465 # undef PM_MODEL_FROM_PSF 466 # undef PM_MODEL_PARAMS_FROM_PSF 413 467 # undef PM_MODEL_FIT_STATUS -
branches/eam_branch_20070817/psModules/src/objects/models/pmModel_SERSIC.c
r14345 r14612 23 23 *****************************************************************************/ 24 24 25 # define PM_MODEL_FUNC pmModelFunc_SERSIC 26 # define PM_MODEL_FLUX pmModelFlux_SERSIC 27 # define PM_MODEL_GUESS pmModelGuess_SERSIC 28 # define PM_MODEL_LIMITS pmModelLimits_SERSIC 29 # define PM_MODEL_RADIUS pmModelRadius_SERSIC 30 # define PM_MODEL_FROM_PSF pmModelFromPSF_SERSIC 31 # define PM_MODEL_FIT_STATUS pmModelFitStatus_SERSIC 25 # define PM_MODEL_FUNC pmModelFunc_SERSIC 26 # define PM_MODEL_FLUX pmModelFlux_SERSIC 27 # define PM_MODEL_GUESS pmModelGuess_SERSIC 28 # define PM_MODEL_LIMITS pmModelLimits_SERSIC 29 # define PM_MODEL_RADIUS pmModelRadius_SERSIC 30 # define PM_MODEL_FROM_PSF pmModelFromPSF_SERSIC 31 # define PM_MODEL_PARAMS_FROM_PSF pmModelParamsFromPSF_SERSIC 32 # define PM_MODEL_FIT_STATUS pmModelFitStatus_SERSIC 32 33 33 34 psF32 PM_MODEL_FUNC (psVector *deriv, … … 360 361 361 362 // we require these two parameters to exist 362 assert (psf->params _NEW->n > PM_PAR_YPOS);363 assert (psf->params _NEW->n > PM_PAR_XPOS);364 365 for (int i = 0; i < psf->params _NEW->n; i++) {366 if (psf->params _NEW->data[i] == NULL) {363 assert (psf->params->n > PM_PAR_YPOS); 364 assert (psf->params->n > PM_PAR_XPOS); 365 366 for (int i = 0; i < psf->params->n; i++) { 367 if (psf->params->data[i] == NULL) { 367 368 out[i] = in[i]; 368 369 } else { 369 psPolynomial2D *poly = psf->params _NEW->data[i];370 psPolynomial2D *poly = psf->params->data[i]; 370 371 out[i] = psPolynomial2DEval(poly, in[PM_PAR_XPOS], in[PM_PAR_YPOS]); 371 372 } … … 382 383 // apply the model limits here: this truncates excessive extrapolation 383 384 // XXX do we need to do this still? should we put in asserts to test? 384 for (int i = 0; i < psf->params _NEW->n; i++) {385 for (int i = 0; i < psf->params->n; i++) { 385 386 // apply the limits to all components or just the psf-model parameters? 386 if (psf->params _NEW->data[i] == NULL)387 if (psf->params->data[i] == NULL) 387 388 continue; 388 389 … … 400 401 } 401 402 403 // construct the PSF model from the FLT model and the psf 404 // XXX is this sufficiently general do be a global function, not a pmModelClass function? 405 bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, pmPSF *psf, float Xo, float Yo, float Io) 406 { 407 psF32 *PAR = model->params->data.F32; 408 409 // we require these two parameters to exist 410 assert (psf->params->n > PM_PAR_YPOS); 411 assert (psf->params->n > PM_PAR_XPOS); 412 413 PAR[PM_PAR_SKY] = 0.0; 414 PAR[PM_PAR_I0] = Io; 415 PAR[PM_PAR_XPOS] = Xo; 416 PAR[PM_PAR_YPOS] = Yo; 417 418 // supply the model-fitted parameters, or copy from the input 419 for (int i = 0; i < psf->params->n; i++) { 420 if (i == PM_PAR_SKY) continue; 421 if (i == PM_PAR_I0) continue; 422 if (i == PM_PAR_XPOS) continue; 423 if (i == PM_PAR_YPOS) continue; 424 psPolynomial2D *poly = psf->params->data[i]; 425 assert (poly); 426 PAR[i] = psPolynomial2DEval(poly, Xo, Yo); 427 } 428 429 // the 2D PSF model fits polarization terms (E0,E1,E2) 430 // convert to shape terms (SXX,SYY,SXY) 431 // XXX user-defined value for limit? 432 if (!pmPSF_FitToModel (PAR, 0.1)) { 433 psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo); 434 return false; 435 } 436 437 // apply the model limits here: this truncates excessive extrapolation 438 // XXX do we need to do this still? should we put in asserts to test? 439 for (int i = 0; i < psf->params->n; i++) { 440 // apply the limits to all components or just the psf-model parameters? 441 if (psf->params->data[i] == NULL) 442 continue; 443 444 bool status = true; 445 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, PAR, NULL); 446 status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, PAR, NULL); 447 if (!status) { 448 psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo); 449 model->flags |= PM_MODEL_STATUS_LIMITS; 450 } 451 } 452 return(true); 453 } 454 402 455 bool PM_MODEL_FIT_STATUS (pmModel *model) 403 456 { … … 428 481 # undef PM_MODEL_RADIUS 429 482 # undef PM_MODEL_FROM_PSF 483 # undef PM_MODEL_PARAMS_FROM_PSF 430 484 # undef PM_MODEL_FIT_STATUS -
branches/eam_branch_20070817/psModules/src/objects/pmGrowthCurve.c
r12949 r14612 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1.10 $ $Name: not supported by cvs2svn $8 * @date $Date: 2007-0 4-21 19:47:14$7 * @version $Revision: 1.10.8.1 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2007-08-23 00:55:49 $ 9 9 * 10 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 23 23 #include "pmMoments.h" 24 24 #include "pmResiduals.h" 25 #include "pmGrowthCurve.h" 26 #include "pmPSF.h" 25 27 #include "pmModel.h" 26 28 #include "pmSource.h" 27 #include "pmGrowthCurve.h"28 #include "pmPSF.h"29 29 #include "psVectorBracket.h" 30 30 -
branches/eam_branch_20070817/psModules/src/objects/pmModel.c
r14544 r14612 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1.13.6. 1$ $Name: not supported by cvs2svn $9 * @date $Date: 2007-08- 17 21:01:59 $8 * @version $Revision: 1.13.6.2 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-08-23 00:55:49 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 21 21 #include <string.h> 22 22 #include <pslib.h> 23 #include "pmHDU.h" 24 #include "pmFPA.h" 23 25 #include "pmResiduals.h" 26 #include "pmGrowthCurve.h" 27 #include "pmPSF.h" 24 28 #include "pmModel.h" 25 29 #include "pmModelClass.h" -
branches/eam_branch_20070817/psModules/src/objects/pmModel.h
r14546 r14612 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1.11.6. 2$ $Name: not supported by cvs2svn $8 * @date $Date: 2007-08-2 0 01:58:16$7 * @version $Revision: 1.11.6.3 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2007-08-23 00:55:49 $ 9 9 * 10 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 14 14 # define PM_MODEL_H 15 15 16 # define TMP_PSF_TYPE void17 # define TMP_MODEL_TYPE void18 # define TMP_SOURCE_TYPE void19 20 16 /// @addtogroup Objects Object Detection / Analysis Functions 21 17 /// @{ … … 23 19 /* pointers for the functions types below are supplied to each pmModel, and can be used by 24 20 the programmer without needing to know the model class */ 25 26 // type of model carried by the pmModel structure27 typedef int pmModelType;28 21 29 22 typedef enum { … … 48 41 } pmModelOpMode; 49 42 43 typedef struct pmModel pmModel; 44 typedef struct pmSource pmSource; 45 50 46 // This function is the model chi-square minimization function for this model. 51 47 typedef psMinimizeLMChi2Func pmModelFunc; … … 63 59 // This function provides the model guess parameters based on the details of 64 60 // the given source. 65 typedef bool (*pmModelGuessFunc)( TMP_MODEL_TYPE *model, TMP_SOURCE_TYPE*source);61 typedef bool (*pmModelGuessFunc)(pmModel *model, pmSource *source); 66 62 67 63 // This function constructs the PSF model for the given source based on the 68 64 // supplied psf and the EXT model for the object. 69 typedef bool (*pmModelFromPSFFunc)( TMP_MODEL_TYPE *modelPSF, TMP_MODEL_TYPE *modelEXT, TMP_PSF_TYPE*psf);65 typedef bool (*pmModelFromPSFFunc)(pmModel *modelPSF, pmModel *modelEXT, pmPSF *psf); 70 66 71 67 // This function sets the model parameters based on the PSF for a given coordinate and central 72 68 // intensity 73 typedef bool (*pmModelParamsFromPSF)( TMP_MODEL_TYPE *model, TMP_PSF_TYPE*psf, float Xo, float Yo, float Io);69 typedef bool (*pmModelParamsFromPSF)(pmModel *model, pmPSF *psf, float Xo, float Yo, float Io); 74 70 75 71 // This function returns the success / failure status of the given model fit 76 typedef bool (*pmModelFitStatusFunc)( TMP_MODEL_TYPE*model);72 typedef bool (*pmModelFitStatusFunc)(pmModel *model); 77 73 78 74 /** pmModel data structure … … 85 81 * 86 82 */ 87 typedef struct 88 { 83 struct pmModel { 89 84 pmModelType type; ///< Model to be used. 90 85 psVector *params; ///< Paramater values. … … 107 102 pmModelParamsFromPSF modelParamsFromPSF; 108 103 pmModelFitStatusFunc modelFitStatus; 109 } pmModel;104 }; 110 105 111 106 /** Symbolic names for the elements of [d]params -
branches/eam_branch_20070817/psModules/src/objects/pmModelClass.c
r14544 r14612 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1.1.2. 1$ $Name: not supported by cvs2svn $9 * @date $Date: 2007-08- 17 21:01:59 $8 * @version $Revision: 1.1.2.2 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-08-23 00:55:49 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 25 25 #include "pmPeaks.h" 26 26 #include "pmMoments.h" 27 #include "pmResiduals.h" 27 28 #include "pmGrowthCurve.h" 28 #include "pm Residuals.h"29 #include "pmPSF.h" 29 30 #include "pmModel.h" 30 #include "pmPSF.h"31 31 #include "pmSource.h" 32 32 #include "pmModelClass.h" … … 45 45 static pmModelClass defaultModels[] = { 46 46 {"PS_MODEL_GAUSS", 7, pmModelFunc_GAUSS, pmModelFlux_GAUSS, pmModelRadius_GAUSS, pmModelLimits_GAUSS, pmModelGuess_GAUSS, pmModelFromPSF_GAUSS, pmModelParamsFromPSF_GAUSS, pmModelFitStatus_GAUSS}, 47 //{"PS_MODEL_PGAUSS", 7, pmModelFunc_PGAUSS, pmModelFlux_PGAUSS, pmModelRadius_PGAUSS, pmModelLimits_PGAUSS, pmModelGuess_PGAUSS, pmModelFromPSF_PGAUSS, pmModelParamsFromPSF_PGAUSS, pmModelFitStatus_PGAUSS},48 //{"PS_MODEL_QGAUSS", 8, pmModelFunc_QGAUSS, pmModelFlux_QGAUSS, pmModelRadius_QGAUSS, pmModelLimits_QGAUSS, pmModelGuess_QGAUSS, pmModelFromPSF_QGAUSS, pmModelParamsFromPSF_QGAUSS, pmModelFitStatus_QGAUSS},49 //{"PS_MODEL_RGAUSS", 8, pmModelFunc_RGAUSS, pmModelFlux_RGAUSS, pmModelRadius_RGAUSS, pmModelLimits_RGAUSS, pmModelGuess_RGAUSS, pmModelFromPSF_RGAUSS, pmModelParamsFromPSF_RGAUSS, pmModelFitStatus_RGAUSS},50 //{"PS_MODEL_SERSIC", 8, pmModelFunc_SERSIC, pmModelFlux_SERSIC, pmModelRadius_SERSIC, pmModelLimits_SERSIC, pmModelGuess_SERSIC, pmModelFromPSF_SERSIC, pmModelParamsFromPSF_SERSIC, pmModelFitStatus_SERSIC}47 {"PS_MODEL_PGAUSS", 7, pmModelFunc_PGAUSS, pmModelFlux_PGAUSS, pmModelRadius_PGAUSS, pmModelLimits_PGAUSS, pmModelGuess_PGAUSS, pmModelFromPSF_PGAUSS, pmModelParamsFromPSF_PGAUSS, pmModelFitStatus_PGAUSS}, 48 {"PS_MODEL_QGAUSS", 8, pmModelFunc_QGAUSS, pmModelFlux_QGAUSS, pmModelRadius_QGAUSS, pmModelLimits_QGAUSS, pmModelGuess_QGAUSS, pmModelFromPSF_QGAUSS, pmModelParamsFromPSF_QGAUSS, pmModelFitStatus_QGAUSS}, 49 {"PS_MODEL_RGAUSS", 8, pmModelFunc_RGAUSS, pmModelFlux_RGAUSS, pmModelRadius_RGAUSS, pmModelLimits_RGAUSS, pmModelGuess_RGAUSS, pmModelFromPSF_RGAUSS, pmModelParamsFromPSF_RGAUSS, pmModelFitStatus_RGAUSS}, 50 {"PS_MODEL_SERSIC", 8, pmModelFunc_SERSIC, pmModelFlux_SERSIC, pmModelRadius_SERSIC, pmModelLimits_SERSIC, pmModelGuess_SERSIC, pmModelFromPSF_SERSIC, pmModelParamsFromPSF_SERSIC, pmModelFitStatus_SERSIC} 51 51 }; 52 52 -
branches/eam_branch_20070817/psModules/src/objects/pmModelGroup.c
r14544 r14612 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1.17.4. 1$ $Name: not supported by cvs2svn $9 * @date $Date: 2007-08- 17 21:01:59 $8 * @version $Revision: 1.17.4.2 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-08-23 00:55:49 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 28 28 #include "pmResiduals.h" 29 29 #include "pmModel.h" 30 // #include "pmResiduals.h"31 // #include "pmPSF.h"32 // #include "pmSource.h"33 30 #include "pmModelGroup.h" 34 31 #include "pmErrorCodes.h" -
branches/eam_branch_20070817/psModules/src/objects/pmModelUtils.c
r14544 r14612 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1.1.2. 1$ $Name: not supported by cvs2svn $8 * @date $Date: 2007-08- 17 21:01:59 $7 * @version $Revision: 1.1.2.2 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2007-08-23 00:55:49 $ 9 9 * 10 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 22 22 #include "pmHDU.h" 23 23 #include "pmFPA.h" 24 #include "pmResiduals.h" 24 25 #include "pmGrowthCurve.h" 25 #include "pm Residuals.h"26 #include "pmPSF.h" 26 27 #include "pmModel.h" 27 #include "pmPSF.h"28 28 #include "pmErrorCodes.h" 29 29 #include "pmModelUtils.h" 30 31 /***************************************************************************** 32 pmModelFromPSF (*modelEXT, *psf): use the model position parameters to 33 construct a realization of the PSF model at the object coordinates 34 *****************************************************************************/ 35 pmModel *pmModelFromPSF (pmModel *modelEXT, pmPSF *psf) 36 { 37 // allocate a new pmModel to hold the PSF version 38 pmModel *modelPSF = pmModelAlloc (psf->type); 39 40 // set model parameters for this source based on PSF information 41 if (!modelEXT->modelFromPSF (modelPSF, modelEXT, psf)) { 42 psError(PM_ERR_PSF, false, "Failed to set model params from PSF"); 43 psFree(modelPSF); 44 return NULL; 45 } 46 // XXX note that model->residuals is just a reference 47 modelPSF->residuals = psf->residuals; 48 49 return (modelPSF); 50 } 30 51 31 52 // instantiate a model for the PSF at this location with peak flux -
branches/eam_branch_20070817/psModules/src/objects/pmModelUtils.h
r14544 r14612 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1.1.2. 1$ $Name: not supported by cvs2svn $8 * @date $Date: 2007-08- 17 21:01:59 $7 * @version $Revision: 1.1.2.2 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2007-08-23 00:55:49 $ 9 9 * Copyright 2007 IfA, University of Hawaii 10 10 */ … … 15 15 /// @addtogroup Objects Object Detection / Analysis Functions 16 16 /// @{ 17 18 /** 19 * 20 * This function constructs a pmModel instance based on the pmPSF description 21 * of the PSF. The input is a pmModel with at least the values of the centroid 22 * coordinates (possibly normalization if this is needed) defined. The values of 23 * the PSF-dependent parameters are specified for the specific realization based 24 * on the coordinates of the object. 25 * 26 */ 27 pmModel *pmModelFromPSF( 28 pmModel *model, ///< Add comment 29 pmPSF *psf ///< Add comment 30 ); 17 31 18 32 pmModel *pmModelFromPSFforXY ( … … 28 42 ); 29 43 44 45 30 46 /// @} 31 47 # endif /* PM_MODEL_UTILS_H */ -
branches/eam_branch_20070817/psModules/src/objects/pmPSF.c
r14544 r14612 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1.25.6. 1$ $Name: not supported by cvs2svn $9 * @date $Date: 2007-08- 17 21:01:59 $8 * @version $Revision: 1.25.6.2 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-08-23 00:55:49 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 28 28 #include "pmMoments.h" 29 29 #include "pmResiduals.h" 30 #include "pmGrowthCurve.h" 31 #include "pmPSF.h" 30 32 #include "pmModel.h" 31 33 #include "pmSource.h" 32 #include "pmGrowthCurve.h"33 #include "pmPSF.h"34 34 #include "pmModelClass.h" 35 #include "pmModelUtils.h" 35 36 #include "pmSourcePhotometry.h" 36 37 #include "pmFPAMaskWeight.h" … … 74 75 psFree (psf->ApTrend); 75 76 psFree (psf->growth); 76 psFree (psf->params _NEW);77 psFree (psf->params); 77 78 psFree (psf->residuals); 78 79 return; … … 103 104 psf->skyBias = 0.0; 104 105 psf->skySat = 0.0; 106 psf->nPSFstars = 0; 107 psf->nApResid = 0; 105 108 psf->poissonErrors = poissonErrors; 106 109 … … 129 132 return(NULL); 130 133 } 131 psf->params _NEW= psArrayAlloc(Nparams);134 psf->params = psArrayAlloc(Nparams); 132 135 133 136 // the order of the PSF parameter (X,Y) fits is determined by the psfTrendMask polynomial … … 139 142 140 143 if (psfTrendMask) { 141 for (int i = 0; i < psf->params _NEW->n; i++) {144 for (int i = 0; i < psf->params->n; i++) { 142 145 if (i == PM_PAR_SKY) 143 146 continue; … … 155 158 } 156 159 } 157 psf->params _NEW->data[i] = param;160 psf->params->data[i] = param; 158 161 } 159 162 } … … 161 164 psMemSetDeallocator(psf, (psFreeFunc) pmPSFFree); 162 165 return(psf); 163 }164 165 /*****************************************************************************166 pmModelFromPSF (*modelEXT, *psf): use the model position parameters to167 construct a realization of the PSF model at the object coordinates168 *****************************************************************************/169 pmModel *pmModelFromPSF (pmModel *modelEXT, pmPSF *psf)170 {171 // allocate a new pmModel to hold the PSF version172 pmModel *modelPSF = pmModelAlloc (psf->type);173 174 // set model parameters for this source based on PSF information175 if (!modelEXT->modelFromPSF (modelPSF, modelEXT, psf)) {176 psError(PM_ERR_PSF, false, "Failed to set model params from PSF");177 psFree(modelPSF);178 return NULL;179 }180 // XXX note that model->residuals is just a reference181 modelPSF->residuals = psf->residuals;182 183 return (modelPSF);184 166 } 185 167 … … 333 315 pmPSF *psf = pmPSFAlloc (type, true, psfTrend); 334 316 335 psVector *par = psVectorAlloc (psf->params _NEW->n, PS_TYPE_F32);317 psVector *par = psVectorAlloc (psf->params->n, PS_TYPE_F32); 336 318 par->data.F32[PM_PAR_SXX] = sxx; 337 319 par->data.F32[PM_PAR_SYY] = syy; … … 342 324 // set the psf shape parameters 343 325 psPolynomial2D *poly = NULL; 344 poly = psf->params _NEW->data[PM_PAR_E0];326 poly = psf->params->data[PM_PAR_E0]; 345 327 poly->coeff[0][0] = pol.e0; 346 328 347 poly = psf->params _NEW->data[PM_PAR_E1];329 poly = psf->params->data[PM_PAR_E1]; 348 330 poly->coeff[0][0] = pol.e1; 349 331 350 poly = psf->params _NEW->data[PM_PAR_E2];332 poly = psf->params->data[PM_PAR_E2]; 351 333 poly->coeff[0][0] = pol.e2; 352 334 353 for (int i = PM_PAR_SXY + 1; i < psf->params _NEW->n; i++) {354 poly = psf->params _NEW->data[i];335 for (int i = PM_PAR_SXY + 1; i < psf->params->n; i++) { 336 poly = psf->params->data[i]; 355 337 poly->coeff[0][0] = (psF32)va_arg(ap, psF64); 356 338 } -
branches/eam_branch_20070817/psModules/src/objects/pmPSF.h
r13898 r14612 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1.14 $ $Name: not supported by cvs2svn $9 * @date $Date: 2007-0 6-20 02:22:26$8 * @version $Revision: 1.14.6.1 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-08-23 00:55:49 $ 10 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 11 11 */ … … 16 16 /// @addtogroup Objects Object Detection / Analysis Functions 17 17 /// @{ 18 19 // type of model carried by the pmModel structure 20 typedef int pmModelType; 18 21 19 22 typedef enum { … … 44 47 typedef struct 45 48 { 46 pmModelType type; ///< PSF Model in use 47 psArray *params_NEW; ///< Model parameters (psPolynomial2D) 48 // XXXXX I am changing params: we will allocate elements for the 49 // unfitted elements (So, Io, Xo, Yo) and leave them as NULL 50 // I am using a new name to catch all refs to params with gcc 49 pmModelType type; ///< PSF Model in use 50 psArray *params; ///< Model parameters (psPolynomial2D) 51 51 psPolynomial1D *ChiTrend; ///< Chisq vs flux fit (correction for systematic errors) 52 52 psPolynomial4D *ApTrend; ///< ApResid vs (x,y,rflux) (rflux = ten(0.4*mInst)) … … 79 79 ); 80 80 81 /**82 *83 * This function constructs a pmModel instance based on the pmPSF description84 * of the PSF. The input is a pmModel with at least the values of the centroid85 * coordinates (possibly normalization if this is needed) defined. The values of86 * the PSF-dependent parameters are specified for the specific realization based87 * on the coordinates of the object.88 *89 */90 pmModel *pmModelFromPSF(91 pmModel *model, ///< Add comment92 pmPSF *psf ///< Add comment93 );94 95 81 bool pmPSFMaskApTrend (psPolynomial4D *trend, pmPSFApTrendOptions option); 96 82 -
branches/eam_branch_20070817/psModules/src/objects/pmPSF_IO.c
r14544 r14612 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1.20.4. 1$ $Name: not supported by cvs2svn $9 * @date $Date: 2007-08- 17 21:01:59 $8 * @version $Revision: 1.20.4.2 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-08-23 00:55:49 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 40 40 #include "pmGrowthCurve.h" 41 41 #include "pmResiduals.h" 42 #include "pmPSF.h" 42 43 #include "pmModel.h" 43 #include "pmPSF.h"44 44 #include "pmPSF_IO.h" 45 45 #include "pmSource.h" … … 47 47 #include "pmSourceIO.h" 48 48 49 bool pm FPAviewCheckDataStatusForPSFmodel(const pmFPAview *view, const pmFPAfile *file)49 bool pmPSFmodelCheckDataStatusForView (const pmFPAview *view, const pmFPAfile *file) 50 50 { 51 51 pmFPA *fpa = file->fpa; 52 52 53 53 if (view->chip == -1) { 54 bool exists = pm FPACheckDataStatusForPSFmodel(fpa);54 bool exists = pmPSFmodelCheckDataStatusForFPA (fpa); 55 55 return exists; 56 56 } … … 62 62 63 63 if (view->cell == -1) { 64 bool exists = pm ChipCheckDataStatusForPSFmodel(chip);64 bool exists = pmPSFmodelCheckDataStatusForChip (chip); 65 65 return exists; 66 66 } … … 69 69 return false; 70 70 } 71 pmCell *cell = chip->cells->data[view->cell]; 72 73 if (view->readout == -1) { 74 bool exists = pmCellCheckDataStatusForPSFmodel (cell); 75 return exists; 76 } 77 78 if (view->readout >= cell->readouts->n) { 79 psError(PS_ERR_IO, true, "Requested readout == %d >= cell->readouds->n == %ld", view->readout, cell->readouts->n); 80 return false; 81 } 82 pmReadout *readout = cell->readouts->data[view->readout]; 83 84 return pmReadoutCheckDataStatusForPSFmodel (readout); 85 } 86 87 bool pmFPACheckDataStatusForPSFmodel (const pmFPA *fpa) { 71 psError(PS_ERR_IO, false, "PSF only valid at the chip level"); 72 return false; 73 } 74 75 bool pmPSFmodelCheckDataStatusForFPA (const pmFPA *fpa) { 88 76 89 77 for (int i = 0; i < fpa->chips->n; i++) { 90 78 pmChip *chip = fpa->chips->data[i]; 91 79 if (!chip) continue; 92 if (pm ChipCheckDataStatusForPSFmodel(chip)) return true;80 if (pmPSFmodelCheckDataStatusForChip (chip)) return true; 93 81 } 94 82 return false; 95 83 } 96 84 97 bool pmChipCheckDataStatusForPSFmodel (const pmChip *chip) { 98 99 for (int i = 0; i < chip->cells->n; i++) { 100 pmCell *cell = chip->cells->data[i]; 101 if (!cell) continue; 102 if (pmCellCheckDataStatusForPSFmodel (cell)) return true; 103 } 104 return false; 105 } 106 107 bool pmCellCheckDataStatusForPSFmodel (const pmCell *cell) { 108 109 for (int i = 0; i < cell->readouts->n; i++) { 110 pmReadout *readout = cell->readouts->data[i]; 111 if (!readout) continue; 112 if (pmReadoutCheckDataStatusForPSFmodel (readout)) return true; 113 } 114 return false; 115 } 116 117 bool pmReadoutCheckDataStatusForPSFmodel (const pmReadout *readout) { 85 bool pmPSFmodelCheckDataStatusForChip (const pmChip *chip) { 118 86 119 87 bool status; 120 88 121 89 // select the psf of interest 122 pmPSF *psf = psMetadataLookupPtr(&status, readout->analysis, "PSPHOT.PSF");90 pmPSF *psf = psMetadataLookupPtr(&status, chip->analysis, "PSPHOT.PSF"); 123 91 return psf ? true : false; 124 92 } 125 93 126 bool pm FPAviewWritePSFmodel(const pmFPAview *view, pmFPAfile *file, const pmConfig *config)94 bool pmPSFmodelWriteForView (const pmFPAview *view, pmFPAfile *file, const pmConfig *config) 127 95 { 128 96 … … 130 98 131 99 if (view->chip == -1) { 132 if (!pm FPAWritePSFmodel(fpa, view, file, config)) {100 if (!pmPSFmodelWriteFPA(fpa, view, file, config)) { 133 101 psError(PS_ERR_IO, false, "Failed to write PSF for fpa"); 134 102 return false; … … 143 111 144 112 if (view->cell == -1) { 145 if (!pm ChipWritePSFmodel(chip, view, file, config)) {113 if (!pmPSFmodelWriteChip (chip, view, file, config)) { 146 114 psError(PS_ERR_IO, false, "Failed to write PSF for chip"); 147 115 return false; … … 150 118 } 151 119 152 if (view->cell >= chip->cells->n) { 153 return false; 154 } 155 pmCell *cell = chip->cells->data[view->cell]; 156 157 if (view->readout == -1) { 158 if (!pmCellWritePSFmodel (cell, view, file, config)) { 159 psError(PS_ERR_IO, false, "Failed to write PSF for cell"); 160 return false; 161 } 162 return true; 163 } 164 165 if (view->readout >= cell->readouts->n) { 166 return false; 167 } 168 pmReadout *readout = cell->readouts->data[view->readout]; 169 170 if (!pmReadoutWritePSFmodel (readout, view, file, config)) { 171 psError(PS_ERR_IO, false, "Failed to write PSF for readout"); 172 return false; 173 } 174 return true; 120 psError(PS_ERR_IO, false, "PSF must be written at the chip level"); 121 return false; 175 122 } 176 123 177 124 // read in all chip-level PSFmodel files for this FPA 178 bool pm FPAWritePSFmodel(pmFPA *fpa, const pmFPAview *view, pmFPAfile *file, const pmConfig *config)125 bool pmPSFmodelWriteFPA (pmFPA *fpa, const pmFPAview *view, pmFPAfile *file, const pmConfig *config) 179 126 { 180 127 181 128 for (int i = 0; i < fpa->chips->n; i++) { 182 129 pmChip *chip = fpa->chips->data[i]; 183 if (!pm ChipWritePSFmodel(chip, view, file, config)) {130 if (!pmPSFmodelWriteChip (chip, view, file, config)) { 184 131 psError(PS_ERR_IO, false, "Failed to write PSF for %dth chip", i); 185 132 return false; … … 190 137 191 138 // read in all cell-level PSFmodel files for this chip 192 bool pmChipWritePSFmodel (pmChip *chip, const pmFPAview *view, pmFPAfile *file, const pmConfig *config) 193 { 194 for (int i = 0; i < chip->cells->n; i++) { 195 pmCell *cell = chip->cells->data[i]; 196 if (!pmCellWritePSFmodel (cell, view, file, config)) { 197 psError(PS_ERR_IO, false, "Failed to write PSF for %dth cell", i); 198 return false; 199 } 139 bool pmPSFmodelWriteChip (pmChip *chip, const pmFPAview *view, pmFPAfile *file, const pmConfig *config) 140 { 141 if (!pmPSFmodelWrite (chip->analysis, view, file, config)) { 142 psError(PS_ERR_IO, false, "Failed to write PSF for chip"); 143 return false; 200 144 } 201 145 return true; 202 146 } 203 147 204 // read in all readout-level PSFmodel files for this cell 205 bool pmCellWritePSFmodel (pmCell *cell, const pmFPAview *view, pmFPAfile *file, const pmConfig *config) 206 { 207 for (int i = 0; i < cell->readouts->n; i++) { 208 pmReadout *readout = cell->readouts->data[i]; 209 if (!pmReadoutWritePSFmodel (readout, view, file, config)) { 210 psError(PS_ERR_IO, false, "Failed to write PSF for %dth readout", i); 211 return false; 212 } 213 } 214 return true; 215 } 216 217 // for each Readout (ie, analysed image), we write out 148 // for a pmPSF supplied on the analysis metadata, we write out 218 149 // - image header : FITS Image NAXIS = 0 219 150 // - psf table (+header) : FITS Table 220 151 // - psf resid (+header) : FITS Image 221 152 // if needed, we also write out a PHU blank header 222 bool pm ReadoutWritePSFmodel (pmReadout *readout, const pmFPAview *view, pmFPAfile *file, const pmConfig *config)153 bool pmPSFmodelWrite (psMetadata *analysis, const pmFPAview *view, pmFPAfile *file, const pmConfig *config) 223 154 { 224 155 bool status; 225 156 pmHDU *hdu; 226 157 char *headName, *tableName, *residName; 158 159 if (!analysis) return false; 227 160 228 161 // write a PHU? (only if input image is MEF) … … 300 233 301 234 // select the psf of interest 302 pmPSF *psf = psMetadataLookupPtr (&status, readout->analysis, "PSPHOT.PSF");235 pmPSF *psf = psMetadataLookupPtr (&status, analysis, "PSPHOT.PSF"); 303 236 if (!psf) { 304 psError(PS_ERR_UNKNOWN, true, "missing PSF for this readout");237 psError(PS_ERR_UNKNOWN, true, "missing PSF for this analysis metadata"); 305 238 psFree (tableName); 306 239 psFree (residName); … … 324 257 for (int i = 0; i < nPar; i++) { 325 258 char name[9]; 326 psPolynomial2D *poly = psf->params _NEW->data[i];259 psPolynomial2D *poly = psf->params->data[i]; 327 260 if (poly == NULL) continue; 328 261 snprintf (name, 9, "PAR%02d_NX", i); … … 344 277 psArray *psfTable = psArrayAllocEmpty (100); 345 278 for (int i = 0; i < nPar; i++) { 346 psPolynomial2D *poly = psf->params _NEW->data[i];279 psPolynomial2D *poly = psf->params->data[i]; 347 280 if (poly == NULL) continue; // skip unset parameters (eg, XPOS) 348 281 for (int ix = 0; ix <= poly->nX; ix++) { … … 445 378 446 379 // if this file needs to have a PHU written out, write one 447 bool pmPSF _WritePHU (const pmFPAview *view, pmFPAfile *file, const pmConfig *config) {380 bool pmPSFmodelWritePHU (const pmFPAview *view, pmFPAfile *file, const pmConfig *config) { 448 381 449 382 // not needed if already written … … 487 420 } 488 421 489 bool pm FPAviewReadPSFmodel(const pmFPAview *view, pmFPAfile *file, const pmConfig *config)422 bool pmPSFmodelReadForView (const pmFPAview *view, pmFPAfile *file, const pmConfig *config) 490 423 { 491 424 … … 493 426 494 427 if (view->chip == -1) { 495 return pm FPAReadPSFmodel(fpa, view, file, config);428 return pmPSFmodelReadFPA(fpa, view, file, config); 496 429 } 497 430 … … 502 435 503 436 if (view->cell == -1) { 504 return pmChipReadPSFmodel(chip, view, file, config); 505 } 506 507 if (view->cell >= chip->cells->n) { 508 psAbort("Programming error: view does not apply to FPA."); 509 } 510 pmCell *cell = chip->cells->data[view->cell]; 511 512 if (view->readout == -1) { 513 return pmCellReadPSFmodel(cell, view, file, config); 514 } 515 516 if (view->readout >= cell->readouts->n) { 517 psAbort("Programming error: view does not apply to FPA."); 518 } 519 pmReadout *readout = cell->readouts->data[view->readout]; 520 521 return pmReadoutReadPSFmodel(readout, view, file, config); 437 return pmPSFmodelReadChip(chip, view, file, config); 438 } 439 440 psError(PS_ERR_IO, false, "PSF must be read at the chip level"); 441 return false; 522 442 } 523 443 524 444 // read in all chip-level PSFmodel files for this FPA 525 bool pm FPAReadPSFmodel(pmFPA *fpa, const pmFPAview *view, pmFPAfile *file, const pmConfig *config)445 bool pmPSFmodelReadFPA (pmFPA *fpa, const pmFPAview *view, pmFPAfile *file, const pmConfig *config) 526 446 { 527 447 bool success = true; // Was everything successful? 528 448 for (int i = 0; i < fpa->chips->n; i++) { 529 449 pmChip *chip = fpa->chips->data[i]; 530 success &= pm ChipReadPSFmodel(chip, view, file, config);450 success &= pmPSFmodelReadChip(chip, view, file, config); 531 451 } 532 452 return success; … … 534 454 535 455 // read in all cell-level PSFmodel files for this chip 536 bool pmChipReadPSFmodel (pmChip *chip, const pmFPAview *view, pmFPAfile *file, const pmConfig *config) 537 { 538 bool success = true; // Was everything successful? 539 for (int i = 0; i < chip->cells->n; i++) { 540 pmCell *cell = chip->cells->data[i]; 541 success &= pmCellReadPSFmodel (cell, view, file, config); 542 } 543 return success; 544 } 545 546 // read in all readout-level PSFmodel files for this cell 547 bool pmCellReadPSFmodel (pmCell *cell, const pmFPAview *view, pmFPAfile *file, const pmConfig *config) 548 { 549 bool success = true; // Was everything successful? 550 for (int i = 0; i < cell->readouts->n; i++) { 551 pmReadout *readout = cell->readouts->data[i]; 552 success &= pmReadoutReadPSFmodel(readout, view, file, config); 553 } 554 return success; 456 bool pmPSFmodelReadChip (pmChip *chip, const pmFPAview *view, pmFPAfile *file, const pmConfig *config) 457 { 458 if (!pmPSFmodelRead (chip->analysis, view, file, config)) { 459 psError(PS_ERR_IO, false, "Failed to write PSF for chip"); 460 return false; 461 } 462 return true; 555 463 } 556 464 557 465 // for each Readout (ie, analysed image), we write out: header + table with PSF model parameters, 558 466 // and header + image for the PSF residual images 559 bool pm ReadoutReadPSFmodel(pmReadout *readout, const pmFPAview *view, pmFPAfile *file, const pmConfig *config)467 bool pmPSFmodelRead (psMetadata *analysis, const pmFPAview *view, pmFPAfile *file, const pmConfig *config) 560 468 { 561 469 bool status; … … 627 535 return false; 628 536 } 629 psf->params _NEW->data[i] = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXorder, nYorder);537 psf->params->data[i] = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXorder, nYorder); 630 538 } 631 539 … … 650 558 // XXX sanity check here 651 559 652 psPolynomial2D *poly = psf->params _NEW->data[iPar];560 psPolynomial2D *poly = psf->params->data[iPar]; 653 561 if (poly == NULL) { 654 562 psError(PS_ERR_UNKNOWN, true, "values for parameter %d, but missing NX", iPar); … … 698 606 } 699 607 700 psMetadataAdd ( readout->analysis, PS_LIST_TAIL, "PSPHOT.PSF", PS_DATA_UNKNOWN, "psphot psf", psf);608 psMetadataAdd (analysis, PS_LIST_TAIL, "PSPHOT.PSF", PS_DATA_UNKNOWN, "psphot psf", psf); 701 609 psFree (psf); 702 610 … … 708 616 } 709 617 710 /************ old support functions, deprecate? **************/ 711 618 // create a psMetadata representation (human-readable) of a psf model 712 619 psMetadata *pmPSFtoMetadata (psMetadata *metadata, pmPSF *psf) 713 620 { … … 724 631 725 632 for (int i = 0; i < nPar; i++) { 726 psPolynomial2D *poly = psf->params _NEW->data[i];633 psPolynomial2D *poly = psf->params->data[i]; 727 634 if (poly == NULL) 728 635 continue; … … 742 649 } 743 650 651 // parse a psMetadata representation (human-readable) of a psf model 744 652 pmPSF *pmPSFfromMetadata (psMetadata *metadata) 745 653 { … … 770 678 continue; 771 679 psPolynomial2D *poly = psPolynomial2DfromMetadata (folder); 772 psFree (psf->params _NEW->data[i]);773 psf->params _NEW->data[i] = poly;680 psFree (psf->params->data[i]); 681 psf->params->data[i] = poly; 774 682 } 775 683 sprintf (keyword, "APTREND"); … … 789 697 return (psf); 790 698 } 791 792 // read in all readout-level Objects files for this cell793 bool pmReadoutWritePSFmodel_Config (pmReadout *readout, const pmFPAview *view, pmFPAfile *file, const pmConfig *config)794 {795 bool status;796 char *filename;797 char *realname;798 799 pmPSF *psf = psMetadataLookupPtr (&status, readout->analysis, "PSPHOT.PSF");800 801 switch (file->type) {802 case PM_FPA_FILE_PSF:803 filename = pmFPAfileNameFromRule (file->filerule, file, view);804 bool create = file->mode == PM_FPA_MODE_WRITE ? true : false;805 realname = pmConfigConvertFilename (filename, config, create);806 807 psMetadata *psfData = pmPSFtoMetadata (NULL, psf);808 psMetadataConfigWrite (psfData, realname);809 psFree (psfData);810 psFree (realname);811 psFree (filename);812 return true;813 814 default:815 fprintf (stderr, "warning: type mismatch\n");816 break;817 }818 return false;819 }820 821 // read in all readout-level Objects files for this cell822 bool pmReadoutReadPSFmodel_Config (pmReadout *readout, const pmFPAview *view, pmFPAfile *file, const pmConfig *config)823 {824 825 unsigned int Nfail;826 char *filename;827 char *realname;828 829 switch (file->type) {830 case PM_FPA_FILE_PSF:831 filename = pmFPAfileNameFromRule (file->filerule, file, view);832 bool create = file->mode == PM_FPA_MODE_WRITE ? true : false;833 realname = pmConfigConvertFilename (filename, config, create);834 835 psMetadata *psfData = psMetadataConfigRead(NULL, &Nfail, realname, FALSE);836 pmPSF *psf = pmPSFfromMetadata (psfData);837 psMetadataAdd (readout->analysis, PS_LIST_TAIL, "PSPHOT.PSF", PS_DATA_UNKNOWN, "psphot psf", psf);838 839 psFree (psf);840 psFree (psfData);841 psFree (realname);842 psFree (filename);843 844 return true;845 846 default:847 fprintf (stderr, "warning: type mismatch\n");848 break;849 }850 return false;851 }852 -
branches/eam_branch_20070817/psModules/src/objects/pmPSF_IO.h
r14207 r14612 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1.8 $ $Name: not supported by cvs2svn $9 * @date $Date: 2007-0 7-14 03:20:22$8 * @version $Revision: 1.8.4.1 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-08-23 00:55:49 $ 10 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 11 11 */ … … 17 17 /// @{ 18 18 19 bool pmPSFmodelWriteForView (const pmFPAview *view, pmFPAfile *file, const pmConfig *config); 20 bool pmPSFmodelWriteFPA (pmFPA *fpa, const pmFPAview *view, pmFPAfile *file, const pmConfig *config); 21 bool pmPSFmodelWriteChip (pmChip *chip, const pmFPAview *view, pmFPAfile *file, const pmConfig *config); 22 bool pmPSFmodelWrite (psMetadata *analysis, const pmFPAview *view, pmFPAfile *file, const pmConfig *config); 23 24 bool pmPSFmodelWritePHU (const pmFPAview *view, pmFPAfile *file, const pmConfig *config); 25 26 bool pmPSFmodelReadForView (const pmFPAview *view, pmFPAfile *file, const pmConfig *config); 27 bool pmPSFmodelReadFPA (pmFPA *fpa, const pmFPAview *view, pmFPAfile *file, const pmConfig *config); 28 bool pmPSFmodelReadChip (pmChip *chip, const pmFPAview *view, pmFPAfile *file, const pmConfig *config); 29 bool pmPSFmodelRead (psMetadata *analysis, const pmFPAview *view, pmFPAfile *file, const pmConfig *config); 30 31 bool pmPSFmodelCheckDataStatusForView (const pmFPAview *view, const pmFPAfile *file); 32 bool pmPSFmodelCheckDataStatusForFPA (const pmFPA *fpa); 33 bool pmPSFmodelCheckDataStatusForChip (const pmChip *chip); 34 19 35 psMetadata *pmPSFtoMetadata (psMetadata *metadata, pmPSF *psf); 20 36 pmPSF *pmPSFfromMetadata (psMetadata *metadata); 21 bool pmFPAviewWritePSFmodel (const pmFPAview *view, pmFPAfile *file, const pmConfig *config);22 bool pmFPAWritePSFmodel (pmFPA *fpa, const pmFPAview *view, pmFPAfile *file, const pmConfig *config);23 bool pmChipWritePSFmodel (pmChip *chip, const pmFPAview *view, pmFPAfile *file, const pmConfig *config);24 bool pmCellWritePSFmodel (pmCell *cell, const pmFPAview *view, pmFPAfile *file, const pmConfig *config);25 bool pmReadoutWritePSFmodel (pmReadout *readout, const pmFPAview *view, pmFPAfile *file, const pmConfig *config);26 27 bool pmPSF_WritePHU (const pmFPAview *view, pmFPAfile *file, const pmConfig *config);28 29 bool pmFPAviewReadPSFmodel (const pmFPAview *view, pmFPAfile *file, const pmConfig *config);30 bool pmFPAReadPSFmodel (pmFPA *fpa, const pmFPAview *view, pmFPAfile *file, const pmConfig *config);31 bool pmChipReadPSFmodel (pmChip *chip, const pmFPAview *view, pmFPAfile *file, const pmConfig *config);32 bool pmCellReadPSFmodel (pmCell *cell, const pmFPAview *view, pmFPAfile *file, const pmConfig *config);33 bool pmReadoutReadPSFmodel (pmReadout *readout, const pmFPAview *view, pmFPAfile *file, const pmConfig *config);34 35 bool pmFPAviewCheckDataStatusForPSFmodel (const pmFPAview *view, const pmFPAfile *file);36 bool pmFPACheckDataStatusForPSFmodel (const pmFPA *fpa);37 bool pmChipCheckDataStatusForPSFmodel (const pmChip *chip);38 bool pmCellCheckDataStatusForPSFmodel (const pmCell *cell);39 bool pmReadoutCheckDataStatusForPSFmodel (const pmReadout *readout);40 37 41 38 /// @} -
branches/eam_branch_20070817/psModules/src/objects/pmPSFtry.c
r14544 r14612 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1.43.6. 1$ $Name: not supported by cvs2svn $8 * @date $Date: 2007-08- 17 21:01:59 $7 * @version $Revision: 1.43.6.2 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2007-08-23 00:55:49 $ 9 9 * 10 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 23 23 #include "pmMoments.h" 24 24 #include "pmResiduals.h" 25 #include "pmGrowthCurve.h" 26 #include "pmPSF.h" 25 27 #include "pmModel.h" 26 28 #include "pmSource.h" 27 29 #include "pmSourceUtils.h" 28 #include "pmGrowthCurve.h"29 #include "pmPSF.h"30 30 #include "pmPSFtry.h" 31 31 #include "pmModelClass.h" 32 #include "pmModelUtils.h" 32 33 #include "pmSourceFitModel.h" 33 34 #include "pmSourcePhotometry.h" … … 413 414 // This way, the parameters masked by one of the fits will be applied to the others 414 415 for (int i = 0; i < stats->clipIter; i++) { 415 psVectorClipFitPolynomial2D (psf->params _NEW->data[PM_PAR_E0], stats, psfTry->mask, 0xff, e0, dz, x, y);416 psVectorClipFitPolynomial2D (psf->params->data[PM_PAR_E0], stats, psfTry->mask, 0xff, e0, dz, x, y); 416 417 psTrace ("psModules.pmPSFtry", 4, "clipped E0 : keeping %ld of %ld\n", stats->clippedNvalues, e0->n); 417 psVectorClipFitPolynomial2D (psf->params _NEW->data[PM_PAR_E1], stats, psfTry->mask, 0xff, e1, dz, x, y);418 psVectorClipFitPolynomial2D (psf->params->data[PM_PAR_E1], stats, psfTry->mask, 0xff, e1, dz, x, y); 418 419 psTrace ("psModules.pmPSFtry", 4, "clipped E1 : keeping %ld of %ld\n", stats->clippedNvalues, e1->n); 419 psVectorClipFitPolynomial2D (psf->params _NEW->data[PM_PAR_E2], stats, psfTry->mask, 0xff, e2, dz, x, y);420 psVectorClipFitPolynomial2D (psf->params->data[PM_PAR_E2], stats, psfTry->mask, 0xff, e2, dz, x, y); 420 421 psTrace ("psModules.pmPSFtry", 4, "clipped E2 : keeping %ld of %ld\n", stats->clippedNvalues, e2->n); 421 422 } … … 437 438 438 439 // skip the unfitted parameters (X, Y, Io, Sky) and the shape parameters (SXX, SYY, SXY) 439 for (int i = 0; i < psf->params _NEW->n; i++) {440 for (int i = 0; i < psf->params->n; i++) { 440 441 switch (i) { 441 442 case PM_PAR_SKY: … … 462 463 // the mask is carried from previous steps and updated with this operation 463 464 // the weight is either the flux error or NULL, depending on 'applyWeights' 464 if (!psVectorClipFitPolynomial2D(psf->params _NEW->data[i], stats, psfTry->mask, 0xff, z, NULL, x, y)) {465 if (!psVectorClipFitPolynomial2D(psf->params->data[i], stats, psfTry->mask, 0xff, z, NULL, x, y)) { 465 466 psError(PS_ERR_UNKNOWN, false, "failed to build psf model for parameter %d", i); 466 467 psFree(stats); … … 490 491 fprintf (f, "%f %f : ", model->params->data.F32[PM_PAR_XPOS], model->params->data.F32[PM_PAR_YPOS]); 491 492 492 for (int i = 0; i < psf->params _NEW->n; i++) {493 if (psf->params _NEW->data[i] == NULL)493 for (int i = 0; i < psf->params->n; i++) { 494 if (psf->params->data[i] == NULL) 494 495 continue; 495 496 fprintf (f, "%f %f : ", model->params->data.F32[i], modelPSF->params->data.F32[i]); -
branches/eam_branch_20070817/psModules/src/objects/pmSource.c
r14546 r14612 6 6 * @author EAM, IfA: significant modifications. 7 7 * 8 * @version $Revision: 1.34.2. 2$ $Name: not supported by cvs2svn $9 * @date $Date: 2007-08-2 0 01:58:16$8 * @version $Revision: 1.34.2.3 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-08-23 00:55:49 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 27 27 #include "pmMoments.h" 28 28 #include "pmResiduals.h" 29 #include "pmGrowthCurve.h" 30 #include "pmPSF.h" 29 31 #include "pmModel.h" 30 32 #include "pmSource.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSource.h
r14546 r14612 3 3 * @author EAM, IfA; GLG, MHPCC 4 4 * 5 * @version $Revision: 1.16.2. 2$ $Name: not supported by cvs2svn $6 * @date $Date: 2007-08-2 0 01:58:16$5 * @version $Revision: 1.16.2.3 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2007-08-23 00:55:49 $ 7 7 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 8 8 */ … … 57 57 * 58 58 */ 59 typedef struct 60 { 59 struct pmSource { 61 60 const int id; ///< Unique ID for object 62 61 pmPeak *peak; ///< Description of peak pixel. … … 81 80 psRegion region; ///< area on image covered by selected pixels 82 81 float sky, skyErr; ///< The sky and its error at the center of the object 83 } 84 pmSource; 82 }; 85 83 86 84 /** pmPSFClump data structure -
branches/eam_branch_20070817/psModules/src/objects/pmSourceContour.c
r12949 r14612 6 6 * @author EAM, IfA: significant modifications. 7 7 * 8 * @version $Revision: 1.7 $ $Name: not supported by cvs2svn $9 * @date $Date: 2007-0 4-21 19:47:14$8 * @version $Revision: 1.7.8.1 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-08-23 00:55:49 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 26 26 #include "pmMoments.h" 27 27 #include "pmResiduals.h" 28 #include "pmGrowthCurve.h" 29 #include "pmPSF.h" 28 30 #include "pmModel.h" 29 31 #include "pmSource.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSourceFitModel.c
r14546 r14612 6 6 * @author GLG, MHPCC 7 7 * 8 * @version $Revision: 1.24.4. 2$ $Name: not supported by cvs2svn $9 * @date $Date: 2007-08-2 0 01:58:16$8 * @version $Revision: 1.24.4.3 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-08-23 00:55:49 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 27 27 #include "pmGrowthCurve.h" 28 28 #include "pmResiduals.h" 29 #include "pmPSF.h" 29 30 #include "pmModel.h" 30 #include "pmPSF.h"31 31 #include "pmSource.h" 32 32 #include "pmModelClass.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSourceFitSet.c
r14546 r14612 6 6 * @author GLG, MHPCC 7 7 * 8 * @version $Revision: 1.3.2. 1$ $Name: not supported by cvs2svn $9 * @date $Date: 2007-08-2 0 01:58:16$8 * @version $Revision: 1.3.2.2 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-08-23 00:55:49 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 27 27 #include "pmGrowthCurve.h" 28 28 #include "pmResiduals.h" 29 #include "pmPSF.h" 29 30 #include "pmModel.h" 30 #include "pmPSF.h"31 31 #include "pmSource.h" 32 32 #include "pmModelClass.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSourceIO.c
r14544 r14612 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1.45.4. 1$ $Name: not supported by cvs2svn $6 * @date $Date: 2007-08- 17 21:01:59 $5 * @version $Revision: 1.45.4.2 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2007-08-23 00:55:49 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 34 34 #include "pmGrowthCurve.h" 35 35 #include "pmResiduals.h" 36 #include "pmPSF.h" 36 37 #include "pmModel.h" 37 #include "pmPSF.h"38 38 #include "pmSource.h" 39 39 #include "pmModelClass.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSourceIO_CMP.c
r14544 r14612 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1.29.8. 1$ $Name: not supported by cvs2svn $6 * @date $Date: 2007-08- 17 21:01:59 $5 * @version $Revision: 1.29.8.2 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2007-08-23 00:55:49 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 32 32 #include "pmGrowthCurve.h" 33 33 #include "pmResiduals.h" 34 #include "pmPSF.h" 34 35 #include "pmModel.h" 35 #include "pmPSF.h"36 36 #include "pmSource.h" 37 37 #include "pmModelClass.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSourceIO_OBJ.c
r14544 r14612 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1.13.8. 1$ $Name: not supported by cvs2svn $6 * @date $Date: 2007-08- 17 21:01:59 $5 * @version $Revision: 1.13.8.2 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2007-08-23 00:55:49 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 32 32 #include "pmGrowthCurve.h" 33 33 #include "pmResiduals.h" 34 #include "pmPSF.h" 34 35 #include "pmModel.h" 35 #include "pmPSF.h"36 36 #include "pmSource.h" 37 37 #include "pmModelClass.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSourceIO_PS1_DEV_0.c
r14544 r14612 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1.10.8. 1$ $Name: not supported by cvs2svn $6 * @date $Date: 2007-08- 17 21:01:59 $5 * @version $Revision: 1.10.8.2 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2007-08-23 00:55:49 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 32 32 #include "pmGrowthCurve.h" 33 33 #include "pmResiduals.h" 34 #include "pmPSF.h" 34 35 #include "pmModel.h" 35 #include "pmPSF.h"36 36 #include "pmSource.h" 37 37 #include "pmModelClass.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSourceIO_RAW.c
r14544 r14612 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1.15.8. 1$ $Name: not supported by cvs2svn $6 * @date $Date: 2007-08- 17 21:01:59 $5 * @version $Revision: 1.15.8.2 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2007-08-23 00:55:49 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 32 32 #include "pmGrowthCurve.h" 33 33 #include "pmResiduals.h" 34 #include "pmPSF.h" 34 35 #include "pmModel.h" 35 #include "pmPSF.h"36 36 #include "pmSource.h" 37 37 #include "pmModelClass.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSourceIO_SMPDATA.c
r14544 r14612 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1.9.8. 1$ $Name: not supported by cvs2svn $6 * @date $Date: 2007-08- 17 21:01:59 $5 * @version $Revision: 1.9.8.2 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2007-08-23 00:55:49 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 30 30 #include "pmPeaks.h" 31 31 #include "pmMoments.h" 32 #include "pmResiduals.h" 32 33 #include "pmGrowthCurve.h" 33 #include "pm Residuals.h"34 #include "pmPSF.h" 34 35 #include "pmModel.h" 35 #include "pmPSF.h"36 36 #include "pmSource.h" 37 37 #include "pmModelClass.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSourceIO_SX.c
r14544 r14612 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1.11.8. 1$ $Name: not supported by cvs2svn $6 * @date $Date: 2007-08- 17 21:01:59 $5 * @version $Revision: 1.11.8.2 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2007-08-23 00:55:49 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 32 32 #include "pmGrowthCurve.h" 33 33 #include "pmResiduals.h" 34 #include "pmPSF.h" 34 35 #include "pmModel.h" 35 #include "pmPSF.h"36 36 #include "pmSource.h" 37 37 #include "pmModelClass.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSourcePhotometry.c
r14544 r14612 3 3 * @author EAM, IfA; GLG, MHPCC 4 4 * 5 * @version $Revision: 1.28.6. 1$ $Name: not supported by cvs2svn $6 * @date $Date: 2007-08- 17 21:01:59 $5 * @version $Revision: 1.28.6.2 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2007-08-23 00:55:49 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 26 26 #include "pmGrowthCurve.h" 27 27 #include "pmResiduals.h" 28 #include "pmPSF.h" 28 29 #include "pmModel.h" 29 #include "pmPSF.h"30 30 #include "pmSource.h" 31 31 #include "pmModelClass.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSourcePlotApResid.c
r13473 r14612 4 4 * @author EAM, IfA 5 5 * 6 * @version $Revision: 1.2 $ $Name: not supported by cvs2svn $7 * @date $Date: 2007-0 5-22 21:45:48$6 * @version $Revision: 1.2.6.1 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2007-08-23 00:55:49 $ 8 8 * Copyright 2006 IfA, University of Hawaii 9 9 */ … … 27 27 #include "pmPeaks.h" 28 28 #include "pmMoments.h" 29 #include "pmResiduals.h" 29 30 #include "pmGrowthCurve.h" 30 #include "pm Residuals.h"31 #include "pmPSF.h" 31 32 #include "pmModel.h" 32 #include "pmPSF.h"33 33 #include "pmSource.h" 34 34 #include "pmSourcePlots.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSourcePlotMoments.c
r13473 r14612 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1.7 $ $Name: not supported by cvs2svn $8 * @date $Date: 2007-0 5-22 21:45:48$7 * @version $Revision: 1.7.6.1 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2007-08-23 00:55:49 $ 9 9 * 10 10 * Copyright 2006 IfA, University of Hawaii … … 32 32 #include "pmGrowthCurve.h" 33 33 #include "pmResiduals.h" 34 #include "pmPSF.h" 34 35 #include "pmModel.h" 35 #include "pmPSF.h"36 36 #include "pmSource.h" 37 37 #include "pmSourcePlots.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSourcePlotPSFModel.c
r13473 r14612 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $8 * @date $Date: 2007-0 5-22 21:45:48$7 * @version $Revision: 1.9.6.1 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2007-08-23 00:55:49 $ 9 9 * 10 10 * Copyright 2006 IfA, University of Hawaii … … 32 32 #include "pmGrowthCurve.h" 33 33 #include "pmResiduals.h" 34 #include "pmPSF.h" 34 35 #include "pmModel.h" 35 #include "pmPSF.h"36 36 #include "pmSource.h" 37 37 #include "pmSourcePlots.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSourceSky.c
r13898 r14612 6 6 * @author EAM, IfA: significant modifications. 7 7 * 8 * @version $Revision: 1.13 $ $Name: not supported by cvs2svn $9 * @date $Date: 2007-0 6-20 02:22:26$8 * @version $Revision: 1.13.6.1 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-08-23 00:55:49 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 27 27 #include "pmMoments.h" 28 28 #include "pmResiduals.h" 29 #include "pmGrowthCurve.h" 30 #include "pmPSF.h" 29 31 #include "pmModel.h" 30 32 #include "pmSource.h" -
branches/eam_branch_20070817/psModules/src/objects/pmSourceUtils.c
r14546 r14612 6 6 * @author EAM, IfA: significant modifications. 7 7 * 8 * @version $Revision: 1.1.2. 2$ $Name: not supported by cvs2svn $9 * @date $Date: 2007-08-2 0 01:58:16$8 * @version $Revision: 1.1.2.3 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-08-23 00:55:49 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 27 27 #include "pmMoments.h" 28 28 #include "pmResiduals.h" 29 #include "pmGrowthCurve.h" 30 #include "pmPSF.h" 29 31 #include "pmModel.h" 30 32 #include "pmSource.h" … … 60 62 } 61 63 62 pmSource *pmSourceFromModel (pmModel *model, pmReadout *readout, pmSourceType type) {64 pmSource *pmSourceFromModel (pmModel *model, pmReadout *readout, float radius, pmSourceType type) { 63 65 64 66 pmSource *source = pmSourceAlloc (); … … 75 77 psAbort ("invalid source type"); 76 78 } 79 source->type = type; 77 80 78 81 pmCell *cell = readout->parent; … … 89 92 int yParityCell = psMetadataLookupS32(NULL, cell->concepts, "CELL.YPARITY"); 90 93 91 // XXX whose binning? 92 int xBin = psMetadataLookupS32(NULL, cell->concepts, "CELL.XBIN"); // Binning in x and y 93 int yBin = psMetadataLookupS32(NULL, cell->concepts, "CELL.YBIN"); // Binning in x and y 94 // XXX fix the binning : currently not selected from concepts 95 // int xBin = psMetadataLookupS32(NULL, cell->concepts, "CELL.XBIN"); // Binning in x and y 96 // int yBin = psMetadataLookupS32(NULL, cell->concepts, "CELL.YBIN"); // Binning in x and y 97 int xBin = 1; 98 int yBin = 1; 94 99 95 100 // Position on the cell … … 101 106 // float yReadout = CELL_TO_READOUT(yCell, y0Readout); 102 107 103 float radius = 5.0; // XXX need to define the radius in some rational way104 105 108 pmSourceDefinePixels (source, readout, xCell, yCell, radius); 106 109 -
branches/eam_branch_20070817/psModules/src/objects/pmSourceUtils.h
r14544 r14612 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1.1.2. 1$ $Name: not supported by cvs2svn $8 * @date $Date: 2007-08- 17 21:01:59 $7 * @version $Revision: 1.1.2.2 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2007-08-23 00:55:49 $ 9 9 * Copyright 2007 IfA, University of Hawaii 10 10 */ … … 33 33 pmModel *model, 34 34 pmReadout *readout, 35 float radius, 35 36 pmSourceType type 36 37 );
Note:
See TracChangeset
for help on using the changeset viewer.
