FEDRA emulsion software from the OPERA Collaboration
VERTEX::MassC Class Reference

#include <VtMassC.hh>

Collaboration diagram for VERTEX::MassC:

Public Member Functions

— Constructors —
 MassC ()
 
 MassC (double m)
 construct from mass of mother particle More...
 
 ~MassC ()
 
— Access functions —
void push_back (Relation &r)
 add Track to mass constraint More...
 
void push_back (Relation *r)
 add Track to mass contraint More...
 
double mass () const
 get mass constraint More...
 
void mass (double m)
 set mass constraint More...
 
double galp () const
 constraint $\vec{g}(\vec{\alpha}^{(0)})$ More...
 

— Expert functions —

double m_mass
 
double m_SE
 
MATRIX::VtVector m_Sl
 
Rel_v m_rel
 
double m_galp
 
void print (std::ostream &os) const
 called by operator<<() More...
 
void calc_Sl ()
 compute mass constraint $\vec{g}(\vec{\alpha}^{(0)})$ More...
 
const bool check_kinematic () const
 check kinematic boundary More...
 
const MATRIX::VtVector gam (const Relation &) const
 return $\Gamma_{li}$ More...
 

Detailed Description

Mass Constraint class

Constructor & Destructor Documentation

◆ MassC() [1/2]

VERTEX::MassC::MassC ( )
42 :
43 m_mass(0.),
44 m_SE (0.),
46 m_galp(0.)
47 {}
Definition: VtVector.hh:45
double m_mass
Definition: VtMassC.hh:83
double m_SE
Definition: VtMassC.hh:84
MATRIX::VtVector m_Sl
Definition: VtMassC.hh:85
double m_galp
Definition: VtMassC.hh:87

◆ MassC() [2/2]

VERTEX::MassC::MassC ( double  m)

construct from mass of mother particle

49 :
50 m_mass(m),
51 m_SE (0.),
53 m_galp(0.)
54 {}

◆ ~MassC()

VERTEX::MassC::~MassC ( )
56 {
57 const Rel_cit end = m_rel.end();
58 for(Rel_cit it = m_rel.begin(); it != end; ++it)
59 (*it)->massc.remove(this);
60 }
Rel_v m_rel
Definition: VtMassC.hh:86
std::vector< Relation * >::const_iterator Rel_cit
Definition: VtMassC.hh:44

Member Function Documentation

◆ calc_Sl()

void VERTEX::MassC::calc_Sl ( )

compute mass constraint $\vec{g}(\vec{\alpha}^{(0)})$

90 {
91
92 m_SE = 0.;
93 m_Sl.clear();
94
95 // copute S_l^E, S_l (int Vt: eq. 41,42)
96 const Rel_cit end = m_rel.end();
97 for(Rel_cit it = m_rel.begin(); it != end; ++it) {
98 const Kalman& kal = (*it)->kalman;
99 double p = kal.alpc()[2];
100 m_SE += kal.erg(); // in Vt: SE
101 m_Sl[0] += p * kal.xn(); // in Vt: Sx
102 m_Sl[1] += p * kal.yn(); // in Vt: Sy
103 m_Sl[2] += p * kal.zn(); // in Vt: Sz
104 }
105
106 // compute g_l(alpha) (in Vt: eq. 43)
107 m_galp = sqr(m_SE) - m_Sl*m_Sl - sqr(m_mass);
108
109#ifdef VtDEBUG
110 cout << " m_mass: " << m_mass << endl;
111 cout << " SE: " << m_SE << endl;
112 cout << " Sx: " << m_Sl[0] << endl;
113 cout << " Sy: " << m_Sl[1] << endl;
114 cout << " Sz: " << m_Sl[2] << endl;
115 cout << " m_galp: " << m_galp << endl;
116#endif
117
118 return;
119 }
void clear(void)
set vector elements to 0
Definition: VtVector.C:282
const T sqr(const T &x)
compute the square of a number: $x*x$
Definition: VtUtil.hh:37
p
Definition: testBGReduction_AllMethods.C:8

◆ check_kinematic()

const bool VERTEX::MassC::check_kinematic ( ) const

check kinematic boundary

73 {
74 double sum = 0.;
75
76 // sum up rest-masses
77 const Rel_cit end = m_rel.end();
78 for(Rel_cit it = m_rel.begin(); it != end; ++it) {
79 sum += (*it)->track.rm();
80 }
81
82 // if sum of track rest-masses is greater than rest-mass of mother
83 // particle, something is wrong
84 return ((sqr(sum) - sqr(m_mass))>=0.) ? false : true;
85 }

◆ galp()

double VERTEX::MassC::galp ( ) const
inline

constraint $\vec{g}(\vec{\alpha}^{(0)})$

70{ return m_galp; }

◆ gam()

const VtVector VERTEX::MassC::gam ( const Relation rel) const

return $\Gamma_{li}$

124 {
125 const Kalman& kal = rel.kalman;
126 double p = kal.alpc()[2];
127
128 // vector dg_l/dalpha_i
129 VtVector gam(3);
130
131 double fac = -2. * p * kal.zn();
132
133 // compute eq. 44
134 VtVector nn(1.-sqr(kal.xn()), -kal.xn()*kal.yn(), -kal.xn()*kal.zn());
135 gam[0] = fac * (nn * m_Sl);
136
137 // comupte eq. 45
138 VtVector nm(-kal.xn()*kal.yn(), 1.-sqr(kal.yn()), -kal.yn()*kal.zn());
139 gam[1] = fac * (nm * m_Sl);
140
141 // compute eq. 43
142 gam[2] = 2. * (p * m_SE / kal.erg() - kal.nalpc() * m_Sl);
143
144#ifdef VtDEBUG
145 cout << " gam: " << gam << endl;
146#endif
147 return gam;
148 }
const MATRIX::VtVector gam(const Relation &) const
return $\Gamma_{li}$
Definition: VtMassC.C:124

◆ mass() [1/2]

double VERTEX::MassC::mass ( ) const
inline

get mass constraint

66{ return m_mass; }

◆ mass() [2/2]

void VERTEX::MassC::mass ( double  m)
inline

set mass constraint

68{ m_mass = m; }

◆ print()

void VERTEX::MassC::print ( std::ostream &  os) const

called by operator<<()

153 {
154 os.setf(ios::right,ios::adjustfield);
155 os.setf(ios::fixed,ios::floatfield);
156
157 os << "mass: " << mass() << ", no. of tracks: " << m_rel.size();
158 return;
159 }
double mass() const
get mass constraint
Definition: VtMassC.hh:66

◆ push_back() [1/2]

void VERTEX::MassC::push_back ( Relation r)
inline

add Track to mass constraint

62{ push_back(&r); }
void push_back(Relation &r)
add Track to mass constraint
Definition: VtMassC.hh:62
void r(int rid=2)
Definition: test.C:201

◆ push_back() [2/2]

void VERTEX::MassC::push_back ( Relation r)

add Track to mass contraint

65 {
66 m_rel.push_back(r);
67 r->massc.push_back(this);
68 }

Member Data Documentation

◆ m_galp

double VERTEX::MassC::m_galp
private

◆ m_mass

double VERTEX::MassC::m_mass
private

◆ m_rel

Rel_v VERTEX::MassC::m_rel
private

◆ m_SE

double VERTEX::MassC::m_SE
private

◆ m_Sl

MATRIX::VtVector VERTEX::MassC::m_Sl
private

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