lsst.afw
g3a5ebb7d8a+28b83bf6a5
Toggle main menu visibility
Loading...
Searching...
No Matches
src
math
detail
TrapezoidalPacker.cc
Go to the documentation of this file.
1
// -*- LSST-C++ -*-
2
/*
3
* LSST Data Management System
4
* Copyright 2008-2014 LSST Corporation.
5
*
6
* This product includes software developed by the
7
* LSST Project (http://www.lsst.org/).
8
*
9
* This program is free software: you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License as published by
11
* the Free Software Foundation, either version 3 of the License, or
12
* (at your option) any later version.
13
*
14
* This program is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
* GNU General Public License for more details.
18
*
19
* You should have received a copy of the LSST License Statement and
20
* the GNU General Public License along with this program. If not,
21
* see <http://www.lsstcorp.org/LegalNotices/>.
22
*/
23
24
#include "
lsst/afw/math/detail/TrapezoidalPacker.h
"
25
26
namespace
lsst
{
27
namespace
afw
{
28
namespace
math
{
29
namespace
detail
{
30
31
TrapezoidalPacker::TrapezoidalPacker
(
ChebyshevBoundedFieldControl
const
& ctrl)
32
:
nx
(ctrl.orderX + 1),
ny
(ctrl.orderY + 1) {
33
if
(ctrl.
triangular
) {
34
if (nx >= ny) {
35
m = 0;
36
size = (nx - ny) * ny + (ny * (ny + 1)) / 2;
37
}
else
{
38
m = ny - nx;
39
size = m * nx + (nx * (nx + 1)) / 2;
40
}
41
}
else
{
42
m = ny;
43
size = nx * ny;
44
}
45
}
46
47
void
TrapezoidalPacker::pack
(ndarray::Array<double, 1, 1>
const
& out,
48
ndarray::Array<double const, 1, 1>
const
& tx,
49
ndarray::Array<double const, 1, 1>
const
& ty)
const
{
50
double
* outIter = out.begin();
51
for
(
int
i = 0; i <
m
; ++i) {
// loop over rectangular part
52
for
(
int
j = 0; j <
nx
; ++j, ++outIter) {
53
*outIter = ty[i] * tx[j];
54
}
55
}
56
for
(
int
i =
m
; i <
ny
; ++i) {
// loop over wide trapezoidal part
57
for
(
int
j = 0, nj =
nx
+
m
- i; j < nj; ++j, ++outIter) {
58
*outIter = ty[i] * tx[j];
59
}
60
}
61
}
62
63
void
TrapezoidalPacker::pack
(ndarray::Array<double, 1, 1>
const
& out,
64
ndarray::Array<double const, 2, 2>
const
& unpacked)
const
{
65
double
* outIter = out.begin();
66
for
(
int
i = 0; i <
m
; ++i) {
// loop over rectangular part
67
ndarray::Array<double const, 1, 1> unpackedRow = unpacked[i];
68
for
(
int
j = 0; j <
nx
; ++j, ++outIter) {
69
*outIter = unpackedRow[j];
70
}
71
}
72
for
(
int
i =
m
; i <
ny
; ++i) {
// loop over wide trapezoidal part
73
ndarray::Array<double const, 1, 1> unpackedRow = unpacked[i];
74
for
(
int
j = 0, nj =
nx
+
m
- i; j < nj; ++j, ++outIter) {
75
*outIter = unpackedRow[j];
76
}
77
}
78
}
79
80
void
TrapezoidalPacker::unpack
(ndarray::Array<double, 2, 2>
const
& out,
81
ndarray::Array<double const, 1, 1>
const
& packed)
const
{
82
out.deep() = 0.0;
83
double
const
* packedIter = packed.begin();
84
for
(
int
i = 0; i <
m
; ++i) {
// loop over rectangular part
85
ndarray::Array<double, 1, 1> outRow = out[i];
86
for
(
int
j = 0; j <
nx
; ++j, ++packedIter) {
87
outRow[j] = *packedIter;
88
}
89
}
90
for
(
int
i =
m
; i <
ny
; ++i) {
// loop over wide trapezoidal part
91
ndarray::Array<double, 1, 1> outRow = out[i];
92
for
(
int
j = 0, nj =
nx
+
m
- i; j < nj; ++j, ++packedIter) {
93
outRow[j] = *packedIter;
94
}
95
}
96
}
97
98
ndarray::Array<double, 2, 2>
TrapezoidalPacker::unpack
(
99
ndarray::Array<double const, 1, 1>
const
& packed)
const
{
100
ndarray::Array<double, 2, 2> out = ndarray::allocate(
ny
,
nx
);
101
unpack
(out, packed);
102
return
out;
103
}
104
}
// namespace detail
105
}
// namespace math
106
}
// namespace afw
107
}
// namespace lsst
TrapezoidalPacker.h
lsst::afw::math::ChebyshevBoundedFieldControl
A control object used when fitting ChebyshevBoundedField to data (see ChebyshevBoundedField::fit).
Definition
ChebyshevBoundedField.h:38
lsst::afw::math::ChebyshevBoundedFieldControl::triangular
bool triangular
"if true, only include terms where the sum of the x and y order " "is less than or equal to max(order...
Definition
ChebyshevBoundedField.h:48
lsst::afw::math::detail
Definition
Convolve.h:46
lsst::afw::math
Definition
statistics.dox:6
lsst::afw
Definition
imageAlgorithm.dox:1
lsst
lsst::afw::math::detail::TrapezoidalPacker::ny
int ny
Definition
TrapezoidalPacker.h:105
lsst::afw::math::detail::TrapezoidalPacker::TrapezoidalPacker
TrapezoidalPacker(ChebyshevBoundedFieldControl const &ctrl)
Definition
TrapezoidalPacker.cc:31
lsst::afw::math::detail::TrapezoidalPacker::unpack
void unpack(ndarray::Array< double, 2, 2 > const &out, ndarray::Array< double const, 1, 1 > const &packed) const
Definition
TrapezoidalPacker.cc:80
lsst::afw::math::detail::TrapezoidalPacker::pack
void pack(ndarray::Array< double, 1, 1 > const &out, ndarray::Array< double const, 1, 1 > const &tx, ndarray::Array< double const, 1, 1 > const &ty) const
Definition
TrapezoidalPacker.cc:47
lsst::afw::math::detail::TrapezoidalPacker::nx
int nx
Definition
TrapezoidalPacker.h:104
lsst::afw::math::detail::TrapezoidalPacker::m
int m
Definition
TrapezoidalPacker.h:106
Generated on
for lsst.afw by
1.17.0