BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
RealDataItem.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Models/RealDataItem.h
6 //! @brief Defines class RealDataItem
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
15 #ifndef BORNAGAIN_GUI_COREGUI_MODELS_REALDATAITEM_H
16 #define BORNAGAIN_GUI_COREGUI_MODELS_REALDATAITEM_H
17 
20 #include <QPointer>
21 
22 class DataItem;
23 class InstrumentItem;
24 class InstrumentModel;
25 class IntensityDataItem;
26 class SpecularDataItem;
27 class MaskContainerItem;
28 template <class T> class OutputData;
29 class ImportDataInfo;
30 class RealDataModel;
31 class AbstractDataLoader;
32 
33 //! The RealDataItem class represents intensity data imported from file and intended for fitting.
34 
35 class BA_CORE_API_ RealDataItem : public QObject, public SessionItem {
36 
37  Q_OBJECT
38 
39  friend class TestView;
40 
41 public:
42  static const QString P_INSTRUMENT_ID;
43 
44 private:
45  static const QString T_INTENSITY_DATA;
46  static const QString P_INSTRUMENT_NAME;
47  static const QString T_NATIVE_DATA;
48  static const QString P_NATIVE_DATA_UNITS;
49 
50 public:
51  RealDataItem();
52 
53  void initAsSpecularItem();
54  void initAsIntensityItem();
55 
56  //! The name which is presented to the user
57  QString name() const;
58  void setName(const QString& name);
59 
61  const IntensityDataItem* intensityDataItem() const;
62 
64  const SpecularDataItem* specularDataItem() const;
65 
66  DataItem* dataItem();
67  const DataItem* dataItem() const;
68 
69  DataItem* nativeData();
70  const DataItem* nativeData() const;
71  void initNativeData();
72  QString nativeDataUnits() const;
73  void setNativeDataUnits(const QString& units);
74  void removeNativeData();
75  bool hasNativeData() const;
76  const OutputData<double>* nativeOutputData() const;
77  void setNativeOutputData(OutputData<double>* data);
78 
79  void setOutputData(OutputData<double>* data);
80  void setImportData(ImportDataInfo data);
81  bool holdsDimensionalData() const;
82 
83  void updateToInstrument(const InstrumentItem* instrument);
84  void updateToInstrument(const QString& id);
85  QString instrumentId() const;
86  void setInstrumentId(const QString& id);
87  void clearInstrumentId();
88  InstrumentItem* linkedInstrument() const;
89 
90  //! Returns the shape of underlying data item
91  std::vector<int> shape() const;
92 
93  bool isIntensityData() const;
94  bool isSpecularData() const;
95 
96  bool hasImportErrors() const;
97 
98  //! Returns mask container item
99  MaskContainerItem* maskContainerItem();
100 
101  //! The name from where the native data was originally imported
102  void setNativeFileName(const QString& filename);
103  QString nativeFileName() const;
104 
105  virtual QByteArray serializeBinaryData() const override;
106  virtual void deserializeBinaryData(const QByteArray& data) override;
107 
108  //! Takes ownership of loader
109  void setDataLoader(AbstractDataLoader* loader);
110  AbstractDataLoader* dataLoader() const;
111 
112  //! Returns true, if rotation will affect linked instrument or mask presence.
113  bool rotationAffectsSetup() const;
114  void rotateData();
115 
116 signals:
118 
119 private:
120  void initDataItem(size_t data_rank, const QString& tag);
121  void updateNonXMLDataFileNames();
122  QModelIndex index() const;
123 
124  RealDataModel* realDataModel() const;
125  InstrumentModel* instrumentModel() const;
126 
127  QByteArray m_importSettings;
129 
130  std::unique_ptr<AbstractDataLoader> m_dataLoader;
131 };
132 
133 #endif // BORNAGAIN_GUI_COREGUI_MODELS_REALDATAITEM_H
Defines class AbstractDataLoader.
Defines class SessionItem.
Base class for all data loaders (classes which can import real data)
Provides common functionality for IntensityDataItem and SpecularDataItem.
Definition: DataItem.h:29
Carries information about loaded data.
Container holding various masks as children.
Definition: MaskItems.h:24
Templated class to store data of type double or CumulativeValue in multi-dimensional space.
Definition: OutputData.h:32
The RealDataItem class represents intensity data imported from file and intended for fitting.
Definition: RealDataItem.h:35
static const QString T_NATIVE_DATA
Definition: RealDataItem.h:47
QModelIndex index() const
QByteArray m_importSettings
Definition: RealDataItem.h:127
static const QString P_INSTRUMENT_ID
Definition: RealDataItem.h:42
std::unique_ptr< AbstractDataLoader > m_dataLoader
Definition: RealDataItem.h:130
static const QString P_INSTRUMENT_NAME
Definition: RealDataItem.h:46
static const QString T_INTENSITY_DATA
Definition: RealDataItem.h:45
QString m_nativeFileName
Definition: RealDataItem.h:128
void importContentsProcessed()
static const QString P_NATIVE_DATA_UNITS
Definition: RealDataItem.h:48
The RealDataModel class is a model to store all imported RealDataItem's.
Definition: RealDataModel.h:26
virtual void deserializeBinaryData(const QByteArray &data)
virtual QByteArray serializeBinaryData() const
SpecularDataItem * specularDataItem(SessionItem *parent)
Returns SpecularDataItem contained as a child in givent parent.
IntensityDataItem * intensityDataItem(SessionItem *parent)
Returns IntensityDataItem contained as a child in givent parent.
std::string filename(const std::string &path)
Returns path without directory part ("Foo/Bar/Doz.int.gz" -> "Doz.int.gz")
QString const & name(EShape k)
Definition: particles.cpp:21