Changeset ab2aea8 in sasmodels


Ignore:
Timestamp:
Oct 15, 2016 3:49:53 PM (8 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master, core_shell_microgels, costrafo411, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
Children:
e30d645
Parents:
ed0827a
Message:

code cleanup for rectangular prism models

Location:
sasmodels/models
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/models/hollow_rectangular_prism.c

    r3a48772 rab2aea8  
    55double form_volume(double length_a, double b2a_ratio, double c2a_ratio, double thickness) 
    66{ 
    7     double b_side = length_a * b2a_ratio; 
    8     double c_side = length_a * c2a_ratio; 
     7    double length_b = length_a * b2a_ratio; 
     8    double length_c = length_a * c2a_ratio; 
    99    double a_core = length_a - 2.0*thickness; 
    10     double b_core = b_side - 2.0*thickness; 
    11     double c_core = c_side - 2.0*thickness; 
     10    double b_core = length_b - 2.0*thickness; 
     11    double c_core = length_c - 2.0*thickness; 
    1212    double vol_core = a_core * b_core * c_core; 
    13     double vol_total = length_a * b_side * c_side; 
     13    double vol_total = length_a * length_b * length_c; 
    1414    double vol_shell = vol_total - vol_core; 
    1515    return vol_shell; 
     
    2626    double termA1, termA2, termB1, termB2, termC1, termC2; 
    2727     
    28     double b_side = length_a * b2a_ratio; 
    29     double c_side = length_a * c2a_ratio; 
     28    double length_b = length_a * b2a_ratio; 
     29    double length_c = length_a * c2a_ratio; 
    3030    double a_half = 0.5 * length_a; 
    31     double b_half = 0.5 * b_side; 
    32     double c_half = 0.5 * c_side; 
     31    double b_half = 0.5 * length_b; 
     32    double c_half = 0.5 * length_c; 
     33    double vol_total = length_a * length_b * length_c; 
     34    double vol_core = 8.0 * (a_half-thickness) * (b_half-thickness) * (c_half-thickness); 
    3335 
    34    //Integration limits to use in Gaussian quadrature 
     36    //Integration limits to use in Gaussian quadrature 
    3537    double v1a = 0.0; 
    3638    double v1b = M_PI_2;  //theta integration limits 
     
    3840    double v2b = M_PI_2;  //phi integration limits 
    3941     
    40     //Order of integration 
    41     int nordi=76;                                
    42     int nordj=76; 
     42    double outer_sum = 0.0; 
     43     
     44    for(int i=0; i<76; i++) { 
    4345 
    44     double sumi = 0.0; 
    45      
    46     for(int i=0; i<nordi; i++) { 
     46        double theta = 0.5 * ( Gauss76Z[i]*(v1b-v1a) + v1a + v1b );     
    4747 
    48             double theta = 0.5 * ( Gauss76Z[i]*(v1b-v1a) + v1a + v1b );  
     48        double termC1 = sinc(q * c_half * cos(theta)); 
     49        double termC2 = sinc(q * (c_half-thickness)*cos(theta)); 
    4950 
    50             double arg = q * c_half * cos(theta); 
    51             if (fabs(arg) > 1.e-16) {termC1 = sin(arg)/arg;} else {termC1 = 1.0;} 
    52             arg = q * (c_half-thickness)*cos(theta); 
    53             if (fabs(arg) > 1.e-16) {termC2 = sin(arg)/arg;} else {termC2 = 1.0;} 
    54  
    55             double sumj = 0.0; 
     51        double inner_sum = 0.0; 
    5652         
    57             for(int j=0; j<nordj; j++) { 
     53        for(int j=0; j<76; j++) { 
    5854 
    5955            double phi = 0.5 * ( Gauss76Z[j]*(v2b-v2a) + v2a + v2b );  
     
    6157            // Amplitude AP from eqn. (13), rewritten to avoid round-off effects when arg=0 
    6258 
    63                 arg = q * a_half * sin(theta) * sin(phi); 
    64                 if (fabs(arg) > 1.e-16) {termA1 = sin(arg)/arg;} else {termA1 = 1.0;} 
    65                 arg = q * (a_half-thickness) * sin(theta) * sin(phi); 
    66                 if (fabs(arg) > 1.e-16) {termA2 = sin(arg)/arg;} else {termA2 = 1.0;} 
     59            termA1 = sinc(q * a_half * sin(theta) * sin(phi)); 
     60            termA2 = sinc(q * (a_half-thickness) * sin(theta) * sin(phi)); 
    6761 
    68                 arg = q * b_half * sin(theta) * cos(phi); 
    69                 if (fabs(arg) > 1.e-16) {termB1 = sin(arg)/arg;} else {termB1 = 1.0;} 
    70                 arg = q * (b_half-thickness) * sin(theta) * cos(phi); 
    71                 if (fabs(arg) > 1.e-16) {termB2 = sin(arg)/arg;} else {termB2 = 1.0;} 
     62            termB1 = sinc(q * b_half * sin(theta) * cos(phi)); 
     63            termB2 = sinc(q * (b_half-thickness) * sin(theta) * cos(phi)); 
    7264 
    73             double AP1 = (length_a*b_side*c_side) * termA1 * termB1 * termC1; 
    74             double AP2 = 8.0 * (a_half-thickness) * (b_half-thickness) * (c_half-thickness) * termA2 * termB2 * termC2; 
    75             double AP = AP1 - AP2; 
     65            double AP1 = vol_total * termA1 * termB1 * termC1; 
     66            double AP2 = vol_core * termA2 * termB2 * termC2; 
    7667 
    77                 sumj += Gauss76Wt[j] * (AP*AP); 
     68            inner_sum += Gauss76Wt[j] * square(AP1-AP2); 
    7869 
    79             } 
     70        } 
    8071 
    81             sumj = 0.5 * (v2b-v2a) * sumj; 
    82             sumi += Gauss76Wt[i] * sumj * sin(theta); 
     72        inner_sum = 0.5 * (v2b-v2a) * inner_sum; 
     73        outer_sum += Gauss76Wt[i] * inner_sum * sin(theta); 
    8374 
    8475    } 
    8576 
    86     double answer = 0.5*(v1b-v1a)*sumi; 
     77    double answer = 0.5*(v1b-v1a)*outer_sum; 
    8778 
    8879    // Normalize as in Eqn. (15) without the volume factor (as cancels with (V*DelRho)^2 normalization) 
     
    9182 
    9283    // Multiply by contrast^2. Factor corresponding to volume^2 cancels with previous normalization. 
    93     answer *= (sld-solvent_sld)*(sld-solvent_sld); 
     84    answer *= square(sld-solvent_sld); 
    9485 
    9586    // Convert from [1e-12 A-1] to [cm-1] 
  • sasmodels/models/hollow_rectangular_prism.py

    ra807206 rab2aea8  
    1313the difference of the amplitudes of two massive parallelepipeds 
    1414differing in their outermost dimensions in each direction by the 
    15 same length increment :math:`2\Delta` (Nayuk, 2012). 
     15same length increment $2\Delta$ (Nayuk, 2012). 
    1616 
    1717As in the case of the massive parallelepiped model (:ref:`rectangular-prism`), 
     
    5858 
    5959.. math:: 
    60   I(q) = \text{scale} \times V \times (\rho_{\text{p}} - 
    61   \rho_{\text{solvent}})^2 \times P(q) + \text{background} 
     60  I(q) = \text{scale} \times V \times (\rho_\text{p} - 
     61  \rho_\text{solvent})^2 \times P(q) + \text{background} 
    6262 
    63 where $\rho_{\text{p}}$ is the scattering length of the parallelepiped, 
    64 $\rho_{\text{solvent}}$ is the scattering length of the solvent, 
     63where $\rho_\text{p}$ is the scattering length of the parallelepiped, 
     64$\rho_\text{solvent}$ is the scattering length of the solvent, 
    6565and (if the data are in absolute units) *scale* represents the volume fraction 
    6666(which is unitless). 
     
    148148# parameters for demo 
    149149demo = dict(scale=1, background=0, 
    150             sld=6.3e-6, sld_solvent=1.0e-6, 
     150            sld=6.3, sld_solvent=1.0, 
    151151            length_a=35, b2a_ratio=1, c2a_ratio=1, thickness=1, 
    152152            length_a_pd=0.1, length_a_pd_n=10, 
  • sasmodels/models/hollow_rectangular_prism_thin_walls.c

    r3a48772 rab2aea8  
    55double form_volume(double length_a, double b2a_ratio, double c2a_ratio) 
    66{ 
    7     double b_side = length_a * b2a_ratio; 
    8     double c_side = length_a * c2a_ratio; 
    9     double vol_shell = 2.0 * (length_a*b_side + length_a*c_side + b_side*c_side); 
     7    double length_b = length_a * b2a_ratio; 
     8    double length_c = length_a * c2a_ratio; 
     9    double vol_shell = 2.0 * (length_a*length_b + length_a*length_c + length_b*length_c); 
    1010    return vol_shell; 
    1111} 
     
    1818    double c2a_ratio) 
    1919{ 
    20     double b_side = length_a * b2a_ratio; 
    21     double c_side = length_a * c2a_ratio; 
    22     double a_half = 0.5 * length_a; 
    23     double b_half = 0.5 * b_side; 
    24     double c_half = 0.5 * c_side; 
     20    const double length_b = length_a * b2a_ratio; 
     21    const double length_c = length_a * c2a_ratio; 
     22    const double a_half = 0.5 * length_a; 
     23    const double b_half = 0.5 * length_b; 
     24    const double c_half = 0.5 * length_c; 
    2525 
    2626   //Integration limits to use in Gaussian quadrature 
    27     double v1a = 0.0; 
    28     double v1b = M_PI_2;  //theta integration limits 
    29     double v2a = 0.0; 
    30     double v2b = M_PI_2;  //phi integration limits 
     27    const double v1a = 0.0; 
     28    const double v1b = M_PI_2;  //theta integration limits 
     29    const double v2a = 0.0; 
     30    const double v2b = M_PI_2;  //phi integration limits 
    3131     
    32     //Order of integration 
    33     int nordi=76;                                
    34     int nordj=76; 
     32    double outer_sum = 0.0; 
     33    for(int i=0; i<76; i++) { 
     34        const double theta = 0.5 * ( Gauss76Z[i]*(v1b-v1a) + v1a + v1b ); 
    3535 
    36     double sumi = 0.0; 
    37      
    38     for(int i=0; i<nordi; i++) { 
     36        double sin_theta, cos_theta; 
     37        double sin_c, cos_c; 
     38        SINCOS(theta, sin_theta, cos_theta); 
     39        SINCOS(q*c_half*cos_theta, sin_c, cos_c); 
    3940 
    40             double theta = 0.5 * ( Gauss76Z[i]*(v1b-v1a) + v1a + v1b );  
    41          
    4241        // To check potential problems if denominator goes to zero here !!! 
    43         double termAL_theta = 8.0*cos(q*c_half*cos(theta)) / (q*q*sin(theta)*sin(theta)); 
    44         double termAT_theta = 8.0*sin(q*c_half*cos(theta)) / (q*q*sin(theta)*cos(theta)); 
     42        const double termAL_theta = 8.0 * cos_c / (q*q*sin_theta*sin_theta); 
     43        const double termAT_theta = 8.0 * sin_c / (q*q*sin_theta*cos_theta); 
    4544 
    46             double sumj = 0.0; 
    47          
    48             for(int j=0; j<nordj; j++) { 
     45        double inner_sum = 0.0; 
     46        for(int j=0; j<76; j++) { 
     47            const double phi = 0.5 * ( Gauss76Z[j]*(v2b-v2a) + v2a + v2b ); 
    4948 
    50             double phi = 0.5 * ( Gauss76Z[j]*(v2b-v2a) + v2a + v2b );  
    51              
     49            double sin_phi, cos_phi; 
     50            double sin_a, cos_a; 
     51            double sin_b, cos_b; 
     52            SINCOS(phi, sin_phi, cos_phi); 
     53            SINCOS(q*a_half*sin_theta*sin_phi, sin_a, cos_a); 
     54            SINCOS(q*b_half*sin_theta*cos_phi, sin_b, cos_b); 
     55 
    5256            // Amplitude AL from eqn. (7c) 
    53             double AL = termAL_theta * sin(q*a_half*sin(theta)*sin(phi)) *  
    54                 sin(q*b_half*sin(theta)*cos(phi)) / (sin(phi)*cos(phi)); 
     57            const double AL = termAL_theta 
     58                * sin_a*sin_b / (sin_phi*cos_phi); 
    5559 
    5660            // Amplitude AT from eqn. (9) 
    57             double AT = termAT_theta * (  (cos(q*a_half*sin(theta)*sin(phi))*sin(q*b_half*sin(theta)*cos(phi))/cos(phi))  
    58                 + (cos(q*b_half*sin(theta)*cos(phi))*sin(q*a_half*sin(theta)*sin(phi))/sin(phi)) ); 
     61            const double AT = termAT_theta 
     62                * ( cos_a*sin_b/cos_phi + cos_b*sin_a/sin_phi ); 
    5963 
    60             sumj += Gauss76Wt[j] * (AL+AT)*(AL+AT); 
     64            inner_sum += Gauss76Wt[j] * square(AL+AT); 
     65        } 
    6166 
    62             } 
    63  
    64             sumj = 0.5 * (v2b-v2a) * sumj; 
    65             sumi += Gauss76Wt[i] * sumj * sin(theta); 
    66  
     67        inner_sum *= 0.5 * (v2b-v2a); 
     68        outer_sum += Gauss76Wt[i] * inner_sum * sin_theta; 
    6769    } 
    6870 
    69     double answer = 0.5*(v1b-v1a)*sumi; 
     71    outer_sum *= 0.5*(v1b-v1a); 
    7072 
    7173    // Normalize as in Eqn. (15) without the volume factor (as cancels with (V*DelRho)^2 normalization) 
    7274    // The factor 2 is due to the different theta integration limit (pi/2 instead of pi) 
    73     answer /= M_PI_2; 
     75    double answer = outer_sum/M_PI_2; 
    7476 
    7577    // Multiply by contrast^2. Factor corresponding to volume^2 cancels with previous normalization. 
    76     answer *= (sld-solvent_sld)*(sld-solvent_sld); 
     78    answer *= square(sld-solvent_sld); 
    7779 
    7880    // Convert from [1e-12 A-1] to [cm-1] 
     
    8082 
    8183    return answer; 
    82      
    8384} 
  • sasmodels/models/hollow_rectangular_prism_thin_walls.py

    ra807206 rab2aea8  
    33r""" 
    44 
    5 This model provides the form factor, *P(q)*, for a hollow rectangular 
     5This model provides the form factor, $P(q)$, for a hollow rectangular 
    66prism with infinitely thin walls. It computes only the 1D scattering, not the 2D. 
    77 
     
    1414 
    1515Assuming a hollow parallelepiped with infinitely thin walls, edge lengths 
    16 :math:`A \le B \le C` and presenting an orientation with respect to the 
    17 scattering vector given by |theta| and |phi|, where |theta| is the angle 
    18 between the *z* axis and the longest axis of the parallelepiped *C*, and 
    19 |phi| is the angle between the scattering vector (lying in the *xy* plane) 
    20 and the *y* axis, the form factor is given by 
     16$A \le B \le C$ and presenting an orientation with respect to the 
     17scattering vector given by $\theta$ and $\phi$, where $\theta$ is the angle 
     18between the $z$ axis and the longest axis of the parallelepiped $C$, and 
     19$\phi$ is the angle between the scattering vector (lying in the $xy$ plane) 
     20and the $y$ axis, the form factor is given by 
    2121 
    2222.. math:: 
    23   P(q) =  \frac{1}{V^2} \frac{2}{\pi} \int_0^{\frac{\pi}{2}} 
    24   \int_0^{\frac{\pi}{2}} [A_L(q)+A_T(q)]^2 \sin\theta d\theta d\phi 
     23 
     24    P(q) = \frac{1}{V^2} \frac{2}{\pi} \int_0^{\frac{\pi}{2}} 
     25           \int_0^{\frac{\pi}{2}} [A_L(q)+A_T(q)]^2 \sin\theta\,d\theta\,d\phi 
    2526 
    2627where 
    2728 
    2829.. math:: 
    29   V = 2AB + 2AC + 2BC 
    3030 
    31 .. math:: 
    32   A_L(q) =  8 \times \frac{ \sin \bigl( q \frac{A}{2} \sin\phi \sin\theta \bigr) 
    33                               \sin \bigl( q \frac{B}{2} \cos\phi \sin\theta \bigr) 
    34                               \cos \bigl( q \frac{C}{2} \cos\theta \bigr) } 
    35                             {q^2 \, \sin^2\theta \, \sin\phi \cos\phi} 
    36  
    37 .. math:: 
    38   A_T(q) =  A_F(q) \times \frac{2 \, \sin \bigl( q \frac{C}{2} \cos\theta \bigr)}{q \, \cos\theta} 
     31    V &= 2AB + 2AC + 2BC \\ 
     32    A_L(q) &=  8 \times \frac{ 
     33            \sin \left( \tfrac{1}{2} q A \sin\phi \sin\theta \right) 
     34            \sin \left( \tfrac{1}{2} q B \cos\phi \sin\theta \right) 
     35            \cos \left( \tfrac{1}{2} q C \cos\theta \right) 
     36        }{q^2 \, \sin^2\theta \, \sin\phi \cos\phi} \\ 
     37    A_T(q) &=  A_F(q) \times 
     38      \frac{2\,\sin \left( \tfrac{1}{2} q C \cos\theta \right)}{q\,\cos\theta} 
    3939 
    4040and 
    4141 
    4242.. math:: 
    43   A_F(q) =  4 \frac{ \cos \bigl( q \frac{A}{2} \sin\phi \sin\theta \bigr) 
    44                        \sin \bigl( q \frac{B}{2} \cos\phi \sin\theta \bigr) } 
     43 
     44  A_F(q) =  4 \frac{ \cos \left( \tfrac{1}{2} q A \sin\phi \sin\theta \right) 
     45                       \sin \left( \tfrac{1}{2} q B \cos\phi \sin\theta \right) } 
    4546                     {q \, \cos\phi \, \sin\theta} + 
    46               4 \frac{ \sin \bigl( q \frac{A}{2} \sin\phi \sin\theta \bigr) 
    47                        \cos \bigl( q \frac{B}{2} \cos\phi \sin\theta \bigr) } 
     47              4 \frac{ \sin \left( \tfrac{1}{2} q A \sin\phi \sin\theta \right) 
     48                       \cos \left( \tfrac{1}{2} q B \cos\phi \sin\theta \right) } 
    4849                     {q \, \sin\phi \, \sin\theta} 
    4950 
     
    5152 
    5253.. math:: 
    53   I(q) = \mbox{scale} \times V \times (\rho_{\mbox{p}} - \rho_{\mbox{solvent}})^2 \times P(q) 
    5454 
    55 where *V* is the volume of the rectangular prism, :math:`\rho_{\mbox{p}}` 
    56 is the scattering length of the parallelepiped, :math:`\rho_{\mbox{solvent}}` 
     55  I(q) = \text{scale} \times V \times (\rho_\text{p} - \rho_\text{solvent})^2 \times P(q) 
     56 
     57where $V$ is the volume of the rectangular prism, $\rho_\text{p}$ 
     58is the scattering length of the parallelepiped, $\rho_\text{solvent}$ 
    5759is the scattering length of the solvent, and (if the data are in absolute 
    5860units) *scale* represents the volume fraction (which is unitless). 
     
    127129# parameters for demo 
    128130demo = dict(scale=1, background=0, 
    129             sld=6.3e-6, sld_solvent=1.0e-6, 
     131            sld=6.3, sld_solvent=1.0, 
    130132            length_a=35, b2a_ratio=1, c2a_ratio=1, 
    131133            length_a_pd=0.1, length_a_pd_n=10, 
  • sasmodels/models/rectangular_prism.c

    r3a48772 rab2aea8  
    1515    double c2a_ratio) 
    1616{ 
    17     double termA, termB, termC; 
    18      
    19     double b_side = length_a * b2a_ratio; 
    20     double c_side = length_a * c2a_ratio; 
    21     double volume = length_a * b_side * c_side; 
    22     double a_half = 0.5 * length_a; 
    23     double b_half = 0.5 * b_side; 
    24     double c_half = 0.5 * c_side; 
     17    const double length_b = length_a * b2a_ratio; 
     18    const double length_c = length_a * c2a_ratio; 
     19    const double a_half = 0.5 * length_a; 
     20    const double b_half = 0.5 * length_b; 
     21    const double c_half = 0.5 * length_c; 
    2522 
    2623   //Integration limits to use in Gaussian quadrature 
    27     double v1a = 0.0; 
    28     double v1b = M_PI_2;  //theta integration limits 
    29     double v2a = 0.0; 
    30     double v2b = M_PI_2;  //phi integration limits 
     24    const double v1a = 0.0; 
     25    const double v1b = M_PI_2;  //theta integration limits 
     26    const double v2a = 0.0; 
     27    const double v2b = M_PI_2;  //phi integration limits 
    3128     
    32     //Order of integration 
    33     int nordi=76;                                
    34     int nordj=76; 
     29    double outer_sum = 0.0; 
     30    for(int i=0; i<76; i++) { 
     31        const double theta = 0.5 * ( Gauss76Z[i]*(v1b-v1a) + v1a + v1b ); 
     32        double sin_theta, cos_theta; 
     33        SINCOS(theta, sin_theta, cos_theta); 
    3534 
    36     double sumi = 0.0; 
    37      
    38     for(int i=0; i<nordi; i++) { 
     35        const double termC = sinc(q * c_half * cos_theta); 
    3936 
    40             double theta = 0.5 * ( Gauss76Z[i]*(v1b-v1a) + v1a + v1b );  
     37        double inner_sum = 0.0; 
     38        for(int j=0; j<76; j++) { 
     39            double phi = 0.5 * ( Gauss76Z[j]*(v2b-v2a) + v2a + v2b ); 
     40            double sin_phi, cos_phi; 
     41            SINCOS(phi, sin_phi, cos_phi); 
    4142 
    42             double arg = q * c_half * cos(theta); 
    43             if (fabs(arg) > 1.e-16) {termC = sin(arg)/arg;} else {termC = 1.0;}   
    44  
    45             double sumj = 0.0; 
    46          
    47             for(int j=0; j<nordj; j++) { 
    48  
    49             double phi = 0.5 * ( Gauss76Z[j]*(v2b-v2a) + v2a + v2b );  
    50  
    51                 // Amplitude AP from eqn. (12), rewritten to avoid round-off effects when arg=0 
    52  
    53                 arg = q * a_half * sin(theta) * sin(phi);  
    54                 if (fabs(arg) > 1.e-16) {termA = sin(arg)/arg;} else {termA = 1.0;} 
    55                 
    56                 arg = q * b_half * sin(theta) * cos(phi);  
    57                 if (fabs(arg) > 1.e-16) {termB = sin(arg)/arg;} else {termB = 1.0;}        
    58                 
    59                 double AP = termA * termB * termC;   
    60  
    61                 sumj += Gauss76Wt[j] * (AP*AP); 
    62  
    63             } 
    64  
    65             sumj = 0.5 * (v2b-v2a) * sumj; 
    66             sumi += Gauss76Wt[i] * sumj * sin(theta); 
    67  
     43            // Amplitude AP from eqn. (12), rewritten to avoid round-off effects when arg=0 
     44            const double termA = sinc(q * a_half * sin_theta * sin_phi); 
     45            const double termB = sinc(q * b_half * sin_theta * cos_phi); 
     46            const double AP = termA * termB * termC; 
     47            inner_sum += Gauss76Wt[j] * AP * AP; 
     48        } 
     49        inner_sum = 0.5 * (v2b-v2a) * inner_sum; 
     50        outer_sum += Gauss76Wt[i] * inner_sum * sin_theta; 
    6851    } 
    6952 
    70     double answer = 0.5*(v1b-v1a)*sumi; 
     53    double answer = 0.5*(v1b-v1a)*outer_sum; 
    7154 
    7255    // Normalize by Pi (Eqn. 16).  
     
    7861 
    7962    // Multiply by contrast^2 and volume^2 
    80     answer *= (sld-solvent_sld)*(sld-solvent_sld)*volume*volume; 
     63    const double volume = length_a * length_b * length_c; 
     64    answer *= square((sld-solvent_sld)*volume); 
    8165 
    8266    // Convert from [1e-12 A-1] to [cm-1]  
     
    8468 
    8569    return answer; 
    86      
    8770} 
  • sasmodels/models/rectangular_prism.py

    r2941abf rab2aea8  
    128128# parameters for demo 
    129129demo = dict(scale=1, background=0, 
    130             sld=6.3e-6, sld_solvent=1.0e-6, 
     130            sld=6.3, sld_solvent=1.0, 
    131131            length_a=35, b2a_ratio=1, c2a_ratio=1, 
    132132            length_a_pd=0.1, length_a_pd_n=10, 
Note: See TracChangeset for help on using the changeset viewer.