@@ -783,20 +783,43 @@ public static boolean hasTopBotHit(Track track) {
783783 return nhits [0 ] > 0 && nhits [1 ] > 0 ;
784784 }
785785
786+ // 3D hits shared
786787 public static boolean isSharedHit (TrackerHit hit , List <Track > othertracks ) {
787- HelicalTrackHit hth = (HelicalTrackHit ) hit ;
788+ // HelicalTrackHit hth = (HelicalTrackHit) hit;
789+ TrackerHit hth = hit ;
788790 for (Track track : othertracks ) {
789791 List <TrackerHit > hitsOnTrack = track .getTrackerHits ();
790792 for (TrackerHit loop_hit : hitsOnTrack ) {
791- HelicalTrackHit loop_hth = (HelicalTrackHit ) loop_hit ;
793+ //HelicalTrackHit loop_hth = (HelicalTrackHit) loop_hit;
794+ TrackerHit loop_hth = loop_hit ;
792795 if (hth .equals (loop_hth )) // System.out.printf("share hit at layer %d at %s (%s) with track w/ chi2=%f\n",hth.Layer(),hth.getCorrectedPosition().toString(),loop_hth.getCorrectedPosition().toString(),track.getChi2());
793796
794797 return true ;
795798 }
796799 }
797800 return false ;
798801 }
802+
803+ // 3D hits shared
804+ public static boolean isSharedHit (TrackerHit hit , Track track ) {
805+ // HelicalTrackHit hth = (HelicalTrackHit) hit;
806+ TrackerHit hth = hit ;
807+ List <TrackerHit > hitsOnTrack = track .getTrackerHits ();
808+ for (TrackerHit loop_hit : hitsOnTrack ) {
809+ //HelicalTrackHit loop_hth = (HelicalTrackHit) loop_hit;
810+ TrackerHit loop_hth = loop_hit ;
811+ if (hth .equals (loop_hth )) // System.out.printf("share hit at layer %d at %s (%s) with track w/ chi2=%f\n",hth.Layer(),hth.getCorrectedPosition().toString(),loop_hth.getCorrectedPosition().toString(),track.getChi2());
812+ return true ;
813+ }
814+ return false ;
815+ }
799816
817+ /**
818+ * Number of shared 3D hits between tracks
819+ * @param track
820+ * @param tracklist
821+ * @return number of 3D hits shared on a track
822+ */
800823 public static int numberOfSharedHits (Track track , List <Track > tracklist ) {
801824 List <Track > tracks = new ArrayList <Track >();
802825 // System.out.printf("%d tracks in event\n",tracklist.size());
@@ -816,7 +839,60 @@ public static int numberOfSharedHits(Track track, List<Track> tracklist) {
816839 ++n_shared ;
817840 return n_shared ;
818841 }
842+
843+ /**
844+ * Number of shared 3D hits between two tracks
845+ * @param track
846+ * @param tracklist
847+ * @return number of 3D hits shared between two tracks
848+ */
849+ public static int numberOfSharedHits (Track track1 , Track track2 ) {
850+ if (track1 .equals (track2 )){return 0 ;}
851+ else {
852+ List <TrackerHit > hitsOnTrack = track1 .getTrackerHits ();
853+ int n_shared = 0 ;
854+ for (TrackerHit hit : hitsOnTrack )
855+ if (isSharedHit (hit , track2 ))
856+ ++n_shared ;
857+ return n_shared ;
858+ }
859+ }
819860
861+ /**
862+ * Number of shared 3D hits between tracks
863+ * @param track
864+ * @param tracklist
865+ * @return the track associated with the most shared hits
866+ */
867+ public static Track mostSharedHitTrack (Track track , List <Track > tracklist ) {
868+ List <Track > tracks = new ArrayList <Track >();
869+ // System.out.printf("%d tracks in event\n",tracklist.size());
870+ // System.out.printf("look for another track with chi2=%f and px=%f \n",track.getChi2(),track.getTrackStates().get(0).getMomentum()[0]);
871+ for (Track t : tracklist ) {
872+ // System.out.printf("add track with chi2=%f and px=%f ?\n",t.getChi2(),t.getTrackStates().get(0).getMomentum()[0]);
873+ if (t .equals (track )) // System.out.printf("NOPE\n");
874+
875+ continue ;
876+ // System.out.printf("YEPP\n");
877+ tracks .add (t );
878+ }
879+ //loop through track list to find the most shared hits between any track
880+ int mostShared = 0 ;
881+ Track sharedTrk = track ;
882+ for (Track tt : tracks ){
883+ if (mostShared < numberOfSharedHits (track ,tt )){
884+ mostShared = numberOfSharedHits (track ,tt );
885+ sharedTrk = tt ;
886+ }
887+
888+ }
889+
890+ return sharedTrk ;
891+ }
892+
893+
894+
895+
820896 public static boolean hasSharedHits (Track track , List <Track > tracklist ) {
821897 return numberOfSharedHits (track , tracklist ) != 0 ;
822898 }
@@ -1075,6 +1151,19 @@ public static double getTrackTime(Track track, RelationalTable hitToStrips, Rela
10751151 meanTime /= stripHits .size ();
10761152 return meanTime ;
10771153 }
1154+
1155+ public static double getTrackTimeSD (Track track , RelationalTable hitToStrips , RelationalTable hitToRotated ) {
1156+ double meanTime = getTrackTime (track , hitToStrips , hitToRotated );
1157+ List <TrackerHit > stripHits = getStripHits (track , hitToStrips , hitToRotated );
1158+
1159+ double sdTime = 0 ;
1160+ for (TrackerHit hit : stripHits ) {
1161+ sdTime += Math .pow (meanTime -hit .getTime (),2 );
1162+ }
1163+ sdTime = Math .sqrt (sdTime /stripHits .size ());
1164+
1165+ return sdTime ;
1166+ }
10781167
10791168 public static List <TrackerHit > getStripHits (Track track , RelationalTable hitToStrips , RelationalTable hitToRotated ) {
10801169 List <TrackerHit > hits = new ArrayList <TrackerHit >();
@@ -1097,15 +1186,43 @@ public int compare(TrackerHit o1, TrackerHit o2) {
10971186 }
10981187 }
10991188
1100- public static boolean hasSharedStrips (Track track1 , Track track2 , RelationalTable hitToStrips , RelationalTable hitToRotated ) {
1189+ /**
1190+ * Number of 2D hits shared between tracks
1191+ * @param track1
1192+ * @param track2
1193+ * @param hitToStrips
1194+ * @param hitToRotated
1195+ * @return
1196+ */
1197+
1198+ public static int numberOfSharedStrips (Track track1 , Track track2 ,RelationalTable hitToStrips , RelationalTable hitToRotated ){
11011199 Set <TrackerHit > track1hits = new HashSet <TrackerHit >(getStripHits (track1 , hitToStrips , hitToRotated ));
1102- for (TrackerHit hit : track2 .getTrackerHits ())
1103- for (TrackerHit hts : (Set <TrackerHit >) hitToStrips .allFrom (hitToRotated .from (hit )))
1104- if (track1hits .contains (hts ))
1105- return true ;
1106- return false ;
1200+ int nShared = 0 ;
1201+ for (TrackerHit hit : track2 .getTrackerHits ()){
1202+ for (TrackerHit hts : (Set <TrackerHit >) hitToStrips .allFrom (hitToRotated .from (hit ))){
1203+ if (track1hits .contains (hts )){
1204+ nShared ++;
1205+ }
1206+ }
1207+ }
1208+ return nShared ;
1209+ }
1210+
1211+
1212+ /**
1213+ * Tells if there are shared 2D hits between tracks
1214+ * @param track1
1215+ * @param track2
1216+ * @param hitToStrips
1217+ * @param hitToRotated
1218+ * @return
1219+ */
1220+ public static boolean hasSharedStrips (Track track1 , Track track2 , RelationalTable hitToStrips , RelationalTable hitToRotated ) {
1221+ int nShared = numberOfSharedStrips (track1 , track2 , hitToStrips , hitToRotated );
1222+ if (nShared == 0 ) return false ;
1223+ else return true ;
11071224 }
1108-
1225+
11091226 public static int getLayer (TrackerHit strip ) {
11101227 return ((RawTrackerHit ) strip .getRawHits ().get (0 )).getLayerNumber ();
11111228 }
0 commit comments