Changeset 463eb76e in sasview for sansmodels/src
- Timestamp:
- Jul 25, 2011 3:43:34 PM (13 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:
- bc7bc839
- Parents:
- 38155f7
- Location:
- sansmodels/src/sans/models
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
sansmodels/src/sans/models/PearlNecklaceModel.py
r38155f7 r463eb76e 47 47 num_pearls = 3.0 48 48 sld_pearl = 1e-006 [1/A^(2)] 49 sld_string = 5e-006 [1/A^(2)]50 sld_solv = 5e-007[1/A^(2)]49 sld_string = 1e-006 [1/A^(2)] 50 sld_solv = 6.3e-006 [1/A^(2)] 51 51 background = 0.0 52 52 -
sansmodels/src/sans/models/c_extensions/libmultifunc/libfunc.c
r8c8cb05 r463eb76e 1 // by jcho 1 2 #include <math.h> 2 3 #include "libmultifunc/libfunc.h" … … 19 20 20 21 // Used in pearl nec model 21 //integral of sin(x)/x up to namx term nmax>10 looks fine. 22 double Si(double x, int nmax ) 22 // Sine integral function: approximated within 1%!!! 23 // integral of sin(x)/x up to namx term nmax=6 looks the best. 24 double Si(double x) 23 25 { 24 26 int i; 27 int nmax=6; 25 28 double out; 26 29 long double power; 27 if (x > 5.0){ 28 double pi = 4.0*atan(1.0); 29 return pi/2.0; 30 double pi = 4.0*atan(1.0); 31 if (x >= pi*6.2/4.0){ 32 33 double out_sin = 0.0; 34 double out_cos = 0.0; 35 out = pi/2.0; 36 for (i=0; i<nmax-2; i+=1){ 37 out_cos += pow(-1.0, i) * (double)factorial(2*i) / pow(x, 2*i+1); 38 out_sin += pow(-1.0, i) * (double)factorial(2*i+1) / pow(x, 2*i+2); 39 } 40 out -= cos(x) * out_cos; 41 out -= sin(x) * out_sin; 42 return out; 30 43 } 31 44 out = 0.0; … … 43 56 } 44 57 45 double sin _x(double x)58 double sinc(double x) 46 59 { 47 60 if (x==0){ -
sansmodels/src/sans/models/c_extensions/libmultifunc/libfunc.h
r8c8cb05 r463eb76e 4 4 int factorial(int i); 5 5 6 double Si(double x , int nmax);6 double Si(double x); 7 7 8 double sin _x(double x);8 double sinc(double x); 9 9 10 10 #endif -
sansmodels/src/sans/models/c_extensions/pearlnecklace.c
r8c8cb05 r463eb76e 53 53 // Note take only 20 terms in Si series: 10 terms may be enough though. 54 54 double gamma; 55 gamma = Si(q* edge_separation , 6);55 gamma = Si(q* edge_separation); 56 56 gamma /= (q* edge_separation); 57 57 double beta; 58 beta = Si(q * (edge_separation + radius) , 6);59 beta -= Si(q * radius , 6);58 beta = Si(q * (edge_separation + radius)); 59 beta -= Si(q * radius); 60 60 beta /= (q* edge_separation); 61 61 … … 68 68 69 69 // form factor for num_pearls 70 sss = 1.0 - pow(sin _x(q*A_s), (int)num_pearls );71 sss /= pow((1.0-sin _x(q*A_s)), 2);72 sss *= sin_x(q*A_s);70 sss = 1.0 - pow(sinc(q*A_s), num_pearls ); 71 sss /= pow((1.0-sinc(q*A_s)), 2); 72 sss *= -sinc(q*A_s); 73 73 sss -= num_pearls/2.0; 74 sss += num_pearls/(1.0-sin _x(q*A_s));74 sss += num_pearls/(1.0-sinc(q*A_s)); 75 75 sss *= 2.0 * pow((m_s*psi), 2); 76 76 77 77 // form factor for num_strings (like thin rods) 78 78 double srr_1; 79 srr_1 = -pow(sin _x(q*edge_separation/2.0), 2);80 //printf ("sss %g, %g, %g\n",sss, srr_1, gamma); 79 srr_1 = -pow(sinc(q*edge_separation/2.0), 2); 80 81 81 srr_1 += 2.0 * gamma; 82 82 srr_1 *= num_strings; 83 83 double srr_2; 84 srr_2 = 2.0/(1.0-sin _x(q*A_s));84 srr_2 = 2.0/(1.0-sinc(q*A_s)); 85 85 srr_2 *= num_strings; 86 86 srr_2 *= pow(beta, 2); 87 87 double srr_3; 88 srr_3 = 1.0 - pow(sin _x(q*A_s), (int)num_strings);89 srr_3 /= pow((1.0-sin _x(q*A_s)), 2);88 srr_3 = 1.0 - pow(sinc(q*A_s), num_strings); 89 srr_3 /= pow((1.0-sinc(q*A_s)), 2); 90 90 srr_3 *= pow(beta, 2); 91 91 srr_3 *= -2.0; … … 96 96 97 97 // form factor for correlations 98 srs = -1.0;99 srs -= pow(sin _x(q*A_s), (int)num_strings);100 srs /= pow((1.0-sin _x(q*A_s)), 2);101 srs *= sin_x(q*A_s);102 srs += (num_strings/(1.0-sin _x(q*A_s)));98 srs = 1.0; 99 srs -= pow(sinc(q*A_s), num_strings); 100 srs /= pow((1.0-sinc(q*A_s)), 2); 101 srs *= -sinc(q*A_s); 102 srs += (num_strings/(1.0-sinc(q*A_s))); 103 103 srs *= 4.0; 104 104 srs *= (m_r * m_s * beta * psi); … … 111 111 form_factor *= scale; 112 112 form_factor += background; 113 114 113 return (form_factor); 115 114 } -
sansmodels/src/sans/models/c_extensions/pearlnecklace.h
r8c8cb05 r463eb76e 44 44 double sld_pearl; 45 45 /// sld_string 46 // [DEFAULT]=sld_string= 5.0e-06 [1/A^(2)]46 // [DEFAULT]=sld_string= 1.0e-06 [1/A^(2)] 47 47 double sld_string; 48 48 /// sld_solv 49 // [DEFAULT]=sld_solv= 0.5e-06 [1/A^(2)]49 // [DEFAULT]=sld_solv= 6.3e-06 [1/A^(2)] 50 50 double sld_solv; 51 51 /// Background -
sansmodels/src/sans/models/c_models/CPearlNecklaceModel.cpp
r38155f7 r463eb76e 93 93 PyDict_SetItemString(self->params,"scale",Py_BuildValue("d",1.000000000000)); 94 94 PyDict_SetItemString(self->params,"thick_string",Py_BuildValue("d",2.500000000000)); 95 PyDict_SetItemString(self->params,"sld_string",Py_BuildValue("d",0.00000 5000000));95 PyDict_SetItemString(self->params,"sld_string",Py_BuildValue("d",0.000001000000)); 96 96 PyDict_SetItemString(self->params,"edge_separation",Py_BuildValue("d",350.000000000000)); 97 97 PyDict_SetItemString(self->params,"sld_pearl",Py_BuildValue("d",0.000001000000)); 98 98 PyDict_SetItemString(self->params,"radius",Py_BuildValue("d",80.000000000000)); 99 99 PyDict_SetItemString(self->params,"background",Py_BuildValue("d",0.000000000000)); 100 PyDict_SetItemString(self->params,"sld_solv",Py_BuildValue("d",0.00000 0500000));100 PyDict_SetItemString(self->params,"sld_solv",Py_BuildValue("d",0.000006300000)); 101 101 // Initialize dispersion / averaging parameter dict 102 102 DispersionVisitor* visitor = new DispersionVisitor(); -
sansmodels/src/sans/models/c_models/pearlnecklace.cpp
r8c8cb05 r463eb76e 21 21 num_pearls.set_min(0.0); 22 22 sld_pearl = Parameter(1.0e-06); 23 sld_string = Parameter( 5.0e-06);24 sld_solv = Parameter( 0.5e-06);23 sld_string = Parameter(1.0e-06); 24 sld_solv = Parameter(6.3e-06); 25 25 background = Parameter(0.0); 26 26
Note: See TracChangeset
for help on using the changeset viewer.