Belle II Software  release-05-02-19
BaseHardConstraint.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * See https://github.com/tferber/OrcaKinfit, forked from *
4  * https://github.com/iLCSoft/MarlinKinfit *
5  * *
6  * Further information about the fit engine and the user interface *
7  * provided in MarlinKinfit can be found at *
8  * https://www.desy.de/~blist/kinfit/doc/html/ *
9  * and in the LCNotes LC-TOOL-2009-001 and LC-TOOL-2009-004 available *
10  * from http://www-flc.desy.de/lcnotes/ *
11  * *
12  * Adopted by: Torben Ferber (torben.ferber@desy.de) (TF) *
13  * *
14  * This software is provided "as is" without any warranty. *
15  **************************************************************************/
16 
17 #ifndef __BASEHARDCONSTRAINT_H
18 #define __BASEHARDCONSTRAINT_H
19 
20 #include "analysis/OrcaKinFit/BaseDefs.h"
21 #include "analysis/OrcaKinFit/BaseConstraint.h"
22 #include "analysis/OrcaKinFit/BaseFitObject.h"
23 
24 #include <vector>
25 
26 namespace Belle2 {
32  namespace OrcaKinFit {
33 
34  class BaseFitObject;
35 
36 // Class BasehardConstraint:
38 
75  class BaseHardConstraint: public BaseConstraint {
76  public:
77 
78  inline BaseHardConstraint();
79 
81  virtual ~BaseHardConstraint();
82 
84  virtual void add1stDerivativesToMatrix(double* M,
85  int idim
86  ) const;
87 
89  virtual void add2ndDerivativesToMatrix(double* M,
90  int idim,
91  double lambda
92  ) const;
94  virtual void addToGlobalChi2DerVector(double* y,
95  int idim,
96  double lambda //< The lambda value
97  ) const;
99  virtual double dirDer(double* p,
100  double* w,
101  int idim,
102  double mu = 1
103  );
104 
106  virtual double dirDerAbs(double* p,
107  double* w,
108  int idim,
109  double mu = 1
110  );
111 
113  virtual bool secondDerivatives(int i,
114  int j,
115  double* derivatives
116  ) const = 0;
118  virtual bool firstDerivatives(int i,
119  double* derivatives
120  ) const = 0;
121 
122  virtual int getVarBasis() const = 0;
123 
125  virtual double getValue() const override = 0;
126 
128  virtual double getError() const override;
129 
132  virtual void getDerivatives(int idim,
133  double der[]
134  ) const override = 0;
135 
137  virtual int getGlobalNum() const
138  {return globalNum;}
140  virtual void setGlobalNum(int iglobal
141  )
142  {globalNum = iglobal;}
143 
144  virtual void printFirstDerivatives() const;
145  virtual void printSecondDerivatives() const;
146 
147  virtual void test1stDerivatives();
148  virtual void test2ndDerivatives();
149 
151  virtual double num1stDerivative(int ifo,
152  int ilocal,
153  double eps
154  );
156  virtual double num2ndDerivative(int ifo1,
157  int ilocal1,
158  double eps1,
159  int ifo2,
160  int ilocal2,
161  double eps2
162  );
163 
164 
165 
166 
167 
168  protected:
169 
171  typedef std::vector <BaseFitObject*> FitObjectContainer;
173  typedef FitObjectContainer::iterator FitObjectIterator;
175  typedef FitObjectContainer::const_iterator ConstFitObjectIterator;
179  std::vector <double> derivatives;
182  std::vector <int> flags;
183 
186 
187  };
188 
189  BaseHardConstraint::BaseHardConstraint()
190  : fitobjects(FitObjectContainer()), derivatives(std::vector <double> ()), flags(std::vector <int> ()), globalNum(0)
191  {
192  }
193 
194  }// end OrcaKinFit namespace
196 } // end Belle2 namespace
197 
198 #endif // __BASEHARDCONSTRAINT_H
Belle2::OrcaKinFit::BaseHardConstraint::ConstFitObjectIterator
FitObjectContainer::const_iterator ConstFitObjectIterator
Constant iterator through vector of pointers to ParticleFitObjects.
Definition: BaseHardConstraint.h:189
Belle2::OrcaKinFit::BaseHardConstraint::getDerivatives
virtual void getDerivatives(int idim, double der[]) const override=0
Get first order derivatives.
Belle2::OrcaKinFit::BaseHardConstraint::add2ndDerivativesToMatrix
virtual void add2ndDerivativesToMatrix(double *M, int idim, double lambda) const
Adds second order derivatives to global covariance matrix M.
Definition: BaseHardConstraint.cc:89
Belle2::OrcaKinFit::BaseHardConstraint::derivatives
std::vector< double > derivatives
The derivatives.
Definition: BaseHardConstraint.h:193
Belle2::OrcaKinFit::BaseHardConstraint::num1stDerivative
virtual double num1stDerivative(int ifo, int ilocal, double eps)
Evaluates numerically the 1st derivative w.r.t. a parameter.
Definition: BaseHardConstraint.cc:316
Belle2::OrcaKinFit::BaseHardConstraint::FitObjectContainer
std::vector< BaseFitObject * > FitObjectContainer
Vector of pointers to ParticleFitObjects.
Definition: BaseHardConstraint.h:185
Belle2::OrcaKinFit::BaseHardConstraint::addToGlobalChi2DerVector
virtual void addToGlobalChi2DerVector(double *y, int idim, double lambda) const
Add lambda times derivatives of chi squared to global derivative vector.
Definition: BaseHardConstraint.cc:213
Belle2::OrcaKinFit::BaseHardConstraint::getError
virtual double getError() const override
Returns the error on the value of the constraint.
Definition: BaseHardConstraint.cc:226
Belle2::OrcaKinFit::BaseHardConstraint::globalNum
int globalNum
Position of constraint in global constraint list.
Definition: BaseHardConstraint.h:199
Belle2::OrcaKinFit::BaseHardConstraint::fitobjects
FitObjectContainer fitobjects
The FitObjectContainer.
Definition: BaseHardConstraint.h:191
Belle2::OrcaKinFit::BaseHardConstraint::num2ndDerivative
virtual double num2ndDerivative(int ifo1, int ilocal1, double eps1, int ifo2, int ilocal2, double eps2)
Evaluates numerically the 2nd derivative w.r.t. 2 parameters.
Definition: BaseHardConstraint.cc:330
Belle2::OrcaKinFit::BaseHardConstraint::getGlobalNum
virtual int getGlobalNum() const
Accesses position of constraint in global constraint list.
Definition: BaseHardConstraint.h:151
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::OrcaKinFit::BaseHardConstraint::secondDerivatives
virtual bool secondDerivatives(int i, int j, double *derivatives) const =0
Second derivatives with respect to the meta-variables of Fit objects i and j; result false if all der...
Belle2::OrcaKinFit::BaseHardConstraint::FitObjectIterator
FitObjectContainer::iterator FitObjectIterator
Iterator through vector of pointers to ParticleFitObjects.
Definition: BaseHardConstraint.h:187
Belle2::OrcaKinFit::BaseHardConstraint::dirDer
virtual double dirDer(double *p, double *w, int idim, double mu=1)
Calculate directional derivative.
Definition: BaseHardConstraint.cc:241
Belle2::OrcaKinFit::BaseHardConstraint::setGlobalNum
virtual void setGlobalNum(int iglobal)
Sets position of constraint in global constraint list.
Definition: BaseHardConstraint.h:154
Belle2::OrcaKinFit::BaseHardConstraint::flags
std::vector< int > flags
The flags can be used to divide the FitObjectContainer into several subsets used for example to imple...
Definition: BaseHardConstraint.h:196
Belle2::OrcaKinFit::BaseHardConstraint::firstDerivatives
virtual bool firstDerivatives(int i, double *derivatives) const =0
First derivatives with respect to the meta-variables of Fit objects i; result false if all derivative...
Belle2::OrcaKinFit::BaseHardConstraint::add1stDerivativesToMatrix
virtual void add1stDerivativesToMatrix(double *M, int idim) const
Adds first order derivatives to global covariance matrix M.
Definition: BaseHardConstraint.cc:51
Belle2::OrcaKinFit::BaseHardConstraint::~BaseHardConstraint
virtual ~BaseHardConstraint()
Virtual destructor.
Belle2::OrcaKinFit::BaseHardConstraint::getValue
virtual double getValue() const override=0
Returns the value of the constraint.
Belle2::OrcaKinFit::BaseHardConstraint::dirDerAbs
virtual double dirDerAbs(double *p, double *w, int idim, double mu=1)
Calculate directional derivative for abs(c)
Definition: BaseHardConstraint.cc:251