Changeset 6872 for trunk/psModules/src/objects/models
- Timestamp:
- Apr 17, 2006, 8:01:05 AM (20 years ago)
- Location:
- trunk/psModules/src/objects/models
- Files:
-
- 5 edited
-
pmModel_PGAUSS.c (modified) (4 diffs)
-
pmModel_QGAUSS.c (modified) (7 diffs)
-
pmModel_RGAUSS.c (modified) (2 diffs)
-
pmModel_SGAUSS.c (modified) (10 diffs)
-
pmModel_ZGAUSS.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/objects/models/pmModel_PGAUSS.c
r6511 r6872 26 26 27 27 if (deriv != NULL) { 28 // note difference from a pure gaussian: q = PAR[1]*r28 psF32 *dPAR = deriv->data.F32; 29 29 psF32 q = PAR[1]*r*r*t; 30 d eriv->data.F32[0] = +1.0;31 d eriv->data.F32[1] = +r;32 d eriv->data.F32[2] = q*(2.0*px*PAR[4] + PAR[6]*Y);33 d eriv->data.F32[3] = q*(2.0*py*PAR[5] + PAR[6]*X);34 d eriv->data.F32[4] = -2.0*q*px*X;35 d eriv->data.F32[5] = -2.0*q*py*Y;36 d eriv->data.F32[6] = -q*X*Y;30 dPAR[0] = +1.0; 31 dPAR[1] = +r; 32 dPAR[2] = q*(2.0*px*PAR[4] + PAR[6]*Y); 33 dPAR[3] = q*(2.0*py*PAR[5] + PAR[6]*X); 34 dPAR[4] = -2.0*q*px*X; 35 dPAR[5] = -2.0*q*py*Y; 36 dPAR[6] = -q*X*Y; 37 37 } 38 38 return(f); … … 50 50 51 51 beta_lim[0][0].data.F32[0] = 1000; 52 beta_lim[0][0].data.F32[1] = 10000;52 beta_lim[0][0].data.F32[1] = 3e6; 53 53 beta_lim[0][0].data.F32[2] = 5; 54 54 beta_lim[0][0].data.F32[3] = 5; … … 66 66 67 67 params_max[0][0].data.F32[0] = 1e5; 68 params_max[0][0].data.F32[1] = 1e 6;68 params_max[0][0].data.F32[1] = 1e8; 69 69 params_max[0][0].data.F32[2] = 1e4; // this should be set by image dimensions! 70 70 params_max[0][0].data.F32[3] = 1e4; // this should be set by image dimensions! … … 133 133 params[5] = 1.2 / moments->Sy; 134 134 params[6] = 0.0; 135 135 136 return(true); 136 137 } -
trunk/psModules/src/objects/models/pmModel_QGAUSS.c
r6511 r6872 26 26 psF32 py = PAR[5]*Y; 27 27 psF32 z = 0.5*PS_SQR(px) + 0.5*PS_SQR(py) + PAR[6]*X*Y; 28 29 psF32 r = 1.0 / (1 + PAR[7]*z + pow(z, 2.25)); 30 psF32 f = PAR[1]*r + PAR[0]; 28 psF32 zp = pow(z,1.25); 29 30 psF32 r = 1.0 / (1 + PAR[7]*z + z*zp); 31 // test: psF32 r = 1.0 / (1 + PAR[7]*z + PS_SQR(z)); 32 psF32 r1 = PAR[1]*r; 33 psF32 f = r1 + PAR[0]; 31 34 32 35 if (deriv != NULL) { 36 psF32 *dPAR = deriv->data.F32; 37 33 38 // note difference from a pure gaussian: q = params->data.F32[1]*r 34 psF32 t = PAR[1]*r*r; 35 psF32 q = t*(PAR[7] + 2.25*pow(z, 1.25)); 36 37 deriv->data.F32[0] = +1.0; 38 deriv->data.F32[1] = +r; 39 deriv->data.F32[2] = q*(2.0*px*PAR[4] + PAR[6]*Y); 40 deriv->data.F32[3] = q*(2.0*py*PAR[5] + PAR[6]*X); 41 deriv->data.F32[4] = -2.0*q*px*X; 42 deriv->data.F32[5] = -2.0*q*py*Y; 43 deriv->data.F32[6] = -q*X*Y; 44 deriv->data.F32[7] = -t*z; 39 psF32 t = r1*r; 40 psF32 q = t*(PAR[7] + 2.25*zp); 41 // test: psF32 q = t*(PAR[7] + 2*z); 42 43 dPAR[0] = +1.0; 44 dPAR[1] = +r; 45 dPAR[2] = q*(2.0*px*PAR[4] + PAR[6]*Y); 46 dPAR[3] = q*(2.0*py*PAR[5] + PAR[6]*X); 47 dPAR[4] = -2.0*q*px*X; 48 dPAR[5] = -2.0*q*py*Y; 49 dPAR[6] = -q*X*Y; 50 dPAR[7] = -t*z; 45 51 } 46 52 return(f); … … 58 64 59 65 beta_lim[0][0].data.F32[0] = 1000; 60 beta_lim[0][0].data.F32[1] = 10000;66 beta_lim[0][0].data.F32[1] = 3e6; 61 67 beta_lim[0][0].data.F32[2] = 5; 62 68 beta_lim[0][0].data.F32[3] = 5; … … 76 82 77 83 params_max[0][0].data.F32[0] = 1e5; 78 params_max[0][0].data.F32[1] = 1e 6;84 params_max[0][0].data.F32[1] = 1e8; 79 85 params_max[0][0].data.F32[2] = 1e4; // this should be set by image dimensions! 80 86 params_max[0][0].data.F32[3] = 1e4; // this should be set by image dimensions! … … 102 108 params[6] = 0.0; 103 109 params[7] = 1.0; 110 104 111 return(true); 105 112 } … … 119 126 // the area needs to be multiplied by the integral of f(z) 120 127 norm = 0.0; 121 for (z = 0.0 05; z < 50; z += 0.01) {128 for (z = 0.05; z < 50; z += 0.1) { 122 129 f = 1.0 / (1 + PAR[7]*z + pow(z, 2.25)); 130 // test: f = 1.0 / (1 + PAR[7]*z + PS_SQR(z)); 123 131 norm += f; 124 132 } 125 norm *= 0. 01;133 norm *= 0.1; 126 134 127 135 psF64 Flux = PAR[1] * Area * norm; … … 150 158 151 159 // we can do this much better with intelligent choices here 152 for (z = 0.0; z < 20.0; z += dz) {160 for (z = 0.0; z < 30.0; z += dz) { 153 161 f = 1.0 / (1 + PAR[7]*z + pow(z, 2.25)); 162 // test: f = 1.0 / (1 + PAR[7]*z + PS_SQR(z)); 154 163 if (f < limit) 155 164 break; … … 201 210 status &= ((dPAR[1]/PAR[1]) < 0.5); 202 211 203 if ( status)204 return true;205 return false;206 } 212 if (!status) 213 return false; 214 return true; 215 } -
trunk/psModules/src/objects/models/pmModel_RGAUSS.c
r5257 r6872 117 117 psVector *params = model->params; 118 118 119 EllipseAxes axes;120 EllipseShape shape;121 EllipseMoments moments;119 psEllipseAxes axes; 120 psEllipseShape shape; 121 psEllipseMoments moments; 122 122 123 123 moments.x2 = PS_SQR(source->moments->Sx); … … 125 125 moments.xy = source->moments->Sxy; 126 126 127 axes = EllipseMomentsToAxes(moments);128 shape = EllipseAxesToShape(axes);127 axes = psEllipseMomentsToAxes(moments); 128 shape = psEllipseAxesToShape(axes); 129 129 130 130 params->data.F32[0] = source->moments->Sky; -
trunk/psModules/src/objects/models/pmModel_SGAUSS.c
r6511 r6872 17 17 18 18 # define SQ(A)((A)*(A)) 19 psF64 psImageEllipseContour ( EllipseAxes axes, double xc, double yc, psImage *image);19 psF64 psImageEllipseContour (psEllipseAxes axes, double xc, double yc, psImage *image); 20 20 psF64 p_psImageGetElementF64(psImage *a, int i, int j); 21 21 … … 102 102 103 103 // measure the flux for the elliptical contour 104 psF64 psImageEllipseContour ( EllipseAxes axes, double xc, double yc, psImage *image)104 psF64 psImageEllipseContour (psEllipseAxes axes, double xc, double yc, psImage *image) 105 105 { 106 106 … … 149 149 psF32 *params = model->params->data.F32; 150 150 151 EllipseAxes axes;152 EllipseShape shape;153 EllipseMoments moments;151 psEllipseAxes axes; 152 psEllipseShape shape; 153 psEllipseMoments moments; 154 154 155 155 moments.x2 = PS_SQR(sMoments->Sx); … … 158 158 159 159 // solve the math to go from Moments To Shape 160 axes = EllipseMomentsToAxes(moments);161 shape = EllipseAxesToShape(axes);160 axes = psEllipseMomentsToAxes(moments); 161 shape = psEllipseAxesToShape(axes); 162 162 163 163 params[0] = sMoments->Sky; … … 199 199 float f1, f2; 200 200 201 EllipseAxes axes;202 EllipseShape shape;203 EllipseMoments moments;201 psEllipseAxes axes; 202 psEllipseShape shape; 203 psEllipseMoments moments; 204 204 205 205 moments.x2 = PS_SQR(sMoments->Sx); … … 208 208 209 209 // solve the math to go from Moments To Shape 210 axes = EllipseMomentsToAxes(moments);211 shape = EllipseAxesToShape(axes);210 axes = psEllipseMomentsToAxes(moments); 211 shape = psEllipseAxesToShape(axes); 212 212 213 213 params[0] = sMoments->Sky; … … 265 265 psF64 pmModelRadius_SGAUSS (const psVector *params, psF64 flux) 266 266 { 267 psF64 r, z , pr, f;267 psF64 r, z = 0.0, pr, f; 268 268 psF32 *PAR = params->data.F32; 269 269 270 EllipseAxes axes;271 EllipseShape shape;270 psEllipseAxes axes; 271 psEllipseShape shape; 272 272 273 273 if (flux <= 0) … … 283 283 shape.sxy = PAR[6]; 284 284 285 axes = EllipseShapeToAxes (shape);285 axes = psEllipseShapeToAxes (shape); 286 286 psF64 dr = 1.0 / axes.major; 287 287 psF64 limit = flux / PAR[1]; … … 327 327 psF32 dP; 328 328 bool status; 329 EllipseAxes axes;330 EllipseShape shape;329 psEllipseAxes axes; 330 psEllipseShape shape; 331 331 332 332 psF32 *PAR = model->params->data.F32; … … 337 337 shape.sxy = PAR[6]; 338 338 339 axes = EllipseShapeToAxes (shape);339 axes = psEllipseShapeToAxes (shape); 340 340 341 341 dP = 0; -
trunk/psModules/src/objects/models/pmModel_ZGAUSS.c
r5257 r6872 85 85 psF32 *PAR = params->data.F32; 86 86 87 EllipseAxes axes;88 EllipseShape shape;87 psEllipseAxes axes; 88 psEllipseShape shape; 89 89 90 90 if (flux <= 0) … … 100 100 shape.sxy = PAR[6]; 101 101 102 axes = EllipseShapeToAxes (shape);102 axes = psEllipseShapeToAxes (shape); 103 103 psF64 dr = 1.0 / axes.major; 104 104 psF64 limit = flux / PAR[1]; … … 124 124 psVector *params = model->params; 125 125 126 EllipseAxes axes;127 EllipseShape shape;128 EllipseMoments moments;126 psEllipseAxes axes; 127 psEllipseShape shape; 128 psEllipseMoments moments; 129 129 130 130 moments.x2 = PS_SQR(source->moments->Sx); … … 132 132 moments.xy = source->moments->Sxy; 133 133 134 axes = EllipseMomentsToAxes(moments);135 shape = EllipseAxesToShape(axes);134 axes = psEllipseMomentsToAxes(moments); 135 shape = psEllipseAxesToShape(axes); 136 136 137 137 params->data.F32[0] = source->moments->Sky;
Note:
See TracChangeset
for help on using the changeset viewer.
