diff --git a/.clang-tidy b/.clang-tidy index 0fa3334dd3bd5a07f3f9f9490d8dd90faf86c865..01d514dcf04527a1bdbcfe2f3de6cef63925fb78 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -29,7 +29,7 @@ Checks: '*, -bugprone-suspicious-include, -cert-err58-cpp, -cert-err61-cpp, --cert-msc30-cpp, +-cert-msc30-c*, -cert-msc50-cpp, -clang-analyzer-alpha*, -clang-analyzer-alpha.deadcode.UnreachableCode, @@ -53,6 +53,7 @@ Checks: '*, -google-readability-casting, -google-readability-todo, -google-runtime-int, +-hicpp-exception-baseclass, -hicpp-signed-bitwise, -hicpp-vararg, -llvmlibc-callee-namespace, @@ -91,18 +92,21 @@ Checks: '*, -*avoid-c-arrays, -*narrowing-conversions, -cppcoreguidelines-owning-memory, +-bugprone-unused-return-value, -SectionComment_Temporarily_disabled_checks__To_be_resolved_soon, -*use-auto, -*move-const-arg, +-*-use-emplace, -*use-equals-default, -*use-nullptr, -*use-override, -bugprone-parent-virtual-call, -clang-analyzer-core.CallAndMessage, -clang-analyzer-optin.cplusplus.VirtualCall, +-cppcoreguidelines-explicit-virtual-functions, -cppcoreguidelines-pro-type-const-cast, -cppcoreguidelines-pro-type-static-cast-downcast, -google-explicit-constructor, @@ -114,6 +118,7 @@ Checks: '*, -llvm-qualified-auto, -misc-non-private-member-variables-in-classes, -misc-uniqueptr-reset-release, +-modernize-avoid-bind, -modernize-loop-convert, -modernize-make-unique, -modernize-pass-by-value, @@ -131,9 +136,10 @@ Checks: '*, -readability-redundant-member-init, -readability-simplify-boolean-expr, - -SectionComment_Temporarily_disabled_checks__We_need_to_investigate_them_one_by_one, +-bugprone-exception-escape, +-bugprone-misplaced-widening-cast, ' -# note the closing quotation mark \ No newline at end of file +# keep the closing quotation mark \ No newline at end of file diff --git a/App/AppOptions.cpp b/App/AppOptions.cpp index 3e96eca7d0230ea8922b92b93cedc0e517ba6ff4..64df880a829132b798583a8ebebceeea6122970d 100644 --- a/App/AppOptions.cpp +++ b/App/AppOptions.cpp @@ -64,12 +64,12 @@ ApplicationOptions::ApplicationOptions(int argc, char** argv) : m_options_is_con const bpo::variable_value& ApplicationOptions::operator[](const std::string& s) const { - return m_variables_map[s.c_str()]; + return m_variables_map[s]; } bool ApplicationOptions::find(std::string name) const { - return (m_variables_map.count(name.c_str())); + return (m_variables_map.count(name)); } bool ApplicationOptions::isConsistent() const diff --git a/Base/Math/FourierTransform.cpp b/Base/Math/FourierTransform.cpp index 69bb3603357c49fd57d1389d6c08c9d31a98782d..e3a74c61dc1664f276569668f9b1c5e9134f48c2 100644 --- a/Base/Math/FourierTransform.cpp +++ b/Base/Math/FourierTransform.cpp @@ -14,11 +14,9 @@ // ************************************************************************************************ #include "Base/Math/FourierTransform.h" +#include "Base/Util/Assert.h" #include <algorithm> #include <cmath> -#include <iostream> -#include <sstream> -#include <stdexcept> FourierTransform::FourierTransform() = default; @@ -64,15 +62,17 @@ void FourierTransform::fft(const double2d_t& source, double2d_t& result) double* ptr = ws.out_fftw; result.clear(); + const size_t nh = ws.h_fftw; + // Resize the array for holding the FT output to correct dimensions - result.resize(static_cast<size_t>(ws.h_fftw), + result.resize(nh, std::vector<double>(static_cast<size_t>(ws.w_fftw))); // Storing FT output - for (size_t i = 0; i < static_cast<size_t>(ws.h_fftw); i++) { - size_t k = static_cast<size_t>(ws.h_fftw) - i; + for (size_t i = 0; i < nh; i++) { + size_t k = nh - i; if (i == 0) - k -= static_cast<size_t>(ws.h_fftw); + k -= nh; for (size_t j = 0; j < static_cast<size_t>(ws.w_fftw / 2 + 1); j++) { result[i][j] = *ptr; size_t l = static_cast<size_t>(ws.w_fftw) - j; @@ -105,10 +105,9 @@ void FourierTransform::fftshift(double2d_t& result) const std::rotate(result.begin(), result.begin() + static_cast<int>(row_shift), result.end()); // Second, shifting the cols - for (size_t i = 0; i < static_cast<size_t>(ws.h_fftw); i++) { + for (size_t i = 0; i < static_cast<size_t>(ws.h_fftw); i++) std::rotate(result[i].begin(), result[i].begin() + static_cast<int>(col_shift), result[i].end()); - } } /* ************************************************************************* */ @@ -123,9 +122,7 @@ void FourierTransform::fft(const double1d_t& source, double1d_t& result) double2d_t result2d; fft(source2d, result2d); - if (result2d.size() != 1) - throw std::runtime_error("FourierTransform::fft -> Panic in 1d"); - + ASSERT(result2d.size() == 1); result = result2d[0]; } @@ -149,12 +146,8 @@ void FourierTransform::fftshift(double1d_t& result) const /* ************************************************************************************ */ void FourierTransform::init(int h_src, int w_src) { - if (!h_src || !w_src) { - std::ostringstream os; - os << "FourierTransform::init() -> Panic! Wrong dimensions " << h_src << " " << w_src - << std::endl; - throw std::runtime_error(os.str()); - } + ASSERT(h_src); + ASSERT(w_src); ws.clear(); ws.h_src = h_src; @@ -173,9 +166,7 @@ void FourierTransform::init(int h_src, int w_src) // ws.p_forw_src = fftw_plan_dft_r2c_2d(ws.h_fftw, ws.w_fftw, ws.in_src, // static_cast<double*>(ws.out_src), FFTW_ESTIMATE); - if (ws.p_forw_src == nullptr) - throw std::runtime_error( - "FourierTransform::init() -> Error! Can't initialise p_forw_src plan."); + ASSERT(ws.p_forw_src); } /* ************************************************************************* */ @@ -184,9 +175,8 @@ void FourierTransform::init(int h_src, int w_src) void FourierTransform::fftw_forward_FT(const double2d_t& src) { - if (ws.h_fftw <= 0 || ws.w_fftw <= 0) - throw std::runtime_error( - "FourierTransform::fftw_forward_FT() -> Panic! Initialization is missed."); + ASSERT(ws.h_fftw > 0); + ASSERT(ws.w_fftw > 0); double *ptr, *ptr_end; diff --git a/GUI/Model/From/FromDomain.cpp b/GUI/Model/From/FromDomain.cpp index 141a3a7a593cc94fa9418fec1290ef72aa011aa4..bbe7791398716bcd26fe574d5becbdc7b5c497fb 100644 --- a/GUI/Model/From/FromDomain.cpp +++ b/GUI/Model/From/FromDomain.cpp @@ -424,7 +424,7 @@ void GUI::Transform::FromDomain::setGISASBeamItem(BeamItem* beam_item, const GISASSimulation& simulation) { ASSERT(beam_item); - Beam beam = simulation.beam(); + const Beam& beam = simulation.beam(); beam_item->setIntensity(beam.intensity()); beam_item->setWavelength(beam.wavelength()); @@ -432,7 +432,7 @@ void GUI::Transform::FromDomain::setGISASBeamItem(BeamItem* beam_item, beam_item->setAzimuthalAngle(Units::rad2deg(beam.direction().phi())); // distribution parameters - const std::vector<ParameterDistribution> distributions = simulation.getDistributions(); + const std::vector<ParameterDistribution>& distributions = simulation.getDistributions(); for (size_t i = 0; i < distributions.size(); ++i) { // try all, one will have the right 'whichParameter' addDistributionToBeamItem(ParameterDistribution::BeamWavelength, @@ -447,7 +447,7 @@ void GUI::Transform::FromDomain::setGISASBeamItem(BeamItem* beam_item, void GUI::Transform::FromDomain::setOffSpecularBeamItem(BeamItem* beam_item, const OffSpecularSimulation& simulation) { - Beam beam = simulation.beam(); + const Beam& beam = simulation.beam(); beam_item->setIntensity(beam.intensity()); beam_item->setWavelength(beam.wavelength()); diff --git a/GUI/View/Intensity/Plot1D.cpp b/GUI/View/Intensity/Plot1D.cpp index 3c02dbbf06bec775b22f881493bd13c735462200..acdbd6f9b9ba95de48f341d5521796a15850fd25 100644 --- a/GUI/View/Intensity/Plot1D.cpp +++ b/GUI/View/Intensity/Plot1D.cpp @@ -248,7 +248,7 @@ void Plot1D::updateGraph(Data1DProperties* item) auto data_points = viewItem()->graphData(item); auto graph = m_graph_map.at(item); - graph->setData(data_points.first, data_points.second, /*sorted =*/true); + graph->setData(data_points.first, data_points.second, /*alreadySorted =*/true); } Data1DViewItem* Plot1D::viewItem() diff --git a/GUI/View/Mask/MaskEditorPropertyPanel.cpp b/GUI/View/Mask/MaskEditorPropertyPanel.cpp index 646754c6466ebbe729969d5c5a7dd29d2f984a87..c654f3a51e954f90a6836ac479385f88297c0848 100644 --- a/GUI/View/Mask/MaskEditorPropertyPanel.cpp +++ b/GUI/View/Mask/MaskEditorPropertyPanel.cpp @@ -21,8 +21,9 @@ #include <QListView> #include <QVBoxLayout> -//! Widget to cheat Accordion to resize correctly. +namespace { +//! Widget to cheat Accordion to resize correctly. class EnvelopWidget : public QWidget { public: EnvelopWidget(QWidget* content) @@ -35,9 +36,12 @@ public: setLayout(mainLayout); } - QSize sizeHint() const { return QSize(128, 500); } + QSize sizeHint() const override { return QSize(128, 500); } }; +} // namespace + + MaskEditorPropertyPanel::MaskEditorPropertyPanel(QWidget* parent) : QWidget(parent) , m_listView(new QListView) diff --git a/GUI/View/MaterialEditor/MaterialEditorModel.cpp b/GUI/View/MaterialEditor/MaterialEditorModel.cpp index cad287d81b7c6d0c6e14154c8b6a7948db224ded..d8ac989b2d09fc9a646e81aba875ab4e1d30633a 100644 --- a/GUI/View/MaterialEditor/MaterialEditorModel.cpp +++ b/GUI/View/MaterialEditor/MaterialEditorModel.cpp @@ -36,7 +36,7 @@ QVariant MaterialEditorModel::headerData(int section, Qt::Orientation /*orientat int role /* = Qt::DisplayRole */) const { if (role != Qt::DisplayRole) - return QVariant(); + return {}; switch (section) { case NAME: @@ -47,15 +47,15 @@ QVariant MaterialEditorModel::headerData(int section, Qt::Orientation /*orientat return "Material parameters"; case MAGNETIZATION: return "Magnetization [A/m]"; + default: + return {}; } - - return QVariant(); } QVariant MaterialEditorModel::data(const QModelIndex& index, int role /*= Qt::DisplayRole*/) const { if (!index.isValid()) - return QVariant(); + return {}; MaterialItem* material = m_model->materialItems()[index.row()]; @@ -94,7 +94,7 @@ QVariant MaterialEditorModel::data(const QModelIndex& index, int role /*= Qt::Di } } - return QVariant(); + return {}; } void MaterialEditorModel::setMaterialItemName(const QModelIndex& index, const QString& name) diff --git a/GUI/View/Realspace/IPositionBuilder.cpp b/GUI/View/Realspace/IPositionBuilder.cpp index 488f1a472c2f4ee7321f310342399feecadc0ab1..18250c548642e21a12d82e4cd7ed18fed08cc9e9 100644 --- a/GUI/View/Realspace/IPositionBuilder.cpp +++ b/GUI/View/Realspace/IPositionBuilder.cpp @@ -228,7 +228,7 @@ RadialParacrystalPositionBuilder::generatePositionsImpl(double layer_size, doubl // for populating particles correctly within the 3D model's boundaries int n = distance <= 0.0 ? 1 : static_cast<int>(layer_size * std::sqrt(2.0) / distance); - lattice_positions.resize(static_cast<size_t>(2 * n + 1)); + lattice_positions.resize(2 * n + 1); for (auto& it : lattice_positions) { it.resize(2); } @@ -241,17 +241,15 @@ RadialParacrystalPositionBuilder::generatePositionsImpl(double layer_size, doubl unsigned i_left = static_cast<unsigned>(std::max(0, 2 * i - 3)); double offset = m_iff->randomSample(); - lattice_positions[static_cast<size_t>(2 * i - 1)][0] = + lattice_positions[2 * i - 1][0] = lattice_positions[i_left][0] + distance + offset; - lattice_positions[static_cast<size_t>(2 * i - 1)][1] = 0.0; + lattice_positions[2 * i - 1][1] = 0.0; // positions of particles located along -x (store at even index) - unsigned i_right = static_cast<unsigned>(2 * (i - 1)); - offset = m_iff->randomSample(); - lattice_positions[static_cast<size_t>(2 * i)][0] = - lattice_positions[i_right][0] - distance + offset; - lattice_positions[static_cast<size_t>(2 * i)][1] = 0.0; + lattice_positions[2 * i][0] = + lattice_positions[2 * (i - 1)][0] - distance + offset; + lattice_positions[2 * i][1] = 0.0; } return lattice_positions; } diff --git a/GUI/View/Realspace/RealSpace2DParacrystalUtils.cpp b/GUI/View/Realspace/RealSpace2DParacrystalUtils.cpp index a63352a1262bca91a70f8678d88a091e093e8469..c899f69dee7d3b6ae900d35114494149d1626968 100644 --- a/GUI/View/Realspace/RealSpace2DParacrystalUtils.cpp +++ b/GUI/View/Realspace/RealSpace2DParacrystalUtils.cpp @@ -13,56 +13,11 @@ // ************************************************************************************************ #include "GUI/View/Realspace/RealSpace2DParacrystalUtils.h" +#include "Base/Util/Assert.h" #include "Sample/Aggregate/Interference2DParaCrystal.h" namespace { -void ResizeLatticePositions(std::vector<std::vector<double>>& lattice_positions, double l1, - double l2, double layer_size); -void FindLatticePositionsIndex(size_t& index, size_t& index_prev, int i, int j, int size, - double l_alpha); -std::pair<double, double> ComputePositionAlongPositiveLatticeVector( - const size_t index_prev, std::vector<std::vector<double>>& lattice_positions, - const IFTDistribution2D* pdf, double l, double l_xi, double l_alpha); -std::pair<double, double> ComputePositionAlongNegativeLatticeVector( - const size_t index_prev, std::vector<std::vector<double>>& lattice_positions, - const IFTDistribution2D* pdf, double l, double l_xi, double l_alpha); -std::pair<double, double> -ComputeLatticePosition(const size_t index_prev, int i, int j, - std::vector<std::vector<double>>& lattice_positions, - const IFTDistribution2D* pdf, double l, double l_xi, double l_alpha); -void ComputePositionsAlongLatticeVectorAxes(std::vector<std::vector<double>>& lattice_positions, - const IFTDistribution2D* pdf, double l, double l_xi, - double l_alpha); -void ComputePositionsInsideLatticeQuadrants(std::vector<std::vector<double>>& lattice_positions, - const IFTDistribution2D* pdf1, - const IFTDistribution2D* pdf2, double l1, double l2, - double l_xi, double l_alpha); -} // namespace - -std::vector<std::vector<double>> -GUI::RealSpace::Paracrystal2D::latticePositions(const Interference2DParaCrystal* p_iff, - double layer_size) -{ - auto& lattice = p_iff->lattice(); - double l1 = lattice.length1(); - double l2 = lattice.length2(); - double alpha = lattice.latticeAngle(); - double xi = lattice.rotationAngle(); - std::vector<std::vector<double>> lattice_positions; - ResizeLatticePositions(lattice_positions, l1, l2, layer_size); - - ComputePositionsAlongLatticeVectorAxes(lattice_positions, p_iff->pdf1(), l1, xi, 0); - - ComputePositionsAlongLatticeVectorAxes(lattice_positions, p_iff->pdf2(), l2, xi, alpha); - - ComputePositionsInsideLatticeQuadrants(lattice_positions, p_iff->pdf1(), p_iff->pdf2(), l1, l2, - xi, alpha); - - return lattice_positions; -} - -namespace { void ResizeLatticePositions(std::vector<std::vector<double>>& lattice_positions, double l1, double l2, double layer_size) { @@ -74,7 +29,7 @@ void ResizeLatticePositions(std::vector<std::vector<double>>& lattice_positions, n1 = std::max(n1, n2); - lattice_positions.resize(static_cast<size_t>((2 * n1 + 1) * (2 * n1 + 1))); + lattice_positions.resize((2 * n1 + 1) * (2 * n1 + 1)); for (auto& it : lattice_positions) { it.resize(2); } @@ -86,17 +41,17 @@ void ResizeLatticePositions(std::vector<std::vector<double>>& lattice_positions, void FindLatticePositionsIndex(size_t& index, size_t& index_prev, int i, int j, int size, double l_alpha) { - index = static_cast<size_t>(i * (2 * size + 1) + j); + int newindex = i * (2 * size + 1) + j; + ASSERT(newindex>0); + index = newindex; - if (std::sin(l_alpha) == 0) // along l1 - { + if (std::sin(l_alpha) == 0) { // along l1 // particles along +l1 stored every odd iter (e.g. 1,3,5...) index of lattice_positions // particles along -l1 stored every even iter (e.g. 2,4,6...) index of lattice_positions index_prev = static_cast<size_t>(i * (2 * size + 1)); if (j - 2 > 0) index_prev = index - 2; - } else // along l2 - { + } else { // along l2 // particles along +l2/-l2 stored every (odd/even iter)*(2*n1+1) index of lattice_positions index_prev = static_cast<size_t>(j); if (i - 2 > 0) @@ -229,4 +184,33 @@ void ComputePositionsInsideLatticeQuadrants(std::vector<std::vector<double>>& la } } } + } // namespace + + +// ************************************************************************************************ +// implement namespace GUI::RealSpace::Paracrystal2D +// ************************************************************************************************ + +std::vector<std::vector<double>> +GUI::RealSpace::Paracrystal2D::latticePositions(const Interference2DParaCrystal* p_iff, + double layer_size) +{ + auto& lattice = p_iff->lattice(); + double l1 = lattice.length1(); + double l2 = lattice.length2(); + double alpha = lattice.latticeAngle(); + double xi = lattice.rotationAngle(); + + std::vector<std::vector<double>> lattice_positions; + ResizeLatticePositions(lattice_positions, l1, l2, layer_size); + + ComputePositionsAlongLatticeVectorAxes(lattice_positions, p_iff->pdf1(), l1, xi, 0); + + ComputePositionsAlongLatticeVectorAxes(lattice_positions, p_iff->pdf2(), l2, xi, alpha); + + ComputePositionsInsideLatticeQuadrants(lattice_positions, p_iff->pdf1(), p_iff->pdf2(), l1, l2, + xi, alpha); + + return lattice_positions; +} diff --git a/GUI/View/SampleDesigner/SampleEditorCommands.cpp b/GUI/View/SampleDesigner/SampleEditorCommands.cpp index c2cdac4d7398fe309796b5fb080a6ffbdb549609..e6cc6c2b4a480a3430ebd2a51d586ff37a12d335 100644 --- a/GUI/View/SampleDesigner/SampleEditorCommands.cpp +++ b/GUI/View/SampleDesigner/SampleEditorCommands.cpp @@ -19,8 +19,11 @@ #include "GUI/View/SampleDesigner/SampleEditorController.h" namespace { -static constexpr int COMMAND_ID_CHANGE_VALUE = 11; -} + +constexpr int COMMAND_ID_CHANGE_VALUE = 11; + +} // namespace + CommandRemoveLayer::CommandRemoveLayer(SampleEditorController* ec, LayerItem* layerItem, QUndoCommand* parent /*= nullptr*/) diff --git a/GUI/View/SampleDesigner/SampleToolBoxGroupView.cpp b/GUI/View/SampleDesigner/SampleToolBoxGroupView.cpp index 20ee33dc39c68003d4e4c76c57510ebdaba3c813..aebb8a1ecd811709155b31bdfcea3c80fddd09fc 100644 --- a/GUI/View/SampleDesigner/SampleToolBoxGroupView.cpp +++ b/GUI/View/SampleDesigner/SampleToolBoxGroupView.cpp @@ -104,8 +104,9 @@ QVariant SampleToolBoxGroupModel::data(const QModelIndex& index, int role) const } case FILTER_ROLE: return item.filter; + default: + return {}; } - return QVariant(); } Qt::ItemFlags SampleToolBoxGroupModel::flags(const QModelIndex& /*index*/) const diff --git a/GUI/View/Tool/DesignerHelper.cpp b/GUI/View/Tool/DesignerHelper.cpp index 9d299b3fce8c0f13f6d18a65d4567573a0552aad..520147f7848cb9a5c5517f14b319ce2ca9215ba9 100644 --- a/GUI/View/Tool/DesignerHelper.cpp +++ b/GUI/View/Tool/DesignerHelper.cpp @@ -23,6 +23,7 @@ namespace { double m_current_zoom_level = 1.0; } + QGradient DesignerHelper::getLayerGradient(const QColor& color, const QRectF& rect) { QColor c = color; @@ -42,7 +43,7 @@ QGradient DesignerHelper::getLayerGradient(const QColor& color, const QRectF& re QGradient DesignerHelper::getDecorationGradient(const QColor& color, const QRectF& rect) { - QColor c = color; + const QColor& c = color; // c.setAlpha(200); QLinearGradient result(rect.x() + rect.width() / 2, rect.y(), rect.x() + rect.width() / 2, rect.y() + rect.height()); diff --git a/Tests/Unit/Core/SimDataPairTest.cpp b/Tests/Unit/Core/SimDataPairTest.cpp index a0a86eb4442b50d15c09303f6488e64cbe1f9f5b..a850b2f9bd6075c58b699cb45c5df8ec46f09bf2 100644 --- a/Tests/Unit/Core/SimDataPairTest.cpp +++ b/Tests/Unit/Core/SimDataPairTest.cpp @@ -35,7 +35,7 @@ TEST_F(SimDataPairTest, standardPair) // checking arrays auto array = obj.simulation_array(); - EXPECT_DOUBLE_EQ(std::accumulate(array.begin(), array.end(), 0), 0.0); + EXPECT_DOUBLE_EQ(std::accumulate(array.begin(), array.end(), 0.), 0.); array = obj.experimental_array(); // calling builder second time @@ -44,7 +44,7 @@ TEST_F(SimDataPairTest, standardPair) // checking arrays array = obj.simulation_array(); - EXPECT_DOUBLE_EQ(std::accumulate(array.begin(), array.end(), 0), 0.0); + EXPECT_DOUBLE_EQ(std::accumulate(array.begin(), array.end(), 0.), 0.); array = obj.experimental_array(); } diff --git a/Tests/Unit/Core/SimulationResultTest.cpp b/Tests/Unit/Core/SimulationResultTest.cpp index 42cdad2de5f335a657189deee0a3aeb301340600..b904e68e9b209421446165b59967885e21608ea9 100644 --- a/Tests/Unit/Core/SimulationResultTest.cpp +++ b/Tests/Unit/Core/SimulationResultTest.cpp @@ -6,16 +6,6 @@ class SimulationResultTest : public ::testing::Test { }; -TEST_F(SimulationResultTest, initialState) -{ - SimulationResult simres; - - SimulationResult other; - EXPECT_THROW(other = simres, std::runtime_error); - - EXPECT_THROW(SimulationResult another(other), std::runtime_error); -} - TEST_F(SimulationResultTest, accessToEmptySimulation) { const int nx(5), ny(4);