package sansmodels; public class PolyRectSphere extends SANSModel{ private double scale, polyDisp, radius, deltaRho, background; //Default constructor public PolyRectSphere() { scale = 1.0; radius = 60.0; polyDisp = 0.12; deltaRho = 3.e-6; background = 0.0; setNumberOfParameters(5); String[] parameters = {"Scale", "Radius (A)", "Polydispersity (0-1)", "Contrast (A-2)", "Background (cm-1)"}; setParametersText(parameters); } public PolyRectSphere(double inScale, double inRadius, double inPolyDisp, double inDeltaRho, double inBackground) { scale = inScale; radius = inRadius; polyDisp = inPolyDisp; deltaRho = inDeltaRho; background = inBackground; setNumberOfParameters(5); String[] parameters = {"Scale", "Radius (A)", "Polydispersity (0-1)", "Contrast (A-2)", "Background (cm-1)"}; setParametersText(parameters); } public double getFormFactor(double inX) { double inten,h1,qw,qr,width,sig,averad3; if (polyDisp <= 0.0) polyDisp = 0.0001; if (polyDisp >= 1.0) polyDisp = 1.0; sig = polyDisp*radius; width = Math.sqrt(3.0)*sig; qw = inX*width; qr = inX*radius; h1 = -0.5*qw + qr*qr*qw + qw*qw*qw/3.; h1 -= 5./2.*Math.cos(2.*qr)*Math.sin(qw)*Math.cos(qw); h1 += 0.5*qr*qr*Math.cos(2.*qr)*Math.sin(2.*qw); h1 += 0.5*qw*qw*Math.cos(2.*qr)*Math.sin(2.*qw); h1 += qw*qr*Math.sin(2.*qr)*Math.cos(2.*qw); h1 += 3.*qw*Math.cos(qr)*Math.cos(qw)*Math.cos(qr)*Math.cos(qw); h1 += 3.*qw*Math.sin(qr)*Math.sin(qw)*Math.sin(qr)*Math.sin(qw); h1 -= 6.*qr*Math.cos(qr)*Math.sin(qr)*Math.cos(qw)*Math.sin(qw); inten = 8.*Math.PI*Math.PI*deltaRho*deltaRho/width/Math.pow(inX,7.0)*h1; averad3 = radius*radius*radius*(1.+3.*polyDisp*polyDisp); inten /= 4.*Math.PI/3.*averad3; return inten*1.0e8*scale*getStructureFactor().calculate(inX) + background; } public void setParameters(double[] inParameters) { scale = inParameters[0]; radius = inParameters[1]; polyDisp = inParameters[2]; deltaRho = inParameters[3]; background = inParameters[4]; } public double[] getParameters() { double[] outParameters = new double[5]; outParameters[0] = scale; outParameters[1] = radius; outParameters[2] = polyDisp; outParameters[3] = deltaRho; outParameters[4] = background; return outParameters; } }