#include <Ext_errmx.h>
Inheritance diagram for Ext_errmx:
Public Member Functions | |
Ext_errmx (const HepSymMatrix &err) | |
Ext_errmx (const Ext_errmx &errmx) | |
Ext_errmx () | |
Ext_errmx (const HepSymMatrix &err) | |
Ext_errmx (const Ext_errmx &errmx) | |
Ext_errmx () | |
const HepSymMatrix & | get_err () const |
const HepSymMatrix & | get_err () const |
double | get_plane_err (const Hep3Vector &np, const Hep3Vector &nr) const |
double | get_plane_err (const Hep3Vector &np, const Hep3Vector &nr) const |
const HepVector & | get_plane_errs (const Hep3Vector &np, const Hep3Vector &nr, const Hep3Vector &nt) const |
const HepVector & | get_plane_errs (const Hep3Vector &np, const Hep3Vector &nr, const Hep3Vector &nt) const |
const Hep3Vector * | get_tvs (const Hep3Vector &pv) const |
const Hep3Vector * | get_tvs (const int view, const Hep3Vector &pv) const |
const Hep3Vector * | get_tvs (const Hep3Vector &pv) const |
const Hep3Vector * | get_tvs (const int view, const Hep3Vector &pv) const |
Ext_errmx & | operator= (const Ext_errmx &errmx) |
Ext_errmx & | operator= (const Ext_errmx &errmx) |
void | put_err (const HepSymMatrix &err) |
void | put_err (const double error[]) |
void | put_err (const HepSymMatrix &err) |
void | put_err (const double error[]) |
bool | valid (bool msg) const |
bool | valid (bool msg) const |
virtual | ~Ext_errmx () |
virtual | ~Ext_errmx () |
Protected Member Functions | |
void | set_plane_errs (const Hep3Vector &nx, const Hep3Vector &ny, const Hep3Vector &nz) const |
void | set_plane_errs (const Hep3Vector &nx, const Hep3Vector &ny, const Hep3Vector &nz) const |
Protected Attributes | |
HepSymMatrix | m_err |
Private Attributes | |
HepVector | m_err2 |
HepSymMatrix | m_err3 |
Hep3Vector | m_nv [2] |
HepMatrix | m_R |
bool | m_valid |
Friends | |
std::ostream & | operator<< (std::ostream &s, const Ext_errmx &errmx) |
std::ostream & | operator<< (std::ostream &s, const Ext_errmx &errmx) |
|
|
|
00034 : m_err(err.m_err), 00035 m_err3(err.m_err3), m_R(err.m_R), m_err2(err.m_err2), 00036 m_valid(err.m_valid) {}
|
|
|
|
00049 {};
|
|
|
|
|
|
|
|
00049 {};
|
|
|
|
00157 {
00158 return m_err;
00159 }
|
|
|
|
00095 { 00096 00097 // Check the validity of the error matrix. 00098 00099 if( !(*this).valid( 0 ) ){ 00100 //std::cout << "%WARNING at Ext_get_plane_err: You are trying to calculate" 00101 // << " error \n using an invalid error matrix." << std::endl; 00102 } 00103 00104 // Construct 3 TCS axes. 00105 00106 // x: nx --- unit vector which is perp to np and on the plane of nr and np. 00107 // y: nz x nx 00108 // z: nz( = np ) --- direction of the track. 00109 00110 double nr_np( nr*np ); 00111 double denom( 1.0 - nr_np*nr_np ); 00112 double error( 0.0 ); 00113 00114 if( denom > Eps ){ // Track is not parallel to the readout direction. 00115 00116 double fac( 1.0 / sqrt( denom ) ); 00117 Hep3Vector nx( ( nr - nr_np * np ) * fac ); 00118 Hep3Vector ny( np.cross( nx ) ); 00119 00120 (*this).set_plane_errs( nx, ny, np ); 00121 00122 double sigma2( m_err3( 1, 1 ) ); // Error along nx. 00123 if( sigma2 > 0 ){ 00124 error = sqrt( sigma2 ) * fac; // Error projection. 00125 } 00126 00127 } else { // Track is parallel to the readout direction. 00128 00129 error = Infinite; 00130 00131 } 00132 return( error ); 00133 }
|
|
Get the 2D projected error vector on the detector plane. {itemize} np: track direction unit vector. nr: readout direction unit vector. nt: ( np x nr ) unit vector. HepVector(1)= error(sigma) along the nr. HepVector(2)= error(sigma) along the nt. {itemize} |
|
Get the 2D projected error vector on the detector plane. {itemize} np: track direction unit vector. nr: readout direction unit vector. nt: ( np x nr ) unit vector. HepVector(1)= error(sigma) along the nr. HepVector(2)= error(sigma) along the nt. {itemize} 00151 { 00152 00153 // Check the validity of the error matrix. 00154 00155 if( !(*this).valid( 1 ) ){ 00156 // std::cout << "%WARNING at Ext_get_plane_errs: You are trying to calculate" 00157 // << " error \n using an invalid error matrix." << std::endl; 00158 } 00159 00160 double nr_np( nr*np ); 00161 double denom_r( 1.0 - nr_np*nr_np ); 00162 00163 if( denom_r > Eps ){ // nr is not parallel to the track direction: np. 00164 00165 double nt_np( nt*np ); 00166 double denom_t( 1.0 - nt_np*nt_np ); 00167 double fac_r( 1.0 / sqrt( denom_r ) ); 00168 Hep3Vector nx( ( nr - nr_np * np ) * fac_r ); 00169 Hep3Vector ny( np.cross( nx ) ); 00170 00171 (*this).set_plane_errs( nx, ny, np ); 00172 00173 double sigma2( m_err3( 1, 1 ) ); // Error along nx. 00174 if( sigma2 > 0 ){ 00175 m_err2( 1 ) = sqrt( sigma2 ) * fac_r; // Error projection. 00176 } else { 00177 m_err2( 1 ) = 0.0; 00178 } 00179 00180 if( denom_t > Eps ){ // nt is not parallel to the track direction: np. 00181 double fac_t( 1.0 / sqrt( denom_t ) ); 00182 sigma2 = m_err3( 2, 2 ); 00183 if( sigma2 > 0 ){ 00184 m_err2( 2 ) = sqrt( sigma2 ) * fac_t; // Error projection. 00185 } else { 00186 m_err2( 2 ) = 0.0; 00187 } 00188 } else { // nt is parallel to the track direction: np. 00189 m_err2( 2 ) = (*this).get_plane_err( np, nt ); 00190 } 00191 } else { // nr is parallel to the track direction: np. 00192 m_err2( 1 ) = (*this).get_plane_err( np, nr ); 00193 m_err2( 2 ) = (*this).get_plane_err( np, nt ); 00194 } 00195 return( m_err2 ); 00196 }
|
|
Get the 2D projected track error perpendicular to a given vector at the current point. pv: a given vector, momentum vector, for example. {itemize} Hep3Vector(1)= error(1 sigma) along the direction which is perpendicular to pv on the plane formed by pv and z-axis. Hep3Vector(2)= error(1 sigma) along the direction which is (pv) x (HepVector(1) direction). {itemize} |
|
Get 2D projected track error perpendicular to a given vector at the current point. pv: a given vector, momentum vector for example. {itemize} view=1. {itemize} Hep3Vector(1)= error(1 sigma) along the direction which is perpendicular to pv on the xy plane. Hep3Vector(2)= error(1 sigma) along the direction which is (pv) x (HepVector(1) direction). {itemize} view=2. {itemize} Hep3Vector(1)= error(1 sigma) along the direction which is perpendicular to pv on the zy plane. Hep3Vector(2)= error(1 sigma) along the direction which is (pv) x (HepVector(1) direction). {itemize} view=3. {itemize} Hep3Vector(1)= error(1 sigma) along the direction which is perpendicular to pv on the zx plane. Hep3Vector(2)= error(1 sigma) along the direction which is (pv) x (HepVector(1) direction). {itemize} {itemize} |
|
Get the 2D projected track error perpendicular to a given vector at the current point. pv: a given vector, momentum vector, for example. {itemize} Hep3Vector(1)= error(1 sigma) along the direction which is perpendicular to pv on the plane formed by pv and z-axis. Hep3Vector(2)= error(1 sigma) along the direction which is (pv) x (HepVector(1) direction). {itemize} 00282 { 00283 00284 Hep3Vector np( pv.unit() ); 00285 Hep3Vector nz( 0.0, 0.0, 1.0 ); 00286 Hep3Vector nt( (nz.cross(np)).unit() ); 00287 Hep3Vector nr( nt.cross(np) ); 00288 00289 const HepVector & err_v = (*this).get_plane_errs( np, nr, nt ); 00290 *m_nv = err_v[0]*nr; 00291 *(m_nv+1) = err_v[1]*nt; 00292 return( m_nv ); 00293 00294 }
|
|
Get 2D projected track error perpendicular to a given vector at the current point. pv: a given vector, momentum vector for example. {itemize} view=1. {itemize} Hep3Vector(1)= error(1 sigma) along the direction which is perpendicular to pv on the xy plane. Hep3Vector(2)= error(1 sigma) along the direction which is (pv) x (HepVector(1) direction). {itemize} view=2. {itemize} Hep3Vector(1)= error(1 sigma) along the direction which is perpendicular to pv on the zy plane. Hep3Vector(2)= error(1 sigma) along the direction which is (pv) x (HepVector(1) direction). {itemize} view=3. {itemize} Hep3Vector(1)= error(1 sigma) along the direction which is perpendicular to pv on the zx plane. Hep3Vector(2)= error(1 sigma) along the direction which is (pv) x (HepVector(1) direction). {itemize} {itemize} 00221 { 00222 00223 Hep3Vector np( pv.unit() ); 00224 Hep3Vector nr; 00225 00226 switch( view ){ 00227 00228 case 1: // xy view 00229 00230 if( np.x() != 0 || np.y() != 0 ){ 00231 nr.setX( np.y() ); 00232 nr.setY( -np.x() ); 00233 nr = nr.unit(); 00234 } else { // Pointing to z-direction. 00235 nr.setX( 1 ); 00236 } 00237 break; 00238 00239 case 2: // zy view 00240 00241 if( np.y() != 0 || np.z() != 0 ){ 00242 nr.setY( -np.z() ); 00243 nr.setZ( np.y() ); 00244 nr = nr.unit(); 00245 } else { // Pointing to x-direction. 00246 nr.setZ( 1 ); 00247 } 00248 break; 00249 00250 case 3: // zx view 00251 00252 if( np.z() != 0 || np.x() != 0 ){ 00253 nr.setX( -np.z() ); 00254 nr.setZ( np.x() ); 00255 nr = nr.unit(); 00256 } else { // Pointing to z-direction. 00257 nr.setZ( 1 ); 00258 } 00259 break; 00260 } /* End of switch */ 00261 00262 Hep3Vector nt( np.cross( nr ) ); 00263 const HepVector & err_v = (*this).get_plane_errs( np, nr, nt ); 00264 *m_nv = err_v[0]*nr; 00265 *(m_nv+1) = err_v[1]*nt; 00266 return( m_nv ); 00267 }
|
|
|
|
00317 { 00318 if( this != &err ){ 00319 m_err = err.m_err; 00320 m_err3 = err.m_err3; 00321 m_err2 = err.m_err2; 00322 m_R = err.m_R; 00323 m_valid = err.m_valid; 00324 *m_nv = *err.m_nv; 00325 *(m_nv+1) = *(err.m_nv+1); 00326 } 00327 return *this; 00328 }
|
|
|
|
|
|
|
|
00046 { 00047 int ne = 0; 00048 00049 for( int i = 1; i <= m_err.num_col(); i++ ){ 00050 for( int j = 1; j <= i; j++ ){ 00051 m_err.fast( i, j ) = error[ ne++ ]; 00052 } 00053 } 00054 m_valid = 1; 00055 }
|
|
|
|
00062 { 00063 // Setup the rotation matrix. 00064 00065 m_R( 1, 1 ) = nx.x(); 00066 m_R( 1, 2 ) = nx.y(); 00067 m_R( 1, 3 ) = nx.z(); 00068 m_R( 2, 1 ) = ny.x(); 00069 m_R( 2, 2 ) = ny.y(); 00070 m_R( 2, 3 ) = ny.z(); 00071 m_R( 3, 1 ) = nz.x(); 00072 m_R( 3, 2 ) = nz.y(); 00073 m_R( 3, 3 ) = nz.z(); 00074 00075 // Get the 3x3 sub matrix and Rotate the error matrix. 00076 00077 m_err3 = (m_err.sub( 1, 3 )).similarity( m_R ); 00078 00079 }
|
|
|
|
00301 { 00302 if( m_valid ){ 00303 if( Ext_err_valid( msg, m_err, 6 ) ){ 00304 return 1; 00305 } else { 00306 m_valid = 0; 00307 return 0; 00308 } 00309 } else { 00310 return 0; 00311 } 00312 }
|
|
00334 { 00335 s << " m_valid: " << err.m_valid << '\n' 00336 << "m_err: " << err.m_err << " m_err3: " << err.m_err3 00337 << " m_R: " << err.m_R << " m_err2: " << err.m_err2 00338 << " *m_nv: " << *err.m_nv 00339 << " *(m_nv+1): " << *(err.m_nv+1) 00340 << std::endl; 00341 return s; 00342 }
|
|
00334 { 00335 s << " m_valid: " << err.m_valid << '\n' 00336 << "m_err: " << err.m_err << " m_err3: " << err.m_err3 00337 << " m_R: " << err.m_R << " m_err2: " << err.m_err2 00338 << " *m_nv: " << *err.m_nv 00339 << " *(m_nv+1): " << *(err.m_nv+1) 00340 << std::endl; 00341 return s; 00342 }
|
|
|
|
|
|
|
|
|
|
|
|
|