CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
TwoTrackMassKinematicConstraint Class Reference

#include <TwoTrackMassKinematicConstraint.h>

Inheritance diagram for TwoTrackMassKinematicConstraint:
MultiTrackKinematicConstraint

Public Member Functions

TwoTrackMassKinematicConstraintclone () const override
 
int numberOfEquations () const override
 
AlgebraicMatrix parametersDerivative (const std::vector< KinematicState > &states, const GlobalPoint &point) const override
 
AlgebraicMatrix positionDerivative (const std::vector< KinematicState > &states, const GlobalPoint &point) const override
 
 TwoTrackMassKinematicConstraint (ParticleMass &ms)
 
AlgebraicVector value (const std::vector< KinematicState > &states, const GlobalPoint &point) const override
 
- Public Member Functions inherited from MultiTrackKinematicConstraint
 MultiTrackKinematicConstraint ()
 
virtual ~MultiTrackKinematicConstraint ()
 

Private Attributes

ParticleMass mass
 

Detailed Description

Class implementing the total mass of 2 tracks constraint. I.e. 2 first particles out of four passed form a given mass

Warning: the tracks to constraint should be 1st and 2nd from the beginning of the vector.

Definition at line 21 of file TwoTrackMassKinematicConstraint.h.

Constructor & Destructor Documentation

TwoTrackMassKinematicConstraint::TwoTrackMassKinematicConstraint ( ParticleMass ms)
inline

Member Function Documentation

TwoTrackMassKinematicConstraint* TwoTrackMassKinematicConstraint::clone ( void  ) const
inlineoverridevirtual
int TwoTrackMassKinematicConstraint::numberOfEquations ( ) const
overridevirtual

Number of equations per track used for the fit

Implements MultiTrackKinematicConstraint.

Definition at line 128 of file TwoTrackMassKinematicConstraint.cc.

Referenced by TwoTrackMassKinematicConstraint().

129 {return 1;}
AlgebraicMatrix TwoTrackMassKinematicConstraint::parametersDerivative ( const std::vector< KinematicState > &  states,
const GlobalPoint point 
) const
overridevirtual

Returns a matrix of derivatives of constraint equations w.r.t. particle parameters

Implements MultiTrackKinematicConstraint.

Definition at line 39 of file TwoTrackMassKinematicConstraint.cc.

References reco::e1, reco::e2, p1, p2, mathSSE::sqrt(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by TwoTrackMassKinematicConstraint().

41 {
42  int n_st = states.size();
43  if(n_st<2) throw VertexException("TwoTrackMassKinematicConstraint::<2 states passed");
44 
45  AlgebraicMatrix res(1,n_st*7,0);
46 
47  double a_1 = -states[0].particleCharge() * states[0].magneticField()->inInverseGeV(states[0].globalPosition()).z();
48  double a_2 = -states[1].particleCharge() * states[1].magneticField()->inInverseGeV(states[1].globalPosition()).z();
49 
50  AlgebraicVector7 p1 = states[0].kinematicParameters().vector();
51  AlgebraicVector7 p2 = states[1].kinematicParameters().vector();
52 
53  double p1vx = p1(3) - a_1*(point.y() - p1(1));
54  double p1vy = p1(4) + a_1*(point.x() - p1(0));
55  double p1vz = p1(5);
56  ParticleMass m1 = p1(6);
57 
58  double p2vx = p2(3) - a_2*(point.y() - p2(1));
59  double p2vy = p2(4) + a_2*(point.x() - p2(0));
60  double p2vz = p2(5);
61  ParticleMass m2 = p2(6);
62 
63  double e1 = sqrt(p1(3)*p1(3)+p1(4)*p1(4)+p1(5)*p1(5)+m1*m1);
64  double e2 = sqrt(p2(3)*p2(3)+p2(4)*p2(4)+p2(5)*p2(5)+m2*m2);
65 
66 
67 //x1 and x2 derivatives: 1st and 8th elements
68  res(1,1) = 2*a_1*(p2vy + p1vy);
69  res(1,8) = 2*a_2*(p2vy + p1vy);
70 
71 //y1 and y2 derivatives: 2nd and 9th elements:
72  res(1,2) = -2*a_1*(p1vx + p2vx);
73  res(1,9) = -2*a_2*(p2vx + p1vx);
74 
75 //z1 and z2 components: 3d and 10th elmnets stay 0:
76  res(1,3) = 0.;
77  res(1,10) = 0.;
78 
79 //px1 and px2 components: 4th and 11th elements:
80  res(1,4) = 2*(1+e2/e1)*p1(3) - 2*(p1vx + p2vx);
81  res(1,11) = 2*(1+e1/e2)*p2(3) - 2*(p1vx + p2vx);
82 
83 //py1 and py2 components: 5th and 12 elements:
84  res(1,5) = 2*(1+e2/e1)*p1(4) - 2*(p1vy + p2vy);
85  res(1,12) = 2*(1+e1/e2)*p2(4) - 2*(p2vy + p1vy);
86 
87 //pz1 and pz2 components: 6th and 13 elements:
88  res(1,6) = 2*(1+e2/e1)*p1(5)- 2*(p1vz + p2vz);
89  res(1,13) = 2*(1+e1/e2)*p2(5)- 2*(p2vz + p1vz);
90 
91 //mass components: 7th and 14th elements:
92  res(1,7) = 2*m1*(1+e2/e1);
93  res(1,14) = 2*m2*(1+e1/e2);
94 
95  return res;
96 }
Common base class.
double ParticleMass
Definition: ParticleMass.h:5
T y() const
Definition: PV3DBase.h:63
Definition: Electron.h:6
ROOT::Math::SVector< double, 7 > AlgebraicVector7
Definition: Matrices.h:8
CLHEP::HepMatrix AlgebraicMatrix
T sqrt(T t)
Definition: SSEVec.h:18
double p2[4]
Definition: TauolaWrapper.h:90
Float e1
Definition: deltaR.h:20
Float e2
Definition: deltaR.h:21
double p1[4]
Definition: TauolaWrapper.h:89
T x() const
Definition: PV3DBase.h:62
AlgebraicMatrix TwoTrackMassKinematicConstraint::positionDerivative ( const std::vector< KinematicState > &  states,
const GlobalPoint point 
) const
overridevirtual

Returns a matrix of derivatives of constraint equations w.r.t. vertex position

Implements MultiTrackKinematicConstraint.

Definition at line 98 of file TwoTrackMassKinematicConstraint.cc.

References p1, p2, PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by TwoTrackMassKinematicConstraint().

100 {
101  AlgebraicMatrix res(1,3,0);
102  if(states.size()<2) throw VertexException("TwoTrackMassKinematicConstraint::<2 states passed");
103 
104  double a_1 = -states[0].particleCharge() * states[0].magneticField()->inInverseGeV(states[0].globalPosition()).z();
105  double a_2 = -states[1].particleCharge() * states[1].magneticField()->inInverseGeV(states[1].globalPosition()).z();
106 
107  AlgebraicVector7 p1 = states[0].kinematicParameters().vector();
108  AlgebraicVector7 p2 = states[1].kinematicParameters().vector();
109 
110  double p1vx = p1(3) - a_1*(point.y() - p1(1));
111  double p1vy = p1(4) + a_1*(point.x() - p1(0));
112 
113  double p2vx = p2(3) - a_2*(point.y() - p2(1));
114  double p2vy = p2(4) + a_2*(point.x() - p2(0));
115 
116 //xv component
117  res(1,1) = -2*(p1vy + p2vy)*(a_1+a_2);
118 
119 //yv component
120  res(1,2) = 2*(p1vx + p2vx)*(a_1+a_2);
121 
122 //zv component
123  res(1,3) = 0.;
124 
125  return res;
126 }
Common base class.
T y() const
Definition: PV3DBase.h:63
Definition: Electron.h:6
ROOT::Math::SVector< double, 7 > AlgebraicVector7
Definition: Matrices.h:8
CLHEP::HepMatrix AlgebraicMatrix
double p2[4]
Definition: TauolaWrapper.h:90
double p1[4]
Definition: TauolaWrapper.h:89
T x() const
Definition: PV3DBase.h:62
AlgebraicVector TwoTrackMassKinematicConstraint::value ( const std::vector< KinematicState > &  states,
const GlobalPoint point 
) const
overridevirtual

Returns a vector of values of constraint equations at the point where the input particles are defined.

Implements MultiTrackKinematicConstraint.

Definition at line 5 of file TwoTrackMassKinematicConstraint.cc.

References mass, p1, p2, mathSSE::sqrt(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by TwoTrackMassKinematicConstraint().

7 {
8  if(states.size()<2) throw VertexException("TwoTrackMassKinematicConstraint::<2 states passed");
9 
10  AlgebraicVector res(1,0);
11 
12  double a_1 = -states[0].particleCharge() * states[0].magneticField()->inInverseGeV(states[0].globalPosition()).z();
13  double a_2 = -states[1].particleCharge() * states[1].magneticField()->inInverseGeV(states[1].globalPosition()).z();
14 
15  AlgebraicVector7 p1 = states[0].kinematicParameters().vector();
16  AlgebraicVector7 p2 = states[1].kinematicParameters().vector();
17 
18  double p1vx = p1(3) - a_1*(point.y() - p1(1));
19  double p1vy = p1(4) + a_1*(point.x() - p1(0));
20  double p1vz = p1(5);
21  ParticleMass m1 = p1(6);
22 
23  double p2vx = p2(3) - a_2*(point.y() - p2(1));
24  double p2vy = p2(4) + a_2*(point.x() - p2(0));
25  double p2vz = p2(5);
26  ParticleMass m2 = p2(6);
27 
28  double j_energy = sqrt(p1(3)*p1(3)+p1(4)*p1(4)+p1(5)*p1(5)+m1*m1)+
29  sqrt(p2(3)*p2(3)+p2(4)*p2(4)+p2(5)*p2(5)+m2*m2) ;
30 
31 
32  double j_m = (p1vx+p2vx)*(p1vx+p2vx) + (p1vy+p2vy)*(p1vy+p2vy) +
33  (p1vz+p2vz)*(p1vz+p2vz);
34 
35  res(1) = j_energy*j_energy - j_m - mass*mass;
36  return res;
37 }
Common base class.
double ParticleMass
Definition: ParticleMass.h:5
T y() const
Definition: PV3DBase.h:63
Definition: Electron.h:6
ROOT::Math::SVector< double, 7 > AlgebraicVector7
Definition: Matrices.h:8
T sqrt(T t)
Definition: SSEVec.h:18
double p2[4]
Definition: TauolaWrapper.h:90
CLHEP::HepVector AlgebraicVector
double p1[4]
Definition: TauolaWrapper.h:89
T x() const
Definition: PV3DBase.h:62

Member Data Documentation

ParticleMass TwoTrackMassKinematicConstraint::mass
private