88 {
89
90 MsgStream log(
msgSvc(), name() );
91 log << MSG::INFO << "in execute()" << endmsg;
92
93 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
94 int runNo = eventHeader->runNumber();
95 int eventNo = eventHeader->eventNumber();
96
97
98
99
100
101 SmartDataPtr<EvtRecEvent> evtRecEvent( eventSvc(), "/Event/EvtRec/EvtRecEvent" );
102 if ( !evtRecEvent )
103 {
104 log << MSG::FATAL << "Could not find EvtRecEvent" << endmsg;
105 return StatusCode::FAILURE;
106 }
107
108 SmartDataPtr<EvtRecTrackCol> evtRecTrackCol( eventSvc(), "/Event/EvtRec/EvtRecTrackCol" );
109 if ( !evtRecTrackCol )
110 {
111 log << MSG::FATAL << "Could not find EvtRecTrackCol" << endmsg;
112 return StatusCode::FAILURE;
113 }
114
115
116 SmartDataPtr<EvtRecVeeVertexCol> evtRecVeeVertexCol( eventSvc(),
117 "/Event/EvtRec/EvtRecVeeVertexCol" );
118 if ( !evtRecVeeVertexCol )
119 {
120 log << MSG::FATAL << "Could not find EvtRecVeeVertexCol" << endmsg;
121 return StatusCode::FAILURE;
122 }
123
124
125 SmartDataPtr<EvtRecPi0Col> recPi0Col( eventSvc(), "/Event/EvtRec/EvtRecPi0Col" );
126 if ( !recPi0Col )
127 {
128 log << MSG::FATAL << "Could not find EvtRecPi0Col" << endmsg;
129 return StatusCode::FAILURE;
130 }
131
132
133 Hep3Vector xorigin( 0, 0, 0 );
134 IVertexDbSvc* vtxsvc;
135 Gaudi::svcLocator()->service( "VertexDbSvc", vtxsvc ).ignore();
137 {
138
140 xorigin.setX( vertex[0] );
141 xorigin.setY( vertex[1] );
142 xorigin.setZ( vertex[2] );
143 }
144
145
146 DTagTool dtagTool;
147
149 {
150
151 return StatusCode::SUCCESS;
152 }
153
154
155
156
159
160
161 vector<DTagToolIterator> vsditer;
162
163
164
166 vsditer.push_back( dtagTool.
stag() );
168 vsditer.push_back( dtagTool.
stag() );
173 vsditer.push_back( dtagTool.
stag() );
174
175 typedef vector<DTagToolIterator>::size_type vec_sz;
176
177
178 for ( vec_sz i = 0; i < vsditer.size(); i++ )
179 {
180
181
182 m_deltaE = ( *vsditer[i] )->deltaE();
183 m_mode = ( *vsditer[i] )->decayMode();
184 m_mBC = ( *vsditer[i] )->mBC();
185
186
188
189
190 SmartRefVector<EvtRecTrack> othertracks = ( *sditer )->otherTracks();
191 vector<int> iGood;
192 int tcharge = 0;
193
194 for ( int i = 0; i < othertracks.size(); i++ )
195 {
197 {
198 iGood.push_back( i );
199 RecMdcKalTrack* mdcKalTrk = othertracks[i]->mdcKalTrack();
200 tcharge += mdcKalTrk->
charge();
201 }
202 }
203
204
205 if ( iGood.size() != 2 || tcharge != 0 ) continue;
206
207
208 m_simplePIDSvc->preparePID( othertracks[iGood[0]] );
209 bool FtrkElectron = m_simplePIDSvc->iselectron();
210 bool FtrkKaon = m_simplePIDSvc->iskaon();
211
212 m_simplePIDSvc->preparePID( othertracks[iGood[1]] );
213 bool StrkElectron = m_simplePIDSvc->iselectron();
214 bool StrkKaon = m_simplePIDSvc->iskaon();
215
216
217
218
219
220
221 if ( FtrkElectron && StrkKaon )
222 {
223
224 RecMdcKalTrack* ftrk = othertracks[iGood[0]]->mdcKalTrack();
225 RecMdcKalTrack* strk = othertracks[iGood[1]]->mdcKalTrack();
226
227 SmartRefVector<EvtRecTrack> tracks = ( *sditer )->tracks();
228 RecMdcKalTrack* tagsidektrk = tracks[0]->mdcKalTrack();
229
230
232 {
233 double U_1 = 0;
234 double MM2_1 = 0;
235 double q2_1 = 0;
236
237
238 calU( sditer, strk, ftrk, U_1, MM2_1, q2_1 );
239
240 m_U = U_1;
241 m_MM2 = MM2_1;
242 m_q2 = q2_1;
243
244 m_tuple0->write().ignore();
245 }
246
247 }
248
249
250 if ( StrkElectron && FtrkKaon )
251 {
252
253 RecMdcKalTrack* ftrk = othertracks[iGood[0]]->mdcKalTrack();
254 RecMdcKalTrack* strk = othertracks[iGood[1]]->mdcKalTrack();
255
256 SmartRefVector<EvtRecTrack> tracks = ( *sditer )->tracks();
257
258 RecMdcKalTrack* tagsidektrk = tracks[0]->mdcKalTrack();
259
260
262 {
263
264 double U_1 = 0;
265 double MM2_1 = 0;
266 double q2_1 = 0;
267
268
269 calU( sditer, strk, ftrk, U_1, MM2_1, q2_1 );
270
271 m_U = U_1;
272 m_MM2 = MM2_1;
273 m_q2 = q2_1;
274
275 m_tuple0->write().ignore();
276 }
277 }
278 }
279
280
282
283 return StatusCode::SUCCESS;
284}
bool isGoodTrack(EvtRecTrack *trk, Hep3Vector xorigin)
void calU(DTagToolIterator sditer, RecMdcKalTrack *Etrack, RecMdcKalTrack *Ktrack, double &U, double &MM2, double &q2)
virtual bool isVertexValid()=0
virtual double * PrimaryVertex()=0