lsst.jointcal
g29ae962dfc+04632301ee
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Histo2d.cc
Go to the documentation of this file.
1
// -*- LSST-C++ -*-
2
/*
3
* This file is part of jointcal.
4
*
5
* Developed for the LSST Data Management System.
6
* This product includes software developed by the LSST Project
7
* (https://www.lsst.org).
8
* See the COPYRIGHT file at the top-level directory of this distribution
9
* for details of code ownership.
10
*
11
* This program is free software: you can redistribute it and/or modify
12
* it under the terms of the GNU General Public License as published by
13
* the Free Software Foundation, either version 3 of the License, or
14
* (at your option) any later version.
15
*
16
* This program is distributed in the hope that it will be useful,
17
* but WITHOUT ANY WARRANTY; without even the implied warranty of
18
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
* GNU General Public License for more details.
20
*
21
* You should have received a copy of the GNU General Public License
22
* along with this program. If not, see <https://www.gnu.org/licenses/>.
23
*/
24
25
#include <cmath>
26
#include <cstring>
/* for memset*/
27
#include <iostream>
28
29
#include "
lsst/log/Log.h
"
30
#include "
lsst/jointcal/Histo2d.h
"
31
32
namespace
{
33
LOG_LOGGER _log =
LOG_GET
(
"lsst.jointcal.Histo2d"
);
34
}
35
36
namespace
lsst
{
37
namespace
jointcal
{
38
39
Histo2d::Histo2d
(
int
nnx,
float
mminx,
float
mmaxx,
int
nny,
float
mminy,
float
mmaxy) : data(nnx * nny, 0.) {
40
nx = nnx;
41
ny = nny;
42
minx = mminx;
43
miny = mminy;
44
if
(mmaxx != mminx)
45
scalex = nx / (mmaxx - mminx);
46
else
{
47
LOGL_WARN
(_log,
"Histo2d: minx = maxx requested"
);
48
scalex = 1.0;
49
}
50
if
(mmaxy != mminy)
51
scaley = ny / (mmaxy - mminy);
52
else
{
53
LOGL_WARN
(_log,
"Histo2d: maxy = miny requested"
);
54
scaley = 1.0;
55
}
56
}
57
58
Histo2d::Histo2d
(
const
Histo2d
&other) {
59
data = other.data;
60
nx = other.nx;
61
ny = other.ny;
62
minx = other.minx;
63
miny = other.miny;
64
scalex = other.scalex;
65
scaley = other.scaley;
66
}
67
68
bool
Histo2d::indices(
double
x,
double
y,
int
&ix,
int
&iy)
const
{
69
ix = (int)
std::floor
((x - minx) * scalex);
70
if
(ix < 0 || ix >= nx)
return
false
;
71
iy = (int)
std::floor
((y - miny) * scaley);
72
return
(iy >= 0 && iy < ny);
73
}
74
75
void
Histo2d::fill
(
float
x,
float
y,
float
weight) {
76
int
ix, iy;
77
if
(indices(x, y, ix, iy)) data[iy + ny * ix] += weight;
78
}
79
80
double
Histo2d::maxBin
(
double
&x,
double
&y)
const
{
81
int
imax = 0;
82
float
valmax = -1e30;
83
84
for
(
std::size_t
i = 0; i < data.size(); i++) {
85
if
(data[i] > valmax) {
86
valmax = data[i];
87
imax = i;
88
}
89
}
90
int
ix = imax / ny;
91
int
iy = imax - ix * ny;
92
x = minx + ((float)ix + 0.5) / scalex;
93
y = miny + ((float)iy + 0.5) / scaley;
94
return
valmax;
95
}
96
97
void
Histo2d::zeroBin
(
double
x,
double
y) {
98
int
ix, iy;
99
if
(indices(x, y, ix, iy)) data[iy + ny * ix] = 0;
100
}
101
102
double
Histo2d::binContent
(
double
x,
double
y)
const
{
103
int
ix, iy;
104
if
(indices(x, y, ix, iy))
return
data[iy + ny * ix];
105
LOGL_WARN
(_log,
"Histo2D::binContent outside limits requested"
);
106
return
-1e30;
107
}
108
}
// namespace jointcal
109
}
// namespace lsst
Log.h
LOGL_WARN
#define LOGL_WARN(logger, message...)
LOG_GET
#define LOG_GET(logger)
Histo2d.h
lsst::jointcal::Histo2d::Histo2d
Histo2d()
Definition
Histo2d.h:35
lsst::jointcal::Histo2d::maxBin
double maxBin(double &x, double &y) const
Definition
Histo2d.cc:80
lsst::jointcal::Histo2d::binContent
double binContent(double x, double y) const
Definition
Histo2d.cc:102
lsst::jointcal::Histo2d::zeroBin
void zeroBin(double x, double y)
Definition
Histo2d.cc:97
lsst::jointcal::Histo2d::fill
void fill(float x, float y, float weight=1.)
Definition
Histo2d.cc:75
std::floor
T floor(T... args)
lsst::jointcal
Definition
Associations.h:50
lsst
std::size_t
Generated on
for lsst.jointcal by
1.17.0