Changeset 9562 for trunk/psModules/src/objects/pmPSF.c
- Timestamp:
- Oct 13, 2006, 2:55:43 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/objects/pmPSF.c (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/objects/pmPSF.c
r8815 r9562 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1. 9$ $Name: not supported by cvs2svn $9 * @date $Date: 2006- 09-15 09:49:01$8 * @version $Revision: 1.10 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2006-10-14 00:55:43 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 21 21 /*****************************************************************************/ 22 22 23 #include <strings.h> // for strcasecmp 23 24 #include <pslib.h> 24 25 #include "pmHDU.h" … … 56 57 /*****************************************************************************/ 57 58 58 59 60 59 /***************************************************************************** 61 60 pmPSFFree(psf): function to free a pmPSF structure … … 85 84 Object Normalization 86 85 *****************************************************************************/ 87 pmPSF *pmPSFAlloc (pmModelType type, bool poissonErrors )86 pmPSF *pmPSFAlloc (pmModelType type, bool poissonErrors, psPolynomial2D *psfTrendMask) 88 87 { 89 88 int Nparams; … … 100 99 101 100 // the ApTrend components are (x, y, r2rflux, flux) 101 // the ApTrend order is defined by the masking 102 // initially we set it to SKYBIAS (no X,Y variation) 103 // this is adjusted in psphotApResid based on the user's choices 102 104 psf->ApTrend = psPolynomial4DAlloc (PS_POLYNOMIAL_ORD, 2, 2, 1, 1); 103 pmPSF _MaskApTrend (psf->ApTrend, PM_PSF_SKYBIAS);105 pmPSFMaskApTrend (psf->ApTrend, PM_PSF_APTREND_SKYBIAS); 104 106 105 107 if (psf->poissonErrors) { … … 120 122 psf->params = psArrayAlloc(Nparams - 4); 121 123 psf->params->n = psf->params->nalloc; 122 for (int i = 0; i < psf->params->n; i++) { 123 // XXX EAM : make this a user-defined value? 124 psf->params->data[i] = psPolynomial2DAlloc(PS_POLYNOMIAL_ORD, 1, 1); 124 125 // the order of the PSF parameter (X,Y) fits is determined by the 126 // psfTrendMask polynomial (user-specified as in the recipe). the 127 // masks of psfTrendMask are applied to each parameter. 128 // if psfTrendMask is NULL, these polynomials are not allocated. 129 // in this case, the user must set them by hand (as in pmPSFfromMD) 130 // XXX should we drop the hard-wired '4' above and use NULL to identify 131 // the parameters which are not fitted. these could be selected by 132 // testing for the value of PM_PAR_XPOS, etc. 133 if (psfTrendMask) { 134 for (int i = 0; i < psf->params->n; i++) { 135 psPolynomial2D *param = psPolynomial2DAlloc(PS_POLYNOMIAL_ORD, psfTrendMask->nX, psfTrendMask->nY); 136 for (int nx = 0; nx < param->nX + 1; nx++) { 137 for (int ny = 0; ny < param->nY + 1; ny++) { 138 param->mask[nx][ny] = psfTrendMask->mask[nx][ny]; 139 } 140 } 141 psf->params->data[i] = param; 142 } 125 143 } 126 144 … … 223 241 224 242 // zero and mask out all terms: 225 static bool maskAll Terms (psPolynomial4D *trend)243 static bool maskAllApTerms (psPolynomial4D *trend) 226 244 { 227 245 … … 243 261 * to enable the specific subset of the coefficients 244 262 **********************************************/ 245 bool pmPSF _MaskApTrend (psPolynomial4D *trend,246 pmPSF_ApTrendOptions option)263 bool pmPSFMaskApTrend (psPolynomial4D *trend, 264 pmPSFApTrendOptions option) 247 265 { 248 266 249 267 switch (option) { 250 case PM_PSF_ NONE:251 maskAll Terms (trend);252 return true; 253 254 case PM_PSF_ CONSTANT:255 maskAll Terms (trend);256 trend->mask[0][0][0][0] = 0; // unmask constant 257 return true; 258 259 case PM_PSF_ SKYBIAS:260 maskAll Terms (trend);261 trend->mask[0][0][0][0] = 0; // unmask constant 262 trend->mask[0][0][1][0] = 0; // unmask skybias 263 return true; 264 265 case PM_PSF_ SKYSAT:266 maskAll Terms (trend);268 case PM_PSF_APTREND_NONE: 269 maskAllApTerms (trend); 270 return true; 271 272 case PM_PSF_APTREND_CONSTANT: 273 maskAllApTerms (trend); 274 trend->mask[0][0][0][0] = 0; // unmask constant 275 return true; 276 277 case PM_PSF_APTREND_SKYBIAS: 278 maskAllApTerms (trend); 279 trend->mask[0][0][0][0] = 0; // unmask constant 280 trend->mask[0][0][1][0] = 0; // unmask skybias 281 return true; 282 283 case PM_PSF_APTREND_SKYSAT: 284 maskAllApTerms (trend); 267 285 trend->mask[0][0][0][0] = 0; // unmask constant 268 286 trend->mask[0][0][1][0] = 0; // unmask skybias … … 270 288 return true; 271 289 272 case PM_PSF_ XY_LIN:273 maskAll Terms (trend);274 trend->mask[0][0][0][0] = 0; // unmask constant 275 trend->mask[1][0][0][0] = 0; // unmask x 276 trend->mask[0][1][0][0] = 0; // unmask y 277 return true; 278 279 case PM_PSF_ XY_QUAD:280 maskAll Terms (trend);290 case PM_PSF_APTREND_XY_LIN: 291 maskAllApTerms (trend); 292 trend->mask[0][0][0][0] = 0; // unmask constant 293 trend->mask[1][0][0][0] = 0; // unmask x 294 trend->mask[0][1][0][0] = 0; // unmask y 295 return true; 296 297 case PM_PSF_APTREND_XY_QUAD: 298 maskAllApTerms (trend); 281 299 trend->mask[0][0][0][0] = 0; // unmask constant 282 300 trend->mask[1][0][0][0] = 0; // unmask x … … 287 305 return true; 288 306 289 case PM_PSF_ SKY_XY_LIN:290 maskAll Terms (trend);291 trend->mask[0][0][0][0] = 0; // unmask constant 292 trend->mask[1][0][0][0] = 0; // unmask x 293 trend->mask[0][1][0][0] = 0; // unmask y 294 trend->mask[0][0][1][0] = 0; // unmask skybias 295 return true; 296 297 case PM_PSF_ SKYSAT_XY_LIN:298 maskAll Terms (trend);307 case PM_PSF_APTREND_SKY_XY_LIN: 308 maskAllApTerms (trend); 309 trend->mask[0][0][0][0] = 0; // unmask constant 310 trend->mask[1][0][0][0] = 0; // unmask x 311 trend->mask[0][1][0][0] = 0; // unmask y 312 trend->mask[0][0][1][0] = 0; // unmask skybias 313 return true; 314 315 case PM_PSF_APTREND_SKYSAT_XY_LIN: 316 maskAllApTerms (trend); 299 317 trend->mask[0][0][0][0] = 0; // unmask constant 300 318 trend->mask[1][0][0][0] = 0; // unmask x … … 304 322 return true; 305 323 306 case PM_PSF_A LL:324 case PM_PSF_APTREND_ALL: 307 325 default: 308 maskAll Terms (trend);326 maskAllApTerms (trend); 309 327 trend->mask[0][0][0][0] = 0; // unmask constant 310 328 trend->mask[0][0][1][0] = 0; // unmask skybias … … 320 338 return false; 321 339 } 340 341 pmPSFApTrendOptions pmPSFApTrendOptionFromName (char *name) 342 { 343 344 // no correction 345 if (!strcasecmp (name, "NONE")) 346 return PM_PSF_APTREND_NONE; 347 if (!strcasecmp (name, "CONSTANT")) 348 return PM_PSF_APTREND_CONSTANT; 349 if (!strcasecmp (name, "SKYBIAS")) 350 return PM_PSF_APTREND_SKYBIAS; 351 if (!strcasecmp (name, "SKYSAT")) 352 return PM_PSF_APTREND_SKYSAT; 353 if (!strcasecmp (name, "XY_LIN")) 354 return PM_PSF_APTREND_XY_LIN; 355 if (!strcasecmp (name, "XY_QUAD")) 356 return PM_PSF_APTREND_XY_QUAD; 357 if (!strcasecmp (name, "SKY_XY_LIN")) 358 return PM_PSF_APTREND_SKY_XY_LIN; 359 if (!strcasecmp (name, "SKYSAT_XY_LIN")) 360 return PM_PSF_APTREND_SKYSAT_XY_LIN; 361 if (!strcasecmp (name, "ALL")) 362 return PM_PSF_APTREND_ALL; 363 364 psError(PS_ERR_UNKNOWN, true, "Unknown APTREND value: %s", name); 365 return PM_PSF_APTREND_ERROR; 366 } 367
Note:
See TracChangeset
for help on using the changeset viewer.
