103 {
104 MsgStream log(
msgSvc(), name() );
105 log << MSG::INFO << "in execute()" << endmsg;
106
107 StatusCode sc;
108
109
110
111
112 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
113 int event = eventHeader->eventNumber();
114
115
116
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;
123
126
129
130 SmartDataPtr<EvtRecPi0Col> recPi0Col( eventSvc(), "/Event/EvtRec/EvtRecPi0Col" );
131 if ( !recPi0Col )
132 {
133 log << MSG::FATAL << "Could not find EvtRecPi0Col" << endmsg;
134 return StatusCode::FAILURE;
135 }
136
137 SmartDataPtr<EvtRecEtaToGGCol> recEtaToGGCol( eventSvc(), "/Event/EvtRec/EvtRecEtaToGGCol" );
138 if ( !recEtaToGGCol )
139 {
140 log << MSG::FATAL << "Could not find EvtRecEtaToGGCol" << endmsg;
141 return StatusCode::FAILURE;
142 }
143
144 SmartDataPtr<EvtRecVeeVertexCol> recVeeVertexCol( eventSvc(),
145 "/Event/EvtRec/EvtRecVeeVertexCol" );
146 if ( !recVeeVertexCol )
147 {
148 log << MSG::FATAL << "Could not find EvtRecVeeVertexCol" << endmsg;
149 return StatusCode::FAILURE;
150 }
151
153 if ( !recDTagCol )
154 {
155 log << MSG::FATAL << "EvtRecDTagCol is not registered yet" << endmsg;
156 return StatusCode::FAILURE;
157 }
158
159
160 Hep3Vector xorigin( 0, 0, 0 );
161
162 IVertexDbSvc* vtxsvc;
163 sc = serviceLocator()->service( "VertexDbSvc", vtxsvc );
165 {
166
167
169 xorigin.setX( vertex[0] );
170 xorigin.setY( vertex[1] );
171 xorigin.setZ( vertex[2] );
172 }
173
174 utility util;
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190 m_pionSelector->setpidtype( 0 );
191 m_kaonSelector->setpidtype( 0 );
194 CDPhotonList photonList( neutral_begin, neutral_end, *m_photonSelector );
195
197 dc_fill( ksList, recVeeVertexCol->begin(), recVeeVertexCol->end() );
198
199
200 map<EvtRecVeeVertex*, vector<double>> fitinfo;
201 for (
CDKsList::iterator ksit = ksList.particle_begin(); ksit != ksList.particle_end();
202 ++ksit )
203 {
204 EvtRecVeeVertex* ks = const_cast<EvtRecVeeVertex*>( ( *ksit ).particle().navKshort() );
205
208 }
209
211 dc_fill( pi0List, recPi0Col->begin(), recPi0Col->end() );
212
214 dc_fill( etaList, recEtaToGGCol->begin(), recEtaToGGCol->end() );
215
216
217 m_pionSelector->setpidtype( 1 );
218 m_kaonSelector->setpidtype( 1 );
221
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();
230
231
232
233
234
235 if ( m_ReadBeamEFromDB && m_irun != run )
236 {
237 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();
241
242 }
243 double ebeam = m_beamE;
244
245
246
247
248
249 for ( int list = 0; list < chanlist.size(); list++ )
250 {
251
252 string channel = chanlist[list];
253 vector<int> numchan;
254 m_chargedDSelector->setebeam(
ebeam );
255 m_chargedDSelector->setbeta( m_beta );
257
258
259
260
261
262 if ( channel == "DptoKPiPi" )
263 {
265 numchan.push_back( 1 );
266 numchan.push_back( 2 );
267 numchan.push_back( 2 );
268 decaylist = kaonList.minus() * pionList.plus() * pionList.plus();
269 }
270 else if ( channel == "DptoKPiPiPi0" )
271 {
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;
278 }
279 else if ( channel == "DptoKsPi" )
280 {
282 numchan.push_back( 5 );
283 numchan.push_back( 2 );
284 decaylist = ksList * pionList.plus();
285 }
286 else if ( channel == "DptoKsPiPi0" )
287 {
289 numchan.push_back( 5 );
290 numchan.push_back( 2 );
291 numchan.push_back( 3 );
292 decaylist = ksList * pionList.plus() * pi0List;
293 }
294 else if ( channel == "DptoKsPiPiPi" )
295 {
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();
302 }
303 else if ( channel == "DptoKKPi" )
304 {
306 numchan.push_back( 1 );
307 numchan.push_back( 1 );
308 numchan.push_back( 2 );
309 decaylist = kaonList.minus() * kaonList.plus() * pionList.plus();
310 }
311 else if ( channel == "DptoPiPi0" )
312 {
314 numchan.push_back( 2 );
315 numchan.push_back( 3 );
316 decaylist = pionList.plus() * pi0List;
317 }
318 else if ( channel == "DptoKPi0" )
319 {
321 numchan.push_back( 1 );
322 numchan.push_back( 3 );
323 decaylist = kaonList.plus() * pi0List;
324 }
325 else if ( channel == "DptoKsK" )
326 {
328 numchan.push_back( 5 );
329 numchan.push_back( 1 );
330 decaylist = ksList * kaonList.plus();
331 }
332 else if ( channel == "DptoPiPiPi" )
333 {
335 numchan.push_back( 2 );
336 numchan.push_back( 2 );
337 numchan.push_back( 2 );
338 decaylist = pionList.plus() * pionList.plus() * pionList.minus();
339 }
340 else if ( channel == "DptoPiPi0Pi0" )
341 {
343 numchan.push_back( 2 );
344 numchan.push_back( 3 );
345 numchan.push_back( 3 );
346 decaylist = pionList.plus() * pi0List * pi0List;
347 }
348 else if ( channel == "DptoKsKsPi" )
349 {
351 numchan.push_back( 5 );
352 numchan.push_back( 5 );
353 numchan.push_back( 2 );
354 decaylist = ksList * ksList * pionList.plus();
355 }
356 else if ( channel == "DptoKsKPi0" )
357 {
359 numchan.push_back( 5 );
360 numchan.push_back( 1 );
361 numchan.push_back( 3 );
362 decaylist = ksList * kaonList.plus() * pi0List;
363 }
364 else if ( channel == "DptoKsKsK" )
365 {
367 numchan.push_back( 5 );
368 numchan.push_back( 5 );
369 numchan.push_back( 1 );
370 decaylist = ksList * ksList * kaonList.plus();
371 }
372 else if ( channel == "DptoPiPiPiPi0" )
373 {
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;
380 }
381 else if ( channel == "DptoKsPiPi0Pi0" )
382 {
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;
389 }
390 else if ( channel == "DptoKsKplusPiPi" )
391 {
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();
398 }
399 else if ( channel == "DptoKsKminusPiPi" )
400 {
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();
407 }
408 else if ( channel == "DptoKKPiPi0" )
409 {
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;
416 }
417 else if ( channel == "DptoPiPiPiPiPi" )
418 {
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() *
426 pionList.minus();
427 }
428 else if ( channel == "DptoKPiPiPiPi" )
429 {
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() *
437 pionList.minus();
438 }
439 else if ( channel == "DptoPiEta" )
440 {
442 numchan.push_back( 2 );
443 numchan.push_back( 4 );
444 decaylist = pionList.plus() * etaList;
445 }
446 else if ( channel == "DptoKsPiEta" )
447 {
449 numchan.push_back( 5 );
450 numchan.push_back( 2 );
451 numchan.push_back( 4 );
452 decaylist = ksList * pionList.plus() * etaList;
453 }
454 else if ( channel == "DptoKPiPiPi0Pi0" )
455 {
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;
463 }
464 else if ( channel == "DptoKsPiPiPiPi0" )
465 {
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;
473 }
474 else if ( channel == "DptoKsPiPi0Pi0Pi0" )
475 {
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;
483 }
484 else if ( channel == "DptoKsPiEPPiPiEta" )
485 {
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;
493 }
494 else if ( channel == "DptoKsPiEPRhoGam" )
495 {
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;
505 }
506 else if ( channel == "DptoKPiPiEta" )
507 {
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;
514 }
515 else if ( channel == "DptoKsPiPi0Eta" )
516 {
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;
523 }
524 else if ( channel == "DptoKsKKPi" )
525 {
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();
532 }
533 else if ( channel == "DptoPiPiPiPi0Pi0" )
534 {
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;
542 }
543 else if ( channel == "DptoPiPi0Eta" )
544 {
546 numchan.push_back( 2 );
547 numchan.push_back( 3 );
548 numchan.push_back( 4 );
549 decaylist = pionList.plus() * pi0List * etaList;
550 }
551 else if ( channel == "DptoPiPiPiEta" )
552 {
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;
559 }
560 else if ( channel == "DptoPiEtaEta" )
561 {
563 numchan.push_back( 2 );
564 numchan.push_back( 4 );
565 numchan.push_back( 4 );
566 decaylist = pionList.plus() * etaList * etaList;
567 }
568 else if ( channel == "DptoPiEPPiPiEta" )
569 {
571 numchan.push_back( 2 );
572 numchan.push_back( 6 );
574 epList = pionList.plus() * pionList.minus() * etaList;
575 decaylist = pionList.plus() * epList;
576 }
577 else if ( channel == "DptoPiEPRhoGam" )
578 {
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;
587 }
588 else if ( channel == "DptoPiPi0EPPiPiEta" )
589 {
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;
597 }
598 else if ( channel == "DptoPiPi0EPRhoGam" )
599 {
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;
609 }
610 else if ( channel == "DptoKsKsPiPi0" )
611 {
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;
618 }
619 else if ( channel == "DptoKsKPi0Pi0" )
620 {
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;
627 }
628 else if ( channel == "DptoKsKEta" )
629 {
631 numchan.push_back( 5 );
632 numchan.push_back( 1 );
633 numchan.push_back( 4 );
634 decaylist = ksList * kaonList.plus() * etaList;
635 }
636 else if ( channel == "DptoKKPiPiPi" )
637 {
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 );
644 decaylist = kaonList.minus() * kaonList.plus() * pionList.plus() * pionList.minus() *
645 pionList.plus();
646 }
647 else if ( channel == "DptoKpPiPi" )
648 {
650 numchan.push_back( 1 );
651 numchan.push_back( 2 );
652 numchan.push_back( 2 );
653 decaylist = kaonList.plus() * pionList.plus() * pionList.minus();
654 }
655 else if ( channel == "DptoKpPi0Pi0" )
656 {
658 numchan.push_back( 1 );
659 numchan.push_back( 3 );
660 numchan.push_back( 3 );
661 decaylist = kaonList.plus() * pi0List * pi0List;
662 }
663 else if ( channel == "DptoKpPi0Eta" )
664 {
666 numchan.push_back( 1 );
667 numchan.push_back( 3 );
668 numchan.push_back( 4 );
669 decaylist = kaonList.plus() * pi0List * etaList;
670 }
671 else if ( channel == "DptoKpPiPiPi0" )
672 {
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;
679 }
680 else if ( channel == "DptoKpPiPiEta" )
681 {
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;
688 }
689
692
694 {
695
696 EvtRecDTag* recDTag = new EvtRecDTag;
698
699 vector<int> trackid, showerid;
700 vector<int> kaonid, pionid;
701 int numofchildren = numchan.size() - 1;
702
703 for ( int i = 0; i < numofchildren; i++ )
704 {
705
706 const CDCandidate& daughter = ( *it ).particle().child( i );
707
708 if ( numchan[i + 1] == 1 )
709 {
710 const EvtRecTrack* track = daughter.
track();
711 trackid.push_back( track->
trackId() );
712 kaonid.push_back( track->
trackId() );
713 }
714 else if ( numchan[i + 1] == 2 )
715 {
716 const EvtRecTrack* track = daughter.
track();
717 trackid.push_back( track->
trackId() );
718 pionid.push_back( track->
trackId() );
719 }
720 else if ( numchan[i + 1] == 3 )
721 {
724 showerid.push_back( hiEnGamma->
trackId() );
725 showerid.push_back( loEnGamma->
trackId() );
726 }
727 else if ( numchan[i + 1] == 4 )
728 {
731 showerid.push_back( hiEnGamma->
trackId() );
732 showerid.push_back( loEnGamma->
trackId() );
733 }
734 else if ( numchan[i + 1] == 5 )
735 {
736 EvtRecVeeVertex* aKsCand =
const_cast<EvtRecVeeVertex*
>( daughter.
navKshort() );
737
738 recDTag->
addToFitInfo( aKsCand->
mass(), fitinfo[aKsCand][0], fitinfo[aKsCand][1],
739 fitinfo[aKsCand][2] );
740
741 EvtRecTrack* pion1Trk = aKsCand->daughter( 0 );
742 EvtRecTrack* pion2Trk = aKsCand->daughter( 1 );
743 trackid.push_back( pion1Trk->
trackId() );
744 trackid.push_back( pion2Trk->
trackId() );
745 }
746 else if ( numchan[i + 1] == 6 )
747 {
748 const CDCandidate& apion = daughter.
decay().
child( 0 );
749 const CDCandidate& spion = daughter.
decay().
child( 1 );
750 const CDCandidate& eta = daughter.
decay().
child( 2 );
751 const EvtRecTrack* apiontrk = apion.
track();
752 const EvtRecTrack* spiontrk = spion.
track();
755
756 trackid.push_back( apiontrk->
trackId() );
757 trackid.push_back( spiontrk->
trackId() );
758 showerid.push_back( hiEnGamma->
trackId() );
759 showerid.push_back( loEnGamma->
trackId() );
760 }
761 else if ( numchan[i + 1] == 7 )
762 {
763 const CDCandidate& rho = daughter.
decay().
child( 0 );
764 const CDCandidate& gamma = daughter.
decay().
child( 1 );
765 const CDCandidate& apion = rho.
decay().
child( 0 );
766 const CDCandidate& spion = rho.
decay().
child( 1 );
767
768 const EvtRecTrack* apiontrk = apion.
track();
769 const EvtRecTrack* spiontrk = spion.
track();
770 const EvtRecTrack* gammatrk = gamma.
photon();
771
772 trackid.push_back( apiontrk->
trackId() );
773 trackid.push_back( spiontrk->
trackId() );
774 showerid.push_back( gammatrk->
trackId() );
775 }
776
777 }
778
780 if ( m_useBFC )
781 {
782
783
784 updateKsInfo( it,
ebeam, numofchildren, recDTag, numchan, vtxsvc, m_useVFrefine );
785 }
786 savetrack( trackid, showerid, charged_begin, charged_end, neutral_begin, neutral_end,
787 recDTag );
788 pidtag( kaonid, pionid, kaonList_tight, pionList_tight, recDTag );
789
790 if ( m_usevertexfit )
791 {
792 if ( m_debug ) cout << "beforevfit:" << endl;
793
794 HepLorentzVector p4change_vfit;
795
796 if ( m_useVFrefine )
797 { p4change_vfit = util.
vfitref( channel, kaonid, pionid, xorigin, charged_begin ); }
798 else { p4change_vfit = util.
vfit( channel, kaonid, pionid, xorigin, charged_begin ); }
799
800 recDTag->
setp4( recDTag->
p4() + p4change_vfit );
801 }
802
803 trackid.clear();
804 showerid.clear();
805 kaonid.clear();
806 pionid.clear();
807
808
809 recDTagCol->push_back( recDTag );
810
811 }
812
813 numchan.clear();
814
815 }
816
817 return StatusCode::SUCCESS;
818}
DCFillableChargedList< CDChargedKaon > CDChargedKaonList
DCFillableChargedList< CDChargedPion > CDChargedPionList
DCDecayList< CDDecay, CDDecay::CandidateClass > CDDecayList
DCFillableNeutralList< CDEta > CDEtaList
DCFillableNeutralList< CDKs > CDKsList
DCFillableNeutralList< CDPhoton > CDPhotonList
DCFillableNeutralList< CDPi0 > CDPi0List
void dc_fill(DCFillableChargedList< Charged > &aFillableList, WitnessIterator first, WitnessIterator last)
EvtRecTrackCol::iterator EvtRecTrackIterator
virtual const DecayEvidence & decay() const
virtual const EvtRecTrack * photon() const
virtual const EvtRecTrack * track() const
virtual const EvtRecVeeVertex * navKshort() const
virtual const EvtRecPi0 * navPi0() const
virtual const EvtRecEtaToGG * navEta() const
const CDCandidate & child(unsigned int aPosition) const
void updateKsInfo(CDDecayList::iterator, double, int, EvtRecDTag *, vector< int >, IVertexDbSvc *, bool)
void saveDpInfo(CDDecayList::iterator, double, int, EvtRecDTag *)
void pidtag(vector< int >, vector< int >, CDChargedKaonList &, CDChargedPionList &, EvtRecDTag *)
void savetrack(vector< int >, vector< int >, EvtRecTrackIterator, EvtRecTrackIterator, EvtRecTrackIterator, EvtRecTrackIterator, EvtRecDTag *)
void setdecayMode(DecayMode decayMode)
HepLorentzVector p4() const
void setp4(HepLorentzVector p4)
void addToFitInfo(double ksmass, double chi2, double length, double error)
const EvtRecTrack * hiEnGamma() const
const EvtRecTrack * loEnGamma() const
const EvtRecTrack * loEnGamma() const
const EvtRecTrack * hiEnGamma() const
virtual bool isVertexValid()=0
virtual double * PrimaryVertex()=0
dchain::MuteWholeCandidateItr< CandidateClass > iterator
HepLorentzVector vfitref(string channel, vector< int > kaonid, vector< int > pionid, HepPoint3D vx, EvtRecTrackIterator charged_begin)
vector< double > SecondaryVFitref(EvtRecVeeVertex *ks, IVertexDbSvc *vtxsvc)
HepLorentzVector vfit(string channel, vector< int > kaonid, vector< int > pionid, HepPoint3D vx, EvtRecTrackIterator charged_begin)
vector< double > SecondaryVFit(EvtRecVeeVertex *ks, IVertexDbSvc *vtxsvc)
_EXTERN_ std::string EvtRecEvent
_EXTERN_ std::string EvtRecDTagCol
_EXTERN_ std::string EvtRecTrackCol