#include <utility.h>
Public Member Functions | |
HepLorentzVector | getp4 (RecMdcKalTrack *mdcKalTrack, int pid) |
HepLorentzVector | vfit (string channel, vector< int > kaonid, vector< int > pionid, HepPoint3D vx, EvtRecTrackIterator charged_begin) |
vector< double > | SecondaryVFit (EvtRecVeeVertex *ks, IVertexDbSvc *vtxsvc) |
Definition at line 12 of file utility.h.
HepLorentzVector utility::getp4 | ( | RecMdcKalTrack * | mdcKalTrack, | |
int | pid | |||
) |
Definition at line 3 of file utility.cxx.
References cos(), RecMdcKalTrack::getZHelix(), RecMdcKalTrack::getZHelixE(), RecMdcKalTrack::getZHelixK(), RecMdcKalTrack::getZHelixMu(), RecMdcKalTrack::getZHelixP(), mass, phi0, and sin().
Referenced by vfit().
00003 { 00004 00005 HepVector zhelix; 00006 double mass=0; 00007 00008 if(pid==0){ 00009 zhelix=mdcKalTrack->getZHelixE(); 00010 mass=0.000511; 00011 } 00012 else if(pid==1){ 00013 zhelix=mdcKalTrack->getZHelixMu(); 00014 mass= 0.105658; 00015 } 00016 else if(pid==2){ 00017 zhelix=mdcKalTrack->getZHelix(); 00018 mass=0.139570; 00019 } 00020 else if(pid==3){ 00021 zhelix=mdcKalTrack->getZHelixK(); 00022 mass= 0.493677; 00023 } 00024 else{ 00025 zhelix=mdcKalTrack->getZHelixP(); 00026 mass= 0.938272; 00027 } 00028 00029 double dr(0),phi0(0),kappa(0),dz(0),tanl(0); 00030 dr=zhelix[0]; 00031 phi0=zhelix[1]; 00032 kappa=zhelix[2]; 00033 dz=zhelix[3]; 00034 tanl=zhelix[4]; 00035 00036 int charge=0; 00037 if (kappa > 0.0000000001) 00038 charge = 1; 00039 else if (kappa < -0.0000000001) 00040 charge = -1; 00041 00042 double pxy=0; 00043 if(kappa!=0) pxy = 1.0/fabs(kappa); 00044 00045 double px = pxy * (-sin(phi0)); 00046 double py = pxy * cos(phi0); 00047 double pz = pxy * tanl; 00048 00049 double e = sqrt( pxy*pxy + pz*pz + mass*mass ); 00050 00051 return HepLorentzVector(px, py, pz, e); 00052 00053 00054 }
vector< double > utility::SecondaryVFit | ( | EvtRecVeeVertex * | ks, | |
IVertexDbSvc * | vtxsvc | |||
) |
Definition at line 120 of file utility.cxx.
References TrackPool::AddTrack(), VertexFit::AddVertex(), VertexFit::BuildVirtualParticle(), SecondVertexFit::chisq(), SecondVertexFit::decayLength(), SecondVertexFit::decayLengthError(), SecondVertexFit::Fit(), VertexFit::Fit(), RecMdcKalTrack::getZError(), RecMdcKalTrack::getZHelix(), SecondVertexFit::init(), VertexFit::init(), SecondVertexFit::instance(), VertexFit::instance(), IVertexDbSvc::isVertexValid(), EvtRecTrack::mdcKalTrack(), EvtRecVeeVertex::pairDaughters(), IVertexDbSvc::PrimaryVertex(), VertexParameter::setEvx(), SecondVertexFit::setPrimaryVertex(), SecondVertexFit::setVpar(), VertexParameter::setVx(), IVertexDbSvc::SigmaPrimaryVertex(), VertexFit::Swim(), VertexFit::vpar(), and VertexFit::wVirtualTrack().
Referenced by NeutralDReconstruction::execute(), DsReconstruction::execute(), and ChargedDReconstruction::execute().
00120 { 00121 00122 // by default: chi2 = -999, length = -999, error = 999 00123 double vfitchi2 = -999; 00124 double vfitlength = -999; 00125 double vfiterror = 999; 00126 00127 vector<double> results; 00128 results.push_back(vfitchi2); 00129 results.push_back(vfitlength); 00130 results.push_back(vfiterror); 00131 00132 // -------------------------------------------------- 00133 // Do a secondary vertex fit and check the flight significance 00134 // -------------------------------------------------- 00135 00136 EvtRecTrack* veeTrack1 = ks->pairDaughters().first; 00137 RecMdcKalTrack* veeKalTrack1 = veeTrack1->mdcKalTrack(); 00138 WTrackParameter veeInitialWTrack1 = WTrackParameter(0.13957018, veeKalTrack1->getZHelix(), veeKalTrack1->getZError()); 00139 00140 EvtRecTrack* veeTrack2 = ks->pairDaughters().second; 00141 RecMdcKalTrack* veeKalTrack2 = veeTrack2->mdcKalTrack(); 00142 WTrackParameter veeInitialWTrack2 = WTrackParameter(0.13957018, veeKalTrack2->getZHelix(), veeKalTrack2->getZError()); 00143 00144 VertexParameter wideVertex; 00145 HepPoint3D vWideVertex(0., 0., 0.); 00146 HepSymMatrix evWideVertex(3, 0); 00147 00148 evWideVertex[0][0] = 1.0e12; 00149 evWideVertex[1][1] = 1.0e12; 00150 evWideVertex[2][2] = 1.0e12; 00151 00152 wideVertex.setVx(vWideVertex); 00153 wideVertex.setEvx(evWideVertex); 00154 00155 // First, perform a vertex fit 00156 VertexFit* vtxfit = VertexFit::instance(); 00157 vtxfit->init(); 00158 00159 // add the daughters 00160 vtxfit->AddTrack(0,veeInitialWTrack1); 00161 vtxfit->AddTrack(1,veeInitialWTrack2); 00162 vtxfit->AddVertex(0,wideVertex,0,1); 00163 00164 // do the fit 00165 vtxfit->Fit(0); 00166 vtxfit->Swim(0); 00167 vtxfit->BuildVirtualParticle(0); 00168 00169 // Now perform the secondary vertex fit 00170 SecondVertexFit* svtxfit = SecondVertexFit::instance(); 00171 svtxfit->init(); 00172 00173 // add the primary vertex 00174 VertexParameter beamSpot; 00175 HepPoint3D vBeamSpot(0., 0., 0.); 00176 HepSymMatrix evBeamSpot(3, 0); 00177 00178 if(vtxsvc->isVertexValid()){ 00179 double* dbv = vtxsvc->PrimaryVertex(); 00180 double* vv = vtxsvc->SigmaPrimaryVertex(); 00181 for (unsigned int ivx = 0; ivx < 3; ivx++){ 00182 vBeamSpot[ivx] = dbv[ivx]; 00183 evBeamSpot[ivx][ivx] = vv[ivx] * vv[ivx]; 00184 } 00185 } 00186 else{ 00187 cout << "KSSELECTOR ERROR: Could not find a vertex from VertexDbSvc" << endl; 00188 return results; 00189 } 00190 00191 beamSpot.setVx(vBeamSpot); 00192 beamSpot.setEvx(evBeamSpot); 00193 00194 VertexParameter primaryVertex(beamSpot); 00195 svtxfit->setPrimaryVertex(primaryVertex); 00196 00197 // add the secondary vertex 00198 svtxfit->setVpar(vtxfit->vpar(0)); 00199 00200 // add the Ks or lambda 00201 svtxfit->AddTrack(0,vtxfit->wVirtualTrack(0)); 00202 00203 // do the second vertex fit 00204 // if the fit fails, the default values will not be changed 00205 if( !svtxfit->Fit() ) return results; 00206 00207 // save the new ks parameters 00208 vfitlength = svtxfit->decayLength(); 00209 vfiterror = svtxfit->decayLengthError(); 00210 vfitchi2 = svtxfit->chisq(); 00211 00212 results.clear(); 00213 results.push_back(vfitchi2); 00214 results.push_back(vfitlength); 00215 results.push_back(vfiterror); 00216 00217 return results; 00218 }
HepLorentzVector utility::vfit | ( | string | channel, | |
vector< int > | kaonid, | |||
vector< int > | pionid, | |||
HepPoint3D | vx, | |||
EvtRecTrackIterator | charged_begin | |||
) |
Definition at line 57 of file utility.cxx.
References TrackPool::AddTrack(), VertexFit::AddVertex(), VertexFit::Fit(), getp4(), RecMdcKalTrack::getZError(), RecMdcKalTrack::getZErrorK(), RecMdcKalTrack::getZHelix(), RecMdcKalTrack::getZHelixK(), genRecEmupikp::i, VertexFit::init(), VertexFit::instance(), VertexParameter::setEvx(), VertexParameter::setVx(), VertexFit::Swim(), VertexFit::wtrk(), and xmass.
Referenced by NeutralDReconstruction::execute(), DsReconstruction::execute(), and ChargedDReconstruction::execute().
00057 { 00058 //use charged tracks only, except pions from Ks 00059 00060 HepLorentzVector pchange(0,0,0,0); 00061 00062 int nvalid= kaonid.size()+pionid.size(); 00063 if(nvalid<=1) 00064 return pchange; 00065 00066 HepSymMatrix Evx(3, 0); 00067 double bx = 1E+6; Evx[0][0] = bx*bx; 00068 double by = 1E+6; Evx[1][1] = by*by; 00069 double bz = 1E+6; Evx[2][2] = bz*bz; 00070 VertexParameter vxpar; vxpar.setVx(vx); vxpar.setEvx(Evx); 00071 double xmass[5] = {0.000511, 0.105658, 0.139570,0.493677, 0.938272}; 00072 00073 00074 VertexFit* vtxfit = VertexFit::instance(); 00075 vtxfit->init(); 00076 00077 00078 HepLorentzVector pold(0,0,0,0); 00079 00080 for(int i=0; i<kaonid.size();++i){ 00081 EvtRecTrackIterator itTrk=charged_begin + kaonid[i]; 00082 RecMdcKalTrack *mdcKalTrk = (*itTrk)->mdcKalTrack(); 00083 pold+=getp4(mdcKalTrk, 3); 00084 WTrackParameter wtrk(xmass[3],mdcKalTrk->getZHelixK(),mdcKalTrk->getZErrorK() ); 00085 vtxfit->AddTrack(i, wtrk); 00086 } 00087 00088 for(int i=0; i<pionid.size();++i){ 00089 EvtRecTrackIterator itTrk=charged_begin + pionid[i]; 00090 RecMdcKalTrack *mdcKalTrk = (*itTrk)->mdcKalTrack(); 00091 pold+=getp4(mdcKalTrk, 2); 00092 WTrackParameter wtrk(xmass[2],mdcKalTrk->getZHelix(),mdcKalTrk->getZError() ); 00093 vtxfit->AddTrack(kaonid.size()+i, wtrk); 00094 } 00095 00096 vector<int> trkIdxCol; 00097 trkIdxCol.clear(); 00098 for (int i = 0; i < nvalid; i++) 00099 trkIdxCol.push_back(i); 00100 vtxfit->AddVertex(0, vxpar, trkIdxCol); 00101 if(!vtxfit->Fit(0)) 00102 return pchange; 00103 00104 vtxfit->Swim(0); 00105 00106 HepLorentzVector pnew(0,0,0,0); 00107 00108 for(int i=0; i<nvalid;++i){ 00109 WTrackParameter wtrk = vtxfit->wtrk(i); 00110 HepVector trk_val = HepVector(7,0); 00111 trk_val = wtrk.w(); 00112 HepLorentzVector P_trk(trk_val[0],trk_val[1],trk_val[2],trk_val[3]); 00113 pnew+=P_trk; 00114 } 00115 00116 return (pnew-pold); 00117 00118 }