LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  October 2016

HPS-SVN October 2016

Subject:

r4519 - in /java/branches/EcalRawConverter split: ./ ecal-recon/src/main/java/org/hps/recon/ecal/ recon/src/main/java/org/hps/recon/filtering/ recon/src/main/java/org/hps/recon/particle/ recon/src/main/java/org/hps/recon/utils/ steering-files/src/main/resources/org/hps/steering/analysis/ steering-files/src/main/resources/org/hps/steering/monitoring/ steering-files/src/main/resources/org/hps/steering/production/ steering-files/src/main/resources/org/hps/steering/readout/ steering-files/src/main/resources/org/hps/steering/recon/ steering-files/src/main/resources/org/hps/steering/users/spaul/ users/src/main/java/org/hps/users/gcharles/ users/src/main/java/org/hps/users/jeremym/ users/src/main/java/org/hps/users/spaul/fee/

From:

[log in to unmask]

Reply-To:

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

Date:

Fri, 21 Oct 2016 18:49:20 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (3530 lines)

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();

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use