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

HPS-SVN December 2015

Subject:

r4066 - in /java/branches/jeremy-dev: ./ analysis/ conditions/ datacat-client/ detector-data/ detector-data/detectors/HPS-EngRun2015-Nominal-v3-5-0-fieldmap/ detector-data/detectors/HPS-EngRun2015-Nominal-v3-5-1-fieldmap/ detector-data/detectors/HPS-EngRun2015-Nominal-v3-5-2-fieldmap/ detector-data/detectors/HPS-EngRun2015-Nominal-v4-4-fieldmap/ detector-data/detectors/HPS-PhysicsRun2016-6pt6-v0/ detector-model/ detector-model/src/main/java/org/lcsim/detector/tracker/silicon/ detector-model/src/test/java/org/hps/detector/svt/ distribution/ ecal-event-display/ ecal-readout-sim/ ecal-recon/ ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ evio/ job/ logging/ monitoring-app/ monitoring-drivers/ monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/ monitoring-util/ parent/ plugin/ recon/ recon/src/main/java/org/hps/recon/filtering/ recon/src/main/java/org/hps/recon/particle/ recon/src/main/java/org/hps/recon/utils/ record-util/ steering-files/ steering-files/src/main/resources/org/hps/steering/monitoring/ steering-files/src/main/resources/org/hps/steering/recon/ steering-files/src/main/resources/org/hps/steering/users/baltzell/ steering-files/src/main/resources/org/hps/steering/users/meeg/ tracking/ tracking/src/main/java/org/hps/recon/tracking/ tracking/src/main/java/org/hps/recon/tracking/gbl/ tracking/src/main/java/org/hps/recon/tracking/straight/ users/ users/src/main/java/org/hps/users/meeg/ users/src/main/java/org/hps/users/phansson/ util/

From:

[log in to unmask]

Reply-To:

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

Date:

Wed, 16 Dec 2015 23:32:18 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (3570 lines)

Author: [log in to unmask]
Date: Wed Dec 16 15:32:00 2015
New Revision: 4066

Log:
Merge in all trunk changes to dev branch.

Added:
    java/branches/jeremy-dev/detector-data/detectors/HPS-EngRun2015-Nominal-v3-5-0-fieldmap/
      - copied from r4065, java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v3-5-0-fieldmap/
    java/branches/jeremy-dev/detector-data/detectors/HPS-EngRun2015-Nominal-v3-5-1-fieldmap/
      - copied from r4065, java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v3-5-1-fieldmap/
    java/branches/jeremy-dev/detector-data/detectors/HPS-EngRun2015-Nominal-v3-5-2-fieldmap/
      - copied from r4065, java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v3-5-2-fieldmap/
    java/branches/jeremy-dev/detector-data/detectors/HPS-EngRun2015-Nominal-v4-4-fieldmap/
      - copied from r4065, java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v4-4-fieldmap/
    java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-6pt6-v0/
      - copied from r4058, java/trunk/detector-data/detectors/HPS-PhysicsRun2016-6pt6-v0/
    java/branches/jeremy-dev/recon/src/main/java/org/hps/recon/filtering/PulserSingle0Pair0TriggerFilterDriver.java
      - copied unchanged from r4058, java/trunk/recon/src/main/java/org/hps/recon/filtering/PulserSingle0Pair0TriggerFilterDriver.java
    java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngineeringRun2015FullRecon.lcsim
      - copied unchanged from r4058, java/trunk/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngineeringRun2015FullRecon.lcsim
    java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/users/meeg/TridentMCSkim.lcsim
      - copied unchanged from r4058, java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/TridentMCSkim.lcsim
Modified:
    java/branches/jeremy-dev/   (props changed)
    java/branches/jeremy-dev/analysis/pom.xml
    java/branches/jeremy-dev/conditions/   (props changed)
    java/branches/jeremy-dev/conditions/pom.xml
    java/branches/jeremy-dev/datacat-client/pom.xml
    java/branches/jeremy-dev/detector-data/pom.xml
    java/branches/jeremy-dev/detector-model/pom.xml
    java/branches/jeremy-dev/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsSiSensor.java
    java/branches/jeremy-dev/detector-model/src/test/java/org/hps/detector/svt/SvtDetectorSetupTest.java
    java/branches/jeremy-dev/distribution/   (props changed)
    java/branches/jeremy-dev/distribution/pom.xml
    java/branches/jeremy-dev/ecal-event-display/pom.xml
    java/branches/jeremy-dev/ecal-readout-sim/pom.xml
    java/branches/jeremy-dev/ecal-recon/pom.xml
    java/branches/jeremy-dev/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterEnergyCorrection.java
    java/branches/jeremy-dev/evio/pom.xml
    java/branches/jeremy-dev/job/pom.xml
    java/branches/jeremy-dev/logging/pom.xml
    java/branches/jeremy-dev/monitoring-app/   (props changed)
    java/branches/jeremy-dev/monitoring-app/pom.xml
    java/branches/jeremy-dev/monitoring-drivers/pom.xml
    java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java
    java/branches/jeremy-dev/monitoring-util/pom.xml
    java/branches/jeremy-dev/parent/pom.xml
    java/branches/jeremy-dev/plugin/pom.xml
    java/branches/jeremy-dev/pom.xml
    java/branches/jeremy-dev/recon/pom.xml
    java/branches/jeremy-dev/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java
    java/branches/jeremy-dev/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java
    java/branches/jeremy-dev/record-util/pom.xml
    java/branches/jeremy-dev/steering-files/pom.xml
    java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim
    java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim
    java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim
    java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015STRecon.lcsim
    java/branches/jeremy-dev/tracking/pom.xml
    java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java
    java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java
    java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java
    java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java
    java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutputDriver.java
    java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java
    java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/straight/STUtils.java
    java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/straight/StraightThroughAnalysisDriver.java
    java/branches/jeremy-dev/users/pom.xml
    java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/TridentMCFilter.java
    java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java
    java/branches/jeremy-dev/util/pom.xml

Modified: java/branches/jeremy-dev/analysis/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/analysis/pom.xml	(original)
+++ java/branches/jeremy-dev/analysis/pom.xml	Wed Dec 16 15:32:00 2015
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/analysis/</url>

Modified: java/branches/jeremy-dev/conditions/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/conditions/pom.xml	(original)
+++ java/branches/jeremy-dev/conditions/pom.xml	Wed Dec 16 15:32:00 2015
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/conditions/</url>

Modified: java/branches/jeremy-dev/datacat-client/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/datacat-client/pom.xml	(original)
+++ java/branches/jeremy-dev/datacat-client/pom.xml	Wed Dec 16 15:32:00 2015
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/datacat-client/</url>

Modified: java/branches/jeremy-dev/detector-data/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/detector-data/pom.xml	(original)
+++ java/branches/jeremy-dev/detector-data/pom.xml	Wed Dec 16 15:32:00 2015
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/detector-data/</url>

Modified: java/branches/jeremy-dev/detector-model/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/detector-model/pom.xml	(original)
+++ java/branches/jeremy-dev/detector-model/pom.xml	Wed Dec 16 15:32:00 2015
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <build>
         <plugins>

Modified: java/branches/jeremy-dev/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsSiSensor.java
 =============================================================================
--- java/branches/jeremy-dev/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsSiSensor.java	(original)
+++ java/branches/jeremy-dev/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsSiSensor.java	Wed Dec 16 15:32:00 2015
@@ -449,6 +449,8 @@
         buffer.append("\n");
         buffer.append("----------------------------------");
         buffer.append("\n");
+        buffer.append("Feb ID: " + this.getFebID() + "\n");
+        buffer.append("Feb Hybrid ID: " + this.getFebHybridID() + "\n");
         buffer.append("Layer: " + this.getLayerNumber() + "\n");
         buffer.append("Module: " + this.getModuleNumber() + "\n");
         buffer.append("Number of readout strips: " + this.getReadoutElectrodes(ChargeCarrier.HOLE).getNCells() + "\n");

Modified: java/branches/jeremy-dev/detector-model/src/test/java/org/hps/detector/svt/SvtDetectorSetupTest.java
 =============================================================================
--- java/branches/jeremy-dev/detector-model/src/test/java/org/hps/detector/svt/SvtDetectorSetupTest.java	(original)
+++ java/branches/jeremy-dev/detector-model/src/test/java/org/hps/detector/svt/SvtDetectorSetupTest.java	Wed Dec 16 15:32:00 2015
@@ -63,7 +63,8 @@
 
         final DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
         conditionsManager.addConditionsListener(new SvtDetectorSetup());
-        conditionsManager.setDetector("HPS-Proposal2014-v7-2pt2", 0);
+        //conditionsManager.setDetector("HPS-Proposal2014-v7-2pt2", 0);
+        conditionsManager.setDetector("HPS-EngRun2015-Nominal-v3", 5772);
 
         // Get the detector.
         final Detector detector = conditionsManager.getCachedConditions(Detector.class, "compact.xml").getCachedData();

Modified: java/branches/jeremy-dev/distribution/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/distribution/pom.xml	(original)
+++ java/branches/jeremy-dev/distribution/pom.xml	Wed Dec 16 15:32:00 2015
@@ -13,7 +13,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>    
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/distribution/</url>

Modified: java/branches/jeremy-dev/ecal-event-display/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/ecal-event-display/pom.xml	(original)
+++ java/branches/jeremy-dev/ecal-event-display/pom.xml	Wed Dec 16 15:32:00 2015
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/ecal-event-display/</url>

Modified: java/branches/jeremy-dev/ecal-readout-sim/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/ecal-readout-sim/pom.xml	(original)
+++ java/branches/jeremy-dev/ecal-readout-sim/pom.xml	Wed Dec 16 15:32:00 2015
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/ecal-readout-sim/</url>

Modified: java/branches/jeremy-dev/ecal-recon/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/ecal-recon/pom.xml	(original)
+++ java/branches/jeremy-dev/ecal-recon/pom.xml	Wed Dec 16 15:32:00 2015
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/ecal-recon/</url>

Modified: java/branches/jeremy-dev/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterEnergyCorrection.java
 =============================================================================
--- java/branches/jeremy-dev/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterEnergyCorrection.java	(original)
+++ java/branches/jeremy-dev/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterEnergyCorrection.java	Wed Dec 16 15:32:00 2015
@@ -22,9 +22,9 @@
 public final class ClusterEnergyCorrection {
 	
 	// Variables for electron energy corrections.
-	static final double par0_em = 0.009051;
-    static final double par1_em[] = {35,-0.1322,-0.0005613,16.42,0.3431,-2.021,74.85,-0.3626};
-    static final double par2_em[] = {35, 0.9652, 0.003234, 18.06, 0.2592, 8.586, 75.08, -0.3771};
+	static final double par0_em = 0.02203;
+    static final double par1_em[] = {35,-0.1795,-0.0005613,16.42,0.3431,-2.021,74.85,-0.3626};
+    static final double par2_em[] = {35, 1.011, 0.003234, 18.06, 0.2592, 8.586, 75.08, -0.3771};
 
     // Variables for positron energy corrections.
     static final double par0_ep = 0.01307;

Modified: java/branches/jeremy-dev/evio/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/evio/pom.xml	(original)
+++ java/branches/jeremy-dev/evio/pom.xml	Wed Dec 16 15:32:00 2015
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/evio/</url>

Modified: java/branches/jeremy-dev/job/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/job/pom.xml	(original)
+++ java/branches/jeremy-dev/job/pom.xml	Wed Dec 16 15:32:00 2015
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/job/</url>

Modified: java/branches/jeremy-dev/logging/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/logging/pom.xml	(original)
+++ java/branches/jeremy-dev/logging/pom.xml	Wed Dec 16 15:32:00 2015
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/logging/</url>

Modified: java/branches/jeremy-dev/monitoring-app/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/monitoring-app/pom.xml	(original)
+++ java/branches/jeremy-dev/monitoring-app/pom.xml	Wed Dec 16 15:32:00 2015
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/monitoring-app/</url>

Modified: java/branches/jeremy-dev/monitoring-drivers/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/monitoring-drivers/pom.xml	(original)
+++ java/branches/jeremy-dev/monitoring-drivers/pom.xml	Wed Dec 16 15:32:00 2015
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/monitoring-drivers/</url>

Modified: java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java
 =============================================================================
--- java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java	(original)
+++ java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java	Wed Dec 16 15:32:00 2015
@@ -69,13 +69,24 @@
 
     private boolean dropSmallHitEvents = true;
     private static final boolean debug = false;
-    private static final boolean doPerChannelSamplePlots = false;
-    private static final boolean saveRootFile = false;
+    private boolean doPerChannelSamplePlots = false;
+    private int maxSampleCutForNoise = -1;
+    private boolean saveRootFile = false;
     private String outputRootFilename = "";
+    private boolean showPlots = true;
 
     public void setDropSmallHitEvents(boolean dropSmallHitEvents) {
         this.dropSmallHitEvents = dropSmallHitEvents;
     }
+
+    public void setDoPerChannelsSampleplots(boolean val) {
+        doPerChannelSamplePlots = val;
+    }
+
+    public void setSaveRootFile(boolean save) {
+        saveRootFile = save;
+    }
+
 
     private int computePlotterRegion(HpsSiSensor sensor) {
 
@@ -254,7 +265,8 @@
                 }
                 region.getPanel().addMouseListener(new PopupPlotterListener(region));
             }
-            plotter.show();
+            if(showPlots)
+                plotter.show();
         }
     }
 
@@ -297,13 +309,14 @@
 
             hitsPerSensor.get(sensor.getName())[0]++;
             firstSamplePlots.get(sensor.getName()).fill(rawHit.getADCValues()[0] - pedestal);
-            if (maxSample >= 4) {
+            if (maxSampleCutForNoise >=0 && maxSample >= maxSampleCutForNoise) {
+                    firstSamplePlotsNoise.get(sensor.getName()).fill(rawHit.getADCValues()[0] - pedestal);
+                    if( doPerChannelSamplePlots ) 
+                        firstSamplePlotsNoisePerChannel.get(sensor.getName()).fill(channel, rawHit.getADCValues()[0] - pedestal);
+            } else {
                 firstSamplePlotsNoise.get(sensor.getName()).fill(rawHit.getADCValues()[0] - pedestal);
-                
-                if( doPerChannelSamplePlots ) {
+                if( doPerChannelSamplePlots ) 
                     firstSamplePlotsNoisePerChannel.get(sensor.getName()).fill(channel, rawHit.getADCValues()[0] - pedestal);
-                }
-            
             }
         }
 
@@ -378,4 +391,9 @@
         
     }
 
+    public void setShowPlots(boolean showPlots) {
+        this.showPlots = showPlots;
+    }
+
+
 }

Modified: java/branches/jeremy-dev/monitoring-util/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/monitoring-util/pom.xml	(original)
+++ java/branches/jeremy-dev/monitoring-util/pom.xml	Wed Dec 16 15:32:00 2015
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/monitoring-util/</url>

Modified: java/branches/jeremy-dev/parent/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/parent/pom.xml	(original)
+++ java/branches/jeremy-dev/parent/pom.xml	Wed Dec 16 15:32:00 2015
@@ -6,13 +6,13 @@
     <groupId>org.hps</groupId>
     <artifactId>hps-parent</artifactId>
     <packaging>pom</packaging>
-    <version>3.4.2-SNAPSHOT</version>
+    <version>3.5-SNAPSHOT</version>
     <name>parent</name>
     <description>HPS Java parent POM</description>
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <org.lcsim.cacheDir>${user.home}</org.lcsim.cacheDir>
-        <lcsimVersion>3.1.6-SNAPSHOT</lcsimVersion>
+        <lcsimVersion>3.1.7-SNAPSHOT</lcsimVersion>
         <skipSite>false</skipSite>
         <skipPlugin>false</skipPlugin>
     </properties>
@@ -35,17 +35,22 @@
         </repository>
         <repository>
             <id>freehep-repo-public</id>
-            <name>FreeHEP Maven Public</name>
+            <name>FreeHEP</name>
             <url>http://srs.slac.stanford.edu/nexus/content/groups/freehep-maven2-public/</url>
         </repository>
         <repository>
+            <id>srs-repo-public</id>
+            <name>SRS</name>
+            <url>http://srs.slac.stanford.edu/nexus/content/groups/srs-maven2-public/</url>
+        </repository>        
+        <repository>
             <id>lcsim-repo-public</id>
-            <name>LCSIM Public Maven Repository</name>
+            <name>LCSim</name>
             <url>http://srs.slac.stanford.edu/nexus/content/groups/lcsim-maven2-public/</url>
         </repository>
         <repository>
             <id>jlab-coda-repo-public</id>
-            <name>JLAB CODA Maven Repository</name>
+            <name>CODA</name>
             <url>https://coda.jlab.org/maven/</url>
         </repository>
     </repositories>
@@ -59,13 +64,13 @@
     <distributionManagement>
         <repository>
             <id>lcsim-repo-releases</id>
-            <name>LCSIM Releases maven repository</name>
+            <name>LCSim Releases</name>
             <!--<url>http://srs.slac.stanford.edu/nexus/content/repositories/lcsim-maven2-releases/</url>-->
             <url>http://scalnx-v01.slac.stanford.edu:8180/nexus/content/repositories/lcsim-maven2-releases/</url>
         </repository>
         <snapshotRepository>
             <id>lcsim-repo-snapshots</id>
-            <name>LCSIM Snapshots maven repository</name>
+            <name>LCSim Snapshots</name>
             <!--<url>http://srs.slac.stanford.edu/nexus/content/repositories/lcsim-maven2-snapshot/</url>-->
             <url>http://scalnx-v01.slac.stanford.edu:8180/nexus/content/repositories/lcsim-maven2-snapshot/</url>
         </snapshotRepository>
@@ -291,9 +296,9 @@
                 </exclusions>
             </dependency>
             <dependency>
-                <groupId>org.lcsim</groupId>
-                <artifactId>lcsim-detector-framework</artifactId>
-                <version>3.1.6-SNAPSHOT</version>
+                <groupId>srs</groupId>
+                <artifactId>org-srs-datacat-client</artifactId>
+                <version>0.5-SNAPSHOT</version>
             </dependency>
         </dependencies>
     </dependencyManagement>
@@ -341,10 +346,12 @@
                 <artifactId>maven-surefire-report-plugin</artifactId>
                 <version>2.17</version>
             </plugin>
+            <!--
             <plugin>
                 <groupId>org.kuali.maven.plugins</groupId>
                 <artifactId>graph-maven-plugin</artifactId>
             </plugin>
+            -->
         </plugins>
     </reporting>
     <build>
@@ -404,11 +411,13 @@
                         </lifecycleMappingMetadata>
                     </configuration>
                 </plugin>
+                <!--
                 <plugin>
                     <groupId>org.kuali.maven.plugins</groupId>
                     <artifactId>graph-maven-plugin</artifactId>
                     <version>1.2.3</version>
                 </plugin>
+                -->
             </plugins>
         </pluginManagement>
         <plugins>

Modified: java/branches/jeremy-dev/plugin/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/plugin/pom.xml	(original)
+++ java/branches/jeremy-dev/plugin/pom.xml	Wed Dec 16 15:32:00 2015
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/plugin/</url>

Modified: java/branches/jeremy-dev/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/pom.xml	(original)
+++ java/branches/jeremy-dev/pom.xml	Wed Dec 16 15:32:00 2015
@@ -1,5 +1,4 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hps-modules</artifactId>
     <packaging>pom</packaging>
@@ -10,7 +9,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>svn://svn.freehep.org/hps/java/trunk/</url>

Modified: java/branches/jeremy-dev/recon/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/recon/pom.xml	(original)
+++ java/branches/jeremy-dev/recon/pom.xml	Wed Dec 16 15:32:00 2015
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/recon/</url>

Modified: java/branches/jeremy-dev/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java
 =============================================================================
--- java/branches/jeremy-dev/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java	(original)
+++ java/branches/jeremy-dev/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java	Wed Dec 16 15:32:00 2015
@@ -16,7 +16,6 @@
 import org.hps.recon.tracking.CoordinateTransformations;
 import org.hps.recon.tracking.TrackUtils;
 import org.hps.recon.utils.TrackClusterMatcher;
-import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.ReconstructedParticle;
@@ -25,8 +24,8 @@
 import org.lcsim.event.base.BaseCluster;
 import org.lcsim.event.base.BaseReconstructedParticle;
 import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.subdetector.HPSEcal3;
 import org.lcsim.util.Driver;
-import org.lcsim.geometry.subdetector.HPSEcal3;
 
 
 /**
@@ -50,6 +49,9 @@
     public static final int MOLLER_TOP = 0;
     public static final int MOLLER_BOT = 1;
     
+    // normalized cluster-track distance required for qualifying as a match:
+    private double MAXNSIGMAPOSITIONMATCH=30.0;
+
     HPSEcal3 ecal;
 
     /**
@@ -180,6 +182,15 @@
         this.trackCollectionNames = trackCollectionNames;
     }
 
+    /**
+     * Set the requirement on cluster-track position matching in terms of N-sigma.
+     * 
+     * @param nsigma
+     */
+    public void setNSigmaPositionMatch(double nsigma) {
+    	MAXNSIGMAPOSITIONMATCH=nsigma;
+    }
+    
         
     
     /**
@@ -235,15 +246,16 @@
         
         // Create a mapping of matched clusters to corresponding tracks.
         HashMap<Cluster, Track> clusterToTrack = new HashMap<Cluster,Track>();
-
+        
         // Loop through all of the track collections and try to match every
         // track to a cluster.  Allow a cluster to be matched to multiple 
         // tracks and use a probability (to be coded later) to determine what 
         // the best match is.
         // TODO: At some point, pull this out to it's own method
         for (List<Track> tracks : trackCollections) {
+       
             for (Track track : tracks) {
-
+            	
                 // Create a reconstructed particle to represent the track.
                 ReconstructedParticle particle = new BaseReconstructedParticle();
 
@@ -257,6 +269,9 @@
 
                 // Derive the charge of the particle from the track.
                 ((BaseReconstructedParticle) particle).setCharge(track.getCharge() * flipSign);
+
+                // initialize PID quality to a junk value:
+                ((BaseReconstructedParticle)particle).setGoodnessOfPid(9999);
 
                 // Extrapolate the particle ID from the track. Positively
                 // charged particles are assumed to be positrons and those
@@ -267,36 +282,48 @@
                     ((BaseReconstructedParticle) particle).setParticleIdUsed(new SimpleParticleID(11, 0, 0, 0));
                 }
 
+                // normalized distance of the closest match:
+                double smallestNSigma=Double.MAX_VALUE;
+               
+                // try to find a matching cluster:
                 Cluster matchedCluster = null;
-
-                // Track the best matching cluster for the track.
-                // TODO: This should find the best match not just the first match.
-                clusterLoop:
                 for (Cluster cluster : clusters) {
-                    // Check if the cluster and track are a valid match.
-                    if (matcher.isMatch(cluster, track)) {
-
-                    	// Store the matched cluster to matched track.
-                    	clusterToTrack.put(cluster, track);
-                    	
-                        // Store the matched cluster.
-                        matchedCluster = cluster;
-
-                        // Since a match has been found, the loop can be
-                        // terminated.
-                        break clusterLoop;
+
+                    // normalized distance between this cluster and track:
+                    final double thisNSigma=matcher.getNSigmaPosition(cluster, particle);
+
+                    // ignore if matching quality doesn't make the cut:
+                    if (thisNSigma > MAXNSIGMAPOSITIONMATCH) continue;
+
+                    // ignore if we already found a cluster that's a better match:
+                    if (thisNSigma > smallestNSigma) continue;
+
+                    // we found a new best cluster candidate for this track:
+                    smallestNSigma = thisNSigma;
+                    matchedCluster = cluster;
+
+                    // prefer using GBL tracks to correct (later) the clusters, for some consistency:
+                    if (track.getType() >= 32 || !clusterToTrack.containsKey(matchedCluster)) {
+                    	  clusterToTrack.put(matchedCluster,track);
                     }
                 }
 
                 // If a cluster was found that matches the track...
                 if (matchedCluster != null) {
+
+                    // add cluster to the particle:
                     particle.addCluster(matchedCluster);
 
-                    int pid = particle.getParticleIDUsed().getPDG();
+                    // use pid quality to store track-cluster matching quality:
+                    ((BaseReconstructedParticle)particle).setGoodnessOfPid(smallestNSigma);
+                    
+                    // propogate pid to the cluster:
+                    final int pid = particle.getParticleIDUsed().getPDG();
                     if (Math.abs(pid) == 11) {
                         ((BaseCluster) matchedCluster).setParticleId(pid);
                     }
 
+                    // unmatched clusters will (later) be used to create photon particles:
                     unmatchedClusters.remove(matchedCluster);
                 }
 
@@ -306,42 +333,40 @@
         }
 
         // Iterate over the remaining unmatched clusters.
-        if (!unmatchedClusters.isEmpty()) {
-            for (Cluster unmatchedCluster : unmatchedClusters) {
-
-                // Create a reconstructed particle to represent the unmatched cluster.
-                ReconstructedParticle particle = new BaseReconstructedParticle();
-
-                // The particle is assumed to be a photon, since it did not leave a track.
-                ((BaseReconstructedParticle) particle).setParticleIdUsed(new SimpleParticleID(22, 0, 0, 0));
-
-                int pid = particle.getParticleIDUsed().getPDG();
-                if (Math.abs(pid) != 11) {
-                    ((BaseCluster) unmatchedCluster).setParticleId(pid);
-                }
-
-                // Add the cluster to the particle.
-                particle.addCluster(unmatchedCluster);
-
-                // Set the reconstructed particle properties based on the cluster properties.
-                ((BaseReconstructedParticle) particle).setCharge(0);
-
-                // Add the particle to the reconstructed particle list.
-                particles.add(particle);
-            }
+        for (Cluster unmatchedCluster : unmatchedClusters) {
+
+            // Create a reconstructed particle to represent the unmatched cluster.
+            ReconstructedParticle particle = new BaseReconstructedParticle();
+
+            // The particle is assumed to be a photon, since it did not leave a track.
+            ((BaseReconstructedParticle) particle).setParticleIdUsed(new SimpleParticleID(22, 0, 0, 0));
+
+            int pid = particle.getParticleIDUsed().getPDG();
+            if (Math.abs(pid) != 11) {
+                ((BaseCluster) unmatchedCluster).setParticleId(pid);
+            }
+
+            // Add the cluster to the particle.
+            particle.addCluster(unmatchedCluster);
+
+            // Set the reconstructed particle properties based on the cluster properties.
+            ((BaseReconstructedParticle) particle).setCharge(0);
+
+            // Add the particle to the reconstructed particle list.
+            particles.add(particle);
         }
 
         // Apply the corrections to the Ecal clusters using track information, if available
         for (Cluster cluster : clusters) {
             if (cluster.getParticleId() != 0) {
-            	if (clusterToTrack.containsKey(cluster)){
-            		Track matchedT = clusterToTrack.get(cluster);
-            		double ypos = TrackUtils.getTrackStateAtECal(matchedT).getReferencePoint()[2];
-            		ClusterUtilities.applyCorrections(ecal, cluster, ypos);
-            	}
-            	else {
-            		ClusterUtilities.applyCorrections(ecal, cluster);          		
-            	}
+                if (clusterToTrack.containsKey(cluster)){
+                    Track matchedT = clusterToTrack.get(cluster);
+                    double ypos = TrackUtils.getTrackStateAtECal(matchedT).getReferencePoint()[2];
+                    ClusterUtilities.applyCorrections(ecal, cluster, ypos);
+                }
+                else {
+                    ClusterUtilities.applyCorrections(ecal, cluster);          		
+                }
             }
         }
 

Modified: java/branches/jeremy-dev/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java
 =============================================================================
--- java/branches/jeremy-dev/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java	(original)
+++ java/branches/jeremy-dev/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java	Wed Dec 16 15:32:00 2015
@@ -1,8 +1,4 @@
 package org.hps.recon.utils;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
 
 import hep.aida.IAnalysisFactory;
 import hep.aida.IHistogram1D;
@@ -13,12 +9,17 @@
 import hep.physics.vec.BasicHep3Vector;
 import hep.physics.vec.Hep3Vector;
 
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.hps.recon.tracking.CoordinateTransformations;
+import org.hps.recon.tracking.TrackUtils;
 import org.lcsim.event.Cluster;
+import org.lcsim.event.ReconstructedParticle;
 import org.lcsim.event.Track;
 import org.lcsim.event.TrackState;
 import org.lcsim.geometry.FieldMap;
-import org.hps.recon.tracking.CoordinateTransformations;
-import org.hps.recon.tracking.TrackUtils;
 
 /**
  * Utility used to determine if a track and cluster are matched.
@@ -63,6 +64,55 @@
     private double topClusterTrackMatchDeltaYHigh = 28; // mm 
     private double bottomClusterTrackMatchDeltaYLow = -28; // mm 
     private double bottomClusterTrackMatchDeltaYHigh = 24; // mm 
+
+    /**
+     * Rafo's parameterization of cluster-seed x/y position residuals as function of energy.
+     * 
+     * Derived using GBL/seed tracks, non-analytic extrapolation, uncorrected cluster positions,
+     * and EngRun2015-Nominal-v3-4-fieldmap detector.
+     * 
+     *  f = p0+e*(p1+e*(p2+e*(p3+e*(p4+e*p5))))
+     */
+    private static final double dxMeanTopPosiGBL[] = { 6.67414,-9.57296, 5.70647, 27.4523,-28.1103,-9.11424 };
+    private static final double dxSigmTopPosiGBL[] = { 52.6437,-478.805, 1896.73,-3761.48, 3676.77,-1408.31 };
+    private static final double dxMeanBotPosiGBL[] = { 4.13802, 15.8887,-74.2844,-9.78944, 308.541,-287.668 };
+    private static final double dxSigmBotPosiGBL[] = { 37.6513,-294.851, 1002.15,-1639.08, 1228.02,-308.754 };
+    
+    private static final double dxMeanTopElecGBL[] = {-1.6473,  5.58701, 25.3977,-17.1523,-121.025, 145.969 };
+    private static final double dxSigmTopElecGBL[] = { 48.7018,-423.599, 1592.66,-2959.99, 2668.97,-919.876 };
+    private static final double dxMeanBotElecGBL[] = {-6.63558, 83.7763,-460.451, 1275.63,-1702.83, 873.913 };
+    private static final double dxSigmBotElecGBL[] = { 47.0029,-411.784, 1586.52,-3083.37, 2985.58,-1145.53 };
+    
+    private static final double dyMeanTopPosiGBL[] = { 0.71245, 5.57585,-6.50267,-8.21688, 39.8607,-43.9661 };
+    private static final double dySigmTopPosiGBL[] = { 33.0213,-275.174, 1168.77,-2642.34, 3045.52,-1406.21 };
+    private static final double dyMeanBotPosiGBL[] = {-5.532,   74.9738,-383.972, 977.849,-1250.28, 637.75  };
+    private static final double dySigmBotPosiGBL[] = { 19.019, -83.9253, 133.813, 119.883,-546.951, 405.207 };
+    
+    private static final double dyMeanTopElecGBL[] = { 2.88498,-20.4101, 62.9689, 25.6386,-259.957, 207.145 };
+    private static final double dySigmTopElecGBL[] = { 8.65583, 120.676,-1166.43, 3811.72,-5383.19, 2787.42 };
+    private static final double dyMeanBotElecGBL[] = {-9.02276, 112.329,-489.761, 953.037,-829.96,  260.772 };
+    private static final double dySigmBotElecGBL[] = { 23.4856,-108.19,  158.7,   189.261,-682.034, 459.15  };
+
+    private static final double dxMeanTopPosiSeed[] ={ 11.6245,-28.5061, 13.0332, 59.9465,-21.1014,-63.6126 };
+    private static final double dxSigmTopPosiSeed[] ={ 61.5911,-540.596, 2077.22,-3973.22, 3704.45,-1332.07 };
+    private static final double dxMeanBotPosiSeed[] ={ 4.53394, 11.3773,-63.7127,-2.81629, 273.868,-264.709 };
+    private static final double dxSigmBotPosiSeed[] ={ 48.3163,-409.249, 1590.36,-3212.85, 3326.04,-1402.3  };
+    
+    private static final double dxMeanTopElecSeed[] ={ 2.14163,-20.8713, 76.3054,  34.894,-340.272,  295.24 };
+    private static final double dxSigmTopElecSeed[] ={ 48.585, -385.166, 1320.26,-2157.45, 1581.06,-366.012 };
+    private static final double dxMeanBotElecSeed[] ={-3.44302, 12.4687, 4.09878,-30.0057,-13.3151, 40.2707 };
+    private static final double dxSigmBotElecSeed[] ={ 48.4089,-385.494, 1341.37,-2271.52, 1814.02,-526.555 };
+
+    private static final double dyMeanTopPosiSeed[] ={-0.127741,10.4944, -18.242,-12.9155, 81.0116,-73.9773 };
+    private static final double dySigmTopPosiSeed[] ={ 37.3097, -357.55, 1607.03,-3709.55, 4282.36,-1957.91 };
+    private static final double dyMeanBotPosiSeed[] ={ 2.24392,-55.2003,  405.04,-1250.64, 1731.47,-887.262 };
+    private static final double dySigmBotPosiSeed[] ={ 25.5776,-199.731,  754.59,-1408.72, 1240.36,-400.912 };
+
+    private static final double dyMeanTopElecSeed[] ={ 3.25429,-24.0858, 69.0145, 34.1213,-297.752, 239.939 };
+    private static final double dySigmTopElecSeed[] ={ 19.9111,-53.2699,-261.915,  1593.2,-2774.01, 1605.54 };
+    private static final double dyMeanBotElecSeed[] ={-7.72963, 98.1346, -427.91, 840.225,-751.188, 250.792 };
+    private static final double dySigmBotElecSeed[] ={ 21.7909,-85.4757,-56.9423, 977.522,-1902.05, 1137.92 };
+
 
     /**
      * Z position to start extrapolation from
@@ -194,10 +244,101 @@
             tPos = new BasicHep3Vector(trackStateAtEcal.getReferencePoint());
             tPos = CoordinateTransformations.transformVectorToDetector(tPos);
         }
+       
+        return Math.sqrt(Math.pow(cPos.x()-tPos.x(),2)+Math.pow(cPos.y()-tPos.y(),2));
+    }
+    
+    /**
+     * Calculate #sigma between cluster-track x/y position at calorimeter.
+     *
+     * Based on Rafo's parameterizations.  Requires non-analytic extrapolation
+     * and uncorrected cluster positions.
+     * 
+     * @param cluster = position-uncorrected cluster
+     * @param track
+     *
+     * @return #sigma between cluster and track positions
+     */
+    public double getNSigmaPosition(Cluster cluster,ReconstructedParticle particle) {
+
+        if (particle.getTracks().size()<1) return Double.MAX_VALUE;
+    	  Track track=particle.getTracks().get(0);
+    	
+        if (this.useAnalyticExtrapolator)
+            throw new RuntimeException("This is to be used with non-analytic extrapolator only.");
+
+        // Get the cluster position:
+        Hep3Vector cPos = new BasicHep3Vector(cluster.getPosition());
+
+        // whether track is in top half of detector:
+        final boolean isTopTrack = track.getTrackStates().get(0).getTanLambda() > 0;
+
+        // ignore if track and cluster in different halves:
+        if (isTopTrack != cPos.y()>0) return Double.MAX_VALUE;
+
+        // Get the extrapolated track position at the calorimeter:
+        TrackState trackStateAtEcal = TrackUtils.getTrackStateAtECal(track);
+        Hep3Vector tPos = new BasicHep3Vector(trackStateAtEcal.getReferencePoint());
+        tPos = CoordinateTransformations.transformVectorToDetector(tPos);
+
+        // whether it's a GBL track:
+        final boolean isGBL = track.getType() >= 32;
+       
+        // choose which parameterization of mean and sigma to use:
+        double dxMean[],dyMean[],dxSigm[],dySigm[];
+        if (particle.getCharge()>0) {
+            if (isTopTrack) {
+                dxMean = isGBL ? dxMeanTopPosiGBL : dxMeanTopPosiSeed;
+                dxSigm = isGBL ? dxSigmTopPosiGBL : dxSigmTopPosiSeed;
+                dyMean = isGBL ? dyMeanTopPosiGBL : dyMeanTopPosiSeed;
+                dySigm = isGBL ? dySigmTopPosiGBL : dySigmTopPosiSeed;
+            }
+            else {
+                dxMean = isGBL ? dxMeanBotPosiGBL : dxMeanBotPosiSeed;
+                dxSigm = isGBL ? dxSigmBotPosiGBL : dxSigmBotPosiSeed;
+                dyMean = isGBL ? dyMeanBotPosiGBL : dyMeanBotPosiSeed;
+                dySigm = isGBL ? dySigmBotPosiGBL : dySigmBotPosiSeed;
+            }
+        }
+        else if (particle.getCharge()<0) {
+            if (isTopTrack) {
+                dxMean = isGBL ? dxMeanTopElecGBL : dxMeanTopElecSeed;
+                dxSigm = isGBL ? dxSigmTopElecGBL : dxSigmTopElecSeed;
+                dyMean = isGBL ? dyMeanTopElecGBL : dyMeanTopElecSeed;
+                dySigm = isGBL ? dySigmTopElecGBL : dySigmTopElecSeed;
+            }
+            else {
+                dxMean = isGBL ? dxMeanBotElecGBL : dxMeanBotElecSeed;
+                dxSigm = isGBL ? dxSigmBotElecGBL : dxSigmBotElecSeed;
+                dyMean = isGBL ? dyMeanBotElecGBL : dyMeanBotElecSeed;
+                dySigm = isGBL ? dySigmBotElecGBL : dySigmBotElecSeed;
+            }
+        }
+        else return Double.MAX_VALUE;
+
+        // get particle energy:
+        Hep3Vector p3 = new BasicHep3Vector(track.getTrackStates().get(0).getMomentum());
+        p3 = CoordinateTransformations.transformVectorToDetector(p3);
+        double ee = p3.magnitude();
         
-        return Math.sqrt(Math.pow(cPos.x()-tPos.x(),2)+Math.pow(cPos.y()-tPos.y(),2));
-    }
-    
+        // Rafo's parameterization isn't measured above 650 MeV/c but expected to be constant:
+        if (ee > 0.65) ee=0.65;
+
+        // calculate measured mean and sigma of deltaX and deltaY for this energy:
+        double aDxMean=0,aDxSigm=0,aDyMean=0,aDySigm=0;
+        for (int ii=dxMean.length-1; ii>=0; ii--) aDxMean = dxMean[ii] + ee*aDxMean;
+        for (int ii=dxSigm.length-1; ii>=0; ii--) aDxSigm = dxSigm[ii] + ee*aDxSigm;
+        for (int ii=dyMean.length-1; ii>=0; ii--) aDyMean = dyMean[ii] + ee*aDyMean;
+        for (int ii=dySigm.length-1; ii>=0; ii--) aDySigm = dySigm[ii] + ee*aDySigm;
+
+        // calculate nSigma between track and cluster:
+        final double nSigmaX = (cPos.x() - tPos.x() - aDxMean) / aDxSigm;
+        final double nSigmaY = (cPos.y() - tPos.y() - aDyMean) / aDySigm;
+        return Math.sqrt(nSigmaX*nSigmaX + nSigmaY*nSigmaY);
+        //return Math.sqrt( 1 / ( 1/nSigmaX/nSigmaX + 1/nSigmaY/nSigmaY ) );
+    }
+
+
     /**
      * Determine if a track is matched to a cluster. Currently, this is
      * determined by checking that the track and cluster are within the same
@@ -388,4 +529,16 @@
             e.printStackTrace();
         }
     }
+
+    /**
+     * Class to store track-cluster matching qualities.
+     */
+    public class TrackClusterMatch {
+    	private double nSigmaPositionMatch=Double.MAX_VALUE;
+    	public TrackClusterMatch(ReconstructedParticle pp, Cluster cc) {
+    	    nSigmaPositionMatch = getNSigmaPosition(cc,pp);
+    	}
+    	public double getNSigmaPositionMatch() { return nSigmaPositionMatch; }
+    }
+    
 }

Modified: java/branches/jeremy-dev/record-util/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/record-util/pom.xml	(original)
+++ java/branches/jeremy-dev/record-util/pom.xml	Wed Dec 16 15:32:00 2015
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/record-util/</url>

Modified: java/branches/jeremy-dev/steering-files/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/steering-files/pom.xml	(original)
+++ java/branches/jeremy-dev/steering-files/pom.xml	Wed Dec 16 15:32:00 2015
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/steering-files/</url>

Modified: java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim
 =============================================================================
--- java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim	(original)
+++ java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim	Wed Dec 16 15:32:00 2015
@@ -23,7 +23,10 @@
             <timeWindowWeight>3</timeWindowWeight>
             <resetPeriod>50000</resetPeriod>
        </driver>
-        <driver name="SvtHitPlots" type="org.hps.monitoring.drivers.svt.SvtHitPlots" />
+        <driver name="SvtHitPlots" type="org.hps.monitoring.drivers.svt.SvtHitPlots">
+            <doPerChannelsSampleplots>true</doPerChannelsSampleplots>
+            <saveRootFile>true</saveRootFile>
+        </driver>
         <driver name="SamplesPlots" type="org.hps.monitoring.drivers.svt.SamplesPlots" />
         <driver name="PedestalPlots" type="org.hps.monitoring.drivers.svt.PedestalPlots" />
         <driver name="RawTrackerHitFitterDriver" type="org.hps.recon.tracking.RawTrackerHitFitterDriver">

Modified: java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim
 =============================================================================
--- java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim	(original)
+++ java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim	Wed Dec 16 15:32:00 2015
@@ -7,7 +7,9 @@
       @author <a href="mailto:[log in to unmask]">Omar Moreno</a>
     -->
     <execute>
-        
+    	<!--RF driver-->
+    	<driver name="RfFitter"/>
+ 
         <!-- Ecal reconstruction drivers -->        
         <driver name="EcalRunningPedestal"/>
         <driver name="EcalRawConverter" />
@@ -51,7 +53,6 @@
            ReconstructedParticle types are properly set.
         -->
         <driver name="MergeTrackCollections"/>
-        <driver name="GBLOutputDriver" />
         <driver name="GBLRefitterDriver" />
         <driver name="TrackDataDriver" />
         <driver name="ReconParticleDriver" />   
@@ -61,7 +62,9 @@
     <drivers>    
         <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
             <eventInterval>1000</eventInterval>
-        </driver>        
+        </driver> 
+        
+        <driver name="RfFitter" type="org.hps.evio.RfFitterDriver"/>       
 
         <!-- Ecal reconstruction drivers -->
         <driver name="EcalRunningPedestal" type="org.hps.recon.ecal.EcalRunningPedestalDriver">
@@ -134,8 +137,7 @@
             <ecalClusterCollectionName>EcalClustersCorr</ecalClusterCollectionName>        
             <trackCollectionNames>MatchedTracks GBLTracks</trackCollectionNames>
         </driver>  
-        <driver name="GBLOutputDriver" type="org.hps.recon.tracking.gbl.GBLOutputDriver"/>      
-        <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.HpsGblRefitter"/>
+        <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.GBLRefitterDriver"/>
         <driver name="LCIOWriter" type="org.lcsim.util.loop.LCIODriver">
             <outputFilePath>${outputFile}.slcio</outputFilePath>
         </driver>

Modified: java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim
 =============================================================================
--- java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim	(original)
+++ java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim	Wed Dec 16 15:32:00 2015
@@ -53,7 +53,6 @@
             ReconstructedParticle types are properly set.
          -->
         <driver name="MergeTrackCollections"/>
-        <driver name="GBLOutputDriver" />
         <driver name="GBLRefitterDriver" />
         <driver name="TrackDataDriver" />
         <driver name="ReconParticleDriver" />   
@@ -119,8 +118,7 @@
             <rmsTimeCut>8.0</rmsTimeCut>
         </driver>       
         <driver name="MergeTrackCollections" type="org.hps.recon.tracking.MergeTrackCollections" />
-        <driver name="GBLOutputDriver" type="org.hps.recon.tracking.gbl.GBLOutputDriver"/>             
-        <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.HpsGblRefitter"/>
+        <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.GBLRefitterDriver"/>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <ecalCollectionName>EcalCalHits</ecalCollectionName>
             <fixShapeParameter>true</fixShapeParameter>

Modified: java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015STRecon.lcsim
 =============================================================================
--- java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015STRecon.lcsim	(original)
+++ java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015STRecon.lcsim	Wed Dec 16 15:32:00 2015
@@ -55,6 +55,7 @@
         <driver name="StraightThroughDriver" type="org.hps.recon.tracking.straight.StraightThroughAnalysisDriver">
             <outputFilename>${outputFile}</outputFilename>
             <writeGbl>true</writeGbl>
+            <showPlots>false</showPlots>
         </driver>
 
     </drivers>

Modified: java/branches/jeremy-dev/tracking/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/tracking/pom.xml	(original)
+++ java/branches/jeremy-dev/tracking/pom.xml	Wed Dec 16 15:32:00 2015
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/tracking/</url>

Modified: java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java
 =============================================================================
--- java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java	(original)
+++ java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java	Wed Dec 16 15:32:00 2015
@@ -64,8 +64,8 @@
     private final List<String> _colnames = new ArrayList<String>();
     private boolean _doTransformToTracking = true;
     private boolean _saveAxialHits = false;
-    private String _axialname = "AxialTrackHits";
-    private String _axialmcrelname = "AxialTrackHitsMCRelations";
+    private final String _axialname = "AxialTrackHits";
+    private final String _axialmcrelname = "AxialTrackHitsMCRelations";
     private boolean rejectGhostHits = false;
 
     public enum LayerGeometryType {
@@ -143,7 +143,7 @@
     public void setEpsStereo(double eps) {
         this._crosser.setEpsStereoAngle(eps);
     }
-    
+
     /**
      *
      * @param trans
@@ -199,8 +199,9 @@
         // 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);
+        RelationalTable hittomc = null;
         if (event.hasCollection(LCRelation.class, "SVTTrueHitRelations")) {
+            hittomc = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
             List<LCRelation> trueHitRelations = event.get(LCRelation.class, "SVTTrueHitRelations");
             for (LCRelation relation : trueHitRelations) {
                 if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
@@ -241,9 +242,11 @@
 
                     // Create a HelicalTrackStrip for this hit
                     HelicalTrackStrip strip = makeDigiStrip(h);
-                    for (RawTrackerHit rth : h.getRawHits()) {
-                        for (Object simHit : hittomc.allFrom(rth)) {
-                            strip.addMCParticle(((SimTrackerHit) simHit).getMCParticle());
+                    if (hittomc != null) {
+                        for (RawTrackerHit rth : h.getRawHits()) {
+                            for (Object simHit : hittomc.allFrom(rth)) {
+                                strip.addMCParticle(((SimTrackerHit) simHit).getMCParticle());
+                            }
                         }
                     }
 
@@ -259,10 +262,12 @@
                         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());
+                            if (hittomc != null) {
+                                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()));
@@ -456,14 +461,18 @@
         helhits.addAll(stereoCrosses);
         event.put(_outname, helhits, HelicalTrackHit.class, 0);
         event.put(_hitrelname, hitrelations, LCRelation.class, 0);
-        event.put(_mcrelname, mcrelations, LCRelation.class, 0);
+        if (hittomc != null) {
+            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 (hittomc != null) {
+                event.put(_axialmcrelname, axialmcrelations, LCRelation.class, 0);
+                System.out.println(this.getClass().getSimpleName() + " : number of " + _axialmcrelname + " found = " + axialmcrelations.size());
+            }
         }
         if (_doTransformToTracking) {
-            addRotatedHitsToEvent(event, stereoCrosses);
+            addRotatedHitsToEvent(event, stereoCrosses, hittomc != null);
             if (_saveAxialHits) {
                 addRotated2DHitsToEvent(event, axialhits);
             }
@@ -595,7 +604,7 @@
         return strip;
     }
 
-    private void addRotatedHitsToEvent(EventHeader event, List<HelicalTrackCross> stereohits) {
+    private void addRotatedHitsToEvent(EventHeader event, List<HelicalTrackCross> stereohits, boolean isMC) {
 
         List<HelicalTrackHit> rotatedhits = new ArrayList<HelicalTrackHit>();
         List<LCRelation> hthrelations = new ArrayList<LCRelation>();
@@ -634,10 +643,10 @@
             strip1.add(rotatedstriphits.get(0));
             strip2.add(rotatedstriphits.get(1));
             List<HelicalTrackCross> newhits = _crosser.MakeHits(strip1, strip2);
-            if(newhits.size()!=1) {
+            if (newhits.size() != 1) {
                 throw new RuntimeException("no rotated cross was created!?");
             }
-            HelicalTrackCross newhit  = newhits.get(0);
+            HelicalTrackCross newhit = newhits.get(0);
             //HelicalTrackCross newhit = new HelicalTrackCross(rotatedstriphits.get(0), rotatedstriphits.get(1));
             for (MCParticle mcp : cross.getMCParticles()) {
                 newhit.addMCParticle(mcp);
@@ -651,7 +660,9 @@
 
         event.put("Rotated" + _outname, rotatedhits, HelicalTrackHit.class, 0);
         event.put("Rotated" + _hitrelname, hthrelations, LCRelation.class, 0);
-        event.put("Rotated" + _mcrelname, mcrelations, LCRelation.class, 0);
+        if (isMC) {
+            event.put("Rotated" + _mcrelname, mcrelations, LCRelation.class, 0);
+        }
     }
 
     /*

Modified: java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java
 =============================================================================
--- java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java	(original)
+++ java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java	Wed Dec 16 15:32:00 2015
@@ -16,7 +16,6 @@
 import org.lcsim.event.TrackState;
 import org.lcsim.event.TrackerHit;
 import org.lcsim.event.base.BaseLCRelation;
-import org.lcsim.event.base.BaseRelationalTable;
 import org.lcsim.fit.helicaltrack.HelicalTrackCross;
 import org.lcsim.fit.helicaltrack.HelicalTrackHit;
 import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
@@ -34,7 +33,7 @@
 public final class TrackDataDriver extends Driver {
 
     /** logger **/
-    private static Logger LOGGER  = Logger.getLogger(TrackDataDriver.class.getPackage().getName());
+    private static final Logger LOGGER  = Logger.getLogger(TrackDataDriver.class.getPackage().getName());
     
     
     /** The B field map */
@@ -107,6 +106,7 @@
      * 
      * @param detector LCSim {@link Detector} geometry 
      */     
+    @Override
     protected void detectorChanged(Detector detector) { 
        
         // Get the field map from the detector object
@@ -121,6 +121,7 @@
      * 
      * @param event : LCSim event
      */
+    @Override
     protected void process(EventHeader event) {
 
         // Check if the event contains a collection of the type Track. If it
@@ -135,15 +136,11 @@
 
         // Get the collection of LCRelations relating RotatedHelicalTrackHits to
         // HelicalTrackHits
-        List<LCRelation> rotatedHthToHthRelations = event.get(LCRelation.class, ROTATED_HTH_REL_COL_NAME);
-        BaseRelationalTable hthToRotatedHth = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE,
-                        RelationalTable.Weighting.UNWEIGHTED);
-        hthToRotatedHth.addRelations(rotatedHthToHthRelations);
 
         RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
         RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
 
-        List<HelicalTrackHit> rotatedHths = event.get(HelicalTrackHit.class, ROTATED_HTH_COL_NAME);
+//        List<HelicalTrackHit> rotatedHths = event.get(HelicalTrackHit.class, ROTATED_HTH_COL_NAME);
 
         // Create a container that will be used to store all TrackData objects.
         List<TrackData> trackDataCollection = new ArrayList<TrackData>();
@@ -159,21 +156,21 @@
         // residuals
         List<LCRelation> trackToTrackResidualsRelations = new ArrayList<LCRelation>();
 
-        double xResidual = 0;
-        double yResidual = 0;
-
-        float totalT0 = 0;
-        float totalHits = 0;
-        float trackTime = 0;
+        double xResidual;
+        double yResidual;
+
+        float totalT0;
+        float totalHits;
+        float trackTime;
 
         int trackerVolume = -1;
 
-        boolean isFirstHit = true;
-
-        HpsSiSensor sensor = null;
-        Hep3Vector stereoHitPosition = null;
-        Hep3Vector trackPosition = null;
-        HelicalTrackHit helicalTrackHit = null;
+        boolean isFirstHit;
+
+        HpsSiSensor sensor;
+        Hep3Vector stereoHitPosition;
+        Hep3Vector trackPosition;
+        HelicalTrackHit helicalTrackHit;
 
         List<Double> t0Residuals = new ArrayList<Double>();
         List<Double> trackResidualsX = new ArrayList<Double>();
@@ -198,7 +195,10 @@
                 stereoLayers.clear();
                 isFirstHit = true;
 
-                //
+//                TrackState trackStateForResiduals = TrackUtils.getTrackStateAtLocation(track, TrackState.AtLastHit);
+//                if (trackStateForResiduals == null ) trackStateForResiduals= TrackUtils.getTrackStateAtLocation(track, TrackState.AtIP);
+                TrackState trackStateForResiduals = TrackUtils.getTrackStateAtLocation(track, TrackState.AtIP);
+                
                 // Change the position of a HelicalTrackHit to be the corrected
                 // one.
                 // FIXME: Now that multiple track collections are being used, 
@@ -216,7 +216,7 @@
                     // Extrapolate the track to the stereo hit position and
                     // calculate track residuals
                     stereoHitPosition = ((HelicalTrackHit) rotatedStereoHit).getCorrectedPosition();
-                    trackPosition = TrackUtils.extrapolateTrack(track, stereoHitPosition.x());
+                    trackPosition = TrackUtils.extrapolateTrack(trackStateForResiduals, stereoHitPosition.x());
                     xResidual = trackPosition.x() - stereoHitPosition.y();
                     yResidual = trackPosition.y() - stereoHitPosition.z();
                     trackResidualsX.add(xResidual);
@@ -230,7 +230,7 @@
                     
                     // Get the HelicalTrackHit corresponding to the 
                     // RotatedHelicalTrackHit associated with a track
-                    helicalTrackHit = (HelicalTrackHit) hthToRotatedHth.from(rotatedStereoHit);
+                    helicalTrackHit = (HelicalTrackHit) hitToRotated.from(rotatedStereoHit);
                     ((HelicalTrackHit) rotatedStereoHit).setPosition(stereoHitPosition.v());
                     stereoHitPosition = CoordinateTransformations.transformVectorToDetector(stereoHitPosition);
                     helicalTrackHit.setPosition(stereoHitPosition.v());
@@ -261,18 +261,7 @@
 
                 // Extrapolate the track to the face of the Ecal and get the TrackState
                 if( TrackType.isGBL(track.getType())) {
-                    TrackState stateLast = null;
-                    TrackState stateIP = null;
-                    for(int ist= 0; ist < track.getTrackStates().size(); ist++) {
-                        if( track.getTrackStates().get(ist).getLocation() == TrackState.AtLastHit ) 
-                            stateLast = track.getTrackStates().get(ist);
-                        if( track.getTrackStates().get(ist).getLocation() == TrackState.AtIP ) 
-                            stateIP = track.getTrackStates().get(ist);
-                    }
-                    if( stateLast == null)
-                        throw new RuntimeException("last hit track state for GBL track was not found");
-//                    TrackState stateEcal = TrackUtils.extrapolateTrackUsingFieldMap(stateLast, extStartPos, ecalPosition, stepSize, bFieldMap);
-//                    track.getTrackStates().add(stateEcal);
+                    TrackState stateIP = TrackUtils.getTrackStateAtLocation(track, TrackState.AtIP);
                     if( stateIP == null)
                         throw new RuntimeException("IP track state for GBL track was not found");
                     TrackState stateEcalIP = TrackUtils.extrapolateTrackUsingFieldMap(stateIP, extStartPos, ecalPosition, stepSize, bFieldMap);

Modified: java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java
 =============================================================================
--- java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java	(original)
+++ java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java	Wed Dec 16 15:32:00 2015
@@ -1306,15 +1306,25 @@
             return new Line(r0, phi, lambda);
     }
 
-    public static TrackState getTrackStateAtECal(Track trk) {
+    /**
+     * Port of Track.getTrackState(int location) from the C++ LCIO API.
+     * @param trk A track.
+     * @param location A TrackState location constant
+     * @return The first matching TrackState; null if none is found.
+     */
+    public static TrackState getTrackStateAtLocation(Track trk, int location) {
         for (TrackState state : trk.getTrackStates()) {
-            if (state.getLocation() == TrackState.AtCalorimeter) {
+            if (state.getLocation() == location) {
                 return state;
             }
         }
         return null;
     }
 
+    public static TrackState getTrackStateAtECal(Track trk) {
+        return getTrackStateAtLocation(trk, TrackState.AtCalorimeter);
+    }
+    
     public static Hep3Vector getBField(Detector detector) {
         return detector.getFieldMap().getField(new BasicHep3Vector(0., 0., 500.0));
     }

Modified: java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java
 =============================================================================
--- java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java	(original)
+++ java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java	Wed Dec 16 15:32:00 2015
@@ -13,11 +13,9 @@
 import java.util.logging.Logger;
 
 import org.lcsim.event.EventHeader;
-import org.lcsim.event.LCRelation;
 import org.lcsim.event.RelationalTable;
 import org.lcsim.event.Track;
 import org.lcsim.event.TrackerHit;
-import org.lcsim.event.base.BaseRelationalTable;
 import org.lcsim.event.base.BaseTrack;
 import org.lcsim.fit.helicaltrack.HelicalTrackHit;
 import org.lcsim.geometry.Detector;
@@ -65,7 +63,7 @@
     private double rmsTimeCut = -1;
     private boolean rejectUncorrectedHits = true;
     private boolean rejectSharedHits = false;
-    
+
     public TrackerReconDriver() {
     }
 
@@ -165,8 +163,9 @@
         //
         // 1) Driver to run Seed Tracker.
         //
-        if (!strategyResource.startsWith("/"))
+        if (!strategyResource.startsWith("/")) {
             strategyResource = "/org/hps/recon/tracking/strategies/" + strategyResource;
+        }
         List<SeedStrategy> sFinallist = StrategyXMLUtils.getStrategyListFromInputStream(this.getClass().getResourceAsStream(strategyResource));
         SeedTracker stFinal = new SeedTracker(sFinallist, this._useHPSMaterialManager, this.includeMS);
         stFinal.setApplySectorBinning(_applySectorBinning);
@@ -177,14 +176,16 @@
         stFinal.setInputCollectionName(stInputCollectionName);
         stFinal.setTrkCollectionName(trackCollectionName);
         stFinal.setBField(bfield);
-        if (debug)
+        if (debug) {
             stFinal.setDiagnostics(new SeedTrackerDiagnostics());
+        }
         // stFinal.setSectorParams(false); //this doesn't actually seem to do anything
         stFinal.setSectorParams(1, 10000);
         add(stFinal);
 
-        if (rmsTimeCut > 0)
+        if (rmsTimeCut > 0) {
             stFinal.setTrackCheck(new HitTimeTrackCheck(rmsTimeCut));
+        }
     }
 
     /**
@@ -198,10 +199,11 @@
 
         // Debug printouts.
         if (debug) {
-            if (event.hasCollection(HelicalTrackHit.class, stInputCollectionName))
+            if (event.hasCollection(HelicalTrackHit.class, stInputCollectionName)) {
                 System.out.println(this.getClass().getSimpleName() + ": The HelicalTrackHit collection " + stInputCollectionName + " has " + event.get(HelicalTrackHit.class, stInputCollectionName).size() + " hits.");
-            else
+            } else {
                 System.out.println(this.getClass().getSimpleName() + ": No HelicalTrackHit collection for this event");
+            }
             // Check for Tracks.
             List<Track> tracks = event.get(Track.class, trackCollectionName);
             System.out.println(this.getClass().getSimpleName() + ": The Track collection " + trackCollectionName + " has " + tracks.size() + " tracks.");
@@ -236,27 +238,13 @@
         }
 
         if (rejectSharedHits) {
-
-            RelationalTable hittostrip = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
-            List<LCRelation> hitrelations = event.get(LCRelation.class, "HelicalTrackHitRelations");
-            for (LCRelation relation : hitrelations) {
-                if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
-                    hittostrip.add(relation.getFrom(), relation.getTo());
-                }
-            }
-
-            RelationalTable hittorotated = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE, RelationalTable.Weighting.UNWEIGHTED);
-            List<LCRelation> rotaterelations = event.get(LCRelation.class, "RotatedHelicalTrackHitRelations");
-            for (LCRelation relation : rotaterelations) {
-                if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
-                    hittorotated.add(relation.getFrom(), relation.getTo());
-                }
-            }
+            RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
+            RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
 
             Map<TrackerHit, List<Track>> stripsToTracks = new HashMap<TrackerHit, List<Track>>();
             for (Track track : tracks) {
                 for (TrackerHit hit : track.getTrackerHits()) {
-                    Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit));
+                    Collection<TrackerHit> htsList = hitToStrips.allFrom(hitToRotated.from(hit));
                     for (TrackerHit strip : htsList) {
                         List<Track> sharedTracks = stripsToTracks.get(strip);
                         if (sharedTracks == null) {
@@ -272,7 +260,7 @@
             while (iter.hasNext()) {
                 Track track = iter.next();
                 for (TrackerHit hit : track.getTrackerHits()) {
-                    Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit));
+                    Collection<TrackerHit> htsList = hitToStrips.allFrom(hitToRotated.from(hit));
                     for (TrackerHit strip : htsList) {
                         List<Track> sharedTracks = stripsToTracks.get(strip);
                         if (sharedTracks.size() > 1) {
@@ -304,8 +292,9 @@
      * @param tracks The list of <code>Track</code> objects.
      */
     private void setTrackType(List<Track> tracks) {
-        for (Track track : tracks)
+        for (Track track : tracks) {
             ((BaseTrack) track).setTrackType(BaseTrack.TrackType.Y_FIELD.ordinal());
+        }
     }
 
     @Override

Modified: java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutputDriver.java
 =============================================================================
--- java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutputDriver.java	(original)
+++ java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutputDriver.java	Wed Dec 16 15:32:00 2015
@@ -20,11 +20,11 @@
 import org.lcsim.util.aida.AIDA;
 
 /**
- * This driver class is used to 1) write lcio collection of GBL info objects OR
- * 2) write GBL info into a unstructures text-based output
+ * This driver class is used to 
+ * 1) write LCIO collection of GBL info objects, or, 
+ * 2) write GBL info into a structured text-based output
  *
- * It uses a helper class that does the actual work. We will port GBL to java
- * and that will replace this driver.
+ * It uses a helper class that does the actual work. 
  *
  * @author Per Hansson Adrian <[log in to unmask]>
  * @version $Id: GBLOutputDriver.java,v 1.9 2013/11/07 03:54:58 phansson Exp $
@@ -134,8 +134,6 @@
                 System.out.printf("%s: PX %f bottom %d\n", this.getClass().getSimpleName(), trk.getPX(), TrackUtils.isBottomTrack(trk, 4) ? 1 : 0);
             }
 
-            //if( trk.getPX() < 0.9) continue;
-            //if( TrackUtils.isBottomTrack(trk, 4)) continue;
             if (TrackUtils.isGoodTrack(trk, tracklist, EventQuality.Quality.NONE)) {
                 if (_debug > 0) {
                     System.out.printf("%s: Print GBL output for this track\n", this.getClass().getSimpleName());

Modified: java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java
 =============================================================================
--- java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java	(original)
+++ java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java	Wed Dec 16 15:32:00 2015
@@ -28,6 +28,7 @@
 
     private String inputCollectionName = "MatchedTracks";
     private String outputCollectionName = "GBLTracks";
+    private String trackRelationCollectionName = "MatchedToGBLTrackRelations";
 
     private double bfield;
     private final MultipleScattering _scattering = new MultipleScattering(new MaterialSupervisor());
@@ -68,16 +69,17 @@
         RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
 
         List<Track> refittedTracks = new ArrayList<Track>();
+        List<LCRelation> trackRelations = new ArrayList<LCRelation>();
+
         List<GBLKinkData> kinkDataCollection = new ArrayList<GBLKinkData>();
-
         List<LCRelation> kinkDataRelations = new ArrayList<LCRelation>();
 
         Map<Track, Track> inputToRefitted = new HashMap<Track, Track>();
         for (Track track : tracks) {
-            Pair<Track, GBLKinkData> newTrack = MakeGblTracks.refitTrack(TrackUtils.getHTF(track), TrackUtils.getStripHits(track, hitToStrips, hitToRotated), track.getTrackerHits(), 5, track.getType(), _scattering, bfield
-            );
+            Pair<Track, GBLKinkData> newTrack = MakeGblTracks.refitTrack(TrackUtils.getHTF(track), TrackUtils.getStripHits(track, hitToStrips, hitToRotated), track.getTrackerHits(), 5, track.getType(), _scattering, bfield);
 //            newTrack.getFirst().
             refittedTracks.add(newTrack.getFirst());
+            trackRelations.add(new BaseLCRelation(track, newTrack.getFirst()));
             inputToRefitted.put(track, newTrack.getFirst());
 
             kinkDataCollection.add(newTrack.getSecond());
@@ -141,6 +143,7 @@
         // Put the tracks back into the event and exit
         int flag = 1 << LCIOConstants.TRBIT_HITS;
         event.put(outputCollectionName, refittedTracks, Track.class, flag);
+        event.put(trackRelationCollectionName, trackRelations, LCRelation.class, 0);
         event.put(GBLKinkData.DATA_COLLECTION, kinkDataCollection, GBLKinkData.class, 0);
         event.put(GBLKinkData.DATA_RELATION_COLLECTION, kinkDataRelations, LCRelation.class, 0);
     }

Modified: java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/straight/STUtils.java
 =============================================================================
--- java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/straight/STUtils.java	(original)
+++ java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/straight/STUtils.java	Wed Dec 16 15:32:00 2015
@@ -195,8 +195,8 @@
         public Hep3Vector getDirection() {
             double dxdz = getFit(VIEW.XZ).slope();
             double dydz = getFit(VIEW.YZ).slope();
-            double dzdz = 1- Math.sqrt( dxdz*dxdz + dydz*dydz);
-            return new BasicHep3Vector(dxdz, dydz, dzdz);
+            double dzdz = 1;
+            return VecOp.unit(new BasicHep3Vector(dxdz, dydz, dzdz));
         }
     
         public List<StereoPair> getHits() {

Modified: java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/straight/StraightThroughAnalysisDriver.java
 =============================================================================
--- java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/straight/StraightThroughAnalysisDriver.java	(original)
+++ java/branches/jeremy-dev/tracking/src/main/java/org/hps/recon/tracking/straight/StraightThroughAnalysisDriver.java	Wed Dec 16 15:32:00 2015
@@ -117,6 +117,7 @@
     private String outputFilename = "";
     private PrintWriter gblPrintWriter = null;
     private boolean writeGbl = true;
+    private boolean showPlots = true;
     
 
     
@@ -392,8 +393,10 @@
             
         }
 
-        for(IPlotter plotter : plotters.values())
-            plotter.show();
+        if(showPlots ) {
+            for(IPlotter plotter : plotters.values())
+                plotter.show();
+        }
     }
     
     
@@ -1029,6 +1032,12 @@
 
 
 
+    public void setShowPlots(boolean showPlots) {
+        this.showPlots = showPlots;
+    }
+
+
+
    
 
     

Modified: java/branches/jeremy-dev/users/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/users/pom.xml	(original)
+++ java/branches/jeremy-dev/users/pom.xml	Wed Dec 16 15:32:00 2015
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/users/</url>

Modified: java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/TridentMCFilter.java
 =============================================================================
--- java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/TridentMCFilter.java	(original)
+++ java/branches/jeremy-dev/users/src/main/java/org/hps/users/meeg/TridentMCFilter.java	Wed Dec 16 15:32:00 2015
@@ -16,8 +16,45 @@
  */
 public class TridentMCFilter extends EventReconFilter {
 
+    private boolean requireFrontHits = false;
+    private double minL12Kink = -1;
+    private double maxL12Kink = -1;
+    private double minL1Kink = -1;
+    private double maxL1Kink = -1;
+    private double minL2Kink = -1;
+    private double maxL2Kink = -1;
+
+    public void setMinL12Kink(double minL12Kink) {
+        this.minL12Kink = minL12Kink;
+    }
+
+    public void setMaxL12Kink(double maxL12Kink) {
+        this.maxL12Kink = maxL12Kink;
+    }
+
+    public void setMinL1Kink(double minL1Kink) {
+        this.minL1Kink = minL1Kink;
+    }
+
+    public void setMaxL1Kink(double maxL1Kink) {
+        this.maxL1Kink = maxL1Kink;
+    }
+
+    public void setMinL2Kink(double minL2Kink) {
+        this.minL2Kink = minL2Kink;
+    }
+
+    public void setMaxL2Kink(double maxL2Kink) {
+        this.maxL2Kink = maxL2Kink;
+    }
+
+    public void setRequireFrontHits(boolean requireFrontHits) {
+        this.requireFrontHits = requireFrontHits;
+    }
+
     @Override
     public void process(EventHeader event) {
+        incrementEventProcessed();
         List<MCParticle> MCParticles = event.getMCParticles();
 
         List<MCParticle> tridentParticles = null;
@@ -39,7 +76,11 @@
         int nElectronsWithTracks = 0, nPositronsWithTracks = 0;
         MCParticle electron = null, positron = null;
 
+        particleLoop:
         for (MCParticle particle : tridentParticles) {
+            if (!trackHitMap.containsKey(particle)) {
+                continue;
+            }
             Set<Integer> layers = trackHitMap.get(particle).keySet();
             int pairCount = 0;
             for (Integer layer : layers) {
@@ -47,31 +88,74 @@
                     pairCount++;
                 }
             }
-            boolean hasTrack = (pairCount >= 5);
+            if (pairCount < 5) {
+                continue;
+            }
+            if (requireFrontHits) {
+                for (int i = 1; i < 5; i++) {
+                    if (!layers.contains(i)) {
+                        continue particleLoop;
+                    }
+                }
+            }
 
-            if (hasTrack && particle.getCharge() < 0) {
+            if (particle.getCharge() < 0) {
                 nElectronsWithTracks++;
                 electron = particle;
             }
-            if (hasTrack && particle.getCharge() > 0) {
+            if (particle.getCharge() > 0) {
                 nPositronsWithTracks++;
                 positron = particle;
             }
         }
 
         if (electron == null || positron == null) {
-            System.out.println("not enough trident daughters with tracks");
+//            System.out.println("not enough trident daughters with tracks");
             skipEvent();
         }
 
         if (nElectronsWithTracks > 1 || nPositronsWithTracks > 1) {
-            System.out.println("too many trident daughters with tracks");
+//            System.out.println("too many trident daughters with tracks");
             skipEvent();
         }
 
-//        double deflection12_ele = KinkAnalysisDriver.deflection(trackHitMap.get(electron), 0, 4);
-//        double deflection12_pos = KinkAnalysisDriver.deflection(trackHitMap.get(positron), 0, 4);
+        double deflection12_ele = KinkAnalysisDriver.deflection(trackHitMap.get(electron), 0, 4);
+        double deflection12_pos = KinkAnalysisDriver.deflection(trackHitMap.get(positron), 0, 4);
+        double deflection1_ele = KinkAnalysisDriver.deflection(trackHitMap.get(electron), 0, 2);
+        double deflection1_pos = KinkAnalysisDriver.deflection(trackHitMap.get(positron), 0, 2);
+        double deflection2_ele = KinkAnalysisDriver.deflection(trackHitMap.get(electron), 2, 4);
+        double deflection2_pos = KinkAnalysisDriver.deflection(trackHitMap.get(positron), 2, 4);
+        if (minL12Kink > 0) {
+            if (Math.abs(deflection12_ele) < minL12Kink && Math.abs(deflection12_pos) < minL12Kink) {
+                skipEvent();
+            }
+        }
+        if (maxL12Kink > 0) {
+            if (Math.abs(deflection12_ele) > maxL12Kink || Math.abs(deflection12_pos) > maxL12Kink) {
+                skipEvent();
+            }
+        }
+        if (minL1Kink > 0) {
+            if (Math.abs(deflection1_ele) < minL1Kink && Math.abs(deflection1_pos) < minL1Kink) {
+                skipEvent();
+            }
+        }
+        if (maxL1Kink > 0) {
+            if (Math.abs(deflection1_ele) > maxL1Kink || Math.abs(deflection1_pos) > maxL1Kink) {
+                skipEvent();
+            }
+        }
+        if (minL2Kink > 0) {
+            if (Math.abs(deflection2_ele) < minL2Kink && Math.abs(deflection2_pos) < minL2Kink) {
+                skipEvent();
+            }
+        }
+        if (maxL2Kink > 0) {
+            if (Math.abs(deflection2_ele) > maxL2Kink || Math.abs(deflection2_pos) > maxL2Kink) {
+                skipEvent();
+            }
+        }
+
         incrementEventPassed();
-
     }
 }

Modified: java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java
 =============================================================================
--- java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java	(original)
+++ java/branches/jeremy-dev/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java	Wed Dec 16 15:32:00 2015
@@ -89,12 +89,10 @@
     IPlotter plotter55;
     IPlotter plotter6;
     IPlotter plotter66;
-    IPlotter plotter7;
     IPlotter plotter8;
     IPlotter plotter88;
     IPlotter plotter888;
     IPlotter plotter8888;
-    IPlotter plotter9;
     IPlotter top1;
     IPlotter top2;
     IPlotter top3;
@@ -114,11 +112,11 @@
     private boolean showPlots = true;
     private double _bfield;
     private static Logger LOGGER = Logger.getLogger(TrackingReconstructionPlots.class.getName());
+    private List<HpsSiSensor> sensors = new ArrayList<HpsSiSensor>();
 
     @Override
     protected void detectorChanged(Detector detector) {
         aida.tree().cd("/");
-        List<HpsSiSensor> sensors = new ArrayList<HpsSiSensor>();
         for(HpsSiSensor s : detector.getDetectorElement().findDescendants(HpsSiSensor.class)) {
             if(s.getName().startsWith("module_") && s.getName().endsWith("sensor0")) {
                 sensors.add(s);
@@ -128,833 +126,15 @@
         
         Hep3Vector bfieldvec = detector.getFieldMap().getField(new BasicHep3Vector(0., 0., 1.));
         _bfield = bfieldvec.y();
-
-        IAnalysisFactory fac = aida.analysisFactory();
-        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);
-
-        trkPx = aida.histogram1D("Track Momentum (Px)", 25, -0.25, 0.25);
-        IHistogram1D trkPy = aida.histogram1D("Track Momentum (Py)", 25, -0.5, 0.5);
-        IHistogram1D trkPz = aida.histogram1D("Track Momentum (Pz)", 25, 0, 1.5);
-        IHistogram1D trkChi2 = aida.histogram1D("Track Chi2", 25, 0, 25.0);
-
-        plotter.region(0).plot(trkPx);
-        plotter.region(1).plot(trkPy);
-        plotter.region(2).plot(trkPz);
-        plotter.region(3).plot(trkChi2);
-
-        if(showPlots) plotter.show();
-
-//   ******************************************************************
-        top1 = fac.createPlotterFactory().create("Top Tracking Plots");
-        top1.setTitle("Top Momentum");
-        IPlotterStyle stop1 = top1.style();
-        stop1.dataStyle().fillStyle().setColor("green");
-        stop1.dataStyle().errorBarStyle().setVisible(false);
-        top1.createRegions(2, 2);
-        //topFrame.addPlotter(top1);
-
-        IHistogram1D toptrkPx = aida.histogram1D("Top Track Momentum (Px)", 25, -0.25, 0.25);
-        IHistogram1D toptrkPy = aida.histogram1D("Top Track Momentum (Py)", 25, -0.5, 0.5);
-        IHistogram1D toptrkPz = aida.histogram1D("Top Track Momentum (Pz)", 25, 0, 1.5);
-        IHistogram1D toptrkChi2 = aida.histogram1D("Top Track Chi2", 25, 0, 25.0);
-
-        top1.region(0).plot(toptrkPx);
-        top1.region(1).plot(toptrkPy);
-        top1.region(2).plot(toptrkPz);
-        top1.region(3).plot(toptrkChi2);
-
-        if(showPlots) top1.show();
-
-        bot1 = fac.createPlotterFactory().create("Bottom Tracking Plots");
-        bot1.setTitle("Bottom Momentum");
-        IPlotterStyle sbot1 = bot1.style();
-        sbot1.dataStyle().fillStyle().setColor("blue");
-        sbot1.dataStyle().errorBarStyle().setVisible(false);
-        bot1.createRegions(2, 2);
-        //bottomFrame.addPlotter(bot1);
-
-        IHistogram1D bottrkPx = aida.histogram1D("Bottom Track Momentum (Px)", 25, -0.25, 0.25);
-        IHistogram1D bottrkPy = aida.histogram1D("Bottom Track Momentum (Py)", 25, -0.5, 0.5);
-        IHistogram1D bottrkPz = aida.histogram1D("Bottom Track Momentum (Pz)", 25, 0, 1.5);
-        IHistogram1D bottrkChi2 = aida.histogram1D("Bottom Track Chi2", 25, 0, 25.0);
-
-        bot1.region(0).plot(bottrkPx);
-        bot1.region(1).plot(bottrkPy);
-        bot1.region(2).plot(bottrkPz);
-        bot1.region(3).plot(bottrkChi2);
-
-        if(showPlots) bot1.show();
-
-//   ******************************************************************
-        IHistogram1D trkd0 = aida.histogram1D("d0 ", 25, -10.0, 10.0);
-        IHistogram1D trkphi = aida.histogram1D("sinphi ", 25, -0.2, 0.2);
-        IHistogram1D trkomega = aida.histogram1D("omega ", 25, -0.0025, 0.0025);
-        IHistogram1D trklam = aida.histogram1D("tan(lambda) ", 25, -0.1, 0.1);
-        IHistogram1D trkz0 = aida.histogram1D("z0 ", 25, -6.0, 6.0);
-
-        plotter22 = fac.createPlotterFactory().create("HPS Track Params");
-        plotter22.setTitle("Track parameters");
-        //plotterFrame.addPlotter(plotter22);
-        IPlotterStyle style22 = plotter22.style();
-        style22.dataStyle().fillStyle().setColor("yellow");
-        style22.dataStyle().errorBarStyle().setVisible(false);
-        plotter22.createRegions(2, 3);
-        plotter22.region(0).plot(trkd0);
-        plotter22.region(1).plot(trkphi);
-        plotter22.region(2).plot(trkomega);
-        plotter22.region(3).plot(trklam);
-        plotter22.region(4).plot(trkz0);
-        
-        if(showPlots) plotter22.show();
-
- //   ******************************************************************
-
-        
-         trkd0 = aida.histogram1D("d0 Top", 25, -10.0, 10.0);
-         trkphi = aida.histogram1D("sinphi Top", 25, -0.2, 0.2);
-         trkomega = aida.histogram1D("omega Top", 25, -0.0025, 0.0025);
-         trklam = aida.histogram1D("tan(lambda) Top", 25, -0.1, 0.1);
-         trkz0 = aida.histogram1D("z0 Top", 25, -6.0, 6.0);
-
-        plotter2221 = fac.createPlotterFactory().create("HPS Track Params");
-        plotter2221.setTitle("Track parameters");
-        //plotterFrame.addPlotter(plotter22);
-        IPlotterStyle style2221 = plotter2221.style();
-        style2221.dataStyle().fillStyle().setColor("yellow");
-        style2221.dataStyle().errorBarStyle().setVisible(false);
-        plotter2221.createRegions(2, 3);
-        plotter2221.region(0).plot(trkd0);
-        plotter2221.region(1).plot(trkphi);
-        plotter2221.region(2).plot(trkomega);
-        plotter2221.region(3).plot(trklam);
-        plotter2221.region(4).plot(trkz0);
-        
-        if(showPlots) plotter2221.show();
-        
-        
-   //   ******************************************************************
-
-        
-        trkd0 = aida.histogram1D("d0 Bottom", 25, -10.0, 10.0);
-        trkphi = aida.histogram1D("sinphi Bottom", 25, -0.2, 0.2);
-        trkomega = aida.histogram1D("omega Bottom", 25, -0.0025, 0.0025);
-        trklam = aida.histogram1D("tan(lambda) Bottom", 25, -0.1, 0.1);
-        trkz0 = aida.histogram1D("z0 Bottom", 25, -6.0, 6.0);
-
-       plotter2222 = fac.createPlotterFactory().create("HPS Track Params");
-       plotter2222.setTitle("Track parameters");
-       //plotterFrame.addPlotter(plotter22);
-       IPlotterStyle style2222 = plotter2222.style();
-       style2222.dataStyle().fillStyle().setColor("yellow");
-       style2222.dataStyle().errorBarStyle().setVisible(false);
-       plotter2222.createRegions(2, 3);
-       plotter2222.region(0).plot(trkd0);
-       plotter2222.region(1).plot(trkphi);
-       plotter2222.region(2).plot(trkomega);
-       plotter2222.region(3).plot(trklam);
-       plotter2222.region(4).plot(trkz0);
-       
-       if(showPlots) plotter2222.show();
-        
-        
-        
-   //   ******************************************************************
-
-        
-        plotter2 = fac.createPlotterFactory().create("HPS Tracking Plots");
-        plotter2.setTitle("Track extrapolation");
-        //plotterFrame.addPlotter(plotter2);
-        IPlotterStyle style2 = plotter2.style();
-        style2.dataStyle().fillStyle().setColor("yellow");
-        style2.dataStyle().errorBarStyle().setVisible(false);
-        plotter2.createRegions(2, 4);
-        IHistogram1D xAtConverter = aida.histogram1D("X (mm) @ Z=-60cm", 50, -50, 50);
-        IHistogram1D yAtConverter = aida.histogram1D("Y (mm) @ Z=-60cm", 50, -20, 20);
-        IHistogram1D xAtColl = aida.histogram1D("X (mm) @ Z=-150cm", 50, -200, 200);
-        IHistogram1D yAtColl = aida.histogram1D("Y (mm) @ Z=-150cm", 50, -200, 200);
-        IHistogram1D xAtEcal = aida.histogram1D("X (mm) @ ECAL", 50, -500, 500);
-        IHistogram1D yAtEcal = aida.histogram1D("Y (mm) @ ECAL", 50, -100, 100);
-        IHistogram1D xAtEcal2 = aida.histogram1D("X (mm) @ ECAL (Pz>1)", 50, -500, 500);
-        IHistogram1D yAtEcal2 = aida.histogram1D("Y (mm) @ ECAL (Pz>1)", 50, -100, 100);
-
-        plotter2.region(0).plot(xAtConverter);
-        plotter2.region(4).plot(yAtConverter);
-        plotter2.region(1).plot(xAtColl);
-        plotter2.region(5).plot(yAtColl);
-        plotter2.region(2).plot(xAtEcal);
-        plotter2.region(6).plot(yAtEcal);
-        plotter2.region(3).plot(xAtEcal2);
-        plotter2.region(7).plot(yAtEcal2);
-        
-        if(showPlots) plotter2.show();
-
-   //   ******************************************************************
-        
-        plotter222 = fac.createPlotterFactory().create("HPS Tracking Plots");
-        plotter222.setTitle("HPS Tracking Plots");
-        //plotterFrame.addPlotter(plotter222);
-        IPlotterStyle style222 = plotter222.style();
-        style222.dataStyle().fillStyle().setColor("yellow");
-        style222.dataStyle().errorBarStyle().setVisible(false);
-        plotter222.createRegions(2, 2);
-        
-        IHistogram1D nHits = aida.histogram1D("Hits per Track", 4, 3, 7);
-        nTracks = aida.histogram1D("Tracks per Event", 3, 0, 3);
-        IHistogram1D nHitsCluster = aida.histogram1D("Hits in Cluster (HitOnTrack)", 4, 0, 4);
-
-       
-        plotter222.region(0).plot(nHits);
-        plotter222.region(1).plot(nTracks);
-        plotter222.region(2).plot(nHitsCluster);
-        
-        if(showPlots) plotter222.show();
-   
-        
-   //   ******************************************************************
-        
-        plotter22299 = fac.createPlotterFactory().create("HPS Tracking Plots Top");
-        plotter22299.setTitle("HPS Tracking Plots Top");
-        //plotterFrame.addPlotter(plotter22299);
-        IPlotterStyle style22299 = plotter22299.style();
-        style22299.dataStyle().fillStyle().setColor("yellow");
-        style22299.dataStyle().errorBarStyle().setVisible(false);
-        plotter22299.createRegions(2, 2);
-        
-        IHistogram1D nHitsTop = aida.histogram1D("Hits per Track Top", 4, 3, 7);
-        nTracksTop = aida.histogram1D("Tracks per Event Top", 3, 0, 3);
-        IHistogram1D nHitsClusterTop = aida.histogram1D("Hits in Cluster (HitOnTrack) Top", 4, 0, 4);
-
-       
-        plotter22299.region(0).plot(nHitsTop);
-        plotter22299.region(1).plot(nTracksTop);
-        plotter22299.region(2).plot(nHitsClusterTop);
-        
-        if(showPlots) plotter22299.show();
-   
-//   ******************************************************************
-        
-        plotter22298 = fac.createPlotterFactory().create("HPS Tracking Plots Bottom");
-        plotter22298.setTitle("HPS Tracking Plots Bottom");
-        //plotterFrame.addPlotter(plotter22298);
-        IPlotterStyle style22298 = plotter22298.style();
-        style22298.dataStyle().fillStyle().setColor("yellow");
-        style22298.dataStyle().errorBarStyle().setVisible(false);
-        plotter22298.createRegions(2, 2);
-        
-        IHistogram1D nHitsBot = aida.histogram1D("Hits per Track Bot", 4, 3, 7);
-        nTracksBot = aida.histogram1D("Tracks per Event Bot", 3, 0, 3);
-        IHistogram1D nHitsClusterBot = aida.histogram1D("Hits in Cluster (HitOnTrack) Bot", 4, 0, 4);
-
-       
-        plotter22298.region(0).plot(nHitsBot);
-        plotter22298.region(1).plot(nTracksBot);
-        plotter22298.region(2).plot(nHitsClusterBot);
-        
-        if(showPlots) plotter22298.show();
-   
-        
-        //   ******************************************************************
-        
-        
-        plotter2223 = fac.createPlotterFactory().create("Cluster Amp Plots");
-        plotter2223.setTitle("Other");
-        //plotterFrame.addPlotter(plotter222);
-        IPlotterStyle style2223 = plotter2223.style();
-        style2223.dataStyle().fillStyle().setColor("yellow");
-        style2223.dataStyle().errorBarStyle().setVisible(false);
-        plotter2223.createRegions(2, 2);
-        
-       
-
-        IHistogram1D amp = aida.histogram1D("Amp (HitOnTrack)", 50, 0, 5000);
-        IHistogram1D ampcl = aida.histogram1D("Cluster Amp (HitOnTrack)", 50, 0, 5000);
-        IHistogram1D amp2 = aida.histogram1D("Amp Pz>0.8 (HitOnTrack)", 50, 0, 5000);
-        IHistogram1D ampcl2 = aida.histogram1D("Cluster Amp Pz>0.8 (HitOnTrack)", 50, 0, 5000);
-      
-        
-        plotter2223.region(0).plot(amp);
-        plotter2223.region(1).plot(amp2);
-        plotter2223.region(2).plot(ampcl);
-        plotter2223.region(3).plot(ampcl2);
-        
-        if(showPlots) plotter2223.show();
-   
-//   ******************************************************************
-        
-        
-        plotter2224 = fac.createPlotterFactory().create("t0 Plots");
-        plotter2224.setTitle("Other");
-        IPlotterStyle style2224 = plotter2224.style();
-        style2224.dataStyle().fillStyle().setColor("yellow");
-        style2224.dataStyle().errorBarStyle().setVisible(false);
-        plotter2224.createRegions(2, 2);
-                
-        IHistogram1D t0 = aida.histogram1D("t0 (HitOnTrack)", 50, -100, 100);
-        IHistogram1D t0cl = aida.histogram1D("Cluster t0 (HitOnTrack)", 50, -100, 100);
-        IHistogram1D t02 = aida.histogram1D("t0 Pz>0.8 (HitOnTrack)", 50, -100, 100);
-        IHistogram1D t0cl2 = aida.histogram1D("Cluster t0 Pz>0.8 (HitOnTrack)", 50, -100, 100);
-        
-        plotter2224.region(0).plot(t0);
-        plotter2224.region(1).plot(t0cl);
-        plotter2224.region(2).plot(t02);
-        plotter2224.region(3).plot(t0cl2);
-
-        if(showPlots) plotter2224.show();
-   
-        
-        //   ******************************************************************
-          
-        plotter3 = fac.createPlotterFactory().create("HPS Layer Residual Plots");
-        plotter3.setTitle("Layer Residuals");
-        //plotterFrame.addPlotter(plotter3);
-        IPlotterStyle style3 = plotter3.style();
-        style3.dataStyle().fillStyle().setColor("yellow");
-        style3.dataStyle().errorBarStyle().setVisible(false);
-        plotter3.createRegions(6, 2);
-
-       
-
-        IHistogram1D mod1ResX = aida.histogram1D("Layer 1 Residual X(mm)", 25, -1, 1);
-        IHistogram1D mod1ResY = aida.histogram1D("Layer 1 Residual Y(mm)", 25, -0.04, 0.04);
-
-        IHistogram1D mod2ResX = aida.histogram1D("Layer 2 Residual X(mm)", 25, -2, 2);
-        IHistogram1D mod2ResY = aida.histogram1D("Layer 2 Residual Y(mm)", 25, -1, 1);
-
-        IHistogram1D mod3ResX = aida.histogram1D("Layer 3 Residual X(mm)", 25, -2.5, 2.5);
-        IHistogram1D mod3ResY = aida.histogram1D("Layer 3 Residual Y(mm)", 25, -1.5, 1.5);
-
-        IHistogram1D mod4ResX = aida.histogram1D("Layer 4 Residual X(mm)", 25, -3.0, 3.0);
-        IHistogram1D mod4ResY = aida.histogram1D("Layer 4 Residual Y(mm)", 25, -2, 2);
-
-        IHistogram1D mod5ResX = aida.histogram1D("Layer 5 Residual X(mm)", 25, -4, 4);
-        IHistogram1D mod5ResY = aida.histogram1D("Layer 5 Residual Y(mm)", 25, -3, 3);
-
-        IHistogram1D mod6ResX = aida.histogram1D("Layer 6 Residual X(mm)", 25, -5, 5);
-        IHistogram1D mod6ResY = aida.histogram1D("Layer 6 Residual Y(mm)", 25, -3, 3);
-
-        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(10).plot(mod6ResX);
-
-        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);
-        plotter3.region(11).plot(mod6ResY);
-               
-        if(showPlots) plotter3.show();
-        
-        
-        
-        plotter3_11 = fac.createPlotterFactory().create("HPS Strip Residual Plots");
-        plotter3_11.setTitle("Strip Residuals (Top)");
-        //plotterFrame.addPlotter(plotter3_11);
-        IPlotterStyle style3_11 = plotter3_11.style();
-        style3_11.dataStyle().fillStyle().setColor("yellow");
-        style3_11.dataStyle().errorBarStyle().setVisible(false);
-        plotter3_11.createRegions(6, 6);
-        int i=0;
-        for(HpsSiSensor sensor : sensors) {
-            double min = 0.0;
-            double max = 0.0;
-            if(sensor.getName().contains("L1")) {
-                min=-0.04; max=0.04;
-            } else if(sensor.getName().contains("L2")) {
-                min=-1; max=1;
-            } else if(sensor.getName().contains("L3")) {
-                min=-1.5; max=1.5;
-            } else if(sensor.getName().contains("L4")) {
-                min=-3; max=3;
-            } else if(sensor.getName().contains("L5")) {
-                min=-4; max=4;
-            } else if(sensor.getName().contains("L6")) {
-                min=-5; max=5;
-            } else {
-                throw new RuntimeException("Invalid sensor name: " + sensor.getName());
-            }
-           IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip residual (mm)", 50, min, max);
-            plotter3_11.region(i).plot(resX);
-            i++;
-        }
-
-        if(showPlots) plotter3_11.show();
-        
-
-        plotter3_1 = fac.createPlotterFactory().create("HPS Residual Plots (Single hit per layer)");
-        plotter3_1.setTitle("Residuals (Top)");
-        //plotterFrame.addPlotter(plotter3_1);
-        IPlotterStyle style3_1 = plotter3_1.style();
-        style3_1.dataStyle().fillStyle().setColor("yellow");
-        style3_1.dataStyle().errorBarStyle().setVisible(false);
-        plotter3_1.createRegions(6, 2);
-        
-        IHistogram1D mod1ResX_Top = aida.histogram1D("Layer 1 Residual X(mm) Top", 25, -1, 1);
-        IHistogram1D mod1ResY_Top = aida.histogram1D("Layer 1 Residual Y(mm) Top", 25, -0.04, 0.04);
-
-        IHistogram1D mod2ResX_Top = aida.histogram1D("Layer 2 Residual X(mm) Top", 25, -2, 2);
-        IHistogram1D mod2ResY_Top = aida.histogram1D("Layer 2 Residual Y(mm) Top", 25, -1, 1);
-
-        IHistogram1D mod3ResX_Top = aida.histogram1D("Layer 3 Residual X(mm) Top", 25, -2.5, 2.5);
-        IHistogram1D mod3ResY_Top = aida.histogram1D("Layer 3 Residual Y(mm) Top", 25, -1.5, 1.5);
-
-        IHistogram1D mod4ResX_Top = aida.histogram1D("Layer 4 Residual X(mm) Top", 25, -3.0, 3.0);
-        IHistogram1D mod4ResY_Top = aida.histogram1D("Layer 4 Residual Y(mm) Top", 25, -2, 2);
-
-        IHistogram1D mod5ResX_Top = aida.histogram1D("Layer 5 Residual X(mm) Top", 25, -4, 4);
-        IHistogram1D mod5ResY_Top = aida.histogram1D("Layer 5 Residual Y(mm) Top", 25, -3, 3);
-
-        IHistogram1D mod6ResX_Top = aida.histogram1D("Layer 6 Residual X(mm) Top", 25, -5, 5);
-        IHistogram1D mod6ResY_Top = aida.histogram1D("Layer 6 Residual Y(mm) Top", 25, -3, 3);
-
-        
-        plotter3_1.region(0).plot(mod1ResX_Top);
-        plotter3_1.region(2).plot(mod2ResX_Top);
-        plotter3_1.region(4).plot(mod3ResX_Top);
-        plotter3_1.region(6).plot(mod4ResX_Top);
-        plotter3_1.region(8).plot(mod5ResX_Top);
-        plotter3_1.region(10).plot(mod6ResX_Top);
-
-        plotter3_1.region(1).plot(mod1ResY_Top);
-        plotter3_1.region(3).plot(mod2ResY_Top);
-        plotter3_1.region(5).plot(mod3ResY_Top);
-        plotter3_1.region(7).plot(mod4ResY_Top);
-        plotter3_1.region(9).plot(mod5ResY_Top);
-        plotter3_1.region(11).plot(mod6ResY_Top);
-
-        if(showPlots) plotter3_1.show();
-        
-        plotter3_2 = fac.createPlotterFactory().create("HPS Residual Plots (Single strip cluster per layer)");
-        plotter3_2.setTitle("Residuals (Bottom)");
-        //plotterFrame.addPlotter(plotter3_2);
-        IPlotterStyle style3_2 = plotter3_2.style();
-        style3_2.dataStyle().fillStyle().setColor("yellow");
-        style3_2.dataStyle().errorBarStyle().setVisible(false);
-        plotter3_2.createRegions(6, 2);
-
-        IHistogram1D mod1ResX_Bottom = aida.histogram1D("Layer 1 Residual X(mm) Bottom", 25, -1, 1);
-        IHistogram1D mod1ResY_Bottom = aida.histogram1D("Layer 1 Residual Y(mm) Bottom", 25, -0.04, 0.04);
-
-        IHistogram1D mod2ResX_Bottom = aida.histogram1D("Layer 2 Residual X(mm) Bottom", 25, -2, 2);
-        IHistogram1D mod2ResY_Bottom = aida.histogram1D("Layer 2 Residual Y(mm) Bottom", 25, -1, 1);
-
-        IHistogram1D mod3ResX_Bottom = aida.histogram1D("Layer 3 Residual X(mm) Bottom", 25, -2.5, 2.5);
-        IHistogram1D mod3ResY_Bottom = aida.histogram1D("Layer 3 Residual Y(mm) Bottom", 25, -1.5, 1.5);
-
-        IHistogram1D mod4ResX_Bottom = aida.histogram1D("Layer 4 Residual X(mm) Bottom", 25, -3.0, 3.0);
-        IHistogram1D mod4ResY_Bottom = aida.histogram1D("Layer 4 Residual Y(mm) Bottom", 25, -2, 2);
-
-        IHistogram1D mod5ResX_Bottom = aida.histogram1D("Layer 5 Residual X(mm) Bottom", 25, -4, 4);
-        IHistogram1D mod5ResY_Bottom = aida.histogram1D("Layer 5 Residual Y(mm) Bottom", 25, -3, 3);
-
-        IHistogram1D mod6ResX_Bottom = aida.histogram1D("Layer 6 Residual X(mm) Bottom", 25, -5, 5);
-        IHistogram1D mod6ResY_Bottom = aida.histogram1D("Layer 6 Residual Y(mm) Bottom", 25, -3, 3);
-
-        plotter3_2.region(0).plot(mod1ResX_Bottom);
-        plotter3_2.region(2).plot(mod2ResX_Bottom);
-        plotter3_2.region(4).plot(mod3ResX_Bottom);
-        plotter3_2.region(6).plot(mod4ResX_Bottom);
-        plotter3_2.region(8).plot(mod5ResX_Bottom);
-        plotter3_2.region(10).plot(mod6ResX_Bottom);
-
-        plotter3_2.region(1).plot(mod1ResY_Bottom);
-        plotter3_2.region(3).plot(mod2ResY_Bottom);
-        plotter3_2.region(5).plot(mod3ResY_Bottom);
-        plotter3_2.region(7).plot(mod4ResY_Bottom);
-        plotter3_2.region(9).plot(mod5ResY_Bottom);
-        plotter3_2.region(11).plot(mod6ResY_Bottom);
-        
-        if(showPlots) plotter3_2.show();
-
-        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, 3);
-
-        IHistogram2D eVsP = aida.histogram2D("Energy Vs Momentum", 50, 0, 0.50, 50, 0, 1.5);
-        IHistogram1D eOverP = aida.histogram1D("Energy Over Momentum", 50, 0, 2);
-
-        IHistogram1D distX = aida.histogram1D("deltaX", 50, -100, 100);
-        IHistogram1D distY = aida.histogram1D("deltaY", 50, -40, 40);
-
-        IHistogram2D xEcalVsTrk = aida.histogram2D("X ECal Vs Track", 100, -400, 400, 100, -400, 400);
-        IHistogram2D yEcalVsTrk = aida.histogram2D("Y ECal Vs Track", 100, -100, 100, 100, -100, 100);
-
-        plotter4.region(0).plot(eVsP);
-        plotter4.region(3).plot(eOverP);
-        plotter4.region(1).plot(distX);
-        plotter4.region(4).plot(distY);
-        plotter4.region(2).plot(xEcalVsTrk);
-        plotter4.region(5).plot(yEcalVsTrk);
-
-        if(showPlots) plotter4.show();
-
-        //   ******************************************************************
-        top2 = fac.createPlotterFactory().create("Top ECal Plots");
-        top2.setTitle("Top ECal Correlations");
-        IPlotterStyle stop2 = top2.style();
-        stop2.dataStyle().fillStyle().setColor("green");
-        stop2.dataStyle().errorBarStyle().setVisible(false);
-        stop2.setParameter("hist2DStyle", "colorMap");
-        stop2.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
-        top2.createRegions(2, 3);
-        //topFrame.addPlotter(top2);
-
-        IHistogram2D topeVsP = aida.histogram2D("Top Energy Vs Momentum", 50, 0, 0.500, 50, 0, 1.5);
-        IHistogram1D topeOverP = aida.histogram1D("Top Energy Over Momentum", 50, 0, 2);
-
-        IHistogram1D topdistX = aida.histogram1D("Top deltaX", 50, -100, 100);
-        IHistogram1D topdistY = aida.histogram1D("Top deltaY", 50, -40, 40);
-
-        IHistogram2D topxEcalVsTrk = aida.histogram2D("Top X ECal Vs Track", 100, -400, 400, 100, -100, 100);
-        IHistogram2D topyEcalVsTrk = aida.histogram2D("Top Y ECal Vs Track", 100, 0, 100, 100, 0, 100);
-
-        top2.region(0).plot(topeVsP);
-        top2.region(3).plot(topeOverP);
-        top2.region(1).plot(topdistX);
-        top2.region(4).plot(topdistY);
-        top2.region(2).plot(topxEcalVsTrk);
-        top2.region(5).plot(topyEcalVsTrk);
-
-        if(showPlots) top2.show();
-        
-        bot2 = fac.createPlotterFactory().create("Bottom ECal Plots");
-        bot2.setTitle("Bottom ECal Correlations");
-        IPlotterStyle sbot2 = bot2.style();
-        sbot2.dataStyle().fillStyle().setColor("green");
-        sbot2.dataStyle().errorBarStyle().setVisible(false);
-        sbot2.setParameter("hist2DStyle", "colorMap");
-        sbot2.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
-        bot2.createRegions(2, 3);
-        //bottomFrame.addPlotter(bot2);
-
-        IHistogram2D BottomeVsP = aida.histogram2D("Bottom Energy Vs Momentum", 50, 0, 0.500, 50, 0, 1.5);
-        IHistogram1D BottomeOverP = aida.histogram1D("Bottom Energy Over Momentum", 50, 0, 2);
-
-        IHistogram1D BottomdistX = aida.histogram1D("Bottom deltaX", 50, -100, 100);
-        IHistogram1D BottomdistY = aida.histogram1D("Bottom deltaY", 50, -40, 40);
-
-        IHistogram2D BottomxEcalVsTrk = aida.histogram2D("Bottom X ECal Vs Track", 100, -400, 400, 100, -400, 400);
-        IHistogram2D BottomyEcalVsTrk = aida.histogram2D("Bottom Y ECal Vs Track", 100, -100, 0, 100, -100, 0);
-
-        bot2.region(0).plot(BottomeVsP);
-        bot2.region(3).plot(BottomeOverP);
-        bot2.region(1).plot(BottomdistX);
-        bot2.region(4).plot(BottomdistY);
-        bot2.region(2).plot(BottomxEcalVsTrk);
-        bot2.region(5).plot(BottomyEcalVsTrk);
-
-        if(showPlots) bot2.show();
-        
-        
-        //   ******************************************************************
-        top3 = fac.createPlotterFactory().create("Top ECal Plots");
-        top3.setTitle("Top ECal More Correlations");
-        IPlotterStyle stop3 = top3.style();
-        stop3.dataStyle().fillStyle().setColor("green");
-        stop3.dataStyle().errorBarStyle().setVisible(false);
-        stop3.setParameter("hist2DStyle", "colorMap");
-        stop3.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
-        top3.createRegions(1, 2);
-        //topFrame.addPlotter(top3);
-
-        IHistogram2D topdistXvsX = aida.histogram2D("Top deltaX vs X", 51, -400, 400, 25, -100, 100);
-        IHistogram2D topdistYvsY = aida.histogram2D("Top deltaY vs Y", 51, 0, 100, 25, -40, 40);
-
-        top3.region(0).plot(topdistXvsX);
-        top3.region(1).plot(topdistYvsY);
-
-        if(showPlots) top3.show();
-        
-        bot3 = fac.createPlotterFactory().create("Bottom ECal Plots");
-        bot3.setTitle("Bottom ECal More Correlations");
-        IPlotterStyle sbot3 = bot3.style();
-        sbot3.dataStyle().fillStyle().setColor("green");
-        sbot3.dataStyle().errorBarStyle().setVisible(false);
-        sbot3.setParameter("hist2DStyle", "colorMap");
-        sbot3.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
-        bot3.createRegions(1, 2);
-        //bottomFrame.addPlotter(bot3);
-
-        IHistogram2D botdistXvsX = aida.histogram2D("Bottom deltaX vs X", 51, -400, 400, 25, -100, 100);
-        IHistogram2D botdistYvsY = aida.histogram2D("Bottom deltaY vs Y", 51, -100, 0, 25, -40, 40);
-
-        bot3.region(0).plot(botdistXvsX);
-        bot3.region(1).plot(botdistYvsY);
-
-        if(showPlots) bot3.show();
-        
-        //   ******************************************************************
-        top4 = fac.createPlotterFactory().create("Track Matching Plots");
-        top4.setTitle("Track Matching Plots");
-        IPlotterStyle stop4 = top4.style();
-        stop4.dataStyle().fillStyle().setColor("green");
-        stop4.dataStyle().errorBarStyle().setVisible(false);
-        stop4.setParameter("hist2DStyle", "colorMap");
-        stop4.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
-        top4.createRegions(2, 3);
-        //topFrame.addPlotter(top4);
-
-        IHistogram1D trackmatchN = aida.histogram1D("Tracks matched", 3, 0, 3);
-        IHistogram1D toptrackmatchN = aida.histogram1D("Tracks matched Top", 3, 0, 3);
-        IHistogram1D bottrackmatchN = aida.histogram1D("Tracks matched Bottom", 3, 0, 3);
-        IHistogram1D trackmatchN2 = aida.histogram1D("Tracks matched (Pz>0.8)", 3, 0, 3);
-        IHistogram1D toptrackmatchN2 = aida.histogram1D("Tracks matched Top (Pz>0.8)", 3, 0, 3);
-        IHistogram1D bottrackmatchN2 = aida.histogram1D("Tracks matched Bottom (Pz>0.8)", 3, 0, 3);
-        
-        top4.region(0).plot(trackmatchN);
-        top4.region(1).plot(toptrackmatchN);
-        top4.region(2).plot(bottrackmatchN);
-        top4.region(3).plot(trackmatchN2);
-        top4.region(4).plot(toptrackmatchN2);
-        top4.region(5).plot(bottrackmatchN2);
-
-        if(showPlots) top4.show();
-        
-        //   ******************************************************************
-        top44 = fac.createPlotterFactory().create("e+e- Plots");
-        top44.setTitle("e+e- Plots");
-        IPlotterStyle stop44 = top44.style();
-        stop44.dataStyle().fillStyle().setColor("green");
-        stop44.dataStyle().errorBarStyle().setVisible(false);
-        stop44.setParameter("hist2DStyle", "colorMap");
-        stop44.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
-        top44.createRegions(2,4);
-        //topFrame.addPlotter(top44);
-
-        IHistogram2D trackPCorr = aida.histogram2D("p(e-) vs p(e+) max", 25, 0, 1.2, 25, 0, 1.2);
-        IHistogram1D ne = aida.histogram1D("n(e-)", 3, 0, 3);
-        IHistogram1D np = aida.histogram1D("n(e+)", 3, 0, 3);
-        IHistogram1D pem = aida.histogram1D("p(e-) max", 25, 0, 1.5);
-        IHistogram1D pe = aida.histogram1D("p(e-)", 25, 0, 1.5);
-        IHistogram1D ppm = aida.histogram1D("p(e+) max", 25, 0, 1.5);
-        IHistogram1D pp = aida.histogram1D("p(e+)", 25, 0, 1.5);
-        
-        top44.region(0).plot(trackPCorr);
-        top44.region(1).plot(ne);
-        top44.region(2).plot(np);
-        top44.region(3).plot(pe);
-        top44.region(4).plot(pp);
-        top44.region(5).plot(pem);
-        top44.region(6).plot(ppm);
-        
-        if(showPlots) top44.show();
-        
-        
-        
-//   ******************************************************************
-        plotter5 = fac.createPlotterFactory().create("HPS Hit Positions");
-        plotter5.setTitle("Hit Positions:  Top");
-        //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);
-
-        IHistogram2D l1Pos = aida.histogram2D("Layer 1 HTH Position:  Top", 50, -55, 55, 55, -25, 25);
-        IHistogram2D l7Pos = aida.histogram2D("Layer 7 HTH Position:  Top", 50, -55, 55, 55, -25, 25);
-
-        plotter5.region(0).plot(l1Pos);
-        plotter5.region(1).plot(l7Pos);
-        
-        if(showPlots) plotter5.show();
-        
-        plotter5_1 = fac.createPlotterFactory().create("HPS Hit Positions");
-        plotter5_1.setTitle("Hit Positions:  Bottom");
-        //plotterFrame.addPlotter(plotter5_1);
-        IPlotterStyle style5_1 = plotter5_1.style();
-        style5_1.setParameter("hist2DStyle", "colorMap");
-        style5_1.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
-        style5_1.dataStyle().fillStyle().setColor("yellow");
-        style5_1.dataStyle().errorBarStyle().setVisible(false);
-        plotter5_1.createRegions(1, 2);
-
-        
-        IHistogram2D l1PosBot = aida.histogram2D("Layer 1 HTH Position:  Bottom", 50, -55, 55, 55, -25, 25);
-        IHistogram2D l7PosBot = aida.histogram2D("Layer 7 HTH Position:  Bottom", 50, -55, 55, 55, -25, 25);
-        plotter5_1.region(0).plot(l1PosBot);
-        plotter5_1.region(1).plot(l7PosBot);
-
-        if(showPlots) plotter5_1.show();
-
-        plotter55 = fac.createPlotterFactory().create("HPS Hit Positions");
-        plotter55.setTitle("Helical Track Hits");
-        //plotterFrame.addPlotter(plotter55);
-        IPlotterStyle style55 = plotter55.style();
-        style55.dataStyle().fillStyle().setColor("Green");
-        style55.dataStyle().errorBarStyle().setVisible(false);
-        style55.dataStyle().markerStyle().setSize(20);
-        plotter55.createRegions(1, 2);
-
-        IProfile avgLayersTopPlot = aida.profile1D("Number of Stereo Hits per layer in Top Half", 13, 0, 13);
-        IProfile avgLayersBottomPlot = aida.profile1D("Number of Stereo Hits per layer in Bottom Half", 13, 0, 13);
-
-        plotter55.region(0).plot(avgLayersTopPlot);
-        plotter55.region(1).plot(avgLayersBottomPlot);
-
-        if(showPlots) plotter55.show();
-
-        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(4, 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);
-        IHistogram2D topECal1 = aida.histogram2D("Top ECal Cluster Position (>0 tracks)", 50, -400, 400, 10, 0, 100);
-        IHistogram2D botECal1 = aida.histogram2D("Bottom ECal Cluster Position (>0 tracks)", 50, -400, 400, 10, -100, 0);
-        IHistogram2D topECal2 = aida.histogram2D("Top ECal Cluster Position (E>0.1,>0 tracks)", 50, -400, 400, 10, 0, 100);
-        IHistogram2D botECal2 = aida.histogram2D("Bottom ECal Cluster Position (E>0.1,>0 tracks)", 50, -400, 400, 10, -100, 0);
-        IHistogram2D topECal3 = aida.histogram2D("Top ECal Cluster Position w_E (E>0.1,>0 tracks)", 50, -400, 400, 10, 0, 100);
-        IHistogram2D botECal3 = aida.histogram2D("Bottom ECal Cluster Position w_E (E>0.1,>0 tracks)", 50, -400, 400, 10, -100, 0);
-
-        plotter6.region(0).plot(topECal);
-        plotter6.region(1).plot(botECal);
-        plotter6.region(2).plot(topECal1);
-        plotter6.region(3).plot(botECal1);
-        plotter6.region(4).plot(topECal2);
-        plotter6.region(5).plot(botECal2);
-        plotter6.region(6).plot(topECal3);
-        plotter6.region(7).plot(botECal3);
-        
-        if(showPlots) plotter6.show();
-        
-        
-        plotter66 = fac.createPlotterFactory().create("HPS ECAL Basic Plots");
-        plotter66.setTitle("ECAL Basic Plots");
-        //plotterFrame.addPlotter(plotter6);
-        IPlotterStyle style66 = plotter66.style();
-        style66.dataStyle().fillStyle().setColor("yellow");
-        style66.dataStyle().errorBarStyle().setVisible(false);
-        plotter66.createRegions(2, 2);
-
-        IHistogram1D topECalE = aida.histogram1D("Top ECal Cluster Energy", 50, 0, 2);
-        IHistogram1D botECalE = aida.histogram1D("Bottom ECal Cluster Energy", 50, 0, 2);
-        IHistogram1D topECalN = aida.histogram1D("Number of Clusters Top", 6, 0, 6);
-        IHistogram1D botECalN = aida.histogram1D("Number of Clusters Bot", 6, 0, 6);
-        
-        plotter66.region(0).plot(topECalE);
-        plotter66.region(1).plot(botECalE);
-        plotter66.region(2).plot(botECalN);
-        plotter66.region(3).plot(topECalN);
-        
-        if(showPlots) plotter66.show();
-        
-        
-        plotter7 = fac.createPlotterFactory().create("HPS ECAL Hit Positions");
-        plotter7.setTitle("Basic Misc Stuff");
-        //plotterFrame.addPlotter(plotter7);
-        IPlotterStyle style7 = plotter7.style();
-        style7.setParameter("hist2DStyle", "colorMap");
-        style7.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
-        style7.dataStyle().fillStyle().setColor("yellow");
-        style7.dataStyle().errorBarStyle().setVisible(false);
-        plotter7.createRegions(2, 2);
-
-        IHistogram2D quadrants = aida.histogram2D("Charge vs Slope", 2, -1, 1, 2, -1, 1);
-        plotter7.region(0).plot(quadrants);
-        
-        if(showPlots) plotter7.show();
-        
-        plotter8 = fac.createPlotterFactory().create("HPS Strip Hit From Stereo Multiplicity");
-        plotter8.setTitle("Strip Hit Multiplicity");
-        //plotterFrame.addPlotter(plotter8);
-        IPlotterStyle style8 = plotter8.style();
-        style8.dataStyle().fillStyle().setColor("yellow");
-        style8.dataStyle().errorBarStyle().setVisible(false);
-        plotter8.createRegions(6, 6);
-        i=0;
-        for(SiSensor sensor : sensors) {
-            IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip hits from stereo", 10, 0, 10);
-            plotter8.region(i).plot(resX);
-            i++;
-        }
-
-        if(showPlots) plotter8.show();
-        
-        plotter88 = fac.createPlotterFactory().create("HPS Strip Hit Multiplicity");
-        plotter88.setTitle("Strip Hit Multiplicity");
-        //plotterFrame.addPlotter(plotter88);
-        plotter88.setStyle(style8);
-        plotter88.createRegions(6, 6);
-        i=0;
-        for(SiSensor sensor : sensors) {
-            IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip hits", 10, 0, 10);
-            plotter88.region(i).plot(resX);
-            i++;
-        }
-
-        if(showPlots) plotter88.show();
-        
-        
-        plotter9 = fac.createPlotterFactory().create("HPS Strip Hit On Track Multiplicity");
-        plotter9.setTitle("Strip Hit Multiplicity");
-        //plotterFrame.addPlotter(plotter9);
-        IPlotterStyle style9 = plotter9.style();
-        style9.dataStyle().fillStyle().setColor("yellow");
-        style9.dataStyle().errorBarStyle().setVisible(false);
-        plotter9.createRegions(6, 6);
-        i=0;
-        for(SiSensor sensor : sensors) {
-            IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip hits on track", 3, 0, 3);
-            plotter9.region(i).plot(resX);
-            i++;
-        }
-
-        if(showPlots) plotter9.show();
-        
-        
-        plotter888 = fac.createPlotterFactory().create("HPS Strip Hit Isolation");
-        plotter888.setTitle("Strip Hit Isolation");
-        //plotterFrame.addPlotter(plotter88);
-        plotter888.setStyle(style8);
-        plotter888.createRegions(6, 6);
-        i=0;
-        for(SiSensor sensor : sensors) {
-            IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip hits iso", 50, 0, 5);
-            plotter888.region(i).plot(resX);
-            i++;
-        }
-
-        if(showPlots) plotter888.show();
-        
-        plotter8888 = fac.createPlotterFactory().create("HPS Strip Hit On Track Isolation");
-        plotter8888.setTitle("Strip Hit On Track Isolation");
-        //plotterFrame.addPlotter(plotter88);
-        plotter8888.setStyle(style8);
-        plotter8888.createRegions(6, 6);
-        i=0;
-        for(SiSensor sensor : sensors) {
-            IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip hits iso on track", 50, 0, 5);
-            plotter8888.region(i).plot(resX);
-            i++;
-        }
-
-        if(showPlots) plotter8888.show();
-
-
+        
+        setupPlots();
     }
+    
+    
+    
+    
+    
+    
 
     public TrackingReconstructionPlots() {
         LOGGER.setLevel(Level.WARNING);
@@ -1170,13 +350,8 @@
 
             int isTop = -1;
             if (trk.getTrackerHits().get(0).getPosition()[2] > 0) {
-                isTop = 0;//make plot look pretty
-            }
-            int charge = trk.getCharge();
-            if (charge > 0) {
-                charge = 0;//make plot look pretty
-            }//            System.out.println("Charge = " + charge + "; isTop = " + isTop);
-            aida.histogram2D("Charge vs Slope").fill(charge, isTop);
+                isTop = 0;
+            }
             if (isTop == 0) {
                 aida.histogram1D("Top Track Momentum (Px)").fill(trk.getTrackStates().get(0).getMomentum()[1]);
                 aida.histogram1D("Top Track Momentum (Py)").fill(trk.getTrackStates().get(0).getMomentum()[2]);
@@ -1304,8 +479,6 @@
                     layersBot[htc.Layer() - 1]++;
                     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:  Bottom").fill(x - sensorPos.x(), y - sensorPos.y());
                     }
                     if (htc.Layer() == 7) {
@@ -1319,7 +492,7 @@
                         double clusterSum = 0;
                         double clusterT0 = 0;
                         int nHitsCluster = 0;
-                                
+                        
                         for (RawTrackerHit rawHit : (List<RawTrackerHit>) hts.rawhits()) {
                             if(event.hasCollection(LCRelation.class, "SVTFittedRawTrackerHits")) {
                                 List<LCRelation> fittedHits = event.get(LCRelation.class, "SVTFittedRawTrackerHits");
@@ -1361,7 +534,6 @@
             }
             
             for(Map.Entry<HpsSiSensor,Integer> sensor : stripHitsOnTrack.entrySet()) {
-                aida.histogram1D(sensor.getKey().getName() + " strip hits on track").fill(sensor.getValue());
                 aida.histogram1D(sensor.getKey().getName() + " strip hits iso on track").fill(stripHitsIsoOnTrack.get(sensor.getKey()));
             }
             
@@ -1645,6 +817,813 @@
 
 
     
+    
+private void setupPlots() {
+        
+        
+        IAnalysisFactory fac = aida.analysisFactory();
+        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);
+
+        trkPx = aida.histogram1D("Track Momentum (Px)", 25, -0.25, 0.25);
+        IHistogram1D trkPy = aida.histogram1D("Track Momentum (Py)", 25, -0.5, 0.5);
+        IHistogram1D trkPz = aida.histogram1D("Track Momentum (Pz)", 25, 0, 1.5);
+        IHistogram1D trkChi2 = aida.histogram1D("Track Chi2", 25, 0, 25.0);
+
+        plotter.region(0).plot(trkPx);
+        plotter.region(1).plot(trkPy);
+        plotter.region(2).plot(trkPz);
+        plotter.region(3).plot(trkChi2);
+
+        if(showPlots) plotter.show();
+
+//   ******************************************************************
+        top1 = fac.createPlotterFactory().create("Top Tracking Plots");
+        top1.setTitle("Top Momentum");
+        IPlotterStyle stop1 = top1.style();
+        stop1.dataStyle().fillStyle().setColor("green");
+        stop1.dataStyle().errorBarStyle().setVisible(false);
+        top1.createRegions(2, 2);
+        //topFrame.addPlotter(top1);
+
+        IHistogram1D toptrkPx = aida.histogram1D("Top Track Momentum (Px)", 25, -0.25, 0.25);
+        IHistogram1D toptrkPy = aida.histogram1D("Top Track Momentum (Py)", 25, -0.5, 0.5);
+        IHistogram1D toptrkPz = aida.histogram1D("Top Track Momentum (Pz)", 25, 0, 1.5);
+        IHistogram1D toptrkChi2 = aida.histogram1D("Top Track Chi2", 25, 0, 25.0);
+
+        top1.region(0).plot(toptrkPx);
+        top1.region(1).plot(toptrkPy);
+        top1.region(2).plot(toptrkPz);
+        top1.region(3).plot(toptrkChi2);
+
+        if(showPlots) top1.show();
+
+        bot1 = fac.createPlotterFactory().create("Bottom Tracking Plots");
+        bot1.setTitle("Bottom Momentum");
+        IPlotterStyle sbot1 = bot1.style();
+        sbot1.dataStyle().fillStyle().setColor("blue");
+        sbot1.dataStyle().errorBarStyle().setVisible(false);
+        bot1.createRegions(2, 2);
+        //bottomFrame.addPlotter(bot1);
+
+        IHistogram1D bottrkPx = aida.histogram1D("Bottom Track Momentum (Px)", 25, -0.25, 0.25);
+        IHistogram1D bottrkPy = aida.histogram1D("Bottom Track Momentum (Py)", 25, -0.5, 0.5);
+        IHistogram1D bottrkPz = aida.histogram1D("Bottom Track Momentum (Pz)", 25, 0, 1.5);
+        IHistogram1D bottrkChi2 = aida.histogram1D("Bottom Track Chi2", 25, 0, 25.0);
+
+        bot1.region(0).plot(bottrkPx);
+        bot1.region(1).plot(bottrkPy);
+        bot1.region(2).plot(bottrkPz);
+        bot1.region(3).plot(bottrkChi2);
+
+        if(showPlots) bot1.show();
+
+//   ******************************************************************
+        IHistogram1D trkd0 = aida.histogram1D("d0 ", 25, -10.0, 10.0);
+        IHistogram1D trkphi = aida.histogram1D("sinphi ", 25, -0.2, 0.2);
+        IHistogram1D trkomega = aida.histogram1D("omega ", 25, -0.0025, 0.0025);
+        IHistogram1D trklam = aida.histogram1D("tan(lambda) ", 25, -0.1, 0.1);
+        IHistogram1D trkz0 = aida.histogram1D("z0 ", 25, -6.0, 6.0);
+
+        plotter22 = fac.createPlotterFactory().create("HPS Track Params");
+        plotter22.setTitle("Track parameters");
+        //plotterFrame.addPlotter(plotter22);
+        IPlotterStyle style22 = plotter22.style();
+        style22.dataStyle().fillStyle().setColor("yellow");
+        style22.dataStyle().errorBarStyle().setVisible(false);
+        plotter22.createRegions(2, 3);
+        plotter22.region(0).plot(trkd0);
+        plotter22.region(1).plot(trkphi);
+        plotter22.region(2).plot(trkomega);
+        plotter22.region(3).plot(trklam);
+        plotter22.region(4).plot(trkz0);
+        
+        if(showPlots) plotter22.show();
+
+ //   ******************************************************************
+
+        
+         trkd0 = aida.histogram1D("d0 Top", 25, -10.0, 10.0);
+         trkphi = aida.histogram1D("sinphi Top", 25, -0.2, 0.2);
+         trkomega = aida.histogram1D("omega Top", 25, -0.0025, 0.0025);
+         trklam = aida.histogram1D("tan(lambda) Top", 25, -0.1, 0.1);
+         trkz0 = aida.histogram1D("z0 Top", 25, -6.0, 6.0);
+
+        plotter2221 = fac.createPlotterFactory().create("HPS Track Params");
+        plotter2221.setTitle("Track parameters");
+        //plotterFrame.addPlotter(plotter22);
+        IPlotterStyle style2221 = plotter2221.style();
+        style2221.dataStyle().fillStyle().setColor("yellow");
+        style2221.dataStyle().errorBarStyle().setVisible(false);
+        plotter2221.createRegions(2, 3);
+        plotter2221.region(0).plot(trkd0);
+        plotter2221.region(1).plot(trkphi);
+        plotter2221.region(2).plot(trkomega);
+        plotter2221.region(3).plot(trklam);
+        plotter2221.region(4).plot(trkz0);
+        
+        if(showPlots) plotter2221.show();
+        
+        
+   //   ******************************************************************
+
+        
+        trkd0 = aida.histogram1D("d0 Bottom", 25, -10.0, 10.0);
+        trkphi = aida.histogram1D("sinphi Bottom", 25, -0.2, 0.2);
+        trkomega = aida.histogram1D("omega Bottom", 25, -0.0025, 0.0025);
+        trklam = aida.histogram1D("tan(lambda) Bottom", 25, -0.1, 0.1);
+        trkz0 = aida.histogram1D("z0 Bottom", 25, -6.0, 6.0);
+
+       plotter2222 = fac.createPlotterFactory().create("HPS Track Params");
+       plotter2222.setTitle("Track parameters");
+       //plotterFrame.addPlotter(plotter22);
+       IPlotterStyle style2222 = plotter2222.style();
+       style2222.dataStyle().fillStyle().setColor("yellow");
+       style2222.dataStyle().errorBarStyle().setVisible(false);
+       plotter2222.createRegions(2, 3);
+       plotter2222.region(0).plot(trkd0);
+       plotter2222.region(1).plot(trkphi);
+       plotter2222.region(2).plot(trkomega);
+       plotter2222.region(3).plot(trklam);
+       plotter2222.region(4).plot(trkz0);
+       
+       if(showPlots) plotter2222.show();
+        
+        
+        
+   //   ******************************************************************
+
+        
+        plotter2 = fac.createPlotterFactory().create("HPS Tracking Plots");
+        plotter2.setTitle("Track extrapolation");
+        //plotterFrame.addPlotter(plotter2);
+        IPlotterStyle style2 = plotter2.style();
+        style2.dataStyle().fillStyle().setColor("yellow");
+        style2.dataStyle().errorBarStyle().setVisible(false);
+        plotter2.createRegions(2, 4);
+        IHistogram1D xAtConverter = aida.histogram1D("X (mm) @ Z=-60cm", 50, -50, 50);
+        IHistogram1D yAtConverter = aida.histogram1D("Y (mm) @ Z=-60cm", 50, -20, 20);
+        IHistogram1D xAtColl = aida.histogram1D("X (mm) @ Z=-150cm", 50, -200, 200);
+        IHistogram1D yAtColl = aida.histogram1D("Y (mm) @ Z=-150cm", 50, -200, 200);
+        IHistogram1D xAtEcal = aida.histogram1D("X (mm) @ ECAL", 50, -500, 500);
+        IHistogram1D yAtEcal = aida.histogram1D("Y (mm) @ ECAL", 50, -100, 100);
+        IHistogram1D xAtEcal2 = aida.histogram1D("X (mm) @ ECAL (Pz>1)", 50, -500, 500);
+        IHistogram1D yAtEcal2 = aida.histogram1D("Y (mm) @ ECAL (Pz>1)", 50, -100, 100);
+
+        plotter2.region(0).plot(xAtConverter);
+        plotter2.region(4).plot(yAtConverter);
+        plotter2.region(1).plot(xAtColl);
+        plotter2.region(5).plot(yAtColl);
+        plotter2.region(2).plot(xAtEcal);
+        plotter2.region(6).plot(yAtEcal);
+        plotter2.region(3).plot(xAtEcal2);
+        plotter2.region(7).plot(yAtEcal2);
+        
+        if(showPlots) plotter2.show();
+
+   //   ******************************************************************
+        
+        plotter222 = fac.createPlotterFactory().create("HPS Tracking Plots");
+        plotter222.setTitle("HPS Tracking Plots");
+        //plotterFrame.addPlotter(plotter222);
+        IPlotterStyle style222 = plotter222.style();
+        style222.dataStyle().fillStyle().setColor("yellow");
+        style222.dataStyle().errorBarStyle().setVisible(false);
+        plotter222.createRegions(2, 2);
+        
+        IHistogram1D nHits = aida.histogram1D("Hits per Track", 4, 3, 7);
+        nTracks = aida.histogram1D("Tracks per Event", 3, 0, 3);
+        IHistogram1D nHitsCluster = aida.histogram1D("Hits in Cluster (HitOnTrack)", 4, 0, 4);
+
+       
+        plotter222.region(0).plot(nHits);
+        plotter222.region(1).plot(nTracks);
+        plotter222.region(2).plot(nHitsCluster);
+        
+        if(showPlots) plotter222.show();
+   
+        
+   //   ******************************************************************
+        
+        plotter22299 = fac.createPlotterFactory().create("HPS Tracking Plots Top");
+        plotter22299.setTitle("HPS Tracking Plots Top");
+        //plotterFrame.addPlotter(plotter22299);
+        IPlotterStyle style22299 = plotter22299.style();
+        style22299.dataStyle().fillStyle().setColor("yellow");
+        style22299.dataStyle().errorBarStyle().setVisible(false);
+        plotter22299.createRegions(2, 2);
+        
+        IHistogram1D nHitsTop = aida.histogram1D("Hits per Track Top", 4, 3, 7);
+        nTracksTop = aida.histogram1D("Tracks per Event Top", 3, 0, 3);
+        IHistogram1D nHitsClusterTop = aida.histogram1D("Hits in Cluster (HitOnTrack) Top", 4, 0, 4);
+
+       
+        plotter22299.region(0).plot(nHitsTop);
+        plotter22299.region(1).plot(nTracksTop);
+        plotter22299.region(2).plot(nHitsClusterTop);
+        
+        if(showPlots) plotter22299.show();
+   
+//   ******************************************************************
+        
+        plotter22298 = fac.createPlotterFactory().create("HPS Tracking Plots Bottom");
+        plotter22298.setTitle("HPS Tracking Plots Bottom");
+        //plotterFrame.addPlotter(plotter22298);
+        IPlotterStyle style22298 = plotter22298.style();
+        style22298.dataStyle().fillStyle().setColor("yellow");
+        style22298.dataStyle().errorBarStyle().setVisible(false);
+        plotter22298.createRegions(2, 2);
+        
+        IHistogram1D nHitsBot = aida.histogram1D("Hits per Track Bot", 4, 3, 7);
+        nTracksBot = aida.histogram1D("Tracks per Event Bot", 3, 0, 3);
+        IHistogram1D nHitsClusterBot = aida.histogram1D("Hits in Cluster (HitOnTrack) Bot", 4, 0, 4);
+
+       
+        plotter22298.region(0).plot(nHitsBot);
+        plotter22298.region(1).plot(nTracksBot);
+        plotter22298.region(2).plot(nHitsClusterBot);
+        
+        if(showPlots) plotter22298.show();
+   
+        
+        //   ******************************************************************
+        
+        
+        plotter2223 = fac.createPlotterFactory().create("Cluster Amp Plots");
+        plotter2223.setTitle("Other");
+        //plotterFrame.addPlotter(plotter222);
+        IPlotterStyle style2223 = plotter2223.style();
+        style2223.dataStyle().fillStyle().setColor("yellow");
+        style2223.dataStyle().errorBarStyle().setVisible(false);
+        plotter2223.createRegions(2, 2);
+        
+       
+
+        IHistogram1D amp = aida.histogram1D("Amp (HitOnTrack)", 50, 0, 5000);
+        IHistogram1D ampcl = aida.histogram1D("Cluster Amp (HitOnTrack)", 50, 0, 5000);
+        IHistogram1D amp2 = aida.histogram1D("Amp Pz>0.8 (HitOnTrack)", 50, 0, 5000);
+        IHistogram1D ampcl2 = aida.histogram1D("Cluster Amp Pz>0.8 (HitOnTrack)", 50, 0, 5000);
+      
+        
+        plotter2223.region(0).plot(amp);
+        plotter2223.region(1).plot(amp2);
+        plotter2223.region(2).plot(ampcl);
+        plotter2223.region(3).plot(ampcl2);
+        
+        if(showPlots) plotter2223.show();
+   
+//   ******************************************************************
+        
+        
+        plotter2224 = fac.createPlotterFactory().create("t0 Plots");
+        plotter2224.setTitle("Other");
+        IPlotterStyle style2224 = plotter2224.style();
+        style2224.dataStyle().fillStyle().setColor("yellow");
+        style2224.dataStyle().errorBarStyle().setVisible(false);
+        plotter2224.createRegions(2, 2);
+                
+        IHistogram1D t0 = aida.histogram1D("t0 (HitOnTrack)", 50, -100, 100);
+        IHistogram1D t0cl = aida.histogram1D("Cluster t0 (HitOnTrack)", 50, -100, 100);
+        IHistogram1D t02 = aida.histogram1D("t0 Pz>0.8 (HitOnTrack)", 50, -100, 100);
+        IHistogram1D t0cl2 = aida.histogram1D("Cluster t0 Pz>0.8 (HitOnTrack)", 50, -100, 100);
+        
+        plotter2224.region(0).plot(t0);
+        plotter2224.region(1).plot(t0cl);
+        plotter2224.region(2).plot(t02);
+        plotter2224.region(3).plot(t0cl2);
+
+        if(showPlots) plotter2224.show();
+   
+        
+        //   ******************************************************************
+          
+        plotter3 = fac.createPlotterFactory().create("HPS Layer Residual Plots");
+        plotter3.setTitle("Layer Residuals");
+        //plotterFrame.addPlotter(plotter3);
+        IPlotterStyle style3 = plotter3.style();
+        style3.dataStyle().fillStyle().setColor("yellow");
+        style3.dataStyle().errorBarStyle().setVisible(false);
+        plotter3.createRegions(6, 2);
+
+       
+
+        IHistogram1D mod1ResX = aida.histogram1D("Layer 1 Residual X(mm)", 25, -1, 1);
+        IHistogram1D mod1ResY = aida.histogram1D("Layer 1 Residual Y(mm)", 25, -0.04, 0.04);
+
+        IHistogram1D mod2ResX = aida.histogram1D("Layer 2 Residual X(mm)", 25, -2, 2);
+        IHistogram1D mod2ResY = aida.histogram1D("Layer 2 Residual Y(mm)", 25, -1, 1);
+
+        IHistogram1D mod3ResX = aida.histogram1D("Layer 3 Residual X(mm)", 25, -2.5, 2.5);
+        IHistogram1D mod3ResY = aida.histogram1D("Layer 3 Residual Y(mm)", 25, -1.5, 1.5);
+
+        IHistogram1D mod4ResX = aida.histogram1D("Layer 4 Residual X(mm)", 25, -3.0, 3.0);
+        IHistogram1D mod4ResY = aida.histogram1D("Layer 4 Residual Y(mm)", 25, -2, 2);
+
+        IHistogram1D mod5ResX = aida.histogram1D("Layer 5 Residual X(mm)", 25, -4, 4);
+        IHistogram1D mod5ResY = aida.histogram1D("Layer 5 Residual Y(mm)", 25, -3, 3);
+
+        IHistogram1D mod6ResX = aida.histogram1D("Layer 6 Residual X(mm)", 25, -5, 5);
+        IHistogram1D mod6ResY = aida.histogram1D("Layer 6 Residual Y(mm)", 25, -3, 3);
+
+        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(10).plot(mod6ResX);
+
+        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);
+        plotter3.region(11).plot(mod6ResY);
+               
+        if(showPlots) plotter3.show();
+        
+        
+        
+        plotter3_11 = fac.createPlotterFactory().create("HPS Strip Residual Plots");
+        plotter3_11.setTitle("Strip Residuals (Top)");
+        //plotterFrame.addPlotter(plotter3_11);
+        IPlotterStyle style3_11 = plotter3_11.style();
+        style3_11.dataStyle().fillStyle().setColor("yellow");
+        style3_11.dataStyle().errorBarStyle().setVisible(false);
+        plotter3_11.createRegions(6, 6);
+        int i=0;
+        for(HpsSiSensor sensor : sensors) {
+            double min = 0.0;
+            double max = 0.0;
+            if(sensor.getName().contains("L1")) {
+                min=-0.04; max=0.04;
+            } else if(sensor.getName().contains("L2")) {
+                min=-1; max=1;
+            } else if(sensor.getName().contains("L3")) {
+                min=-1.5; max=1.5;
+            } else if(sensor.getName().contains("L4")) {
+                min=-3; max=3;
+            } else if(sensor.getName().contains("L5")) {
+                min=-4; max=4;
+            } else if(sensor.getName().contains("L6")) {
+                min=-5; max=5;
+            } else {
+                throw new RuntimeException("Invalid sensor name: " + sensor.getName());
+            }
+           IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip residual (mm)", 50, min, max);
+            plotter3_11.region(i).plot(resX);
+            i++;
+        }
+
+        if(showPlots) plotter3_11.show();
+        
+
+        plotter3_1 = fac.createPlotterFactory().create("HPS Residual Plots (Single hit per layer)");
+        plotter3_1.setTitle("Residuals (Top)");
+        //plotterFrame.addPlotter(plotter3_1);
+        IPlotterStyle style3_1 = plotter3_1.style();
+        style3_1.dataStyle().fillStyle().setColor("yellow");
+        style3_1.dataStyle().errorBarStyle().setVisible(false);
+        plotter3_1.createRegions(6, 2);
+        
+        IHistogram1D mod1ResX_Top = aida.histogram1D("Layer 1 Residual X(mm) Top", 25, -1, 1);
+        IHistogram1D mod1ResY_Top = aida.histogram1D("Layer 1 Residual Y(mm) Top", 25, -0.04, 0.04);
+
+        IHistogram1D mod2ResX_Top = aida.histogram1D("Layer 2 Residual X(mm) Top", 25, -2, 2);
+        IHistogram1D mod2ResY_Top = aida.histogram1D("Layer 2 Residual Y(mm) Top", 25, -1, 1);
+
+        IHistogram1D mod3ResX_Top = aida.histogram1D("Layer 3 Residual X(mm) Top", 25, -2.5, 2.5);
+        IHistogram1D mod3ResY_Top = aida.histogram1D("Layer 3 Residual Y(mm) Top", 25, -1.5, 1.5);
+
+        IHistogram1D mod4ResX_Top = aida.histogram1D("Layer 4 Residual X(mm) Top", 25, -3.0, 3.0);
+        IHistogram1D mod4ResY_Top = aida.histogram1D("Layer 4 Residual Y(mm) Top", 25, -2, 2);
+
+        IHistogram1D mod5ResX_Top = aida.histogram1D("Layer 5 Residual X(mm) Top", 25, -4, 4);
+        IHistogram1D mod5ResY_Top = aida.histogram1D("Layer 5 Residual Y(mm) Top", 25, -3, 3);
+
+        IHistogram1D mod6ResX_Top = aida.histogram1D("Layer 6 Residual X(mm) Top", 25, -5, 5);
+        IHistogram1D mod6ResY_Top = aida.histogram1D("Layer 6 Residual Y(mm) Top", 25, -3, 3);
+
+        
+        plotter3_1.region(0).plot(mod1ResX_Top);
+        plotter3_1.region(2).plot(mod2ResX_Top);
+        plotter3_1.region(4).plot(mod3ResX_Top);
+        plotter3_1.region(6).plot(mod4ResX_Top);
+        plotter3_1.region(8).plot(mod5ResX_Top);
+        plotter3_1.region(10).plot(mod6ResX_Top);
+
+        plotter3_1.region(1).plot(mod1ResY_Top);
+        plotter3_1.region(3).plot(mod2ResY_Top);
+        plotter3_1.region(5).plot(mod3ResY_Top);
+        plotter3_1.region(7).plot(mod4ResY_Top);
+        plotter3_1.region(9).plot(mod5ResY_Top);
+        plotter3_1.region(11).plot(mod6ResY_Top);
+
+        if(showPlots) plotter3_1.show();
+        
+        plotter3_2 = fac.createPlotterFactory().create("HPS Residual Plots (Single strip cluster per layer)");
+        plotter3_2.setTitle("Residuals (Bottom)");
+        //plotterFrame.addPlotter(plotter3_2);
+        IPlotterStyle style3_2 = plotter3_2.style();
+        style3_2.dataStyle().fillStyle().setColor("yellow");
+        style3_2.dataStyle().errorBarStyle().setVisible(false);
+        plotter3_2.createRegions(6, 2);
+
+        IHistogram1D mod1ResX_Bottom = aida.histogram1D("Layer 1 Residual X(mm) Bottom", 25, -1, 1);
+        IHistogram1D mod1ResY_Bottom = aida.histogram1D("Layer 1 Residual Y(mm) Bottom", 25, -0.04, 0.04);
+
+        IHistogram1D mod2ResX_Bottom = aida.histogram1D("Layer 2 Residual X(mm) Bottom", 25, -2, 2);
+        IHistogram1D mod2ResY_Bottom = aida.histogram1D("Layer 2 Residual Y(mm) Bottom", 25, -1, 1);
+
+        IHistogram1D mod3ResX_Bottom = aida.histogram1D("Layer 3 Residual X(mm) Bottom", 25, -2.5, 2.5);
+        IHistogram1D mod3ResY_Bottom = aida.histogram1D("Layer 3 Residual Y(mm) Bottom", 25, -1.5, 1.5);
+
+        IHistogram1D mod4ResX_Bottom = aida.histogram1D("Layer 4 Residual X(mm) Bottom", 25, -3.0, 3.0);
+        IHistogram1D mod4ResY_Bottom = aida.histogram1D("Layer 4 Residual Y(mm) Bottom", 25, -2, 2);
+
+        IHistogram1D mod5ResX_Bottom = aida.histogram1D("Layer 5 Residual X(mm) Bottom", 25, -4, 4);
+        IHistogram1D mod5ResY_Bottom = aida.histogram1D("Layer 5 Residual Y(mm) Bottom", 25, -3, 3);
+
+        IHistogram1D mod6ResX_Bottom = aida.histogram1D("Layer 6 Residual X(mm) Bottom", 25, -5, 5);
+        IHistogram1D mod6ResY_Bottom = aida.histogram1D("Layer 6 Residual Y(mm) Bottom", 25, -3, 3);
+
+        plotter3_2.region(0).plot(mod1ResX_Bottom);
+        plotter3_2.region(2).plot(mod2ResX_Bottom);
+        plotter3_2.region(4).plot(mod3ResX_Bottom);
+        plotter3_2.region(6).plot(mod4ResX_Bottom);
+        plotter3_2.region(8).plot(mod5ResX_Bottom);
+        plotter3_2.region(10).plot(mod6ResX_Bottom);
+
+        plotter3_2.region(1).plot(mod1ResY_Bottom);
+        plotter3_2.region(3).plot(mod2ResY_Bottom);
+        plotter3_2.region(5).plot(mod3ResY_Bottom);
+        plotter3_2.region(7).plot(mod4ResY_Bottom);
+        plotter3_2.region(9).plot(mod5ResY_Bottom);
+        plotter3_2.region(11).plot(mod6ResY_Bottom);
+        
+        if(showPlots) plotter3_2.show();
+
+        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, 3);
+
+        IHistogram2D eVsP = aida.histogram2D("Energy Vs Momentum", 50, 0, 0.50, 50, 0, 1.5);
+        IHistogram1D eOverP = aida.histogram1D("Energy Over Momentum", 50, 0, 2);
+
+        IHistogram1D distX = aida.histogram1D("deltaX", 50, -100, 100);
+        IHistogram1D distY = aida.histogram1D("deltaY", 50, -40, 40);
+
+        IHistogram2D xEcalVsTrk = aida.histogram2D("X ECal Vs Track", 100, -400, 400, 100, -400, 400);
+        IHistogram2D yEcalVsTrk = aida.histogram2D("Y ECal Vs Track", 100, -100, 100, 100, -100, 100);
+
+        plotter4.region(0).plot(eVsP);
+        plotter4.region(3).plot(eOverP);
+        plotter4.region(1).plot(distX);
+        plotter4.region(4).plot(distY);
+        plotter4.region(2).plot(xEcalVsTrk);
+        plotter4.region(5).plot(yEcalVsTrk);
+
+        if(showPlots) plotter4.show();
+
+        //   ******************************************************************
+        top2 = fac.createPlotterFactory().create("Top ECal Plots");
+        top2.setTitle("Top ECal Correlations");
+        IPlotterStyle stop2 = top2.style();
+        stop2.dataStyle().fillStyle().setColor("green");
+        stop2.dataStyle().errorBarStyle().setVisible(false);
+        stop2.setParameter("hist2DStyle", "colorMap");
+        stop2.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        top2.createRegions(2, 3);
+        //topFrame.addPlotter(top2);
+
+        IHistogram2D topeVsP = aida.histogram2D("Top Energy Vs Momentum", 50, 0, 0.500, 50, 0, 1.5);
+        IHistogram1D topeOverP = aida.histogram1D("Top Energy Over Momentum", 50, 0, 2);
+
+        IHistogram1D topdistX = aida.histogram1D("Top deltaX", 50, -100, 100);
+        IHistogram1D topdistY = aida.histogram1D("Top deltaY", 50, -40, 40);
+
+        IHistogram2D topxEcalVsTrk = aida.histogram2D("Top X ECal Vs Track", 100, -400, 400, 100, -100, 100);
+        IHistogram2D topyEcalVsTrk = aida.histogram2D("Top Y ECal Vs Track", 100, 0, 100, 100, 0, 100);
+
+        top2.region(0).plot(topeVsP);
+        top2.region(3).plot(topeOverP);
+        top2.region(1).plot(topdistX);
+        top2.region(4).plot(topdistY);
+        top2.region(2).plot(topxEcalVsTrk);
+        top2.region(5).plot(topyEcalVsTrk);
+
+        if(showPlots) top2.show();
+        
+        bot2 = fac.createPlotterFactory().create("Bottom ECal Plots");
+        bot2.setTitle("Bottom ECal Correlations");
+        IPlotterStyle sbot2 = bot2.style();
+        sbot2.dataStyle().fillStyle().setColor("green");
+        sbot2.dataStyle().errorBarStyle().setVisible(false);
+        sbot2.setParameter("hist2DStyle", "colorMap");
+        sbot2.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        bot2.createRegions(2, 3);
+        //bottomFrame.addPlotter(bot2);
+
+        IHistogram2D BottomeVsP = aida.histogram2D("Bottom Energy Vs Momentum", 50, 0, 0.500, 50, 0, 1.5);
+        IHistogram1D BottomeOverP = aida.histogram1D("Bottom Energy Over Momentum", 50, 0, 2);
+
+        IHistogram1D BottomdistX = aida.histogram1D("Bottom deltaX", 50, -100, 100);
+        IHistogram1D BottomdistY = aida.histogram1D("Bottom deltaY", 50, -40, 40);
+
+        IHistogram2D BottomxEcalVsTrk = aida.histogram2D("Bottom X ECal Vs Track", 100, -400, 400, 100, -400, 400);
+        IHistogram2D BottomyEcalVsTrk = aida.histogram2D("Bottom Y ECal Vs Track", 100, -100, 0, 100, -100, 0);
+
+        bot2.region(0).plot(BottomeVsP);
+        bot2.region(3).plot(BottomeOverP);
+        bot2.region(1).plot(BottomdistX);
+        bot2.region(4).plot(BottomdistY);
+        bot2.region(2).plot(BottomxEcalVsTrk);
+        bot2.region(5).plot(BottomyEcalVsTrk);
+
+        if(showPlots) bot2.show();
+        
+        
+        //   ******************************************************************
+        top3 = fac.createPlotterFactory().create("Top ECal Plots");
+        top3.setTitle("Top ECal More Correlations");
+        IPlotterStyle stop3 = top3.style();
+        stop3.dataStyle().fillStyle().setColor("green");
+        stop3.dataStyle().errorBarStyle().setVisible(false);
+        stop3.setParameter("hist2DStyle", "colorMap");
+        stop3.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        top3.createRegions(1, 2);
+        //topFrame.addPlotter(top3);
+
+        IHistogram2D topdistXvsX = aida.histogram2D("Top deltaX vs X", 51, -400, 400, 25, -100, 100);
+        IHistogram2D topdistYvsY = aida.histogram2D("Top deltaY vs Y", 51, 0, 100, 25, -40, 40);
+
+        top3.region(0).plot(topdistXvsX);
+        top3.region(1).plot(topdistYvsY);
+
+        if(showPlots) top3.show();
+        
+        bot3 = fac.createPlotterFactory().create("Bottom ECal Plots");
+        bot3.setTitle("Bottom ECal More Correlations");
+        IPlotterStyle sbot3 = bot3.style();
+        sbot3.dataStyle().fillStyle().setColor("green");
+        sbot3.dataStyle().errorBarStyle().setVisible(false);
+        sbot3.setParameter("hist2DStyle", "colorMap");
+        sbot3.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        bot3.createRegions(1, 2);
+        //bottomFrame.addPlotter(bot3);
+
+        IHistogram2D botdistXvsX = aida.histogram2D("Bottom deltaX vs X", 51, -400, 400, 25, -100, 100);
+        IHistogram2D botdistYvsY = aida.histogram2D("Bottom deltaY vs Y", 51, -100, 0, 25, -40, 40);
+
+        bot3.region(0).plot(botdistXvsX);
+        bot3.region(1).plot(botdistYvsY);
+
+        if(showPlots) bot3.show();
+        
+        //   ******************************************************************
+        top4 = fac.createPlotterFactory().create("Track Matching Plots");
+        top4.setTitle("Track Matching Plots");
+        IPlotterStyle stop4 = top4.style();
+        stop4.dataStyle().fillStyle().setColor("green");
+        stop4.dataStyle().errorBarStyle().setVisible(false);
+        stop4.setParameter("hist2DStyle", "colorMap");
+        stop4.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        top4.createRegions(2, 3);
+        //topFrame.addPlotter(top4);
+
+        IHistogram1D trackmatchN = aida.histogram1D("Tracks matched", 3, 0, 3);
+        IHistogram1D toptrackmatchN = aida.histogram1D("Tracks matched Top", 3, 0, 3);
+        IHistogram1D bottrackmatchN = aida.histogram1D("Tracks matched Bottom", 3, 0, 3);
+        IHistogram1D trackmatchN2 = aida.histogram1D("Tracks matched (Pz>0.8)", 3, 0, 3);
+        IHistogram1D toptrackmatchN2 = aida.histogram1D("Tracks matched Top (Pz>0.8)", 3, 0, 3);
+        IHistogram1D bottrackmatchN2 = aida.histogram1D("Tracks matched Bottom (Pz>0.8)", 3, 0, 3);
+        
+        top4.region(0).plot(trackmatchN);
+        top4.region(1).plot(toptrackmatchN);
+        top4.region(2).plot(bottrackmatchN);
+        top4.region(3).plot(trackmatchN2);
+        top4.region(4).plot(toptrackmatchN2);
+        top4.region(5).plot(bottrackmatchN2);
+
+        if(showPlots) top4.show();
+        
+        //   ******************************************************************
+        top44 = fac.createPlotterFactory().create("e+e- Plots");
+        top44.setTitle("e+e- Plots");
+        IPlotterStyle stop44 = top44.style();
+        stop44.dataStyle().fillStyle().setColor("green");
+        stop44.dataStyle().errorBarStyle().setVisible(false);
+        stop44.setParameter("hist2DStyle", "colorMap");
+        stop44.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        top44.createRegions(2,4);
+        //topFrame.addPlotter(top44);
+
+        IHistogram2D trackPCorr = aida.histogram2D("p(e-) vs p(e+) max", 25, 0, 1.2, 25, 0, 1.2);
+        IHistogram1D ne = aida.histogram1D("n(e-)", 3, 0, 3);
+        IHistogram1D np = aida.histogram1D("n(e+)", 3, 0, 3);
+        IHistogram1D pem = aida.histogram1D("p(e-) max", 25, 0, 1.5);
+        IHistogram1D pe = aida.histogram1D("p(e-)", 25, 0, 1.5);
+        IHistogram1D ppm = aida.histogram1D("p(e+) max", 25, 0, 1.5);
+        IHistogram1D pp = aida.histogram1D("p(e+)", 25, 0, 1.5);
+        
+        top44.region(0).plot(trackPCorr);
+        top44.region(1).plot(ne);
+        top44.region(2).plot(np);
+        top44.region(3).plot(pe);
+        top44.region(4).plot(pp);
+        top44.region(5).plot(pem);
+        top44.region(6).plot(ppm);
+        
+        if(showPlots) top44.show();
+        
+        
+        
+//   ******************************************************************
+        plotter5 = fac.createPlotterFactory().create("HPS Hit Positions");
+        plotter5.setTitle("Hit Positions:  Top");
+        //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);
+
+        IHistogram2D l1Pos = aida.histogram2D("Layer 1 HTH Position:  Top", 50, -55, 55, 55, -25, 25);
+        IHistogram2D l7Pos = aida.histogram2D("Layer 7 HTH Position:  Top", 50, -55, 55, 55, -25, 25);
+
+        plotter5.region(0).plot(l1Pos);
+        plotter5.region(1).plot(l7Pos);
+        
+        if(showPlots) plotter5.show();
+        
+        plotter5_1 = fac.createPlotterFactory().create("HPS Hit Positions");
+        plotter5_1.setTitle("Hit Positions:  Bottom");
+        //plotterFrame.addPlotter(plotter5_1);
+        IPlotterStyle style5_1 = plotter5_1.style();
+        style5_1.setParameter("hist2DStyle", "colorMap");
+        style5_1.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        style5_1.dataStyle().fillStyle().setColor("yellow");
+        style5_1.dataStyle().errorBarStyle().setVisible(false);
+        plotter5_1.createRegions(1, 2);
+
+        
+        IHistogram2D l1PosBot = aida.histogram2D("Layer 1 HTH Position:  Bottom", 50, -55, 55, 55, -25, 25);
+        IHistogram2D l7PosBot = aida.histogram2D("Layer 7 HTH Position:  Bottom", 50, -55, 55, 55, -25, 25);
+        plotter5_1.region(0).plot(l1PosBot);
+        plotter5_1.region(1).plot(l7PosBot);
+
+        if(showPlots) plotter5_1.show();
+
+        plotter55 = fac.createPlotterFactory().create("HPS Hit Positions");
+        plotter55.setTitle("Helical Track Hits");
+        //plotterFrame.addPlotter(plotter55);
+        IPlotterStyle style55 = plotter55.style();
+        style55.dataStyle().fillStyle().setColor("Green");
+        style55.dataStyle().errorBarStyle().setVisible(false);
+        style55.dataStyle().markerStyle().setSize(20);
+        plotter55.createRegions(1, 2);
+
+        IProfile avgLayersTopPlot = aida.profile1D("Number of Stereo Hits per layer in Top Half", 13, 0, 13);
+        IProfile avgLayersBottomPlot = aida.profile1D("Number of Stereo Hits per layer in Bottom Half", 13, 0, 13);
+
+        plotter55.region(0).plot(avgLayersTopPlot);
+        plotter55.region(1).plot(avgLayersBottomPlot);
+
+        if(showPlots) plotter55.show();
+
+        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(4, 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);
+        IHistogram2D topECal1 = aida.histogram2D("Top ECal Cluster Position (>0 tracks)", 50, -400, 400, 10, 0, 100);
+        IHistogram2D botECal1 = aida.histogram2D("Bottom ECal Cluster Position (>0 tracks)", 50, -400, 400, 10, -100, 0);
+        IHistogram2D topECal2 = aida.histogram2D("Top ECal Cluster Position (E>0.1,>0 tracks)", 50, -400, 400, 10, 0, 100);
+        IHistogram2D botECal2 = aida.histogram2D("Bottom ECal Cluster Position (E>0.1,>0 tracks)", 50, -400, 400, 10, -100, 0);
+        IHistogram2D topECal3 = aida.histogram2D("Top ECal Cluster Position w_E (E>0.1,>0 tracks)", 50, -400, 400, 10, 0, 100);
+        IHistogram2D botECal3 = aida.histogram2D("Bottom ECal Cluster Position w_E (E>0.1,>0 tracks)", 50, -400, 400, 10, -100, 0);
+
+        plotter6.region(0).plot(topECal);
+        plotter6.region(1).plot(botECal);
+        plotter6.region(2).plot(topECal1);
+        plotter6.region(3).plot(botECal1);
+        plotter6.region(4).plot(topECal2);
+        plotter6.region(5).plot(botECal2);
+        plotter6.region(6).plot(topECal3);
+        plotter6.region(7).plot(botECal3);
+        
+        if(showPlots) plotter6.show();
+        
+        
+        plotter66 = fac.createPlotterFactory().create("HPS ECAL Basic Plots");
+        plotter66.setTitle("ECAL Basic Plots");
+        //plotterFrame.addPlotter(plotter6);
+        IPlotterStyle style66 = plotter66.style();
+        style66.dataStyle().fillStyle().setColor("yellow");
+        style66.dataStyle().errorBarStyle().setVisible(false);
+        plotter66.createRegions(2, 2);
+
+        IHistogram1D topECalE = aida.histogram1D("Top ECal Cluster Energy", 50, 0, 2);
+        IHistogram1D botECalE = aida.histogram1D("Bottom ECal Cluster Energy", 50, 0, 2);
+        IHistogram1D topECalN = aida.histogram1D("Number of Clusters Top", 6, 0, 6);
+        IHistogram1D botECalN = aida.histogram1D("Number of Clusters Bot", 6, 0, 6);
+        
+        plotter66.region(0).plot(topECalE);
+        plotter66.region(1).plot(botECalE);
+        plotter66.region(2).plot(botECalN);
+        plotter66.region(3).plot(topECalN);
+        
+        if(showPlots) plotter66.show();
+        
+        
+        
+        
+        plotter8 = fac.createPlotterFactory().create("HPS Strip Hit From Stereo Multiplicity");
+        plotter8.setTitle("Strip Hit Multiplicity");
+        //plotterFrame.addPlotter(plotter8);
+        IPlotterStyle style8 = plotter8.style();
+        style8.dataStyle().fillStyle().setColor("yellow");
+        style8.dataStyle().errorBarStyle().setVisible(false);
+        plotter8.createRegions(6, 6);
+        i=0;
+        for(SiSensor sensor : sensors) {
+            IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip hits from stereo", 10, 0, 10);
+            plotter8.region(i).plot(resX);
+            i++;
+        }
+
+        if(showPlots) plotter8.show();
+        
+        plotter88 = fac.createPlotterFactory().create("HPS Strip Hit Multiplicity");
+        plotter88.setTitle("Strip Hit Multiplicity");
+        //plotterFrame.addPlotter(plotter88);
+        plotter88.setStyle(style8);
+        plotter88.createRegions(6, 6);
+        i=0;
+        for(SiSensor sensor : sensors) {
+            IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip hits", 10, 0, 10);
+            plotter88.region(i).plot(resX);
+            i++;
+        }
+
+        if(showPlots) plotter88.show();
+        
+        
+        
+        
+        
+        plotter888 = fac.createPlotterFactory().create("HPS Strip Hit Isolation");
+        plotter888.setTitle("Strip Hit Isolation");
+        //plotterFrame.addPlotter(plotter88);
+        plotter888.setStyle(style8);
+        plotter888.createRegions(6, 6);
+        i=0;
+        for(SiSensor sensor : sensors) {
+            IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip hits iso", 50, 0, 5);
+            plotter888.region(i).plot(resX);
+            i++;
+        }
+
+        if(showPlots) plotter888.show();
+        
+        plotter8888 = fac.createPlotterFactory().create("HPS Strip Hit On Track Isolation");
+        plotter8888.setTitle("Strip Hit On Track Isolation");
+        //plotterFrame.addPlotter(plotter88);
+        plotter8888.setStyle(style8);
+        plotter8888.createRegions(6, 6);
+        i=0;
+        for(SiSensor sensor : sensors) {
+            IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip hits iso on track", 50, 0, 5);
+            plotter8888.region(i).plot(resX);
+            i++;
+        }
+
+        if(showPlots) plotter8888.show();
+
+
+    }
+    
+    
+    
+    
     private Cluster findClosestCluster(Hep3Vector posonhelix, List<Cluster> clusters) {
         Cluster closest = null;
         double minDist = 9999;

Modified: java/branches/jeremy-dev/util/pom.xml
 =============================================================================
--- java/branches/jeremy-dev/util/pom.xml	(original)
+++ java/branches/jeremy-dev/util/pom.xml	Wed Dec 16 15:32:00 2015
@@ -7,7 +7,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.4.2-SNAPSHOT</version>
+        <version>3.5-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/util/</url>

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