Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /include/root/Minuit2/MinimumParameters.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 // @(#)root/minuit2:$Id$
0002 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei   2003-2005
0003 
0004 /**********************************************************************
0005  *                                                                    *
0006  * Copyright (c) 2005 LCG ROOT Math team,  CERN/PH-SFT                *
0007  *                                                                    *
0008  **********************************************************************/
0009 
0010 #ifndef ROOT_Minuit2_MinimumParameters
0011 #define ROOT_Minuit2_MinimumParameters
0012 
0013 #include "Minuit2/MnMatrix.h"
0014 
0015 #include <memory>
0016 
0017 namespace ROOT {
0018 
0019 namespace Minuit2 {
0020 
0021 class MinimumParameters {
0022 
0023 public:
0024 
0025     enum Status {
0026       MnValid,
0027       MnInvalid
0028    };
0029 
0030    MinimumParameters(unsigned int n, double fval = 0)
0031       : fPtr{new Data{MnAlgebraicVector(n), MnAlgebraicVector(n), fval, false, false}}
0032    {
0033    }
0034 
0035    // constructor for case when function has no parameter and only function value
0036    MinimumParameters(double fval, Status status)
0037       : fPtr{ new Data{MnAlgebraicVector(0), MnAlgebraicVector(0), fval, status == MnValid, false}}
0038    {}
0039 
0040 
0041    /** takes the Parameter vector */
0042    MinimumParameters(const MnAlgebraicVector &avec, double fval)
0043       : fPtr{new Data{avec, MnAlgebraicVector(avec.size()), fval, true, false}}
0044    {
0045    }
0046 
0047    /** takes the Parameter vector plus step size x1 - x0 = dirin */
0048    MinimumParameters(const MnAlgebraicVector &avec, const MnAlgebraicVector &dirin, double fval)
0049       : fPtr{new Data{avec, dirin, fval, true, true}}
0050    {
0051    }
0052 
0053    const MnAlgebraicVector &Vec() const { return fPtr->fParameters; }
0054    const MnAlgebraicVector &Dirin() const { return fPtr->fStepSize; }
0055    double Fval() const { return fPtr->fFVal; }
0056    bool IsValid() const { return fPtr->fValid; }
0057    bool HasStepSize() const { return fPtr->fHasStep; }
0058 
0059 private:
0060    struct Data {
0061       MnAlgebraicVector fParameters;
0062       MnAlgebraicVector fStepSize;
0063       double fFVal;
0064       bool fValid;
0065       bool fHasStep;
0066    };
0067 
0068    std::shared_ptr<Data> fPtr;
0069 };
0070 
0071 } // namespace Minuit2
0072 
0073 } // namespace ROOT
0074 
0075 #endif // ROOT_Minuit2_MinimumParameters