Skip to content

Commit 499f4f4

Browse files
committed
[Minuit2] Don't check parameter limits in AnalyticalGradientCalculator
Different code branches for limits and no limits are redundant in the AnalyticalGradientCalculator, because `DInt2Ext` already does that internally. It's better to simplify the code to reduce the margin for error. (cherry picked from commit f842f2a)
1 parent 4a98c31 commit 499f4f4

File tree

1 file changed

+8
-26
lines changed

1 file changed

+8
-26
lines changed

math/minuit2/src/AnalyticalGradientCalculator.cxx

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,8 @@ FunctionGradient AnalyticalGradientCalculator::operator()(const MinimumParameter
3030
MnAlgebraicVector v(par.Vec().size());
3131
for (unsigned int i = 0; i < par.Vec().size(); i++) {
3232
unsigned int ext = fTransformation.ExtOfInt(i);
33-
if (fTransformation.Parameter(ext).HasLimits()) {
34-
double dd = fTransformation.DInt2Ext(i, par.Vec()(i));
35-
v(i) = dd * grad[ext];
36-
} else {
37-
v(i) = grad[ext];
38-
}
33+
double dd = fTransformation.DInt2Ext(i, par.Vec()(i));
34+
v(i) = dd * grad[ext];
3935
}
4036

4137
MnPrint print("AnalyticalGradientCalculator");
@@ -86,16 +82,10 @@ bool AnalyticalGradientCalculator::Hessian(const MinimumParameters &par, MnAlgeb
8682
// we need now to transform the matrix from external to internal coordinates
8783
for (unsigned int i = 0; i < n; i++) {
8884
unsigned int iext = fTransformation.ExtOfInt(i);
89-
double dxdi = 1.;
90-
if (fTransformation.Parameters()[iext].HasLimits()) {
91-
dxdi = fTransformation.DInt2Ext(i, par.Vec()(i));
92-
}
85+
double dxdi = fTransformation.DInt2Ext(i, par.Vec()(i));
9386
for (unsigned int j = i; j < n; j++) {
94-
double dxdj = 1.;
87+
double dxdj = fTransformation.DInt2Ext(j, par.Vec()(j));
9588
unsigned int jext = fTransformation.ExtOfInt(j);
96-
if (fTransformation.Parameters()[jext].HasLimits()) {
97-
dxdj = fTransformation.DInt2Ext(j, par.Vec()(j));
98-
}
9989
hmat(i, j) = dxdi * extHessian[iext*next+ jext] * dxdj;
10090
}
10191
}
@@ -120,12 +110,8 @@ bool AnalyticalGradientCalculator::G2(const MinimumParameters &par, MnAlgebraicV
120110
assert(extG2.size() == fTransformation.Parameters().size());
121111
for (unsigned int i = 0; i < n; i++) {
122112
const unsigned int iext = fTransformation.ExtOfInt(i);
123-
if (fTransformation.Parameters()[iext].HasLimits()) {
124-
const double dxdi = fTransformation.DInt2Ext(i, par.Vec()(i));
125-
g2(i) = dxdi * dxdi * extG2[iext];
126-
} else {
127-
g2(i) = extG2[iext];
128-
}
113+
const double dxdi = fTransformation.DInt2Ext(i, par.Vec()(i));
114+
g2(i) = dxdi * dxdi * extG2[iext];
129115
}
130116
return true;
131117
}
@@ -154,12 +140,8 @@ bool AnalyticalGradientCalculator::G2(const MinimumParameters &par, MnAlgebraicV
154140
for (unsigned int i = 0; i < n; i++) {
155141
const unsigned int iext = fTransformation.ExtOfInt(i);
156142
const double diag = extHessian[iext * nExt + iext];
157-
if (fTransformation.Parameters()[iext].HasLimits()) {
158-
const double dxdi = fTransformation.DInt2Ext(i, par.Vec()(i));
159-
g2(i) = dxdi * dxdi * diag;
160-
} else {
161-
g2(i) = diag;
162-
}
143+
const double dxdi = fTransformation.DInt2Ext(i, par.Vec()(i));
144+
g2(i) = dxdi * dxdi * diag;
163145
}
164146
return true;
165147
}

0 commit comments

Comments
 (0)