package sansmodels; public class HardSphereStruct extends StructureFactor{ private double radius, volumeFraction; //Default constructor public HardSphereStruct() { radius = 50.0; volumeFraction = 0.2; setNumberOfParameters(2); String[] parameters = {"Radius (A)", "Vol Fraction (0-1)" }; setParametersText(parameters); } public HardSphereStruct(double inRadius, double inVolFrac) { radius = inRadius; volumeFraction = inVolFrac; setNumberOfParameters(2); String[] parameters = {"Radius (A)", "Vol Fraction (0-1)" }; setParametersText(parameters); } public double calculate(double inX) { double denom, dnum, alpha, beta, gamm, a, asq, ath, afor; double rca, rsa, calp, cbeta, cgam, prefac, c; double phi = volumeFraction; if (phi > 0.99999) phi = 0.99999; denom = Math.pow((1.0-phi),4.0); dnum = Math.pow((1.0 + 2.0*phi),2.0); alpha = dnum/denom; beta = -6.0*phi*Math.pow((1.0 + phi/2.0),2.0)/denom; gamm = 0.5*phi*dnum/denom; a = 2.*inX*radius; asq = a*a; ath = asq*a; afor = ath*a; rca = Math.cos(a); rsa = Math.sin(a); calp = alpha*(rsa/asq - rca/a); cbeta = beta*(2.0*rsa/asq - (asq - 2.0)*rca/ath - 2.0/ath); cgam = gamm*(-rca/a +(4./a)*((3.*asq - 6.)*rca/afor + (asq - 6.)*rsa/ath +6./afor)); prefac = -24.0*phi/a; c = prefac*(calp + cbeta + cgam); return 1.0/(1.0 - c); } public void setParameters(double[] inParameters) { radius = inParameters[0]; volumeFraction = inParameters[1]; } public double[] getParameters() { double[] outParameters = new double[2]; outParameters[0] = radius; outParameters[1] = volumeFraction; return outParameters; } }