Changeset 6872 for trunk/psModules/src/objects/models/pmModel_QGAUSS.c
- Timestamp:
- Apr 17, 2006, 8:01:05 AM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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 }
Note:
See TracChangeset
for help on using the changeset viewer.
