33 #include <QtCore/QXmlStreamReader>
34 #include <QtCore/QXmlStreamWriter>
48 QStringList() <<
"IntensityData"
57 QStringList() <<
"IntensityData"
178 ASSERT(rank <= 2 && rank > 0);
181 if (data_item !=
nullptr) {
186 throw GUIHelpers::Error(
"Error in RealDataItem::initDataItem: trying to set data "
187 "incompatible with underlying data item");
195 &&
"Assertion failed in RealDataItem::initDataItem: inserting data item failed.");
203 ASSERT(data &&
"Assertion failed in RealDataItem::setOutputData: passed data is nullptr");
219 const size_t data_rank = data.
dataRank();
228 item<DataItem>(
T_NATIVE_DATA)->setOutputData(output_data.release());
233 const size_t rank = 1;
239 const size_t rank = 2;
271 if (parentJob !=
nullptr) {
289 return data_item->shape();
310 return intensity_data->maskContainerItem();
327 QDataStream s(&a, QIODevice::WriteOnly);
328 s.setVersion(QDataStream::Qt_5_12);
349 s.setVersion(QDataStream::Qt_5_12);
356 QString persistentLoaderClassName;
357 s >> persistentLoaderClassName;
358 if (!persistentLoaderClassName.isEmpty()) {
370 if (s.status() != QDataStream::Ok)
392 const bool hasLinkToInstrument = !
instrumentId().isEmpty();
393 if (hasLinkToInstrument)
414 maskContainer->model()->removeRows(0, maskContainer->numberOfChildren(),
415 maskContainer->index());
418 projectionsContainer->model()->removeRows(0, projectionsContainer->numberOfChildren(),
419 projectionsContainer->index());
461 std::unique_ptr<OutputData<double>> native_data(
nativeData()->getOutputData()->clone());
469 auto data_source = native_data_item ? native_data_item : data_item;
471 std::unique_ptr<OutputData<double>> native_data(data_source->getOutputData()->clone());
Defines class AbstractDataLoader1D.
#define ASSERT(condition)
Defines class DataLoaders1D.
Defines namespace DataUtils.
Defines class DeserializationException.
Defines class GUIHelpers functions.
Defines ImportDataInfo helper struct.
Defines InstrumentItems classes.
Defines class InstrumentModel.
Defines class IntensityDataItem.
Defines auxiliary functions in ItemFileNameUtils namespace.
Defines class JobItemUtils.
Defines MaskItems classes.
Defines items related to projections over color map.
Defines class RealDataItem.
Defines class RealDataModel.
Defines class SessionModel.
Defines class SpecularDataItem.
Base class for all data loaders (classes which can import real data)
void contentsProcessed()
Emitted whenever contents have been processed.
virtual int numErrors() const
Number of errors found while processing the content.
Provides common functionality for IntensityDataItem and SpecularDataItem.
OutputData< double > * getOutputData()
virtual void setOutputData(OutputData< double > *data)=0
The given pointer becomes owned by this class!!
static const QString P_AXES_UNITS
virtual void reset(ImportDataInfo data)=0
Resets data to the state defined by user (imported) data.
static DataLoaders1D & instance()
The one and only instance.
static DeserializationException streamError()
static DeserializationException tooNew()
Carries information about loaded data.
size_t dataRank() const
Returns number of dimensions.
QString unitsLabel() const
std::unique_ptr< OutputData< double > > intensityData() const &
InstrumentItem * findInstrumentById(const QString &instrumentId) const
void setAxesRangeToData() override
set zoom range of x,y axes to axes of input data
void setOutputData(OutputData< double > *data) override
The given pointer becomes owned by this class!!
InstrumentItem * instrumentItem()
Container holding various masks as children.
void setOnChildPropertyChange(std::function< void(SessionItem *, QString)> f, const void *caller=0)
Calls back on child property change, report childItem and property name.
void setActive(bool state)
void setOnPropertyChange(std::function< void(QString)> f, const void *caller=0)
void setOnChildrenChange(std::function< void(SessionItem *)> f, const void *caller=0)
Calls back when number of children has changed, reports newChild.
size_t rank() const
Returns number of dimensions.
The RealDataItem class represents intensity data imported from file and intended for fitting.
RealDataModel * realDataModel() const
static const QString T_NATIVE_DATA
void initDataItem(size_t data_rank, const QString &tag)
Creates data item if not existing so far.
void initAsSpecularItem()
MaskContainerItem * maskContainerItem()
Returns mask container item.
bool hasImportErrors() const
QString name() const
The name which is presented to the user.
bool holdsDimensionalData() const
void setImportData(ImportDataInfo data)
Sets imported data to underlying item.
virtual QByteArray serializeBinaryData() const override
QString nativeDataUnits() const
void setInstrumentId(const QString &id)
virtual void deserializeBinaryData(const QByteArray &data) override
QByteArray m_importSettings
static const QString P_INSTRUMENT_ID
const OutputData< double > * nativeOutputData() const
bool isIntensityData() const
std::vector< int > shape() const
Returns the shape of underlying data item.
InstrumentModel * instrumentModel() const
std::unique_ptr< AbstractDataLoader > m_dataLoader
bool isSpecularData() const
AbstractDataLoader * dataLoader() const
void updateToInstrument(const InstrumentItem *instrument)
QString instrumentId() const
QString nativeFileName() const
void setDataLoader(AbstractDataLoader *loader)
Takes ownership of loader.
bool hasNativeData() const
static const QString P_INSTRUMENT_NAME
static const QString T_INTENSITY_DATA
InstrumentItem * linkedInstrument() const
void setNativeOutputData(OutputData< double > *data)
takes ownership of data
void setName(const QString &name)
void setNativeFileName(const QString &filename)
The name from where the native data was originally imported.
IntensityDataItem * intensityDataItem()
void setNativeDataUnits(const QString &units)
SpecularDataItem * specularDataItem()
void initAsIntensityItem()
bool rotationAffectsSetup() const
Returns true, if rotation will affect linked instrument or mask presence.
void importContentsProcessed()
void updateNonXMLDataFileNames()
Updates the name of file to store intensity data.
void setOutputData(OutputData< double > *data)
Sets OutputData to underlying item. Creates it if not existing.
static const QString P_NATIVE_DATA_UNITS
The RealDataModel class is a model to store all imported RealDataItem's.
InstrumentModel * instrumentModel() const
QString itemName() const
Get item name, return display name if no name is set.
void setItemName(const QString &name)
Set item name, add property if necessary.
SessionItem * addProperty(const QString &name, const QVariant &variant)
Add new property item and register new tag.
bool registerTag(const QString &name, int min=0, int max=-1, QStringList modelTypes={})
Add new tag to this item with given name, min, max and types.
void setVisible(bool enabled)
Flags accessors.
bool setValue(QVariant value)
Set value, ensure that variant types match.
static const QString P_NAME
QVariant getItemValue(const QString &tag) const
Directly access value of item under given tag.
ModelMapper * mapper()
Returns the current model mapper of this item. Creates new one if necessary.
SessionItem * parent() const
Returns parent of this item.
void setDefaultTag(const QString &tag)
Set default tag.
SessionModel * model() const
Returns model of this item.
T * item(const QString &tag) const
void setItemValue(const QString &tag, const QVariant &variant)
Directly set value of item under given tag.
SessionItem * getItem(const QString &tag="", int row=0) const
Returns item in given row of given tag.
T * insertItem(SessionItem *parent=nullptr, int row=-1, QString tag="")
void setOutputData(OutputData< double > *data) override
The given pointer becomes owned by this class!!
std::unique_ptr< OutputData< double > > createRearrangedDataSet(const OutputData< double > &data, int n)
Returns new object with input data rotated by n*90 deg counterclockwise (n > 0) or clockwise (n < 0) ...
std::string filename(const std::string &path)
Returns path without directory part ("Foo/Bar/Doz.int.gz" -> "Doz.int.gz")
QString nativeDataFileName(const RealDataItem &realDataItem)
QString realDataFileName(const RealDataItem &realDataItem)
Constructs the name of the intensity file belonging to real data item.
void setIntensityItemAxesUnits(DataItem *intensityItem, const InstrumentItem *instrumentItem)
Sets axes units suitable for given instrument.
QString const & name(EShape k)