Changeset 8882
- Timestamp:
- Sep 22, 2006, 2:29:31 AM (20 years ago)
- Location:
- trunk
- Files:
-
- 14 edited
-
psModules/src/objects/pmModel.h (modified) (2 diffs)
-
psModules/src/objects/pmPSFtry.c (modified) (3 diffs)
-
psModules/src/objects/pmSourceIO_CMP.c (modified) (3 diffs)
-
psModules/src/objects/pmSourceIO_OBJ.c (modified) (3 diffs)
-
psModules/src/objects/pmSourceIO_RAW.c (modified) (3 diffs)
-
psModules/src/objects/pmSourceIO_SX.c (modified) (2 diffs)
-
psphot/src/models/pmModel_GAUSS.c (modified) (1 diff)
-
psphot/src/models/pmModel_PGAUSS.c (modified) (4 diffs)
-
psphot/src/models/pmModel_QGAUSS.c (modified) (5 diffs)
-
psphot/src/models/pmModel_RGAUSS.c (modified) (4 diffs)
-
psphot/src/models/pmModel_SGAUSS.c (modified) (5 diffs)
-
psphot/src/models/pmModel_TAUSS.c (modified) (2 diffs)
-
psphot/src/models/pmModel_TGAUSS.c (modified) (5 diffs)
-
psphot/src/models/pmModel_ZGAUSS.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/objects/pmModel.h
r6872 r8882 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1. 2$ $Name: not supported by cvs2svn $9 * @date $Date: 2006-0 4-17 18:01:05$8 * @version $Revision: 1.3 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2006-09-22 12:24:38 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 49 49 } 50 50 pmModel; 51 52 /** Symbolic names for the elements of [d]params 53 * Note: these are #defines not enums as a given element of [d]params 54 * may/will correspond to different parameters in different contexts 55 */ 56 #define PM_PAR_SKY 0 // Sky 57 #define PM_PAR_FLUX 1 // Flux 58 #define PM_PAR_XPOS 2 // X centre of object 59 #define PM_PAR_YPOS 3 // Y centre of object 60 #define PM_PAR_SXX 4 // shape X^2 moment 61 #define PM_PAR_SYY 5 // shape Y^2 moment 62 #define PM_PAR_SXY 6 // shape XY moment 63 #define PM_PAR_7 7 // ??? Unknown parameter 64 #define PM_PAR_8 8 // ??? Unknown parameter 51 65 52 66 /** pmModelAlloc() -
trunk/psModules/src/objects/pmPSFtry.c
r8815 r8882 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1.1 5$ $Name: not supported by cvs2svn $8 * @date $Date: 2006-09- 15 09:49:01$7 * @version $Revision: 1.16 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2006-09-22 12:24:38 $ 9 9 * 10 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 191 191 psTrace ("psphot.psftry", 3, "keeping %d of %ld PSF candidates (PSF)\n", Npsf, sources->n); 192 192 193 // measure the chi-square trend as a function of flux (PAR[ 1])193 // measure the chi-square trend as a function of flux (PAR[PM_PAR_FLUX]) 194 194 // this should be linear for Poisson errors and quadratic for constant sky errors 195 195 psVector *flux = psVectorAlloc (psfTry->sources->n, PS_TYPE_F64); … … 206 206 mask->data.U8[i] = 1; 207 207 } else { 208 flux->data.F64[i] = model->params->data.F32[ 1];208 flux->data.F64[i] = model->params->data.F32[PM_PAR_FLUX]; 209 209 chisq->data.F64[i] = model[0].chisq/model[0].nDOF; 210 210 mask->data.U8[i] = 0; -
trunk/psModules/src/objects/pmSourceIO_CMP.c
r8815 r8882 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1.1 3$ $Name: not supported by cvs2svn $6 * @date $Date: 2006-09- 15 09:49:01$5 * @version $Revision: 1.14 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2006-09-22 12:24:38 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 116 116 117 117 type = pmSourceDophotType (source); 118 lsky = (PAR[ 0] < 1.0) ? 0.0 : log10(PAR[0]);119 120 shape.sx = PAR[ 4];121 shape.sy = PAR[ 5];122 shape.sxy = PAR[ 6];118 lsky = (PAR[PM_PAR_SKY] < 1.0) ? 0.0 : log10(PAR[PM_PAR_SKY]); 119 120 shape.sx = PAR[PM_PAR_SXX]; 121 shape.sy = PAR[PM_PAR_SYY]; 122 shape.sxy = PAR[PM_PAR_SXY]; 123 123 axes = psEllipseShapeToAxes (shape); 124 124 125 125 psLineInit (line); 126 psLineAdd (line, "%6.1f ", PAR[ 2]);127 psLineAdd (line, "%6.1f ", PAR[ 3]);126 psLineAdd (line, "%6.1f ", PAR[PM_PAR_XPOS]); 127 psLineAdd (line, "%6.1f ", PAR[PM_PAR_YPOS]); 128 128 psLineAdd (line, "%6.3f ", PS_MIN (99.0, source->psfMag + ZERO_POINT)); 129 129 psLineAdd (line, "%03d ", PS_MIN (999, (int)(1000*source->errMag))); … … 253 253 dPAR = model->dparams->data.F32; 254 254 255 PAR[ 0]= pow (atof (array->data[5]), 10.0);256 PAR[ 2]= atof (array->data[0]);257 PAR[ 3]= atof (array->data[1]);255 PAR[PM_PAR_SKY] = pow (atof (array->data[5]), 10.0); 256 PAR[PM_PAR_XPOS] = atof (array->data[0]); 257 PAR[PM_PAR_YPOS] = atof (array->data[1]); 258 258 source->psfMag = atof (array->data[2]); 259 259 source->extMag = atof (array->data[6]); -
trunk/psModules/src/objects/pmSourceIO_OBJ.c
r8815 r8882 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $6 * @date $Date: 2006-09- 15 09:49:01$5 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2006-09-22 12:24:38 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 62 62 dPAR = model->dparams->data.F32; 63 63 64 dmag = dPAR[ 1] / PAR[1];64 dmag = dPAR[PM_PAR_FLUX] / PAR[PM_PAR_FLUX]; 65 65 type = pmSourceDophotType (source); 66 66 if ((source->apMag < 99.0) && (source->psfMag < 99.0)) { … … 70 70 } 71 71 72 shape.sx = PAR[ 4];73 shape.sy = PAR[ 5];74 shape.sxy = PAR[ 6];72 shape.sx = PAR[PM_PAR_SXX]; 73 shape.sy = PAR[PM_PAR_SYY]; 74 shape.sxy = PAR[PM_PAR_SXY]; 75 75 axes = psEllipseShapeToAxes (shape); 76 76 77 77 psLineInit (line); 78 78 psLineAdd (line, "%3d", type); 79 psLineAdd (line, "%8.2f", PAR[ 2]);80 psLineAdd (line, "%8.2f", PAR[ 3]);79 psLineAdd (line, "%8.2f", PAR[PM_PAR_XPOS]); 80 psLineAdd (line, "%8.2f", PAR[PM_PAR_YPOS]); 81 81 psLineAdd (line, "%8.3f", source->psfMag); 82 82 psLineAdd (line, "%6.3f", dmag); 83 psLineAdd (line, "%9.2f", PAR[ 0]);83 psLineAdd (line, "%9.2f", PAR[PM_PAR_SKY]); 84 84 psLineAdd (line, "%9.3f", axes.major); 85 85 psLineAdd (line, "%9.3f", axes.minor); -
trunk/psModules/src/objects/pmSourceIO_RAW.c
r8815 r8882 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $6 * @date $Date: 2006-09- 15 09:49:01$5 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2006-09-22 12:24:38 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 84 84 85 85 // dPos is positional error, dMag is mag error 86 dPos = hypot (dPAR[ 2], dPAR[3]);86 dPos = hypot (dPAR[PM_PAR_XPOS], dPAR[PM_PAR_YPOS]); 87 87 88 88 fprintf (f, "%7.1f %7.1f %7.1f %8.4f %7.4f %7.4f ", 89 PAR[2], PAR[3], PAR[0], source->psfMag, source->errMag, dPos); 89 PAR[PM_PAR_XPOS], PAR[PM_PAR_YPOS], PAR[PM_PAR_SKY], 90 source->psfMag, source->errMag, dPos); 90 91 91 92 for (j = 4; j < model->params->n; j++) { … … 142 143 // dPos is shape error 143 144 // XXX these are hardwired for SGAUSS 144 dPos = hypot ((dPAR[ 4] / PAR[4]), (dPAR[5] / PAR[5]));145 dPos = hypot ((dPAR[PM_PAR_SXX] / PAR[PM_PAR_SXX]), (dPAR[PM_PAR_SYY] / PAR[PM_PAR_SYY])); 145 146 146 147 fprintf (f, "%7.1f %7.1f %7.1f %8.4f %7.4f %7.4f ", 147 PAR[2], PAR[3], PAR[0], source->extMag, source->errMag, dPos); 148 PAR[PM_PAR_XPOS], PAR[PM_PAR_YPOS], PAR[PM_PAR_SKY], 149 source->extMag, source->errMag, dPos); 148 150 149 151 for (j = 4; j < model->params->n; j++) { -
trunk/psModules/src/objects/pmSourceIO_SX.c
r8815 r8882 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $6 * @date $Date: 2006-09- 15 09:49:01$5 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2006-09-22 12:24:38 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 60 60 // pmSourceSextractType (source, &type, &flags); 61 61 62 shape.sx = PAR[ 4];63 shape.sy = PAR[ 5];64 shape.sxy = PAR[ 6];62 shape.sx = PAR[PM_PAR_SXX]; 63 shape.sy = PAR[PM_PAR_SYY]; 64 shape.sxy = PAR[PM_PAR_SXY]; 65 65 axes = psEllipseShapeToAxes (shape); 66 66 67 67 psLineInit (line); 68 68 psLineAdd (line, "%5.2f", 0.0); // should be type 69 psLineAdd (line, "%11.3f", PAR[ 2]);70 psLineAdd (line, "%11.3f", PAR[ 3]);69 psLineAdd (line, "%11.3f", PAR[PM_PAR_XPOS]); 70 psLineAdd (line, "%11.3f", PAR[PM_PAR_YPOS]); 71 71 psLineAdd (line, "%9.4f", source->psfMag); 72 72 psLineAdd (line, "%9.4f", source->errMag); 73 psLineAdd (line, "%13.4f", PAR[ 0]);73 psLineAdd (line, "%13.4f", PAR[PM_PAR_SKY]); 74 74 psLineAdd (line, "%9.2f", axes.major); 75 75 psLineAdd (line, "%9.2f", axes.minor); -
trunk/psphot/src/models/pmModel_GAUSS.c
r5593 r8882 139 139 140 140 dP = 0; 141 dP += PS_SQR(dPAR[ 4] / PAR[4]);142 dP += PS_SQR(dPAR[ 5] / PAR[5]);141 dP += PS_SQR(dPAR[PM_PAR_SXX] / PAR[PM_PAR_SXX]); 142 dP += PS_SQR(dPAR[PM_PAR_SYY] / PAR[PM_PAR_SYY]); 143 143 dP = sqrt (dP); 144 144 145 145 status = true; 146 146 status &= (dP < 0.5); 147 status &= (PAR[ 1] > 0);148 status &= ((dPAR[ 1]/PAR[1]) < 0.5);147 status &= (PAR[PM_PAR_FLUX] > 0); 148 status &= ((dPAR[PM_PAR_FLUX]/PAR[PM_PAR_FLUX]) < 0.5); 149 149 150 150 if (status) return true; -
trunk/psphot/src/models/pmModel_PGAUSS.c
r5593 r8882 16 16 psF32 *PAR = params->data.F32; 17 17 18 psF32 X = x->data.F32[0] - PAR[ 2];19 psF32 Y = x->data.F32[1] - PAR[ 3];20 psF32 px = PAR[ 4]*X;21 psF32 py = PAR[ 5]*Y;22 psF32 z = 0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[ 6]*X*Y;18 psF32 X = x->data.F32[0] - PAR[PM_PAR_XPOS]; 19 psF32 Y = x->data.F32[1] - PAR[PM_PAR_YPOS]; 20 psF32 px = PAR[PM_PAR_SXX]*X; 21 psF32 py = PAR[PM_PAR_SYY]*Y; 22 psF32 z = 0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[PM_PAR_SXY]*X*Y; 23 23 psF32 t = 1 + z + z*z/2.0; 24 24 psF32 r = 1.0 / (t + z*z*z/6.0); /* exp (-Z) */ 25 psF32 f = PAR[ 1]*r + PAR[0];25 psF32 f = PAR[PM_PAR_FLUX]*r + PAR[PM_PAR_SKY]; 26 26 27 27 if (deriv != NULL) { 28 // note difference from a pure gaussian: q = PAR[ 1]*r29 psF32 q = PAR[ 1]*r*r*t;28 // note difference from a pure gaussian: q = PAR[PM_PAR_FLUX]*r 29 psF32 q = PAR[PM_PAR_FLUX]*r*r*t; 30 30 deriv->data.F32[0] = +1.0; 31 31 deriv->data.F32[1] = +r; 32 deriv->data.F32[2] = q*(2.0*px*PAR[ 4] + PAR[6]*Y);33 deriv->data.F32[3] = q*(2.0*py*PAR[ 5] + PAR[6]*X);32 deriv->data.F32[2] = q*(2.0*px*PAR[PM_PAR_SXX] + PAR[PM_PAR_SXY]*Y); 33 deriv->data.F32[3] = q*(2.0*py*PAR[PM_PAR_SYY] + PAR[PM_PAR_SXY]*X); 34 34 deriv->data.F32[4] = -2.0*q*px*X; 35 35 deriv->data.F32[5] = -2.0*q*py*Y; … … 78 78 psF32 *PAR = params->data.F32; 79 79 80 psF64 A1 = PS_SQR(PAR[ 4]);81 psF64 A2 = PS_SQR(PAR[ 5]);82 psF64 A3 = PS_SQR(PAR[ 6]);80 psF64 A1 = PS_SQR(PAR[PM_PAR_SXX]); 81 psF64 A2 = PS_SQR(PAR[PM_PAR_SYY]); 82 psF64 A3 = PS_SQR(PAR[PM_PAR_SXY]); 83 83 psF64 Area = 2.0 * M_PI / sqrt(A1*A2 - A3); 84 84 // Area is equivalent to 2 pi sigma^2 … … 92 92 norm *= 0.01; 93 93 94 psF64 Flux = params->data.F32[ 1] * Area * norm;94 psF64 Flux = params->data.F32[PM_PAR_FLUX] * Area * norm; 95 95 96 96 return(Flux); … … 154 154 155 155 dP = 0; 156 dP += PS_SQR(dPAR[ 4] / PAR[4]);157 dP += PS_SQR(dPAR[ 5] / PAR[5]);156 dP += PS_SQR(dPAR[PM_PAR_SXX] / PAR[PM_PAR_SXX]); 157 dP += PS_SQR(dPAR[PM_PAR_SYY] / PAR[PM_PAR_SYY]); 158 158 dP = sqrt (dP); 159 159 160 160 status = true; 161 161 status &= (dP < 0.5); 162 status &= (PAR[ 1] > 0);163 status &= ((dPAR[ 1]/PAR[1]) < 0.5);162 status &= (PAR[PM_PAR_FLUX] > 0); 163 status &= ((dPAR[PM_PAR_FLUX]/PAR[PM_PAR_FLUX]) < 0.5); 164 164 165 165 if (status) return true; -
trunk/psphot/src/models/pmModel_QGAUSS.c
r5593 r8882 26 26 psF32 *PAR = params->data.F32; 27 27 28 psF32 X = x->data.F32[0] - PAR[ 2];29 psF32 Y = x->data.F32[1] - PAR[ 3];30 psF32 px = PAR[ 4]*X;31 psF32 py = PAR[ 5]*Y;32 psF32 z = 0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[ 6]*X*Y;28 psF32 X = x->data.F32[0] - PAR[PM_PAR_XPOS]; 29 psF32 Y = x->data.F32[1] - PAR[PM_PAR_YPOS]; 30 psF32 px = PAR[PM_PAR_SXX]*X; 31 psF32 py = PAR[PM_PAR_SYY]*Y; 32 psF32 z = 0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[PM_PAR_SXY]*X*Y; 33 33 34 psF32 r = 1.0 / (1 + PAR[ 7]*z + pow(z, QG_S1));35 psF32 f = PAR[ 1]*r + PAR[0];34 psF32 r = 1.0 / (1 + PAR[PM_PAR_7]*z + pow(z, QG_S1)); 35 psF32 f = PAR[PM_PAR_FLUX]*r + PAR[PM_PAR_SKY]; 36 36 37 37 if (deriv != NULL) { 38 38 // note difference from a pure gaussian: q = params->data.F32[1]*r 39 psF32 t = PAR[ 1]*r*r;40 psF32 q = t*(PAR[ 7] + QG_S1*pow(z, dQG_S1));39 psF32 t = PAR[PM_PAR_FLUX]*r*r; 40 psF32 q = t*(PAR[PM_PAR_7] + QG_S1*pow(z, dQG_S1)); 41 41 42 42 deriv->data.F32[0] = +1.0; 43 43 deriv->data.F32[1] = +r; 44 deriv->data.F32[2] = q*(2.0*px*PAR[ 4] + PAR[6]*Y);45 deriv->data.F32[3] = q*(2.0*py*PAR[ 5] + PAR[6]*X);44 deriv->data.F32[2] = q*(2.0*px*PAR[PM_PAR_SXX] + PAR[PM_PAR_SXY]*Y); 45 deriv->data.F32[3] = q*(2.0*py*PAR[PM_PAR_SYY] + PAR[PM_PAR_SXY]*X); 46 46 deriv->data.F32[4] = -2.0*q*px*X; 47 47 deriv->data.F32[5] = -2.0*q*py*Y; … … 111 111 psF32 *PAR = params->data.F32; 112 112 113 psF64 A1 = PS_SQR(PAR[ 4]);114 psF64 A2 = PS_SQR(PAR[ 5]);115 psF64 A3 = PS_SQR(PAR[ 6]);113 psF64 A1 = PS_SQR(PAR[PM_PAR_SXX]); 114 psF64 A2 = PS_SQR(PAR[PM_PAR_SYY]); 115 psF64 A3 = PS_SQR(PAR[PM_PAR_SXY]); 116 116 psF64 Area = 2.0 * M_PI / sqrt(A1*A2 - A3); 117 117 // Area is equivalent to 2 pi sigma^2 … … 120 120 norm = 0.0; 121 121 for (z = 0.005; z < 50; z += 0.01) { 122 f = 1.0 / (1 + PAR[ 7]*z + pow(z, QG_S1));122 f = 1.0 / (1 + PAR[PM_PAR_7]*z + pow(z, QG_S1)); 123 123 norm += f; 124 124 } 125 125 norm *= 0.01; 126 126 127 psF64 Flux = PAR[ 1] * Area * norm;127 psF64 Flux = PAR[PM_PAR_FLUX] * Area * norm; 128 128 129 129 return(Flux); … … 138 138 139 139 if (flux <= 0) return (1.0); 140 if (PAR[ 1] <= 0) return (1.0);141 if (flux >= PAR[ 1]) return (1.0);140 if (PAR[PM_PAR_FLUX] <= 0) return (1.0); 141 if (flux >= PAR[PM_PAR_FLUX]) return (1.0); 142 142 143 143 // if Sx == Sy, sigma = Sx == Sy 144 psF64 sigma = hypot (1.0 / PAR[ 4], 1.0 / PAR[5]) / sqrt(2.0);144 psF64 sigma = hypot (1.0 / PAR[PM_PAR_SXX], 1.0 / PAR[PM_PAR_SYY]) / sqrt(2.0); 145 145 psF64 dz = 1.0 / (2.0 * sigma*sigma); 146 psF64 limit = flux / PAR[ 1];146 psF64 limit = flux / PAR[PM_PAR_FLUX]; 147 147 148 148 // we can do this much better with intelligent choices here 149 149 for (z = 0.0; z < 20.0; z += dz) { 150 f = 1.0 / (1 + PAR[ 7]*z + pow(z, QG_S1));150 f = 1.0 / (1 + PAR[PM_PAR_7]*z + pow(z, QG_S1)); 151 151 if (f < limit) break; 152 152 } … … 184 184 185 185 dP = 0; 186 dP += PS_SQR(dPAR[ 4] / PAR[4]);187 dP += PS_SQR(dPAR[ 5] / PAR[5]);186 dP += PS_SQR(dPAR[PM_PAR_SXX] / PAR[PM_PAR_SXX]); 187 dP += PS_SQR(dPAR[PM_PAR_SYY] / PAR[PM_PAR_SYY]); 188 188 dP = sqrt (dP); 189 189 190 190 status = true; 191 191 status &= (dP < 0.5); 192 status &= (PAR[ 1] > 0);193 status &= ((dPAR[ 1]/PAR[1]) < 0.5);192 status &= (PAR[PM_PAR_FLUX] > 0); 193 status &= ((dPAR[PM_PAR_FLUX]/PAR[PM_PAR_FLUX]) < 0.5); 194 194 195 195 if (status) return true; -
trunk/psphot/src/models/pmModel_RGAUSS.c
r4954 r8882 20 20 psF32 *PAR = params->data.F32; 21 21 22 psF32 X = x->data.F32[0] - PAR[ 2];23 psF32 Y = x->data.F32[1] - PAR[ 3];24 psF32 px = PAR[ 4]*X;25 psF32 py = PAR[ 5]*Y;26 psF32 z = 0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[ 6]*X*Y;22 psF32 X = x->data.F32[0] - PAR[PM_PAR_XPOS]; 23 psF32 Y = x->data.F32[1] - PAR[PM_PAR_YPOS]; 24 psF32 px = PAR[PM_PAR_SXX]*X; 25 psF32 py = PAR[PM_PAR_SYY]*Y; 26 psF32 z = 0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[PM_PAR_SXY]*X*Y; 27 27 28 28 // psF32 FACT = 1 + 5*exp(-5*PAR[7]); 29 29 30 psF32 p = pow(z, PAR[ 7] - 1.0);30 psF32 p = pow(z, PAR[PM_PAR_7] - 1.0); 31 31 psF32 r = 1.0 / (1 + z + z*p); 32 psF32 f = PAR[ 1]*r + PAR[0];32 psF32 f = PAR[PM_PAR_FLUX]*r + PAR[PM_PAR_SKY]; 33 33 34 34 if (deriv != NULL) { 35 35 // note difference from a pure gaussian: q = params->data.F32[1]*r 36 psF32 t = PAR[ 1]*r*r;37 psF32 q = t*(1 + PAR[ 7]*p);36 psF32 t = PAR[PM_PAR_FLUX]*r*r; 37 psF32 q = t*(1 + PAR[PM_PAR_7]*p); 38 38 39 39 deriv->data.F32[0] = +1.0; 40 40 deriv->data.F32[1] = +r; 41 deriv->data.F32[2] = q*(2.0*px*PAR[ 4] + PAR[6]*Y);42 deriv->data.F32[3] = q*(2.0*py*PAR[ 5] + PAR[6]*X);41 deriv->data.F32[2] = q*(2.0*px*PAR[PM_PAR_SXX] + PAR[PM_PAR_SXY]*Y); 42 deriv->data.F32[3] = q*(2.0*py*PAR[PM_PAR_SYY] + PAR[PM_PAR_SXY]*X); 43 43 deriv->data.F32[4] = -q*px*X*2; 44 44 deriv->data.F32[5] = -q*py*Y*2; … … 60 60 psF32 *PAR = params->data.F32; 61 61 62 psF64 A1 = PS_SQR(PAR[ 4]);63 psF64 A2 = PS_SQR(PAR[ 5]);64 psF64 A3 = PS_SQR(PAR[ 6]);62 psF64 A1 = PS_SQR(PAR[PM_PAR_SXX]); 63 psF64 A2 = PS_SQR(PAR[PM_PAR_SYY]); 64 psF64 A3 = PS_SQR(PAR[PM_PAR_SXY]); 65 65 psF64 Area = 2.0 * M_PI / sqrt(A1*A2 - A3); 66 66 // Area is equivalent to 2 pi sigma^2 … … 69 69 norm = 0.0; 70 70 for (z = 0.005; z < 50; z += 0.01) { 71 f = 1.0 / (1 + z + pow(z, PAR[ 7]));71 f = 1.0 / (1 + z + pow(z, PAR[PM_PAR_7])); 72 72 norm += f; 73 73 } … … 87 87 88 88 if (flux <= 0) return (1.0); 89 if (PAR[ 1] <= 0) return (1.0);90 if (flux >= PAR[ 1]) return (1.0);89 if (PAR[PM_PAR_FLUX] <= 0) return (1.0); 90 if (flux >= PAR[PM_PAR_FLUX]) return (1.0); 91 91 92 92 // if Sx == Sy, sigma = Sx == Sy 93 psF64 sigma = hypot (1.0 / PAR[ 4], 1.0 / PAR[5]) / sqrt(2.0);93 psF64 sigma = hypot (1.0 / PAR[PM_PAR_SXX], 1.0 / PAR[PM_PAR_SYY]) / sqrt(2.0); 94 94 psF64 dz = 1.0 / (2.0 * sigma*sigma); 95 psF64 limit = flux / PAR[ 1];95 psF64 limit = flux / PAR[PM_PAR_FLUX]; 96 96 97 97 // we can do this much better with intelligent choices here 98 98 for (z = 0.0; z < 20.0; z += dz) { 99 p = pow(z, PAR[ 7]);99 p = pow(z, PAR[PM_PAR_7]); 100 100 f = 1.0 / (1 + z + p); 101 101 if (f < limit) break; -
trunk/psphot/src/models/pmModel_SGAUSS.c
r5772 r8882 25 25 psF32 *PAR = params->data.F32; 26 26 27 psF32 X = x->data.F32[0] - PAR[ 2];28 psF32 Y = x->data.F32[1] - PAR[ 3];29 psF32 px = PAR[ 4]*X;30 psF32 py = PAR[ 5]*Y;31 psF32 z = PS_MAX((0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[ 6]*X*Y), 1e-8);32 // note that if z -> 0, dPAR[ 7] -> -inf33 // also z^(PAR[ 7]-1) -> Inf34 35 psF32 pr = z*PAR[ 8];27 psF32 X = x->data.F32[0] - PAR[PM_PAR_XPOS]; 28 psF32 Y = x->data.F32[1] - PAR[PM_PAR_YPOS]; 29 psF32 px = PAR[PM_PAR_SXX]*X; 30 psF32 py = PAR[PM_PAR_SYY]*Y; 31 psF32 z = PS_MAX((0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[PM_PAR_SXY]*X*Y), 1e-8); 32 // note that if z -> 0, dPAR[PM_PAR_7] -> -inf 33 // also z^(PAR[PM_PAR_7]-1) -> Inf 34 35 psF32 pr = z*PAR[PM_PAR_8]; 36 36 psF32 pr3 = pr*pr*pr; 37 psF32 p = pow(z, PAR[ 7] - 1.0);37 psF32 p = pow(z, PAR[PM_PAR_7] - 1.0); 38 38 psF32 r = 1.0 / (1 + z*p + pr*pr3); 39 psF32 f = PAR[ 1]*r + PAR[0];39 psF32 f = PAR[PM_PAR_FLUX]*r + PAR[PM_PAR_SKY]; 40 40 41 41 if (deriv != NULL) { 42 42 // note difference from a pure gaussian: q = params->data.F32[1]*r 43 psF32 t = PAR[ 1]*r*r;44 psF32 q = t*(PAR[ 7]*p + 4*PAR[8]*pr3);43 psF32 t = PAR[PM_PAR_FLUX]*r*r; 44 psF32 q = t*(PAR[PM_PAR_7]*p + 4*PAR[PM_PAR_8]*pr3); 45 45 46 46 deriv->data.F32[0] = +1.0; 47 47 deriv->data.F32[1] = +r; 48 deriv->data.F32[2] = q*(2.0*px*PAR[ 4] + PAR[6]*Y);49 deriv->data.F32[3] = q*(2.0*py*PAR[ 5] + PAR[6]*X);48 deriv->data.F32[2] = q*(2.0*px*PAR[PM_PAR_SXX] + PAR[PM_PAR_SXY]*Y); 49 deriv->data.F32[3] = q*(2.0*py*PAR[PM_PAR_SYY] + PAR[PM_PAR_SXY]*X); 50 50 deriv->data.F32[4] = -2.0*q*px*X; 51 51 deriv->data.F32[5] = -2.0*q*py*Y; … … 230 230 psF32 *PAR = params->data.F32; 231 231 232 psF64 A1 = PS_SQR(PAR[ 4]);233 psF64 A2 = PS_SQR(PAR[ 5]);234 psF64 A3 = PS_SQR(PAR[ 6]);232 psF64 A1 = PS_SQR(PAR[PM_PAR_SXX]); 233 psF64 A2 = PS_SQR(PAR[PM_PAR_SYY]); 234 psF64 A3 = PS_SQR(PAR[PM_PAR_SXY]); 235 235 psF64 Area = 2.0 * M_PI / sqrt(A1*A2 - A3); 236 236 // Area is equivalent to 2 pi sigma^2 … … 239 239 norm = 0.0; 240 240 for (z = 0.005; z < 50; z += 0.01) { 241 psF32 pr = PAR[ 8]*z;242 f = 1.0 / (1 + pow(z, PAR[ 7]) + SQ(SQ(pr)));241 psF32 pr = PAR[PM_PAR_8]*z; 242 f = 1.0 / (1 + pow(z, PAR[PM_PAR_7]) + SQ(SQ(pr))); 243 243 norm += f; 244 244 } 245 245 norm *= 0.01; 246 246 247 psF64 Flux = PAR[ 1] * Area * norm;247 psF64 Flux = PAR[PM_PAR_FLUX] * Area * norm; 248 248 249 249 return(Flux); … … 262 262 263 263 if (flux <= 0) return (1.0); 264 if (PAR[ 1] <= 0) return (1.0);265 if (flux >= PAR[ 1]) return (1.0);264 if (PAR[PM_PAR_FLUX] <= 0) return (1.0); 265 if (flux >= PAR[PM_PAR_FLUX]) return (1.0); 266 266 267 267 // convert Sx,Sy,Sxy to major/minor axes 268 shape.sx = 1.0 / PAR[ 4];269 shape.sy = 1.0 / PAR[ 5];270 shape.sxy = PAR[ 6];268 shape.sx = 1.0 / PAR[PM_PAR_SXX]; 269 shape.sy = 1.0 / PAR[PM_PAR_SYY]; 270 shape.sxy = PAR[PM_PAR_SXY]; 271 271 272 272 axes = EllipseShapeToAxes (shape); 273 273 psF64 dr = 1.0 / axes.major; 274 psF64 limit = flux / PAR[ 1];274 psF64 limit = flux / PAR[PM_PAR_FLUX]; 275 275 276 276 // XXX : we can do this faster with an intelligent starting choice 277 277 for (r = 0.0; r < 20.0; r += dr) { 278 278 z = SQ(r); 279 pr = PAR[ 8]*z;280 f = 1.0 / (1 + pow(z, PAR[ 7]) + SQ(SQ(pr)));279 pr = PAR[PM_PAR_8]*z; 280 f = 1.0 / (1 + pow(z, PAR[PM_PAR_7]) + SQ(SQ(pr))); 281 281 if (f < limit) break; 282 282 } … … 315 315 psF32 *dPAR = model->dparams->data.F32; 316 316 317 shape.sx = 1.0 / PAR[ 4];318 shape.sy = 1.0 / PAR[ 5];319 shape.sxy = PAR[ 6];317 shape.sx = 1.0 / PAR[PM_PAR_SXX]; 318 shape.sy = 1.0 / PAR[PM_PAR_SYY]; 319 shape.sxy = PAR[PM_PAR_SXY]; 320 320 321 321 axes = EllipseShapeToAxes (shape); 322 322 323 323 dP = 0; 324 dP += PS_SQR(dPAR[ 4] / PAR[4]);325 dP += PS_SQR(dPAR[ 5] / PAR[5]);326 dP += PS_SQR(dPAR[ 7] / PAR[7]);324 dP += PS_SQR(dPAR[PM_PAR_SXX] / PAR[PM_PAR_SXX]); 325 dP += PS_SQR(dPAR[PM_PAR_SYY] / PAR[PM_PAR_SYY]); 326 dP += PS_SQR(dPAR[PM_PAR_7] / PAR[PM_PAR_7]); 327 327 dP = sqrt (dP); 328 328 329 329 status = true; 330 330 status &= (dP < 0.5); 331 status &= (PAR[ 1] > 0);332 status &= ((dPAR[ 1]/PAR[1]) < 0.5);333 status &= (fabs(PAR[ 8]) < 0.5);334 status &= (dPAR[ 8] < 0.1);331 status &= (PAR[PM_PAR_FLUX] > 0); 332 status &= ((dPAR[PM_PAR_FLUX]/PAR[PM_PAR_FLUX]) < 0.5); 333 status &= (fabs(PAR[PM_PAR_8]) < 0.5); 334 status &= (dPAR[PM_PAR_8] < 0.1); 335 335 status &= (axes.major > 1.41); 336 336 status &= (axes.minor > 1.41); 337 337 status &= ((axes.major / axes.minor) < 5.0); 338 status &= (PAR[ 7] > 0.5);338 status &= (PAR[PM_PAR_7] > 0.5); 339 339 340 340 if (status) return true; -
trunk/psphot/src/models/pmModel_TAUSS.c
r5718 r8882 1 2 1 /****************************************************************************** 3 2 params->data.F32[0] = So; … … 150 149 151 150 dP = 0; 152 dP += PS_SQR(dPAR[ 4] / PAR[4]);153 dP += PS_SQR(dPAR[ 5] / PAR[5]);151 dP += PS_SQR(dPAR[PM_PAR_SXX] / PAR[PM_PAR_SXX]); 152 dP += PS_SQR(dPAR[PM_PAR_SYY] / PAR[PM_PAR_SYY]); 154 153 dP = sqrt (dP); 155 154 156 155 status = true; 157 156 status &= (dP < 0.5); 158 status &= (PAR[ 1] > 0);159 status &= ((dPAR[ 1]/PAR[1]) < 0.5);157 status &= (PAR[PM_PAR_FLUX] > 0); 158 status &= ((dPAR[PM_PAR_FLUX]/PAR[PM_PAR_FLUX]) < 0.5); 160 159 161 160 if (status) -
trunk/psphot/src/models/pmModel_TGAUSS.c
r5593 r8882 27 27 psF32 *PAR = params->data.F32; 28 28 29 psF32 X = x->data.F32[0] - PAR[ 2];30 psF32 Y = x->data.F32[1] - PAR[ 3];31 psF32 px = PAR[ 4]*X;32 psF32 py = PAR[ 5]*Y;33 psF32 z = 0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[ 6]*X*Y;29 psF32 X = x->data.F32[0] - PAR[PM_PAR_XPOS]; 30 psF32 Y = x->data.F32[1] - PAR[PM_PAR_YPOS]; 31 psF32 px = PAR[PM_PAR_SXX]*X; 32 psF32 py = PAR[PM_PAR_SYY]*Y; 33 psF32 z = 0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[PM_PAR_SXY]*X*Y; 34 34 psF32 er = exp(TRF*z); 35 35 36 psF32 r = 1.0 / (er + PAR[ 7]*z + pow(z, TG_S)); // (1/R)37 psF32 f = PAR[ 1]*r + PAR[0];36 psF32 r = 1.0 / (er + PAR[PM_PAR_7]*z + pow(z, TG_S)); // (1/R) 37 psF32 f = PAR[PM_PAR_FLUX]*r + PAR[PM_PAR_SKY]; 38 38 39 39 if (deriv != NULL) { 40 psF32 t = PAR[ 1]*r*r;// df/dR41 psF32 q = t*(TRF*er + PAR[ 7] + TG_S*pow(z, dTG_S)); // (df/dR)(dR/dz)40 psF32 t = PAR[PM_PAR_FLUX]*r*r; // df/dR 41 psF32 q = t*(TRF*er + PAR[PM_PAR_7] + TG_S*pow(z, dTG_S)); // (df/dR)(dR/dz) 42 42 43 43 deriv->data.F32[0] = +1.0; 44 44 deriv->data.F32[1] = +r; 45 deriv->data.F32[2] = q*(2.0*px*PAR[ 4] + PAR[6]*Y);46 deriv->data.F32[3] = q*(2.0*py*PAR[ 5] + PAR[6]*X);45 deriv->data.F32[2] = q*(2.0*px*PAR[PM_PAR_SXX] + PAR[PM_PAR_SXY]*Y); 46 deriv->data.F32[3] = q*(2.0*py*PAR[PM_PAR_SYY] + PAR[PM_PAR_SXY]*X); 47 47 deriv->data.F32[4] = -2.0*q*px*X; 48 48 deriv->data.F32[5] = -2.0*q*py*Y; … … 112 112 psF32 *PAR = params->data.F32; 113 113 114 psF64 A1 = PS_SQR(PAR[ 4]);115 psF64 A2 = PS_SQR(PAR[ 5]);116 psF64 A3 = PS_SQR(PAR[ 6]);114 psF64 A1 = PS_SQR(PAR[PM_PAR_SXX]); 115 psF64 A2 = PS_SQR(PAR[PM_PAR_SYY]); 116 psF64 A3 = PS_SQR(PAR[PM_PAR_SXY]); 117 117 psF64 Area = 2.0 * M_PI / sqrt(A1*A2 - A3); 118 118 // Area is equivalent to 2 pi sigma^2 … … 122 122 for (z = 0.005; z < 50; z += 0.01) { 123 123 psF32 er = exp(TRF*z); 124 f = 1.0 / (er + PAR[ 7]*z + pow(z, TG_S));124 f = 1.0 / (er + PAR[PM_PAR_7]*z + pow(z, TG_S)); 125 125 norm += f; 126 126 } 127 127 norm *= 0.01; 128 128 129 psF64 Flux = PAR[ 1] * Area * norm;129 psF64 Flux = PAR[PM_PAR_FLUX] * Area * norm; 130 130 131 131 return(Flux); … … 140 140 141 141 if (flux <= 0) return (1.0); 142 if (PAR[ 1] <= 0) return (1.0);143 if (flux >= PAR[ 1]) return (1.0);142 if (PAR[PM_PAR_FLUX] <= 0) return (1.0); 143 if (flux >= PAR[PM_PAR_FLUX]) return (1.0); 144 144 145 145 // if Sx == Sy, sigma = Sx == Sy 146 psF64 sigma = hypot (1.0 / PAR[ 4], 1.0 / PAR[5]) / sqrt(2.0);146 psF64 sigma = hypot (1.0 / PAR[PM_PAR_SXX], 1.0 / PAR[PM_PAR_SYY]) / sqrt(2.0); 147 147 psF64 dz = 1.0 / (2.0 * sigma*sigma); 148 psF64 limit = flux / PAR[ 1];148 psF64 limit = flux / PAR[PM_PAR_FLUX]; 149 149 150 150 // we can do this much better with intelligent choices here 151 151 for (z = 0.0; z < 20.0; z += dz) { 152 152 psF32 er = exp(TRF*z); 153 f = 1.0 / (er + PAR[ 7]*z + pow(z, TG_S));153 f = 1.0 / (er + PAR[PM_PAR_7]*z + pow(z, TG_S)); 154 154 if (f < limit) break; 155 155 } … … 187 187 188 188 dP = 0; 189 dP += PS_SQR(dPAR[ 4] / PAR[4]);190 dP += PS_SQR(dPAR[ 5] / PAR[5]);189 dP += PS_SQR(dPAR[PM_PAR_SXX] / PAR[PM_PAR_SXX]); 190 dP += PS_SQR(dPAR[PM_PAR_SYY] / PAR[PM_PAR_SYY]); 191 191 dP = sqrt (dP); 192 192 193 193 status = true; 194 194 status &= (dP < 0.5); 195 status &= (PAR[ 1] > 0);196 status &= ((dPAR[ 1]/PAR[1]) < 0.5);195 status &= (PAR[PM_PAR_FLUX] > 0); 196 status &= ((dPAR[PM_PAR_FLUX]/PAR[PM_PAR_FLUX]) < 0.5); 197 197 198 198 if (status) return true; -
trunk/psphot/src/models/pmModel_ZGAUSS.c
r4954 r8882 23 23 psF32 *PAR = params->data.F32; 24 24 25 psF32 X = x->data.F32[0] - PAR[ 2];26 psF32 Y = x->data.F32[1] - PAR[ 3];27 psF32 px = PAR[ 4]*X;28 psF32 py = PAR[ 5]*Y;29 psF32 z = 0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[ 6]*X*Y;25 psF32 X = x->data.F32[0] - PAR[PM_PAR_XPOS]; 26 psF32 Y = x->data.F32[1] - PAR[PM_PAR_YPOS]; 27 psF32 px = PAR[PM_PAR_SXX]*X; 28 psF32 py = PAR[PM_PAR_SYY]*Y; 29 psF32 z = 0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[PM_PAR_SXY]*X*Y; 30 30 31 31 psF32 pr = PAR8*z; 32 psF32 p = pow(z, PAR[ 7] - 1.0);32 psF32 p = pow(z, PAR[PM_PAR_7] - 1.0); 33 33 psF32 r = 1.0 / (1 + z*p + SQ(SQ(pr))); 34 psF32 f = PAR[ 1]*r + PAR[0];34 psF32 f = PAR[PM_PAR_FLUX]*r + PAR[PM_PAR_SKY]; 35 35 36 36 if (deriv != NULL) { 37 37 // note difference from a pure gaussian: q = params->data.F32[1]*r 38 psF32 t = PAR[ 1]*r*r;39 psF32 q = t*(PAR[ 7]*p + 4*PAR8*pr*pr*pr);38 psF32 t = PAR[PM_PAR_FLUX]*r*r; 39 psF32 q = t*(PAR[PM_PAR_7]*p + 4*PAR8*pr*pr*pr); 40 40 41 41 deriv->data.F32[0] = +1.0; 42 42 deriv->data.F32[1] = +r; 43 deriv->data.F32[2] = q*(2.0*px*PAR[ 4] + PAR[6]*Y);44 deriv->data.F32[3] = q*(2.0*py*PAR[ 5] + PAR[6]*X);43 deriv->data.F32[2] = q*(2.0*px*PAR[PM_PAR_SXX] + PAR[PM_PAR_SXY]*Y); 44 deriv->data.F32[3] = q*(2.0*py*PAR[PM_PAR_SYY] + PAR[PM_PAR_SXY]*X); 45 45 deriv->data.F32[4] = -q*px*X; 46 46 deriv->data.F32[5] = -q*py*Y; … … 57 57 psF32 *PAR = params->data.F32; 58 58 59 psF64 A1 = PS_SQR(PAR[ 4]);60 psF64 A2 = PS_SQR(PAR[ 5]);61 psF64 A3 = PS_SQR(PAR[ 6]);59 psF64 A1 = PS_SQR(PAR[PM_PAR_SXX]); 60 psF64 A2 = PS_SQR(PAR[PM_PAR_SYY]); 61 psF64 A3 = PS_SQR(PAR[PM_PAR_SXY]); 62 62 psF64 Area = 2.0 * M_PI / sqrt(A1*A2 - A3); 63 63 // Area is equivalent to 2 pi sigma^2 … … 67 67 psF32 pr = PAR8*z; 68 68 for (z = 0.005; z < 50; z += 0.01) { 69 f = 1.0 / (1 + pow(z, PAR[ 7]) + SQ(SQ(pr)));69 f = 1.0 / (1 + pow(z, PAR[PM_PAR_7]) + SQ(SQ(pr))); 70 70 norm += f; 71 71 } 72 72 norm *= 0.01; 73 73 74 psF64 Flux = PAR[ 1] * Area * norm;74 psF64 Flux = PAR[PM_PAR_FLUX] * Area * norm; 75 75 76 76 return(Flux); … … 89 89 90 90 if (flux <= 0) return (1.0); 91 if (PAR[ 1] <= 0) return (1.0);92 if (flux >= PAR[ 1]) return (1.0);91 if (PAR[PM_PAR_FLUX] <= 0) return (1.0); 92 if (flux >= PAR[PM_PAR_FLUX]) return (1.0); 93 93 94 94 // convert Sx,Sy,Sxy to major/minor axes 95 shape.sx = 1.0 / PAR[ 4];96 shape.sy = 1.0 / PAR[ 5];97 shape.sxy = PAR[ 6];95 shape.sx = 1.0 / PAR[PM_PAR_SXX]; 96 shape.sy = 1.0 / PAR[PM_PAR_SYY]; 97 shape.sxy = PAR[PM_PAR_SXY]; 98 98 99 99 axes = EllipseShapeToAxes (shape); 100 100 psF64 dr = 1.0 / axes.major; 101 psF64 limit = flux / PAR[ 1];101 psF64 limit = flux / PAR[PM_PAR_FLUX]; 102 102 103 103 // XXX : we can do this faster with an intelligent starting choice … … 105 105 z = SQ(r); 106 106 pr = PAR8*z; 107 f = 1.0 / (1 + pow(z, PAR[ 7]) + SQ(SQ(pr)));107 f = 1.0 / (1 + pow(z, PAR[PM_PAR_7]) + SQ(SQ(pr))); 108 108 if (f < limit) break; 109 109 }
Note:
See TracChangeset
for help on using the changeset viewer.
