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());
|