-
Nick Draper authored
Update copyright headers in all files Squashed commit of the following: * First version of a script to manage copyright statements re #23468 * Neatened up script, added comments re #23488 * move script to tools directory re #23488 * small script changes and a couple of manual file changes re #23488 * Minor chnage to whitespace detection in regex re #23488 * Add an excluded directory re #23488 * remove a repeasted copyright statement in a file re #23488 * Don't comsume the comment end if it is on the same line re #23488 * fix error in new copright parsing re #23488 * remove double copyrifght entry re #23488 * Improve handling of old copyrights at the start of comments re #23488 * remove empty comments re #23488 * exclude gsoapgenerated directories re #23488 * Sort out greedy line matching re #23488 * improve empty comment removal re #23488 * improve false positives re #23488 * impressive speedup by limiting regex matching length re #23488 * remove evil invisible non ascii character Also upadte the copyright at the same time re #23488 * resolve multiple copyrights in a single file re #23488 * resolve an issue with new statement detection re #23488 * another unprintable unicode character re #23488 * pep updates and cmake the new copyright fit clang format re #23488 * update already done new format headers re #23488 * wrong type of bracket re #23488 * Update class_maker and friends re #23488 * Update all copyright statements re #23488 * clang format re #23488 * flake8 warnings re #23488 * Flake8 warnings re #23488 * Exclude .cmake.in and rb.in files re #23488 * replace missing line re #23488 * exclude .py.in files as they are flasely recognized as C++ re #23488 * another setp.py.in re #23488 * another .py.in correction re #23488 * Hopefully the last of the .py.in files re #23488 * resolve utf-8 encoding of python files and changed ABINS checksum re #23488 * updates to unit tests that reference line numbers re #23488 * remaining unit test files and other fixes re #23488
Nick Draper authoredUpdate copyright headers in all files Squashed commit of the following: * First version of a script to manage copyright statements re #23468 * Neatened up script, added comments re #23488 * move script to tools directory re #23488 * small script changes and a couple of manual file changes re #23488 * Minor chnage to whitespace detection in regex re #23488 * Add an excluded directory re #23488 * remove a repeasted copyright statement in a file re #23488 * Don't comsume the comment end if it is on the same line re #23488 * fix error in new copright parsing re #23488 * remove double copyrifght entry re #23488 * Improve handling of old copyrights at the start of comments re #23488 * remove empty comments re #23488 * exclude gsoapgenerated directories re #23488 * Sort out greedy line matching re #23488 * improve empty comment removal re #23488 * improve false positives re #23488 * impressive speedup by limiting regex matching length re #23488 * remove evil invisible non ascii character Also upadte the copyright at the same time re #23488 * resolve multiple copyrights in a single file re #23488 * resolve an issue with new statement detection re #23488 * another unprintable unicode character re #23488 * pep updates and cmake the new copyright fit clang format re #23488 * update already done new format headers re #23488 * wrong type of bracket re #23488 * Update class_maker and friends re #23488 * Update all copyright statements re #23488 * clang format re #23488 * flake8 warnings re #23488 * Flake8 warnings re #23488 * Exclude .cmake.in and rb.in files re #23488 * replace missing line re #23488 * exclude .py.in files as they are flasely recognized as C++ re #23488 * another setp.py.in re #23488 * another .py.in correction re #23488 * Hopefully the last of the .py.in files re #23488 * resolve utf-8 encoding of python files and changed ABINS checksum re #23488 * updates to unit tests that reference line numbers re #23488 * remaining unit test files and other fixes re #23488
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
IFunction1D.cpp 5.07 KiB
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
// NScD Oak Ridge National Laboratory, European Spallation Source
// & Institut Laue - Langevin
// SPDX - License - Identifier: GPL - 3.0 +
//----------------------------------------------------------------------
// Includes
//----------------------------------------------------------------------
#include "MantidAPI/IFunction1D.h"
#include "MantidAPI/AnalysisDataService.h"
#include "MantidAPI/CompositeFunction.h"
#include "MantidAPI/ConstraintFactory.h"
#include "MantidAPI/Expression.h"
#include "MantidAPI/IConstraint.h"
#include "MantidAPI/IFunction1D.tcc"
#include "MantidAPI/IFunctionWithLocation.h"
#include "MantidAPI/Jacobian.h"
#include "MantidAPI/MatrixWorkspace.h"
#include "MantidAPI/ParameterTie.h"
#include "MantidAPI/TextAxis.h"
#include "MantidGeometry/Instrument/Component.h"
#include "MantidGeometry/Instrument/DetectorGroup.h"
#include "MantidGeometry/Instrument/FitParameter.h"
#include "MantidGeometry/Instrument/ParameterMap.h"
#include "MantidGeometry/muParser_Silent.h"
#include "MantidKernel/Exception.h"
#include "MantidKernel/UnitFactory.h"
#include <boost/lexical_cast.hpp>
#include <sstream>
namespace Mantid {
namespace API {
using namespace Geometry;
/// init logger
Kernel::Logger IFunction1D::g_log("IFunction1D");
void IFunction1D::function(const FunctionDomain &domain,
FunctionValues &values) const {
auto histoDomain = dynamic_cast<const FunctionDomain1DHistogram *>(&domain);
if (histoDomain) {
histogram1D(values.getPointerToCalculated(0), histoDomain->leftBoundary(),
histoDomain->getPointerAt(0), histoDomain->size());
return;
}
const FunctionDomain1D *d1d = dynamic_cast<const FunctionDomain1D *>(&domain);
if (!d1d) {
throw std::invalid_argument("Unexpected domain in IFunction1D");
}
function1D(values.getPointerToCalculated(0), d1d->getPointerAt(0),
d1d->size());
}
void IFunction1D::functionDeriv(const FunctionDomain &domain,
Jacobian &jacobian) {
auto histoDomain = dynamic_cast<const FunctionDomain1DHistogram *>(&domain);
if (histoDomain) {
histogramDerivative1D(&jacobian, histoDomain->leftBoundary(),
histoDomain->getPointerAt(0), histoDomain->size());
return;
}
const FunctionDomain1D *d1d = dynamic_cast<const FunctionDomain1D *>(&domain);
if (!d1d) {
throw std::invalid_argument("Unexpected domain in IFunction1D");
}
functionDeriv1D(&jacobian, d1d->getPointerAt(0), d1d->size());
}
void IFunction1D::derivative(const FunctionDomain &domain,
FunctionValues &values, const size_t order) const {
const FunctionDomain1D *d1d = dynamic_cast<const FunctionDomain1D *>(&domain);
if (!d1d) {
throw std::invalid_argument("Unexpected domain in IFunction1D");
}
derivative1D(values.getPointerToCalculated(0), d1d->getPointerAt(0),
d1d->size(), order);
}
void IFunction1D::derivative1D(double *out, const double *xValues, size_t nData,
const size_t order) const {
UNUSED_ARG(out);
UNUSED_ARG(xValues);
UNUSED_ARG(nData);
UNUSED_ARG(order);
throw Kernel::Exception::NotImplementedError(
"Derivative is not implemented for this function.");
}
void IFunction1D::functionDeriv1D(Jacobian *jacobian, const double *xValues,
const size_t nData) {
auto evalMethod = [this](double *out, const double *xValues,
const size_t nData) {
this->function1D(out, xValues, nData);
};
this->calcNumericalDerivative1D(jacobian, std::move(evalMethod), xValues,
nData);
}
/// Calculate histogram data for the given bin boundaries.
/// @param out :: Output bin values (size == nBins) - integrals of the function
/// inside each bin.
/// @param left :: The left-most bin boundary.
/// @param right :: A pointer to an array of successive right bin boundaries
/// (size = nBins).
/// @param nBins :: Number of bins.
void IFunction1D::histogram1D(double *out, double left, const double *right,
const size_t nBins) const {
UNUSED_ARG(out);
UNUSED_ARG(left);
UNUSED_ARG(right);
UNUSED_ARG(nBins);
throw Kernel::Exception::NotImplementedError(
"Integration is not implemented for this function.");
}
/// Derivatives of the histogram.
/// @param jacobian :: The output Jacobian.
/// @param left :: The left-most bin boundary.
/// @param right :: A pointer to an array of successive right bin boundaries
/// (size = nBins).
/// @param nBins :: Number of bins.
void IFunction1D::histogramDerivative1D(Jacobian *jacobian, double left,
const double *right,
const size_t nBins) const {
UNUSED_ARG(jacobian);
UNUSED_ARG(left);
UNUSED_ARG(right);
UNUSED_ARG(nBins);
throw Kernel::Exception::NotImplementedError(
"Integration is not implemented for this function.");
}
} // namespace API
} // namespace Mantid