24 #ifndef SKA_CHEETAH_DATA_UNITS_H 25 #define SKA_CHEETAH_DATA_UNITS_H 27 #include <pss/astrotypes/units/Units.h> 28 #include <pss/astrotypes/multiarray/DimensionSpan.h> 29 #include <pss/astrotypes/multiarray/DimensionSize.h> 30 #include <pss/astrotypes/multiarray/DimensionIndex.h> 32 #pragma GCC diagnostic push 33 #pragma GCC diagnostic ignored "-Wall" 34 #pragma GCC diagnostic ignored "-Wpragmas" 35 #pragma GCC diagnostic ignored "-Wunused-parameter" 36 #pragma GCC diagnostic ignored "-Wunused-variable" 37 #include <boost/units/quantity.hpp> 38 #include <boost/units/conversion.hpp> 39 #include <boost/units/systems/si/frequency.hpp> 40 #include <boost/units/systems/si/prefixes.hpp> 41 #include <boost/units/systems/si/time.hpp> 42 #include <boost/units/systems/si/acceleration.hpp> 43 #include <boost/units/make_scaled_unit.hpp> 44 #include <boost/units/io.hpp> 45 #include <boost/units/systems/si/codata_constants.hpp> 46 #include <boost/chrono/chrono.hpp> 47 #pragma GCC diagnostic pop 54 using pss::astrotypes::units::Frequency;
55 using pss::astrotypes::units::Time;
56 template<
typename T>
using DimensionSize = pss::astrotypes::DimensionSize<T>;
57 template<
typename T>
using DimensionIndex = pss::astrotypes::DimensionIndex<T>;
58 template<
typename T>
using DimensionSpan = pss::astrotypes::DimensionSpan<T>;
61 typedef typename pss::astrotypes::units::Hertz Hertz;
62 typedef typename pss::astrotypes::units::KiloHertz KiloHertz;
63 typedef typename pss::astrotypes::units::MegaHertz MegaHertz;
64 typedef typename pss::astrotypes::units::Seconds Seconds;
65 typedef typename pss::astrotypes::units::MilliSeconds MilliSeconds;
66 typedef typename pss::astrotypes::units::MicroSeconds MicroSeconds;
67 typedef typename pss::astrotypes::units::NanoSeconds NanoSeconds;
69 static boost::units::si::frequency
const hz = boost::units::si::hertz;
70 static boost::units::si::frequency
const hertz = boost::units::si::hertz;
71 static const pss::astrotypes::units::MegaHertz megahertz = pss::astrotypes::units::megahertz;
73 static boost::units::si::time
const second = boost::units::si::second;
74 static boost::units::si::time
const seconds = boost::units::si::second;
75 static const MilliSeconds millisecond;
76 static const MilliSeconds milliseconds;
77 static boost::units::si::acceleration
const metres_per_second_squared = boost::units::si::metres_per_second_squared;
78 static boost::units::si::acceleration
const metre_per_second_squared = boost::units::si::metres_per_second_squared;
79 static boost::units::si::acceleration
const meter_per_second_squared = boost::units::si::metres_per_second_squared;
80 static boost::units::si::acceleration
const meters_per_second_squared = boost::units::si::metres_per_second_squared;
83 typedef boost::units::quantity<Hertz, double> FourierFrequencyType;
84 typedef boost::units::quantity<boost::units::si::time, double> TimeType;
85 typedef boost::units::quantity<boost::units::si::acceleration, double> AccelerationType;
87 typedef boost::units::quantity<MegaHertz, double> FrequencyType;
90 class SecondsType :
public boost::units::quantity<boost::units::si::time, T>
92 typedef boost::units::quantity<boost::units::si::time, T> BaseT;
97 template<
typename Unit,
typename YY>
98 SecondsType(boost::units::quantity<Unit, YY>
const& arg) : BaseT(arg) {}
101 template<
typename DurationRep,
typename Period>
102 explicit SecondsType(std::chrono::duration<DurationRep, Period>
const& d)
103 : BaseT(
std::chrono::duration_cast<
std::chrono::duration<DurationRep,
std::ratio<1,1>>>(d).count() * seconds)
114 template<
typename Unit,
typename X,
typename Y>
115 inline typename multiply_typeof_helper< X, quantity< Unit, X > >::type
116 operator*(
const Y & lhs,
const quantity< Unit, X > & rhs)
118 return static_cast<X
>(lhs) * rhs;
121 template<
typename Unit,
typename X,
typename Y>
122 inline typename divide_typeof_helper< X, quantity< Unit, X > >::type
123 operator/(
const Y & lhs,
const quantity< Unit, X > & rhs)
125 return static_cast<X
>(lhs) / rhs;
130 #endif // SKA_CHEETAH_DATA_UNITS_H
Some limits and constants for FLDO.
SecondsType(std::chrono::duration< DurationRep, Period > const &d)
conversion from std::chrono::duration types