LSSTApplications
10.0-2-g4f67435,11.0.rc2+1,11.0.rc2+12,11.0.rc2+3,11.0.rc2+4,11.0.rc2+5,11.0.rc2+6,11.0.rc2+7,11.0.rc2+8
LSSTDataManagementBasePackage
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
home
lsstsw
stack
Linux64
afw
11.0.rc2+4
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 {
namespace
afw {
namespace
math {
namespace
detail {
27
28
TrapezoidalPacker::TrapezoidalPacker
(
ChebyshevBoundedFieldControl
const
& ctrl)
29
: nx(ctrl.
orderX
+ 1), ny(ctrl.orderY+1)
30
{
31
if
(ctrl.
triangular
) {
32
if
(
nx
>=
ny
) {
33
m
= 0;
34
size
= (
nx
-
ny
)*
ny
+ (
ny
*(
ny
+ 1))/2;
35
}
else
{
36
m
=
ny
-
nx
;
37
size
=
m
*nx + (nx*(nx + 1))/2;
38
}
39
}
else
{
40
m
=
ny
;
41
size
=
nx
*
ny
;
42
}
43
}
44
45
void
TrapezoidalPacker::pack
(
46
ndarray::Array<double,1,1>
const
& out,
47
ndarray::Array<double const,1,1>
const
& tx,
48
ndarray::Array<double const,1,1>
const
& ty
49
)
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
(
64
ndarray::Array<double,1,1>
const
& out,
65
ndarray::Array<double const,2,2>
const
& unpacked
66
)
const
{
67
double
* outIter = out.
begin
();
68
for
(
int
i = 0; i <
m
; ++i) {
// loop over rectangular part
69
ndarray::Array<double const,1,1>
unpackedRow = unpacked[i];
70
for
(
int
j = 0; j <
nx
; ++j, ++outIter) {
71
*outIter = unpackedRow[j];
72
}
73
}
74
for
(
int
i = m; i <
ny
; ++i) {
// loop over wide trapezoidal part
75
ndarray::Array<double const,1,1>
unpackedRow = unpacked[i];
76
for
(
int
j = 0, nj =
nx
+ m - i; j < nj; ++j, ++outIter) {
77
*outIter = unpackedRow[j];
78
}
79
}
80
}
81
82
void
TrapezoidalPacker::unpack
(
83
ndarray::Array<double,2,2>
const
& out,
84
ndarray::Array<double const,1,1>
const
& packed
85
)
const
{
86
out.
deep
() = 0.0;
87
double
const
* packedIter = packed.
begin
();
88
for
(
int
i = 0; i <
m
; ++i) {
// loop over rectangular part
89
ndarray::Array<double,1,1>
outRow = out[i];
90
for
(
int
j = 0; j <
nx
; ++j, ++packedIter) {
91
outRow[j] = *packedIter;
92
}
93
}
94
for
(
int
i = m; i <
ny
; ++i) {
// loop over wide trapezoidal part
95
ndarray::Array<double,1,1>
outRow = out[i];
96
for
(
int
j = 0, nj =
nx
+ m - i; j < nj; ++j, ++packedIter) {
97
outRow[j] = *packedIter;
98
}
99
}
100
}
101
102
ndarray::Array<double,2,2>
TrapezoidalPacker::unpack
(
103
ndarray::Array<double const,1,1>
const
& packed
104
)
const
{
105
ndarray::Array<double,2,2>
out =
ndarray::allocate
(
ny
,
nx
);
106
unpack
(out, packed);
107
return
out;
108
}
109
110
}}}}
// namespace lsst::afw::math::detail
lsst.afw.math.detail::TrapezoidalPacker::ny
int ny
Definition:
TrapezoidalPacker.h:112
TrapezoidalPacker.h
lsst.afw.math::ChebyshevBoundedFieldControl
A control object used when fitting ChebyshevBoundedField to data (see ChebyshevBoundedField::fit) ...
Definition:
ChebyshevBoundedField.h:36
lsst.afw.math.detail::TrapezoidalPacker::m
int m
Definition:
TrapezoidalPacker.h:113
lsst.afw.math.detail::TrapezoidalPacker::size
int size
Definition:
TrapezoidalPacker.h:114
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:45
lsst.afw.math.detail::TrapezoidalPacker::TrapezoidalPacker
TrapezoidalPacker(ChebyshevBoundedFieldControl const &ctrl)
Definition:
TrapezoidalPacker.cc:28
ndarray::allocate
detail::SimpleInitializer< N > allocate(Vector< int, N > const &shape)
Create an expression that allocates uninitialized memory for an array.
Definition:
initialization.h:115
ndarray::Array< double, 1, 1 >
ndarray::ArrayBase::deep
Deep const deep() const
Return an ArrayRef view to this.
Definition:
ArrayBase.h:178
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:82
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:49
orderX
table::Key< int > orderX
Definition:
ChebyshevBoundedField.cc:322
lsst.afw.math.detail::TrapezoidalPacker::nx
int nx
Definition:
TrapezoidalPacker.h:111
ndarray::ArrayBase::begin
Iterator begin() const
Return an Iterator to the beginning of the array.
Definition:
ArrayBase.h:99
Generated on Wed Sep 16 2015 13:35:28 for LSSTApplications by
1.8.5