Print

Print


Author: [log in to unmask]
Date: Wed Dec  9 14:48:02 2015
New Revision: 4035

Log:
add relation, use new GBL refitter

Modified:
    java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim
    java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java

Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim	Wed Dec  9 14:48:02 2015
@@ -51,7 +51,6 @@
            ReconstructedParticle types are properly set.
         -->
         <driver name="MergeTrackCollections"/>
-        <driver name="GBLOutputDriver" />
         <driver name="GBLRefitterDriver" />
         <driver name="TrackDataDriver" />
         <driver name="ReconParticleDriver" />   
@@ -134,8 +133,7 @@
             <ecalClusterCollectionName>EcalClustersCorr</ecalClusterCollectionName>        
             <trackCollectionNames>MatchedTracks GBLTracks</trackCollectionNames>
         </driver>  
-        <driver name="GBLOutputDriver" type="org.hps.recon.tracking.gbl.GBLOutputDriver"/>      
-        <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.HpsGblRefitter"/>
+        <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.GBLRefitterDriver"/>
         <driver name="LCIOWriter" type="org.lcsim.util.loop.LCIODriver">
             <outputFilePath>${outputFile}.slcio</outputFilePath>
         </driver>

Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim	Wed Dec  9 14:48:02 2015
@@ -53,7 +53,6 @@
             ReconstructedParticle types are properly set.
          -->
         <driver name="MergeTrackCollections"/>
-        <driver name="GBLOutputDriver" />
         <driver name="GBLRefitterDriver" />
         <driver name="TrackDataDriver" />
         <driver name="ReconParticleDriver" />   
@@ -119,8 +118,7 @@
             <rmsTimeCut>8.0</rmsTimeCut>
         </driver>       
         <driver name="MergeTrackCollections" type="org.hps.recon.tracking.MergeTrackCollections" />
-        <driver name="GBLOutputDriver" type="org.hps.recon.tracking.gbl.GBLOutputDriver"/>             
-        <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.HpsGblRefitter"/>
+        <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.GBLRefitterDriver"/>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <ecalCollectionName>EcalCalHits</ecalCollectionName>
             <fixShapeParameter>true</fixShapeParameter>

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	Wed Dec  9 14:48:02 2015
@@ -16,7 +16,6 @@
 import org.lcsim.event.TrackState;
 import org.lcsim.event.TrackerHit;
 import org.lcsim.event.base.BaseLCRelation;
-import org.lcsim.event.base.BaseRelationalTable;
 import org.lcsim.fit.helicaltrack.HelicalTrackCross;
 import org.lcsim.fit.helicaltrack.HelicalTrackHit;
 import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
@@ -34,7 +33,7 @@
 public final class TrackDataDriver extends Driver {
 
     /** logger **/
-    private static Logger LOGGER  = Logger.getLogger(TrackDataDriver.class.getPackage().getName());
+    private static final Logger LOGGER  = Logger.getLogger(TrackDataDriver.class.getPackage().getName());
     
     
     /** The B field map */
@@ -107,6 +106,7 @@
      * 
      * @param detector LCSim {@link Detector} geometry 
      */     
+    @Override
     protected void detectorChanged(Detector detector) { 
        
         // Get the field map from the detector object
@@ -121,6 +121,7 @@
      * 
      * @param event : LCSim event
      */
+    @Override
     protected void process(EventHeader event) {
 
         // Check if the event contains a collection of the type Track. If it
@@ -135,15 +136,11 @@
 
         // Get the collection of LCRelations relating RotatedHelicalTrackHits to
         // HelicalTrackHits
-        List<LCRelation> rotatedHthToHthRelations = event.get(LCRelation.class, ROTATED_HTH_REL_COL_NAME);
-        BaseRelationalTable hthToRotatedHth = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE,
-                        RelationalTable.Weighting.UNWEIGHTED);
-        hthToRotatedHth.addRelations(rotatedHthToHthRelations);
 
         RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
         RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
 
-        List<HelicalTrackHit> rotatedHths = event.get(HelicalTrackHit.class, ROTATED_HTH_COL_NAME);
+//        List<HelicalTrackHit> rotatedHths = event.get(HelicalTrackHit.class, ROTATED_HTH_COL_NAME);
 
         // Create a container that will be used to store all TrackData objects.
         List<TrackData> trackDataCollection = new ArrayList<TrackData>();
@@ -159,21 +156,21 @@
         // residuals
         List<LCRelation> trackToTrackResidualsRelations = new ArrayList<LCRelation>();
 
-        double xResidual = 0;
-        double yResidual = 0;
-
-        float totalT0 = 0;
-        float totalHits = 0;
-        float trackTime = 0;
+        double xResidual;
+        double yResidual;
+
+        float totalT0;
+        float totalHits;
+        float trackTime;
 
         int trackerVolume = -1;
 
-        boolean isFirstHit = true;
-
-        HpsSiSensor sensor = null;
-        Hep3Vector stereoHitPosition = null;
-        Hep3Vector trackPosition = null;
-        HelicalTrackHit helicalTrackHit = null;
+        boolean isFirstHit;
+
+        HpsSiSensor sensor;
+        Hep3Vector stereoHitPosition;
+        Hep3Vector trackPosition;
+        HelicalTrackHit helicalTrackHit;
 
         List<Double> t0Residuals = new ArrayList<Double>();
         List<Double> trackResidualsX = new ArrayList<Double>();
@@ -198,7 +195,10 @@
                 stereoLayers.clear();
                 isFirstHit = true;
 
-                //
+//                TrackState trackStateForResiduals = TrackUtils.getTrackStateAtLocation(track, TrackState.AtLastHit);
+//                if (trackStateForResiduals == null ) trackStateForResiduals= TrackUtils.getTrackStateAtLocation(track, TrackState.AtIP);
+                TrackState trackStateForResiduals = TrackUtils.getTrackStateAtLocation(track, TrackState.AtIP);
+                
                 // Change the position of a HelicalTrackHit to be the corrected
                 // one.
                 // FIXME: Now that multiple track collections are being used, 
@@ -216,7 +216,7 @@
                     // Extrapolate the track to the stereo hit position and
                     // calculate track residuals
                     stereoHitPosition = ((HelicalTrackHit) rotatedStereoHit).getCorrectedPosition();
-                    trackPosition = TrackUtils.extrapolateTrack(track, stereoHitPosition.x());
+                    trackPosition = TrackUtils.extrapolateTrack(trackStateForResiduals, stereoHitPosition.x());
                     xResidual = trackPosition.x() - stereoHitPosition.y();
                     yResidual = trackPosition.y() - stereoHitPosition.z();
                     trackResidualsX.add(xResidual);
@@ -230,7 +230,7 @@
                     
                     // Get the HelicalTrackHit corresponding to the 
                     // RotatedHelicalTrackHit associated with a track
-                    helicalTrackHit = (HelicalTrackHit) hthToRotatedHth.from(rotatedStereoHit);
+                    helicalTrackHit = (HelicalTrackHit) hitToRotated.from(rotatedStereoHit);
                     ((HelicalTrackHit) rotatedStereoHit).setPosition(stereoHitPosition.v());
                     stereoHitPosition = CoordinateTransformations.transformVectorToDetector(stereoHitPosition);
                     helicalTrackHit.setPosition(stereoHitPosition.v());
@@ -261,18 +261,7 @@
 
                 // 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);
+                    TrackState stateIP = TrackUtils.getTrackStateAtLocation(track, TrackState.AtIP);
                     if( stateIP == null)
                         throw new RuntimeException("IP track state for GBL track was not found");
                     TrackState stateEcalIP = TrackUtils.extrapolateTrackUsingFieldMap(stateIP, extStartPos, ecalPosition, stepSize, bFieldMap);

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java	Wed Dec  9 14:48:02 2015
@@ -1306,15 +1306,25 @@
             return new Line(r0, phi, lambda);
     }
 
-    public static TrackState getTrackStateAtECal(Track trk) {
+    /**
+     * Port of Track.getTrackState(int location) from the C++ LCIO API.
+     * @param trk A track.
+     * @param location A TrackState location constant
+     * @return The first matching TrackState; null if none is found.
+     */
+    public static TrackState getTrackStateAtLocation(Track trk, int location) {
         for (TrackState state : trk.getTrackStates()) {
-            if (state.getLocation() == TrackState.AtCalorimeter) {
+            if (state.getLocation() == location) {
                 return state;
             }
         }
         return null;
     }
 
+    public static TrackState getTrackStateAtECal(Track trk) {
+        return getTrackStateAtLocation(trk, TrackState.AtCalorimeter);
+    }
+    
     public static Hep3Vector getBField(Detector detector) {
         return detector.getFieldMap().getField(new BasicHep3Vector(0., 0., 500.0));
     }

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java	Wed Dec  9 14:48:02 2015
@@ -13,11 +13,9 @@
 import java.util.logging.Logger;
 
 import org.lcsim.event.EventHeader;
-import org.lcsim.event.LCRelation;
 import org.lcsim.event.RelationalTable;
 import org.lcsim.event.Track;
 import org.lcsim.event.TrackerHit;
-import org.lcsim.event.base.BaseRelationalTable;
 import org.lcsim.event.base.BaseTrack;
 import org.lcsim.fit.helicaltrack.HelicalTrackHit;
 import org.lcsim.geometry.Detector;
@@ -65,7 +63,7 @@
     private double rmsTimeCut = -1;
     private boolean rejectUncorrectedHits = true;
     private boolean rejectSharedHits = false;
-    
+
     public TrackerReconDriver() {
     }
 
@@ -165,8 +163,9 @@
         //
         // 1) Driver to run Seed Tracker.
         //
-        if (!strategyResource.startsWith("/"))
+        if (!strategyResource.startsWith("/")) {
             strategyResource = "/org/hps/recon/tracking/strategies/" + strategyResource;
+        }
         List<SeedStrategy> sFinallist = StrategyXMLUtils.getStrategyListFromInputStream(this.getClass().getResourceAsStream(strategyResource));
         SeedTracker stFinal = new SeedTracker(sFinallist, this._useHPSMaterialManager, this.includeMS);
         stFinal.setApplySectorBinning(_applySectorBinning);
@@ -177,14 +176,16 @@
         stFinal.setInputCollectionName(stInputCollectionName);
         stFinal.setTrkCollectionName(trackCollectionName);
         stFinal.setBField(bfield);
-        if (debug)
+        if (debug) {
             stFinal.setDiagnostics(new SeedTrackerDiagnostics());
+        }
         // stFinal.setSectorParams(false); //this doesn't actually seem to do anything
         stFinal.setSectorParams(1, 10000);
         add(stFinal);
 
-        if (rmsTimeCut > 0)
+        if (rmsTimeCut > 0) {
             stFinal.setTrackCheck(new HitTimeTrackCheck(rmsTimeCut));
+        }
     }
 
     /**
@@ -198,10 +199,11 @@
 
         // Debug printouts.
         if (debug) {
-            if (event.hasCollection(HelicalTrackHit.class, stInputCollectionName))
+            if (event.hasCollection(HelicalTrackHit.class, stInputCollectionName)) {
                 System.out.println(this.getClass().getSimpleName() + ": The HelicalTrackHit collection " + stInputCollectionName + " has " + event.get(HelicalTrackHit.class, stInputCollectionName).size() + " hits.");
-            else
+            } else {
                 System.out.println(this.getClass().getSimpleName() + ": No HelicalTrackHit collection for this event");
+            }
             // Check for Tracks.
             List<Track> tracks = event.get(Track.class, trackCollectionName);
             System.out.println(this.getClass().getSimpleName() + ": The Track collection " + trackCollectionName + " has " + tracks.size() + " tracks.");
@@ -236,27 +238,13 @@
         }
 
         if (rejectSharedHits) {
-
-            RelationalTable hittostrip = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
-            List<LCRelation> hitrelations = event.get(LCRelation.class, "HelicalTrackHitRelations");
-            for (LCRelation relation : hitrelations) {
-                if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
-                    hittostrip.add(relation.getFrom(), relation.getTo());
-                }
-            }
-
-            RelationalTable hittorotated = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE, RelationalTable.Weighting.UNWEIGHTED);
-            List<LCRelation> rotaterelations = event.get(LCRelation.class, "RotatedHelicalTrackHitRelations");
-            for (LCRelation relation : rotaterelations) {
-                if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
-                    hittorotated.add(relation.getFrom(), relation.getTo());
-                }
-            }
+            RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
+            RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
 
             Map<TrackerHit, List<Track>> stripsToTracks = new HashMap<TrackerHit, List<Track>>();
             for (Track track : tracks) {
                 for (TrackerHit hit : track.getTrackerHits()) {
-                    Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit));
+                    Collection<TrackerHit> htsList = hitToStrips.allFrom(hitToRotated.from(hit));
                     for (TrackerHit strip : htsList) {
                         List<Track> sharedTracks = stripsToTracks.get(strip);
                         if (sharedTracks == null) {
@@ -272,7 +260,7 @@
             while (iter.hasNext()) {
                 Track track = iter.next();
                 for (TrackerHit hit : track.getTrackerHits()) {
-                    Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit));
+                    Collection<TrackerHit> htsList = hitToStrips.allFrom(hitToRotated.from(hit));
                     for (TrackerHit strip : htsList) {
                         List<Track> sharedTracks = stripsToTracks.get(strip);
                         if (sharedTracks.size() > 1) {
@@ -304,8 +292,9 @@
      * @param tracks The list of <code>Track</code> objects.
      */
     private void setTrackType(List<Track> tracks) {
-        for (Track track : tracks)
+        for (Track track : tracks) {
             ((BaseTrack) track).setTrackType(BaseTrack.TrackType.Y_FIELD.ordinal());
+        }
     }
 
     @Override

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java	Wed Dec  9 14:48:02 2015
@@ -28,6 +28,7 @@
 
     private String inputCollectionName = "MatchedTracks";
     private String outputCollectionName = "GBLTracks";
+    private String trackRelationCollectionName = "MatchedToGBLTrackRelations";
 
     private double bfield;
     private final MultipleScattering _scattering = new MultipleScattering(new MaterialSupervisor());
@@ -68,16 +69,17 @@
         RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
 
         List<Track> refittedTracks = new ArrayList<Track>();
+        List<LCRelation> trackRelations = new ArrayList<LCRelation>();
+
         List<GBLKinkData> kinkDataCollection = new ArrayList<GBLKinkData>();
-
         List<LCRelation> kinkDataRelations = new ArrayList<LCRelation>();
 
         Map<Track, Track> inputToRefitted = new HashMap<Track, Track>();
         for (Track track : tracks) {
-            Pair<Track, GBLKinkData> newTrack = MakeGblTracks.refitTrack(TrackUtils.getHTF(track), TrackUtils.getStripHits(track, hitToStrips, hitToRotated), track.getTrackerHits(), 5, track.getType(), _scattering, bfield
-            );
+            Pair<Track, GBLKinkData> newTrack = MakeGblTracks.refitTrack(TrackUtils.getHTF(track), TrackUtils.getStripHits(track, hitToStrips, hitToRotated), track.getTrackerHits(), 5, track.getType(), _scattering, bfield);
 //            newTrack.getFirst().
             refittedTracks.add(newTrack.getFirst());
+            trackRelations.add(new BaseLCRelation(track, newTrack.getFirst()));
             inputToRefitted.put(track, newTrack.getFirst());
 
             kinkDataCollection.add(newTrack.getSecond());
@@ -141,6 +143,7 @@
         // Put the tracks back into the event and exit
         int flag = 1 << LCIOConstants.TRBIT_HITS;
         event.put(outputCollectionName, refittedTracks, Track.class, flag);
+        event.put(trackRelationCollectionName, trackRelations, LCRelation.class, 0);
         event.put(GBLKinkData.DATA_COLLECTION, kinkDataCollection, GBLKinkData.class, 0);
         event.put(GBLKinkData.DATA_RELATION_COLLECTION, kinkDataRelations, LCRelation.class, 0);
     }