LSST Applications g0f08755f38+9c285cab97,g1635faa6d4+13f3999e92,g1653933729+a8ce1bb630,g1a0ca8cf93+bf6eb00ceb,g28da252d5a+0829b12dee,g29321ee8c0+5700dc9eac,g2bbee38e9b+9634bc57db,g2bc492864f+9634bc57db,g2cdde0e794+c2c89b37c4,g3156d2b45e+41e33cbcdc,g347aa1857d+9634bc57db,g35bb328faa+a8ce1bb630,g3a166c0a6a+9634bc57db,g3e281a1b8c+9f2c4e2fc3,g414038480c+077ccc18e7,g41af890bb2+fde0dd39b6,g5fbc88fb19+17cd334064,g781aacb6e4+a8ce1bb630,g80478fca09+55a9465950,g82479be7b0+d730eedb7d,g858d7b2824+9c285cab97,g9125e01d80+a8ce1bb630,g9726552aa6+10f999ec6a,ga5288a1d22+2a84bb7594,gacf8899fa4+c69c5206e8,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+9634bc57db,gcf0d15dbbd+4b7d09cae4,gda3e153d99+9c285cab97,gda6a2b7d83+4b7d09cae4,gdaeeff99f8+1711a396fd,ge2409df99d+5e831397f4,ge79ae78c31+9634bc57db,gf0baf85859+147a0692ba,gf3967379c6+41c94011de,gf3fb38a9a8+8f07a9901b,gfb92a5be7c+9c285cab97,w.2024.46
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | List of all members
lsst::jointcal::SparseHisto4d Class Reference

A class to histogram in 4 dimensions. More...

#include <Histo4d.h>

Public Member Functions

 SparseHisto4d ()=default
 
 SparseHisto4d (int n1, double min1, double max1, int n2, double min2, double max2, int n3, double min3, double max3, int n4, double min4, double max4, int nEntries)
 
void fill (const double x[4])
 
void fill (double x1, double x2, double x3, double x4)
 
int maxBin (double x[4])
 
void zeroBin (double x[4])
 
void binLimits (const double x[4], int idim, double &xMin, double &xMax) const
 return the bin limits of dimension idim (0<=idim<4), around point X.
 
int getNEntries () const
 
 ~SparseHisto4d ()=default
 
int code_value (const double x[4]) const
 
void inverse_code (int code, double x[4]) const
 
void sort ()
 
void print () const
 

Detailed Description

A class to histogram in 4 dimensions.

Uses Sparse storage. The number of bin is limited to 256 per dimension. Used in ListMatch.cc

Definition at line 33 of file Histo4d.h.

Constructor & Destructor Documentation

◆ SparseHisto4d() [1/2]

lsst::jointcal::SparseHisto4d::SparseHisto4d ( )
default

◆ SparseHisto4d() [2/2]

lsst::jointcal::SparseHisto4d::SparseHisto4d ( int n1,
double min1,
double max1,
int n2,
double min2,
double max2,
int n3,
double min3,
double max3,
int n4,
double min4,
double max4,
int nEntries )

Definition at line 41 of file Histo4d.cc.

44 : _data(nEntries, 0) {
45 double indexMax = n1 * n2 * n3 * n4;
46 if (indexMax > double(INT_MAX))
47 LOGLS_WARN(_log, "Cannot hold a 4D histo with more than " << INT_MAX << " values.");
48 _n[0] = n1;
49 _n[1] = n2;
50 _n[2] = n3;
51 _n[3] = n4;
52 _minVal[0] = min1;
53 _minVal[1] = min2;
54 _minVal[2] = min3;
55 _minVal[3] = min4;
56 _maxVal[0] = max1;
57 _maxVal[1] = max2;
58 _maxVal[2] = max3;
59 _maxVal[3] = max4;
60
61 for (int i = 0; i < 4; ++i) _scale[i] = _n[i] / (_maxVal[i] - _minVal[i]);
62 _dataSize = nEntries;
63 _ndata = 0;
64 _sorted = false;
65}
#define LOGLS_WARN(logger, message)
Log a warn-level message using an iostream-based interface.
Definition Log.h:659

◆ ~SparseHisto4d()

lsst::jointcal::SparseHisto4d::~SparseHisto4d ( )
default

Member Function Documentation

◆ binLimits()

void lsst::jointcal::SparseHisto4d::binLimits ( const double x[4],
int idim,
double & xMin,
double & xMax ) const

return the bin limits of dimension idim (0<=idim<4), around point X.

Definition at line 151 of file Histo4d.cc.

151 {
152 int code = code_value(x);
153 double xCenter[4];
154 inverse_code(code, xCenter);
155 xMin = xCenter[iDim] - 0.5 / _scale[iDim];
156 xMax = xCenter[iDim] + 0.5 / _scale[iDim];
157}
void inverse_code(int code, double x[4]) const
Definition Histo4d.cc:77
int code_value(const double x[4]) const
Definition Histo4d.cc:67

◆ code_value()

int lsst::jointcal::SparseHisto4d::code_value ( const double x[4]) const

Definition at line 67 of file Histo4d.cc.

67 {
68 int index = 0;
69 for (int idim = 0; idim < 4; ++idim) {
70 int i = (int)std::floor((x[idim] - _minVal[idim]) * _scale[idim]);
71 if (i < 0 || i >= _n[idim]) return -1;
72 index = index * _n[idim] + i;
73 }
74 return index;
75}
T floor(T... args)

◆ fill() [1/2]

void lsst::jointcal::SparseHisto4d::fill ( const double x[4])

Definition at line 92 of file Histo4d.cc.

94{
95 int code = code_value(x);
96 if (code < 0) return;
97 if (_ndata == _dataSize) {
98 _dataSize *= 2;
99 _data.resize(_dataSize);
100 }
101 _data[_ndata++] = code;
102 _sorted = false;
103}
T resize(T... args)

◆ fill() [2/2]

void lsst::jointcal::SparseHisto4d::fill ( double x1,
double x2,
double x3,
double x4 )

Definition at line 105 of file Histo4d.cc.

105 {
106 static double x[4];
107 x[0] = x1;
108 x[1] = x2;
109 x[2] = x3;
110 x[3] = x4;
111 fill(x);
112}
void fill(const double x[4])
Definition Histo4d.cc:92

◆ getNEntries()

int lsst::jointcal::SparseHisto4d::getNEntries ( ) const
inline

Definition at line 54 of file Histo4d.h.

54{ return _ndata; }

◆ inverse_code()

void lsst::jointcal::SparseHisto4d::inverse_code ( int code,
double x[4] ) const

Definition at line 77 of file Histo4d.cc.

77 {
78 for (int i = 3; i >= 0; --i) {
79 int bin = code % _n[i];
80 code /= _n[i];
81 x[i] = _minVal[i] + ((double)bin + 0.5) / _scale[i];
82 }
83}

◆ maxBin()

int lsst::jointcal::SparseHisto4d::maxBin ( double x[4])

Definition at line 114 of file Histo4d.cc.

114 {
115 sort();
116 if (_ndata == 0) return 0;
117 int maxval = _data[0];
118 int maxCount = 1;
119 int oldval = _data[0];
120 int currentCount = 1;
121 for (int i = 1; i < _ndata; ++i) {
122 if (_data[i] == oldval)
123 currentCount++;
124 else
125 currentCount = 1;
126 if (currentCount > maxCount) {
127 maxCount = currentCount;
128 maxval = _data[i];
129 }
130 oldval = _data[i];
131 }
132 inverse_code(maxval, x);
133 return maxCount;
134}

◆ print()

void lsst::jointcal::SparseHisto4d::print ( ) const

Definition at line 159 of file Histo4d.cc.

159 {
160 for (int i = 0; i < _ndata; ++i) // DEBUG
161 std::cout << _data[i] << ' ';
163}
T endl(T... args)

◆ sort()

void lsst::jointcal::SparseHisto4d::sort ( )

Definition at line 85 of file Histo4d.cc.

85 {
86 if (!_sorted) {
87 std::sort(_data.begin(), _data.end());
88 _sorted = true;
89 }
90}
T begin(T... args)
T end(T... args)
T sort(T... args)

◆ zeroBin()

void lsst::jointcal::SparseHisto4d::zeroBin ( double x[4])

Definition at line 136 of file Histo4d.cc.

136 {
137 sort();
138 int code = code_value(x);
139 // inefficient locator...
140 int start = 0;
141 while ((_data[start] < code) && start < _ndata) start++;
142 // find how many identical entries we have
143 int end = std::min(start + 1, _ndata);
144 while (end < _ndata && _data[start] == _data[end]) end++;
145 int shift = end - start;
146 int lastShift = _ndata - (end - start);
147 for (int i = start; i < lastShift; ++i) _data[i] = _data[i + shift];
148 _ndata -= shift;
149}
int end
T min(T... args)

The documentation for this class was generated from the following files: