Changeset f10063e in sasview for sansmodels/src/sans/models/c_extensions
- Timestamp:
- Mar 30, 2010 7:56:04 PM (15 years ago)
- Branches:
- master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- 8d97277
- Parents:
- 6e93a02
- Location:
- sansmodels/src/sans/models/c_extensions
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
sansmodels/src/sans/models/c_extensions/cylinder.c
rae3ce4e rf10063e 18 18 */ 19 19 double cylinder_analytical_1D(CylinderParameters *pars, double q) { 20 double dp[ 5];21 20 double dp[6]; 21 22 22 // Fill paramater array 23 23 dp[0] = pars->scale; 24 24 dp[1] = pars->radius; 25 25 dp[2] = pars->length; 26 dp[3] = pars->contrast; 27 dp[4] = pars->background; 28 26 dp[3] = pars->sldCyl; 27 dp[4] = pars->sldSolv; 28 dp[5] = pars->background; 29 29 30 // Call library function to evaluate model 30 return CylinderForm(dp, q); 31 return CylinderForm(dp, q); 31 32 } 32 33 … … 41 42 q = sqrt(qx*qx+qy*qy); 42 43 return cylinder_analytical_2D_scaled(pars, q, qx/q, qy/q); 43 } 44 } 44 45 45 46 … … 53 54 double cylinder_analytical_2D(CylinderParameters *pars, double q, double phi) { 54 55 return cylinder_analytical_2D_scaled(pars, q, cos(phi), sin(phi)); 55 } 56 56 } 57 57 58 /** 58 59 * Function to evaluate 2D scattering function … … 68 69 double alpha, vol, cos_val; 69 70 double answer; 70 71 71 72 // Cylinder orientation 72 73 cyl_x = sin(pars->cyl_theta) * cos(pars->cyl_phi); 73 74 cyl_y = sin(pars->cyl_theta) * sin(pars->cyl_phi); 74 75 cyl_z = cos(pars->cyl_theta); 75 76 76 77 // q vector 77 78 q_z = 0; 78 79 79 80 // Compute the angle btw vector q and the 80 81 // axis of the cylinder 81 82 cos_val = cyl_x*q_x + cyl_y*q_y + cyl_z*q_z; 82 83 83 84 // The following test should always pass 84 85 if (fabs(cos_val)>1.0) { … … 86 87 return 0; 87 88 } 88 89 89 90 // Note: cos(alpha) = 0 and 1 will get an 90 91 // undefined value from CylKernel 91 92 alpha = acos( cos_val ); 92 93 93 94 // Call the IGOR library function to get the kernel 94 95 answer = CylKernel(q, pars->radius, pars->length/2.0, alpha) / sin(alpha); 95 96 96 97 // Multiply by contrast^2 97 answer *= pars->contrast*pars->contrast;98 98 answer *= (pars->sldCyl - pars->sldSolv)*(pars->sldCyl - pars->sldSolv); 99 99 100 //normalize by cylinder volume 100 101 //NOTE that for this (Fournet) definition of the integral, one must MULTIPLY by Vcyl 101 102 vol = acos(-1.0) * pars->radius * pars->radius * pars->length; 102 103 answer *= vol; 103 104 104 105 //convert to [cm-1] 105 106 answer *= 1.0e8; 106 107 107 108 //Scale 108 109 answer *= pars->scale; 109 110 110 111 // add in the background 111 112 answer += pars->background; 112 113 113 114 return answer; 114 115 } 115 116 -
sansmodels/src/sans/models/c_extensions/cylinder.h
r27972c1d rf10063e 4 4 * [PYTHONCLASS] = CylinderModel 5 5 * [DISP_PARAMS] = radius, length, cyl_theta, cyl_phi 6 [DESCRIPTION] = <text> f(q)= 2*(s catter_sld - solvent_sld)*V*sin(qLcos(alpha/2))6 [DESCRIPTION] = <text> f(q)= 2*(sldCyl - sldSolv)*V*sin(qLcos(alpha/2)) 7 7 /[qLcos(alpha/2)]*J1(qRsin(alpha/2))/[qRsin(alpha)] 8 8 … … 34 34 double length; 35 35 /// Contrast [1/A^(2)] 36 // [DEFAULT]=contrast=3.0e-6 [1/A^(2)] 37 double contrast; 36 // [DEFAULT]=sldCyl=4.0e-6 [1/A^(2)] 37 double sldCyl; 38 /// sldCyl [1/A^(2)] 39 // [DEFAULT]=sldSolv=1.0e-6 [1/A^(2)] 40 double sldSolv; 38 41 /// Incoherent Background [1/cm] 0.00 39 42 // [DEFAULT]=background=0.0 [1/cm] -
sansmodels/src/sans/models/c_extensions/ellipsoid.c
rdf4702f rf10063e 44 44 */ 45 45 double ellipsoid_analytical_1D(EllipsoidParameters *pars, double q) { 46 double dp[ 5];46 double dp[6]; 47 47 48 48 dp[0] = pars->scale; 49 49 dp[1] = pars->radius_a; 50 50 dp[2] = pars->radius_b; 51 dp[3] = pars->contrast; 52 dp[4] = pars->background; 51 dp[3] = pars->sldEll; 52 dp[4] = pars->sldSolv; 53 dp[5] = pars->background; 53 54 54 55 return EllipsoidForm(dp, q); … … 117 118 118 119 // Multiply by contrast^2 119 answer *= pars->contrast*pars->contrast;120 answer *= (pars->sldEll - pars->sldSolv) * (pars->sldEll - pars->sldSolv); 120 121 121 122 //normalize by cylinder volume -
sansmodels/src/sans/models/c_extensions/ellipsoid.h
r27972c1d rf10063e 9 9 //[PYTHONCLASS] = EllipsoidModel 10 10 //[DISP_PARAMS] = radius_a, radius_b, axis_theta, axis_phi 11 //[DESCRIPTION] = <text>"P(q.alpha)= scale*f(q)^(2)+ bkg, where f(q)= 3*(s catter_sld12 // - s catter_solvent)*V*[sin(q*r(Ra,Rb,alpha))11 //[DESCRIPTION] = <text>"P(q.alpha)= scale*f(q)^(2)+ bkg, where f(q)= 3*(sld_ell 12 // - sld_solvent)*V*[sin(q*r(Ra,Rb,alpha)) 13 13 // -q*r*cos(qr(Ra,Rb,alpha))] 14 14 // /[qr(Ra,Rb,alpha)]^(3)" … … 19 19 // scatter_sld: SLD of the scatter 20 20 // solvent_sld: SLD of the solvent 21 // contrast: SLD difference between scatter22 // andsolvent21 // sldEll: SLD of ellipsoid 22 // sldSolv: SLD of solvent 23 23 // V: volune of the Eliipsoid 24 24 // Ra: radius along the rotation axis … … 46 46 double radius_b; 47 47 48 /// Contrast [1/A^(2)] 49 // [DEFAULT]=contrast=3.0e-6 [1/A^(2)] 50 double contrast; 48 /// sldEll [1/A^(2)] 49 // [DEFAULT]=sldEll=4.0e-6 [1/A^(2)] 50 double sldEll; 51 52 /// sld of solvent [1/A^(2)] 53 // [DEFAULT]=sldSolv=1.0e-6 [1/A^(2)] 54 double sldSolv; 51 55 52 56 /// Incoherent Background [1/cm] -
sansmodels/src/sans/models/c_extensions/elliptical_cylinder.c
r975ec8e rf10063e 17 17 */ 18 18 double elliptical_cylinder_analytical_1D(EllipticalCylinderParameters *pars, double q) { 19 double dp[ 6];19 double dp[7]; 20 20 21 21 // Fill paramater array … … 24 24 dp[2] = pars->r_ratio; 25 25 dp[3] = pars->length; 26 dp[4] = pars->contrast; 27 dp[5] = pars->background; 26 dp[4] = pars->sldCyl; 27 dp[5] = pars->sldSolv; 28 dp[6] = pars->background; 28 29 29 30 // Call library function to evaluate model … … 145 146 146 147 // Multiply by contrast^2 147 answer *= pars->contrast*pars->contrast;148 answer *= (pars->sldCyl - pars->sldSolv) * (pars->sldCyl - pars->sldSolv); 148 149 149 150 //normalize by cylinder volume -
sansmodels/src/sans/models/c_extensions/elliptical_cylinder.h
r27972c1d rf10063e 8 8 r_ratio = the ratio of (r_major /r_minor >= 1) 9 9 length = the length of the cylinder 10 contrast = SLD of solvent - SLD of the cylinder 10 sldCyl = SLD of the cylinder 11 sldSolv = SLD of solvent - 11 12 background = incoherent background 12 13 *</text> … … 31 32 // [DEFAULT]=length=400.0 [A] 32 33 double length; 33 /// Contrast [1/A^(2)] 34 // [DEFAULT]=contrast=3.0e-6 [1/A^(2)] 35 double contrast; 34 /// SLD of cylinder [1/A^(2)] 35 // [DEFAULT]=sldCyl=4.0e-6 [1/A^(2)] 36 double sldCyl; 37 /// SLD of solvent [1/A^(2)] 38 // [DEFAULT]=sldSolv=1.0e-6 [1/A^(2)] 39 double sldSolv; 36 40 /// Incoherent Background [1/cm] 0.000 37 41 // [DEFAULT]=background=0 [1/cm] -
sansmodels/src/sans/models/c_extensions/flexible_cylinder.c
rea07075 rf10063e 18 18 */ 19 19 double flexible_cylinder_analytical_1D(FlexibleCylinderParameters *pars, double q) { 20 double dp[ 6];20 double dp[7]; 21 21 22 22 // Fill paramater array … … 25 25 dp[2] = pars->kuhn_length; 26 26 dp[3] = pars->radius; 27 dp[4] = pars->contrast; 28 dp[5] = pars->background; 27 dp[4] = pars->sldCyl; 28 dp[5] = pars->sldSolv; 29 dp[6] = pars->background; 29 30 30 31 // Call library function to evaluate model -
sansmodels/src/sans/models/c_extensions/flexible_cylinder.h
r27972c1d rf10063e 31 31 // [DEFAULT]=radius=20.0 [A] 32 32 double radius; 33 /// Contrast [1/A^(2)] 34 // [DEFAULT]=contrast=5.3e-6 [1/A^(2)] 35 double contrast; 33 /// SLD of cylinder [1/A^(2)] 34 // [DEFAULT]=sldCyl=6.3e-6 [1/A^(2)] 35 double sldCyl; 36 /// SLD of solvent [1/A^(2)] 37 // [DEFAULT]=sldSolv=1.0e-6 [1/A^(2)] 38 double sldSolv; 36 39 /// Incoherent Background [1/cm] 37 40 // [DEFAULT]=background=0.0001 [1/cm] -
sansmodels/src/sans/models/c_extensions/hollow_cylinder.c
re2afadf rf10063e 17 17 */ 18 18 double hollow_cylinder_analytical_1D(HollowCylinderParameters *pars, double q) { 19 double dp[ 6];19 double dp[7]; 20 20 21 21 dp[0] = pars->scale; … … 23 23 dp[2] = pars->radius; 24 24 dp[3] = pars->length; 25 dp[4] = pars->contrast; 26 dp[5] = pars->background; 25 dp[4] = pars->sldCyl; 26 dp[5] = pars->sldSolv; 27 dp[6] = pars->background; 27 28 28 29 return HollowCylinder(dp, q); … … 89 90 answer = HolCylKernel(q, pars->core_radius, pars->radius, pars->length, cos_val); 90 91 92 // Multiply by contrast^2 93 answer *= (pars->sldCyl - pars->sldSolv)*(pars->sldCyl - pars->sldSolv); 94 91 95 //normalize by cylinder volume 92 vol=acos(-1.0)*((pars-> core_radius *pars->core_radius)-(pars->radius*pars->radius))96 vol=acos(-1.0)*((pars->radius*pars->radius)-(pars->core_radius *pars->core_radius)) 93 97 *(pars->length); 94 answer /= vol;98 answer *= vol; 95 99 96 100 //convert to [cm-1] -
sansmodels/src/sans/models/c_extensions/hollow_cylinder.h
r27972c1d rf10063e 11 11 // radius = the radius of shell 12 12 // length = the total length of the cylinder 13 // contrast = SLD of solvent - SLD of shell 13 // sldCyl = SLD of the shell 14 // sldSolv = SLD of the solvent 14 15 // background = incoherent background 15 16 // </text> … … 35 36 double length; 36 37 37 /// Contrast [1/A^(2)] 38 // [DEFAULT]=contrast=5.3e-6 [1/A^(2)] 39 double contrast; 38 /// SLD_cylinder [1/A^(2)] 39 // [DEFAULT]=sldCyl=6.3e-6 [1/A^(2)] 40 double sldCyl; 41 42 /// SLD_solvent [1/A^(2)] 43 // [DEFAULT]=sldSolv=1.0e-6 [1/A^(2)] 44 double sldSolv; 40 45 41 46 /// Incoherent Background [1/cm] -
sansmodels/src/sans/models/c_extensions/lamellarPS.c
rc1c29b6 rf10063e 19 19 LamellarPS_kernel(double dp[], double q) 20 20 { 21 double scale,dd,del, contr,NN,Cp,bkg; //local variables of coefficient wave21 double scale,dd,del,sld_bi,sld_sol,contr,NN,Cp,bkg; //local variables of coefficient wave 22 22 double inten, qval,Pq,Sq,alpha,temp,t1,t2,t3,dQ; 23 23 double Pi,Euler,dQDefault,fii; 24 24 int ii,NNint; 25 25 Euler = 0.5772156649; // Euler's constant 26 dQDefault = 0.0; //0.0025;//[=] 1/A, q-resolution, default value26 dQDefault = 0.0; //[=] 1/A, q-resolution, default value 27 27 dQ = dQDefault; 28 28 … … 33 33 dd = dp[1]; 34 34 del = dp[2]; 35 contr = dp[3]; 36 NN = trunc(dp[4]); //be sure that NN is an integer 37 Cp = dp[5]; 38 bkg = dp[6]; 35 sld_bi = dp[3]; 36 sld_sol = dp[4]; 37 NN = trunc(dp[5]); //be sure that NN is an integer 38 Cp = dp[6]; 39 bkg = dp[7]; 40 41 contr = sld_bi - sld_sol; 39 42 40 43 Pq = 2.0*contr*contr/qval/qval*(1.0-cos(qval*del)); … … 78 81 */ 79 82 double lamellarPS_analytical_1D(LamellarPSParameters *pars, double q) { 80 double dp[ 7];83 double dp[8]; 81 84 82 85 // Fill paramater array … … 84 87 dp[1] = pars->spacing; 85 88 dp[2] = pars->delta; 86 dp[3] = pars->contrast; 87 dp[4] = pars->n_plates; 88 dp[5] = pars->caille; 89 dp[6] = pars->background; 89 dp[3] = pars->sld_bi; 90 dp[4] = pars->sld_sol; 91 dp[5] = pars->n_plates; 92 dp[6] = pars->caille; 93 dp[7] = pars->background; 90 94 91 95 // Call library function to evaluate model -
sansmodels/src/sans/models/c_extensions/lamellarPS.h
r27972c1d rf10063e 21 21 *Parameters: spacing = repeat spacing, 22 22 delta = bilayer thickness, 23 contrast = SLD_solvent - SLD_bilayer 23 sld_bi = SLD_bilayer 24 sld_sol = SLD_solvent 24 25 n_plate = # of Lamellar plates 25 26 caille = Caille parameter (<0.8 or <1) … … 41 42 // [DEFAULT]=delta=30 [A] 42 43 double delta; 43 /// Contrast [1/A^(2)] 44 // [DEFAULT]=contrast=5.3e-6 [1/A^(2)] 45 double contrast; 44 /// SLD of bilayer [1/A^(2)] 45 // [DEFAULT]=sld_bi=6.3e-6 [1/A^(2)] 46 double sld_bi; 47 /// SLD of solvent [1/A^(2)] 48 // [DEFAULT]=sld_sol=1.0e-6 [1/A^(2)] 49 double sld_sol; 46 50 /// Number of lamellar plates 47 51 // [DEFAULT]=n_plates=20 -
sansmodels/src/sans/models/c_extensions/parallelepiped.c
r8e36cdd rf10063e 18 18 */ 19 19 double parallelepiped_analytical_1D(ParallelepipedParameters *pars, double q) { 20 double dp[ 6];20 double dp[7]; 21 21 22 22 // Fill paramater array … … 25 25 dp[2] = pars->short_b; 26 26 dp[3] = pars->long_c; 27 dp[4] = pars->contrast; 28 dp[5] = pars->background; 27 dp[4] = pars->sldPipe; 28 dp[5] = pars->sldSolv; 29 dp[6] = pars->background; 29 30 30 31 // Call library function to evaluate model … … 149 150 150 151 // Multiply by contrast^2 151 answer *= pars->contrast*pars->contrast;152 answer *= (pars->sldPipe - pars->sldSolv) * (pars->sldPipe - pars->sldSolv); 152 153 153 154 //normalize by cylinder volume -
sansmodels/src/sans/models/c_extensions/parallelepiped.h
r27972c1d rf10063e 14 14 short_b: length of another short edge [A] 15 15 long_c: length of long edge of the parallelepiped [A] 16 contrast: particle_sld - solvent_sld 16 sldPipe: Pipe_sld 17 sldSolv: solvent_sld 17 18 background:Incoherent Background [1/cm] 18 19 </text> … … 35 36 // [DEFAULT]=long_c=400 [A] 36 37 double long_c; 37 /// Contrast [1/A^(2)] 38 // [DEFAULT]=contrast=53e-7 [1/A^(2)] 39 double contrast; 38 /// SLD_Pipe [1/A^(2)] 39 // [DEFAULT]=sldPipe=6.3e-6 [1/A^(2)] 40 double sldPipe; 41 /// sldSolv [1/A^(2)] 42 // [DEFAULT]=sldSolv=1.0e-6 [1/A^(2)] 43 double sldSolv; 40 44 /// Incoherent Background [1/cm] 41 45 // [DEFAULT]=background=0.0 [1/cm] -
sansmodels/src/sans/models/c_extensions/sphere.c
rae3ce4e rf10063e 17 17 double sphere_analytical_1D(SphereParameters *pars, double q) { 18 18 double dp[5]; 19 19 20 20 dp[0] = pars->scale; 21 21 dp[1] = pars->radius; 22 dp[2] = pars->contrast; 23 dp[3] = pars->background; 24 22 dp[2] = pars->sldSph; 23 dp[3] = pars->sldSolv; 24 dp[4] = pars->background; 25 25 26 return SphereForm(dp, q); 26 27 } 27 28 28 29 /** 29 30 * Function to evaluate 2D scattering function … … 37 38 38 39 double sphere_analytical_2DXY(SphereParameters *pars, double qx, double qy){ 39 return sphere_analytical_1D(pars,sqrt(qx*qx+qy*qy)); 40 return sphere_analytical_1D(pars,sqrt(qx*qx+qy*qy)); 40 41 } -
sansmodels/src/sans/models/c_extensions/sphere.h
r27972c1d rf10063e 7 7 //[PYTHONCLASS] = SphereModel 8 8 //[DISP_PARAMS] = radius 9 //[DESCRIPTION] =<text>P(q)=(scale/V)*[3V(s catter_sld-solvent_sld)*(sin(qR)-qRcos(qR))9 //[DESCRIPTION] =<text>P(q)=(scale/V)*[3V(sldSph-sldSolv)*(sin(qR)-qRcos(qR)) 10 10 // /(qR)^3]^(2)+bkg 11 11 // 12 12 // bkg:background, R: radius of sphere 13 13 // V:The volume of the scatter 14 // contrast:SLD difference between 15 // scatter and solvent 16 // scatter_sld: the SLD of the scatter 17 // solvent_sld: the SLD of the solvent 14 // sldSph: the SLD of the sphere 15 // sldSolv: the SLD of the solvent 18 16 // 19 17 // </text> … … 30 28 double radius; 31 29 32 /// Contrast [1/A^(2)] 33 // [DEFAULT]=contrast= 1.0e-6 [1/A^(2)] 34 double contrast; 30 /// sldSph [1/A^(2)] 31 // [DEFAULT]=sldSph= 2.0e-6 [1/A^(2)] 32 double sldSph; 33 34 /// sldSolv [1/A^(2)] 35 // [DEFAULT]=sldSolv= 1.0e-6 [1/A^(2)] 36 double sldSolv; 35 37 36 38 /// Incoherent Background [1/cm] -
sansmodels/src/sans/models/c_extensions/spheroid.c
r975ec8e rf10063e 10 10 #include <stdlib.h> 11 11 12 13 12 /** 14 13 * Function to evaluate 1D scattering function … … 18 17 */ 19 18 double spheroid_analytical_1D(SpheroidParameters *pars, double q) { 20 double dp[ 8];19 double dp[9]; 21 20 22 21 // Fill paramater array … … 26 25 dp[3] = pars->equat_shell; 27 26 dp[4] = pars->polar_shell; 28 dp[5] = pars->contrast; 29 dp[6] = pars->sld_solvent; 30 dp[7] = pars->background; 27 dp[5] = pars->sld_core; 28 dp[6] = pars->sld_shell; 29 dp[7] = pars->sld_solvent; 30 dp[8] = pars->background; 31 31 32 32 // Call library function to evaluate model 33 return ProlateForm(dp, q);33 return OblateForm(dp, q); 34 34 } 35 35 … … 73 73 double answer; 74 74 double Pi = 4.0*atan(1.0); 75 double sldcs,sldss; 75 76 76 77 // ellipsoid orientation, the axis of the rotation is consistent with the ploar axis. … … 78 79 cyl_y = sin(pars->axis_theta) * sin(pars->axis_phi); 79 80 cyl_z = cos(pars->axis_theta); 81 //del sld 82 sldcs = pars->sld_core - pars->sld_shell; 83 sldss = pars->sld_shell- pars->sld_solvent; 80 84 81 85 // q vector … … 96 100 alpha = acos( cos_val ); 97 101 98 // Call the IGOR library function to get the kernel 99 answer = gfn4(cos_val,pars->equat_core,pars->polar_core,pars->equat_shell,pars->polar_shell, pars->contrast,pars->sld_solvent,q);100 102 // Call the IGOR library function to get the kernel: MUST use gfn4 not gf2 because of the def of params. 103 answer = gfn4(cos_val,pars->equat_core,pars->polar_core,pars->equat_shell,pars->polar_shell,sldcs,sldss,q); 104 //It seems that it should be normalized somehow. How??? 101 105 102 106 //normalize by cylinder volume 103 107 //NOTE that for this (Fournet) definition of the integral, one must MULTIPLY by Vcyl 104 vol = 4 *Pi/3*pars->equat_shell*pars->equat_shell*pars->polar_shell;108 vol = 4.0*Pi/3.0*pars->equat_shell*pars->equat_shell*pars->polar_shell; 105 109 answer /= vol; 106 110 -
sansmodels/src/sans/models/c_extensions/spheroid.h
r27972c1d rf10063e 15 15 equat_shell = equatorial radius of shell, 16 16 polar_shell = polar radius (revolution axis) of shell, 17 contrast = SLD_core - SLD_shell 17 sld_core = SLD_core 18 sld_shell = SLD_shell 18 19 sld_solvent = SLD_solvent 19 20 background = Incoherent bkg … … 45 46 // [DEFAULT]=polar_shell=30.0 [A] 46 47 double polar_shell; 47 /// Scattering contrast [1/A^(2)] 48 // [DEFAULT]=contrast=1.0e-6 [1/A^(2)] 49 double contrast; 48 /// Core scattering length density [1/A^(2)] 49 // [DEFAULT]=sld_core=2.0e-6 [1/A^(2)] 50 double sld_core; 51 /// Shell scattering length density [1/A^(2)] 52 // [DEFAULT]=sld_shell=1.0e-6 [1/A^(2)] 53 double sld_shell; 50 54 /// Solvent scattering length density [1/A^(2)] 51 55 // [DEFAULT]=sld_solvent=6.3e-6 [1/A^(2)]
Note: See TracChangeset
for help on using the changeset viewer.