Package: umbrello
Version: 4:3.3.2-3
Severity: normal

Hello

When I import a class from my refelection.h header file.
I see nothing in the class

When I comment the enum part of the class and import again the class
I obtaine the right attributes.

Now if I use another file with an enum in it (mode.h)
it works fine. strange...

the uml code generation from autodia is worst so umbrello seems to be
the only free as in beer choice for uml diagramm on Debian/GNU/Linux ;).

Have a nice day.

Fred

-- System Information:
Debian Release: 3.1
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: i386 (i686)
Kernel: Linux 2.6.10-1-686
Locale: [EMAIL PROTECTED], [EMAIL PROTECTED] (charmap=ISO-8859-15)

Versions of packages umbrello depends on:
ii  kdelibs4             4:3.3.2-4.0.2       KDE core libraries
ii  libart-2.0-2         2.3.17-1            Library of functions for 2D graphi
ii  libc6                2.3.2.ds1-20        GNU C Library: Shared libraries an
ii  libfam0c102          2.7.0-6             client library to control the FAM 
ii  libgcc1              1:3.4.3-12          GCC support library
ii  libice6              4.3.0.dfsg.1-12.0.1 Inter-Client Exchange library
ii  libidn11             0.5.13-1.0          GNU libidn library, implementation
ii  libpng12-0           1.2.8rel-1          PNG library - runtime
ii  libqt3c102-mt        3:3.3.4-2           Qt GUI Library (Threaded runtime v
ii  libsm6               4.3.0.dfsg.1-12.0.1 X Window System Session Management
ii  libstdc++5           1:3.3.5-8           The GNU Standard C++ Library v3
ii  libx11-6             4.3.0.dfsg.1-12.0.1 X Window System protocol client li
ii  libxext6             4.3.0.dfsg.1-12.0.1 X Window System miscellaneous exte
ii  libxrender1          0.8.3-7             X Rendering Extension client libra
ii  xlibs                4.3.0.dfsg.1-12     X Keyboard Extension (XKB) configu
ii  zlib1g               1:1.2.2-3           compression library - runtime

-- no debconf information
//+======================================================================

// $Source: /usr/local/CVS/Libraries/HKL/include/Attic/reflection.h,v $

//

// Project:      HKL Library

//

// Description:  Header file for the class reflection

// (Delos Vincent) - 26 janv. 2005

//

// $Author: picca $

//

// $Revision: 1.1.2.12 $

//

// $Log: reflection.h,v $
// Revision 1.1.2.12  2005/04/20 08:29:00  picca
// -configuration de scons pour compiler sous Windows
// -modification du source pour compiler avec cl (VC++6.0)
//
// Revision 1.1.2.11  2005/04/06 16:10:38  picca
// Probleme de caractere unicode dans un des commentaires de diffractoemter.h
//
// Revision 1.1.2.10  2005/04/01 10:06:55  picca
// -Typography
// -ajout des fonctions de test sur la class crystal
//
// Revision 1.1.2.9  2005/03/31 14:30:42  picca
// Modification de la classe crystal
// - ajout d'un champ m_name
// - ajout d'un champ m_reflectionList pour stocker les reflections propres au cristal
//
// Modifications des autres classes pour prendre en compte ce changement.
//
// Revision 1.1.2.8  2005/03/31 11:28:26  picca
// Modification de la classe Reflection.
// - ajout de 2 champs:
// 	m_source pour sauvegarder l'état de la source pour chaque reflection.
// 	m_flag pour indiquer si oui ou non on utilise la reflection dans le calcule de U
// - ajout des getSet pour tous les champs de reflection.
// - ajout des test de ces getSet.
//
// Revision 1.1.2.7  2005/03/23 08:37:14  picca
// not it compile
//
// Revision 1.1.2.6  2005/03/23 07:00:27  picca
// major change
// -switch from autotools to scons
// -add the axe and quaternion class
// -modification of the angleconfiguration class
//
// Revision 1.1.2.5  2005/03/10 15:20:01  picca
// -Ajout dans operateur == du test sur m_setOfAngles
//
// Revision 1.1.2.4  2005/03/10 10:00:15  picca
// -add a static string m_strRelevance to display the relevance in a human readable way.
//
// modified the operator<<  to display the string and no mode int reflection::relevance
//
// Revision 1.1.2.3  2005/03/03 09:17:33  picca
// Ajout de la surcharge de l'operateur<< pour la classe reflection.
// Ajout de la surcharge de l'opérateur== pour la classe reflection. On ne prend pas encore en compte la comparaison de la classe angleconfiguration qui est à revoir.
// Suppression de la la fonction printOnScreen remplacée par la première surcharge.
//
// Revision 1.1.2.2  2005/03/02 09:20:22  picca
// modif pour prendre en compte le renommage de angleconfig.h en angleconfiguration.h
//
// Revision 1.1.2.1  2005/03/01 08:52:01  picca
// automake et cppUnit
//
// Revision 1.8  2005/02/08 17:03:08  picca
// update the documentation
//
// Revision 1.7  2005/02/08 15:51:05  picca
// update the documenattion
//
// Revision 1.6  2005/01/27 09:23:53  delos
// Commentaires pour CVS en tete des fichiers
//

//

//

// copyleft :       Synchrotron SOLEIL

//                  L'Orme des Merisiers

//                  Saint-Aubin - BP 48

//                  91192 GIF-sur-YVETTE CEDEX

//

//-======================================================================
#ifndef _REFLECTION_H_
#define _REFLECTION_H_

#include <math.h>
#include <iostream>
#include <string>
#include "angleconfiguration.h"
#include "source.h"
#include "svecmat.h"

/**
 * \brief The class reflection defines a configuration where a diffraction occurs. It
 * 
 * is defined by a set of angles, the 3 integers associated to the reciprocal
 * lattice and its relevance to make sure we only take into account significant
 * reflections.
 */
class Reflection
{
public:
  /**
   * \brief The enumeration "relevance" to make sure we only take into account significant reflections.
   */
  enum Relevance
  {
    notVerySignificant = 0, //!< not very significant reflection
    Significant, //!< significant reflection
    VerySignificant, //!< very significant reflection
    Best //!< Best reflection
  };
  
  /**
   * \brief Constructor from parameters
   * \param angleConfiguration #angleConfiguration The angle configuration.
   * \param s the #source states for this reflection.
   * \param h the h number of the reflection.
   * \param k the k number of the reflection.
   * \param l the l number of the reflection.
   * \param this_relevance #relevance the relevance of this reflection.
   * \param is_use true if the reflection is use during calculation.
   *
   * Create a new reflection and populate is members with the parameters
   */
  Reflection(const AngleConfiguration & aC,
             const Source & s,
             double h,
             double k,
             double l,
             const Relevance relevance,
             bool is_use);

  /**
   * \brief Destructor
   *
   * Release the memory of the reflection this
   */
  virtual ~Reflection();

  /**
   * \brief overload of the == operator for the reflection class
   * @param r The reflection we want to compare.
   */
  bool operator == (const Reflection & r) const;
   
  AngleConfiguration & getSetAngleConfiguration(); //!< get the angle configuration
  const AngleConfiguration & getAngleConfiguration() const; //!< get the angle configuration
  const Source & getSource() const; //!< get the source parameters of the reflection
  double get_h() const; //!< get the h parameter of the reflection
  double get_k() const; //!< get the k parameter of the reflection
  double get_l() const; //!< get the l parameter of the reflection
  Relevance getRelevance() const; //!< get the relevance parameter of the reflection
  bool getFlag() const; //!< is the reflection use during the U calculation
  
  void set_h(double h); //!< set h
  void set_k(double k); //!< set k
  void set_l(double l); //!< set l
  void setRelevance(Relevance relevance); //!< set relevance
  void setFlag(bool flag); //!< set flag
  
  /**
   * \brief set all the parameters of the reflection
   */
  void set(double h, double k, double l, Relevance relevance, bool flag);
  
  std::string getStrRelevance() const; //!< get the relevance parameter of the reflection as a string
  
  /**
   * \brief compute the angle between two reflections
   * \param h2 the h parameters of the second reflection
   * \param k2 the k parameters of the second reflection
   * \param l2 the l parameters of the second reflection
   *
   * Compute the angle between two reflections to get an idea about their level
   * of relevance (return the absolute value). As an example it can detect if
   * (m_h, m_k, m_l) and (h2, k2, l2) are parallel.
   */
  double computeAngle(double h2, double k2, double l2) const;
   
  /**
   * \brief return the Rotatio matrix of the angleConfiguration
   * \return The rotation matrix
   *
   * This method compute the rotation matrix by applying each Axe transformation from the m_samples vector.
   * So we can describe every diffractometer if we put the Axe in the right position into this vector
   */
  smatrix getSampleRotationMatrix() const;
 
  /**
   * \brief return the diffraction vector calculated from the detectors angles
   * \return the Q vector
   */
  svector getQ() const;


private:
  AngleConfiguration m_aC; //!< The corresponding angle configuration.
  Source m_source; //!< The corresponding source parameters.
  double m_h; //!< The first of the three numbers (h,k,l).
  double m_k; //!< The second of the three numbers (h,k,l).
  double m_l; //!< The third of the three numbers (h,k,l).
  Relevance m_relevance; //!< Its associated relevance. 
  bool m_flag; //!< is the reflection use for calculation.
  static std::string m_strRelevance[]; //<! the string vector which contain the relevance in human readable way.
};

/**
  * \brief Surcharge de l'operateur << pour la class reflection
  * @param flux The flux to print into
  * @param r
  */
std::ostream & operator << (std::ostream & flux, const Reflection & r);


typedef std::vector<Reflection> ReflectionList;

#endif // _REFLECTION_H_
//+======================================================================

// $Source: /usr/local/CVS/Libraries/HKL/include/Attic/mode.h,v $

//

// Project:      HKL Library

//

// Description:  Header file for the class mode, eulerian_bissectorMode4C, eulerian_constantOmegaMode4C,
// eulerian_horizontal4CBissectorMode6C, eulerian_vertical4CBissectorMode6C, eulerian_lifting3CDetectorMode6C

// (Delos Vincent) - 26 janv. 2005

//

// $Author: picca $

//

// $Revision: 1.1.2.10 $

//

// $Log: mode.h,v $
// Revision 1.1.2.10  2005/04/19 14:01:07  picca
// reecriture du node bissecteur du 4 cercles Eulerien
// -ajout des tests de setMode et computeAngles de la classe diffractoemters
// -ajout des test du mode bissecteur Eulerien 4C.
//
// Revision 1.1.2.9  2005/04/01 10:06:55  picca
// -Typography
// -ajout des fonctions de test sur la class crystal
//
// Revision 1.1.2.8  2005/03/23 08:37:14  picca
// not it compile
//
// Revision 1.1.2.7  2005/03/23 07:00:27  picca
// major change
// -switch from autotools to scons
// -add the axe and quaternion class
// -modification of the angleconfiguration class
//
// Revision 1.1.2.6  2005/03/11 09:41:02  picca
// -changement de nom des classes eulerianDiffractometer4C -> diffractometer_Eulerian4C
// idem pour eulerian 6C et kappa 4C
//
// Revision 1.1.2.5  2005/03/03 18:43:21  picca
// remplacement des noms de classe
// angleconfiguration_eulerian4C -> angleConfiguration_Eulerian4C
//
// idem pour kappa et 6C
//
// Revision 1.1.2.4  2005/03/02 12:43:57  picca
// add the operator<< for the anglecalculation classes.
//
// Revision 1.1.2.3  2005/03/02 09:38:41  picca
// chngement des noms de classe pour les configurations
//
// Revision 1.1.2.2  2005/03/02 09:20:22  picca
// modif pour prendre en compte le renommage de angleconfig.h en angleconfiguration.h
//
// Revision 1.1.2.1  2005/03/01 08:52:01  picca
// automake et cppUnit
//
// Revision 1.17  2005/02/11 15:52:45  picca
// documentation
//
// Revision 1.16  2005/01/27 09:23:53  delos
// Commentaires pour CVS en tete des fichiers
//

//

//

// copyleft :       Synchrotron SOLEIL

//                  L'Orme des Merisiers

//                  Saint-Aubin - BP 48

//                  91192 GIF-sur-YVETTE CEDEX

//

//-======================================================================

/// Define the way we use the diffractometer.


#ifndef _MODE_H_
#define _MODE_H_

#include <iostream>
#include "svecmat.h"
#include "angleconfiguration.h"
#include "HKLException.h"

/**
 * This class defines how to use a diffractomer.
 */
class Mode
{
public:
    
  enum mode {
    E4C_BISSECTOR,
    E4C_CONSTANT_OMEGA,
    E6C_BISSECTOR_VERTICAL_4C,
    E6C_BISSECTOR_HORIZONTAL_4C,
    E6C_LIFTING_3C_DETECTOR
  };
  
  /**
   * @brief Destructor
   *
   * Destructor
   */
  virtual ~Mode();

  /**
   * @brief The main function to get a sample of angles from (h,k,l).
   * @param h The scaterring vector first element.
   * @param k The scaterring vector second element.
   * @param l The scaterring vector third element.
   * @param UB The product of the orientation matrix U by the crystal matrix B.
   * @param lambda The wave length.
   * @return The computed sample of angles.
   *
   * The main function to get a sample of angles from (h,k,l).
   */
  virtual void computeAngles(double h, double k, double l,
                             const smatrix & UB, double lambda,
                             AngleConfiguration * aC) const = 0;

  double _atan2(double s, double c) const;
  double _asin(double s) const throw (HKLException);
  
protected:
  /**
   * @brief Default constructor.
   * @return a new mode
   *
   * Default constructor - protected to make sure this class is abstract.
   */
  Mode();
};

/**
 * This class defines how to use an eulerian diffractomer.
 */
class Mode_Eulerian4C : public Mode
{
public:
  
  /**
   * @brief The main function to get a sample of angles from (h,k,l).
   * @param h The scaterring vector first element.
   * @param k The scaterring vector second element.
   * @param l The scaterring vector third element.
   * @param UB The product of the orientation matrix U by the crystal matrix B.
   * @param lambda The wave length.
   * @return The computed sample of angles.
   *
   * The main function to get a sample of angles from (h,k,l).
   */
  virtual void computeAngles(double h, double k, double l,
                             const smatrix & UB, double lambda,
                             AngleConfiguration * aC) const = 0;

  /**
   * @brief Destructor.
   *
   * Destructor
   */
  virtual ~Mode_Eulerian4C();

protected:

  /**
   * @brief Default constructor.
   * @return a new eulerian_mode
   *
   * Default constructor - protected to make sure this class is abstract.
   */
  Mode_Eulerian4C();
};

/**
 * This class defines how to use an eulerian diffractomer.
 */
class Mode_Eulerian6C : public Mode
{
public:

  /**
   * @brief The main function to get a sample of angles from (h,k,l).
   * @param h The scaterring vector first element.
   * @param k The scaterring vector second element.
   * @param l The scaterring vector third element.
   * @param UB The product of the orientation matrix U by the crystal matrix B.
   * @param lambda The wave length.
   * @return The computed sample of angles.
   *
   * The main function to get a sample of angles from (h,k,l).
   */
  virtual void computeAngles(double h, double k, double l,
                             const smatrix & UB, double lambda,
                             AngleConfiguration * aC) const = 0;

  /**
   * @brief Destructor.
   *
   * Destructor
   */
  virtual ~Mode_Eulerian6C();

protected:

  /**
   * @brief Default constructor.
   * @return a new eulerian_mode
   *
   * Default constructor - protected to make sure this class is abstract.
   */
  Mode_Eulerian6C();
};

/**
 * This class defines how to use a kappa diffractomer.
 */
class Mode_Kappa4C : public Mode
{
public:

  /**
   * @brief The main function to get a sample of angles from (h,k,l).
   * @param h The scaterring vector first element.
   * @param k The scaterring vector second element.
   * @param l The scaterring vector third element.
   * @param UB The product of the orientation matrix U by the crystal matrix B.
   * @param lambda The wave length.
   * @return The computed sample of angles.
   *
   * The main function to get a sample of angles from (h,k,l).
   */
  virtual void computeAngles(double h, double k, double l,
                             const smatrix & UB, double lambda,
                             AngleConfiguration * aC) const = 0;

  /**
   * @brief Destructor.
   *
   * Destructor
   */
  virtual ~Mode_Kappa4C();

protected:

  double m_alpha; //!< The incident angle, its typical value is around 50°.
  
  /**
   * @brief Default constructor.
   * @return a new kappa_mode
   *
   * Default constructor - protected to make sure this class is abstract.
   */
  Mode_Kappa4C();
};

/**
 * The eulerian 4-circle diffractometer in bisector mode. William R. Busing and Henri A. Levy
 * "Angle calculation for 3- and 4- Circle X-ray and  Neutron Diffractometer" (1967)
 * <A HREF="http://journals.iucr.org/index.html";> Acta Cryst.</A>, <B>22</B>, 457-464.
 */
class Mode_Eulerian4C_bissector : public Mode_Eulerian4C
{
public:

  /**
   * @brief Default constructor.
   * @return a new eulerian_bissectorMode4C
   *
   * Default constructor.
   */
  Mode_Eulerian4C_bissector();

  /**
   * @brief The main function to get a sample of angles from (h,k,l).
   * @param h The scaterring vector first element.
   * @param k The scaterring vector second element.
   * @param l The scaterring vector third element.
   * @param UB The product of the orientation matrix U by the crystal matrix B.
   * @param lambda The wave length.
   * @return The computed sample of angles.
   *
   * Solving equation (19) from :
   * William R. Busing and Henri A. Levy "Angle calculation
   * for 3- and 4- Circle X-ray and Neutron Diffractometer" (1967)
   * <A HREF="http://journals.iucr.org/index.html";> Acta Cryst.</A>, <B>22</B>, 457-464.
   * - R11 * hphi1 + R12 * hphi2 + R13 * hphi3 = q
   * - R21 * hphi1 + R22 * hphi2 + R23 * hphi3 = 0
   * - R31 * hphi1 + R32 * hphi2 + R33 * hphi3 = 0
   *
   * - hphi1 = q(-sin(omega)*sin(phi)+cos(omega)*cos(chi)*cos(phi))
   * - hphi2 = q( sin(omega)*cos(phi)+cos(omega)*cos(chi)*sin(phi))
   * - hphi3 = q*cos(omega)*sin(chi)
   *
   * If omega is constant :
   * - chi = arcsin(hphi3 / q*cos(omega))
   * - sin(phi) = (hphi1*sin(omega)-hphi2*cos(omega)*cos(chi)) / D
   * - cos(phi) = (hphi2*sin(omega)+hphi1*cos(omega)*cos(chi)) / D
   *
   * where D = q*[cos(omega)*cos(omega)*cos(chi)*cos(chi) + sin(omega)*sin(omega)]
   * @sa computeAngles_Rafin(), diffractometer_Eulerian4C::test_eulerian4C()
   *
   */
  void computeAngles(double h, double k, double l,
                     const smatrix & UB, double lambda,
                     AngleConfiguration * aC) const throw (HKLException);

  /**
   * @brief Destructor.
   *
   * Destructor
   */
  virtual ~Mode_Eulerian4C_bissector();
};

/**
 * The eulerian 4-circle diffractometer in constant omega mode. William R. Busing and Henri A. Levy
 * "Angle calculation for 3- and 4- Circle X-ray and  Neutron Diffractometer" (1967)
 * <A HREF="http://journals.iucr.org/index.html";> Acta Cryst.</A>, <B>22</B>, 457-464.
 */
class Mode_Eulerian4C_constantOmega : public Mode_Eulerian4C
{
public:

  /**
   * @brief Default constructor.
   * @return a new eulerian_constantOmegaMode4C
   *
   * Default constructor.
   */
  Mode_Eulerian4C_constantOmega(double constantOmega);

  /**
   * @brief The main function to get a sample of angles from (h,k,l).
   * @param h The scaterring vector first element.
   * @param k The scaterring vector second element.
   * @param l The scaterring vector third element.
   * @param UB The product of the orientation matrix U by the crystal matrix B.
   * @param lambda The wave length.
   * @return The computed sample of angles.
   *
   * Solving equation (19) from :
   * William R. Busing and Henri A. Levy "Angle calculation
   * for 3- and 4- Circle X-ray and Neutron Diffractometer" (1967)
   * <A HREF="http://journals.iucr.org/index.html";> Acta Cryst.</A>, <B>22</B>, 457-464.
   * - R11 * hphi1 + R12 * hphi2 + R13 * hphi3 = q
   * - R21 * hphi1 + R22 * hphi2 + R23 * hphi3 = 0
   * - R31 * hphi1 + R32 * hphi2 + R33 * hphi3 = 0
   *
   * If omega is constant :
   * - chi = arcsin(hphi3 / q*cos(omega))
   * - sin(phi) = (hphi1*sin(omega)-hphi2*cos(omega)*cos(chi)) / D
   * - cos(phi) = (hphi2*sin(omega)+hphi1*cos(omega)*cos(chi)) / D
   *
   * where D = q*[cos(omega)*cos(omega)*cos(chi)*cos(chi) + sin(omega)*sin(omega)]
   * @sa computeAngles_Rafin(), diffractometer_Eulerian4C::test_eulerian4C()
   */  
  void computeAngles(double h, double k, double l,
                     const smatrix & UB, double lambda,
                     AngleConfiguration * aC) const throw (HKLException);

  double getConstantOmega() const {return m_constantOmega;} //!< Get the ConstantOmega parameter
  
  void setConstantOmega(double constantOmega) {m_constantOmega = constantOmega;} //!< Set the ConstantOmega parameter

  /**
   * @brief Destructor.
   *
   * Destructor
   */
  virtual ~Mode_Eulerian4C_constantOmega();

private:

  double m_constantOmega; //!< The constantOmega parameter
};

/**
 * @brief Using an eulerian 6-circle diffractometer as an horizontal 4C eulerian one in bisector mode.
 *
 * The eulerian 6-circle diffractometer in horizontal bisector mode as described in <BR>
 * H. You "Angle calculations for a `4S+2D' six-circle diffractometer" (1999)
 * <A HREF="http://journals.iucr.org/index.html";> J. Appl. Cryst.</A>, <B>32</B>, 614-623.<BR>
 * In this mode delta = eta = 0, so the scattering vector formula becomes :<BR>
 * Q = ||Q|| * (0., -sin(theta), cos(theta)) where theta comes from the Bragg relation :<BR>
 * 2tau * sin(theta) = ||Q|| * lambda
 * 
 */
class Mode_Eulerian6C_horizontal4C_bissector : public Mode_Eulerian6C
{
public:

  /**
   * @brief Default constructor.
   * @return a new eulerian_horizontal4CBissectorMode6C
   *
   * Default constructor.
   */
  Mode_Eulerian6C_horizontal4C_bissector();

  /**
   * @brief The main function to get a sample of angles from (h,k,l).
   * @param h The scaterring vector first element.
   * @param k The scaterring vector second element.
   * @param l The scaterring vector third element.
   * @param UB The product of the orientation matrix U by the crystal matrix B.
   * @param lambda The wave length.
   * @return The computed sample of angles.
   *
   * Solving equation (11) from :
   * H. You "Angle calculations for a `4S+2D' six-circle diffractometer" (1999)
   * <A HREF="http://journals.iucr.org/index.html";> J. Appl. Cryst.</A>, <B>32</B>, 614-623.
   * MU.ETA.CHI.PHI.U.B.(h,k,l) = Q
   * @sa diffractometer_Eulerian4C::test_eulerian4C()
   */  
  void computeAngles(double h, double k, double l,
                     const smatrix & UB, double lambda,
                     AngleConfiguration * aC) const throw (HKLException);

  /**
   * @brief Destructor.
   *
   * Destructor
   */
  virtual ~Mode_Eulerian6C_horizontal4C_bissector();
};

/**
 * @brief Using an eulerian 6-circle diffractometer as an vertical 4C eulerian one in bisector mode.
 *
 * The eulerian 6-circle diffractometer in vertical bisector mode as described in <BR>
 * H. You "Angle calculations for a `4S+2D' six-circle diffractometer" (1999)
 * <A HREF="http://journals.iucr.org/index.html";> J. Appl. Cryst.</A>, <B>32</B>, 614-623.<BR>
 * In this mode mu = nu = 0, so the scattering vector formula becomes :<BR>
 * Q = ||Q|| * (cos(theta), -sin(theta), 0.) where theta comes from the Bragg relation :<BR>
 * 2tau * sin(theta) = ||Q|| * lambda
 */
class Mode_Eulerian6C_vertical4C_bissector : public Mode_Eulerian6C
{
public:
  
  /**
   * @brief Default constructor.
   * @return a new eulerian_vertical4CBissectorMode6C
   *
   * Default constructor.
   */
  Mode_Eulerian6C_vertical4C_bissector();

  /**
   * @brief The main function to get a sample of angles from (h,k,l).
   * @param h The scaterring vector first element.
   * @param k The scaterring vector second element.
   * @param l The scaterring vector third element.
   * @param UB The product of the orientation matrix U by the crystal matrix B.
   * @param lambda The wave length.
   * @return The computed sample of angles.
   *
   * Solving equation (11) from :
   * H. You "Angle calculations for a `4S+2D' six-circle diffractometer" (1999)
   * <A HREF="http://journals.iucr.org/index.html";> J. Appl. Cryst.</A>, <B>32</B>, 614-623.
   * MU.ETA.CHI.PHI.U.B.(h,k,l) = Q
   * @sa diffractometer_Eulerian4C::test_eulerian4C()
   */  
  void computeAngles(double h, double k, double l,
                     const smatrix & UB, double lambda,
                     AngleConfiguration * aC) const throw (HKLException);

  /**
   * @brief Destructor.
   *
   * Destructor
   */
  virtual ~Mode_Eulerian6C_vertical4C_bissector();
};

/**
 * @brief The eulerian 6-circle diffractometer as a 3-circles lifting detector geometry.
 *
 * The eulerian 6-circle diffractometer in 3-circles lifting detector mode. We solve equations described in <BR>
 * H. You "Angle calculations for a `4S+2D' six-circle diffractometer" (1999)
 * <A HREF="http://journals.iucr.org/index.html";> J. Appl. Cryst.</A>, <B>32</B>, 614-623.<BR>
 * In this mode eta = chi = phi = 0. <BR>
 * To move the crystal we only use the mu circle, to move the detector we use both delta and nu. <BR>
 * The scattering vector is :<BR>
 * Q = (tau/lambda) * (sin(delta), cos(nu)*cos(delta)-1, sin(nu)*cos(delta))
 */
class Mode_Eulerian6C_lifting3CDetector : public Mode_Eulerian6C
{
public:

  /**
   * @brief Default constructor.
   * @return a new eulerian_lifting3CDetectorMode6C
   *
   * Default constructor.
   */
  Mode_Eulerian6C_lifting3CDetector();

  /**
   * @brief The main function to get a sample of angles from (h,k,l).
   * @param h The scaterring vector first element.
   * @param k The scaterring vector second element.
   * @param l The scaterring vector third element.
   * @param UB The product of the orientation matrix U by the crystal matrix B.
   * @param lambda The wave length.
   * @return The computed sample of angles.
   *
   * Solving equation (11) from :
   * H. You "Angle calculations for a `4S+2D' six-circle diffractometer" (1999)
   * <A HREF="http://journals.iucr.org/index.html";> J. Appl. Cryst.</A>, <B>32</B>, 614-623.
   * MU.U.B.(h,k,l) = Q <BR>
   * In this mode :
   * - eta = chi = phi = 0.
   * - delta = arcsin(hphi1 / kk) where kk = tau/lambda
   * - nu = arccos[(1-Q²/kk²)/(2cos(delta))]
   * - sin(mu)*(hphi2²+hphi3²) = -hphi3*kk*(cos(delta)*cos(nu)-1)+hphi2*kk*sin(nu)*cos(delta)
   * - cos(mu)*(hphi2²+hphi3²) =  hphi2*kk*(cos(delta)*cos(nu)-1)+hphi3*kk*sin(nu)*cos(delta)
   * @sa diffractometer_Eulerian4C::test_eulerian4C()
   */
  void computeAngles(double h, double k, double l,
                     const smatrix & UB, double lambda,
                     AngleConfiguration * aC) const throw (HKLException);

  /**
   * @brief Destructor.
   *
   * Destructor
   */
  virtual ~Mode_Eulerian6C_lifting3CDetector();
};

/*
class kappa_bissectorMode4C : public kappa_mode
{
public:
  kappa_bissectorMode4C();

  angleConfiguration computeAngles(
    int h, int k, int l) const;

  angleConfiguration_Kappa4C convertFromEulerian(
    angleConfiguration_Eulerian4C eul) const;

  angleConfiguration_Eulerian4C convertFromKappa(
    angleConfiguration_Kappa4C kap) const;
};
*/

#endif // _MODE_H_

Reply via email to