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  November 2014

HPS-SVN November 2014

Subject:

r1489 - in /java/trunk/tracking/src/main: java/org/hps/recon/tracking/ java/org/hps/recon/tracking/axial/ java/org/hps/recon/tracking/straighttracks/ resources/org/hps/recon/tracking/strategies/

From:

[log in to unmask]

Reply-To:

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

Date:

Tue, 11 Nov 2014 02:19:08 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (1443 lines)

Author: [log in to unmask]
Date: Mon Nov 10 18:19:04 2014
New Revision: 1489

Log:
Add classes for fitting non-bend projections of tracks. 

Added:
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/axial/
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/axial/AxialTrackReconDriver.java
      - copied, changed from r1345, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrackReconDriver.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/axial/HelicalTrack2DHit.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/HPSFitter.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrack2DFitter.java
      - copied, changed from r1342, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrack2DFitter.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrackAxialFitter.java
      - copied, changed from r1342, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrack2DFitter.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrackConfirmerExtender.java
      - copied, changed from r1342, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrackConfirmerExtender.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrackFinder.java
      - copied, changed from r1345, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrackFinder.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrackFitter.java
      - copied, changed from r1345, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrackFitter.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrackReconDriver.java
      - copied, changed from r1345, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrackReconDriver.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTracker.java
      - copied, changed from r1345, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTracker.java
    java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Axial.xml
      - copied, changed from r1417, java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full.xml
    java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-L1-3.xml
      - copied, changed from r1331, java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full.xml
    java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-L4-6.xml
      - copied, changed from r1331, java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full.xml
    java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-StraightTracks.xml
      - copied, changed from r1331, java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full.xml
Modified:
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/MultipleScattering.java

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java	Mon Nov 10 18:19:04 2014
@@ -1,20 +1,19 @@
 package org.hps.recon.tracking;
 
+import hep.physics.matrix.SymmetricMatrix;
+import hep.physics.vec.BasicHep3Vector;
 import hep.physics.vec.Hep3Vector;
 import hep.physics.vec.VecOp;
-
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
-//===> import org.hps.conditions.deprecated.StereoPair;
-//===> import org.hps.conditions.deprecated.StereoPair.detectorVolume;
-//===> import org.hps.conditions.deprecated.SvtUtils;
-
+import org.hps.recon.tracking.axial.HelicalTrack2DHit;
 import org.lcsim.detector.IDetectorElement;
 import org.lcsim.detector.ITransform3D;
+import org.lcsim.detector.converter.compact.subdetector.HpsTracker2;
 import org.lcsim.detector.converter.compact.subdetector.SvtStereoLayer;
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.detector.tracker.silicon.SiSensor;
 import org.lcsim.detector.tracker.silicon.SiTrackerModule;
 import org.lcsim.event.EventHeader;
@@ -30,7 +29,6 @@
 import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
 import org.lcsim.geometry.Detector;
 import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
-import org.lcsim.detector.converter.compact.subdetector.HpsTracker2;
 import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHit;
 import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
 import org.lcsim.recon.tracking.digitization.sisim.TrackerHitType;
@@ -42,7 +40,7 @@
  * @author Mathew Graham <[log in to unmask]>
  * @author Per Hansson <[log in to unmask]>
  * @author Omar Moreno <[log in to unmask]>
- * 
+ *
  */
 // TODO: Add class documentation.
 // FIXME: The option to run using the Common geometry should be removed
@@ -53,9 +51,12 @@
     // dt cut time in ns
     private String _subdetectorName = "Tracker";
     private final Map<String, String> _stereomap = new HashMap<String, String>();
-    private	List<SvtStereoLayer> stereoLayers = null; 
+    private List<SvtStereoLayer> stereoLayers = null;
     private final List<String> _colnames = new ArrayList<String>();
     private boolean _doTransformToTracking = true;
+    private boolean _saveAxialHits = false;
+    private String _axialname = "AxialTrackHits";
+    private String _axialmcrelname = "AxialTrackHitsMCRelations";
 
     public enum LayerGeometryType {
 
@@ -110,6 +111,10 @@
      */
     public void setTransformToTracking(boolean trans) {
         this._doTransformToTracking = trans;
+    }
+
+    public void setSaveAxialHits(boolean save) {
+        _saveAxialHits = save;
     }
 
     /**
@@ -150,42 +155,35 @@
         // Instantiate the list of HelicalTrackCrosses and HelicalTrackHits
         List<HelicalTrackCross> stereoCrosses = new ArrayList<HelicalTrackCross>();
         List<HelicalTrackHit> helhits = new ArrayList<HelicalTrackHit>();
-
         // Create an LCRelation from a HelicalTrackHit to
         List<LCRelation> hitrelations = new ArrayList<LCRelation>();
-
         // Create an LCRelation from a HelicalTrackHit to an MC particle used to
         // create it
         List<LCRelation> mcrelations = new ArrayList<LCRelation>();
-
         RelationalTable hittomc = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
         if (event.hasCollection(LCRelation.class, "SVTTrueHitRelations")) {
             List<LCRelation> trueHitRelations = event.get(LCRelation.class, "SVTTrueHitRelations");
-            for (LCRelation relation : trueHitRelations) {
-                if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
+            for (LCRelation relation : trueHitRelations)
+                if (relation != null && relation.getFrom() != null && relation.getTo() != null)
                     hittomc.add(relation.getFrom(), relation.getTo());
-                }
-            }
-        }
-
+        }
+
+        List<HelicalTrack2DHit> axialhits = new ArrayList<>();
+        List<LCRelation> axialmcrelations = new ArrayList<LCRelation>();
+        // Loop over the input collection names we want to make hits out of
+        // ...for HPS, probably this is just a single one...
         for (String _colname : this._colnames) {
             if (!event.hasCollection(SiTrackerHit.class, _colname)) {
-                if (_debug) {
+                if (_debug)
                     System.out.println("Event: " + event.getRunNumber() + " does not contain the collection " + _colname);
-                }
                 continue;
             }
-
             // Get the list of SiTrackerHits for this collection
             List<SiTrackerHit> hitlist = event.get(SiTrackerHit.class, _colname);
-
-            if (_debug) {
+            if (_debug)
                 System.out.printf("%s: found %d SiTrackerHits\n", this.getClass().getSimpleName(), hitlist.size());
-            }
-
             Map<HelicalTrackStrip, SiTrackerHitStrip1D> stripmap = new HashMap<HelicalTrackStrip, SiTrackerHitStrip1D>();
-
-            for (SiTrackerHit hit : hitlist) {
+            for (SiTrackerHit hit : hitlist)
                 if (hit instanceof SiTrackerHitStrip1D) {
 
                     // Cast the hit as a 1D strip hit and find the
@@ -195,19 +193,26 @@
                     if ((_clusterTimeCut > 0 && Math.abs(h.getTime()) < _clusterTimeCut) || _clusterTimeCut < 0) {
                         // Create a HelicalTrackStrip for this hit
                         HelicalTrackStrip strip = makeDigiStrip(h);
-                        for (RawTrackerHit rth : h.getRawHits()) {
-                            for (Object simHit : hittomc.allFrom(rth)) {
+                        for (RawTrackerHit rth : h.getRawHits())
+                            for (Object simHit : hittomc.allFrom(rth))
                                 strip.addMCParticle(((SimTrackerHit) simHit).getMCParticle());
-                            }
-                        }
 
                         // Map a reference back to the hit needed to create
                         // the stereo hit LC relations
                         stripmap.put(strip, h);
-
-                        if (_debug) {
+                        if (_debug)
                             System.out.printf("%s: added strip org %s layer %d\n", this.getClass().getSimpleName(), strip.origin().toString(), strip.layer());
-                        }
+
+                        if (_saveAxialHits)//                           
+                            if (((HpsSiSensor) h.getSensor()).isAxial()) {
+                                HelicalTrack2DHit haxial = makeDigiAxialHit(h);                                
+                                axialhits.add(haxial);
+                                List<RawTrackerHit> rl = haxial.getRawHits();
+                                for (RawTrackerHit rth : rl)
+                                    for (Object simHit : hittomc.allFrom(rth))
+                                        haxial.addMCParticle(((SimTrackerHit) simHit).getMCParticle());
+                                axialmcrelations.add(new MyLCRelation(haxial, haxial.getMCParticles()));
+                            }
                     }
                 } else {
                     // If not a 1D strip hit, make a pixel hit
@@ -216,7 +221,6 @@
                     helhits.add(hit3d);
                     hitrelations.add(new MyLCRelation(hit3d, hit));
                 }
-            }
 
             List<HelicalTrackCross> helicalTrackCrosses = new ArrayList<HelicalTrackCross>();
 
@@ -232,9 +236,8 @@
 
                     // This hit should be a on a stereo pair!
                     // With our detector setup, when is this not true?
-                    if (!_stereomap.containsKey(id) && !_stereomap.containsValue(id)) {
+                    if (!_stereomap.containsKey(id) && !_stereomap.containsValue(id))
                         throw new RuntimeException(this.getClass().getSimpleName() + ": this " + id + " was not among the stereo modules!");
-                    }
 
                     // Get the list of strips for this layer - create a new
                     // list if one doesn't already exist
@@ -249,9 +252,8 @@
                     lyrhits.add(strip);
                 }
 
-                if (_debug) {
+                if (_debug)
                     System.out.printf("%s: Create stereo hits from %d strips \n", this.getClass().getSimpleName(), striplistmap.size());
-                }
 
                 // Loop over the stereo layer pairs
                 // TODO: Change this so that it makes use of StereoPairs
@@ -259,9 +261,8 @@
                     // Get the second layer
                     String id2 = _stereomap.get(id1);
 
-                    if (_debug) {
+                    if (_debug)
                         System.out.printf("%s: Form stereo hits from sensor id %s with %d hits and %s with %d hits\n", this.getClass().getSimpleName(), id1, striplistmap.get(id1) == null ? 0 : striplistmap.get(id1).size(), id2, striplistmap.get(id2) == null ? 0 : striplistmap.get(id2).size());
-                    }
 
                     // Form the stereo hits and add them to our hit list
                     helicalTrackCrosses.addAll(_crosser.MakeHits(striplistmap.get(id1), striplistmap.get(id2)));
@@ -292,45 +293,37 @@
                     List<HelicalTrackCross> newCrosses;
 
                     //===> if (stereoPair.getDetectorVolume() == detectorVolume.Top) {
-                    if (stereoLayer.getAxialSensor().isTopLayer()) {
-                        newCrosses = _crosser.MakeHits(striplistmap.get(stereoLayer.getAxialSensor()), striplistmap.get(stereoLayer.getStereoSensor()));
-                    //===> } else if (stereoPair.getDetectorVolume() == detectorVolume.Bottom) {
-                    } else if (stereoLayer.getAxialSensor().isBottomLayer()) {
+                    if (stereoLayer.getAxialSensor().isTopLayer())
+                        newCrosses = _crosser.MakeHits(striplistmap.get(stereoLayer.getAxialSensor()), striplistmap.get(stereoLayer.getStereoSensor())); //===> } else if (stereoPair.getDetectorVolume() == detectorVolume.Bottom) {
+                    else if (stereoLayer.getAxialSensor().isBottomLayer())
                         newCrosses = _crosser.MakeHits(striplistmap.get(stereoLayer.getStereoSensor()), striplistmap.get(stereoLayer.getAxialSensor()));
-                    } else {
+                    else
                         throw new RuntimeException("stereo pair is neither top nor bottom");
-                    }
 
                     helicalTrackCrosses.addAll(newCrosses);
                 } // Loop over stereo pairs
             }
 
             for (HelicalTrackCross cross : helicalTrackCrosses) {
-                if (cross.getMCParticles() != null) {
-                    for (MCParticle mcp : cross.getMCParticles()) {
+                if (cross.getMCParticles() != null)
+                    for (MCParticle mcp : cross.getMCParticles())
                         mcrelations.add(new MyLCRelation((HelicalTrackHit) cross, mcp));
-                    }
-                }
-                for (HelicalTrackStrip strip : cross.getStrips()) {
+                for (HelicalTrackStrip strip : cross.getStrips())
                     hitrelations.add(new MyLCRelation(cross, stripmap.get(strip)));
-                }
-                if (_debug) {
+                if (_debug)
                     System.out.printf("%s: cross at %.2f,%.2f,%.2f \n", this.getClass().getSimpleName(), cross.getPosition()[0], cross.getPosition()[1], cross.getPosition()[2]);
-                }
             }
 
             stereoCrosses.addAll(helicalTrackCrosses);
 
-            if (_debug) {
+            if (_debug)
                 System.out.printf("%s: added %d stereo hits from %s collection \n", this.getClass().getSimpleName(), helicalTrackCrosses.size(), _colname);
-            }
         } // End of loop over collection names
 
         if (_debug) {
             System.out.printf("%s: totally added %d stereo hits:\n", this.getClass().getSimpleName(), stereoCrosses.size());
-            for (HelicalTrackCross cross : stereoCrosses) {
+            for (HelicalTrackCross cross : stereoCrosses)
                 System.out.printf("%s: %.2f,%.2f,%.2f \n", this.getClass().getSimpleName(), cross.getPosition()[0], cross.getPosition()[1], cross.getPosition()[2]);
-            }
         }
 
         // Add things to the event
@@ -339,10 +332,16 @@
         event.put(_outname, helhits, HelicalTrackHit.class, 0);
         event.put(_hitrelname, hitrelations, LCRelation.class, 0);
         event.put(_mcrelname, mcrelations, LCRelation.class, 0);
+        if (_saveAxialHits) {
+            event.put(_axialname, axialhits, HelicalTrackHit.class, 0);
+            event.put(_axialmcrelname, axialmcrelations, LCRelation.class, 0);
+            System.out.println(this.getClass().getSimpleName() + " : number of " + _axialmcrelname + " found = " + axialmcrelations.size());
+        }
         if (_doTransformToTracking) {
             addRotatedHitsToEvent(event, stereoCrosses);
-        }
-
+            if (_saveAxialHits)
+                addRotated2DHitsToEvent(event, axialhits);
+        }
     } // Process()
 
     public void addCollection(String colname) {
@@ -365,43 +364,57 @@
     @Override
     protected void detectorChanged(Detector detector) {
 
-    	// Get the collection of stereo layers from the detector
-    	stereoLayers = ((HpsTracker2) detector.getSubdetector(this._subdetectorName).getDetectorElement()).getStereoPairs();
-    	
+        // Get the collection of stereo layers from the detector
+        stereoLayers = ((HpsTracker2) detector.getSubdetector(this._subdetectorName).getDetectorElement()).getStereoPairs();
+
         /*
          * Setup default pairing
          */
-        if (_debug) {
+        if (_debug)
             System.out.printf("%s: Setup stereo hit pair modules \n", this.getClass().getSimpleName());
-        }
 
         List<SiTrackerModule> modules = detector.getSubdetector(this._subdetectorName).getDetectorElement().findDescendants(SiTrackerModule.class);
 
-        if (modules.isEmpty()) {
+        if (modules.isEmpty())
             throw new RuntimeException(this.getClass().getName() + ": No SiTrackerModules found in detector.");
-        }
 
         if (LayerGeometryType.Common == this._layerGeometryType) {
 
             int nLayersTotal = detector.getSubdetector(_subdetectorName).getLayering().getLayers().getNumberOfLayers();
-            if (_debug) {
+            if (_debug)
                 System.out.printf("%s: %d layers \n", this.getClass().getSimpleName(), nLayersTotal);
-            }
-            if (nLayersTotal % 2 != 0) {
+            if (nLayersTotal % 2 != 0)
                 throw new RuntimeException(this.getClass().getName() + ": Don't know how to do stereo pairing for odd number of modules.");
-            }
             for (int i = 1; i <= (nLayersTotal) - 1; i += 2) {
-                if (_debug) {
+                if (_debug)
                     System.out.printf("%s: Adding stereo pair: %d,%d\n", this.getClass().getSimpleName(), i, i + 1);
-                }
                 setStereoPair(_subdetectorName, i, i + 1);
             }
         }
 
-        if (_debug) {
+        if (_debug)
             System.out.printf("%s: %d stereo modules added", this.getClass().getSimpleName(), this._stereomap.size());
-        }
-
+
+    }
+
+    /*
+     *  Make  HelicalTrack2DHits from SiTrackerHitStrip1D...note that these HelicalTrack2DHits
+     *  are defined in org.hps.recon.tracking.axial (not the lcsim class)
+     */
+    private HelicalTrack2DHit makeDigiAxialHit(SiTrackerHitStrip1D h) {
+
+        double z1 = h.getHitSegment().getEndPoint().x();
+        double z2 = h.getHitSegment().getStartPoint().x();//x is the non-bend direction in the JLAB frame
+        double zmin = Math.min(z1, z2);
+        double zmax = Math.max(z1, z2);
+        IDetectorElement de = h.getSensor();
+
+        HelicalTrack2DHit hit = new HelicalTrack2DHit(h.getPositionAsVector(),
+                h.getCovarianceAsMatrix(), h.getdEdx(), h.getTime(),
+                h.getRawHits(), _ID.getName(de), _ID.getLayer(de),
+                _ID.getBarrelEndcapFlag(de), zmin, zmax, h.getUnmeasuredCoordinate());
+
+        return hit;
     }
 
     private HelicalTrackStrip makeDigiStrip(SiTrackerHitStrip1D h) {
@@ -430,18 +443,15 @@
         HelicalTrackStrip strip = new HelicalTrackStrip(org, u, v, umeas, du, vmin, vmax, dEdx, time, rawhits, det, lyr, be);
 
         try {
-            if (h.getMCParticles() != null) {
-                for (MCParticle p : h.getMCParticles()) {
+            if (h.getMCParticles() != null)
+                for (MCParticle p : h.getMCParticles())
                     strip.addMCParticle(p);
-                }
-            }
         } catch (RuntimeException e) {
             // Okay when MC info not present.
         }
 
-        if (_debug) {
+        if (_debug)
             System.out.println(this.getClass().getSimpleName() + ": produced HelicalTrackStrip with origin " + strip.origin().toString());
-        }
 
         return strip;
     }
@@ -472,24 +482,61 @@
                 Hep3Vector newu = CoordinateTransformations.transformVectorToTracking(u);
                 Hep3Vector newv = CoordinateTransformations.transformVectorToTracking(v);
                 HelicalTrackStrip newstrip = new HelicalTrackStrip(neworigin, newu, newv, umeas, du, vmin, vmax, dedx, time, rthList, detname, layer, bec);
-                for (MCParticle p : strip.MCParticles()) {
+                for (MCParticle p : strip.MCParticles())
                     newstrip.addMCParticle(p);
-                }
                 rotatedstriphits.add(newstrip);
             }
             HelicalTrackCross newhit = new HelicalTrackCross(rotatedstriphits.get(0), rotatedstriphits.get(1));
-            for (MCParticle mcp : cross.getMCParticles()) {
+            for (MCParticle mcp : cross.getMCParticles())
                 newhit.addMCParticle(mcp);
-            }
             rotatedhits.add(newhit);
             hthrelations.add(new MyLCRelation(cross, newhit));
-            for (MCParticle mcp : newhit.getMCParticles()) {
+            for (MCParticle mcp : newhit.getMCParticles())
                 mcrelations.add(new MyLCRelation(newhit, mcp));
-            }
         }
 
         event.put("Rotated" + _outname, rotatedhits, HelicalTrackHit.class, 0);
         event.put("Rotated" + _hitrelname, hthrelations, LCRelation.class, 0);
         event.put("Rotated" + _mcrelname, mcrelations, LCRelation.class, 0);
     }
+
+    /*
+     *  Rotate the 2D tracker hits
+     */
+    private void addRotated2DHitsToEvent(EventHeader event, List<HelicalTrack2DHit> striphits) {
+        List<HelicalTrack2DHit> rotatedhits = new ArrayList<HelicalTrack2DHit>();
+        List<LCRelation> mcrelations = new ArrayList<LCRelation>();
+        for (HelicalTrack2DHit twodhit : striphits) {
+            Hep3Vector pos = new BasicHep3Vector(twodhit.getPosition());
+            SymmetricMatrix cov = twodhit.getCorrectedCovMatrix();
+            double dedx = twodhit.getdEdx();
+            double time = twodhit.getTime();
+            List<RawTrackerHit> rthList = twodhit.getRawHits();
+            String detname = twodhit.Detector();
+            int layer = twodhit.Layer();
+            BarrelEndcapFlag bec = twodhit.BarrelEndcapFlag();
+            double vmin = twodhit.axmin();
+            double vmax = twodhit.axmax();
+            Hep3Vector axDir = twodhit.axialDirection();
+            Hep3Vector newpos = CoordinateTransformations.transformVectorToTracking(pos);
+            Hep3Vector newaxdir = CoordinateTransformations.transformVectorToTracking(axDir);
+            SymmetricMatrix newcov = CoordinateTransformations.transformCovarianceToTracking(cov);
+            HelicalTrack2DHit newhit = new HelicalTrack2DHit(newpos, newcov, dedx, time, rthList, detname, layer, bec, vmin, vmax, newaxdir);
+            for (MCParticle mcp : twodhit.getMCParticles())
+                newhit.addMCParticle(mcp);
+            rotatedhits.add(newhit);
+            for (MCParticle mcp : newhit.getMCParticles())
+                mcrelations.add(new MyLCRelation(newhit, mcp));
+        }
+        if (_debug) {
+            System.out.println(this.getClass().getSimpleName() + ": " + _axialname + " size = " + rotatedhits.size());
+            System.out.println(this.getClass().getSimpleName() + ": " + _axialmcrelname + " size = " + mcrelations.size());
+        }
+        event.put("Rotated" + _axialname, rotatedhits, HelicalTrackHit.class, 0);
+        event.put("Rotated" + _axialmcrelname, mcrelations, LCRelation.class, 0);
+    }
+
+    public void saveAxial2DHits(boolean saveThem) {
+        _saveAxialHits = saveThem;
+    }
 }

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/MultipleScattering.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/MultipleScattering.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/MultipleScattering.java	Mon Nov 10 18:19:04 2014
@@ -25,6 +25,8 @@
  */
 public class MultipleScattering extends org.lcsim.recon.tracking.seedtracker.MultipleScattering {
 
+    private boolean _fixTrackMomentum=false;
+    private double _momentum=-99;//dummy
     public MultipleScattering(MaterialManager materialmanager) {
         super(materialmanager);
     }
@@ -32,7 +34,7 @@
     /**
      * Override lcsim version and select material manager depending on object
      * type. This allows to
-     * use a local extension of the material manager in teh lcsim track fitting
+     * use a local extension of the material manager in the lcsim track fitting
      * code.
      *
      * @param helix
@@ -77,9 +79,9 @@
             System.out.printf("%s: momentum is p=%f,R=%f,B=%f \n", this.getClass().getSimpleName(), helix.p(Math.abs(_bfield)), helix.R(), _bfield);
         }
 //        MG TURN THIS OFF SO IT DOESN'T ABORT STRAIGHT TRACKS
-//        // Check that B Field is set
-//        if (_bfield == 0.)
-//            throw new RuntimeException("B Field must be set before calling FindScatters method");
+        // Check that B Field is set
+        if (_bfield == 0.&&!_fixTrackMomentum)
+            throw new RuntimeException("B Field or fixed momentum must be set before calling FindScatters method");
 
         // Create a new list to contain the mutliple scatters
         // List<ScatterAngle> scatters = new ArrayList<ScatterAngle>();
@@ -122,9 +124,10 @@
                 if (_debug)
                     System.out.printf("%s: material traversed: %f R.L. (%fmm) \n", this.getClass().getSimpleName(), radlen, vol.getMaterialTraversed(dir));
 
-//                double p = helix.p(this._bfield);
-                double p = 1.0; // set default momentum to 1.0
-                if (_bfield != 0)
+                double p; 
+                if (_fixTrackMomentum)
+                    p=_momentum;
+                else
                     p = helix.p(this._bfield);
                 double msangle = this.msangle(p, radlen);
 
@@ -360,6 +363,11 @@
         // Should be safe to cast here
         return (MaterialManager) _materialmanager;
     }
+    
+    public void fixTrackMomentum(double mom){
+        _fixTrackMomentum=true;
+        _momentum=mom;
+    }
 
     /**
      * Nested class to encapsulate the scatter angles and which detector element

Copied: java/trunk/tracking/src/main/java/org/hps/recon/tracking/axial/AxialTrackReconDriver.java (from r1345, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrackReconDriver.java)
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrackReconDriver.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/axial/AxialTrackReconDriver.java	Mon Nov 10 18:19:04 2014
@@ -1,8 +1,10 @@
-package org.hps.recon.tracking.nobfield;
+package org.hps.recon.tracking.axial;
 
 import hep.physics.vec.BasicHep3Vector;
 import java.util.List;
 import org.hps.recon.tracking.CoordinateTransformations;
+import org.hps.recon.tracking.straighttracks.StraightTrackAxialFitter;
+import org.hps.recon.tracking.straighttracks.StraightTracker;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.Track;
 import org.lcsim.event.base.BaseTrack;
@@ -14,12 +16,13 @@
 import org.lcsim.util.Driver;
 
 /**
- * This class runs the Track Reconstruction 0 B-Field  events.
- * The tracker digitization must be run in front of it. It is intended to work 
+ * This class runs the Track Reconstruction using just the axial layers;
+ * No circle fit is performed.
+ * The tracker digitization must be run in front of it. 
  *
  * @author Matt Graham <[log in to unmask]>
  */
-public final class StraightTrackReconDriver extends Driver {
+public final class AxialTrackReconDriver extends Driver {
 
     // Debug flag.
     private boolean debug = false;
@@ -34,20 +37,18 @@
     // Tracking strategies resource path.
     private String strategyResource = "HPS-Full-StraightTracks.xml";
     // Output track collection.
-    private String trackCollectionName = "StraightTracks";
+    private String trackCollectionName = "VerticalTracks";
     // HelicalTrackHit input collection.
-    private String stInputCollectionName = "RotatedHelicalTrackHits";
+    private String stInputCollectionName = "RotatedAxialTrackHits";
     // Include MS (done by removing XPlanes from the material manager results)
     private boolean includeMS = true;
     // number of repetitive fits on confirmed/extended tracks
     private int _iterativeConfirmed = 3;
     // use HPS implementation of material manager
     private boolean _useHPSMaterialManager = true;
-    // enable the use of sectoring using sector binning in SeedTracker
-    private boolean _applySectorBinning = true;
     private double rmsTimeCut = -1;
 
-    public StraightTrackReconDriver() {
+    public AxialTrackReconDriver() {
     }
 
     public void setDebug(boolean debug) {
@@ -88,17 +89,6 @@
     public void setIterativeFits(int val) {
         this._iterativeConfirmed = val;
     }
-
-    /**
-     * Set to enable the sectoring to use the sector bins in checking for
-     * consistent hits.
-     *
-     * @param applySectorBinning apply sector binning switch
-     */
-    public void setApplySectorBinning(boolean applySectorBinning) {
-        this._applySectorBinning = applySectorBinning;
-    }
-
     /**
      * Set time cut.
      * @param rmsTimeCut
@@ -148,6 +138,7 @@
         stFinal.setInputCollectionName(stInputCollectionName);
         stFinal.setTrkCollectionName(trackCollectionName);
         stFinal.setBField(bfield);
+        stFinal.setTrackFittingAlgorithm(new StraightTrackAxialFitter());
         if (debug) {
             stFinal.setDiagnostics(new SeedTrackerDiagnostics());
         }

Added: java/trunk/tracking/src/main/java/org/hps/recon/tracking/axial/HelicalTrack2DHit.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/axial/HelicalTrack2DHit.java	(added)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/axial/HelicalTrack2DHit.java	Mon Nov 10 18:19:04 2014
@@ -0,0 +1,71 @@
+package org.hps.recon.tracking.axial;
+
+import hep.physics.matrix.SymmetricMatrix;
+import hep.physics.vec.Hep3Vector;
+import java.util.List;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
+
+/**
+ * Encapsulate 2D hit info needed by HelicalTrackFitter. 
+ * This class is explicitly for HPS where the length of the
+ * sensors are (mostly) along the detector 
+ * y-dimension ( == HelicalTrackFit x-dimension);
+ * @author Matt Graham <[log in to unmask]>
+ * Copied/Modified from org.lcsim.recon.tracking.helicaltrack.HelicalTrack2DHit.java
+ */
+public class HelicalTrack2DHit  extends HelicalTrackHit {
+    private double _axmin;//min value along the bend-direction..
+    private double _axmax;//max value along the bend-direction..
+    private static int _type = 2;
+    private Hep3Vector _axialDirection;//the direction along the strip length
+    
+    /**
+     * Create a HelicalTrack2DHit from the associated TrackerHit and HelicalTrackStrip.
+     * @param pos location of the strip center
+     * @param cov covariance matrix for the hit
+     * @param dEdx deposited energy
+     * @param time hit time
+     * @param rawhits list of raw hits
+     * @param axmin minimum z for the strip
+     * @param axmax maximum z for the strip
+     * @param detname detector name
+     * @param layer layer number
+     * @param beflag
+     */
+    public HelicalTrack2DHit(Hep3Vector pos, SymmetricMatrix cov, double dEdx, double time,
+            List rawhits, String detname, int layer, BarrelEndcapFlag beflag, double zmin, double zmax, Hep3Vector axDir) {
+        super(pos, cov, dEdx, time, _type, rawhits, detname, layer, beflag);
+        _axmin = zmin;
+        _axmax = zmax;        
+        _axialDirection=axDir;
+    }
+    
+    /**
+     * Return the minimum z coordinate.
+     * @return minimum z coordinate
+     */
+    public double axmin() {
+        return _axmin;
+    }
+    
+    /**
+     * Return the maximum z coordinate.
+     * @return maximum z coordinate
+     */
+    public double axmax() {
+        return _axmax;
+    }
+
+    /**
+     * Return the length of the strip along the z direction.
+     * @return strip length
+     */
+    public double axlen() {
+        return _axmax - _axmin;
+    }
+    
+    public Hep3Vector axialDirection(){
+        return _axialDirection;
+    }
+}

Added: java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/HPSFitter.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/HPSFitter.java	(added)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/HPSFitter.java	Mon Nov 10 18:19:04 2014
@@ -0,0 +1,43 @@
+package org.hps.recon.tracking.straighttracks;
+
+import java.util.List;
+import java.util.Map;
+import org.lcsim.fit.helicaltrack.HelicalTrackFit;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.fit.helicaltrack.MultipleScatter;
+
+/**
+ *
+ * @author mgraham
+ */
+public interface HPSFitter {
+
+//    public void HPSFitter();
+
+    public enum FitStatus {
+    
+        /**
+         * Successful Fit.
+         */
+        Success,
+        /**
+         * Inconsistent seed hits
+         */
+        InconsistentSeed,
+        /**
+         * s-z line fit failed.
+         */
+        SZLineFitFailed,
+        /**
+         * ZSegmentFit failed.
+         */
+        XYLineFitFailed
+    };
+
+    public FitStatus fit(List<HelicalTrackHit> hits);
+
+    public FitStatus fit(List<HelicalTrackHit> hits, Map<HelicalTrackHit, MultipleScatter> msmap, HelicalTrackFit oldfit);
+
+    public HelicalTrackFit getFit();
+
+}

Copied: java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrack2DFitter.java (from r1342, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrack2DFitter.java)
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrack2DFitter.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrack2DFitter.java	Mon Nov 10 18:19:04 2014
@@ -1,4 +1,4 @@
-package org.hps.recon.tracking.nobfield;
+package org.hps.recon.tracking.straighttracks;
 
 import hep.physics.matrix.SymmetricMatrix;
 import java.util.HashMap;
@@ -15,7 +15,7 @@
  *
  * @author mgraham
  */
-public class StraightTrack2DFitter {
+public class StraightTrack2DFitter implements HPSFitter {
 
     SlopeInterceptLineFitter _lfitter = new SlopeInterceptLineFitter();
     HelicalTrackFit _fit;
@@ -23,35 +23,36 @@
     /**
      * Status of the HelicalTrackFit.
      */
-    public enum FitStatus {
-
-        /**
-         * Successful Fit.
-         */
-        Success,
-        /**
-         * Inconsistent seed hits
-         */
-        InconsistentSeed,
-        /**
-         * s-z line fit failed.
-         */
-        SZLineFitFailed,
-        /**
-         * ZSegmentFit failed.
-         */
-        XYLineFitFailed
-    };
-
+  //  public enum FitStatus {
+//
+//        /**
+//         * Successful Fit.
+//         */
+//        Success,
+//        /**
+//         * Inconsistent seed hits
+//         */
+//        InconsistentSeed,
+//        /**
+//         * s-z line fit failed.
+//         */
+//        SZLineFitFailed,
+//        /**
+//         * ZSegmentFit failed.
+//         */
+//        XYLineFitFailed
+//    };
     public void StraightTrack2DFitter() {
 
     }
 
+    @Override
     public FitStatus fit(List<HelicalTrackHit> hits) {
         Map<HelicalTrackHit, MultipleScatter> msmap = new HashMap<HelicalTrackHit, MultipleScatter>();
         return fit(hits, msmap, null);
     }
 
+    @Override
     public FitStatus fit(List<HelicalTrackHit> hits, Map<HelicalTrackHit, MultipleScatter> msmap, HelicalTrackFit oldfit) {
         //  Check that we have at least 3 hits
         boolean success = false;
@@ -90,7 +91,7 @@
         success = _lfitter.fit(x, y, dy, nhit);
         if (!success)
             return FitStatus.XYLineFitFailed;
-        SlopeInterceptLineFit xyFit = _lfitter.getFit();        
+        SlopeInterceptLineFit xyFit = _lfitter.getFit();
         par[0] = xyFit.intercept();
         par[1] = xyFit.slope();
         cov.setElement(0, 0, Math.pow(xyFit.interceptUncertainty(), 2));
@@ -117,13 +118,14 @@
         cov.setElement(4, 4, Math.pow(szFit.slopeUncertainty(), 2));
         cov.setElement(3, 4, Math.pow(szFit.covariance(), 2));
         chisq[1] = szFit.chisquared();
-        ndof[1] = szFit.ndf();        
+        ndof[1] = szFit.ndf();
         par[2] = 1e-50;
         //  Create the HelicalTrackFit for this helix
         _fit = new HelicalTrackFit(par, cov, chisq, ndof, smap, msmap);
         return FitStatus.Success;
     }
 
+    @Override
     public HelicalTrackFit getFit() {
         return _fit;
     }

Copied: java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrackAxialFitter.java (from r1342, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrack2DFitter.java)
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrack2DFitter.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrackAxialFitter.java	Mon Nov 10 18:19:04 2014
@@ -1,4 +1,4 @@
-package org.hps.recon.tracking.nobfield;
+package org.hps.recon.tracking.straighttracks;
 
 import hep.physics.matrix.SymmetricMatrix;
 import java.util.HashMap;
@@ -12,49 +12,47 @@
 import org.lcsim.fit.line.SlopeInterceptLineFitter;
 
 /**
- *
- * @author mgraham
+ * Do a simple 1d linear fit using the 
+ * 
+ * @author mgraham <[log in to unmask]>
  */
-public class StraightTrack2DFitter {
+public class StraightTrackAxialFitter implements HPSFitter{
 
     SlopeInterceptLineFitter _lfitter = new SlopeInterceptLineFitter();
     HelicalTrackFit _fit;
 
-    /**
-     * Status of the HelicalTrackFit.
-     */
-    public enum FitStatus {
-
-        /**
-         * Successful Fit.
-         */
-        Success,
-        /**
-         * Inconsistent seed hits
-         */
-        InconsistentSeed,
-        /**
-         * s-z line fit failed.
-         */
-        SZLineFitFailed,
-        /**
-         * ZSegmentFit failed.
-         */
-        XYLineFitFailed
-    };
-
+//    /**
+//     * Status of the HelicalTrackFit.
+//     */
+//    public enum FitStatus {
+//
+//        /**
+//         * Successful Fit.
+//         */
+//        Success,
+//        /**
+//         * Inconsistent seed hits
+//         */
+//        InconsistentSeed,
+//        /**
+//         * s-z line fit failed.
+//         */
+//        SZLineFitFailed,       
+//    };
+    
     public void StraightTrack2DFitter() {
 
     }
-
+    @Override
     public FitStatus fit(List<HelicalTrackHit> hits) {
         Map<HelicalTrackHit, MultipleScatter> msmap = new HashMap<HelicalTrackHit, MultipleScatter>();
         return fit(hits, msmap, null);
     }
-
+   
+    @Override
     public FitStatus fit(List<HelicalTrackHit> hits, Map<HelicalTrackHit, MultipleScatter> msmap, HelicalTrackFit oldfit) {
         //  Check that we have at least 3 hits
-        boolean success = false;
+        boolean success;
         int nhit = hits.size();
         if (nhit < 3)
             return FitStatus.InconsistentSeed;
@@ -67,43 +65,16 @@
 
         //  Setup for the line fit
         double[] s = new double[nhit];
-        double[] z = new double[nhit];
-        double[] y = new double[nhit];
-        double[] x = new double[nhit];
+        double[] z = new double[nhit];     
         double[] dz = new double[nhit];
-        double[] dy = new double[nhit];
         Map<HelicalTrackHit, Double> smap = new HashMap<>();
-
-        //  Store the coordinates and errors for the XY line fit
-        for (int i = 0; i < nhit; i++) {
-            HelicalTrackHit hit = hits.get(i);
-            y[i] = hit.y();
-            dy[i] = HitUtils.zres(hit, msmap, oldfit);
-            double drphi_ms = 0;
-            if (msmap.containsKey(hit))
-                drphi_ms = msmap.get(hit).drphi();
-            double dyHitSq = hit.getCorrectedCovMatrix().e(1, 1);
-            dy[i] = Math.sqrt(dyHitSq + drphi_ms * drphi_ms);
-            x[i] = hit.x();
-        }
-        //  Call the line fitter and check for success
-        success = _lfitter.fit(x, y, dy, nhit);
-        if (!success)
-            return FitStatus.XYLineFitFailed;
-        SlopeInterceptLineFit xyFit = _lfitter.getFit();        
-        par[0] = xyFit.intercept();
-        par[1] = xyFit.slope();
-        cov.setElement(0, 0, Math.pow(xyFit.interceptUncertainty(), 2));
-        cov.setElement(1, 1, Math.pow(xyFit.slopeUncertainty(), 2));
-        cov.setElement(0, 1, Math.pow(xyFit.covariance(), 2));
-        chisq[0] = xyFit.chisquared();
-        ndof[0] = xyFit.ndf();
+     
         //  Store the coordinates and errors for the SZ line fit
         for (int i = 0; i < nhit; i++) {
             HelicalTrackHit hit = hits.get(i);
             z[i] = hit.z();
             dz[i] = HitUtils.zres(hit, msmap, oldfit); //MG  this works even in msmap is null
-            s[i] = Math.sqrt(hit.x() * hit.x() + hit.y() * hit.y());
+            s[i] = hit.x();  //take as the track length, the distance in x
             smap.put(hit, s[i]);
         }
         //  Call the line fitter and check for success
@@ -118,12 +89,17 @@
         cov.setElement(3, 4, Math.pow(szFit.covariance(), 2));
         chisq[1] = szFit.chisquared();
         ndof[1] = szFit.ndf();        
+        //set the other parameters to 0;
+        chisq[0] = 0;
+        ndof[0] = 0;       
+        par[0]=0;
+        par[1]=0;
         par[2] = 1e-50;
         //  Create the HelicalTrackFit for this helix
         _fit = new HelicalTrackFit(par, cov, chisq, ndof, smap, msmap);
         return FitStatus.Success;
     }
-
+    @Override
     public HelicalTrackFit getFit() {
         return _fit;
     }

Copied: java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrackConfirmerExtender.java (from r1342, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrackConfirmerExtender.java)
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrackConfirmerExtender.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrackConfirmerExtender.java	Mon Nov 10 18:19:04 2014
@@ -1,7 +1,7 @@
 /*
  * StraightTrackConfirmerExtender.java
  */
-package org.hps.recon.tracking.nobfield;
+package org.hps.recon.tracking.straighttracks;
 
 import java.util.ArrayList;
 import java.util.Collections;

Copied: java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrackFinder.java (from r1345, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrackFinder.java)
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrackFinder.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrackFinder.java	Mon Nov 10 18:19:04 2014
@@ -4,7 +4,7 @@
  * Created on January 22, 2008, 9:39 AM
  *
  */
-package org.hps.recon.tracking.nobfield;
+package org.hps.recon.tracking.straighttracks;
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -29,7 +29,7 @@
 public class StraightTrackFinder {
 
     private HitManager _hitmanager;
-    private StraightTrackFitter _helixfitter;
+    private StraightTrackFitter _fitter;
     private StraightTrackConfirmerExtender _confirmer;
     private List<SeedCandidate> _trackseeds;
     private ISeedTrackerDiagnostics _diag = null;
@@ -46,10 +46,10 @@
 
         //  Save the pointers to the hit manager and helix fitter classes
         _hitmanager = hitmanager;
-        _helixfitter = helixfitter;
+        _fitter = helixfitter;
 
         //  Instantiate the Confirmer/Extender and Seed Candidate merging classes
-        _confirmer = new StraightTrackConfirmerExtender(_hitmanager, _helixfitter);
+        _confirmer = new StraightTrackConfirmerExtender(_hitmanager, _fitter);
 
         //  Create a list of track seeds that have been found
         _trackseeds = new ArrayList<SeedCandidate>();
@@ -142,7 +142,7 @@
                         System.out.println(this.getClass().getSimpleName() + ": fit the candidate");
 
                     //  See if we can fit a helix to this seed candidate
-                    boolean success = _helixfitter.FitCandidate(seed, strategy);
+                    boolean success = _fitter.FitCandidate(seed, strategy);
 
                     if (!success)
                         continue;
@@ -151,7 +151,7 @@
                         System.out.println(this.getClass().getSimpleName() + ": fit success");
 
                     //  Save the helix fit
-                    seed.setHelix(_helixfitter.getHelix());
+                    seed.setHelix(_fitter.getHelix());
 
                     // Check the seed - hook for plugging in external constraint
                     if (_trackCheck != null)

Copied: java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrackFitter.java (from r1345, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrackFitter.java)
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrackFitter.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrackFitter.java	Mon Nov 10 18:19:04 2014
@@ -4,13 +4,13 @@
  * Created on January 22, 2008, 9:25 AM
  *
  */
-package org.hps.recon.tracking.nobfield;
+package org.hps.recon.tracking.straighttracks;
 
 import java.util.List;
 import java.util.Map;
 import org.hps.recon.tracking.MaterialManager;
 import org.hps.recon.tracking.MultipleScattering;
-import org.hps.recon.tracking.nobfield.StraightTrack2DFitter.FitStatus;
+import org.hps.recon.tracking.straighttracks.HPSFitter.FitStatus;
 import org.lcsim.fit.helicaltrack.HelicalTrackCross;
 import org.lcsim.fit.helicaltrack.HelicalTrackFit;
 import org.lcsim.fit.helicaltrack.HelicalTrackHit;
@@ -30,7 +30,8 @@
  */
 public class StraightTrackFitter {
 
-    private StraightTrack2DFitter _fitter = new StraightTrack2DFitter();
+//    private StraightTrack2DFitter _fitter = new StraightTrack2DFitter();
+     private HPSFitter _fitter = new StraightTrack2DFitter();
     protected MultipleScattering _scattering;
     private HelicalTrackFit _helix;//still use HelicalTrackFit...
     private MaterialManager _materialmanager;
@@ -48,6 +49,7 @@
     public StraightTrackFitter(MaterialManager materialmanager) {
         _materialmanager = materialmanager;
         _scattering = new MultipleScattering(_materialmanager);
+        _scattering.fixTrackMomentum(1.0);//fix the track momentum to 1 GeV
     }
 
     //   public boolean FitCandidate(SeedCandidate seed, SeedStrategy strategy) {
@@ -58,9 +60,9 @@
         //  Initialize fit results to null objects
         _helix = null;
 
-        //  Check that we have set the magnetic field
-        if (_bfield != 0.)
-            throw new RuntimeException("B Field should be zero for the straight track fitter");
+//        //  Check that we have set the magnetic field
+//        if (_bfield != 0.)
+//            throw new RuntimeException("B Field should be zero for the straight track fitter");
 
         //  Retrieve list of hits to be fit
         List<HelicalTrackHit> hitlist = seed.getHits();
@@ -237,6 +239,12 @@
 
     public void setDebug(boolean debug) {
         this._debug = debug;
-        _scattering.setDebug(true);
-    }
+        _scattering.setDebug(debug);
+    }
+    
+    public void setFitter(HPSFitter fitter ){
+        System.out.println("Setting fitter to "+fitter.getClass().getSimpleName());
+        _fitter=fitter;
+    }
+    
 }

Copied: java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrackReconDriver.java (from r1345, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrackReconDriver.java)
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTrackReconDriver.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTrackReconDriver.java	Mon Nov 10 18:19:04 2014
@@ -1,4 +1,4 @@
-package org.hps.recon.tracking.nobfield;
+package org.hps.recon.tracking.straighttracks;
 
 import hep.physics.vec.BasicHep3Vector;
 import java.util.List;

Copied: java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTracker.java (from r1345, java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTracker.java)
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/nobfield/StraightTracker.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/straighttracks/StraightTracker.java	Mon Nov 10 18:19:04 2014
@@ -4,7 +4,7 @@
  * Created on August 16, 2005, 8:54 AM
  *
  */
-package org.hps.recon.tracking.nobfield;
+package org.hps.recon.tracking.straighttracks;
 
 import hep.physics.vec.BasicHep3Vector;
 import hep.physics.vec.Hep3Vector;
@@ -29,7 +29,7 @@
 
 /**
  * Tracking algorithm based on forming straight track seeds from all 3-hit combinations,
- * confirming this tentantive track by requiring additional hits, and extending
+ * confirming this tenantive track by requiring additional hits, and extending
  * the track to additional layers. The operation of the algorithm is controlled
  * by a list of SeedStrategy that define the tracker layers to be used and the
  * cuts on the tracking algorithm.
@@ -44,7 +44,7 @@
     protected ISeedTrackerDiagnostics _diag = null;
     protected MaterialManager _materialmanager = new MaterialManager();
     protected HitManager _hitmanager;
-    protected StraightTrackFitter _helixfitter;
+    protected StraightTrackFitter _fitter;
     protected StraightTrackFinder _finder;
     protected MakeTracks _maketracks;
     protected Hep3Vector _IP = new BasicHep3Vector(0., 0., 0.);
@@ -77,18 +77,18 @@
         _strategylist = strategylist;
         //  Instantiate the hit manager
         _hitmanager = new HitManager();
-        //  Instantiate the material manager for HPS,  the helix fitter and seed track finder as tey depends on the material manager
+        //  Instantiate the material manager for HPS,  the  fitter and seed track finder as tey depends on the material manager
         if (useHPSMaterialManager) {
             MaterialSupervisor materialSupervisor = new MaterialSupervisor(includeMS);
             _materialmanager = materialSupervisor;
-            _helixfitter = new StraightTrackFitter(materialSupervisor);
+            _fitter = new StraightTrackFitter(materialSupervisor);
         } else {
             MaterialManager materialmanager = new MaterialManager(includeMS);
             _materialmanager = materialmanager; //mess around with types here...
-            _helixfitter = new StraightTrackFitter(materialmanager);
+            _fitter = new StraightTrackFitter(materialmanager);
         }
         //  Instantiate the Seed Finder
-        _finder = new StraightTrackFinder(_hitmanager, _helixfitter);
+        _finder = new StraightTrackFinder(_hitmanager, _fitter);
         //  Instantiate the Track Maker
         _maketracks = new MakeTracks();
     }
@@ -101,7 +101,7 @@
     public void setDebug(boolean debug) {
         _debug = true;
         _materialmanager.setDebug(debug);
-        _helixfitter.setDebug(debug);
+        _fitter.setDebug(debug);
         _finder.setDebug(debug);
     }
 
@@ -143,7 +143,7 @@
             //  Perform track finding under this strategy
             _finder.FindTracks(strategy, _bfield);
             if (_debug)
-                System.out.println("In " + this.getClass().getSimpleName() + ":  Number of Tracks Found=" + _finder.getTrackSeeds().size());
+                System.out.println("In " + this.getClass().getSimpleName() + ":  Number of Tracks Found=" + _finder.getTrackSeeds().size()+" for Strategy = "+strategy.getName());
             //  Make the timing plots if requested
             long time = System.currentTimeMillis();
             dtime = ((double) (time - last_time)) / 1000.;
@@ -156,7 +156,7 @@
         List<SeedCandidate> trackseeds = _finder.getTrackSeeds();
 
         if (_iterativeConfirmedFits > 0) {
-            // Iteratively re-fit tracks to take into account helix and hit position correlations
+            // Iteratively re-fit tracks to take into account  and hit position correlations
             if (_debug)
                 System.out.printf("%s: Iteratively improve %d seeds\n", this.getClass().getSimpleName(), trackseeds.size());
             List<SeedCandidate> seedsToRemove = new ArrayList<SeedCandidate>();
@@ -164,7 +164,7 @@
                 SeedStrategy strategy = seed.getSeedStrategy();
                 boolean success = false;
                 for (int iterFit = 0; iterFit < _iterativeConfirmedFits; ++iterFit)
-                    success = _helixfitter.FitCandidate(seed, strategy);
+                    success = _fitter.FitCandidate(seed, strategy);
                 if (!success)
                     seedsToRemove.add(seed);
 //                else if (_debug)
@@ -201,17 +201,16 @@
 
     @Override
     protected void detectorChanged(Detector detector) {
-
-        //  Only build the model when the detector is changed
+          //  Only build the model when the detector is changed
         _materialmanager.buildModel(detector);
 
-        //  Find the bfield and pass it to the helix fitter and diagnostic package
+        //  Find the bfield and pass it to the  fitter and diagnostic package
         if (!_forceBField)
             _bfield = detector.getFieldMap().getField(_IP).z();
 
         if (_diag != null)
             _diag.setBField(_bfield);
-        _helixfitter.setBField(_bfield);
+        _fitter.setBField(_bfield);
 
         //  Get the tracking radius
         _rtrk = _materialmanager.getRMax();
@@ -252,7 +251,7 @@
 
         //  Set the diagnostic package
         _diag = d;
-        _helixfitter.setDiagnostics(_diag);
+        _fitter.setDiagnostics(_diag);
         _finder.setDiagnostic(_diag);
 
         //  Pass the hit manager, material manager, and bfield to the diagnostic package
@@ -294,7 +293,7 @@
     }
 
     public void setReferencePoint(double xref, double yref) {
-        _helixfitter.setReferencePoint(xref, yref);
+        _fitter.setReferencePoint(xref, yref);
     }
 
     public void setSectorParams(boolean sector) {
@@ -325,5 +324,9 @@
         _materialmanager.setDefaultXPlaneUsage(useDefault);
 
     }
+    
+    public void setTrackFittingAlgorithm(HPSFitter fitter){
+        _fitter.setFitter(fitter);
+    }
 
 }

Copied: java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Axial.xml (from r1417, java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full.xml)
 =============================================================================
--- java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full.xml	(original)
+++ java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Axial.xml	Mon Nov 10 18:19:04 2014
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <StrategyList xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://lcsim.org/recon/tracking/seedtracker/strategybuilder/strategies.xsd">
     <TargetDetector>HPS-Full</TargetDetector>
-    <Strategy name="HelicalTrackHit Strategy">
+    <Strategy name="Top Tracks Strategy">
         
         <!--Cutoffs-->
         
@@ -26,5 +26,32 @@
              <Layer type="Extend" layer_number="11" detector_name="Tracker" be_flag="BARREL" />
         </Layers>
     </Strategy>
+     
+     <Strategy name="Bottom Tracks Strategy">
+        
+        <!--Cutoffs-->
+        
+        <MinPT>0.100</MinPT>
+        <MinHits>5</MinHits>
+        <MinConfirm>1</MinConfirm>
+        
+        <MaxDCA>4.0</MaxDCA>
+        <MaxZ0>4.0</MaxZ0>
+
+        <MaxChisq>25.0</MaxChisq>
+        <BadHitChisq>10.0</BadHitChisq>
+
+        <!--Layers-->
+
+        <Layers>                 
+            <Layer type="Seed" layer_number="6" detector_name="Tracker" be_flag="BARREL" />
+            <Layer type="Seed" layer_number="4" detector_name="Tracker" be_flag="BARREL" />
+            <Layer type="Seed" layer_number="2" detector_name="Tracker" be_flag="BARREL" />
+            <Layer type="Confirm" layer_number="8" detector_name="Tracker" be_flag="BARREL" />
+            <Layer type="Extend" layer_number="10" detector_name="Tracker" be_flag="BARREL" />
+             <Layer type="Extend" layer_number="12" detector_name="Tracker" be_flag="BARREL" />
+        </Layers>
+    </Strategy>
+    
 </StrategyList>
 

Copied: java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-L1-3.xml (from r1331, java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full.xml)
 =============================================================================
--- java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full.xml	(original)
+++ java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-L1-3.xml	Mon Nov 10 18:19:04 2014
@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <StrategyList xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://lcsim.org/recon/tracking/seedtracker/strategybuilder/strategies.xsd">
     <TargetDetector>HPS-Full</TargetDetector>
-    <Strategy name="HelicalTrackHit Strategy">
+    <Strategy name="Layers 1-3 Tracking">
         
         <!--Cutoffs-->
         
         <MinPT>0.100</MinPT>
-        <MinHits>5</MinHits>
-        <MinConfirm>1</MinConfirm>
+        <MinHits>3</MinHits>
+        <MinConfirm>0</MinConfirm>
         
         <MaxDCA>4.0</MaxDCA>
         <MaxZ0>4.0</MaxZ0>
@@ -20,10 +20,7 @@
         <Layers>                 
             <Layer type="Seed" layer_number="5" detector_name="Tracker" be_flag="BARREL" />
             <Layer type="Seed" layer_number="3" detector_name="Tracker" be_flag="BARREL" />
-            <Layer type="Seed" layer_number="1" detector_name="Tracker" be_flag="BARREL" />
-            <Layer type="Confirm" layer_number="7" detector_name="Tracker" be_flag="BARREL" />
-            <Layer type="Extend" layer_number="9" detector_name="Tracker" be_flag="BARREL" />
-             <Layer type="Extend" layer_number="11" detector_name="Tracker" be_flag="BARREL" />
+            <Layer type="Seed" layer_number="1" detector_name="Tracker" be_flag="BARREL" />          
         </Layers>
     </Strategy>
 </StrategyList>

Copied: java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-L4-6.xml (from r1331, java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full.xml)
 =============================================================================
--- java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full.xml	(original)
+++ java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-L4-6.xml	Mon Nov 10 18:19:04 2014
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <StrategyList xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://lcsim.org/recon/tracking/seedtracker/strategybuilder/strategies.xsd">
     <TargetDetector>HPS-Full</TargetDetector>
-    <Strategy name="HelicalTrackHit Strategy">
+    <Strategy name="Layers 4-6 Tracking">
         
         <!--Cutoffs-->
         
         <MinPT>0.100</MinPT>
-        <MinHits>5</MinHits>
-        <MinConfirm>1</MinConfirm>
+        <MinHits>3</MinHits>
+        <MinConfirm>0</MinConfirm>
         
-        <MaxDCA>4.0</MaxDCA>
-        <MaxZ0>4.0</MaxZ0>
+        <MaxDCA>10.0</MaxDCA>
+        <MaxZ0>10.0</MaxZ0>
 
         <MaxChisq>25.0</MaxChisq>
         <BadHitChisq>10.0</BadHitChisq>
@@ -18,12 +18,9 @@
         <!--Layers-->
 
         <Layers>                 
-            <Layer type="Seed" layer_number="5" detector_name="Tracker" be_flag="BARREL" />
-            <Layer type="Seed" layer_number="3" detector_name="Tracker" be_flag="BARREL" />
-            <Layer type="Seed" layer_number="1" detector_name="Tracker" be_flag="BARREL" />
-            <Layer type="Confirm" layer_number="7" detector_name="Tracker" be_flag="BARREL" />
-            <Layer type="Extend" layer_number="9" detector_name="Tracker" be_flag="BARREL" />
-             <Layer type="Extend" layer_number="11" detector_name="Tracker" be_flag="BARREL" />
+            <Layer type="Seed" layer_number="11" detector_name="Tracker" be_flag="BARREL" />
+            <Layer type="Seed" layer_number="9" detector_name="Tracker" be_flag="BARREL" />
+            <Layer type="Seed" layer_number="7" detector_name="Tracker" be_flag="BARREL" />          
         </Layers>
     </Strategy>
 </StrategyList>

Copied: java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-StraightTracks.xml (from r1331, java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full.xml)
 =============================================================================
--- java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full.xml	(original)
+++ java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-StraightTracks.xml	Mon Nov 10 18:19:04 2014
@@ -6,14 +6,14 @@
         <!--Cutoffs-->
         
         <MinPT>0.100</MinPT>
-        <MinHits>5</MinHits>
-        <MinConfirm>1</MinConfirm>
+        <MinHits>4</MinHits>
+        <MinConfirm>0</MinConfirm>
         
         <MaxDCA>4.0</MaxDCA>
         <MaxZ0>4.0</MaxZ0>
 
-        <MaxChisq>25.0</MaxChisq>
-        <BadHitChisq>10.0</BadHitChisq>
+        <MaxChisq>2500.0</MaxChisq>
+        <BadHitChisq>1000.0</BadHitChisq>
 
         <!--Layers-->
 

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