#if !defined(hollow_cylinder_h)
#define hollow_cylinder_h
#include "parameters.hh"
/**
* Structure definition for hollow cylinder parameters
*/
//[PYTHONCLASS] = HollowCylinderModel
//[DISP_PARAMS] = core_radius, radius, length, axis_theta, axis_phi
//[DESCRIPTION] = P(q) = scale*/Vol + bkg, where f is the scattering amplitude.
// core_radius = the radius of core
// radius = the radius of shell
// length = the total length of the cylinder
// sldCyl = SLD of the shell
// sldSolv = SLD of the solvent
// background = incoherent background
//
//[FIXED]= axis_phi.width; axis_theta.width; length.width;core_radius.width; radius
//[ORIENTATION_PARAMS]= axis_phi; axis_theta;axis_phi.width; axis_theta.width
class HollowCylinderModel{
public:
// Model parameters
/// Scale factor
// [DEFAULT]=scale=1.0
Parameter scale;
/// Core radius [A]
// [DEFAULT]=core_radius=20.0 [A]
Parameter core_radius;
/// Shell radius [A]
// [DEFAULT]=radius=30.0 [A]
Parameter radius;
/// Hollow cylinder length [A]
// [DEFAULT]=length=400.0 [A]
Parameter length;
/// SLD_cylinder [1/A^(2)]
// [DEFAULT]=sldCyl=6.3e-6 [1/A^(2)]
Parameter sldCyl;
/// SLD_solvent [1/A^(2)]
// [DEFAULT]=sldSolv=1.0e-6 [1/A^(2)]
Parameter sldSolv;
/// Incoherent Background [1/cm]
// [DEFAULT]=background=0.01 [1/cm]
Parameter background;
/// Orientation of the long axis of the hollow cylinder w/respect incoming beam [deg]
// [DEFAULT]=axis_theta=90.0 [deg]
Parameter axis_theta;
/// Orientation of the long axis of the hollow cylinder in the plane of the detector [deg]
// [DEFAULT]=axis_phi=0.0 [deg]
Parameter axis_phi;
//Constructor
HollowCylinderModel();
//Operators to get I(Q)
double operator()(double q);
double operator()(double qx , double qy);
double calculate_ER();
double evaluate_rphi(double q, double phi);
};
#endif