#if !defined(barbell_h)
#define barbell_h
#include "parameters.hh"
/**
* Structure definition for BarBell parameters
*/
//[PYTHONCLASS] = BarBellModel
//[DISP_PARAMS] = rad_bar,len_bar,rad_bell,phi, theta
//[DESCRIPTION] =Calculates the scattering from a barbell-shaped cylinder. That is
// a sphereocylinder with spherical end caps
// that have a radius larger than that of
// the cylinder and the center of the end cap
// radius lies outside of the cylinder.
// Note: As the length of cylinder(bar) -->0,
// it becomes a dumbbell.
// And when rad_bar = rad_bell,
// it is a spherocylinder.
// It must be that rad_bar <(=) rad_bell.
// [Parameters];
// scale: volume fraction of spheres,
// background:incoherent background,
// rad_bar: radius of the cylindrical bar,
// len_bar: length of the cylindrical bar,
// rad_bell: radius of the spherical bell,
// sld_barbell: SLD of the barbell,
// sld_solv: SLD of the solvent.
//
//[FIXED]= rad_bar.width;len_bar;rad_bell;phi.width; theta.width
//[ORIENTATION_PARAMS]= phi; theta; phi.width; theta.width
class BarBellModel {
public:
// Model parameters
/// Scale factor
// [DEFAULT]=scale= 1.0
Parameter scale;
/// rad_bar [A]
// [DEFAULT]=rad_bar=20.0 [A]
Parameter rad_bar;
/// length of the bar [A]
// [DEFAULT]=len_bar=400.0 [A]
Parameter len_bar;
/// Radius of sphere [A]
// [DEFAULT]=rad_bell=40.0 [A]
Parameter rad_bell;
/// sld_barbell [1/A^(2)]
// [DEFAULT]=sld_barbell= 1.0e-6 [1/A^(2)]
Parameter sld_barbell;
/// sld_solv [1/A^(2)]
// [DEFAULT]=sld_solv= 6.3e-6 [1/A^(2)]
Parameter sld_solv;
/// Incoherent Background [1/cm]
// [DEFAULT]=background=0.0 [1/cm]
Parameter background;
/// Angle of the main axis against z-axis in detector plane [deg]
// [DEFAULT]=theta=0.0 [deg]
Parameter theta;
/// Azimuthal angle around z-axis in detector plane [deg]
// [DEFAULT]=phi=0.0 [deg]
Parameter phi;
// Constructor
BarBellModel();
// Operators to get I(Q)
double operator()(double q);
double operator()(double qx, double qy);
double calculate_ER();
double calculate_VR();
double evaluate_rphi(double q, double phi);
};
#endif