279 {
280
281
282
283 MsgStream log(
msgSvc(), name() );
284 log << MSG::INFO << "in execute()" << endmsg;
285
286 setFilterPassed( false );
287
288 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
289 int runNo = eventHeader->runNumber();
290 int event = eventHeader->eventNumber();
291 log << MSG::DEBUG <<
"runNo, evtnum = " <<
runNo <<
" , " <<
event << endmsg;
292
294
295
297 log << MSG::INFO << "get event tag OK" << endmsg;
298 log << MSG::DEBUG << "ncharg, nneu, tottks = " << evtRecEvent->totalCharged() << " , "
299 << evtRecEvent->totalNeutral() << " , " << evtRecEvent->totalTracks() << endmsg;
300
302
303
304
305
306 if ( evtRecEvent->totalNeutral() > 100 ) { return StatusCode::SUCCESS; }
307
308 Vint iGood, ipip, ipim;
309 iGood.clear();
310 ipip.clear();
311 ipim.clear();
313 ppip.clear();
314 ppim.clear();
315
316 Hep3Vector xorigin( 0, 0, 0 );
317
318
319 IVertexDbSvc* vtxsvc;
320 Gaudi::svcLocator()->service( "VertexDbSvc", vtxsvc ).ignore();
322 {
325
326
327 xorigin.setX( dbv[0] );
328 xorigin.setY( dbv[1] );
329 xorigin.setZ( dbv[2] );
330 }
331
332 int nCharge = 0;
333 for ( int i = 0; i < evtRecEvent->totalCharged(); i++ )
334 {
336 if ( !( *itTrk )->isMdcTrackValid() ) continue;
337 if ( !( *itTrk )->isMdcKalTrackValid() ) continue;
338 RecMdcTrack* mdcTrk = ( *itTrk )->mdcTrack();
339
340 double pch = mdcTrk->
p();
341 double x0 = mdcTrk->
x();
342 double y0 = mdcTrk->
y();
343 double z0 = mdcTrk->
z();
344 double phi0 = mdcTrk->
helix( 1 );
345 double xv = xorigin.x();
346 double yv = xorigin.y();
347 double Rxy = fabs( ( x0 - xv ) *
cos( phi0 ) + ( y0 - yv ) *
sin( phi0 ) );
348
349 double m_vx0 = x0;
350 double m_vy0 = y0;
351 double m_vz0 = z0 - xorigin.z();
352 double m_vr0 = Rxy;
353 double m_Vctc = z0 / sqrt( Rxy * Rxy + z0 * z0 );
354 double m_Vct =
cos( mdcTrk->
theta() );
355
356
357
358 if ( fabs( m_vz0 ) >= m_vz0cut ) continue;
359 if ( m_vr0 >= m_vr0cut ) continue;
360
361 iGood.push_back( ( *itTrk )->trackId() );
362 nCharge += mdcTrk->
charge();
363 }
364
365
366
367
368 int nGood = iGood.size();
369
370 log << MSG::DEBUG << "ngood, totcharge = " << nGood << " , " << nCharge << endmsg;
371 if ( ( nGood != 4 ) || ( nCharge != 0 ) ) { return StatusCode::SUCCESS; }
372
374
376 iGam.clear();
377 for ( int i = evtRecEvent->totalCharged(); i < evtRecEvent->totalTracks(); i++ )
378 {
380 if ( !( *itTrk )->isEmcShowerValid() ) continue;
381 RecEmcShower* emcTrk = ( *itTrk )->emcShower();
382 Hep3Vector emcpos( emcTrk->
x(), emcTrk->
y(), emcTrk->
z() );
383
384 double dthe = 200.;
385 double dphi = 200.;
386 double dang = 200.;
387 log << MSG::DEBUG << "liuf neu= " << i << endmsg;
388 for ( int j = 0; j < evtRecEvent->totalCharged(); j++ )
389 {
391 if ( !( *jtTrk )->isExtTrackValid() ) continue;
392 RecExtTrack* extTrk = ( *jtTrk )->extTrack();
395 log << MSG::DEBUG << "liuf charge= " << j << endmsg;
396
397 double angd = extpos.angle( emcpos );
398 double thed = extpos.theta() - emcpos.theta();
399 double phid = extpos.deltaPhi( emcpos );
400 thed = fmod( thed + CLHEP::twopi + CLHEP::twopi +
pi, CLHEP::twopi ) - CLHEP::pi;
401 phid = fmod( phid + CLHEP::twopi + CLHEP::twopi +
pi, CLHEP::twopi ) - CLHEP::pi;
402
403
404
405 if ( angd < dang )
406 {
407 dang = angd;
408 dthe = thed;
409 dphi = phid;
410 }
411 }
412 if ( dang >= 200 ) continue;
413 double eraw = emcTrk->
energy();
414 dthe = dthe * 180 / ( CLHEP::pi );
415 dphi = dphi * 180 / ( CLHEP::pi );
416 dang = dang * 180 / ( CLHEP::pi );
417
418 double m_dthe = dthe;
419 double m_dphi = dphi;
420 double m_dang = dang;
421 double m_eraw = eraw;
422
423
424 log << MSG::DEBUG << "eraw dang= " << eraw << " , " << dang << "," << i << endmsg;
425 if ( eraw < m_energyThreshold ) continue;
426 if ( dang < m_gammaAngCut ) continue;
427
428
429
430
431 iGam.push_back( ( *itTrk )->trackId() );
432 }
433
434
435
436
437 int nGam = iGam.size();
438
439 log << MSG::DEBUG << "num Good Photon " << nGam << " , " << evtRecEvent->totalNeutral()
440 << endmsg;
441 if ( nGam < 2 ) { return StatusCode::SUCCESS; }
442
444
445
446
447
448
450 pGam.clear();
451 for ( int i = 0; i < nGam; i++ )
452 {
454 RecEmcShower* emcTrk = ( *itTrk )->emcShower();
455 double eraw = emcTrk->
energy();
456 double phi = emcTrk->
phi();
457 double the = emcTrk->
theta();
458 HepLorentzVector ptrk;
459 ptrk.setPx( eraw *
sin( the ) *
cos( phi ) );
460 ptrk.setPy( eraw *
sin( the ) *
sin( phi ) );
461 ptrk.setPz( eraw *
cos( the ) );
462 ptrk.setE( eraw );
463
464
465
466 pGam.push_back( ptrk );
467 }
468
469 for ( int i = 0; i < nGood; i++ )
470 {
472 if ( !( *itTrk )->isMdcTrackValid() ) continue;
473 RecMdcTrack* mdcTrk = ( *itTrk )->mdcTrack();
474 if ( !( *itTrk )->isMdcKalTrackValid() ) continue;
475 RecMdcKalTrack* mdcKalTrk = ( *itTrk )->mdcKalTrack();
477 if ( mdcKalTrk->
charge() > 0 )
478 {
479 ipip.push_back( iGood[i] );
480 HepLorentzVector ptrk;
481 ptrk.setPx( mdcKalTrk->
px() );
482 ptrk.setPy( mdcKalTrk->
py() );
483 ptrk.setPz( mdcKalTrk->
pz() );
484 double p3 = ptrk.mag();
485 ptrk.setE( sqrt( p3 * p3 +
mpi *
mpi ) );
486 ppip.push_back( ptrk );
487 }
488 else
489 {
490 ipim.push_back( iGood[i] );
491 HepLorentzVector ptrk;
492 ptrk.setPx( mdcKalTrk->
px() );
493 ptrk.setPy( mdcKalTrk->
py() );
494 ptrk.setPz( mdcKalTrk->
pz() );
495 double p3 = ptrk.mag();
496 ptrk.setE( sqrt( p3 * p3 +
mpi *
mpi ) );
497 ppim.push_back( ptrk );
498 }
499 }
500
501 int npip = ipip.size();
502 int npim = ipim.size();
503 if ( npip != 2 || npim != 2 ) return StatusCode::SUCCESS;
504
505
506
507
509
510
511
512
513
514
515
516 HepLorentzVector pTot0( 0.011 * 3.6862, 0, 0, 3.6862 );
517 HepLorentzVector pTrec1, pTrec2, pTrec3, pTrec4;
518 HepLorentzVector pTrecf;
519 double m_recjpsi1, m_recjpsi2, m_recjpsi3, m_recjpsi4, m_recppf;
520 double deljp1, deljp2, deljp3, deljp4;
521 pTrec1 = pTot0 - ppip[0] - ppim[0];
522 pTrec2 = pTot0 - ppip[0] - ppim[1];
523 pTrec3 = pTot0 - ppip[1] - ppim[0];
524 pTrec4 = pTot0 - ppip[1] - ppim[1];
525 m_recjpsi1 = pTrec1.m();
526 m_recjpsi2 = pTrec2.m();
527 m_recjpsi3 = pTrec3.m();
528 m_recjpsi4 = pTrec4.m();
529 deljp1 = fabs( m_recjpsi1 - 3.097 );
530 deljp2 = fabs( m_recjpsi2 - 3.097 );
531 deljp3 = fabs( m_recjpsi3 - 3.097 );
532 deljp4 = fabs( m_recjpsi4 - 3.097 );
533
534 int itmp, itmp1, itmp2;
535 HepLorentzVector ptmp, ptmp1, ptmp2;
536
537 pTrecf = pTrec1;
538 m_recppf = pTrec1.m();
539
540 if ( deljp2 < deljp1 && deljp2 < deljp3 && deljp2 < deljp4 )
541 {
542 itmp = ipim[1];
543 ipim[1] = ipim[0];
544 ipim[0] = itmp;
545
546 ptmp = ppim[1];
547 ppim[1] = ppim[0];
548 ppim[0] = ptmp;
549
550 pTrecf = pTrec2;
551 m_recppf = pTrec2.m();
552 }
553
554 if ( deljp3 < deljp1 && deljp3 < deljp2 && deljp3 < deljp4 )
555 {
556 itmp = ipip[1];
557 ipip[1] = ipip[0];
558 ipip[0] = itmp;
559
560 ptmp = ppip[1];
561 ppip[1] = ppip[0];
562 ppip[0] = ptmp;
563
564 pTrecf = pTrec3;
565 m_recppf = pTrec3.m();
566 }
567
568 if ( deljp4 < deljp1 && deljp4 < deljp2 && deljp4 < deljp3 )
569 {
570 itmp1 = ipip[1];
571 ipip[1] = ipip[0];
572 ipip[0] = itmp1;
573 itmp2 = ipim[1];
574 ipim[1] = ipim[0];
575 ipim[0] = itmp2;
576
577 ptmp1 = ppip[1];
578 ppip[1] = ppip[0];
579 ppip[0] = ptmp1;
580 ptmp2 = ppim[1];
581 ppim[1] = ppim[0];
582 ppim[0] = ptmp2;
583
584 pTrecf = pTrec4;
585 m_recppf = pTrec4.m();
586 }
587
588 if ( fabs( m_recppf - 3.097 ) > 0.2 ) return StatusCode::SUCCESS;
589
590 log << MSG::DEBUG << "ngood track ID after jpsi = " << ipip[0] << " , " << ipim[0] << " , "
591 << ipip[1] << " , " << ipim[1] << endmsg;
593
594 HepLorentzVector ppi2_no1 = ppip[0] + ppim[0];
595 HepLorentzVector ppi2_no2 = ppip[1] + ppim[1];
596 HepLorentzVector ppi2_no3 = ppip[0] + ppim[1];
597 HepLorentzVector ppi2_no4 = ppip[1] + ppim[0];
598 HepLorentzVector p4pi_no = ppi2_no1 + ppi2_no2;
599
600 double emcTg1 = 0.0;
601 double emcTg2 = 0.0;
602 double emcTg3 = 0.0;
603 double emcTg4 = 0.0;
604 double laypi1 = -1.0;
605 double laypi2 = -1.0;
606 double laypi3 = -1.0;
607 double laypi4 = -1.0;
608
610 RecMdcTrack* mdcTrkp1 = ( *itTrkp1 )->mdcTrack();
611 RecMdcKalTrack* mdcKalTrkp1 = ( *itTrkp1 )->mdcKalTrack();
612 RecEmcShower* emcTrkp1 = ( *itTrkp1 )->emcShower();
613 RecMucTrack* mucTrkp1 = ( *itTrkp1 )->mucTrack();
614
615 double phi01 = mdcTrkp1->
helix( 1 );
616 double m_p1vx = mdcTrkp1->
x();
617 double m_p1vy = mdcTrkp1->
y();
618 double m_p1vz = mdcTrkp1->
z() - xorigin.z();
619 double m_p1vr = fabs( ( mdcTrkp1->
x() - xorigin.x() ) *
cos( phi01 ) +
620 ( mdcTrkp1->
y() - xorigin.y() ) *
sin( phi01 ) );
621 double m_p1vct =
cos( mdcTrkp1->
theta() );
622 double m_p1ptot = mdcKalTrkp1->
p();
623 double m_p1pxy =
624 sqrt( mdcKalTrkp1->
px() * mdcKalTrkp1->
px() + mdcKalTrkp1->
py() * mdcKalTrkp1->
py() );
625
626 if ( ( *itTrkp1 )->isEmcShowerValid() ) { emcTg1 = emcTrkp1->
energy(); }
627 if ( ( *itTrkp1 )->isMucTrackValid() ) { laypi1 = mucTrkp1->
numLayers(); }
628 double m_laypip1 = laypi1;
629
631 RecMdcTrack* mdcTrkm1 = ( *itTrkm1 )->mdcTrack();
632 RecMdcKalTrack* mdcKalTrkm1 = ( *itTrkm1 )->mdcKalTrack();
633 RecEmcShower* emcTrkm1 = ( *itTrkm1 )->emcShower();
634 RecMucTrack* mucTrkm1 = ( *itTrkm1 )->mucTrack();
635
636 double phi02 = mdcTrkm1->
helix( 1 );
637 double m_m1vx = mdcTrkm1->
x();
638 double m_m1vy = mdcTrkm1->
y();
639 double m_m1vz = mdcTrkm1->
z() - xorigin.z();
640 double m_m1vr = fabs( ( mdcTrkm1->
x() - xorigin.x() ) *
cos( phi02 ) +
641 ( mdcTrkm1->
y() - xorigin.y() ) *
sin( phi02 ) );
642 double m_m1vct =
cos( mdcTrkm1->
theta() );
643 double m_m1ptot = mdcKalTrkm1->
p();
644 double m_m1pxy =
645 sqrt( mdcKalTrkm1->
px() * mdcKalTrkm1->
px() + mdcKalTrkm1->
py() * mdcKalTrkm1->
py() );
646
647 if ( ( *itTrkm1 )->isEmcShowerValid() ) { emcTg2 = emcTrkm1->
energy(); }
648 if ( ( *itTrkm1 )->isMucTrackValid() ) { laypi2 = mucTrkm1->
numLayers(); }
649 double m_laypim1 = laypi2;
650
652 RecMdcTrack* mdcTrkp2 = ( *itTrkp2 )->mdcTrack();
653 RecMdcKalTrack* mdcKalTrkp2 = ( *itTrkp2 )->mdcKalTrack();
654 RecEmcShower* emcTrkp2 = ( *itTrkp2 )->emcShower();
655 RecMucTrack* mucTrkp2 = ( *itTrkp2 )->mucTrack();
656
657 double phi03 = mdcTrkp2->
helix( 1 );
658 double m_p2vx = mdcTrkp2->
x();
659 double m_p2vy = mdcTrkp2->
y();
660 double m_p2vz = mdcTrkp2->
z() - xorigin.z();
661 double m_p2vr = fabs( ( mdcTrkp2->
x() - xorigin.x() ) *
cos( phi03 ) +
662 ( mdcTrkp2->
y() - xorigin.y() ) *
sin( phi03 ) );
663 double m_p2vct =
cos( mdcTrkp2->
theta() );
664 double m_p2ptot = mdcKalTrkp2->
p();
665 double m_p2pxy =
666 sqrt( mdcKalTrkp2->
px() * mdcKalTrkp2->
px() + mdcKalTrkp2->
py() * mdcKalTrkp2->
py() );
667
668 if ( ( *itTrkp2 )->isEmcShowerValid() ) { emcTg3 = emcTrkp2->
energy(); }
669 if ( ( *itTrkp2 )->isMucTrackValid() ) { laypi3 = mucTrkp2->
numLayers(); }
670 double m_laypip2 = laypi3;
671
673 RecMdcTrack* mdcTrkm2 = ( *itTrkm2 )->mdcTrack();
674 RecMdcKalTrack* mdcKalTrkm2 = ( *itTrkm2 )->mdcKalTrack();
675 RecEmcShower* emcTrkm2 = ( *itTrkm2 )->emcShower();
676 RecMucTrack* mucTrkm2 = ( *itTrkm2 )->mucTrack();
677
678 double phi04 = mdcTrkm2->
helix( 1 );
679 double m_m2vx = mdcTrkm2->
x();
680 double m_m2vy = mdcTrkm2->
y();
681 double m_m2vz = mdcTrkm2->
z() - xorigin.z();
682 double m_m2vr = fabs( ( mdcTrkm2->
x() - xorigin.x() ) *
cos( phi04 ) +
683 ( mdcTrkm2->
y() - xorigin.y() ) *
sin( phi04 ) );
684 double m_m2vct =
cos( mdcTrkm2->
theta() );
685 double m_m2ptot = mdcKalTrkm2->
p();
686 double m_m2pxy =
687 sqrt( mdcKalTrkm2->
px() * mdcKalTrkm2->
px() + mdcKalTrkm2->
py() * mdcKalTrkm2->
py() );
688
689 if ( ( *itTrkm2 )->isEmcShowerValid() ) { emcTg4 = emcTrkm2->
energy(); }
690 if ( ( *itTrkm2 )->isMucTrackValid() ) { laypi4 = mucTrkm2->
numLayers(); }
691 double m_laypim2 = laypi4;
692
693 double m_emcTp1 = emcTg1;
694 double m_emcTm1 = emcTg2;
695 double m_emcTp2 = emcTg3;
696 double m_emcTm2 = emcTg4;
697
698 if ( fabs( m_p1vz ) >= m_vz1cut ) return StatusCode::SUCCESS;
699 if ( m_p1vr >= m_vr1cut ) return StatusCode::SUCCESS;
700 if ( fabs( m_p1vct ) >= m_cthcut ) return StatusCode::SUCCESS;
701
702 if ( fabs( m_m1vz ) >= m_vz1cut ) return StatusCode::SUCCESS;
703 if ( m_m1vr >= m_vr1cut ) return StatusCode::SUCCESS;
704 if ( fabs( m_m1vct ) >= m_cthcut ) return StatusCode::SUCCESS;
706
707 HepLorentzVector p4muonp = ppip[1];
708 HepLorentzVector p4muonm = ppim[1];
709 HepLorentzVector p4uu = pTrecf;
710
711
712 Hep3Vector p3jpsiUnit = ( p4uu.vect() ).unit();
713 double jBeta = p4uu.beta();
714
715
716
717
718
719
720
721
722 HepLorentzVector pTot;
723 double minpi0 = 999.0;
724 for ( int i = 0; i < nGam - 1; i++ )
725 {
726 for ( int j = i + 1; j < nGam; j++ )
727 {
728 HepLorentzVector p2g = pGam[i] + pGam[j];
729 pTot = ppip[0] + ppim[0] + ppip[1] + ppim[1];
730 pTot += p2g;
731 if ( fabs( p2g.m() - 0.135 ) < minpi0 )
732 {
733 minpi0 = fabs( p2g.m() - 0.135 );
734
735 double m_m2gg = p2g.m();
736
737 HepLorentzVector prho0_no = ppi2_no2;
738 HepLorentzVector prhop_no = ppip[1] + p2g;
739 HepLorentzVector prhom_no = ppim[1] + p2g;
740 HepLorentzVector prho0pi0 = ppi2_no2 + p2g;
741 HepLorentzVector frho1pi0 = ppi2_no1 + p2g;
742 HepLorentzVector frho2pi0 = ppi2_no3 + p2g;
743 HepLorentzVector frho3pi0 = ppi2_no4 + p2g;
744 HepLorentzVector prho0g1 = ppi2_no2 + pGam[i];
745 HepLorentzVector prho0g2 = ppi2_no2 + pGam[j];
746 HepLorentzVector frho1g1 = ppi2_no1 + pGam[i];
747 HepLorentzVector frho1g2 = ppi2_no1 + pGam[j];
748 HepLorentzVector frho2g1 = ppi2_no3 + pGam[i];
749 HepLorentzVector frho2g2 = ppi2_no3 + pGam[j];
750 HepLorentzVector frho3g1 = ppi2_no4 + pGam[i];
751 HepLorentzVector frho3g2 = ppi2_no4 + pGam[j];
752 HepLorentzVector p5pi_no = p4pi_no + p2g;
753
754
755 double m_prho0_no = prho0_no.m();
756 double m_prhop_no = prhop_no.m();
757 double m_prhom_no = prhom_no.m();
758 double m_prho0pi0 = prho0pi0.m();
759 double m_frho1pi0 = frho1pi0.m();
760 double m_frho2pi0 = frho2pi0.m();
761 double m_frho3pi0 = frho3pi0.m();
762 double m_prho0g1 = prho0g1.m();
763 double m_prho0g2 = prho0g2.m();
764 double m_frho1g1 = frho1g1.m();
765 double m_frho1g2 = frho1g2.m();
766 double m_frho2g1 = frho2g1.m();
767 double m_frho2g2 = frho2g2.m();
768 double m_frho3g1 = frho3g1.m();
769 double m_frho3g2 = frho3g2.m();
770 double m_p4pi_no = p4pi_no.m();
771 double m_p5pi_no = p5pi_no.m();
772 double m_mdcpx1 = ppip[0].px();
773 double m_mdcpy1 = ppip[0].py();
774 double m_mdcpz1 = ppip[0].pz();
775 double m_mdcpe1 = ppip[0].e();
776 double m_mdcpx2 = ppim[0].px();
777 double m_mdcpy2 = ppim[0].py();
778 double m_mdcpz2 = ppim[0].pz();
779 double m_mdcpe2 = ppim[0].e();
780 double m_mdcpx3 = ppip[1].px();
781 double m_mdcpy3 = ppip[1].py();
782 double m_mdcpz3 = ppip[1].pz();
783 double m_mdcpe3 = ppip[1].e();
784 double m_mdcpx4 = ppim[1].px();
785 double m_mdcpy4 = ppim[1].py();
786 double m_mdcpz4 = ppim[1].pz();
787 double m_mdcpe4 = ppim[1].e();
788 double m_mdcpxg1 = pGam[i].px();
789 double m_mdcpyg1 = pGam[i].py();
790 double m_mdcpzg1 = pGam[i].pz();
791 double m_mdcpeg1 = pGam[i].e();
792 double m_mdcpxg2 = pGam[j].px();
793 double m_mdcpyg2 = pGam[j].py();
794 double m_mdcpzg2 = pGam[j].pz();
795 double m_mdcpeg2 = pGam[j].e();
796 double m_etot = pTot.e();
797 double m_mrecjp1 = m_recjpsi1;
798 double m_mrecjp2 = m_recjpsi2;
799 double m_mrecjp3 = m_recjpsi3;
800 double m_mrecjp4 = m_recjpsi4;
801
802
803 }
804 }
805 }
807
808
809
810
811
813 HepSymMatrix Evx( 3, 0 );
814 double bx = 1E+6;
815 double by = 1E+6;
816 double bz = 1E+6;
817 Evx[0][0] = bx * bx;
818 Evx[1][1] = by * by;
819 Evx[2][2] = bz * bz;
820
821 VertexParameter vxpar;
824
827
828
829
830 RecMdcKalTrack* pipTrk1 = ( *( evtRecTrkCol->begin() + ipip[0] ) )->mdcKalTrack();
831 RecMdcKalTrack* pimTrk1 = ( *( evtRecTrkCol->begin() + ipim[0] ) )->mdcKalTrack();
832 RecMdcKalTrack* pipTrk2 = ( *( evtRecTrkCol->begin() + ipip[1] ) )->mdcKalTrack();
833 RecMdcKalTrack* pimTrk2 = ( *( evtRecTrkCol->begin() + ipim[1] ) )->mdcKalTrack();
834
835 WTrackParameter wvpipTrk1, wvpimTrk1, wvpipTrk2, wvpimTrk2;
840
844 if ( !vtxfit->
Fit( 0 ) )
return StatusCode::SUCCESS;
846
848
849 WTrackParameter wpip1 = vtxfit->
wtrk( 0 );
850 WTrackParameter wpim1 = vtxfit->
wtrk( 1 );
851
853
854
855
856
857 int igbf1 = -1;
858 int igbf2 = -1;
859 HepLorentzVector pTgam1( 0, 0, 0, 0 );
860 HepLorentzVector pTgam2( 0, 0, 0, 0 );
861
862 if ( m_test4C == 1 )
863 {
864
865 HepLorentzVector
ecms( 0.011 * 3.6862, 0, 0, 3.6862 );
866
867
868
869
870 WTrackParameter wvkipTrk2, wvkimTrk2;
873 double chisq = 9999.;
874 int ig11 = -1;
875 int ig21 = -1;
876 double chikk = 9999.;
877 for ( int i = 0; i < nGam - 1; i++ )
878 {
879 RecEmcShower* g1Trk = ( *( evtRecTrkCol->begin() + iGam[i] ) )->emcShower();
880 for ( int j = i + 1; j < nGam; j++ )
881 {
882 RecEmcShower* g2Trk = ( *( evtRecTrkCol->begin() + iGam[j] ) )->emcShower();
892 bool oksq = kmfit->
Fit();
893 if ( oksq && kmfit->
chisq() < chikk ) { chikk = kmfit->
chisq(); }
894 }
895 }
897
898
899
900
901
902 chisq = 9999.;
903 int ig1 = -1;
904 int ig2 = -1;
905 for ( int i = 0; i < nGam - 1; i++ )
906 {
907 RecEmcShower* g1Trk = ( *( evtRecTrkCol->begin() + iGam[i] ) )->emcShower();
908 for ( int j = i + 1; j < nGam; j++ )
909 {
910 RecEmcShower* g2Trk = ( *( evtRecTrkCol->begin() + iGam[j] ) )->emcShower();
920 bool oksq = kmfit->
Fit();
921 if ( oksq )
922 {
923 double chi2 = kmfit->
chisq();
924 if ( chi2 < chisq )
925 {
926 chisq = chi2;
927 ig1 = iGam[i];
928 ig2 = iGam[j];
929 igbf1 = iGam[i];
930 igbf2 = iGam[j];
931 pTgam1 = pGam[i];
932 pTgam2 = pGam[j];
933 }
934 }
935 }
936 }
937
938
939 if ( chisq > 200 ) return StatusCode::SUCCESS;
941
942
944 jGood.clear();
945 jGood.push_back( ipip[0] );
946 jGood.push_back( ipim[0] );
947 jGood.push_back( ipip[1] );
948 jGood.push_back( ipim[1] );
949
951 jGgam.clear();
952 jGgam.push_back( igbf1 );
953 jGgam.push_back( igbf2 );
954
955 double chi1_pp = 9999.0;
956
957 RecEmcShower* g1Trk = ( *( evtRecTrkCol->begin() + ig1 ) )->emcShower();
958 RecEmcShower* g2Trk = ( *( evtRecTrkCol->begin() + ig2 ) )->emcShower();
967 bool oksq = kmfit->
Fit();
968 if ( oksq )
969 {
970 chi1_pp = kmfit->
chisq();
971 HepLorentzVector ppi0 = kmfit->
pfit( 4 ) + kmfit->
pfit( 5 );
972 HepLorentzVector prho0 = kmfit->
pfit( 2 ) + kmfit->
pfit( 3 );
973 HepLorentzVector prhop = kmfit->
pfit( 2 ) + ppi0;
974 HepLorentzVector prhom = kmfit->
pfit( 3 ) + ppi0;
975 HepLorentzVector pjjj = prho0 + ppi0;
976
977 HepLorentzVector p2pi1 = kmfit->
pfit( 0 ) + kmfit->
pfit( 1 );
978 HepLorentzVector f2pi1g1 = p2pi1 + kmfit->
pfit( 4 );
979 HepLorentzVector f2pi1g2 = p2pi1 + kmfit->
pfit( 5 );
980 HepLorentzVector f2pi1pi0 = p2pi1 + ppi0;
981
982 HepLorentzVector t2pi2g1 = prho0 + kmfit->
pfit( 4 );
983 HepLorentzVector t2pi2g2 = prho0 + kmfit->
pfit( 5 );
984
985 HepLorentzVector p2pi3 = kmfit->
pfit( 0 ) + kmfit->
pfit( 3 );
986 HepLorentzVector f2pi3g1 = p2pi3 + kmfit->
pfit( 4 );
987 HepLorentzVector f2pi3g2 = p2pi3 + kmfit->
pfit( 5 );
988 HepLorentzVector f2pi3pi0 = p2pi3 + ppi0;
989
990 HepLorentzVector p2pi4 = kmfit->
pfit( 1 ) + kmfit->
pfit( 2 );
991 HepLorentzVector f2pi4g1 = p2pi4 + kmfit->
pfit( 4 );
992 HepLorentzVector f2pi4g2 = p2pi4 + kmfit->
pfit( 5 );
993 HepLorentzVector f2pi4pi0 = p2pi4 + ppi0;
994
995 HepLorentzVector p4pi = p2pi1 + prho0;
996 HepLorentzVector p4pig1 = p4pi + kmfit->
pfit( 4 );
997 HepLorentzVector p4pig2 = p4pi + kmfit->
pfit( 5 );
998 HepLorentzVector ppptot = p4pi + ppi0;
999
1000
1001 HepLorentzVector be4cpi0 = pTgam1 + pTgam2;
1002 HepLorentzVector be4c_ppi1 = ppip[0] + ppim[0];
1003 HepLorentzVector be4c_ppi2 = ppip[1] + ppim[1];
1004 HepLorentzVector be4cjp = be4cpi0 + be4c_ppi2;
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1403
1404 }
1405 }
1406
1407
1408
1409
1410
1411
1412
1413 setFilterPassed( true );
1414
1415 ( *( evtRecTrkCol->begin() + ipip[0] ) )->setPartId( 2 );
1416 ( *( evtRecTrkCol->begin() + ipim[0] ) )->setPartId( 2 );
1417 ( *( evtRecTrkCol->begin() + ipip[1] ) )->setPartId( 2 );
1418 ( *( evtRecTrkCol->begin() + ipim[1] ) )->setPartId( 2 );
1419
1420 return StatusCode::SUCCESS;
1421}
HepGeom::Point3D< double > HepPoint3D
EvtRecTrackCol::iterator EvtRecTrackIterator
std::vector< HepLorentzVector > Vp4
double sin(const BesAngle a)
double cos(const BesAngle a)
const Hep3Vector emcPosition() const
const int emcVolumeNumber() const
static void setPidType(PidType pidType)
const double theta() const
const HepVector helix() const
......
virtual bool isVertexValid()=0
virtual double * SigmaPrimaryVertex()=0
virtual double * PrimaryVertex()=0
static KinematicFit * instance()
void setDynamicerror(const bool dynamicerror=1)
void AddFourMomentum(int number, HepLorentzVector p4)
HepLorentzVector pfit(int n) const
const HepVector & getZHelix() const
const HepSymMatrix & getZError() const
HepSymMatrix & getZErrorK()
void AddTrack(const int number, const double mass, const RecMdcTrack *trk)
WTrackParameter wtrk(int n) const
void AddVertex(int number, VertexParameter vpar, std::vector< int > lis)
static VertexFit * instance()
void setEvx(const HepSymMatrix &eVx)
void setVx(const HepPoint3D &vx)
_EXTERN_ std::string EvtRecEvent
_EXTERN_ std::string EvtRecTrackCol