Belle II Software  release-05-01-25
SoftGaussParticleConstraint.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 __SOFTGAUSSPARTICLECONSTRAINT_H
18 #define __SOFTGAUSSPARTICLECONSTRAINT_H
19 
20 #include<vector>
21 #include<cassert>
22 #include "analysis/OrcaKinFit/BaseSoftConstraint.h"
23 #include "analysis/OrcaKinFit/BaseFitObject.h"
24 
25 namespace Belle2 {
31  namespace OrcaKinFit {
32 
33  class ParticleFitObject;
34 
35 // Class SoftGaussParticleConstraint:
37 
74  class SoftGaussParticleConstraint: public BaseSoftConstraint {
75  public:
77  explicit SoftGaussParticleConstraint(double sigma_
78  );
80  virtual ~SoftGaussParticleConstraint() {};
81 
83  virtual void setFOList(std::vector <ParticleFitObject*>* fitobjects_
84  )
85  {
86  for (int i = 0; i < (int) fitobjects_->size(); i++) {
87  fitobjects.push_back((*fitobjects_)[i]);
88  flags.push_back(1);
89  }
90  };
92  virtual void addToFOList(ParticleFitObject& fitobject, int flag = 1
93  )
94  {
95  fitobjects.push_back(&fitobject);
96  flags.push_back(flag);
97  };
99  virtual void resetFOList()
100  {
101  fitobjects.resize(0);
102  flags.resize(0);
103  };
104 
106  virtual double getValue() const override = 0;
107 
109  virtual double getChi2() const override;
110 
112  virtual double getError() const override;
113 
115  virtual double getSigma() const;
116 
118  virtual double setSigma(double sigma_
119  );
120 
123  virtual void getDerivatives(int idim,
124  double der[]
125  ) const override = 0;
127  virtual void add2ndDerivativesToMatrix(double* M,
128  int idim
129  ) const override;
130 
132  virtual void addToGlobalChi2DerVector(double* y,
133  int idim
134  ) const override;
135 
136 
138  void invalidateCache() const {}
139 
140  void test1stDerivatives();
141  void test2ndDerivatives();
142 
144  double num1stDerivative(int ifo,
145  int ilocal,
146  double eps
147  );
149  double num2ndDerivative(int ifo1,
150  int ilocal1,
151  double eps1,
152  int ifo2,
153  int ilocal2,
154  double eps2
155  );
156 
157  int getVarBasis() const;
158 
159  protected:
160 
162  virtual bool secondDerivatives(int i,
163  int j,
164  double* derivatives
165  ) const = 0;
167  virtual bool firstDerivatives(int i,
168  double* derivatives
169  ) const = 0;
170 
171 
173  typedef std::vector <ParticleFitObject*> FitObjectContainer;
175  typedef FitObjectContainer::iterator FitObjectIterator;
177  typedef FitObjectContainer::const_iterator ConstFitObjectIterator;
181  std::vector <double> derivatives;
184  std::vector <int> flags;
185 
187  double sigma;
188 
189  enum { VAR_BASIS = BaseDefs::VARBASIS_EPXYZ }; // this means that the constraint knows about E,px,py,pz
190 
191  };
192 
193  }// end OrcaKinFit namespace
195 } // end Belle2 namespace
196 
197 #endif // __SOFTGAUSSPARTICLECONSTRAINT_H
Belle2::OrcaKinFit::SoftGaussParticleConstraint::resetFOList
virtual void resetFOList()
Resests ParticleFitObject list.
Definition: SoftGaussParticleConstraint.h:113
Belle2::OrcaKinFit::SoftGaussParticleConstraint::SoftGaussParticleConstraint
SoftGaussParticleConstraint(double sigma_)
Creates an empty SoftGaussParticleConstraint object.
Definition: SoftGaussParticleConstraint.cc:31
Belle2::OrcaKinFit::SoftGaussParticleConstraint::addToGlobalChi2DerVector
virtual void addToGlobalChi2DerVector(double *y, int idim) const override
Add derivatives of chi squared to global derivative matrix.
Definition: SoftGaussParticleConstraint.cc:243
Belle2::OrcaKinFit::SoftGaussParticleConstraint::getSigma
virtual double getSigma() const
Returns the sigma.
Definition: SoftGaussParticleConstraint.cc:37
Belle2::OrcaKinFit::SoftGaussParticleConstraint::addToFOList
virtual void addToFOList(ParticleFitObject &fitobject, int flag=1)
Adds one ParticleFitObject objects to the list.
Definition: SoftGaussParticleConstraint.h:106
Belle2::OrcaKinFit::SoftGaussParticleConstraint::add2ndDerivativesToMatrix
virtual void add2ndDerivativesToMatrix(double *M, int idim) const override
Adds second order derivatives to global covariance matrix M.
Definition: SoftGaussParticleConstraint.cc:91
Belle2::OrcaKinFit::SoftGaussParticleConstraint::FitObjectIterator
FitObjectContainer::iterator FitObjectIterator
Iterator through vector of pointers to ParticleFitObjects.
Definition: SoftGaussParticleConstraint.h:189
Belle2::OrcaKinFit::SoftGaussParticleConstraint::num2ndDerivative
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: SoftGaussParticleConstraint.cc:326
Belle2::OrcaKinFit::SoftGaussParticleConstraint::sigma
double sigma
The sigma of the Gaussian.
Definition: SoftGaussParticleConstraint.h:201
Belle2::OrcaKinFit::SoftGaussParticleConstraint::fitobjects
FitObjectContainer fitobjects
The FitObjectContainer.
Definition: SoftGaussParticleConstraint.h:193
Belle2::OrcaKinFit::SoftGaussParticleConstraint::getChi2
virtual double getChi2() const override
Returns the chi2.
Definition: SoftGaussParticleConstraint.cc:48
Belle2::OrcaKinFit::SoftGaussParticleConstraint::setSigma
virtual double setSigma(double sigma_)
Sets the sigma.
Definition: SoftGaussParticleConstraint.cc:42
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::OrcaKinFit::SoftGaussParticleConstraint::flags
std::vector< int > flags
The flags can be used to divide the FitObjectContainer into several subsets used for example to imple...
Definition: SoftGaussParticleConstraint.h:198
Belle2::OrcaKinFit::SoftGaussParticleConstraint::firstDerivatives
virtual bool firstDerivatives(int i, double *derivatives) const =0
First derivatives with respect to the 4-vector of Fit objects i; result false if all derivatives are ...
Belle2::OrcaKinFit::SoftGaussParticleConstraint::derivatives
std::vector< double > derivatives
The derivatives.
Definition: SoftGaussParticleConstraint.h:195
Belle2::OrcaKinFit::SoftGaussParticleConstraint::getError
virtual double getError() const override
Returns the error on the value of the constraint.
Definition: SoftGaussParticleConstraint.cc:54
Belle2::OrcaKinFit::SoftGaussParticleConstraint::getValue
virtual double getValue() const override=0
Returns the value of the constraint function.
Belle2::OrcaKinFit::SoftGaussParticleConstraint::getDerivatives
virtual void getDerivatives(int idim, double der[]) const override=0
Get first order derivatives.
Belle2::OrcaKinFit::SoftGaussParticleConstraint::setFOList
virtual void setFOList(std::vector< ParticleFitObject * > *fitobjects_)
Adds several ParticleFitObject objects to the list.
Definition: SoftGaussParticleConstraint.h:97
Belle2::OrcaKinFit::SoftGaussParticleConstraint::num1stDerivative
double num1stDerivative(int ifo, int ilocal, double eps)
Evaluates numerically the 1st derivative w.r.t. a parameter.
Definition: SoftGaussParticleConstraint.cc:312
Belle2::OrcaKinFit::SoftGaussParticleConstraint::secondDerivatives
virtual bool secondDerivatives(int i, int j, double *derivatives) const =0
Second derivatives with respect to the 4-vectors of Fit objects i and j; result false if all derivati...
Belle2::OrcaKinFit::SoftGaussParticleConstraint::invalidateCache
void invalidateCache() const
Invalidates any cached values for the next event.
Definition: SoftGaussParticleConstraint.h:152
Belle2::OrcaKinFit::SoftGaussParticleConstraint::ConstFitObjectIterator
FitObjectContainer::const_iterator ConstFitObjectIterator
Constant iterator through vector of pointers to ParticleFitObjects.
Definition: SoftGaussParticleConstraint.h:191
Belle2::OrcaKinFit::SoftGaussParticleConstraint::FitObjectContainer
std::vector< ParticleFitObject * > FitObjectContainer
Vector of pointers to ParticleFitObjects.
Definition: SoftGaussParticleConstraint.h:187
Belle2::OrcaKinFit::SoftGaussParticleConstraint::~SoftGaussParticleConstraint
virtual ~SoftGaussParticleConstraint()
Virtual destructor.
Definition: SoftGaussParticleConstraint.h:94