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;