104 MsgStream log(
msgSvc(), name() );
105 log << MSG::INFO <<
"in execute()" << endmsg;
112 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
113 int event = eventHeader->eventNumber();
119 log << MSG::DEBUG <<
"run and event = " << eventHeader->runNumber() <<
" "
120 << eventHeader->eventNumber() << endmsg;
121 log << MSG::DEBUG <<
"ncharg, nneu, tottks = " << recEvent->totalCharged() <<
" , "
122 << recEvent->totalNeutral() <<
" , " << recEvent->totalTracks() << endmsg;
130 SmartDataPtr<EvtRecPi0Col> recPi0Col( eventSvc(),
"/Event/EvtRec/EvtRecPi0Col" );
133 log << MSG::FATAL <<
"Could not find EvtRecPi0Col" << endmsg;
134 return StatusCode::FAILURE;
137 SmartDataPtr<EvtRecEtaToGGCol> recEtaToGGCol( eventSvc(),
"/Event/EvtRec/EvtRecEtaToGGCol" );
138 if ( !recEtaToGGCol )
140 log << MSG::FATAL <<
"Could not find EvtRecEtaToGGCol" << endmsg;
141 return StatusCode::FAILURE;
144 SmartDataPtr<EvtRecVeeVertexCol> recVeeVertexCol( eventSvc(),
145 "/Event/EvtRec/EvtRecVeeVertexCol" );
146 if ( !recVeeVertexCol )
148 log << MSG::FATAL <<
"Could not find EvtRecVeeVertexCol" << endmsg;
149 return StatusCode::FAILURE;
155 log << MSG::FATAL <<
"EvtRecDTagCol is not registered yet" << endmsg;
156 return StatusCode::FAILURE;
160 Hep3Vector xorigin( 0, 0, 0 );
163 sc = serviceLocator()->service(
"VertexDbSvc", vtxsvc );
169 xorigin.setX( vertex[0] );
170 xorigin.setY( vertex[1] );
171 xorigin.setZ( vertex[2] );
190 m_pionSelector->setpidtype( 0 );
191 m_kaonSelector->setpidtype( 0 );
194 CDPhotonList photonList( neutral_begin, neutral_end, *m_photonSelector );
197 dc_fill( ksList, recVeeVertexCol->begin(), recVeeVertexCol->end() );
201 for (
CDKsList::iterator ksit = ksList.particle_begin(); ksit != ksList.particle_end();
211 dc_fill( pi0List, recPi0Col->begin(), recPi0Col->end() );
214 dc_fill( etaList, recEtaToGGCol->begin(), recEtaToGGCol->end() );
217 m_pionSelector->setpidtype( 1 );
218 m_kaonSelector->setpidtype( 1 );
222 int run = eventHeader->runNumber();
223 m_ievt = eventHeader->eventNumber();
224 m_nChrg = recEvent->totalCharged();
225 m_nNeu = recEvent->totalNeutral();
226 m_nPion = pionList.
size();
227 m_nKaon = kaonList.
size();
228 m_nPi0 = pi0List.size();
229 m_nKs = ksList.size();
235 if ( m_ReadBeamEFromDB && m_irun != run )
238 if ( m_usecalibBeamE ) m_readDb.setcalib(
true );
239 m_beamE = m_readDb.getbeamE( m_irun, m_beamE );
240 if ( run > 0 ) m_beta = m_readDb.getbeta();
243 double ebeam = m_beamE;
249 for (
int list = 0; list < chanlist.size(); list++ )
252 string channel = chanlist[list];
254 m_chargedDSelector->setebeam(
ebeam );
255 m_chargedDSelector->setbeta( m_beta );
262 if ( channel ==
"DptoKPiPi" )
265 numchan.push_back( 1 );
266 numchan.push_back( 2 );
267 numchan.push_back( 2 );
268 decaylist = kaonList.
minus() * pionList.
plus() * pionList.
plus();
270 else if ( channel ==
"DptoKPiPiPi0" )
273 numchan.push_back( 1 );
274 numchan.push_back( 2 );
275 numchan.push_back( 2 );
276 numchan.push_back( 3 );
277 decaylist = kaonList.
minus() * pionList.
plus() * pionList.
plus() * pi0List;
279 else if ( channel ==
"DptoKsPi" )
282 numchan.push_back( 5 );
283 numchan.push_back( 2 );
284 decaylist = ksList * pionList.
plus();
286 else if ( channel ==
"DptoKsPiPi0" )
289 numchan.push_back( 5 );
290 numchan.push_back( 2 );
291 numchan.push_back( 3 );
292 decaylist = ksList * pionList.
plus() * pi0List;
294 else if ( channel ==
"DptoKsPiPiPi" )
297 numchan.push_back( 5 );
298 numchan.push_back( 2 );
299 numchan.push_back( 2 );
300 numchan.push_back( 2 );
301 decaylist = ksList * pionList.
plus() * pionList.
plus() * pionList.
minus();
303 else if ( channel ==
"DptoKKPi" )
306 numchan.push_back( 1 );
307 numchan.push_back( 1 );
308 numchan.push_back( 2 );
309 decaylist = kaonList.
minus() * kaonList.
plus() * pionList.
plus();
311 else if ( channel ==
"DptoPiPi0" )
314 numchan.push_back( 2 );
315 numchan.push_back( 3 );
316 decaylist = pionList.
plus() * pi0List;
318 else if ( channel ==
"DptoKPi0" )
321 numchan.push_back( 1 );
322 numchan.push_back( 3 );
323 decaylist = kaonList.
plus() * pi0List;
325 else if ( channel ==
"DptoKsK" )
328 numchan.push_back( 5 );
329 numchan.push_back( 1 );
330 decaylist = ksList * kaonList.
plus();
332 else if ( channel ==
"DptoPiPiPi" )
335 numchan.push_back( 2 );
336 numchan.push_back( 2 );
337 numchan.push_back( 2 );
338 decaylist = pionList.
plus() * pionList.
plus() * pionList.
minus();
340 else if ( channel ==
"DptoPiPi0Pi0" )
343 numchan.push_back( 2 );
344 numchan.push_back( 3 );
345 numchan.push_back( 3 );
346 decaylist = pionList.
plus() * pi0List * pi0List;
348 else if ( channel ==
"DptoKsKsPi" )
351 numchan.push_back( 5 );
352 numchan.push_back( 5 );
353 numchan.push_back( 2 );
354 decaylist = ksList * ksList * pionList.
plus();
356 else if ( channel ==
"DptoKsKPi0" )
359 numchan.push_back( 5 );
360 numchan.push_back( 1 );
361 numchan.push_back( 3 );
362 decaylist = ksList * kaonList.
plus() * pi0List;
364 else if ( channel ==
"DptoKsKsK" )
367 numchan.push_back( 5 );
368 numchan.push_back( 5 );
369 numchan.push_back( 1 );
370 decaylist = ksList * ksList * kaonList.
plus();
372 else if ( channel ==
"DptoPiPiPiPi0" )
375 numchan.push_back( 2 );
376 numchan.push_back( 2 );
377 numchan.push_back( 2 );
378 numchan.push_back( 3 );
379 decaylist = pionList.
plus() * pionList.
plus() * pionList.
minus() * pi0List;
381 else if ( channel ==
"DptoKsPiPi0Pi0" )
384 numchan.push_back( 5 );
385 numchan.push_back( 2 );
386 numchan.push_back( 3 );
387 numchan.push_back( 3 );
388 decaylist = ksList * pionList.
plus() * pi0List * pi0List;
390 else if ( channel ==
"DptoKsKplusPiPi" )
393 numchan.push_back( 5 );
394 numchan.push_back( 1 );
395 numchan.push_back( 2 );
396 numchan.push_back( 2 );
397 decaylist = ksList * kaonList.
plus() * pionList.
plus() * pionList.
minus();
399 else if ( channel ==
"DptoKsKminusPiPi" )
402 numchan.push_back( 5 );
403 numchan.push_back( 1 );
404 numchan.push_back( 2 );
405 numchan.push_back( 2 );
406 decaylist = ksList * kaonList.
minus() * pionList.
plus() * pionList.
plus();
408 else if ( channel ==
"DptoKKPiPi0" )
411 numchan.push_back( 1 );
412 numchan.push_back( 1 );
413 numchan.push_back( 2 );
414 numchan.push_back( 3 );
415 decaylist = kaonList.
minus() * kaonList.
plus() * pionList.
plus() * pi0List;
417 else if ( channel ==
"DptoPiPiPiPiPi" )
420 numchan.push_back( 2 );
421 numchan.push_back( 2 );
422 numchan.push_back( 2 );
423 numchan.push_back( 2 );
424 numchan.push_back( 2 );
425 decaylist = pionList.
plus() * pionList.
plus() * pionList.
plus() * pionList.
minus() *
428 else if ( channel ==
"DptoKPiPiPiPi" )
431 numchan.push_back( 1 );
432 numchan.push_back( 2 );
433 numchan.push_back( 2 );
434 numchan.push_back( 2 );
435 numchan.push_back( 2 );
436 decaylist = kaonList.
minus() * pionList.
plus() * pionList.
plus() * pionList.
plus() *
439 else if ( channel ==
"DptoPiEta" )
442 numchan.push_back( 2 );
443 numchan.push_back( 4 );
444 decaylist = pionList.
plus() * etaList;
446 else if ( channel ==
"DptoKsPiEta" )
449 numchan.push_back( 5 );
450 numchan.push_back( 2 );
451 numchan.push_back( 4 );
452 decaylist = ksList * pionList.
plus() * etaList;
454 else if ( channel ==
"DptoKPiPiPi0Pi0" )
457 numchan.push_back( 1 );
458 numchan.push_back( 2 );
459 numchan.push_back( 2 );
460 numchan.push_back( 3 );
461 numchan.push_back( 3 );
462 decaylist = kaonList.
minus() * pionList.
plus() * pionList.
plus() * pi0List * pi0List;
464 else if ( channel ==
"DptoKsPiPiPiPi0" )
467 numchan.push_back( 5 );
468 numchan.push_back( 2 );
469 numchan.push_back( 2 );
470 numchan.push_back( 2 );
471 numchan.push_back( 3 );
472 decaylist = ksList * pionList.
plus() * pionList.
plus() * pionList.
minus() * pi0List;
474 else if ( channel ==
"DptoKsPiPi0Pi0Pi0" )
477 numchan.push_back( 5 );
478 numchan.push_back( 2 );
479 numchan.push_back( 3 );
480 numchan.push_back( 3 );
481 numchan.push_back( 3 );
482 decaylist = ksList * pionList.
plus() * pi0List * pi0List * pi0List;
484 else if ( channel ==
"DptoKsPiEPPiPiEta" )
487 numchan.push_back( 5 );
488 numchan.push_back( 2 );
489 numchan.push_back( 6 );
491 epList = pionList.
plus() * pionList.
minus() * etaList;
492 decaylist = ksList * pionList.
plus() * epList;
494 else if ( channel ==
"DptoKsPiEPRhoGam" )
497 numchan.push_back( 5 );
498 numchan.push_back( 2 );
499 numchan.push_back( 7 );
501 rhoList = pionList.
plus() * pionList.
minus();
503 epList = rhoList * photonList;
504 decaylist = ksList * pionList.
plus() * epList;
506 else if ( channel ==
"DptoKPiPiEta" )
509 numchan.push_back( 1 );
510 numchan.push_back( 2 );
511 numchan.push_back( 2 );
512 numchan.push_back( 4 );
513 decaylist = kaonList.
minus() * pionList.
plus() * pionList.
plus() * etaList;
515 else if ( channel ==
"DptoKsPiPi0Eta" )
518 numchan.push_back( 5 );
519 numchan.push_back( 2 );
520 numchan.push_back( 3 );
521 numchan.push_back( 4 );
522 decaylist = ksList * pionList.
plus() * pi0List * etaList;
524 else if ( channel ==
"DptoKsKKPi" )
527 numchan.push_back( 5 );
528 numchan.push_back( 1 );
529 numchan.push_back( 1 );
530 numchan.push_back( 2 );
531 decaylist = ksList * kaonList.
minus() * kaonList.
plus() * pionList.
plus();
533 else if ( channel ==
"DptoPiPiPiPi0Pi0" )
536 numchan.push_back( 2 );
537 numchan.push_back( 2 );
538 numchan.push_back( 2 );
539 numchan.push_back( 3 );
540 numchan.push_back( 3 );
541 decaylist = pionList.
plus() * pionList.
plus() * pionList.
minus() * pi0List * pi0List;
543 else if ( channel ==
"DptoPiPi0Eta" )
546 numchan.push_back( 2 );
547 numchan.push_back( 3 );
548 numchan.push_back( 4 );
549 decaylist = pionList.
plus() * pi0List * etaList;
551 else if ( channel ==
"DptoPiPiPiEta" )
554 numchan.push_back( 2 );
555 numchan.push_back( 2 );
556 numchan.push_back( 2 );
557 numchan.push_back( 4 );
558 decaylist = pionList.
plus() * pionList.
plus() * pionList.
minus() * etaList;
560 else if ( channel ==
"DptoPiEtaEta" )
563 numchan.push_back( 2 );
564 numchan.push_back( 4 );
565 numchan.push_back( 4 );
566 decaylist = pionList.
plus() * etaList * etaList;
568 else if ( channel ==
"DptoPiEPPiPiEta" )
571 numchan.push_back( 2 );
572 numchan.push_back( 6 );
574 epList = pionList.
plus() * pionList.
minus() * etaList;
575 decaylist = pionList.
plus() * epList;
577 else if ( channel ==
"DptoPiEPRhoGam" )
580 numchan.push_back( 2 );
581 numchan.push_back( 7 );
583 rhoList = pionList.
plus() * pionList.
minus();
585 epList = rhoList * photonList;
586 decaylist = pionList.
plus() * epList;
588 else if ( channel ==
"DptoPiPi0EPPiPiEta" )
591 numchan.push_back( 2 );
592 numchan.push_back( 3 );
593 numchan.push_back( 6 );
595 epList = pionList.
plus() * pionList.
minus() * etaList;
596 decaylist = pionList.
plus() * pi0List * epList;
598 else if ( channel ==
"DptoPiPi0EPRhoGam" )
601 numchan.push_back( 2 );
602 numchan.push_back( 3 );
603 numchan.push_back( 7 );
605 rhoList = pionList.
plus() * pionList.
minus();
607 epList = rhoList * photonList;
608 decaylist = pionList.
plus() * pi0List * epList;
610 else if ( channel ==
"DptoKsKsPiPi0" )
613 numchan.push_back( 5 );
614 numchan.push_back( 5 );
615 numchan.push_back( 2 );
616 numchan.push_back( 3 );
617 decaylist = ksList * ksList * pionList.
plus() * pi0List;
619 else if ( channel ==
"DptoKsKPi0Pi0" )
622 numchan.push_back( 5 );
623 numchan.push_back( 1 );
624 numchan.push_back( 3 );
625 numchan.push_back( 3 );
626 decaylist = ksList * kaonList.
plus() * pi0List * pi0List;
628 else if ( channel ==
"DptoKsKEta" )
631 numchan.push_back( 5 );
632 numchan.push_back( 1 );
633 numchan.push_back( 4 );
634 decaylist = ksList * kaonList.
plus() * etaList;
636 else if ( channel ==
"DptoKKPiPiPi" )
639 numchan.push_back( 1 );
640 numchan.push_back( 1 );
641 numchan.push_back( 2 );
642 numchan.push_back( 2 );
643 numchan.push_back( 2 );
647 else if ( channel ==
"DptoKpPiPi" )
650 numchan.push_back( 1 );
651 numchan.push_back( 2 );
652 numchan.push_back( 2 );
653 decaylist = kaonList.
plus() * pionList.
plus() * pionList.
minus();
655 else if ( channel ==
"DptoKpPi0Pi0" )
658 numchan.push_back( 1 );
659 numchan.push_back( 3 );
660 numchan.push_back( 3 );
661 decaylist = kaonList.
plus() * pi0List * pi0List;
663 else if ( channel ==
"DptoKpPi0Eta" )
666 numchan.push_back( 1 );
667 numchan.push_back( 3 );
668 numchan.push_back( 4 );
669 decaylist = kaonList.
plus() * pi0List * etaList;
671 else if ( channel ==
"DptoKpPiPiPi0" )
674 numchan.push_back( 1 );
675 numchan.push_back( 2 );
676 numchan.push_back( 2 );
677 numchan.push_back( 3 );
678 decaylist = kaonList.
plus() * pionList.
plus() * pionList.
minus() * pi0List;
680 else if ( channel ==
"DptoKpPiPiEta" )
683 numchan.push_back( 1 );
684 numchan.push_back( 2 );
685 numchan.push_back( 2 );
686 numchan.push_back( 4 );
687 decaylist = kaonList.
plus() * pionList.
plus() * pionList.
minus() * etaList;
699 vector<int> trackid, showerid;
700 vector<int> kaonid, pionid;
701 int numofchildren = numchan.size() - 1;
703 for (
int i = 0; i < numofchildren; i++ )
706 const CDCandidate& daughter = ( *it ).particle().child( i );
708 if ( numchan[i + 1] == 1 )
711 trackid.push_back( track->
trackId() );
712 kaonid.push_back( track->
trackId() );
714 else if ( numchan[i + 1] == 2 )
717 trackid.push_back( track->
trackId() );
718 pionid.push_back( track->
trackId() );
720 else if ( numchan[i + 1] == 3 )
724 showerid.push_back( hiEnGamma->
trackId() );
725 showerid.push_back( loEnGamma->
trackId() );
727 else if ( numchan[i + 1] == 4 )
731 showerid.push_back( hiEnGamma->
trackId() );
732 showerid.push_back( loEnGamma->
trackId() );
734 else if ( numchan[i + 1] == 5 )
738 recDTag->
addToFitInfo( aKsCand->
mass(), fitinfo[aKsCand][0], fitinfo[aKsCand][1],
739 fitinfo[aKsCand][2] );
743 trackid.push_back( pion1Trk->
trackId() );
744 trackid.push_back( pion2Trk->
trackId() );
746 else if ( numchan[i + 1] == 6 )
756 trackid.push_back( apiontrk->
trackId() );
757 trackid.push_back( spiontrk->
trackId() );
758 showerid.push_back( hiEnGamma->
trackId() );
759 showerid.push_back( loEnGamma->
trackId() );
761 else if ( numchan[i + 1] == 7 )
772 trackid.push_back( apiontrk->
trackId() );
773 trackid.push_back( spiontrk->
trackId() );
774 showerid.push_back( gammatrk->
trackId() );
784 updateKsInfo( it,
ebeam, numofchildren, recDTag, numchan, vtxsvc, m_useVFrefine );
786 savetrack( trackid, showerid, charged_begin, charged_end, neutral_begin, neutral_end,
788 pidtag( kaonid, pionid, kaonList_tight, pionList_tight, recDTag );
790 if ( m_usevertexfit )
792 if ( m_debug ) cout <<
"beforevfit:" << endl;
794 HepLorentzVector p4change_vfit;
797 { p4change_vfit = util.
vfitref( channel, kaonid, pionid, xorigin, charged_begin ); }
798 else { p4change_vfit = util.
vfit( channel, kaonid, pionid, xorigin, charged_begin ); }
800 recDTag->
setp4( recDTag->
p4() + p4change_vfit );
809 recDTagCol->push_back( recDTag );
817 return StatusCode::SUCCESS;