SourceXtractorPlusPlus  0.16
Please provide a description of the project.
ExpSigmoidConverter.cpp
Go to the documentation of this file.
1 
23 #include <cmath>
24 #include <iostream>
25 
26 #include <ElementsKernel/Logging.h>
27 
29 
30 namespace ModelFitting {
31 
32 using namespace std;
33 
35 
37 
38 double 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 
48 double 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 
53 double 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="")
void warn(const std::string &logMessage)
double engineToWorld(const double engine_value) const override
Engine to world coordinate converter.
virtual ~ExpSigmoidConverter()
Destructor.
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
STL namespace.