Commit in projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/recon/util on MAIN
TrackSubdetectorHitNumbersDriver.java+93-513284 -> 3285
adding fix from Bristol

projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/recon/util
TrackSubdetectorHitNumbersDriver.java 3284 -> 3285
--- projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/recon/util/TrackSubdetectorHitNumbersDriver.java	2014-08-27 22:49:25 UTC (rev 3284)
+++ projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/recon/util/TrackSubdetectorHitNumbersDriver.java	2014-09-01 12:06:36 UTC (rev 3285)
@@ -7,93 +7,135 @@
 // WARNING: This code is dependent on the detector geometry and was
 // only tested for the sidloi3 model!
 //
+// Specifically it requires the "SiVertexEndcap","SiVertexBarrel" and "SiTrackerForward" subdetectors to be present
+// It will almost certainly do the wrong thing if your detector is too unlike sidloi3
+//
+// Changed by Oliver Reardon-Smith
+// Last change 29/08/2014
+//
 // Author: Philipp Roloff
-// Last change: 18 / 06 / 2012
 
 import java.util.List;
-import java.lang.Math;
+import java.util.Map;
+import java.util.Set;
 
+import java.util.logging.Level;
+
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.BasicHep3Vector;
+
 import org.lcsim.event.base.BaseTrack;
 import org.lcsim.util.Driver;
+
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.Track;
 import org.lcsim.event.TrackerHit;
+import org.lcsim.event.RawTrackerHit;
+
 import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.compact.Subdetector;
 
+import org.lcsim.detector.IDetectorElement;
+
 public class TrackSubdetectorHitNumbersDriver extends Driver {
 
     protected String trackCollection;
-    
+    protected IDetectorElement siVertexEndcapIDetectorElement;
+    protected IDetectorElement siVertexBarrelIDetectorElement;
+    protected IDetectorElement siTrackerForwardIDetectorElement;
+
     @Override
     protected void startOfData() {
-    	trackCollection = EventHeader.TRACKS;
+        trackCollection = EventHeader.TRACKS;
     }
-    
+
     public void setTrackCollection(String trackCollection) {
-		this.trackCollection = trackCollection;
-	}
-    
+        this.trackCollection = trackCollection;
+    }
+
     @Override
     protected void detectorChanged(Detector detector) {
-    	String name = detector.getName();
-    	if (!name.equals("sidloi3")) {
-    		throw new RuntimeException("The detector model "+ name +" is not supported.");
-    	}
+
+        Set<String> subDetectorNames = detector.getSubdetectorNames();
+
+        if( !(subDetectorNames.contains("SiVertexEndcap") && subDetectorNames.contains("SiTrackerForward") && subDetectorNames.contains("SiVertexBarrel")) ){
+            throw new RuntimeException("The detector must contain subdetectors named SiVertexBarrel, SiVertexEndcap and SiTrackerForward otherwise the \"" + this.getName() + "\" driver will fail.");
+        }
+
+        Subdetector siVertexEndcapSubdetector = detector.getSubdetector("SiVertexEndcap");
+        Subdetector siTrackerForwardSubdetector = detector.getSubdetector("SiTrackerForward");
+	Subdetector siVertexBarrelSubdetector = detector.getSubdetector("SiVertexBarrel");
+	
+        this.siVertexEndcapIDetectorElement = siVertexEndcapSubdetector.getDetectorElement();
+        this.siTrackerForwardIDetectorElement = siTrackerForwardSubdetector.getDetectorElement();
+	this.siVertexBarrelIDetectorElement = siVertexBarrelSubdetector.getDetectorElement();
     }
 
     @Override
     protected void process(EventHeader event) {
 
-	// get all tracks
-	List<Track> tracks = event.get(Track.class, trackCollection);
+        // get all tracks
+        List<Track> tracks = event.get(Track.class, trackCollection);
 
 	// loop over all tracks
-	for (Track track : tracks) {
+        for (Track track : tracks) {
+            List<TrackerHit> hits = track.getTrackerHits();
 
-	    List<TrackerHit> hits = track.getTrackerHits();
+            Integer number_vertex_barrel_hits = 0;
+            Integer number_vertex_disk_hits = 0;
+            Integer number_tracker_hits = 0;
 
-	    // System.out.println(hits.size());
+            // loop over all hits
+            for (TrackerHit hit : hits) {
+                if (hit.getType() == 1) {
+		    Hep3Vector hitPosition = new BasicHep3Vector(hit.getPosition());
+		    
+		    List<RawTrackerHit> rawTrackerHits = hit.getRawHits();
 
-	    Integer number_vertex_barrel_hits = 0;
-	    Integer number_vertex_disk_hits = 0;
-	    Integer number_tracker_hits = 0;
+		    if(rawTrackerHits.size() < 1){
+			throw new RuntimeException("A tracker hit was encountered with no raw tracker hits associated");
+		    }
 
-	    // loop over all hits
-	    for (TrackerHit hit : hits) {
+		    RawTrackerHit firstRawTrackerHit = rawTrackerHits.get(0);
+		    IDetectorElement trackerHitIDetectorElement = firstRawTrackerHit.getDetectorElement();
 
-		if (hit.getType() == 1) {
-		    if (Math.abs(hit.getPosition()[2]) < 75.0) {
-			number_vertex_barrel_hits++;
-		    } else {
-			number_vertex_disk_hits++;
+		    if( this.siVertexBarrelIDetectorElement.isDescendant(trackerHitIDetectorElement) ){
+                        number_vertex_barrel_hits++;
+                    }
+		    else  if( this.siVertexEndcapIDetectorElement.isDescendant(trackerHitIDetectorElement) ){
+                        number_vertex_disk_hits++;
+                    }
+		    else if (this.siTrackerForwardIDetectorElement.isDescendant(trackerHitIDetectorElement)){ //for some reason tracker forward hits come labelled with 1
+			number_tracker_hits++;
+		    }else{
+			this.getLogger().log(Level.WARNING, "A vertex detector hit was found not in the vertex barrel, not in the vertex endcap and not in the tracker forward. This is probably a problem.");
 		    }
-		}
+                }
+		else if(hit.getType() == 2 || hit.getType() == 3){
+		    number_tracker_hits++;
+		} 
 
-		if (hit.getType() == 2 || hit.getType() == 3) number_tracker_hits++;
+            } // end loop over all hits
 
-	    } // end loop over all hits
+            int[] subdetector_hits;
+            subdetector_hits = new int[12];
 
-	    int[] subdetector_hits;
-	    subdetector_hits = new int[12];
-	    
-	    // fill hit numbers in ILD style array
-	    subdetector_hits[0] = number_vertex_barrel_hits; // "VTX"
-	    subdetector_hits[1] = number_vertex_disk_hits; // "FTD"
-	    subdetector_hits[2] = 0; // "SIT"
-	    subdetector_hits[3] = number_tracker_hits; // "TPC"
-	    subdetector_hits[4] = 0; // "SET"
-	    subdetector_hits[5] = 0; // "ETD"
-	    subdetector_hits[6] = number_vertex_barrel_hits; // "VTX"
-	    subdetector_hits[7] = number_vertex_disk_hits; // "FTD"
-	    subdetector_hits[8] = 0; // "SIT"
-	    subdetector_hits[9] = number_tracker_hits; // "TPC"
-	    subdetector_hits[10] = 0; // "SET"
-	    subdetector_hits[11] = 0; // "ETD"
+            // fill hit numbers in ILD style array
+            subdetector_hits[0] = number_vertex_barrel_hits; // "VTX"
+            subdetector_hits[1] = number_vertex_disk_hits; // "FTD"
+            subdetector_hits[2] = 0; // "SIT"
+            subdetector_hits[3] = number_tracker_hits; // "TPC"
+            subdetector_hits[4] = 0; // "SET"
+            subdetector_hits[5] = 0; // "ETD"
+            subdetector_hits[6] = number_vertex_barrel_hits; // "VTX"
+            subdetector_hits[7] = number_vertex_disk_hits; // "FTD"
+            subdetector_hits[8] = 0; // "SIT"
+            subdetector_hits[9] = number_tracker_hits; // "TPC"
+            subdetector_hits[10] = 0; // "SET"
+            subdetector_hits[11] = 0; // "ETD"
 
-	    ((BaseTrack)track).setSubdetectorHitNumbers(subdetector_hits);
+            ((BaseTrack)track).setSubdetectorHitNumbers(subdetector_hits);
+        }
 
-	}
-
     }
-
-}
\ No newline at end of file
+}
SVNspam 0.1


Use REPLY-ALL to reply to list

To unsubscribe from the LCDET-SVN list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCDET-SVN&A=1