Changeset 9526
- Timestamp:
- Oct 12, 2006, 4:23:55 PM (20 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
-
psModules/src/objects/models/pmModel_QGAUSS.c (modified) (12 diffs)
-
psModules/src/objects/pmSourceFitModel.c (modified) (4 diffs)
-
psModules/src/objects/pmSourceIO_CMF.c (modified) (2 diffs)
-
psphot/src/psphotApResid.c (modified) (3 diffs)
-
psphot/src/psphotGrowthCurve.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/objects/models/pmModel_QGAUSS.c
r6947 r9526 4 4 1 / (1 + z^M + z^N) 5 5 6 params->data.F32[ 0] = So;7 params->data.F32[ 1] = Zo;8 params->data.F32[ 2] = Xo;9 params->data.F32[ 3] = Yo;10 params->data.F32[ 4] = sqrt(2.0) / SigmaX;11 params->data.F32[ 5] = sqrt(2.0) / SigmaY;12 params->data.F32[ 6] = Sxy;13 params->data.F32[ 7] =14 params->data.F32[ 8] =6 params->data.F32[PM_PAR_SKY] = So; 7 params->data.F32[PM_PAR_FLUX] = Zo; 8 params->data.F32[PM_PAR_XPOS] = Xo; 9 params->data.F32[PM_PAR_YPOS] = Yo; 10 params->data.F32[PM_PAR_SXX] = sqrt(2.0) / SigmaX; 11 params->data.F32[PM_PAR_SYY] = sqrt(2.0) / SigmaY; 12 params->data.F32[PM_PAR_SXY] = Sxy; 13 params->data.F32[PM_PAR_7] = 14 params->data.F32[PM_PAR_8] = 15 15 *****************************************************************************/ 16 16 … … 21 21 psF32 *PAR = params->data.F32; 22 22 23 psF32 X = x->data.F32[0] - PAR[ 2];24 psF32 Y = x->data.F32[1] - PAR[ 3];25 psF32 px = PAR[ 4]*X;26 psF32 py = PAR[ 5]*Y;27 psF32 z = 0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[ 6]*X*Y;23 psF32 X = x->data.F32[0] - PAR[PM_PAR_XPOS]; 24 psF32 Y = x->data.F32[1] - PAR[PM_PAR_YPOS]; 25 psF32 px = PAR[PM_PAR_SXX]*X; 26 psF32 py = PAR[PM_PAR_SYY]*Y; 27 psF32 z = 0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[PM_PAR_SXY]*X*Y; 28 28 if (z < 0) 29 29 z = 0; 30 30 31 31 psF32 zp = pow(z,1.25); 32 psF32 r = 1.0 / (1 + PAR[ 7]*z + z*zp);33 34 psF32 r1 = PAR[ 1]*r;35 psF32 f = r1 + PAR[ 0];32 psF32 r = 1.0 / (1 + PAR[PM_PAR_7]*z + z*zp); 33 34 psF32 r1 = PAR[PM_PAR_FLUX]*r; 35 psF32 f = r1 + PAR[PM_PAR_SKY]; 36 36 37 37 if (deriv != NULL) { 38 38 psF32 *dPAR = deriv->data.F32; 39 39 40 // note difference from a pure gaussian: q = params->data.F32[ 1]*r40 // note difference from a pure gaussian: q = params->data.F32[PM_PAR_FLUX]*r 41 41 psF32 t = r1*r; 42 psF32 q = t*(PAR[ 7] + 2.25*zp);43 44 dPAR[ 0] = +1.0;45 dPAR[ 1] = +r;46 dPAR[ 2] = q*(2.0*px*PAR[4] + PAR[6]*Y);47 dPAR[ 3] = q*(2.0*py*PAR[5] + PAR[6]*X);48 dPAR[ 4] = -2.0*q*px*X;49 dPAR[ 5] = -2.0*q*py*Y;50 dPAR[ 6] = -q*X*Y;51 dPAR[ 7] = -t*z;42 psF32 q = t*(PAR[PM_PAR_7] + 2.25*zp); 43 44 dPAR[PM_PAR_SKY] = +1.0; 45 dPAR[PM_PAR_FLUX] = +r; 46 dPAR[PM_PAR_XPOS] = q*(2.0*px*PAR[PM_PAR_SXX] + PAR[PM_PAR_SXY]*Y); 47 dPAR[PM_PAR_YPOS] = q*(2.0*py*PAR[PM_PAR_SYY] + PAR[PM_PAR_SXY]*X); 48 dPAR[PM_PAR_SXX] = -2.0*q*px*X; 49 dPAR[PM_PAR_SYY] = -2.0*q*py*Y; 50 dPAR[PM_PAR_SXY] = -q*X*Y; 51 dPAR[PM_PAR_7] = -t*z; 52 52 } 53 53 return(f); … … 64 64 (*params_max)->n = (*params_max)->nalloc; 65 65 66 beta_lim[0][0].data.F32[ 0] = 1000;67 beta_lim[0][0].data.F32[ 1] = 3e6;68 beta_lim[0][0].data.F32[ 2] = 5;69 beta_lim[0][0].data.F32[ 3] = 5;70 beta_lim[0][0].data.F32[ 4] = 0.5;71 beta_lim[0][0].data.F32[ 5] = 0.5;72 beta_lim[0][0].data.F32[ 6] = 0.5;73 beta_lim[0][0].data.F32[ 7] = 0.5;74 75 params_min[0][0].data.F32[ 0] = -1000;76 params_min[0][0].data.F32[ 1] = 0;77 params_min[0][0].data.F32[ 2] = -100;78 params_min[0][0].data.F32[ 3] = -100;79 params_min[0][0].data.F32[ 4] = 0.01;80 params_min[0][0].data.F32[ 5] = 0.01;81 params_min[0][0].data.F32[ 6] = -5.0;82 params_min[0][0].data.F32[ 7] = 0.1;83 84 params_max[0][0].data.F32[ 0] = 1e5;85 params_max[0][0].data.F32[ 1] = 1e8;86 params_max[0][0].data.F32[ 2] = 1e4; // this should be set by image dimensions!87 params_max[0][0].data.F32[ 3] = 1e4; // this should be set by image dimensions!88 params_max[0][0].data.F32[ 4] = 2.0;89 params_max[0][0].data.F32[ 5] = 2.0;90 params_max[0][0].data.F32[ 6] = +5.0;91 params_max[0][0].data.F32[ 7] = 10.0;66 beta_lim[0][0].data.F32[PM_PAR_SKY] = 1000; 67 beta_lim[0][0].data.F32[PM_PAR_FLUX] = 3e6; 68 beta_lim[0][0].data.F32[PM_PAR_XPOS] = 5; 69 beta_lim[0][0].data.F32[PM_PAR_YPOS] = 5; 70 beta_lim[0][0].data.F32[PM_PAR_SXX] = 0.5; 71 beta_lim[0][0].data.F32[PM_PAR_SYY] = 0.5; 72 beta_lim[0][0].data.F32[PM_PAR_SXY] = 0.5; 73 beta_lim[0][0].data.F32[PM_PAR_7] = 0.5; 74 75 params_min[0][0].data.F32[PM_PAR_SKY] = -1000; 76 params_min[0][0].data.F32[PM_PAR_FLUX] = 0; 77 params_min[0][0].data.F32[PM_PAR_XPOS] = -100; 78 params_min[0][0].data.F32[PM_PAR_YPOS] = -100; 79 params_min[0][0].data.F32[PM_PAR_SXX] = 0.01; 80 params_min[0][0].data.F32[PM_PAR_SYY] = 0.01; 81 params_min[0][0].data.F32[PM_PAR_SXY] = -5.0; 82 params_min[0][0].data.F32[PM_PAR_7] = 0.1; 83 84 params_max[0][0].data.F32[PM_PAR_SKY] = 1e5; 85 params_max[0][0].data.F32[PM_PAR_FLUX] = 1e8; 86 params_max[0][0].data.F32[PM_PAR_XPOS] = 1e4; // this should be set by image dimensions! 87 params_max[0][0].data.F32[PM_PAR_YPOS] = 1e4; // this should be set by image dimensions! 88 params_max[0][0].data.F32[PM_PAR_SXX] = 2.0; 89 params_max[0][0].data.F32[PM_PAR_SYY] = 2.0; 90 params_max[0][0].data.F32[PM_PAR_SXY] = +5.0; 91 params_max[0][0].data.F32[PM_PAR_7] = 10.0; 92 92 93 93 return (TRUE); … … 102 102 psF32 *params = model->params->data.F32; 103 103 104 params[ 0] = moments->Sky;105 params[ 1] = moments->Peak - moments->Sky;106 params[ 2] = peak->x;107 params[ 3] = peak->y;108 params[ 4] = (moments->Sx < (1.2 / 2.0)) ? 2.0 : (1.2 / moments->Sx);109 params[ 5] = (moments->Sy < (1.2 / 2.0)) ? 2.0 : (1.2 / moments->Sy);110 params[ 6] = 0.0;111 params[ 7] = 1.0;104 params[PM_PAR_SKY] = moments->Sky; 105 params[PM_PAR_FLUX] = moments->Peak - moments->Sky; 106 params[PM_PAR_XPOS] = peak->x; 107 params[PM_PAR_YPOS] = peak->y; 108 params[PM_PAR_SXX] = (moments->Sx < (1.2 / 2.0)) ? 2.0 : (1.2 / moments->Sx); 109 params[PM_PAR_SYY] = (moments->Sy < (1.2 / 2.0)) ? 2.0 : (1.2 / moments->Sy); 110 params[PM_PAR_SXY] = 0.0; 111 params[PM_PAR_7] = 1.0; 112 112 113 113 return(true); … … 121 121 psF32 *PAR = params->data.F32; 122 122 123 psF64 A1 = PS_SQR(PAR[ 4]);124 psF64 A2 = PS_SQR(PAR[ 5]);125 psF64 A3 = PS_SQR(PAR[ 6]);123 psF64 A1 = PS_SQR(PAR[PM_PAR_SXX]); 124 psF64 A2 = PS_SQR(PAR[PM_PAR_SYY]); 125 psF64 A3 = PS_SQR(PAR[PM_PAR_SXY]); 126 126 psF64 Area = 2.0 * M_PI / sqrt(A1*A2 - A3); 127 127 // Area is equivalent to 2 pi sigma^2 … … 135 135 float f1, f2; 136 136 for (z = DZ; z < 50; z += DZ) { 137 f1 = 1.0 / (1 + PAR[ 7]*z + pow(z, 2.25));137 f1 = 1.0 / (1 + PAR[PM_PAR_7]*z + pow(z, 2.25)); 138 138 z += DZ; 139 f2 = 1.0 / (1 + PAR[ 7]*z + pow(z, 2.25));139 f2 = 1.0 / (1 + PAR[PM_PAR_7]*z + pow(z, 2.25)); 140 140 norm += f0 + 4*f1 + f2; 141 141 f0 = f2; … … 143 143 norm *= DZ / 3.0; 144 144 145 psF64 Flux = PAR[ 1] * Area * norm;145 psF64 Flux = PAR[PM_PAR_FLUX] * Area * norm; 146 146 147 147 return(Flux); … … 158 158 if (flux <= 0) 159 159 return (1.0); 160 if (PAR[ 1] <= 0)160 if (PAR[PM_PAR_FLUX] <= 0) 161 161 return (1.0); 162 if (flux >= PAR[ 1])162 if (flux >= PAR[PM_PAR_FLUX]) 163 163 return (1.0); 164 164 165 165 // if Sx == Sy, sigma = Sx == Sy 166 psF64 sigma = hypot (1.0 / PAR[ 4], 1.0 / PAR[5]) / sqrt(2.0);167 psF64 limit = flux / PAR[ 1];166 psF64 sigma = hypot (1.0 / PAR[PM_PAR_SXX], 1.0 / PAR[PM_PAR_SYY]) / sqrt(2.0); 167 psF64 limit = flux / PAR[PM_PAR_FLUX]; 168 168 169 169 # if 0 … … 174 174 for (z = 0.0; z < 30.0; z += dz) { 175 175 Nstep ++; 176 f = 1.0 / (1 + PAR[ 7]*z + pow(z, 2.25));177 // test: f = 1.0 / (1 + PAR[ 7]*z + PS_SQR(z));176 f = 1.0 / (1 + PAR[PM_PAR_7]*z + pow(z, 2.25)); 177 // test: f = 1.0 / (1 + PAR[PM_PAR_7]*z + PS_SQR(z)); 178 178 if (f < limit) 179 179 break; … … 189 189 // choose a z value guaranteed to be beyond our limit 190 190 float z0 = pow((1.0 / limit), (1.0 / 2.25)); 191 float z1 = (1.0 / limit) / PAR[ 7];191 float z1 = (1.0 / limit) / PAR[PM_PAR_7]; 192 192 z1 = PS_MAX (z0, z1); 193 193 z0 = 0.0; 194 194 195 float f0 = 1.0 / (1 + PAR[ 7]*z0 + pow(z0, 2.25));196 float f1 = 1.0 / (1 + PAR[ 7]*z1 + pow(z1, 2.25));195 float f0 = 1.0 / (1 + PAR[PM_PAR_7]*z0 + pow(z0, 2.25)); 196 float f1 = 1.0 / (1 + PAR[PM_PAR_7]*z1 + pow(z1, 2.25)); 197 197 while ((Nstep < 10) && (fabs(z1 - z0) > 0.5)) { 198 198 z = 0.5*(z0 + z1); 199 f = 1.0 / (1 + PAR[ 7]*z + pow(z, 2.25));199 f = 1.0 / (1 + PAR[PM_PAR_7]*z + pow(z, 2.25)); 200 200 // fprintf (stderr, "%f %f %f : %f %f %f\n", f0, f, f1, z0, z, z1); 201 201 if (f > limit) { … … 224 224 psF32 *in = modelFLT->params->data.F32; 225 225 226 out[0] = in[0]; 227 out[1] = in[1]; 228 out[2] = in[2]; 229 out[3] = in[3]; 230 226 out[PM_PAR_SKY] = in[PM_PAR_SKY]; 227 out[PM_PAR_FLUX] = in[PM_PAR_FLUX]; 228 out[PM_PAR_XPOS] = in[PM_PAR_XPOS]; 229 out[PM_PAR_YPOS] = in[PM_PAR_YPOS]; 230 231 assert (PM_PAR_YPOS == 4); // so that we copy the rest of the params 231 232 for (int i = 4; i < 8; i++) { 232 233 psPolynomial2D *poly = psf->params->data[i-4]; 233 234 // XXX: Verify this (from EAM change) 234 //out[i] = Polynomial2DEval_EAM(poly, out[ 2], out[3]);235 out[i] = psPolynomial2DEval(poly, out[ 2], out[3]);235 //out[i] = Polynomial2DEval_EAM(poly, out[PM_PAR_XPOS], out[PM_PAR_YPOS]); 236 out[i] = psPolynomial2DEval(poly, out[PM_PAR_XPOS], out[PM_PAR_YPOS]); 236 237 } 237 238 return(true); … … 248 249 249 250 dP = 0; 250 dP += PS_SQR(dPAR[ 4] / PAR[4]);251 dP += PS_SQR(dPAR[ 5] / PAR[5]);251 dP += PS_SQR(dPAR[PM_PAR_SXX] / PAR[PM_PAR_SXX]); 252 dP += PS_SQR(dPAR[PM_PAR_SYY] / PAR[PM_PAR_SYY]); 252 253 dP = sqrt (dP); 253 254 254 255 status = true; 255 256 status &= (dP < 0.5); 256 status &= (PAR[ 1] > 0);257 status &= ((dPAR[ 1]/PAR[1]) < 0.5);257 status &= (PAR[PM_PAR_FLUX] > 0); 258 status &= ((dPAR[PM_PAR_FLUX]/PAR[PM_PAR_FLUX]) < 0.5); 258 259 259 260 if (!status) -
trunk/psModules/src/objects/pmSourceFitModel.c
r8815 r9526 6 6 * @author GLG, MHPCC 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-13 02:23:55 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 136 136 // NORM-only model fits only source normalization (Io) 137 137 nParams = 1; 138 paramMask->data.U8[ 1] = 0;138 paramMask->data.U8[PM_PAR_FLUX] = 0; 139 139 break; 140 140 case PM_SOURCE_FIT_PSF: 141 141 // PSF model only fits x,y,Io 142 142 nParams = 3; 143 paramMask->data.U8[ 1] = 0;144 paramMask->data.U8[ 2] = 0;145 paramMask->data.U8[ 3] = 0;143 paramMask->data.U8[PM_PAR_FLUX] = 0; 144 paramMask->data.U8[PM_PAR_XPOS] = 0; 145 paramMask->data.U8[PM_PAR_YPOS] = 0; 146 146 break; 147 147 case PM_SOURCE_FIT_EXT: … … 149 149 nParams = params->n - 1; 150 150 psVectorInit (paramMask, 0); 151 paramMask->data.U8[ 0] = 1;151 paramMask->data.U8[PM_PAR_SKY] = 1; 152 152 break; 153 153 case PM_SOURCE_FIT_PSF_AND_SKY: … … 226 226 227 227 // models can go insane: reject these 228 onPic &= (params->data.F32[ 2] >= source->pixels->col0);229 onPic &= (params->data.F32[ 2] < source->pixels->col0 + source->pixels->numCols);230 onPic &= (params->data.F32[ 3] >= source->pixels->row0);231 onPic &= (params->data.F32[ 3] < source->pixels->row0 + source->pixels->numRows);228 onPic &= (params->data.F32[PM_PAR_XPOS] >= source->pixels->col0); 229 onPic &= (params->data.F32[PM_PAR_XPOS] < source->pixels->col0 + source->pixels->numCols); 230 onPic &= (params->data.F32[PM_PAR_YPOS] >= source->pixels->row0); 231 onPic &= (params->data.F32[PM_PAR_YPOS] < source->pixels->row0 + source->pixels->numRows); 232 232 if (!onPic) { 233 233 model->status = PM_MODEL_OFFIMAGE; -
trunk/psModules/src/objects/pmSourceIO_CMF.c
r8880 r9526 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1. 8$ $Name: not supported by cvs2svn $6 * @date $Date: 2006- 09-22 12:24:17$5 * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2006-10-13 02:23:55 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 63 63 64 64 type = pmSourceDophotType (source); 65 lsky = (PAR[PM_PAR_SKY] < 1.0) ? 0.0 : log10(PAR[PM_PAR_SKY]); 65 #if 1 66 67 float sky = PAR[PM_PAR_SKY]; 68 #else // we eventually need to interpolate here to get the sky background. XXX 69 70 file = psMetadataLookupPtr(&status, header, "PSPHOT.BACKGND"); 71 if (file != NULL) { 72 background = pmFPAviewThisReadout (view, file->fpa); 73 } 74 float sky = source->moments->Sky + 0; // etc. 75 #endif 76 77 lsky = (sky < 1.0) ? 0.0 : log10(sky); 66 78 67 79 shape.sx = PAR[PM_PAR_SXX]; -
trunk/psphot/src/psphotApResid.c
r9516 r9526 55 55 apResid->data.F64[Npsf] = source->apMag - source->psfMag; 56 56 57 xPos->data.F64[Npsf] = model->params->data.F32[ 2];58 yPos->data.F64[Npsf] = model->params->data.F32[ 3];57 xPos->data.F64[Npsf] = model->params->data.F32[PM_PAR_XPOS]; 58 yPos->data.F64[Npsf] = model->params->data.F32[PM_PAR_YPOS]; 59 59 60 60 flux->data.F64[Npsf] = pow(10.0, -0.4*source->psfMag); … … 73 73 } 74 74 75 dMag->data.F64[Npsf] = model->dparams->data.F32[ 1] / model->params->data.F32[1];75 dMag->data.F64[Npsf] = model->dparams->data.F32[PM_PAR_FLUX] / model->params->data.F32[PM_PAR_FLUX]; 76 76 77 77 psVectorExtend (mask, 100, 1); … … 93 93 } 94 94 95 // APTREND options : NONE SKYBIAS XY_LIN XY_QUAD SKY_XY_LIN FULL95 // APTREND options are defined by the if ... else if ... else if ... else block below 96 96 char *ApTrendOption = psMetadataLookupPtr (&status, recipe, "APTREND"); 97 97 if (!status) ApTrendOption = DEFAULT_OPTION; -
trunk/psphot/src/psphotGrowthCurve.c
r9270 r9526 23 23 // assign the x and y coords to the image center 24 24 // create an object with center intensity of 1000 25 modelRef->params->data.F32[ 0] = 0;26 modelRef->params->data.F32[ 1] = 1000;27 modelRef->params->data.F32[ 2] = xc;28 modelRef->params->data.F32[ 3] = yc;25 modelRef->params->data.F32[PM_PAR_SKY] = 0; 26 modelRef->params->data.F32[PM_PAR_FLUX] = 1000; 27 modelRef->params->data.F32[PM_PAR_XPOS] = xc; 28 modelRef->params->data.F32[PM_PAR_YPOS] = yc; 29 29 30 30 // create modelPSF from this model
Note:
See TracChangeset
for help on using the changeset viewer.
