SourceXtractorPlusPlus 1.0.3
SourceXtractor++, the next generation SExtractor
Loading...
Searching...
No Matches
ExpSigmoidConverter.cpp
Go to the documentation of this file.
1
23#include <cmath>
24#include <iostream>
25
26#include <ElementsKernel/Logging.h>
27
29
30namespace ModelFitting {
31
32using namespace std;
33
35
37
38double ExpSigmoidConverter::worldToEngine(const double world_value) const {
39 if (world_value < m_min_value || world_value > m_max_value) {
40 logger.warn() << "WorldToEngine ExpSigmoidConverter: world values outside of possible range";
41 }
42
43 auto wv = std::max(m_min_value, std::min(m_max_value, world_value));
44 return log(log(wv / m_min_value) / log(m_max_value / wv));
45}
46
47
48double ExpSigmoidConverter::engineToWorld(const double engine_value) const {
49 auto clamped_value = std::max(-50.0, std::min(50.0, engine_value));
50 return m_min_value * exp( log(m_max_value / m_min_value) / (1 + exp(-clamped_value)) );
51}
52
53double ExpSigmoidConverter::getEngineToWorldDerivative(const double value) const {
54 return value * log(value / m_min_value) * log(m_max_value / value) / log(m_max_value / m_min_value);
55}
56
57
58}// namespace ModelFitting
static Logging getLogger(const std::string &name="")
double engineToWorld(const double engine_value) const override
Engine to world coordinate converter.
const double m_max_value
maximum model value in world coordinates
virtual ~ExpSigmoidConverter()
Destructor.
const double m_min_value
minimum model value in world coordinates
double getEngineToWorldDerivative(const double value) const override
double worldToEngine(const double world_value) const override
World to engine coordinate converter.
T exp(T... args)
T log(T... args)
T max(T... args)
T min(T... args)
static Elements::Logging logger