Skip to content

Commit 969f93d

Browse files
Holly SzumilaHolly Szumila
authored andcommitted
added some new methods for studying shared hits
1 parent f5fb1c9 commit 969f93d

1 file changed

Lines changed: 126 additions & 9 deletions

File tree

tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java

Lines changed: 126 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)