Changeset 34141
- Timestamp:
- Jul 12, 2012, 6:44:32 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20120627/psModules/src/objects/models/pmModel_TRAIL.c
r34133 r34141 59 59 60 60 // Lax parameter limits 61 static float paramsMinLax[] = { -1.0e3, 1.0e-2, -1 00, -100, 0.5, 0.5, -1.0 };62 static float paramsMaxLax[] = { 1.0e5, 1.0e8, 1.0e4, 1.0e4, 100, 100, 1.0 };61 static float paramsMinLax[] = { -1.0e3, 1.0e-2, -1.0e2, -1.0e2, 0.5, -0.1, -1.0 }; 62 static float paramsMaxLax[] = { 1.0e5, 1.0e+8, +1.0e4, +1.0e4, 50.0, +3.3 , 1.0 }; 63 63 64 64 // Moderate parameter limits … … 73 73 static float *paramsMinUse = paramsMinLax; 74 74 static float *paramsMaxUse = paramsMaxLax; 75 static float betaUse[] = { 1000, 3e6, 5, 5, 2.0, 2.0, 0.5};75 static float betaUse[] = { 1000, 3e6, 5, 5, 2.0, 0.1, 0.1 }; 76 76 77 77 static bool limitsApply = true; // Apply limits? … … 166 166 dPAR[PM_PAR_LENGTH] = PAR[PM_PAR_I0] * dPdL; 167 167 dPAR[PM_PAR_THETA] = PAR[PM_PAR_I0] * dPdT; 168 dPAR[PM_PAR_SIGMA] = NAN; // we don't actually allow this to vary, so we do not need to calculate it168 dPAR[PM_PAR_SIGMA] = 0; // we don't actually allow this to vary, so we do not need to calculate it 169 169 } 170 170 return(f); … … 184 184 psAssert(nParam >= 0 && nParam < PM_MODEL_NPARAM, "Parameter index is out of bounds"); 185 185 186 // we need to calculate the limits for SXY specially187 float q2 = NAN;188 if (nParam == PM_PAR_SXY) {189 float f1 = 1.0 / PS_SQR(params[PM_PAR_SYY]) + 1.0 / PS_SQR(params[PM_PAR_SXX]);190 float f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]);191 float q1 = PS_SQR(f1)*AR_RATIO - PS_SQR(f2);192 q1 = (q1 < 0.0) ? 0.0 : q1;193 // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg.. Saturate at that194 // angle and let f2,f1 fight it out195 q2 = 0.5*sqrtf(q1);196 }197 198 186 switch (mode) { 199 187 case PS_MINIMIZE_BETA_LIMIT: { 200 188 psAssert(beta, "Require beta to limit beta"); 201 189 float limit = betaUse[nParam]; 202 if (nParam == PM_PAR_SXY) {203 limit *= q2;204 }205 190 if (fabs(beta[nParam]) > fabs(limit)) { 206 191 beta[nParam] = (beta[nParam] > 0) ? fabs(limit) : -fabs(limit); … … 215 200 psAssert(paramsMinUse, "Require parameter limits to limit parameters"); 216 201 float limit = paramsMinUse[nParam]; 217 if (nParam == PM_PAR_SXY) {218 limit *= q2;219 }220 202 if (params[nParam] < limit) { 221 203 params[nParam] = limit; … … 230 212 psAssert(paramsMaxUse, "Require parameter limits to limit parameters"); 231 213 float limit = paramsMaxUse[nParam]; 232 if (nParam == PM_PAR_SXY) {233 limit *= q2;234 }235 214 if (params[nParam] > limit) { 236 215 params[nParam] = limit; … … 257 236 PAR[PM_PAR_SKY] = 0.0; 258 237 259 // set the shape parameters 260 if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments)) { 261 return false; 262 } 238 // XXX test : modify the Io, SXX, SYY terms based on the psf SXX, SYY terms: 239 psEllipseShape psfShape; 240 psfShape.sx = source->modelPSF->params->data.F32[PM_PAR_SXX] / M_SQRT2; 241 psfShape.sxy = source->modelPSF->params->data.F32[PM_PAR_SXY]; 242 psfShape.sy = source->modelPSF->params->data.F32[PM_PAR_SYY] / M_SQRT2; 243 psEllipseAxes psfAxes = psEllipseShapeToAxes (psfShape, 20.0); 244 245 psEllipseMoments emoments; 246 emoments.x2 = source->moments->Mxx; 247 emoments.xy = source->moments->Mxy; 248 emoments.y2 = source->moments->Myy; 249 250 // force the axis ratio to be < 20.0 251 psEllipseAxes axes = psEllipseMomentsToAxes (emoments, 20.0); 252 253 if (!isfinite(axes.major)) return false; 254 if (!isfinite(axes.minor)) return false; 255 if (!isfinite(axes.theta)) return false; 256 257 PAR[PM_PAR_LENGTH] = axes.major; // XXX major or 2*major? 258 PAR[PM_PAR_THETA] = axes.theta; // XXX theta or theta * RAD_DEG? 259 PAR[PM_PAR_SIGMA] = psfAxes.major; // XXX major or 0.5*major? 263 260 264 261 // set the model normalization
Note:
See TracChangeset
for help on using the changeset viewer.
