- Timestamp:
- Apr 14, 2006, 11:43:59 AM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/rel10_ifa/psModules/src/objects/pmSourcePhotometry.c
r6751 r6859 3 3 * @author EAM, IfA; GLG, MHPCC 4 4 * 5 * @version $Revision: 1.1.2. 3$ $Name: not supported by cvs2svn $6 * @date $Date: 2006-04- 01 02:47:20$5 * @version $Revision: 1.1.2.4 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2006-04-14 21:43:59 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 25 25 #include "pmSourcePhotometry.h" 26 26 27 # define DO_SKY 0 28 27 29 static float AP_MIN_SN = 0.0; 28 30 … … 105 107 status = pmSourcePhotometryModel (&source->extMag, source->modelEXT); 106 108 109 // measure the weight of included pixels 110 status = pmSourcePixelWeight (&source->pixWeight, model, source->pixels, source->mask); 111 107 112 // measure object aperture photometry 108 113 if (SN > AP_MIN_SN) { … … 169 174 } 170 175 171 # define DO_SKY 0172 176 // return source aperture magnitude 173 177 bool pmSourcePhotometryAper (float *apMag, pmModel *model, psImage *image, psImage *mask) … … 202 206 } 203 207 204 # if (0) 205 // XXX split into ap, psf, ext mags? 206 bool pmSourcePhotometry (float *fitMag, float *apMag, pmModel *model, psImage *image, psImage *mask) 207 { 208 209 float obsSum = 0; 210 float fitSum = 0; 211 float sky = model->params->data.F32[0]; 212 213 *fitMag = 99.0; 214 *obsMag = 99.0; 215 216 // measure fitMag 217 pmModelFlux modelFluxFunc = pmModelFlux_GetFunction (model->type); 218 fitSum = modelFluxFunc (model->params); 219 if (fitSum <= 0) 220 return false; 221 if (!isfinite(fitSum)) 222 return false; 223 *fitMag = -2.5*log10(fitSum); 224 225 // measure apMag 226 for (int ix = 0; ix < image->numCols; ix++) { 227 for (int iy = 0; iy < image->numRows; iy++) { 228 if (mask->data.U8[iy][ix]) 229 continue; 230 obsSum += image->data.F32[iy][ix] - sky; 231 } 232 } 233 if (obsSum <= 0) 234 return false; 235 *obsMag = -2.5*log10(obsSum); 236 208 // return source aperture magnitude 209 bool pmSourcePixelWeight (float *pixWeight, pmModel *model, psImage *image, psImage *mask) 210 { 211 float modelSum = 0; 212 float validSum = 0; 213 float sky = 0; 214 float value; 215 216 int Xo, Yo, dP; 217 int dX, DX, NX; 218 int dY, DY, NY; 219 220 *pixWeight = 0.0; 221 222 if (model == NULL) 223 return false; 224 225 // we only care about the value of the object model, not the local sky 226 if (DO_SKY) { 227 sky = model->params->data.F32[0]; 228 } else { 229 sky = 0; 230 } 231 232 // the model function returns the source flux at a position 233 pmModelFunc modelFunc = pmModelFunc_GetFunction (model->type); 234 psVector *coord = psVectorAlloc(2, PS_TYPE_F32); 235 psVector *params = model->params; 236 237 Xo = params->data.F32[2]; 238 Yo = params->data.F32[3]; 239 240 dX = Xo - image->col0; 241 dP = image->numCols - dX; 242 DX = PS_MAX(dX, dP); 243 NX = image->numCols; 244 245 dY = Yo - image->row0; 246 dP = image->numRows - dY; 247 DY = PS_MAX(dY, dP); 248 NY = image->numRows; 249 250 // measure modelSum and validSum 251 // XXX this does not work for sources near the edge: we need to measure for 252 // a full square region 253 for (int ix = -DX; ix < DX + 1; ix++) { 254 int mx = ix + dX; 255 for (int iy = -DY; iy < DY + 1; iy++) { 256 int my = iy + dY; 257 258 coord->data.F32[0] = (psF32) (ix + Xo); 259 coord->data.F32[1] = (psF32) (iy + Yo); 260 261 // for the full model, add all points 262 value = modelFunc (NULL, params, coord) - sky; 263 modelSum += value; 264 265 // include count only the unmasked pixels within the image area 266 if (mx < 0) 267 continue; 268 if (my < 0) 269 continue; 270 if (mx >= NX) 271 continue; 272 if (my >= NY) 273 continue; 274 if (mask->data.U8[my][mx]) 275 continue; 276 277 validSum += value; 278 } 279 } 280 if (validSum <= 0) 281 return false; 282 283 *pixWeight = validSum / modelSum; 237 284 return (true); 238 285 } 239 # endif240 286 241 287 float pmSourceCrossProduct (pmSource *Mi, pmSource *Mj)
Note:
See TracChangeset
for help on using the changeset viewer.
