MCPcopy Create free account
hub / github.com/KDE/labplot / copyData

Method copyData

src/backend/worksheet/plots/cartesian/XYAnalysisCurve.cpp:81–179  ·  view source on GitHub ↗

copy valid data from x/y data columns to x/y data vectors for analysis functions avgUniqueX: average y values for duplicate x values

Source from the content-addressed store, hash-verified

79// for analysis functions
80// avgUniqueX: average y values for duplicate x values
81void XYAnalysisCurve::copyData(QVector<double>& xData,
82 QVector<double>& yData,
83 const AbstractColumn* xDataColumn,
84 const AbstractColumn* yDataColumn,
85 double xMin,
86 double xMax,
87 bool avgUniqueX) {
88 const int rowCount = std::min(xDataColumn->rowCount(), yDataColumn->rowCount());
89 bool uniqueX = true;
90 for (int row = 0; row < rowCount; ++row) {
91 if (!xDataColumn->isValid(row) || xDataColumn->isMasked(row) || !yDataColumn->isValid(row) || yDataColumn->isMasked(row))
92 continue;
93
94 double x = NAN;
95 switch (xDataColumn->columnMode()) {
96 case AbstractColumn::ColumnMode::Double:
97 x = xDataColumn->valueAt(row);
98 break;
99 case AbstractColumn::ColumnMode::Integer:
100 x = xDataColumn->integerAt(row);
101 break;
102 case AbstractColumn::ColumnMode::BigInt:
103 x = xDataColumn->bigIntAt(row);
104 break;
105 case AbstractColumn::ColumnMode::Text: // invalid
106 break;
107 case AbstractColumn::ColumnMode::DateTime:
108 case AbstractColumn::ColumnMode::Day:
109 case AbstractColumn::ColumnMode::Month:
110 x = xDataColumn->dateTimeAt(row).toMSecsSinceEpoch();
111 }
112
113 double y = NAN;
114 switch (yDataColumn->columnMode()) {
115 case AbstractColumn::ColumnMode::Double:
116 y = yDataColumn->valueAt(row);
117 break;
118 case AbstractColumn::ColumnMode::Integer:
119 y = yDataColumn->integerAt(row);
120 break;
121 case AbstractColumn::ColumnMode::BigInt:
122 y = yDataColumn->bigIntAt(row);
123 break;
124 case AbstractColumn::ColumnMode::Text: // invalid
125 break;
126 case AbstractColumn::ColumnMode::DateTime:
127 case AbstractColumn::ColumnMode::Day:
128 case AbstractColumn::ColumnMode::Month:
129 y = yDataColumn->dateTimeAt(row).toMSecsSinceEpoch();
130 }
131
132 // only when inside given range
133 if (x >= xMin && x <= xMax) {
134 if (xData.contains(x))
135 uniqueX = false;
136 xData.append(x);
137 yData.append(y);
138 }

Callers

nothing calls this directly

Calls 12

appendMethod · 0.80
rowCountMethod · 0.45
isValidMethod · 0.45
isMaskedMethod · 0.45
columnModeMethod · 0.45
valueAtMethod · 0.45
integerAtMethod · 0.45
bigIntAtMethod · 0.45
dateTimeAtMethod · 0.45
containsMethod · 0.45
sizeMethod · 0.45
removeMethod · 0.45

Tested by

no test coverage detected