554 {
555
557
559
560
561 vector<Identifier>::iterator iSeed;
562
563 for ( iSeed = m_seedVec.begin(); iSeed != m_seedVec.end(); iSeed++ )
564 {
565
567
568 if ( !is_mrpc )
569 {
573 im += layer * 88;
574
575 bool neutral = true;
576
577 int dphi = 999;
578 RecTofTrackCol::iterator iTrack, iMatch;
579 for ( iTrack = recTofTrackCol->begin(); iTrack != recTofTrackCol->end(); iTrack++ )
580 {
581 TofHitStatus* status = new TofHitStatus;
582 status->
setStatus( ( *iTrack )->status() );
583 if ( barrel_ec == 1 && status->
is_barrel() )
584 {
585 dphi =
abs( im - ( *iTrack )->tofID() );
586 dphi = dphi >= 44 ? 88 - dphi : dphi;
587 }
588 else if ( barrel_ec == 2 && !( status->
is_barrel() ) && ( ( *iTrack )->tofID() > 47 ) )
589 {
590 dphi =
abs( im - ( *iTrack )->tofID() + 48 );
591 dphi = dphi >= 24 ? 48 - dphi : dphi;
592 }
593 else if ( barrel_ec == 0 && !( status->
is_barrel() ) && ( ( *iTrack )->tofID() < 48 ) )
594 {
595 dphi =
abs( im - ( *iTrack )->tofID() );
596 dphi = dphi >= 24 ? 48 - dphi : dphi;
597 }
598 if (
abs( dphi ) <= 2 )
599 {
600 iMatch = iTrack;
601 neutral = false;
602 break;
603 }
604 }
605
606
607
608 double zpos = 0;
610 double seedPos = 0;
611
612
613 vector<TofData*>::iterator it;
614 for ( it = tofDataVec.begin(); it != tofDataVec.end(); it++ )
615 {
616 if ( ( *it )->identify() == *iSeed )
617 {
618
619 if ( ( *it )->barrel() )
620 {
621 TofData* bTofData = ( *it );
622 zpos += bTofData->
zpos() * bTofData->
energy();
624 seedPos = bTofData->
zpos();
625
626
627
628
629 }
630 else
631 {
632 TofData* eTofData = ( *it );
634
635
636 }
637 break;
638 }
639 }
640
642 vector<Identifier>::iterator iNeigh;
643 for ( iNeigh = NeighborVec.begin(); iNeigh != NeighborVec.end(); iNeigh++ )
644 {
645
646 vector<TofData*>::iterator it2;
647 for ( it2 = tofDataVec.begin(); it2 != tofDataVec.end(); it2++ )
648 {
649 if ( ( *it2 )->identify() == *iNeigh )
650 {
651
652 if ( ( *it )->barrel() )
653 {
654 TofData* bTofData2 = ( *it2 );
655
656 if ( fabs( bTofData2->
zpos() ) > 2 )
continue;
657 if ( m_output )
658 {
659 m_seed_dist = seedPos - bTofData2->
zpos();
660 m_tuple2->write();
661 }
662 if ( fabs( seedPos - bTofData2->
zpos() ) > 0.3 )
continue;
663 zpos += bTofData2->
zpos() * bTofData2->
energy();
665
666
667
668 }
669 else
670 {
671 TofData* eTofData2 = ( *it2 );
673 }
674 break;
675 }
676 }
677 }
679
680
681 if ( neutral == false )
682 {
683 if ( fabs( zpos ) < 1.15 &&
energy > 5. &&
energy < 1000 )
684 { ( *iMatch )->setEnergy(
energy / 1000 ); }
685 continue;
686 }
687
688
689 if ( fabs( zpos ) < 1.15 &&
energy > 5. &&
energy < 1000 )
690 {
691 RecTofTrack* tof = new RecTofTrack;
693 TofHitStatus* hitStatus = new TofHitStatus;
698 recTofTrackCol->push_back( tof );
699
700 if ( m_output )
701 {
702 m_shower_part = barrel_ec;
703 m_shower_layer = layer;
704 m_shower_im = im;
705 m_shower_zpos = zpos;
707 m_tuple1->write();
708 }
709 }
710 }
711 else
712 {
713
714
715
721 im += endcap * 36;
722
723 bool neutral = true;
724
725 int dphi = 999, dtheta = 999;
726 RecTofTrackCol::iterator iTrack, iMatch;
727 for ( iTrack = recTofTrackCol->begin(); iTrack != recTofTrackCol->end(); iTrack++ )
728 {
729 TofHitStatus* status = new TofHitStatus;
730 status->
setStatus( ( *iTrack )->status() );
731 if ( barrel_ec == 3 && endcap == 0 && ( ( *iTrack )->tofID() < 36 ) )
732 {
733 dphi =
abs( im - ( *iTrack )->tofID() );
734 dphi = dphi >= 18 ? 36 - dphi : dphi;
735 dtheta =
abs( strip -
int( status->
layer() ) );
736 }
737 else if ( barrel_ec == 3 && endcap == 1 && ( ( *iTrack )->tofID() > 35 ) )
738 {
739 dphi =
abs( im - ( *iTrack )->tofID() + 36 );
740 dphi = dphi >= 18 ? 36 - dphi : dphi;
741 dtheta =
abs( strip -
int( status->
layer() ) );
742 }
743 if ( (
abs( dphi ) == 0 &&
abs( dtheta ) <= 2 ) ||
744 (
abs( dphi ) == 1 &&
abs( dtheta ) <= 1 ) )
745 {
746 iMatch = iTrack;
747 neutral = false;
748 break;
749 }
750 }
751
752
753
754 double zpos = 0;
756 double seedPos = 0;
757
758
759 vector<TofData*>::iterator it;
760 for ( it = tofDataVec.begin(); it != tofDataVec.end(); it++ )
761 {
762 if ( ( *it )->identify() == *iSeed )
763 {
764 TofData* etfData = ( *it );
767 seedPos = etfData->
zpos();
768 break;
769 }
770 }
771
773 vector<Identifier>::iterator iNeigh;
774 for ( iNeigh = NeighborVec.begin(); iNeigh != NeighborVec.end(); iNeigh++ )
775 {
776 vector<TofData*>::iterator it2;
777 for ( it2 = tofDataVec.begin(); it2 != tofDataVec.end(); it2++ )
778 {
779 if ( ( *it )->barrel() ) continue;
780 if ( ( *it2 )->identify() == *iNeigh )
781 {
782 TofData* etfData2 = ( *it2 );
783 if ( fabs( etfData2->
zpos() ) > 2 )
continue;
784 if ( m_output )
785 {
786 m_seed_dist = seedPos - etfData2->
zpos();
787 m_tuple2->write();
788 }
789 if ( fabs( seedPos - etfData2->
zpos() ) > 0.3 )
continue;
790 zpos += etfData2->
zpos() * etfData2->
energy();
792
793
794
795 break;
796 }
797 }
798 }
800
801
802 if ( neutral == false )
803 {
804 if ( fabs( zpos ) < 1.15 &&
energy > 5. &&
energy < 1000 )
805 { ( *iMatch )->setEnergy(
energy / 1000 ); }
806 continue;
807 }
808
809
810 if ( fabs( zpos ) < 1.15 &&
energy > 5. &&
energy < 1000 )
811 {
812 RecTofTrack* tof = new RecTofTrack;
814 TofHitStatus* hitStatus = new TofHitStatus;
819 recTofTrackCol->push_back( tof );
820
821 if ( m_output )
822 {
823 m_shower_part = barrel_ec;
824 m_shower_layer = strip;
825 m_shower_im = im;
826 m_shower_zpos = zpos;
828 m_tuple1->write();
829 }
830 }
831 }
832 }
833}
void setStatus(unsigned int status)
void setEnergy(double energy)
void setZrHit(double zrhit)
unsigned int layer() const
unsigned int value() const
void setStatus(unsigned int status)
static bool is_mrpc(const Identifier &id)
void findSeed(vector< TofData * > &tofDataVec)
void energyCalib(vector< TofData * > &tofDataVec, RecTofTrackCol *recTofTrackCol)