BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
CsvImportData Class Reference
Inheritance diagram for CsvImportData:
[legend]
Collaboration diagram for CsvImportData:
[legend]

Public Types

enum  DATA_TYPE { Intensity , Coordinate }
 

Public Member Functions

 CsvImportData (QObject *parent=nullptr)
 
QList< QString > availableCoordinateUnits () const
 
std::set< std::pair< int, int > > checkData ()
 
int column (DATA_TYPE type) const
 
QString columnLabel (DATA_TYPE type) const
 
const csv::DataArraydata () const
 
size_t firstRow ()
 
size_t lastRow ()
 
csv::DataColumn multipliedValues (DATA_TYPE type) const
 
double multiplier (DATA_TYPE type) const
 
size_t nCols () const
 
size_t nRows () const
 
void resetSelection ()
 
bool rowExcluded (int row)
 
std::set< int > rowsToDiscard () const
 
int setColumnAs (int col, csv::ColumnType type)
 sets type to a column col. More...
 
void setData (csv::DataArray data)
 
void setFirstRow (size_t row)
 
void setLastRow (size_t row)
 
void setMultiplier (DATA_TYPE type, double value)
 
void toggleDiscardRows (std::set< int > rows)
 
csv::DataColumn values (int col) const
 

Static Public Member Functions

static std::vector< DATA_TYPEavailableTypes ()
 

Private Member Functions

std::set< int > checkFormat (const csv::DataColumn &values, bool check_ordering)
 Checks if selected data is suitable for import. More...
 

Private Attributes

std::unique_ptr< const csv::DataArraym_data
 
std::set< int > m_discarded_rows
 
size_t m_n_footer
 number of footer rows More...
 
size_t m_n_header
 number of header rows More...
 
std::map< DATA_TYPE, CsvCoordinateColumnm_selected_cols
 

Detailed Description

Definition at line 22 of file CsvImportTable.h.

Member Enumeration Documentation

◆ DATA_TYPE

Enumerator
Intensity 
Coordinate 

Definition at line 25 of file CsvImportTable.h.

Constructor & Destructor Documentation

◆ CsvImportData()

CsvImportData::CsvImportData ( QObject *  parent = nullptr)

Definition at line 30 of file CsvImportTable.cpp.

31  : QObject(parent), m_data(new csv::DataArray), m_n_header(0), m_n_footer(0)
32 {
33 }
size_t m_n_footer
number of footer rows
size_t m_n_header
number of header rows
std::unique_ptr< const csv::DataArray > m_data
std::vector< std::vector< std::string > > DataArray
Definition: CsvNamespace.h:26

Member Function Documentation

◆ availableCoordinateUnits()

QList< QString > CsvImportData::availableCoordinateUnits ( ) const

Definition at line 167 of file CsvImportTable.cpp.

168 {
169  if (column(Coordinate) < 0)
170  return {axisUnitLabel.at(Axes::Units::NBINS)};
171 
172  auto coordinate_type = m_selected_cols.at(Coordinate).name();
173  if (coordinate_type == csv::_q_)
174  return {axisUnitLabel.at(Axes::Units::QSPACE)};
175  else if (coordinate_type == csv::_theta_)
176  return {{axisUnitLabel.at(Axes::Units::DEGREES)}, {axisUnitLabel.at(Axes::Units::RADIANS)}};
177  return {axisUnitLabel.at(Axes::Units::NBINS)};
178 }
const std::map< Axes::Units, const char * > axisUnitLabel
int column(DATA_TYPE type) const
std::map< DATA_TYPE, CsvCoordinateColumn > m_selected_cols
@ _q_
Definition: CsvNamespace.h:23
@ _theta_
Definition: CsvNamespace.h:23

References csv::_q_, csv::_theta_, axisUnitLabel, column(), Coordinate, and m_selected_cols.

Referenced by CsvImportTable::availableCoordinateUnits().

Here is the call graph for this function:

◆ availableTypes()

std::vector< CsvImportData::DATA_TYPE > CsvImportData::availableTypes ( )
static

◆ checkData()

std::set< std::pair< int, int > > CsvImportData::checkData ( )

Definition at line 201 of file CsvImportTable.cpp.

202 {
203  std::set<std::pair<int, int>> result;
204  for (auto type : availableTypes()) {
205  auto col_result = checkFormat(multipliedValues(type), type == Coordinate);
206  std::for_each(col_result.begin(), col_result.end(), [col = column(type), &result](int row) {
207  result.insert({row, col});
208  });
209  }
210  return result;
211 }
std::set< int > checkFormat(const csv::DataColumn &values, bool check_ordering)
Checks if selected data is suitable for import.
csv::DataColumn multipliedValues(DATA_TYPE type) const
static std::vector< DATA_TYPE > availableTypes()

References availableTypes(), checkFormat(), column(), Coordinate, and multipliedValues().

Referenced by CsvImportTable::checkData().

Here is the call graph for this function:

◆ checkFormat()

std::set< int > CsvImportData::checkFormat ( const csv::DataColumn values,
bool  check_ordering 
)
private

Checks if selected data is suitable for import.

All values must be convertible to doubles, positive and sorted in ascending order if check_ordering is set to true. Returns a set of rows where the check failed.

Definition at line 221 of file CsvImportTable.cpp.

222 {
223  std::set<int> result;
224  if (values.empty())
225  return result;
226 
227  bool has_prev_value = false;
228  double prev_value = 0.0;
229  for (size_t i = m_n_header; i + m_n_footer < nRows(); ++i) {
230  if (m_discarded_rows.find(static_cast<int>(i)) != m_discarded_rows.end())
231  continue;
232 
233  auto cellText = QString::fromStdString(values[i]);
234  bool is_double;
235  double number = cellText.toDouble(&is_double);
236  if (!is_double || number <= 0.0) {
237  result.insert(static_cast<int>(i));
238  continue;
239  }
240 
241  if (!check_ordering)
242  continue;
243 
244  if (has_prev_value && prev_value >= number) {
245  result.insert(static_cast<int>(i));
246  continue;
247  }
248  prev_value = number;
249  has_prev_value = true;
250  }
251  return result;
252 }
size_t nRows() const
std::set< int > m_discarded_rows
csv::DataColumn values(int col) const

References m_discarded_rows, m_n_footer, m_n_header, nRows(), and values().

Referenced by checkData().

Here is the call graph for this function:

◆ column()

int CsvImportData::column ( DATA_TYPE  type) const

◆ columnLabel()

QString CsvImportData::columnLabel ( CsvImportData::DATA_TYPE  type) const

Definition at line 160 of file CsvImportTable.cpp.

161 {
162  if (m_selected_cols.find(type) == m_selected_cols.end())
163  return "";
164  return csv::HeaderLabels[m_selected_cols.at(type).name()];
165 }
const QStringList HeaderLabels
Definition: CsvNamespace.h:24

References csv::HeaderLabels, and m_selected_cols.

Referenced by CsvImportTable::setHeaders().

◆ data()

const csv::DataArray & CsvImportData::data ( ) const

Definition at line 108 of file CsvImportTable.cpp.

109 {
110  return *m_data.get();
111 }

References m_data.

Referenced by setData().

◆ firstRow()

size_t CsvImportData::firstRow ( )
inline

Definition at line 53 of file CsvImportTable.h.

53 { return m_n_header; }

References m_n_header.

Referenced by CsvImportTable::setFirstRow().

◆ lastRow()

size_t CsvImportData::lastRow ( )
inline

Definition at line 54 of file CsvImportTable.h.

54 { return m_n_footer + 1 >= nRows() ? 0 : nRows() - m_n_footer - 1; }

References m_n_footer, and nRows().

Referenced by CsvImportTable::setLastRow().

Here is the call graph for this function:

◆ multipliedValues()

csv::DataColumn CsvImportData::multipliedValues ( DATA_TYPE  type) const

Definition at line 131 of file CsvImportTable.cpp.

132 {
133  csv::DataColumn result;
134  const int col = column(type);
135  if (col < 0 || col >= static_cast<int>(nCols()))
136  return result;
137 
138  double mult_value = multiplier(type);
139  csv::DataColumn col_values = values(col);
140  result.resize(col_values.size());
141  // FIXME: seems that csv::DataColumn and related
142  // classes can be based on QString
143  for (size_t i = 0; i < col_values.size(); i++) {
144  auto currentText = QString::fromStdString(col_values[i]);
145  double number = mult_value * currentText.toDouble();
146  // FIXME: find more elegant way to distinguish non-numerics
147  QString textToWrite = 0.0 == number ? currentText : QString::number(number);
148  result[i] = textToWrite.toStdString();
149  }
150  return result;
151 }
double multiplier(DATA_TYPE type) const
size_t nCols() const
std::vector< std::string > DataColumn
Definition: CsvNamespace.h:28

References column(), multiplier(), nCols(), and values().

Referenced by checkData(), and CsvImportTable::updateSelectedCols().

Here is the call graph for this function:

◆ multiplier()

double CsvImportData::multiplier ( CsvImportData::DATA_TYPE  type) const

Definition at line 153 of file CsvImportTable.cpp.

154 {
155  if (m_selected_cols.find(type) == m_selected_cols.end())
156  return 1.0;
157  return m_selected_cols.at(type).multiplier();
158 }

References m_selected_cols.

Referenced by CsvImportTable::coordinateMultiplier(), CsvImportTable::intensityMultiplier(), multipliedValues(), and CsvImportTable::setMultiplierFields().

◆ nCols()

size_t CsvImportData::nCols ( ) const

Definition at line 180 of file CsvImportTable.cpp.

181 {
182  if (nRows() == 0)
183  return 0;
184  return (*m_data)[0].size();
185 }

References m_data, and nRows().

Referenced by multipliedValues(), CsvImportTable::setMultiplierFields(), and values().

Here is the call graph for this function:

◆ nRows()

size_t CsvImportData::nRows ( ) const

Definition at line 187 of file CsvImportTable.cpp.

188 {
189  return (*m_data).size();
190 }

Referenced by checkFormat(), lastRow(), nCols(), rowExcluded(), setFirstRow(), and setLastRow().

◆ resetSelection()

void CsvImportData::resetSelection ( )

Definition at line 213 of file CsvImportTable.cpp.

214 {
215  m_n_header = 0;
216  m_n_footer = 0;
217  m_selected_cols.clear();
218  m_discarded_rows.clear();
219 }

References m_discarded_rows, m_n_footer, m_n_header, and m_selected_cols.

Referenced by CsvImportTable::resetSelection().

◆ rowExcluded()

bool CsvImportData::rowExcluded ( int  row)

Definition at line 192 of file CsvImportTable.cpp.

193 {
194  if (static_cast<size_t>(row) < m_n_header || static_cast<size_t>(row) + m_n_footer >= nRows())
195  return true;
196  if (m_discarded_rows.find(row) != m_discarded_rows.end())
197  return true;
198  return false;
199 }

References m_discarded_rows, m_n_footer, m_n_header, and nRows().

Referenced by CsvImportTable::greyoutDiscardedRows().

Here is the call graph for this function:

◆ rowsToDiscard()

std::set<int> CsvImportData::rowsToDiscard ( ) const
inline

Definition at line 49 of file CsvImportTable.h.

49 { return m_discarded_rows; }

References m_discarded_rows.

Referenced by CsvImportTable::rowsToDiscard().

◆ setColumnAs()

int CsvImportData::setColumnAs ( int  col,
csv::ColumnType  type 
)

sets type to a column col.

Returns the column number previously set to the type

Definition at line 44 of file CsvImportTable.cpp.

45 {
47 
49  const int prev_assigned = column.columnNumber();
50  if (prev_assigned == col && type == column.name())
51  return prev_assigned;
52 
53  for (auto iter = m_selected_cols.begin(); iter != m_selected_cols.end();)
54  if (iter->second.columnNumber() == col && iter->first != role)
55  iter = m_selected_cols.erase(iter);
56  else
57  ++iter;
58 
59  column.setColNum(col);
60  column.setMultiplier(1.0); // resetting multiplier value
61  column.setValues(values(col));
62  column.setName(type);
63  return prev_assigned;
64 }
@ _intensity_
Definition: CsvNamespace.h:23

References csv::_intensity_, column(), Coordinate, Intensity, m_selected_cols, and values().

Referenced by CsvImportTable::setColumnAs().

Here is the call graph for this function:

◆ setData()

void CsvImportData::setData ( csv::DataArray  data)

Definition at line 35 of file CsvImportTable.cpp.

36 {
37  m_data.reset(new csv::DataArray(std::move(data)));
38  m_selected_cols.clear();
39  m_n_header = 0;
40  m_n_footer = 0;
41  m_discarded_rows.clear();
42 }
const csv::DataArray & data() const

References data(), m_data, m_discarded_rows, m_n_footer, m_n_header, and m_selected_cols.

Referenced by CsvImportTable::setData().

Here is the call graph for this function:

◆ setFirstRow()

void CsvImportData::setFirstRow ( size_t  row)

Definition at line 74 of file CsvImportTable.cpp.

75 {
76  if (row >= nRows())
77  return;
78  m_n_header = row;
79 }

References m_n_header, and nRows().

Referenced by CsvImportTable::setFirstRow().

Here is the call graph for this function:

◆ setLastRow()

void CsvImportData::setLastRow ( size_t  row)

Definition at line 81 of file CsvImportTable.cpp.

82 {
83  if (row + 1 >= nRows())
84  return;
85  m_n_footer = nRows() - row - 1;
86 }

References m_n_footer, and nRows().

Referenced by CsvImportTable::setLastRow().

Here is the call graph for this function:

◆ setMultiplier()

void CsvImportData::setMultiplier ( CsvImportData::DATA_TYPE  type,
double  value 
)

Definition at line 66 of file CsvImportTable.cpp.

67 {
68  if (m_selected_cols.find(type) == m_selected_cols.end())
69  return;
70 
71  m_selected_cols[type].setMultiplier(value);
72 }

References m_selected_cols.

Referenced by CsvImportTable::setMultiplierFields().

◆ toggleDiscardRows()

void CsvImportData::toggleDiscardRows ( std::set< int >  rows)

Definition at line 88 of file CsvImportTable.cpp.

89 {
90  if (rows.empty()) {
91  m_discarded_rows.clear();
92  return;
93  }
94  for (auto row : rows) {
95  if (m_discarded_rows.find(row) != m_discarded_rows.end()) {
96  m_discarded_rows.erase(row);
97  } else {
98  m_discarded_rows.insert(row);
99  }
100  }
101 }

References m_discarded_rows.

Referenced by CsvImportTable::discardRows().

◆ values()

csv::DataColumn CsvImportData::values ( int  col) const

Definition at line 119 of file CsvImportTable.cpp.

120 {
121  if (col < 0 || col >= static_cast<int>(nCols()))
122  return {};
123 
124  const size_t size = m_data->size();
125  csv::DataColumn result(size);
126  for (size_t i = 0; i < size; ++i)
127  result[i] = (*m_data)[i][static_cast<size_t>(col)];
128  return result;
129 }

References m_data, and nCols().

Referenced by checkFormat(), multipliedValues(), CsvImportTable::resetColumn(), and setColumnAs().

Here is the call graph for this function:

Member Data Documentation

◆ m_data

std::unique_ptr<const csv::DataArray> CsvImportData::m_data
private

Definition at line 66 of file CsvImportTable.h.

Referenced by data(), nCols(), setData(), and values().

◆ m_discarded_rows

std::set<int> CsvImportData::m_discarded_rows
private

◆ m_n_footer

size_t CsvImportData::m_n_footer
private

number of footer rows

Definition at line 69 of file CsvImportTable.h.

Referenced by checkFormat(), lastRow(), resetSelection(), rowExcluded(), setData(), and setLastRow().

◆ m_n_header

size_t CsvImportData::m_n_header
private

number of header rows

Definition at line 68 of file CsvImportTable.h.

Referenced by checkFormat(), firstRow(), resetSelection(), rowExcluded(), setData(), and setFirstRow().

◆ m_selected_cols

std::map<DATA_TYPE, CsvCoordinateColumn> CsvImportData::m_selected_cols
private

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