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 in TDS" << endmsg;
156 return StatusCode::FAILURE;
157 }
158
159
160 Hep3Vector xorigin( 0, 0, 0 );
161 IVertexDbSvc* vtxsvc;
162 sc = serviceLocator()->service( "VertexDbSvc", vtxsvc );
164 {
165
166
168 xorigin.setX( vertex[0] );
169 xorigin.setY( vertex[1] );
170 xorigin.setZ( vertex[2] );
171 }
172 utility util;
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189 m_pionSelector->setpidtype( 0 );
190 m_kaonSelector->setpidtype( 0 );
193 CDPhotonList photonList( neutral_begin, neutral_end, *m_photonSelector );
194
196 dc_fill( ksList, recVeeVertexCol->begin(), recVeeVertexCol->end() );
197
198
199 map<EvtRecVeeVertex*, vector<double>> fitinfo;
200 for (
CDKsList::iterator ksit = ksList.particle_begin(); ksit != ksList.particle_end();
201 ++ksit )
202 {
203 EvtRecVeeVertex* ks = const_cast<EvtRecVeeVertex*>( ( *ksit ).particle().navKshort() );
204
207 }
208
210 dc_fill( pi0List, recPi0Col->begin(), recPi0Col->end() );
211
213 dc_fill( etaList, recEtaToGGCol->begin(), recEtaToGGCol->end() );
214
215
216 m_pionSelector->setpidtype( 1 );
217 m_kaonSelector->setpidtype( 1 );
220
221 int run = eventHeader->runNumber();
222 m_ievt = eventHeader->eventNumber();
223 m_nChrg = recEvent->totalCharged();
224 m_nNeu = recEvent->totalNeutral();
225 m_nPion = pionList.size();
226 m_nKaon = kaonList.size();
227 m_nPi0 = pi0List.size();
228 m_nKs = ksList.size();
229
230
231
232
233
234 if ( m_ReadBeamEFromDB && m_irun != run )
235 {
236 m_irun = run;
237 if ( m_usecalibBeamE ) m_readDb.setcalib( true );
238 m_beamE = m_readDb.getbeamE( m_irun, m_beamE );
239 if ( run > 0 ) m_beta = m_readDb.getbeta();
240
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_neutralDSelector->setebeam(
ebeam );
255 m_neutralDSelector->setbeta( m_beta );
257
258 bool isFlavorMode = false;
259
260
261
262
263
264
265 if ( channel == "D0toKPi" )
266 {
268 numchan.push_back( 1 );
269 numchan.push_back( 2 );
270 decaylist = kaonList.minus() * pionList.plus();
271 isFlavorMode = true;
272 }
273 else if ( channel == "D0toKPiPi0" )
274 {
276 numchan.push_back( 1 );
277 numchan.push_back( 2 );
278 numchan.push_back( 3 );
279 decaylist = kaonList.minus() * pionList.plus() * pi0List;
280 isFlavorMode = true;
281 }
282 else if ( channel == "D0toKPiPi0Pi0" )
283 {
285 numchan.push_back( 1 );
286 numchan.push_back( 2 );
287 numchan.push_back( 3 );
288 numchan.push_back( 3 );
289 decaylist = kaonList.minus() * pionList.plus() * pi0List * pi0List;
290 isFlavorMode = true;
291 }
292 else if ( channel == "D0toKPiPiPi" )
293 {
295 numchan.push_back( 1 );
296 numchan.push_back( 2 );
297 numchan.push_back( 2 );
298 numchan.push_back( 2 );
299 decaylist = kaonList.minus() * pionList.plus() * pionList.plus() * pionList.minus();
300 isFlavorMode = true;
301 }
302 else if ( channel == "D0toKPiPiPiPi0" )
303 {
305 numchan.push_back( 1 );
306 numchan.push_back( 2 );
307 numchan.push_back( 2 );
308 numchan.push_back( 2 );
309 numchan.push_back( 3 );
310 decaylist =
311 kaonList.minus() * pionList.plus() * pionList.plus() * pionList.minus() * pi0List;
312 isFlavorMode = true;
313 }
314 else if ( channel == "D0toKPiEta" )
315 {
317 numchan.push_back( 1 );
318 numchan.push_back( 2 );
319 numchan.push_back( 4 );
320 decaylist = kaonList.minus() * pionList.plus() * etaList;
321 isFlavorMode = true;
322 }
323 else if ( channel == "D0toKPiPi0Pi0Pi0" )
324 {
326 numchan.push_back( 1 );
327 numchan.push_back( 2 );
328 numchan.push_back( 3 );
329 numchan.push_back( 3 );
330 numchan.push_back( 3 );
331 decaylist = kaonList.minus() * pionList.plus() * pi0List * pi0List * pi0List;
332 isFlavorMode = true;
333 }
334 else if ( channel == "D0toKPiPi0Eta" )
335 {
337 numchan.push_back( 1 );
338 numchan.push_back( 2 );
339 numchan.push_back( 3 );
340 numchan.push_back( 4 );
341 decaylist = kaonList.minus() * pionList.plus() * pi0List * etaList;
342 isFlavorMode = true;
343 }
344 else if ( channel == "D0toKPiEPPiPiEta" )
345 {
347 numchan.push_back( 1 );
348 numchan.push_back( 2 );
349 numchan.push_back( 6 );
351 epList = pionList.plus() * pionList.minus() * etaList;
352 decaylist = kaonList.minus() * pionList.plus() * epList;
353 isFlavorMode = true;
354 }
355 else if ( channel == "D0toKPiEPRhoGam" )
356 {
358 numchan.push_back( 1 );
359 numchan.push_back( 2 );
360 numchan.push_back( 7 );
362 rhoList = pionList.plus() * pionList.minus();
364 epList = rhoList * photonList;
365 decaylist = kaonList.minus() * pionList.plus() * epList;
366 isFlavorMode = true;
367 }
368 else if ( channel == "D0toKKKPi" )
369 {
371 numchan.push_back( 1 );
372 numchan.push_back( 1 );
373 numchan.push_back( 1 );
374 numchan.push_back( 2 );
375 decaylist = kaonList.minus() * kaonList.plus() * kaonList.minus() * pionList.plus();
376 isFlavorMode = true;
377 }
378 else if ( channel == "D0toKsKPi" )
379 {
381 numchan.push_back( 5 );
382 numchan.push_back( 1 );
383 numchan.push_back( 2 );
384 decaylist = ksList * kaonList.minus() * pionList.plus();
385 }
386 else if ( channel == "D0toKsKPiPi0" )
387 {
389 numchan.push_back( 5 );
390 numchan.push_back( 1 );
391 numchan.push_back( 2 );
392 numchan.push_back( 3 );
393 decaylist = ksList * kaonList.minus() * pionList.plus() * pi0List;
394 }
395 else if ( channel == "D0toKsPiPi" )
396 {
398 numchan.push_back( 5 );
399 numchan.push_back( 2 );
400 numchan.push_back( 2 );
401 decaylist = ksList * pionList.plus() * pionList.minus();
402 }
403 else if ( channel == "D0toKsPiPiPi0" )
404 {
406 numchan.push_back( 5 );
407 numchan.push_back( 2 );
408 numchan.push_back( 2 );
409 numchan.push_back( 3 );
410 decaylist = ksList * pionList.plus() * pionList.minus() * pi0List;
411 }
412 else if ( channel == "D0toKsPi0" )
413 {
415 numchan.push_back( 5 );
416 numchan.push_back( 3 );
417 decaylist = ksList * pi0List;
418 }
419 else if ( channel == "D0toPiPiPi0" )
420 {
422 numchan.push_back( 2 );
423 numchan.push_back( 2 );
424 numchan.push_back( 3 );
425 decaylist = pionList.plus() * pionList.minus() * pi0List;
426 }
427 else if ( channel == "D0toPiPi" )
428 {
430 numchan.push_back( 2 );
431 numchan.push_back( 2 );
432 decaylist = pionList.plus() * pionList.minus();
433 }
434 else if ( channel == "D0toKK" )
435 {
437 numchan.push_back( 1 );
438 numchan.push_back( 1 );
439 decaylist = kaonList.minus() * kaonList.plus();
440 }
441 else if ( channel == "D0toKKPi0" )
442 {
444 numchan.push_back( 1 );
445 numchan.push_back( 1 );
446 numchan.push_back( 3 );
447 decaylist = kaonList.minus() * kaonList.plus() * pi0List;
448 }
449 else if ( channel == "D0toPi0Pi0" )
450 {
452 numchan.push_back( 3 );
453 numchan.push_back( 3 );
454 decaylist = pi0List * pi0List;
455 }
456 else if ( channel == "D0toKsKs" )
457 {
459 numchan.push_back( 5 );
460 numchan.push_back( 5 );
461 decaylist = ksList * ksList;
462 }
463 else if ( channel == "D0toKsKsPi0" )
464 {
466 numchan.push_back( 5 );
467 numchan.push_back( 5 );
468 numchan.push_back( 3 );
469 decaylist = ksList * ksList * pi0List;
470 }
471 else if ( channel == "D0toKsPi0Pi0" )
472 {
474 numchan.push_back( 5 );
475 numchan.push_back( 3 );
476 numchan.push_back( 3 );
477 decaylist = ksList * pi0List * pi0List;
478 }
479 else if ( channel == "D0toKsKK" )
480 {
482 numchan.push_back( 5 );
483 numchan.push_back( 1 );
484 numchan.push_back( 1 );
485 decaylist = ksList * kaonList.minus() * kaonList.plus();
486 }
487 else if ( channel == "D0toKsEta" )
488 {
490 numchan.push_back( 5 );
491 numchan.push_back( 4 );
492 decaylist = ksList * etaList;
493 }
494 else if ( channel == "D0toPi0Pi0Pi0" )
495 {
497 numchan.push_back( 3 );
498 numchan.push_back( 3 );
499 numchan.push_back( 3 );
500 decaylist = pi0List * pi0List * pi0List;
501 }
502 else if ( channel == "D0toKsKsKs" )
503 {
505 numchan.push_back( 5 );
506 numchan.push_back( 5 );
507 numchan.push_back( 5 );
508 decaylist = ksList * ksList * ksList;
509 }
510 else if ( channel == "D0toPiPiPiPi" )
511 {
513 numchan.push_back( 2 );
514 numchan.push_back( 2 );
515 numchan.push_back( 2 );
516 numchan.push_back( 2 );
517 decaylist = pionList.plus() * pionList.plus() * pionList.minus() * pionList.minus();
518 }
519 else if ( channel == "D0toPiPiPi0Pi0" )
520 {
522 numchan.push_back( 2 );
523 numchan.push_back( 2 );
524 numchan.push_back( 3 );
525 numchan.push_back( 3 );
526 decaylist = pionList.plus() * pionList.minus() * pi0List * pi0List;
527 }
528 else if ( channel == "D0toKKPiPi" )
529 {
531 numchan.push_back( 1 );
532 numchan.push_back( 1 );
533 numchan.push_back( 2 );
534 numchan.push_back( 2 );
535 decaylist = kaonList.minus() * kaonList.plus() * pionList.plus() * pionList.minus();
536 }
537 else if ( channel == "D0toKKPi0Pi0" )
538 {
540 numchan.push_back( 1 );
541 numchan.push_back( 1 );
542 numchan.push_back( 3 );
543 numchan.push_back( 3 );
544 decaylist = kaonList.minus() * kaonList.plus() * pi0List * pi0List;
545 }
546 else if ( channel == "D0toKsKsPiPi" )
547 {
549 numchan.push_back( 5 );
550 numchan.push_back( 5 );
551 numchan.push_back( 2 );
552 numchan.push_back( 2 );
553 decaylist = ksList * ksList * pionList.plus() * pionList.minus();
554 }
555 else if ( channel == "D0toPiPiPiPiPi0" )
556 {
558 numchan.push_back( 2 );
559 numchan.push_back( 2 );
560 numchan.push_back( 2 );
561 numchan.push_back( 2 );
562 numchan.push_back( 3 );
563 decaylist =
564 pionList.plus() * pionList.plus() * pionList.minus() * pionList.minus() * pi0List;
565 }
566 else if ( channel == "D0toKsPiPiPiPi" )
567 {
569 numchan.push_back( 5 );
570 numchan.push_back( 2 );
571 numchan.push_back( 2 );
572 numchan.push_back( 2 );
573 numchan.push_back( 2 );
574 decaylist =
575 ksList * pionList.plus() * pionList.plus() * pionList.minus() * pionList.minus();
576 }
577 else if ( channel == "D0toKKPiPiPi0" )
578 {
580 numchan.push_back( 1 );
581 numchan.push_back( 1 );
582 numchan.push_back( 2 );
583 numchan.push_back( 2 );
584 numchan.push_back( 3 );
585 decaylist =
586 kaonList.minus() * kaonList.plus() * pionList.plus() * pionList.minus() * pi0List;
587 }
588 else if ( channel == "D0toKsPi0Eta" )
589 {
591 numchan.push_back( 5 );
592 numchan.push_back( 3 );
593 numchan.push_back( 4 );
594 decaylist = ksList * pi0List * etaList;
595 }
596 else if ( channel == "D0toKsEPPiPiEta" )
597 {
599 numchan.push_back( 5 );
600 numchan.push_back( 6 );
602 epList = pionList.plus() * pionList.minus() * etaList;
603 decaylist = ksList * epList;
604 }
605 else if ( channel == "D0toKsEPRhoGam" )
606 {
608 numchan.push_back( 5 );
609 numchan.push_back( 7 );
611 rhoList = pionList.plus() * pionList.minus();
613 epList = rhoList * photonList;
614 decaylist = ksList * epList;
615 }
616 else if ( channel == "D0toKsPi0Pi0Pi0" )
617 {
619 numchan.push_back( 5 );
620 numchan.push_back( 3 );
621 numchan.push_back( 3 );
622 numchan.push_back( 3 );
623 decaylist = ksList * pi0List * pi0List * pi0List;
624 }
625 else if ( channel == "D0toKsPiPiPi0Pi0" )
626 {
628 numchan.push_back( 5 );
629 numchan.push_back( 2 );
630 numchan.push_back( 2 );
631 numchan.push_back( 3 );
632 numchan.push_back( 3 );
633 decaylist = ksList * pionList.plus() * pionList.minus() * pi0List * pi0List;
634 }
635 else if ( channel == "D0toKsPiPiEta" )
636 {
638 numchan.push_back( 5 );
639 numchan.push_back( 2 );
640 numchan.push_back( 2 );
641 numchan.push_back( 4 );
642 decaylist = ksList * pionList.plus() * pionList.minus() * etaList;
643 }
644 else if ( channel == "D0toKsPi0EPPiPiEta" )
645 {
647 numchan.push_back( 5 );
648 numchan.push_back( 3 );
649 numchan.push_back( 6 );
651 epList = pionList.plus() * pionList.minus() * etaList;
652 decaylist = ksList * pi0List * epList;
653 }
654 else if ( channel == "D0toKsPi0EPRhoGam" )
655 {
657 numchan.push_back( 5 );
658 numchan.push_back( 3 );
659 numchan.push_back( 7 );
661 rhoList = pionList.plus() * pionList.minus();
663 epList = rhoList * photonList;
664 decaylist = ksList * pi0List * epList;
665 }
666 else if ( channel == "D0toPiPiEta" )
667 {
669 numchan.push_back( 2 );
670 numchan.push_back( 2 );
671 numchan.push_back( 4 );
672 decaylist = pionList.plus() * pionList.minus() * etaList;
673 }
674 else if ( channel == "D0toPiPiPi0Eta" )
675 {
677 numchan.push_back( 2 );
678 numchan.push_back( 2 );
679 numchan.push_back( 3 );
680 numchan.push_back( 4 );
681 decaylist = pionList.plus() * pionList.minus() * pi0List * etaList;
682 }
683 else if ( channel == "D0toPiPiEPPiPiEta" )
684 {
686 numchan.push_back( 2 );
687 numchan.push_back( 2 );
688 numchan.push_back( 6 );
690 epList = pionList.plus() * pionList.minus() * etaList;
691 decaylist = pionList.plus() * pionList.minus() * epList;
692 }
693 else if ( channel == "D0toPiPiEPRhoGam" )
694 {
696 numchan.push_back( 2 );
697 numchan.push_back( 2 );
698 numchan.push_back( 7 );
700 rhoList = pionList.plus() * pionList.minus();
702 epList = rhoList * photonList;
703 decaylist = pionList.plus() * pionList.minus() * epList;
704 }
705 else if ( channel == "D0toKKEta" )
706 {
708 numchan.push_back( 1 );
709 numchan.push_back( 1 );
710 numchan.push_back( 4 );
711 decaylist = kaonList.minus() * kaonList.plus() * etaList;
712 }
713
716
718 {
719
720 EvtRecDTag* recDTag = new EvtRecDTag;
722
723 vector<int> trackid, showerid;
724 vector<int> kaonid, pionid;
725 int charm = 0;
726 int numofchildren = numchan.size() - 1;
727
728 for ( int i = 0; i < numofchildren; i++ )
729 {
730
731 const CDCandidate& daughter = ( *it ).particle().child( i );
732 if ( isFlavorMode && i == 0 ) charm = -daughter.
charge();
733
734 if ( numchan[i + 1] == 1 )
735 {
736 const EvtRecTrack* track = daughter.
track();
737 trackid.push_back( track->
trackId() );
738 kaonid.push_back( track->
trackId() );
739 }
740 else if ( numchan[i + 1] == 2 )
741 {
742 const EvtRecTrack* track = daughter.
track();
743 trackid.push_back( track->
trackId() );
744 pionid.push_back( track->
trackId() );
745 }
746 else if ( numchan[i + 1] == 3 )
747 {
750 showerid.push_back( hiEnGamma->
trackId() );
751 showerid.push_back( loEnGamma->
trackId() );
752 }
753 else if ( numchan[i + 1] == 4 )
754 {
757 showerid.push_back( hiEnGamma->
trackId() );
758 showerid.push_back( loEnGamma->
trackId() );
759 }
760 else if ( numchan[i + 1] == 5 )
761 {
762 EvtRecVeeVertex* aKsCand =
const_cast<EvtRecVeeVertex*
>( daughter.
navKshort() );
763
764 recDTag->
addToFitInfo( aKsCand->
mass(), fitinfo[aKsCand][0], fitinfo[aKsCand][1],
765 fitinfo[aKsCand][2] );
766
767 EvtRecTrack* pion1Trk = aKsCand->daughter( 0 );
768 EvtRecTrack* pion2Trk = aKsCand->daughter( 1 );
769 trackid.push_back( pion1Trk->
trackId() );
770 trackid.push_back( pion2Trk->
trackId() );
771 }
772 else if ( numchan[i + 1] == 6 )
773 {
774 const CDCandidate& apion = daughter.
decay().
child( 0 );
775 const CDCandidate& spion = daughter.
decay().
child( 1 );
776 const CDCandidate& eta = daughter.
decay().
child( 2 );
777 const EvtRecTrack* apiontrk = apion.
track();
778 const EvtRecTrack* spiontrk = spion.
track();
781
782 trackid.push_back( apiontrk->
trackId() );
783 trackid.push_back( spiontrk->
trackId() );
784 showerid.push_back( hiEnGamma->
trackId() );
785 showerid.push_back( loEnGamma->
trackId() );
786 }
787 else if ( numchan[i + 1] == 7 )
788 {
789 const CDCandidate& rho = daughter.
decay().
child( 0 );
790 const CDCandidate& gamma = daughter.
decay().
child( 1 );
791 const CDCandidate& apion = rho.
decay().
child( 0 );
792 const CDCandidate& spion = rho.
decay().
child( 1 );
793
794 const EvtRecTrack* apiontrk = apion.
track();
795 const EvtRecTrack* spiontrk = spion.
track();
796 const EvtRecTrack* gammatrk = gamma.
photon();
797
798 trackid.push_back( apiontrk->
trackId() );
799 trackid.push_back( spiontrk->
trackId() );
800 showerid.push_back( gammatrk->
trackId() );
801 }
802
803 }
804
806 if ( m_useBFC )
807 {
808
809
811 m_useVFrefine );
812 }
813 savetrack( trackid, showerid, charged_begin, charged_end, neutral_begin, neutral_end,
814 recDTag );
815 pidtag( kaonid, pionid, kaonList_tight, pionList_tight, recDTag );
816
817 if ( m_usevertexfit )
818 {
819 if ( m_debug ) cout << "beforevfit:" << endl;
820
821 HepLorentzVector p4change_vfit;
822
823 if ( m_useVFrefine )
824 { p4change_vfit = util.
vfitref( channel, kaonid, pionid, xorigin, charged_begin ); }
825 else { p4change_vfit = util.
vfit( channel, kaonid, pionid, xorigin, charged_begin ); }
826
827 recDTag->
setp4( recDTag->
p4() + p4change_vfit );
828 }
829
830 trackid.clear();
831 showerid.clear();
832 kaonid.clear();
833 pionid.clear();
834
835
836 recDTagCol->push_back( recDTag );
837
838 }
839
840 numchan.clear();
841
842 }
843
844 return StatusCode::SUCCESS;
845}
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 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
void updateKsInfo(CDDecayList::iterator, double, int, int, EvtRecDTag *, vector< int >, IVertexDbSvc *, bool)
void savetrack(vector< int >, vector< int >, EvtRecTrackIterator, EvtRecTrackIterator, EvtRecTrackIterator, EvtRecTrackIterator, EvtRecDTag *)
void pidtag(vector< int >, vector< int >, CDChargedKaonList &, CDChargedPionList &, EvtRecDTag *)
void saveD0Info(CDDecayList::iterator, double, int, int, EvtRecDTag *)
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