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: