diff --git a/Device/Detector/IDetector.cpp b/Device/Detector/IDetector.cpp index 583125fbbdcc286d8f758e64f38b2a23d0c529a4..49f97abf8056f6669fa13db46f966e90c7361506 100644 --- a/Device/Detector/IDetector.cpp +++ b/Device/Detector/IDetector.cpp @@ -141,7 +141,7 @@ size_t IDetector::detectorIndexToRegionOfInterestIndex(const size_t detectorInde void IDetector::setAnalyzer(const R3 direction, double efficiency, double total_transmission) { if (direction.mag() > 0) - m_polAnalyzer.setDirEffTra(direction, efficiency, total_transmission); + m_polAnalyzer = PolFilter(direction, efficiency, total_transmission); } void IDetector::setDetectorResolution(const IDetectorResolution& p_detector_resolution) diff --git a/Device/Pol/PolFilter.cpp b/Device/Pol/PolFilter.cpp index ee7b8db1e804afa43bfaa547792373ed5250125f..9fb15a24a7aaa012f490fc5abe8deffc8c85cd81 100644 --- a/Device/Pol/PolFilter.cpp +++ b/Device/Pol/PolFilter.cpp @@ -14,35 +14,27 @@ #include "Device/Pol/PolFilter.h" #include "Base/Spin/SpinMatrix.h" -#include "Fit/Param/RealLimits.h" -#include <heinz/Complex.h> PolFilter::PolFilter(R3 direction, double efficiency, double total_transmission) - : m_direction(direction) - , m_efficiency(efficiency) - , m_total_transmission(total_transmission) { - RealLimits::nonnegative().check("Transmission", m_total_transmission); -} - -PolFilter::PolFilter() - : PolFilter({}, {}, 1.0) -{ -} - -void PolFilter::setDirEffTra(const R3 direction, double efficiency, double total_transmission) -{ - if (!check(direction, efficiency, total_transmission)) - throw std::runtime_error("IDetector2D::setAnalyzer: the " - "given properties are not physical"); + double aplus = total_transmission * (1.0 + efficiency); + double amin = total_transmission * (1.0 - efficiency); + if (aplus < 0.0 || aplus > 1.0 || amin < 0.0 || amin > 1.0) + throw std::runtime_error("Invalid efficiency and transmission for polarization analyzer"); if (efficiency == 0.0 || total_transmission == 0.0 || direction.mag() == 0.0) { - m_direction = R3{}; - m_efficiency = 0.0; + m_direction = {}; + m_efficiency = 0; + m_total_transmission = total_transmission; } else { m_direction = direction.unit(); m_efficiency = efficiency; + m_total_transmission = total_transmission; } - m_total_transmission = total_transmission; +} + +PolFilter::PolFilter() + : PolFilter({}, {}, 1.0) +{ } SpinMatrix PolFilter::matrix() const @@ -67,16 +59,3 @@ double PolFilter::totalTransmission() const { return m_total_transmission; } - -bool PolFilter::check(const R3 direction, double efficiency, double total_transmission) const -{ - if (direction.mag() == 0.0) - return false; - double aplus = total_transmission * (1.0 + efficiency); - double amin = total_transmission * (1.0 - efficiency); - if (aplus < 0.0 || aplus > 1.0) - return false; - if (amin < 0.0 || amin > 1.0) - return false; - return true; -} diff --git a/Device/Pol/PolFilter.h b/Device/Pol/PolFilter.h index 585a7534e66b5cbadc76a9957317b188a3b1de22..6d0d52238c5ae7b84d1b98aa100895eb98164894 100644 --- a/Device/Pol/PolFilter.h +++ b/Device/Pol/PolFilter.h @@ -37,9 +37,6 @@ public: {"Transmission", "", "total transmission", 0, 1, 1}}; } - //! Sets the polarization analyzer characteristics of the detector - void setDirEffTra(R3 direction, double efficiency, double total_transmission); - //! Return the polarization density matrix (in spin basis along z-axis) SpinMatrix matrix() const; @@ -49,8 +46,6 @@ public: double totalTransmission() const; private: - //! Verify if the given analyzer properties are physical - bool check(R3 direction, double efficiency, double total_transmission) const; R3 m_direction; //!< direction of polarization analysis double m_efficiency; //!< efficiency of polarization analysis diff --git a/auto/Wrap/doxygenDevice.i b/auto/Wrap/doxygenDevice.i index 4ca09c63eca849a38253eae49e94d4c916bd6f7e..6b5be0ea7763ff284fa735edaaa95d92371648fe 100644 --- a/auto/Wrap/doxygenDevice.i +++ b/auto/Wrap/doxygenDevice.i @@ -1685,11 +1685,6 @@ C++ includes: PolFilter.h %feature("docstring") PolFilter::parDefs "std::vector<ParaMeta> PolFilter::parDefs() const final "; -%feature("docstring") PolFilter::setDirEffTra "void PolFilter::setDirEffTra(R3 direction, double efficiency, double total_transmission) - -Sets the polarization analyzer characteristics of the detector. -"; - %feature("docstring") PolFilter::matrix "SpinMatrix PolFilter::matrix() const Return the polarization density matrix (in spin basis along z-axis) @@ -2554,6 +2549,9 @@ Returns default units to convert to. // File: namespace_0d62.xml +// File: namespace_0d78.xml + + // File: namespaceDataUtils.xml