22 #ifndef ASTSHIM_FRAME_H
23 #define ASTSHIM_FRAME_H
30 #include "astshim/Mapping.h"
31 #include "astshim/Object.h"
32 #include "astshim/base.h"
33 #include "astshim/detail/utils.h"
100 : frame(frame), mapping(mapping) {}
168 explicit Frame(
int naxes, std::string
const &options =
"")
169 :
Mapping(reinterpret_cast<AstMapping *>(astFrame(naxes,
"%s", options.c_str()))) {}
199 assertPointLength(a,
"a");
200 assertPointLength(b,
"b");
201 assertPointLength(c,
"c");
202 return detail::safeDouble(astAngle(
getRawPtr(), a.data(), b.data(), c.data()));
227 assertPointLength(a,
"a");
228 assertPointLength(b,
"b");
229 return detail::safeDouble(astAxAngle(
getRawPtr(), a.data(), b.data(), axis));
245 return detail::safeDouble(astAxDistance(
getRawPtr(), axis, v1, v2));
260 double axOffset(
int axis,
double v1,
double dist)
const {
261 return detail::safeDouble(astAxOffset(
getRawPtr(), axis, v1, dist));
457 std::shared_ptr<FrameSet>
convert(
Frame const &to, std::string
const &domainlist =
"");
473 assertPointLength(point1,
"point1");
474 assertPointLength(point2,
"point2");
475 return detail::safeDouble(astDistance(
getRawPtr(), point1.data(), point2.data()));
767 std::shared_ptr<FrameSet>
findFrame(
Frame const &tmplt, std::string
const &domainlist =
"");
780 std::string
format(
int axis,
double value)
const {
781 char const *rawstr = astFormat(
getRawPtr(), axis, value);
783 return std::string(rawstr);
791 bool ret = astGetActiveUnit(
getRawPtr());
805 double getBottom(
int axis)
const {
return getD(detail::formatAxisAttr(
"Bottom", axis)); }
815 int getDigits(
int axis)
const {
return getI(detail::formatAxisAttr(
"Digits", axis)); }
820 bool getDirection(
int axis)
const {
return getB(detail::formatAxisAttr(
"Direction", axis)); }
840 std::string
getFormat(
int axis)
const {
return getC(detail::formatAxisAttr(
"Format", axis)); }
846 std::string
getInternalUnit(
int axis)
const {
return getC(detail::formatAxisAttr(
"InternalUnit", axis)); }
851 std::string
getLabel(
int axis)
const {
return getC(detail::formatAxisAttr(
"Label", axis)); }
880 std::string
getNormUnit(
int axis)
const {
return getC(detail::formatAxisAttr(
"NormUnit", axis)); }
910 std::string
getSymbol(
int axis)
const {
return getC(detail::formatAxisAttr(
"Symbol", axis)); }
926 double getTop(
int axis)
const {
return getD(detail::formatAxisAttr(
"Top", axis)); }
931 std::string
getUnit(
int axis)
const {
return getC(detail::formatAxisAttr(
"Unit", axis)); }
964 std::vector<double>
intersect(std::vector<double>
const &a1, std::vector<double>
const &a2,
965 std::vector<double>
const &b1, std::vector<double>
const &b2)
const;
984 std::vector<int> ret(other.
getNIn());
1043 detail::astBadToNan(value);
1071 assertPointLength(point1,
"point1");
1072 assertPointLength(point2,
"point2");
1074 astOffset(
getRawPtr(), point1.data(), point2.data(),
offset, ret.data());
1076 detail::astBadToNan(ret);
1113 detail::assertEqual(
getNIn(),
"naxes", 2,
" cannot call offset2");
1114 assertPointLength(point1,
"point1");
1118 detail::astBadToNan(point2);
1134 detail::assertEqual(perm.size(),
"perm.size()",
static_cast<std::size_t
>(
getNAxes()),
"naxes");
1192 std::vector<double>
const &point3)
const;
1203 void setBottom(
int axis,
double bottom) {
setD(detail::formatAxisAttr(
"Bottom", axis), bottom); }
1213 void setDigits(
int axis,
int digits) {
setD(detail::formatAxisAttr(
"Digits", axis), digits); }
1219 setB(detail::formatAxisAttr(
"Direction", axis), direction);
1246 setC(detail::formatAxisAttr(
"Format", axis), format);
1252 void setLabel(
int axis, std::string
const &label) {
setC(detail::formatAxisAttr(
"Label", axis), label); }
1309 setC(detail::formatAxisAttr(
"Symbol", axis), symbol);
1326 void setTop(
int axis,
double top) {
setD(detail::formatAxisAttr(
"Top", axis), top); }
1331 void setUnit(
int axis, std::string
const &unit) {
setC(detail::formatAxisAttr(
"Unit", axis), unit); }
1499 int nread = astUnformat(
getRawPtr(), axis, str.c_str(), &value);
1501 return NReadValue(nread, detail::safeDouble(value));
1514 explicit Frame(AstFrame *rawPtr) :
Mapping(reinterpret_cast<AstMapping *>(rawPtr)) {
1516 std::ostringstream os;
1517 os <<
"This is a " <<
getClassName() <<
", which is not a Frame";
1518 throw std::invalid_argument(os.str());
1522 virtual std::shared_ptr<Object>
copyPolymorphic()
const override {
return copyImpl<Frame, AstFrame>(); }
1531 template <
typename T>
1532 void assertPointLength(T
const &p,
char const *name)
const {
1533 if (static_cast<int>(p.size()) !=
getNIn()) {
1534 std::ostringstream os;
1535 os <<
"point " << name <<
" has " << p.size() <<
" axes, but " <<
getNIn() <<
" required";
1536 throw std::invalid_argument(os.str());
Definition: CmpFrame.h:60
Frame(int naxes, std::string const &options="")
Definition: Frame.h:168
void setDigits(int digits)
Definition: Frame.h:1208
void setObsLat(std::string const &lat)
Definition: Frame.h:1279
int getMaxAxes() const
Definition: Frame.h:862
NReadValue unformat(int axis, std::string const &str) const
Definition: Frame.h:1497
std::string getSystem() const
Definition: Frame.h:916
double angle(PointD const &a, PointD const &b, PointD const &c) const
Definition: Frame.h:198
std::vector< int > matchAxes(Frame const &other) const
Definition: Frame.h:983
double value
Value that was read.
Definition: Frame.h:69
void setEpoch(std::string const &epoch)
Definition: Frame.h:1240
std::string getSymbol(int axis) const
Definition: Frame.h:910
void setPreserveAxes(bool preserve)
Definition: Frame.h:1303
void setB(std::string const &attrib, bool value)
Definition: Object.h:448
double distance(PointD const &point1, PointD const &point2) const
Definition: Frame.h:472
double getDut1() const
Definition: Frame.h:830
int getDigits() const
Definition: Frame.h:810
double axDistance(int axis, double v1, double v2) const
Definition: Frame.h:244
void setMaxAxes(int maxAxes)
Definition: Frame.h:1263
bool getB(std::string const &attrib) const
Definition: Object.h:347
void setDut1(double dut1)
Definition: Frame.h:1230
AstObject const * getRawPtr() const
Definition: Object.h:286
double getTop(int axis) const
Definition: Frame.h:926
double d2
Resolved vector component 2.
Definition: Frame.h:85
void assertOK(AstObject *rawPtr1=nullptr, AstObject *rawPtr2=nullptr)
Definition: base.cc:49
void setSymbol(int axis, std::string const &symbol)
Definition: Frame.h:1308
DirectionPoint(double direction, PointD const &point)
Definition: Frame.h:51
PointD norm(PointD value) const
Definition: Frame.h:1040
std::string getDomain() const
Definition: Frame.h:825
DirectionPoint offset2(PointD const &point1, double angle, double offset) const
Definition: Frame.h:1112
std::vector< double > point
Point.
Definition: Frame.h:83
void setFormat(int axis, std::string const &format)
Definition: Frame.h:1245
void permAxes(std::vector< int > perm)
Definition: Frame.h:1133
double direction
Direction, an angle in radians.
Definition: Frame.h:51
void setTop(int axis, double top)
Definition: Frame.h:1326
PointD point
Point.
Definition: Frame.h:53
int getMinAxes() const
Definition: Frame.h:868
double axAngle(PointD const &a, PointD const &b, int axis) const
Definition: Frame.h:226
std::string getLabel(int axis) const
Definition: Frame.h:851
void setEpoch(double epoch)
Definition: Frame.h:1235
ResolvedPoint resolve(std::vector< double > const &point1, std::vector< double > const &point2, std::vector< double > const &point3) const
Definition: Frame.cc:84
double getObsAlt() const
Definition: Frame.h:885
void setDomain(std::string const &domain)
Definition: Frame.h:1225
FrameMapping pickAxes(std::vector< int > const &axes) const
Definition: Frame.cc:68
std::string getTitle() const
Definition: Frame.h:921
void setC(std::string const &attrib, std::string const &value)
Definition: Object.h:460
std::shared_ptr< Mapping > mapping
Mapping.
Definition: Frame.h:102
bool getDirection(int axis) const
Definition: Frame.h:820
void setBottom(int axis, double bottom)
Definition: Frame.h:1203
std::shared_ptr< FrameSet > convert(Frame const &to, std::string const &domainlist="")
Definition: Frame.cc:31
Frame(AstFrame *rawPtr)
Definition: Frame.h:1514
std::string getUnit(int axis) const
Definition: Frame.h:931
double d1
Resolved vector component 1.
Definition: Frame.h:84
int getNAxes() const
Definition: Frame.h:874
void setLabel(int axis, std::string const &label)
Definition: Frame.h:1252
std::shared_ptr< Frame > frame
Frame.
Definition: Frame.h:101
void setObsAlt(double alt)
Definition: Frame.h:1274
std::string getObsLon() const
Definition: Frame.h:895
std::vector< double > PointD
Definition: base.h:57
bool getMatchEnd() const
Definition: Frame.h:856
bool getPermute() const
Definition: Frame.h:900
double getD(std::string const &attrib) const
Definition: Object.h:373
std::shared_ptr< FrameSet > findFrame(Frame const &tmplt, std::string const &domainlist="")
Definition: Frame.cc:41
int nread
Number of characters that was read.
Definition: Frame.h:67
std::string getNormUnit(int axis) const
Definition: Frame.h:880
std::string getFormat(int axis) const
Definition: Frame.h:840
void setD(std::string const &attrib, double value)
Definition: Object.h:472
std::string const getC(std::string const &attrib) const
Definition: Object.h:360
ResolvedPoint(int naxes)
Definition: Frame.h:82
void setObsLon(std::string const &lon)
Definition: Frame.h:1284
void setMatchEnd(bool match)
Definition: Frame.h:1257
int getI(std::string const &attrib) const
Definition: Object.h:399
int getNIn() const
Definition: Mapping.h:76
void setUnit(int axis, std::string const &unit)
Definition: Frame.h:1331
double getBottom(int axis) const
Definition: Frame.h:805
void setI(std::string const &attrib, int value)
Definition: Object.h:496
std::string getClassName() const
Definition: Object.h:133
CmpFrame under(Frame const &next) const
Definition: Frame.cc:66
void setSystem(std::string const &system)
Definition: Frame.h:1316
std::string getAlignSystem() const
Definition: Frame.h:800
FrameMapping(std::shared_ptr< Frame > frame, std::shared_ptr< Mapping > mapping)
Definition: Frame.h:99
bool getActiveUnit() const
Definition: Frame.h:790
void setDirection(bool direction, int axis)
Definition: Frame.h:1218
int getDigits(int axis) const
Definition: Frame.h:815
double axOffset(int axis, double v1, double dist) const
Definition: Frame.h:260
bool getPreserveAxes() const
Definition: Frame.h:905
std::string getObsLat() const
Definition: Frame.h:890
void setMinAxes(int minAxes)
Definition: Frame.h:1269
Definition: FrameSet.h:99
double getEpoch() const
Definition: Frame.h:835
void setActiveUnit(bool enable)
Definition: Frame.h:1290
void setAlignSystem(std::string const &system)
Definition: Frame.h:1198
std::vector< double > intersect(std::vector< double > const &a1, std::vector< double > const &a2, std::vector< double > const &b1, std::vector< double > const &b2) const
Definition: Frame.cc:51
NReadValue(int nread, double value)
Definition: Frame.h:67
PointD offset(PointD point1, PointD point2, double offset) const
Definition: Frame.h:1070
std::shared_ptr< Frame > copy() const
Return a deep copy of this object.
Definition: Frame.h:179
virtual std::shared_ptr< Object > copyPolymorphic() const override
Definition: Frame.h:1522
std::string getInternalUnit(int axis) const
Definition: Frame.h:846
void setPermute(bool permute)
Definition: Frame.h:1298
void setDigits(int axis, int digits)
Definition: Frame.h:1213
void setTitle(std::string const &title)
Definition: Frame.h:1321
std::string format(int axis, double value) const
Definition: Frame.h:780