Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:10:23

0001 // @(#)root/minuit2:$Id$
0002 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei, E.G.P. Bos   2003-2017
0003 
0004 /**********************************************************************
0005  *                                                                    *
0006  * Copyright (c) 2005 LCG ROOT Math team,  CERN/PH-SFT                *
0007  *                                                                    *
0008  **********************************************************************/
0009 
0010 #ifndef ROOT_Minuit2_ExternalInternalGradientCalculator
0011 #define ROOT_Minuit2_ExternalInternalGradientCalculator
0012 
0013 #include "Minuit2/AnalyticalGradientCalculator.h"
0014 
0015 namespace ROOT {
0016 
0017 namespace Minuit2 {
0018 
0019 class FCNGradientBase;
0020 class MnUserTransformation;
0021 
0022 /// Similar to the AnalyticalGradientCalculator, the ExternalInternalGradientCalculator
0023 /// supplies Minuit with an externally calculated gradient. The main difference is that
0024 /// ExternalInternalGradientCalculator expects that the external gradient calculator does
0025 /// things in Minuit2-internal parameter space, which means many int2ext and ext2int
0026 /// transformation steps are not necessary. This avoids loss of precision in some cases,
0027 /// where trigonometrically transforming parameters back and forth can lose a few bits of
0028 /// floating point precision on every pass.
0029 
0030 class ExternalInternalGradientCalculator : public AnalyticalGradientCalculator {
0031 
0032 public:
0033    ExternalInternalGradientCalculator(const FCNGradientBase &fcn, const MnUserTransformation &trafo)
0034       : AnalyticalGradientCalculator(fcn, trafo)
0035    {
0036    }
0037 
0038    ~ExternalInternalGradientCalculator() override {}
0039 
0040    FunctionGradient operator()(const MinimumParameters &) const override;
0041 
0042    FunctionGradient operator()(const MinimumParameters &, const FunctionGradient &) const override;
0043 };
0044 
0045 } // namespace Minuit2
0046 
0047 } // namespace ROOT
0048 
0049 #endif // ROOT_Minuit2_ExternalInternalGradientCalculator