package sansmodels; public class HardDiskStruct extends StructureFactor{ private double radius, volumeFraction; //Default constructor public HardDiskStruct() { radius = 50.0; volumeFraction = 0.2; setNumberOfParameters(2); String[] parameters = {"Radius (A)", "Vol Fraction (0-1)" }; setParametersText(parameters); } public HardDiskStruct(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 chi, a, b, g, qr, qr2; double ta, tb, tg, vstruc, bess1qr, bess0qr, bess1qr2; double phi = volumeFraction; if (phi > 0.99999) phi = 0.99999; g = 1.0/(Math.pow((1.0-phi),1.5)); chi = (1.0+phi)/((1.0-phi)*(1.0-phi)*(1.0-phi)); a = (1.0+(2.0*phi - 1.0)*chi + 2.0*phi*g)/phi; b = ((1-phi)*chi - 1.0 - 3.0*phi*g)/phi; qr = inX*radius; qr2 = 2.0*qr; bess0qr = SpecialFunction.j0(qr); bess1qr = SpecialFunction.j1(qr); bess1qr2 = SpecialFunction.j1(qr2); ta = a*bess1qr*bess1qr/qr/qr; tb = b*bess0qr*bess1qr/qr; tg = g*bess1qr2/qr; vstruc = 1.0 + 4.0*phi*(ta+tb+tg); return 1.0/vstruc; } 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; } }