lsst.astshim
gf5dcc679e7+7aca86229d
Toggle main menu visibility
Loading...
Searching...
No Matches
src
detail
polyMapUtils.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 "
astshim/detail/polyMapUtils.h
"
23
#include "
astshim/ChebyMap.h
"
24
#include "
astshim/PolyMap.h
"
25
26
namespace
ast
{
27
namespace
detail
{
28
29
template
<
class
AstMapT,
class
MapT>
30
AstMapT *
polyTranImpl
(MapT
const
&mapping,
bool
forward,
double
acc,
double
maxacc,
int
maxorder,
31
std::vector<double>
const
&lbnd,
std::vector<double>
const
&ubnd) {
32
// desired size of lbnd and ubnd
33
auto
const
bndSize =
static_cast<
unsigned
int
>
(forward ? mapping.getNOut() : mapping.getNIn());
34
35
if
(lbnd.
size
() != bndSize) {
36
std::ostringstream
os;
37
os <<
"lbnd.size() = "
<< lbnd.
size
() <<
" != "
<< bndSize <<
" = "
38
<< (forward ?
"getNOut()"
:
"getNIn()"
);
39
throw
std::invalid_argument
(os.
str
());
40
}
41
if
(ubnd.
size
() != bndSize) {
42
std::ostringstream
os;
43
os <<
"ubnd.size() = "
<< ubnd.
size
() <<
" != "
<< bndSize <<
" = "
44
<< (forward ?
"getNOut()"
:
"getNIn()"
);
45
throw
std::invalid_argument
(os.
str
());
46
}
47
48
void
*outRawMap = astPolyTran(mapping.getRawPtr(),
static_cast<
int
>
(forward), acc, maxacc, maxorder,
49
lbnd.
data
(), ubnd.
data
());
50
// Failure should result in a null pointer, so calling assertOK is unlikely to do anything,
51
// but better to be sure and than risk missing an uncaught error.
52
assertOK
(
reinterpret_cast<
AstObject *
>
(outRawMap));
53
if
(!outRawMap) {
54
throw
std::runtime_error
(
"Could not compute an inverse mapping"
);
55
}
56
return
reinterpret_cast<
AstMapT *
>
(outRawMap);
57
}
58
59
// Explicit instantiations
60
template
AstChebyMap *
polyTranImpl<AstChebyMap>
(
ChebyMap
const
&,
bool
,
double
,
double
,
int
,
61
std::vector<double>
const
&,
std::vector<double>
const
&);
62
template
AstPolyMap *
polyTranImpl<AstPolyMap>
(
PolyMap
const
&,
bool
,
double
,
double
,
int
,
63
std::vector<double>
const
&,
std::vector<double>
const
&);
64
65
}
// namespace detail
66
}
// namespace ast
ChebyMap.h
PolyMap.h
std::ostringstream
ast::ChebyMap
A ChebyMap is a form of Mapping which performs a Chebyshev polynomial transformation.
Definition
ChebyMap.h:97
ast::PolyMap
PolyMap is a Mapping which performs a general polynomial transformation.
Definition
PolyMap.h:49
std::vector::data
T data(T... args)
std::invalid_argument
ast::detail
Definition
polyMapUtils.h:30
ast::detail::polyTranImpl
AstMapT * polyTranImpl(MapT const &mapping, bool forward, double acc, double maxacc, int maxorder, std::vector< double > const &lbnd, std::vector< double > const &ubnd)
Call astPolyTran to set (or replace) one direction of a polynomial transform with a fit based on the ...
Definition
polyMapUtils.cc:30
ast::detail::polyTranImpl< AstPolyMap >
template AstPolyMap * polyTranImpl< AstPolyMap >(PolyMap const &, bool, double, double, int, std::vector< double > const &, std::vector< double > const &)
ast::detail::polyTranImpl< AstChebyMap >
template AstChebyMap * polyTranImpl< AstChebyMap >(ChebyMap const &, bool, double, double, int, std::vector< double > const &, std::vector< double > const &)
ast
AST wrapper classes and functions.
Definition
attributes_channel.dox:1
ast::assertOK
void assertOK(AstObject *rawPtr1=nullptr, AstObject *rawPtr2=nullptr)
Throw std::runtime_error if AST's state is bad.
Definition
base.cc:49
polyMapUtils.h
std::runtime_error
std::vector::size
T size(T... args)
std::ostringstream::str
T str(T... args)
std::vector
Generated on
for lsst.astshim by
1.17.0