LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  August 2015

HPS-SVN August 2015

Subject:

r3452 - in /java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl: GBLOutput.java MakeGblTracks.java

From:

[log in to unmask]

Reply-To:

Notification of commits to the hps svn repository <[log in to unmask]>

Date:

Fri, 28 Aug 2015 23:36:51 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (1720 lines)

Author: [log in to unmask]
Date: Fri Aug 28 16:36:48 2015
New Revision: 3452

Log:
clean up before I change stuff

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 16:36:48 2015
@@ -1,4 +1,5 @@
 package org.hps.recon.tracking.gbl;
+
 import hep.physics.matrix.BasicMatrix;
 import hep.physics.matrix.Matrix;
 import hep.physics.matrix.MatrixOp;
@@ -41,37 +42,36 @@
 import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
 import org.lcsim.recon.tracking.seedtracker.SeedTrack;
 
-
 /**
  * Calculate the input needed for Millepede minimization.
+ *
  * @author Per Hansson Adrian <[log in to unmask]>
  *
  */
 public class GBLOutput {
-    
+
     private int _debug = 0;
     private GBLFileIO textFile = null;
     private Hep3Vector _B;
-	private final TrackerHitUtils _trackerHitUtils = new TrackerHitUtils();
+    private final TrackerHitUtils _trackerHitUtils = new TrackerHitUtils();
     private final MaterialSupervisor _materialmanager;
     private final MultipleScattering _scattering;
     private final double _beamEnergy = 1.1; //GeV
-	private boolean AprimeEvent = false; // do extra checks
-	private boolean hasXPlanes = false;
-    
-    
-
-    
+    private boolean AprimeEvent = false; // do extra checks
+    private boolean hasXPlanes = false;
+
     /**
      * Constructor
-     * @param outputFileName is the filename given to the text-based output file. If empty no output file is written
+     *
+     * @param outputFileName is the filename given to the text-based output
+     * file. If empty no output file is written
      * @param bfield magnetic field in Tesla
      */
-    GBLOutput(String outputFileName,Hep3Vector bfield) {
-    	//System.out.printf("name \"%s\" \n", outputFileName);
-    	if(!outputFileName.equalsIgnoreCase("")) {
-    		textFile = new GBLFileIO(outputFileName);
-    	}
+    GBLOutput(String outputFileName, Hep3Vector bfield) {
+        //System.out.printf("name \"%s\" \n", outputFileName);
+        if (!outputFileName.equalsIgnoreCase("")) {
+            textFile = new GBLFileIO(outputFileName);
+        }
         _materialmanager = new MaterialSupervisor();
         _scattering = new MultipleScattering(_materialmanager);
         _B = CoordinateTransformations.transformVectorToTracking(bfield);
@@ -80,661 +80,623 @@
 
     public void setDebug(int debug) {
         _debug = debug;
-        _scattering.setDebug((_debug>0));
-    }
+        _scattering.setDebug((_debug > 0));
+    }
+
     public void buildModel(Detector detector) {
         _materialmanager.buildModel(detector);
     }
-    void printNewEvent(int eventNumber,double Bz) {
-    	if(textFile != null) {
-    		textFile.printEventInfo(eventNumber,Bz);
-    	}
-    }
+
+    void printNewEvent(int eventNumber, double Bz) {
+        if (textFile != null) {
+            textFile.printEventInfo(eventNumber, Bz);
+        }
+    }
+
     void printTrackID(int iTrack) {
-    	if(textFile != null) {
-    		textFile.printTrackID(iTrack);
-    	}
-    }
+        if (textFile != null) {
+            textFile.printTrackID(iTrack);
+        }
+    }
+
     void close() {
-    	if(textFile != null) {
-    		textFile.closeFile();
-    	}
-    }
+        if (textFile != null) {
+            textFile.closeFile();
+        }
+    }
+
     void setAPrimeEventFlag(boolean flag) {
-    	this.AprimeEvent = flag;
-    }
+        this.AprimeEvent = flag;
+    }
+
     void setXPlaneFlag(boolean flag) {
-    	this.hasXPlanes = flag;
-    }
+        this.hasXPlanes = flag;
+    }
+
     public Hep3Vector get_B() {
-		return _B;
-	}
-	public void set_B(Hep3Vector _B) {
-		this._B = _B;
-	}
-
-
-    
+        return _B;
+    }
+
+    public void set_B(Hep3Vector _B) {
+        this._B = _B;
+    }
+
     void printGBL(Track trk, List<SiTrackerHitStrip1D> stripHits, GBLTrackData gtd, List<GBLStripClusterData> stripClusterDataList, List<MCParticle> mcParticles, List<SimTrackerHit> simTrackerHits, boolean isMC) {
 
-        SeedTrack st = (SeedTrack)trk;
+        SeedTrack st = (SeedTrack) trk;
         SeedCandidate seed = st.getSeedCandidate();
-        HelicalTrackFit htf = seed.getHelix();          
+        HelicalTrackFit htf = seed.getHelix();
 
         // Find scatter points along the path
         ScatterPoints scatters = _scattering.FindHPSScatterPoints(htf);
-        
+
         // Hits on track
         List<HelicalTrackHit> hits = seed.getHits();
 
         // Find the truth particle of the track
         MCParticle mcp = null;
-        
-        if(isMC) {
-        	mcp = getMatchedTruthParticle(trk);
-        
-        	if(mcp==null) {
-        		System.out.printf("%s: WARNING!! no truth particle found in event!\n",this.getClass().getSimpleName());
-        		this.printMCParticles(mcParticles);
-        		//System.exit(1);
-        	} else {
-        		if(_debug>0) System.out.printf("%s: truth particle (pdgif %d ) found in event!\n",this.getClass().getSimpleName(),mcp.getPDGID());
-        	}
-        
-        	if(AprimeEvent ) {
-        		checkAprimeTruth(mcp,mcParticles);
-        	}
-        }
-        
+
+        if (isMC) {
+            mcp = getMatchedTruthParticle(trk);
+
+            if (mcp == null) {
+                System.out.printf("%s: WARNING!! no truth particle found in event!\n", this.getClass().getSimpleName());
+                this.printMCParticles(mcParticles);
+                //System.exit(1);
+            } else {
+                if (_debug > 0) {
+                    System.out.printf("%s: truth particle (pdgif %d ) found in event!\n", this.getClass().getSimpleName(), mcp.getPDGID());
+                }
+            }
+
+            if (AprimeEvent) {
+                checkAprimeTruth(mcp, mcParticles);
+            }
+        }
+
         // Get track parameters from MC particle 
-        HelicalTrackFit htfTruth = (isMC&&mcp!=null) ? TrackUtils.getHTF(mcp,-1.0*this._B.z()) : null;
-        
+        HelicalTrackFit htfTruth = (isMC && mcp != null) ? TrackUtils.getHTF(mcp, -1.0 * this._B.z()) : null;
+
         // Use the truth helix as the initial track for GBL?
         //htf = htfTruth;
-                
-        
         // Get perigee parameters to curvilinear frame
         PerigeeParams perPar = new PerigeeParams(htf);
         PerigeeParams perParTruth = new PerigeeParams(htfTruth);
-        if(textFile != null) {
-        	textFile.printPerTrackParam(perPar);
-        	textFile.printPerTrackParamTruth(perParTruth);
-        }
-        
+        if (textFile != null) {
+            textFile.printPerTrackParam(perPar);
+            textFile.printPerTrackParamTruth(perParTruth);
+        }
+
         //GBLDATA
         gtd.setPerigeeTrackParameters(perPar);
 
         // Get curvilinear parameters
         ClParams clPar = new ClParams(htf);
         ClParams clParTruth = new ClParams(htfTruth);
-        if(textFile != null) {
-        	textFile.printClTrackParam(clPar);
-        	textFile.printClTrackParamTruth(clParTruth);
-        
-        	if(_debug>0) {
-        		System.out.printf("%s\n",textFile.getClTrackParamStr(clPar));
-        		System.out.printf("%s\n",textFile.getPerTrackParamStr(perPar));
-        	}
-        }
-        
-        
+        if (textFile != null) {
+            textFile.printClTrackParam(clPar);
+            textFile.printClTrackParamTruth(clParTruth);
+
+            if (_debug > 0) {
+                System.out.printf("%s\n", textFile.getClTrackParamStr(clPar));
+                System.out.printf("%s\n", textFile.getPerTrackParamStr(perPar));
+            }
+        }
+
         // find the projection from the I,J,K to U,V,T curvilinear coordinates
         Hep3Matrix perToClPrj = getPerToClPrj(htf);
-        
-        if(textFile != null) {
-        	textFile.printPerToClPrj(perToClPrj);
-        }    
-        
+
+        if (textFile != null) {
+            textFile.printPerToClPrj(perToClPrj);
+        }
+
         //GBLDATA
-        for(int row=0; row<perToClPrj.getNRows();++row) {
-        	for(int col=0; col<perToClPrj.getNColumns();++col) {
-        		gtd.setPrjPerToCl(row, col, perToClPrj.e(row, col));
-        	}
-        }
-        
-        
-        
+        for (int row = 0; row < perToClPrj.getNRows(); ++row) {
+            for (int col = 0; col < perToClPrj.getNColumns(); ++col) {
+                gtd.setPrjPerToCl(row, col, perToClPrj.e(row, col));
+            }
+        }
+
         //GBLDATA
-        for(int row=0; row<perToClPrj.getNRows();++row) {
-        	for(int col=0; col<perToClPrj.getNColumns();++col) {
-        		gtd.setPrjPerToCl(row, col, perToClPrj.e(row, col));
-        	}
-        }
-        
-        
+        for (int row = 0; row < perToClPrj.getNRows(); ++row) {
+            for (int col = 0; col < perToClPrj.getNColumns(); ++col) {
+                gtd.setPrjPerToCl(row, col, perToClPrj.e(row, col));
+            }
+        }
+
         // print chi2 of fit
-        if(textFile != null) {
-        	textFile.printChi2(htf.chisq(),htf.ndf());
-        }
-        
+        if (textFile != null) {
+            textFile.printChi2(htf.chisq(), htf.ndf());
+        }
+
         // build map of layer to SimTrackerHits that belongs to the MC particle
-        Map<Integer, SimTrackerHit> simHitsLayerMap = new HashMap<Integer, SimTrackerHit >(); 
+        Map<Integer, SimTrackerHit> simHitsLayerMap = new HashMap<Integer, SimTrackerHit>();
         for (SimTrackerHit sh : simTrackerHits) {
-            if(sh.getMCParticle()==mcp) {
-            	int layer  = sh.getIdentifierFieldValue("layer");
-                if(!simHitsLayerMap.containsKey(layer) || (sh.getPathLength() < simHitsLayerMap.get(layer).getPathLength()) ) {
+            if (sh.getMCParticle() == mcp) {
+                int layer = sh.getIdentifierFieldValue("layer");
+                if (!simHitsLayerMap.containsKey(layer) || (sh.getPathLength() < simHitsLayerMap.get(layer).getPathLength())) {
                     simHitsLayerMap.put(layer, sh);
                 }
             }
         }
-        
-        
+
         // covariance matrix from the fit
-        if(textFile != null) {
-        	textFile.printPerTrackCov(htf);
-        }
-        
+        if (textFile != null) {
+            textFile.printPerTrackCov(htf);
+        }
+
         // dummy cov matrix for CL parameters
-        BasicMatrix clCov = new BasicMatrix(5,5);
+        BasicMatrix clCov = new BasicMatrix(5, 5);
         initUnit(clCov);
-        clCov = (BasicMatrix) MatrixOp.mult(0.1*0.1,clCov);
-        
-        if(textFile != null) {
-        	textFile.printCLTrackCov(clCov);
-        }
-        
-        if(_debug>0) {
-            System.out.printf("%s: perPar covariance matrix\n%s\n",this.getClass().getSimpleName(),htf.covariance().toString());
-            double chi2_truth = truthTrackFitChi2(perPar,perParTruth,htf.covariance());
-            System.out.printf("%s: truth perPar chi2 %f\n",this.getClass().getSimpleName(),chi2_truth);
-        }
-        
-        if(_debug>0) System.out.printf("%d hits\n",hits.size());
-        
+        clCov = (BasicMatrix) MatrixOp.mult(0.1 * 0.1, clCov);
+
+        if (textFile != null) {
+            textFile.printCLTrackCov(clCov);
+        }
+
+        if (_debug > 0) {
+            System.out.printf("%s: perPar covariance matrix\n%s\n", this.getClass().getSimpleName(), htf.covariance().toString());
+            double chi2_truth = truthTrackFitChi2(perPar, perParTruth, htf.covariance());
+            System.out.printf("%s: truth perPar chi2 %f\n", this.getClass().getSimpleName(), chi2_truth);
+        }
+
+        if (_debug > 0) {
+            System.out.printf("%d hits\n", hits.size());
+        }
 
         int istrip = 0;
-        for(int ihit=0;ihit!=hits.size();++ihit) {
-            
+        for (int ihit = 0; ihit != hits.size(); ++ihit) {
+
             HelicalTrackHit hit = hits.get(ihit);
             HelicalTrackCross htc = (HelicalTrackCross) hit;
             List<HelicalTrackStrip> strips = htc.getStrips();
-            
-            for(HelicalTrackStrip stripOld : strips) {
+
+            for (HelicalTrackStrip stripOld : strips) {
                 HelicalTrackStripGbl strip = new HelicalTrackStripGbl(stripOld, true);
-                
+
                 // find Millepede layer definition from DetectorElement
                 IDetectorElement de = ((RawTrackerHit) strip.getStrip().rawhits().get(0)).getDetectorElement();
                 HpsSiSensor sensor;
-                if( de instanceof HpsSiSensor) {
+                if (de instanceof HpsSiSensor) {
                     sensor = (HpsSiSensor) de;
                 } else {
                     throw new ClassCastException("Detector element " + de.getName() + " couldn't be casted to " + HpsSiSensor.class.getName());
                 }
 
                 int millepedeId = sensor.getMillepedeId();
-               
-                if(_debug>0) System.out.printf("%s: layer %d millepede %d (DE=\"%s\", origin %s) \n",this.getClass().getSimpleName(),strip.layer(), millepedeId, sensor.getName(), strip.origin().toString());
-                
-                if(textFile != null) {
-                	textFile.printStrip(istrip,millepedeId,de.getName());
-                }
-                
+
+                if (_debug > 0) {
+                    System.out.printf("%s: layer %d millepede %d (DE=\"%s\", origin %s) \n", this.getClass().getSimpleName(), strip.layer(), millepedeId, sensor.getName(), strip.origin().toString());
+                }
+
+                if (textFile != null) {
+                    textFile.printStrip(istrip, millepedeId, de.getName());
+                }
+
                 //GBLDATA
                 GBLStripClusterData stripData = new GBLStripClusterData(millepedeId);
                 //Add to output list
                 stripClusterDataList.add(stripData);
-                
-                
-                
+
                 //Center of the sensor
-                Hep3Vector origin = strip.origin();                
-                
-                if(textFile != null) {
-                	textFile.printOrigin(origin);
-                }
-                
+                Hep3Vector origin = strip.origin();
+
+                if (textFile != null) {
+                    textFile.printOrigin(origin);
+                }
+
                 // associated 3D position of the crossing of this and it's stereo partner sensor
-                if(textFile != null) {
-                	textFile.printHitPos3D(hit.getCorrectedPosition());
-                }
-                
+                if (textFile != null) {
+                    textFile.printHitPos3D(hit.getCorrectedPosition());
+                }
+
                 //Find intercept point with sensor in tracking frame
                 Hep3Vector trkpos = TrackUtils.getHelixPlaneIntercept(htf, strip, Math.abs(_B.z()));
-                Hep3Vector trkposTruth = htfTruth!=null ? TrackUtils.getHelixPlaneIntercept(htfTruth, strip, Math.abs(_B.z())) : new BasicHep3Vector(-999999.9,-999999.9,-999999.9);
-                if(textFile != null) {
-                	textFile.printStripTrackPos(trkpos);
-                }
-                if(_debug>0) {
-                	System.out.printf("trkpos at intercept [%.10f %.10f %.10f]\n",trkpos.x(),trkpos.y(),trkpos.z());
-                    System.out.printf("trkposTruth at intercept %s\n",trkposTruth!=null?trkposTruth.toString():"no truth track");
-                }
-                
+                Hep3Vector trkposTruth = htfTruth != null ? TrackUtils.getHelixPlaneIntercept(htfTruth, strip, Math.abs(_B.z())) : new BasicHep3Vector(-999999.9, -999999.9, -999999.9);
+                if (textFile != null) {
+                    textFile.printStripTrackPos(trkpos);
+                }
+                if (_debug > 0) {
+                    System.out.printf("trkpos at intercept [%.10f %.10f %.10f]\n", trkpos.x(), trkpos.y(), trkpos.z());
+                    System.out.printf("trkposTruth at intercept %s\n", trkposTruth != null ? trkposTruth.toString() : "no truth track");
+                }
+
                 // cross-check intercept point
-                if(hasXPlanes ) {
-                	Hep3Vector trkposXPlaneIter = TrackUtils.getHelixPlanePositionIter(htf, strip.origin(), strip.w(), 1.0e-8);
-	                Hep3Vector trkposDiff = VecOp.sub(trkposXPlaneIter, trkpos);
-	                if(trkposDiff.magnitude() > 1.0e-7) {
-	                	System.out.printf("WARNING trkposDiff mag = %.10f [%.10f %.10f %.10f]\n",trkposDiff.magnitude(),trkposDiff.x(),trkposDiff.y(),trkposDiff.z());
-	                	System.exit(1);
-	                }	
-	                if(_debug>0) System.out.printf("trkposXPlaneIter at intercept [%.10f %.10f %.10f]\n",trkposXPlaneIter.x(),trkposXPlaneIter.y(),trkposXPlaneIter.z());
-                }
-                
-                
+                if (hasXPlanes) {
+                    Hep3Vector trkposXPlaneIter = TrackUtils.getHelixPlanePositionIter(htf, strip.origin(), strip.w(), 1.0e-8);
+                    Hep3Vector trkposDiff = VecOp.sub(trkposXPlaneIter, trkpos);
+                    if (trkposDiff.magnitude() > 1.0e-7) {
+                        System.out.printf("WARNING trkposDiff mag = %.10f [%.10f %.10f %.10f]\n", trkposDiff.magnitude(), trkposDiff.x(), trkposDiff.y(), trkposDiff.z());
+                        System.exit(1);
+                    }
+                    if (_debug > 0) {
+                        System.out.printf("trkposXPlaneIter at intercept [%.10f %.10f %.10f]\n", trkposXPlaneIter.x(), trkposXPlaneIter.y(), trkposXPlaneIter.z());
+                    }
+                }
+
                 // Find the sim tracker hit for this layer
                 SimTrackerHit simHit = simHitsLayerMap.get(strip.layer());
 
-                if( isMC ) {
-                	if(simHit==null) {
-                		System.out.printf("%s: no sim hit for strip hit at layer %d\n",this.getClass().getSimpleName(),strip.layer());
-                		System.out.printf("%s: it as %d mc particles associated with it:\n",this.getClass().getSimpleName(),hit.getMCParticles().size());
-                		for (MCParticle particle : hit.getMCParticles())  System.out.printf("%s: %d p %s \n",this.getClass().getSimpleName(),particle.getPDGID(),particle.getMomentum().toString());
-                		System.out.printf("%s: these are sim hits in the event:\n",this.getClass().getSimpleName());
-                		for (SimTrackerHit simhit : simTrackerHits) System.out.printf("%s sim hit at %s with MC particle pdgid %d with p %s \n",this.getClass().getSimpleName(),simhit.getPositionVec().toString(),simhit.getMCParticle().getPDGID(),simhit.getMCParticle().getMomentum().toString());
-                		//System.out.printf("%s: these are all the MC particles in the event:\n",this.getClass().getSimpleName());
-                		//System.exit(1);
-                	}
-
-                	if(_debug>0) {
-                	    if(htfTruth!=null && simHit!=null) {
-                	        double s_truthSimHit = HelixUtils.PathToXPlane(htfTruth, simHit.getPositionVec().z(), 0, 0).get(0);
-                	        Hep3Vector trkposTruthSimHit = HelixUtils.PointOnHelix(htfTruth, s_truthSimHit);
-                	        Hep3Vector resTruthSimHit = VecOp.sub(CoordinateTransformations.transformVectorToTracking(simHit.getPositionVec()),trkposTruthSimHit);
-                	        System.out.printf("TruthSimHit residual %s for layer %d\n",resTruthSimHit.toString(),strip.layer());
-                	    }
-                	}
-                }
-                
+                if (isMC) {
+                    if (simHit == null) {
+                        System.out.printf("%s: no sim hit for strip hit at layer %d\n", this.getClass().getSimpleName(), strip.layer());
+                        System.out.printf("%s: it as %d mc particles associated with it:\n", this.getClass().getSimpleName(), hit.getMCParticles().size());
+                        for (MCParticle particle : hit.getMCParticles()) {
+                            System.out.printf("%s: %d p %s \n", this.getClass().getSimpleName(), particle.getPDGID(), particle.getMomentum().toString());
+                        }
+                        System.out.printf("%s: these are sim hits in the event:\n", this.getClass().getSimpleName());
+                        for (SimTrackerHit simhit : simTrackerHits) {
+                            System.out.printf("%s sim hit at %s with MC particle pdgid %d with p %s \n", this.getClass().getSimpleName(), simhit.getPositionVec().toString(), simhit.getMCParticle().getPDGID(), simhit.getMCParticle().getMomentum().toString());
+                        }
+                        //System.out.printf("%s: these are all the MC particles in the event:\n",this.getClass().getSimpleName());
+                        //System.exit(1);
+                    }
+
+                    if (_debug > 0) {
+                        if (htfTruth != null && simHit != null) {
+                            double s_truthSimHit = HelixUtils.PathToXPlane(htfTruth, simHit.getPositionVec().z(), 0, 0).get(0);
+                            Hep3Vector trkposTruthSimHit = HelixUtils.PointOnHelix(htfTruth, s_truthSimHit);
+                            Hep3Vector resTruthSimHit = VecOp.sub(CoordinateTransformations.transformVectorToTracking(simHit.getPositionVec()), trkposTruthSimHit);
+                            System.out.printf("TruthSimHit residual %s for layer %d\n", resTruthSimHit.toString(), strip.layer());
+                        }
+                    }
+                }
+
                 //path length to intercept
-                double s = HelixUtils.PathToXPlane(htf,trkpos.x(),0,0).get(0); 
+                double s = HelixUtils.PathToXPlane(htf, trkpos.x(), 0, 0).get(0);
                 double s3D = s / Math.cos(Math.atan(htf.slope()));
-                if(textFile != null) {
-                	textFile.printStripPathLen(s);
-                	textFile.printStripPathLen3D(s3D);
-                }
-                
+                if (textFile != null) {
+                    textFile.printStripPathLen(s);
+                    textFile.printStripPathLen3D(s3D);
+                }
+
                 //GBLDATA
                 stripData.setPath(s);
                 stripData.setPath3D(s3D);
-                
-                
-                
+
                 //print stereo angle in YZ plane
-                if(textFile != null) {
-                	textFile.printMeasDir(strip.u());
-                	textFile.printNonMeasDir(strip.v());
-                	textFile.printNormalDir(strip.w());
-                }
-                
+                if (textFile != null) {
+                    textFile.printMeasDir(strip.u());
+                    textFile.printNonMeasDir(strip.v());
+                    textFile.printNormalDir(strip.w());
+                }
+
                 //GBLDATA
                 stripData.setU(strip.u());
                 stripData.setV(strip.v());
                 stripData.setW(strip.w());
-                
-                
+
                 //Print track direction at intercept
                 Hep3Vector tDir = HelixUtils.Direction(htf, s);
-                double phi = htf.phi0() - s/htf.R();
+                double phi = htf.phi0() - s / htf.R();
                 double lambda = Math.atan(htf.slope());
-                if(textFile != null) {
-                	textFile.printStripTrackDir(Math.sin(phi),Math.sin(lambda));
-                	textFile.printStripTrackDirFull(tDir);
-                }
-                
+                if (textFile != null) {
+                    textFile.printStripTrackDir(Math.sin(phi), Math.sin(lambda));
+                    textFile.printStripTrackDirFull(tDir);
+                }
+
                 //GBLDATA
                 stripData.setTrackDir(tDir);
                 stripData.setTrackPhi(phi);
                 stripData.setTrackLambda(lambda);
-                
-                
+
                 // calculate isolation to other strip clusters
                 double stripIsoMin = 9999.9;
                 for (SiTrackerHitStrip1D stripHit : stripHits) {
-                    if(stripHit.getRawHits().get(0).getDetectorElement().getName().equals(de.getName())) {
+                    if (stripHit.getRawHits().get(0).getDetectorElement().getName().equals(de.getName())) {
                         SiTrackerHitStrip1D local = stripHit.getTransformedHit(TrackerHitType.CoordinateSystem.SENSOR);
                         double d = Math.abs(strip.umeas() - local.getPosition()[0]);
-                        if (d<stripIsoMin && d>0) {
+                        if (d < stripIsoMin && d > 0) {
                             stripIsoMin = d;
                         }
                     }
                 }
-                
-                if(_debug>0) System.out.printf("%s: stripIsoMin = %f \n", this.getClass().getSimpleName(), stripIsoMin);
-                
+
+                if (_debug > 0) {
+                    System.out.printf("%s: stripIsoMin = %f \n", this.getClass().getSimpleName(), stripIsoMin);
+                }
+
                 // Add isolation to text file output
-                if(textFile != null) {
+                if (textFile != null) {
                     textFile.printStripIso(stripIsoMin);
                 }
-                
-                
+
                 //Print residual in measurement system
-                
                 // start by find the distance vector between the center and the track position
                 Hep3Vector vdiffTrk = VecOp.sub(trkpos, origin);
-                Hep3Vector vdiffTrkTruth = htfTruth!=null ? VecOp.sub(trkposTruth, origin): null;
-                
+                Hep3Vector vdiffTrkTruth = htfTruth != null ? VecOp.sub(trkposTruth, origin) : null;
+
                 // then find the rotation from tracking to measurement frame
                 Hep3Matrix trkToStripRot = _trackerHitUtils.getTrackToStripRotation(strip.getStrip());
-                
+
                 // then rotate that vector into the measurement frame to get the predicted measurement position
                 Hep3Vector trkpos_meas = VecOp.mult(trkToStripRot, vdiffTrk);
-                Hep3Vector trkposTruth_meas = vdiffTrkTruth!=null ? VecOp.mult(trkToStripRot, vdiffTrkTruth) : null;
-                
-                
+                Hep3Vector trkposTruth_meas = vdiffTrkTruth != null ? VecOp.mult(trkToStripRot, vdiffTrkTruth) : null;
+
                 // hit measurement and uncertainty in measurement frame
-                Hep3Vector m_meas = new BasicHep3Vector(strip.umeas(),0.,0.);
-                Hep3Vector res_err_meas = new BasicHep3Vector(strip.du(),(strip.vmax() - strip.vmin()) / Math.sqrt(12),10.0/Math.sqrt(12));
-                
-                if(textFile != null) {
-                	textFile.printStripMeas(m_meas.x());
+                Hep3Vector m_meas = new BasicHep3Vector(strip.umeas(), 0., 0.);
+                Hep3Vector res_err_meas = new BasicHep3Vector(strip.du(), (strip.vmax() - strip.vmin()) / Math.sqrt(12), 10.0 / Math.sqrt(12));
+
+                if (textFile != null) {
+                    textFile.printStripMeas(m_meas.x());
                 }
 
                 //if(textFile != null) {
                 //    textFile.printStripTrackPosMeasFrame(trkpos_meas);
                 //}
-
-                
                 //GBLDATA
                 stripData.setMeas(strip.umeas());
                 stripData.setTrackPos(trkpos_meas);
-                
-                if(_debug>1) { 
-                System.out.printf("%s: rotation matrix to meas frame\n%s\n", getClass().getSimpleName(), VecOp.toString(trkToStripRot));
-                System.out.printf("%s: tPosGlobal %s origin %s\n", getClass().getSimpleName(), trkpos.toString(), origin.toString());
-                System.out.printf("%s: tDiff %s\n", getClass().getSimpleName(), vdiffTrk.toString());
-                System.out.printf("%s: tPosMeas %s\n", getClass().getSimpleName(), trkpos_meas.toString());
-                }
-                
-                
-                
+
+                if (_debug > 1) {
+                    System.out.printf("%s: rotation matrix to meas frame\n%s\n", getClass().getSimpleName(), VecOp.toString(trkToStripRot));
+                    System.out.printf("%s: tPosGlobal %s origin %s\n", getClass().getSimpleName(), trkpos.toString(), origin.toString());
+                    System.out.printf("%s: tDiff %s\n", getClass().getSimpleName(), vdiffTrk.toString());
+                    System.out.printf("%s: tPosMeas %s\n", getClass().getSimpleName(), trkpos_meas.toString());
+                }
+
                 // residual in measurement frame
                 Hep3Vector res_meas = VecOp.sub(m_meas, trkpos_meas);
                 Hep3Vector resTruth_meas = trkposTruth_meas != null ? VecOp.sub(m_meas, trkposTruth_meas) : null;
-                if(textFile != null) {
-                	textFile.printStripMeasRes(res_meas.x(),res_err_meas.x());
-                	textFile.printStripMeasResTruth(resTruth_meas!=null ? resTruth_meas.x() : -9999999.9,res_err_meas.x());
-                }
-                
+                if (textFile != null) {
+                    textFile.printStripMeasRes(res_meas.x(), res_err_meas.x());
+                    textFile.printStripMeasResTruth(resTruth_meas != null ? resTruth_meas.x() : -9999999.9, res_err_meas.x());
+                }
+
                 //GBLDATA
                 stripData.setMeasErr(res_err_meas.x());
-                
-                
-                
-                if(_debug>0) System.out.printf("layer %d millePedeId %d uRes %.10f\n",strip.layer(), millepedeId ,res_meas.x());
-                
+
+                if (_debug > 0) {
+                    System.out.printf("layer %d millePedeId %d uRes %.10f\n", strip.layer(), millepedeId, res_meas.x());
+                }
+
                 // sim hit residual
-                
-                if(simHit!=null) { 
+                if (simHit != null) {
                     Hep3Vector simHitPos = CoordinateTransformations.transformVectorToTracking(simHit.getPositionVec());
-                    if(_debug>0) System.out.printf("simHitPos  %s\n",simHitPos.toString());
+                    if (_debug > 0) {
+                        System.out.printf("simHitPos  %s\n", simHitPos.toString());
+                    }
                     Hep3Vector vdiffSimHit = VecOp.sub(simHitPos, trkpos);
                     Hep3Vector simHitPos_meas = VecOp.mult(trkToStripRot, vdiffSimHit);
-                    if(textFile != null) {
-                    	textFile.printStripMeasResSimHit(simHitPos_meas.x(),res_err_meas.x());
+                    if (textFile != null) {
+                        textFile.printStripMeasResSimHit(simHitPos_meas.x(), res_err_meas.x());
                     }
                 } else {
-                	if(textFile != null) {
-                		textFile.printStripMeasResSimHit(-999999.9,-999999.9);
-                	}
-                }	
-                
+                    if (textFile != null) {
+                        textFile.printStripMeasResSimHit(-999999.9, -999999.9);
+                    }
+                }
+
                 // find scattering angle
-                ScatterPoint scatter = scatters.getScatterPoint(((RawTrackerHit)strip.getStrip().rawhits().get(0)).getDetectorElement());
+                ScatterPoint scatter = scatters.getScatterPoint(((RawTrackerHit) strip.getStrip().rawhits().get(0)).getDetectorElement());
                 double scatAngle;
-                
-                if(scatter != null) {
+
+                if (scatter != null) {
                     scatAngle = scatter.getScatterAngle().Angle();
-                }
-                else {
+                } else {
                     if (_debug > 0) {
                         System.out.printf("%s: WARNING cannot find scatter for detector %s with strip cluster at %s\n", this.getClass(), ((RawTrackerHit) strip.getStrip().rawhits().get(0)).getDetectorElement().getName(), strip.origin().toString());
                     }
                     //can be edge case where helix is outside, but close to sensor, so make a new scatter point assuming the helix does pass through the sensor
                     DetectorPlane hitPlane = null;
-                    if(MaterialSupervisor.class.isInstance(_scattering.getMaterialManager())) {
-                        MaterialSupervisor matSup = (MaterialSupervisor)_scattering.getMaterialManager();
-                        IDetectorElement hitElement = ((RawTrackerHit)strip.getStrip().rawhits().get(0)).getDetectorElement();
-                        for(ScatteringDetectorVolume vol : matSup.getMaterialVolumes()) {
-                            if (vol.getDetectorElement()==hitElement) {
+                    if (MaterialSupervisor.class.isInstance(_scattering.getMaterialManager())) {
+                        MaterialSupervisor matSup = (MaterialSupervisor) _scattering.getMaterialManager();
+                        IDetectorElement hitElement = ((RawTrackerHit) strip.getStrip().rawhits().get(0)).getDetectorElement();
+                        for (ScatteringDetectorVolume vol : matSup.getMaterialVolumes()) {
+                            if (vol.getDetectorElement() == hitElement) {
                                 hitPlane = (DetectorPlane) vol;
                                 break;
                             }
                         }
-                        if(hitPlane==null) {
+                        if (hitPlane == null) {
                             throw new RuntimeException("cannot find plane for hit!");
                         } else {
                             // find scatterlength
-                            double s_closest = HelixUtils.PathToXPlane(htf,hitPlane.origin().x(), 0., 0).get(0);
+                            double s_closest = HelixUtils.PathToXPlane(htf, hitPlane.origin().x(), 0., 0).get(0);
                             double X0 = hitPlane.getMaterialTraversedInRL(HelixUtils.Direction(htf, s_closest));
-                            ScatterAngle scatterAngle = new ScatterAngle(s_closest, _scattering.msangle(htf.p(this._B.magnitude()),X0));
+                            ScatterAngle scatterAngle = new ScatterAngle(s_closest, _scattering.msangle(htf.p(this._B.magnitude()), X0));
                             scatAngle = scatterAngle.Angle();
                         }
-                    } 
-                    else {
+                    } else {
                         throw new UnsupportedOperationException("Should not happen. This problem is only solved with the MaterialSupervisor.");
                     }
-                } 
-                
-                
+                }
+
                 //print scatterer to file
-                if(textFile != null) {
-                	textFile.printStripScat(scatAngle);
-                }
-                
+                if (textFile != null) {
+                    textFile.printStripScat(scatAngle);
+                }
+
                 //GBLDATA
                 stripData.setScatterAngle(scatAngle);
-                
+
                 ++istrip;
-                
-                
-              
-            }
-            
-        }
-        
-        
-        
-    }
-    
-    
+            }
+        }
+    }
+
     private void checkAprimeTruth(MCParticle mcp, List<MCParticle> mcParticles) {
-    	List<MCParticle> mcp_pair = getAprimeDecayProducts(mcParticles);
-        
-    	if(_debug>0) {
-    		double invMassTruth = Math.sqrt( Math.pow(mcp_pair.get(0).getEnergy()+mcp_pair.get(1).getEnergy(),2) - VecOp.add(mcp_pair.get(0).getMomentum(), mcp_pair.get(1).getMomentum()).magnitudeSquared() );
-    		double invMassTruthTrks = getInvMassTracks(TrackUtils.getHTF(mcp_pair.get(0),-1.0*this._B.z()),TrackUtils.getHTF(mcp_pair.get(1),-1.0*this._B.z()));
-    		System.out.printf("%s: invM = %f\n",this.getClass().getSimpleName(),invMassTruth);
-    		System.out.printf("%s: invMTracks = %f\n",this.getClass().getSimpleName(),invMassTruthTrks);
-    	}
-    
-	    // cross-check
-	    if(!mcp_pair.contains(mcp)) {
-	        boolean hasBeamElectronParent = false;
-	        for(MCParticle parent : mcp.getParents()) {
-	            if(parent.getGeneratorStatus()!=MCParticle.FINAL_STATE && parent.getPDGID()==11 && parent.getMomentum().y()==0.0 && Math.abs(parent.getMomentum().magnitude() - _beamEnergy)<0.01) {
-	                hasBeamElectronParent = true;
-	            }
-	        }
-	        if(!hasBeamElectronParent) {
-	            System.out.printf("%s: the matched MC particle is not an A' daughter and not a the recoil electrons!?\n",this.getClass().getSimpleName());
-	            System.out.printf("%s: %s %d p %s org %s\n",this.getClass().getSimpleName(),mcp.getGeneratorStatus()==MCParticle.FINAL_STATE?"F":"I",mcp.getPDGID(),mcp.getMomentum().toString(),mcp.getOrigin().toString());
-	            printMCParticles(mcParticles);
-	            System.exit(1);
-	        } else {
-	            if(_debug>0) System.out.printf("%s: the matched MC particle is the recoil electron\n",this.getClass().getSimpleName());
-	        }
-	    }
-		
-	}
-    
+        List<MCParticle> mcp_pair = getAprimeDecayProducts(mcParticles);
+
+        if (_debug > 0) {
+            double invMassTruth = Math.sqrt(Math.pow(mcp_pair.get(0).getEnergy() + mcp_pair.get(1).getEnergy(), 2) - VecOp.add(mcp_pair.get(0).getMomentum(), mcp_pair.get(1).getMomentum()).magnitudeSquared());
+            double invMassTruthTrks = getInvMassTracks(TrackUtils.getHTF(mcp_pair.get(0), -1.0 * this._B.z()), TrackUtils.getHTF(mcp_pair.get(1), -1.0 * this._B.z()));
+            System.out.printf("%s: invM = %f\n", this.getClass().getSimpleName(), invMassTruth);
+            System.out.printf("%s: invMTracks = %f\n", this.getClass().getSimpleName(), invMassTruthTrks);
+        }
+
+        // cross-check
+        if (!mcp_pair.contains(mcp)) {
+            boolean hasBeamElectronParent = false;
+            for (MCParticle parent : mcp.getParents()) {
+                if (parent.getGeneratorStatus() != MCParticle.FINAL_STATE && parent.getPDGID() == 11 && parent.getMomentum().y() == 0.0 && Math.abs(parent.getMomentum().magnitude() - _beamEnergy) < 0.01) {
+                    hasBeamElectronParent = true;
+                }
+            }
+            if (!hasBeamElectronParent) {
+                System.out.printf("%s: the matched MC particle is not an A' daughter and not a the recoil electrons!?\n", this.getClass().getSimpleName());
+                System.out.printf("%s: %s %d p %s org %s\n", this.getClass().getSimpleName(), mcp.getGeneratorStatus() == MCParticle.FINAL_STATE ? "F" : "I", mcp.getPDGID(), mcp.getMomentum().toString(), mcp.getOrigin().toString());
+                printMCParticles(mcParticles);
+                System.exit(1);
+            } else {
+                if (_debug > 0) {
+                    System.out.printf("%s: the matched MC particle is the recoil electron\n", this.getClass().getSimpleName());
+                }
+            }
+        }
+    }
 
     MCParticle getMatchedTruthParticle(Track track) {
         boolean debug = false;
-        
-        Map<MCParticle,Integer> particlesOnTrack = new HashMap<MCParticle,Integer>();
-        
-        if(debug) System.out.printf("getmatched mc particle from %d tracker hits on the track \n",track.getTrackerHits().size());
-        
-        
-        for(TrackerHit hit : track.getTrackerHits()) {
-            List<MCParticle> mcps = ((HelicalTrackHit)hit).getMCParticles();
-            if(mcps==null) {
-                System.out.printf("%s: warning, this hit (layer %d pos=%s) has no mc particles.\n",this.getClass().getSimpleName(),((HelicalTrackHit)hit).Layer(),((HelicalTrackHit)hit).getCorrectedPosition().toString());
-            } 
-            else {
-            	if( debug ) System.out.printf("%s: this hit (layer %d pos=%s) has %d mc particles.\n",this.getClass().getSimpleName(),((HelicalTrackHit)hit).Layer(),((HelicalTrackHit)hit).getCorrectedPosition().toString(),mcps.size());
-                for(MCParticle mcp : mcps) {
-                    if( !particlesOnTrack.containsKey(mcp) ) {
+
+        Map<MCParticle, Integer> particlesOnTrack = new HashMap<MCParticle, Integer>();
+
+        if (debug) {
+            System.out.printf("getmatched mc particle from %d tracker hits on the track \n", track.getTrackerHits().size());
+        }
+
+        for (TrackerHit hit : track.getTrackerHits()) {
+            List<MCParticle> mcps = ((HelicalTrackHit) hit).getMCParticles();
+            if (mcps == null) {
+                System.out.printf("%s: warning, this hit (layer %d pos=%s) has no mc particles.\n", this.getClass().getSimpleName(), ((HelicalTrackHit) hit).Layer(), ((HelicalTrackHit) hit).getCorrectedPosition().toString());
+            } else {
+                if (debug) {
+                    System.out.printf("%s: this hit (layer %d pos=%s) has %d mc particles.\n", this.getClass().getSimpleName(), ((HelicalTrackHit) hit).Layer(), ((HelicalTrackHit) hit).getCorrectedPosition().toString(), mcps.size());
+                }
+                for (MCParticle mcp : mcps) {
+                    if (!particlesOnTrack.containsKey(mcp)) {
                         particlesOnTrack.put(mcp, 0);
                     }
                     int c = particlesOnTrack.get(mcp);
-                    particlesOnTrack.put(mcp, c+1);
-                }
-            }
-        }
-        if(debug) {
-            System.out.printf("Track p=[ %f, %f, %f] \n",track.getTrackStates().get(0).getMomentum()[0],track.getTrackStates().get(0).getMomentum()[1],track.getTrackStates().get(0).getMomentum()[1]);
-            System.out.printf("FOund %d particles\n",particlesOnTrack.size());
-            for(Map.Entry<MCParticle, Integer> entry : particlesOnTrack.entrySet()) {
-                System.out.printf("%d hits assigned to %d p=%s \n",entry.getValue(),entry.getKey().getPDGID(),entry.getKey().getMomentum().toString());
-            }
-        }
-        Map.Entry<MCParticle,Integer> maxEntry = null;
-        for(Map.Entry<MCParticle,Integer> entry : particlesOnTrack.entrySet()) {
-            if ( maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0 ) maxEntry = entry;
+                    particlesOnTrack.put(mcp, c + 1);
+                }
+            }
+        }
+        if (debug) {
+            System.out.printf("Track p=[ %f, %f, %f] \n", track.getTrackStates().get(0).getMomentum()[0], track.getTrackStates().get(0).getMomentum()[1], track.getTrackStates().get(0).getMomentum()[1]);
+            System.out.printf("FOund %d particles\n", particlesOnTrack.size());
+            for (Map.Entry<MCParticle, Integer> entry : particlesOnTrack.entrySet()) {
+                System.out.printf("%d hits assigned to %d p=%s \n", entry.getValue(), entry.getKey().getPDGID(), entry.getKey().getMomentum().toString());
+            }
+        }
+        Map.Entry<MCParticle, Integer> maxEntry = null;
+        for (Map.Entry<MCParticle, Integer> entry : particlesOnTrack.entrySet()) {
+            if (maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0) {
+                maxEntry = entry;
+            }
             //if ( maxEntry != null ) {
             //    if(entry.getValue().compareTo(maxEntry.getValue()) < 0) continue;
             //}
             //maxEntry = entry;
         }
-        if(debug) {
-        	if (maxEntry != null ) {
-        		System.out.printf("Matched particle with pdgId=%d and mom %s to track with charge %d and momentum [%f %f %f]\n",
-        				maxEntry.getKey().getPDGID(),maxEntry.getKey().getMomentum().toString(),
-        				track.getCharge(),track.getTrackStates().get(0).getMomentum()[0],track.getTrackStates().get(0).getMomentum()[1],track.getTrackStates().get(0).getMomentum()[2]);
-        	} else {
-        		System.out.printf("No truth particle found on this track\n");
-        	}
+        if (debug) {
+            if (maxEntry != null) {
+                System.out.printf("Matched particle with pdgId=%d and mom %s to track with charge %d and momentum [%f %f %f]\n",
+                        maxEntry.getKey().getPDGID(), maxEntry.getKey().getMomentum().toString(),
+                        track.getCharge(), track.getTrackStates().get(0).getMomentum()[0], track.getTrackStates().get(0).getMomentum()[1], track.getTrackStates().get(0).getMomentum()[2]);
+            } else {
+                System.out.printf("No truth particle found on this track\n");
+            }
         }
         return maxEntry == null ? null : maxEntry.getKey();
     }
-    
-    
-    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 theta = Math.PI/2.0 - Math.atan(htf.slope());
-        	perPar.setElement(0,0,kappa);
-        	perPar.setElement(0,1,theta);
-        	perPar.setElement(0,2,htf.phi0());
-        	perPar.setElement(0,3,htf.dca());
-        	perPar.setElement(0,4,htf.z0());
-        }
-        return perPar;
-        
-    }
-
-
-    
-    
-    private BasicMatrix getJacPerToCl(HelicalTrackFit htf) {
-        System.out.printf("%s: getJacPerToCl\n",this.getClass().getSimpleName());        
-        //use propoerly normalized B-field
-        Hep3Vector Bnorm = VecOp.mult(Constants.fieldConversion, _B);
-        //init jacobian to zero
-        BasicMatrix j = new BasicMatrix(5,5);
-        initZero(j);
-        double lambda = Math.atan(htf.slope());
-        double q = Math.signum(htf.R());
-        double theta = Math.PI/2.0 - lambda;
-        Hep3Vector T = HelixUtils.Direction(htf, 0.);
-        Hep3Vector p = VecOp.mult(htf.p(Math.abs(_B.z())), T);
-        double pT = htf.pT(Math.abs(_B.z()));
-        Hep3Vector H = VecOp.mult(1./(Bnorm.magnitude()), Bnorm); 
-        Hep3Vector Z = new BasicHep3Vector(0,0,1);
-        Hep3Vector J = VecOp.mult(1./VecOp.cross(T,Z).magnitude(), VecOp.cross(T, Z));
-        Hep3Vector U = VecOp.mult(-1, J);
-        Hep3Vector V = VecOp.cross(T, U);
-        double alpha = VecOp.cross(H,T).magnitude();
-        Hep3Vector N = VecOp.mult(1./alpha,VecOp.cross(H, T));
-        Hep3Vector K = Z;
-        double Q = -Bnorm.magnitude()*q/p.magnitude();
-        double kappa = -1.0*q*Bnorm.z()/pT;
-        
-        if (this._debug!=0) {
-            System.out.printf("%s: Bnorm=%s mag(Bnorm)=%f\n",this.getClass().getSimpleName(),Bnorm.toString(),Bnorm.magnitude());
-            System.out.printf("%s: p=%s |p|=%f pT=%f\n",this.getClass().getSimpleName(),p.toString(),p.magnitude(),pT);
-            System.out.printf("%s: q=%f\n",this.getClass().getSimpleName(),q);
-            System.out.printf("%s: q/p=%f\n",this.getClass().getSimpleName(),q/p.magnitude());
-            System.out.printf("%s: T=%s\n",this.getClass().getSimpleName(),T.toString());
-            System.out.printf("%s: H=%s\n",this.getClass().getSimpleName(),H.toString());
-            System.out.printf("%s: kappa=%f\n",this.getClass().getSimpleName(),kappa);
-            System.out.printf("%s: alpha=%f Q=%f \n",this.getClass().getSimpleName(),alpha,Q);
-            System.out.printf("%s: J=%s \n",this.getClass().getSimpleName(),J.toString());
-            System.out.printf("%s: V=%s \n",this.getClass().getSimpleName(),V.toString());
-            System.out.printf("%s: N=%s \n",this.getClass().getSimpleName(),N.toString());
-            System.out.printf("%s: TdotJ=%f \n",this.getClass().getSimpleName(),VecOp.dot(T, J));
-            System.out.printf("%s: VdotN=%f \n",this.getClass().getSimpleName(),VecOp.dot(V, N));
-            System.out.printf("%s: TdotK=%f \n",this.getClass().getSimpleName(),VecOp.dot(T, K));
-            System.out.printf("%s: UdotN=%f \n",this.getClass().getSimpleName(),VecOp.dot(U, N));
-        }
-        
-
-        
-        
-        
-        j.setElement(0,0,-1.0*Math.sin(theta)/Bnorm.z());
-        
-        j.setElement(0,1,q/(p.magnitude()*Math.tan(theta)));
-        
-        j.setElement(1,1,-1);
-        
-        j.setElement(1,3,-alpha*Q*VecOp.dot(T, J)*VecOp.dot(V, N));
-                
-        j.setElement(1,4,-alpha*Q*VecOp.dot(T, K)*VecOp.dot(V, N));
-
-        j.setElement(2,2,1);
-        
-        j.setElement(2,3,-alpha*Q*VecOp.dot(T,J)*VecOp.dot(U, N)/Math.cos(lambda));
-
-        j.setElement(2,4,-alpha*Q*VecOp.dot(T,K)*VecOp.dot(U, N)/Math.cos(lambda));
-
-        j.setElement(3,3,-1);
-        
-        j.setElement(4,4,VecOp.dot(V, K));
-
-        
-        if(_debug>0) {
-                System.out.printf("%s: lambda= J(1,1)=%f  * theta + J(1,3)=%f * eps + J(1,4)=%f * z0 \n",
-                this.getClass().getSimpleName(),
-                j.e(1, 1),j.e(1,3),j.e(1,4));
-
-        }
-        
-        
-        return j;
-        
-    }
-    
-    
-   
-
-    
-    
+
+//    private BasicMatrix getJacPerToCl(HelicalTrackFit htf) {
+//        System.out.printf("%s: getJacPerToCl\n", this.getClass().getSimpleName());
+//        //use propoerly normalized B-field
+//        Hep3Vector Bnorm = VecOp.mult(Constants.fieldConversion, _B);
+//        //init jacobian to zero
+//        BasicMatrix j = new BasicMatrix(5, 5);
+//        initZero(j);
+//        double lambda = Math.atan(htf.slope());
+//        double q = Math.signum(htf.R());
+//        double theta = Math.PI / 2.0 - lambda;
+//        Hep3Vector T = HelixUtils.Direction(htf, 0.);
+//        Hep3Vector p = VecOp.mult(htf.p(Math.abs(_B.z())), T);
+//        double pT = htf.pT(Math.abs(_B.z()));
+//        Hep3Vector H = VecOp.mult(1. / (Bnorm.magnitude()), Bnorm);
+//        Hep3Vector Z = new BasicHep3Vector(0, 0, 1);
+//        Hep3Vector J = VecOp.mult(1. / VecOp.cross(T, Z).magnitude(), VecOp.cross(T, Z));
+//        Hep3Vector U = VecOp.mult(-1, J);
+//        Hep3Vector V = VecOp.cross(T, U);
+//        double alpha = VecOp.cross(H, T).magnitude();
+//        Hep3Vector N = VecOp.mult(1. / alpha, VecOp.cross(H, T));
+//        Hep3Vector K = Z;
+//        double Q = -Bnorm.magnitude() * q / p.magnitude();
+//        double kappa = -1.0 * q * Bnorm.z() / pT;
+//
+//        if (this._debug != 0) {
+//            System.out.printf("%s: Bnorm=%s mag(Bnorm)=%f\n", this.getClass().getSimpleName(), Bnorm.toString(), Bnorm.magnitude());
+//            System.out.printf("%s: p=%s |p|=%f pT=%f\n", this.getClass().getSimpleName(), p.toString(), p.magnitude(), pT);
+//            System.out.printf("%s: q=%f\n", this.getClass().getSimpleName(), q);
+//            System.out.printf("%s: q/p=%f\n", this.getClass().getSimpleName(), q / p.magnitude());
+//            System.out.printf("%s: T=%s\n", this.getClass().getSimpleName(), T.toString());
+//            System.out.printf("%s: H=%s\n", this.getClass().getSimpleName(), H.toString());
+//            System.out.printf("%s: kappa=%f\n", this.getClass().getSimpleName(), kappa);
+//            System.out.printf("%s: alpha=%f Q=%f \n", this.getClass().getSimpleName(), alpha, Q);
+//            System.out.printf("%s: J=%s \n", this.getClass().getSimpleName(), J.toString());
+//            System.out.printf("%s: V=%s \n", this.getClass().getSimpleName(), V.toString());
+//            System.out.printf("%s: N=%s \n", this.getClass().getSimpleName(), N.toString());
+//            System.out.printf("%s: TdotJ=%f \n", this.getClass().getSimpleName(), VecOp.dot(T, J));
+//            System.out.printf("%s: VdotN=%f \n", this.getClass().getSimpleName(), VecOp.dot(V, N));
+//            System.out.printf("%s: TdotK=%f \n", this.getClass().getSimpleName(), VecOp.dot(T, K));
+//            System.out.printf("%s: UdotN=%f \n", this.getClass().getSimpleName(), VecOp.dot(U, N));
+//        }
+//
+//        j.setElement(0, 0, -1.0 * Math.sin(theta) / Bnorm.z());
+//
+//        j.setElement(0, 1, q / (p.magnitude() * Math.tan(theta)));
+//
+//        j.setElement(1, 1, -1);
+//
+//        j.setElement(1, 3, -alpha * Q * VecOp.dot(T, J) * VecOp.dot(V, N));
+//
+//        j.setElement(1, 4, -alpha * Q * VecOp.dot(T, K) * VecOp.dot(V, N));
+//
+//        j.setElement(2, 2, 1);
+//
+//        j.setElement(2, 3, -alpha * Q * VecOp.dot(T, J) * VecOp.dot(U, N) / Math.cos(lambda));
+//
+//        j.setElement(2, 4, -alpha * Q * VecOp.dot(T, K) * VecOp.dot(U, N) / Math.cos(lambda));
+//
+//        j.setElement(3, 3, -1);
+//
+//        j.setElement(4, 4, VecOp.dot(V, K));
+//
+//        if (_debug > 0) {
+//            System.out.printf("%s: lambda= J(1,1)=%f  * theta + J(1,3)=%f * eps + J(1,4)=%f * z0 \n",
+//                    this.getClass().getSimpleName(),
+//                    j.e(1, 1), j.e(1, 3), j.e(1, 4));
+//
+//        }
+//
+//        return j;
+//
+//    }
     private void initUnit(BasicMatrix mat) {
-        for(int row=0;row!=mat.getNRows();row++) {
-            for(int col=0;col!=mat.getNColumns();col++) {
-                if(row!=col) mat.setElement(row, col, 0);
-                else mat.setElement(row, col, 1);
+        for (int row = 0; row != mat.getNRows(); row++) {
+            for (int col = 0; col != mat.getNColumns(); col++) {
+                if (row != col) {
+                    mat.setElement(row, col, 0);
+                } else {
+                    mat.setElement(row, col, 1);
+                }
             }
         }
     }
 
     private void initZero(BasicMatrix mat) {
-        for(int row=0;row!=mat.getNRows();row++) {
-            for(int col=0;col!=mat.getNColumns();col++) {
+        for (int row = 0; row != mat.getNRows(); row++) {
+            for (int col = 0; col != mat.getNColumns(); col++) {
                 mat.setElement(row, col, 0);
             }
         }
     }
 
-
-    
     /**
-     * Transform MCParticle into a Helix object.
-     * Note that it produces the helix parameters at nominal x=0 and assumes that there is no field at x<0
-     * 
+     * Transform MCParticle into a Helix object. Note that it produces the helix
+     * parameters at nominal x=0 and assumes that there is no field at x<0
+     *
      * @param mcp MC particle to be transformed
      * @return helix object based on the MC particle
      */
@@ -771,82 +733,87 @@
 //        HelicalTrackFit htf = new HelicalTrackFit(par, cov, new double[2], new int[2], null, null);
 //        return htf;
 //    }
-
     private double truthTrackFitChi2(PerigeeParams perPar, PerigeeParams perParTruth, SymmetricMatrix covariance) {
         //re-shuffle the param vector to match the covariance order of parameters
-        BasicMatrix p = new BasicMatrix(1,5);
+        BasicMatrix p = new BasicMatrix(1, 5);
         p.setElement(0, 0, perPar.getD0());
         p.setElement(0, 1, perPar.getPhi());
         p.setElement(0, 2, perPar.getKappa());
         p.setElement(0, 0, perPar.getZ0());
-        p.setElement(0, 4, Math.tan(Math.PI/2.0-perPar.getTheta()));
-        BasicMatrix pt = new BasicMatrix(1,5);
+        p.setElement(0, 4, Math.tan(Math.PI / 2.0 - perPar.getTheta()));
+        BasicMatrix pt = new BasicMatrix(1, 5);
         pt.setElement(0, 0, perParTruth.getD0());
         pt.setElement(0, 1, perParTruth.getPhi());
         pt.setElement(0, 2, perParTruth.getKappa());
         pt.setElement(0, 0, perParTruth.getZ0());
-        pt.setElement(0, 4, Math.tan(Math.PI/2.0-perParTruth.getTheta()));
+        pt.setElement(0, 4, Math.tan(Math.PI / 2.0 - perParTruth.getTheta()));
         Matrix error_matrix = MatrixOp.inverse(covariance);
         BasicMatrix res = (BasicMatrix) MatrixOp.sub(p, pt);
-        BasicMatrix chi2 = (BasicMatrix) MatrixOp.mult(res,MatrixOp.mult(error_matrix, MatrixOp.transposed(res)));
-        if(chi2.getNColumns()!=1 ||chi2.getNRows()!=1) {
+        BasicMatrix chi2 = (BasicMatrix) MatrixOp.mult(res, MatrixOp.mult(error_matrix, MatrixOp.transposed(res)));
+        if (chi2.getNColumns() != 1 || chi2.getNRows() != 1) {
             throw new RuntimeException("matrix dim is screwed up!");
         }
         return chi2.e(0, 0);
     }
 
-    
-    
     private List<MCParticle> getAprimeDecayProducts(List<MCParticle> mcParticles) {
         List<MCParticle> pair = new ArrayList<MCParticle>();
-        for(MCParticle mcp : mcParticles) {
-            if(mcp.getGeneratorStatus()!=MCParticle.FINAL_STATE) continue;
+        for (MCParticle mcp : mcParticles) {
+            if (mcp.getGeneratorStatus() != MCParticle.FINAL_STATE) {
+                continue;
+            }
             boolean hasAprimeParent = false;
-            for(MCParticle parent : mcp.getParents()) {
-                if(Math.abs(parent.getPDGID())==622) hasAprimeParent = true;
-            }
-            if(hasAprimeParent)  pair.add(mcp);
-        }
-        if(pair.size()!=2) {
-            System.out.printf("%s: ERROR this event has %d mcp with 622 as parent!!??  \n",this.getClass().getSimpleName(),pair.size());
+            for (MCParticle parent : mcp.getParents()) {
+                if (Math.abs(parent.getPDGID()) == 622) {
+                    hasAprimeParent = true;
+                }
+            }
+            if (hasAprimeParent) {
+                pair.add(mcp);
+            }
+        }
+        if (pair.size() != 2) {
+            System.out.printf("%s: ERROR this event has %d mcp with 622 as parent!!??  \n", this.getClass().getSimpleName(), pair.size());
             this.printMCParticles(mcParticles);
             System.exit(1);
         }
-        if( Math.abs(pair.get(0).getPDGID()) != 11 || Math.abs(pair.get(1).getPDGID()) != 11 ) {
-            System.out.printf("%s: ERROR decay products are not e+e-? \n",this.getClass().getSimpleName());
+        if (Math.abs(pair.get(0).getPDGID()) != 11 || Math.abs(pair.get(1).getPDGID()) != 11) {
+            System.out.printf("%s: ERROR decay products are not e+e-? \n", this.getClass().getSimpleName());
             this.printMCParticles(mcParticles);
             System.exit(1);
         }
-        if(pair.get(0).getPDGID()*pair.get(1).getPDGID() > 0) {
-            System.out.printf("%s: ERROR decay products have the same sign? \n",this.getClass().getSimpleName());
+        if (pair.get(0).getPDGID() * pair.get(1).getPDGID() > 0) {
+            System.out.printf("%s: ERROR decay products have the same sign? \n", this.getClass().getSimpleName());
             this.printMCParticles(mcParticles);
             System.exit(1);
         }
         return pair;
-        
-    }
-
-    private void printMCParticles(List<MCParticle> mcParticles) {      
-        System.out.printf("%s: printMCParticles \n",this.getClass().getSimpleName());
-        System.out.printf("%s: %d mc particles \n",this.getClass().getSimpleName(),mcParticles.size());
-        for(MCParticle mcp : mcParticles) {
-            if(mcp.getGeneratorStatus()!=MCParticle.FINAL_STATE) continue;
-            System.out.printf("\n%s: (%s) %d  p %s org %s  %s \n",this.getClass().getSimpleName(),
-                                mcp.getGeneratorStatus()==MCParticle.FINAL_STATE?"F":"I",mcp.getPDGID(),mcp.getMomentum().toString(),mcp.getOrigin().toString(),
-                                mcp.getParents().size()>0?"parents:":"");
-            for(MCParticle parent : mcp.getParents()) {
-                System.out.printf("%s:       (%s) %d  p %s org %s %s \n",this.getClass().getSimpleName(),
-                                parent.getGeneratorStatus()==MCParticle.FINAL_STATE?"F":"I",parent.getPDGID(),parent.getMomentum().toString(),parent.getOrigin().toString(),
-                                parent.getParents().size()>0?"parents:":"");
-                for(MCParticle grparent : parent.getParents()) {
-                    System.out.printf("%s:            (%s) %d  p %s org %s  %s \n",this.getClass().getSimpleName(),
-                                    grparent.getGeneratorStatus()==MCParticle.FINAL_STATE?"F":"I",grparent.getPDGID(),grparent.getMomentum().toString(),grparent.getOrigin().toString(),
-                                    grparent.getParents().size()>0?"parents:":"");
-                }
-            
-            }
-        }
-     }
+
+    }
+
+    private void printMCParticles(List<MCParticle> mcParticles) {
+        System.out.printf("%s: printMCParticles \n", this.getClass().getSimpleName());
+        System.out.printf("%s: %d mc particles \n", this.getClass().getSimpleName(), mcParticles.size());
+        for (MCParticle mcp : mcParticles) {
+            if (mcp.getGeneratorStatus() != MCParticle.FINAL_STATE) {
+                continue;
+            }
+            System.out.printf("\n%s: (%s) %d  p %s org %s  %s \n", this.getClass().getSimpleName(),
+                    mcp.getGeneratorStatus() == MCParticle.FINAL_STATE ? "F" : "I", mcp.getPDGID(), mcp.getMomentum().toString(), mcp.getOrigin().toString(),
+                    mcp.getParents().size() > 0 ? "parents:" : "");
+            for (MCParticle parent : mcp.getParents()) {
+                System.out.printf("%s:       (%s) %d  p %s org %s %s \n", this.getClass().getSimpleName(),
+                        parent.getGeneratorStatus() == MCParticle.FINAL_STATE ? "F" : "I", parent.getPDGID(), parent.getMomentum().toString(), parent.getOrigin().toString(),
+                        parent.getParents().size() > 0 ? "parents:" : "");
+                for (MCParticle grparent : parent.getParents()) {
+                    System.out.printf("%s:            (%s) %d  p %s org %s  %s \n", this.getClass().getSimpleName(),
+                            grparent.getGeneratorStatus() == MCParticle.FINAL_STATE ? "F" : "I", grparent.getPDGID(), grparent.getMomentum().toString(), grparent.getOrigin().toString(),
+                            grparent.getParents().size() > 0 ? "parents:" : "");
+                }
+
+            }
+        }
+    }
 
     private double getInvMassTracks(HelicalTrackFit htf1, HelicalTrackFit htf2) {
         double p1 = htf1.p(this._B.magnitude());
@@ -854,55 +821,77 @@
         Hep3Vector p1vec = VecOp.mult(p1, HelixUtils.Direction(htf1, 0));
         Hep3Vector p2vec = VecOp.mult(p2, HelixUtils.Direction(htf2, 0));
         double me = 0.000510998910;
-        double E1 = Math.sqrt(p1*p1 + me*me);
-        double E2 = Math.sqrt(p2*p2 + me*me);
+        double E1 = Math.sqrt(p1 * p1 + me * me);
+        double E2 = Math.sqrt(p2 * p2 + me * me);
         //System.out.printf("p1 %f %s E1 %f\n",p1,p1vec.toString(),E1);
         //System.out.printf("p2 %f %s E2 %f\n",p2,p2vec.toString(),E2);
-        return Math.sqrt( Math.pow(E1+E2,2) - VecOp.add(p1vec, p2vec).magnitudeSquared() );
-    }
-
-    
+        return Math.sqrt(Math.pow(E1 + E2, 2) - VecOp.add(p1vec, p2vec).magnitudeSquared());
+    }
+
+    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 theta = Math.PI / 2.0 - Math.atan(htf.slope());
+            perPar.setElement(0, 0, kappa);
+            perPar.setElement(0, 1, theta);
+            perPar.setElement(0, 2, htf.phi0());
+            perPar.setElement(0, 3, htf.dca());
+            perPar.setElement(0, 4, htf.z0());
+        }
+        return perPar;
+
+    }
+
     public class PerigeeParams {
+
         private final BasicMatrix _params;
 
         private PerigeeParams(HelicalTrackFit htf) {
             _params = GBLOutput.this.getPerParVector(htf);
         }
+
         public BasicMatrix getParams() {
             return _params;
         }
+
         public double getKappa() {
             return _params.e(0, 0);
         }
+
         public double getTheta() {
             return _params.e(0, 1);
         }
+
         public double getPhi() {
             return _params.e(0, 2);
         }
+
         public double getD0() {
             return _params.e(0, 3);
         }
+
         public double getZ0() {
             return _params.e(0, 4);
         }
     }
 
     /**
-     * Computes the projection matrix from the perigee XY plane variables 
-     * dca and z0 into the curvilinear xT,yT,zT frame (U,V,T)
+     * Computes the projection matrix from the perigee XY plane variables dca
+     * and z0 into the curvilinear xT,yT,zT frame (U,V,T)
+     *
      * @param htf input helix to find the track direction
      * @return 3x3 projection matrix
      */
     Hep3Matrix getPerToClPrj(HelicalTrackFit htf) {
-        Hep3Vector Z = new BasicHep3Vector(0,0,1);
+        Hep3Vector Z = new BasicHep3Vector(0, 0, 1);
         Hep3Vector T = HelixUtils.Direction(htf, 0.);
-        Hep3Vector J = VecOp.mult(1./VecOp.cross(T,Z).magnitude(), VecOp.cross(T, Z));
+        Hep3Vector J = VecOp.mult(1. / VecOp.cross(T, Z).magnitude(), VecOp.cross(T, Z));
         Hep3Vector K = Z;
         Hep3Vector U = VecOp.mult(-1, J);
         Hep3Vector V = VecOp.cross(T, U);
         Hep3Vector I = VecOp.cross(J, K);
-           
+
         BasicHep3Matrix trans = new BasicHep3Matrix();
         trans.setElement(0, 0, VecOp.dot(I, U));
         trans.setElement(0, 1, VecOp.dot(J, U));
@@ -914,67 +903,71 @@
         trans.setElement(2, 1, VecOp.dot(J, T));
         trans.setElement(2, 2, VecOp.dot(K, T));
         return trans;
-        
-    }
-    
-
-    
-
-	public class ClParams {
-        private BasicMatrix _params = new BasicMatrix(1,5);
+
+    }
+
+    public class ClParams {
+
+        private BasicMatrix _params = new BasicMatrix(1, 5);
+
         private ClParams(HelicalTrackFit htf) {
-            
-        	if (htf == null) return;
+
+            if (htf == null) {
+                return;
+            }
 
             Hep3Matrix perToClPrj = GBLOutput.this.getPerToClPrj(htf);
-            
+
             double d0 = -1 * htf.dca(); //sign convention for curvilinear frame
             double z0 = htf.z0();
-            Hep3Vector vecPer = new BasicHep3Vector(0.,d0,z0);
+            Hep3Vector vecPer = new BasicHep3Vector(0., d0, z0);
             //System.out.printf("%s: vecPer=%s\n",this.getClass().getSimpleName(),vecPer.toString());
-            
+
             Hep3Vector vecCl = VecOp.mult(perToClPrj, vecPer);
             //System.out.printf("%s: vecCl=%s\n",this.getClass().getSimpleName(),vecCl.toString());
             double xT = vecCl.x();
             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 / p.magnitude();
             double phi = htf.phi0();
-            
+
             _params.setElement(0, 0, qOverP);
             _params.setElement(0, 1, lambda);
             _params.setElement(0, 2, phi);
             _params.setElement(0, 3, xT);
             _params.setElement(0, 4, yT);
-            
+
         }
 
         public BasicMatrix getParams() {
             return _params;
         }
-        
+
         double getLambda() {
-            return _params.e(0,1);
-        }
+            return _params.e(0, 1);
+        }
+
         double getQoverP() {
-            return _params.e(0,0);
-        }
+            return _params.e(0, 0);
+        }
+
         double getPhi() {
-            return _params.e(0,2);
-        }
+            return _params.e(0, 2);
+        }
+
         double getXt() {
-            return _params.e(0,3);
-        }
+            return _params.e(0, 3);
+        }
+
         double getYt() {
-            return _params.e(0,4);
-        }
-        
-    }
-	
+            return _params.e(0, 4);
+        }
+
+    }
 
 }

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 16:36:48 2015
@@ -25,25 +25,24 @@
 import org.lcsim.recon.tracking.seedtracker.SeedTrack;
 import org.lcsim.util.log.LogUtil;
 
-
 /**
- * A class that creates track objects from fitted GBL trajectories and adds them into the event.
- * 
+ * A class that creates track objects from fitted GBL trajectories and adds them
+ * into the event.
+ *
  * @author Per Hansson Adrian <[log in to unmask]>
  *
  */
 public class MakeGblTracks {
 
-
     private String _TrkCollectionName = "GblTracks";
     private static Logger logger = LogUtil.create(MakeGblTracks.class, new BasicLogFormatter());
-    
+
     /**
      * Creates a new instance of MakeTracks.
      */
     public MakeGblTracks() {
          //logger = Logger.getLogger(getClass().getName());
-         //logger.setUseParentHandlers(false);
+        //logger.setUseParentHandlers(false);
         //Handler handler = new StreamHandler(System.out, new SimpleFormatter());
         //logger.addHandler(handler);
         logger.setLevel(Level.INFO);
@@ -54,25 +53,25 @@
 //        }
 
     }
-    
+
     /**
      * Process a Gbl track and store it into the event
+     *
      * @param event event header
      * @param track Gbl trajectory
      * @param seed SeedTrack
      * @param bfield magnetic field (used to turn curvature into momentum)
      */
     public void Process(EventHeader event, List<FittedGblTrajectory> gblTrajectories, double bfield) {
-        
+
         List<Track> tracks = new ArrayList<Track>();
-        
+
         logger.info("adding " + gblTrajectories.size() + " of fitted GBL tracks to the event");
-        
-        for(FittedGblTrajectory fittedTraj : gblTrajectories) {
-            
-            
+
+        for (FittedGblTrajectory fittedTraj : gblTrajectories) {
+
             //  Initialize the reference point to the origin
-            double[] ref = new double[] {0., 0., 0.};
+            double[] ref = new double[]{0., 0., 0.};
             SeedTrack seedTrack = (SeedTrack) fittedTraj.get_seed();
             SeedCandidate trackseed = seedTrack.getSeedCandidate();
 
@@ -86,12 +85,12 @@
 
             //  Retrieve the helix and save the relevant bits of helix info
             HelicalTrackFit helix = trackseed.getHelix();
-            double gblParameters[] = getGblCorrectedHelixParameters(helix,fittedTraj, bfield);
+            double gblParameters[] = getGblCorrectedHelixParameters(helix, fittedTraj, bfield);
             trk.setTrackParameters(gblParameters, bfield); // Sets first TrackState.
             //TODO Use GBL covariance matrix
             //SymmetricMatrix gblCovariance = getGblCorrectedHelixCovariance(helix, fittedTraj, bfield);
             trk.setCovarianceMatrix(helix.covariance()); // Modifies first TrackState.
-            trk.setChisq( fittedTraj.get_chi2());
+            trk.setChisq(fittedTraj.get_chi2());
             trk.setNDF(fittedTraj.get_ndf());
 
             //  Flag that the fit was successful and set the reference point
@@ -107,22 +106,21 @@
 
             // 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((Track) 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()));
-            if(logger.getLevel().intValue()<= Level.INFO.intValue()) {
-                for(int i=0;i<5;++i) {
-                    logger.info(String.format("param %d: %.5f -> %.5f    helix-gbl= %f", i, helix.parameters()[i], trk.getTrackParameter(i), helix.parameters()[i]-trk.getTrackParameter(i)));
+            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()));
+            if (logger.getLevel().intValue() <= Level.INFO.intValue()) {
+                for (int i = 0; i < 5; ++i) {
+                    logger.info(String.format("param %d: %.10f -> %.10f    helix-gbl= %f", i, helix.parameters()[i], trk.getTrackParameter(i), helix.parameters()[i] - trk.getTrackParameter(i)));
                 }
             }
-            
+
         }
 
         logger.info("adding " + Integer.toString(tracks.size()) + " Gbl tracks to event with " + event.get(Track.class, "MatchedTracks").size() + " matched tracks");
-        
+
         // Put the tracks back into the event and exit
-        int flag = 1<<LCIOConstants.TRBIT_HITS;
+        int flag = 1 << LCIOConstants.TRBIT_HITS;
         event.put(_TrkCollectionName, tracks, Track.class, flag);
 
         return;
@@ -130,6 +128,7 @@
 
     /**
      * Compute the track fit covariance matrix
+     *
      * @param helix - original seed track
      * @param traj - fitted GBL trajectory
      * @return covariance matrix.
@@ -142,21 +141,22 @@
 
     /**
      * Compute the updated helix parameters.
+     *
      * @param helix - original seed track
      * @param traj - fitted GBL trajectory
      * @return corrected parameters.
      */
     private double[] getGblCorrectedHelixParameters(HelicalTrackFit helix, FittedGblTrajectory traj, double bfield) {
-        
+
         // get seed helix parameters
         double d0 = helix.dca();
         double z0 = helix.z0();
         double phi0 = helix.phi0();
-        double slope = helix.slope();
+        double lambda = Math.atan(helix.slope());
         double p = helix.p(bfield);
         double q = traj.get_seed().getCharge();
-        double qOverP = q/p;
-        
+        double qOverP = q / p;
+
         // get corrections from GBL fit
         Vector locPar = new Vector(5);
         SymMatrix locCov = new SymMatrix(5);
@@ -166,53 +166,49 @@
         double yTCorr = locPar.get(FittedGblTrajectory.GBLPARIDX.YT.getValue());
         double xTPrimeCorr = locPar.get(FittedGblTrajectory.GBLPARIDX.XTPRIME.getValue());
         double yTPrimeCorr = locPar.get(FittedGblTrajectory.GBLPARIDX.YTPRIME.getValue());
-        
-        logger.info((slope>0?"top: ":"bot ") + "qOverPCorr " + qOverPCorr + " xTCorr " + xTCorr + " yTCorr " + yTCorr + " xtPrimeCorr " + xTPrimeCorr + " yTPrimeCorr " + yTPrimeCorr);
-        
+
+        logger.info((helix.slope() > 0 ? "top: " : "bot ") + "qOverPCorr " + qOverPCorr + " xTCorr " + xTCorr + " yTCorr " + yTCorr + " xtPrimeCorr " + xTPrimeCorr + " yTPrimeCorr " + yTPrimeCorr);
+
         // calculate new d0 and z0
         Hep3Matrix perToClPrj = traj.get_track_data().getPrjPerToCl();
         Hep3Matrix clToPerPrj = VecOp.inverse(perToClPrj);
         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_corr = -1.0 * corrPer.y(); // correct for different sign convention of d0 in curvilinear frame
         double d0_gbl = d0 + d0_corr;
-        
+
         //z0
         double z0_corr = corrPer.z();
         double z0_gbl = z0 + z0_corr;
-        
+
         //calculate new phi0
         double phi0_gbl = phi0 + xTPrimeCorr;
-        
+
         //calculate new slope
-        double lambda_gbl = Math.atan(slope) + yTPrimeCorr;
-        double slope_gbl = Math.tan( lambda_gbl );
+        double lambda_gbl = lambda + yTPrimeCorr;
+        double slope_gbl = Math.tan(lambda_gbl);
 
         // calculate new curvature
-        
         double qOverP_gbl = qOverP + qOverPCorr;
-        double pt_gbl = Math.abs(1.0/qOverP_gbl) * Math.sin((Math.PI/2.0-lambda_gbl));
+        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(helix.curvature()) * Math.abs(C_gbl);
+
+        logger.info("qOverP=" + qOverP + " qOverPCorr=" + qOverPCorr + " qOverP_gbl=" + qOverP_gbl + " ==> pGbl=" + 1.0 / qOverP_gbl);
+
         double parameters_gbl[] = new double[5];
         parameters_gbl[HelicalTrackFit.dcaIndex] = d0_gbl;
-        parameters_gbl[HelicalTrackFit.z0Index] =  z0_gbl;
+        parameters_gbl[HelicalTrackFit.z0Index] = z0_gbl;
         parameters_gbl[HelicalTrackFit.curvatureIndex] = C_gbl;
         parameters_gbl[HelicalTrackFit.slopeIndex] = slope_gbl;
         parameters_gbl[HelicalTrackFit.phi0Index] = phi0_gbl;
         return parameters_gbl;
     }
-    
+
     public void setTrkCollectionName(String name) {
         _TrkCollectionName = name;
     }
 
-   
-   
 }

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use