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" 67 NReadValue(
int nread,
double value) : nread(nread), value(value){};
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()))) {}
180 std::shared_ptr<Frame>
copy()
const {
return std::static_pointer_cast<
Frame>(copyPolymorphic()); }
200 assertPointLength(a,
"a");
201 assertPointLength(b,
"b");
202 assertPointLength(c,
"c");
203 return detail::safeDouble(astAngle(getRawPtr(), a.data(), b.data(), c.data()));
228 assertPointLength(a,
"a");
229 assertPointLength(b,
"b");
230 return detail::safeDouble(astAxAngle(getRawPtr(), a.data(), b.data(), axis));
246 return detail::safeDouble(astAxDistance(getRawPtr(), axis, v1, v2));
261 double axOffset(
int axis,
double v1,
double dist)
const {
262 return detail::safeDouble(astAxOffset(getRawPtr(), axis, v1, dist));
458 std::shared_ptr<FrameSet> convert(
Frame const &to, std::string
const &domainlist =
"");
474 assertPointLength(point1,
"point1");
475 assertPointLength(point2,
"point2");
476 return detail::safeDouble(astDistance(getRawPtr(), point1.data(), point2.data()));
768 std::shared_ptr<FrameSet> findFrame(
Frame const &tmplt, std::string
const &domainlist =
"");
781 std::string
format(
int axis,
double value)
const {
782 char const *rawstr = astFormat(getRawPtr(), axis, value);
784 return std::string(rawstr);
792 bool ret = astGetActiveUnit(getRawPtr());
806 double getBottom(
int axis)
const {
return getD(detail::formatAxisAttr(
"Bottom", axis)); }
816 int getDigits(
int axis)
const {
return getI(detail::formatAxisAttr(
"Digits", axis)); }
821 bool getDirection(
int axis)
const {
return getB(detail::formatAxisAttr(
"Direction", axis)); }
826 std::string
getDomain()
const {
return getC(
"Domain"); }
831 double getDut1()
const {
return getD(
"Dut1"); }
841 std::string
getFormat(
int axis)
const {
return getC(detail::formatAxisAttr(
"Format", axis)); }
847 std::string
getInternalUnit(
int axis)
const {
return getC(detail::formatAxisAttr(
"InternalUnit", axis)); }
852 std::string
getLabel(
int axis)
const {
return getC(detail::formatAxisAttr(
"Label", axis)); }
881 std::string
getNormUnit(
int axis)
const {
return getC(detail::formatAxisAttr(
"NormUnit", axis)); }
891 std::string
getObsLat()
const {
return getC(
"ObsLat"); }
896 std::string
getObsLon()
const {
return getC(
"ObsLon"); }
911 std::string
getSymbol(
int axis)
const {
return getC(detail::formatAxisAttr(
"Symbol", axis)); }
917 std::string
getSystem()
const {
return getC(
"System"); }
922 std::string
getTitle()
const {
return getC(
"Title"); }
927 double getTop(
int axis)
const {
return getD(detail::formatAxisAttr(
"Top", axis)); }
932 std::string
getUnit(
int axis)
const {
return getC(detail::formatAxisAttr(
"Unit", axis)); }
965 std::vector<double> intersect(std::vector<double>
const &a1, std::vector<double>
const &a2,
966 std::vector<double>
const &b1, std::vector<double>
const &b2)
const;
985 std::vector<int> ret(other.
getNIn());
986 astMatchAxes(getRawPtr(), other.
getRawPtr(), ret.data());
1045 astNorm(getRawPtr(), value.data());
1047 detail::astBadToNan(value);
1075 assertPointLength(point1,
"point1");
1076 assertPointLength(point2,
"point2");
1078 astOffset(getRawPtr(), point1.data(), point2.data(), offset, ret.data());
1080 detail::astBadToNan(ret);
1117 detail::assertEqual(getNIn(),
"naxes", 2,
" cannot call offset2");
1118 assertPointLength(point1,
"point1");
1120 double offsetAngle = astOffset2(getRawPtr(), point1.data(), angle, offset, point2.data());
1122 detail::astBadToNan(point2);
1138 detail::assertEqual(perm.size(),
"perm.size()",
static_cast<std::size_t
>(getNAxes()),
"naxes");
1139 astPermAxes(getRawPtr(), perm.data());
1162 FrameMapping pickAxes(std::vector<int>
const &axes)
const;
1195 ResolvedPoint resolve(std::vector<double>
const &point1, std::vector<double>
const &point2,
1196 std::vector<double>
const &point3)
const;
1207 void setBottom(
int axis,
double bottom) { setD(detail::formatAxisAttr(
"Bottom", axis), bottom); }
1217 void setDigits(
int axis,
int digits) { setD(detail::formatAxisAttr(
"Digits", axis), digits); }
1223 setB(detail::formatAxisAttr(
"Direction", axis), direction);
1229 virtual void setDomain(std::string
const &domain) { setC(
"Domain", domain); }
1244 void setEpoch(std::string
const &epoch) { setC(
"Epoch", epoch); }
1250 setC(detail::formatAxisAttr(
"Format", axis), format);
1256 void setLabel(
int axis, std::string
const &label) { setC(detail::formatAxisAttr(
"Label", axis), label); }
1283 void setObsLat(std::string
const &lat) { setC(
"ObsLat", lat); }
1288 void setObsLon(std::string
const &lon) { setC(
"ObsLon", lon); }
1295 astSetActiveUnit(getRawPtr(), enable);
1313 setC(detail::formatAxisAttr(
"Symbol", axis), symbol);
1320 void setSystem(std::string
const &system) { setC(
"System", system); }
1325 void setTitle(std::string
const &title) { setC(
"Title", title); }
1330 void setTop(
int axis,
double top) { setD(detail::formatAxisAttr(
"Top", axis), top); }
1335 void setUnit(
int axis, std::string
const &unit) { setC(detail::formatAxisAttr(
"Unit", axis), unit); }
1503 int nread = astUnformat(getRawPtr(), axis, str.c_str(), &value);
1505 return NReadValue(nread, detail::safeDouble(value));
1518 explicit Frame(AstFrame *rawPtr) :
Mapping(reinterpret_cast<AstMapping *>(rawPtr)) {
1519 if (!astIsAFrame(getRawPtr())) {
1520 std::ostringstream os;
1521 os <<
"This is a " << getClassName() <<
", which is not a Frame";
1522 throw std::invalid_argument(os.str());
1526 virtual std::shared_ptr<Object>
copyPolymorphic()
const override {
return copyImpl<Frame, AstFrame>(); }
1535 template <
typename T>
1536 void assertPointLength(T
const &p,
char const *name)
const {
1537 if (static_cast<int>(p.size()) != getNIn()) {
1538 std::ostringstream os;
1539 os <<
"point " << name <<
" has " << p.size() <<
" axes, but " << getNIn() <<
" required";
1540 throw std::invalid_argument(os.str());
double axOffset(int axis, double v1, double dist) const
Definition: Frame.h:261
Definition: CmpFrame.h:60
Frame(int naxes, std::string const &options="")
Definition: Frame.h:168
std::string getDomain() const
Definition: Frame.h:826
void setDigits(int digits)
Definition: Frame.h:1212
void setObsLat(std::string const &lat)
Definition: Frame.h:1283
double getTop(int axis) const
Definition: Frame.h:927
AstObject const * getRawPtr() const
Definition: Object.h:291
double value
Value that was read.
Definition: Frame.h:69
void setEpoch(std::string const &epoch)
Definition: Frame.h:1244
void setPreserveAxes(bool preserve)
Definition: Frame.h:1307
double distance(PointD const &point1, PointD const &point2) const
Definition: Frame.h:473
AST wrapper classes and functions.
Definition: attributes_channel.dox:1
double axDistance(int axis, double v1, double v2) const
Definition: Frame.h:245
void setMaxAxes(int maxAxes)
Definition: Frame.h:1267
void setDut1(double dut1)
Definition: Frame.h:1234
std::shared_ptr< Frame > copy() const
Return a deep copy of this object.
Definition: Frame.h:180
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:1312
DirectionPoint(double direction, PointD const &point)
Definition: Frame.h:51
double getBottom(int axis) const
Definition: Frame.h:806
std::vector< double > point
Point.
Definition: Frame.h:83
double axAngle(PointD const &a, PointD const &b, int axis) const
Definition: Frame.h:227
void setFormat(int axis, std::string const &format)
Definition: Frame.h:1249
void permAxes(std::vector< int > perm)
Definition: Frame.h:1137
double direction
Direction, an angle in radians.
Definition: Frame.h:51
void setTop(int axis, double top)
Definition: Frame.h:1330
bool getMatchEnd() const
Definition: Frame.h:857
std::string getFormat(int axis) const
Definition: Frame.h:841
PointD point
Point.
Definition: Frame.h:53
void setEpoch(double epoch)
Definition: Frame.h:1239
std::string getSystem() const
Definition: Frame.h:917
int getNAxes() const
Definition: Frame.h:875
std::shared_ptr< Mapping > mapping
Mapping.
Definition: Frame.h:102
std::string getUnit(int axis) const
Definition: Frame.h:932
void setBottom(int axis, double bottom)
Definition: Frame.h:1207
Frame(AstFrame *rawPtr)
Definition: Frame.h:1518
double d1
Resolved vector component 1.
Definition: Frame.h:84
void setLabel(int axis, std::string const &label)
Definition: Frame.h:1256
std::shared_ptr< Frame > frame
Frame.
Definition: Frame.h:101
void setObsAlt(double alt)
Definition: Frame.h:1278
PointD offset(PointD point1, PointD point2, double offset) const
Definition: Frame.h:1074
int getDigits() const
Definition: Frame.h:811
virtual void setDomain(std::string const &domain)
Definition: Frame.h:1229
bool getDirection(int axis) const
Definition: Frame.h:821
std::string getObsLon() const
Definition: Frame.h:896
int getDigits(int axis) const
Definition: Frame.h:816
double getObsAlt() const
Definition: Frame.h:886
std::vector< double > PointD
Definition: base.h:57
double angle(PointD const &a, PointD const &b, PointD const &c) const
Definition: Frame.h:199
int getMaxAxes() const
Definition: Frame.h:863
std::string getInternalUnit(int axis) const
Definition: Frame.h:847
double getEpoch() const
Definition: Frame.h:836
std::string getTitle() const
Definition: Frame.h:922
int getNIn() const
Definition: Mapping.h:77
bool getPreserveAxes() const
Definition: Frame.h:906
std::string getLabel(int axis) const
Definition: Frame.h:852
ResolvedPoint(int naxes)
Definition: Frame.h:82
double getDut1() const
Definition: Frame.h:831
void setObsLon(std::string const &lon)
Definition: Frame.h:1288
void setMatchEnd(bool match)
Definition: Frame.h:1261
bool getPermute() const
Definition: Frame.h:901
std::string getAlignSystem() const
Definition: Frame.h:801
void setUnit(int axis, std::string const &unit)
Definition: Frame.h:1335
void setSystem(std::string const &system)
Definition: Frame.h:1320
std::string getObsLat() const
Definition: Frame.h:891
FrameMapping(std::shared_ptr< Frame > frame, std::shared_ptr< Mapping > mapping)
Definition: Frame.h:99
void setDirection(bool direction, int axis)
Definition: Frame.h:1222
DirectionPoint offset2(PointD const &point1, double angle, double offset) const
Definition: Frame.h:1116
NReadValue unformat(int axis, std::string const &str) const
Definition: Frame.h:1501
std::string format(int axis, double value) const
Definition: Frame.h:781
std::string getSymbol(int axis) const
Definition: Frame.h:911
void setMinAxes(int minAxes)
Definition: Frame.h:1273
Definition: FrameSet.h:99
void setActiveUnit(bool enable)
Definition: Frame.h:1294
void setAlignSystem(std::string const &system)
Definition: Frame.h:1202
NReadValue(int nread, double value)
Definition: Frame.h:67
bool getActiveUnit() const
Definition: Frame.h:791
virtual std::shared_ptr< Object > copyPolymorphic() const override
Definition: Frame.h:1526
void setPermute(bool permute)
Definition: Frame.h:1302
void setDigits(int axis, int digits)
Definition: Frame.h:1217
void setTitle(std::string const &title)
Definition: Frame.h:1325
std::vector< int > matchAxes(Frame const &other) const
Definition: Frame.h:984
PointD norm(PointD value) const
Definition: Frame.h:1044
std::string getNormUnit(int axis) const
Definition: Frame.h:881
int getMinAxes() const
Definition: Frame.h:869