Changeset 14220
- Timestamp:
- Jul 15, 2007, 1:30:42 PM (19 years ago)
- Location:
- trunk/psModules/src/objects/models
- Files:
-
- 3 edited
-
pmModel_GAUSS.c (modified) (2 diffs)
-
pmModel_PGAUSS.c (modified) (6 diffs)
-
pmModel_QGAUSS.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/objects/models/pmModel_GAUSS.c
r13803 r14220 71 71 f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]); 72 72 q1 = PS_SQR(f1)*AR_RATIO - PS_SQR(f2); 73 assert (q1 > 0); 73 q1 = PS_MAX (0.0, q1); 74 // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg.. Saturate at that 75 // angle and let f2,f1 fight it out 74 76 q2 = 0.5*sqrt (q1); 75 77 } … … 97 99 break; 98 100 case PM_PAR_SXY: 99 beta_lim = q2;101 beta_lim = 0.5*q2; 100 102 break; 101 103 default: -
trunk/psModules/src/objects/models/pmModel_PGAUSS.c
r13803 r14220 39 39 psF32 py = Y / PAR[PM_PAR_SYY]; 40 40 psF32 z = PS_SQR(px) + PS_SQR(py) + PAR[PM_PAR_SXY]*X*Y; 41 assert (z >= 0.0); 42 41 43 psF32 t = 1 + z + z*z/2.0; 42 44 psF32 r = 1.0 / (t + z*z*z/6.0); /* exp (-Z) */ … … 63 65 # define AR_MAX 20.0 64 66 # define AR_RATIO 0.99 67 68 // we constraint limits by the min valid minor axis: 69 # define MIN_MINOR_AXIS 0.5 70 71 // f3 = (s_b^-2 - s_a^-2); F3_SQ_MAX is MIN_MINOR_AXIS^-4 72 # define F3_SQ_MAX 16.0 73 74 static float saveParams[8]; 75 65 76 bool PM_MODEL_LIMITS (psMinConstraintMode mode, int nParam, float *params, float *beta) 66 77 { … … 73 84 f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]); 74 85 q1 = PS_SQR(f1)*AR_RATIO - PS_SQR(f2); 75 assert (q1 > 0); 86 q1 = PS_MAX (0.0, q1); 87 // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg.. Saturate at that 88 // angle and let f2,f1 fight it out 76 89 q2 = 0.5*sqrt (q1); 77 90 } … … 93 106 break; 94 107 case PM_PAR_SXX: 95 beta_lim = 0.5;108 beta_lim = 2.0; 96 109 break; 97 110 case PM_PAR_SYY: 98 beta_lim = 0.5;111 beta_lim = 2.0; 99 112 break; 100 113 case PM_PAR_SXY: 101 beta_lim = q2;114 beta_lim = 0.5*q2; 102 115 break; 103 116 default: … … 137 150 psAbort("invalid parameter %d for param min test", nParam); 138 151 } 139 if (params[nParam] < params_min) { 152 saveParams[nParam] = params[nParam]; 153 if (params[nParam] < params_min) { 140 154 params[nParam] = params_min; 141 155 psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g", … … 170 184 psAbort("invalid parameter %d for param max test", nParam); 171 185 } 186 saveParams[nParam] = params[nParam]; 172 187 if (params[nParam] > params_max) { 173 188 params[nParam] = params_max; -
trunk/psModules/src/objects/models/pmModel_QGAUSS.c
r13960 r14220 88 88 f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]); 89 89 q1 = PS_SQR(f1)*AR_RATIO - PS_SQR(f2); 90 if (q1 <= 0) { 91 psError(PM_ERR_PSF, true, "Q1 < 0 (%g)", q1); 92 return false; 93 } 90 q1 = (q1 < 0.0) ? 0.0 : q1; 91 // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg.. Saturate at that 92 // angle and let f2,f1 fight it out 94 93 q2 = 0.5*sqrt (q1); 95 94 } … … 117 116 break; 118 117 case PM_PAR_SXY: 119 beta_lim = q2;118 beta_lim = 0.5*q2; 120 119 break; 121 120 case PM_PAR_7:
Note:
See TracChangeset
for help on using the changeset viewer.
