Changeset 71b751d in sasmodels for sasmodels/models/elliptical_cylinder.c


Ignore:
Timestamp:
Aug 14, 2018 10:09:34 AM (6 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master, core_shell_microgels, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
Children:
86aa992
Parents:
2f8cbb9
Message:

update remaining form factors to use Fq interface

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/models/elliptical_cylinder.c

    r108e70e r71b751d  
    55} 
    66 
    7 static double 
    8 Iq(double q, double radius_minor, double r_ratio, double length, 
     7static void 
     8Fq(double q, double *F1, double *F2, double radius_minor, double r_ratio, double length, 
    99   double sld, double solvent_sld) 
    1010{ 
     
    2121 
    2222    //initialize integral 
    23     double outer_sum = 0.0; 
     23    double outer_sum_F1 = 0.0; 
     24    double outer_sum_F2 = 0.0; 
    2425    for(int i=0;i<GAUSS_N;i++) { 
    2526        //setup inner integral over the ellipsoidal cross-section 
     
    2728        const double sin_val = sqrt(1.0 - cos_val*cos_val); 
    2829        //const double arg = radius_minor*sin_val; 
    29         double inner_sum=0; 
     30        double inner_sum_F1 = 0.0; 
     31        double inner_sum_F2 = 0.0; 
    3032        for(int j=0;j<GAUSS_N;j++) { 
    3133            const double theta = ( GAUSS_Z[j]*(vbj-vaj) + vaj + vbj )/2.0; 
    3234            const double r = sin_val*sqrt(rA - rB*cos(theta)); 
    3335            const double be = sas_2J1x_x(q*r); 
    34             inner_sum += GAUSS_W[j] * be * be; 
     36            inner_sum_F1 += GAUSS_W[j] * be; 
     37            inner_sum_F2 += GAUSS_W[j] * be * be; 
    3538        } 
    3639        //now calculate the value of the inner integral 
    37         inner_sum *= 0.5*(vbj-vaj); 
     40        inner_sum_F1 *= 0.5*(vbj-vaj); 
     41        inner_sum_F2 *= 0.5*(vbj-vaj); 
    3842 
    3943        //now calculate outer integral 
    4044        const double si = sas_sinx_x(q*0.5*length*cos_val); 
    41         outer_sum += GAUSS_W[i] * inner_sum * si * si; 
     45        outer_sum_F1 += GAUSS_W[i] * inner_sum_F1 * si; 
     46        outer_sum_F2 += GAUSS_W[i] * inner_sum_F2 * si * si; 
    4247    } 
    43     outer_sum *= 0.5*(vb-va); 
    44  
    45     //divide integral by Pi 
    46     const double form = outer_sum/M_PI; 
     48    // correct limits and divide integral by pi 
     49    outer_sum_F1 *= 0.5*(vb-va)/M_PI; 
     50    outer_sum_F2 *= 0.5*(vb-va)/M_PI; 
    4751 
    4852    // scale by contrast and volume, and convert to to 1/cm units 
    49     const double vol = form_volume(radius_minor, r_ratio, length); 
    50     const double delrho = sld - solvent_sld; 
    51     return 1.0e-4*square(delrho*vol)*form; 
     53    const double volume = form_volume(radius_minor, r_ratio, length); 
     54    const double contrast = sld - solvent_sld; 
     55    const double s = contrast*volume; 
     56    *F1 = 1.0e-2*s*outer_sum_F1; 
     57    *F2 = 1.0e-4*s*s*outer_sum_F2; 
    5258} 
    5359 
     
    6369    const double be = sas_2J1x_x(qr); 
    6470    const double si = sas_sinx_x(qc*0.5*length); 
    65     const double Aq = be * si; 
    66     const double delrho = sld - solvent_sld; 
    67     const double vol = form_volume(radius_minor, r_ratio, length); 
    68     return 1.0e-4 * square(delrho * vol * Aq); 
     71    const double fq = be * si; 
     72    const double contrast = sld - solvent_sld; 
     73    const double volume = form_volume(radius_minor, r_ratio, length); 
     74    return 1.0e-4 * square(contrast * volume * fq); 
    6975} 
Note: See TracChangeset for help on using the changeset viewer.