SatDump 2.0.0-alpha-76a915210
Loading...
Searching...
No Matches
calibration_converter.h
Go to the documentation of this file.
1#pragma once
2
6
7#include "calibration_units.h"
8
9#include "common/calibration.h"
11
12namespace satdump
13{
14 namespace calibration
15 {
16 class UnitConverter; // Fwd declaration
17
26 {
27 public:
38 virtual double convert(const UnitConverter *c, double x, double y, double val);
39
50 virtual bool convert_range(const UnitConverter *c, double &min, double &max);
51 };
52
62 {
63 std::vector<std::shared_ptr<ConverterBase>> &c;
64 std::string itype;
65 std::string otype;
66 };
67
77 std::vector<std::shared_ptr<ConverterBase>> getAvailableConverters(std::string itype, std::string otype);
78
91 {
92 std::string itype;
93 std::vector<std::string> &otypes;
94 };
95
103 std::vector<std::string> getAvailableConversions(std::string itype);
104
115 {
116 public:
118 bool proj_valid = false;
119 double wavenumber = -1;
120
121 private:
122 bool unitEqual = false;
123 std::shared_ptr<ConverterBase> converter;
124
125 public:
130
137 UnitConverter(void *product, std::string channel_name);
138
147 void set_proj(nlohmann::json p);
148
154 void set_wavenumber(double w);
155
162 void set_conversion(std::string itype, std::string otype);
163
173 inline double convert(double x, double y, double val)
174 {
175 if (unitEqual)
176 return val;
177 else if (converter)
178 return converter->convert(this, x, y, val);
179 else
180 return CALIBRATION_INVALID_VALUE;
181 }
182
191 bool convert_range(double &min, double &max)
192 {
193 if (unitEqual)
194 return true;
195 else if (converter)
196 return converter->convert_range(this, min, max);
197 else
198 return false;
199 }
200 };
201 } // namespace calibration
202} // namespace satdump
Base class for unit converters. This is meant to implement conversions between calibration unit types...
Definition calibration_converter.h:26
virtual double convert(const UnitConverter *c, double x, double y, double val)
Core function (for images!) implementing conversion between calibration unit types.
Definition calibration_converter.cpp:17
virtual bool convert_range(const UnitConverter *c, double &min, double &max)
Convert unit ranges. This does the same as convert, except it's optimized for converting a range.
Definition calibration_converter.cpp:18
Universal UnitConverter class, handling all conversion logic between any calibration unit type to ano...
Definition calibration_converter.h:115
void set_proj(nlohmann::json p)
Sets the projection to utilize for conversion if needed. This is optional, but some conversions will ...
Definition calibration_converter.cpp:20
bool convert_range(double &min, double &max)
Convert unit ranges. This does the same as convert, except it's optimized for a range.
Definition calibration_converter.h:191
UnitConverter()
Simple constructor.
Definition calibration_converter.h:129
double convert(double x, double y, double val)
Generic conversion function mostly aimed at converting data from images (TODOREWORK?...
Definition calibration_converter.h:173
void set_wavenumber(double w)
Sets the wavenumber to utilize for conversion if needed. This is optional, but some conversions will ...
Definition calibration_converter.cpp:26
void set_conversion(std::string itype, std::string otype)
Sets the conversion this UnitConverter should perform.
Definition calibration_converter.cpp:28
Extremely generic class to handle projections.
Definition projection.h:34
Event to let plugins list available conversions. Do note it's still possible no converter is provided...
Definition calibration_converter.h:91
Event to let plugins register their own unit converters.
Definition calibration_converter.h:62