Print

Print


Author: [log in to unmask]
Date: Fri Sep 11 16:19:19 2015
New Revision: 3592

Log:
Extrapolate GBL track to ECal from last hit.

Modified:
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java	Fri Sep 11 16:19:19 2015
@@ -4,7 +4,10 @@
 
 import java.util.ArrayList;
 import java.util.List;
-
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.hps.util.BasicLogFormatter;
 import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.LCRelation;
@@ -22,6 +25,7 @@
 import org.lcsim.geometry.FieldMap;
 import org.lcsim.recon.tracking.seedtracker.SeedTrack;
 import org.lcsim.util.Driver;
+import org.lcsim.util.log.LogUtil;
 
 /**
  * Driver used to persist additional {@link Track} information via a
@@ -32,6 +36,10 @@
  */
 public final class TrackDataDriver extends Driver {
 
+    /** logger **/
+    private static Logger logger  = LogUtil.create(TrackDataDriver.class.getSimpleName(), new BasicLogFormatter(), Level.WARNING);
+    
+    
     /** The B field map */
     FieldMap bFieldMap = null;
     
@@ -178,6 +186,8 @@
 
         // Loop over each of the track collections retrieved from the event
         for (List<Track> tracks : trackCollections) {
+            
+            
 
             // Loop over all the tracks in the event
             for (Track track : tracks) {
@@ -250,11 +260,40 @@
                 // Add a track state that contains the extrapolated track position and 
                 // parameters at the face of the Ecal.
                 //
+                logger.info("Extrapolating track with type " + Integer.toString(track.getType()) );
+
+                // Extrapolate the track to the face of the Ecal and get the TrackState
+                if( TrackType.isGBL(track.getType())) {
+                    TrackState stateLast = null;
+                    TrackState stateIP = null;
+                    for(int ist= 0; ist < track.getTrackStates().size(); ist++) {
+                        if( track.getTrackStates().get(ist).getLocation() == TrackState.AtLastHit ) 
+                            stateLast = track.getTrackStates().get(ist);
+                        if( track.getTrackStates().get(ist).getLocation() == TrackState.AtIP ) 
+                            stateIP = track.getTrackStates().get(ist);
+                    }
+                    if( stateLast == null)
+                        throw new RuntimeException("last hit track state for GBL track was not found");
+                    TrackState stateEcal = TrackUtils.extrapolateTrackUsingFieldMap(stateLast, extStartPos, ecalPosition, stepSize, bFieldMap);
+                    track.getTrackStates().add(stateEcal);
+                    //if( stateIP == null)
+                    //    throw new RuntimeException("IP track state for GBL track was not found");
+                    //TrackState stateEcalIP = TrackUtils.extrapolateTrackUsingFieldMap(stateIP, extStartPos, ecalPosition, stepSize, bFieldMap);
+                    //track.getTrackStates().add(stateEcalIP);
+                   
+                } else {
+                    logger.info("Extrapolate seed track to ECal from vertex");
+                    TrackState state = TrackUtils.extrapolateTrackUsingFieldMap(track, extStartPos, ecalPosition, stepSize, bFieldMap);
+                    track.getTrackStates().add(state);
+                }
                 
-                // Extrapolate the track to the face of the Ecal and get the TrackState
-                TrackState state 
-                    = TrackUtils.extrapolateTrackUsingFieldMap(track, extStartPos, ecalPosition, stepSize, bFieldMap);
-                track.getTrackStates().add(state);
+                logger.info(Integer.toString(track.getTrackStates().size()) +  " track states for this track at this point:");
+                for(TrackState state : track.getTrackStates()) {
+                    String s = "type " + Integer.toString(track.getType()) + " location " + Integer.toString(state.getLocation()) + " refPoint (" + state.getReferencePoint()[0] + " " + state.getReferencePoint()[1] + " " + state.getReferencePoint()[2] + ") " + " params: ";
+                    for(int i=0;i<5;++i) s += String.format(" %f", state.getParameter(i));
+                    logger.info(s);
+                }
+                
                 
                 // The track time is the mean t0 of hits on a track
                 trackTime = totalT0 / totalHits;