Print

Print


Author: [log in to unmask]
Date: Fri Oct 21 11:49:08 2016
New Revision: 4519

Log: (empty)

Added:
    java/branches/EcalRawConverter split/   (props changed)
      - copied from r4518, java/trunk/
    java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java
      - copied, changed from r4518, java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter3.java
    java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java
      - copied, changed from r4518, java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter3Driver.java
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/users/spaul/FeeHistograms2015.lcsim
      - copied, changed from r4518, java/trunk/steering-files/src/main/resources/org/hps/steering/users/spaul/FeeHistogramsNoSeedCut.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/users/spaul/FeeHistograms2016.lcsim
      - copied, changed from r4518, java/trunk/steering-files/src/main/resources/org/hps/steering/users/spaul/FeeHistogramsNoSeedCutNoFlagFilter.lcsim
Removed:
    java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter3.java
    java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter3Driver.java
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/users/spaul/FeeHistogramsNoSeedCut.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/users/spaul/FeeHistogramsNoSeedCutNoFlagFilter.lcsim
Modified:
    java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalGainDriver.java
    java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalTimeCorrectionDriver.java
    java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/filtering/MollerCandidateFilter.java
    java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/filtering/V0CandidateFilter.java
    java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java
    java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/analysis/EcalCosmicClusterAnalysis.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/analysis/EcalCosmicSignalFitAnalysis.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalBasicMonitoring.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedCommissioning.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceMonitoringApp.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceStandalone.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoring.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringFinal.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringOnly.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalPedestalMonitor.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalPedestalViewer.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalTriggerMonitoring.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalTriggerWindowMonitoring.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/ExampleMonitoringPlots.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/Layers4to6TrackingMonitoring.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/LooseTrackingAndReconMonitoring.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/OnlineTracking.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/SVTMonitoring.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/TrackingAndReconMonitoring.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/TriggerDiagnosticsMonitoring.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/production/FEEFilter_2pt3.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/production/MollerCandidateFilter_2pt3.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/production/V0CandidateFilter_2pt3.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014TightPairs.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigPairs0.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigPairs1.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigSingles0.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigSingles1.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PrescaledTriggers.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigPairs1.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigPairs1_Pass2.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigSingles1.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigSingles1_Pass2.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutNoPileup.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutToEvio.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutToLcio.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014TruthReadoutToLcio.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/MockPulserTrigger.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPair0.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPairs1.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigSingles1.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToEvio.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToLcio.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToLcio2014.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014EcalRecon.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014EcalReconMC.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014EcalRecon_Pass1.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015EcalRecon.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015HitRecon.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineTruthRecon.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2016FullRecon.lcsim
    java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/users/spaul/MuonMonitoring.lcsim
    java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/gcharles/FADCSignalAnalysis.java
    java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/jeremym/TestRunReconDriver.java
    java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/spaul/fee/Cleanup.java
    java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/spaul/fee/FeeHistogramDriver.java

Modified: java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalGainDriver.java
 =============================================================================
--- java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalGainDriver.java	(original)
+++ java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalGainDriver.java	Fri Oct 21 11:49:08 2016
@@ -18,6 +18,12 @@
     
     private String outputHitsCollectionName = "EcalCalHits";
     
+    private boolean isTransient = true;
+    
+    public void setIsTransient(boolean val){
+        this.isTransient = val;
+    }
+    
     public void process(EventHeader event) {
         
         List<CalorimeterHit> hits = event.get(CalorimeterHit.class, inputHitsCollectionName);
@@ -35,7 +41,7 @@
         }
 
         event.put(this.outputHitsCollectionName, newHits, CalorimeterHit.class, event.getMetaData(hits).getFlags(), ecalReadoutName);
-        event.getMetaData(newHits).setTransient(true);
+        event.getMetaData(newHits).setTransient(isTransient);
     }
     
 

Copied: java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java (from r4518, java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter3.java)
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter3.java	(original)
+++ java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java	Fri Oct 21 11:49:08 2016
@@ -34,7 +34,7 @@
  * @author Nathan Baltzell <[log in to unmask]>
  * @author Holly Szumila <[log in to unmask]>
  */
-public class EcalRawConverter3 {
+public class EcalRawConverter {
 
 
     /**
@@ -109,7 +109,7 @@
      * Currently sets up a listener for DAQ configuration from EVIO. This should be removed to a standalone
      * ECalRawConverter solely for trigger emulation.
      */
-    public EcalRawConverter3() {
+    public EcalRawConverter() {
         // Track changes in the DAQ configuration.
         ConfigurationManager.addActionListener(new ActionListener() {
 

Copied: java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java (from r4518, java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter3Driver.java)
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter3Driver.java	(original)
+++ java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java	Fri Oct 21 11:49:08 2016
@@ -31,12 +31,12 @@
  * <p>
  * The results are by default written to the <b>EcalCalHits</b> output collection.
  */
-public class EcalRawConverter3Driver extends Driver {
+public class EcalRawConverterDriver extends Driver {
 
     // To import database conditions
     private EcalConditions ecalConditions = null;
 
-    private EcalRawConverter3 converter = null;
+    private EcalRawConverter converter = null;
     /**
      * Input collection name (unless runBackwards=true, then it's output). Can be a
      * {@link org.lcsim.event.RawTrackerHit} or {@link org.lcsim.event.RawCalorimeterHit} These have ADC and sample time
@@ -107,8 +107,8 @@
      */
     private boolean emulateFirmware = true;
 
-    public EcalRawConverter3Driver() {
-        converter = new EcalRawConverter3();
+    public EcalRawConverterDriver() {
+        converter = new EcalRawConverter();
     }
 
     /**
@@ -410,6 +410,8 @@
         // Do not process the event if the DAQ configuration should be
         // used for value, but is not initialized.
         if (useDAQConfig && !ConfigurationManager.isInitialized()) {
+            System.out.println("useDaqConfig " + useDAQConfig);
+            System.out.println(ConfigurationManager.isInitialized());
             return;
         }
 
@@ -439,6 +441,7 @@
              * This is for FADC Mode-1 data:
              */
             if (event.hasCollection(RawTrackerHit.class, rawCollectionName)) {
+                if(debug) System.out.println("mode1");
                 List<RawTrackerHit> hits = event.get(RawTrackerHit.class, rawCollectionName);
 
                 for (RawTrackerHit hit : hits) {
@@ -474,13 +477,13 @@
             /*
              * This is for FADC pulse mode data (Mode-3 or Mode-7):
              */
-            if (event.hasCollection(RawCalorimeterHit.class, rawCollectionName)) {
-
+            else if (event.hasCollection(RawCalorimeterHit.class, rawCollectionName)) {
+                if(debug)System.out.println("mode3or7");
                 /*
                  * This is for FADC Mode-7 data:
                  */
                 if (event.hasCollection(LCRelation.class, extraDataRelationsName)) { // extra information available from
-                                                                                     // mode 7 readout
+                    if(debug) System.out.println("mode7");                                                             // mode 7 readout
                     List<LCRelation> extraDataRelations = event.get(LCRelation.class, extraDataRelationsName);
                     for (LCRelation rel : extraDataRelations) {
                         RawCalorimeterHit hit = (RawCalorimeterHit) rel.getFrom();
@@ -508,6 +511,7 @@
                     /*
                      * This is for FADC Mode-3 data:
                      */
+                    if(debug) System.out.println("mode3");
                     List<RawCalorimeterHit> hits = event.get(RawCalorimeterHit.class, rawCollectionName);
                     for (RawCalorimeterHit hit : hits) {
                         if (debug) {
@@ -532,6 +536,11 @@
                 event.put(ecalCollectionName, newHits, CalorimeterHit.class, flags, ecalReadoutName);
                 event.getMetaData(newHits).setTransient(true);
             }
+            else {
+                if(debug) System.out.println("no raw hit collection");
+                event.put(ecalCollectionName, newHits, CalorimeterHit.class, flags, ecalReadoutName);
+                event.getMetaData(newHits).setTransient(true);
+            }
         } else {
             ArrayList<RawCalorimeterHit> newHits = new ArrayList<RawCalorimeterHit>();
             if (event.hasCollection(CalorimeterHit.class, ecalCollectionName)) {
@@ -553,6 +562,7 @@
                 event.getMetaData(newHits).setTransient(true);
             }
         }
+        
 
     }
 

Modified: java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalTimeCorrectionDriver.java
 =============================================================================
--- java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalTimeCorrectionDriver.java	(original)
+++ java/branches/EcalRawConverter split/ecal-recon/src/main/java/org/hps/recon/ecal/EcalTimeCorrectionDriver.java	Fri Oct 21 11:49:08 2016
@@ -118,7 +118,7 @@
         }
 
         event.put(this.outputHitsCollectionName, newHits, CalorimeterHit.class, event.getMetaData(hits).getFlags(), ecalReadoutName);
-
+        event.getMetaData(newHits).setTransient(false);
     }
 
     /**

Modified: java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/filtering/MollerCandidateFilter.java
 =============================================================================
--- java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/filtering/MollerCandidateFilter.java	(original)
+++ java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/filtering/MollerCandidateFilter.java	Fri Oct 21 11:49:08 2016
@@ -4,6 +4,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import org.hps.conditions.database.DatabaseConditionsManager;
+import org.hps.recon.ecal.cluster.ClusterUtilities;
 import org.hps.record.epics.EpicsData;
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Cluster;
@@ -41,6 +42,13 @@
     private double _mollerMomentumSumMin = 0.85;
     private double _mollerMomentumSumMax = 1.3;
     private double _fullEnergyCut = 0.85;
+    private int _clusterCountCut = 2;
+    private boolean _useAngleCuts = false;
+    private double _mollerAngleMinY = -.004;
+    private double _mollerAngleMaxY = .003;
+    private double _mollerAngleMinX = .024;
+    private double _mollerAngleMaxX = .034;
+   // private boolean _isGBL = true;
     //the following are for the calorimeter cluster cuts
     private String _mollerCandidateClusterCollectionName = "EcalClustersCorr";
     //first, single cluster cuts
@@ -87,6 +95,9 @@
             }
             boolean goodPair = false;
             for (ReconstructedParticle rp : mollerCandidates) {
+                //check if the candidate was found using GBL method
+                //if(rp.getType() > 31 != _isGBL)
+                    //continue;
                 ReconstructedParticle e1 = null;
                 ReconstructedParticle e2 = null;
                 
@@ -96,16 +107,21 @@
                     continue;
                 }
                 // require both electrons to be associated with an ECal cluster
+                int nClusters = 0;
                 e1 = electrons.get(0);
                 if (e1.getClusters().size() == 0) {
                     //skipEvent();
-                    continue;
+                    //continue;
+                    nClusters++;
                 }
                 e2 = electrons.get(1);
                 if (e2.getClusters().size() == 0) {
                     //skipEvent();
-                    continue;
-                }
+                    //continue;
+                    nClusters++;
+                }
+                if(nClusters < _clusterCountCut)
+                    continue;
                 // remove full energy electrons
                 double p1 = e1.getMomentum().magnitude();
                 if (p1 > _fullEnergyCut) {
@@ -123,13 +139,27 @@
                     //skipEvent();
                     continue;
                 }
+                
+                if(this._useAngleCuts){
+                    double ux = (e1.getMomentum().x()+e2.getMomentum().x())
+                            /(e1.getMomentum().z() + e2.getMomentum().z());
+                    double uy = (e1.getMomentum().y()+e2.getMomentum().y())
+                            /(e1.getMomentum().z() + e2.getMomentum().z());
+                    if(ux > _mollerAngleMaxX || ux < _mollerAngleMinX 
+                           || uy > _mollerAngleMaxY || uy < _mollerAngleMinY )
+                        continue;
+                }
+                
                 // calorimeter cluster timing cut
                 // first CalorimeterHit in the list is the seed crystal
-                double t1 = e1.getClusters().get(0).getCalorimeterHits().get(0).getTime();
-                double t2 = e2.getClusters().get(0).getCalorimeterHits().get(0).getTime();
-                if (abs(t1 - t2) > _clusterDeltaTimeCut) {
-                    //skipEvent();
-                    continue;
+                if(_clusterCountCut >= 2){
+                    
+                    double t1 = ClusterUtilities.getSeedHitTime(e1.getClusters().get(0));
+                    double t2 = ClusterUtilities.getSeedHitTime(e2.getClusters().get(0));
+                    if (abs(t1 - t2) > _clusterDeltaTimeCut) {
+                        //skipEvent();
+                        continue;
+                    }
                 }
                 goodPair = true;
                 break;
@@ -278,7 +308,40 @@
     {
         _tight = b;
     }
-
+    
+    /**
+     * Require at least n of the electrons to be associated with a cluster.  This
+     * only applies when the the tight mode is activated.  
+     * @param cut 0 = don't require either electron to be associated with a cluster.
+     * 1 = require at least one electron to be associated with a cluster
+     * 2 = require both electrons to be associated with a cluster, and that they are
+     * within timing cuts of one another 
+     * @see setTightConstraint
+     * @see setClusterEDiffLo
+     * @see setClusterEDiffHi
+     */
+    public void setClusterCountCut(int cut){
+        _clusterCountCut = cut;
+    }
+
+    public void setMollerAngleMinY(double cut){
+        this._mollerAngleMinY = cut;
+    }
+    
+    public void setMollerAngleMaxY(double cut){
+        this._mollerAngleMaxY = cut;
+    }
+    
+    public void setMollerAngleMinX(double cut){
+        this._mollerAngleMinX = cut;
+    }
+    
+    public void setMollerAngleMaxX(double cut){
+        this._mollerAngleMaxX = cut;
+    }
+    public void setUseAngleCuts(boolean cut){
+        this._useAngleCuts = cut;
+    }
     /**
      * Setting this true keeps ALL events containing EPICS data
      *
@@ -414,6 +477,10 @@
     {
         _clusterEDiffHi = d;
     }
+    
+    /*public void setIsGBL(boolean isGBL){
+        _isGBL = isGBL;
+    }*/
 
     protected void detectorChanged(Detector detector){
     

Modified: java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/filtering/V0CandidateFilter.java
 =============================================================================
--- java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/filtering/V0CandidateFilter.java	(original)
+++ java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/filtering/V0CandidateFilter.java	Fri Oct 21 11:49:08 2016
@@ -34,7 +34,7 @@
     private double trackChi2Cut = 20.0;
     private double trackDtCut = 5.0;
     private double trackPMax = 0.9;
-    private double v0PMax = 1.4;
+    private double V0PMax = 1.4;
 
     private boolean _tight = false;
     private boolean _keepEpicsDataEvents = false;
@@ -77,7 +77,7 @@
             if (electron.getMomentum().magnitude() > trackPMax || positron.getMomentum().magnitude() > trackPMax) {
                 continue;
             }
-            if (v0.getMomentum().magnitude() > v0PMax) {
+            if (v0.getMomentum().magnitude() > V0PMax) {
                 continue;
             }
             double eleTime = TrackData.getTrackTime(TrackData.getTrackData(event, electron.getTracks().get(0)));
@@ -147,9 +147,12 @@
     public void setTrackPMax(double trackPMax) {
         this.trackPMax = trackPMax;
     }
-
+    /**
+     * sets the maximum momentum of a v0.
+     * @param v0PMax
+     */
     public void setV0PMax(double v0PMax) {
-        this.v0PMax = v0PMax;
+        this.V0PMax = v0PMax;
     }
 
     /**

Modified: java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java
 =============================================================================
--- java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java	(original)
+++ java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java	Fri Oct 21 11:49:08 2016
@@ -210,6 +210,8 @@
 
         ecal = (HPSEcal3) detector.getSubdetector("Ecal");
         matcher.setBFieldMap(detector.getFieldMap());
+        
+        matcher.setRunNumber(this.getConditionsManager().getRun());
 
     }
 

Modified: java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java
 =============================================================================
--- java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java	(original)
+++ java/branches/EcalRawConverter split/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java	Fri Oct 21 11:49:08 2016
@@ -28,6 +28,23 @@
  */
 public class TrackClusterMatcher {
 
+    private boolean is2015 = true;
+    private boolean is2016 = false;
+
+    public void setRunNumber(int run){
+        if(run <7000)
+        {
+            is2015 = true;
+            is2016 = false;
+        } else if(run >= 7000){
+            is2015 = false;
+            is2016 = true;
+        }
+
+
+    }
+
+
     /**
      * The B field map
      */
@@ -77,17 +94,17 @@
     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.31245, 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[] = {-7.032,   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.48498,-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[] = {-10.5228, 112.329,-489.761, 953.037,-829.96,  260.772 };
@@ -97,7 +114,7 @@
     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 };
@@ -112,6 +129,121 @@
     private static final double dySigmTopElecSeed[] ={ 19.9111,-53.2699,-261.915,  1593.2,-2774.01, 1605.54 };
     private static final double dyMeanBotElecSeed[] ={-9.22963, 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 };
+
+    /**
+     * Sebouh's parameterization of cluster-seed x/y position residuals as function of momentum (2016 dataset)
+     * 
+     * Derived using GBL tracks, corrected cluster positions,
+     * pass0
+     * 
+     *  f = p0+e*(p1+e*(p2+e*(p3+e*(p4+e*p5))))
+     */
+/*
+    private static final double [] dyMeanBotPosiGBL6hit2016 = {77.9945, -367.199, 681.985, -623.016, 280.573, -49.9745, };
+    private static final double [] dySigmBotPosiGBL6hit2016 = {-15.2206, 117.523, -250.933, 244.778, -113.575, 20.3226, };
+    private static final double [] dyMeanBotElecGBL6hit2016 = {49.9944, -247.693, 492.671, -490.632, 243.826, -48.1752, };
+    private static final double [] dySigmBotElecGBL6hit2016 = {-40.4417, 241.152, -489.323, 470.891, -219.201, 39.7878, };
+
+    private static final double [] dyMeanBotPosiGBL5hit2016 = {128.71, -694.358, 1449.55, -1465.82, 720.023, -137.883, };
+    private static final double [] dySigmBotPosiGBL5hit2016 = {-15.9439, 156.427, -370.722, 386.77, -189.111, 35.4381, };
+    private static final double [] dyMeanBotElecGBL5hit2016 = {38.1751, -213.523, 469.098, -505.911, 266.998, -55.0991, };
+    private static final double [] dySigmBotElecGBL5hit2016 = {21.6397, -49.9722, 64.7889, -56.446, 29.306, -6.4099, };
+
+    private static final double [] dyMeanTopPosiGBL6hit2016 = {-88.9948, 437.827, -832.135, 769.501, -347.288, 61.4144, };
+    private static final double [] dySigmTopPosiGBL6hit2016 = {15.485, -58.4898, 138.735, -171.787, 101.701, -22.8049, };
+    private static final double [] dyMeanTopElecGBL6hit2016 = {-49.5625, 225.394, -408.199, 369.909, -167.7, 30.336, };
+    private static final double [] dySigmTopElecGBL6hit2016 = {-8.67007, 75.2513, -147.319, 124.553, -47.095, 6.20074, };
+
+    private static final double [] dyMeanTopPosiGBL5hit2016 = {-72.9599, 406.113, -868.2, 901.141, -456.089, 90.3709, };
+    private static final double [] dySigmTopPosiGBL5hit2016 = {34.8475, -122.533, 226.898, -239.154, 131.678, -28.9332, };
+    private static final double [] dyMeanTopElecGBL5hit2016 = {-87.8563, 478.962, -1025.21, 1077.11, -554.236, 111.631, };
+    private static final double [] dySigmTopElecGBL5hit2016 = {4.32886, 58.3429, -192.298, 236.952, -133.032, 28.592, };
+
+    private static final double [] dxMeanBotPosiGBL6hit2016 = {31.5144, -87.4705, 124.754, -91.0915, 30.1023, -2.87476, };
+    private static final double [] dxSigmBotPosiGBL6hit2016 = {-5.51162, 52.5903, -105.204, 93.586, -38.888, 6.09808, };
+    private static final double [] dxMeanBotElecGBL6hit2016 = {-47.8222, 197.373, -358.692, 332.371, -155.892, 29.4311, };
+    private static final double [] dxSigmBotElecGBL6hit2016 = {-11.9773, 92.188, -200.815, 203.631, -99.3362, 18.859, };
+
+    private static final double [] dxMeanBotPosiGBL5hit2016 = {-148.55, 757.646, -1424.71, 1296.5, -577.447, 101.232, };
+    private static final double [] dxSigmBotPosiGBL5hit2016 = {-24.7569, 229.389, -559.773, 607.924, -311.008, 61.2712, };
+    private static final double [] dxMeanBotElecGBL5hit2016 = {153.999, -787.482, 1512.17, -1402.98, 632.09, -111.061, };
+    private static final double [] dxSigmBotElecGBL5hit2016 = {-23.6793, 202.804, -454.651, 444.814, -200.14, 33.6897, };
+
+    private static final double [] dxMeanTopPosiGBL6hit2016 = {23.7044, -85.5374, 175.813, -185.283, 97.2983, -20.0758, };
+    private static final double [] dxSigmTopPosiGBL6hit2016 = {-27.4533, 179.931, -389.594, 398.604, -196.682, 37.7472, };
+    private static final double [] dxMeanTopElecGBL6hit2016 = {-59.4029, 240.261, -417.645, 369.171, -163.296, 28.825, };
+    private static final double [] dxSigmTopElecGBL6hit2016 = {18.5216, -73.913, 159.972, -181.291, 101.302, -21.9447, };
+
+    private static final double [] dxMeanTopPosiGBL5hit2016 = {-107.936, 586.981, -1162.4, 1118.48, -526.542, 97.4462, };
+    private static final double [] dxSigmTopPosiGBL5hit2016 = {-137.993, 790.821, -1657.35, 1662.38, -808.347, 153.369, };
+    private static final double [] dxMeanTopElecGBL5hit2016 = {186.482, -1008.69, 2073.59, -2070, 1009.06, -192.524, };
+    private static final double [] dxSigmTopElecGBL5hit2016 = {-130.998, 780.851, -1682.67, 1728.85, -859.353, 166.49, };
+*//*
+    double[] dyMeanBotPosiGBL6hit2016 = {76.386, -355.749, 657.158, -599.207, 269.781, -48.0363, };
+    double[] dySigmBotPosiGBL6hit2016 = {24.886, -93.3569, 176.228, -173.998, 85.7669, -16.6352, };
+    double[] dyMeanBotElecGBL6hit2016 = {14.7302, -35.8852, 0.881613, 60.7453, -54.7411, 14.4077, };
+    double[] dySigmBotElecGBL6hit2016 = {-16.6316, 126.552, -273.246, 271.679, -129.545, 24.0613, };
+    double[] dyMeanBotPosiGBL5hit2016 = {54.4412, -272.099, 526.988, -493.36, 223.824, -39.5213, };
+    double[] dySigmBotPosiGBL5hit2016 = {-30.0667, 242.523, -577.267, 626.406, -322.99, 64.2812, };
+    double[] dyMeanBotElecGBL5hit2016 = {32.1982, -178.197, 383.954, -404.739, 209.386, -42.611, };
+    double[] dySigmBotElecGBL5hit2016 = {15.8702, -12.682, -27.8527, 51.4743, -29.1122, 5.38043, };
+    double[] dyMeanTopPosiGBL6hit2016 = {-8.47113, 21.7777, 6.29773, -54.0174, 47.1875, -12.4179, };
+    double[] dySigmTopPosiGBL6hit2016 = {-59.8395, 370.827, -808.852, 841.75, -424.419, 83.4412, };
+    double[] dyMeanTopElecGBL6hit2016 = {-7.54, -15.3759, 132.696, -223.116, 148.554, -35.2279, };
+    double[] dySigmTopElecGBL6hit2016 = {45.3589, -199.013, 393.364, -392.965, 193.823, -37.5235, };
+    double[] dyMeanTopPosiGBL5hit2016 = {-59.7681, 310.437, -620.664, 604.29, -288.16, 54.1288, };
+    double[] dySigmTopPosiGBL5hit2016 = {-14.7081, 140.524, -325.219, 332.767, -160.604, 29.9904, };
+    double[] dyMeanTopElecGBL5hit2016 = {-68.4627, 357.252, -728.447, 727.106, -355.791, 68.3738, };
+    double[] dySigmTopElecGBL5hit2016 = {32.9657, -98.1713, 131.208, -83.5059, 21.2539, -0.59989, };
+    double[] dxMeanBotPosiGBL6hit2016 = {31.2147, -116.188, 195.903, -167.834, 70.6298, -11.4322, };
+    double[] dxSigmBotPosiGBL6hit2016 = {-43.2952, 256.881, -535.352, 534.306, -259.445, 49.3656, };
+    double[] dxMeanBotElecGBL6hit2016 = {-21.3249, 102.023, -179.275, 157.173, -67.9621, 11.3955, };
+    double[] dxSigmBotElecGBL6hit2016 = {15.8105, -50.0419, 85.0998, -79.8581, 39.8302, -8.19017, };
+    double[] dxMeanBotPosiGBL5hit2016 = {-23.1037, 104.399, -152.938, 95.5368, -21.9497, 0.179488, };
+    double[] dxSigmBotPosiGBL5hit2016 = {-86.753, 485.361, -975.539, 938.701, -439.877, 80.9532, };
+    double[] dxMeanBotElecGBL5hit2016 = {92.5952, -446.918, 865.445, -821.014, 382.368, -70.2243, };
+    double[] dxSigmBotElecGBL5hit2016 = {19.8221, -11.007, -79.6297, 156.173, -108.382, 26.3981, };
+    double[] dxMeanTopPosiGBL6hit2016 = {7.72923, -34.3028, 83.8317, -94.9505, 51.9638, -11.0036, };
+    double[] dxSigmTopPosiGBL6hit2016 = {3.17162, 22.044, -74.0991, 92.5084, -51.7613, 10.8334, };
+    double[] dxMeanTopElecGBL6hit2016 = {-47.372, 226.942, -422.55, 398.481, -187.175, 34.8033, };
+    double[] dxSigmTopElecGBL6hit2016 = {-27.5386, 172.897, -362.912, 361.948, -174.716, 32.8781, };
+    double[] dxMeanTopPosiGBL5hit2016 = {-70.8315, 367.28, -724.039, 703.253, -334.821, 62.623, };
+    double[] dxSigmTopPosiGBL5hit2016 = {12.9482, -2.80579, -42.3264, 64.0832, -35.828, 7.04824, };
+    double[] dxMeanTopElecGBL5hit2016 = {42.3767, -189.344, 342.508, -291.985, 118.356, -18.2747, };
+    double[] dxSigmTopElecGBL5hit2016 = {49.5746, -162.784, 223.237, -141.57, 36.6915, -1.72592, };
+*/
+    public double[] dyMeanBotPosiGBL6hit2016 = {72.8727, -349.792, 659.908, -609.401, 275.825, -49.0676, };
+    public double[] dySigmBotPosiGBL6hit2016 = {0.542039, 41.3834, -107.036, 112.861, -54.9971, 10.2496, };
+    public double[] dyMeanBotElecGBL6hit2016 = {23.3744, -102.575, 180.499, -160.897, 73.1143, -13.5406, };
+    public double[] dySigmBotElecGBL6hit2016 = {10.6042, -9.71466, -7.20257, 18.269, -11.3395, 2.37498, };
+    public double[] dyMeanBotPosiGBL5hit2016 = {91.1448, -485.722, 1000.64, -997.069, 482.173, -90.891, };
+    public double[] dySigmBotPosiGBL5hit2016 = {15.331, -13.969, -9.95641, 17.6406, -6.30352, 0.306464, };
+    public double[] dyMeanBotElecGBL5hit2016 = {73.9845, -410.681, 886.628, -932.107, 477.418, -95.4121, };
+    public double[] dySigmBotElecGBL5hit2016 = {31.3637, -103.524, 175.8, -163.617, 77.6462, -14.5316, };
+    public double[] dyMeanTopPosiGBL6hit2016 = {-59.1694, 287.431, -537.205, 488.602, -217.088, 37.841, };
+    public double[] dySigmTopPosiGBL6hit2016 = {17.1947, -46.1694, 73.2445, -68.7828, 34.5674, -7.04517, };
+    public double[] dyMeanTopElecGBL6hit2016 = {-38.4267, 166.856, -288.99, 253.006, -112.547, 20.3315, };
+    public double[] dySigmTopElecGBL6hit2016 = {15.7803, -33.4529, 37.8619, -25.207, 9.89257, -1.80632, };
+    public double[] dyMeanTopPosiGBL5hit2016 = {-65.1397, 359.576, -755.641, 766.195, -376.992, 72.3575, };
+    public double[] dySigmTopPosiGBL5hit2016 = {-0.969339, 70.4946, -183.979, 193.285, -92.7069, 16.8744, };
+    public double[] dyMeanTopElecGBL5hit2016 = {-64.8351, 348.475, -734.982, 761.337, -386.605, 76.9083, };
+    public double[] dySigmTopElecGBL5hit2016 = {31.1267, -101.085, 172.11, -164.794, 82.0954, -16.3607, };
+    public double[] dxMeanBotPosiGBL6hit2016 = {53.7251, -213.778, 403.441, -391.099, 188.16, -35.5268, };
+    public double[] dxSigmBotPosiGBL6hit2016 = {0.788765, 36.7172, -100.229, 111.245, -56.9087, 11.1304, };
+    public double[] dxMeanBotElecGBL6hit2016 = {-30.663, 110.241, -180.817, 150.732, -63.339, 10.6663, };
+    public double[] dxSigmBotElecGBL6hit2016 = {11.5914, -20.0487, 10.9633, 6.16038, -8.31704, 2.28195, };
+    public double[] dxMeanBotPosiGBL5hit2016 = {-123.057, 615.63, -1114.03, 965.415, -405.989, 66.7158, };
+    public double[] dxSigmBotPosiGBL5hit2016 = {-71.1333, 450.209, -965.641, 969.632, -467.178, 87.3673, };
+    public double[] dxMeanBotElecGBL5hit2016 = {132.665, -691.077, 1358.79, -1304.3, 614.756, -114.219, };
+    public double[] dxSigmBotElecGBL5hit2016 = {4.06496, 40.4378, -101.224, 85.6184, -27.8196, 2.23586, };
+    public double[] dxMeanTopPosiGBL6hit2016 = {47.454, -211.64, 434.46, -442.736, 222.063, -43.7014, };
+    public double[] dxSigmTopPosiGBL6hit2016 = {5.32622, 16.2602, -64.9783, 80.9802, -43.6903, 8.7527, };
+    public double[] dxMeanTopElecGBL6hit2016 = {-41.3676, 144.528, -219.323, 168.447, -63.8399, 9.47804, };
+    public double[] dxSigmTopElecGBL6hit2016 = {29.4225, -121.891, 244.024, -254.159, 132.692, -27.3413, };
+    public double[] dxMeanTopPosiGBL5hit2016 = {-83.0265, 445.42, -851.574, 787.834, -355.755, 63.1193, };
+    public double[] dxSigmTopPosiGBL5hit2016 = {-87.5627, 515.125, -1070.51, 1055.82, -503.379, 93.6303, };
+    public double[] dxMeanTopElecGBL5hit2016 = {176.307, -958.593, 1979.52, -1988.06, 977.153, -188.408, };
+    public double[] dxSigmTopElecGBL5hit2016 = {-98.7794, 586.348, -1237.31, 1241.49, -602.028, 113.743, };
     /**
      * Z position to start extrapolation from
      */
@@ -229,10 +361,10 @@
      * @return distance between cluster and track
      */
     public double getDistance(Cluster cluster,Track track) {
-        
+
         // Get the cluster position
         Hep3Vector cPos = new BasicHep3Vector(cluster.getPosition());
-        
+
         // Extrapolate the track to the Ecal cluster position
         Hep3Vector tPos = null;
         if (this.useAnalyticExtrapolator) {
@@ -242,10 +374,10 @@
             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.
      *
@@ -263,8 +395,8 @@
         return getNSigmaPosition(cluster, track);
     }
     public double getNSigmaPosition(Cluster cluster, Track track){
-        
-        
+
+
         if (this.useAnalyticExtrapolator)
             throw new RuntimeException("This is to be used with non-analytic extrapolator only.");
 
@@ -284,48 +416,88 @@
 
         // 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[];
+
+        boolean is5hit = track.getTrackerHits().size() == 5;
+
+        int charge = -(int)(Math.signum(TrackUtils.getR(track)));
         
-        // choose which parameterization of mean and sigma to use:
-        double dxMean[],dyMean[],dxSigm[],dySigm[];
-        int charge = TrackUtils.getCharge(track);
-        if (charge>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 (charge<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;
-            }
+        //System.out.println(charge);
+        if(is2015){
+
+            if (charge>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 (charge<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;
+        } else if (is2016){
+            if (charge>0) {
+                if (isTopTrack) {
+                    dxMean = is5hit ? dxMeanTopPosiGBL5hit2016 : dxMeanTopPosiGBL6hit2016;
+                    dxSigm = is5hit ? dxSigmTopPosiGBL5hit2016 : dxSigmTopPosiGBL6hit2016;
+                    dyMean = is5hit ? dyMeanTopPosiGBL5hit2016 : dyMeanTopPosiGBL6hit2016;
+                    dySigm = is5hit ? dySigmTopPosiGBL5hit2016 : dySigmTopPosiGBL6hit2016;
+                }
+                else {
+                    dxMean = is5hit ? dxMeanBotPosiGBL5hit2016 : dxMeanBotPosiGBL6hit2016;
+                    dxSigm = is5hit ? dxSigmBotPosiGBL5hit2016 : dxSigmBotPosiGBL6hit2016;
+                    dyMean = is5hit ? dyMeanBotPosiGBL5hit2016 : dyMeanBotPosiGBL6hit2016;
+                    dySigm = is5hit ? dySigmBotPosiGBL5hit2016 : dySigmBotPosiGBL6hit2016;
+                }
+            }
+            else if (charge<0) {
+                if (isTopTrack) {
+                    dxMean = is5hit ? dxMeanTopElecGBL5hit2016 : dxMeanTopElecGBL6hit2016;
+                    dxSigm = is5hit ? dxSigmTopElecGBL5hit2016 : dxSigmTopElecGBL6hit2016;
+                    dyMean = is5hit ? dyMeanTopElecGBL5hit2016 : dyMeanTopElecGBL6hit2016;
+                    dySigm = is5hit ? dySigmTopElecGBL5hit2016 : dySigmTopElecGBL6hit2016;
+                }
+                else {
+                    dxMean = is5hit ? dxMeanBotElecGBL5hit2016 : dxMeanBotElecGBL6hit2016;
+                    dxSigm = is5hit ? dxSigmBotElecGBL5hit2016 : dxSigmBotElecGBL6hit2016;
+                    dyMean = is5hit ? dyMeanBotElecGBL5hit2016 : dyMeanBotElecGBL6hit2016;
+                    dySigm = is5hit ? dySigmBotElecGBL5hit2016 : dySigmBotElecGBL6hit2016;
+                }
+            }
+            else return Double.MAX_VALUE;
         }
         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();
-        
+
         // Rafo's parameterization isn't measured above 650 MeV/c but expected to be constant:
-        if (ee > 0.65) ee=0.65;
+        if (is2015 && ee > 0.65) ee=0.65;
+        // Likewise Sebouh's parameterization of the 2016 data isn't measured above 1500 MeV/c.   
+        if (is2016 && ee > 1.5)  ee=1.5; 
 
         // calculate measured mean and sigma of deltaX and deltaY for this energy:
         double aDxMean=0,aDxSigm=0,aDyMean=0,aDySigm=0;
@@ -341,6 +513,210 @@
         //return Math.sqrt( 1 / ( 1/nSigmaX/nSigmaX + 1/nSigmaY/nSigmaY ) );
     }
 
+    public double getNSigmaPositionX(Cluster cluster, Track track){
+
+
+        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[], dxSigm[];
+
+        boolean is5hit = track.getTrackerHits().size() == 5;
+
+        int charge = -(int)(Math.signum(TrackUtils.getR(track)));
+        
+        //System.out.println(charge);
+        if(is2015){
+
+            if (charge>0) {
+                if (isTopTrack) {
+                    dxMean = isGBL ? dxMeanTopPosiGBL : dxMeanTopPosiSeed;
+                    dxSigm = isGBL ? dxSigmTopPosiGBL : dxSigmTopPosiSeed;
+                }
+                else {
+                    dxMean = isGBL ? dxMeanBotPosiGBL : dxMeanBotPosiSeed;
+                    dxSigm = isGBL ? dxSigmBotPosiGBL : dxSigmBotPosiSeed;
+                }
+            }
+            else if (charge<0) {
+                if (isTopTrack) {
+                    dxMean = isGBL ? dxMeanTopElecGBL : dxMeanTopElecSeed;
+                    dxSigm = isGBL ? dxSigmTopElecGBL : dxSigmTopElecSeed;
+                }
+                else {
+                    dxMean = isGBL ? dxMeanBotElecGBL : dxMeanBotElecSeed;
+                    dxSigm = isGBL ? dxSigmBotElecGBL : dxSigmBotElecSeed;
+                }
+            }
+            else return Double.MAX_VALUE;
+        } else if (is2016){
+            if (charge>0) {
+                if (isTopTrack) {
+                    dxMean = is5hit ? dxMeanTopPosiGBL5hit2016 : dxMeanTopPosiGBL6hit2016;
+                    dxSigm = is5hit ? dxSigmTopPosiGBL5hit2016 : dxSigmTopPosiGBL6hit2016;
+                }
+                else {
+                    dxMean = is5hit ? dxMeanBotPosiGBL5hit2016 : dxMeanBotPosiGBL6hit2016;
+                    dxSigm = is5hit ? dxSigmBotPosiGBL5hit2016 : dxSigmBotPosiGBL6hit2016;
+                }
+            }
+            else if (charge<0) {
+                if (isTopTrack) {
+                    dxMean = is5hit ? dxMeanTopElecGBL5hit2016 : dxMeanTopElecGBL6hit2016;
+                    dxSigm = is5hit ? dxSigmTopElecGBL5hit2016 : dxSigmTopElecGBL6hit2016;
+                }
+                else {
+                    dxMean = is5hit ? dxMeanBotElecGBL5hit2016 : dxMeanBotElecGBL6hit2016;
+                    dxSigm = is5hit ? dxSigmBotElecGBL5hit2016 : dxSigmBotElecGBL6hit2016;
+                    
+                }
+            }
+            else return Double.MAX_VALUE;
+        }
+        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();
+
+        // Rafo's parameterization isn't measured above 650 MeV/c but expected to be constant:
+        if (is2015 && ee > 0.65) ee=0.65;
+        // Likewise Sebouh's parameterization of the 2016 data isn't measured above 1500 MeV/c.   
+        if (is2016 && ee > 1.5)  ee=1.5; 
+
+        // 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;
+        
+        // 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 nSigmaX;
+        //return Math.sqrt( 1 / ( 1/nSigmaX/nSigmaX + 1/nSigmaY/nSigmaY ) );
+    }
+    
+    public double getNSigmaPositionY(Cluster cluster, Track track){
+
+
+        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 dyMean[], dySigm[];
+
+        boolean is5hit = track.getTrackerHits().size() == 5;
+
+        int charge = -(int)(Math.signum(TrackUtils.getR(track)));
+        
+        //System.out.println(charge);
+        if(is2015){
+
+            if (charge>0) {
+                if (isTopTrack) {
+                    dyMean = isGBL ? dyMeanTopPosiGBL : dyMeanTopPosiSeed;
+                    dySigm = isGBL ? dySigmTopPosiGBL : dySigmTopPosiSeed;
+                }
+                else {
+                    dyMean = isGBL ? dyMeanBotPosiGBL : dyMeanBotPosiSeed;
+                    dySigm = isGBL ? dySigmBotPosiGBL : dySigmBotPosiSeed;
+                }
+            }
+            else if (charge<0) {
+                if (isTopTrack) {
+                    dyMean = isGBL ? dyMeanTopElecGBL : dyMeanTopElecSeed;
+                    dySigm = isGBL ? dySigmTopElecGBL : dySigmTopElecSeed;
+                }
+                else {
+                    dyMean = isGBL ? dyMeanBotElecGBL : dyMeanBotElecSeed;
+                    dySigm = isGBL ? dySigmBotElecGBL : dySigmBotElecSeed;
+                }
+            }
+            else return Double.MAX_VALUE;
+        } else if (is2016){
+            if (charge>0) {
+                if (isTopTrack) {
+                   dyMean = is5hit ? dyMeanTopPosiGBL5hit2016 : dyMeanTopPosiGBL6hit2016;
+                    dySigm = is5hit ? dySigmTopPosiGBL5hit2016 : dySigmTopPosiGBL6hit2016;
+                }
+                else {
+                    dyMean = is5hit ? dyMeanBotPosiGBL5hit2016 : dyMeanBotPosiGBL6hit2016;
+                    dySigm = is5hit ? dySigmBotPosiGBL5hit2016 : dySigmBotPosiGBL6hit2016;
+                }
+            }
+            else if (charge<0) {
+                if (isTopTrack) {
+                    dyMean = is5hit ? dyMeanTopElecGBL5hit2016 : dyMeanTopElecGBL6hit2016;
+                    dySigm = is5hit ? dySigmTopElecGBL5hit2016 : dySigmTopElecGBL6hit2016;
+                }
+                else {
+                    dyMean = is5hit ? dyMeanBotElecGBL5hit2016 : dyMeanBotElecGBL6hit2016;
+                    dySigm = is5hit ? dySigmBotElecGBL5hit2016 : dySigmBotElecGBL6hit2016;
+                }
+            }
+            else return Double.MAX_VALUE;
+        }
+        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();
+
+        // Rafo's parameterization isn't measured above 650 MeV/c but expected to be constant:
+        if (is2015 && ee > 0.65) ee=0.65;
+        // Likewise Sebouh's parameterization of the 2016 data isn't measured above 1500 MeV/c.   
+        if (is2016 && ee > 1.5)  ee=1.5; 
+
+        // calculate measured mean and sigma of deltaX and deltaY for this energy:
+        double 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 nSigmaY;
+        //return Math.sqrt( 1 / ( 1/nSigmaX/nSigmaX + 1/nSigmaY/nSigmaY ) );
+    }
 
     /**
      * Determine if a track is matched to a cluster. Currently, this is
@@ -412,14 +788,14 @@
         if ((track.getTrackStates().get(0).getTanLambda() > 0 && (deltaX > topClusterTrackMatchDeltaXHigh
                 || deltaX < topClusterTrackMatchDeltaXLow))
                 || (track.getTrackStates().get(0).getTanLambda() < 0 && (deltaX > bottomClusterTrackMatchDeltaXHigh
-                || deltaX < bottomClusterTrackMatchDeltaXLow))) {
+                        || deltaX < bottomClusterTrackMatchDeltaXLow))) {
             return false;
         }
 
         if ((track.getTrackStates().get(0).getTanLambda() > 0 && (deltaY > topClusterTrackMatchDeltaYHigh
                 || deltaY < topClusterTrackMatchDeltaYLow))
                 || (track.getTrackStates().get(0).getTanLambda() < 0 && (deltaY > bottomClusterTrackMatchDeltaYHigh
-                || deltaY < bottomClusterTrackMatchDeltaYLow))) {
+                        || deltaY < bottomClusterTrackMatchDeltaYLow))) {
             return false;
         }
 
@@ -543,5 +919,5 @@
         }
         public double getNSigmaPositionMatch() { return nSigmaPositionMatch; }
     }
-    
+
 }

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/analysis/EcalCosmicClusterAnalysis.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/analysis/EcalCosmicClusterAnalysis.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/analysis/EcalCosmicClusterAnalysis.lcsim	Fri Oct 21 11:49:08 2016
@@ -6,6 +6,8 @@
         <driver name="RawModeHitSelectionDriver"/>
         <!-- Convert to CalorimeterHit collection. -->
         <driver name="EcalRawConverterDriver"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <!-- Create MIP clusters from selected hits. -->
         <driver name="CosmicClusterDriver"/>
         <!-- Create profiles and fits from cluster data. -->
@@ -23,8 +25,16 @@
         </driver>
         <driver name="EcalRawConverterDriver" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalCosmicReadoutHits</rawCollectionName>
-            <ecalCollectionName>EcalCosmicCalHits</ecalCollectionName>
+            <ecalCollectionName>EcalCosmicUncalHits</ecalCollectionName>
         </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCosmicCalHits</outputHitsCollectionName>
+        </driver>  
         <driver name="CosmicClusterDriver" type="org.hps.recon.ecal.cluster.ClusterDriver">
             <clustererName>SimpleCosmicClusterer</clustererName>
             <inputHitCollectionName>EcalCosmicCalHits</inputHitCollectionName>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/analysis/EcalCosmicSignalFitAnalysis.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/analysis/EcalCosmicSignalFitAnalysis.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/analysis/EcalCosmicSignalFitAnalysis.lcsim	Fri Oct 21 11:49:08 2016
@@ -6,6 +6,8 @@
         <driver name="DualThresholdSignalFitDriver"/>
         <!-- Convert to CalorimeterHit collection. -->
         <driver name="EcalRawConverterDriver"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <!-- Create MIP clusters from selected hits. -->
         <driver name="DualThresholdCosmicClusterDriver"/>
         <driver name="LCIODriver"/>
@@ -23,9 +25,18 @@
         </driver>
         <driver name="EcalRawConverterDriver" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>LooseEcalCosmicReadoutHits</rawCollectionName>
-            <ecalCollectionName>LooseEcalCosmicCalHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
+            
+        </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
             <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
         </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>LooseEcalCosmicCalHits</outputHitsCollectionName>
+        </driver> 
         <driver name="DualThresholdCosmicClusterDriver" type="org.hps.recon.ecal.cluster.DualThresholdCosmicClusterDriver"> 
             <logLevel>FINEST</logLevel>
             <skipNoClusterEvents>true</skipNoClusterEvents>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalBasicMonitoring.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalBasicMonitoring.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalBasicMonitoring.lcsim	Fri Oct 21 11:49:08 2016
@@ -2,6 +2,8 @@
     <execute>
         <driver name="EventMarkerDriver" />
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClusterer" />
         <driver name="EcalMonitoringPlots" />
     </execute>
@@ -11,8 +13,17 @@
         </driver>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <applyBadCrystalMap>false</applyBadCrystalMap>
+        	<ecalCollectionName>EcalUncalHits</ecalCollectionName>
+        </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
             <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
         </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver> 
         <driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.GTPOnlineClusterDriver">
             <verbose>false</verbose>
             <logLevel>WARNING</logLevel>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedCommissioning.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedCommissioning.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedCommissioning.lcsim	Fri Oct 21 11:49:08 2016
@@ -2,6 +2,8 @@
     <execute>
         <driver name="EventMarkerDriver" />
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalEventDisplay" />         <!-- Ecal event display -->
     </execute>
     <drivers>
@@ -10,7 +12,18 @@
         </driver>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <applyBadCrystalMap>false</applyBadCrystalMap>
+        	<ecalCollectionName>EcalUncalHits</ecalCollectionName>
+            
         </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalEventDisplay" type="org.hps.monitoring.ecal.plots.EcalEventDisplayWithRawWaveform">
             <inputCollection>EcalCalHits</inputCollection>
             <inputCollectionRaw>EcalReadoutHits</inputCollectionRaw>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceMonitoringApp.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceMonitoringApp.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceMonitoringApp.lcsim	Fri Oct 21 11:49:08 2016
@@ -3,7 +3,9 @@
     <execute>
         <driver name="EventMarkerDriver"/>
         <driver name="EcalRunningPedestal"/>
-        <driver name="EcalRawConverter" />    
+        <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="LedAnalysisDriver"/>
         <driver name="EcalEventDisplay" />         <!-- Ecal event display -->
         <driver name="AidaSaveDriver"/>
@@ -17,14 +19,22 @@
             <maxLookbackEvents>50</maxLookbackEvents>
         </driver>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
-            <use2014Gain>false</use2014Gain>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
+            
             <useTimestamps>false</useTimestamps>
             <useTruthTime>false</useTruthTime>
             <useRunningPedestal>true</useRunningPedestal>
+            </driver>       
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
             <useTimeWalkCorrection>true</useTimeWalkCorrection>
-        </driver>       
-        
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver> 
           <driver name="EcalEventDisplay" type="org.hps.monitoring.ecal.plots.EcalEventDisplay">
             <inputCollection>EcalCalHits</inputCollection>
             <inputCollectionRaw>EcalReadoutHits</inputCollectionRaw>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceStandalone.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceStandalone.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceStandalone.lcsim	Fri Oct 21 11:49:08 2016
@@ -4,7 +4,9 @@
 	    	<driver name="EventMarkerDriver"/>
 	        <driver name="EcalRunningPedestal"/>
 	  	    <driver name="EcalRawConverter" />    
-	        <driver name="LedAnalysisDriver"/>
+	        <driver name="EcalGains"/>
+        	<driver name="EcalTimeCorrection"/>
+        	<driver name="LedAnalysisDriver"/>
 	        <driver name="AidaSaveDriver"/>	     
 	    </execute>           
 	    <drivers>    
@@ -16,14 +18,23 @@
 	            <maxLookbackEvents>50</maxLookbackEvents>
 	        </driver>
 	        <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-	            <ecalCollectionName>EcalCalHits</ecalCollectionName>
+	            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
 	            <useTimestamps>false</useTimestamps>
 	            <useTruthTime>false</useTruthTime>
 	            <useRunningPedestal>true</useRunningPedestal>
-	            <useTimeWalkCorrection>true</useTimeWalkCorrection>
 	            <nsa>60</nsa>  <!-- these are critical since the defaults in software are 100 - 20, as in prod. runs -->
        		    <nsb>16</nsb>
-	        </driver>       
+	        </driver>
+	        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       			<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            	<use2014Gain>false</use2014Gain>
+            	<outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        	</driver>
+        	<driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       			<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            	<useTimeWalkCorrection>true</useTimeWalkCorrection>
+            	<outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        	</driver>        
 	  <!--     <driver name="EcalEventDisplay" type="org.hps.monitoring.ecal.plots.EcalEventDisplay">
 	            <inputCollection>EcalCalHits</inputCollection>
 	            <inputCollectionRaw>EcalReadoutHits</inputCollectionRaw>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoring.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoring.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoring.lcsim	Fri Oct 21 11:49:08 2016
@@ -3,6 +3,8 @@
     <execute>
         <driver name="EventMarkerDriver" />
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClusterer" />
         <driver name="EcalMonitoringPlots" />
         <driver name="EcalHitPlots" />
@@ -11,8 +13,17 @@
     <drivers>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <applyBadCrystalMap>false</applyBadCrystalMap>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
+        </driver>
+         <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
             <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
         </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.GTPOnlineClusterDriver">
             <verbose>false</verbose>
             <logLevel>WARNING</logLevel>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringFinal.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringFinal.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringFinal.lcsim	Fri Oct 21 11:49:08 2016
@@ -2,6 +2,8 @@
     <execute>
         <driver name="EcalRawConverter" />
         <driver name="EcalClusterer" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalMonitoringPlots" />      <!-- General plots -->
         <driver name="EcalHitPlots" />             <!-- Single hit distributions -->
         <driver name="EcalClusterPlots" />         <!-- Clusters distributions -->
@@ -20,12 +22,10 @@
         </driver>
         
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
-            <use2014Gain>false</use2014Gain>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <useTimestamps>false</useTimestamps>
             <useTruthTime>false</useTruthTime>
             <useRunningPedestal>false</useRunningPedestal>
-            <useTimeWalkCorrection>false</useTimeWalkCorrection>
             <emulateFirmware>true</emulateFirmware>
             <emulateMode7>false</emulateMode7>
             <leadingEdgeThreshold>12</leadingEdgeThreshold>
@@ -33,7 +33,16 @@
             <nsb>20</nsb>
             <nPeak>3</nPeak>
         </driver>
-        
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <useTimeWalkCorrection>false</useTimeWalkCorrection>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver> 
 
         <driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
             <logLevel>WARNING</logLevel>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringOnly.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringOnly.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringOnly.lcsim	Fri Oct 21 11:49:08 2016
@@ -2,6 +2,8 @@
     <execute>
         <driver name="EcalRawConverter" />
         <driver name="EcalClusterer" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalMonitoringPlots" />      <!-- General plots -->
         <driver name="EcalHitPlots" />             <!-- Single hit distributions -->
         <driver name="EcalClusterPlots" />         <!-- Clusters distributions -->
@@ -20,12 +22,10 @@
         </driver>
         
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
-            <use2014Gain>false</use2014Gain>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <useTimestamps>false</useTimestamps>
             <useTruthTime>false</useTruthTime>
             <useRunningPedestal>false</useRunningPedestal>
-            <useTimeWalkCorrection>false</useTimeWalkCorrection>
             <emulateFirmware>true</emulateFirmware>
             <emulateMode7>false</emulateMode7>
             <leadingEdgeThreshold>12</leadingEdgeThreshold>
@@ -33,6 +33,16 @@
             <nsb>20</nsb>
             <nPeak>3</nPeak>
         </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <useTimeWalkCorrection>false</useTimeWalkCorrection>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver>  
         
 
         <driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalPedestalMonitor.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalPedestalMonitor.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalPedestalMonitor.lcsim	Fri Oct 21 11:49:08 2016
@@ -2,13 +2,25 @@
     xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
     <execute>
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
+        
         <driver name="EcalRunningPedestal"/>
         <driver name="EcalPedestalMonitor"/>
         <driver name="CleanupDriver" />
     </execute>
     <drivers>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
+        	<ecalCollectionName>EcalUncalHits</ecalCollectionName>
         </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalRunningPedestal" type="org.hps.recon.ecal.EcalRunningPedestalDriver">
             <minLookbackEvents>10</minLookbackEvents>
             <maxLookbackEvents>50</maxLookbackEvents>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalPedestalViewer.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalPedestalViewer.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalPedestalViewer.lcsim	Fri Oct 21 11:49:08 2016
@@ -2,13 +2,25 @@
     xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
     <execute>
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
+        
         <driver name="EcalPedestalCalculator"/>
         <driver name="EcalPedestalViewer"/>
         <driver name="CleanupDriver" />
     </execute>
     <drivers>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
+        	<ecalCollectionName>EcalUncalHits</ecalCollectionName>
         </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalPedestalCalculator" type="org.hps.recon.ecal.EcalPedestalCalculator">
         </driver>
         <driver name="EcalPedestalViewer" type="org.hps.monitoring.ecal.plots.EcalPedestalViewer">

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalTriggerMonitoring.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalTriggerMonitoring.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalTriggerMonitoring.lcsim	Fri Oct 21 11:49:08 2016
@@ -2,6 +2,8 @@
     <execute>
         <driver name="EventMarkerDriver" />
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalTriggerFilter" />
         <driver name="EcalClusterer" />
 <!--        <driver name="EcalPedestalPlots"/>-->
@@ -26,7 +28,17 @@
             <dropBadFADC>true</dropBadFADC>
             <tp>14.0</tp>
             <truncateScale>1</truncateScale>
+        	<ecalCollectionName>EcalUncalHits</ecalCollectionName>
         </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver>  
+        
         <driver name="EcalTriggerFilter" type="org.hps.recon.ecal.EcalTriggerFilterDriver">
             <inputCollection>EcalCalHits</inputCollection>
             <outputCollection>EcalFilteredHits</outputCollection>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalTriggerWindowMonitoring.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalTriggerWindowMonitoring.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/EcalTriggerWindowMonitoring.lcsim	Fri Oct 21 11:49:08 2016
@@ -3,6 +3,8 @@
         <driver name="EventMarkerDriver" />
         <driver name="FADCConverter" />
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClusterer" />
         <!-- <driver name="EcalIntegralPedestalPlots" />  -->
         <driver name="EcalMonitoringPlots" />
@@ -24,9 +26,19 @@
             <!--<integralWindow>35</integralWindow> Deprecated, now use the equivalent in NSA/NSB-->
             <nsa>120</nsa>
             <nsb>20</nsb>
+            
+        	<ecalCollectionName>EcalUncalHits</ecalCollectionName>
+        </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
             <gain>1.0</gain>
             <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
         </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver> 
         <driver name="EcalDaqPlots" type="org.hps.monitoring.ecal.plots.EcalDaqPlots">
         </driver>
         <driver name="EcalMonitoringPlots" type="org.hps.monitoring.ecal.plots.EcalMonitoringPlots">

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/ExampleMonitoringPlots.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/ExampleMonitoringPlots.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/ExampleMonitoringPlots.lcsim	Fri Oct 21 11:49:08 2016
@@ -1,6 +1,8 @@
 <lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
     <execute>
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="ReconClusterer" />
         <driver name="ExamplePlotDriver" />
     </execute>
@@ -9,11 +11,19 @@
             <eventInterval>1</eventInterval>
         </driver>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
-            <use2014Gain>false</use2014Gain>
             <useTimestamps>false</useTimestamps>
             <useTruthTime>false</useTruthTime>
+        	<ecalCollectionName>EcalUncalHits</ecalCollectionName>
         </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+             <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver> 
         <driver name="ReconClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
             <logLevel>WARNING</logLevel>
             <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/Layers4to6TrackingMonitoring.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/Layers4to6TrackingMonitoring.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/Layers4to6TrackingMonitoring.lcsim	Fri Oct 21 11:49:08 2016
@@ -17,7 +17,9 @@
         <!--  regular tracking and recon -->
         <driver name="FullTrackerReconDriver"/> 
         <driver name="TrackDataDriver"/>   
-        <driver name="EcalRawConverter" /> 
+        <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClusterer" />
         <driver name="ReconParticle" /> 
         <!-- Online Monitoring Drivers -->
@@ -75,19 +77,27 @@
         <driver name="TrackDataDriver" type="org.hps.recon.tracking.TrackDataDriver">
         </driver>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
-            <use2014Gain>false</use2014Gain>
             <useTimestamps>false</useTimestamps>
             <useTruthTime>false</useTruthTime>
             <useRunningPedestal>false</useRunningPedestal>
-            <useTimeWalkCorrection>false</useTimeWalkCorrection>
             <emulateFirmware>true</emulateFirmware>
             <emulateMode7>false</emulateMode7>
             <leadingEdgeThreshold>12</leadingEdgeThreshold>
             <nsa>100</nsa>
             <nsb>20</nsb>
             <nPeak>3</nPeak>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
         </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <useTimeWalkCorrection>false</useTimeWalkCorrection>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver> 
         <driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
             <logLevel>WARNING</logLevel>
             <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/LooseTrackingAndReconMonitoring.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/LooseTrackingAndReconMonitoring.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/LooseTrackingAndReconMonitoring.lcsim	Fri Oct 21 11:49:08 2016
@@ -14,6 +14,8 @@
         <driver name="FullTrackerReconDriver"/> 
         <driver name="TrackDataDriver"/>   
         <driver name="EcalRawConverter" /> 
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClusterer" />
         <driver name="ReconParticle" /> 
         <!-- Online Monitoring Drivers -->
@@ -59,19 +61,27 @@
         <driver name="TrackDataDriver" type="org.hps.recon.tracking.TrackDataDriver">
         </driver>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
-            <use2014Gain>false</use2014Gain>
             <useTimestamps>false</useTimestamps>
             <useTruthTime>false</useTruthTime>
             <useRunningPedestal>false</useRunningPedestal>
-            <useTimeWalkCorrection>false</useTimeWalkCorrection>
             <emulateFirmware>true</emulateFirmware>
             <emulateMode7>false</emulateMode7>
             <leadingEdgeThreshold>12</leadingEdgeThreshold>
             <nsa>100</nsa>
             <nsb>20</nsb>
             <nPeak>3</nPeak>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
         </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <useTimeWalkCorrection>false</useTimeWalkCorrection>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver> 
         <driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
             <logLevel>WARNING</logLevel>
             <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/OnlineTracking.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/OnlineTracking.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/OnlineTracking.lcsim	Fri Oct 21 11:49:08 2016
@@ -2,6 +2,8 @@
     <execute>
         <driver name="EventMarkerDriver" />
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClusterer" />
         <driver name="SVTOccupancyPlots" />
         <driver name="RawTrackerHitFitterDriver" />
@@ -13,9 +15,19 @@
     </execute>
     <drivers>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
+             
+        	<ecalCollectionName>EcalUncalHits</ecalCollectionName>
+        </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
             <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
         </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver>  
+        
         <driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.GTPOnlineClusterDriver">
             <verbose>false</verbose>
             <logLevel>WARNING</logLevel>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/SVTMonitoring.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/SVTMonitoring.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/SVTMonitoring.lcsim	Fri Oct 21 11:49:08 2016
@@ -7,6 +7,8 @@
         <driver name="HelicalTrackHitDriver" />
         <driver name="TrackerReconDriver" />
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClusterer" />
         <driver name="CleanupDriver" />
         <driver name="AidaSaveDriver" />
@@ -17,9 +19,17 @@
         </driver>
         <driver name="RawTrackerHitSensorSetup" type="org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup" />
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
+        </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
             <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
         </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.GTPOnlineClusterDriver">
             <verbose>false</verbose>
             <logLevel>WARNING</logLevel>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/TrackingAndReconMonitoring.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/TrackingAndReconMonitoring.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/TrackingAndReconMonitoring.lcsim	Fri Oct 21 11:49:08 2016
@@ -12,7 +12,9 @@
         <driver name="HelicalTrackHitDriver" />
         <driver name="TrackerReconDriver"/> 
         <driver name="TrackDataDriver"/>   
-        <driver name="EcalRawConverter" /> 
+        <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/> 
         <driver name="EcalClusterer" />
         <driver name="ReconParticle" /> 
         <!-- Online Monitoring Drivers -->
@@ -58,19 +60,27 @@
         <driver name="TrackDataDriver" type="org.hps.recon.tracking.TrackDataDriver">
         </driver>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
-            <use2014Gain>false</use2014Gain>
             <useTimestamps>false</useTimestamps>
             <useTruthTime>false</useTruthTime>
             <useRunningPedestal>false</useRunningPedestal>
-            <useTimeWalkCorrection>false</useTimeWalkCorrection>
             <emulateFirmware>true</emulateFirmware>
             <emulateMode7>false</emulateMode7>
             <leadingEdgeThreshold>12</leadingEdgeThreshold>
             <nsa>100</nsa>
             <nsb>20</nsb>
             <nPeak>3</nPeak>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
         </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <useTimeWalkCorrection>false</useTimeWalkCorrection>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
             <logLevel>WARNING</logLevel>
             <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/TriggerDiagnosticsMonitoring.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/TriggerDiagnosticsMonitoring.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/monitoring/TriggerDiagnosticsMonitoring.lcsim	Fri Oct 21 11:49:08 2016
@@ -4,6 +4,8 @@
         <driver name="ConditionsDriver"/>
         <driver name="DAQConfig"/>
         <driver name="EcalRawConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="GTPTestDriver"/>
         <driver name="TriggerDiagnostics"/>
         <!--
@@ -21,12 +23,9 @@
         </driver>        
         <driver name="DAQConfig" type="org.hps.record.daqconfig.DAQConfigDriver"/>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
-            <use2014Gain>false</use2014Gain>
             <useTimestamps>false</useTimestamps>
             <useTruthTime>false</useTruthTime>
             <useRunningPedestal>false</useRunningPedestal>
-            <useTimeWalkCorrection>false</useTimeWalkCorrection>
             <emulateFirmware>true</emulateFirmware>
             <emulateMode7>false</emulateMode7>
             <leadingEdgeThreshold>12</leadingEdgeThreshold>
@@ -34,7 +33,18 @@
             <nsa>100</nsa>
             <nsb>20</nsb>
             <nPeak>3</nPeak>
-        </driver>        
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
+        </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <useTimeWalkCorrection>false</useTimeWalkCorrection>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver> 
         <driver name="GTPTestDriver" type="org.hps.recon.ecal.cluster.GTPOnlineClusterDriver">
             <inputHitCollectionName>EcalCalHits</inputHitCollectionName>
             <!-- <seedEnergyThreshold>0.500</seedEnergyThreshold>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/production/FEEFilter_2pt3.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/production/FEEFilter_2pt3.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/production/FEEFilter_2pt3.lcsim	Fri Oct 21 11:49:08 2016
@@ -17,6 +17,7 @@
        	<clusterCut>1.3</clusterCut>
        	<!-- Seed cut causes inefficiency near corners of crystals.  Don't include it -->
        	<seedCut>0</seedCut>
+       	
         </driver>
         <!-- Driver to write output slcio file -->
         <driver name="Writer" type="org.lcsim.util.loop.LCIODriver">

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/production/MollerCandidateFilter_2pt3.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/production/MollerCandidateFilter_2pt3.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/production/MollerCandidateFilter_2pt3.lcsim	Fri Oct 21 11:49:08 2016
@@ -16,9 +16,9 @@
             <eventInterval>1000</eventInterval>
         </driver>
         <!-- Driver to reject "bad" events -->
-        <driver name="EventFlagFilter" 
+        <!-- <driver name="EventFlagFilter" 
                 type="org.hps.recon.filtering.EventFlagFilter">
-        </driver>
+        </driver>-->
         <!-- Driver to strip events -->
        <driver name="StripEvent"
                 type="org.hps.recon.filtering.MollerCandidateFilter">
@@ -27,11 +27,19 @@
               <!-- Name of the Moller Candidate Collection of ReconstriuctedParticles -->
               <mollerCandidateCollectionName>TargetConstrainedMollerCandidates</mollerCandidateCollectionName>
               <!-- Maximum momentum of each electron, used to remove full energy electrons -->
-              <mollerMomentumMax>1.85</mollerMomentumMax>
+              <mollerMomentumMax>1.95</mollerMomentumMax>
               <!-- Sum of the two electron momenta should equal the beam energy, this is the low cut -->
               <mollerMomentumSumMin>1.85</mollerMomentumSumMin>
               <!-- Sum of the two electron momenta should equal the beam energy, this is the high cut -->
-               <mollerMomentumSumMax>2.85</mollerMomentumSumMax>
+              <mollerMomentumSumMax>2.85</mollerMomentumSumMax>
+              <!-- Minimum number of electrons that are required to be associated with clusters -->
+              <clusterCountCut>0</clusterCountCut>
+              <!-- maximum and minimum angles in x and y -->
+              <mollerAngleMinY>-.004</mollerAngleMinY>
+              <mollerAngleMaxY>.003</mollerAngleMaxY>
+              <mollerAngleMinX>.024</mollerAngleMinX>
+              <mollerAngleMaxX>.034</mollerAngleMaxX>
+              <useAngleCuts>true</useAngleCuts>
               <!-- Following is for the calorimeter-only cuts -->
               <!-- Name of Moller Candidate Calorimeter Cluster Collection Name-->
               <mollerCandidateClusterCollectionName >EcalClustersCorr</mollerCandidateClusterCollectionName>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/production/V0CandidateFilter_2pt3.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/production/V0CandidateFilter_2pt3.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/production/V0CandidateFilter_2pt3.lcsim	Fri Oct 21 11:49:08 2016
@@ -25,7 +25,7 @@
               <!-- Setting this true keeps ALL events containing EPICS data -->
               <keepEpicsDataEvents>true</keepEpicsDataEvents>
               <trackPMax>1.95</trackPMax>
-              <V0PMax>3.05</V0PMax>
+              <v0PMax>3.05</v0PMax>
         </driver>
         <!-- Driver to write output slcio file -->
         <driver name="Writer"

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014TightPairs.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014TightPairs.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014TightPairs.lcsim	Fri Oct 21 11:49:08 2016
@@ -11,6 +11,8 @@
         <driver name="EventMarkerDriver"/>          
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClusterer"/>
         <driver name="PairTrigger1"/>
         <driver name="TestRunReconToLcio"/>
@@ -40,11 +42,19 @@
         </driver>
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
-            <applyBadCrystalMap>false</applyBadCrystalMap>
-            <use2014Gain>false</use2014Gain>      
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
+            <applyBadCrystalMap>false</applyBadCrystalMap>      
             <debug>true</debug>
         </driver>   
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName>
             <clusterWindow>1</clusterWindow>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigPairs0.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigPairs0.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigPairs0.lcsim	Fri Oct 21 11:49:08 2016
@@ -8,6 +8,8 @@
         <driver name="EventMarkerDriver"/>          
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClustererGTP"/>
         <driver name="PairTrigger0"/>
         <driver name="TestRunReconToLcio"/>
@@ -44,12 +46,21 @@
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
             <!--rawCollectionName>EcalCalHits</rawCollectionName-->
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <applyBadCrystalMap>false</applyBadCrystalMap>
             <nsa>100</nsa>
             <nsb>20</nsb>
-            <use2014Gain>false</use2014Gain> 
+            
         </driver>   
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClustererGTP" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName>
             <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>            

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigPairs1.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigPairs1.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigPairs1.lcsim	Fri Oct 21 11:49:08 2016
@@ -8,6 +8,8 @@
         <driver name="EventMarkerDriver"/>          
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClustererGTP"/>
         <driver name="PairTrigger1"/>
         <driver name="TestRunReconToLcio"/>
@@ -44,12 +46,21 @@
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
             <!--rawCollectionName>EcalCalHits</rawCollectionName-->
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <applyBadCrystalMap>false</applyBadCrystalMap>
             <nsa>100</nsa>
             <nsb>20</nsb>
             <use2014Gain>false</use2014Gain> 
-        </driver>   
+        </driver> 
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>    
         <driver name="EcalClustererGTP" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName>
             <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>            

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigSingles0.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigSingles0.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigSingles0.lcsim	Fri Oct 21 11:49:08 2016
@@ -8,6 +8,8 @@
         <driver name="EventMarkerDriver"/>          
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClustererGTP"/>
         <driver name="SinglesTrigger0"/>
         <driver name="TestRunReconToLcio"/>
@@ -44,12 +46,20 @@
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
             <!--rawCollectionName>EcalCalHits</rawCollectionName-->
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <applyBadCrystalMap>false</applyBadCrystalMap>
             <nsa>100</nsa>
             <nsb>20</nsb>
             <use2014Gain>false</use2014Gain> 
+        </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
         </driver>   
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver> 
         <driver name="EcalClustererGTP" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName>
             <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>            

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigSingles1.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigSingles1.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PresTrigSingles1.lcsim	Fri Oct 21 11:49:08 2016
@@ -8,6 +8,8 @@
         <driver name="EventMarkerDriver"/>          
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClustererGTP"/>
         <driver name="SinglesTrigger1"/>
         <driver name="TestRunReconToLcio"/>
@@ -44,12 +46,21 @@
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
             <!--rawCollectionName>EcalCalHits</rawCollectionName-->
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <applyBadCrystalMap>false</applyBadCrystalMap>
             <nsa>100</nsa>
             <nsb>20</nsb>
+            
+        </driver>   
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
             <use2014Gain>false</use2014Gain> 
-        </driver>   
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClustererGTP" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName>
             <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>            

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PrescaledTriggers.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PrescaledTriggers.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PrescaledTriggers.lcsim	Fri Oct 21 11:49:08 2016
@@ -9,6 +9,8 @@
         <driver name="EventMarkerDriver"/>          
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClustererGTP"/>
         <driver name="EcalClusterer"/>
         <driver name="PairTrigger1"/>
@@ -49,12 +51,20 @@
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
             <!--rawCollectionName>EcalCalHits</rawCollectionName-->
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <applyBadCrystalMap>false</applyBadCrystalMap>
             <nsa>100</nsa>
             <nsb>20</nsb>
-            <use2014Gain>false</use2014Gain> 
         </driver>   
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClustererGTP" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName>
             <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>            

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigPairs1.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigPairs1.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigPairs1.lcsim	Fri Oct 21 11:49:08 2016
@@ -10,6 +10,8 @@
 <!--  Readout Simulation -->
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClustererGTP"/>
         <driver name="PairTrigger1"/>
         <driver name="SimpleSVTReadout" />
@@ -44,12 +46,20 @@
         </driver>
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <applyBadCrystalMap>false</applyBadCrystalMap>
             <nsa>100</nsa>
             <nsb>20</nsb>
+        </driver>   
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
             <use2014Gain>false</use2014Gain> 
-        </driver>   
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClustererGTP" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <!--
             Hit Time Coincidence:         +/-16 ns

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigPairs1_Pass2.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigPairs1_Pass2.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigPairs1_Pass2.lcsim	Fri Oct 21 11:49:08 2016
@@ -11,6 +11,8 @@
         <!--  Readout Simulation -->
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClustererGTP"/>
         <driver name="PairTrigger1"/>
         <driver name="SimpleSVTReadout" />
@@ -41,8 +43,16 @@
         </driver>
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
         </driver>   
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClustererGTP" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <!--
             Hit Time Coincidence:         +/-16 ns

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigSingles1.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigSingles1.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigSingles1.lcsim	Fri Oct 21 11:49:08 2016
@@ -10,6 +10,8 @@
         <!--  Readout Simulation -->
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClustererGTP"/>
         <driver name="SinglesTrigger1"/>
         <driver name="SimpleSVTReadout" />
@@ -44,12 +46,20 @@
         </driver>
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <applyBadCrystalMap>false</applyBadCrystalMap>
             <nsa>100</nsa>
             <nsb>20</nsb>
-            <use2014Gain>false</use2014Gain> 
         </driver>   
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClustererGTP" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <!--
             Hit Time Coincidence:         +/-16 ns

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigSingles1_Pass2.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigSingles1_Pass2.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigSingles1_Pass2.lcsim	Fri Oct 21 11:49:08 2016
@@ -11,6 +11,8 @@
         <!--  Readout Simulation -->
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClustererGTP"/>
         <driver name="SinglesTrigger1"/>
         <driver name="SimpleSVTReadout" />
@@ -41,8 +43,17 @@
         </driver>
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
         </driver>   
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain> 
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClustererGTP" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <!--
             Hit Time Coincidence:         +/-16 ns

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutNoPileup.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutNoPileup.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutNoPileup.lcsim	Fri Oct 21 11:49:08 2016
@@ -32,11 +32,11 @@
             <constantGain>0.15</constantGain>
         </driver>
         <driver name="EcalReadoutConverterDriver" type="org.hps.recon.ecal.EcalRawConverterDriver">                              
-            <use2014Gain>false</use2014Gain> 
-            <runBackwards>true</runBackwards>
+           <runBackwards>true</runBackwards>
             <rawCollectionName>EcalReadoutHits</rawCollectionName>           
             <ecalCollectionName>EcalReadoutAnalogHits</ecalCollectionName>
         </driver>
+         
         <driver name="EcalTriggerClusterer" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <clusterWindow>0</clusterWindow>            
             <inputHitCollectionName>EcalReadoutAnalogHits</inputHitCollectionName>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutToEvio.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutToEvio.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutToEvio.lcsim	Fri Oct 21 11:49:08 2016
@@ -9,6 +9,8 @@
         <driver name="ConditionsDriver"/> 
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClusterer"/>
         <driver name="EcalTrigger"/>
         <driver name="SimpleSVTReadout"/>
@@ -39,12 +41,21 @@
         </driver>
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <!--<gain>0.15</gain>-->
             <applyBadCrystalMap>false</applyBadCrystalMap>
             <use2014Gain>true</use2014Gain>
             <!--            <debug>true</debug>-->
         </driver>   
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName>
             <clusterWindow>1</clusterWindow>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutToLcio.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutToLcio.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutToLcio.lcsim	Fri Oct 21 11:49:08 2016
@@ -8,6 +8,8 @@
         <driver name="ConditionsDriver"/>
         <driver name="EcalReadout" />
         <driver name="EcalConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClusterer" />
         <driver name="EcalTrigger" />
         <driver name="SimpleSVTReadout" />
@@ -39,12 +41,20 @@
         </driver>
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <!--  <gain>0.15</gain> -->
             <applyBadCrystalMap>false</applyBadCrystalMap>
-            <use2014Gain>true</use2014Gain>
             <!--  <debug>true</debug> -->
         </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>true</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <clusterWindow>1</clusterWindow>
             <inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014TruthReadoutToLcio.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014TruthReadoutToLcio.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/HPS2014TruthReadoutToLcio.lcsim	Fri Oct 21 11:49:08 2016
@@ -10,6 +10,8 @@
         <driver name="ConditionsDriver"/>
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClusterer"/>
         <driver name="EcalTrigger"/>
         <driver name="SimpleSVTReadout"/>
@@ -42,12 +44,20 @@
         </driver>
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <!--            <gain>0.15</gain>-->
             <applyBadCrystalMap>false</applyBadCrystalMap>
-            <use2014Gain>true</use2014Gain>
             <!--            <debug>true</debug>-->
         </driver>   
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName>
             <clusterWindow>1</clusterWindow>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/MockPulserTrigger.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/MockPulserTrigger.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/MockPulserTrigger.lcsim	Fri Oct 21 11:49:08 2016
@@ -11,6 +11,8 @@
         <!--  Readout Simulation -->
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClustererGTP"/>
         <driver name="SinglesTrigger1"/>
         <driver name="SimpleSVTReadout" />
@@ -41,8 +43,16 @@
         </driver>
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
         </driver>   
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClustererGTP" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <!--
             Hit Time Coincidence:         +/-16 ns

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPair0.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPair0.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPair0.lcsim	Fri Oct 21 11:49:08 2016
@@ -11,6 +11,8 @@
         <!--  Readout Simulation -->
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClustererGTP"/>
         <driver name="PairTrigger1"/>
         <driver name="SimpleSVTReadout" />
@@ -41,8 +43,16 @@
         </driver>
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
-        </driver>   
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
+        </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClustererGTP" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <!--
             Hit Time Coincidence:         +/-16 ns

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPairs1.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPairs1.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPairs1.lcsim	Fri Oct 21 11:49:08 2016
@@ -11,6 +11,8 @@
         <!--  Readout Simulation -->
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClustererGTP"/>
         <driver name="PairTrigger1"/>
         <driver name="SimpleSVTReadout" />
@@ -41,8 +43,16 @@
         </driver>
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
-        </driver>   
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
+        </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>  
         <driver name="EcalClustererGTP" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <!--
             Hit Time Coincidence:         +/-16 ns

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigSingles1.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigSingles1.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigSingles1.lcsim	Fri Oct 21 11:49:08 2016
@@ -11,6 +11,8 @@
         <!--  Readout Simulation -->
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClustererGTP"/>
         <driver name="SinglesTrigger1"/>
         <driver name="SimpleSVTReadout" />
@@ -41,8 +43,16 @@
         </driver>
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
+        </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
         </driver>   
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver> 
         <driver name="EcalClustererGTP" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
             <!--
             Hit Time Coincidence:         +/-16 ns

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToEvio.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToEvio.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToEvio.lcsim	Fri Oct 21 11:49:08 2016
@@ -8,6 +8,8 @@
         <driver name="BadChannelFilter" />
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalTriggerFilter"/>
         <driver name="EcalClusterer"/>
         <driver name="EcalTrigger"/>
@@ -37,13 +39,22 @@
         </driver>
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <scale>1</scale>
-        </driver>   
+        </driver> 
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName> 
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>    
         <driver name="EcalTriggerFilter" type="org.hps.recon.ecal.EcalTriggerFilterDriver">
             <inputCollection>EcalCorrectedHits</inputCollection>
             <outputCollection>EcalFilteredHits</outputCollection>
         </driver>
+        
         <driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.ClusterDriver">
             <clustererName>CTPClusterer</clustererName>
             <!-- addEMin clusterWindow -->

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToLcio.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToLcio.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToLcio.lcsim	Fri Oct 21 11:49:08 2016
@@ -7,6 +7,8 @@
         <driver name="BadChannelFilter" />
         <driver name="EcalReadout" />
         <driver name="EcalConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalTriggerFilter" />
         <driver name="EcalClusterer" />
         <driver name="EcalTrigger" />
@@ -36,9 +38,17 @@
         </driver>
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <scale>1</scale>
         </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName> 
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>   
         <driver name="EcalTriggerFilter" type="org.hps.recon.ecal.EcalTriggerFilterDriver">
             <inputCollection>EcalCorrectedHits</inputCollection>
             <outputCollection>EcalFilteredHits</outputCollection>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToLcio2014.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToLcio2014.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToLcio2014.lcsim	Fri Oct 21 11:49:08 2016
@@ -10,6 +10,8 @@
         <driver name="BadChannelFilter" />
         <driver name="EcalReadout" />
         <driver name="EcalConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalTriggerFilter" />
         <driver name="EcalClusterer" />
         <driver name="EcalTrigger" />
@@ -46,9 +48,17 @@
         </driver>
         <driver name="EcalConverter" type="org.hps.recon.ecal.EcalConverterDriver">
             <rawCollectionName>EcalRawHits</rawCollectionName>
-            <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <scale>1</scale>
         </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName> 
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver>   
         <driver name="EcalTriggerFilter" type="org.hps.recon.ecal.EcalTriggerFilterDriver">
             <inputCollection>EcalCorrectedHits</inputCollection>
             <outputCollection>EcalFilteredHits</outputCollection>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014EcalRecon.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014EcalRecon.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014EcalRecon.lcsim	Fri Oct 21 11:49:08 2016
@@ -8,6 +8,8 @@
         <!--<driver name="EventMarkerDriver" />-->
         <driver name="EcalRunningPedestal"/>
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="ReconClusterer" />
         <driver name="GTPOnlineClusterer" />
         <driver name="LCIOWriter" />
@@ -22,12 +24,21 @@
             <maxLookbackEvents>50</maxLookbackEvents>
         </driver>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
-            <use2014Gain>false</use2014Gain>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <useTimestamps>false</useTimestamps>
             <useTruthTime>false</useTruthTime>
             <useRunningPedestal>false</useRunningPedestal>
         </driver>       
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName> 
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <useTimeWalkCorrection>true</useTimeWalkCorrection>
+            <outputHitsCollectionName>EcalCorrectedHits</outputHitsCollectionName>
+        </driver> 
         <driver name="ReconClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
             <logLevel>WARNING</logLevel>
             <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014EcalReconMC.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014EcalReconMC.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014EcalReconMC.lcsim	Fri Oct 21 11:49:08 2016
@@ -20,6 +20,8 @@
         <driver name="EcalRunningPedestal"/>
         <driver name="RfFitter"/>
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="ReconClusterer" />
         <driver name="GTPOnlineClusterer" />
         <driver name="LCIOWriter" />
@@ -41,11 +43,21 @@
             <maxLookbackEvents>50</maxLookbackEvents>
         </driver>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <use2014Gain>false</use2014Gain>
             <useTimestamps>false</useTimestamps>
             <useTruthTime>false</useTruthTime>
             <useRunningPedestal>false</useRunningPedestal>
+        </driver>       
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName> 
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <useTimeWalkCorrection>true</useTimeWalkCorrection>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
         </driver>       
         <driver name="ReconClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
             <logLevel>WARNING</logLevel>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014EcalRecon_Pass1.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014EcalRecon_Pass1.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014EcalRecon_Pass1.lcsim	Fri Oct 21 11:49:08 2016
@@ -19,6 +19,8 @@
         <!--<driver name="EventMarkerDriver" />-->
         <driver name="EcalRunningPedestal"/>
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="ReconClusterer" />
         <driver name="GTPOnlineClusterer" />
         <driver name="LCIOWriter" />
@@ -33,12 +35,20 @@
             <maxLookbackEvents>50</maxLookbackEvents>
         </driver>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
-            <use2014Gain>false</use2014Gain>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <useTimestamps>false</useTimestamps>
             <useTruthTime>false</useTruthTime>
             <useRunningPedestal>true</useRunningPedestal>
+        </driver>   
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName> 
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
             <useTimeWalkCorrection>true</useTimeWalkCorrection>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
         </driver>       
         <driver name="ReconClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
             <logLevel>WARNING</logLevel>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015EcalRecon.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015EcalRecon.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015EcalRecon.lcsim	Fri Oct 21 11:49:08 2016
@@ -19,6 +19,8 @@
         <!--<driver name="EventMarkerDriver" />-->
         <driver name="EcalRunningPedestal"/>
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="ReconClusterer" />
         <driver name="GTPOnlineClusterer" />
         <driver name="LCIOWriter" />
@@ -35,11 +37,10 @@
         </driver>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <ecalCollectionName>EcalCalHits</ecalCollectionName>
-            <use2014Gain>false</use2014Gain>
+            
             <useTimestamps>false</useTimestamps>
             <useTruthTime>false</useTruthTime>
             <useRunningPedestal>true</useRunningPedestal>
-            <useTimeWalkCorrection>true</useTimeWalkCorrection>
             <emulateFirmware>true</emulateFirmware>
             <emulateMode7>false</emulateMode7>
             <leadingEdgeThreshold>12</leadingEdgeThreshold>
@@ -47,7 +48,17 @@
             <nsb>20</nsb>
             <windowSamples>50</windowSamples>
             <nPeak>3</nPeak>
-        </driver>       
+        </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <useTimeWalkCorrection>true</useTimeWalkCorrection>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver>         
         <driver name="ReconClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
             <logLevel>WARNING</logLevel>
             <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim	Fri Oct 21 11:49:08 2016
@@ -13,6 +13,8 @@
         <!-- Ecal reconstruction drivers -->        
         <driver name="EcalRunningPedestal"/>
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="ReconClusterer" />
         <driver name="CopyCluster" />
         <driver name="EventMarkerDriver"/>
@@ -71,8 +73,16 @@
             <logLevel>CONFIG</logLevel>
         </driver>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
-        </driver>             
+        	<ecalCollectionName>EcalUncalHits</ecalCollectionName>
+        </driver>  
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver>          
         <driver name="ReconClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
             <logLevel>WARNING</logLevel>
             <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim	Fri Oct 21 11:49:08 2016
@@ -12,8 +12,11 @@
         <driver name="ConditionsDriver"/>
         <driver name="EventMarkerDriver"/>
         <driver name="RfFitter"/>
-        <!-- Ecal reconstruction drivers -->        
+        <!-- Ecal reconstruction drivers -->    
+        
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="ReconClusterer" />
         <driver name="GTPOnlineClusterer" />
         <driver name="CopyCluster" />
@@ -122,10 +125,20 @@
         </driver>       
         <driver name="MergeTrackCollections" type="org.hps.recon.tracking.MergeTrackCollections" />
         <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.GBLRefitterDriver"/>
+        
+        
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
+        	<ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <fixShapeParameter>true</fixShapeParameter>
             <globalFixedPulseWidth>2.4</globalFixedPulseWidth>
+        </driver>  
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
         </driver>       
         <driver name="ReconClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
             <logLevel>WARNING</logLevel>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015HitRecon.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015HitRecon.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015HitRecon.lcsim	Fri Oct 21 11:49:08 2016
@@ -12,7 +12,10 @@
         <driver name="HelicalTrackHitDriver"/>
         <!--<driver name="TrackerReconDriver"/>-->
         <driver name="EcalRunningPedestal"/>
+        
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="ReconClusterer" />
         <driver name="GTPOnlineClusterer" />
         <!--<driver name="ReconParticle" />-->  
@@ -66,7 +69,7 @@
             <minLookbackEvents>10</minLookbackEvents>
             <maxLookbackEvents>50</maxLookbackEvents>
         </driver>
-        <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
+        <!-- <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <ecalCollectionName>EcalCalHits</ecalCollectionName>
             <use2014Gain>false</use2014Gain>
             <useTimestamps>false</useTimestamps>
@@ -80,7 +83,35 @@
             <nsb>20</nsb>
             <windowSamples>50</windowSamples>
             <nPeak>3</nPeak>
-        </driver>       
+        </driver>-->
+        
+        <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
+        	<ecalCollectionName>EcalUncalHits</ecalCollectionName>
+            <!-- <fixShapeParameter>true</fixShapeParameter>
+            <globalFixedPulseWidth>2.4</globalFixedPulseWidth> -->
+            
+            <useTimestamps>false</useTimestamps>
+            <useTruthTime>false</useTruthTime>
+            <useRunningPedestal>true</useRunningPedestal>
+            
+            <emulateFirmware>true</emulateFirmware>
+            <emulateMode7>true</emulateMode7>
+            <leadingEdgeThreshold>12</leadingEdgeThreshold>
+            <nsa>100</nsa>
+            <nsb>20</nsb>
+            <windowSamples>50</windowSamples>
+            <nPeak>3</nPeak>
+        </driver>  
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <use2014Gain>false</use2014Gain>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver>  
+               
         <driver name="ReconClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
             <logLevel>WARNING</logLevel>
             <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineTruthRecon.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineTruthRecon.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineTruthRecon.lcsim	Fri Oct 21 11:49:08 2016
@@ -14,6 +14,8 @@
         <driver name="HelicalTrackHitDriver"/>
         <driver name="TrackerReconDriver"/>
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
+        <driver name="EcalTimeCorrection"/>
         <driver name="EcalClusterer" />
         <driver name="ReconParticle" />
         <driver name="TrackDataDriver" />        
@@ -61,11 +63,19 @@
         </driver>
 
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
-            <ecalCollectionName>EcalCalHits</ecalCollectionName>
+            <ecalCollectionName>EcalUncalHits</ecalCollectionName>
             <use2014Gain>true</use2014Gain>
             <useTimestamps>false</useTimestamps>
             <useTruthTime>true</useTruthTime>
         </driver>
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName> 
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver>   
         <driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
             <useTimeCut>true</useTimeCut>
         </driver>

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2016FullRecon.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2016FullRecon.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2016FullRecon.lcsim	Fri Oct 21 11:49:08 2016
@@ -13,6 +13,7 @@
         <!-- Ecal reconstruction drivers -->        
         <driver name="EcalRunningPedestal"/>
         <driver name="EcalRawConverter" />
+        <driver name="EcalGains"/>
         <driver name="EcalTimeCorrection"/>
         <driver name="ReconClusterer" />
         <driver name="CopyCluster" />
@@ -71,11 +72,20 @@
         <driver name="EcalRunningPedestal" type="org.hps.recon.ecal.EcalRunningPedestalDriver">
             <logLevel>CONFIG</logLevel>
         </driver>
-        <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverter2Driver">
-        </driver> 
-        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver"/> 
+        <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
+        	<ecalCollectionName>EcalUncalHits</ecalCollectionName>
+        </driver>  
+        <driver name="EcalGains" type="org.hps.recon.ecal.EcalGainDriver">
+       		<inputHitsCollectionName>EcalUncalHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalGainHits</outputHitsCollectionName>
+        </driver>
+        <driver name="EcalTimeCorrection" type="org.hps.recon.ecal.EcalTimeCorrectionDriver">
+       		<inputHitsCollectionName>EcalGainHits</inputHitsCollectionName>
+            <outputHitsCollectionName>EcalCalHits</outputHitsCollectionName>
+        </driver>
         <driver name="ReconClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
             <logLevel>WARNING</logLevel>
+            <inputHitCollectionName>EcalCalHits</inputHitCollectionName>
             <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>
         </driver> 
         <driver name="CopyCluster" type="org.hps.recon.ecal.cluster.CopyClusterCollectionDriver">

Copied: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/users/spaul/FeeHistograms2015.lcsim (from r4518, java/trunk/steering-files/src/main/resources/org/hps/steering/users/spaul/FeeHistogramsNoSeedCut.lcsim)
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/spaul/FeeHistogramsNoSeedCut.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/users/spaul/FeeHistograms2015.lcsim	Fri Oct 21 11:49:08 2016
@@ -52,7 +52,10 @@
 
         <minClustTime>40</minClustTime>
         <maxClustTime>50</maxClustTime>
+        <sspClusterTime>48</sspClusterTime>
+        <useSSPcut>false</useSSPcut>
         <seedEnergyCutFrac>0</seedEnergyCutFrac>
+        
         </driver>
          <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
             <outputFileName>${outputFile}</outputFileName>    

Copied: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/users/spaul/FeeHistograms2016.lcsim (from r4518, java/trunk/steering-files/src/main/resources/org/hps/steering/users/spaul/FeeHistogramsNoSeedCutNoFlagFilter.lcsim)
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/spaul/FeeHistogramsNoSeedCutNoFlagFilter.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/users/spaul/FeeHistograms2016.lcsim	Fri Oct 21 11:49:08 2016
@@ -49,8 +49,13 @@
 1 0.1500 0.1550 0.1600 0.3400 
 1 0.1550 0.1600 0.1600 0.3300 </binning>
 
-        <minClustTime>50</minClustTime>
-        <maxClustTime>70</maxClustTime>
+        <minClustTime>52</minClustTime>
+        <maxClustTime>62</maxClustTime>
+        <sspClusterTime>60</sspClusterTime>
+        <sspMinEnergy>1.3</sspMinEnergy>
+        <sspMaxEnergy>2.6</sspMaxEnergy>
+        <sspNmin>3</sspNmin>
+        <useSSPcut>true</useSSPcut>
         <seedEnergyCutFrac>0</seedEnergyCutFrac>
         </driver>
          <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">

Modified: java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/users/spaul/MuonMonitoring.lcsim
 =============================================================================
--- java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/users/spaul/MuonMonitoring.lcsim	(original)
+++ java/branches/EcalRawConverter split/steering-files/src/main/resources/org/hps/steering/users/spaul/MuonMonitoring.lcsim	Fri Oct 21 11:49:08 2016
@@ -24,9 +24,9 @@
             <outputFileName>${outputFile}</outputFileName>
         </driver>
 
-        <driver name="MuonCandidateMonitoringGBL" type="org.hps.analysis.dataquality.MuonCandidateMonitoring">
-            <triggerType>all</triggerType>
-            <isGBL>true</isGBL>
+        <driver name="MuonCandidateMonitoringGBL" type="org.hps.users.spaul.dimuon.DimuonGraphsDriver">
+            <!-- <triggerType>all</triggerType>
+            <isGBL>true</isGBL> -->
         </driver>
 
         <driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver"/>

Modified: java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/gcharles/FADCSignalAnalysis.java
 =============================================================================
--- java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/gcharles/FADCSignalAnalysis.java	(original)
+++ java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/gcharles/FADCSignalAnalysis.java	Fri Oct 21 11:49:08 2016
@@ -66,8 +66,8 @@
         add(converterDriver);
         converterDriver.setRawCollectionName("EcalRawHits");
         converterDriver.setEcalCollectionName("EcalCorrectedHits");
-        converterDriver.setGain(1.0);
-        converterDriver.setUse2014Gain(true);
+        //converterDriver.setGain(1.0);
+        //converterDriver.setUse2014Gain(true);
 
         super.startOfData();
     }

Modified: java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/jeremym/TestRunReconDriver.java
 =============================================================================
--- java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/jeremym/TestRunReconDriver.java	(original)
+++ java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/jeremym/TestRunReconDriver.java	Fri Oct 21 11:49:08 2016
@@ -32,7 +32,7 @@
 
         EcalRawConverterDriver ecalRawConverter = new EcalRawConverterDriver();
         ecalRawConverter.setEcalCollectionName("EcalCalHits");
-        ecalRawConverter.setUse2014Gain(false);
+        //ecalRawConverter.setUse2014Gain(false);
         this.add(ecalRawConverter);
                 
         ClusterDriver clusterer = new ClusterDriver();

Modified: java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/spaul/fee/Cleanup.java
 =============================================================================
--- java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/spaul/fee/Cleanup.java	(original)
+++ java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/spaul/fee/Cleanup.java	Fri Oct 21 11:49:08 2016
@@ -46,7 +46,6 @@
 	}
 	
 	static ReconstructedParticle getWorseParticle(ReconstructedParticle p1, ReconstructedParticle p2){
-		//first check if the tracks come from the target:
 		
 		if(p1.getTracks().size() == 0)
 			return p1;

Modified: java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/spaul/fee/FeeHistogramDriver.java
 =============================================================================
--- java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/spaul/fee/FeeHistogramDriver.java	(original)
+++ java/branches/EcalRawConverter split/users/src/main/java/org/hps/users/spaul/fee/FeeHistogramDriver.java	Fri Oct 21 11:49:08 2016
@@ -1,5 +1,6 @@
 package org.hps.users.spaul.fee;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import hep.aida.IHistogram1D;
@@ -10,12 +11,15 @@
 import org.hps.recon.tracking.TrackType;
 import org.hps.recon.tracking.TrackUtils;
 import org.hps.record.triggerbank.AbstractIntData;
+import org.hps.record.triggerbank.SSPCluster;
+import org.hps.record.triggerbank.SSPData;
 import org.hps.record.triggerbank.TIData;
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.GenericObject;
 import org.lcsim.event.ReconstructedParticle;
+import org.lcsim.event.Track;
 import org.lcsim.geometry.Detector;
 import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
@@ -25,11 +29,44 @@
 
 public class FeeHistogramDriver extends Driver{
 
+    boolean fidEcal(Cluster c){
+        return c.getPosition()[0] > -262.74 && c.getPosition()[0] < 347.7 && Math.abs(c.getPosition()[1])>33.54 
+                && Math.abs(c.getPosition()[1])<75.18 
+                && !(c.getPosition()[0]>-106.66 && c.getPosition()[0] < 42.17 && Math.abs(c.getPosition()[1])<47.17);
+    }
+    
 	double d0cut = 1;
 	double z0cut = .5;
-
+	
+	//ssp cuts
+	double _sspTriggerTime = 60;
+	double _sspNmin = 3;
+	double _sspMinEnergy = 1.3;
+	double _sspMaxEnergy = 2.6;
+	
 	//determined by beam energy
 	double eMin, eMax, beamEnergy, seedEnergyCut;
+	
+	boolean _useSSPcut = false;
+	public void setUseSSPcut(boolean val){
+	    this._useSSPcut = val;
+	}
+	public void setSspClusterTime(double val){
+	    this._sspTriggerTime = val;
+	}
+	public void setSspNmin(int val){
+	    this._sspNmin = val;
+	}
+	public void setSspMinEnergy(double val){
+	    this._sspMinEnergy = val;
+	}
+	public void setSspMaxEnergy(double val){
+	    this._sspMaxEnergy = val;
+	}
+	
+	
+	
+	
 	public double getSeedEnergyCutFrac() {
 		return seedEnergyCutFrac;
 	}
@@ -44,11 +81,14 @@
 	double beamTiltX = .0295;
 	double beamTiltY = -.0008;
 
-	double maxChi2 = 50;
+	double maxChi2 = 20;
 	//maximum difference between the reconstructed energy and momentum
 	//double maxdE = .5;
 	int nMin = 3;
 
+	IHistogram2D ixiySSPseed;
+	IHistogram2D ixiySSPall;
+	IHistogram1D nSSP;
 	IHistogram1D theta;
 	IHistogram1D thetaInRange;
 	IHistogram2D[] thetaVsPhi;
@@ -57,6 +97,9 @@
 	IHistogram2D d0VsZ0, d0VsZ0_top, d0VsZ0_bottom;
 	IHistogram1D d0;
 	IHistogram1D z0;
+	IHistogram2D chi2_vs_theta;
+	IHistogram2D nFidTopVsBot;
+    IHistogram2D nClustTopVsBot;
 	IHistogram1D timeHist;
 	IHistogram1D chi2Hist;
 	private double seedEnergyCutFrac = .38;
@@ -67,7 +110,7 @@
 		BeamEnergyCollection beamEnergyCollection = 
 			this.getConditionsManager().getCachedConditions(BeamEnergyCollection.class, "beam_energies").getCachedData();        
 		beamEnergy = beamEnergyCollection.get(0).getBeamEnergy();
-		eMin = .75*beamEnergy;
+		eMin = .85*beamEnergy;
 		eMax = 1.15*beamEnergy;
 
 		pMin = .75*beamEnergy;
@@ -97,15 +140,28 @@
 
 	private IHistogram1D charge;
 	private IHistogram1D clustSizeGTP;
+    private IHistogram2D thetaVsEnergy;
+    private IHistogram2D thetaVsEnergyFid;
+    //private IHistogram1D clusterEnergyFidEcal;
 
 
 	void setupHistograms(){
 
-
+	    this.nSSP =  aida.histogram1D("ssp clusters count", 10, 0, 10);
+        this.nSSPpass =  aida.histogram1D("ssp clusters count pass", 10, 0, 10);
+	    this.ixiySSPseed = aida.histogram2D("ssp clusters seed", 50, -25, 25, 11, -5, 6);
+        this.ixiySSPall = aida.histogram2D("ssp clusters all", 50, -25, 25, 11, -5, 6);
+	    this.sspEnergy = aida.histogram1D("ssp clusters energy", 100, 0, 1.5*beamEnergy);
+	    this.sspTime = aida.histogram1D("ssp clusters time", 200, 0, 200);
+	    
 		energy = aida.histogram1D("cluster energy", 100, 0, 1.5*beamEnergy);
 		energyTop = aida.histogram1D("cluster energy top", 100, 0, 1.5*beamEnergy);
 		energyBottom = aida.histogram1D("cluster energy bottom", 100, 0, 1.5*beamEnergy);
-
+		
+		//clusterEnergyFidEcal = aida.histogram1D("cluster energy fid ecal", 100, 0, 1.5*beamEnergy);
+        
+		clusterEnergyFidTrack = aida.histogram1D("cluster energy fid track", 100, 0, 1.5*beamEnergy);
+		
 		seedEnergy = aida.histogram1D("seed energy", 100, 0, beamEnergy);
 		seedEnergyTop = aida.histogram1D("seed energy top", 100, 0, beamEnergy);
 		seedEnergyBottom = aida.histogram1D("seed energy bottom", 100, 0, beamEnergy);
@@ -114,6 +170,7 @@
 		clusterVsSeedEnergyTop = aida.histogram2D("cluster vs seed energy top", 100, 0, 1.5*beamEnergy, 100, 0, beamEnergy);
 		clusterVsSeedEnergyBottom = aida.histogram2D("cluster vs seed energy bottom", 100, 0, 1.5*beamEnergy, 100, 0, beamEnergy);
 
+		this.nSigma = aida.histogram1D("nSigma", 100, -10, 10);
 
 		int nBinsPhi = 400;
 		
@@ -124,7 +181,8 @@
 		thetaVsPhiNoTrackQualityCuts = new IHistogram2D[regionNames.length];
 		thetaVsPhiChi2Cut= new IHistogram2D[regionNames.length];
 		thetaVsPhiTrackExtrapCut = new IHistogram2D[regionNames.length];
-		thetaVsPhiMomentumCut = new IHistogram2D[regionNames.length];		
+		thetaVsPhiMomentumCut = new IHistogram2D[regionNames.length];	
+		thetaVsPhi6 = new IHistogram2D[regionNames.length];
 		for(int i = 0; i< regionNames.length; i++){
 			thetaVsPhi[i] = aida.histogram2D("theta vs phi" + regionNames[i], nBinsPhi, 0, .2, 628, -3.14, 3.14);
 			thetaVsPhiInRange[i] = aida.histogram2D("theta vs phi in range" + regionNames[i], nBinsPhi, 0, .2, 628, -3.14, 3.14);
@@ -132,6 +190,8 @@
 			thetaVsPhiChi2Cut[i] = aida.histogram2D("theta vs phi chi2 cut" + regionNames[i], nBinsPhi, 0, .2, 628, -3.14, 3.14);
 			thetaVsPhiTrackExtrapCut[i] = aida.histogram2D("theta vs phi track extrap cut" + regionNames[i], nBinsPhi, 0, .2, 628, -3.14, 3.14);
 			thetaVsPhiMomentumCut[i] = aida.histogram2D("theta vs phi chi2 momentum cut" + regionNames[i], nBinsPhi, 0, .2, 628, -3.14, 3.14);
+			thetaVsPhi6[i] = aida.histogram2D("theta vs phi 6 hits" + regionNames[i], nBinsPhi, 0, .2, 628, -3.14, 3.14);
+            
 		}
 		theta = aida.histogram1D("theta", nBinsPhi, 0, .2);
 		thetaInRange = aida.histogram1D("theta in range", nBinsPhi, 0, .2);
@@ -157,8 +217,8 @@
 
 
 		timeHist = aida.histogram1D("cluster time", 400, 0, 400);
-		chi2Hist = aida.histogram1D("chi2", 200, 0, 200);
-		chi2RedHist = aida.histogram1D("chi2 red", 200, 0, 40);
+		chi2Hist = aida.histogram1D("chi2", 200, 0, 50);
+		chi2RedHist = aida.histogram1D("chi2 red", 200, 0, 15);
 		clustSize = aida.histogram1D("cluster size", 20, 0, 20);
 		clustSizeGTP = aida.histogram1D("cluster size gtp (>55% beam energy)", 20, 0, 20);
 
@@ -166,8 +226,22 @@
 		z0VsChi2 = aida.histogram2D("z0 vs chi2", 100, -5, 5, 100, 0, 100);
 		nPassCutsPerEvent = aida.histogram1D("n pass cuts", 10, 0, 10);
 		nPassCutsPerEventFiducial = aida.histogram1D("n pass cuts fiducial", 10, 0, 10);
-		thetaVsMomentum = aida.histogram2D("theta vs energy", 100, 0, .2, 100, 0, 1.2*beamEnergy);
-		thetaVsMomentumFid = aida.histogram2D("theta vs energy fiducial", 100, 0, .2, 100, 0, 1.2*beamEnergy);
+		thetaVsMomentum = aida.histogram2D("theta vs momentum", 100, 0, .2, 100, 0, 1.2*beamEnergy);
+		thetaVsMomentumFid = aida.histogram2D("theta vs momentum fiducial", 100, 0, .2, 100, 0, 1.2*beamEnergy);
+		thetaVsEnergy = aida.histogram2D("theta vs energy", 100, 0, .2, 100, 0, 1.2*beamEnergy);
+        thetaVsEnergyFid = aida.histogram2D("theta vs energy fiducial", 100, 0, .2, 100, 0, 1.2*beamEnergy);
+        
+		
+		dxdyAtEcal = aida.histogram2D("dxdy at ecal", 200, -20, 20, 200, -20, 20);
+
+        dxAtEcal = aida.histogram1D("dx at ecal", 200, -20, 20);
+        dyAtEcal = aida.histogram1D("dy at ecal", 200, -20, 20);
+        
+        dxVsNcols = aida.histogram2D("dx at ecal vs ncols", 200,-20, 20, 5, 0,5);
+        dyVsNrows = aida.histogram2D("dy at ecal vs nrows", 200,-20, 20, 5, 0,5);
+        chi2_vs_theta = aida.histogram2D("chi2 vs theta", 100, 0,  50, 100, 0, .2);
+        nFidTopVsBot = aida.histogram2D("n fid top vs bottom", 10, 0, 10, 10, 0, 10);
+        nClustTopVsBot = aida.histogram2D("n fee clust top vs bottom", 10, 0, 10, 10, 0, 10);
 	}
 
 
@@ -182,9 +256,50 @@
 	private IHistogram2D thetaVsPhiChi2Cut[];
 	private IHistogram2D thetaVsPhiMomentumCut[];
 	private IHistogram2D thetaVsPhiTrackExtrapCut[];
+    private IHistogram1D sspTime;
+    private IHistogram1D sspEnergy;
+    private IHistogram1D nSSPpass;
+    private IHistogram1D dxAtEcal;
+    private IHistogram1D dyAtEcal;
+    private IHistogram2D dxdyAtEcal;
+    private IHistogram1D clusterEnergyFidTrack;
+    private IHistogram2D dxVsNcols;
+    private IHistogram2D dyVsNrows;
+    private IHistogram1D nSigma;
+    private IHistogram2D[] thetaVsPhi6;
+    
 	@Override
 	public void process(EventHeader event){
 		
+	    //find the ssp cluster with the most energy, and its center column
+
+        //int col = -999;
+        //int row = -999;
+	    int nfidTop = 0, nfidBot = 0;
+        int nfeeClustTop = 0, nfeeClustBot = 0;
+        List<SSPCluster> goodSSPclusters = new ArrayList();
+	    for (GenericObject gob : event.get(GenericObject.class,"TriggerBank"))
+	    {
+	      if (!(AbstractIntData.getTag(gob) == SSPData.BANK_TAG)) continue;
+	      SSPData sspd = new SSPData(gob);
+	      //SSPCluster max = null;
+	      
+	      
+	      for (SSPCluster  c: sspd.getClusters()){
+	          sspEnergy.fill(c.getEnergy());
+              sspTime.fill(c.getTime());
+              ixiySSPall.fill(c.getXIndex(), c.getYIndex());
+	          if(c.getEnergy() > _sspMinEnergy && c.getEnergy() < _sspMaxEnergy && c.getHitCount() >= _sspNmin && c.getTime() == _sspTriggerTime){
+	              goodSSPclusters.add(c);
+	              ixiySSPseed.fill(c.getXIndex(), c.getYIndex());
+	              nSSPpass.fill(sspd.getClusters().size());
+	          }
+	      }
+	        nSSP.fill(sspd.getClusters().size());
+	    }
+	    
+	    
+	    
 		fillHistogramsGTP(event);
 		
 		//int col = getColumn(event);
@@ -212,15 +327,44 @@
 				continue;
 
 
-			//find seed hit energy
+			//find seed hit energy and column number
 			double seedEnergy = 0;
-			int col = 0;
+			int seedcol = 0;
+			int seedrow = 0;
+			CalorimeterHit seedHit = null;
 			for(CalorimeterHit hit : c.getCalorimeterHits()){
 				if(hit.getCorrectedEnergy() > seedEnergy){
+				    seedHit = hit;
 					seedEnergy = hit.getCorrectedEnergy();
-					col = hit.getIdentifierFieldValue("ix");
+					seedcol = hit.getIdentifierFieldValue("ix");
+					seedrow = hit.getIdentifierFieldValue("iy");
 				}
 			}
+			//make sure this is the hit that caused the trigger
+			int col = -999;
+			int row = -999;
+			if(_useSSPcut){
+			    boolean found = false;
+			    for(SSPCluster sspc : goodSSPclusters){
+			       col = sspc.getXIndex();
+			       row = sspc.getYIndex();
+			       int dx = seedcol - col;
+			       int dy = seedrow - row;
+			       if(Math.hypot(dx, dy) <= 1.5){
+			           found = true;
+			           break;
+			       }
+			    }
+			    if(!found)
+			        continue;
+			}
+			    
+			//first check if the cluster is in the fiducial part of the Ecal:
+			if(!fidEcal(c))
+			    continue;
+			
+			
+			
 			double energy = c.getEnergy();
 
 
@@ -234,10 +378,12 @@
 				this.seedEnergyTop.fill(seedEnergy);
 				this.energyTop.fill(energy);
 				this.clusterVsSeedEnergyTop.fill(energy, seedEnergy);
+				nfeeClustTop++;
 			} else {
 				this.seedEnergyBottom.fill(seedEnergy);
 				this.energyBottom.fill(energy);
 				this.clusterVsSeedEnergyBottom.fill(energy, seedEnergy);
+				nfeeClustBot++;
 			}
 
 
@@ -280,16 +426,32 @@
 			double phi =atan2(pytilt, pxtilt);
 			fill(thetaVsPhiNoTrackQualityCuts,theta, phi, col);
 
-			if(abs(getDx(part))>trackExtrapCut || abs(getDy(part))> trackExtrapCut)
+			double dx = getDx(part);
+			double dy = getDy(part);
+			dxAtEcal.fill(dx);
+			dyAtEcal.fill(dy);
+			dxdyAtEcal.fill(dx, dy);
+			
+			dxVsNcols.fill(dx, getNcols(c));
+            dyVsNrows.fill(dy, getNrows(c));
+			
+            nSigma.fill(part.getGoodnessOfPID());
+			//if(abs(dx)>trackExtrapCutX || abs(dy)> trackExtrapCutY)
+            if(part.getGoodnessOfPID() > 3)
 				continue;
 			fill(thetaVsPhiTrackExtrapCut, theta, phi, col);
 			
-			chi2Hist.fill(part.getTracks().get(0).getChi2());
-			chi2RedHist.fill(part.getTracks().get(0).getChi2()/(2*part.getTracks().get(0).getTrackerHits().size()-5));
-
-			if(part.getTracks().get(0).getChi2()>maxChi2)
+			Track track = part.getTracks().get(0);
+			
+			chi2_vs_theta.fill(track.getChi2(), theta);
+			chi2Hist.fill(track.getChi2());
+			chi2RedHist.fill(track.getChi2()/(2*track.getTrackerHits().size()-5));
+
+			if(track.getChi2()>maxChi2)
 				continue;
 			fill(thetaVsPhiChi2Cut, theta, phi, col);
+			
+			
 			
 			double pmag = part.getMomentum().magnitude();
 			pHist.fill(pmag);
@@ -297,9 +459,9 @@
 				continue;
 			fill(thetaVsPhiMomentumCut, theta, phi, col);
 
-			double d = TrackUtils.getDoca(part.getTracks().get(0));
+			double d = TrackUtils.getDoca(track);
 			d0.fill(d);
-			double z = TrackUtils.getZ0(part.getTracks().get(0));
+			double z = TrackUtils.getZ0(track);
 			z0.fill(z);
 			d0VsZ0.fill(d, z);
 
@@ -308,12 +470,16 @@
 			else
 				d0VsZ0_bottom.fill(d,z);
 
-			z0VsTanLambda.fill(z, TrackUtils.getTanLambda(part.getTracks().get(0)));
-			z0VsChi2.fill(z, part.getTracks().get(0).getChi2());
-
-			if(abs(TrackUtils.getDoca(part.getTracks().get(0)))> d0cut)
-				continue;
-			if(abs(TrackUtils.getZ0(part.getTracks().get(0)))> z0cut)
+			z0VsTanLambda.fill(z, TrackUtils.getTanLambda(track));
+			z0VsChi2.fill(z, track.getChi2());
+
+			
+			
+			if(abs(d)> d0cut)
+				continue;
+			
+			
+			if(abs(z)> z0cut)
 				continue;
 
 
@@ -335,6 +501,11 @@
 
 			uxVsUy.fill(pxtilt/pztilt, pytilt/pztilt);
 			fill(thetaVsPhi, theta, phi, col);
+			
+			if(track.getTrackerHits().size() == 6){
+			    fill(thetaVsPhi6, theta, phi, col);
+			}
+			
 			this.theta.fill(theta);
 			if(phi > 0)
 				thetaTopOnly.fill(theta);
@@ -342,20 +513,30 @@
 				thetaBottomOnly.fill(theta);
 			nPassCuts++;
 			thetaVsMomentum.fill(theta, pz);
+            thetaVsEnergy.fill(theta, part.getEnergy());
 			if(cb.inRange(theta, phi)){
 				fill(thetaVsPhiInRange, theta, phi, col);
 				thetaInRange.fill(theta);
 				if(phi > 0)
+				{
+				    nfidTop++;
 					thetaTopOnlyInRange.fill(theta);
-				else
+				}
+				else{
+				    nfidBot++;
 					thetaBottomOnlyInRange.fill(theta);
+				}
 				uxVsUyInRange.fill(pxtilt/pztilt, pytilt/pztilt);
 				nPassFidCuts++;
 				thetaVsMomentumFid.fill(theta, pz);
+                thetaVsEnergyFid.fill(theta, part.getEnergy());
+				clusterEnergyFidTrack.fill(part.getEnergy());
 			}
 		}
 		nPassCutsPerEvent.fill(nPassCuts);
 		nPassCutsPerEventFiducial.fill(nPassFidCuts);
+		nFidTopVsBot.fill(nfidTop, nfidBot);
+		nClustTopVsBot.fill(nfeeClustTop, nfeeClustBot);
 	}
 	//returns the column of the seed hit of the trigger cluster in the GTP
 	/*private int getColumn(EventHeader event) {
@@ -386,17 +567,51 @@
 		return col;
 	}*/
 
+	int getNcols(Cluster c){
+	    long a = 0;
+	    for(CalorimeterHit hit : c.getCalorimeterHits()){
+            a|= (1 <<(hit.getIdentifierFieldValue("ix") + 23));
+        }
+        int tot = 0;
+        for(int i = 0; i<47; i++){
+            tot += a & 1;
+            a >>=1;
+        }
+        return tot;
+	}
+	
+	int getNrows(Cluster c){
+	    int a = 0;
+	    for(CalorimeterHit hit : c.getCalorimeterHits()){
+	        a|= (1 <<(hit.getIdentifierFieldValue("iy") + 5));
+	    }
+	    int tot = 0;
+	    for(int i = 0; i<11; i++){
+	        tot += a & 1;
+	        a >>=1;
+	    }
+	    return tot;
+	}
+	
 	private void fill(IHistogram2D[] thetaVsPhiHist, double theta,
 			double phi, int col) {
 		thetaVsPhiHist[0].fill(theta, phi);
-		if(col <= -13 || col>=6)
+		/*if(col <= -13 || col>=6)
 			thetaVsPhiHist[1].fill(theta, phi);
 		else if (col <= -9 || col >= 2)
 			thetaVsPhiHist[2].fill(theta, phi);
 		else if (col <= -7 || col >= -2)
 			thetaVsPhiHist[3].fill(theta, phi);
 		else 
-			thetaVsPhiHist[4].fill(theta, phi);
+			thetaVsPhiHist[4].fill(theta, phi);*/
+		if(col <= -14 || col>=6)
+            thetaVsPhiHist[1].fill(theta, phi);
+        else if (col <= -10 || col >= 2)
+            thetaVsPhiHist[2].fill(theta, phi);
+        else if (col <= -8 || col >= -3)
+            thetaVsPhiHist[3].fill(theta, phi);
+        else 
+            thetaVsPhiHist[4].fill(theta, phi);
 		
 	}
 
@@ -446,7 +661,6 @@
 	IHistogram2D thetaVsMomentumFid;
 	IHistogram2D thetaVsMomentum;
 	
-	public double trackExtrapCut = 10;
 	public static double getDx(ReconstructedParticle p){
 		double xc = p.getClusters().get(0).getPosition()[0];
 		double xt = TrackUtils.getTrackPositionAtEcal(p.getTracks().get(0)).x();