 ROOT   Reference Guide MnParabola.h
Go to the documentation of this file.
1 // @(#)root/minuit2:$Id$
2 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei 2003-2005
3
4 /**********************************************************************
5  * *
6  * Copyright (c) 2005 LCG ROOT Math team, CERN/PH-SFT *
7  * *
8  **********************************************************************/
9
10 #ifndef ROOT_Minuit2_MnParabola
11 #define ROOT_Minuit2_MnParabola
12
13 #include <cmath>
14
15 namespace ROOT {
16
17 namespace Minuit2 {
18
19 /**
20
21 This class defines a parabola of the form a*x*x + b*x + c
22
23 @author Fred James and Matthias Winkler; comments added by Andras Zsenei
24 and Lorenzo Moneta
25
26 @ingroup Minuit
27
28  */
29
30 class MnParabola {
31
32 public:
33  /**
34
35  Constructor that initializes the parabola with its three parameters.
36
37  @param a the coefficient of the quadratic term
38  @param b the coefficient of the linear term
39  @param c the constant
40
41  */
42
43  MnParabola(double a, double b, double c) : fA(a), fB(b), fC(c) {}
44
46
47  /**
48
49  Evaluates the parabola a the point x.
50
51  @param x the coordinate where the parabola needs to be evaluated.
52
53  @return the y coordinate of the parabola corresponding to x.
54
55  */
56
57  double Y(double x) const { return (fA * x * x + fB * x + fC); }
58
59  /**
60
61  Calculates the bigger of the two x values corresponding to the
62  given y Value.
63
64  <p>
65
66  ???????!!!!!!!!! And when there is none?? it looks like it will
67  crash?? what is sqrt (-1.0) ?
68
69  @param y the y Value for which the x Value is to be calculated.
70
71  @return the bigger one of the two corresponding values.
72
73  */
74
75  // ok, at first glance it does not look like the formula for the quadratic
76  // equation, but it is! ;-)
77  double X_pos(double y) const { return (std::sqrt(y / fA + Min() * Min() - fC / fA) + Min()); }
78  // maybe it is worth to check the performance improvement with the below formula??
79  // double X_pos(double y) const {return (std::sqrt(y/fA + fB*fB/(4.*fA*fA) - fC/fA) - fB/(2.*fA));}
80
81  /**
82
83  Calculates the smaller of the two x values corresponding to the
84  given y Value.
85
86  <p>
87
88  ???????!!!!!!!!! And when there is none?? it looks like it will
89  crash?? what is sqrt (-1.0) ?
90
91  @param y the y Value for which the x Value is to be calculated.
92
93  @return the smaller one of the two corresponding values.
94
95  */
96
97  double X_neg(double y) const { return (-std::sqrt(y / fA + Min() * Min() - fC / fA) + Min()); }
98
99  /**
100
101  Calculates the x coordinate of the Minimum of the parabola.
102
103  @return x coordinate of the Minimum.
104
105  */
106
107  double Min() const { return -fB / (2. * fA); }
108
109  /**
110
111  Calculates the y coordinate of the Minimum of the parabola.
112
113  @return y coordinate of the Minimum.
114
115  */
116
117  double YMin() const { return (-fB * fB / (4. * fA) + fC); }
118
119  /**
120
121  Accessor to the coefficient of the quadratic term.
122
123  @return the coefficient of the quadratic term.
124
125  */
126
127  double A() const { return fA; }
128
129  /**
130
131  Accessor to the coefficient of the linear term.
132
133  @return the coefficient of the linear term.
134
135  */
136
137  double B() const { return fB; }
138
139  /**
140
141  Accessor to the coefficient of the constant term.
142
143  @return the coefficient of the constant term.
144
145  */
146
147  double C() const { return fC; }
148
149 private:
150  double fA;
151  double fB;
152  double fC;
153 };
154
155 } // namespace Minuit2
156
157 } // namespace ROOT
158
159 #endif // ROOT_Minuit2_MnParabola
c
#define c(i)
Definition: RSha256.hxx:101
ROOT::Minuit2::MnParabola::A
double A() const
Accessor to the coefficient of the quadratic term.
Definition: MnParabola.h:127
ROOT::Minuit2::MnParabola::C
double C() const
Accessor to the coefficient of the constant term.
Definition: MnParabola.h:147
ROOT::Minuit2::MnParabola::YMin
double YMin() const
Calculates the y coordinate of the Minimum of the parabola.
Definition: MnParabola.h:117
ROOT::Minuit2::MnParabola::Min
double Min() const
Calculates the x coordinate of the Minimum of the parabola.
Definition: MnParabola.h:107
x
Double_t x[n]
Definition: legend1.C:17
ROOT::Minuit2::MnParabola::X_neg
double X_neg(double y) const
Calculates the smaller of the two x values corresponding to the given y Value.
Definition: MnParabola.h:97
ROOT::Minuit2::MnParabola::fB
double fB
Definition: MnParabola.h:151
ROOT::Minuit2::MnParabola::~MnParabola
~MnParabola()
Definition: MnParabola.h:45
b
#define b(i)
Definition: RSha256.hxx:100
ROOT::Minuit2::MnParabola::X_pos
double X_pos(double y) const
Calculates the bigger of the two x values corresponding to the given y Value.
Definition: MnParabola.h:77
ROOT::Minuit2::MnParabola::fC
double fC
Definition: MnParabola.h:152
a
auto * a
Definition: textangle.C:12
ROOT::Minuit2::MnParabola::MnParabola
MnParabola(double a, double b, double c)
Constructor that initializes the parabola with its three parameters.
Definition: MnParabola.h:43
y
Double_t y[n]
Definition: legend1.C:17
sqrt
double sqrt(double)
ROOT::Minuit2::MnParabola::B
double B() const
Accessor to the coefficient of the linear term.
Definition: MnParabola.h:137
ROOT::Minuit2::MnParabola
This class defines a parabola of the form a*x*x + b*x + c.
Definition: MnParabola.h:30
ROOT::Minuit2::MnParabola::fA
double fA
Definition: MnParabola.h:150
ROOT
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
Definition: EExecutionPolicy.hxx:4
ROOT::Minuit2::MnParabola::Y
double Y(double x) const
Evaluates the parabola a the point x.
Definition: MnParabola.h:57