142 {
143 StatusCode sc = StatusCode::SUCCESS;
144
145 MsgStream log(
msgSvc(), name() );
146 log << MSG::INFO << "in execute()" << endmsg;
147
148
149
150
151 setFilterPassed( false );
152
153 m_pass[0] += 1;
154
155 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
156 int run = eventHeader->runNumber();
157 int event = eventHeader->eventNumber();
158
161
162 m_pass[1] += 1;
163
164 Vint ikp, ikm, iGood;
165 iGood.clear();
166 ikp.clear();
167 ikm.clear();
168
170 pkp.clear();
171 pkm.clear();
172
173 int TotCharge = 0;
174 for ( int i = 0; i < evtRecEvent->totalCharged(); i++ )
175 {
177 if ( !( *itTrk )->isMdcTrackValid() ) continue;
178 RecMdcTrack* mdcTrk = ( *itTrk )->mdcTrack();
179 if ( fabs( mdcTrk->
z() ) >= m_vz0cut )
continue;
180 if ( mdcTrk->
r() >= m_vr0cut )
continue;
181 iGood.push_back( i );
182 TotCharge += mdcTrk->
charge();
183 }
184
185
186
187 int nGood = iGood.size();
188
189
190
191
192
193 if ( ( nGood < 2 ) || ( TotCharge != 0 ) ) return sc;
194
195 m_pass[2] += 1;
196
197
198
199
201 for ( int i = 0; i < nGood; i++ )
202 {
204
213 if ( !( *itTrk )->isMdcKalTrackValid() ) continue;
214 RecMdcKalTrack* mdcKalTrk = ( *itTrk )->mdcKalTrack();
215
216
218
220 HepLorentzVector ptrk;
221 ptrk.setPx( mdcKalTrk->
px() );
222 ptrk.setPy( mdcKalTrk->
py() );
223 ptrk.setPz( mdcKalTrk->
pz() );
224 double p3 = ptrk.mag();
225 ptrk.setE( sqrt( p3 * p3 +
mk *
mk ) );
226 if ( mdcKalTrk->
charge() > 0 )
227 {
228 ikp.push_back( iGood[i] );
229 pkp.push_back( ptrk );
230 }
231 else
232 {
233 ikm.push_back( iGood[i] );
234 pkm.push_back( ptrk );
235 }
236 }
237
238 m_pass[4] += 1;
239 int nkp = ikp.size();
240 int nkm = ikm.size();
241
242 m_nkp = nkp;
243 m_nkm = nkm;
244 m_ncharge = nGood;
245
246 if ( nkp < 1 || nkm < 1 ) return sc;
247
248 m_pass[5] += 1;
249
250
251
252
253
254
255 HepLorentzVector pphi, pTot;
257 iphi.clear();
258
259 double difchi0 = 99999.0;
260 int ixk1 = -1;
261 int ixk2 = -1;
262
263 for ( int i = 0; i < nkm; i++ )
264 {
265 for ( int j = 0; j < nkp; j++ )
266 {
267
268 pphi = pkm[i] + pkp[j];
269 m_mphiall = pphi.m();
270 m_pphiall = pphi.rho();
271 m_tuple1->write();
272
273 double difchi = fabs( pphi.m() -
mphi );
274 if ( difchi < difchi0 )
275 {
276 difchi0 = difchi;
277 ixk1 = i;
278 ixk2 = j;
279 }
280 }
281 }
282
283 m_difchi = difchi0;
284
285 if ( ixk1 == -1 ) return sc;
286
287 m_pass[6] += 1;
288
289 pTot = pkm[ixk1] + pkp[ixk2];
290
291 m_pk1 = pkm[ixk1].m();
292 m_mphi = pTot.m();
293 m_pphi = pTot.rho();
294
295 TH1* h( 0 );
296 if ( m_thsvc->getHist( "/DQAHist/InclPhi/InclPhi_mass", h ).isSuccess() )
297 { h->Fill( pTot.m() ); }
298 else { log << MSG::ERROR << "Couldn't retrieve inclphi_mass" << endmsg; }
299 m_tuple2->write();
300
301
302
303
304
305
306 ( *( evtRecTrkCol->begin() + ikm[ixk1] ) )->tagKaon();
307 ( *( evtRecTrkCol->begin() + ikp[ixk2] ) )->tagKaon();
308
309
310
311
312
313 ( *( evtRecTrkCol->begin() + ikm[ixk1] ) )->setQuality( 3 );
314 ( *( evtRecTrkCol->begin() + ikp[ixk2] ) )->setQuality( 3 );
315
316
317
318 setFilterPassed( true );
319
320 return StatusCode::SUCCESS;
321}
EvtRecTrackCol::iterator EvtRecTrackIterator
std::vector< HepLorentzVector > Vp4
static void setPidType(PidType pidType)
int methodProbability() const
void setChiMinCut(const double chi=4)
void setRecTrack(EvtRecTrack *trk)
void setMethod(const int method)
void identify(const int pidcase)
void usePidSys(const int pidsys)
static ParticleID * instance()
bool IsPidInfoValid() const
_EXTERN_ std::string EvtRecEvent
_EXTERN_ std::string EvtRecTrackCol