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