Print

Print


Author: [log in to unmask]
Date: Fri Sep 11 16:20:24 2015
New Revision: 3593

Log:
Create track states at IP and last point for GBL. 

Modified:
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/FittedGblTrajectory.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblTrajectory.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/FittedGblTrajectory.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/FittedGblTrajectory.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/FittedGblTrajectory.java	Fri Sep 11 16:20:24 2015
@@ -9,6 +9,31 @@
  * 
  */
 public class FittedGblTrajectory {
+    public enum GBLPOINT {
+        IP(0), LAST(1), VERTEX(2);
+        private int numVal;
+        GBLPOINT(int numVal) {
+            this.numVal = numVal;
+        }
+        public int getNumVal() {
+            return numVal;
+        }
+        public String toString() {
+            String s;
+            switch (numVal) {
+                case 0: s = "VERTEX";
+                        break;
+                case 1: s = "LAST";
+                        break;
+                default:
+                    s = "";
+            }
+            if( s.isEmpty() )
+                throw new RuntimeException("This value " + Integer.toString(numVal) +  " is not valid.");
+            return "GblPoint: " + s;
+        }
+        
+    }
     public static enum GBLPARIDX {
         QOVERP(0),YTPRIME(1),XTPRIME(2),XT(3),YT(4);
         private int _value;

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblTrajectory.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblTrajectory.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblTrajectory.java	Fri Sep 11 16:20:24 2015
@@ -23,8 +23,6 @@
 
 public class GblTrajectory
 {
-
-    private boolean debug = true;
 
     public GblTrajectory(List<GblPoint> listOfPoints)
     {

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java	Fri Sep 11 16:20:24 2015
@@ -5,10 +5,12 @@
 import hep.physics.vec.Hep3Matrix;
 import hep.physics.vec.Hep3Vector;
 import hep.physics.vec.VecOp;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+
 import org.apache.commons.math3.util.Pair;
 import org.hps.recon.tracking.StrategyType;
 import org.hps.recon.tracking.TrackType;
@@ -19,8 +21,10 @@
 import org.lcsim.constants.Constants;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.Track;
+import org.lcsim.event.TrackState;
 import org.lcsim.event.TrackerHit;
 import org.lcsim.event.base.BaseTrack;
+import org.lcsim.event.base.BaseTrackState;
 import org.lcsim.fit.helicaltrack.HelicalTrackFit;
 import org.lcsim.fit.helicaltrack.HelicalTrackHit;
 import org.lcsim.fit.helicaltrack.HelixUtils;
@@ -39,31 +43,19 @@
 public class MakeGblTracks {
 
     private String _TrkCollectionName = "GBLTracks";
-    private static Logger logger = LogUtil.create(MakeGblTracks.class, new BasicLogFormatter());
+    private static Logger logger = LogUtil.create(MakeGblTracks.class, new BasicLogFormatter(), Level.INFO);
 
     /**
      * Creates a new instance of MakeTracks.
      */
     public MakeGblTracks() {
-        //logger = Logger.getLogger(getClass().getName());
-        //logger.setUseParentHandlers(false);
-        //Handler handler = new StreamHandler(System.out, new SimpleFormatter());
-        //logger.addHandler(handler);
-        logger.setLevel(Level.INFO);
-//        try {
-//            logger.addHandler(new FileHandler(MakeGblTracks.class.getSimpleName()+".log"));
-//        } catch (SecurityException | IOException e) {
-//            e.printStackTrace();
-//        }
-
     }
 
     public void setDebug(boolean debug) {
-        if (debug) {
+        if (debug) 
             logger.setLevel(Level.INFO);
-        } else {
+        else 
             logger.setLevel(Level.OFF);
-        }
     }
 
     /**
@@ -87,7 +79,7 @@
             SeedTrack seedTrack = (SeedTrack) fittedTraj.get_seed();
             SeedCandidate trackseed = seedTrack.getSeedCandidate();
 
-            //  Create a new BaeTrack
+            //  Create a new SeedTrack
             BaseTrack trk = new BaseTrack();
 
             //  Add the hits to the track
@@ -95,30 +87,26 @@
                 trk.addHit((TrackerHit) hit);
             }
 
-            //  Retrieve the helix and save the relevant bits of helix info
+            //  Retrieve the helix
             HelicalTrackFit helix = trackseed.getHelix();
-            Pair<double[], SymmetricMatrix> correctedHelixParams = getGblCorrectedHelixParameters(helix, fittedTraj, bfield);
-            trk.setTrackParameters(correctedHelixParams.getFirst(), bfield); // Sets first TrackState.
-            trk.setCovarianceMatrix(correctedHelixParams.getSecond()); // Modifies first TrackState.
+            
+            // Set state at vertex
+            Pair<double[], SymmetricMatrix> correctedHelixParams = getGblCorrectedHelixParameters(helix, fittedTraj, bfield, FittedGblTrajectory.GBLPOINT.IP);
+            TrackState stateVertex = new BaseTrackState(correctedHelixParams.getFirst(), ref, correctedHelixParams.getSecond().asPackedArray(true), TrackState.AtIP, bfield);
+            trk.getTrackStates().add(stateVertex);
+            
+            // Set state at last point
+            Pair<double[], SymmetricMatrix> correctedHelixParamsLast = getGblCorrectedHelixParameters(helix, fittedTraj, bfield, FittedGblTrajectory.GBLPOINT.LAST);
+            TrackState stateLast = new BaseTrackState(correctedHelixParamsLast.getFirst(), ref, correctedHelixParamsLast.getSecond().asPackedArray(true), TrackState.AtLastHit, bfield);
+            trk.getTrackStates().add(stateLast);
+            
+            // Set other info needed
             trk.setChisq(fittedTraj.get_chi2());
             trk.setNDF(fittedTraj.get_ndf());
-
-            //  Flag that the fit was successful and set the reference point
             trk.setFitSuccess(true);
-            trk.setReferencePoint(ref); // Modifies first TrackState.
             trk.setRefPointIsDCA(true);
-
-            //      Set the strategy used to find this track
-//            trk.setStratetgy(trackseed.getSeedStrategy());
-
-            //  Set the SeedCandidate this track is based on
-//            trk.setSeedCandidate(trackseed);
-
-            // Add the GBL flag to the track type.
             trk.setTrackType(TrackType.setGBL(seedTrack.getType(), true));
-
-            // Check the track - hook for plugging in external constraint
-            //if ((_trackCheck != null) && (! _trackCheck.checkTrack(trk))) continue;
+            
             //  Add the track to the list of tracks
             tracks.add(trk);
             logger.info(String.format("helix chi2 %f ndf %d gbl chi2 %f ndf %d\n", helix.chisqtot(), helix.ndf()[0] + helix.ndf()[1], trk.getChi2(), trk.getNDF()));
@@ -137,37 +125,40 @@
         event.put(_TrkCollectionName, tracks, Track.class, flag);
     }
 
+    
     /**
-     * Compute the updated helix parameters and covariance matrix.
+     * Compute the updated helix parameters and covariance matrix at a given point along the trajectory.
      *
      * @param helix - original seed track
      * @param traj - fitted GBL trajectory
+     * @param point - the point along the track where the result is computed.
      * @return corrected parameters.
      */
-    private Pair<double[], SymmetricMatrix> getGblCorrectedHelixParameters(HelicalTrackFit helix, FittedGblTrajectory traj, double bfield) {
+    private Pair<double[], SymmetricMatrix> getGblCorrectedHelixParameters(HelicalTrackFit helix, FittedGblTrajectory traj, double bfield, FittedGblTrajectory.GBLPOINT point) {
 
         // get seed helix parameters
-//        double p = helix.p(Math.abs(bfield));
-//        double q = Math.signum(helix.R());
-//        double qOverP = q / p;
-//        ClParams clParams = new ClParams(helix, bfield);
-//        PerigeeParams perParams = new PerigeeParams(helix, bfield);
         double qOverP = helix.curvature() / (Constants.fieldConversion * Math.abs(bfield) * Math.sqrt(1 + Math.pow(helix.slope(), 2)));
         double d0 = -1.0 * helix.dca(); // correct for different sign convention of d0 in perigee frame
         double z0 = helix.z0();
         double phi0 = helix.phi0();
         double lambda = Math.atan(helix.slope());
 
-//        System.out.println("clParams: " + clParams.getParams());
-//        System.out.println("perParams: " + perParams.getParams());
-//        System.out.format("converted params: qOverP %f, d0 %f, z0 %f, phi0 %f, lambda %f\n", qOverP, d0, z0, phi0, lambda);
+        logger.info("GblPoint: " + point.toString() + "( " + point.name() + ")");
         logger.info(String.format("original helix: d0=%f, z0=%f, omega=%f, tanlambda=%f, phi0=%f, p=%f", helix.dca(), helix.z0(), helix.curvature(), helix.slope(), helix.phi0(), helix.p(Math.abs(bfield))));
         logger.info("original helix covariance:\n" + helix.covariance());
 
         // get corrections from GBL fit
         Vector locPar = new Vector(5);
         SymMatrix locCov = new SymMatrix(5);
-        traj.get_traj().getResults(1, locPar, locCov); // vertex point
+        int pointIndex;
+        if( point.compareTo( FittedGblTrajectory.GBLPOINT.IP) == 0 )
+            pointIndex = 1;
+        else if (point.compareTo(FittedGblTrajectory.GBLPOINT.LAST) == 0) 
+            pointIndex = traj.get_traj().getNumPoints();
+        else 
+            throw new RuntimeException("This GBLPOINT " + point.toString() + "( " + point.name() + ") is not valid");
+        
+        traj.get_traj().getResults(pointIndex, locPar, locCov); // vertex point
 //        locCov.print(10, 8);
         double qOverPCorr = locPar.get(FittedGblTrajectory.GBLPARIDX.QOVERP.getValue());
         double xTPrimeCorr = locPar.get(FittedGblTrajectory.GBLPARIDX.XTPRIME.getValue());