BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ISelectionRule.h
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Sample/Lattice/ISelectionRule.h
6 //! @brief Defines classes ISelectionRule, SimpleSelectionRule
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************** //
14 
15 #ifndef BORNAGAIN_CORE_LATTICE_ISELECTIONRULE_H
16 #define BORNAGAIN_CORE_LATTICE_ISELECTIONRULE_H
17 
18 #include "Base/Vector/Vectors3D.h"
19 
20 //! Pure virtual base class for selection rules.
21 //! @ingroup samples_internal
22 
24 {
25 public:
26  virtual ~ISelectionRule() {}
27 
28  virtual ISelectionRule* clone() const = 0;
29 
30  virtual bool coordinateSelected(const ivector_t& coordinate) const = 0;
31 };
32 
33 //! Selection rule (v*q)%modulus!=0, defined by vector v(a,b,c) and modulus.
34 //! @ingroup samples_internal
35 
37 {
38 public:
39  SimpleSelectionRule(int a, int b, int c, int modulus);
40  virtual ~SimpleSelectionRule() {}
41 
42  virtual SimpleSelectionRule* clone() const;
43 
44  virtual bool coordinateSelected(const ivector_t& coordinate) const;
45 
46 private:
47  int m_a, m_b, m_c;
48  int m_mod;
49 };
50 
51 inline SimpleSelectionRule::SimpleSelectionRule(int a, int b, int c, int modulus)
52  : m_a(a), m_b(b), m_c(c), m_mod(modulus)
53 {
54 }
55 
57 {
58  return new SimpleSelectionRule(m_a, m_b, m_c, m_mod);
59 }
60 
61 inline bool SimpleSelectionRule::coordinateSelected(const ivector_t& coordinate) const
62 {
63  return (m_a * coordinate[0] + m_b * coordinate[1] + m_c * coordinate[2]) % m_mod == 0;
64 }
65 
66 #endif // BORNAGAIN_CORE_LATTICE_ISELECTIONRULE_H
Defines basic vectors in R^3 and C^3.
Forked from CLHEP/Geometry by E.
Definition: BasicVector3D.h:28
Pure virtual base class for selection rules.
virtual bool coordinateSelected(const ivector_t &coordinate) const =0
virtual ISelectionRule * clone() const =0
virtual ~ISelectionRule()
Selection rule (v*q)modulus!=0, defined by vector v(a,b,c) and modulus.
SimpleSelectionRule(int a, int b, int c, int modulus)
virtual SimpleSelectionRule * clone() const
virtual bool coordinateSelected(const ivector_t &coordinate) const
virtual ~SimpleSelectionRule()