LSST Applications g0603fd7c41+501e3db9f9,g0aad566f14+23d8574c86,g0dd44d6229+a1a4c8b791,g2079a07aa2+86d27d4dc4,g2305ad1205+a62672bbc1,g2bbee38e9b+047b288a59,g337abbeb29+047b288a59,g33d1c0ed96+047b288a59,g3a166c0a6a+047b288a59,g3d1719c13e+23d8574c86,g487adcacf7+cb7fd919b2,g4be5004598+23d8574c86,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+4a9e435310,g63cd9335cc+585e252eca,g858d7b2824+23d8574c86,g88963caddf+0cb8e002cc,g99cad8db69+43388bcaec,g9ddcbc5298+9a081db1e4,ga1e77700b3+a912195c07,gae0086650b+585e252eca,gb0e22166c9+60f28cb32d,gb2522980b2+793639e996,gb3a676b8dc+b4feba26a1,gb4b16eec92+63f8520565,gba4ed39666+c2a2e4ac27,gbb8dafda3b+a5d255a82e,gc120e1dc64+d820f8acdb,gc28159a63d+047b288a59,gc3e9b769f7+f4f1cc6b50,gcf0d15dbbd+a1a4c8b791,gdaeeff99f8+f9a426f77a,gdb0af172c8+b6d5496702,ge79ae78c31+047b288a59,w.2024.19
LSST Data Management Base Package
Loading...
Searching...
No Matches
applyLookupTable.cc
Go to the documentation of this file.
1// -*- LSST-C++ -*-
2
3/*
4 * LSST Data Management System
5 * Copyright 2016 LSST Corporation.
6 *
7 * This product includes software developed by the
8 * LSST Project (http://www.lsst.org/).
9 *
10 * This program is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the LSST License Statement and
21 * the GNU General Public License along with this program. If not,
22 * see <http://www.lsstcorp.org/LegalNotices/>.
23 */
24
25#include <cstdint>
26
27#include "lsst/pex/exceptions.h"
29
30namespace lsst {
31namespace ip {
32namespace isr {
33
34template<typename PixelT>
35int applyLookupTable(
37 ndarray::Array<PixelT, 1, 1> const &table,
38 PixelT indOffset
39) {
40 if (table.size() == 0u) {
41 throw LSST_EXCEPT(
43 "Lookup table has zero size."
44 );
45 }
46 int numOutOfRange = 0;
47 int const maxLookupCol = table.size() - 1;
48 for (int col = 0, imHeight = image.getHeight(); col < imHeight; ++col) {
49 for (auto imPtr = image.row_begin(col), end = image.row_end(col); imPtr != end; ++imPtr) {
50 int lookupCol = indOffset + *imPtr;
51 if (lookupCol < 0) {
52 lookupCol = 0;
53 ++numOutOfRange;
54 } else if (lookupCol > maxLookupCol) {
55 lookupCol = maxLookupCol;
56 ++numOutOfRange;
57 }
58 *imPtr += table[lookupCol];
59 }
60 }
61 return numOutOfRange;
62}
63
64#define INSTANTIATE(T) \
65 template int applyLookupTable<T>(afw::image::Image<T> &, ndarray::Array<T, 1, 1> const &, T);
66
69
70}}} // lsst::ip::isr
int end
#define INSTANTIATE(FROMSYS, TOSYS)
Definition Detector.cc:509
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition Exception.h:48
A class to represent a 2-dimensional array of pixels.
Definition Image.h:51
Reports attempts to exceed implementation-defined length limits for some classes.
Definition Runtime.h:76
int col
Definition CR.cc:144