Print

Print


Author: [log in to unmask]
Date: Fri Aug 28 18:33:16 2015
New Revision: 3458

Log:
change stuff, fix sign error

Modified:
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutput.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/GBLOutput.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutput.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutput.java	Fri Aug 28 18:33:16 2015
@@ -831,7 +831,7 @@
     private BasicMatrix getPerParVector(HelicalTrackFit htf) {
         BasicMatrix perPar = new BasicMatrix(1, 5);
         if (htf != null) {
-            double kappa = -1.0 * Math.signum(htf.R()) * Constants.fieldConversion * this._B.z() / htf.pT(Math.abs(_B.z()));
+            double kappa = -1.0 * Math.signum(_B.z()) / htf.R();
             double theta = Math.PI / 2.0 - Math.atan(htf.slope());
             perPar.setElement(0, 0, kappa);
             perPar.setElement(0, 1, theta);
@@ -929,11 +929,9 @@
             double yT = vecCl.y();
             //double zT = vecCl.z();
 
-            Hep3Vector T = HelixUtils.Direction(htf, 0.);
-            Hep3Vector p = VecOp.mult(htf.p(Math.abs(_B.z())), T);
             double lambda = Math.atan(htf.slope());
             double q = Math.signum(htf.R());
-            double qOverP = q / p.magnitude();
+            double qOverP = q / htf.p(Math.abs(_B.z()));
             double phi = htf.phi0();
 
             _params.setElement(0, 0, qOverP);
@@ -941,7 +939,6 @@
             _params.setElement(0, 2, phi);
             _params.setElement(0, 3, xT);
             _params.setElement(0, 4, yT);
-
         }
 
         public BasicMatrix getParams() {

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 Aug 28 18:33:16 2015
@@ -41,7 +41,7 @@
      * Creates a new instance of MakeTracks.
      */
     public MakeGblTracks() {
-         //logger = Logger.getLogger(getClass().getName());
+        //logger = Logger.getLogger(getClass().getName());
         //logger.setUseParentHandlers(false);
         //Handler handler = new StreamHandler(System.out, new SimpleFormatter());
         //logger.addHandler(handler);
@@ -149,13 +149,15 @@
     private double[] getGblCorrectedHelixParameters(HelicalTrackFit helix, FittedGblTrajectory traj, double bfield) {
 
         // get seed helix parameters
-        double d0 = helix.dca();
+        double d0 = -1.0 * helix.dca(); // correct for different sign convention of d0 in curvilinear frame
         double z0 = helix.z0();
         double phi0 = helix.phi0();
         double lambda = Math.atan(helix.slope());
-        double p = helix.p(bfield);
-        double q = traj.get_seed().getCharge();
+        double p = helix.p(Math.abs(bfield));
+        double q = Math.signum(helix.R());
         double qOverP = q / p;
+
+        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))));
 
         // get corrections from GBL fit
         Vector locPar = new Vector(5);
@@ -175,8 +177,8 @@
         Hep3Vector corrPer = VecOp.mult(clToPerPrj, new BasicHep3Vector(xTCorr, yTCorr, 0.0));
 
         //d0
-        double d0_corr = -1.0 * corrPer.y(); // correct for different sign convention of d0 in curvilinear frame
-        double d0_gbl = d0 + d0_corr;
+        double d0_corr = corrPer.y();
+        double dca_gbl = -1.0 * (d0 + d0_corr);
 
         //z0
         double z0_corr = corrPer.z();
@@ -194,12 +196,14 @@
         double pt_gbl = Math.abs(1.0 / qOverP_gbl) * Math.sin((Math.PI / 2.0 - lambda_gbl));
         double C_gbl = Constants.fieldConversion * bfield / pt_gbl;
         //make sure sign is not changed
-        C_gbl = Math.signum(helix.curvature()) * Math.abs(C_gbl);
-
-        logger.info("qOverP=" + qOverP + " qOverPCorr=" + qOverPCorr + " qOverP_gbl=" + qOverP_gbl + " ==> pGbl=" + 1.0 / qOverP_gbl);
+        C_gbl = Math.signum(qOverP_gbl) * Math.abs(C_gbl);
+
+        logger.info("qOverP=" + qOverP + " qOverPCorr=" + qOverPCorr + " qOverP_gbl=" + qOverP_gbl + " ==> pGbl=" + 1.0 / qOverP_gbl + " C_gbl=" + C_gbl);
+
+        logger.info(String.format("corrected helix: d0=%f, z0=%f, omega=%f, tanlambda=%f, phi0=%f, p=%f", dca_gbl, z0_gbl, C_gbl, slope_gbl, phi0_gbl, Math.abs(1 / qOverP_gbl)));
 
         double parameters_gbl[] = new double[5];
-        parameters_gbl[HelicalTrackFit.dcaIndex] = d0_gbl;
+        parameters_gbl[HelicalTrackFit.dcaIndex] = dca_gbl;
         parameters_gbl[HelicalTrackFit.z0Index] = z0_gbl;
         parameters_gbl[HelicalTrackFit.curvatureIndex] = C_gbl;
         parameters_gbl[HelicalTrackFit.slopeIndex] = slope_gbl;