finds tracks.
809 {
810#ifdef TRKRECO_DEBUG
811 _stage = ConformalInitialization;
812#endif
813
814 static bool first =
true;
815 if (first) {
817 int size;
818
819
820
821
822 }
823
824
826 std::cout <<
name() <<
" ... processing"
827 << " axial=" << axial.length()
828 << ",stereo=" << stereo.length()
829 << ",tracks=" << tracks.length()
830 << std::endl;
831 }
832
833
834
835
836
839 _allHits[2].append(_allHits[0]);
840 _allHits[2].append(_allHits[1]);
841
842
843 selectGoodHits();
844#ifdef TRKRECO_DEBUG
845 cout<<"axial Hits:"<<_allHits[0].length()<<" good axial hits:"<<_hits[0].length()
846 <<endl<<"stereo Hits:"<<_allHits[1].length()<<" good setero hits:"<<_hits[1].length()
847 <<endl;
848#endif
849
850
851 if (_perfectSegmentFinding)
852 findSegmentsPerfect();
853 else
854
855 findSegmentsTsf();
856
857#ifdef TRKRECO_DEBUG
858 cout<<"axial Seg: "<<_allSegments[0][0].length()<<", "<<_allSegments[0][1].length()
859 <<", "<<_allSegments[0][2].length()<<", "<<_allSegments[0][3].length()
860 <<", "<<_allSegments[0][4].length()<<", "<<_allSegments[0][5].length()
861 <<" stereo Seg: "<<_allSegments[1][0].length()<<", "<<_allSegments[1][1].length()
862 <<", "<<_allSegments[1][2].length()<<", "<<_allSegments[1][3].length()
863 <<", "<<_allSegments[1][4].length()<<", "<<_allSegments[1][5].length()<<endl;
864
865 for(int i=0; i<2; ++i) {
866 if (i == 0) cout<<"Axial......"<<endl;
867 else cout<<"Stereo......"<<endl;
868 for(int j=0; j<6; ++j) {
869 for(int k=0; k<_allSegments[i][j].length(); ++k){
870 cout<<"SL(a/s): "<<j<<" seeds in Seg"<<k<<": "<<_allSegments[i][j][k]->links().length()<<endl;
871 for(int kk=0; kk<_allSegments[i][j][k]->links().length(); ++kk)
872 cout<<" layerId: "<<_allSegments[i][j][k]->links()[kk]->hit()->wire()->layerId()
873 <<" localId: "<<_allSegments[i][j][k]->links()[kk]->hit()->wire()->localId()<<endl;
874 }
875 }
876 }
877#endif
878
879
880 unsigned level = 0;
881 _T0ResetDone = false;
882 if (_fastFinder) {
883 linkSegments(level);
884 fastFinding2D(level);
885 updateTLinks(_2DTracks);
886
887
888 if (_doT0Reset) {
889 std::cout << "TConformalFinder ... T0 reset is done" << std::endl;
890 _T0ResetDone = true;
891 return 0;
892 }
893
894#ifdef TRKRECO_WINDOW
895 _rphiWindow.skip(false);
896#endif
897 fastFinding3D(level);
898 updateTLinks(_2DTracks);
899 updateTLinks(_3DTracks);
900
901#ifdef TRKRECO_WINDOW
902 _rphiWindow.skip(false);
903 displayTracks(_2DTracks, _allUnused, "all 2D after fast level 0");
904 displayTracks(_3DTracks, _allUnused, "all 3D after fast level 0");
905#endif
906
907
908
909 level = 1;
910 linkSegments(level);
911 fastFinding2D(level);
912 updateTLinks(_2DTracks);
913
914#ifdef TRKRECO_WINDOW
915 _rphiWindow.skip(false);
916#endif
917 fastFinding3D(level);
918 updateTLinks(_2DTracks);
919 updateTLinks(_3DTracks);
920
921#ifdef TRKRECO_WINDOW
922 _rphiWindow.skip(false);
923 displayTracks(_2DTracks, _allUnused, "all 2D after fast level 1");
924 displayTracks(_3DTracks, _allUnused, "all 3D after fast level 1");
925#endif
926 }
927
928
929 if (_slowFinder) {
930 level = 2;
931 linkSegments(level);
932 slowFinding2D(level);
933 updateTLinks(_2DTracks);
934#ifdef TRKRECO_WINDOW
935 _rphiWindow.skip(false);
936
937#endif
938 fastFinding3D(level);
939 updateTLinks(_2DTracks);
940 updateTLinks(_3DTracks);
941
942#ifdef TRKRECO_WINDOW
943 _rphiWindow.skip(false);
944
945 displayTracks(_2DTracks, _allUnused, "all 2D after slow level 2");
946 displayTracks(_3DTracks, _allUnused, "all 3D after slow level 2");
947#endif
948 }
949
950#ifdef TRKRECO_DEBUG
951 int zsltrk = _2DTracks.length();
952 std::cout <<
name() <<
" ... # 3D tracks = " << _3DTracks.length()
953 << ", # 2D tracks = " << _2DTracks.length() << std::endl;
954 for (unsigned i = 0; i < zsltrk; i++){
955
956 cout<<"pt:"<<_2DTracks[i]->pt()<<" impact:"<<_2DTracks[i]->impact()<<endl;
957
958 }
959#endif
960
961
963
964 tracks2D = _2DTracks;
965 tracks = _3DTracks;
966 for(int i=0;i<_3DTracks.length();i++){
968 _3DTracks[i]->setFinderType(2);
969 }
970#ifdef TRKRECO_DEBUG
971
972
973 for(int nn = 0; nn < tracks2D.length(); ++nn){
974 cout<<"2D: "<<nn<<" radius: "<<tracks2D[nn]->radius()<<endl;
975 for (int mm = 0; mm < tracks2D[nn]->links().length(); ++mm)
976 cout<<"layer: "<<tracks2D[nn]->links()[mm]->wire()->layerId()
977 <<" local: "<<tracks2D[nn]->links()[mm]->wire()->localId()<<endl;
978 }
979
980 cout<<"unused axial Seg: "<<_allUnused[0][0].length()<<", "<<_allUnused[0][1].length()
981 <<", "<<_allUnused[0][2].length()<<", "<<_allUnused[0][3].length()
982 <<", "<<_allUnused[0][4].length()<<", "<<_allUnused[0][5].length()
983 <<" unused stereo Seg: "<<_allUnused[1][0].length()<<", "<<_allUnused[1][1].length()
984 <<", "<<_allUnused[1][2].length()<<", "<<_allUnused[1][3].length()
985 <<", "<<_allUnused[1][4].length()<<", "<<_allUnused[1][5].length()
986 <<endl;
987
988 for(int i=0; i<2; ++i) {
989 if (i == 0) cout<<"unused axial hits: "<<endl;
990 else cout<<"unused stereo hits: "<<endl;
991 for(int k = 0; k < _allHits[i].length(); ++k) {
992 if (_allHits[i][k]->hit()->state() &
WireHitUsed)
continue;
993 else cout<<" layerId: "<<_allHits[i][k]->hit()->wire()->layerId()
994 <<" localId: "<<_allHits[i][k]->hit()->wire()->localId()<<endl;
995 }
996 if (i == 0) cout<<"unused axial link in segs: "<<endl;
997 else cout<<"unused stereo link in segs: "<<endl;
998 for(int j=0; j<6; ++j) {
999 for(int k=0; k<_allUnused[i][j].length(); ++k){
1000 cout<<"sl: "<<i<<" "<<j<<" length of seg "<<k<<": "<<_allUnused[i][j][k]->links().length()<<endl;
1001 for(int kk=0; kk<_allUnused[i][j][k]->links().length(); ++kk)
1002 cout<<" layerId: "<<_allUnused[i][j][k]->links()[kk]->hit()->wire()->layerId()
1003 <<" localId: "<<_allUnused[i][j][k]->links()[kk]->hit()->wire()->localId()<<endl;
1004 }
1005 }
1006 }
1007
1008#endif
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 return 0;
1037}
const HepPoint3D ORIGIN
Constants.
#define TrackOldConformalFinder
virtual int debugLevel(void) const
returns debug level.
static void maskBadHits(const AList< TTrack > &, float maxSigma2)
masks hits with large chisq as associated hits. Pull in TMLink is used.