299 {
300
301
302
303 MsgStream log(
msgSvc(), name() );
304 log << MSG::INFO << "in execute()" << endmsg;
305
306 setFilterPassed( false );
307
308 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
309 int run = eventHeader->runNumber();
310 int event = eventHeader->eventNumber();
311 log << MSG::DEBUG << "run, evtnum = " << run << " , " << event << endmsg;
312
313 m_run = eventHeader->runNumber();
314 m_rec = eventHeader->eventNumber();
315
316
317 Ncut0++;
319 log << MSG::INFO << "get event tag OK" << endmsg;
320 log << MSG::DEBUG << "ncharg, nneu, tottks = " << evtRecEvent->totalCharged() << " , "
321 << evtRecEvent->totalNeutral() << " , " << evtRecEvent->totalTracks() << endmsg;
322
323 m_nch = evtRecEvent->totalCharged();
324 m_nneu = evtRecEvent->totalNeutral();
325
327
328
329
330
331
332 Vint iGood, ipip, ipim, ipnp, ipnm;
333 iGood.clear();
334 ipip.clear();
335 ipim.clear();
336 ipnp.clear();
337 ipnm.clear();
338 Vp4 ppip, ppim, ppnp, ppnm;
339 ppip.clear();
340 ppim.clear();
341 ppnp.clear();
342 ppnm.clear();
343
344 Hep3Vector xorigin( 0, 0, 0 );
345
346
347 IVertexDbSvc* vtxsvc;
348 Gaudi::svcLocator()->service( "VertexDbSvc", vtxsvc ).ignore();
350 {
353 xorigin.setX( dbv[0] );
354 xorigin.setY( dbv[1] );
355 xorigin.setZ( dbv[2] );
356 }
357
358 int nCharge = 0;
359 for ( int i = 0; i < evtRecEvent->totalCharged(); i++ )
360 {
362 if ( !( *itTrk )->isMdcTrackValid() ) continue;
363 if ( !( *itTrk )->isMdcKalTrackValid() ) continue;
364 RecMdcTrack* mdcTrk = ( *itTrk )->mdcTrack();
365 RecMdcKalTrack* mdcKalTrk = ( *itTrk )->mdcKalTrack();
366
367 double pch = mdcTrk->
p();
368 double x0 = mdcTrk->
x();
369 double y0 = mdcTrk->
y();
370 double z0 = mdcTrk->
z();
371 double phi0 = mdcTrk->
helix( 1 );
372 double xv = xorigin.x();
373 double yv = xorigin.y();
374 double Rxy = fabs( ( x0 - xv ) *
cos( phi0 ) + ( y0 - yv ) *
sin( phi0 ) );
375 double m_vx0 = x0;
376 double m_vy0 = y0;
377 double m_vz0 = z0 - xorigin.z();
378 double m_vr0 = Rxy;
379 double m_Vct =
cos( mdcTrk->
theta() );
380
381 if ( fabs( m_vz0 ) >= m_vz0cut ) continue;
382 if ( m_vr0 >= m_vr0cut ) continue;
383 if ( fabs( m_Vct ) >= m_cthcut ) continue;
384
385 iGood.push_back( ( *itTrk )->trackId() );
386 nCharge += mdcTrk->
charge();
387 }
388
389
390
391
392 int nGood = iGood.size();
393 log << MSG::DEBUG << "ngood, totcharge = " << nGood << " , " << nCharge << endmsg;
394 if ( ( nGood != 2 ) || ( nCharge != 0 ) ) { return StatusCode::SUCCESS; }
395 Ncut1++;
396
398 iGam.clear();
399 for ( int i = evtRecEvent->totalCharged(); i < evtRecEvent->totalTracks(); i++ )
400 {
402 if ( !( *itTrk )->isEmcShowerValid() ) continue;
403 RecEmcShower* emcTrk = ( *itTrk )->emcShower();
404 Hep3Vector emcpos( emcTrk->
x(), emcTrk->
y(), emcTrk->
z() );
405
406 double dthe = 200.;
407 double dphi = 200.;
408 double dang = 200.;
409 for ( int j = 0; j < evtRecEvent->totalCharged(); j++ )
410 {
412 if ( !( *jtTrk )->isExtTrackValid() ) continue;
413 RecExtTrack* extTrk = ( *jtTrk )->extTrack();
416
417 double angd = extpos.angle( emcpos );
418 double thed = extpos.theta() - emcpos.theta();
419 double phid = extpos.deltaPhi( emcpos );
420 thed = fmod( thed + CLHEP::twopi + CLHEP::twopi +
pi, CLHEP::twopi ) - CLHEP::pi;
421 phid = fmod( phid + CLHEP::twopi + CLHEP::twopi +
pi, CLHEP::twopi ) - CLHEP::pi;
422
423 if ( fabs( thed ) < fabs( dthe ) ) dthe = thed;
424 if ( fabs( phid ) < fabs( dphi ) ) dphi = phid;
425 if ( angd < dang ) dang = angd;
426 }
427 if ( dang >= 200 ) continue;
428 double eraw = emcTrk->
energy();
431 dthe = dthe * 180 / ( CLHEP::pi );
432 dphi = dphi * 180 / ( CLHEP::pi );
433 dang = dang * 180 / ( CLHEP::pi );
434 double m_dthe = dthe;
435 double m_dphi = dphi;
436 double m_dang = dang;
437 double m_eraw = eraw;
438
440 if ( fc_theta < 0.80 )
441 {
442 if ( eraw <= m_energyThreshold / 2 ) continue;
443 }
444 else if ( fc_theta > 0.86 && fc_theta < 0.92 )
445 {
446 if ( eraw <= m_energyThreshold ) continue;
447 }
448 else continue;
449
451 if ( dang < m_gammaAngCut ) continue;
452
453
454
455 iGam.push_back( ( *itTrk )->trackId() );
456 }
457
458
459
460
461 int nGam = iGam.size();
462
463 log << MSG::DEBUG << "num Good Photon " << nGam << " , " << evtRecEvent->totalNeutral()
464 << endmsg;
465 if ( nGam < 2 ) { return StatusCode::SUCCESS; }
466 Ncut2++;
467
468
469
470
471
473 pGam.clear();
474 for ( int i = 0; i < nGam; i++ )
475 {
477 RecEmcShower* emcTrk = ( *itTrk )->emcShower();
478 double eraw = emcTrk->
energy();
479 double phi = emcTrk->
phi();
480 double the = emcTrk->
theta();
481 HepLorentzVector ptrk;
482 ptrk.setPx( eraw *
sin( the ) *
cos( phi ) );
483 ptrk.setPy( eraw *
sin( the ) *
sin( phi ) );
484 ptrk.setPz( eraw *
cos( the ) );
485 ptrk.setE( eraw );
486
487
488
489 pGam.push_back( ptrk );
490 }
491
492 log << MSG::DEBUG << "liuf1 Good Photon " << endmsg;
493
494 for ( int i = 0; i < nGood; i++ )
495 {
497 if ( !( *itTrk )->isMdcTrackValid() ) continue;
498 if ( !( *itTrk )->isMdcKalTrackValid() ) continue;
499 RecMdcTrack* mdcTrk = ( *itTrk )->mdcTrack();
500 RecMdcKalTrack* mdcKalTrk = ( *itTrk )->mdcKalTrack();
502
503 if ( mdcTrk->
charge() > 0 )
504 {
505 ipip.push_back( iGood[i] );
506 HepLorentzVector ptrk;
507 ptrk.setPx( mdcKalTrk->
px() );
508 ptrk.setPy( mdcKalTrk->
py() );
509 ptrk.setPz( mdcKalTrk->
pz() );
510 double p3 = ptrk.mag();
511 ptrk.setE( sqrt( p3 * p3 +
mpi *
mpi ) );
512 ppip.push_back( ptrk );
513 }
514 else
515 {
516 ipim.push_back( iGood[i] );
517 HepLorentzVector ptrk;
518 ptrk.setPx( mdcKalTrk->
px() );
519 ptrk.setPy( mdcKalTrk->
py() );
520 ptrk.setPz( mdcKalTrk->
pz() );
521 double p3 = ptrk.mag();
522 ptrk.setE( sqrt( p3 * p3 +
mpi *
mpi ) );
523 ppim.push_back( ptrk );
524 }
525 }
526
527 int npip = ipip.size();
528 int npim = ipim.size();
529 log << MSG::DEBUG << "num of pion " << ipip.size() << "," << ipim.size() << endmsg;
530 Ncut3++;
531
532
533
534
535
536 int langcc = 0;
537 double dthec = 200.;
538 double dphic = 200.;
539 double dangc = 200.;
540 for ( int i = 0; i < npip; i++ )
541 {
543 RecMdcTrack* mdcTrk1 = ( *itTrk )->mdcTrack();
544 RecMdcKalTrack* mdcKalTrk1 = ( *itTrk )->mdcKalTrack();
545 Hep3Vector emcpos( ppip[i].px(), ppip[i].py(), ppip[i].pz() );
546
547 for ( int j = 0; j < npim; j++ )
548 {
550 RecMdcTrack* mdcTrk2 = ( *jtTrk )->mdcTrack();
551 RecMdcKalTrack* mdcKalTrk2 = ( *jtTrk )->mdcKalTrack();
552
553 HepLorentzVector pippim = ppip[i] + ppim[j];
554
555 Hep3Vector extpos( ppim[j].px(), ppim[j].py(), ppim[j].pz() );
556
557 double angd = extpos.angle( emcpos );
558 double thed = extpos.theta() - emcpos.theta();
559 double phid = extpos.deltaPhi( emcpos );
560 thed = fmod( thed + CLHEP::twopi + CLHEP::twopi +
pi, CLHEP::twopi ) - CLHEP::pi;
561 phid = fmod( phid + CLHEP::twopi + CLHEP::twopi +
pi, CLHEP::twopi ) - CLHEP::pi;
562
563 m_dthec[langcc] = thed * 180 / ( CLHEP::pi );
564 m_dphic[langcc] = phid * 180 / ( CLHEP::pi );
565 m_dangc[langcc] = angd * 180 / ( CLHEP::pi );
566 m_mspippim[langcc] = pippim.m();
567 langcc++;
568 }
569 }
570 m_nangecc = langcc;
571
572
573
574
575
576 double m_m2gg, m_momentpi0;
577 HepLorentzVector pTot, p2g;
578
579 log << MSG::DEBUG << "liuf2 Good Photon " << langcc << endmsg;
580
581
582
583
584 double m_momentpip, m_momentpim, extmot1, extmot2;
585 double emcTg1 = 0.0;
586 double emcTg2 = 0.0;
587 double nlaypi1 = 0;
588 double nhit1 = 0;
589 double nlaypi2 = 0;
590 double nhit2 = 0;
591
593 RecMdcTrack* mdcTrk11 = ( *itTrk11 )->mdcTrack();
594 RecMdcKalTrack* mdcKalTrk11 = ( *itTrk11 )->mdcKalTrack();
595 RecEmcShower* emcTrk11 = ( *itTrk11 )->emcShower();
596 RecMucTrack* mucTrk11 = ( *itTrk11 )->mucTrack();
597 double phi01 = mdcTrk11->
helix( 1 );
598
600 RecMdcTrack* mdcTrk12 = ( *itTrk12 )->mdcTrack();
601 RecMdcKalTrack* mdcKalTrk12 = ( *itTrk12 )->mdcKalTrack();
602 RecEmcShower* emcTrk12 = ( *itTrk12 )->emcShower();
603 RecMucTrack* mucTrk12 = ( *itTrk12 )->mucTrack();
604 double phi02 = mdcTrk12->
helix( 1 );
605
606 m_vxpin = mdcTrk11->
x();
607 m_vypin = mdcTrk11->
y();
608 m_vzpin = mdcTrk11->
z() - xorigin.z();
609 m_vrpin = fabs( ( mdcTrk11->
x() - xorigin.x() ) *
cos( phi01 ) +
610 ( mdcTrk11->
y() - xorigin.y() ) *
sin( phi01 ) );
611 m_costhepin =
cos( mdcTrk11->
theta() );
612
613 m_momentpip = mdcTrk11->
p();
614 m_ppx = mdcTrk11->
px();
615 m_ppy = mdcTrk11->
py();
616 m_ppz = mdcTrk11->
pz();
617
618 m_vxp = mdcKalTrk11->
x();
619 m_vyp = mdcKalTrk11->
y();
620 m_vzp = mdcKalTrk11->
z() - xorigin.z();
621 m_vrp = fabs( ( mdcKalTrk11->
x() - xorigin.x() ) *
cos( phi01 ) +
622 ( mdcKalTrk11->
y() - xorigin.y() ) *
sin( phi01 ) );
623 m_costhep =
cos( mdcKalTrk11->
theta() );
624
625
626 m_ppxkal = mdcKalTrk11->
px();
627 m_ppykal = mdcKalTrk11->
py();
628 m_ppzkal = mdcKalTrk11->
pz();
629 extmot1 = sqrt( m_ppxkal * m_ppxkal + m_ppykal * m_ppykal + m_ppzkal * m_ppzkal );
630
631 m_vxmin = mdcTrk12->
x();
632 m_vymin = mdcTrk12->
y();
633 m_vzmin = mdcTrk12->
z();
634 m_vrmin = fabs( ( mdcTrk12->
x() - xorigin.x() ) *
cos( phi02 ) +
635 ( mdcTrk12->
y() - xorigin.y() ) *
sin( phi02 ) );
636 m_costhemin =
cos( mdcTrk12->
theta() );
637
638 m_momentpim = mdcTrk12->
p();
639 m_mpx = mdcTrk12->
px();
640 m_mpy = mdcTrk12->
py();
641 m_mpz = mdcTrk12->
pz();
642
643 m_vxm = mdcKalTrk12->
x();
644 m_vym = mdcKalTrk12->
y();
645 m_vzm = mdcKalTrk12->
z();
646 m_vrm = fabs( ( mdcKalTrk12->
x() - xorigin.x() ) *
cos( phi02 ) +
647 ( mdcKalTrk12->
y() - xorigin.y() ) *
sin( phi02 ) );
648 m_costhem =
cos( mdcKalTrk12->
theta() );
649
650
651 m_mpxkal = mdcKalTrk12->
px();
652 m_mpykal = mdcKalTrk12->
py();
653 m_mpzkal = mdcKalTrk12->
pz();
654 extmot2 = sqrt( m_mpxkal * m_mpxkal + m_mpykal * m_mpykal + m_mpzkal * m_mpzkal );
655
656 if ( ( *itTrk11 )->isEmcShowerValid() ) { emcTg1 = emcTrk11->
energy(); }
657 if ( ( *itTrk12 )->isEmcShowerValid() ) { emcTg2 = emcTrk12->
energy(); }
658 if ( ( *itTrk11 )->isMucTrackValid() )
659 {
662 }
663 if ( ( *itTrk12 )->isMucTrackValid() )
664 {
667 }
668
669 m_laypi1 = nlaypi1;
670 m_hit1 = nhit1;
671 m_laypi2 = nlaypi2;
672 m_hit2 = nhit2;
673
674 log << MSG::DEBUG << "liuf3 Good Photon " << ipim[0] << endmsg;
675
676 RecMdcKalTrack* pipTrk = ( *( evtRecTrkCol->begin() + ipip[0] ) )->mdcKalTrack();
677 RecMdcKalTrack* pimTrk = ( *( evtRecTrkCol->begin() + ipim[0] ) )->mdcKalTrack();
678
679 log << MSG::DEBUG << "liuf4 Good Photon " << endmsg;
680
681 WTrackParameter wvpipTrk, wvpimTrk, wvkpTrk, wvkmTrk;
684
687
688
689
690
691
692
693
694
695
696
697
699 HepSymMatrix Evx( 3, 0 );
700 double bx = 1E+6;
701 double by = 1E+6;
702 double bz = 1E+6;
703 Evx[0][0] = bx * bx;
704 Evx[1][1] = by * by;
705 Evx[2][2] = bz * bz;
706
707 VertexParameter vxpar;
710
711
712
713
714
716
717
718
719
720 double chi5 = 9999.0;
721 double jkpi0 = -0.5;
722 double jkpkm = 0.0;
723 double jkpp0 = 0.0;
724 double jkmp0 = 0.0;
729 if ( vtxfit->
Fit( 0 ) )
730 {
732 WTrackParameter wkp = vtxfit->
wtrk( 0 );
733 WTrackParameter wkm = vtxfit->
wtrk( 1 );
734
736
737
738
739
740
741 double chisq = 9999.;
742 for ( int i = 0; i < nGam - 1; i++ )
743 {
744 RecEmcShower* g1Trk = ( *( evtRecTrkCol->begin() + iGam[i] ) )->emcShower();
745 for ( int j = i + 1; j < nGam; j++ )
746 {
747 RecEmcShower* g2Trk = ( *( evtRecTrkCol->begin() + iGam[j] ) )->emcShower();
749
755 bool oksq = kmfit->
Fit();
756
757 if ( oksq )
758 {
759 double chi2 = kmfit->
chisq();
760 if ( chi2 < chi5 )
761 {
762 HepLorentzVector kpi0 = kmfit->
pfit( 2 ) + kmfit->
pfit( 3 );
763 HepLorentzVector kpkm = kmfit->
pfit( 0 ) + kmfit->
pfit( 1 );
764 HepLorentzVector kpp0 = kmfit->
pfit( 0 ) + kpi0;
765 HepLorentzVector kmp0 = kmfit->
pfit( 1 ) + kpi0;
766 chi5 = kmfit->
chisq();
767 jkpi0 = kpi0.m();
768 jkpkm = kpkm.m();
769 jkpp0 = kpp0.m();
770 jkmp0 = kmp0.m();
771 }
772 }
773 }
774 }
775 }
776
777
778
779
780
785 if ( !vtxfit->
Fit( 0 ) )
return StatusCode::SUCCESS;
787
788 WTrackParameter wpip = vtxfit->
wtrk( 0 );
789 WTrackParameter wpim = vtxfit->
wtrk( 1 );
790
791 log << MSG::DEBUG << "liuf5 Good Photon " << endmsg;
792
794
795
796
797
798
799 double chisq = 9999.;
800 int ig1 = -1;
801 int ig2 = -1;
802 HepLorentzVector gg1, gg2;
803 for ( int i = 0; i < nGam - 1; i++ )
804 {
805 RecEmcShower* g1Trk = ( *( evtRecTrkCol->begin() + iGam[i] ) )->emcShower();
806 for ( int j = i + 1; j < nGam; j++ )
807 {
808 RecEmcShower* g2Trk = ( *( evtRecTrkCol->begin() + iGam[j] ) )->emcShower();
810
816 bool oksq = kmfit->
Fit();
817 if ( oksq )
818 {
819 double chi2 = kmfit->
chisq();
820 if ( chi2 < chisq )
821 {
822 chisq = chi2;
823 ig1 = iGam[i];
824 ig2 = iGam[j];
825 gg1 = pGam[i];
826 gg2 = pGam[j];
827 }
828 }
829 }
830 }
831
832 p2g = gg1 + gg2;
833 m_pmax = gg1.e() > gg2.e() ? gg1.e() : gg2.e();
834 m_m2gg = p2g.m();
835 m_cosang = ( gg1.e() - gg2.e() ) / p2g.rho();
836 m_momentpi0 = sqrt( p2g.px() * p2g.px() + p2g.py() * p2g.py() + p2g.pz() * p2g.pz() );
837 log << MSG::DEBUG << " chisq for 4c " << chisq << endmsg;
838 if ( chisq > 200 ) { return StatusCode::SUCCESS; }
839
840
842 jGood.clear();
843 jGood.push_back( ipip[0] );
844 jGood.push_back( ipim[0] );
845 m_ngch = jGood.size();
846
848 jGgam.clear();
849 jGgam.push_back( ig1 );
850 jGgam.push_back( ig2 );
851 m_nggneu = jGgam.size();
852
853 HepLorentzVector ppip1 = ppip[0];
854 HepLorentzVector ppim1 = ppim[0];
855
856 HepLorentzVector Ppipboost = ppip1.boost(
u_cms );
857 HepLorentzVector Ppimboost = ppim1.boost(
u_cms );
858 Hep3Vector p3pi1 = Ppipboost.vect();
859 Hep3Vector p3pi2 = Ppimboost.vect();
860 m_anglepm = ( p3pi1.angle( p3pi2 ) ) * 180 / ( CLHEP::pi );
861
862
863
864 RecEmcShower* g1Trk = ( *( evtRecTrkCol->begin() + ig1 ) )->emcShower();
865 RecEmcShower* g2Trk = ( *( evtRecTrkCol->begin() + ig2 ) )->emcShower();
867
873 bool oksq = kmfit->
Fit();
874 if ( !oksq ) return StatusCode::SUCCESS;
875
876 HepLorentzVector ppi0 = kmfit->
pfit( 2 ) + kmfit->
pfit( 3 );
877 HepLorentzVector prho0 = kmfit->
pfit( 0 ) + kmfit->
pfit( 1 );
878 HepLorentzVector prhop = kmfit->
pfit( 0 ) + ppi0;
879 HepLorentzVector prhom = kmfit->
pfit( 1 ) + ppi0;
880 HepLorentzVector pgam2pi1 = prho0 + kmfit->
pfit( 2 );
881 HepLorentzVector pgam2pi2 = prho0 + kmfit->
pfit( 3 );
882 HepLorentzVector pgam11 = kmfit->
pfit( 2 );
883 HepLorentzVector pgam12 = kmfit->
pfit( 3 );
884
885
886
887
888
889
890
891
892
893
894 m_chi1 = kmfit->
chisq();
895 m_mpi0 = ppi0.m();
896 m_prho0 = prho0.m();
897 m_prhop = prhop.m();
898 m_prhom = prhom.m();
899 m_good = nGood;
900 m_gam = nGam;
901
902 m_pip = npip;
903 m_pim = npim;
904 m_2gam = m_m2gg;
905 m_outpi0 = m_momentpi0;
906 m_outpip = m_momentpip;
907 m_outpim = m_momentpim;
908 m_enpip = emcTg1;
909 m_dcpip = extmot1;
910 m_enpim = emcTg2;
911 m_dcpim = extmot2;
912 m_pipf = kmfit->
pfit( 0 ).rho();
913 m_pimf = kmfit->
pfit( 1 ).rho();
914 m_pi0f = ppi0.rho();
915
916 m_chi5 = chi5;
917 m_kpi0 = jkpi0;
918 m_kpkm = jkpkm;
919 m_kpp0 = jkpp0;
920 m_kmp0 = jkmp0;
921 m_pgam2pi1 = pgam2pi1.m();
922 m_pgam2pi2 = pgam2pi2.m();
923 cosva1 = kmfit->
pfit( 2 ).rho();
924 cosva2 = kmfit->
pfit( 3 ).rho();
925
926
927
928
929
930
931
932
933
934
935
936 for ( int ii = 0; ii < m_ngch; ii++ )
937 {
938
939 m_ptrk[ii] = 9999.0;
940 m_chie[ii] = 9999.0;
941 m_chimu[ii] = 9999.0;
942 m_chipi[ii] = 9999.0;
943 m_chik[ii] = 9999.0;
944 m_chip[ii] = 9999.0;
945 m_ghit[ii] = 9999.0;
946 m_thit[ii] = 9999.0;
947 m_probPH[ii] = 9999.0;
948 m_normPH[ii] = 9999.0;
949
950
951 m_cntr_etof[ii] = 9999.0;
952 m_ptot_etof[ii] = 9999.0;
953 m_ph_etof[ii] = 9999.0;
954 m_rhit_etof[ii] = 9999.0;
955 m_qual_etof[ii] = 9999.0;
956 m_te_etof[ii] = 9999.0;
957 m_tmu_etof[ii] = 9999.0;
958 m_tpi_etof[ii] = 9999.0;
959 m_tk_etof[ii] = 9999.0;
960 m_tp_etof[ii] = 9999.0;
961 m_ec_tof[ii] = 9999.0;
962 m_ec_toff_e[ii] = 9999.0;
963 m_ec_toff_mu[ii] = 9999.0;
964 m_ec_toff_pi[ii] = 9999.0;
965 m_ec_toff_k[ii] = 9999.0;
966 m_ec_toff_p[ii] = 9999.0;
967 m_ec_tsig_e[ii] = 9999.0;
968 m_ec_tsig_mu[ii] = 9999.0;
969 m_ec_tsig_pi[ii] = 9999.0;
970 m_ec_tsig_k[ii] = 9999.0;
971 m_ec_tsig_p[ii] = 9999.0;
972
973
974 m_cntr_btof1[ii] = 9999.0;
975 m_ptot_btof1[ii] = 9999.0;
976 m_ph_btof1[ii] = 9999.0;
977 m_zhit_btof1[ii] = 9999.0;
978 m_qual_btof1[ii] = 9999.0;
979 m_te_btof1[ii] = 9999.0;
980 m_tmu_btof1[ii] = 9999.0;
981 m_tpi_btof1[ii] = 9999.0;
982 m_tk_btof1[ii] = 9999.0;
983 m_tp_btof1[ii] = 9999.0;
984 m_b1_tof[ii] = 9999.0;
985 m_b1_toff_e[ii] = 9999.0;
986 m_b1_toff_mu[ii] = 9999.0;
987 m_b1_toff_pi[ii] = 9999.0;
988 m_b1_toff_k[ii] = 9999.0;
989 m_b1_toff_p[ii] = 9999.0;
990 m_b1_tsig_e[ii] = 9999.0;
991 m_b1_tsig_mu[ii] = 9999.0;
992 m_b1_tsig_pi[ii] = 9999.0;
993 m_b1_tsig_k[ii] = 9999.0;
994 m_b1_tsig_p[ii] = 9999.0;
995
996 m_dedx_pid[ii] = 9999.0;
997 m_tof1_pid[ii] = 9999.0;
998 m_tof2_pid[ii] = 9999.0;
999 m_prob_pid[ii] = 9999.0;
1000 m_ptrk_pid[ii] = 9999.0;
1001 m_cost_pid[ii] = 9999.0;
1002 }
1003
1004 int indx0 = 0;
1005 for ( int i = 0; i < m_ngch; i++ )
1006 {
1008 if ( !( *itTrk )->isMdcTrackValid() ) continue;
1009 if ( !( *itTrk )->isMdcDedxValid() ) continue;
1010 RecMdcTrack* mdcTrk = ( *itTrk )->mdcTrack();
1011 RecMdcDedx* dedxTrk = ( *itTrk )->mdcDedx();
1012 m_ptrk[indx0] = mdcTrk->
p();
1013
1014 m_chie[indx0] = dedxTrk->
chiE();
1015 m_chimu[indx0] = dedxTrk->
chiMu();
1016 m_chipi[indx0] = dedxTrk->
chiPi();
1017 m_chik[indx0] = dedxTrk->
chiK();
1018 m_chip[indx0] = dedxTrk->
chiP();
1021 m_probPH[indx0] = dedxTrk->
probPH();
1022 m_normPH[indx0] = dedxTrk->
normPH();
1023 indx0++;
1024 }
1025
1026
1027
1028
1029
1030 int indx1 = 0;
1031 for ( int i = 0; i < m_ngch; i++ )
1032 {
1034 if ( !( *itTrk )->isMdcTrackValid() ) continue;
1035 if ( !( *itTrk )->isTofTrackValid() ) continue;
1036
1037 RecMdcTrack* mdcTrk = ( *itTrk )->mdcTrack();
1038 SmartRefVector<RecTofTrack> tofTrkCol = ( *itTrk )->tofTrack();
1039
1040 double ptrk = mdcTrk->
p();
1041 SmartRefVector<RecTofTrack>::iterator iter_tof = tofTrkCol.begin();
1042 for ( ; iter_tof != tofTrkCol.end(); iter_tof++ )
1043 {
1044 TofHitStatus* status = new TofHitStatus;
1045 status->
setStatus( ( *iter_tof )->status() );
1047 {
1049 if ( status->
layer() != 1 )
continue;
1050 double path = ( *iter_tof )->path();
1051 double tof = ( *iter_tof )->tof();
1052 double ph = ( *iter_tof )->ph();
1053 double rhit = ( *iter_tof )->zrhit();
1054 double qual = 0.0 + ( *iter_tof )->quality();
1055 double cntr = 0.0 + ( *iter_tof )->tofID();
1056 double texp[5];
1057 double tsig[5];
1058 for ( int j = 0; j < 5; j++ )
1059 {
1060 texp[j] = ( *iter_tof )->texp( j );
1061
1062
1063 }
1064 m_cntr_etof[indx1] = cntr;
1065 m_ptot_etof[indx1] = ptrk;
1066 m_ph_etof[indx1] = ph;
1067 m_rhit_etof[indx1] = rhit;
1068 m_qual_etof[indx1] = qual;
1069 m_te_etof[indx1] = tof - texp[0];
1070 m_tmu_etof[indx1] = tof - texp[1];
1071 m_tpi_etof[indx1] = tof - texp[2];
1072 m_tk_etof[indx1] = tof - texp[3];
1073 m_tp_etof[indx1] = tof - texp[4];
1074
1075 m_ec_tof[indx1] = tof;
1076
1077 m_ec_toff_e[indx1] = ( *iter_tof )->toffset( 0 );
1078 m_ec_toff_mu[indx1] = ( *iter_tof )->toffset( 1 );
1079 m_ec_toff_pi[indx1] = ( *iter_tof )->toffset( 2 );
1080 m_ec_toff_k[indx1] = ( *iter_tof )->toffset( 3 );
1081 m_ec_toff_p[indx1] = ( *iter_tof )->toffset( 4 );
1082
1083 m_ec_tsig_e[indx1] = ( *iter_tof )->sigma( 0 );
1084 m_ec_tsig_mu[indx1] = ( *iter_tof )->sigma( 1 );
1085 m_ec_tsig_pi[indx1] = ( *iter_tof )->sigma( 2 );
1086 m_ec_tsig_k[indx1] = ( *iter_tof )->sigma( 3 );
1087 m_ec_tsig_p[indx1] = ( *iter_tof )->sigma( 4 );
1088 }
1089 else
1090 {
1092 double path = ( *iter_tof )->path();
1093 double tof = ( *iter_tof )->tof();
1094 double ph = ( *iter_tof )->ph();
1095 double rhit = ( *iter_tof )->zrhit();
1096 double qual = 0.0 + ( *iter_tof )->quality();
1097 double cntr = 0.0 + ( *iter_tof )->tofID();
1098 double texp[5];
1099 for ( int j = 0; j < 5; j++ ) { texp[j] = ( *iter_tof )->texp( j ); }
1100 m_cntr_btof1[indx1] = cntr;
1101 m_ptot_btof1[indx1] = ptrk;
1102 m_ph_btof1[indx1] = ph;
1103 m_zhit_btof1[indx1] = rhit;
1104 m_qual_btof1[indx1] = qual;
1105 m_te_btof1[indx1] = tof - texp[0];
1106 m_tmu_btof1[indx1] = tof - texp[1];
1107 m_tpi_btof1[indx1] = tof - texp[2];
1108 m_tk_btof1[indx1] = tof - texp[3];
1109 m_tp_btof1[indx1] = tof - texp[4];
1110
1111 m_b1_tof[indx1] = tof;
1112
1113 m_b1_toff_e[indx1] = ( *iter_tof )->toffset( 0 );
1114 m_b1_toff_mu[indx1] = ( *iter_tof )->toffset( 1 );
1115 m_b1_toff_pi[indx1] = ( *iter_tof )->toffset( 2 );
1116 m_b1_toff_k[indx1] = ( *iter_tof )->toffset( 3 );
1117 m_b1_toff_p[indx1] = ( *iter_tof )->toffset( 4 );
1118
1119 m_b1_tsig_e[indx1] = ( *iter_tof )->sigma( 0 );
1120 m_b1_tsig_mu[indx1] = ( *iter_tof )->sigma( 1 );
1121 m_b1_tsig_pi[indx1] = ( *iter_tof )->sigma( 2 );
1122 m_b1_tsig_k[indx1] = ( *iter_tof )->sigma( 3 );
1123 m_b1_tsig_p[indx1] = ( *iter_tof )->sigma( 4 );
1124 }
1125 delete status;
1126 }
1127 indx1++;
1128 }
1129
1130
1131
1132
1133 int indx2 = 0;
1135 for ( int i = 0; i < m_ngch; i++ )
1136 {
1138
1141
1142
1147
1148
1151 RecMdcTrack* mdcTrk = ( *itTrk )->mdcTrack();
1152
1153 m_dedx_pid[indx2] = pid->
chiDedx( 2 );
1154 m_tof1_pid[indx2] = pid->
chiTof1( 2 );
1155 m_tof2_pid[indx2] = pid->
chiTof2( 2 );
1156 m_prob_pid[indx2] = pid->
probPion();
1157
1158
1159
1160
1161
1162
1163 RecMdcKalTrack* mdcKalTrk =
1164 ( *itTrk )->mdcKalTrack();
1165
1167
1168
1169
1170
1171 m_cost_pid[indx2] =
cos( mdcTrk->
theta() );
1172
1173 HepLorentzVector ptrk;
1174 ptrk.setPx( mdcKalTrk->
px() );
1175 ptrk.setPy( mdcKalTrk->
py() );
1176 ptrk.setPz( mdcKalTrk->
pz() );
1177 double p3 = ptrk.mag();
1178 ptrk.setE( sqrt( p3 * p3 +
mpi *
mpi ) );
1179
1180 m_ptrk_pid[indx2] = p3;
1181
1183 {
1184 ipnp.push_back( jGood[i] );
1185 ppnp.push_back( ptrk );
1186 }
1188 {
1189 ipnm.push_back( jGood[i] );
1190 ppnm.push_back( ptrk );
1191 }
1192 }
1193 int npnp = ipnp.size();
1194 int npnm = ipnm.size();
1195
1196 m_pnp = npnp;
1197 m_pnm = npnm;
1198
1199 int iphoton = 0;
1200 for ( int i = 0; i < m_nggneu; i++ )
1201 {
1203 if ( !( *itTrk )->isEmcShowerValid() ) continue;
1204 RecEmcShower* emcTrk = ( *itTrk )->emcShower();
1205 m_numHits[iphoton] = emcTrk->
numHits();
1207 m_x[iphoton] = emcTrk->
x();
1208 m_y[iphoton] = emcTrk->
y();
1209 m_z[iphoton] = emcTrk->
z();
1210 m_cosemc[iphoton] =
cos( emcTrk->
theta() );
1211 m_phiemc[iphoton] = emcTrk->
phi();
1212 m_energy[iphoton] = emcTrk->
energy();
1213 m_eSeed[iphoton] = emcTrk->
eSeed();
1214 m_e3x3[iphoton] = emcTrk->
e3x3();
1215 m_e5x5[iphoton] = emcTrk->
e5x5();
1219 iphoton++;
1220 }
1221 m_tuple4->write().ignore();
1222 Ncut4++;
1223
1224 if ( kmfit->
chisq() >= chi5 )
return StatusCode::SUCCESS;
1225 if ( pgam2pi2.m() <= 1.0 ) return StatusCode::SUCCESS;
1226 if ( pgam2pi1.m() <= 1.0 ) return StatusCode::SUCCESS;
1227 if ( nGam != 2 ) return StatusCode::SUCCESS;
1228 if ( emcTg1 / extmot1 >= 0.8 ) return StatusCode::SUCCESS;
1229 if ( emcTg2 / extmot2 >= 0.8 ) return StatusCode::SUCCESS;
1230 Ncut5++;
1231
1232
1233 TH1* h( 0 );
1234 if ( m_thsvc->getHist( "/DQAHist/Rhopi/mpi0", h ).isSuccess() ) { h->Fill( ppi0.m() ); }
1235 else { log << MSG::ERROR << "Couldn't retrieve mpi0" << endmsg; }
1236
1237 if ( fabs( ppi0.m() - 0.135 ) >= 0.015 ) return StatusCode::SUCCESS;
1238 Ncut6++;
1239
1240 if ( m_thsvc->getHist( "/DQAHist/Rhopi/mrho0", h ).isSuccess() ) { h->Fill( prho0.m() ); }
1241 else { log << MSG::ERROR << "Couldn't retrieve mrho0" << endmsg; }
1242
1243 if ( m_thsvc->getHist( "/DQAHist/Rhopi/mrhop", h ).isSuccess() ) { h->Fill( prhop.m() ); }
1244 else { log << MSG::ERROR << "Couldn't retrieve mrhop" << endmsg; }
1245
1246 if ( m_thsvc->getHist( "/DQAHist/Rhopi/mrhom", h ).isSuccess() ) { h->Fill( prhom.m() ); }
1247 else { log << MSG::ERROR << "Couldn't retrieve mrhom" << endmsg; }
1248
1249
1250
1251 ( *( evtRecTrkCol->begin() + ipip[0] ) )->setPartId( 3 );
1252 ( *( evtRecTrkCol->begin() + ipim[0] ) )->setPartId( 3 );
1253
1254
1255
1256
1257
1258
1259
1260 ( *( evtRecTrkCol->begin() + ipip[0] ) )->setQuality( 0 );
1261 ( *( evtRecTrkCol->begin() + ipim[0] ) )->setQuality( 0 );
1262
1263 setFilterPassed( true );
1264
1265 return StatusCode::SUCCESS;
1266}
HepGeom::Point3D< double > HepPoint3D
EvtRecTrackCol::iterator EvtRecTrackIterator
std::vector< HepLorentzVector > Vp4
double sin(const BesAngle a)
double cos(const BesAngle a)
double secondMoment() const
const Hep3Vector emcPosition() const
const int emcVolumeNumber() const
const double theta() 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 AddFourMomentum(int number, HepLorentzVector p4)
HepLorentzVector pfit(int n) const
int methodProbability() const
void setChiMinCut(const double chi=4)
void setRecTrack(EvtRecTrack *trk)
void setMethod(const int method)
double chiTof2(int n) const
void identify(const int pidcase)
void usePidSys(const int pidsys)
static ParticleID * instance()
bool IsPidInfoValid() const
double chiTof1(int n) const
double chiDedx(int n) const
const HepVector & getZHelix() const
const HepSymMatrix & getZError() const
HepSymMatrix & getZErrorK()
unsigned int layer() const
void setStatus(unsigned int status)
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