Changeset 632 for sans/XOP_Dev/SANSAnalysis
- Timestamp:
- Mar 1, 2010 1:57:12 PM (13 years ago)
- Location:
- sans/XOP_Dev/SANSAnalysis/lib
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
sans/XOP_Dev/SANSAnalysis/lib/libCylinder.c
r594 r632 28 28 29 29 Pi = 4.0*atan(1.0); 30 lolim = 0 ;30 lolim = 0.0; 31 31 uplim = Pi/2.0; 32 32 … … 84 84 double va,vb; //upper and lower integration limits 85 85 double summ,zi,yyy,answer,vell; //running tally of integration 86 double summj,vaj,vbj,zij,arg ; //for the inner integration87 86 double summj,vaj,vbj,zij,arg, si; //for the inner integration 87 88 88 Pi = 4.0*atan(1.0); 89 va = 0 ;90 vb = 1 ; //orintational average, outer integral91 vaj=0 ;89 va = 0.0; 90 vb = 1.0; //orintational average, outer integral 91 vaj=0.0; 92 92 vbj=Pi; //endpoints of inner integral 93 93 … … 107 107 summj=0; 108 108 zi = ( Gauss76Z[i]*(vb-va) + va + vb )/2.0; //the "x" dummy 109 arg = ra*sqrt(1 -zi*zi);109 arg = ra*sqrt(1.0-zi*zi); 110 110 for(j=0;j<nord;j++) { 111 111 //76 gauss points for the inner integral as well … … 120 120 121 121 //now calculate outer integral 122 arg = q*length*zi/2; 123 yyy = Gauss76Wt[i] * answer * sin(arg) * sin(arg) / arg / arg; 122 arg = q*length*zi/2.0; 123 if (arg == 0.0){ 124 si = 1.0; 125 }else{ 126 si = sin(arg) * sin(arg) / arg / arg; 127 } 128 yyy = Gauss76Wt[i] * answer * si; 124 129 summ += yyy; 125 130 } … … 162 167 double va,vb; //upper and lower integration limits 163 168 double summ,zi,yyy,answer,vell; //running tally of integration 164 double summj,vaj,vbj,zij,arg ; //for the inner integration165 169 double summj,vaj,vbj,zij,arg,si; //for the inner integration 170 166 171 Pi = 4.0*atan(1.0); 167 va = 0 ;168 vb = 1 ; //orintational average, outer integral169 vaj=0 ;172 va = 0.0; 173 vb = 1.0; //orintational average, outer integral 174 vaj=0.0; 170 175 vbj=Pi; //endpoints of inner integral 171 176 … … 185 190 summj=0; 186 191 zi = ( Gauss76Z[i]*(vb-va) + va + vb )/2.0; //the "x" dummy 187 arg = ra*sqrt(1 -zi*zi);192 arg = ra*sqrt(1.0-zi*zi); 188 193 for(j=0;j<nordj;j++) { 189 194 //20 gauss points for the inner integral … … 198 203 199 204 //now calculate outer integral 200 arg = q*length*zi/2; 201 yyy = Gauss76Wt[i] * answer * sin(arg) * sin(arg) / arg / arg; 205 arg = q*length*zi/2.0; 206 if (arg == 0.0){ 207 si = 1.0; 208 }else{ 209 si = sin(arg) * sin(arg) / arg / arg; 210 } 211 yyy = Gauss76Wt[i] * answer * si; 202 212 summ += yyy; 203 213 } … … 215 225 answer *= scale; 216 226 // add in the background 217 answer += bkg; 218 227 answer += bkg; 228 219 229 return answer; 220 230 } … … 316 326 317 327 // Pi = 4.0*atan(1.0); 318 va = 0 ;319 vb = 1 ; //orintational average, outer integral320 vaj = 0 ;321 vbj = 1 ; //endpoints of inner integral322 328 va = 0.0; 329 vb = 1.0; //orintational average, outer integral 330 vaj = 0.0; 331 vbj = 1.0; //endpoints of inner integral 332 323 333 summ = 0.0; //initialize intergral 324 334 … … 340 350 for(i=0;i<nordi;i++) { 341 351 //setup inner integral over the ellipsoidal cross-section 342 summj=0 ;352 summj=0.0; 343 353 sigma = ( Gauss76Z[i]*(vb-va) + va + vb )/2.0; //the outer dummy 344 354 … … 346 356 //76 gauss points for the inner integral 347 357 uu = ( Gauss76Z[j]*(vbj-vaj) + vaj + vbj )/2.0; //the inner dummy 348 mudum = mu*sqrt(1 -sigma*sigma);358 mudum = mu*sqrt(1.0-sigma*sigma); 349 359 yyy = Gauss76Wt[j] * PPKernel(aa,mudum,uu); 350 360 summj += yyy; … … 352 362 //now calculate the value of the inner integral 353 363 answer = (vbj-vaj)/2.0*summj; 354 355 arg = mu*cc*sigma/2 ;356 if ( arg == 0 ) {357 answer *= 1 ;364 365 arg = mu*cc*sigma/2.0; 366 if ( arg == 0.0 ) { 367 answer *= 1.0; 358 368 } else { 359 369 answer *= sin(arg)*sin(arg)/arg/arg; … … 401 411 402 412 pi = 4.0*atan(1.0); 403 va = 0 ;404 vb = 1 ; //limits of numerical integral405 413 va = 0.0; 414 vb = 1.0; //limits of numerical integral 415 406 416 summ = 0.0; //initialize intergral 407 417 … … 456 466 457 467 pi = 4.0*atan(1.0); 458 va = 0 ;459 vb = 1 ; //limits of numerical integral460 468 va = 0.0; 469 vb = 1.0; //limits of numerical integral 470 461 471 summ = 0.0; //initialize intergral 462 472 … … 478 488 answer *= delrho*delrho; 479 489 //normalize by volume 480 answer *= 4 *pi/3*a*a*nua;490 answer *= 4.0*pi/3.0*a*a*nua; 481 491 //convert to [cm-1] 482 492 answer *= 1.0e8; … … 521 531 522 532 lolim = radius*(1.0-range*pd); //set the upper/lower limits to cover the distribution 523 if(lolim<0 ) {524 lolim = 0 ;533 if(lolim<0.0) { 534 lolim = 0.0; 525 535 } 526 536 if(pd>0.3) { … … 582 592 583 593 lolim = length*(1.0-range*pd); //set the upper/lower limits to cover the distribution 584 if(lolim<0 ) {585 lolim = 0 ;594 if(lolim<0.0) { 595 lolim = 0.0; 586 596 } 587 597 if(pd>0.3) { … … 697 707 698 708 lolim = exp(log(radius)-(4.*sigma)); 699 if (lolim<0 ) {700 lolim=0 ; //to avoid numerical error when va<0 (-ve r value)709 if (lolim<0.0) { 710 lolim=0.0; //to avoid numerical error when va<0 (-ve r value) 701 711 } 702 712 uplim = exp(log(radius)+(4.*sigma)); … … 758 768 delpc = sldc - slds; //core - shell 759 769 delps = slds - sld; //shell - solvent 760 bkg = dp[8]; 761 770 bkg = dp[8]; 771 762 772 for(i=0;i<nord;i++) { 763 773 zi = ( Gauss76Z[i]*(uplim-lolim) + uplim + lolim )/2.0; … … 768 778 answer = (uplim-lolim)/2.0*summ; 769 779 // normalize by particle volume 770 oblatevol = 4 *Pi/3*trmaj*trmaj*trmin;780 oblatevol = 4.0*Pi/3.0*trmaj*trmaj*trmin; 771 781 answer /= oblatevol; 772 782 … … 812 822 delpc = sldc - slds; //core - shell 813 823 delps = slds - sld; //shell - sovent 814 bkg = dp[8]; 815 824 bkg = dp[8]; 825 816 826 for(i=0;i<nord;i++) { 817 827 zi = ( Gauss76Z[i]*(uplim-lolim) + uplim + lolim )/2.0; … … 822 832 answer = (uplim-lolim)/2.0*summ; 823 833 // normalize by particle volume 824 prolatevol = 4 *Pi/3*trmaj*trmin*trmin;834 prolatevol = 4.0*Pi/3.0*trmaj*trmin*trmin; 825 835 answer /= prolatevol; 826 836 … … 1232 1242 1233 1243 lolim = length*(1.0-range*pd); //set the upper/lower limits to cover the distribution 1234 if(lolim<0 ) {1235 lolim = 0 ;1244 if(lolim<0.0) { 1245 lolim = 0.0; 1236 1246 } 1237 1247 if(pd>0.3) { … … 1296 1306 1297 1307 lolim = radius*(1.0-range*pd); //set the upper/lower limits to cover the distribution 1298 if(lolim<0 ) {1299 lolim = 0 ;1308 if(lolim<0.0) { 1309 lolim = 0.0; 1300 1310 } 1301 1311 if(pd>0.3) { … … 1570 1580 q02 = q0*q0; 1571 1581 q0p = pow(q0,(-4.0 + p1short) ); 1572 1573 yy = ((1.0/(L*((p1short - p2short))*Rg2_sh2)*((b*Emt1*q0p*((8.0*b3*L - 8.0*b3*Et1*L - 2.0*b3*L*p2short + 2.0*b3*Et1*L*p2short + 4.0*b*L*q02*Rg2_sh + 4.0*b*Et1*L*q02*Rg2_sh - 2.0*b*Et1*L*p2short*q02*Rg2_sh - Et1*pi*q02*q0*Rg2_sh2 + Et1*p2short*pi*q02*q0*Rg2_sh2)))))); 1574 1582 1583 yy = ((1.0/(L*((p1short - p2short))*Rg2_sh2)*((b*Emt1*q0p*((8.0*b3*L - 8.0*b3*Et1*L - 2.0*b3*L*p2short + 2.0*b3*Et1*L*p2short + 4.0*b*L*q02*Rg2_sh + 4.0*b*Et1*L*q02*Rg2_sh - 2.0*b*Et1*L*p2short*q02*Rg2_sh - Et1*pi*q02*q0*Rg2_sh2 + Et1*p2short*pi*q02*q0*Rg2_sh2)))))); 1584 1575 1585 return(yy); 1576 1586 } … … 1610 1620 1611 1621 t1 = (1.0/(b* p1*pow(q0,((-1.0) - p1 - p2)) - b*p2*pow(q0,((-1.0) - p1 - p2)) )); 1612 1613 t2 = (b*C*(((-1.0*((14.0*b3)/(15.0*q03*Rg2))) + (14 *b3*pow(E,(-((q02*Rg2)/b2))))/(15*q03*Rg2) + (2*pow(E,(-((q02*Rg2)/b2)))*q0*((11.0/15.0 + (7*b2)/(15*q02*Rg2)))*Rg2)/b)))/L;1614 1615 t3 = (sqrt(Rg2)*((C3*pow((((sqrt(Rg2)*q0)/b)),((-3 )/miu)) + C2*pow((((sqrt(Rg2)*q0)/b)),((-2)/miu)) + C1*pow((((sqrt(Rg2)*q0)/b)),((-1.0)/miu))))*pow(sech_WR(((-C4) + (sqrt(Rg2)*q0)/b)/C5),2))/(2*C5);1616 1617 t4 = (b4*sqrt(Rg2)*(((-1 ) + pow(E,(-((q02*Rg2)/b2))) + (q02*Rg2)/b2))*pow(sech_WR(((-C4) + (sqrt(Rg2)*q0)/b)/C5),2))/(C5*q04*Rg22);1618 1619 t5 = (2 *b4*(((2*q0*Rg2)/b - (2*pow(E,(-((q02*Rg2)/b2)))*q0*Rg2)/b))*((1 + 1.0/2.0*(((-1) - tanh(((-C4) + (sqrt(Rg2)*q0)/b)/C5))))))/(q04*Rg22);1620 1621 t6 = (8 *b4*b*(((-1) + pow(E,(-((q02*Rg2)/b2))) + (q02*Rg2)/b2))*((1+ 1.0/2.0*(((-1) - tanh(((-C4) + (sqrt(Rg2)*q0)/b)/C5))))))/(q05*Rg22);1622 1623 t7 = (((-((3 *C3*sqrt(Rg2)*pow((((sqrt(Rg2)*q0)/b)),((-1) - 3/miu)))/miu)) - (2*C2*sqrt(Rg2)*pow((((sqrt(Rg2)*q0)/b)),((-1) - 2/miu)))/miu - (C1*sqrt(Rg2)*pow((((sqrt(Rg2)*q0)/b)),((-1) - 1/miu)))/miu));1624 1625 t8 = ((1 + tanh(((-C4) + (sqrt(Rg2)*q0)/b)/C5)));1626 1627 t9 = (b*C*((4.0/15.0 - pow(E,(-((q02*Rg2)/b2)))*((11.0/15.0 + (7 *b2)/(15*q02*Rg2))) + (7*b2)/(15*q02*Rg2))))/L;1628 1629 t10 = (2 *b4*(((-1) + pow(E,(-((q02*Rg2)/b2))) + (q02*Rg2)/b2))*((1+ 1.0/2.0*(((-1) - tanh(((-C4) + (sqrt(Rg2)*q0)/b)/C5))))))/(q04*Rg22);1630 1631 1632 yy = ((-1 *(t1* ((-pow(q0,-p1)*(((b2*pi)/(L*q02) + t2 + t3 - t4 + t5 - t6 + 1.0/2.0*t7*t8)) - b*p1*pow(q0,((-1) - p1))*(((-((b*pi)/(L*q0))) + t9 + t10 + 1.0/2.0*((C3*pow((((sqrt(Rg2)*q0)/b)),((-3)/miu)) + C2*pow((((sqrt(Rg2)*q0)/b)),((-2)/miu)) + C1*pow((((sqrt(Rg2)*q0)/b)),((-1)/miu))))*((1+ tanh(((-C4) + (sqrt(Rg2)*q0)/b)/C5))))))))));1633 1622 1623 t2 = (b*C*(((-1.0*((14.0*b3)/(15.0*q03*Rg2))) + (14.0*b3*pow(E,(-((q02*Rg2)/b2))))/(15.0*q03*Rg2) + (2.0*pow(E,(-((q02*Rg2)/b2)))*q0*((11.0/15.0 + (7*b2)/(15.0*q02*Rg2)))*Rg2)/b)))/L; 1624 1625 t3 = (sqrt(Rg2)*((C3*pow((((sqrt(Rg2)*q0)/b)),((-3.0)/miu)) + C2*pow((((sqrt(Rg2)*q0)/b)),((-2.0)/miu)) + C1*pow((((sqrt(Rg2)*q0)/b)),((-1.0)/miu))))*pow(sech_WR(((-C4) + (sqrt(Rg2)*q0)/b)/C5),2.0))/(2.0*C5); 1626 1627 t4 = (b4*sqrt(Rg2)*(((-1.0) + pow(E,(-((q02*Rg2)/b2))) + (q02*Rg2)/b2))*pow(sech_WR(((-C4) + (sqrt(Rg2)*q0)/b)/C5),2))/(C5*q04*Rg22); 1628 1629 t5 = (2.0*b4*(((2.0*q0*Rg2)/b - (2.0*pow(E,(-((q02*Rg2)/b2)))*q0*Rg2)/b))*((1.0 + 1.0/2.0*(((-1.0) - tanh(((-C4) + (sqrt(Rg2)*q0)/b)/C5))))))/(q04*Rg22); 1630 1631 t6 = (8.0*b4*b*(((-1.0) + pow(E,(-((q02*Rg2)/b2))) + (q02*Rg2)/b2))*((1.0 + 1.0/2.0*(((-1) - tanh(((-C4) + (sqrt(Rg2)*q0)/b)/C5))))))/(q05*Rg22); 1632 1633 t7 = (((-((3.0*C3*sqrt(Rg2)*pow((((sqrt(Rg2)*q0)/b)),((-1.0) - 3.0/miu)))/miu)) - (2.0*C2*sqrt(Rg2)*pow((((sqrt(Rg2)*q0)/b)),((-1.0) - 2.0/miu)))/miu - (C1*sqrt(Rg2)*pow((((sqrt(Rg2)*q0)/b)),((-1.0) - 1.0/miu)))/miu)); 1634 1635 t8 = ((1.0 + tanh(((-C4) + (sqrt(Rg2)*q0)/b)/C5))); 1636 1637 t9 = (b*C*((4.0/15.0 - pow(E,(-((q02*Rg2)/b2)))*((11.0/15.0 + (7.0*b2)/(15*q02*Rg2))) + (7.0*b2)/(15.0*q02*Rg2))))/L; 1638 1639 t10 = (2.0*b4*(((-1) + pow(E,(-((q02*Rg2)/b2))) + (q02*Rg2)/b2))*((1.0 + 1.0/2.0*(((-1) - tanh(((-C4) + (sqrt(Rg2)*q0)/b)/C5))))))/(q04*Rg22); 1640 1641 1642 yy = ((-1.0*(t1* ((-pow(q0,-p1)*(((b2*pi)/(L*q02) + t2 + t3 - t4 + t5 - t6 + 1.0/2.0*t7*t8)) - b*p1*pow(q0,((-1.0) - p1))*(((-((b*pi)/(L*q0))) + t9 + t10 + 1.0/2.0*((C3*pow((((sqrt(Rg2)*q0)/b)),((-3.0)/miu)) + C2*pow((((sqrt(Rg2)*q0)/b)),((-2.0)/miu)) + C1*pow((((sqrt(Rg2)*q0)/b)),((-1.0)/miu))))*((1.0 + tanh(((-C4) + (sqrt(Rg2)*q0)/b)/C5)))))))))); 1643 1634 1644 return (yy); 1635 1645 } … … 1728 1738 { 1729 1739 // local variables 1730 double aa,bb,u2,ut2,uq,ut,vc,vt, gfnc,gfnt,gfn2,pi43,gfn,Pi;1731 1740 double aa,bb,u2,ut2,uq,ut,vc,vt,siq,sit,gfnc,gfnt,gfn2,pi43,gfn,Pi; 1741 1732 1742 Pi = 4.0*atan(1.0); 1733 1743 … … 1741 1751 vc = pi43*aa*bb*bb; 1742 1752 vt = pi43*trmaj*trmin*trmin; 1743 gfnc = 3.0*(sin(uq)/uq/uq - cos(uq)/uq)/uq*vc*delpc; 1744 gfnt = 3.0*(sin(ut)/ut/ut - cos(ut)/ut)/ut*vt*delps; 1753 if (uq == 0.0){ 1754 siq = 1.0/3.0; 1755 }else{ 1756 siq = (sin(uq)/uq/uq - cos(uq)/uq)/uq; 1757 } 1758 if (ut == 0.0){ 1759 sit = 1.0/3.0; 1760 }else{ 1761 sit = (sin(ut)/ut/ut - cos(ut)/ut)/ut; 1762 } 1763 gfnc = 3.0*siq*vc*delpc; 1764 gfnt = 3.0*sit*vt*delps; 1745 1765 gfn = gfnc+gfnt; 1746 1766 gfn2 = gfn*gfn; … … 1760 1780 { 1761 1781 // local variables 1762 double aa,bb,u2,ut2,uq,ut,vc,vt, gfnc,gfnt,tgfn,gfn4,pi43,Pi;1763 1782 double aa,bb,u2,ut2,uq,ut,vc,vt,siq,sit,gfnc,gfnt,tgfn,gfn4,pi43,Pi; 1783 1764 1784 Pi = 4.0*atan(1.0); 1765 1785 pi43=4.0/3.0*Pi; … … 1772 1792 vc = pi43*aa*aa*bb; 1773 1793 vt = pi43*trmaj*trmaj*trmin; 1774 gfnc = 3.0*(sin(uq)/uq/uq - cos(uq)/uq)/uq*vc*delpc; 1775 gfnt = 3.0*(sin(ut)/ut/ut - cos(ut)/ut)/ut*vt*delps; 1794 if (uq == 0.0){ 1795 siq = 1.0/3.0; 1796 }else{ 1797 siq = (sin(uq)/uq/uq - cos(uq)/uq)/uq; 1798 } 1799 if (ut == 0.0){ 1800 sit = 1.0/3.0; 1801 }else{ 1802 sit = (sin(ut)/ut/ut - cos(ut)/ut)/ut; 1803 } 1804 gfnc = 3.0*siq*vc*delpc; 1805 gfnt = 3.0*sit*vt*delps; 1776 1806 tgfn = gfnc+gfnt; 1777 1807 gfn4 = tgfn*tgfn; … … 1790 1820 1791 1821 Pq = Sk_WR(q,zi,lb); //does not have cross section term 1792 Pq *= (2.0*NR_BessJ1(qr)/qr)*(2.0*NR_BessJ1(qr)/qr); 1793 1822 if (qr !=0){ 1823 Pq *= (2.0*NR_BessJ1(qr)/qr)*(2.0*NR_BessJ1(qr)/qr); 1824 } 1794 1825 vcyl=Pi*radius*radius*zi; 1795 1826 Pq *= vcyl*vcyl; … … 1810 1841 1811 1842 Pq = Sk_WR(q,Lc,Lb); //does not have cross section term 1812 Pq *= (2.0*NR_BessJ1(qr)/qr)*(2.0*NR_BessJ1(qr)/qr); 1813 1843 if (qr !=0){ 1844 Pq *= (2.0*NR_BessJ1(qr)/qr)*(2.0*NR_BessJ1(qr)/qr); 1845 } 1846 1814 1847 vcyl=Pi*zi*zi*Lc; 1815 1848 Pq *= vcyl*vcyl; … … 1830 1863 Pi = 4.0*atan(1.0); 1831 1864 nord = 76; 1832 lolim = 0 ;1833 uplim = Pi/2 ;1865 lolim = 0.0; 1866 uplim = Pi/2.0; 1834 1867 halfheight = length/2.0; 1835 1868 … … 1856 1889 // length is the *Half* CORE-LENGTH of the cylinder 1857 1890 // dum is the dummy variable for the integration (theta) 1858 1859 double dr1,dr2,besarg1,besarg2,vol1,vol2,sinarg1,sinarg2, t1,t2,retval;1891 1892 double dr1,dr2,besarg1,besarg2,vol1,vol2,sinarg1,sinarg2,si1,si2,be1,be2,t1,t2,retval; 1860 1893 double Pi; 1861 1894 … … 1871 1904 sinarg1 = qq*length*cos(dum); 1872 1905 sinarg2 = qq*(length+facthick)*cos(dum); 1873 1874 t1 = 2.0*vol1*dr1*sin(sinarg1)/sinarg1*NR_BessJ1(besarg1)/besarg1; 1875 t2 = 2.0*vol2*dr2*sin(sinarg2)/sinarg2*NR_BessJ1(besarg2)/besarg2; 1876 1906 if (besarg1 == 0.0){ 1907 be1 = 0.5; 1908 }else{ 1909 be1 = NR_BessJ1(besarg1)/besarg1; 1910 } 1911 if (besarg2 == 0.0){ 1912 be2 = 0.5; 1913 }else{ 1914 be2 = NR_BessJ1(besarg2)/besarg2; 1915 } 1916 if (sinarg1 == 0.0){ 1917 si1 = 1.0; 1918 }else{ 1919 si1 = sin(sinarg1)/sinarg1; 1920 } 1921 if (besarg2 == 0.0){ 1922 si2 = 1.0; 1923 }else{ 1924 si2 = sin(sinarg2)/sinarg2; 1925 } 1926 1927 t1 = 2.0*vol1*dr1*si1*be1; 1928 t2 = 2.0*vol2*dr2*si2*be2; 1929 1877 1930 retval = ((t1+t2)*(t1+t2))*sin(dum); 1878 1931 return (retval); … … 1884 1937 CoreShellCylKernel(double qq, double rcore, double thick, double rhoc, double rhos, double rhosolv, double length, double dum) 1885 1938 { 1886 1887 double dr1,dr2,besarg1,besarg2,vol1,vol2,sinarg1,sinarg2, t1,t2,retval;1939 1940 double dr1,dr2,besarg1,besarg2,vol1,vol2,sinarg1,sinarg2,si1,si2,be1,be2,t1,t2,retval; 1888 1941 double Pi; 1889 1942 … … 1899 1952 sinarg1 = qq*length*cos(dum); 1900 1953 sinarg2 = qq*(length+thick)*cos(dum); 1901 1902 t1 = 2.0*vol1*dr1*sin(sinarg1)/sinarg1*NR_BessJ1(besarg1)/besarg1; 1903 t2 = 2.0*vol2*dr2*sin(sinarg2)/sinarg2*NR_BessJ1(besarg2)/besarg2; 1904 1954 1955 if (besarg1 == 0.0){ 1956 be1 = 0.5; 1957 }else{ 1958 be1 = NR_BessJ1(besarg1)/besarg1; 1959 } 1960 if (besarg2 == 0.0){ 1961 be2 = 0.5; 1962 }else{ 1963 be2 = NR_BessJ1(besarg2)/besarg2; 1964 } 1965 if (sinarg1 == 0.0){ 1966 si1 = 1.0; 1967 }else{ 1968 si1 = sin(sinarg1)/sinarg1; 1969 } 1970 if (besarg2 == 0.0){ 1971 si2 = 1.0; 1972 }else{ 1973 si2 = sin(sinarg2)/sinarg2; 1974 } 1975 1976 t1 = 2.0*vol1*dr1*si1*be1; 1977 t2 = 2.0*vol2*dr2*si2*be2; 1978 1905 1979 retval = ((t1+t2)*(t1+t2))*sin(dum); 1906 1980 … … 1917 1991 1918 1992 Pi = 4.0*atan(1.0); 1919 lolim = 0 ;1993 lolim = 0.0; 1920 1994 uplim = Pi/2.0; 1921 1995 halfheight = dumLen/2.0; … … 1950 2024 // length is the *Half* CORE-LENGTH of the cylinder = L (A) 1951 2025 // dum is the dummy variable for the integration (x in Feigin's notation) 1952 1953 //Local variables 1954 double totald,dr1,dr2,besarg1,besarg2, area,sinarg1,sinarg2,t1,t2,retval,sqq,dexpt;2026 2027 //Local variables 2028 double totald,dr1,dr2,besarg1,besarg2,be1,be2,si1,si2,area,sinarg1,sinarg2,t1,t2,retval,sqq,dexpt; 1955 2029 double Pi; 1956 2030 int kk; … … 1968 2042 sinarg1 = qq*length*cos(dum); 1969 2043 sinarg2 = qq*(length+thick)*cos(dum); 1970 1971 t1 = 2*area*(2*length)*dr1*(sin(sinarg1)/sinarg1)*(NR_BessJ1(besarg1)/besarg1); 1972 t2 = 2*area*dr2*(totald*sin(sinarg2)/sinarg2-2*length*sin(sinarg1)/sinarg1)*(NR_BessJ1(besarg2)/besarg2); 1973 2044 2045 if (besarg1 == 0.0){ 2046 be1 = 0.5; 2047 }else{ 2048 be1 = NR_BessJ1(besarg1)/besarg1; 2049 } 2050 if (besarg2 == 0.0){ 2051 be2 = 0.5; 2052 }else{ 2053 be2 = NR_BessJ1(besarg2)/besarg2; 2054 } 2055 if (sinarg1 == 0.0){ 2056 si1 = 1.0; 2057 }else{ 2058 si1 = sin(sinarg1)/sinarg1; 2059 } 2060 if (besarg2 == 0.0){ 2061 si2 = 1.0; 2062 }else{ 2063 si2 = sin(sinarg2)/sinarg2; 2064 } 2065 2066 t1 = 2.0*area*(2.0*length)*dr1*(si1)*(be1); 2067 t2 = 2.0*area*dr2*(totald*si2-2.0*length*si1)*(be2); 2068 1974 2069 retval =((t1+t2)*(t1+t2))*sin(dum); 1975 2070 … … 1998 2093 1999 2094 Pi = 4.0*atan(1.0); 2000 lolim = 0 ;2095 lolim = 0.0; 2001 2096 uplim = Pi/2.0; 2002 2097 halfheight = length/2.0; … … 2061 2156 2062 2157 nu = nua/a; 2063 arg = qq*a*sqrt(1+dum*dum*(nu*nu-1)); 2064 2065 retval = (sin(arg)-arg*cos(arg))/(arg*arg*arg); 2158 arg = qq*a*sqrt(1.0+dum*dum*(nu*nu-1.0)); 2159 if (arg == 0.0){ 2160 retval =1.0/3.0; 2161 }else{ 2162 retval = (sin(arg)-arg*cos(arg))/(arg*arg*arg); 2163 } 2066 2164 retval *= retval; 2067 retval *= 9 ;2068 2165 retval *= 9.0; 2166 2069 2167 return(retval); 2070 2168 }//Function EllipsoidKernel() … … 2076 2174 2077 2175 gamma = rcore/rshell; 2078 arg1 = qq*rshell*sqrt(1-dum*dum); //1=shell (outer radius) 2079 arg2 = qq*rcore*sqrt(1-dum*dum); //2=core (inner radius) 2080 lam1 = 2*NR_BessJ1(arg1)/arg1; 2081 lam2 = 2*NR_BessJ1(arg2)/arg2; 2082 psi = 1/(1-gamma*gamma)*(lam1 - gamma*gamma*lam2); //SRK 10/19/00 2083 2084 sinarg = qq*length*dum/2; 2085 t2 = sin(sinarg)/sinarg; 2086 2176 arg1 = qq*rshell*sqrt(1.0-dum*dum); //1=shell (outer radius) 2177 arg2 = qq*rcore*sqrt(1.0-dum*dum); //2=core (inner radius) 2178 if (arg1 == 0.0){ 2179 lam1 = 1.0; 2180 }else{ 2181 lam1 = 2.0*NR_BessJ1(arg1)/arg1; 2182 } 2183 if (arg2 == 0.0){ 2184 lam2 = 1.0; 2185 }else{ 2186 lam2 = 2.0*NR_BessJ1(arg2)/arg2; 2187 } 2188 //Todo: Need to check psi behavior as gamma goes to 1. 2189 psi = 1.0/(1.0-gamma*gamma)*(lam1 - gamma*gamma*lam2); //SRK 10/19/00 2190 sinarg = qq*length*dum/2.0; 2191 if (sinarg == 0.0){ 2192 t2 = 1.0; 2193 }else{ 2194 t2 = sin(sinarg)/sinarg; 2195 } 2196 2087 2197 retval = psi*psi*t2*t2; 2088 2198 … … 2099 2209 2100 2210 //handle arg=0 separately, as sin(t)/t -> 1 as t->0 2101 arg1 = (mu/2 )*cos(Pi*uu/2);2102 arg2 = (mu*aa/2 )*sin(Pi*uu/2);2103 if(arg1==0 ) {2104 tmp1 = 1 ;2211 arg1 = (mu/2.0)*cos(Pi*uu/2.0); 2212 arg2 = (mu*aa/2.0)*sin(Pi*uu/2.0); 2213 if(arg1==0.0) { 2214 tmp1 = 1.0; 2105 2215 } else { 2106 2216 tmp1 = sin(arg1)*sin(arg1)/arg1/arg1; 2107 2217 } 2108 2109 if (arg2==0 ) {2110 tmp2 = 1 ;2218 2219 if (arg2==0.0) { 2220 tmp2 = 1.0; 2111 2221 } else { 2112 2222 tmp2 = sin(arg2)*sin(arg2)/arg2/arg2; … … 2130 2240 arg += cc*cc*dy*dy; 2131 2241 arg = q*sqrt(arg); 2132 val = 9 * ( (sin(arg) - arg*cos(arg))/(arg*arg*arg) ) * ( (sin(arg) - arg*cos(arg))/(arg*arg*arg) ); 2133 2242 if (arg == 0.0){ 2243 val = 1.0; // as arg --> 0, val should go to 1.0 2244 }else{ 2245 val = 9.0 * ( (sin(arg) - arg*cos(arg))/(arg*arg*arg) ) * ( (sin(arg) - arg*cos(arg))/(arg*arg*arg) ); 2246 } 2134 2247 return (val); 2135 2248 … … 2144 2257 // rr is the radius of the cylinder (A) 2145 2258 // h is the HALF-LENGTH of the cylinder = L/2 (A) 2146 2147 double besarg,bj,retval,d1,t1,b1,t2,b2 ; //Local variables2148 2149 2259 2260 double besarg,bj,retval,d1,t1,b1,t2,b2,siarg,be,si; //Local variables 2261 2262 2150 2263 besarg = qq*rr*sin(theta); 2151 2264 siarg = qq * h * cos(theta); 2152 2265 bj =NR_BessJ1(besarg); 2153 2266 2154 2267 //* Computing 2nd power */ 2155 d1 = sin( qq * h * cos(theta));2268 d1 = sin(siarg); 2156 2269 t1 = d1 * d1; 2157 2270 //* Computing 2nd power */ … … 2159 2272 t2 = d1 * d1 * 4.0 * sin(theta); 2160 2273 //* Computing 2nd power */ 2161 d1 = qq * h * cos(theta);2274 d1 = siarg; 2162 2275 b1 = d1 * d1; 2163 2276 //* Computing 2nd power */ 2164 2277 d1 = qq * rr * sin(theta); 2165 2278 b2 = d1 * d1; 2166 retval = t1 * t2 / b1 / b2; 2167 2279 if (besarg == 0.0){ 2280 be = sin(theta); 2281 }else{ 2282 be = t2 / b2; 2283 } 2284 if (siarg == 0.0){ 2285 si = 1.0; 2286 }else{ 2287 si = t1 / b1; 2288 } 2289 retval = be * si; 2290 2168 2291 return (retval); 2169 2292 … … 2181 2304 double retval,arg; //Local variables 2182 2305 2183 arg = qq*ra*sqrt((1+nu*nu)/2+(1-nu*nu)*cos(theta)/2); 2184 2185 retval = 2*NR_BessJ1(arg)/arg; 2186 2306 arg = qq*ra*sqrt((1.0+nu*nu)/2+(1.0-nu*nu)*cos(theta)/2); 2307 if (arg == 0.0){ 2308 retval = 1.0; 2309 }else{ 2310 retval = 2.0*NR_BessJ1(arg)/arg; 2311 } 2312 2187 2313 //square it 2188 2314 retval *= retval; … … 2381 2507 yyy = inner; 2382 2508 2383 if(arg1 == 0 ) { //limiting value of sinc(0) is 1; sinc is not defined in math.h2509 if(arg1 == 0.0) { //limiting value of sinc(0) is 1; sinc is not defined in math.h 2384 2510 yyy += Pi*rad*rad*len*2.0*NR_BessJ1(arg2)/arg2; 2385 2511 } else { … … 2500 2626 yyy = inner; 2501 2627 2502 if(arg1 == 0 ) { //limiting value of sinc(0) is 1; sinc is not defined in math.h2628 if(arg1 == 0.0) { //limiting value of sinc(0) is 1; sinc is not defined in math.h 2503 2629 yyy += Pi*rad*rad*len*2.0*NR_BessJ1(arg2)/arg2; 2504 2630 } else { … … 2584 2710 yyy = inner; 2585 2711 2586 if(arg1 == 0 ) { //limiting value of sinc(0) is 1; sinc is not defined in math.h2712 if(arg1 == 0.0) { //limiting value of sinc(0) is 1; sinc is not defined in math.h 2587 2713 yyy += Pi*rad*rad*len*2.0*NR_BessJ1(arg2)/arg2; 2588 2714 } else { … … 2705 2831 yyy = inner; 2706 2832 2707 if(arg1 == 0 ) { //limiting value of sinc(0) is 1; sinc is not defined in math.h2833 if(arg1 == 0.0) { //limiting value of sinc(0) is 1; sinc is not defined in math.h 2708 2834 yyy += Pi*rad*rad*len*2.0*NR_BessJ1(arg2)/arg2; 2709 2835 } else { … … 2789 2915 yyy = inner; 2790 2916 2791 if(arg1 == 0 ) { //limiting value of sinc(0) is 1; sinc is not defined in math.h2917 if(arg1 == 0.0) { //limiting value of sinc(0) is 1; sinc is not defined in math.h 2792 2918 yyy += Pi*rad*rad*len*2.0*NR_BessJ1(arg2)/arg2; 2793 2919 } else { … … 2865 2991 2866 2992 lolim = exp(log(radius)-(4.*sigma)); 2867 if (lolim<0 ) {2868 lolim=0 ; //to avoid numerical error when va<0 (-ve r value)2993 if (lolim<0.0) { 2994 lolim=0.0; //to avoid numerical error when va<0 (-ve r value) 2869 2995 } 2870 2996 uplim = exp(log(radius)+(4.*sigma)); … … 2908 3034 Pi = 4.0*atan(1.0); 2909 3035 nord = 76; 2910 lolim = 0 ;3036 lolim = 0.0; 2911 3037 uplim = Pi/2; 2912 3038 halfheight = length/2.0; … … 2940 3066 dr2 = rhor-rhosolv; 2941 3067 dr3= rhoh-rhor; 2942 vol1 = Pi*rad*rad*(2 *length);2943 vol2 = Pi*(rad+radthick)*(rad+radthick)*(2 *length+2*facthick);2944 vol3= Pi*(rad)*(rad)*(2 *length+2*facthick);3068 vol1 = Pi*rad*rad*(2.0*length); 3069 vol2 = Pi*(rad+radthick)*(rad+radthick)*(2.0*length+2.0*facthick); 3070 vol3= Pi*(rad)*(rad)*(2.0*length+2.0*facthick); 2945 3071 besarg1 = qq*rad*sin(dum); 2946 3072 besarg2 = qq*(rad+radthick)*sin(dum); … … 2948 3074 sinarg2 = qq*(length+facthick)*cos(dum); 2949 3075 2950 t1 = 2 *vol1*dr1*sin(sinarg1)/sinarg1*NR_BessJ1(besarg1)/besarg1;2951 t2 = 2 *vol2*dr2*sin(sinarg2)/sinarg2*NR_BessJ1(besarg2)/besarg2;2952 t3 = 2 *vol3*dr3*sin(sinarg2)/sinarg2*NR_BessJ1(besarg1)/besarg1;3076 t1 = 2.0*vol1*dr1*sin(sinarg1)/sinarg1*NR_BessJ1(besarg1)/besarg1; 3077 t2 = 2.0*vol2*dr2*sin(sinarg2)/sinarg2*NR_BessJ1(besarg2)/besarg2; 3078 t3 = 2.0*vol3*dr3*sin(sinarg2)/sinarg2*NR_BessJ1(besarg1)/besarg1; 2953 3079 2954 3080 retval = ((t1+t2+t3)*(t1+t2+t3))*sin(dum); … … 2998 3124 arg4= (mu*tb/2.0)*cos(Pi*uu/2.0); 2999 3125 3000 if(arg1==0 ){3126 if(arg1==0.0){ 3001 3127 t1 = 1.0; 3002 3128 } else { 3003 3129 t1 = (sin(arg1)/arg1); //defn for CSPP model sin(arg1)/arg1 test: (sin(arg1)/arg1)*(sin(arg1)/arg1) 3004 3130 } 3005 if(arg2==0 ){3131 if(arg2==0.0){ 3006 3132 t2 = 1.0; 3007 3133 } else { 3008 3134 t2 = (sin(arg2)/arg2); //defn for CSPP model sin(arg2)/arg2 test: (sin(arg2)/arg2)*(sin(arg2)/arg2) 3009 3135 } 3010 if(arg3==0 ){3136 if(arg3==0.0){ 3011 3137 t3 = 1.0; 3012 3138 } else { 3013 3139 t3 = sin(arg3)/arg3; 3014 3140 } 3015 if(arg4==0 ){3141 if(arg4==0.0){ 3016 3142 t4 = 1.0; 3017 3143 } else { … … 3073 3199 for(i=0;i<nordi;i++) { 3074 3200 //setup inner integral over the ellipsoidal cross-section 3075 summj=0 ;3201 summj=0.0; 3076 3202 sigma = ( Gauss76Z[i]*(vb-va) + va + vb )/2.0; //the outer dummy 3077 3203 … … 3088 3214 //finish the outer integral cc already scaled 3089 3215 arg = mu*cc*sigma/2.0; 3090 if ( arg == 0 ) {3216 if ( arg == 0.0 ) { 3091 3217 answer *= 1.0; 3092 3218 } else { -
sans/XOP_Dev/SANSAnalysis/lib/libSphere.c
r593 r632 14 14 { 15 15 double scale,radius,delrho,bkg,sldSph,sldSolv; //my local names 16 double bes,f,vol,f2,pi ;17 16 double bes,f,vol,f2,pi,qr; 17 18 18 pi = 4.0*atan(1.0); 19 19 scale = dp[0]; … … 24 24 25 25 delrho = sldSph - sldSolv; 26 //handle q==0 separately 27 if(q==0){ 28 f = 4.0/3.0*pi*radius*radius*radius*delrho*delrho*scale*1.0e8 + bkg; 29 return(f); 26 //handle qr==0 separately 27 qr = q*radius; 28 if(qr == 0.0){ 29 bes = 1.0; 30 }else{ 31 bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 30 32 } 31 33 32 bes = 3.0*(sin(q*radius)-q*radius*cos(q*radius))/(q*q*q)/(radius*radius*radius);33 34 vol = 4.0*pi/3.0*radius*radius*radius; 34 f = vol*bes*delrho; // [=] 35 f = vol*bes*delrho; // [=] A-1 35 36 // normalize to single particle volume, convert to 1/cm 36 37 f2 = f * f / vol * 1.0e8; // [=] 1/cm … … 60 61 qr=x*rcore; 61 62 contr = rhocore-rhoshel; 62 bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 63 if(qr == 0.0){ 64 bes = 1.0; 65 }else{ 66 bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 67 } 63 68 vol = 4.0*pi/3.0*rcore*rcore*rcore; 64 69 f = vol*bes*contr; … … 66 71 qr=x*(rcore+thick); 67 72 contr = rhoshel-rhosolv; 68 bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 73 if(qr == 0.0){ 74 bes = 1.0; 75 }else{ 76 bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 77 } 69 78 vol = 4.0*pi/3.0*pow((rcore+thick),3); 70 79 f += vol*bes*contr; 71 72 // normalize to particle volume and rescale from [ -1] to [cm-1]80 81 // normalize to particle volume and rescale from [A-1] to [cm-1] 73 82 f2 = f*f/vol*1.0e8; 74 83 … … 102 111 qr=x*rcore; 103 112 contr = rhocore-rhoshel; 104 bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 113 if(qr == 0){ 114 bes = 1.0; 115 }else{ 116 bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 117 } 105 118 vol = 4.0*pi/3.0*rcore*rcore*rcore; 106 119 f = vol*bes*contr; … … 108 121 qr=x*(rcore+thick); 109 122 contr = rhoshel-rhosolv; 110 bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 123 if(qr == 0.0){ 124 bes = 1.0; 125 }else{ 126 bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 127 } 111 128 vol = 4.0*pi/3.0*pow((rcore+thick),3); 112 129 f += vol*bes*contr; 113 114 // normalize to the particle volume and rescale from [ -1] to [cm-1]130 131 // normalize to the particle volume and rescale from [A-1] to [cm-1] 115 132 //note that for the vesicle model, the volume is ONLY the shell volume 116 133 vol = 4.0*pi/3.0*(pow((rcore+thick),3)-pow(rcore,3)); … … 388 405 389 406 //small QR limit - use Guinier approx 390 zp8 = zz+8 ;407 zp8 = zz+8.0; 391 408 if(x*ravg < 0.1) { 392 409 i_zero = scale*delrho*delrho*1.e8*4.*pi/3.*pow(ravg,3); … … 399 416 // 400 417 401 aa = (zz+1 )/x/ravg;418 aa = (zz+1.0)/x/ravg; 402 419 403 420 at1 = atan(1.0/aa); … … 420 437 421 438 pq = log10(g1) - 6.0*log10(zp1) + 6.0*log10(ravg); 422 pq = pow(10,pq)*8 *pi*pi*delrho*delrho;439 pq = pow(10,pq)*8.0*pi*pi*delrho*delrho; 423 440 424 441 // … … 483 500 // so just use the limiting Guiner value 484 501 if(qr<0.1) { 485 h1 = scale*cont*cont*1.e8*4.*pi/3 *pow(rad,3);502 h1 = scale*cont*cont*1.e8*4.*pi/3.0*pow(rad,3); 486 503 h1 *= (1. + 15.*pow(pd,2) + 27.*pow(pd,4) +27./7.*pow(pd,6) ); //6th moment 487 504 h1 /= (1.+3.*pd*pd); //3rd moment … … 495 512 // normal calculation 496 513 h1 = -0.5*qw + qr*qr*qw + (qw*qw*qw)/3.0; 497 h1 -= 5.0/2.0*cos(2 *qr)*sin(qw)*cos(qw);498 h1 += 0.5*qr*qr*cos(2 *qr)*sin(2*qw);499 h1 += 0.5*qw*qw*cos(2 *qr)*sin(2*qw);500 h1 += qw*qr*sin(2 *qr)*cos(2*qw);514 h1 -= 5.0/2.0*cos(2.0*qr)*sin(qw)*cos(qw); 515 h1 += 0.5*qr*qr*cos(2.0*qr)*sin(2.0*qw); 516 h1 += 0.5*qw*qw*cos(2.0*qr)*sin(2.0*qw); 517 h1 += qw*qr*sin(2.0*qr)*cos(2.0*qw); 501 518 h1 += 3.0*qw*(cos(qr)*cos(qw))*(cos(qr)*cos(qw)); 502 519 h1+= 3.0*qw*(sin(qr)*sin(qw))*(sin(qr)*sin(qw)); … … 550 567 551 568 va = -4.0*sig + rad; 552 if (va<0 ) {553 va=0 ; //to avoid numerical error when va<0 (-ve q-value)569 if (va<0.0) { 570 va=0.0; //to avoid numerical error when va<0 (-ve q-value) 554 571 } 555 572 vb = 4.0*sig +rad; … … 604 621 va = -3.5*sig + mu; 605 622 va = exp(va); 606 if (va<0 ) {607 va=0 ; //to avoid numerical error when va<0 (-ve q-value)623 if (va<0.0) { 624 va=0.0; //to avoid numerical error when va<0 (-ve q-value) 608 625 } 609 626 vb = 3.5*sig*(1.0+sig) +mu; … … 642 659 643 660 pi = 4.0*atan(1.0); 644 retval = (1 / (sig*pt*sqrt(2.0*pi)) )*exp( -0.5*(log(pt) - mu)*(log(pt) - mu)/sig/sig );661 retval = (1.0/ (sig*pt*sqrt(2.0*pi)) )*exp( -0.5*(log(pt) - mu)*(log(pt) - mu)/sig/sig ); 645 662 return(retval); 646 663 } … … 791 808 double psf11,psf12,psf22; 792 809 double phi1,phi2,phr,a3; 793 double v1,v2,n1,n2,qr1,qr2,b1,b2 ;810 double v1,v2,n1,n2,qr1,qr2,b1,b2,sc1,sc2; 794 811 int err; 795 812 … … 825 842 qr1 = r1*x; 826 843 qr2 = r2*x; 827 828 b1 = r1*r1*r1*(rho1-rhos)*4.0*pi*(sin(qr1)-qr1*cos(qr1))/qr1/qr1/qr1; 829 b2 = r2*r2*r2*(rho2-rhos)*4.0*pi*(sin(qr2)-qr2*cos(qr2))/qr2/qr2/qr2; 844 845 if (qr1 == 0){ 846 sc1 = 1.0/3.0; 847 }else{ 848 sc1 = (sin(qr1)-qr1*cos(qr1))/qr1/qr1/qr1; 849 } 850 if (qr2 == 0){ 851 sc2 = 1.0/3.0; 852 }else{ 853 sc2 = (sin(qr2)-qr2*cos(qr2))/qr2/qr2/qr2; 854 } 855 b1 = r1*r1*r1*(rho1-rhos)*4.0*pi*sc1; 856 b2 = r2*r2*r2*(rho2-rhos)*4.0*pi*sc2; 830 857 inten = n1*b1*b1*psf11; 831 858 inten += sqrt(n1*n2)*2.0*b1*b2*psf12; … … 941 968 double s1,s2,v,a3,v1,v2,g11,g12,g22,wmv,wmv3,wmv4; 942 969 double a1,a2i,a2,b1,b2,b12,gm1,gm12; 943 double err=0 ,yy,ay,ay2,ay3,t1,t2,t3,f11,y2,y3,tt1,tt2,tt3;970 double err=0.0,yy,ay,ay2,ay3,t1,t2,t3,f11,y2,y3,tt1,tt2,tt3; 944 971 double c11,c22,c12,f12,f22,ttt1,ttt2,ttt3,ttt4,yl,y13; 945 972 double t21,t22,t23,t31,t32,t33,t41,t42,yl3,wma3,y1; … … 1059 1086 1060 1087 ii=0; 1061 fval=0 ;1088 fval=0.0; 1062 1089 1063 1090 do { 1064 1091 ri = rcore + (double)ii*ts + (double)ii*tw; 1065 voli = 4 *pi/3*ri*ri*ri;1092 voli = 4.0*pi/3.0*ri*ri*ri; 1066 1093 sldi = rhocore-rhoshel; 1067 1094 fval += voli*sldi*F_func(ri*x); 1068 1095 ri += ts; 1069 voli = 4 *pi/3*ri*ri*ri;1096 voli = 4.0*pi/3.0*ri*ri*ri; 1070 1097 sldi = rhoshel-rhocore; 1071 1098 fval += voli*sldi*F_func(ri*x); … … 1075 1102 fval *= fval; //square it 1076 1103 fval /= voli; //normalize by the overall volume 1077 fval *= scale*1 e8;1104 fval *= scale*1.0e8; 1078 1105 fval += bkg; 1079 1106 … … 1132 1159 1133 1160 ii=minPairs; 1134 fval=0 ;1135 d1 = 0 ;1136 d2 = 0 ;1137 r1 = 0 ;1138 r2 = 0 ;1139 distr = 0 ;1140 first = 1 ;1161 fval=0.0; 1162 d1 = 0.0; 1163 d2 = 0.0; 1164 r1 = 0.0; 1165 r2 = 0.0; 1166 distr = 0.0; 1167 first = 1.0; 1141 1168 do { 1142 1169 //make the current values old … … 1156 1183 } while(ii<=maxPairs); 1157 1184 1158 fval /= 4 *pi/3*avg*avg*avg; //normalize by the overall volume1185 fval /= 4.0*pi/3.0*avg*avg*avg; //normalize by the overall volume 1159 1186 fval /= distr; 1160 1187 fval *= scale; … … 1172 1199 pi = 4.0*atan(1.0); 1173 1200 ii=0; 1174 fval=0 ;1201 fval=0.0; 1175 1202 1176 1203 do { 1177 1204 ri = rcore + (double)ii*ts + (double)ii*tw; 1178 voli = 4 *pi/3*ri*ri*ri;1205 voli = 4.0*pi/3.0*ri*ri*ri; 1179 1206 sldi = rhocore-rhoshel; 1180 1207 fval += voli*sldi*F_func(ri*x); 1181 1208 ri += ts; 1182 voli = 4 *pi/3*ri*ri*ri;1209 voli = 4.0*pi/3.0*ri*ri*ri; 1183 1210 sldi = rhoshel-rhocore; 1184 1211 fval += voli*sldi*F_func(ri*x); … … 1188 1215 fval *= fval; 1189 1216 fval /= voli; 1190 fval *= 1 e8;1217 fval *= 1.0e8; 1191 1218 1192 1219 return(fval); // this result still needs to be multiplied by scale and have background added … … 1198 1225 double dr; 1199 1226 1200 dr = zz*log(x) - gammln(zz+1 )+(zz+1)*log((zz+1)/avg)-(x/avg*(zz+1));1227 dr = zz*log(x) - gammln(zz+1.0)+(zz+1.0)*log((zz+1.0)/avg)-(x/avg*(zz+1.0)); 1201 1228 return (exp(dr)); 1202 1229 } … … 1221 1248 double 1222 1249 F_func(double qr) { 1223 return(3*(sin(qr) - qr*cos(qr))/(qr*qr*qr)); 1250 double sc; 1251 if (qr == 0.0){ 1252 sc = 1.0; 1253 }else{ 1254 sc=(3.0*(sin(qr) - qr*cos(qr))/(qr*qr*qr)); 1255 } 1256 return sc; 1224 1257 } 1225 1258 … … 1310 1343 contr = rhocore-rhoshel1; 1311 1344 bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 1312 vol = 4.0*pi/3 *rcore*rcore*rcore;1345 vol = 4.0*pi/3.0*rcore*rcore*rcore; 1313 1346 f = vol*bes*contr; 1314 1347 //now the shell (1) … … 1377 1410 contr = rhocore-rhoshel1; 1378 1411 bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 1379 vol = 4.0*pi/3 *rcore*rcore*rcore;1412 vol = 4.0*pi/3.0*rcore*rcore*rcore; 1380 1413 f = vol*bes*contr; 1381 1414 //now the shell (1) … … 1453 1486 contr = rhocore-rhoshel1; 1454 1487 bes = 3.0*(sin(qr)-qr*cos(qr))/(qr*qr*qr); 1455 vol = 4.0*pi/3 *rcore*rcore*rcore;1488 vol = 4.0*pi/3.0*rcore*rcore*rcore; 1456 1489 f = vol*bes*contr; 1457 1490 //now the shell (1) … … 1515 1548 range = 8.0; //std deviations for the integration 1516 1549 va = rcore*(1.0-range*pd); 1517 if (va<0 ) {1518 va=0 ; //otherwise numerical error when pd >= 0.3, making a<01550 if (va<0.0) { 1551 va=0.0; //otherwise numerical error when pd >= 0.3, making a<0 1519 1552 } 1520 1553 if (pd>0.3) { … … 1586 1619 range = 8.0; //std deviations for the integration 1587 1620 va = rcore*(1.0-range*pd); 1588 if (va<0 ) {1589 va=0 ; //otherwise numerical error when pd >= 0.3, making a<01621 if (va<0.0) { 1622 va=0.0; //otherwise numerical error when pd >= 0.3, making a<0 1590 1623 } 1591 1624 if (pd>0.3) { -
sans/XOP_Dev/SANSAnalysis/lib/libStructureFactor.c
r356 r632 146 146 eta2 = eta*eta; 147 147 eta3 = eta*eta2; 148 eta4 = eta*eta3; 149 etam1 = 1. - eta; 148 eta4 = eta*eta3; 149 etam1 = 1. - eta; 150 150 etam14 = etam1*etam1*etam1*etam1; 151 151 alpha = ( pow((1. + 2.*eta),2) + eta3*( eta-4.0 ) )/etam14; … … 187 187 pi = 4.0*atan(1.); 188 188 QQ= q; 189 190 diam=dp[0]; //in 189 190 diam=dp[0]; //in A 191 191 zz = dp[1]; //# of charges 192 VolFrac=dp[2]; 192 VolFrac=dp[2]; 193 193 Temp=dp[3]; //in degrees Kelvin 194 194 csalt=dp[4]; //in molarity … … 391 391 d = 1.0-reta; 392 392 d2 = d*d; 393 dak = d/rak; 393 dak = d/rak; 394 394 dd2 = 1.0/d2; 395 395 dd4 = dd2*dd2; … … 659 659 660 660 pi = 4.0*atan(1.0); 661 661 if (rcyl == 0 || hcyl == 0) { 662 return 0.0; 663 } 662 664 a = rcyl; 663 665 b = hcyl/2.0; … … 682 684 683 685 double ee,e1,bd,b1,bL,b2,del,ddd,diam; 684 686 687 if (aa == 0 || bb == 0) { 688 return 0.0; 689 } 690 if (aa == bb) { 691 return 2.0*aa; 692 } 685 693 if(aa>bb) { 686 694 ee = (aa*aa - bb*bb)/(aa*aa); -
sans/XOP_Dev/SANSAnalysis/lib/libTwoPhase.c
r554 r632 417 417 418 418 uval = Mw_Mn - 1.0; 419 if(uval == 0 ) {419 if(uval == 0.0) { 420 420 uval = 1e-6; //avoid divide by zero error 421 421 } … … 453 453 bgd = dp[4]; 454 454 455 inten = Ig0*exp(-1.0*x*x*gg*gg/2.0) + Il0/(1 + (x*ll)*(x*ll)) + bgd;455 inten = Ig0*exp(-1.0*x*x*gg*gg/2.0) + Il0/(1.0 + (x*ll)*(x*ll)) + bgd; 456 456 457 457 return(inten);
Note: See TracChangeset
for help on using the changeset viewer.