diff --git a/GUI/Model/Data/ProjectionItems.cpp b/GUI/Model/Data/ProjectionItems.cpp index 7d2fcc43a529ae4377ae980cee200fa6366e11e4..154487f5f0a7fb746053e16ecc8ad92029b6e7ad 100644 --- a/GUI/Model/Data/ProjectionItems.cpp +++ b/GUI/Model/Data/ProjectionItems.cpp @@ -20,11 +20,11 @@ ProjectionContainerItem::ProjectionContainerItem() { } -QVector<MaskItem*> ProjectionContainerItem::projectionsOfType(ProjectionType projectionType) +QVector<MaskItem*> ProjectionContainerItem::projectionsOfType(GUI::ID::ProjectionType projectionType) { - if (projectionType == ProjectionType::Horizontal) + if (projectionType == GUI::ID::ProjectionType::Horizontal) return projections<HorizontalLineItem>(); - else if (projectionType == ProjectionType::Vertical) + else if (projectionType == GUI::ID::ProjectionType::Vertical) return projections<VerticalLineItem>(); else ASSERT(false); diff --git a/GUI/Model/Data/ProjectionItems.h b/GUI/Model/Data/ProjectionItems.h index 51d32f2af1943e071add8cf2cf98bd79dc87a76c..fdb9adb57a89b6d0b956e1c64ddb6c42c1b217a3 100644 --- a/GUI/Model/Data/ProjectionItems.h +++ b/GUI/Model/Data/ProjectionItems.h @@ -16,7 +16,7 @@ #define BORNAGAIN_GUI_MODEL_DATA_PROJECTIONITEMS_H #include "GUI/Model/Device/MaskItems.h" -#include "GUI/Support/Data/ProjectionType.h" +#include "GUI/Support/Data/ID.h" //! A container to hold ProjectionItems, intended to store projections of color map on X, Y axes. @@ -24,7 +24,7 @@ class ProjectionContainerItem : public MaskContainerItem { public: ProjectionContainerItem(); - QVector<MaskItem*> projectionsOfType(ProjectionType projectionType); + QVector<MaskItem*> projectionsOfType(GUI::ID::ProjectionType projectionType); private: template <typename LineType> diff --git a/GUI/Model/Project/ProjectDocument.cpp b/GUI/Model/Project/ProjectDocument.cpp index c1bf2cddef9a623205a3a1437b8824de0e700185..0bc4c59b94b5223495743b8314ac3c9fec0b1f0c 100644 --- a/GUI/Model/Project/ProjectDocument.cpp +++ b/GUI/Model/Project/ProjectDocument.cpp @@ -56,7 +56,7 @@ ProjectDocument::ProjectDocument() , m_singleSampleMode(false) , m_functionalities(All) , m_instrumentEditController(&m_instrumentModel) - , m_lastViewActive(MainWindow::ViewId::INSTRUMENT) + , m_lastViewActive(GUI::ID::ViewId::INSTRUMENT) { connect(&m_instrumentEditController, &InstrumentsEditController::instrumentAddedOrRemoved, this, &ProjectDocument::onModelChanged, Qt::UniqueConnection); diff --git a/GUI/Model/Project/ProjectDocument.h b/GUI/Model/Project/ProjectDocument.h index 350bf0671231144a2df70f114cf746ad166569fb..9878c1a2add3366ef0562d4deadc37049b12d56a 100644 --- a/GUI/Model/Project/ProjectDocument.h +++ b/GUI/Model/Project/ProjectDocument.h @@ -20,8 +20,8 @@ #include "GUI/Model/Model/ApplicationModels.h" #include "GUI/Model/Project/LinkInstrumentManager.h" #include "GUI/Model/Sample/SampleModel.h" +#include "GUI/Support/Data/ID.h" #include "GUI/Support/Data/SimulationOptionsItem.h" -#include "GUI/View/Main/MainWindow.h" #include <QObject> #include <QVariant> #include <memory> diff --git a/GUI/View/Tool/ID.h b/GUI/Support/Data/ID.h similarity index 57% rename from GUI/View/Tool/ID.h rename to GUI/Support/Data/ID.h index 21b0b03e8e2719ca6fbbb151074fb84104f10b80..dc5f0cc74903829d4cb41c45ab97032748d0b10c 100644 --- a/GUI/View/Tool/ID.h +++ b/GUI/Support/Data/ID.h @@ -2,24 +2,30 @@ // // BornAgain: simulate and fit reflection and scattering // -//! @file GUI/View/Tool/ID.h -//! @brief Defines enum ViewId +//! @file GUI/Support/Data/ID.h +//! @brief Defines shared enums //! //! @homepage http://www.bornagainproject.org //! @license GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Jülich GmbH 2018 +//! @copyright Forschungszentrum Jülich GmbH 2023 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS) // // ************************************************************************************************ -#ifndef BORNAGAIN_GUI_VIEW_TOOL_ID_H -#define BORNAGAIN_GUI_VIEW_TOOL_ID_H +#ifndef BORNAGAIN_GUI_SUPPORT_DATA_ID_H +#define BORNAGAIN_GUI_SUPPORT_DATA_ID_H namespace GUI::ID { +//! The possible states of a projection type. +enum ProjectionType { Horizontal, Vertical, Invalid }; + //! Which distributions should be available in the selector enum class Distributions { All, Symmetric }; +//! Enumerates views of the main window +enum ViewId { PROJECTS, INSTRUMENT, SAMPLE, IMPORT, SIMULATION, JOB }; + } // namespace GUI::ID -#endif // BORNAGAIN_GUI_VIEW_TOOL_ID_H +#endif // BORNAGAIN_GUI_SUPPORT_DATA_ID_H diff --git a/GUI/Support/Data/ProjectionType.h b/GUI/Support/Data/ProjectionType.h deleted file mode 100644 index 5bbb9e5284c424ec6e61bf24a758b543fc5961f0..0000000000000000000000000000000000000000 --- a/GUI/Support/Data/ProjectionType.h +++ /dev/null @@ -1,22 +0,0 @@ -// ************************************************************************************************ -// -// BornAgain: simulate and fit reflection and scattering -// -//! @file GUI/Support/Data/ProjectionType.h -//! @brief Defines enum ProjectionType -//! -//! @homepage http://www.bornagainproject.org -//! @license GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Jülich GmbH 2022 -//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS) -// -// ************************************************************************************************ - -#ifndef BORNAGAIN_GUI_SUPPORT_DATA_PROJECTIONTYPES_H -#define BORNAGAIN_GUI_SUPPORT_DATA_PROJECTIONTYPES_H - -//! Lists the possible states of a projection type. - -enum ProjectionType { Horizontal, Vertical, Invalid }; - -#endif // BORNAGAIN_GUI_SUPPORT_DATA_PROJECTIONTYPES_H diff --git a/GUI/View/Instrument/DistributionEditor.h b/GUI/View/Instrument/DistributionEditor.h index 07ce543590e78fc37db28c47ac4469d8416a44db..7ebe60b34e53bb9102319cb0193b2d7b224c48b3 100644 --- a/GUI/View/Instrument/DistributionEditor.h +++ b/GUI/View/Instrument/DistributionEditor.h @@ -15,8 +15,11 @@ #ifndef BORNAGAIN_GUI_VIEW_INSTRUMENT_DISTRIBUTIONEDITOR_H #define BORNAGAIN_GUI_VIEW_INSTRUMENT_DISTRIBUTIONEDITOR_H -#include "GUI/View/Tool/ID.h" +#include "GUI/Support/Data/ID.h" #include <QGroupBox> +#include <boost/numeric/interval.hpp> +#include <map> +#include <optional> class BeamDistributionItem; class DistributionForm; @@ -30,10 +33,6 @@ class QSpinBox; class QStackedLayout; class ScientificSpinBox; -#include <boost/numeric/interval.hpp> - -#include <map> -#include <optional> //! configuration to control how the user can enter a mean value struct MeanConfig { diff --git a/GUI/View/Job/JobView.cpp b/GUI/View/Job/JobView.cpp index c72f6040f993c3a556304483409870f7efd33763..3205fa8d4ff9c6ea3274153fd21aef923baaa12e 100644 --- a/GUI/View/Job/JobView.cpp +++ b/GUI/View/Job/JobView.cpp @@ -65,7 +65,7 @@ void JobView::onFocusRequest(JobItem* jobItem) setActivityAndPresentationForNewJob(jobItem); } - emit focusRequest(MainWindow::JOB); + emit focusRequest(GUI::ID::JOB); } //! Sets docks visibility in accordance with required activity. diff --git a/GUI/View/Main/MainWindow.cpp b/GUI/View/Main/MainWindow.cpp index d7e27d9d9fc2c0e20da254b3f50f98635c35acb8..4d275b506868b64e75cc668d491a44edf98069c3 100644 --- a/GUI/View/Main/MainWindow.cpp +++ b/GUI/View/Main/MainWindow.cpp @@ -94,8 +94,8 @@ MainWindow::MainWindow() connect(m_projectManager, &ProjectManager::aboutToCloseDocument, this, &MainWindow::onAboutToCloseDocument); - ASSERT(m_viewSelectionButtons->button(ViewId::PROJECTS) != nullptr); - m_viewSelectionButtons->button(ViewId::PROJECTS)->setChecked(true); + ASSERT(m_viewSelectionButtons->button(GUI::ID::ViewId::PROJECTS) != nullptr); + m_viewSelectionButtons->button(GUI::ID::ViewId::PROJECTS)->setChecked(true); updateTitle(); if (appSettings) @@ -128,11 +128,11 @@ void MainWindow::setCurrentView(int viewId) void MainWindow::raiseView(int viewId) { - if (gProjectDocument.has_value() && viewId != PROJECTS) + if (gProjectDocument.has_value() && viewId != GUI::ID::ViewId::PROJECTS) gProjectDocument.value()->setViewId(viewId); if (m_viewsStack->currentIndex() != viewId) { m_viewsStack->setCurrentIndex(viewId); - emit currentViewChanged(ViewId(viewId)); + emit currentViewChanged(GUI::ID::ViewId(viewId)); } } @@ -210,24 +210,24 @@ void MainWindow::initProgressBar() void MainWindow::initButtons() { - addButton(ViewId::PROJECTS, QIcon(":/images/main_welcomeview.svg"), "Projects", + addButton(GUI::ID::ViewId::PROJECTS, QIcon(":/images/main_welcomeview.svg"), "Projects", "Switch to Projects View"); - addButton(ViewId::INSTRUMENT, QIcon(":/images/main_instrumentview.svg"), "Instrument", + addButton(GUI::ID::ViewId::INSTRUMENT, QIcon(":/images/main_instrumentview.svg"), "Instrument", "Define the beam and the detector"); - addButton(ViewId::SAMPLE, QIcon(":/images/main_sampleview.svg"), "Sample", "Build the sample"); + addButton(GUI::ID::ViewId::SAMPLE, QIcon(":/images/main_sampleview.svg"), "Sample", "Build the sample"); - addButton(ViewId::IMPORT, QIcon(":/images/main_importview.svg"), "Data", + addButton(GUI::ID::ViewId::IMPORT, QIcon(":/images/main_importview.svg"), "Data", "Import intensity data to fit"); - addButton(ViewId::SIMULATION, QIcon(":/images/main_simulationview.svg"), "Simulation", + addButton(GUI::ID::ViewId::SIMULATION, QIcon(":/images/main_simulationview.svg"), "Simulation", "Run simulation"); - addButton(ViewId::JOB, QIcon(":/images/main_jobview.svg"), "Jobs", + addButton(GUI::ID::ViewId::JOB, QIcon(":/images/main_jobview.svg"), "Jobs", "Switch to see job results, tune parameters real time,\nfit the data"); for (auto* button : m_viewSelectionButtons->buttons()) { - if (button == m_viewSelectionButtons->button(ViewId::PROJECTS)) + if (button == m_viewSelectionButtons->button(GUI::ID::ViewId::PROJECTS)) continue; button->setEnabled(false); } @@ -236,7 +236,7 @@ void MainWindow::initButtons() void MainWindow::initViews() { m_projectsView = new ProjectsView(this); - resetView(ViewId::PROJECTS, m_projectsView); + resetView(GUI::ID::ViewId::PROJECTS, m_projectsView); if (gProjectDocument.has_value()) { auto* doc = gProjectDocument.value(); @@ -246,15 +246,15 @@ void MainWindow::initViews() m_simulationView = new SimulationView(this, doc); m_jobView = new JobView(this, doc); - resetView(ViewId::INSTRUMENT, m_instrumentView); + resetView(GUI::ID::ViewId::INSTRUMENT, m_instrumentView); - resetView(ViewId::SAMPLE, m_sampleView); + resetView(GUI::ID::ViewId::SAMPLE, m_sampleView); - resetView(ViewId::IMPORT, m_importDataView); + resetView(GUI::ID::ViewId::IMPORT, m_importDataView); - resetView(ViewId::SIMULATION, m_simulationView); + resetView(GUI::ID::ViewId::SIMULATION, m_simulationView); - resetView(ViewId::JOB, m_jobView); + resetView(GUI::ID::ViewId::JOB, m_jobView); connect(m_jobView, &JobView::focusRequest, this, &MainWindow::onFocusRequest); @@ -263,7 +263,7 @@ void MainWindow::initViews() if (gProjectDocument.has_value()) setCurrentView(gProjectDocument.value()->viewId()); else - raiseView(ViewId::PROJECTS); + raiseView(GUI::ID::ViewId::PROJECTS); } } @@ -290,7 +290,7 @@ void MainWindow::writeSettings() settings.sync(); } -void MainWindow::addButton(ViewId id, const QIcon& icon, const QString& title, +void MainWindow::addButton(GUI::ID::ViewId id, const QIcon& icon, const QString& title, const QString& tooltip) { QToolButton* btn = createViewSelectionButton(); @@ -304,7 +304,7 @@ void MainWindow::addButton(ViewId id, const QIcon& icon, const QString& title, updateViewSelectionButtonsGeometry(); } -void MainWindow::resetView(ViewId id, QWidget* view) +void MainWindow::resetView(GUI::ID::ViewId id, QWidget* view) { m_viewsStack->insertWidget(id, view); } @@ -362,7 +362,7 @@ void MainWindow::onDocumentOpenedOrClosed(bool open) fillerBtn->setEnabled(true); setCurrentView(gProjectDocument.value()->viewId()); } else - setCurrentView(MainWindow::INSTRUMENT); + setCurrentView(GUI::ID::ViewId::INSTRUMENT); } } @@ -373,7 +373,7 @@ void MainWindow::onDocumentModified() void MainWindow::onAboutToCloseDocument() { - setCurrentView(PROJECTS); + setCurrentView(GUI::ID::ViewId::PROJECTS); updateViewSelectionButtonsGeometry(); diff --git a/GUI/View/Main/MainWindow.h b/GUI/View/Main/MainWindow.h index ed70d4094533dce0f5bb8f4fd2a3e4868145e004..aa3e50af638535769430abdc52231c57c241d89f 100644 --- a/GUI/View/Main/MainWindow.h +++ b/GUI/View/Main/MainWindow.h @@ -15,6 +15,7 @@ #ifndef BORNAGAIN_GUI_VIEW_MAIN_MAINWINDOW_H #define BORNAGAIN_GUI_VIEW_MAIN_MAINWINDOW_H +#include "GUI/Support/Data/ID.h" #include <QMainWindow> class ActionManager; @@ -37,8 +38,6 @@ class MainWindow : public QMainWindow { Q_OBJECT public: - enum ViewId { PROJECTS, INSTRUMENT, SAMPLE, IMPORT, SIMULATION, JOB }; - explicit MainWindow(); ~MainWindow() override; @@ -58,7 +57,7 @@ public slots: void onRunSimulationShortcut(); signals: - void currentViewChanged(ViewId newView); + void currentViewChanged(GUI::ID::ViewId newView); protected: void closeEvent(QCloseEvent* event) override; @@ -71,8 +70,8 @@ private: void readSettings(); void writeSettings(); - void addButton(ViewId id, const QIcon& icon, const QString& title, const QString& tooltip); - void resetView(ViewId id, QWidget* view); + void addButton(GUI::ID::ViewId id, const QIcon& icon, const QString& title, const QString& tooltip); + void resetView(GUI::ID::ViewId id, QWidget* view); QToolButton* createViewSelectionButton() const; //! Recalculate the size of the view selection buttons to show complete button text diff --git a/GUI/View/Projection/ProjectionsPlot.cpp b/GUI/View/Projection/ProjectionsPlot.cpp index 42a780dbd78855b0731c32544ce232b44c8ac53b..d34948d3062ecb98a9ba7ec9115c29f617f87a1f 100644 --- a/GUI/View/Projection/ProjectionsPlot.cpp +++ b/GUI/View/Projection/ProjectionsPlot.cpp @@ -27,7 +27,7 @@ using boost::polymorphic_downcast; -ProjectionsPlot::ProjectionsPlot(ProjectionType projectionType, QWidget* parent) +ProjectionsPlot::ProjectionsPlot(GUI::ID::ProjectionType projectionType, QWidget* parent) : DataItemBundleWidget(parent) , m_projectionType(projectionType) , m_customPlot(new QCustomPlot) @@ -299,5 +299,5 @@ void ProjectionsPlot::replot() bool ProjectionsPlot::isHorizontalType() { - return m_projectionType == ProjectionType::Horizontal; + return m_projectionType == GUI::ID::ProjectionType::Horizontal; } diff --git a/GUI/View/Projection/ProjectionsPlot.h b/GUI/View/Projection/ProjectionsPlot.h index 16fd81388bf779ba627692ec6d917e388f715361..031e517cc19726e6277f796d2cebfa0f2fe08991 100644 --- a/GUI/View/Projection/ProjectionsPlot.h +++ b/GUI/View/Projection/ProjectionsPlot.h @@ -15,7 +15,7 @@ #ifndef BORNAGAIN_GUI_VIEW_PROJECTION_PROJECTIONSPLOT_H #define BORNAGAIN_GUI_VIEW_PROJECTION_PROJECTIONSPLOT_H -#include "GUI/Support/Data/ProjectionType.h" +#include "GUI/Support/Data/ID.h" #include "GUI/View/Common/DataItemBundleWidget.h" #include <QMap> #include <memory> @@ -34,7 +34,7 @@ class ProjectionsPlot : public DataItemBundleWidget { Q_OBJECT public: - ProjectionsPlot(ProjectionType projectionType, QWidget* parent = nullptr); + ProjectionsPlot(GUI::ID::ProjectionType projectionType, QWidget* parent = nullptr); void setIntensityItem(IntensityDataItem* intensityDataItem) override; @@ -68,7 +68,7 @@ private: bool isHorizontalType(); - ProjectionType m_projectionType = ProjectionType::Invalid; + GUI::ID::ProjectionType m_projectionType = GUI::ID::ProjectionType::Invalid; QCustomPlot* m_customPlot; QMap<MaskItemObject*, QCPGraph*> m_item_to_graph; }; diff --git a/GUI/View/Projection/ProjectionsWidget.cpp b/GUI/View/Projection/ProjectionsWidget.cpp index f2abb5c956bd437751ac005d8b6415b1e0119e1f..4a17f6e7c180cf6078f4855af9a476c5da6eb19b 100644 --- a/GUI/View/Projection/ProjectionsWidget.cpp +++ b/GUI/View/Projection/ProjectionsWidget.cpp @@ -28,8 +28,8 @@ const int vertical_projection_tab = 1; ProjectionsWidget::ProjectionsWidget(QWidget* parent) : QWidget(parent) - , m_xProjection(new ProjectionsPlot(ProjectionType::Horizontal)) - , m_yProjection(new ProjectionsPlot(ProjectionType::Vertical)) + , m_xProjection(new ProjectionsPlot(GUI::ID::ProjectionType::Horizontal)) + , m_yProjection(new ProjectionsPlot(GUI::ID::ProjectionType::Vertical)) , m_tabWidget(new QTabWidget) { auto* layout = new QVBoxLayout; @@ -37,8 +37,8 @@ ProjectionsWidget::ProjectionsWidget(QWidget* parent) layout->setSpacing(0); m_tabWidget->setTabPosition(QTabWidget::North); - m_tabWidget->insertTab(ProjectionType::Horizontal, m_xProjection, "Horizontal"); - m_tabWidget->insertTab(ProjectionType::Vertical, m_yProjection, "Vertical"); + m_tabWidget->insertTab(GUI::ID::ProjectionType::Horizontal, m_xProjection, "Horizontal"); + m_tabWidget->insertTab(GUI::ID::ProjectionType::Vertical, m_yProjection, "Vertical"); layout->addWidget(m_tabWidget); setLayout(layout); diff --git a/GUI/View/Projection/SaveProjectionsAssistant.cpp b/GUI/View/Projection/SaveProjectionsAssistant.cpp index 74c404a24c9c109fcfa04f618bddbdb2e73b3816..c556ed24e46b11ee4e6d6929a687c9229d57edf3 100644 --- a/GUI/View/Projection/SaveProjectionsAssistant.cpp +++ b/GUI/View/Projection/SaveProjectionsAssistant.cpp @@ -87,11 +87,11 @@ void SaveProjectionsAssistant::saveProjections(QWidget* parent, IntensityDataIte QTextStream out(&file); out << "# Projections along x-axis (horizontal projections) \n"; - out << projectionsToString(ProjectionType::Horizontal, intensityItem); + out << projectionsToString(GUI::ID::ProjectionType::Horizontal, intensityItem); out << "\n"; out << "# Projections along y-axis (vertical projections) \n"; - out << projectionsToString(ProjectionType::Vertical, intensityItem); + out << projectionsToString(GUI::ID::ProjectionType::Vertical, intensityItem); out << "\n"; file.close(); @@ -99,7 +99,7 @@ void SaveProjectionsAssistant::saveProjections(QWidget* parent, IntensityDataIte //! Generates multi-line string with projections data of given type (horizontal, vertical). -QString SaveProjectionsAssistant::projectionsToString(ProjectionType projectionsType, +QString SaveProjectionsAssistant::projectionsToString(GUI::ID::ProjectionType projectionsType, IntensityDataItem* intensityItem) { QString result; @@ -126,11 +126,11 @@ QString SaveProjectionsAssistant::projectionsToString(ProjectionType projections //! Returns projections data for all projections of given type (horizontal, vertical). SaveProjectionsAssistant::ProjectionsData -SaveProjectionsAssistant::projectionsData(ProjectionType projectionsType, +SaveProjectionsAssistant::projectionsData(GUI::ID::ProjectionType projectionsType, IntensityDataItem* intensityItem) { ProjectionsData result; - result.is_horizontal = (projectionsType == ProjectionType::Horizontal); + result.is_horizontal = (projectionsType == GUI::ID::ProjectionType::Horizontal); for (auto* item : projectionItems(projectionsType, intensityItem)) { std::unique_ptr<Datafield> field; @@ -157,12 +157,12 @@ SaveProjectionsAssistant::projectionsData(ProjectionType projectionsType, //! Returns vector of ProjectionItems sorted according to axis value. -QVector<MaskItem*> SaveProjectionsAssistant::projectionItems(ProjectionType projectionsType, +QVector<MaskItem*> SaveProjectionsAssistant::projectionItems(GUI::ID::ProjectionType projectionsType, IntensityDataItem* intensityItem) { auto result = intensityItem->projectionContainerItem()->projectionsOfType(projectionsType); std::sort(result.begin(), result.end(), - projectionsType == ProjectionType::Horizontal ? horiz_less_posy : vert_less_posx); + projectionsType == GUI::ID::ProjectionType::Horizontal ? horiz_less_posy : vert_less_posx); return result; } diff --git a/GUI/View/Projection/SaveProjectionsAssistant.h b/GUI/View/Projection/SaveProjectionsAssistant.h index 78812aa8a0e5cfca221944691cc8a01074bbee0b..85201da6536a68124ad281f1a2cbce893e7ecccc 100644 --- a/GUI/View/Projection/SaveProjectionsAssistant.h +++ b/GUI/View/Projection/SaveProjectionsAssistant.h @@ -45,12 +45,12 @@ private: QVector<Projection> projections; }; - QString projectionsToString(ProjectionType projectionsType, IntensityDataItem* intensityItem); + QString projectionsToString(GUI::ID::ProjectionType projectionsType, IntensityDataItem* intensityItem); const Datafield* m_field; - ProjectionsData projectionsData(ProjectionType projectionsType, + ProjectionsData projectionsData(GUI::ID::ProjectionType projectionsType, IntensityDataItem* intensityItem); - QVector<MaskItem*> projectionItems(ProjectionType projectionsType, + QVector<MaskItem*> projectionItems(GUI::ID::ProjectionType projectionsType, IntensityDataItem* intensityItem); QString projectionFileHeader(ProjectionsData& projectionsData);