Files
geant4/examples/extended/analysis/A01/include/AIDA/IFitter.h
T
2016-06-08 16:57:27 +02:00

276 lines
11 KiB
C++

//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
// -*- C++ -*-
// AID-GENERATED
// =========================================================================
// This class was generated by AID - Abstract Interface Definition
// DO NOT MODIFY, but use the org.freehep.aid.Aid utility to regenerate it.
// =========================================================================
#ifndef AIDA_IFITTER_H
#define AIDA_IFITTER_H 1
// This file is part of the AIDA library
// Copyright (C) 2002 by the AIDA team. All rights reserved.
// This library is free software and under the terms of the
// GNU Library General Public License described in the LGPL.txt
#include <string>
#include <vector>
namespace AIDA {
class IBaseHistogram;
class IDataPointSet;
class IFitData;
class IFitParameterSettings;
class IFitResult;
class IFunction;
/** @interface IFitter
*
* Fitter performs fits, scans and computes contours.
*
* Fitter never stores association to the data and functions which are
* used for fitting. Results of the fit are availabe in the IFitResult
* object, which also remebers the initial fit configuration.
*
* @author The AIDA team (http://aida.freehep.org/)
*
*/
class IFitter {
public:
/// Destructor.
virtual ~IFitter() { /* nop */; }
/**
* Fit an IFunction to an IFitData.
* The result of the fit is an IFitResult.
* @param fitData The IFitData to be fitted.
* @param func The IFunction to fit on the data.
* @return The IFitResult containing the results of the fit.
*
*/
virtual IFitResult * fit(IFitData & fitData, IFunction & func) = 0;
/**
* Shortcut to fit an IBaseHistogram directly with an IFunction.
* The dimension of the IBaseHistogram must match the dimension of the IFunction.
* IHistograms and IProfiles are for binned fits only, IClouds only for unbinned fits.
* @param hist The IBaseHistogram to be fitted.
* @param func The IFunction to fit on the data.
* @return The IFitResult containing the result of the fit.
*
*/
virtual IFitResult * fit(IBaseHistogram & hist, IFunction & func) = 0;
/**
* Shortcut to fit an IBaseHistogram directly with an IFunction.
* The dimension of the IBaseHistogram must match the dimension of the IFunction.
* IHistograms and IProfiles are for binned fits only, IClouds only for unbinned fits.
* @param hist The IBaseHistogram to be fitted.
* @param model The string defining the function to be used.
* @return The IFitResult containing the result of the fit.
*
*/
virtual IFitResult * fit(IBaseHistogram & hist, std::string model) = 0;
/**
* Shortcut to fit an IBaseHistogram directly with an IFunction.
* The dimension of the IBaseHistogram must match the dimension of the IFunction.
* IHistograms and IProfiles are for binned fits only, IClouds only for unbinned fits.
* @param hist The IBaseHistogram to be fitted.
* @param model The string defining the function to be used.
* @param initialParameters The array of the initial parameter values; its size must match the number of
* parameters in the function.
* @return The IFitResult containing the result of the fit.
*
*/
virtual IFitResult * fit(IBaseHistogram & hist, std::string model, std::vector<double> & initialParameters) = 0;
/**
* Shortcut to fit an IDataPointSet directly with an IFunction.
* The dimension of the IDataPointSet must be equal the dimension of the IFunction + 1.
* This are binned fits only; the last coordinate of the IDataPointSet is used as
* the "height" in a fit to an IBaseHistogram.
* @param dataPointSet The IDataPointSet to be fitted.
* @param func The IFunction to fit on the data.
* @return The IFitResult containing the result of the fit.
*
*/
virtual IFitResult * fit(IDataPointSet & dataPointSet, IFunction & f) = 0;
/**
* Shortcut to fit an IDataPointSet directly with an IFunction.
* The dimension of the IDataPointSet must be equal the dimension of the IFunction + 1.
* This are binned fits only; the last coordinate of the IDataPointSet is used as
* the "height" in a fit to an IBaseHistogram.
* @param dataPointSet The IDataPointSet to be fitted.
* @param model The string defining the function to be used.
* @return The IFitResult containing the result of the fit.
*
*/
virtual IFitResult * fit(IDataPointSet & dataPointSet, std::string model) = 0;
/**
* Shortcut to fit an IDataPointSet directly with an IFunction.
* The dimension of the IDataPointSet must be equal the dimension of the IFunction + 1.
* This are binned fits only; the last coordinate of the IDataPointSet is used as
* the "height" in a fit to an IBaseHistogram.
* @param dataPointSet The IDataPointSet to be fitted.
* @param model The string defining the function to be used.
* @param initialParameters The array of the initial parameter values; its size must match the number of
* parameters in the function.
* @return The IFitResult containing the result of the fit.
*
*/
virtual IFitResult * fit(IDataPointSet & dataPointSet, std::string model, std::vector<double> & initialParameters) = 0;
/// Shortcut for the predefined models.
virtual IFitResult * fit(IFitData & d, std::string model) = 0;
virtual IFitResult * fit(IFitData & d, std::string model, std::vector<double> & initialParameters) = 0;
/**
* Set the optimization engine which is used internally for fitting.
* @param name The name of the optimizer engine.
* Examples of predefined engines: "minuit". The engine name is case-insensitive.
* Different engines are provided by different implementations.
* @return false If the name does not correspond to a valid engine.
*
*/
virtual bool setEngine(std::string name) = 0;
/**
* Get the name of the engine currently in use.
* @return The name of the optimizer engine used by the IFitter.
*
*/
virtual std::string engineName() = 0;
/**
* Access to fit parameter settings. FitParameterSettings object belongs to
* and is managed by the fitter. Fitter implementation takes care that the
* returned reference is valid thru the lifetime of fitter.
* User can set the settings of the parameters independently of the
* parameters of the fitted function.
* Setting for parameters unknown in the function and set in the
* fitter are ignored in the fit.
* If settings are not explicitly set in the fitter, their default
* values are attached to function parameters during the fit.
*/
virtual IFitParameterSettings & fitParameterSettings(std::string name) = 0;
/**
* Get a vector of names of all parameter settings defined in the fitter.
*/
virtual const std::vector<std::string> & listParameterSettings() = 0;
/**
* Reset all parameter settings which fitter remebers.
*/
virtual void resetParameterSettings() = 0;
/**
* Set a general constraint in the parameter space. The constraint
* is a parsed expression. PENDING: The syntax to be fixed.
*/
virtual bool setConstraint(std::string expr) = 0;
/// Get the list of all constraints.
virtual const std::vector<std::string> & constraints() = 0;
/**
* Reset all the constraints.
*/
virtual void resetConstraints() = 0;
/**
* Set the fit method type. Examples of pre-defined methods: "chi2", "ml".
* The method names are case-insensitive.
* @param name The name of the fit method.
* @return false If the name does not correspond to a valid fit method.
*
*/
virtual bool setFitMethod(std::string name) = 0;
/**
* Get the name of the fit method currently in use.
* @return The name of the fit method.
*
*/
virtual std::string fitMethodName() = 0;
/// Create a 1D scan of the fit quality for given parameter 'par' of
/// the function.
/// User must make sure that the returned vector is properly deleted
/// after use.
/// The vector containes 'npts' points which are evenly sampled in the
/// interval ('pmin','pmax').
virtual IDataPointSet * createScan1D(IFitData & d, IFunction & f, std::string par, int npts, double pmin, double pmax) = 0;
/// Create a 2D contour spanned on 'par1' and 'par2',
/// with given number of npts points. Contour is create using previously
/// obtained fit results. Argument 'up' tells the vertical distance of
/// the contour plane above the minimal fit quality value.
virtual IDataPointSet * createContour(IFitData & d, IFitResult & r, std::string par1, std::string par2, int npts, double up) = 0;
/**
* Choose between using or not using the
* analytical derivatives if provided by the function.
* @param useGrad If <code>true</code> the IFitter will use the
* analytical derivatives if provided by the IFunction.
*
*/
virtual void setUseFunctionGradient(bool useGrad) = 0;
/**
* Check if the IFitter is set to use the analytical derivatives provided
* by the IFunction.
* @return <code>true</code> if the IFitter uses the analytical derivatives.
*
*/
virtual bool useFunctionGradient() = 0;
/**
* @link association
* @directed
* @label <<create>>
*/
/*# IFitResult lnkIFitResult; */
/** @link dependency */
/*# IFitData lnkIFitData; */
/** @link aggregation
* @supplierRole <<internal copy>>*/
/*# IFitParameterSettings lnkIFitParameter; */
/** @link dependency
* @label fitter uses function for fitting*/
/*# IFunction lnkIFunction; */
}; // class
}; // namespace AIDA
#endif /* ifndef AIDA_IFITTER_H */