BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
PolFilter.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Device/Pol/PolFilter.cpp
6 //! @brief Implements class DetectionProperties.
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 #include "Device/Pol/PolFilter.h"
16 #include "Base/Spin/SpinMatrix.h"
17 
18 PolFilter::PolFilter(R3 direction, double efficiency, double total_transmission)
19 {
20  double aplus = total_transmission * (1.0 + efficiency);
21  double amin = total_transmission * (1.0 - efficiency);
22  if (aplus < 0.0 || aplus > 1.0 || amin < 0.0 || amin > 1.0)
23  throw std::runtime_error("Invalid efficiency and transmission for polarization analyzer");
24  if (efficiency == 0.0 || total_transmission == 0.0 || direction.mag() == 0.0) {
25  m_direction = {};
26  m_efficiency = 0;
27  m_total_transmission = total_transmission;
28  } else {
29  m_direction = direction.unit();
30  m_efficiency = efficiency;
31  m_total_transmission = total_transmission;
32  }
33 }
34 
36  : PolFilter({}, 0.0, 1.0)
37 {
38 }
39 
41 {
42  if (m_direction.mag() == 0.0 || m_efficiency == 0.0)
44  R3 v = m_direction.unit() * m_efficiency;
46 }
47 
49 {
50  return m_direction;
51 }
52 
54 {
55  return m_efficiency;
56 }
57 
59 {
60  return m_total_transmission;
61 }
Defines class DetectionProperties.
Defines class SpinMatrix.
Detector properties (efficiency, transmission).
Definition: PolFilter.h:27
double m_efficiency
efficiency of polarization analysis
Definition: PolFilter.h:50
R3 m_direction
direction of polarization analysis
Definition: PolFilter.h:49
double totalTransmission() const
Definition: PolFilter.cpp:58
double m_total_transmission
total transmission of polarization analysis
Definition: PolFilter.h:51
double analyzerEfficiency() const
will always return positive value
Definition: PolFilter.cpp:53
R3 analyzerDirection() const
Retrieve the analyzer characteristics.
Definition: PolFilter.cpp:48
SpinMatrix matrix() const
Return the polarization density matrix (in spin basis along z-axis)
Definition: PolFilter.cpp:40
static SpinMatrix One()
Definition: SpinMatrix.cpp:36
static SpinMatrix FromBlochVector(const R3 &v)
Constructs matrix (I+v*s)/2, where s is the Pauli vector.
Definition: SpinMatrix.cpp:41