Commit in hps-java/src/main on MAIN
resources/org/lcsim/hps/steering/OnlineTracking.lcsim+22-81.8 -> 1.9
java/org/lcsim/hps/monitoring/svt/SVTEventInfo.java+181.4 -> 1.5
                                 /SVTHitReconstructionPlots.java+141.7 -> 1.8
                                 /SVTHitPulsePlots.java+18-91.9 -> 1.10
                                 /TrackingReconstructionPlots.java+305-211.2 -> 1.3
java/org/lcsim/hps/recon/vertexing/StraightLineTrack.java+14-11.1 -> 1.2
resources/org/lcsim/hps/recon/tracking/strategies/HPS-Test-4pt1.xml+2-21.3 -> 1.4
+393-41
7 modified files
Some changes to plots...many more tracking-related ones.

hps-java/src/main/resources/org/lcsim/hps/steering
OnlineTracking.lcsim 1.8 -> 1.9
diff -u -r1.8 -r1.9
--- OnlineTracking.lcsim	5 May 2012 11:48:43 -0000	1.8
+++ OnlineTracking.lcsim	8 May 2012 16:01:33 -0000	1.9
@@ -4,18 +4,30 @@
         <driver name="EventMarkerDriver"/>
         <driver name="SVTSetupDriver"/>
         <driver name="HPSSVTDAQMaps"/>
+         <driver name="EcalRawConverter"/>
+        <driver name="EcalClusterer"/>
         <driver name="RawTrackerHitMaker"/>
-<!--        <driver name="SVTEventPlots"/>    -->   
- <!--       <driver name="SVTPulsePlots"/> -->
+        <driver name="SVTEventPlots"/>    
+       <driver name="SVTPulsePlots"/> 
         <driver name="RawTrackerHitFitterDriver"/>    
        <driver name="TrackerHitDriver"/>           
-<!--       <driver name="SVTHitRecoPlots"/>    -->
+       <driver name="SVTHitRecoPlots"/>   
         <driver name="TrackerReconDriver"/>
         <driver name="TrackingReconstructionPlots"/>        
          <driver name="LCIOWriter"/>
         <driver name="CleanupDriver"/>
     </execute>    
     <drivers>
+          <driver name="EcalRawConverter" 
+                type="org.lcsim.hps.recon.ecal.HPSEcalRawConverterDriver">
+			<ecalCollectionName>EcalCalHits</ecalCollectionName>
+	</driver>
+        <driver name="EcalClusterer"
+                type="org.lcsim.hps.recon.ecal.HPSEcalClusterer">
+			<ecalName>Ecal</ecalName>
+			<ecalCollectionName>EcalCalHits</ecalCollectionName>
+	</driver>
+
           <driver name="RawTrackerHitFitterDriver"
                 type="org.lcsim.hps.recon.tracking.HPSRawTrackerHitFitterDriver">
            <rawHitCollectionName>SVTRawTrackerHits</rawHitCollectionName>  
@@ -28,23 +40,24 @@
 
          <driver name="SVTEventPlots"
                 type="org.lcsim.hps.monitoring.svt.SVTEventInfo">
-             <rawTrackerHitCollectionName>SVTRawTrackerHits</rawTrackerHitCollectionName>               
+                 <outputPlots>svtEventInfoPlots.aida</outputPlots>
         </driver>
 
         <driver name="SVTHitRecoPlots"
                 type="org.lcsim.hps.monitoring.svt.SVTHitReconstructionPlots">
              <rawTrackerHitCollectionName>SVTRawTrackerHits</rawTrackerHitCollectionName>   
              <fittedTrackerHitCollectionName>SVTFittedRawTrackerHits</fittedTrackerHitCollectionName>   
+             <outputPlots>svtHitRecoPlots.aida</outputPlots>
         </driver>
 
         <driver name="SVTPulsePlots"
                 type="org.lcsim.hps.monitoring.svt.SVTHitPulsePlots">
-        <rawTrackerHitCollectionName>SVTRawTrackerHits</rawTrackerHitCollectionName>   
+        <rawTrackerHitCollectionName>SVTRawTrackerHits</rawTrackerHitCollectionName>  
+             <outputPlots>svtPulsePlots.aida</outputPlots> 
         </driver>    
 
         <driver name="SVTEventDisplay"
                 type="org.lcsim.hps.monitoring.svt.SVTEventDisplay">
-        <rawTrackerHitCollectionName>SVTRawTrackerHits</rawTrackerHitCollectionName>   
         </driver>    
 
         <driver name="SVTSetupDriver"
@@ -67,8 +80,9 @@
        	<driver name="RawTrackerHitMaker" type="org.lcsim.hps.recon.tracking.SVTDataToRawTrackerHitDriver">
             <rawTrackerHitOutputCollectionName>SVTRawTrackerHits</rawTrackerHitOutputCollectionName>
         </driver>
-
- 	<driver name="TrackingReconstructionPlots" type="org.lcsim.hps.monitoring.svt.TrackingReconstructionPlots">
+        
+     	<driver name="TrackingReconstructionPlots" type="org.lcsim.hps.monitoring.svt.TrackingReconstructionPlots">
+                <outputPlots>trackingPlots.aida</outputPlots>
         </driver>
 
 

hps-java/src/main/java/org/lcsim/hps/monitoring/svt
SVTEventInfo.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- SVTEventInfo.java	3 May 2012 13:50:36 -0000	1.4
+++ SVTEventInfo.java	8 May 2012 16:01:33 -0000	1.5
@@ -1,10 +1,13 @@
 package org.lcsim.hps.monitoring.svt;
 
 import hep.aida.*;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.lcsim.detector.identifier.IIdentifier;
 import org.lcsim.detector.tracker.silicon.*;
 import org.lcsim.event.EventHeader;
@@ -28,10 +31,13 @@
     private List<SiSensor> sensors;
     IPlotter plotter;
     IPlotter plotter2;
+    private String outputPlots = null;
 
     public SVTEventInfo() {
     }
 
+    
+    
     public void setRawTrackerHitCollectionName(String rawTrackerHitCollectionName) {
         this.rawTrackerHitCollectionName = rawTrackerHitCollectionName;
     }
@@ -80,6 +86,11 @@
         plotter2.show();
     }
 
+    
+    public void setOutputPlots(String output) {
+        this.outputPlots = output;
+    }
+    
     public void process(EventHeader event) {
         if (event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) {
             List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
@@ -141,6 +152,13 @@
         if (plotter2 != null) {
             plotter2.hide();
         }
+
+     if (outputPlots != null)
+            try {
+                aida.saveAs(outputPlots);
+            } catch (IOException ex) {
+                Logger.getLogger(TrackingReconstructionPlots.class.getName()).log(Level.SEVERE, null, ex);
+            }
     }
 
     private boolean isHitOnTop(RawTrackerHit hit) {

hps-java/src/main/java/org/lcsim/hps/monitoring/svt
SVTHitReconstructionPlots.java 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- SVTHitReconstructionPlots.java	6 May 2012 08:57:38 -0000	1.7
+++ SVTHitReconstructionPlots.java	8 May 2012 16:01:33 -0000	1.8
@@ -1,10 +1,13 @@
 package org.lcsim.hps.monitoring.svt;
 
 import hep.aida.*;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.lcsim.detector.identifier.IIdentifier;
 import org.lcsim.detector.identifier.IIdentifierHelper;
 import org.lcsim.detector.tracker.silicon.SiSensor;
@@ -40,6 +43,7 @@
     IPlotter plotter4;
     IPlotter plotter5;
     private Map<String, Integer> sensorRegionMap;
+    private String outputPlots = null;
 
     protected void detectorChanged(Detector detector) {
         plotterFrame = new AIDAFrame();
@@ -126,6 +130,10 @@
     public SVTHitReconstructionPlots() {
     }
 
+    public void setOutputPlots(String output) {
+        this.outputPlots = output;
+    }
+
     public void setRawTrackerHitCollectionName(String rawTrackerHitCollectionName) {
         this.rawTrackerHitCollectionName = rawTrackerHitCollectionName;
     }
@@ -193,6 +201,12 @@
     }
 
     public void endOfData() {
+        if (outputPlots != null)
+            try {
+                aida.saveAs(outputPlots);
+            } catch (IOException ex) {
+                Logger.getLogger(TrackingReconstructionPlots.class.getName()).log(Level.SEVERE, null, ex);
+            }
         plotterFrame.dispose();
     }
 

hps-java/src/main/java/org/lcsim/hps/monitoring/svt
SVTHitPulsePlots.java 1.9 -> 1.10
diff -u -r1.9 -r1.10
--- SVTHitPulsePlots.java	6 May 2012 08:57:38 -0000	1.9
+++ SVTHitPulsePlots.java	8 May 2012 16:01:33 -0000	1.10
@@ -1,10 +1,13 @@
 package org.lcsim.hps.monitoring.svt;
 
 import hep.aida.*;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.lcsim.detector.identifier.IIdentifier;
 import org.lcsim.detector.identifier.IIdentifierHelper;
 import org.lcsim.detector.tracker.silicon.SiSensor;
@@ -33,7 +36,8 @@
     private IPlotter plotter2;
     private List<SiSensor> sensors;
  private Map<String, Integer> sensorRegionMap;
- 
+     private String outputPlots = null;
+
     protected void detectorChanged(Detector detector) {
         plotterFrame = new AIDAFrame();
         plotterFrame.setTitle("HPS SVT Pulse Plots");
@@ -90,6 +94,11 @@
 
     public SVTHitPulsePlots() {
     }
+    
+    
+    public void setOutputPlots(String output) {
+        this.outputPlots = output;
+    }
 
     public void setRawTrackerHitCollectionName(String rawTrackerHitCollectionName) {
         this.rawTrackerHitCollectionName = rawTrackerHitCollectionName;
@@ -127,13 +136,13 @@
     }
 
     public void endOfData() {
-        if (plotter3 != null) {
-            plotter3.hide();
-        }
-        if (plotter2 != null) {
-            plotter2.hide();
-        }
-
+        plotterFrame.dispose();
+          if (outputPlots != null)
+            try {
+                aida.saveAs(outputPlots);
+            } catch (IOException ex) {
+                Logger.getLogger(TrackingReconstructionPlots.class.getName()).log(Level.SEVERE, null, ex);
+            }
     }
 
     private boolean hasAdjacentHit(RawTrackerHit hit) {
@@ -158,7 +167,7 @@
         for (int i = 0; i < ns; i++) {
             aida.histogram2D(sensors.get(i).getName() + "_AdcVsChan").reset();
             aida.profile1D(sensors.get(i).getName() + "_pulse").reset();
-        }
+        }        
     }
     
     

hps-java/src/main/java/org/lcsim/hps/monitoring/svt
TrackingReconstructionPlots.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- TrackingReconstructionPlots.java	5 May 2012 11:48:43 -0000	1.2
+++ TrackingReconstructionPlots.java	8 May 2012 16:01:33 -0000	1.3
@@ -1,19 +1,34 @@
 package org.lcsim.hps.monitoring.svt;
 
 import hep.aida.*;
+import hep.physics.matrix.SymmetricMatrix;
+import hep.physics.vec.Hep3Vector;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.lcsim.detector.tracker.silicon.SiSensor;
-import org.lcsim.event.EventHeader;
-import org.lcsim.event.RawTrackerHit;
-import org.lcsim.event.Track;
+import org.lcsim.event.*;
+import org.lcsim.fit.helicaltrack.HelicalTrackCross;
+import org.lcsim.fit.helicaltrack.HelicalTrackFit;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.fit.helicaltrack.HelixUtils;
 import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.IDDecoder;
+import org.lcsim.hps.monitoring.AIDAFrame;
 import org.lcsim.hps.monitoring.Resettable;
+import org.lcsim.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.hps.recon.tracking.HPSFittedRawTrackerHit;
 import org.lcsim.hps.recon.tracking.HPSSVTCalibrationConstants;
+import org.lcsim.hps.recon.tracking.HPSSVTDAQMaps;
+import org.lcsim.hps.recon.vertexing.HelixConverter;
+import org.lcsim.hps.recon.vertexing.StraightLineTrack;
 import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
+import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
+import org.lcsim.recon.tracking.seedtracker.SeedTrack;
 import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
 
@@ -23,7 +38,7 @@
  */
 public class TrackingReconstructionPlots extends Driver implements Resettable {
 
-    private List<IPlotter> plotters = new ArrayList<IPlotter>();
+    private AIDAFrame plotterFrame;
     private AIDA aida = AIDA.defaultInstance();
     private String rawTrackerHitCollectionName = "SVTRawTrackerHits";
     private String fittedTrackerHitCollectionName = "SVTFittedRawTrackerHits";
@@ -32,36 +47,44 @@
     private String helicalTrackHitRelationsCollectionName = "HelicalTrackHitRelations";
     private String trackCollectionName = "MatchedTracks";
     private String trackerName = "Tracker";
+    String ecalSubdetectorName = "Ecal";
+    String ecalCollectionName = "EcalClusters";
     private Detector detector = null;
+    IDDecoder dec;
     private int eventCount;
     private List<SiSensor> sensors;
+    private double zAtConverter = -600;//mm
+    private String outputPlots = null;
     IPlotter plotter;
     IPlotter plotter2;
     IPlotter plotter3;
     IPlotter plotter4;
     IPlotter plotter5;
+    IPlotter plotter6;
+    double zEcal = 130;
+    IHistogram1D trkPx;
+    IHistogram1D nTracks;
 
     protected void detectorChanged(Detector detector) {
         this.detector = detector;
         aida.tree().cd("/");
-
+        plotterFrame = new AIDAFrame();
+        plotterFrame.setTitle("HPS Tracking Plots");
 
         sensors = detector.getSubdetector(trackerName).getDetectorElement().findDescendants(SiSensor.class);
 
-
         IAnalysisFactory fac = aida.analysisFactory();
-        plotter = fac.createPlotterFactory().create("HPS SVT Timing Plots");
-        plotters.add(plotter);
+        plotter = fac.createPlotterFactory().create("HPS Tracking Plots");
+        plotter.setTitle("Momentum");
         IPlotterStyle style = plotter.style();
         style.dataStyle().fillStyle().setColor("yellow");
         style.dataStyle().errorBarStyle().setVisible(false);
         plotter.createRegions(2, 2);
+        plotterFrame.addPlotter(plotter);
 
-
-
-        IHistogram1D trkPx = aida.histogram1D("Track Momentum (Px)", 25, -0.1, 0.1);
+        trkPx = aida.histogram1D("Track Momentum (Px)", 25, -0.25, 0.25);
         IHistogram1D trkPy = aida.histogram1D("Track Momentum (Py)", 25, -0.25, 0.25);
-        IHistogram1D trkPz = aida.histogram1D("Track Momentum (Pz)", 25, 0, 2.5);
+        IHistogram1D trkPz = aida.histogram1D("Track Momentum (Pz)", 25, 0, 3.5);
         IHistogram1D trkChi2 = aida.histogram1D("Track Chi2", 25, 0, 25.0);
 
         plotter.region(0).plot(trkPx);
@@ -69,13 +92,141 @@
         plotter.region(2).plot(trkPz);
         plotter.region(3).plot(trkChi2);
 
-        plotter.show();
+
+        plotter2 = fac.createPlotterFactory().create("HPS Tracking Plots");
+        plotter2.setTitle("Other");
+        plotterFrame.addPlotter(plotter2);
+        IPlotterStyle style2 = plotter2.style();
+        style2.dataStyle().fillStyle().setColor("yellow");
+        style2.dataStyle().errorBarStyle().setVisible(false);
+        plotter2.createRegions(2, 2);
+        IHistogram1D xAtConverter = aida.histogram1D("X (mm) @ Z=-60cm", 25, -20, 20);
+        IHistogram1D yAtConverter = aida.histogram1D("Y (mm) @ Z=-60cm", 25, -50, 50);
+        IHistogram1D nHits = aida.histogram1D("Hits per Track", 2, 4, 6);
+        nTracks = aida.histogram1D("Tracks per Event", 3, 0, 3);
+        plotter2.region(0).plot(xAtConverter);
+        plotter2.region(1).plot(yAtConverter);
+        plotter2.region(2).plot(nHits);
+        plotter2.region(3).plot(nTracks);
+
+
+        plotter3 = fac.createPlotterFactory().create("HPS Residual Plots");
+        plotter3.setTitle("Residuals");
+        plotterFrame.addPlotter(plotter3);
+        IPlotterStyle style3 = plotter3.style();
+        style3.dataStyle().fillStyle().setColor("yellow");
+        style3.dataStyle().errorBarStyle().setVisible(false);
+        plotter3.createRegions(5, 2);
+
+        double minResidY = -1;
+        double maxResidY = 1;
+
+        double minResidX = -25;
+        double maxResidX = 25;
+
+        IHistogram1D mod1ResX = aida.histogram1D("Module 1 Residual X(mm)", 25, minResidX, maxResidX);
+        IHistogram1D mod1ResY = aida.histogram1D("Module 1 Residual Y(mm)", 25, minResidY, maxResidY);
+
+        IHistogram1D mod2ResX = aida.histogram1D("Module 2 Residual X(mm)", 25, minResidX, maxResidX);
+        IHistogram1D mod2ResY = aida.histogram1D("Module 2 Residual Y(mm)", 25, minResidY, maxResidY);
+
+        IHistogram1D mod3ResX = aida.histogram1D("Module 3 Residual X(mm)", 25, minResidX, maxResidX);
+        IHistogram1D mod3ResY = aida.histogram1D("Module 3 Residual Y(mm)", 25, minResidY, maxResidY);
+
+        IHistogram1D mod4ResX = aida.histogram1D("Module 4 Residual X(mm)", 25, minResidX, maxResidX);
+        IHistogram1D mod4ResY = aida.histogram1D("Module 4 Residual Y(mm)", 25, minResidY, maxResidY);
+
+        IHistogram1D mod5ResX = aida.histogram1D("Module 5 Residual X(mm)", 25, minResidX, maxResidX);
+        IHistogram1D mod5ResY = aida.histogram1D("Module 5 Residual Y(mm)", 25, minResidY, maxResidY);
+
+        plotter3.region(0).plot(mod1ResX);
+        plotter3.region(2).plot(mod2ResX);
+        plotter3.region(4).plot(mod3ResX);
+        plotter3.region(6).plot(mod4ResX);
+        plotter3.region(8).plot(mod5ResX);
+
+        plotter3.region(1).plot(mod1ResY);
+        plotter3.region(3).plot(mod2ResY);
+        plotter3.region(5).plot(mod3ResY);
+        plotter3.region(7).plot(mod4ResY);
+        plotter3.region(9).plot(mod5ResY);
+
+
+        plotter4 = fac.createPlotterFactory().create("HPS Track and ECal Plots");
+        plotter4.setTitle("Track and ECal Correlations");
+        plotterFrame.addPlotter(plotter4);
+        IPlotterStyle style4 = plotter4.style();
+        style4.setParameter("hist2DStyle", "colorMap");
+        style4.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        style4.dataStyle().fillStyle().setColor("yellow");
+        style4.dataStyle().errorBarStyle().setVisible(false);
+        plotter4.createRegions(2, 2);
+
+        IHistogram2D eVsP = aida.histogram2D("Energy Vs Momentum", 50, 0, 5000, 50, 0, 3500);
+        IHistogram1D eOverP = aida.histogram1D("Energy Over Momentum", 50, 0, 5);
+
+        IHistogram1D distX = aida.histogram1D("deltaX", 50, -50, 50);
+        IHistogram1D distY = aida.histogram1D("deltaY", 50, -50, 50);
+
+        plotter4.region(0).plot(eVsP);
+        plotter4.region(1).plot(eOverP);
+        plotter4.region(2).plot(distX);
+        plotter4.region(3).plot(distY);
+
+
+
+        plotter5 = fac.createPlotterFactory().create("HPS Hit Positions");
+        plotter5.setTitle("Hit Positions");
+        plotterFrame.addPlotter(plotter5);
+        IPlotterStyle style5 = plotter5.style();
+        style5.setParameter("hist2DStyle", "colorMap");
+        style5.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        style5.dataStyle().fillStyle().setColor("yellow");
+        style5.dataStyle().errorBarStyle().setVisible(false);
+        plotter5.createRegions(1, 2);
+
+        IHistogram1D charge = aida.histogram1D("Charge", 3, -1, 1);
+
+        IHistogram2D l1Pos = aida.histogram2D("Layer 1 HTH Position", 50, -55, 55, 55, -25, 25);
+        IHistogram2D l7Pos = aida.histogram2D("Layer 7 HTH Position", 50, -55, 55, 55, -25, 25);
+
+        plotter5.region(0).plot(l1Pos);
+        plotter5.region(1).plot(l7Pos);
+
+
+        plotter6 = fac.createPlotterFactory().create("HPS ECAL Hit Positions");
+        plotter6.setTitle("ECAL Positions");
+        plotterFrame.addPlotter(plotter6);
+        IPlotterStyle style6 = plotter6.style();
+        style6.setParameter("hist2DStyle", "colorMap");
+        style6.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        style6.dataStyle().fillStyle().setColor("yellow");
+        style6.dataStyle().errorBarStyle().setVisible(false);
+        plotter6.createRegions(1, 2);
+
+
+        IHistogram2D topECal = aida.histogram2D("Top ECal Cluster Position", 50, -400, 400, 10, 0, 100);
+        IHistogram2D botECal = aida.histogram2D("Bottom ECal Cluster Position", 50, -400, 400, 10, -100, 0);
+
+        plotter6.region(0).plot(topECal);
+        plotter6.region(1).plot(botECal);
+
+
+
+        plotterFrame.pack();
+        plotterFrame.setVisible(true);
+
+
 
     }
 
     public TrackingReconstructionPlots() {
     }
 
+    public void setOutputPlots(String output) {
+        this.outputPlots = output;
+    }
+
     public void setRawTrackerHitCollectionName(String rawTrackerHitCollectionName) {
         this.rawTrackerHitCollectionName = rawTrackerHitCollectionName;
     }
@@ -97,35 +248,168 @@
     }
 
     public void process(EventHeader event) {
+        aida.tree().cd("/");
+        if (!event.hasCollection(HelicalTrackHit.class, helicalTrackHitCollectionName)) {
+//            System.out.println(helicalTrackHitCollectionName + " does not exist; skipping event");
+            return;
+        }
+
+
+        List<HelicalTrackHit> hthList = event.get(HelicalTrackHit.class, helicalTrackHitCollectionName);
+        for (HelicalTrackHit hth : hthList) {
+            HelicalTrackCross htc = (HelicalTrackCross) hth;
+            //These Helical Track Hits are in the JLAB frame
+            htc.resetTrackDirection();
+            double x = htc.getPosition()[0];
+            double y = htc.getPosition()[1];
+            SiSensor sensor = ((SiSensor) ((RawTrackerHit) htc.getRawHits().get(0)).getDetectorElement());
+            if (HPSSVTDAQMaps.sensorToTopLayer.containsKey(sensor)) {
+                Hep3Vector sensorPos = ((SiSensor) ((RawTrackerHit) htc.getRawHits().get(0)).getDetectorElement()).getGeometry().getPosition();
+                if (htc.Layer() == 1) {
+//                    System.out.println(sensorPos.toString());
+//                    System.out.println("Hit X = " + x + "; Hit Y = " + y);
+
+                    aida.histogram2D("Layer 1 HTH Position").fill(x - sensorPos.x(), y - sensorPos.y());
+                }
+                if (htc.Layer() == 7)
+                    aida.histogram2D("Layer 7 HTH Position").fill(x - sensorPos.x(), y - sensorPos.y());
+            }
+        }
+
         if (!event.hasCollection(Track.class, trackCollectionName)) {
-            System.out.println(trackCollectionName + " does not exist; skipping event");
+//            System.out.println(trackCollectionName + " does not exist; skipping event");
+            aida.histogram1D("Number Tracks/Event").fill(0);
             return;
         }
 
+
+
         List<Track> tracks = event.get(Track.class, trackCollectionName);
+        nTracks.fill(tracks.size());
+        if (event.hasCollection(HPSEcalCluster.class, ecalCollectionName) && tracks.size() > 0) {
+            List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalCollectionName);
+            for (HPSEcalCluster cluster : clusters) {
+//                System.out.println("cluser position = ("+cluster.getPosition()[0]+","+cluster.getPosition()[1]+") with energy = "+cluster.getEnergy());
+                if (cluster.getEnergy() > 100) {
+                    if (cluster.getPosition()[1] > 0)
+                        aida.histogram2D("Top ECal Cluster Position").fill(cluster.getPosition()[0], cluster.getPosition()[1], cluster.getEnergy());
+                    if (cluster.getPosition()[1] < 0)
+                        aida.histogram2D("Bottom ECal Cluster Position").fill(cluster.getPosition()[0], cluster.getPosition()[1], cluster.getEnergy());
+                }
+            }
+        }
         for (Track trk : tracks) {
             aida.histogram1D("Track Momentum (Px)").fill(trk.getPY());
             aida.histogram1D("Track Momentum (Py)").fill(trk.getPZ());
             aida.histogram1D("Track Momentum (Pz)").fill(trk.getPX());
             aida.histogram1D("Track Chi2").fill(trk.getChi2());
-        }
 
+            aida.histogram1D("Hits per Track").fill(trk.getTrackerHits().size());
 
+            SeedTrack stEle = (SeedTrack) trk;
+            SeedCandidate seedEle = stEle.getSeedCandidate();
+            HelicalTrackFit ht = seedEle.getHelix();
+            HelixConverter converter = new HelixConverter(0);
+            StraightLineTrack slt = converter.Convert(ht);
+
+            aida.histogram1D("X (mm) @ Z=-60cm").fill(slt.getYZAtX(zAtConverter)[1]);  //remember the tracker-->jlab 
+            aida.histogram1D("Y (mm) @ Z=-60cm").fill(slt.getYZAtX(zAtConverter)[0]);  //coordinate swap...
+            List<TrackerHit> hitsOnTrack = trk.getTrackerHits();
+            for (TrackerHit hit : hitsOnTrack) {
+                HelicalTrackHit htc = (HelicalTrackHit) hit;
+                double sHit = ht.PathMap().get(htc);
+                Hep3Vector posonhelix = HelixUtils.PointOnHelix(ht, sHit);
+                double yTr = posonhelix.y();
+                double zTr = posonhelix.z();
+                int layer = htc.Layer();
+                String modNum = "Module X ";
+                if (layer == 1)
+                    modNum = "Module 1 ";
+                if (layer == 3)
+                    modNum = "Module 2 ";
+                if (layer == 5)
+                    modNum = "Module 3 ";
+                if (layer == 7)
+                    modNum = "Module 4 ";
+                if (layer == 9)
+                    modNum = "Module 5 ";
+                SymmetricMatrix cov = htc.getCorrectedCovMatrix();
+//                System.out.println("errX = " + Math.sqrt(cov.e(1, 1)) + "; errY = " + Math.sqrt(cov.e(2, 2)));
+//                System.out.println("Measured X " + hit.getPosition()[1] + "; Track X = " + yTr);
+//                System.out.println("Measured Y " + hit.getPosition()[2] + "; Track Y = " + zTr);
+//                System.out.println(htc.getCorrectedCovMatrix().toString());
+
+                aida.histogram1D(modNum + "Residual X(mm)").fill(hit.getPosition()[1] - yTr);//these hits should be rotated track hits already
+                aida.histogram1D(modNum + "Residual Y(mm)").fill(hit.getPosition()[2] - zTr);//these hits should be rotated track hits already
+            }
+            List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalCollectionName);
+//            System.out.println("Number of ECAL clusters=" + clusters.size());
+            double sECAL = HelixUtils.PathToXPlane(ht, zEcal, 3000, 1).get(0);
+            Hep3Vector posonhelix = HelixUtils.PointOnHelix(ht, sECAL);//position in tracker coordinates!
+            HPSEcalCluster clust = findClosestCluster(posonhelix, clusters);
+            if (clust != null) {
+                aida.histogram2D("Energy Vs Momentum").fill(clust.getEnergy(), trk.getPX() * 1000.0);
+                aida.histogram1D("Energy Over Momentum").fill(clust.getEnergy() / (trk.getPX() * 1000.0));
+                aida.histogram1D("deltaX").fill(clust.getPosition()[0] - posonhelix.y());
+                aida.histogram1D("deltaY").fill(clust.getPosition()[1] - posonhelix.z());
+            }
+        }
     }
 
     public void endOfData() {
-        if (plotter != null) {
-            plotter.hide();
+        if (outputPlots != null)
+            try {
+                aida.saveAs(outputPlots);
+            } catch (IOException ex) {
+                Logger.getLogger(TrackingReconstructionPlots.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        plotterFrame.dispose();
+    }
+
+    private HPSEcalCluster findClosestCluster(Hep3Vector posonhelix, List<HPSEcalCluster> clusters) {
+        HPSEcalCluster closest = null;
+        double minDist = 9999;
+        for (HPSEcalCluster cluster : clusters) {
+            double[] clPos = cluster.getPosition();
+            double clEne = cluster.getEnergy();
+//            double dist = Math.sqrt(Math.pow(clPos[0] - posonhelix.y(), 2) + Math.pow(clPos[1] - posonhelix.z(), 2)); //coordinates!!!
+            double dist = Math.sqrt(Math.pow(clPos[1] - posonhelix.z(), 2)); //coordinates!!!
+            if (dist < minDist && clEne > 500) {
+                closest = cluster;
+                minDist = dist;
+            }
+//                    if(cluster.getEnergy()/10>500)
         }
+//        System.out.println("Found a cluster..." + minDist);
 
+        return closest;
 
     }
 
     @Override
     public void reset() {
-        int ns = sensors.size();
-        for (int i = 0; i < ns; i++) {
-            aida.histogram1D(sensors.get(i).getName() + "_timing").reset();
-        }
+        aida.histogram1D("Track Momentum (Px)").reset();
+        aida.histogram1D("Track Momentum (Py)").reset();
+        aida.histogram1D("Track Momentum (Pz)").reset();
+        aida.histogram1D("Track Chi2").reset();
+        aida.histogram1D("Tracks per Event").reset();
+        aida.histogram1D("X @ Z=-60cm").reset();
+        aida.histogram1D("Y @ Z=-60cm").reset();
+        aida.histogram1D("Hits per Track").reset();
+        aida.histogram1D("Module 1 Residual X(mm)").reset();
+        aida.histogram1D("Module 1 Residual Y(mm)").reset();
+        aida.histogram1D("Module 2 Residual X(mm)").reset();
+        aida.histogram1D("Module 2 Residual Y(mm)").reset();
+        aida.histogram1D("Module 3 Residual X(mm)").reset();
+        aida.histogram1D("Module 3 Residual Y(mm)").reset();
+        aida.histogram1D("Module 4 Residual X(mm)").reset();
+        aida.histogram1D("Module 4 Residual Y(mm)").reset();
+        aida.histogram1D("Module 5 Residual X(mm)").reset();
+        aida.histogram1D("Module 5 Residual Y(mm)").reset();
+
+        aida.histogram2D("Energy Vs Momentum").reset();
+        aida.histogram1D("Energy Over Momentum").reset();
+        aida.histogram1D("deltaX").reset();
+        aida.histogram1D("deltaY").reset();
     }
 }

hps-java/src/main/java/org/lcsim/hps/recon/vertexing
StraightLineTrack.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- StraightLineTrack.java	1 Jun 2011 17:10:13 -0000	1.1
+++ StraightLineTrack.java	8 May 2012 16:01:33 -0000	1.2
@@ -144,7 +144,11 @@
     public double[] TargetYZ() {
         return _yzT;
     }
-
+    
+    public double[] getYZAtX(double xVal){
+        return calculateYZAtX(xVal);
+    }   
+    
     /**
      * Return the covariance matrix.
      *
@@ -165,4 +169,13 @@
         _yzT[0] = _y0 - _x0 * _dydx;
         _yzT[1] = _z0 - _x0 * _dzdx;
     }
+    
+    private double[] calculateYZAtX(double xVal) {
+        double[] yzAtX={-66,-66};
+        if(xVal>_x0)   //_x0 is where the field region starts...if xVal is bigger than this, need to get position on helix
+            return yzAtX;
+        yzAtX[0] = _y0 + (xVal-_x0) * _dydx;
+        yzAtX[1] = _z0 + (xVal-_x0) * _dzdx;
+        return yzAtX;
+    }
 }

hps-java/src/main/resources/org/lcsim/hps/recon/tracking/strategies
HPS-Test-4pt1.xml 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- HPS-Test-4pt1.xml	5 May 2012 11:48:43 -0000	1.3
+++ HPS-Test-4pt1.xml	8 May 2012 16:01:33 -0000	1.4
@@ -9,8 +9,8 @@
         <MinHits>4</MinHits>
         <MinConfirm>1</MinConfirm>
         
-        <MaxDCA>25.0</MaxDCA>
-        <MaxZ0>45.0</MaxZ0>
+        <MaxDCA>90.0</MaxDCA>
+        <MaxZ0>90.0</MaxZ0>
 
         <MaxChisq>25.0</MaxChisq>
         <BadHitChisq>10.0</BadHitChisq>
CVSspam 0.2.12


Use REPLY-ALL to reply to list

To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1