Changeset 975ec8e in sasview for sansmodels/src/libigor


Ignore:
Timestamp:
Aug 14, 2009 5:58:58 PM (15 years ago)
Author:
Jae Cho <jhjcho@…>
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:
d5bd424
Parents:
cad821b
Message:

working on 2D models. Still need smore corrections and unit tests.

Location:
sansmodels/src/libigor
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • sansmodels/src/libigor/libCylinder.c

    r96b59384 r975ec8e  
    8080        double va,vb;           //upper and lower integration limits 
    8181        double summ,zi,yyy,answer,vell;                 //running tally of integration 
    82         double summj,vaj,vbj,zij,arg;                   //for the inner integration 
     82        double summj,vaj,vbj,zij,arg, si;                       //for the inner integration 
    8383 
    8484        Pi = 4.0*atan(1.0); 
     
    114114                //now calculate outer integral 
    115115                arg = q*length*zi/2; 
    116                 yyy = Gauss76Wt[i] * answer * sin(arg) * sin(arg) / arg / arg; 
     116                if (arg == 0){ 
     117                        si = 1; 
     118                }else{ 
     119                        si = sin(arg) * sin(arg) / arg / arg; 
     120                } 
     121                yyy = Gauss76Wt[i] * answer * si; 
    117122                summ += yyy; 
    118123        } 
     
    155160        double va,vb;           //upper and lower integration limits 
    156161        double summ,zi,yyy,answer,vell;                 //running tally of integration 
    157         double summj,vaj,vbj,zij,arg;                   //for the inner integration 
     162        double summj,vaj,vbj,zij,arg,si;                        //for the inner integration 
    158163 
    159164        Pi = 4.0*atan(1.0); 
     
    189194                //now calculate outer integral 
    190195                arg = q*length*zi/2; 
    191                 yyy = Gauss76Wt[i] * answer * sin(arg) * sin(arg) / arg / arg; 
     196                if (arg == 0){ 
     197                        si = 1; 
     198                }else{ 
     199                        si = sin(arg) * sin(arg) / arg / arg; 
     200                } 
     201                yyy = Gauss76Wt[i] * answer * si; 
    192202                summ += yyy; 
    193203        } 
     
    893903        return(inten+bkg); 
    894904} 
    895  
     905/*      LamellarFFX  :  calculates the form factor of a lamellar structure - no S(q) effects included 
     906                                                -NO polydispersion included 
     907*/ 
     908double lamellar_kernel(double dp[], double q){ 
     909        double scale,del,sld_bi,sld_sol,contr,bkg;              //local variables of coefficient wave 
     910        double inten, qval,Pq; 
     911        double Pi; 
     912 
     913 
     914        Pi = 4.0*atan(1.0); 
     915        scale = dp[0]; 
     916        del = dp[1]; 
     917        sld_bi = dp[2]; 
     918        sld_sol = dp[3]; 
     919        bkg = dp[4]; 
     920        qval = q; 
     921        contr = sld_bi -sld_sol; 
     922 
     923        Pq = 2.0*contr*contr/qval/qval*(1.0-cos(qval*del)); 
     924 
     925        inten = 2.0*Pi*scale*Pq/(qval*qval);            //this is now dimensionless... 
     926 
     927        inten /= del;                   //normalize by the thickness (in A) 
     928 
     929        inten *= 1.0e8;         // 1/A to 1/cm 
     930 
     931        return(inten+bkg); 
     932} 
    896933/*      LamellarPSX  :  calculates the form factor of a lamellar structure - with S(q) effects included 
    897934------- 
     
    16821719{ 
    16831720        // local variables 
    1684         double aa,bb,u2,ut2,uq,ut,vc,vt,gfnc,gfnt,gfn2,pi43,gfn,Pi; 
     1721        double aa,bb,u2,ut2,uq,ut,vc,vt,siq,sit,gfnc,gfnt,gfn2,pi43,gfn,Pi; 
    16851722 
    16861723        Pi = 4.0*atan(1.0); 
     
    16951732        vc = pi43*aa*bb*bb; 
    16961733        vt = pi43*trmaj*trmin*trmin; 
    1697         gfnc = 3.0*(sin(uq)/uq/uq - cos(uq)/uq)/uq*vc*delpc; 
    1698         gfnt = 3.0*(sin(ut)/ut/ut - cos(ut)/ut)/ut*vt*delps; 
     1734        if (uq == 0){ 
     1735                siq = 1/3; 
     1736        }else{ 
     1737                siq = (sin(uq)/uq/uq - cos(uq)/uq)/uq; 
     1738        } 
     1739        if (ut == 0){ 
     1740                sit = 1/3; 
     1741        }else{ 
     1742                sit = (sin(ut)/ut/ut - cos(ut)/ut)/ut; 
     1743        } 
     1744        gfnc = 3.0*siq*vc*delpc; 
     1745        gfnt = 3.0*sit*vt*delps; 
    16991746        gfn = gfnc+gfnt; 
    17001747        gfn2 = gfn*gfn; 
     
    17141761{ 
    17151762        // local variables 
    1716         double aa,bb,u2,ut2,uq,ut,vc,vt,gfnc,gfnt,tgfn,gfn4,pi43,Pi; 
     1763        double aa,bb,u2,ut2,uq,ut,vc,vt,siq,sit,gfnc,gfnt,tgfn,gfn4,pi43,Pi; 
    17171764 
    17181765        Pi = 4.0*atan(1.0); 
     
    17261773        vc = pi43*aa*aa*bb; 
    17271774        vt = pi43*trmaj*trmaj*trmin; 
    1728         gfnc = 3.0*(sin(uq)/uq/uq - cos(uq)/uq)/uq*vc*delpc; 
    1729         gfnt = 3.0*(sin(ut)/ut/ut - cos(ut)/ut)/ut*vt*delps; 
     1775        if (uq == 0){ 
     1776                siq = 1/3; 
     1777        }else{ 
     1778                siq = (sin(uq)/uq/uq - cos(uq)/uq)/uq; 
     1779        } 
     1780        if (ut == 0){ 
     1781                sit = 1/3; 
     1782        }else{ 
     1783                sit = (sin(ut)/ut/ut - cos(ut)/ut)/ut; 
     1784        } 
     1785        gfnc = 3.0*siq*vc*delpc; 
     1786        gfnt = 3.0*sit*vt*delps; 
    17301787        tgfn = gfnc+gfnt; 
    17311788        gfn4 = tgfn*tgfn; 
     
    17441801 
    17451802    Pq = Sk_WR(q,zi,lb);                //does not have cross section term 
    1746     Pq *= (2.0*NR_BessJ1(qr)/qr)*(2.0*NR_BessJ1(qr)/qr); 
    1747  
     1803    if (qr !=0){ 
     1804        Pq *= (2.0*NR_BessJ1(qr)/qr)*(2.0*NR_BessJ1(qr)/qr); 
     1805    } //else Pk *=1; 
    17481806    vcyl=Pi*radius*radius*zi; 
    17491807    Pq *= vcyl*vcyl; 
     
    17641822 
    17651823    Pq = Sk_WR(q,Lc,Lb);                //does not have cross section term 
    1766     Pq *= (2.0*NR_BessJ1(qr)/qr)*(2.0*NR_BessJ1(qr)/qr); 
     1824    if (qr !=0){ 
     1825        Pq *= (2.0*NR_BessJ1(qr)/qr)*(2.0*NR_BessJ1(qr)/qr); 
     1826    } 
    17671827 
    17681828    vcyl=Pi*zi*zi*Lc; 
     
    18111871        // dum is the dummy variable for the integration (theta) 
    18121872 
    1813         double dr1,dr2,besarg1,besarg2,vol1,vol2,sinarg1,sinarg2,t1,t2,retval; 
     1873        double dr1,dr2,besarg1,besarg2,vol1,vol2,sinarg1,sinarg2,si1,si2,be1,be2,t1,t2,retval; 
    18141874        double Pi; 
    18151875 
     
    18251885        sinarg1 = qq*length*cos(dum); 
    18261886        sinarg2 = qq*(length+facthick)*cos(dum); 
    1827  
    1828         t1 = 2.0*vol1*dr1*sin(sinarg1)/sinarg1*NR_BessJ1(besarg1)/besarg1; 
    1829         t2 = 2.0*vol2*dr2*sin(sinarg2)/sinarg2*NR_BessJ1(besarg2)/besarg2; 
     1887        if (besarg1 == 0){ 
     1888                be1 = 0.5; 
     1889        }else{ 
     1890                be1 = NR_BessJ1(besarg1)/besarg1; 
     1891        } 
     1892        if (besarg2 == 0){ 
     1893                be2 = 0.5; 
     1894        }else{ 
     1895                be2 = NR_BessJ1(besarg2)/besarg2; 
     1896        } 
     1897        if (sinarg1 == 0){ 
     1898                si1 = 1; 
     1899        }else{ 
     1900                si1 = sin(sinarg1)/sinarg1; 
     1901        } 
     1902        if (besarg2 == 0){ 
     1903                si2 = 1; 
     1904        }else{ 
     1905                si2 = sin(sinarg2)/sinarg2; 
     1906        } 
     1907 
     1908        t1 = 2.0*vol1*dr1*si1*be1; 
     1909        t2 = 2.0*vol2*dr2*si2*be2; 
    18301910 
    18311911        retval = ((t1+t2)*(t1+t2))*sin(dum); 
     
    18391919{ 
    18401920 
    1841     double dr1,dr2,besarg1,besarg2,vol1,vol2,sinarg1,sinarg2,t1,t2,retval; 
     1921    double dr1,dr2,besarg1,besarg2,vol1,vol2,sinarg1,sinarg2,si1,si2,be1,be2,t1,t2,retval; 
    18421922    double Pi; 
    18431923 
     
    18541934    sinarg2 = qq*(length+thick)*cos(dum); 
    18551935 
    1856     t1 = 2.0*vol1*dr1*sin(sinarg1)/sinarg1*NR_BessJ1(besarg1)/besarg1; 
    1857     t2 = 2.0*vol2*dr2*sin(sinarg2)/sinarg2*NR_BessJ1(besarg2)/besarg2; 
     1936        if (besarg1 == 0){ 
     1937                be1 = 0.5; 
     1938        }else{ 
     1939                be1 = NR_BessJ1(besarg1)/besarg1; 
     1940        } 
     1941        if (besarg2 == 0){ 
     1942                be2 = 0.5; 
     1943        }else{ 
     1944                be2 = NR_BessJ1(besarg2)/besarg2; 
     1945        } 
     1946        if (sinarg1 == 0){ 
     1947                si1 = 1; 
     1948        }else{ 
     1949                si1 = sin(sinarg1)/sinarg1; 
     1950        } 
     1951        if (besarg2 == 0){ 
     1952                si2 = 1; 
     1953        }else{ 
     1954                si2 = sin(sinarg2)/sinarg2; 
     1955        } 
     1956 
     1957    t1 = 2.0*vol1*dr1*si1*be1; 
     1958    t2 = 2.0*vol2*dr2*si2*be2; 
    18581959 
    18591960    retval = ((t1+t2)*(t1+t2))*sin(dum); 
     
    19062007 
    19072008        //Local variables 
    1908         double totald,dr1,dr2,besarg1,besarg2,area,sinarg1,sinarg2,t1,t2,retval,sqq,dexpt; 
     2009        double totald,dr1,dr2,besarg1,besarg2,be1,be2,si1,si2,area,sinarg1,sinarg2,t1,t2,retval,sqq,dexpt; 
    19092010        double Pi; 
    19102011        int kk; 
     
    19232024        sinarg2 = qq*(length+thick)*cos(dum); 
    19242025 
    1925         t1 = 2*area*(2*length)*dr1*(sin(sinarg1)/sinarg1)*(NR_BessJ1(besarg1)/besarg1); 
    1926         t2 = 2*area*dr2*(totald*sin(sinarg2)/sinarg2-2*length*sin(sinarg1)/sinarg1)*(NR_BessJ1(besarg2)/besarg2); 
     2026        if (besarg1 == 0){ 
     2027                be1 = 0.5; 
     2028        }else{ 
     2029                be1 = NR_BessJ1(besarg1)/besarg1; 
     2030        } 
     2031        if (besarg2 == 0){ 
     2032                be2 = 0.5; 
     2033        }else{ 
     2034                be2 = NR_BessJ1(besarg2)/besarg2; 
     2035        } 
     2036        if (sinarg1 == 0){ 
     2037                si1 = 1; 
     2038        }else{ 
     2039                si1 = sin(sinarg1)/sinarg1; 
     2040        } 
     2041        if (besarg2 == 0){ 
     2042                si2 = 1; 
     2043        }else{ 
     2044                si2 = sin(sinarg2)/sinarg2; 
     2045        } 
     2046 
     2047        t1 = 2*area*(2*length)*dr1*(si1)*(be1); 
     2048        t2 = 2*area*dr2*(totald*si2-2*length*si1)*(be2); 
    19272049 
    19282050        retval =((t1+t2)*(t1+t2))*sin(dum); 
     
    19372059        // end of loop for S(q) 
    19382060        sqq=1.0+2.0*sqq/N; 
     2061 
    19392062        retval *= sqq; 
    19402063 
     
    20162139    nu = nua/a; 
    20172140    arg = qq*a*sqrt(1+dum*dum*(nu*nu-1)); 
    2018  
    2019     retval = (sin(arg)-arg*cos(arg))/(arg*arg*arg); 
     2141    if (arg == 0){ 
     2142        retval =1/3; 
     2143    }else{ 
     2144        retval = (sin(arg)-arg*cos(arg))/(arg*arg*arg); 
     2145    } 
    20202146    retval *= retval; 
    20212147    retval *= 9; 
     
    20322158    arg1 = qq*rshell*sqrt(1-dum*dum);           //1=shell (outer radius) 
    20332159    arg2 = qq*rcore*sqrt(1-dum*dum);                    //2=core (inner radius) 
    2034     lam1 = 2*NR_BessJ1(arg1)/arg1; 
    2035     lam2 = 2*NR_BessJ1(arg2)/arg2; 
     2160    if (arg1 == 0){ 
     2161        lam1 = 1; 
     2162    }else{ 
     2163        lam1 = 2*NR_BessJ1(arg1)/arg1; 
     2164    } 
     2165    if (arg2 == 0){ 
     2166        lam2 = 1; 
     2167    }else{ 
     2168        lam2 = 2*NR_BessJ1(arg2)/arg2; 
     2169    } 
     2170    //Todo: Need to check psi behavior as gamma goes to 1. 
    20362171    psi = 1/(1-gamma*gamma)*(lam1 -  gamma*gamma*lam2);         //SRK 10/19/00 
    2037  
    20382172    sinarg = qq*length*dum/2; 
    2039     t2 = sin(sinarg)/sinarg; 
     2173    if (sinarg == 0){ 
     2174        t2 = 1; 
     2175    }else{ 
     2176        t2 = sin(sinarg)/sinarg; 
     2177    } 
    20402178 
    20412179    retval = psi*psi*t2*t2; 
     
    20842222    arg += cc*cc*dy*dy; 
    20852223    arg = q*sqrt(arg); 
    2086     val = 9 * ( (sin(arg) - arg*cos(arg))/(arg*arg*arg) ) * ( (sin(arg) - arg*cos(arg))/(arg*arg*arg) ); 
    2087  
     2224    if (arg == 0){ 
     2225        val = 1; // as arg --> 0, val should go to 1.0 
     2226    }else{ 
     2227        val = 9 * ( (sin(arg) - arg*cos(arg))/(arg*arg*arg) ) * ( (sin(arg) - arg*cos(arg))/(arg*arg*arg) ); 
     2228    } 
    20882229    return (val); 
    20892230 
     
    20992240        // h is the HALF-LENGTH of the cylinder = L/2 (A) 
    21002241 
    2101     double besarg,bj,retval,d1,t1,b1,t2,b2;              //Local variables 
     2242    double besarg,bj,retval,d1,t1,b1,t2,b2,siarg,be,si;          //Local variables 
    21022243 
    21032244 
    21042245    besarg = qq*rr*sin(theta); 
    2105  
     2246    siarg = qq * h * cos(theta); 
    21062247    bj =NR_BessJ1(besarg); 
    21072248 
    21082249        //* Computing 2nd power */ 
    2109     d1 = sin(qq * h * cos(theta)); 
     2250    d1 = sin(siarg); 
    21102251    t1 = d1 * d1; 
    21112252        //* Computing 2nd power */ 
     
    21132254    t2 = d1 * d1 * 4.0 * sin(theta); 
    21142255        //* Computing 2nd power */ 
    2115     d1 = qq * h * cos(theta); 
     2256    d1 = siarg; 
    21162257    b1 = d1 * d1; 
    21172258        //* Computing 2nd power */ 
    21182259    d1 = qq * rr * sin(theta); 
    21192260    b2 = d1 * d1; 
    2120     retval = t1 * t2 / b1 / b2; 
     2261    if (besarg == 0){ 
     2262        be = sin(theta); 
     2263    }else{ 
     2264        be = t2 / b2; 
     2265    } 
     2266    if (siarg == 0){ 
     2267        si = 1; 
     2268    }else{ 
     2269        si = t1 / b1; 
     2270    } 
     2271    retval = be * si; 
    21212272 
    21222273    return (retval); 
     
    21362287 
    21372288        arg = qq*ra*sqrt((1+nu*nu)/2+(1-nu*nu)*cos(theta)/2); 
    2138  
    2139         retval = 2*NR_BessJ1(arg)/arg; 
     2289        if (arg == 0){ 
     2290                retval = 1; 
     2291        }else{ 
     2292                retval = 2*NR_BessJ1(arg)/arg; 
     2293        } 
    21402294 
    21412295        //square it 
  • sansmodels/src/libigor/libCylinder.h

    rae3ce4e r975ec8e  
    3434double EllipCylKernel(double qq, double ra,double nu, double theta); 
    3535double TriaxialKernel(double q, double aa, double bb, double cc, double dx, double dy); 
     36double lamellar_kernel(double dp[], double q); 
    3637double PPKernel(double aa, double mu, double uu); 
    3738double HolCylKernel(double qq, double rcore, double rshell, double length, double dum); 
  • sansmodels/src/libigor/libSphere.c

    rae3ce4e r975ec8e  
    1414{ 
    1515        double scale,radius,delrho,bkg;         //my local names 
    16         double bes,f,vol,f2,pi; 
    17          
     16        double bes,f,vol,f2,pi,qr; 
     17 
    1818        pi = 4.0*atan(1.0); 
    1919        scale = dp[0]; 
     
    2121        delrho = dp[2]; 
    2222        bkg = dp[3]; 
    23         //handle q==0 separately 
    24         if(q==0){ 
    25                 f = 4.0/3.0*pi*radius*radius*radius*delrho*delrho*scale*1.0e8 + bkg; 
    26                 return(f); 
     23 
     24        qr = q*radius; 
     25        if(qr == 0){ 
     26                bes = 1.0; 
     27        }else{ 
     28                bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 
    2729        } 
    28          
    29         bes = 3.0*(sin(q*radius)-q*radius*cos(q*radius))/(q*q*q)/(radius*radius*radius); 
     30 
    3031        vol = 4.0*pi/3.0*radius*radius*radius; 
    3132        f = vol*bes*delrho;             // [=] A-1 
    3233                                                        // normalize to single particle volume, convert to 1/cm 
    3334        f2 = f * f / vol * 1.0e8;               // [=] 1/cm 
    34          
     35 
    3536        return(scale*f2+bkg);   //scale, and add in the background 
    3637} 
     
    4344        double scale,rcore,thick,rhocore,rhoshel,rhosolv,bkg;           //my local names 
    4445        double bes,f,vol,qr,contr,f2; 
    45          
     46 
    4647        pi = 4.0*atan(1.0); 
    4748        x=q; 
    48          
     49 
    4950        scale = dp[0]; 
    5051        rcore = dp[1]; 
     
    5758        qr=x*rcore; 
    5859        contr = rhocore-rhoshel; 
    59         bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 
     60        if(qr == 0){ 
     61                bes = 1.0; 
     62        }else{ 
     63                bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 
     64        } 
    6065        vol = 4.0*pi/3.0*rcore*rcore*rcore; 
    6166        f = vol*bes*contr; 
     
    6368        qr=x*(rcore+thick); 
    6469        contr = rhoshel-rhosolv; 
    65         bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 
     70        if(qr == 0){ 
     71                bes = 1.0; 
     72        }else{ 
     73                bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 
     74        } 
    6675        vol = 4.0*pi/3.0*pow((rcore+thick),3); 
    6776        f += vol*bes*contr; 
    68          
     77 
    6978        // normalize to particle volume and rescale from [A-1] to [cm-1] 
    7079        f2 = f*f/vol*1.0e8; 
    71          
     80 
    7281        //scale if desired 
    7382        f2 *= scale; 
    7483        // then add in the background 
    7584        f2 += bkg; 
    76          
     85 
    7786        return(f2); 
    7887} 
     
    8897        pi = 4.0*atan(1.0); 
    8998        x= q; 
    90          
     99 
    91100        scale = dp[0]; 
    92101        rcore = dp[1]; 
     
    99108        qr=x*rcore; 
    100109        contr = rhocore-rhoshel; 
    101         bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 
     110        if(qr == 0){ 
     111                bes = 1.0; 
     112        }else{ 
     113                bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 
     114        } 
    102115        vol = 4.0*pi/3.0*rcore*rcore*rcore; 
    103116        f = vol*bes*contr; 
     
    105118        qr=x*(rcore+thick); 
    106119        contr = rhoshel-rhosolv; 
    107         bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 
     120        if(qr == 0){ 
     121                bes = 1.0; 
     122        }else{ 
     123                bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 
     124        } 
    108125        vol = 4.0*pi/3.0*pow((rcore+thick),3); 
    109126        f += vol*bes*contr; 
    110          
     127 
    111128        // normalize to the particle volume and rescale from [A-1] to [cm-1] 
    112129        //note that for the vesicle model, the volume is ONLY the shell volume 
    113130        vol = 4.0*pi/3.0*(pow((rcore+thick),3)-pow(rcore,3)); 
    114131        f2 = f*f/vol*1.0e8; 
    115          
     132 
    116133        //scale if desired 
    117134        f2 *= scale; 
    118135        // then add in the background 
    119136        f2 += bkg; 
    120          
     137 
    121138        return(f2); 
    122139} 
     
    135152        double zp3,vpoly; 
    136153        double s2y, arg1, arg2, arg3, drh1, drh2; 
    137          
     154 
    138155        pi = 4.0*atan(1.0); 
    139156        qq= q; 
     
    145162        drho2 = dp[5]-dp[6];            //shell-solvent 
    146163        bkg = dp[7]; 
    147          
    148         zz = (1.0/sig)*(1.0/sig) - 1.0;    
    149          
     164 
     165        zz = (1.0/sig)*(1.0/sig) - 1.0; 
     166 
    150167        h=qq; 
    151          
     168 
    152169        drh1 = drho1; 
    153170        drh2 = drho2; 
     
    157174        zp3 = zz + 3.; 
    158175        vpoly = 4*pi/3*zp3*zp2/zp1/zp1*pow((corrad+del),3); 
    159          
    160          
     176 
     177 
    161178        // remember that h is the passed in value of q for the calculation 
    162179        y = h *del; 
     
    179196        c8 = c4 - .5 + g * cy - g * .5 * g * (y * y + 1.) * c2y; 
    180197        c9 = g * sy * (1. - g * cy); 
    181          
     198 
    182199        tb = log(zp1 * zp1 / (zp1 * zp1 + x * 4. * x)); 
    183200        tb1 = exp(zp1 * .5 * tb); 
    184201        tb2 = exp(zp2 * .5 * tb); 
    185202        tb3 = exp(zp3 * .5 * tb); 
    186          
     203 
    187204        t1 = c1 + c2 * x + c3 * x * x * zp2 / zp1; 
    188205        t2 = tb1 * (c4 * cos(arg1) + c7 * sin(arg1)); 
     
    199216        // then add in the background 
    200217        form += bkg; 
    201          
     218 
    202219        return(form); 
    203220} 
     
    218235        double ka2,r1,heff; 
    219236        double hh,k; 
    220          
     237 
    221238        pi = 4.0*atan(1.0); 
    222239        k= q; 
    223          
     240 
    224241        rad = dp[0];            // radius (A) 
    225242        z2 = dp[1];             //polydispersity (0<z2<1) 
     
    228245        bkg = dp[4]; 
    229246        sigma = 2*rad; 
    230          
     247 
    231248        zz=1.0/(z2*z2)-1.0; 
    232249        bb = sigma/(zz+1.0); 
    233250        cc = zz+1.0; 
    234          
     251 
    235252        //*c   Compute the number density by <r-cubed>, not <r> cubed*/ 
    236253        r1 = sigma/2.0; 
     
    264281        d5=pow((pi/capd),2)*((rho/k)*(chi-1.0)+0.5*k*t2); 
    265282        d6=pow((pi/capd),2)*(rho/k)*(chi2-s2); 
    266          
     283 
    267284        e1=pow((pi/capd),2)*pow((rho/k/k),2)*((chi-1.0)*(chi2-s2)-(chi1-s1)*(chi1-s1)-(k*s1-pp)*(k*s3-p2)+pow((k*s2-p1),2)); 
    268285        ee=1.0-(2.0*pi/capd)*(1.0+0.5*pi*t3/capd)*(rho/k/k/k)*(k*s1-pp)-(2.0*pi/capd)*rho/k/k*((chi1-s1)+(0.25*pi*t2/capd)*(chi2-s2))-e1; 
    269286        y1=pow((pi/capd),2)*pow((rho/k/k),2)*((k*s1-pp)*(chi2-s2)-2.0*(k*s2-p1)*(chi1-s1)+(k*s3-p2)*(chi-1.0)); 
    270         yy = (2.0*pi/capd)*(1.0+0.5*pi*t3/capd)*(rho/k/k/k)*(chi+0.5*k*k*s2-1.0)-(2.0*pi*rho/capd/k/k)*(k*s2-p1+(0.25*pi*t2/capd)*(k*s3-p2))-y1;     
    271          
     287        yy = (2.0*pi/capd)*(1.0+0.5*pi*t3/capd)*(rho/k/k/k)*(chi+0.5*k*k*s2-1.0)-(2.0*pi*rho/capd/k/k)*(k*s2-p1+(0.25*pi*t2/capd)*(k*s3-p2))-y1; 
     288 
    272289        capl=2.0*pi*cont*rho/k/k/k*(pp-0.5*k*(s1+chi1)); 
    273290        capl1=2.0*pi*cont*rho/k/k/k*(p1-0.5*k*(s2+chi2)); 
    274291        capmu=2.0*pi*cont*rho/k/k/k*(1.0-chi-0.5*k*p1); 
    275292        capmu1=2.0*pi*cont*rho/k/k/k*(s1-chi1-0.5*k*p2); 
    276          
     293 
    277294        h1=capl*(capl*(yy*d1-ee*d6)+capl1*(yy*d2-ee*d4)+capmu*(ee*d1+yy*d6)+capmu1*(ee*d2+yy*d4)); 
    278295        h2=capl1*(capl*(yy*d2-ee*d4)+capl1*(yy*d3-ee*d5)+capmu*(ee*d2+yy*d4)+capmu1*(ee*d3+yy*d5)); 
    279296        h3=capmu*(capl*(ee*d1+yy*d6)+capl1*(ee*d2+yy*d4)+capmu*(ee*d6-yy*d1)+capmu1*(ee*d4-yy*d2)); 
    280297        h4=capmu1*(capl*(ee*d2+yy*d4)+capl1*(ee*d3+yy*d5)+capmu*(ee*d4-yy*d2)+capmu1*(ee*d5-yy*d3)); 
    281          
     298 
    282299        //*  This part computes the second integral in equation (1) of the paper.*/ 
    283          
     300 
    284301        hint1 = -2.0*(h1+h2+h3+h4)/(k*k*k*(ee*ee+yy*yy)); 
    285          
     302 
    286303        //*  This part computes the first integral in equation (1).  It also 
    287304        // generates the KC approximated effective structure factor.*/ 
    288          
     305 
    289306        pq=4.0*pi*cont*(sin(k*sigma/2.0)-0.5*k*sigma*cos(k*sigma/2.0)); 
    290307        hint2=8.0*pi*pi*rho*cont*cont/(k*k*k*k*k*k)*(1.0-chi-k*p1+0.25*k*k*(s2+chi2)); 
    291          
     308 
    292309        ka=k*(sigma/2.0); 
    293310        // 
     
    297314        ka2=ka*ka; 
    298315        //* 
    299         //  heff is PY analytical solution for intensity divided by the  
     316        //  heff is PY analytical solution for intensity divided by the 
    300317        //   form factor.  happ is the KC approximated effective S(q) 
    301           
     318 
    302319         //******************* 
    303320         //  add in the background then return the intensity value 
    304           
     321 
    305322         return(hh+bkg);        //scale, and add in the background 
    306323} 
     
    315332        double scale,ravg,pd,bkg,rho,rhos;              //my local names 
    316333        double scale2,ravg2,pd2,rho2;           //my local names 
    317          
     334 
    318335        x= q; 
    319          
     336 
    320337        scale = dp[0]; 
    321338        ravg = dp[1]; 
     
    328345        rhos = dp[8]; 
    329346        bkg = dp[9]; 
    330          
     347 
    331348        pq = SchulzSphere_Fn( scale,  ravg,  pd,  rho,  rhos, x); 
    332349        pq += SchulzSphere_Fn( scale2,  ravg2,  pd2,  rho2,  rhos, x); 
    333350        // add in the background 
    334351        pq += bkg; 
    335          
     352 
    336353        return (pq); 
    337354} 
     
    344361        double x,pq; 
    345362        double scale,ravg,pd,bkg,rho,rhos;              //my local names 
    346          
     363 
    347364        x= q; 
    348          
     365 
    349366        scale = dp[0]; 
    350367        ravg = dp[1]; 
     
    356373        // add in the background 
    357374        pq += bkg; 
    358          
     375 
    359376        return(pq); 
    360377} 
     
    367384        double aa,at1,at2,rt1,rt2,rt3,t1,t2,t3; 
    368385        double v1,v2,v3,g1,pq,pi,delrho,zz; 
    369          
     386 
    370387        pi = 4.0*atan(1.0); 
    371388        delrho = rho-rhos; 
    372         zz = (1.0/pd)*(1.0/pd) - 1.0;    
    373          
     389        zz = (1.0/pd)*(1.0/pd) - 1.0; 
     390 
    374391        zp1 = zz + 1.0; 
    375392        zp2 = zz + 2.0; 
     
    381398        // 
    382399        aa = (zz+1)/x/ravg; 
    383          
     400 
    384401        at1 = atan(1.0/aa); 
    385402        at2 = atan(2.0/aa); 
     
    387404        //  calculations are performed to avoid  large # errors 
    388405        // - trick is to propogate the a^(z+7) term through the g1 
    389         //  
     406        // 
    390407        t1 = zp7*log10(aa) - zp1/2.0*log10(aa*aa+4.0); 
    391408        t2 = zp7*log10(aa) - zp3/2.0*log10(aa*aa+4.0); 
     
    399416        v3 = -2.0*zp1*rt3*sin(zp2*at2); 
    400417        g1 = (v1+v2+v3); 
    401          
     418 
    402419        pq = log10(g1) - 6.0*log10(zp1) + 6.0*log10(ravg); 
    403420        pq = pow(10,pq)*8*pi*pi*delrho*delrho; 
    404          
     421 
    405422        // 
    406         // beta factor is not used here, but could be for the  
     423        // beta factor is not used here, but could be for the 
    407424        // decoupling approximation 
    408         //  
     425        // 
    409426        //      g11 = g1 
    410427        //      gd = -zp7*log(aa) 
    411428        //      g1 = log(g11) + gd 
    412         //                        
     429        // 
    413430        //      t1 = zp1*at1 
    414431        //      t2 = zp2*at1 
    415432        //      g2 = sin( t1 ) - zp1/sqrt(aa*aa+1)*cos( t2 ) 
    416433        //      g22 = g2*g2 
    417         //      beta = zp1*log(aa) - zp1*log(aa*aa+1) - g1 + log(g22)  
     434        //      beta = zp1*log(aa) - zp1*log(aa*aa+1) - g1 + log(g22) 
    418435        //      beta = 2*alog(beta) 
    419          
     436 
    420437        //re-normalize by the average volume 
    421438        vpoly = 4.0*pi/3.0*zp3*zp2/zp1/zp1*ravg*ravg*ravg; 
     
    423440        //scale, convert to cm^-1 
    424441        pq *= scale * 1.0e8; 
    425      
     442 
    426443    return(pq); 
    427444} 
     
    435452        double scale,rad,pd,cont,bkg;           //my local names 
    436453        double inten,h1,qw,qr,width,sig,averad3; 
    437          
     454 
    438455        pi = 4.0*atan(1.0); 
    439456        x= q; 
    440          
     457 
    441458        scale = dp[0]; 
    442459        rad = dp[1];            // radius (A) 
     
    444461        cont = dp[3];           // contrast (A^-2) 
    445462        bkg = dp[4]; 
    446          
     463 
    447464        // as usual, poly = sig/ravg 
    448465        // for the rectangular distribution, sig = width/sqrt(3) 
    449466        // width is the HALF- WIDTH of the rectangular distrubution 
    450          
     467 
    451468        sig = pd*rad; 
    452469        width = sqrt(3.0)*sig; 
    453          
     470 
    454471        //x is the q-value 
    455472        qw = x*width; 
     
    463480        h1+= 3.0*qw*(sin(qr)*sin(qw))*(sin(qr)*sin(qw)); 
    464481        h1 -= 6.0*qr*cos(qr)*sin(qr)*cos(qw)*sin(qw); 
    465          
     482 
    466483        // calculate P(q) = <f^2> 
    467484        inten = 8.0*pi*pi*cont*cont/width/pow(x,7)*h1; 
    468          
     485 
    469486        // beta(q) would be calculated as 2/width/x/h1*h2*h2 
    470         // with  
     487        // with 
    471488        // h2 = 2*sin(x*rad)*sin(x*width)-x*rad*cos(x*rad)*sin(x*width)-x*width*sin(x*rad)*cos(x*width) 
    472          
     489 
    473490        // normalize to the average volume 
    474491        // <R^3> = ravg^3*(1+3*pd^2) 
    475492        // or... "zf"  = (1 + 3*p^2), which will be greater than one 
    476          
     493 
    477494        averad3 =  rad*rad*rad*(1.0+3.0*pd*pd); 
    478495        inten /= 4.0*pi/3.0*averad3; 
     
    483500        // then add in the background 
    484501        inten += bkg; 
    485          
     502 
    486503        return(inten); 
    487504} 
     
    497514        double va,vb,zi,yy,summ,inten; 
    498515        int nord=20,ii; 
    499          
     516 
    500517        pi = 4.0*atan(1.0); 
    501518        x= q; 
    502          
     519 
    503520        scale=dp[0]; 
    504521        rad=dp[1]; 
     
    509526        delrho=rho-rhos; 
    510527        bkg=dp[5]; 
    511          
     528 
    512529        va = -4.0*sig + rad; 
    513530        if (va<0) { 
     
    515532        } 
    516533        vb = 4.0*sig +rad; 
    517          
     534 
    518535        summ = 0.0;             // initialize integral 
    519536        for(ii=0;ii<nord;ii+=1) { 
     
    525542                yy *= yy; 
    526543                yy *= Gauss20Wt[ii] *  Gauss_distr(sig,rad,zi); 
    527                  
     544 
    528545                summ += yy;             //add to the running total of the quadrature 
    529546        } 
    530547        // calculate value of integral to return 
    531548        inten = (vb-va)/2.0*summ; 
    532          
     549 
    533550        //re-normalize by polydisperse sphere volume 
    534551        inten /= (4.0*pi/3.0*rad*rad*rad)*(1.0+3.0*pd*pd); 
    535          
     552 
    536553        inten *= 1.0e8; 
    537554        inten *= scale; 
    538555        inten += bkg; 
    539          
     556 
    540557    return(inten);      //scale, and add in the background 
    541558} 
     
    550567        double va,vb,zi,yy,summ,inten; 
    551568        int nord=76,ii; 
    552          
     569 
    553570        pi = 4.0*atan(1.0); 
    554571        x= q; 
    555          
     572 
    556573        scale=dp[0]; 
    557574        rad=dp[1];              //rad is the median radius 
     
    562579        delrho=rho-rhos; 
    563580        bkg=dp[5]; 
    564          
     581 
    565582        va = -3.5*sig + mu; 
    566583        va = exp(va); 
     
    570587        vb = 3.5*sig*(1.0+sig) +mu; 
    571588        vb = exp(vb); 
    572          
     589 
    573590        summ = 0.0;             // initialize integral 
    574591        for(ii=0;ii<nord;ii+=1) { 
     
    580597                yy *= yy; 
    581598                yy *= Gauss76Wt[ii] *  LogNormal_distr(sig,mu,zi); 
    582                  
     599 
    583600                summ += yy;             //add to the running total of the quadrature 
    584601        } 
    585602        // calculate value of integral to return 
    586603        inten = (vb-va)/2.0*summ; 
    587          
     604 
    588605        //re-normalize by polydisperse sphere volume 
    589606        r3 = exp(3.0*mu + 9.0/2.0*sig*sig);             // <R^3> directly 
    590607        inten /= (4.0*pi/3.0*r3);               //polydisperse volume 
    591          
     608 
    592609        inten *= 1.0e8; 
    593610        inten *= scale; 
    594611        inten += bkg; 
    595          
     612 
    596613        return(inten); 
    597614} 
     
    599616static double 
    600617LogNormal_distr(double sig, double mu, double pt) 
    601 {        
     618{ 
    602619        double retval,pi; 
    603          
     620 
    604621        pi = 4.0*atan(1.0); 
    605622        retval = (1/ (sig*pt*sqrt(2.0*pi)) )*exp( -0.5*(log(pt) - mu)*(log(pt) - mu)/sig/sig ); 
     
    609626static double 
    610627Gauss_distr(double sig, double avg, double pt) 
    611 {        
     628{ 
    612629        double retval,Pi; 
    613          
     630 
    614631        Pi = 4.0*atan(1.0); 
    615632        retval = (1.0/ (sig*sqrt(2.0*Pi)) )*exp(-(avg-pt)*(avg-pt)/sig/sig/2.0); 
     
    627644        double sld1,sld2,sld3,zp1,zp2,zp3,vpoly; 
    628645        double pi43,c1,c2,form,volume,arg1,arg2; 
    629          
     646 
    630647        pi = 4.0*atan(1.0); 
    631648        x= q; 
    632          
     649 
    633650        scale = dp[0]; 
    634651        corrad = dp[1]; 
     
    639656        sld3 = dp[6]; 
    640657        bkg = dp[7]; 
    641          
    642         zz = (1.0/sig)*(1.0/sig) - 1.0;    
     658 
     659        zz = (1.0/sig)*(1.0/sig) - 1.0; 
    643660        shlrad = corrad + thick; 
    644661        drho1 = sld1-sld2;              //core-shell 
     
    648665        zp3 = zz + 3.; 
    649666        vpoly = 4.0*pi/3.0*zp3*zp2/zp1/zp1*pow((corrad+thick),3); 
    650          
     667 
    651668        // the beta factor is not calculated 
    652669        // the calculated form factor <f^2> has units [length^2] 
    653670        // and must be multiplied by number density [l^-3] and the correct unit 
    654671        // conversion to get to absolute scale 
    655          
     672 
    656673        pi43=4.0/3.0*pi; 
    657674        pp=corrad/shlrad; 
     
    659676        c1=drho1*volume; 
    660677        c2=drho2*volume; 
    661          
     678 
    662679        arg1 = x*shlrad*pp; 
    663680        arg2 = x*shlrad; 
    664          
     681 
    665682        form=pow(pp,6)*c1*c1*fnt2(arg1,zz); 
    666683        form += c2*c2*fnt2(arg2,zz); 
    667684        form += 2.0*c1*c2*fnt3(arg2,pp,zz); 
    668          
     685 
    669686        //convert the result to [cm^-1] 
    670          
     687 
    671688        //scale the result 
    672689        // - divide by the polydisperse volume, mult by 10^8 
     
    674691        form *= 1.0e8; 
    675692        form *= scale; 
    676          
     693 
    677694        //add in the background 
    678695        form += bkg; 
    679          
     696 
    680697        return(form); 
    681698} 
     
    689706{ 
    690707        double z1,z2,z3,u,ww,term1,term2,term3,ans; 
    691          
     708 
    692709        z1=zz+1.0; 
    693710        z2=zz+2.0; 
     
    699716        term3=1.0+cos(z3*ww)/pow((1.0+4.0*u*u),(z3/2.0)); 
    700717        ans=(4.50/z1/pow(yy,6))*(z1*(1.0-term1-term2)+yy*yy*z2*term3); 
    701          
     718 
    702719        return(ans); 
    703720} 
     
    709726double 
    710727fnt3(double yy, double pp, double zz) 
    711 {        
     728{ 
    712729        double z1,z2,z3,yp,yn,up,un,vp,vn,term1,term2,term3,term4,term5,term6,ans; 
    713          
     730 
    714731        z1=zz+1.0; 
    715732        z2=zz+2.0; 
     
    729746        ans=4.5/z1/pow(yy,6); 
    730747        ans *=(z1*(term1-term2)+yy*yy*pp*z2*(term3+term4)+z1*(term5-term6)); 
    731          
     748 
    732749        return(ans); 
    733750} 
     
    752769        double psf11,psf12,psf22; 
    753770        double phi1,phi2,phr,a3; 
    754         double v1,v2,n1,n2,qr1,qr2,b1,b2; 
     771        double v1,v2,n1,n2,qr1,qr2,b1,b2,sc1,sc2; 
    755772        int err; 
    756          
     773 
    757774        pi = 4.0*atan(1.0); 
    758775        x= q; 
     
    765782        rhos = dp[6]; 
    766783        bgd = dp[7]; 
    767          
    768          
     784 
     785 
    769786        phi = phi1 + phi2; 
    770787        aa = r1/r2; 
     
    775792        // calculate the PSF's here 
    776793        err = ashcroft(x,r2,nf2,aa,phi,&psf11,&psf22,&psf12); 
    777          
     794 
    778795        // /* do form factor calculations  */ 
    779          
     796 
    780797        v1 = 4.0*pi/3.0*r1*r1*r1; 
    781798        v2 = 4.0*pi/3.0*r2*r2*r2; 
    782          
     799 
    783800        n1 = phi1/v1; 
    784801        n2 = phi2/v2; 
    785          
     802 
    786803        qr1 = r1*x; 
    787804        qr2 = r2*x; 
    788          
    789         b1 = r1*r1*r1*(rho1-rhos)*4.0*pi*(sin(qr1)-qr1*cos(qr1))/qr1/qr1/qr1; 
    790         b2 = r2*r2*r2*(rho2-rhos)*4.0*pi*(sin(qr2)-qr2*cos(qr2))/qr2/qr2/qr2; 
     805 
     806        if (qr1 == 0){ 
     807                sc1 = 1.0/3.0; 
     808        }else{ 
     809                sc1 = (sin(qr1)-qr1*cos(qr1))/qr1/qr1/qr1; 
     810        } 
     811        if (qr2 == 0){ 
     812                sc2 = 1.0/3.0; 
     813        }else{ 
     814                sc2 = (sin(qr2)-qr2*cos(qr2))/qr2/qr2/qr2; 
     815        } 
     816        b1 = r1*r1*r1*(rho1-rhos)*4.0*pi*sc1; 
     817        b2 = r2*r2*r2*(rho2-rhos)*4.0*pi*sc2; 
    791818        inten = n1*b1*b1*psf11; 
    792819        inten += sqrt(n1*n2)*2.0*b1*b2*psf12; 
     
    794821        ///* convert I(1/A) to (1/cm)  */ 
    795822        inten *= 1.0e8; 
    796          
     823 
    797824        inten += bgd; 
    798          
     825 
    799826        return(inten); 
    800827} 
     
    808835        double phi1,phi2,phr,a3; 
    809836        int err; 
    810          
     837 
    811838        pi = 4.0*atan(1.0); 
    812839        x= q; 
     
    827854        // calculate the PSF's here 
    828855        err = ashcroft(x,r2,nf2,aa,phi,&psf11,&psf22,&psf12); 
    829          
     856 
    830857    return(psf11);      //scale, and add in the background 
    831858} 
     
    839866        double phi1,phi2,phr,a3; 
    840867        int err; 
    841          
     868 
    842869        pi = 4.0*atan(1.0); 
    843870        x= q; 
     
    858885        // calculate the PSF's here 
    859886        err = ashcroft(x,r2,nf2,aa,phi,&psf11,&psf22,&psf12); 
    860          
     887 
    861888    return(psf12);      //scale, and add in the background 
    862889} 
     
    870897        double phi1,phi2,phr,a3; 
    871898        int err; 
    872          
     899 
    873900        pi = 4.0*atan(1.0); 
    874901        x= q; 
    875          
     902 
    876903        r2 = dp[0]; 
    877904        r1 = dp[1]; 
     
    890917        // calculate the PSF's here 
    891918        err = ashcroft(x,r2,nf2,aa,phi,&psf11,&psf22,&psf12); 
    892          
     919 
    893920    return(psf22);      //scale, and add in the background 
    894921} 
     
    898925{ 
    899926        //      variable qval,r2,nf2,aa,phi,&s11,&s22,&s12 
    900          
     927 
    901928        //   calculate constant terms 
    902929        double s1,s2,v,a3,v1,v2,g11,g12,g22,wmv,wmv3,wmv4; 
     
    905932        double c11,c22,c12,f12,f22,ttt1,ttt2,ttt3,ttt4,yl,y13; 
    906933        double t21,t22,t23,t31,t32,t33,t41,t42,yl3,wma3,y1; 
    907          
     934 
    908935        s2 = 2.0*r2; 
    909936        s1 = aa*s2; 
     
    926953        gm1=(v1*a1+a3*v2*a2)*.5; 
    927954        gm12=2.*gm1*(1.-aa)/aa; 
    928         //c   
     955        //c 
    929956        //c   calculate the direct correlation functions and print results 
    930957        //c 
    931958        //      do 20 j=1,npts 
    932          
     959 
    933960        yy=qval*s2; 
    934961        //c   calculate direct correlation functions 
     
    941968        t3=gm1*((4.*ay*ay2-24.*ay)*sin(ay)-(ay2*ay2-12.*ay2+24.)*cos(ay)+24.)/ay3; 
    942969        f11=24.*v1*(t1+t2+t3)/ay3; 
    943          
     970 
    944971        //c ------c22 
    945972        y2=yy*yy; 
     
    949976        tt3=gm1*((4.*y3-24.*yy)*sin(yy)-(y2*y2-12.*y2+24.)*cos(yy)+24.)/ay3; 
    950977        f22=24.*v2*(tt1+tt2+tt3)/y3; 
    951          
     978 
    952979        //c   -----c12 
    953980        yl=.5*yy*(1.-aa); 
     
    969996        ttt4=a1*(t41+t42)/y1; 
    970997        f12=ttt1+24.*v*sqrt(nf2)*sqrt(1.-nf2)*a3*(ttt2+ttt3+ttt4)/(nf2+(1.-nf2)*a3); 
    971          
     998 
    972999        c11=f11; 
    9731000        c22=f22; 
    9741001        c12=f12; 
    9751002        *s11=1./(1.+c11-(c12)*c12/(1.+c22)); 
    976         *s22=1./(1.+c22-(c12)*c12/(1.+c11));  
    977         *s12=-c12/((1.+c11)*(1.+c22)-(c12)*(c12));    
    978          
     1003        *s22=1./(1.+c22-(c12)*c12/(1.+c11)); 
     1004        *s12=-c12/((1.+c11)*(1.+c22)-(c12)*(c12)); 
     1005 
    9791006        return(err); 
    9801007} 
     
    9891016 // bragg peaks arise naturally from the periodicity of the sample 
    9901017 // resolution smeared version gives he most appropriate view of the model 
    991   
     1018 
    9921019        Warning: 
    9931020 The call to WaveData() below returns a pointer to the middle 
     
    10041031        double fval,voli,ri,sldi; 
    10051032        double pi; 
    1006          
    1007         pi = 4.0*atan(1.0); 
    1008          
     1033 
     1034        pi = 4.0*atan(1.0); 
     1035 
    10091036        x= q; 
    10101037        scale = dp[0]; 
     
    10161043        num = dp[6]; 
    10171044        bkg = dp[7]; 
    1018          
     1045 
    10191046        //calculate with a loop, two shells at a time 
    1020          
     1047 
    10211048        ii=0; 
    10221049        fval=0; 
    1023          
     1050 
    10241051        do { 
    10251052                ri = rcore + (double)ii*ts + (double)ii*tw; 
     
    10331060                ii+=1;          //do 2 layers at a time 
    10341061        } while(ii<=num-1);  //change to make 0 < num < 2 correspond to unilamellar vesicles (C. Glinka, 11/24/03) 
    1035          
     1062 
    10361063        fval *= fval;           //square it 
    10371064        fval /= voli;           //normalize by the overall volume 
    10381065        fval *= scale*1e8; 
    10391066        fval += bkg; 
    1040          
     1067 
    10411068        return(fval); 
    10421069} 
     
    10681095        double fval,ri,pi; 
    10691096        double avg,pd,zz,lo,hi,r1,r2,d1,d2,distr; 
    1070          
    1071         pi = 4.0*atan(1.0);      
     1097 
     1098        pi = 4.0*atan(1.0); 
    10721099        x= q; 
    1073          
     1100 
    10741101        scale = dp[0]; 
    10751102        avg = dp[1];            // average (total) outer radius 
     
    10811108        rhoshel = dp[7]; 
    10821109        bkg = dp[8]; 
    1083          
     1110 
    10841111        zz = (1.0/pd)*(1.0/pd)-1.0; 
    1085          
     1112 
    10861113        //max radius set to be 5 std deviations past mean 
    10871114        hi = avg + pd*avg*5.0; 
    10881115        lo = avg - pd*avg*5.0; 
    1089          
     1116 
    10901117        maxPairs = trunc( (hi-rcore+tw)/(ts+tw) ); 
    10911118        minPairs = trunc( (lo-rcore+tw)/(ts+tw) ); 
    10921119        minPairs = (minPairs < 1) ? 1 : minPairs;       // need a minimum of one 
    1093          
     1120 
    10941121        ii=minPairs; 
    10951122        fval=0; 
     
    11041131                r1 = r2; 
    11051132                d1 = d2; 
    1106                  
     1133 
    11071134                ri = (double)ii*(ts+tw) - tw + rcore; 
    11081135                fval += SchulzPoint(ri,avg,zz) * MultiShellGuts(x, rcore, ts, tw, rhocore, rhoshel, ii) * (4*pi/3*ri*ri*ri); 
     
    11161143                first = 0; 
    11171144        } while(ii<=maxPairs); 
    1118          
     1145 
    11191146        fval /= 4*pi/3*avg*avg*avg;             //normalize by the overall volume 
    11201147        fval /= distr; 
    11211148        fval *= scale; 
    11221149        fval += bkg; 
    1123          
     1150 
    11241151        return(fval); 
    11251152} 
     
    11271154double 
    11281155MultiShellGuts(double x,double rcore,double ts,double tw,double rhocore,double rhoshel,int num) { 
    1129          
     1156 
    11301157    double ri,sldi,fval,voli,pi; 
    11311158    int ii; 
    1132      
     1159 
    11331160        pi = 4.0*atan(1.0); 
    11341161    ii=0; 
    11351162    fval=0; 
    1136      
     1163 
    11371164    do { 
    11381165        ri = rcore + (double)ii*ts + (double)ii*tw; 
     
    11461173        ii+=1;          //do 2 layers at a time 
    11471174    } while(ii<=num-1);  //change to make 0 < num < 2 correspond to unilamellar vesicles (C. Glinka, 11/24/03) 
    1148      
     1175 
    11491176    fval *= fval; 
    11501177    fval /= voli; 
    11511178    fval *= 1e8; 
    1152      
     1179 
    11531180    return(fval);       // this result still needs to be multiplied by scale and have background added 
    11541181} 
     
    11561183static double 
    11571184SchulzPoint(double x, double avg, double zz) { 
    1158          
     1185 
    11591186    double dr; 
    1160      
     1187 
    11611188    dr = zz*log(x) - gammln(zz+1)+(zz+1)*log((zz+1)/avg)-(x/avg*(zz+1)); 
    11621189    return (exp(dr)); 
     
    11651192static double 
    11661193gammln(double xx) { 
    1167          
     1194 
    11681195    double x,y,tmp,ser; 
    11691196    static double cof[6]={76.18009172947146,-86.50532032941677, 
     
    11711198                0.1208650973866179e-2,-0.5395239384953e-5}; 
    11721199    int j; 
    1173          
     1200 
    11741201    y=x=xx; 
    11751202    tmp=x+5.5; 
     
    11821209double 
    11831210F_func(double qr) { 
    1184         return(3*(sin(qr) - qr*cos(qr))/(qr*qr*qr)); 
    1185 } 
    1186  
     1211        double sc; 
     1212        if (qr == 0){ 
     1213                sc = 1.0; 
     1214        }else{ 
     1215                sc=(3*(sin(qr) - qr*cos(qr))/(qr*qr*qr)); 
     1216        } 
     1217        return sc; 
     1218} 
     1219 
Note: See TracChangeset for help on using the changeset viewer.