90 MsgStream log(
msgSvc(), name() );
91 log << MSG::INFO <<
"in execute()" << endmsg;
93 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
94 int runNo = eventHeader->runNumber();
95 int eventNo = eventHeader->eventNumber();
101 SmartDataPtr<EvtRecEvent> evtRecEvent( eventSvc(),
"/Event/EvtRec/EvtRecEvent" );
104 log << MSG::FATAL <<
"Could not find EvtRecEvent" << endmsg;
105 return StatusCode::FAILURE;
108 SmartDataPtr<EvtRecTrackCol> evtRecTrackCol( eventSvc(),
"/Event/EvtRec/EvtRecTrackCol" );
109 if ( !evtRecTrackCol )
111 log << MSG::FATAL <<
"Could not find EvtRecTrackCol" << endmsg;
112 return StatusCode::FAILURE;
116 SmartDataPtr<EvtRecVeeVertexCol> evtRecVeeVertexCol( eventSvc(),
117 "/Event/EvtRec/EvtRecVeeVertexCol" );
118 if ( !evtRecVeeVertexCol )
120 log << MSG::FATAL <<
"Could not find EvtRecVeeVertexCol" << endmsg;
121 return StatusCode::FAILURE;
125 SmartDataPtr<EvtRecPi0Col> recPi0Col( eventSvc(),
"/Event/EvtRec/EvtRecPi0Col" );
128 log << MSG::FATAL <<
"Could not find EvtRecPi0Col" << endmsg;
129 return StatusCode::FAILURE;
133 Hep3Vector xorigin( 0, 0, 0 );
135 Gaudi::svcLocator()->service(
"VertexDbSvc", vtxsvc ).ignore();
140 xorigin.setX( vertex[0] );
141 xorigin.setY( vertex[1] );
142 xorigin.setZ( vertex[2] );
151 return StatusCode::SUCCESS;
161 vector<DTagToolIterator> vsditer;
166 vsditer.push_back( dtagTool.
stag() );
168 vsditer.push_back( dtagTool.
stag() );
173 vsditer.push_back( dtagTool.
stag() );
175 typedef vector<DTagToolIterator>::size_type vec_sz;
178 for ( vec_sz i = 0; i < vsditer.size(); i++ )
182 m_deltaE = ( *vsditer[i] )->deltaE();
183 m_mode = ( *vsditer[i] )->decayMode();
184 m_mBC = ( *vsditer[i] )->mBC();
190 SmartRefVector<EvtRecTrack> othertracks = ( *sditer )->otherTracks();
194 for (
int i = 0; i < othertracks.size(); i++ )
198 iGood.push_back( i );
200 tcharge += mdcKalTrk->
charge();
205 if ( iGood.size() != 2 || tcharge != 0 )
continue;
208 m_simplePIDSvc->preparePID( othertracks[iGood[0]] );
209 bool FtrkElectron = m_simplePIDSvc->iselectron();
210 bool FtrkKaon = m_simplePIDSvc->iskaon();
212 m_simplePIDSvc->preparePID( othertracks[iGood[1]] );
213 bool StrkElectron = m_simplePIDSvc->iselectron();
214 bool StrkKaon = m_simplePIDSvc->iskaon();
221 if ( FtrkElectron && StrkKaon )
227 SmartRefVector<EvtRecTrack> tracks = ( *sditer )->tracks();
238 calU( sditer, strk, ftrk, U_1, MM2_1, q2_1 );
244 m_tuple0->write().ignore();
250 if ( StrkElectron && FtrkKaon )
256 SmartRefVector<EvtRecTrack> tracks = ( *sditer )->tracks();
269 calU( sditer, strk, ftrk, U_1, MM2_1, q2_1 );
275 m_tuple0->write().ignore();
283 return StatusCode::SUCCESS;
344 Hep3Vector P3_tag =
tagDP3( sditer );
346 Hep3Vector P3_E( Etrack->
px(), Etrack->
py(), Etrack->
pz() );
347 Hep3Vector P3_K( Ktrack->
px(), Ktrack->
py(), Ktrack->
pz() );
349 HepLorentzVector P4_E( P3_E, sqrt( P3_E.mag2() +
me *
me ) );
350 HepLorentzVector P4_K( P3_K, sqrt( P3_K.mag2() +
mkaon *
mkaon ) );
353 P4_E.boost( -0.011, 0, 0 );
354 P4_K.boost( -0.011, 0, 0 );
356 double e_miss = ( *sditer )->beamE() - P4_E.e() - P4_K.e();
357 Hep3Vector P3_miss = -P3_tag - P4_E.vect() - P4_K.vect();
359 U = e_miss - P3_miss.mag();
360 MM2 = U * ( e_miss + P3_miss.mag() );
362 HepLorentzVector P4_W( P3_E + P3_miss * fabs( e_miss / P3_miss.mag() ), e_miss + P4_E.e() );