Belle II Software development
Constraint Class Reference

class to manage the order of constraints and their filtering More...

#include <Constraint.h>

Inheritance diagram for Constraint:
MergedConstraint

Public Types

enum  Type {
  unknown = 0 ,
  beamenergy ,
  beamspot ,
  beam ,
  origin ,
  lifetime ,
  resonance ,
  composite ,
  track ,
  photon ,
  klong ,
  conversion ,
  kinematic ,
  geometric ,
  mass ,
  massEnergy ,
  merged ,
  ntypes ,
  helix
}
 type of constraints the order of these constraints is important: it is the order in which they are applied. More...
 

Public Member Functions

bool operator< (const Constraint &rhs) const
 operator used to sort the constraints
 
bool operator== (const Constraint &rhs) const
 operator
 
Type type () const
 get type of constraint
 
unsigned int dim () const
 get dimension of constraint
 
bool isLinear () const
 is this a linear constraint
 
unsigned int nIter () const
 get maximum number of iterations for non in constraint
 
 Constraint ()
 constructor

 
 Constraint (const ParticleBase *node, Type type, int depth, unsigned int dim, int maxniter=1)
 constructor
 
virtual ~Constraint ()
 destructor
 
virtual ErrCode project (const FitParams &fitpar, Projection &p) const
 call the constraints projection function
 
virtual ErrCode filter (FitParams &fitpar)
 filter this constraint
 
virtual ErrCode filterWithReference (FitParams &fitpar, const FitParams &oldState)
 filter this constraint
 
std::string name () const
 get name of constraint

 
void setWeight (int w)
 used to be able to weight the constraints
 

Protected Member Functions

 Constraint (Constraint::Type type)
 constructor
 
void setDim (unsigned int d)
 set dimension of constraint
 
void setNIter (unsigned int d)
 set max number of iterations for non lin constraint

 

Private Attributes

const ParticleBasem_node
 particle behind the constraint

 
int m_depth
 chi2 coming from the constraint
 
Type m_type
 type of constraint
 
unsigned int m_dim
 dimension of constraint
 
int m_weight
 weight of this constraint currently we set them all to unity

 
int m_maxNIter
 maximum number of iterations for non-linear constraints

 

Detailed Description

class to manage the order of constraints and their filtering

Definition at line 20 of file Constraint.h.

Member Enumeration Documentation

◆ Type

enum Type

type of constraints the order of these constraints is important: it is the order in which they are applied.

Definition at line 27 of file Constraint.h.

27 { unknown = 0,
28 beamenergy,
29 beamspot,
30 beam,
31 origin,
32 lifetime,
33 resonance,
34 composite,
35 track,
36 photon,
37 klong,
38 conversion,
39 kinematic,
40 geometric,
41 mass,
42 massEnergy,
43 merged,
44 ntypes,
45 helix
46 };

Constructor & Destructor Documentation

◆ Constraint() [1/3]

Constraint ( )
inline

constructor

Definition at line 70 of file Constraint.h.

70 :
71 m_node(0),
72 m_depth(0),
73 m_type(unknown),
74 m_dim(0),
75 m_weight(0),
76 m_maxNIter(0) {}
Type m_type
type of constraint
Definition: Constraint.h:140
int m_weight
weight of this constraint currently we set them all to unity
Definition: Constraint.h:146
int m_depth
chi2 coming from the constraint
Definition: Constraint.h:137
unsigned int m_dim
dimension of constraint
Definition: Constraint.h:143
int m_maxNIter
maximum number of iterations for non-linear constraints
Definition: Constraint.h:149
const ParticleBase * m_node
particle behind the constraint
Definition: Constraint.h:131

◆ Constraint() [2/3]

Constraint ( const ParticleBase node,
Type  type,
int  depth,
unsigned int  dim,
int  maxniter = 1 
)
inline

constructor

Definition at line 79 of file Constraint.h.

83 :
84 m_node(node),
85 m_depth(depth),
86 m_type(type),
87 m_dim(dim),
88 m_weight(1),
89 m_maxNIter(maxniter) {}
unsigned int dim() const
get dimension of constraint
Definition: Constraint.h:61
Type type() const
get type of constraint
Definition: Constraint.h:58

◆ ~Constraint()

virtual ~Constraint ( )
inlinevirtual

destructor

Definition at line 92 of file Constraint.h.

92{}

◆ Constraint() [3/3]

Constraint ( Constraint::Type  type)
inlineexplicitprotected

constructor

Definition at line 114 of file Constraint.h.

114 :
115 m_node(0),
116 m_depth(0),
117 m_type(type),
118 m_dim(0),
119 m_weight(0),
120 m_maxNIter(0) {}

Member Function Documentation

◆ dim()

unsigned int dim ( ) const
inline

get dimension of constraint

Definition at line 61 of file Constraint.h.

61{ return m_dim; }

◆ filter()

ErrCode filter ( FitParams fitpar)
virtual

filter this constraint

We don't have reference state yet so we use the k-1 last state to linearize non-linear constraints

Definition at line 28 of file Constraint.cc.

29 {
34 ErrCode status;
35 Projection p(fitpar.getDimensionOfState(), m_dim);
36 KalmanCalculator kalman(m_dim, fitpar.getDimensionOfState());
37
38 double chisq(0);
39 int iter(0);
40 bool finished(false) ;
41
42 double accumulated_chi2 = 0;
43 while (!finished && !status.failure()) {
44
45 p.resetProjection();
46 status |= project(fitpar, p);
47
48 if (!status.failure()) {
49
50 status |= kalman.calculateGainMatrix(
51 p.getResiduals(),
52 p.getH(),
53 fitpar,
54 &p.getV(),
55 1
56 );
57
58 if (!status.failure()) {
59 kalman.updateState(fitpar);
60
61 // r R^-1 r
62 double newchisq = kalman.getChiSquare();
63
64 double dchisqconverged = 0.001 ;
65
66 double dchisq = newchisq - chisq;
67 bool diverging = iter > 0 && dchisq > 0;
68 bool converged = std::abs(dchisq) < dchisqconverged;
69 finished = ++iter >= m_maxNIter || diverging || converged;
70 chisq = newchisq;
71 accumulated_chi2 += newchisq;
72 }
73 }
74 }
75
76 const unsigned int number_of_constraints = kalman.getConstraintDim();
77 fitpar.addChiSquare(accumulated_chi2, number_of_constraints);
78
79 kalman.updateCovariance(fitpar);
80 return status;
81 }
virtual ErrCode project(const FitParams &fitpar, Projection &p) const
call the constraints projection function
Definition: Constraint.cc:23

◆ filterWithReference()

ErrCode filterWithReference ( FitParams fitpar,
const FitParams oldState 
)
virtual

filter this constraint

We now linearise around the last iteration $\alpha$ (const FitParams& oldState) In this implementation we can no longer linearize non-linear constraints but we ensured by the linearisation around the last state that the step size is small enough so we just use them as if they were linear

here we project the old state and use only the change with respect to the new state instead of the new state in the update . the advantage is more stable fit Downside: non-linear constraints can't be filtered multiple times anymore.

Definition at line 83 of file Constraint.cc.

84 {
91 ErrCode status;
92 Projection p(fitpar.getDimensionOfState(), m_dim);
93 KalmanCalculator kalman(m_dim, fitpar.getDimensionOfState());
94
95 p.resetProjection();
96 status |= project(oldState, p);
97
102 p.getResiduals() += p.getH() * (fitpar.getStateVector() - oldState.getStateVector());
103 if (!status.failure()) {
104 status |= kalman.calculateGainMatrix(
105 p.getResiduals(),
106 p.getH(),
107 fitpar,
108 &p.getV(),
109 1
110 );
111
112 if (!status.failure()) {
113 kalman.updateState(fitpar);
114 }
115 }
116
117 const unsigned int number_of_constraints = kalman.getConstraintDim();
118 fitpar.addChiSquare(kalman.getChiSquare(), number_of_constraints);
119
120 kalman.updateCovariance(fitpar);
121 return status;
122 }

◆ isLinear()

bool isLinear ( ) const
inline

is this a linear constraint

Definition at line 64 of file Constraint.h.

64{ return m_maxNIter <= 1; }

◆ name()

std::string name ( ) const

get name of constraint

Definition at line 124 of file Constraint.cc.

125 {
126 std::string rc = "unknown constraint!";
127 switch (m_type) {
128 case beamspot: rc = "beamspot"; break;
129 case beamenergy: rc = "beamenergy"; break;
130 case beam: rc = "beam"; break;
131 case origin: rc = "origin"; break;
132 case composite: rc = "composite"; break;
133 case resonance: rc = "resonance"; break;
134 case track: rc = "track"; break;
135 case photon: rc = "photon"; break;
136 case klong: rc = "klong"; break;
137 case kinematic: rc = "kinematic"; break;
138 case geometric: rc = "geometric"; break;
139 case mass: rc = "mass"; break;
140 case massEnergy: rc = "massEnergy"; break;
141 case lifetime: rc = "lifetime"; break;
142 case merged: rc = "merged"; break;
143 case conversion: rc = "conversion"; break;
144 case helix: rc = "helix"; break;
145 case ntypes:
146 case unknown:
147 break;
148 }
149 return rc;
150 }

◆ nIter()

unsigned int nIter ( ) const
inline

get maximum number of iterations for non in constraint

Definition at line 67 of file Constraint.h.

67{ return m_maxNIter; }

◆ operator<()

bool operator< ( const Constraint rhs) const

operator used to sort the constraints

Definition at line 17 of file Constraint.cc.

18 {
19 return m_depth < rhs.m_depth ||
20 (m_depth == rhs.m_depth && m_type < rhs.m_type);
21 }

◆ operator==()

bool operator== ( const Constraint rhs) const
inline

operator

Definition at line 52 of file Constraint.h.

53 {
54 return m_type == rhs.m_type;
55 }

◆ project()

ErrCode project ( const FitParams fitpar,
Projection p 
) const
virtual

call the constraints projection function

Reimplemented in MergedConstraint.

Definition at line 23 of file Constraint.cc.

24 {
25 return m_node->projectConstraint(m_type, fitpar, p);
26 }
virtual ErrCode projectConstraint(Constraint::Type, const FitParams &, Projection &) const
project constraint.

◆ setDim()

void setDim ( unsigned int  d)
inlineprotected

set dimension of constraint

Definition at line 123 of file Constraint.h.

123{ m_dim = d; }

◆ setNIter()

void setNIter ( unsigned int  d)
inlineprotected

set max number of iterations for non lin constraint

Definition at line 126 of file Constraint.h.

126{ m_maxNIter = d; }

◆ setWeight()

void setWeight ( int  w)
inline

used to be able to weight the constraints

Definition at line 109 of file Constraint.h.

109{ m_weight = w < 0 ? -1 : 1; }

◆ type()

Type type ( ) const
inline

get type of constraint

Definition at line 58 of file Constraint.h.

58{ return m_type; }

Member Data Documentation

◆ m_depth

int m_depth
private

chi2 coming from the constraint

depth of the constraint in the tree (determines for example the order of the track constraints)

Definition at line 137 of file Constraint.h.

◆ m_dim

unsigned int m_dim
private

dimension of constraint

Definition at line 143 of file Constraint.h.

◆ m_maxNIter

int m_maxNIter
private

maximum number of iterations for non-linear constraints

Definition at line 149 of file Constraint.h.

◆ m_node

const ParticleBase* m_node
private

particle behind the constraint

Definition at line 131 of file Constraint.h.

◆ m_type

Type m_type
private

type of constraint

Definition at line 140 of file Constraint.h.

◆ m_weight

int m_weight
private

weight of this constraint currently we set them all to unity

Definition at line 146 of file Constraint.h.


The documentation for this class was generated from the following files: