AmpGen 2.1
Loading...
Searching...
No Matches
MinuitParameter.h
Go to the documentation of this file.
1#ifndef AMPGEN_MINUITPARAMETER_H
2#define AMPGEN_MINUITPARAMETER_H
3// author: Jonas Rademacker (Jonas.Rademacker@bristol.ac.uk)
4// status: Mon 9 Feb 2009 19:17:55 GMT
5
6#include <iostream>
7#include <string>
8#include "AmpGen/enum.h"
9
10namespace AmpGen
11{
13 declare_enum( Flag, Free, Hide, Fix, CompileTimeConstant, Blind)
14 class MinuitParameter
15 {
16 public:
17
18 MinuitParameter() = default;
19 MinuitParameter(const std::string& name, const Flag& flag, const double& mean, const double& step,
20 const double& min = 0, const double& max = 0 );
21 MinuitParameter(const std::string& name, const double& mean, const double& step,
22 const double& min = 0, const double& max = 0 );
23
24 Flag flag() const;
25 bool isFixed() const;
26 bool isFree() const;
27 bool isBlind() const;
28 const std::string& name() const;
29
30 double meanInit() const;
31 double stepInit() const;
32 double minInit() const;
33 double maxInit() const;
34 double err() const;
35 double errPos() const;
36 double errNeg() const;
37 double* vp() { return &m_meanResult ; }
38
39 void setInit( const double& init, const double& step=-1 );
40 void setStepInit( const double& si );
41 void setFree() ;
42 void scaleStep( const double& sf );
43 void fix();
44 void setCurrentFitVal( double cfv );
45 void setLimits( const double& min, const double& max );
46 void setVal( const double& val ) { m_meanResult = val; }
47 void setResult( double fitMean, double fitErr, double fitErrNeg, double fitErrPos );
48 void resetToInit();
49 void setName( const std::string& name );
50 virtual double mean() const;
51 virtual operator double() const { return m_meanResult; }
52 virtual ~MinuitParameter() = default;
53 void setFromMinuitState( const double* x ){ if( m_minuitIndex != -1 ) m_meanResult = x[m_minuitIndex] ; }
54 void setMinuitIndex( const int& index ){ m_minuitIndex = index; }
55 int index() const { return m_minuitIndex; }
56
57 friend class MinuitParameterSet;
58 protected:
59 Flag m_flag;
60 std::string m_name = {""};
61 double m_meanInit = {0};
62 double m_stepInit = {0};
63 double m_minInit = {0};
64 double m_maxInit = {0};
65 double m_meanResult = {0};
66 double m_errPosResult = {0};
67 double m_errNegResult = {0};
68 double m_errResult = {0};
69 int m_minuitIndex = {-1};
70 };
71
73 {
74 public:
75 void update() { if(m_parameter != nullptr ) m_value = m_parameter->mean(); }
76 MinuitParameter* ptr() { return m_parameter; }
77 operator double() const { return m_parameter == nullptr ? m_value : m_parameter->mean(); }
78 MinuitProxy(MinuitParameter* param = nullptr, const double& value=0) : m_parameter(param), m_value(value) { update(); }
79 MinuitParameter* operator->() { return m_parameter; }
80 const MinuitParameter* operator->() const { return m_parameter; }
81 private:
82 MinuitParameter* m_parameter{nullptr};
83 double m_value;
84 };
85 std::ostream& operator<<( std::ostream& os, const MinuitParameter& type );
86} // namespace AmpGen
87
88#endif
89//
MinuitProxy(MinuitParameter *param=nullptr, const double &value=0)
MinuitParameter * ptr()
const MinuitParameter * operator->() const
MinuitParameter * operator->()
#define declare_enum(name,...)
Definition enum.h:7
std::ostream & operator<<(std::ostream &os, const CompiledExpressionBase &expression)