24 #include <QFileDialog>
25 #include <QTextStream>
28 const int bin_centers_colwidth = 12;
29 const int bin_values_colwidth = 20;
31 QString to_scientific_str(
double value)
34 return QString(
"%1").arg(QString::fromStdString(str), -bin_values_colwidth);
37 QString to_double_str(
double value)
40 return QString(
"%1").arg(QString::fromStdString(str), -bin_centers_colwidth);
54 QString fileName = QFileDialog::getSaveFileName(parent,
"Save projections data", defaultName);
56 if (fileName.isEmpty())
60 if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
66 QTextStream out(&file);
68 out <<
"# Projections along x-axis (horizontal projections) \n";
72 out <<
"# Projections along y-axis (vertical projections) \n";
85 QTextStream out(&result);
89 if (projData.projections.isEmpty())
94 auto bin_centers = projData.bin_centers;
96 for (
int i_point = 0; i_point < bin_centers.size(); ++i_point) {
97 out << to_double_str(bin_centers[i_point]) <<
" ";
98 for (
auto& data : projData.projections) {
99 out << to_scientific_str(data.bin_values[i_point]);
113 projectionsType ==
"VerticalLineMask" ? result.
is_horizontal = false
117 std::unique_ptr<Histogram1D> hist;
120 if (item->modelType() ==
"HorizontalLineMask") {
128 #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
129 auto values = hist->binValues();
130 auto centers = hist->binCenters();
131 data.
bin_values = QVector<double>(values.begin(), values.end());
133 result.
bin_centers = QVector<double>(centers.begin(), centers.end());
152 QString propertyName = HorizontalLineItem::P_POSY;
153 if (projectionsType !=
"HorizontalLineMask")
154 propertyName = VerticalLineItem::P_POSX;
156 return item1->getItemValue(propertyName).toDouble()
157 < item2->getItemValue(propertyName).toDouble();
173 result.append(QString(
"%1").arg(xcol, -bin_centers_colwidth));
176 result.append(QString(
"%1%2").arg(ycol).arg(data.axis_value,
177 -(bin_values_colwidth - ycol.size()),
'f', 4));
#define ASSERT(condition)
Defines class GUIHelpers functions.
Defines class Histogram1D.
Defines class Histogram2D.
Defines class IntensityDataItem.
Defines MaskItems classes.
Defines ProjectUtils namespace.
Defines items related to projections over color map.
Defines functions in namespace pyfmt.
Defines class SaveProjectionsAssistant.
OutputData< double > * getOutputData()
static const QString P_POSY
ProjectionContainerItem * projectionContainerItem()
SaveProjectionsAssistant()
QString projectionFileHeader(ProjectionsData &projectionsData)
Returns projections header.
ProjectionsData projectionsData(const QString &projectionsType, IntensityDataItem *intensityItem)
Returns projections data for all projections of given type (horizontal, vertical).
std::unique_ptr< Histogram2D > m_hist2d
QString projectionsToString(const QString &projectionsType, IntensityDataItem *intensityItem)
Generates multi-line string with projections data of given type (horizontal, vertical).
~SaveProjectionsAssistant()
QVector< SessionItem * > projectionItems(const QString &projectionsType, IntensityDataItem *intensityItem)
Returns vector of ProjectionItems sorted according to axis value.
void saveProjections(QWidget *parent, IntensityDataItem *intensityItem)
Calls file open dialog and writes projection data as ASCII.
QVector< SessionItem * > getChildrenOfType(const QString &model_type) const
Returns a vector of all children of the given type.
static const QString P_POSX
QVector< double > fromStdVector(const std::vector< double > &data)
QString userExportDir()
Returns directory which user is normally using to export files.
std::string printDouble(double input)
std::string printScientificDouble(double input)
QVector< double > bin_values
double axis_value
value on axis where projection has been made
QVector< Projection > projections
QVector< double > bin_centers