Main Page | Modules | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

TMBSecondaryVertex.cpp

Go to the documentation of this file.
00001 
00003 //                                                                      //
00004 // TMBTree Secondary vertex class                                         //
00005 //                                                                      //
00007 
00008 #include <cmath>
00009 #include "tmb_tree/TMBSecondaryVertex.hpp"
00010 
00011 using std::sqrt;
00012 using std::abs;
00013 
00014 ClassImp(TMBSecondaryVertex);
00015 
00016 // Default constructor.
00017 
00018 TMBSecondaryVertex::TMBSecondaryVertex()
00019 {}
00020 
00021 // Initializing constructor.
00022 
00023 TMBSecondaryVertex::
00024 TMBSecondaryVertex(Float_t vertexx, Float_t vertexy, Float_t vertexz,
00025                    Float_t covxx, Float_t covyy, Float_t covzz, 
00026                    Float_t covxy, Float_t covxz, Float_t covyz,
00027                    Float_t chisq, const TRefArray* tracks,
00028                    const TMBLorentzVector& smoothed_momentum,
00029                    const TRef& primary_vertex) :
00030   TMBVertex(vertexx, vertexy, vertexz,
00031             covxx, covyy, covzz, 
00032             covxy, covxz, covyz,
00033             chisq, tracks),
00034   _primary_vertex(primary_vertex)
00035 {
00036   *static_cast<TMBLorentzVector*>(this) = smoothed_momentum;
00037 }
00038 
00039 // Fill transient attributes.
00040 
00041 void TMBSecondaryVertex::fill_pv_attributes() const
00042 {
00043   if(_pv_pos.empty()) {
00044 
00045     // Get primary vertex object.
00046 
00047     assert(_primary_vertex.IsValid());
00048     const TMBPrimaryVertex& pv = GetPrimaryVertex();
00049 
00050     _pv_pos.resize(3);
00051     _pv_pos[0] = pv.vx();
00052     _pv_pos[1] = pv.vy();
00053     _pv_pos[2] = pv.vz();
00054 
00055     _pv_err.resize(6);
00056     _pv_err[0] = pv.sigxx();
00057     _pv_err[1] = pv.sigxy();
00058     _pv_err[2] = pv.sigyy();
00059     _pv_err[3] = pv.sigxz();
00060     _pv_err[4] = pv.sigyz();
00061     _pv_err[5] = pv.sigzz();
00062 
00063     // Displacement vector and error matrix.
00064 
00065     double dx = vx() - _pv_pos[0];
00066     double dy = vy() - _pv_pos[1];
00067     double dz = vz() - _pv_pos[2];
00068 
00069     double exx = sigxx() + _pv_err[0];
00070     double exy = sigxy() + _pv_err[1];
00071     double eyy = sigyy() + _pv_err[2];
00072     double exz = sigxz() + _pv_err[3];
00073     double eyz = sigyz() + _pv_err[4];
00074     double ezz = sigzz() + _pv_err[5];
00075 
00076     // Decay length.
00077 
00078     double dxy2 = dx*dx + dy*dy;
00079     _decay_len_xy = sqrt(dxy2);
00080     _decay_len_z = dz;
00081     double dxyz2 = dxy2 + dz*dz;
00082     _decay_len_xyz = sqrt(dxyz2);
00083 
00084     // Transverse decay length significance.
00085 
00086     _decay_sig_xy = 0.;
00087     double bxy2 = exx*eyy - exy*exy;
00088     if(bxy2 > 0) {
00089       double axy2 = dx*dx*eyy - 2.*dx*dy*exy + dy*dy*exx;
00090       _decay_sig_xy =  sqrt(axy2 / bxy2);
00091     }
00092 
00093     // Z decay length significance.
00094 
00095     _decay_sig_z =  abs(dz) / sqrt(ezz);
00096 
00097     // 3D decay length significance.
00098 
00099     _decay_sig_xyz = 0.;
00100     double bxyz2 = 
00101       exx*eyy*ezz + 2.*exy*eyz*exz - exx*eyz*eyz - eyy*exz*exz - ezz*exy*exy;
00102     if(bxyz2 > 0) {
00103       double axyz2 = 
00104         dx*dx * (eyy*ezz - eyz*eyz) 
00105         + dy*dy * (exx*ezz - exz*exz) 
00106         + dz*dz * (exx*eyy - exy*exy)
00107         + 2.*dx*dy * (exz*eyz - ezz*exy)
00108         + 2.*dx*dz * (exy*eyz - eyy*exz)
00109         + 2.*dy*dz * (exy*exz - exx*eyz);
00110       _decay_sig_xyz = sqrt(axyz2 / bxyz2);
00111     }
00112 
00113     // Colinearity.
00114 
00115     double p_dot_d = dx*Px() + dy*Py() + dz*Pz();
00116     _colinearity = p_dot_d / (P() * _decay_len_xyz);
00117 
00118     // Make transverse and 3D decay lengths negative if the colinearity is 
00119     // negative.
00120 
00121     if(_colinearity < 0) {
00122       _decay_len_xy = -_decay_len_xy;
00123       _decay_len_xyz = -_decay_len_xyz;
00124     }
00125   }
00126 }

Generated on Tue Mar 28 10:13:05 2006 for CAF by doxygen 1.3.4