/*
TODO: Add 2D model
*/
#if !defined(flexible_cylinder_h)
#define flexible_cylinder_h
/** Structure definition for Flexible cylinder parameters
* [PYTHONCLASS] = FlexibleCylinderModel
* [DISP_PARAMS] = length, radius, axis_theta, axis_phi
[DESCRIPTION] = Note : scale and contrast are both multiplicative factors in the model and are perfectly
correlated. One or both of these parameters must be held fixed during model fitting.
[FIXED]= length.width; radius.width; axis_theta.width; axis_phi.width
[ORIENTATION_PARAMS]= axis_phi; axis_theta; axis_phi.width; axis_theta.width
**/
typedef struct {
/// Scale factor
// [DEFAULT]=scale=1.0
double scale;
/// Length of the flexible cylinder [A]
// [DEFAULT]=length=1000 [A]
double length;
/// Kuhn length of the flexible cylinder [A]
// [DEFAULT]=kuhn_length=100 [A]
double kuhn_length;
/// Radius of the flexible cylinder [A]
// [DEFAULT]=radius=20.0 [A]
double radius;
/// Contrast [1/AČ]
// [DEFAULT]=contrast=5.3e-6 [1/AČ]
double contrast;
/// Incoherent Background [1/cm]
// [DEFAULT]=background=0.0001 [1/cm]
double background;
/// Orientation of the flexible cylinder axis w/respect incoming beam [rad]
// [DEFAULT]=axis_theta=1.0 [rad]
double axis_theta;
/// Orientation of the flexible cylinder in the plane of the detector [rad]
// [DEFAULT]=axis_phi=1.0 [rad]
double axis_phi;
} FlexibleCylinderParameters;
/// 1D scattering function
double flexible_cylinder_analytical_1D(FlexibleCylinderParameters *pars, double q);
/// 2D scattering function
double flexible_cylinder_analytical_2D(FlexibleCylinderParameters *pars, double q, double phi);
double flexible_cylinder_analytical_2DXY(FlexibleCylinderParameters *pars, double qx, double qy);
double flexible_cylinder_analytical_2D_scaled(FlexibleCylinderParameters *pars, double q, double q_x, double q_y);
#endif