2 #include "ScatterPlotData.h"
6 #include <qwt_double_range.h>
29 Cube *xCube,
int xCubeBand,
int xBinCount,
30 Cube *yCube,
int yCubeBand,
int yBinCount,
31 QwtInterval sampleRange, QwtInterval lineRange) :
QwtRasterData(),
35 m_alarmedBins(new
QMap<int, bool>) {
36 int startLine = qRound(lineRange.minValue());
37 int endLine = qRound(lineRange.maxValue());
41 sampleRange.minValue(), lineRange.minValue(),
42 sampleRange.maxValue(), lineRange.maxValue(),
49 sampleRange.minValue(), lineRange.minValue(),
50 sampleRange.maxValue(), lineRange.maxValue(),
64 Brick brick1((
int)(sampleRange.maxValue() - sampleRange.minValue() + 1),
66 Brick brick2((
int)(sampleRange.maxValue() - sampleRange.minValue() + 1),
69 ASSERT(brick1.size() == brick2.size());
71 for (
int line = startLine; line <= endLine; line++) {
72 brick1.SetBasePosition(qRound(sampleRange.minValue()), line, xCubeBand);
75 brick2.SetBasePosition(qRound(sampleRange.minValue()), line, yCubeBand);
78 for (
int i = 0; i < brick1.size(); i++) {
79 double xDn = brick1[i];
80 double yDn = brick2[i];
87 int roundedX = qRound(x);
88 int roundedY = qRound(y);
90 if (roundedX >= 0 && roundedX < xBinCount &&
91 roundedY >= 0 && roundedY < yBinCount) {
92 int value = (*m_counts)[roundedY][roundedX] + 1;
93 (*m_counts)[roundedY][roundedX] =
value;
102 setInterval(Qt::XAxis, QwtInterval(m_xCubeMin,
m_xCubeMax));
103 setInterval(Qt::YAxis, QwtInterval(m_yCubeMin,
m_yCubeMax));
104 setInterval(Qt::ZAxis, QwtInterval(0,
m_maxCount));
158 int index =
binIndex(indices.first, indices.second);
163 value =
binCount(indices.first, indices.second);
236 int xIndex = indices.first;
237 int yIndex = indices.second;
239 if (xIndex != -1 && yIndex != -1) {
245 xSize = (*m_counts)[0].size();
247 double percentAcrossXRange = ((double)xIndex / (
double)xSize);
251 double percentAcrossYRange = ((double)yIndex / (
double)ySize);
273 return binCount(indices.first, indices.second);
288 xSize = (*m_counts)[0].size();
290 return xSize * ySize;
304 int xSize = (*m_counts)[0].size();
305 xValues.resize(xSize);
307 for (
int xIndex = 0; xIndex < xSize; xIndex++) {
308 double percentAcrossXRange = ((double)xIndex / (
double)xSize);
327 if (binToAlarm != -1)
328 (*m_alarmedBins)[binToAlarm] =
true;
386 if (yIndex >= 0 && yIndex < m_counts->size()) {
387 if (xIndex >= 0 && xIndex < (*
m_counts)[yIndex].size()) {
388 count = (*m_counts)[yIndex][xIndex];
410 xSize = (*m_counts)[0].size();
413 if ((xIndex >= 0 && xIndex < xSize) && (yIndex >= 0 && yIndex < ySize))
414 index = xSize * yIndex + xIndex;
429 return binIndex(indices.first, indices.second);
445 xSize = (*m_counts)[0].size();
447 int yIndex = (binIndex / xSize);
448 binIndex -= yIndex * xSize;
452 if (xIndex < 0 || yIndex < 0 || xIndex >= xSize || yIndex >= ySize) {
453 IString msg =
"Bin at index [" +
IString(binIndex) +
"] not found. "
477 int discreteXBin = qRound(xBinPosition);
478 int discreteYBin = qRound(yBinPosition);
480 if (discreteXBin >= 0 && discreteXBin < m_counts->at(0).size() &&
481 discreteYBin >= 0 && discreteYBin < m_counts->size()) {