diff --git a/Device/Coord/CoordSystem1D.cpp b/Device/Coord/CoordSystem1D.cpp index 0ca9a27cc249c075922c5d21f7211ad4008a959c..79493314f2a0f87a5ffe6a41a219d41dab7edb37 100644 --- a/Device/Coord/CoordSystem1D.cpp +++ b/Device/Coord/CoordSystem1D.cpp @@ -121,8 +121,8 @@ IAxis* CoordSystem1D::createConvertedAxis(size_t i_axis, Coords units) const return new PointwiseAxis(axisName(0, units), coords); } -Powerfield<double>* -CoordSystem1D::createConvertedData(const Powerfield<double>& data, Coords units) const +Powerfield<double>* CoordSystem1D::createConvertedData(const Powerfield<double>& data, + Coords units) const { ASSERT(data.rank() == 1); diff --git a/Device/Coord/ICoordSystem.cpp b/Device/Coord/ICoordSystem.cpp index 02febf1bd25d3b5cc8e9621d0c68c788d4a9513d..2a60be6f36e677e6a8b5e2b0956b58ad964bc998 100644 --- a/Device/Coord/ICoordSystem.cpp +++ b/Device/Coord/ICoordSystem.cpp @@ -18,15 +18,17 @@ ICoordSystem::~ICoordSystem() = default; -std::unique_ptr<Powerfield<double>> ICoordSystem::createPowerfield(Coords units) const +std::vector<IAxis*> ICoordSystem::defaultAxes() const { - std::vector<IAxis*> axes; - for (size_t i = 0; i < rank(); ++i) - axes.emplace_back(createConvertedAxis(i, units)); + return convertedAxes(defaultUnits()); +} - std::unique_ptr<Powerfield<double>> result(new Powerfield<double>(axes)); - result->setAllTo(0.0); - return result; +std::vector<IAxis*> ICoordSystem::convertedAxes(Coords units) const +{ + std::vector<IAxis*> ret; + for (size_t i = 0; i < rank(); ++i) + ret.emplace_back(createConvertedAxis(i, units)); + return ret; } std::string ICoordSystem::axisName(size_t i_axis, const Coords units) const @@ -39,8 +41,8 @@ std::string ICoordSystem::axisName(size_t i_axis, const Coords units) const return it->second; } -Powerfield<double>* -ICoordSystem::createConvertedData(const Powerfield<double>& data, Coords units) const +Powerfield<double>* ICoordSystem::createConvertedData(const Powerfield<double>& data, + Coords units) const { std::vector<IAxis*> axes; for (size_t i = 0; i < rank(); ++i) diff --git a/Device/Coord/ICoordSystem.h b/Device/Coord/ICoordSystem.h index a3857d218b8f32c91eb9d41df43634334b5f2709..703fdb73a7dab487cd14c5263f871eb91dba5988 100644 --- a/Device/Coord/ICoordSystem.h +++ b/Device/Coord/ICoordSystem.h @@ -44,9 +44,6 @@ public: ICoordSystem* clone() const override = 0; - //! Returns zero-valued output data array in specified units - std::unique_ptr<Powerfield<double>> createPowerfield(Coords units) const; - virtual size_t rank() const = 0; virtual double calculateMin(size_t i_axis, Coords units) const = 0; @@ -60,6 +57,9 @@ public: virtual IAxis* createConvertedAxis(size_t i_axis, Coords units) const = 0; + std::vector<IAxis*> defaultAxes() const; + std::vector<IAxis*> convertedAxes(Coords units) const; + //! Creates Powerfield array in converter units. virtual Powerfield<double>* createConvertedData(const Powerfield<double>& data, Coords units) const; diff --git a/Device/Data/LLData.h b/Device/Data/LLData.h index 5fc3d88468bc17275234a42bd9401773d9640527..c7c4557c87978b7e65ab7ad5251a606c553b62ea 100644 --- a/Device/Data/LLData.h +++ b/Device/Data/LLData.h @@ -242,8 +242,7 @@ void LLData<T>::clear() template <class T> inline bool LLData<T>::checkSizes(size_t rank, const int* sizes) const { - return std::all_of(sizes, sizes + rank, - [](const int& dim) -> bool { return dim > 0; }); + return std::all_of(sizes, sizes + rank, [](const int& dim) -> bool { return dim > 0; }); } template <class T> diff --git a/Fit/Adapter/MinimizerAdapter.cpp b/Fit/Adapter/MinimizerAdapter.cpp index 2cabe7c02cfcba94bd895d228b212b82432d0812..eb2f902ff3bb747c04fa468112de65b50be89277 100644 --- a/Fit/Adapter/MinimizerAdapter.cpp +++ b/Fit/Adapter/MinimizerAdapter.cpp @@ -199,8 +199,7 @@ std::vector<double> MinimizerAdapter::parErrorsAtMinimum() const std::vector<double> result; result.resize(fitRank(), 0.0); if (rootMinimizer()->Errors() != nullptr) { - std::copy(rootMinimizer()->Errors(), rootMinimizer()->Errors() + fitRank(), - result.begin()); + std::copy(rootMinimizer()->Errors(), rootMinimizer()->Errors() + fitRank(), result.begin()); } return result; } diff --git a/GUI/Model/Data/DataViewUtils.cpp b/GUI/Model/Data/DataViewUtils.cpp index 43e26503da94bc42637e1eade3314ad350934d99..4994b928f0c0dd3cbc52d5809a12f57008fe2c9b 100644 --- a/GUI/Model/Data/DataViewUtils.cpp +++ b/GUI/Model/Data/DataViewUtils.cpp @@ -53,15 +53,15 @@ void GUI::Model::DataViewUtils::updateAxesTitle(Data1DViewItem* view_item) std::unique_ptr<Powerfield<double>> GUI::Model::DataViewUtils::getTranslatedData(Data1DViewItem* view_item, DataItem* data_item) { - std::unique_ptr<Powerfield<double>> result; if (!data_item || !data_item->getPowerfield()) - return result; + return {}; auto* converter = getConverter(view_item); auto current_units = selectedUnits(view_item); - result = converter->createPowerfield(current_units); - result->setRawDataVector(data_item->getPowerfield()->getRawDataVector()); + auto ret = std::make_unique<Powerfield<double>>(converter->convertedAxes(current_units)); - return result; + ret->setRawDataVector(data_item->getPowerfield()->getRawDataVector()); + + return ret; } diff --git a/GUI/Model/Data/JobItemUtils.cpp b/GUI/Model/Data/JobItemUtils.cpp index fadb626171d218463a8febea1feaee4bdcc6f8c7..dacc930be746a94d71b8fedc8662f77a4d69dd28 100644 --- a/GUI/Model/Data/JobItemUtils.cpp +++ b/GUI/Model/Data/JobItemUtils.cpp @@ -51,7 +51,9 @@ void GUI::Model::JobItemUtils::updateDataAxes(DataItem* intensityItem, Coords requested_units = GUI::Util::CoordName::coordFromName(intensityItem->selectedCoords()); auto* const converter = instrumentItem->createCoordSystem(); - auto newData = converter->createPowerfield(requested_units); + + auto newData = std::make_unique<Powerfield<double>>(converter->convertedAxes(requested_units)); + newData->setRawDataVector(intensityItem->getPowerfield()->getRawDataVector()); intensityItem->setPowerfield(newData.release()); @@ -81,7 +83,7 @@ void GUI::Model::JobItemUtils::createDefaultDetectorMap(DataItem* intensityItem, const Instrument2DItem* instrumentItem) { auto* const converter = instrumentItem->createCoordSystem(); - auto output_data = converter->createPowerfield(converter->defaultUnits()); + auto output_data = std::make_unique<Powerfield<double>>(converter->defaultAxes()); intensityItem->setPowerfield(output_data.release()); setIntensityItemCoords(intensityItem, *converter); updateAxesTitle(intensityItem, *converter, converter->defaultUnits()); diff --git a/GUI/Support/IO/IOUtils.cpp b/GUI/Support/IO/IOUtils.cpp index a3684388ab864a6262649a03e190c9067d878c72..1f77e2b6f4a25434df0c2aa1d7dfd4c118a15b64 100644 --- a/GUI/Support/IO/IOUtils.cpp +++ b/GUI/Support/IO/IOUtils.cpp @@ -19,7 +19,7 @@ std::unique_ptr<Powerfield<double>> GUI::Util::IO::binifyAxes(const Powerfield<double>& data) { std::vector<IAxis*> axes; - for (size_t i=0; i<data.rank(); ++i) + for (size_t i = 0; i < data.rank(); ++i) axes.emplace_back(data.axis(i).clone()); auto result = std::make_unique<Powerfield<double>>(axes); diff --git a/GUI/View/Fit/FitObjectiveBuilder.cpp b/GUI/View/Fit/FitObjectiveBuilder.cpp index 248ffbd556b75d76284639fddec49ad51716c563..d91be69e259899d094e07a6b764444c97db46b2f 100644 --- a/GUI/View/Fit/FitObjectiveBuilder.cpp +++ b/GUI/View/Fit/FitObjectiveBuilder.cpp @@ -75,7 +75,16 @@ std::unique_ptr<FitObjective> FitObjectiveBuilder::createFitObjective() const return buildSimulation(params); }; - result->execAddSimulationAndData(builder, *createPowerfield(), nullptr, 1.0); + auto* realDataItem = m_jobItem->realDataItem(); + ASSERT(realDataItem); + + const DataItem* intensity_item = realDataItem->dataItem(); + ASSERT(intensity_item); + ASSERT(intensity_item->getPowerfield()); + + std::unique_ptr<Powerfield<double>> data(intensity_item->getPowerfield()->clone()); + + result->execAddSimulationAndData(builder, *data, nullptr, 1.0); return result; } @@ -111,19 +120,6 @@ FitObjectiveBuilder::buildSimulation(const mumufit::Parameters& params) const m_jobItem->sampleItem(), m_jobItem->instrumentItem(), m_jobItem->simulationOptionsItem()); } -std::unique_ptr<Powerfield<double>> FitObjectiveBuilder::createPowerfield() const -{ - auto* realDataItem = m_jobItem->realDataItem(); - if (!realDataItem) - throw Error("FitObjectiveBuilder::createPowerfield() -> No Real Data defined."); - - const DataItem* intensity_item = realDataItem->dataItem(); - ASSERT(intensity_item); - ASSERT(intensity_item->getPowerfield()); - - return std::unique_ptr<Powerfield<double>>(intensity_item->getPowerfield()->clone()); -} - void FitObjectiveBuilder::update_fit_parameters(const mumufit::Parameters& params) const { QVector<double> values = QVector<double>::fromStdVector(params.values()); diff --git a/GUI/View/Fit/FitObjectiveBuilder.h b/GUI/View/Fit/FitObjectiveBuilder.h index 3993cb760dae5a32b10cfc00fec1d5736e58b9e1..72e433272e83dd9df7504712d8ed32ee82ac4bf8 100644 --- a/GUI/View/Fit/FitObjectiveBuilder.h +++ b/GUI/View/Fit/FitObjectiveBuilder.h @@ -51,7 +51,6 @@ private: JobItem* m_jobItem; std::unique_ptr<ISimulation> buildSimulation(const mumufit::Parameters& params) const; - std::unique_ptr<Powerfield<double>> createPowerfield() const; void update_fit_parameters(const mumufit::Parameters& params) const; diff --git a/GUI/View/Loaders/QREDataLoader.cpp b/GUI/View/Loaders/QREDataLoader.cpp index 0310bc9a1b030d19c7cf23989776ac5d3ef8523d..a180bcbc8993ac9b99ec4268c91893229b8bd7d7 100644 --- a/GUI/View/Loaders/QREDataLoader.cpp +++ b/GUI/View/Loaders/QREDataLoader.cpp @@ -262,7 +262,7 @@ void QREDataLoader::processContents() if (creationOfPowerfieldIsNecessary) { try { - createPowerfieldFromParsingResult(m_item); + powerfieldFromParsingResult(m_item); } catch (...) { m_importResult.error = "Import not successful - caught an exception."; invalidateItemData(); @@ -518,7 +518,7 @@ void QREDataLoader::calculateFromParseResult() const } } -void QREDataLoader::createPowerfieldFromParsingResult(RealDataItem* item) const +void QREDataLoader::powerfieldFromParsingResult(RealDataItem* item) const { // create data sorted by ascending Q values. // For this, the line numbers are sorted by Q diff --git a/GUI/View/Loaders/QREDataLoader.h b/GUI/View/Loaders/QREDataLoader.h index 89f355c972999ee43d721a6fdc86e3467e7976b2..e865e49f9397751f972ff118f084f8a47d302a0c 100644 --- a/GUI/View/Loaders/QREDataLoader.h +++ b/GUI/View/Loaders/QREDataLoader.h @@ -49,7 +49,7 @@ public: private: void parseFileContent() const; void calculateFromParseResult() const; - void createPowerfieldFromParsingResult(RealDataItem* item) const; + void powerfieldFromParsingResult(RealDataItem* item) const; private: enum class UnitInFile { none, perNanoMeter, perAngstrom, other }; diff --git a/Sim/Fitting/SimDataPair.cpp b/Sim/Fitting/SimDataPair.cpp index 6bd9209eb7b83baf4d4f41311cba6d77b2f725ed..7beeb6e7f77ffc15a7bee8c5dc1fc1e687b1606d 100644 --- a/Sim/Fitting/SimDataPair.cpp +++ b/Sim/Fitting/SimDataPair.cpp @@ -58,7 +58,7 @@ bool haveSameSizes(const IDetector& detector, const Powerfield<double>& data) SimulationResult convertData(const ISimulation& simulation, const Powerfield<double>& data) { const ICoordSystem* coordSystem = simulation.createCoordSystem(); - auto roi_data = coordSystem->createPowerfield(coordSystem->defaultUnits()); + auto roi_data = std::make_unique<Powerfield<double>>(coordSystem->defaultAxes()); if (roi_data->hasSameSizes(data)) { // data is already cropped to ROI @@ -140,8 +140,7 @@ void SimDataPair::execSimulation(const mumufit::Parameters& params) m_uncertainties = convertData(*simulation, *m_raw_uncertainties); else { const ICoordSystem& converter = m_sim_data.converter(); - std::unique_ptr<Powerfield<double>> dummy_array = - converter.createPowerfield(converter.defaultUnits()); + auto dummy_array = std::make_unique<Powerfield<double>>(converter.defaultAxes()); m_uncertainties = SimulationResult(*dummy_array, converter); } diff --git a/auto/Wrap/doxygenDevice.i b/auto/Wrap/doxygenDevice.i index cbdf7def5c1c0b9e784ab1fe10c35fc0ccd23cbe..66ecd4a48987b70c377c88305b00b7b0510a496a 100644 --- a/auto/Wrap/doxygenDevice.i +++ b/auto/Wrap/doxygenDevice.i @@ -876,11 +876,6 @@ C++ includes: ICoordSystem.h %feature("docstring") ICoordSystem::clone "ICoordSystem* ICoordSystem::clone() const override=0 "; -%feature("docstring") ICoordSystem::createPowerfield "std::unique_ptr< Powerfield< double > > ICoordSystem::createPowerfield(Coords units) const - -Returns zero-valued output data array in specified units. -"; - %feature("docstring") ICoordSystem::rank "virtual size_t ICoordSystem::rank() const =0 "; @@ -905,6 +900,12 @@ Returns zero-valued output data array in specified units. %feature("docstring") ICoordSystem::createConvertedAxis "virtual IAxis* ICoordSystem::createConvertedAxis(size_t i_axis, Coords units) const =0 "; +%feature("docstring") ICoordSystem::defaultAxes "std::vector< IAxis * > ICoordSystem::defaultAxes() const +"; + +%feature("docstring") ICoordSystem::convertedAxes "std::vector< IAxis * > ICoordSystem::convertedAxes(Coords units) const +"; + %feature("docstring") ICoordSystem::createConvertedData "Powerfield< double > * ICoordSystem::createConvertedData(const Powerfield< double > &data, Coords units) const Creates Powerfield array in converter units.