lsst.astshim
gf5dcc679e7+7aca86229d
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Frame.cc
Go to the documentation of this file.
1
/*
2
* LSST Data Management System
3
* Copyright 2017 AURA/LSST.
4
*
5
* This product includes software developed by the
6
* LSST Project (http://www.lsst.org/).
7
*
8
* This program is free software: you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License as published by
10
* the Free Software Foundation, either version 3 of the License, or
11
* (at your option) any later version.
12
*
13
* This program is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
* GNU General Public License for more details.
17
*
18
* You should have received a copy of the LSST License Statement and
19
* the GNU General Public License along with this program. If not,
20
* see <https://www.lsstcorp.org/LegalNotices/>.
21
*/
22
#include <stdexcept>
23
#include <vector>
24
25
#include "
astshim/CmpFrame.h
"
26
#include "
astshim/Frame.h
"
27
#include "
astshim/FrameSet.h
"
28
29
namespace
ast
{
30
31
std::shared_ptr<FrameSet> Frame::convert(
Frame
const
&to, std::string
const
&domainlist) {
32
auto
*rawFrameSet =
33
reinterpret_cast<
AstFrameSet *
>
(astConvert(getRawPtr(), to.getRawPtr(), domainlist.
c_str
()));
34
assertOK
(
reinterpret_cast<
AstObject *
>
(rawFrameSet));
35
if
(!rawFrameSet) {
36
return
std::shared_ptr<FrameSet>();
37
}
38
return
Object::fromAstObject<FrameSet>
(
reinterpret_cast<
AstObject *
>
(rawFrameSet),
false
);
39
}
40
41
std::shared_ptr<FrameSet>
Frame::findFrame(
Frame
const
&tmplt,
std::string
const
&domainlist) {
42
auto
*rawFrameSet =
43
reinterpret_cast<
AstFrameSet *
>
(astFindFrame(getRawPtr(), tmplt.getRawPtr(), domainlist.
c_str
()));
44
assertOK
(
reinterpret_cast<
AstObject *
>
(rawFrameSet));
45
if
(!rawFrameSet) {
46
return
std::shared_ptr<FrameSet>
();
47
}
48
return
Object::fromAstObject<FrameSet>
(
reinterpret_cast<
AstObject *
>
(rawFrameSet),
false
);
49
}
50
51
std::vector<double>
Frame::intersect(
std::vector<double>
const
&a1,
std::vector<double>
const
&a2,
52
std::vector<double>
const
&b1,
std::vector<double>
const
&b2)
const
{
53
int
const
naxes = 2;
54
detail::assertEqual
(
getNAxes
(),
"# axes"
, naxes,
""
);
55
detail::assertEqual
(a1.
size
(),
"a1.size()"
,
static_cast<
std::size_t
>
(naxes),
""
);
56
detail::assertEqual
(a2.
size
(),
"a2.size()"
,
static_cast<
std::size_t
>
(naxes),
""
);
57
detail::assertEqual
(b1.
size
(),
"b1.size()"
,
static_cast<
std::size_t
>
(naxes),
""
);
58
detail::assertEqual
(b2.
size
(),
"b2.size()"
,
static_cast<
std::size_t
>
(naxes),
""
);
59
std::vector<double>
ret(naxes);
60
astIntersect(getRawPtr(), a1.
data
(), a2.
data
(), b1.
data
(), b2.
data
(), ret.
data
());
61
assertOK
();
62
detail::astBadToNan
(ret);
63
return
ret;
64
}
65
66
CmpFrame Frame::under(Frame
const
&next)
const
{
return
CmpFrame(*
this
, next); }
67
68
FrameMapping
Frame::pickAxes(
std::vector<int>
const
&axes)
const
{
69
AstMapping *rawMap;
70
auto
*rawFrame =
71
reinterpret_cast<
AstFrame *
>
(astPickAxes(getRawPtr(), axes.
size
(), axes.
data
(), &rawMap));
72
assertOK
(
reinterpret_cast<
AstObject *
>
(rawFrame),
reinterpret_cast<
AstObject *
>
(rawMap));
73
std::shared_ptr<Frame>
frame;
74
try
{
75
frame =
Object::fromAstObject<Frame>
(
reinterpret_cast<
AstObject *
>
(rawFrame),
false
);
76
}
catch
(...) {
77
astAnnul(rawMap);
78
throw
;
79
}
80
auto
map =
Object::fromAstObject<Mapping>
(
reinterpret_cast<
AstObject *
>
(rawMap),
false
);
81
return
FrameMapping
(frame, map);
82
}
83
84
ResolvedPoint
Frame::resolve(
std::vector<double>
const
&point1,
std::vector<double>
const
&point2,
85
std::vector<double>
const
&point3)
const
{
86
int
const
naxes =
getNAxes
();
87
detail::assertEqual
(point1.
size
(),
"a1.size()"
,
static_cast<
std::size_t
>
(naxes),
""
);
88
detail::assertEqual
(point2.
size
(),
"a2.size()"
,
static_cast<
std::size_t
>
(naxes),
""
);
89
detail::assertEqual
(point3.
size
(),
"b1.size()"
,
static_cast<
std::size_t
>
(naxes),
""
);
90
ResolvedPoint
ret(naxes);
91
astResolve(getRawPtr(), point1.
data
(), point2.
data
(), point3.
data
(), ret.
point
.
data
(), &ret.
d1
, &ret.
d2
);
92
assertOK
();
93
detail::astBadToNan
(ret.
point
);
94
return
ret;
95
}
96
97
}
// namespace ast
CmpFrame.h
Frame.h
FrameSet.h
std::string
std::string::c_str
T c_str(T... args)
ast::FrameMapping
Struct returned by Frame.pickAxes containing a frame and a mapping.
Definition
Frame.h:91
ast::Object::fromAstObject
static std::shared_ptr< Class > fromAstObject(AstObject *rawObj, bool copy)
Given a bare AST object pointer return a shared pointer to an ast::Object of the correct type.
Definition
Object.cc:140
ast::ResolvedPoint
Struct returned by Frame.resolve containing a point and the resolved vector components.
Definition
Frame.h:75
ast::ResolvedPoint::point
std::vector< double > point
Point.
Definition
Frame.h:83
ast::ResolvedPoint::d2
double d2
Resolved vector component 2.
Definition
Frame.h:85
ast::ResolvedPoint::d1
double d1
Resolved vector component 1.
Definition
Frame.h:84
std::vector::data
T data(T... args)
ast::detail::assertEqual
void assertEqual(T1 val1, std::string const &descr1, T2 val2, std::string const &descr2)
Definition
utils.h:48
ast::detail::astBadToNan
void astBadToNan(std::vector< double > &p)
Replace AST__BAD with a quiet NaN in a vector.
Definition
utils.h:59
ast
AST wrapper classes and functions.
Definition
attributes_channel.dox:1
ast::Frame
Frame(int naxes, std::string const &options="")
Frame is used to represent a coordinate system.
Definition
Frame.h:168
ast::assertOK
void assertOK(AstObject *rawPtr1=nullptr, AstObject *rawPtr2=nullptr)
Throw std::runtime_error if AST's state is bad.
Definition
base.cc:49
ast::getNAxes
int getNAxes() const
Get NAxes: the number of axes in the frame (i.e.
Definition
Frame.h:876
std::shared_ptr
std::vector::size
T size(T... args)
std::size_t
std::vector
Generated on
for lsst.astshim by
1.17.0