Print

Print


Author: [log in to unmask]
Date: Tue Jan  6 12:54:22 2015
New Revision: 1886

Log:
Remove usage of HPSEcalCluster and HPSEcalClusterIC where possible.

Modified:
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java
    java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalEventMonitor.java
    java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalMonitoringPlots.java
    java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalFADCPlotsDriver.java
    java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalPlotsDriver.java
    java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalTriggerPlotsDriver.java
    java/trunk/analysis/src/main/java/org/hps/analysis/ecal/TestRunRateAnalysis.java
    java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/exec/EventDisplayDriver.java
    java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/io/LCIOManager.java
    java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/EventDisplayOutputDriver.java
    java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/LCIOBridgeDriver.java
    java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PEventViewer.java
    java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/POccupancyViewer.java
    java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PassiveViewer.java
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCPrimaryTriggerDriver.java
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCTriggerDriver.java
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCTriggerVariableDriver.java
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/MollerTriggerDriver.java
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/NeutralPionTriggerDriver.java
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/OccupancyAnalysisDriver.java
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/SSPTriggerLogic.java
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/SinglesTriggerDriver.java
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TestRunTriggerDriver.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/ECalUtils.java
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTEventDisplay.java
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/TrackingReconstructionPlots.java
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalClusterPlots.java
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplay.java
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringPlots.java
    java/trunk/users/src/main/java/org/hps/users/holly/EcalClustererCosmics.java
    java/trunk/users/src/main/java/org/hps/users/kmccarty/ClusterAnalysisDriver.java
    java/trunk/users/src/main/java/org/hps/users/luca/CalibClusterAnalizer.java
    java/trunk/users/src/main/java/org/hps/users/luca/CalibTest.java
    java/trunk/users/src/main/java/org/hps/users/luca/CalibTest2.java
    java/trunk/users/src/main/java/org/hps/users/luca/ClusterSorterReconData.java
    java/trunk/users/src/main/java/org/hps/users/luca/FADCVariableTriggerFEEDriver.java
    java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger.java
    java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger2.java
    java/trunk/users/src/main/java/org/hps/users/luca/FeeTriggerAna.java
    java/trunk/users/src/main/java/org/hps/users/luca/HitSeedHitConf.java
    java/trunk/users/src/main/java/org/hps/users/luca/PositronAna.java
    java/trunk/users/src/main/java/org/hps/users/luca/RawDataReader.java
    java/trunk/users/src/main/java/org/hps/users/luca/ReconData.java
    java/trunk/users/src/main/java/org/hps/users/luca/ReconDataPos.java
    java/trunk/users/src/main/java/org/hps/users/luca/TriggerAna.java
    java/trunk/users/src/main/java/org/hps/users/luca/TriggerAnaFEE.java
    java/trunk/users/src/main/java/org/hps/users/luca/TriggerTest.java
    java/trunk/users/src/main/java/org/hps/users/luca/TruthReader.java
    java/trunk/users/src/main/java/org/hps/users/luca/myTriggerDriver.java
    java/trunk/users/src/main/java/org/hps/users/luca/mycluster.java
    java/trunk/users/src/main/java/org/hps/users/luca/mycluster2.java
    java/trunk/users/src/main/java/org/hps/users/luca/mycluster3.java
    java/trunk/users/src/main/java/org/hps/users/mgraham/TrackExtrapolationAnalysis.java
    java/trunk/users/src/main/java/org/hps/users/omoreno/SvtHitEfficiency.java
    java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackAnalysis.java
    java/trunk/users/src/main/java/org/hps/users/omoreno/TestRunTrackReconEfficiency.java
    java/trunk/users/src/main/java/org/hps/users/phansson/FastTrackResidualDriver.java
    java/trunk/users/src/main/java/org/hps/users/phansson/ROOTFlatTupleDriver.java
    java/trunk/users/src/main/java/org/hps/users/phansson/SimpleResiduals.java
    java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java
    java/trunk/users/src/main/java/org/hps/users/phansson/TrigRateDriver.java
    java/trunk/users/src/main/java/org/hps/users/phansson/TriggerTurnOnAnalysis.java

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java	Tue Jan  6 12:54:22 2015
@@ -145,9 +145,9 @@
         }
 
         List<Cluster> clusters;
-        if (event.hasCollection(HPSEcalCluster.class, clusterCollectionName))
+        if (event.hasCollection(Cluster.class, clusterCollectionName))
             clusters = event.get(Cluster.class, clusterCollectionName);
-        else if (event.hasCollection(HPSEcalClusterIC.class, clusterCollectionName))
+        else if (event.hasCollection(Cluster.class, clusterCollectionName))
             clusters = event.get(Cluster.class, clusterCollectionName);
         else if (event.hasCollection(Cluster.class, clusterCollectionName))
             clusters = event.get(Cluster.class, clusterCollectionName);

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalEventMonitor.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalEventMonitor.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalEventMonitor.java	Tue Jan  6 12:54:22 2015
@@ -13,6 +13,7 @@
 
 import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.geometry.Detector;
 import org.lcsim.util.Driver;
@@ -96,10 +97,10 @@
                 hitPlot.fill(hit.getIdentifierFieldValue("ix"), hit.getIdentifierFieldValue("iy"), hit.getRawEnergy());
             }
         }
-        if (event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
-            List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, clusterCollectionName);
-            for (HPSEcalCluster cluster : clusters) {
-                CalorimeterHit seedHit = cluster.getSeedHit();
+        if (event.hasCollection(Cluster.class, clusterCollectionName)) {
+            List<Cluster> clusters = event.get(Cluster.class, clusterCollectionName);
+            for (Cluster cluster : clusters) {
+                CalorimeterHit seedHit = cluster.getCalorimeterHits().get(0);
                 clusterPlot.fill(seedHit.getIdentifierFieldValue("ix"), seedHit.getIdentifierFieldValue("iy"), cluster.getEnergy());
             }
         }

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalMonitoringPlots.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalMonitoringPlots.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalMonitoringPlots.java	Tue Jan  6 12:54:22 2015
@@ -6,8 +6,8 @@
 
 import java.util.List;
 
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.RawTrackerHit;
 import org.lcsim.event.base.BaseRawCalorimeterHit;
@@ -89,11 +89,11 @@
                 hitCountFillPlot.fill(hit.getIdentifierFieldValue("ix"), hit.getIdentifierFieldValue("iy"));
             }
         }
-        if (event.hasCollection(HPSEcalCluster.class, clusterCollection)) {
-            List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, clusterCollection);
+        if (event.hasCollection(Cluster.class, clusterCollection)) {
+            List<Cluster> clusters = event.get(Cluster.class, clusterCollection);
 //if (clusters.size()>1)            
-            for (HPSEcalCluster cluster : clusters) {
-                clusterCountFillPlot.fill(cluster.getSeedHit().getIdentifierFieldValue("ix"), cluster.getSeedHit().getIdentifierFieldValue("iy"));
+            for (Cluster cluster : clusters) {
+                clusterCountFillPlot.fill(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"), cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
             }
         }
         if (eventRefreshRate > 0 && ++eventn % eventRefreshRate == 0) {

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalFADCPlotsDriver.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalFADCPlotsDriver.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalFADCPlotsDriver.java	Tue Jan  6 12:54:22 2015
@@ -5,7 +5,6 @@
 
 import java.util.List;
 
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.hps.recon.ecal.HPSRawCalorimeterHit;
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Cluster;
@@ -70,7 +69,7 @@
 	}
 
 	public void process(EventHeader event) {
-		List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, clusterCollectionName);
+		List<Cluster> clusters = event.get(Cluster.class, clusterCollectionName);
 		if (clusters == null)
 			throw new RuntimeException("Missing cluster collection!");
 

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalPlotsDriver.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalPlotsDriver.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalPlotsDriver.java	Tue Jan  6 12:54:22 2015
@@ -17,7 +17,6 @@
 
 import org.hps.readout.ecal.ClockSingleton;
 import org.hps.readout.ecal.TriggerDriver;
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.detector.identifier.IIdentifier;
 import org.lcsim.detector.identifier.IIdentifierHelper;
 import org.lcsim.event.CalorimeterHit;
@@ -199,7 +198,7 @@
         MCParticle primary = getPrimary(mcparticles);
         double primaryE = primary.getEnergy();
 
-        List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalClusterCollectionName);
+        List<Cluster> clusters = event.get(Cluster.class, ecalClusterCollectionName);
         if (clusters == null)
             throw new RuntimeException("Missing cluster collection!");
 
@@ -230,14 +229,14 @@
         IIdentifierHelper helper =
                 event.getMetaData(hits).getIDDecoder().getSubdetector().getDetectorElement().getIdentifierHelper();
 
-        for (HPSEcalCluster clus : clusters) {
+        for (Cluster clus : clusters) {
 
             clusNHits.fill(clus.getCalorimeterHits().size());
 
             double e = clus.getEnergy();
             clusEPlot.fill(e);
             clusE += e;
-            CalorimeterHit seedHit = (CalorimeterHit) clus.getSeedHit();
+            CalorimeterHit seedHit = (CalorimeterHit) clus.getCalorimeterHits().get(0);
             //double maxe = 0;
             for (CalorimeterHit hit : clus.getCalorimeterHits()) {
                 if (hitClusMap.containsKey(hit)) {

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalTriggerPlotsDriver.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalTriggerPlotsDriver.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalTriggerPlotsDriver.java	Tue Jan  6 12:54:22 2015
@@ -1,5 +1,7 @@
 package org.hps.analysis.ecal;
 
+import static org.hps.recon.ecal.ECalUtils.maxVolt;
+import static org.hps.recon.ecal.ECalUtils.nBit;
 import hep.aida.IHistogram2D;
 
 import java.util.ArrayList;
@@ -7,10 +9,9 @@
 
 import org.hps.readout.ecal.TriggerDriver;
 import org.hps.recon.ecal.ECalUtils;
-import static org.hps.recon.ecal.ECalUtils.maxVolt;
-import static org.hps.recon.ecal.ECalUtils.nBit;
 import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
@@ -85,12 +86,12 @@
     	
     	// If the current event has the indicated cluster collection,
     	// use it as the cluster list.
-    	List<HPSEcalCluster> clusters;
-    	if(event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
-    		clusters = event.get(HPSEcalCluster.class, clusterCollectionName);
+    	List<Cluster> clusters;
+    	if(event.hasCollection(Cluster.class, clusterCollectionName)) {
+    		clusters = event.get(Cluster.class, clusterCollectionName);
     	}
     	// If it does not, then use an empty list to avoid crashing.
-    	else { clusters = new ArrayList<HPSEcalCluster>(0); }
+    	else { clusters = new ArrayList<Cluster>(0); }
         
         // Populate hit plots.
         for (CalorimeterHit hit : hits) {
@@ -120,9 +121,9 @@
         boolean trigger = TriggerDriver.triggerBit();
         
         // Populate cluster based plots.
-        for (HPSEcalCluster cluster : clusters) {
+        for (Cluster cluster : clusters) {
         	// Get the cluster's seed hit position.
-        	CalorimeterHit seed = cluster.getSeedHit();
+        	CalorimeterHit seed = cluster.getCalorimeterHits().get(0);
             int ix = seed.getIdentifierFieldValue("ix");
             int iy = seed.getIdentifierFieldValue("iy");
             

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/ecal/TestRunRateAnalysis.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/ecal/TestRunRateAnalysis.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/ecal/TestRunRateAnalysis.java	Tue Jan  6 12:54:22 2015
@@ -5,8 +5,8 @@
 
 import java.util.List;
 
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.MCParticle;
 import org.lcsim.event.base.ParticleTypeClassifier;
@@ -86,22 +86,23 @@
 //        MCParticle particle = mcparticles.get(0);
 
         // Get the list of raw ECal hits.
-        List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, clusterCollectionName);
+        List<Cluster> clusters = event.get(Cluster.class, clusterCollectionName);
         if (clusters == null) {
             throw new RuntimeException("Event is missing ECal clusters collection!");
         }
 
         boolean trigger = false;
 
-        for (HPSEcalCluster cluster : clusters) {
-            if (cluster.getEnergy() > clusterEnergyLow && cluster.getSeedHit().getIdentifierFieldValue("ix") < 0) {
+        for (Cluster cluster : clusters) {
+            CalorimeterHit seedHit = cluster.getCalorimeterHits().get(0);
+            if (cluster.getEnergy() > clusterEnergyLow && seedHit.getIdentifierFieldValue("ix") < 0) {
 //            if (cluster.getEnergy() > clusterEnergyLow && cluster.getSeedHit().getIdentifierFieldValue("iy")>0 && cluster.getSeedHit().getIdentifierFieldValue("ix")<0) {
-                triggersY[Math.abs(cluster.getSeedHit().getIdentifierFieldValue("iy")) - 1]++;
-                if (Math.abs(cluster.getSeedHit().getIdentifierFieldValue("iy")) > 1) {
+                triggersY[Math.abs(seedHit.getIdentifierFieldValue("iy")) - 1]++;
+                if (Math.abs(seedHit.getIdentifierFieldValue("iy")) > 1) {
                     trigger = true;
                 }
             }
-            if (cluster.getSeedHit().getIdentifierFieldValue("ix") < 0 && Math.abs(cluster.getSeedHit().getIdentifierFieldValue("iy")) > 1) {
+            if (seedHit.getIdentifierFieldValue("ix") < 0 && Math.abs(seedHit.getIdentifierFieldValue("iy")) > 1) {
                 for (MCParticle particle : mcparticles) {
                     if (ParticleTypeClassifier.isElectron(particle.getPDGID())) {
                         electronEClusterVsP.fill(1000.0 * particle.getPZ(), 1000.0 * cluster.getEnergy());

Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/exec/EventDisplayDriver.java
 =============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/exec/EventDisplayDriver.java	(original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/exec/EventDisplayDriver.java	Tue Jan  6 12:54:22 2015
@@ -2,11 +2,10 @@
 
 import java.util.List;
 
-import org.hps.monitoring.ecal.eventdisplay.event.Cluster;
 import org.hps.monitoring.ecal.eventdisplay.event.EcalHit;
 import org.hps.monitoring.ecal.eventdisplay.ui.PEventViewer;
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.geometry.Detector;
 import org.lcsim.util.Driver;
@@ -55,7 +54,7 @@
         viewer.resetDisplay();
         viewer.updateDisplay();
 
-        Cluster eventDisplayCluster;
+        org.hps.monitoring.ecal.eventdisplay.event.Cluster eventDisplayCluster;
 
         if (event.hasCollection(CalorimeterHit.class, inputCollection)) {
             List<CalorimeterHit> hits = event.get(CalorimeterHit.class, inputCollection);
@@ -63,11 +62,11 @@
                 viewer.addHit(new EcalHit(hit.getIdentifierFieldValue("ix"), hit.getIdentifierFieldValue("iy"), hit.getRawEnergy()));
             }
         }
-        if (event.hasCollection(HPSEcalCluster.class, clusterCollection)) {
-            List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, clusterCollection);
-            for (HPSEcalCluster cluster : clusters) {
-                CalorimeterHit seedHit = cluster.getSeedHit();
-                eventDisplayCluster = new Cluster(seedHit.getIdentifierFieldValue("ix"), seedHit.getIdentifierFieldValue("iy"), cluster.getEnergy());
+        if (event.hasCollection(Cluster.class, clusterCollection)) {
+            List<Cluster> clusters = event.get(Cluster.class, clusterCollection);
+            for (Cluster cluster : clusters) {
+                CalorimeterHit seedHit = cluster.getCalorimeterHits().get(0);
+                eventDisplayCluster = new org.hps.monitoring.ecal.eventdisplay.event.Cluster(seedHit.getIdentifierFieldValue("ix"), seedHit.getIdentifierFieldValue("iy"), cluster.getEnergy());
                 for (CalorimeterHit hit : cluster.getCalorimeterHits()) {
                     if (hit.getRawEnergy() != 0)
                         eventDisplayCluster.addComponentHit(hit.getIdentifierFieldValue("ix"), hit.getIdentifierFieldValue("iy"));

Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/io/LCIOManager.java
 =============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/io/LCIOManager.java	(original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/io/LCIOManager.java	Tue Jan  6 12:54:22 2015
@@ -7,7 +7,7 @@
 
 import org.hps.monitoring.ecal.eventdisplay.event.Cluster;
 import org.hps.monitoring.ecal.eventdisplay.event.EcalHit;
-import org.hps.recon.ecal.HPSEcalCluster;
+//import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.EventHeader;
 import org.lcsim.lcio.LCIOReader;
@@ -88,15 +88,15 @@
         // from the LCIO event.
         else {
             // Check to see if the event has a cluster collection.
-            if(current.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+            if(current.hasCollection(org.lcsim.event.Cluster.class, clusterCollectionName)) {
                 // Get the list of LCIO clusters.
-                List<HPSEcalCluster> lcioList = current.get(HPSEcalCluster.class, clusterCollectionName);
+                List<org.lcsim.event.Cluster> lcioList = current.get(org.lcsim.event.Cluster.class, clusterCollectionName);
                 
                 // Create a list to store event display clusters.
                 List<Cluster> displayList = new ArrayList<Cluster>(lcioList.size());
                 
                 // Convert the LCIO clusters to display clusters.
-                for(HPSEcalCluster lcioCluster : lcioList) {
+                for(org.lcsim.event.Cluster lcioCluster : lcioList) {
                     displayList.add(toPanelCluster(lcioCluster));
                 }
                 
@@ -193,13 +193,13 @@
     
     // TODO: LCIO files can't actually store an HPSEcalCluster; this
     // needs to be converted to use regular LCIO clusters instead.
-    public static final Cluster toPanelCluster(HPSEcalCluster lcioCluster) {
+    public static final Cluster toPanelCluster(org.lcsim.event.Cluster lcioCluster) {
         // If the argument is null, return null.
         if(lcioCluster == null) { return null; }
         
         // Otherwise, get the cluster x/y indices and energy.
-        int ix = lcioCluster.getSeedHit().getIdentifierFieldValue("ix");
-        int iy = lcioCluster.getSeedHit().getIdentifierFieldValue("iy");
+        int ix = lcioCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+        int iy = lcioCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
         double energy = lcioCluster.getEnergy();
         
         // Create and return a panel cluster from the above values.

Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/EventDisplayOutputDriver.java
 =============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/EventDisplayOutputDriver.java	(original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/EventDisplayOutputDriver.java	Tue Jan  6 12:54:22 2015
@@ -7,7 +7,7 @@
 
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.EventHeader;
-import org.hps.recon.ecal.HPSEcalCluster;
+//import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.util.Driver;
 
 /**
@@ -50,15 +50,15 @@
      */
     public void process(EventHeader event) {
         // Get the list of clusters.
-        List<HPSEcalCluster> clusters;
+        List<org.lcsim.event.Cluster> clusters;
 
         // If no cluster collection is present, then make an
         // empty list instead to avoid crashes.
         try {
-            clusters = event.get(HPSEcalCluster.class, clusterCollectionName);
+            clusters = event.get(org.lcsim.event.Cluster.class, clusterCollectionName);
             if (clusters == null) { throw new RuntimeException("Missing cluster collection!"); }
         }
-        catch(IllegalArgumentException e) { clusters = new ArrayList<HPSEcalCluster>(0); }
+        catch(IllegalArgumentException e) { clusters = new ArrayList<org.lcsim.event.Cluster>(0); }
         
         // Get the list of calorimeter hits.
         List<CalorimeterHit> hits;
@@ -103,9 +103,9 @@
                 // Only write clusters if the option is selected.
                 if(outputClusters) {
 	                // Process the clusters.
-	                for (HPSEcalCluster cluster : clusters) {
+	                for (org.lcsim.event.Cluster cluster : clusters) {
 	                    // Get the seed hit for the cluster.
-	                    CalorimeterHit seedHit = (CalorimeterHit)cluster.getSeedHit();
+	                    CalorimeterHit seedHit = (CalorimeterHit)cluster.getCalorimeterHits().get(0);
 	                    int ix = seedHit.getIdentifierFieldValue("ix");
 	                    int iy = seedHit.getIdentifierFieldValue("iy");
 	                    double time = seedHit.getTime();

Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/LCIOBridgeDriver.java
 =============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/LCIOBridgeDriver.java	(original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/LCIOBridgeDriver.java	Tue Jan  6 12:54:22 2015
@@ -5,7 +5,6 @@
 import org.hps.monitoring.ecal.eventdisplay.event.Cluster;
 import org.hps.monitoring.ecal.eventdisplay.event.EcalHit;
 import org.hps.monitoring.ecal.eventdisplay.ui.PEventViewer;
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.EventHeader;
 import org.lcsim.util.Driver;
@@ -49,7 +48,7 @@
             List<CalorimeterHit> hits = event.get(CalorimeterHit.class, ecalCollectionName);
             
             // Define a list of clusters from the event.
-            List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, clusterCollectionName);
+            List<org.lcsim.event.Cluster> clusters = event.get(org.lcsim.event.Cluster.class, clusterCollectionName);
             
             // Increment the number of events we have seen.
             eventsProcessed++;
@@ -74,12 +73,12 @@
             	}
             	
             	// Add all the clusters.
-            	for(HPSEcalCluster cluster : clusters) {
+            	for(org.lcsim.event.Cluster cluster : clusters) {
             		// Get the seed hit.
-            		CalorimeterHit seed = cluster.getSeedHit();
+            		CalorimeterHit seed = cluster.getCalorimeterHits().get(0);
             		int ix = seed.getIdentifierFieldValue("ix");
             		int iy = seed.getIdentifierFieldValue("iy");
-            		double energy = seed.getRawEnergy();
+            		double energy = seed.getRawEnergy(); // FIXME: Should this be getCorrectedEnergy() instead? --JM
             		
             		// Add the cluster center to the event display.
             		Cluster cc = new Cluster(ix, iy, energy);

Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PEventViewer.java
 =============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PEventViewer.java	(original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PEventViewer.java	Tue Jan  6 12:54:22 2015
@@ -32,7 +32,7 @@
     public void addCluster(Cluster cluster) { clusterList.add(cluster); }
     
     @Override
-    public void addCluster(HPSEcalCluster lcioCluster) { clusterList.add(toPanelCluster(lcioCluster)); }
+    public void addCluster(org.lcsim.event.Cluster lcioCluster) { clusterList.add(toPanelCluster(lcioCluster)); }
     
     /**
      * Removes all of the hit data from the viewer.

Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/POccupancyViewer.java
 =============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/POccupancyViewer.java	(original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/POccupancyViewer.java	Tue Jan  6 12:54:22 2015
@@ -72,7 +72,7 @@
      * <b>Note:</b> This operation is not supported for occupancies.
      */
     @Override
-    public void addCluster(HPSEcalCluster cluster) { }
+    public void addCluster(org.lcsim.event.Cluster cluster) { }
     
     /**
      * Removes a hit from the display.

Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PassiveViewer.java
 =============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PassiveViewer.java	(original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PassiveViewer.java	Tue Jan  6 12:54:22 2015
@@ -2,8 +2,9 @@
 
 import org.hps.monitoring.ecal.eventdisplay.event.Cluster;
 import org.hps.monitoring.ecal.eventdisplay.event.EcalHit;
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.hps.recon.ecal.HPSEcalClusterIC;
+//import org.hps.recon.ecal.HPSEcalCluster;
+//import org.hps.recon.ecal.HPSEcalClusterIC;
 import org.lcsim.event.CalorimeterHit;
 
 /**
@@ -38,7 +39,7 @@
      * Adds a new cluster to the display.
      * @param cluster - The cluster to be added.
      */
-    public abstract void addCluster(HPSEcalCluster cluster);
+    public abstract void addCluster(org.lcsim.event.Cluster cluster);
     
     /**
      * Clears any hits or clusters that have been added to the viewer.
@@ -79,10 +80,10 @@
      * @return Returns the argument cluster as a <code>Cluster</code>
      * object that can be used with the <code>Viewer</code>.
      */
-    public static final Cluster toPanelCluster(HPSEcalCluster lcioCluster) {
+    public static final Cluster toPanelCluster(org.lcsim.event.Cluster lcioCluster) {
         // Get the cluster data from the LCIO cluster.
-        int ix = lcioCluster.getSeedHit().getIdentifierFieldValue("ix");
-        int iy = lcioCluster.getSeedHit().getIdentifierFieldValue("iy");
+        int ix = lcioCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+        int iy = lcioCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
         double energy = lcioCluster.getEnergy();
         
         // Generate a new cluster.
@@ -90,6 +91,7 @@
         
         // If this is an IC cluster, cast it so that shared hits can
         // be properly displayed.
+        // FIXME: This should be changed to use the standard LCSim Cluster interface.  --JM
         if(lcioCluster instanceof HPSEcalClusterIC) {
         	// Cast the cluster object.
         	HPSEcalClusterIC icCluster = (HPSEcalClusterIC) lcioCluster;

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCPrimaryTriggerDriver.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCPrimaryTriggerDriver.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCPrimaryTriggerDriver.java	Tue Jan  6 12:54:22 2015
@@ -12,7 +12,7 @@
 import java.util.Queue;
 
 import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.util.aida.AIDA;
 
@@ -54,8 +54,8 @@
     // ==================================================================
     // ==== Driver Internal Variables ===================================
     // ==================================================================
-    private Queue<List<HPSEcalCluster>> topClusterQueue = null;    // Store clusters on the top half of the calorimeter.
-    private Queue<List<HPSEcalCluster>> botClusterQueue = null;    // Store clusters on the bottom half of the calorimeter.
+    private Queue<List<Cluster>> topClusterQueue = null;    // Store clusters on the top half of the calorimeter.
+    private Queue<List<Cluster>> botClusterQueue = null;    // Store clusters on the bottom half of the calorimeter.
     private int allClusters = 0;                                   // Track the number of clusters processed.
     private int allPairs = 0;                                      // Track the number of cluster pairs processed.
     private int clusterTotalEnergyCount = 0;                       // Track the clusters which pass the total energy cut.
@@ -160,27 +160,27 @@
     @Override
     public void process(EventHeader event) {
         // Process the list of clusters for the event, if it exists.
-        if (event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+        if (event.hasCollection(Cluster.class, clusterCollectionName)) {
             // Get the collection of clusters.
-            List<HPSEcalCluster> clusterList = event.get(HPSEcalCluster.class, clusterCollectionName);
+            List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
             
             // Create a list to hold clusters which pass the single
             // cluster cuts.
-            List<HPSEcalCluster> goodClusterList = new ArrayList<HPSEcalCluster>(clusterList.size());
+            List<Cluster> goodClusterList = new ArrayList<Cluster>(clusterList.size());
             
             // Sort through the cluster list and add clusters that pass
             // the single cluster cuts to the good list.
             clusterLoop:
-            for(HPSEcalCluster cluster : clusterList) {
+            for(Cluster cluster : clusterList) {
                 // Increment the number of processed clusters.
                 allClusters++;
                 
                 // Get the cluster plot values.
                 int hitCount = cluster.getCalorimeterHits().size();
-                double seedEnergy = cluster.getSeedHit().getCorrectedEnergy();
+                double seedEnergy = cluster.getCalorimeterHits().get(0).getCorrectedEnergy();
                 double clusterEnergy = cluster.getEnergy();
-                int ix = cluster.getSeedHit().getIdentifierFieldValue("ix");
-                int iy = cluster.getSeedHit().getIdentifierFieldValue("iy");
+                int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+                int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
                 channel.x = ix;
                 channel.y = iy;
                 
@@ -424,19 +424,19 @@
         }
         
         // Initialize the top and bottom cluster queues.
-        topClusterQueue = new LinkedList<List<HPSEcalCluster>>();
-        botClusterQueue = new LinkedList<List<HPSEcalCluster>>();
+        topClusterQueue = new LinkedList<List<Cluster>>();
+        botClusterQueue = new LinkedList<List<Cluster>>();
         
         // Populate the top cluster queue. It should be populated with
         // a number of empty lists equal to (2 * pairCoincidence + 1).
         for (int i = 0; i < 2 * pairCoincidence + 1; i++) {
-            topClusterQueue.add(new ArrayList<HPSEcalCluster>());
+            topClusterQueue.add(new ArrayList<Cluster>());
         }
         
         // Populate the bottom cluster queue. It should be populated with
         // a number of empty lists equal to (2 * pairCoincidence + 1).
         for (int i = 0; i < pairCoincidence + 1; i++) {
-            botClusterQueue.add(new ArrayList<HPSEcalCluster>());
+            botClusterQueue.add(new ArrayList<Cluster>());
         }
         
         // If a background level has been set, pick the correct cuts.
@@ -463,31 +463,31 @@
 
     /**
      * Get a list of all unique cluster pairs in the event.
-     * @return A <code>List</code> collection of <code>HPSEcalCLuster
-     * </code> objects containing all cluster pairs.
-     */
-    protected List<HPSEcalCluster[]> getClusterPairsTopBot() {
+     * @return A <code>List</code> collection of <code>Cluster</code> 
+     * objects containing all cluster pairs.
+     */
+    protected List<Cluster[]> getClusterPairsTopBot() {
         // Create a list to store cluster pairs. 
-        List<HPSEcalCluster[]> clusterPairs = new ArrayList<HPSEcalCluster[]>();
+        List<Cluster[]> clusterPairs = new ArrayList<Cluster[]>();
         
         // Loop over all top-bottom pairs of clusters; higher-energy cluster goes first in the pair
         // To apply pair coincidence time, use only bottom clusters from the 
         // readout cycle pairCoincidence readout cycles ago, and top clusters 
         // from all 2*pairCoincidence+1 previous readout cycles
-        for (HPSEcalCluster botCluster : botClusterQueue.element()) {
-            for (List<HPSEcalCluster> topClusters : topClusterQueue) {
-                for (HPSEcalCluster topCluster : topClusters) {
+        for (Cluster botCluster : botClusterQueue.element()) {
+            for (List<Cluster> topClusters : topClusterQueue) {
+                for (Cluster topCluster : topClusters) {
                     // The first cluster in a pair should always be
                     // the higher energy cluster. If the top cluster
                     // is higher energy, it goes first.
                     if (topCluster.getEnergy() > botCluster.getEnergy()) {
-                        HPSEcalCluster[] clusterPair = {topCluster, botCluster};
+                        Cluster[] clusterPair = {topCluster, botCluster};
                         clusterPairs.add(clusterPair);
                     }
                     
                     // Otherwise, the bottom cluster goes first.
                     else {
-                        HPSEcalCluster[] clusterPair = {botCluster, topCluster};
+                        Cluster[] clusterPair = {botCluster, topCluster};
                         clusterPairs.add(clusterPair);
                     }
                 }
@@ -507,7 +507,7 @@
     protected boolean triggerDecision(EventHeader event) {
         // If there is a list of clusters present for this event,
         // check whether it passes the trigger conditions.
-        if (event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+        if (event.hasCollection(Cluster.class, clusterCollectionName)) {
             return testTrigger();
         }
         
@@ -603,13 +603,13 @@
      */
     private boolean testTrigger() {
         // Get the list of cluster pairs.
-        List<HPSEcalCluster[]> clusterPairs = getClusterPairsTopBot();
+        List<Cluster[]> clusterPairs = getClusterPairsTopBot();
         
         // Iterate over the cluster pairs and perform each of the cluster
         // pair cuts on them. A cluster pair that passes all of the
         // cuts registers as a trigger.
         pairLoop:
-        for (HPSEcalCluster[] clusterPair : clusterPairs) {
+        for (Cluster[] clusterPair : clusterPairs) {
             // Increment the number of processed cluster pairs.
             allPairs++;
             
@@ -676,10 +676,10 @@
             int[] iy = new int[2];
             for(int i = 0; i < 2; i++) {
                 hitCount[i] = clusterPair[i].getCalorimeterHits().size();
-                seedEnergy[i] = clusterPair[i].getSeedHit().getCorrectedEnergy();
+                seedEnergy[i] = clusterPair[i].getCalorimeterHits().get(0).getCorrectedEnergy();
                 clusterEnergy[i] = clusterPair[i].getEnergy();
-                ix[i] = clusterPair[i].getSeedHit().getIdentifierFieldValue("ix");
-                iy[i] = clusterPair[i].getSeedHit().getIdentifierFieldValue("iy");
+                ix[i] = clusterPair[i].getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+                iy[i] = clusterPair[i].getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
                 if(ix[i] > 0) { ix[i] = ix[i] - 1; }
             }
             
@@ -711,16 +711,16 @@
      * queues so that they may be formed into pairs.
      * @param clusterList - The clusters to add to the queues.
      */
-    private void updateClusterQueues(List<HPSEcalCluster> clusterList) {
+    private void updateClusterQueues(List<Cluster> clusterList) {
         // Create lists to store the top and bottom clusters.
-        ArrayList<HPSEcalCluster> topClusterList = new ArrayList<HPSEcalCluster>();
-        ArrayList<HPSEcalCluster> botClusterList = new ArrayList<HPSEcalCluster>();
+        ArrayList<Cluster> topClusterList = new ArrayList<Cluster>();
+        ArrayList<Cluster> botClusterList = new ArrayList<Cluster>();
         
         // Loop over the clusters in the cluster list.
-        for (HPSEcalCluster cluster : clusterList) {
+        for (Cluster cluster : clusterList) {
             // If the cluster is on the top of the calorimeter, it
             // goes into the top cluster list.
-            if (cluster.getSeedHit().getIdentifierFieldValue("iy") > 0) {
+            if (cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy") > 0) {
                 topClusterList.add(cluster);
             }
             

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCTriggerDriver.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCTriggerDriver.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCTriggerDriver.java	Tue Jan  6 12:54:22 2015
@@ -2,8 +2,8 @@
 
 import hep.aida.IHistogram1D;
 import hep.aida.IHistogram2D;
+
 import java.io.IOException;
-
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.EnumSet;
@@ -12,7 +12,6 @@
 import java.util.Queue;
 
 import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.geometry.Detector;
@@ -62,8 +61,8 @@
     protected String clusterCollectionName = "EcalClusters";
     // FIFO queues of lists of clusters in each ECal half.
     // Each list corresponds to one readout cycle.
-    private Queue<List<HPSEcalCluster>> topClusterQueue = null;
-    private Queue<List<HPSEcalCluster>> botClusterQueue = null;
+    private Queue<List<Cluster>> topClusterQueue = null;
+    private Queue<List<Cluster>> botClusterQueue = null;
     PrintWriter pairWriter;
 
     private enum Flag {
@@ -276,13 +275,13 @@
     @Override
     public void startOfData() {
         //initialize queues and fill with empty lists
-        topClusterQueue = new LinkedList<List<HPSEcalCluster>>();
-        botClusterQueue = new LinkedList<List<HPSEcalCluster>>();
+        topClusterQueue = new LinkedList<List<Cluster>>();
+        botClusterQueue = new LinkedList<List<Cluster>>();
         for (int i = 0; i < 2 * pairCoincidence + 1; i++) {
-            topClusterQueue.add(new ArrayList<HPSEcalCluster>());
+            topClusterQueue.add(new ArrayList<Cluster>());
         }
         for (int i = 0; i < pairCoincidence + 1; i++) {
-            botClusterQueue.add(new ArrayList<HPSEcalCluster>());
+            botClusterQueue.add(new ArrayList<Cluster>());
         }
         super.startOfData();
         if (clusterCollectionName == null) {
@@ -300,19 +299,19 @@
 
     @Override
     public void process(EventHeader event) {
-        if (event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+        if (event.hasCollection(Cluster.class, clusterCollectionName)) {
             // this needs to run every readout cycle whether or not trigger is live
-            updateClusterQueues(event.get(HPSEcalCluster.class, clusterCollectionName));
+            updateClusterQueues(event.get(Cluster.class, clusterCollectionName));
 
             if (pairWriter != null) {
-                List<HPSEcalCluster[]> clusterPairs = getClusterPairsTopBot();
-                for (HPSEcalCluster[] pair : clusterPairs) {
+                List<Cluster[]> clusterPairs = getClusterPairsTopBot();
+                for (Cluster[] pair : clusterPairs) {
                     pairWriter.format("%d\t", ClockSingleton.getClock());
-                    for (HPSEcalCluster cluster : pair) {
-                        pairWriter.format("%f\t", cluster.getSeedHit().getTime());
-                        pairWriter.format("%f\t", cluster.getSeedHit().getRawEnergy());
-                        pairWriter.format("%d\t", cluster.getSeedHit().getIdentifierFieldValue("ix"));
-                        pairWriter.format("%d\t", cluster.getSeedHit().getIdentifierFieldValue("iy"));
+                    for (Cluster cluster : pair) {
+                        pairWriter.format("%f\t", cluster.getCalorimeterHits().get(0).getTime());
+                        pairWriter.format("%f\t", cluster.getCalorimeterHits().get(0).getRawEnergy());
+                        pairWriter.format("%d\t", cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"));
+                        pairWriter.format("%d\t", cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
                         pairWriter.format("%d\t", cluster.getSize());
                         pairWriter.format("%f\t", cluster.getEnergy());
                         pairWriter.format("%f\t", getClusterAngle(cluster));
@@ -329,7 +328,7 @@
     @Override
     protected boolean triggerDecision(EventHeader event) {
         // Get the list of raw ECal hits.
-        if (event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+        if (event.hasCollection(Cluster.class, clusterCollectionName)) {
             return testTrigger();
         } else {
             return false;
@@ -339,22 +338,22 @@
     public boolean testTrigger() {
         boolean trigger = false;
 
-        List<HPSEcalCluster[]> clusterPairs = getClusterPairsTopBot();
+        List<Cluster[]> clusterPairs = getClusterPairsTopBot();
 
         //--- Apply Trigger Cuts ---//
 
         // Iterate through all cluster pairs present in the event.  If at least
         // one of the cluster pairs satisfies all of the trigger conditions,
         // a trigger signal is sent to all other detectors.
-        for (HPSEcalCluster[] clusterPair : clusterPairs) {
+        for (Cluster[] clusterPair : clusterPairs) {
 
             EnumSet<Flag> bits = EnumSet.noneOf(Flag.class);
 
             if (outputStream != null) {
                 outputStream.printf("Event %d: cluster pair (energy %f in quadrant %d (%s), energy %f in quadrant %d (%s))\n",
                         ClockSingleton.getClock(),
-                        clusterPair[0].getEnergy(), ECalUtils.getQuadrant(clusterPair[0]), clusterPair[0].getSeedHit().getPositionVec().toString(),
-                        clusterPair[1].getEnergy(), ECalUtils.getQuadrant(clusterPair[1]), clusterPair[1].getSeedHit().getPositionVec().toString());
+                        clusterPair[0].getEnergy(), ECalUtils.getQuadrant(clusterPair[0]), clusterPair[0].getCalorimeterHits().get(0).getPositionVec().toString(),
+                        clusterPair[1].getEnergy(), ECalUtils.getQuadrant(clusterPair[1]), clusterPair[1].getCalorimeterHits().get(0).getPositionVec().toString());
             }
 
             allPairs++;
@@ -467,9 +466,9 @@
                 }
                 trigger = true;
 
-                for (HPSEcalCluster cluster : clusterPair) {
-                    int ix = cluster.getSeedHit().getIdentifierFieldValue("ix");
-                    int iy = cluster.getSeedHit().getIdentifierFieldValue("iy");
+                for (Cluster cluster : clusterPair) {
+                    int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+                    int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
                     trigClusterSeeds.fill(ix - 0.5 * Math.signum(ix), iy);
                 }
             }
@@ -508,19 +507,19 @@
         writer.close();
     }
 
-    protected void updateClusterQueues(List<HPSEcalCluster> ecalClusters) {
-        ArrayList<HPSEcalCluster> topClusterList = new ArrayList<HPSEcalCluster>();
-        ArrayList<HPSEcalCluster> botClusterList = new ArrayList<HPSEcalCluster>();
-        for (HPSEcalCluster ecalCluster : ecalClusters) {
-//            System.out.format("add cluster\t%f\t%d\n", ecalCluster.getSeedHit().getTime(), ecalCluster.getSeedHit().getIdentifierFieldValue("iy"));
-            if (ecalCluster.getSeedHit().getIdentifierFieldValue("iy") > 0) {
+    protected void updateClusterQueues(List<Cluster> ecalClusters) {
+        ArrayList<Cluster> topClusterList = new ArrayList<Cluster>();
+        ArrayList<Cluster> botClusterList = new ArrayList<Cluster>();
+        for (Cluster ecalCluster : ecalClusters) {
+//            System.out.format("add cluster\t%f\t%d\n", ecalCluster.getCalorimeterHits().get(0).getTime(), ecalCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
+            if (ecalCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy") > 0) {
                 topClusterList.add(ecalCluster);
             } else {
                 botClusterList.add(ecalCluster);
             }
 
-            int ix = ecalCluster.getSeedHit().getIdentifierFieldValue("ix");
-            int iy = ecalCluster.getSeedHit().getIdentifierFieldValue("iy");
+            int ix = ecalCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+            int iy = ecalCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
             clusterSeeds.fill(ix - 0.5 * Math.signum(ix), iy);
         }
 
@@ -536,23 +535,23 @@
      * @param ecalClusters : List of ECal clusters
      * @return list of cluster pairs
      */
-    protected List<HPSEcalCluster[]> getClusterPairsTopBot() {
+    protected List<Cluster[]> getClusterPairsTopBot() {
         // Make a list of cluster pairs
-        List<HPSEcalCluster[]> clusterPairs = new ArrayList<HPSEcalCluster[]>();
+        List<Cluster[]> clusterPairs = new ArrayList<Cluster[]>();
 
         // Loop over all top-bottom pairs of clusters; higher-energy cluster goes first in the pair
         // To apply pair coincidence time, use only bottom clusters from the 
         // readout cycle pairCoincidence readout cycles ago, and top clusters 
         // from all 2*pairCoincidence+1 previous readout cycles
-        for (HPSEcalCluster botCluster : botClusterQueue.element()) {
-            for (List<HPSEcalCluster> topClusters : topClusterQueue) {
-                for (HPSEcalCluster topCluster : topClusters) {
-//                    System.out.format("%f\t%f\n", topCluster.getSeedHit().getTime(), botCluster.getSeedHit().getTime());
+        for (Cluster botCluster : botClusterQueue.element()) {
+            for (List<Cluster> topClusters : topClusterQueue) {
+                for (Cluster topCluster : topClusters) {
+//                    System.out.format("%f\t%f\n", topCluster.getCalorimeterHits().get(0).getTime(), botCluster.getCalorimeterHits().get(0).getTime());
                     if (topCluster.getEnergy() > botCluster.getEnergy()) {
-                        HPSEcalCluster[] clusterPair = {topCluster, botCluster};
+                        Cluster[] clusterPair = {topCluster, botCluster};
                         clusterPairs.add(clusterPair);
                     } else {
-                        HPSEcalCluster[] clusterPair = {botCluster, topCluster};
+                        Cluster[] clusterPair = {botCluster, topCluster};
                         clusterPairs.add(clusterPair);
                     }
                 }
@@ -568,7 +567,7 @@
      * @param clusterPair : pair of clusters
      * @return true if opposite quadrants, false otherwise
      */
-    protected boolean oppositeQuadrantsCut(HPSEcalCluster[] clusterPair) {
+    protected boolean oppositeQuadrantsCut(Cluster[] clusterPair) {
         int quad1 = ECalUtils.getQuadrant(clusterPair[0]);
         int quad2 = ECalUtils.getQuadrant(clusterPair[1]);
 
@@ -588,7 +587,7 @@
      * @param clusterPair: pair of clusters
      * @return true if pair passes cut, false if fail
      */
-    protected boolean clusterHitCount(HPSEcalCluster[] clusterPair) {
+    protected boolean clusterHitCount(Cluster[] clusterPair) {
         return (clusterPair[0].getCalorimeterHits().size() >= minHitCount
                 && clusterPair[1].getCalorimeterHits().size() >= minHitCount);
     }
@@ -600,7 +599,7 @@
      * @param clusterPair : pair of clusters
      * @return true if a pair is found, false otherwise
      */
-    protected boolean clusterECut(HPSEcalCluster[] clusterPair) {
+    protected boolean clusterECut(Cluster[] clusterPair) {
         return (clusterPair[0].getEnergy() < clusterEnergyHigh
                 && clusterPair[1].getEnergy() < clusterEnergyHigh
                 && clusterPair[0].getEnergy() > clusterEnergyLow
@@ -626,7 +625,7 @@
      * @param clusterPair : pair of clusters
      * @return true if pair is found, false otherwise
      */
-    protected boolean energyDifference(HPSEcalCluster[] clusterPair) {
+    protected boolean energyDifference(Cluster[] clusterPair) {
         double clusterEDifference = clusterPair[0].getEnergy() - clusterPair[1].getEnergy();
 
         return (clusterEDifference < energyDifferenceThreshold);
@@ -639,8 +638,8 @@
      * @param clusterPair : pair of clusters
      * @return true if pair is found, false otherwise
      */
-    protected boolean energyDistanceCut(HPSEcalCluster[] clusterPair) {
-        HPSEcalCluster lowEnergyCluster = clusterPair[1];
+    protected boolean energyDistanceCut(Cluster[] clusterPair) {
+        Cluster lowEnergyCluster = clusterPair[1];
 
         // Calculate its position
         double lowEClusterDistance = getClusterDistance(clusterPair[1]);
@@ -656,23 +655,23 @@
      * @param clusterPair : pair of clusters
      * @return true if pair is found, false otherwise
      */
-    protected boolean coplanarityCut(HPSEcalCluster[] clusterPair) {
+    protected boolean coplanarityCut(Cluster[] clusterPair) {
         return (Math.abs(pairUncoplanarity(clusterPair)) < maxCoplanarityAngle);
     }
 
-    protected double pairUncoplanarity(HPSEcalCluster[] clusterPair) { // Find the angle between clusters in the pair
+    protected double pairUncoplanarity(Cluster[] clusterPair) { // Find the angle between clusters in the pair
         double cluster1Angle = (getClusterAngle(clusterPair[0]) + 180.0) % 180.0;
         double cluster2Angle = (getClusterAngle(clusterPair[1]) + 180.0) % 180.0;
 
         return cluster2Angle - cluster1Angle;
     }
 
-    protected double getClusterAngle(HPSEcalCluster cluster) { //returns angle in range of -180 to 180
-        double position[] = cluster.getSeedHit().getPosition();
+    protected double getClusterAngle(Cluster cluster) { //returns angle in range of -180 to 180
+        double position[] = cluster.getCalorimeterHits().get(0).getPosition();
         return Math.toDegrees(Math.atan2(position[1], position[0] - originX));
     }
 
-    protected double getClusterDistance(HPSEcalCluster cluster) {
-        return Math.hypot(cluster.getSeedHit().getPosition()[0] - originX, cluster.getSeedHit().getPosition()[1]);
+    protected double getClusterDistance(Cluster cluster) {
+        return Math.hypot(cluster.getCalorimeterHits().get(0).getPosition()[0] - originX, cluster.getCalorimeterHits().get(0).getPosition()[1]);
     }
 }

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCTriggerVariableDriver.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCTriggerVariableDriver.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCTriggerVariableDriver.java	Tue Jan  6 12:54:22 2015
@@ -11,7 +11,7 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.hps.recon.ecal.HPSEcalCluster;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.geometry.Detector;
 
@@ -56,40 +56,40 @@
     public void process(EventHeader event) {
     //    super.process(event);
 
-        if (event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+        if (event.hasCollection(Cluster.class, clusterCollectionName)) {
 
 
-            List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, clusterCollectionName);
+            List<Cluster> clusters = event.get(Cluster.class, clusterCollectionName);
 
             //System.out.printf("%d ecal clusters in event\n", clusters.size());
             //System.out.printf("%s: %d clusters\n",this.getClass().getSimpleName(),clusters.size());
-        	//for(HPSEcalCluster cl : clusters) {
+        	//for(Cluster cl : clusters) {
         	//	System.out.printf("%s: cl E %f x %f y %f \n",this.getClass().getSimpleName(),cl.getEnergy(),cl.getPosition()[0],cl.getPosition()[1]);
         	//}
-        	List<HPSEcalCluster> unique_clusters = this.getUniqueClusters(clusters);
+        	List<Cluster> unique_clusters = this.getUniqueClusters(clusters);
         	//System.out.printf("%s: %d unique clusters\n",this.getClass().getSimpleName(),unique_clusters.size());
-        	//for(HPSEcalCluster cl : unique_clusters) {
+        	//for(Cluster cl : unique_clusters) {
         	//	System.out.printf("%s: cl E %f x %f y %f \n",this.getClass().getSimpleName(),cl.getEnergy(),cl.getPosition()[0],cl.getPosition()[1]);
         	//}
 
             updateClusterQueues(unique_clusters);
-            List<HPSEcalCluster[]> clusterPairs = getClusterPairsTopBot();
+            List<Cluster[]> clusterPairs = getClusterPairsTopBot();
             boolean foundClusterPairs = !clusterPairs.isEmpty();
 
             if (foundClusterPairs) {
 
             int ipair = 0;
-            for(HPSEcalCluster[] pair : clusterPairs) {
+            for(Cluster[] pair : clusterPairs) {
             
                 String evString = String.format("%d %f %d ", event.getEventNumber(),this.beamEnergy,ipair);
                 for(int icluster = 0; icluster!=2; icluster++ ) {
                     
-                    HPSEcalCluster cluster = pair[icluster];
+                    Cluster cluster = pair[icluster];
                     
                     //int quad = ECalUtils.getQuadrant(cluster);
                     double E = cluster.getEnergy();
-                    double pos[] = cluster.getSeedHit().getPosition();
-                    //System.out.printf("x %f y %f ix %d iy %d \n", pos[0], pos[1], cluster.getSeedHit().getIdentifierFieldValue("ix"), cluster.getSeedHit().getIdentifierFieldValue("iy"));
+                    double pos[] = cluster.getCalorimeterHits().get(0).getPosition();
+                    //System.out.printf("x %f y %f ix %d iy %d \n", pos[0], pos[1], cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"), cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
                     
                     evString += String.format("%f %f %f ", E, pos[0], pos[1]);
                 }
@@ -121,12 +121,12 @@
 
     
     
-    private List<HPSEcalCluster> getUniqueClusters(List<HPSEcalCluster> clusters) {
-    	List<HPSEcalCluster> unique = new ArrayList<HPSEcalCluster>();
-    	for(HPSEcalCluster loop_cl : clusters) {
-			HPSEcalClusterCmp loop_clCmp = new HPSEcalClusterCmp(loop_cl);
+    private List<Cluster> getUniqueClusters(List<Cluster> clusters) {
+    	List<Cluster> unique = new ArrayList<Cluster>();
+    	for(Cluster loop_cl : clusters) {
+			ClusterCmp loop_clCmp = new ClusterCmp(loop_cl);
     		boolean found = false;
-			for(HPSEcalCluster cl : unique) {
+			for(Cluster cl : unique) {
     			if( loop_clCmp.compareTo(cl) == 0 ) {
     				found = true;
     			}
@@ -139,13 +139,13 @@
     }
 
 
-    private static class HPSEcalClusterCmp implements Comparable<HPSEcalCluster> {
-    	private HPSEcalCluster _cluster;
-		public HPSEcalClusterCmp(HPSEcalCluster cl) {
+    private static class ClusterCmp implements Comparable<Cluster> {
+    	private Cluster _cluster;
+		public ClusterCmp(Cluster cl) {
 			set_cluster(cl);
 		}
 		@Override
-		public int compareTo(HPSEcalCluster cl) {
+		public int compareTo(Cluster cl) {
 				if(cl.getEnergy()==get_cluster().getEnergy() && cl.getPosition()[0]==get_cluster().getPosition()[0] && cl.getPosition()[1]==get_cluster().getPosition()[1] ) {
 					return 0;
 				} else {
@@ -156,10 +156,10 @@
 					}
 				}
 		}
-		public HPSEcalCluster get_cluster() {
+		public Cluster get_cluster() {
 			return _cluster;
 		}
-		public void set_cluster(HPSEcalCluster _cluster) {
+		public void set_cluster(Cluster _cluster) {
 			this._cluster = _cluster;
 		}
     	

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/MollerTriggerDriver.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/MollerTriggerDriver.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/MollerTriggerDriver.java	Tue Jan  6 12:54:22 2015
@@ -8,7 +8,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.hps.recon.ecal.HPSEcalCluster;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.util.aida.AIDA;
 
@@ -117,7 +117,7 @@
         // Check if there is a cluster collection. If not, there is no
         // reason to continue; a trigger can not be produced if there
         // are no clusters.
-        if(!event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+        if(!event.hasCollection(Cluster.class, clusterCollectionName)) {
             // VERBOSE :: Note that no cluster collection exists for
             //            this event.
             if(verbose) { System.out.println("No cluster collection is present for event."); }
@@ -131,7 +131,7 @@
         if(verbose) { System.out.println("Cluster collection is present for event."); }
         
         // Get the cluster list from the event.
-        List<HPSEcalCluster> eventList = event.get(HPSEcalCluster.class, clusterCollectionName);
+        List<Cluster> eventList = event.get(Cluster.class, clusterCollectionName);
         
         // VERBOSE :: Output the number of extant clusters.
         if(verbose) { System.out.printf("%d clusters in event.%n", eventList.size()); }
@@ -139,29 +139,29 @@
         // Add the clusters from the event into the cluster list
         // if they pass the minimum total cluster energy and seed
         // energy thresholds.
-        for(HPSEcalCluster cluster : eventList) {
+        for(Cluster cluster : eventList) {
             // Increment the clusters processed count.
             allClusters++;
             
             // Plot the seed energy / cluster energy histogram.
-            seedPercent.fill(cluster.getSeedHit().getCorrectedEnergy() / cluster.getEnergy(), 1);
+            seedPercent.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy() / cluster.getEnergy(), 1);
             
             // Get the cluster position indices.
-            int ix = cluster.getSeedHit().getIdentifierFieldValue("ix");
-            int iy = cluster.getSeedHit().getIdentifierFieldValue("iy");
+            int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+            int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
             
             // VERBOSE :: Output the current cluster's properties.
             if(verbose) {
                 System.out.printf("\tTesting cluster at (%d, %d) with total energy %f and seed energy %f.%n",
-                        ix, iy, cluster.getSeedHit().getCorrectedEnergy(), cluster.getEnergy());
+                        ix, iy, cluster.getCalorimeterHits().get(0).getCorrectedEnergy(), cluster.getEnergy());
             }
             
             // Add the clusters to the uncut histograms.
             clusterHitCount.fill(cluster.getCalorimeterHits().size());
             clusterTotalEnergy.fill(cluster.getEnergy());
-            clusterSeedEnergy.fill(cluster.getSeedHit().getCorrectedEnergy());
+            clusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
             clusterDistribution.fill(ix > 0 ? ix - 1 : ix, iy, 1);
-            if(cluster.getSeedHit().getCorrectedEnergy() > 0.100) { clusterDistribution100.fill(ix > 0 ? ix - 1 : ix, iy, 1); }
+            if(cluster.getCalorimeterHits().get(0).getCorrectedEnergy() > 0.100) { clusterDistribution100.fill(ix > 0 ? ix - 1 : ix, iy, 1); }
             
             // VERBOSE :: Output the single cluster trigger thresholds.
             if(verbose) {
@@ -214,7 +214,7 @@
 	                // Add the clusters to the cut histograms.
 	                aClusterHitCount.fill(cluster.getCalorimeterHits().size());
 	                aClusterTotalEnergy.fill(cluster.getEnergy());
-	                aClusterSeedEnergy.fill(cluster.getSeedHit().getCorrectedEnergy());
+	                aClusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
 	                aClusterDistribution.fill(ix > 0 ? ix - 1 : ix, iy, 1);
 	                
 	                // Increment the trigger count.
@@ -247,7 +247,7 @@
      * @return Returns <code>true</code> if the cluster passes and <code>
      * false</code> if it does not.
      */
-    private boolean clusterHitCountCut(HPSEcalCluster cluster) {
+    private boolean clusterHitCountCut(Cluster cluster) {
         return cluster.getCalorimeterHits().size() >= clusterHitCountThreshold;
     }
     
@@ -258,9 +258,9 @@
      * @return Returns <code>true</code> if the cluster passes and <code>
      * false</code> if it does not.
      */
-    private boolean clusterSeedEnergyCut(HPSEcalCluster cluster) {
+    private boolean clusterSeedEnergyCut(Cluster cluster) {
         // Get the seed energy value.
-        double seedEnergy = cluster.getSeedHit().getCorrectedEnergy();
+        double seedEnergy = cluster.getCalorimeterHits().get(0).getCorrectedEnergy();
         
         // Perform the seed energy cut.
         return seedEnergy >= clusterSeedEnergyThresholdLow && seedEnergy <= clusterSeedEnergyThresholdHigh;
@@ -273,7 +273,7 @@
      * @return Returns <code>true</code> if the cluster passes and <code>
      * false</code> if it does not.
      */
-    private boolean clusterTotalEnergyCut(HPSEcalCluster cluster) {
+    private boolean clusterTotalEnergyCut(Cluster cluster) {
         // Get the cluster energy.
         double clusterEnergy = cluster.getEnergy();
         
@@ -288,10 +288,10 @@
      * @return Returns <code>true</code> if the cluster passes and <code>
      * false</code> if it does not.
      */
-    private boolean clusterPositionCut(HPSEcalCluster cluster) {
+    private boolean clusterPositionCut(Cluster cluster) {
         // Get the cluster position.
-        Point seedLoc =  new Point(cluster.getSeedHit().getIdentifierFieldValue("ix"),
-                cluster.getSeedHit().getIdentifierFieldValue("iy"));
+        Point seedLoc =  new Point(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"),
+                cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
         
         // Check if it is one of the allowed seed crystals.
         return allowedSeedSet.contains(seedLoc);
@@ -302,7 +302,7 @@
     // ==================================================================
     
     /**
-     * Sets the LCIO collection name where <code>HPSEcalCluster</code>
+     * Sets the LCIO collection name where <code>Cluster</code>
      * objects are stored for use in the trigger.
      * @param clusterCollectionName - The name of the LCIO collection.
      */
@@ -428,7 +428,7 @@
     private Set<Point> allowedSeedSet = new HashSet<Point>();
     
     /**
-     * The name of the LCIO collection containing <code>HPSEcalCluster
+     * The name of the LCIO collection containing <code>Cluster
      * </code> objects.
      */
     private String clusterCollectionName = "EcalClusters";

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/NeutralPionTriggerDriver.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/NeutralPionTriggerDriver.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/NeutralPionTriggerDriver.java	Tue Jan  6 12:54:22 2015
@@ -12,10 +12,10 @@
 import java.util.List;
 import java.util.Map;
 
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.detector.IGeometryInfo;
 import org.lcsim.detector.solids.Trd;
 import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.util.aida.AIDA;
 
@@ -79,16 +79,16 @@
     public void process(EventHeader event) {
         // Generate a temporary list to store the good clusters
         // in before they are added to the buffer.
-        List<HPSEcalCluster> tempList = new ArrayList<HPSEcalCluster>();
+        List<Cluster> tempList = new ArrayList<Cluster>();
         
         // If the current event has a cluster collection, get it.
-        if(event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+        if(event.hasCollection(Cluster.class, clusterCollectionName)) {
             // VERBOSE :: Note that a cluster collection exists for
             //            this event.
             if(verbose) { System.out.println("Cluster collection is present for event."); }
             
             // Get the cluster list from the event.
-            List<HPSEcalCluster> eventList = event.get(HPSEcalCluster.class, clusterCollectionName);
+            List<Cluster> eventList = event.get(Cluster.class, clusterCollectionName);
             
             // VERBOSE :: Output the number of extant clusters.
             if(verbose) { System.out.printf("%d clusters in event.%n", eventList.size()); }
@@ -96,27 +96,27 @@
             // Add the clusters from the event into the cluster list
             // if they pass the minimum total cluster energy and seed
             // energy thresholds.
-            for(HPSEcalCluster cluster : eventList) {
+            for(Cluster cluster : eventList) {
                 // Increment the clusters processed count.
                 allClusters++;
                 
                 // Plot the seed energy / cluster energy histogram.
-                seedPercent.fill(cluster.getSeedHit().getCorrectedEnergy() / cluster.getEnergy(), 1);
+                seedPercent.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy() / cluster.getEnergy(), 1);
                 
                 // Get the cluster position indices.
-                int ix = cluster.getSeedHit().getIdentifierFieldValue("ix");
-                int iy = cluster.getSeedHit().getIdentifierFieldValue("iy");
+                int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+                int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
                 
                 // VERBOSE :: Output the current cluster's properties.
                 if(verbose) {
                     System.out.printf("\tTesting cluster at (%d, %d) with total energy %f and seed energy %f.%n",
-                            ix, iy, cluster.getSeedHit().getCorrectedEnergy(), cluster.getEnergy());
+                            ix, iy, cluster.getCalorimeterHits().get(0).getCorrectedEnergy(), cluster.getEnergy());
                 }
                 
                 // Add the clusters to the uncut histograms.
                 clusterHitCount.fill(cluster.getCalorimeterHits().size());
                 clusterTotalEnergy.fill(cluster.getEnergy());
-                clusterSeedEnergy.fill(cluster.getSeedHit().getCorrectedEnergy());
+                clusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
                 clusterDistribution.fill(ix, iy, 1);
                 
                 // VERBOSE :: Output the single cluster trigger thresholds.
@@ -180,7 +180,7 @@
                     // Add the cluster information to the single cut histograms.
                     pClusterHitCount.fill(cluster.getCalorimeterHits().size());
                     pClusterTotalEnergy.fill(cluster.getEnergy());
-                    pClusterSeedEnergy.fill(cluster.getSeedHit().getCorrectedEnergy());
+                    pClusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
                     pClusterDistribution.fill(ix, iy, 1);
                 }
             }
@@ -204,9 +204,9 @@
         
         // Loop over all of the cluster lists in the cluster buffer.
         double[] energy = { 0.0, 0.0, 0.0 };
-        for(List<HPSEcalCluster> bufferList : clusterBuffer) {
+        for(List<Cluster> bufferList : clusterBuffer) {
             // Loop over all of the clusters in each buffer list.
-            for(HPSEcalCluster cluster : bufferList) {
+            for(Cluster cluster : bufferList) {
                 // If the new cluster is higher energy than the first
                 // slot cluster, move the subsequent clusters down and
                 // insert the new one.
@@ -249,11 +249,11 @@
     
     public void startOfData() {
         // Initialize the cluster buffer to the size of the coincidence window.
-        clusterBuffer = new LinkedList<List<HPSEcalCluster>>();
+        clusterBuffer = new LinkedList<List<Cluster>>();
         
         // Populate the buffer with empty lists.
         for(int i = 0; i < coincidenceWindow; i++) {
-            clusterBuffer.add(new ArrayList<HPSEcalCluster>(0));
+            clusterBuffer.add(new ArrayList<Cluster>(0));
         }
         
         // Initialize the cluster hit count diagnostic plots.
@@ -316,18 +316,18 @@
         allPairs++;
         
         // Get the cluster position indices.
-        int[] ix = { clusterPair[0].getSeedHit().getIdentifierFieldValue("ix"), clusterPair[1].getSeedHit().getIdentifierFieldValue("ix") };
-        int[] iy = { clusterPair[0].getSeedHit().getIdentifierFieldValue("iy"), clusterPair[1].getSeedHit().getIdentifierFieldValue("iy") };
+        int[] ix = { clusterPair[0].getCalorimeterHits().get(0).getIdentifierFieldValue("ix"), clusterPair[1].getCalorimeterHits().get(0).getIdentifierFieldValue("ix") };
+        int[] iy = { clusterPair[0].getCalorimeterHits().get(0).getIdentifierFieldValue("iy"), clusterPair[1].getCalorimeterHits().get(0).getIdentifierFieldValue("iy") };
         
         // VERBOSE :: Output the clusters selected for triggering.
         if(verbose) {
             System.out.printf("\tTesting first cluster at (%d, %d) with total energy %f and seed energy %f.%n",
-                    ix[0], iy[0], clusterPair[0].getSeedHit().getCorrectedEnergy(), clusterPair[0].getEnergy());
+                    ix[0], iy[0], clusterPair[0].getCalorimeterHits().get(0).getCorrectedEnergy(), clusterPair[0].getEnergy());
             System.out.printf("\tTesting second cluster at (%d, %d) with total energy %f and seed energy %f.%n",
-                    ix[1], iy[1], clusterPair[1].getSeedHit().getCorrectedEnergy(), clusterPair[1].getEnergy());
+                    ix[1], iy[1], clusterPair[1].getCalorimeterHits().get(0).getCorrectedEnergy(), clusterPair[1].getEnergy());
             if(useClusterTriplet) {
                 System.out.printf("\tTesting third cluster at (%d, %d) with total energy %f and seed energy %f.%n",
-                        ix[1], iy[1], clusterTriplet[2].getSeedHit().getCorrectedEnergy(), clusterTriplet[2].getEnergy());
+                        ix[1], iy[1], clusterTriplet[2].getCalorimeterHits().get(0).getCorrectedEnergy(), clusterTriplet[2].getEnergy());
             }
         }
         
@@ -371,8 +371,8 @@
                 aClusterHitCount.fill(clusterPair[1].getCalorimeterHits().size());
                 aClusterTotalEnergy.fill(clusterPair[0].getEnergy());
                 aClusterTotalEnergy.fill(clusterPair[1].getEnergy());
-                aClusterSeedEnergy.fill(clusterPair[0].getSeedHit().getCorrectedEnergy());
-                aClusterSeedEnergy.fill(clusterPair[1].getSeedHit().getCorrectedEnergy());
+                aClusterSeedEnergy.fill(clusterPair[0].getCalorimeterHits().get(0).getCorrectedEnergy());
+                aClusterSeedEnergy.fill(clusterPair[1].getCalorimeterHits().get(0).getCorrectedEnergy());
                 aClusterDistribution.fill(ix[0], iy[0], 1);
                 aClusterDistribution.fill(ix[1], iy[1], 1);
                 
@@ -400,8 +400,8 @@
             aClusterHitCount.fill(clusterPair[1].getCalorimeterHits().size());
             aClusterTotalEnergy.fill(clusterPair[0].getEnergy());
             aClusterTotalEnergy.fill(clusterPair[1].getEnergy());
-            aClusterSeedEnergy.fill(clusterPair[0].getSeedHit().getCorrectedEnergy());
-            aClusterSeedEnergy.fill(clusterPair[1].getSeedHit().getCorrectedEnergy());
+            aClusterSeedEnergy.fill(clusterPair[0].getCalorimeterHits().get(0).getCorrectedEnergy());
+            aClusterSeedEnergy.fill(clusterPair[1].getCalorimeterHits().get(0).getCorrectedEnergy());
             aClusterDistribution.fill(ix[0], iy[0], 1);
             aClusterDistribution.fill(ix[1], iy[1], 1);
             
@@ -428,7 +428,7 @@
      * @return Returns <code>true</code> if the cluster passes and <code>
      * false</code> if it does not.
      */
-    private boolean clusterHitCountCut(HPSEcalCluster cluster) {
+    private boolean clusterHitCountCut(Cluster cluster) {
         return cluster.getCalorimeterHits().size() >= clusterHitCountThreshold;
     }
     
@@ -439,9 +439,9 @@
      * @return Returns <code>true</code> if the cluster passes and <code>
      * false</code> if it does not.
      */
-    private boolean clusterSeedEnergyCut(HPSEcalCluster cluster) {
+    private boolean clusterSeedEnergyCut(Cluster cluster) {
         // Get the seed energy value.
-        double seedEnergy = cluster.getSeedHit().getCorrectedEnergy();
+        double seedEnergy = cluster.getCalorimeterHits().get(0).getCorrectedEnergy();
         
         // Perform the seed energy cut.
         return seedEnergy >= clusterSeedEnergyThresholdLow && seedEnergy <= clusterSeedEnergyThresholdHigh;
@@ -454,7 +454,7 @@
      * @return Returns <code>true</code> if the cluster passes and <code>
      * false</code> if it does not.
      */
-    private boolean clusterTotalEnergyCut(HPSEcalCluster cluster) {
+    private boolean clusterTotalEnergyCut(Cluster cluster) {
         // Get the cluster energy.
         double clusterEnergy = cluster.getEnergy();
         
@@ -469,12 +469,12 @@
      * cut value.
      * @return Returns the cut value as a <code>double</code>.
      */
-    private static double getEnergySumValue(HPSEcalCluster[] clusterGroup) {
+    private static double getEnergySumValue(Cluster[] clusterGroup) {
         // Track the sum.
         double energySum = 0.0;
         
         // Add the energies of all clusters in the array.
-        for(HPSEcalCluster cluster : clusterGroup) { energySum += cluster.getEnergy(); }
+        for(Cluster cluster : clusterGroup) { energySum += cluster.getEnergy(); }
         
         // Return the sum.
         return energySum;
@@ -487,18 +487,18 @@
      * cut value.
      * @return Returns the cut value as a <code>double</code>.
      */
-    private double getInvariantMassValue(HPSEcalCluster[] clusterPair) {
+    private double getInvariantMassValue(Cluster[] clusterPair) {
         // Store the x/y positions for the seeds.
         double x[] = new double[2];
         double y[] = new double[2];
         
         // Get the seed hits.
-        CalorimeterHit[] seed = { clusterPair[0].getSeedHit(), clusterPair[1].getSeedHit() };
+        CalorimeterHit[] seed = { clusterPair[0].getCalorimeterHits().get(0), clusterPair[1].getCalorimeterHits().get(0) };
         
         // Set the positions for each seed.
         for(int index = 0; index < seed.length; index++) {
             // Get the seed position array stored in the position map.
-            Double[] seedPos = seedPosMap.get(clusterPair[index].getSeedHit());
+            Double[] seedPos = seedPosMap.get(clusterPair[index].getCalorimeterHits().get(0));
             
             // If there is a position array for the seed, use it.
             if(seedPos != null) {
@@ -509,7 +509,7 @@
             // Otherwise, calculate the position at the crystal face.
             else {
                 // Get the position and store it in a double array.
-                IGeometryInfo geom = clusterPair[index].getSeedHit().getDetectorElement().getGeometry();
+                IGeometryInfo geom = clusterPair[index].getCalorimeterHits().get(0).getDetectorElement().getGeometry();
                 double[] pos = geom.transformLocalToGlobal(VecOp.add(geom.transformGlobalToLocal(geom.getPosition()),
                         (Hep3Vector) new BasicHep3Vector(0, 0, -1 * ((Trd) geom.getLogicalVolume().getSolid()).getZHalfLength()))).v();
                 
@@ -519,7 +519,7 @@
                 
                 // Store the seed location for future use.
                 Double[] positionVec = { pos[0], pos[1], pos[2] };
-                seedPosMap.put(clusterPair[index].getSeedHit(), positionVec);
+                seedPosMap.put(clusterPair[index].getCalorimeterHits().get(0), positionVec);
             }
         }
         
@@ -538,10 +538,10 @@
      * @return Returns <code>true</code> if the cluster seed is on the
      * edge of the calorimeter and <code>false</code> otherwise.
      */
-    private static boolean isEdgeCluster(HPSEcalCluster cluster) {
+    private static boolean isEdgeCluster(Cluster cluster) {
         // Get the x- and y-indices of the cluster seed hit.
-        int ix = cluster.getSeedHit().getIdentifierFieldValue("ix");
-        int iy = cluster.getSeedHit().getIdentifierFieldValue("iy");
+        int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+        int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
         
         // Track whether the cluster is an edge cluster or not.
         boolean edge = false;
@@ -571,7 +571,7 @@
      * @return Returns <code>true</code> if the clusters pass and <code>
      * false</code> if they does not.
      */
-    private boolean pairEnergySumCut(HPSEcalCluster[] clusterPair) {
+    private boolean pairEnergySumCut(Cluster[] clusterPair) {
         // Get the energy sum value.
         double energySum = getEnergySumValue(clusterPair);
         
@@ -587,7 +587,7 @@
      * @return Returns <code>true</code> if the clusters pass and <code>
      * false</code> if they does not.
      */
-    private boolean pairInvariantMassCut(HPSEcalCluster[] clusterPair) {
+    private boolean pairInvariantMassCut(Cluster[] clusterPair) {
         // Calculate the invariant mass.
         double myy2 = getInvariantMassValue(clusterPair);
         
@@ -603,7 +603,7 @@
      * @return Returns <code>true</code> if the clusters pass and <code>
      * false</code> if they does not.
      */
-    private boolean tripletEnergySumCut(HPSEcalCluster[] clusterTriplet) {
+    private boolean tripletEnergySumCut(Cluster[] clusterTriplet) {
         return (getEnergySumValue(clusterTriplet) >= tripletEnergySumThreshold);
     }
     
@@ -615,15 +615,15 @@
      * @return Returns <code>true</code> if the clusters pass and <code>
      * false</code> if they does not.
      */
-    private static boolean tripletHorizontalCut(HPSEcalCluster[] clusterTriplet) {
+    private static boolean tripletHorizontalCut(Cluster[] clusterTriplet) {
         // Track whether a cluster has occurred on each horizontal side
         // of the calorimeter.
         boolean leftCluster = false;
         boolean rightCluster = false;
         
         // Sort through the cluster triplet and check where they occur.
-        for(HPSEcalCluster cluster : clusterTriplet) {
-            int ix = cluster.getSeedHit().getIdentifierFieldValue("ix");
+        for(Cluster cluster : clusterTriplet) {
+            int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
             if(ix < 0) { leftCluster = true; }
             if(ix > 0) { rightCluster = true; }
         }
@@ -633,10 +633,10 @@
         else { return false; }
     }
     
-    private boolean tripletTotalEnergyCut(HPSEcalCluster[] clusterTriplet) {
+    private boolean tripletTotalEnergyCut(Cluster[] clusterTriplet) {
         // Check to see if each cluster passes the check.
-        for(HPSEcalCluster cluster1 : clusterTriplet) {
-            for(HPSEcalCluster cluster2 : clusterTriplet) {
+        for(Cluster cluster1 : clusterTriplet) {
+            for(Cluster cluster2 : clusterTriplet) {
                 // The cluster pair must be two different clusters.
                 if(cluster1 == cluster2) { continue; }
                 
@@ -670,7 +670,7 @@
     // ==================================================================
     
     /**
-     * Sets the LCIO collection name where <code>HPSEcalCluster</code>
+     * Sets the LCIO collection name where <code>Cluster</code>
      * objects are stored for use in the trigger.
      * @param clusterCollectionName - The name of the LCIO collection.
      */
@@ -897,29 +897,29 @@
     
     /**
      * <b>clusterBuffer</b><br/><br/>
-     * <code>private LinkedList<List<HPSEcalCluster>> <b>clusterBuffer</b></code><br/><br/>
+     * <code>private LinkedList<List<Cluster>> <b>clusterBuffer</b></code><br/><br/>
      * Stores the list of clusters from each event for a finite-sized
      * buffer. The size of the buffer is determined by the coincidence
      * window.
      */
-    private LinkedList<List<HPSEcalCluster>> clusterBuffer;
+    private LinkedList<List<Cluster>> clusterBuffer;
     
     /**
      * <b>clusterCollectionName</b><br/><br/>
      * <code>private String <b>clusterCollectionName</b></code><br/><br/>
-     * The name of the LCIO collection containing <code>HPSEcalCluster
+     * The name of the LCIO collection containing <code>Cluster
      * </code> objects.
      */
     private String clusterCollectionName = "EcalClusters";
     
     /**
      * <b>clusterPair</b><br/><br/>
-     * <code>private HPSEcalCluster[] <b>clusterPair</b></code><br/><br/>
+     * <code>private Cluster[] <b>clusterPair</b></code><br/><br/>
      * Stores the two highest energy clusters located in the cluster
      * buffer. These are sorted by energy, with the highest energy
      * cluster first in the array.
      */
-    private HPSEcalCluster[] clusterPair = new HPSEcalCluster[2];
+    private Cluster[] clusterPair = new Cluster[2];
     
     /**
      * <b>clusterHitCountThreshold</b><br/><br/>
@@ -963,12 +963,12 @@
     
     /**
      * <b>clusterTriplet</b><br/><br/>
-     * <code>private HPSEcalCluster[] <b>clusterTriplet</b></code><br/><br/>
+     * <code>private Cluster[] <b>clusterTriplet</b></code><br/><br/>
      * Stores the three highest energy clusters located in the cluster
      * buffer. These are sorted by energy, with the highest energy
      * cluster first in the array.
      */
-    private HPSEcalCluster[] clusterTriplet = new HPSEcalCluster[3]; 
+    private Cluster[] clusterTriplet = new Cluster[3]; 
     
     /**
      * <b>coincidenceWindow</b><br/><br/>

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/OccupancyAnalysisDriver.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/OccupancyAnalysisDriver.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/OccupancyAnalysisDriver.java	Tue Jan  6 12:54:22 2015
@@ -1,12 +1,12 @@
 package org.hps.readout.ecal;
-
-import java.util.List;
 
 import hep.aida.IHistogram1D;
 import hep.aida.IHistogram2D;
 
-import org.hps.recon.ecal.HPSEcalCluster;
+import java.util.List;
+
 import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
@@ -62,22 +62,22 @@
     @Override
     public void process(EventHeader event) {
     	// If clusters are present, process them.
-    	if(event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+    	if(event.hasCollection(Cluster.class, clusterCollectionName)) {
     		// Get the list of clusters.
-    		List<HPSEcalCluster> clusterList = event.get(HPSEcalCluster.class, clusterCollectionName);
+    		List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
     		
     		// Use the clusters to populate the cluster plots.
-    		for(HPSEcalCluster cluster : clusterList) {
+    		for(Cluster cluster : clusterList) {
     			// Get the ix and iy values for the cluster.
-    			int ix = cluster.getSeedHit().getIdentifierFieldValue("ix");
-    			int iy = cluster.getSeedHit().getIdentifierFieldValue("iy");
+    			int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+    			int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
     			
     			// If we want to ignore the beam gap rows, make sure
     			// that iy exceeds two.
     			if(!ignoreBeamGapRows || (Math.abs(iy) > 2)) {
 	        		// If the cluster passes the seed threshold, place it in
 	        		// the level 1 plots.
-	    			if(cluster.getSeedHit().getCorrectedEnergy() >= seedThreshold) {
+	    			if(cluster.getCalorimeterHits().get(0).getCorrectedEnergy() >= seedThreshold) {
 	    				clusterDistribution[0].fill(ix, iy, scalingFactor);
 	    				clusterHitDistribution[0].fill(cluster.getCalorimeterHits().size(), scalingFactor);
 	    				clusterEnergyDistribution[0].fill(cluster.getEnergy() * beamRatio, scalingFactor);

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/SSPTriggerLogic.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/SSPTriggerLogic.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/SSPTriggerLogic.java	Tue Jan  6 12:54:22 2015
@@ -1,6 +1,6 @@
 package org.hps.readout.ecal;
 
-import org.hps.recon.ecal.HPSEcalCluster;
+import org.lcsim.event.Cluster;
 
 /**
  * Class <code>SSPLogic</code> implements each of the trigger cuts. It
@@ -21,7 +21,7 @@
      * @return Returns <code>true</code> if the cluster passes the cut
      * and <code>false</code> if the cluster does not.
      */
-    public static final boolean clusterHitCountCut(HPSEcalCluster cluster, int thresholdLow) {
+    public static final boolean clusterHitCountCut(Cluster cluster, int thresholdLow) {
         return (getValueClusterHitCount(cluster) >= thresholdLow);
     }
     
@@ -32,7 +32,7 @@
      * @return Returns <code>true</code> if the cluster passes the cut
      * and <code>false</code> if the cluster does not.
      */
-    public static final boolean clusterSeedEnergyCut(HPSEcalCluster cluster, double thresholdLow, double thresholdHigh) {
+    public static final boolean clusterSeedEnergyCut(Cluster cluster, double thresholdLow, double thresholdHigh) {
         // Get the cluster seed energy.
         double energy = getValueClusterSeedEnergy(cluster);
         
@@ -50,7 +50,7 @@
      * @return Returns <code>true</code> if the cluster passes the cut
      * and <code>false</code> if the cluster does not.
      */
-    public static final boolean clusterTotalEnergyCut(HPSEcalCluster cluster, double thresholdLow, double thresholdHigh) {
+    public static final boolean clusterTotalEnergyCut(Cluster cluster, double thresholdLow, double thresholdHigh) {
         // Get the total cluster energy.
         double energy = getValueClusterTotalEnergy(cluster);
         
@@ -65,8 +65,8 @@
      * be calculated.
      * @return Returns the distance between the clusters.
      */
-    public static final double getClusterDistance(HPSEcalCluster cluster) {
-        return Math.hypot(cluster.getSeedHit().getPosition()[0] - ORIGIN_X, cluster.getSeedHit().getPosition()[1]);
+    public static final double getClusterDistance(Cluster cluster) {
+        return Math.hypot(cluster.getCalorimeterHits().get(0).getPosition()[0] - ORIGIN_X, cluster.getCalorimeterHits().get(0).getPosition()[1]);
     }
     
     /**
@@ -75,7 +75,7 @@
      * derived.
      * @return Returns the cut value.
      */
-    public static final double getValueClusterTotalEnergy(HPSEcalCluster cluster) {
+    public static final double getValueClusterTotalEnergy(Cluster cluster) {
         return cluster.getEnergy();
     }
     
@@ -85,7 +85,7 @@
      * derived.
      * @return Returns the cut value.
      */
-    public static final int getValueClusterHitCount(HPSEcalCluster cluster) {
+    public static final int getValueClusterHitCount(Cluster cluster) {
         return cluster.getCalorimeterHits().size();
     }
     
@@ -95,8 +95,8 @@
      * derived.
      * @return Returns the cut value.
      */
-    public static final double getValueClusterSeedEnergy(HPSEcalCluster cluster) {
-        return cluster.getSeedHit().getCorrectedEnergy();
+    public static final double getValueClusterSeedEnergy(Cluster cluster) {
+        return cluster.getCalorimeterHits().get(0).getCorrectedEnergy();
     }
     
     /**
@@ -106,11 +106,11 @@
      * @param originX - The calorimeter center.
      * @return Returns the cut value.
      */
-    public static final double getValueCoplanarity(HPSEcalCluster[] clusterPair) {
+    public static final double getValueCoplanarity(Cluster[] clusterPair) {
         // Get the cluster angles.
         double[] clusterAngle = new double[2];
         for(int i = 0; i < 2; i++) {
-            double position[] = clusterPair[i].getSeedHit().getPosition();
+            double position[] = clusterPair[i].getCalorimeterHits().get(0).getPosition();
             clusterAngle[i] = (Math.toDegrees(Math.atan2(position[1], position[0] - ORIGIN_X)) + 180.0) % 180.0;
         }
         
@@ -124,7 +124,7 @@
      * be calculated.
      * @return Returns the cut value.
      */
-    public static final double getValueEnergyDifference(HPSEcalCluster[] clusterPair) {
+    public static final double getValueEnergyDifference(Cluster[] clusterPair) {
         return clusterPair[0].getEnergy() - clusterPair[1].getEnergy();
     }
     
@@ -136,7 +136,7 @@
      * energy slope equation E_low + R_min * F.
      * @return Returns the cut value.
      */
-    public static final double getValueEnergySlope(HPSEcalCluster[] clusterPair, double energySlopeParamF) {
+    public static final double getValueEnergySlope(Cluster[] clusterPair, double energySlopeParamF) {
         // E + R*F
         // Get the low energy cluster energy.
         double slopeParamE = clusterPair[1].getEnergy();
@@ -154,7 +154,7 @@
      * be calculated.
      * @return Returns the cut value.
      */
-    public static final double getValueEnergySum(HPSEcalCluster[] clusterPair) {
+    public static final double getValueEnergySum(Cluster[] clusterPair) {
         return clusterPair[0].getEnergy() + clusterPair[1].getEnergy();
     }
     
@@ -166,7 +166,7 @@
      * @return Returns <code>true</code> if the cluster pair passes
      * the cut and <code>false</code> if it does not.
      */
-    public static final boolean pairCoplanarityCut(HPSEcalCluster[] clusterPair, double thresholdHigh) {
+    public static final boolean pairCoplanarityCut(Cluster[] clusterPair, double thresholdHigh) {
         return (getValueCoplanarity(clusterPair) < thresholdHigh);
     }
     
@@ -178,7 +178,7 @@
      * @return Returns <code>true</code> if the cluster pair passes
      * the cut and <code>false</code> if it does not.
      */
-    public static final boolean pairEnergyDifferenceCut(HPSEcalCluster[] clusterPair, double thresholdHigh) {
+    public static final boolean pairEnergyDifferenceCut(Cluster[] clusterPair, double thresholdHigh) {
         return (getValueEnergyDifference(clusterPair) < thresholdHigh);
     }
     
@@ -190,7 +190,7 @@
      * @param thresholdLow - The lower bound for the cut.
      * @return true if pair is found, false otherwise
      */
-    public static final boolean pairEnergySlopeCut(HPSEcalCluster[] clusterPair, double thresholdLow, double energySlopeParamF) {
+    public static final boolean pairEnergySlopeCut(Cluster[] clusterPair, double thresholdLow, double energySlopeParamF) {
         return (getValueEnergySlope(clusterPair, energySlopeParamF) > thresholdLow);
     }
     
@@ -203,7 +203,7 @@
      * @return Returns <code>true</code> if the cluster pair passes
      * the cut and <code>false</code> if it does not.
      */
-    public static final boolean pairEnergySumCut(HPSEcalCluster[] clusterPair, double thresholdLow, double thresholdHigh) {
+    public static final boolean pairEnergySumCut(Cluster[] clusterPair, double thresholdLow, double thresholdHigh) {
         // Get the energy sum value.
         double energySum = getValueEnergySum(clusterPair);
         

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/SinglesTriggerDriver.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/SinglesTriggerDriver.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/SinglesTriggerDriver.java	Tue Jan  6 12:54:22 2015
@@ -5,7 +5,7 @@
 
 import java.util.List;
 
-import org.hps.recon.ecal.HPSEcalCluster;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.util.aida.AIDA;
 
@@ -44,19 +44,19 @@
     @Override
     public void process(EventHeader event) {
         // Make sure that there are clusters in the event.
-        if(event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+        if(event.hasCollection(Cluster.class, clusterCollectionName)) {
             // Get the list of clusters.
-            List<HPSEcalCluster> clusterList = event.get(HPSEcalCluster.class, clusterCollectionName);
+            List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
             
             // Iterate over the clusters.
-            for(HPSEcalCluster cluster : clusterList) {
+            for(Cluster cluster : clusterList) {
                 // Get the x and y indices.
-                int ix = cluster.getSeedHit().getIdentifierFieldValue("ix");
-                int iy = cluster.getSeedHit().getIdentifierFieldValue("iy");
+                int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+                int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
                 ix = ix > 0 ? ix - 1 : ix;
                 
                 // Populate the uncut plots.
-                clusterSeedEnergy.fill(cluster.getSeedHit().getCorrectedEnergy(), 1);
+                clusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy(), 1);
                 clusterTotalEnergy.fill(cluster.getEnergy(), 1);
                 clusterHitCount.fill(cluster.getCalorimeterHits().size(), 1);
                 clusterDistribution.fill(ix, iy, 1);
@@ -73,13 +73,13 @@
     @Override
     protected boolean triggerDecision(EventHeader event) {
         // Check that there is a cluster object collection.
-        if(event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+        if(event.hasCollection(Cluster.class, clusterCollectionName)) {
             // Get the list of hits.
-            List<HPSEcalCluster> clusterList = event.get(HPSEcalCluster.class, clusterCollectionName);
+            List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
             
             // Iterate over the hits and perform the cuts.
             triggerLoop:
-            for(HPSEcalCluster cluster : clusterList) {
+            for(Cluster cluster : clusterList) {
                 // Perform the hit count cut.
                 if(!SSPTriggerLogic.clusterHitCountCut(cluster, hitCountLow)) {
                     continue triggerLoop;
@@ -96,12 +96,12 @@
                 }
                 
                 // Get the x and y indices.
-                int ix = cluster.getSeedHit().getIdentifierFieldValue("ix");
-                int iy = cluster.getSeedHit().getIdentifierFieldValue("iy");
+                int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+                int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
                 ix = ix > 0 ? ix - 1 : ix;
                 
                 // Populate the cut plots.
-                clusterSeedEnergySingle.fill(cluster.getSeedHit().getCorrectedEnergy(), 1);
+                clusterSeedEnergySingle.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy(), 1);
                 clusterTotalEnergySingle.fill(cluster.getEnergy(), 1);
                 clusterHitCountSingle.fill(cluster.getCalorimeterHits().size(), 1);
                 clusterDistributionSingle.fill(ix, iy, 1);

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TestRunTriggerDriver.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TestRunTriggerDriver.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TestRunTriggerDriver.java	Tue Jan  6 12:54:22 2015
@@ -3,7 +3,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.hps.recon.ecal.HPSEcalCluster;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 
 /**
@@ -55,9 +55,9 @@
 
     @Override
     protected boolean triggerDecision(EventHeader event) {
-        if (event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+        if (event.hasCollection(Cluster.class, clusterCollectionName)) {
             cycleCounter++;
-            if (testTrigger(event.get(HPSEcalCluster.class, clusterCollectionName))) {
+            if (testTrigger(event.get(Cluster.class, clusterCollectionName))) {
                 triggerThisCycle = true;
             }
         }
@@ -71,12 +71,12 @@
         }
     }
 
-    public boolean testTrigger(List<HPSEcalCluster> clusters) {
+    public boolean testTrigger(List<Cluster> clusters) {
         boolean trigger = false;
 
         topBits <<= 1;
         botBits <<= 1;
-        for (HPSEcalCluster cluster : clusters) {
+        for (Cluster cluster : clusters) {
             if (cluster.getEnergy() > clusterEnergyLow) {
                 if (cluster.getPosition()[1] > 0) {
                     topBits |= 1;

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/ECalUtils.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/ECalUtils.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/ECalUtils.java	Tue Jan  6 12:54:22 2015
@@ -1,6 +1,7 @@
 package org.hps.recon.ecal;
 
 import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 
 /**
  *
@@ -34,8 +35,8 @@
      * @param ecalCluster : ECal cluster
      * @return Quadrant number
      */
-    public static int getQuadrant(HPSEcalCluster ecalCluster) {
-        return getQuadrant(ecalCluster.getSeedHit());
+    public static int getQuadrant(Cluster ecalCluster) {
+        return getQuadrant(ecalCluster.getCalorimeterHits().get(0));
     }
 
     public static int getQuadrant(CalorimeterHit hit) {

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTEventDisplay.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTEventDisplay.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTEventDisplay.java	Tue Jan  6 12:54:22 2015
@@ -8,10 +8,10 @@
 
 import java.util.List;
 
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.detector.tracker.silicon.SiSensor;
 import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
 import org.lcsim.detector.tracker.silicon.SiStrips;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.RawTrackerHit;
 import org.lcsim.fit.helicaltrack.HelicalTrackHit;
@@ -85,9 +85,9 @@
                 fillPlots(hrth);
             }
 
-            List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalCollectionName);
+            List<Cluster> clusters = event.get(Cluster.class, ecalCollectionName);
             //             System.out.println("Number of ECAL clusters="+clusters.size());
-            for (HPSEcalCluster cluster : clusters) {
+            for (Cluster cluster : clusters) {
 //                dec.setID(cluster.getSeedHit().getCellID());
 //                CalorimeterHit seedHit = cluster.getSeedHit();
 //                    System.out.println("z = "+seedHit.getPosition()[2]+" y = "+seedHit.getPosition()[1]);

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/TrackingReconstructionPlots.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/TrackingReconstructionPlots.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/TrackingReconstructionPlots.java	Tue Jan  6 12:54:22 2015
@@ -17,7 +17,6 @@
 //===> import org.hps.conditions.deprecated.HPSSVTCalibrationConstants;
 //===> import org.hps.conditions.deprecated.HPSSVTCalibrationConstants.ChannelConstants;
 //===> import org.hps.conditions.deprecated.SvtUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.hps.recon.tracking.BeamlineConstants;
 import org.hps.recon.tracking.DumbShaperFit;
 import org.hps.recon.tracking.HelixConverter;
@@ -25,8 +24,9 @@
 import org.hps.recon.tracking.ShaperFitAlgorithm;
 import org.hps.recon.tracking.StraightLineTrack;
 import org.hps.recon.tracking.TrackUtils;
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.detector.tracker.silicon.SiSensor;
-import org.lcsim.detector.tracker.silicon.HpsSiSensor;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.LCIOParameters.ParameterName;
 import org.lcsim.event.RawTrackerHit;
@@ -626,9 +626,9 @@
 
         List<Track> tracks = event.get(Track.class, trackCollectionName);
         nTracks.fill(tracks.size());
-        if (event.hasCollection(HPSEcalCluster.class, ecalCollectionName)) {
-            List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalCollectionName);
-            for (HPSEcalCluster cluster : clusters) {
+        if (event.hasCollection(Cluster.class, ecalCollectionName)) {
+            List<Cluster> clusters = event.get(Cluster.class, ecalCollectionName);
+            for (Cluster cluster : clusters) {
                 if (cluster.getPosition()[1] > 0) {
                     aida.histogram2D("Top ECal Cluster Position").fill(cluster.getPosition()[0], cluster.getPosition()[1]);
                 }
@@ -829,10 +829,10 @@
                     }
                 }
             }
-            if(event.hasCollection(HPSEcalCluster.class,ecalCollectionName)) {
-                List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalCollectionName);
-
-                HPSEcalCluster clust = findClosestCluster(posAtEcal, clusters);
+            if(event.hasCollection(Cluster.class,ecalCollectionName)) {
+                List<Cluster> clusters = event.get(Cluster.class, ecalCollectionName);
+
+                Cluster clust = findClosestCluster(posAtEcal, clusters);
 
                 //           if (clust != null) {
                 if (clust != null) {
@@ -1008,10 +1008,10 @@
         //bottomFrame.dispose();
     }
 
-    private HPSEcalCluster findClosestCluster(Hep3Vector posonhelix, List<HPSEcalCluster> clusters) {
-        HPSEcalCluster closest = null;
+    private Cluster findClosestCluster(Hep3Vector posonhelix, List<Cluster> clusters) {
+        Cluster closest = null;
         double minDist = 9999;
-        for (HPSEcalCluster cluster : clusters) {
+        for (Cluster cluster : clusters) {
             double[] clPos = cluster.getPosition();
             double clEne = cluster.getEnergy();
             double dist = Math.sqrt(Math.pow(clPos[0] - posonhelix.x(), 2) + Math.pow(clPos[1] - posonhelix.y(), 2)); //coordinates!!!

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalClusterPlots.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalClusterPlots.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalClusterPlots.java	Tue Jan  6 12:54:22 2015
@@ -11,8 +11,8 @@
 import org.apache.commons.math.stat.StatUtils;
 import org.hps.readout.ecal.SSPTriggerLogic;
 import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.geometry.Detector;
 import org.lcsim.util.Driver;
@@ -167,20 +167,20 @@
     @Override
     public void process(EventHeader event) {
     	// Check whether the event has clusters or not.
-    	if(event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+    	if(event.hasCollection(Cluster.class, clusterCollectionName)) {
     		// Get the list of clusters.
-    		List<HPSEcalCluster> clusterList = event.get(HPSEcalCluster.class, clusterCollectionName);
+    		List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
     		
     		// Create lists to store the clusters from the top of the
     		// calorimeter and the bottom.
-    		List<HPSEcalCluster> topList = new ArrayList<HPSEcalCluster>();
-    		List<HPSEcalCluster> bottomList = new ArrayList<HPSEcalCluster>();
+    		List<Cluster> topList = new ArrayList<Cluster>();
+    		List<Cluster> bottomList = new ArrayList<Cluster>();
     		
     		// Track the highest energy cluster in the event.
     		double maxEnergy = 0.0;
     		
     		// Process each of the clusters.
-    		for(HPSEcalCluster cluster : clusterList) {
+    		for(Cluster cluster : clusterList) {
     			// If this cluster has a higher energy then was seen
     			// previously, it is now the highest energy cluster.
 				if (cluster.getEnergy() > maxEnergy) {
@@ -221,7 +221,7 @@
     			// Cluster pairs are formed from all top/bottom cluster
     			// combinations. To create these pairs, separate the
     			// clusters into two lists based on their y-indices.
-    			if(cluster.getSeedHit().getIdentifierFieldValue("ix") > 0) {
+    			if(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix") > 0) {
     				topList.add(cluster);
     			} else {
     				bottomList.add(cluster);
@@ -233,14 +233,14 @@
     		if(maxEnergy > 0) { clusterMaxEnergyPlot.fill(maxEnergy); }
     		
     		// Create a list to store cluster pairs.
-    		List<HPSEcalCluster[]> pairList = new ArrayList<HPSEcalCluster[]>(topList.size() * bottomList.size());
+    		List<Cluster[]> pairList = new ArrayList<Cluster[]>(topList.size() * bottomList.size());
     		
     		// Form pairs from all possible combinations of clusters
     		// from the top and bottom lists.
-    		for(HPSEcalCluster topCluster : topList) {
-    			for(HPSEcalCluster bottomCluster : bottomList) {
+    		for(Cluster topCluster : topList) {
+    			for(Cluster bottomCluster : bottomList) {
     				// Make a cluster pair array.
-    				HPSEcalCluster[] pair = new HPSEcalCluster[2];
+    				Cluster[] pair = new Cluster[2];
     				
     				// The lower energy cluster goes in the second slot.
     				if(topCluster.getEnergy() > bottomCluster.getEnergy()) {
@@ -257,7 +257,7 @@
     		}
     		
     		// Iterate over each pair and calculate the pair cut values.
-    		for(HPSEcalCluster[] pair : pairList) {
+    		for(Cluster[] pair : pairList) {
     			// Get the energy slope value.
     			double energySumValue = SSPTriggerLogic.getValueEnergySum(pair);
     			double energyDifferenceValue = SSPTriggerLogic.getValueEnergyDifference(pair);

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplay.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplay.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplay.java	Tue Jan  6 12:54:22 2015
@@ -9,11 +9,10 @@
 import java.awt.Point;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import java.lang.System;
-import java.io.File;
-import java.io.IOException;
 
 import org.hps.monitoring.ecal.eventdisplay.ui.PDataEventViewer;
 import org.hps.monitoring.ecal.eventdisplay.ui.PEventViewer;
@@ -21,10 +20,9 @@
 import org.hps.monitoring.ecal.eventdisplay.util.CrystalEvent;
 import org.hps.monitoring.ecal.eventdisplay.util.CrystalListener;
 import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.lcsim.event.RawTrackerHit;
 import org.lcsim.geometry.Detector;
 import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
@@ -330,16 +328,16 @@
 		}
 		
 		// If there are clusters in the event...
-		if (event.hasCollection(HPSEcalCluster.class, clusterCollection)) {
+		if (event.hasCollection(Cluster.class, clusterCollection)) {
 			// Get the list of clusters.
-			List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, clusterCollection);
+			List<Cluster> clusters = event.get(Cluster.class, clusterCollection);
 			
 			// Iterate over the clusters and add them to the event
 			// display if appropriate.
-			for (HPSEcalCluster cluster : clusters) {
+			for (Cluster cluster : clusters) {
 				// Get the ix and iy indices for the seed.
-				int ix = cluster.getSeedHit().getIdentifierFieldValue("ix");
-				int iy = cluster.getSeedHit().getIdentifierFieldValue("iy");
+				int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+				int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
 				
 				// Get the histogram index for the hit.
 				int id = ECalUtils.getHistoIDFromRowColumn(iy, ix);

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringPlots.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringPlots.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringPlots.java	Tue Jan  6 12:54:22 2015
@@ -1,16 +1,14 @@
 package org.hps.monitoring.ecal.plots;
 
-import hep.aida.IHistogram1D;
 import hep.aida.IHistogram2D;
 import hep.aida.IPlotter;
 import hep.aida.IPlotterStyle;
 
-import java.util.ArrayList;
 import java.util.List;
 
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.hps.recon.ecal.ECalUtils;
 import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.geometry.Detector;
 import org.lcsim.util.Driver;
@@ -162,10 +160,10 @@
             }
         }
 
-        if (event.hasCollection(HPSEcalCluster.class, clusterCollection)) {
-            List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, clusterCollection);
-            for (HPSEcalCluster cluster : clusters) {
-                clusterCountFillPlot.fill(cluster.getSeedHit().getIdentifierFieldValue("ix"), cluster.getSeedHit().getIdentifierFieldValue("iy"));
+        if (event.hasCollection(Cluster.class, clusterCollection)) {
+            List<Cluster> clusters = event.get(Cluster.class, clusterCollection);
+            for (Cluster cluster : clusters) {
+                clusterCountFillPlot.fill(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"), cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
             }
         }
        

Modified: java/trunk/users/src/main/java/org/hps/users/holly/EcalClustererCosmics.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/holly/EcalClustererCosmics.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/holly/EcalClustererCosmics.java	Tue Jan  6 12:54:22 2015
@@ -7,9 +7,10 @@
 import java.util.Set;
 
 import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
+import org.lcsim.event.base.BaseCluster;
 import org.lcsim.geometry.Detector;
 import org.lcsim.geometry.subdetector.HPSEcal3;
 import org.lcsim.geometry.subdetector.HPSEcal3.NeighborMap;
@@ -112,14 +113,14 @@
 
             // Put Cluster collection into event.
             int flag = 1 << LCIOConstants.CLBIT_HITS;
-            event.put(clusterCollectionName, createClusters(hitMap), HPSEcalCluster.class, flag);
+            event.put(clusterCollectionName, createClusters(hitMap), Cluster.class, flag);
         }
     }
 
-    public List<HPSEcalCluster> createClusters(Map<Long, CalorimeterHit> map) {
+    public List<Cluster> createClusters(Map<Long, CalorimeterHit> map) {
 
         // New Cluster list to be added to event.
-        List<HPSEcalCluster> clusters = new ArrayList<HPSEcalCluster>();
+        List<Cluster> clusters = new ArrayList<Cluster>();
 
         // Loop over ECal hits to find cluster seeds.
         for (CalorimeterHit hit : map.values()) {
@@ -169,7 +170,7 @@
             // Did we find a seed?
             if (isSeed) {
                 // Make a cluster from the hit list.
-                HPSEcalCluster cluster = new HPSEcalCluster(hit.getCellID());
+                BaseCluster cluster = new BaseCluster();
                 cluster.addHit(hit);
                 for (CalorimeterHit clusHit : neighborHits) {
                     cluster.addHit(clusHit);

Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/ClusterAnalysisDriver.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/ClusterAnalysisDriver.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/ClusterAnalysisDriver.java	Tue Jan  6 12:54:22 2015
@@ -1,11 +1,11 @@
 package org.hps.users.kmccarty;
-
-import java.util.List;
 
 import hep.aida.IHistogram1D;
 import hep.aida.IHistogram2D;
 
-import org.hps.recon.ecal.HPSEcalCluster;
+import java.util.List;
+
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
@@ -58,32 +58,32 @@
 	
 	public void process(EventHeader event) {
 		// Check if there exists a cluster collection.
-		if(event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+		if(event.hasCollection(Cluster.class, clusterCollectionName)) {
 			// Get the raw hit collection.
-			List<HPSEcalCluster> clusterList = event.get(HPSEcalCluster.class, clusterCollectionName);
+			List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
 			
 			// Output the information on each hit to the histograms.
-			for(HPSEcalCluster cluster : clusterList) {
+			for(Cluster cluster : clusterList) {
 				// Get the x and y indices for the hits.
-				int ix = cluster.getSeedHit().getIdentifierFieldValue("ix");
-				int iy = cluster.getSeedHit().getIdentifierFieldValue("iy");
+				int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+				int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
 				if(ix > 0) { ix = ix - 1; }
 				
 				// Write to the histograms.
 				clusterTotalEnergy.fill(cluster.getEnergy());
-				clusterSeedEnergy.fill(cluster.getSeedHit().getCorrectedEnergy());
+				clusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
 				clusterHitCount.fill(cluster.getCalorimeterHits().size());
 				clusterDistribution.fill(ix, iy, 1.0);
 				
-				if(cluster.getSeedHit().getCorrectedEnergy() > 0.100) {
+				if(cluster.getCalorimeterHits().get(0).getCorrectedEnergy() > 0.100) {
 					fClusterTotalEnergy.fill(cluster.getEnergy());
-					fClusterSeedEnergy.fill(cluster.getSeedHit().getCorrectedEnergy());
+					fClusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
 					fClusterHitCount.fill(cluster.getCalorimeterHits().size());
 					fClusterDistribution.fill(ix, iy, 1.0);
 					
 					if(cluster.getCalorimeterHits().size() > 1) {
 						nClusterTotalEnergy.fill(cluster.getEnergy());
-						nClusterSeedEnergy.fill(cluster.getSeedHit().getCorrectedEnergy());
+						nClusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
 						nClusterHitCount.fill(cluster.getCalorimeterHits().size());
 						nClusterDistribution.fill(ix, iy, 1.0);
 					}

Modified: java/trunk/users/src/main/java/org/hps/users/luca/CalibClusterAnalizer.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/CalibClusterAnalizer.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/CalibClusterAnalizer.java	Tue Jan  6 12:54:22 2015
@@ -7,31 +7,13 @@
 package org.hps.users.luca;
 
 import hep.aida.IHistogram1D;
-import hep.aida.IHistogram2D;
-import java.io.IOException;
-import java.util.*;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.LinkedList;
+
 import java.util.List;
-import java.util.Queue;
-import org.hps.readout.ecal.ClockSingleton;
-import org.hps.readout.ecal.TriggerDriver;
 
-
-import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.lcsim.geometry.Detector;
+import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
-import org.lcsim.util.Driver;
-import hep.aida.*;
-import hep.aida.IHistogram1D;
-import java.io.FileWriter;
-import org.lcsim.event.CalorimeterHit;
-import org.lcsim.event.MCParticle;
 /**
  *
  * @author mac
@@ -51,7 +33,7 @@
         {List<Cluster> clusters= event.get(Cluster.class,"EcalClusters");
         for(Cluster cluster : clusters){
         eneTuttiPlot.fill(cluster.getEnergy());
-       SeedHitPlot.fill(HPSEcalCluster.getSeedHit(cluster).getCorrectedEnergy());
+       SeedHitPlot.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
         }
         
         

Modified: java/trunk/users/src/main/java/org/hps/users/luca/CalibTest.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/CalibTest.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/CalibTest.java	Tue Jan  6 12:54:22 2015
@@ -2,13 +2,14 @@
 package org.hps.users.luca;
 
 //import hep.aida.ITupleColumn.String;
+
+import hep.aida.IHistogram1D;
 
 import java.util.List;
 
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.MCParticle;
 import org.lcsim.util.Driver;
-import hep.aida.IHistogram1D;
 import org.lcsim.util.aida.AIDA;
 // the class has to be derived from the driver class
 public class CalibTest extends Driver {

Modified: java/trunk/users/src/main/java/org/hps/users/luca/CalibTest2.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/CalibTest2.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/CalibTest2.java	Tue Jan  6 12:54:22 2015
@@ -2,18 +2,12 @@
 
 //import hep.aida.ITupleColumn.String;
 import hep.aida.IHistogram1D;
-import hep.aida.IHistogram2D;
-import java.io.IOException;
-import java.io.*;
-
 
 import java.util.List;
 
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.MCParticle;
-
 import org.lcsim.util.Driver;
-
 import org.lcsim.util.aida.AIDA;
 
 /**

Modified: java/trunk/users/src/main/java/org/hps/users/luca/ClusterSorterReconData.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/ClusterSorterReconData.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/ClusterSorterReconData.java	Tue Jan  6 12:54:22 2015
@@ -5,31 +5,15 @@
  */
 
 package org.hps.users.luca;
-import hep.aida.IHistogram1D;
-import hep.aida.IHistogram2D;
+import java.io.FileWriter;
 import java.io.IOException;
-import java.util.*;
-import java.io.PrintWriter;
 import java.util.ArrayList;
-import java.util.EnumSet;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Queue;
-import org.hps.readout.ecal.ClockSingleton;
-import org.hps.readout.ecal.TriggerDriver;
-
-import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
+
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.lcsim.geometry.Detector;
-import org.lcsim.util.aida.AIDA;
 import org.lcsim.util.Driver;
-import hep.aida.*;
-import hep.aida.IHistogram3D;
-import java.io.FileWriter;
-import org.lcsim.event.CalorimeterHit;
-import org.lcsim.event.MCParticle;
 
 /**
  * 
@@ -169,14 +153,14 @@
          
          //ciclo for nel set di currentCluster, ovvero il set nel mezzo del buffer
     for(Cluster cluster : currentClusters){ 
-    if((HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("ix")== posx) && (HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("iy")==posy )&& (cluster.getEnergy() > energyThreshold)){
+    if((cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")== posx) && (cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")==posy )&& (cluster.getEnergy() > energyThreshold)){
         
            if(ClusterChecker(cluster)){
             int id;
             Clustercount++;
            id=getCrystal(cluster);
            try{
-     writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + HPSEcalCluster.getSeedHit(cluster).getCorrectedEnergy() + " " + HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("ix")+" " +HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("iy"));
+     writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getCalorimeterHits().get(0).getCorrectedEnergy() + " " + cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")+" " +cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
      /*for(CalorimeterHit hit : cluster.getCalorimeterHits())
      {writer.append(hit.getRawEnergy()+ " ");
        }*/
@@ -220,7 +204,7 @@
          for(Cluster currentcluster : currentList){
            if(currentcluster!= cluster){
              //if there is a cluster in the buffer that is in the considered radius in a time window lower than expected, the loop is brocken and the analyzed cluster is not good
-         if(!((HPSEcalCluster.getSeedHit(currentcluster).getIdentifierFieldValue("ix") < posx-radius || HPSEcalCluster.getSeedHit(currentcluster).getIdentifierFieldValue("ix")> posx+radius)&& (HPSEcalCluster.getSeedHit(currentcluster).getIdentifierFieldValue("iy")< posy-radius || HPSEcalCluster.getSeedHit(currentcluster).getIdentifierFieldValue("iy")> posy+radius))&& Math.abs(HPSEcalCluster.getSeedHit(cluster).getTime()-HPSEcalCluster.getSeedHit(currentcluster).getTime())<timeDifference){
+         if(!((cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix") < posx-radius || cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")> posx+radius)&& (cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")< posy-radius || cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")> posy+radius))&& Math.abs(cluster.getCalorimeterHits().get(0).getTime()-cluster.getCalorimeterHits().get(0).getTime())<timeDifference){
          check=false;
          break loops;
          }
@@ -243,8 +227,8 @@
  
  public int getCrystal (Cluster cluster){
  int x,y,id=0;
- x= (-1)*HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("ix");
- y= HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("iy");
+ x= (-1)*cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ y= cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
  
  if(y==5){
  if(x<0)

Modified: java/trunk/users/src/main/java/org/hps/users/luca/FADCVariableTriggerFEEDriver.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/FADCVariableTriggerFEEDriver.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/FADCVariableTriggerFEEDriver.java	Tue Jan  6 12:54:22 2015
@@ -5,10 +5,11 @@
 import java.util.List;
 import java.util.Queue;
 
+import org.hps.readout.ecal.FADCTriggerDriver;
+import org.hps.readout.ecal.TriggerDriver;
 import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.hps.readout.ecal.TriggerDriver;
 /**
  * Class <code>FADCVariableTriggerDriver</code> reads reconstructed
  * clusters and makes trigger decisions on them. It is designed to
@@ -47,8 +48,8 @@
     // ==================================================================
     // ==== Driver Internal Variables ===================================
     // ==================================================================
-    private Queue<List<HPSEcalCluster>> topClusterQueue = null;	// Store clusters on the top half of the calorimeter.
-    private Queue<List<HPSEcalCluster>> botClusterQueue = null;	// Store clusters on the bottom half of the calorimeter.
+    private Queue<List<Cluster>> topClusterQueue = null;	// Store clusters on the top half of the calorimeter.
+    private Queue<List<Cluster>> botClusterQueue = null;	// Store clusters on the bottom half of the calorimeter.
     private int allClusters = 0;								// Track the number of clusters processed.
     private int allPairs = 0;									// Track the number of cluster pairs processed.
     private int clusterTotalEnergyCount = 0;					// Track the clusters which pass the total energy cut.
@@ -92,18 +93,18 @@
     @Override
     public void process(EventHeader event) {
     	// Process the list of clusters for the event, if it exists.
-        if (event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+        if (event.hasCollection(Cluster.class, clusterCollectionName)) {
         	// Get the collection of clusters.
-        	List<HPSEcalCluster> clusterList = event.get(HPSEcalCluster.class, clusterCollectionName);
+        	List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
         	
         	// Create a list to hold clusters which pass the single
         	// cluster cuts.
-        	List<HPSEcalCluster> goodClusterList = new ArrayList<HPSEcalCluster>(clusterList.size());
+        	List<Cluster> goodClusterList = new ArrayList<Cluster>(clusterList.size());
         	
         	// Sort through the cluster list and add clusters that pass
         	// the single cluster cuts to the good list.
         	clusterLoop:
-        	for(HPSEcalCluster cluster : clusterList) {
+        	for(Cluster cluster : clusterList) {
         		// Increment the number of processed clusters.
         		allClusters++;
         		
@@ -305,19 +306,19 @@
         }
     	
         // Initialize the top and bottom cluster queues.
-        topClusterQueue = new LinkedList<List<HPSEcalCluster>>();
-        botClusterQueue = new LinkedList<List<HPSEcalCluster>>();
+        topClusterQueue = new LinkedList<List<Cluster>>();
+        botClusterQueue = new LinkedList<List<Cluster>>();
         
         // Populate the top cluster queue. It should be populated with
         // a number of empty lists equal to (2 * pairCoincidence + 1).
         for (int i = 0; i < 2 * pairCoincidence + 1; i++) {
-            topClusterQueue.add(new ArrayList<HPSEcalCluster>());
+            topClusterQueue.add(new ArrayList<Cluster>());
         }
         
         // Populate the bottom cluster queue. It should be populated with
         // a number of empty lists equal to (2 * pairCoincidence + 1).
         for (int i = 0; i < pairCoincidence + 1; i++) {
-            botClusterQueue.add(new ArrayList<HPSEcalCluster>());
+            botClusterQueue.add(new ArrayList<Cluster>());
         }
         
         // If a background level has been set, pick the correct cuts.
@@ -333,28 +334,28 @@
      * @param ecalClusters : List of ECal clusters
      * @return list of cluster pairs
      */
-    protected List<HPSEcalCluster[]> getClusterPairsTopBot() {
+    protected List<Cluster[]> getClusterPairsTopBot() {
         // Create a list to store cluster pairs. 
-        List<HPSEcalCluster[]> clusterPairs = new ArrayList<HPSEcalCluster[]>();
+        List<Cluster[]> clusterPairs = new ArrayList<Cluster[]>();
         
         // Loop over all top-bottom pairs of clusters; higher-energy cluster goes first in the pair
         // To apply pair coincidence time, use only bottom clusters from the 
         // readout cycle pairCoincidence readout cycles ago, and top clusters 
         // from all 2*pairCoincidence+1 previous readout cycles
-        for (HPSEcalCluster botCluster : botClusterQueue.element()) {
-            for (List<HPSEcalCluster> topClusters : topClusterQueue) {
-                for (HPSEcalCluster topCluster : topClusters) {
+        for (Cluster botCluster : botClusterQueue.element()) {
+            for (List<Cluster> topClusters : topClusterQueue) {
+                for (Cluster topCluster : topClusters) {
                 	// The first cluster in a pair should always be
                 	// the higher energy cluster. If the top cluster
                 	// is higher energy, it goes first.
                     if (topCluster.getEnergy() > botCluster.getEnergy()) {
-                        HPSEcalCluster[] clusterPair = {topCluster, botCluster};
+                        Cluster[] clusterPair = {topCluster, botCluster};
                         clusterPairs.add(clusterPair);
                     }
                     
                     // Otherwise, the bottom cluster goes first.
                     else {
-                        HPSEcalCluster[] clusterPair = {botCluster, topCluster};
+                        Cluster[] clusterPair = {botCluster, topCluster};
                         clusterPairs.add(clusterPair);
                     }
                 }
@@ -375,7 +376,7 @@
 	protected boolean triggerDecision(EventHeader event) {
     	// If there is a list of clusters present for this event,
     	// check whether it passes the trigger conditions.
-    	if (event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+    	if (event.hasCollection(Cluster.class, clusterCollectionName)) {
         	return testTrigger();
         }
         
@@ -392,7 +393,7 @@
      * @return Returns <code>true</code> if the cluster passes the cut
      * and <code>false</code> if the cluster does not.
      */
-    private boolean clusterHitCountCut(HPSEcalCluster cluster) {
+    private boolean clusterHitCountCut(Cluster cluster) {
     	return (getValueClusterHitCount(cluster) >= minHitCount);
     }
     
@@ -404,7 +405,7 @@
      * @return Returns <code>true</code> if the cluster passes the cut
      * and <code>false</code> if the cluster does not.
      */
-    private boolean clusterSeedEnergyCut(HPSEcalCluster cluster) {
+    private boolean clusterSeedEnergyCut(Cluster cluster) {
     	// Get the cluster seed energy.
     	double energy = getValueClusterSeedEnergy(cluster);
     	
@@ -421,7 +422,7 @@
      * @return Returns <code>true</code> if the cluster passes the cut
      * and <code>false</code> if the cluster does not.
      */
-    private boolean clusterTotalEnergyCut(HPSEcalCluster cluster) {
+    private boolean clusterTotalEnergyCut(Cluster cluster) {
     	// Get the total cluster energy.
     	double energy = getValueClusterTotalEnergy(cluster);
     	
@@ -437,8 +438,8 @@
      * be calculated.
      * @return Returns the distance between the clusters.
      */
-    private double getClusterDistance(HPSEcalCluster cluster) {
-        return Math.hypot(cluster.getSeedHit().getPosition()[0] - originX, cluster.getSeedHit().getPosition()[1]);
+    private double getClusterDistance(Cluster cluster) {
+        return Math.hypot(cluster.getCalorimeterHits().get(0).getPosition()[0] - originX, cluster.getCalorimeterHits().get(0).getPosition()[1]);
     }
     
     /**
@@ -448,7 +449,7 @@
      * derived.
      * @return Returns the cut value.
      */
-    private double getValueClusterTotalEnergy(HPSEcalCluster cluster) {
+    private double getValueClusterTotalEnergy(Cluster cluster) {
     	return cluster.getEnergy();
     }
     
@@ -459,7 +460,7 @@
      * derived.
      * @return Returns the cut value.
      */
-    private int getValueClusterHitCount(HPSEcalCluster cluster) {
+    private int getValueClusterHitCount(Cluster cluster) {
     	return cluster.getCalorimeterHits().size();
     }
     
@@ -470,8 +471,8 @@
      * derived.
      * @return Returns the cut value.
      */
-    private double getValueClusterSeedEnergy(HPSEcalCluster cluster) {
-    	return cluster.getSeedHit().getCorrectedEnergy();
+    private double getValueClusterSeedEnergy(Cluster cluster) {
+    	return cluster.getCalorimeterHits().get(0).getCorrectedEnergy();
     }
     
     /**
@@ -481,11 +482,11 @@
      * be calculated.
      * @return Returns the cut value.
      */
-    private double getValueCoplanarity(HPSEcalCluster[] clusterPair) {
+    private double getValueCoplanarity(Cluster[] clusterPair) {
     	// Get the cluster angles.
     	double[] clusterAngle = new double[2];
     	for(int i = 0; i < 2; i++) {
-            double position[] = clusterPair[i].getSeedHit().getPosition();
+            double position[] = clusterPair[i].getCalorimeterHits().get(0).getPosition();
             //clusterAngle[i] = Math.toDegrees(Math.atan2(position[1], position[0] - originX));
             //clusterAngle[i] = (clusterAngle[i] + 180.0) % 180.0;
             clusterAngle[i] = (Math.toDegrees(Math.atan2(position[1], position[0] - originX)) + 180.0) % 180.0;
@@ -502,7 +503,7 @@
      * be calculated.
      * @return Returns the cut value.
      */
-    private double getValueEnergyDifference(HPSEcalCluster[] clusterPair) {
+    private double getValueEnergyDifference(Cluster[] clusterPair) {
     	return clusterPair[0].getEnergy() - clusterPair[1].getEnergy();
     }
     
@@ -513,7 +514,7 @@
      * be calculated.
      * @return Returns the cut value.
      */
-    private double getValueEnergySlope(HPSEcalCluster[] clusterPair) {
+    private double getValueEnergySlope(Cluster[] clusterPair) {
     	// E + R*F
     	// Get the low energy cluster energy.
     	double slopeParamE = clusterPair[1].getEnergy();
@@ -532,7 +533,7 @@
      * be calculated.
      * @return Returns the cut value.
      */
-    private double getValueEnergySum(HPSEcalCluster[] clusterPair) {
+    private double getValueEnergySum(Cluster[] clusterPair) {
     	return clusterPair[0].getEnergy() + clusterPair[1].getEnergy();
     }
     
@@ -544,7 +545,7 @@
      * @return Returns <code>true</code> if the cluster pair passes
      * the cut and <code>false</code> if it does not.
      */
-    private boolean pairCoplanarityCut(HPSEcalCluster[] clusterPair) {
+    private boolean pairCoplanarityCut(Cluster[] clusterPair) {
         return (getValueCoplanarity(clusterPair) < coplanarityHigh);
     }
     
@@ -556,7 +557,7 @@
      * @return Returns <code>true</code> if the cluster pair passes
      * the cut and <code>false</code> if it does not.
      */
-    private boolean pairEnergyDifferenceCut(HPSEcalCluster[] clusterPair) {
+    private boolean pairEnergyDifferenceCut(Cluster[] clusterPair) {
         return (getValueEnergyDifference(clusterPair) < energyDifferenceHigh);
     }
     
@@ -568,7 +569,7 @@
      * @param clusterPair : pair of clusters
      * @return true if pair is found, false otherwise
      */
-    private boolean pairEnergySlopeCut(HPSEcalCluster[] clusterPair) {
+    private boolean pairEnergySlopeCut(Cluster[] clusterPair) {
     	return (getValueEnergySlope(clusterPair) > energySlopeLow);
     }
     
@@ -580,7 +581,7 @@
      * @return Returns <code>true</code> if the cluster pair passes
      * the cut and <code>false</code> if it does not.
      */
-    private boolean pairEnergySumCut(HPSEcalCluster[] clusterPair) {
+    private boolean pairEnergySumCut(Cluster[] clusterPair) {
     	// Get the energy sum value.
     	double energySum = getValueEnergySum(clusterPair);
     	
@@ -701,13 +702,13 @@
 	 */
     private boolean testTrigger() {
     	// Get the list of cluster pairs.
-    	List<HPSEcalCluster[]> clusterPairs = getClusterPairsTopBot();
+    	List<Cluster[]> clusterPairs = getClusterPairsTopBot();
         
         // Iterate over the cluster pairs and perform each of the cluster
         // pair cuts on them. A cluster pair that passes all of the
         // cuts registers as a trigger.
     	pairLoop:
-        for (HPSEcalCluster[] clusterPair : clusterPairs) {
+        for (Cluster[] clusterPair : clusterPairs) {
     		// Increment the number of processed cluster pairs.
     		allPairs++;
     		
@@ -759,16 +760,16 @@
      * 
      * @param clusterList - The clusters to add to the queues.
      */
-    private void updateClusterQueues(List<HPSEcalCluster> clusterList) {
+    private void updateClusterQueues(List<Cluster> clusterList) {
     	// Create lists to store the top and bottom clusters.
-        ArrayList<HPSEcalCluster> topClusterList = new ArrayList<HPSEcalCluster>();
-        ArrayList<HPSEcalCluster> botClusterList = new ArrayList<HPSEcalCluster>();
+        ArrayList<Cluster> topClusterList = new ArrayList<Cluster>();
+        ArrayList<Cluster> botClusterList = new ArrayList<Cluster>();
         
         // Loop over the clusters in the cluster list.
-        for (HPSEcalCluster cluster : clusterList) {
+        for (Cluster cluster : clusterList) {
         	// If the cluster is on the top of the calorimeter, it
         	// goes into the top cluster list.
-            if (cluster.getSeedHit().getIdentifierFieldValue("iy") > 0) {
+            if (cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy") > 0) {
                 topClusterList.add(cluster);
             }
             

Modified: java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger.java	Tue Jan  6 12:54:22 2015
@@ -3,8 +3,7 @@
 import java.util.List;
 
 import org.hps.readout.ecal.TriggerDriver;
-import org.hps.recon.ecal.HPSEcalCluster;
-
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 
 /**
@@ -72,18 +71,18 @@
 	 */
 	@Override
 	public void process(EventHeader event) {
-		if(event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+		if(event.hasCollection(Cluster.class, clusterCollectionName)) {
 			// Get the list of clusters from the event.
-			List<HPSEcalCluster> clusterList = event.get(HPSEcalCluster.class, clusterCollectionName);
+			List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
 			
 			// Loop over the clusters and check for any that pass the threshold.
-			for(HPSEcalCluster cluster : clusterList) {
+			for(Cluster cluster : clusterList) {
 				// Check if the current cluster exceeds the energy
 				// threshold. If it does not, continue to the next
 				// cluster in the list.
 				if(cluster.getEnergy() > energyThreshold) {
 					// Get the x-index of the seed hit.
-					int ix = cluster.getSeedHit().getIdentifierFieldValue("ix");
+					int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
 					
 					// Determine in which region the cluster is located
 					// and increment the counter for that region. Zones
@@ -171,7 +170,7 @@
 	protected boolean triggerDecision(EventHeader event) {
 		// Check if the event has clusters. An event with no clusters
 		// should never result in a trigger.
-		if(event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+		if(event.hasCollection(Cluster.class, clusterCollectionName)) {
 			// Check if any of the zone counts are high enough to trigger.
 			return triggerTest();
 		}

Modified: java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger2.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger2.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger2.java	Tue Jan  6 12:54:22 2015
@@ -3,8 +3,7 @@
 import java.util.List;
 
 import org.hps.readout.ecal.TriggerDriver;
-import org.hps.recon.ecal.HPSEcalCluster;
-
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 
 /**
@@ -73,18 +72,18 @@
 	 */
 	@Override
 	public void process(EventHeader event) {
-		if(event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+		if(event.hasCollection(Cluster.class, clusterCollectionName)) {
 			// Get the list of clusters from the event.
-			List<HPSEcalCluster> clusterList = event.get(HPSEcalCluster.class, clusterCollectionName);
+			List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
 			
 			// Loop over the clusters and check for any that pass the threshold.
-			for(HPSEcalCluster cluster : clusterList) {
+			for(Cluster cluster : clusterList) {
 				// Check if the current cluster exceeds the energy
 				// threshold. If it does not, continue to the next
 				// cluster in the list.
 				if(cluster.getEnergy() > energyThreshold) {
 					// Get the x-index of the seed hit.
-					int ix = cluster.getSeedHit().getIdentifierFieldValue("ix");
+					int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
 					
 					// Determine in which region the cluster is located
 					// and increment the counter for that region. Zones
@@ -115,7 +114,7 @@
 	protected boolean triggerDecision(EventHeader event) {
 		// Check if the event has clusters. An event with no clusters
 		// should never result in a trigger.
-		if(event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+		if(event.hasCollection(Cluster.class, clusterCollectionName)) {
 			// Check if any of the zone counts are high enough to trigger.
 			return triggerTest();
 		}

Modified: java/trunk/users/src/main/java/org/hps/users/luca/FeeTriggerAna.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/FeeTriggerAna.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/FeeTriggerAna.java	Tue Jan  6 12:54:22 2015
@@ -5,30 +5,17 @@
  */
 
 package org.hps.users.luca;
-import hep.aida.IHistogram1D;
-import hep.aida.IHistogram2D;
+import java.io.FileWriter;
 import java.io.IOException;
-import java.util.*;
-import java.io.PrintWriter;
 import java.util.ArrayList;
-import java.util.EnumSet;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Queue;
-import org.hps.readout.ecal.ClockSingleton;
+
 import org.hps.readout.ecal.TriggerDriver;
-
-import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
-
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.lcsim.geometry.Detector;
-import org.lcsim.util.aida.AIDA;
 import org.lcsim.util.Driver;
-import hep.aida.*;
-
-import java.io.FileWriter;
-import org.lcsim.event.CalorimeterHit;
 
 
 /**
@@ -43,7 +30,7 @@
     int TotalCluster=0;
     double timeDifference;
     double energyThreshold=0;
-    private LinkedList<ArrayList<HPSEcalCluster>> clusterBuffer;
+    private LinkedList<ArrayList<Cluster>> clusterBuffer;
     protected String clusterCollectionName = "EcalClusters";
     
  //AIDA aida = AIDA.defaultInstance();
@@ -91,12 +78,12 @@
 public void startOfData(){
 
     //initialize the clusterbuffer
-    clusterBuffer= new LinkedList<ArrayList<HPSEcalCluster>>();
+    clusterBuffer= new LinkedList<ArrayList<Cluster>>();
  //populate the clusterbuffer with (2*clusterWindow + 1)
  // empty events, representing the fact that the first few events will not have any events in the past portion of the buffer
     int bufferSize=(2*clusterWindow)+1;
     for(int i = 0;i<bufferSize; i++){
-    clusterBuffer.add(new ArrayList<HPSEcalCluster>(0));
+    clusterBuffer.add(new ArrayList<Cluster>(0));
     }
     
     
@@ -155,21 +142,21 @@
      //get the clusters from the event
     if(TriggerDriver.triggerBit()){ //if they have triggered!
       
-     if(event.hasCollection(HPSEcalCluster.class, "EcalClusters")) {
+     if(event.hasCollection(Cluster.class, "EcalClusters")) {
          
-        List<HPSEcalCluster> clusterList =event.get(HPSEcalCluster.class,clusterCollectionName );    
+        List<Cluster> clusterList =event.get(Cluster.class,clusterCollectionName );    
              
      //put the clusters in the arraylist
      
-     ArrayList<HPSEcalCluster> clusterSet = new ArrayList<HPSEcalCluster>(); 
-     for(HPSEcalCluster cluster : clusterList){
+     ArrayList<Cluster> clusterSet = new ArrayList<Cluster>(); 
+     for(Cluster cluster : clusterList){
       //   clusterEne.fill(cluster.getEnergy());
          TotalCluster++;
         // clusterSet.add(cluster);
      int id;
      id=getCrystal(cluster);
      try{
-      writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getSeedHit().getRawEnergy() + " " + cluster.getSeedHit().getIdentifierFieldValue("ix")+" " +cluster.getSeedHit().getIdentifierFieldValue("iy"));
+      writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getCalorimeterHits().get(0).getRawEnergy() + " " + cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")+" " +cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
      /*for(CalorimeterHit hit : cluster.getCalorimeterHits())
      {writer.append(hit.getRawEnergy()+ " ");
        }*/
@@ -199,7 +186,7 @@
   */
  public void ClusterAnalyzer(){
  //get the cluster list at the current time in the buffer
-ArrayList<HPSEcalCluster> currentClusters = clusterBuffer.get(clusterWindow+1);
+ArrayList<Cluster> currentClusters = clusterBuffer.get(clusterWindow+1);
 
 
  ///cerca i cluster nella posizione che ci interessa poi chiama la funzione che decide se sono "isolati"
@@ -210,20 +197,20 @@
       posy=y;
          
          //ciclo for nel set di currentCluster, ovvero il set nel mezzo del buffer
-    for(HPSEcalCluster cluster : currentClusters){ 
-    if((cluster.getSeedHit().getIdentifierFieldValue("ix")== posx) && (cluster.getSeedHit().getIdentifierFieldValue("iy")==posy )&& (cluster.getEnergy() > energyThreshold)){
+    for(Cluster cluster : currentClusters){ 
+    if((cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")== posx) && (cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")==posy )&& (cluster.getEnergy() > energyThreshold)){
         
            if(ClusterChecker(cluster)){
             int id;
             Clustercount++;
            id=getCrystal(cluster);
            try{
-     writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getSeedHit().getRawEnergy() + " " + cluster.getSeedHit().getIdentifierFieldValue("ix")+" " +cluster.getSeedHit().getIdentifierFieldValue("iy"));
+     writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getCalorimeterHits().get(0).getRawEnergy() + " " + cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")+" " +cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
      /*for(CalorimeterHit hit : cluster.getCalorimeterHits())
      {writer.append(hit.getRawEnergy()+ " ");
        }*/
      writer.append("\n");
-  //  SeedHistograms.get(id-1).fill(cluster.getSeedHit().getRawEnergy());
+  //  SeedHistograms.get(id-1).fill(cluster.getCalorimeterHits().get(0).getRawEnergy());
   //   ClustHistograms.get(id-1).fill(cluster.getEnergy());
      }
      
@@ -251,19 +238,19 @@
   * @return 
   */
  
-public boolean ClusterChecker (HPSEcalCluster cluster){
+public boolean ClusterChecker (Cluster cluster){
 //System.out.println("Sono nel clustercheck! \n");
     
 boolean check=true;
   
     //ciclo sulle liste del buffer
 loops:
-     for(ArrayList<HPSEcalCluster> currentList : clusterBuffer){
+     for(ArrayList<Cluster> currentList : clusterBuffer){
      //ciclo sui cluster della lista corrente
-         for(HPSEcalCluster currentcluster : currentList){
+         for(Cluster currentcluster : currentList){
            if(currentcluster!= cluster){
              //if there is a cluster in the buffer that is in the considered radius in a time window lower than expected, the loop is brocken and the analyzed cluster is not good
-         if(!((currentcluster.getSeedHit().getIdentifierFieldValue("ix") < posx-radius || currentcluster.getSeedHit().getIdentifierFieldValue("ix")> posx+radius)&& (currentcluster.getSeedHit().getIdentifierFieldValue("iy")< posy-radius || currentcluster.getSeedHit().getIdentifierFieldValue("iy")> posy+radius))&& Math.abs(cluster.getSeedHit().getTime()-currentcluster.getSeedHit().getTime())<timeDifference){
+         if(!((currentcluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix") < posx-radius || currentcluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")> posx+radius)&& (currentcluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")< posy-radius || currentcluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")> posy+radius))&& Math.abs(cluster.getCalorimeterHits().get(0).getTime()-currentcluster.getCalorimeterHits().get(0).getTime())<timeDifference){
          check=false;
          break loops;
          }
@@ -284,10 +271,10 @@
       
  
  
- public int getCrystal (HPSEcalCluster cluster){
+ public int getCrystal (Cluster cluster){
  int x,y,id=0;
- x= (-1)*cluster.getSeedHit().getIdentifierFieldValue("ix");
- y= cluster.getSeedHit().getIdentifierFieldValue("iy");
+ x= (-1)*cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ y= cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
  
  if(y==5){
  if(x<0)

Modified: java/trunk/users/src/main/java/org/hps/users/luca/HitSeedHitConf.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/HitSeedHitConf.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/HitSeedHitConf.java	Tue Jan  6 12:54:22 2015
@@ -5,31 +5,14 @@
  */
 
 package org.hps.users.luca;
-import hep.aida.IHistogram1D;
-import hep.aida.IHistogram2D;
+import java.io.FileWriter;
 import java.io.IOException;
-import java.util.*;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.LinkedList;
 import java.util.List;
-import java.util.Queue;
-import org.hps.readout.ecal.ClockSingleton;
-import org.hps.readout.ecal.TriggerDriver;
-
-import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
+
+import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.lcsim.geometry.Detector;
-import org.lcsim.util.aida.AIDA;
 import org.lcsim.util.Driver;
-import hep.aida.*;
-import hep.aida.IHistogram3D;
-import java.io.FileWriter;
-import org.lcsim.event.CalorimeterHit;
-import org.lcsim.event.MCParticle;
 
 /**
  * 
@@ -105,13 +88,13 @@
            
      
      //get the clusters from the event
-     if(event.hasCollection(HPSEcalCluster.class, "EcalClusters")) {
-        List<HPSEcalCluster> clusterList =event.get(HPSEcalCluster.class,clusterCollectionName );    
-           for(HPSEcalCluster cluster : clusterList){
+     if(event.hasCollection(Cluster.class, "EcalClusters")) {
+        List<Cluster> clusterList =event.get(Cluster.class,clusterCollectionName );    
+           for(Cluster cluster : clusterList){
            if(cluster.getEnergy()>1.5){
            int id=getCrystal(cluster);
            try{
-               writer.append(id + " " + cluster.getSeedHit().getRawEnergy() + " " + cluster.getEnergy()+"\n");
+               writer.append(id + " " + cluster.getCalorimeterHits().get(0).getRawEnergy() + " " + cluster.getEnergy()+"\n");
            }
            catch(IOException e ){System.err.println("Error writing to output for event display");}   
            
@@ -144,10 +127,10 @@
       
  
  
-public int getCrystal (HPSEcalCluster cluster){
+public int getCrystal (Cluster cluster){
  int x,y,id=0;
- x= (-1)*cluster.getSeedHit().getIdentifierFieldValue("ix");
- y= cluster.getSeedHit().getIdentifierFieldValue("iy");
+ x= (-1)*cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ y= cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
  
  if(y==5){
  if(x<0)

Modified: java/trunk/users/src/main/java/org/hps/users/luca/PositronAna.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/PositronAna.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/PositronAna.java	Tue Jan  6 12:54:22 2015
@@ -6,32 +6,17 @@
 
 package org.hps.users.luca;
 import hep.aida.IHistogram1D;
-import hep.aida.IHistogram2D;
+
+import java.io.FileWriter;
 import java.io.IOException;
-import java.util.*;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.LinkedList;
 import java.util.List;
-import java.util.Queue;
-import org.hps.readout.ecal.ClockSingleton;
-import org.hps.readout.ecal.TriggerDriver;
-
-import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
+
+import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.lcsim.geometry.Detector;
+import org.lcsim.event.ReconstructedParticle;
+import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
-import org.lcsim.util.Driver;
-import hep.aida.*;
-import hep.aida.IHistogram3D;
-import java.io.FileWriter;
-import org.lcsim.event.ReconstructedParticle;
-import org.lcsim.event.CalorimeterHit;
-import org.lcsim.event.MCParticle;
-import org.hps.recon.particle.HpsReconParticleDriver;
 /**
  *
  * @author Luca
@@ -111,7 +96,7 @@
       cluscount++;
           int id=getCrystal(cluster);
           try{
-          writer.append(id + " " + cluster.getEnergy() + " " + cluster.getSize() + " " + HPSEcalCluster.getSeedHit(cluster).getCorrectedEnergy() + " " + HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("ix")+" " +HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("iy")+ "\n");
+          writer.append(id + " " + cluster.getEnergy() + " " + cluster.getSize() + " " + cluster.getCalorimeterHits().get(0).getCorrectedEnergy() + " " + cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")+" " +cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")+ "\n");
           }
           
         catch(IOException e ){System.err.println("Error writing to output for event display");} 
@@ -131,8 +116,8 @@
    
  public int getCrystal (Cluster cluster){
  int x,y,id=0;
- x= (-1)*HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("ix");
- y= HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("iy");
+ x= (-1)*cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ y= cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
  
  if(y==5){
  if(x<0)

Modified: java/trunk/users/src/main/java/org/hps/users/luca/RawDataReader.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/RawDataReader.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/RawDataReader.java	Tue Jan  6 12:54:22 2015
@@ -8,17 +8,13 @@
 
 import java.io.FileWriter;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.List;
-import org.hps.recon.ecal.HPSRawCalorimeterHit;
+
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.RawCalorimeterHit;
+import org.lcsim.geometry.IDDecoder;
 import org.lcsim.util.Driver;
-import org.lcsim.lcio.LCIOConstants;
-import java.io.PrintWriter;
-import org.lcsim.geometry.IDDecoder;
-import org.lcsim.event.CalorimeterHit;
 
 /**
  *

Modified: java/trunk/users/src/main/java/org/hps/users/luca/ReconData.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/ReconData.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/ReconData.java	Tue Jan  6 12:54:22 2015
@@ -6,30 +6,18 @@
 
 package org.hps.users.luca;
 import hep.aida.IHistogram1D;
-import hep.aida.IHistogram2D;
+
+import java.io.FileWriter;
 import java.io.IOException;
-import java.util.*;
-import java.io.PrintWriter;
 import java.util.ArrayList;
-import java.util.EnumSet;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Queue;
-import org.hps.readout.ecal.ClockSingleton;
-import org.hps.readout.ecal.TriggerDriver;
-
-import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
+
+import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.lcsim.geometry.Detector;
+import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
-import org.lcsim.util.Driver;
-import hep.aida.*;
-import hep.aida.IHistogram3D;
-import java.io.FileWriter;
-import org.lcsim.event.CalorimeterHit;
-import org.lcsim.event.MCParticle;
 
 /**
  * 
@@ -199,19 +187,19 @@
          
          //ciclo for nel set di currentCluster, ovvero il set nel mezzo del buffer
     for(Cluster cluster : currentClusters){ 
-    if((HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("ix")== posx) && (HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("iy")==posy )&& (cluster.getEnergy() > energyThreshold)){
+    if((cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")== posx) && (cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")==posy )&& (cluster.getEnergy() > energyThreshold)){
         
            if(ClusterChecker(cluster)){
             int id;
             Clustercount++;
            id=getCrystal(cluster);
            try{
-     writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + HPSEcalCluster.getSeedHit(cluster).getCorrectedEnergy() + " " + HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("ix")+" " +HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("iy"));
+     writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getCalorimeterHits().get(0).getCorrectedEnergy() + " " + cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")+" " +cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
      /*for(CalorimeterHit hit : cluster.getCalorimeterHits())
      {writer.append(hit.getRawEnergy()+ " ");
        }*/
      writer.append("\n");
-     SeedHistograms.get(id-1).fill(HPSEcalCluster.getSeedHit(cluster).getCorrectedEnergy());
+     SeedHistograms.get(id-1).fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
      ClustHistograms.get(id-1).fill(cluster.getEnergy());
     
      }
@@ -252,7 +240,7 @@
          for(Cluster currentcluster : currentList){
            if(currentcluster!= cluster){
              //if there is a cluster in the buffer that is in the considered radius in a time window lower than expected, the loop is brocken and the analyzed cluster is not good
-         if(!((HPSEcalCluster.getSeedHit(currentcluster).getIdentifierFieldValue("ix") < posx-radius || HPSEcalCluster.getSeedHit(currentcluster).getIdentifierFieldValue("ix")> posx+radius)&& (HPSEcalCluster.getSeedHit(currentcluster).getIdentifierFieldValue("iy")< posy-radius || HPSEcalCluster.getSeedHit(currentcluster).getIdentifierFieldValue("iy")> posy+radius))&& Math.abs(HPSEcalCluster.getSeedHit(cluster).getTime()-HPSEcalCluster.getSeedHit(currentcluster).getTime())<timeDifference){
+         if(!((cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix") < posx-radius || cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")> posx+radius)&& (cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")< posy-radius || cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")> posy+radius))&& Math.abs(cluster.getCalorimeterHits().get(0).getTime()-cluster.getCalorimeterHits().get(0).getTime())<timeDifference){
          check=false;
          break loops;
          }
@@ -275,8 +263,8 @@
  
  public int getCrystal (Cluster cluster){
  int x,y,id=0;
- x= (-1)*HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("ix");
- y= HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("iy");
+ x= (-1)*cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ y= cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
  
  if(y==5){
  if(x<0)

Modified: java/trunk/users/src/main/java/org/hps/users/luca/ReconDataPos.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/ReconDataPos.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/ReconDataPos.java	Tue Jan  6 12:54:22 2015
@@ -6,30 +6,19 @@
 
 package org.hps.users.luca;
 import hep.aida.IHistogram1D;
-import hep.aida.IHistogram2D;
+
+import java.io.FileWriter;
 import java.io.IOException;
-import java.util.*;
-import java.io.PrintWriter;
 import java.util.ArrayList;
-import java.util.EnumSet;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Queue;
-
-
-import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
+
+import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.lcsim.geometry.Detector;
+import org.lcsim.event.ReconstructedParticle;
+import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
-import org.lcsim.util.Driver;
-import hep.aida.*;
-import hep.aida.IHistogram3D;
-import java.io.FileWriter;
-import org.lcsim.event.CalorimeterHit;
-import org.lcsim.event.MCParticle;
-import org.lcsim.event.ReconstructedParticle;
 
 /**
  * 
@@ -171,7 +160,7 @@
       
           int id=getCrystal(cluster);
           try{
-          writer.append(id + " " + cluster.getEnergy() + " " + cluster.getSize() + " " + HPSEcalCluster.getSeedHit(cluster).getCorrectedEnergy() + " " + HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("ix")+" " +HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("iy")+ "\n");
+          writer.append(id + " " + cluster.getEnergy() + " " + cluster.getSize() + " " + cluster.getCalorimeterHits().get(0).getCorrectedEnergy() + " " + cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")+" " +cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")+ "\n");
           }
           
         catch(IOException e ){System.err.println("Error writing to output for event display");} 
@@ -237,19 +226,19 @@
          
          //ciclo for nel set di currentCluster, ovvero il set nel mezzo del buffer
     for(Cluster cluster : currentClusters){ 
-    if((HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("ix")== posx) && (HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("iy")==posy )){
+    if((cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")== posx) && (cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")==posy )){
         
            if(ClusterChecker(cluster)){
             int id;
             Clustercount++;
            id=getCrystal(cluster);
            try{
-     writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + HPSEcalCluster.getSeedHit(cluster).getCorrectedEnergy() + " " + HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("ix")+" " +HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("iy"));
+     writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getCalorimeterHits().get(0).getCorrectedEnergy() + " " + cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")+" " +cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
      /*for(CalorimeterHit hit : cluster.getCalorimeterHits())
      {writer.append(hit.getRawEnergy()+ " ");
        }*/
      writer.append("\n");
-     SeedHistograms.get(id-1).fill(HPSEcalCluster.getSeedHit(cluster).getCorrectedEnergy());
+     SeedHistograms.get(id-1).fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
      ClustHistograms.get(id-1).fill(cluster.getEnergy());
     
      }
@@ -290,7 +279,7 @@
          for(Cluster currentcluster : currentList){
            if(currentcluster!= cluster){
              //if there is a cluster in the buffer that is in the considered radius in a time window lower than expected, the loop is brocken and the analyzed cluster is not good
-         if(!((HPSEcalCluster.getSeedHit(currentcluster).getIdentifierFieldValue("ix") < posx-radius || HPSEcalCluster.getSeedHit(currentcluster).getIdentifierFieldValue("ix")> posx+radius)&& (HPSEcalCluster.getSeedHit(currentcluster).getIdentifierFieldValue("iy")< posy-radius || HPSEcalCluster.getSeedHit(currentcluster).getIdentifierFieldValue("iy")> posy+radius))&& Math.abs(HPSEcalCluster.getSeedHit(cluster).getTime()-HPSEcalCluster.getSeedHit(currentcluster).getTime())<timeDifference){
+         if(!((cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix") < posx-radius || cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")> posx+radius)&& (cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")< posy-radius || cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")> posy+radius))&& Math.abs(cluster.getCalorimeterHits().get(0).getTime()-cluster.getCalorimeterHits().get(0).getTime())<timeDifference){
          check=false;
          break loops;
          }
@@ -313,8 +302,8 @@
  
  public int getCrystal (Cluster cluster){
  int x,y,id=0;
- x= (-1)*HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("ix");
- y= HPSEcalCluster.getSeedHit(cluster).getIdentifierFieldValue("iy");
+ x= (-1)*cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ y= cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
  
  if(y==5){
  if(x<0)

Modified: java/trunk/users/src/main/java/org/hps/users/luca/TriggerAna.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/TriggerAna.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/TriggerAna.java	Tue Jan  6 12:54:22 2015
@@ -5,30 +5,17 @@
  */
 
 package org.hps.users.luca;
-import hep.aida.IHistogram1D;
-import hep.aida.IHistogram2D;
+import java.io.FileWriter;
 import java.io.IOException;
-import java.util.*;
-import java.io.PrintWriter;
 import java.util.ArrayList;
-import java.util.EnumSet;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Queue;
-import org.hps.readout.ecal.ClockSingleton;
+
 import org.hps.readout.ecal.TriggerDriver;
-
-import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
-
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.lcsim.geometry.Detector;
-import org.lcsim.util.aida.AIDA;
 import org.lcsim.util.Driver;
-import hep.aida.*;
-
-import java.io.FileWriter;
-import org.lcsim.event.CalorimeterHit;
 
 
 /**
@@ -43,7 +30,7 @@
     int TotalCluster=0;
     double timeDifference;
     double energyThreshold=0;
-    private LinkedList<ArrayList<HPSEcalCluster>> clusterBuffer;
+    private LinkedList<ArrayList<Cluster>> clusterBuffer;
     protected String clusterCollectionName = "EcalClusters";
     
  //AIDA aida = AIDA.defaultInstance();
@@ -91,12 +78,12 @@
 public void startOfData(){
 
     //initialize the clusterbuffer
-    clusterBuffer= new LinkedList<ArrayList<HPSEcalCluster>>();
+    clusterBuffer= new LinkedList<ArrayList<Cluster>>();
  //populate the clusterbuffer with (2*clusterWindow + 1)
  // empty events, representing the fact that the first few events will not have any events in the past portion of the buffer
     int bufferSize=(2*clusterWindow)+1;
     for(int i = 0;i<bufferSize; i++){
-    clusterBuffer.add(new ArrayList<HPSEcalCluster>(0));
+    clusterBuffer.add(new ArrayList<Cluster>(0));
     }
     
     
@@ -140,14 +127,14 @@
  @Override  
  public void process (EventHeader event){
    
-         /* if(event.hasCollection(HPSEcalCluster.class, "EcalClusters")) {
-        List<HPSEcalCluster> clusterList =event.get(HPSEcalCluster.class,clusterCollectionName );   
-            for(HPSEcalCluster cluster : clusterList){
+         /* if(event.hasCollection(Cluster.class, "EcalClusters")) {
+        List<Cluster> clusterList =event.get(Cluster.class,clusterCollectionName );   
+            for(Cluster cluster : clusterList){
                 
                 if(cluster.getEnergy()>energyThreshold){
                  int idd=getCrystal(cluster); 
                     try{
-                        writer3.append(idd + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getSeedHit().getRawEnergy() + " " + cluster.getSeedHit().getIdentifierFieldValue("ix")+" " +cluster.getSeedHit().getIdentifierFieldValue("iy")+"\n");
+                        writer3.append(idd + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getCalorimeterHits().get(0).getRawEnergy() + " " + cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")+" " +cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")+"\n");
                         }
                     catch(IOException e ){System.err.println("Error writing to output for event display");} 
                  }
@@ -158,20 +145,20 @@
      
      //get the clusters from the event IF they are triggered
     if(TriggerDriver.triggerBit()){
-     if(event.hasCollection(HPSEcalCluster.class, "EcalClusters")) {
-        List<HPSEcalCluster> clusterList =event.get(HPSEcalCluster.class,clusterCollectionName );    
+     if(event.hasCollection(Cluster.class, "EcalClusters")) {
+        List<Cluster> clusterList =event.get(Cluster.class,clusterCollectionName );    
              
      //put the clusters in the arraylist
      
      
-     for(HPSEcalCluster cluster : clusterList){
+     for(Cluster cluster : clusterList){
         // clusterEne.fill(cluster.getEnergy());
          TotalCluster++;
         int id;
             Clustercount++;
            id=getCrystal(cluster);
            try{
-     writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getSeedHit().getRawEnergy() + " " + cluster.getSeedHit().getIdentifierFieldValue("ix")+" " +cluster.getSeedHit().getIdentifierFieldValue("iy"));
+     writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getCalorimeterHits().get(0).getRawEnergy() + " " + cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")+" " +cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
      /*for(CalorimeterHit hit : cluster.getCalorimeterHits())
      {writer.append(hit.getRawEnergy()+ " ");
        }*/
@@ -191,10 +178,10 @@
 }
  
  
- public int getCrystal (HPSEcalCluster cluster){
+ public int getCrystal (Cluster cluster){
  int x,y,id=0;
- x= (-1)*cluster.getSeedHit().getIdentifierFieldValue("ix");
- y= cluster.getSeedHit().getIdentifierFieldValue("iy");
+ x= (-1)*cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ y= cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
  
  if(y==5){
  if(x<0)

Modified: java/trunk/users/src/main/java/org/hps/users/luca/TriggerAnaFEE.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/TriggerAnaFEE.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/TriggerAnaFEE.java	Tue Jan  6 12:54:22 2015
@@ -5,30 +5,17 @@
  */
 
 package org.hps.users.luca;
-import hep.aida.IHistogram1D;
-import hep.aida.IHistogram2D;
+import java.io.FileWriter;
 import java.io.IOException;
-import java.util.*;
-import java.io.PrintWriter;
 import java.util.ArrayList;
-import java.util.EnumSet;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Queue;
-import org.hps.readout.ecal.ClockSingleton;
+
 import org.hps.readout.ecal.TriggerDriver;
-
-import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
-
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.lcsim.geometry.Detector;
-import org.lcsim.util.aida.AIDA;
 import org.lcsim.util.Driver;
-import hep.aida.*;
-
-import java.io.FileWriter;
-import org.lcsim.event.CalorimeterHit;
 
 
 /**
@@ -43,7 +30,7 @@
     int TotalCluster=0;
     double timeDifference;
     double energyThreshold=0;
-    private LinkedList<ArrayList<HPSEcalCluster>> clusterBuffer;
+    private LinkedList<ArrayList<Cluster>> clusterBuffer;
     protected String clusterCollectionName = "EcalClusters";
     
  //AIDA aida = AIDA.defaultInstance();
@@ -88,12 +75,12 @@
 public void startOfData(){
 
     //initialize the clusterbuffer
-    clusterBuffer= new LinkedList<ArrayList<HPSEcalCluster>>();
+    clusterBuffer= new LinkedList<ArrayList<Cluster>>();
  //populate the clusterbuffer with (2*clusterWindow + 1)
  // empty events, representing the fact that the first few events will not have any events in the past portion of the buffer
     int bufferSize=(2*clusterWindow)+1;
     for(int i = 0;i<bufferSize; i++){
-    clusterBuffer.add(new ArrayList<HPSEcalCluster>(0));
+    clusterBuffer.add(new ArrayList<Cluster>(0));
     }
     
     
@@ -141,20 +128,20 @@
      
      //get the clusters from the event IF they are triggered
     if(TriggerDriver.triggerBit()){
-     if(event.hasCollection(HPSEcalCluster.class, "EcalClusters")) {
-        List<HPSEcalCluster> clusterList =event.get(HPSEcalCluster.class,clusterCollectionName );    
+     if(event.hasCollection(Cluster.class, "EcalClusters")) {
+        List<Cluster> clusterList =event.get(Cluster.class,clusterCollectionName );    
              
     
      
     
-     for(HPSEcalCluster cluster : clusterList){
+     for(Cluster cluster : clusterList){
         // clusterEne.fill(cluster.getEnergy());
          TotalCluster++;
         int id;
             Clustercount++;
            id=getCrystal(cluster);
            try{
-     writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getSeedHit().getRawEnergy() + " " + cluster.getSeedHit().getIdentifierFieldValue("ix")+" " +cluster.getSeedHit().getIdentifierFieldValue("iy"));
+     writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getCalorimeterHits().get(0).getRawEnergy() + " " + cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")+" " +cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
      /*for(CalorimeterHit hit : cluster.getCalorimeterHits())
      {writer.append(hit.getRawEnergy()+ " ");
        }*/
@@ -180,10 +167,10 @@
       
  
  
- public int getCrystal (HPSEcalCluster cluster){
+ public int getCrystal (Cluster cluster){
  int x,y,id=0;
- x= (-1)*cluster.getSeedHit().getIdentifierFieldValue("ix");
- y= cluster.getSeedHit().getIdentifierFieldValue("iy");
+ x= (-1)*cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ y= cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
  
  if(y==5){
  if(x<0)

Modified: java/trunk/users/src/main/java/org/hps/users/luca/TriggerTest.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/TriggerTest.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/TriggerTest.java	Tue Jan  6 12:54:22 2015
@@ -3,11 +3,13 @@
 
 //import hep.aida.ITupleColumn.String;
 import hep.aida.IHistogram1D;
-import org.lcsim.util.aida.AIDA;
+
 import java.util.List;
+
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.MCParticle;
 import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
 
 
 // the class has to be derived from the driver class

Modified: java/trunk/users/src/main/java/org/hps/users/luca/TruthReader.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/TruthReader.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/TruthReader.java	Tue Jan  6 12:54:22 2015
@@ -6,29 +6,15 @@
 
 package org.hps.users.luca;
 import hep.aida.IHistogram1D;
-import hep.aida.IHistogram2D;
-import java.io.IOException;
-import java.util.*;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Queue;
-import org.hps.readout.ecal.ClockSingleton;
-import org.hps.readout.ecal.TriggerDriver;
-
-import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
-import org.lcsim.event.SimCalorimeterHit; 
-import org.lcsim.event.EventHeader;
-import org.lcsim.geometry.Detector;
-import org.lcsim.util.aida.AIDA;
-import org.lcsim.util.Driver;
-import hep.aida.*;
 
 import java.io.FileWriter;
-import org.lcsim.event.CalorimeterHit;
+import java.io.IOException;
+import java.util.List;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.SimCalorimeterHit;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
 /**
  * This driver is supposed to read the truth information out of a SLIC output about the energy deposition in a given crystal
  * @author Luca

Modified: java/trunk/users/src/main/java/org/hps/users/luca/myTriggerDriver.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/myTriggerDriver.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/myTriggerDriver.java	Tue Jan  6 12:54:22 2015
@@ -10,19 +10,18 @@
 
 import hep.aida.IHistogram1D;
 import hep.aida.IHistogram2D;
+
 import java.io.IOException;
-
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.EnumSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Queue;
+
 import org.hps.readout.ecal.ClockSingleton;
 import org.hps.readout.ecal.TriggerDriver;
-
 import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.geometry.Detector;
@@ -72,8 +71,8 @@
     protected String clusterCollectionName = "EcalClusters";
     // FIFO queues of lists of clusters in each ECal half.
     // Each list corresponds to one readout cycle.
-    private Queue<List<HPSEcalCluster>> topClusterQueue = null;
-    private Queue<List<HPSEcalCluster>> botClusterQueue = null;
+    private Queue<List<Cluster>> topClusterQueue = null;
+    private Queue<List<Cluster>> botClusterQueue = null;
     PrintWriter pairWriter;
 
     private enum Flag {
@@ -286,13 +285,13 @@
     @Override
     public void startOfData() {
         //initialize queues and fill with empty lists
-        topClusterQueue = new LinkedList<List<HPSEcalCluster>>();
-        botClusterQueue = new LinkedList<List<HPSEcalCluster>>();
+        topClusterQueue = new LinkedList<List<Cluster>>();
+        botClusterQueue = new LinkedList<List<Cluster>>();
         for (int i = 0; i < 2 * pairCoincidence + 1; i++) {
-            topClusterQueue.add(new ArrayList<HPSEcalCluster>());
+            topClusterQueue.add(new ArrayList<Cluster>());
         }
         for (int i = 0; i < pairCoincidence + 1; i++) {
-            botClusterQueue.add(new ArrayList<HPSEcalCluster>());
+            botClusterQueue.add(new ArrayList<Cluster>());
         }
         super.startOfData();
         if (clusterCollectionName == null) {
@@ -310,19 +309,19 @@
 
     @Override
     public void process(EventHeader event) {
-        if (event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+        if (event.hasCollection(Cluster.class, clusterCollectionName)) {
             // this needs to run every readout cycle whether or not trigger is live
-            updateClusterQueues(event.get(HPSEcalCluster.class, clusterCollectionName));
+            updateClusterQueues(event.get(Cluster.class, clusterCollectionName));
 
             if (pairWriter != null) {
-                List<HPSEcalCluster[]> clusterPairs = getClusterPairsTopBot();
-                for (HPSEcalCluster[] pair : clusterPairs) {
+                List<Cluster[]> clusterPairs = getClusterPairsTopBot();
+                for (Cluster[] pair : clusterPairs) {
                     pairWriter.format("%d\t", ClockSingleton.getClock());
-                    for (HPSEcalCluster cluster : pair) {
-                        pairWriter.format("%f\t", cluster.getSeedHit().getTime());
-                        pairWriter.format("%f\t", cluster.getSeedHit().getRawEnergy());
-                        pairWriter.format("%d\t", cluster.getSeedHit().getIdentifierFieldValue("ix"));
-                        pairWriter.format("%d\t", cluster.getSeedHit().getIdentifierFieldValue("iy"));
+                    for (Cluster cluster : pair) {
+                        pairWriter.format("%f\t", cluster.getCalorimeterHits().get(0).getTime());
+                        pairWriter.format("%f\t", cluster.getCalorimeterHits().get(0).getRawEnergy());
+                        pairWriter.format("%d\t", cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"));
+                        pairWriter.format("%d\t", cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
                         pairWriter.format("%d\t", cluster.getSize());
                         pairWriter.format("%f\t", cluster.getEnergy());
                         pairWriter.format("%f\t", getClusterAngle(cluster));
@@ -339,7 +338,7 @@
     @Override
     protected boolean triggerDecision(EventHeader event) {
         // Get the list of raw ECal hits.
-        if (event.hasCollection(HPSEcalCluster.class, clusterCollectionName)) {
+        if (event.hasCollection(Cluster.class, clusterCollectionName)) {
             return testTrigger();
         } else {
             return false;
@@ -349,22 +348,22 @@
     public boolean testTrigger() {
         boolean trigger = false;
 
-        List<HPSEcalCluster[]> clusterPairs = getClusterPairsTopBot();
+        List<Cluster[]> clusterPairs = getClusterPairsTopBot();
 
         //--- Apply Trigger Cuts ---//
 
         // Iterate through all cluster pairs present in the event.  If at least
         // one of the cluster pairs satisfies all of the trigger conditions,
         // a trigger signal is sent to all other detectors.
-        for (HPSEcalCluster[] clusterPair : clusterPairs) {
+        for (Cluster[] clusterPair : clusterPairs) {
 
             EnumSet<Flag> bits = EnumSet.noneOf(Flag.class);
 
             if (outputStream != null) {
                 outputStream.printf("Event %d: cluster pair (energy %f in quadrant %d (%s), energy %f in quadrant %d (%s))\n",
                         ClockSingleton.getClock(),
-                        clusterPair[0].getEnergy(), ECalUtils.getQuadrant(clusterPair[0]), clusterPair[0].getSeedHit().getPositionVec().toString(),
-                        clusterPair[1].getEnergy(), ECalUtils.getQuadrant(clusterPair[1]), clusterPair[1].getSeedHit().getPositionVec().toString());
+                        clusterPair[0].getEnergy(), ECalUtils.getQuadrant(clusterPair[0]), clusterPair[0].getCalorimeterHits().get(0).getPositionVec().toString(),
+                        clusterPair[1].getEnergy(), ECalUtils.getQuadrant(clusterPair[1]), clusterPair[1].getCalorimeterHits().get(0).getPositionVec().toString());
             }
 
             allPairs++;
@@ -477,9 +476,9 @@
                 }
                 trigger = true;
 
-                for (HPSEcalCluster cluster : clusterPair) {
-                    int ix = cluster.getSeedHit().getIdentifierFieldValue("ix");
-                    int iy = cluster.getSeedHit().getIdentifierFieldValue("iy");
+                for (Cluster cluster : clusterPair) {
+                    int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+                    int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
                     trigClusterSeeds.fill(ix - 0.5 * Math.signum(ix), iy);
                 }
             }
@@ -518,19 +517,19 @@
         writer.close();
     }
 
-    protected void updateClusterQueues(List<HPSEcalCluster> ecalClusters) {
-        ArrayList<HPSEcalCluster> topClusterList = new ArrayList<HPSEcalCluster>();
-        ArrayList<HPSEcalCluster> botClusterList = new ArrayList<HPSEcalCluster>();
-        for (HPSEcalCluster ecalCluster : ecalClusters) {
-//            System.out.format("add cluster\t%f\t%d\n", ecalCluster.getSeedHit().getTime(), ecalCluster.getSeedHit().getIdentifierFieldValue("iy"));
-            if (ecalCluster.getSeedHit().getIdentifierFieldValue("iy") > 0) {
+    protected void updateClusterQueues(List<Cluster> ecalClusters) {
+        ArrayList<Cluster> topClusterList = new ArrayList<Cluster>();
+        ArrayList<Cluster> botClusterList = new ArrayList<Cluster>();
+        for (Cluster ecalCluster : ecalClusters) {
+//            System.out.format("add cluster\t%f\t%d\n", ecalCluster.getCalorimeterHits().get(0).getTime(), ecalCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
+            if (ecalCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy") > 0) {
                 topClusterList.add(ecalCluster);
             } else {
                 botClusterList.add(ecalCluster);
             }
 
-            int ix = ecalCluster.getSeedHit().getIdentifierFieldValue("ix");
-            int iy = ecalCluster.getSeedHit().getIdentifierFieldValue("iy");
+            int ix = ecalCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+            int iy = ecalCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
             clusterSeeds.fill(ix - 0.5 * Math.signum(ix), iy);
         }
 
@@ -546,23 +545,23 @@
      * @param ecalClusters : List of ECal clusters
      * @return list of cluster pairs
      */
-    protected List<HPSEcalCluster[]> getClusterPairsTopBot() {
+    protected List<Cluster[]> getClusterPairsTopBot() {
         // Make a list of cluster pairs
-        List<HPSEcalCluster[]> clusterPairs = new ArrayList<HPSEcalCluster[]>();
+        List<Cluster[]> clusterPairs = new ArrayList<Cluster[]>();
 
         // Loop over all top-bottom pairs of clusters; higher-energy cluster goes first in the pair
         // To apply pair coincidence time, use only bottom clusters from the 
         // readout cycle pairCoincidence readout cycles ago, and top clusters 
         // from all 2*pairCoincidence+1 previous readout cycles
-        for (HPSEcalCluster botCluster : botClusterQueue.element()) {   /////da come capisco sembra un for su tutti i cluster solo della testa della queue..e gli altri?
-            for (List<HPSEcalCluster> topClusters : topClusterQueue) {
-                for (HPSEcalCluster topCluster : topClusters) {
-//                    System.out.format("%f\t%f\n", topCluster.getSeedHit().getTime(), botCluster.getSeedHit().getTime());
+        for (Cluster botCluster : botClusterQueue.element()) {   /////da come capisco sembra un for su tutti i cluster solo della testa della queue..e gli altri?
+            for (List<Cluster> topClusters : topClusterQueue) {
+                for (Cluster topCluster : topClusters) {
+//                    System.out.format("%f\t%f\n", topCluster.getCalorimeterHits().get(0).getTime(), botCluster.getCalorimeterHits().get(0).getTime());
                     if (topCluster.getEnergy() > botCluster.getEnergy()) {
-                        HPSEcalCluster[] clusterPair = {topCluster, botCluster};
+                        Cluster[] clusterPair = {topCluster, botCluster};
                         clusterPairs.add(clusterPair);
                     } else {
-                        HPSEcalCluster[] clusterPair = {botCluster, topCluster};
+                        Cluster[] clusterPair = {botCluster, topCluster};
                         clusterPairs.add(clusterPair);
                     }
                 }
@@ -578,7 +577,7 @@
      * @param clusterPair : pair of clusters
      * @return true if opposite quadrants, false otherwise
      */
-    protected boolean oppositeQuadrantsCut(HPSEcalCluster[] clusterPair) {
+    protected boolean oppositeQuadrantsCut(Cluster[] clusterPair) {
         int quad1 = ECalUtils.getQuadrant(clusterPair[0]);
         int quad2 = ECalUtils.getQuadrant(clusterPair[1]);
 
@@ -598,7 +597,7 @@
      * @param clusterPair: pair of clusters
      * @return true if pair passes cut, false if fail
      */
-    protected boolean clusterHitCount(HPSEcalCluster[] clusterPair) {
+    protected boolean clusterHitCount(Cluster[] clusterPair) {
         return (clusterPair[0].getCalorimeterHits().size() >= minHitCount
                 && clusterPair[1].getCalorimeterHits().size() >= minHitCount);
     }
@@ -610,7 +609,7 @@
      * @param clusterPair : pair of clusters
      * @return true if a pair is found, false otherwise
      */
-    protected boolean clusterECut(HPSEcalCluster[] clusterPair) {
+    protected boolean clusterECut(Cluster[] clusterPair) {
         return (clusterPair[0].getEnergy() < clusterEnergyHigh
                 && clusterPair[1].getEnergy() < clusterEnergyHigh
                 && clusterPair[0].getEnergy() > clusterEnergyLow
@@ -636,7 +635,7 @@
      * @param clusterPair : pair of clusters
      * @return true if pair is found, false otherwise
      */
-    protected boolean energyDifference(HPSEcalCluster[] clusterPair) {
+    protected boolean energyDifference(Cluster[] clusterPair) {
         double clusterEDifference = clusterPair[0].getEnergy() - clusterPair[1].getEnergy();
 
         return (clusterEDifference < energyDifferenceThreshold);
@@ -649,8 +648,8 @@
      * @param clusterPair : pair of clusters
      * @return true if pair is found, false otherwise
      */
-    protected boolean energyDistanceCut(HPSEcalCluster[] clusterPair) {
-        HPSEcalCluster lowEnergyCluster = clusterPair[1];
+    protected boolean energyDistanceCut(Cluster[] clusterPair) {
+        Cluster lowEnergyCluster = clusterPair[1];
 
         // Calculate its position
         double lowEClusterDistance = getClusterDistance(clusterPair[1]);
@@ -666,23 +665,23 @@
      * @param clusterPair : pair of clusters
      * @return true if pair is found, false otherwise
      */
-    protected boolean coplanarityCut(HPSEcalCluster[] clusterPair) {
+    protected boolean coplanarityCut(Cluster[] clusterPair) {
         return (Math.abs(pairUncoplanarity(clusterPair)) < maxCoplanarityAngle);
     }
 
-    protected double pairUncoplanarity(HPSEcalCluster[] clusterPair) { // Find the angle between clusters in the pair
+    protected double pairUncoplanarity(Cluster[] clusterPair) { // Find the angle between clusters in the pair
         double cluster1Angle = (getClusterAngle(clusterPair[0]) + 180.0) % 180.0;
         double cluster2Angle = (getClusterAngle(clusterPair[1]) + 180.0) % 180.0;
 
         return cluster2Angle - cluster1Angle;
     }
 
-    protected double getClusterAngle(HPSEcalCluster cluster) { //returns angle in range of -180 to 180
-        double position[] = cluster.getSeedHit().getPosition();
+    protected double getClusterAngle(Cluster cluster) { //returns angle in range of -180 to 180
+        double position[] = cluster.getCalorimeterHits().get(0).getPosition();
         return Math.toDegrees(Math.atan2(position[1], position[0] - originX));
     }
 
-    protected double getClusterDistance(HPSEcalCluster cluster) {
-        return Math.hypot(cluster.getSeedHit().getPosition()[0] - originX, cluster.getSeedHit().getPosition()[1]);
+    protected double getClusterDistance(Cluster cluster) {
+        return Math.hypot(cluster.getCalorimeterHits().get(0).getPosition()[0] - originX, cluster.getCalorimeterHits().get(0).getPosition()[1]);
     }
 }

Modified: java/trunk/users/src/main/java/org/hps/users/luca/mycluster.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/mycluster.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/mycluster.java	Tue Jan  6 12:54:22 2015
@@ -6,26 +6,14 @@
 
 package org.hps.users.luca;
 import hep.aida.IHistogram1D;
-import hep.aida.IHistogram2D;
-import java.io.IOException;
-
 
 import java.util.List;
-import java.util.Queue;
-import org.hps.readout.ecal.ClockSingleton;
-import org.hps.readout.ecal.TriggerDriver;
 
-import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
+import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.lcsim.geometry.Detector;
+import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
-import org.lcsim.util.Driver;
-import hep.aida.*;
-import hep.aida.IHistogram3D;
-import java.io.FileWriter;
-import org.lcsim.event.CalorimeterHit;
 
 /**
  *
@@ -100,16 +88,16 @@
   
      }
      
-     if(event.hasCollection(HPSEcalCluster.class, "EcalClusters")) {
-            List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, "EcalClusters");
+     if(event.hasCollection(Cluster.class, "EcalClusters")) {
+            List<Cluster> clusters = event.get(Cluster.class, "EcalClusters");
           
             if(clusters.size() > 0) {
-               for(HPSEcalCluster cluster : clusters){
+               for(Cluster cluster : clusters){
                    eneClusterPlot.fill(cluster.getEnergy());
-                   eneSeedPlot.fill(cluster.getSeedHit().getRawEnergy());
+                   eneSeedPlot.fill(cluster.getCalorimeterHits().get(0).getRawEnergy());
                    if(cluster.getEnergy()>=1.4){
                    eneClusterPlotcut.fill(cluster.getEnergy());
-                   eneSeedPlotcut.fill(cluster.getSeedHit().getRawEnergy());
+                   eneSeedPlotcut.fill(cluster.getCalorimeterHits().get(0).getRawEnergy());
                    }
                   
                 }  

Modified: java/trunk/users/src/main/java/org/hps/users/luca/mycluster2.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/mycluster2.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/mycluster2.java	Tue Jan  6 12:54:22 2015
@@ -5,31 +5,14 @@
  */
 
 package org.hps.users.luca;
-import hep.aida.IHistogram1D;
-import hep.aida.IHistogram2D;
+import java.io.FileWriter;
 import java.io.IOException;
-import java.util.*;
-import java.io.PrintWriter;
 import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.LinkedList;
 import java.util.List;
-import java.util.Queue;
-import org.hps.readout.ecal.ClockSingleton;
-import org.hps.readout.ecal.TriggerDriver;
-
-import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
+
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.lcsim.geometry.Detector;
-import org.lcsim.util.aida.AIDA;
 import org.lcsim.util.Driver;
-import hep.aida.*;
-import hep.aida.IHistogram3D;
-import java.io.FileWriter;
-import org.lcsim.event.CalorimeterHit;
-import org.lcsim.event.MCParticle;
 
 /**
  * 
@@ -41,8 +24,8 @@
     int Clustercount=0;
     protected String clusterCollectionName = "EcalClusters";
     
-    ArrayList<HPSEcalCluster> ClusterQueue;
-    List<HPSEcalCluster> goodCluster;
+    ArrayList<Cluster> ClusterQueue;
+    List<Cluster> goodCluster;
  
     private FileWriter writer;
     //private FileWriter writer2;
@@ -82,8 +65,8 @@
 public void startOfData(){
 
  
-    ClusterQueue=new ArrayList<HPSEcalCluster>();
-    goodCluster = new ArrayList<HPSEcalCluster>();
+    ClusterQueue=new ArrayList<Cluster>();
+    goodCluster = new ArrayList<Cluster>();
     
     
     try{
@@ -121,9 +104,9 @@
            
      
      
-     if(event.hasCollection(HPSEcalCluster.class, "EcalClusters")) {
+     if(event.hasCollection(Cluster.class, "EcalClusters")) {
             
-         fillQueue(event.get(HPSEcalCluster.class, clusterCollectionName));
+         fillQueue(event.get(Cluster.class, clusterCollectionName));
           
             
             }       
@@ -132,8 +115,8 @@
  /**
  * Puts cluster collected from events in the ClusterQueue
  */
- public void fillQueue (List<HPSEcalCluster> ecalClusters){
- for(HPSEcalCluster cluster : ecalClusters)
+ public void fillQueue (List<Cluster> ecalClusters){
+ for(Cluster cluster : ecalClusters)
  {
      
      ClusterQueue.add(cluster);
@@ -156,7 +139,7 @@
          
          
     for(int i=0; i< ClusterQueue.size(); i++){
-    if(ClusterQueue.get(i).getSeedHit().getIdentifierFieldValue("ix")== posx && ClusterQueue.get(i).getSeedHit().getIdentifierFieldValue("iy")==posy && ClusterQueue.get(i).getEnergy()>1.6){
+    if(ClusterQueue.get(i).getCalorimeterHits().get(0).getIdentifierFieldValue("ix")== posx && ClusterQueue.get(i).getCalorimeterHits().get(0).getIdentifierFieldValue("iy")==posy && ClusterQueue.get(i).getEnergy()>1.6){
         // System.out.println("sono nel primo if, ovvero ci sono cluster dove voglio io");
            if(ClusterChecker(i)){
       goodCluster.add(ClusterQueue.get(i));}
@@ -172,11 +155,11 @@
  
  
  int id;
- for(HPSEcalCluster cluster :goodCluster){
+ for(Cluster cluster :goodCluster){
    Clustercount++;
    id=getCrystal(cluster);
      try{
-     writer.append(id + " " + cluster.getSeedHit().getIdentifierFieldValue("ix") + " " + cluster.getSeedHit().getIdentifierFieldValue("iy")+ " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getSeedHit().getRawEnergy() + " ");
+     writer.append(id + " " + cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix") + " " + cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")+ " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getCalorimeterHits().get(0).getRawEnergy() + " ");
      /*for(CalorimeterHit hit : cluster.getCalorimeterHits())
      {writer.append(hit.getRawEnergy()+ " ");
        }*/
@@ -202,7 +185,7 @@
     for (int i=(pos-5);i<pos+5;i++){
         ///controlla che non esca da array
         if(i>=0 && i < ClusterQueue.size()){
-            deltaT=Math.abs(ClusterQueue.get(i).getSeedHit().getTime()-ClusterQueue.get(pos).getSeedHit().getTime());
+            deltaT=Math.abs(ClusterQueue.get(i).getCalorimeterHits().get(0).getTime()-ClusterQueue.get(pos).getCalorimeterHits().get(0).getTime());
     ///controlla la differenza temporale che deve essere >80ns, se è maggiore, check=true, se è minore, checka la posizione
      if(deltaT<80)
      {check=PositionChecker(i);}
@@ -218,9 +201,9 @@
        boolean test=true;
 
 //controllo su posizione orizzontale
-     if(ClusterQueue.get(i).getSeedHit().getIdentifierFieldValue("ix")< posx-2 || ClusterQueue.get(i).getSeedHit().getIdentifierFieldValue("ix")> posx+2){
+     if(ClusterQueue.get(i).getCalorimeterHits().get(0).getIdentifierFieldValue("ix")< posx-2 || ClusterQueue.get(i).getCalorimeterHits().get(0).getIdentifierFieldValue("ix")> posx+2){
         //se orizzonale soddisfatto, controllo verticale
-         if(ClusterQueue.get(i).getSeedHit().getIdentifierFieldValue("iy")< posy-2 || ClusterQueue.get(i).getSeedHit().getIdentifierFieldValue("ix")> posy+2){
+         if(ClusterQueue.get(i).getCalorimeterHits().get(0).getIdentifierFieldValue("iy")< posy-2 || ClusterQueue.get(i).getCalorimeterHits().get(0).getIdentifierFieldValue("ix")> posy+2){
          test= true;
          }
      
@@ -232,10 +215,10 @@
      return test;
  }
  
- public int getCrystal (HPSEcalCluster cluster){
+ public int getCrystal (Cluster cluster){
  int x,y,id=0;
- x= (-1)*cluster.getSeedHit().getIdentifierFieldValue("ix");
- y= cluster.getSeedHit().getIdentifierFieldValue("iy");
+ x= (-1)*cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ y= cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
  
  if(y==5){
  if(x<0)

Modified: java/trunk/users/src/main/java/org/hps/users/luca/mycluster3.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/mycluster3.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/mycluster3.java	Tue Jan  6 12:54:22 2015
@@ -5,30 +5,16 @@
  */
 
 package org.hps.users.luca;
-import hep.aida.IHistogram1D;
-import hep.aida.IHistogram2D;
+import java.io.FileWriter;
 import java.io.IOException;
-import java.util.*;
-import java.io.PrintWriter;
 import java.util.ArrayList;
-import java.util.EnumSet;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Queue;
-import org.hps.readout.ecal.ClockSingleton;
-import org.hps.readout.ecal.TriggerDriver;
-
-import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
-
+
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.lcsim.geometry.Detector;
-import org.lcsim.util.aida.AIDA;
 import org.lcsim.util.Driver;
-import hep.aida.*;
-
-import java.io.FileWriter;
-import org.lcsim.event.CalorimeterHit;
 
 
 /**
@@ -43,7 +29,7 @@
     int TotalCluster=0;
     double timeDifference;
     double energyThreshold=0;
-    private LinkedList<ArrayList<HPSEcalCluster>> clusterBuffer;
+    private LinkedList<ArrayList<Cluster>> clusterBuffer;
     protected String clusterCollectionName = "EcalClusters";
     
  //AIDA aida = AIDA.defaultInstance();
@@ -91,12 +77,12 @@
 public void startOfData(){
 
     //initialize the clusterbuffer
-    clusterBuffer= new LinkedList<ArrayList<HPSEcalCluster>>();
+    clusterBuffer= new LinkedList<ArrayList<Cluster>>();
  //populate the clusterbuffer with (2*clusterWindow + 1)
  // empty events, representing the fact that the first few events will not have any events in the past portion of the buffer
     int bufferSize=(2*clusterWindow)+1;
     for(int i = 0;i<bufferSize; i++){
-    clusterBuffer.add(new ArrayList<HPSEcalCluster>(0));
+    clusterBuffer.add(new ArrayList<Cluster>(0));
     }
     
     
@@ -155,14 +141,14 @@
      //get the clusters from the event
    // if(TriggerDriver.triggerBit()){ //if they have triggered!
       
-     if(event.hasCollection(HPSEcalCluster.class, "EcalClusters")) {
+     if(event.hasCollection(Cluster.class, "EcalClusters")) {
          
-        List<HPSEcalCluster> clusterList =event.get(HPSEcalCluster.class,clusterCollectionName );    
+        List<Cluster> clusterList =event.get(Cluster.class,clusterCollectionName );    
              
      //put the clusters in the arraylist
      
-     ArrayList<HPSEcalCluster> clusterSet = new ArrayList<HPSEcalCluster>(); 
-     for(HPSEcalCluster cluster : clusterList){
+     ArrayList<Cluster> clusterSet = new ArrayList<Cluster>(); 
+     for(Cluster cluster : clusterList){
       //   clusterEne.fill(cluster.getEnergy());
          TotalCluster++;
          clusterSet.add(cluster);
@@ -190,7 +176,7 @@
   */
  public void ClusterAnalyzer(){
  //get the cluster list at the current time in the buffer
-ArrayList<HPSEcalCluster> currentClusters = clusterBuffer.get(clusterWindow+1);
+ArrayList<Cluster> currentClusters = clusterBuffer.get(clusterWindow+1);
 
 
  ///cerca i cluster nella posizione che ci interessa poi chiama la funzione che decide se sono "isolati"
@@ -201,20 +187,20 @@
       posy=y;
          
          //ciclo for nel set di currentCluster, ovvero il set nel mezzo del buffer
-    for(HPSEcalCluster cluster : currentClusters){ 
-    if((cluster.getSeedHit().getIdentifierFieldValue("ix")== posx) && (cluster.getSeedHit().getIdentifierFieldValue("iy")==posy )&& (cluster.getEnergy() > energyThreshold)){
+    for(Cluster cluster : currentClusters){ 
+    if((cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")== posx) && (cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")==posy )&& (cluster.getEnergy() > energyThreshold)){
         
            if(ClusterChecker(cluster)){
             int id;
             Clustercount++;
            id=getCrystal(cluster);
            try{
-     writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getSeedHit().getRawEnergy() + " " + cluster.getSeedHit().getIdentifierFieldValue("ix")+" " +cluster.getSeedHit().getIdentifierFieldValue("iy"));
+     writer.append(id + " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getCalorimeterHits().get(0).getRawEnergy() + " " + cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")+" " +cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
      /*for(CalorimeterHit hit : cluster.getCalorimeterHits())
      {writer.append(hit.getRawEnergy()+ " ");
        }*/
      writer.append("\n");
-  //  SeedHistograms.get(id-1).fill(cluster.getSeedHit().getRawEnergy());
+  //  SeedHistograms.get(id-1).fill(cluster.getCalorimeterHits().get(0).getRawEnergy());
   //   ClustHistograms.get(id-1).fill(cluster.getEnergy());
      }
      
@@ -242,19 +228,19 @@
   * @return 
   */
  
-public boolean ClusterChecker (HPSEcalCluster cluster){
+public boolean ClusterChecker (Cluster cluster){
 //System.out.println("Sono nel clustercheck! \n");
     
 boolean check=true;
   
     //ciclo sulle liste del buffer
 loops:
-     for(ArrayList<HPSEcalCluster> currentList : clusterBuffer){
+     for(ArrayList<Cluster> currentList : clusterBuffer){
      //ciclo sui cluster della lista corrente
-         for(HPSEcalCluster currentcluster : currentList){
+         for(Cluster currentcluster : currentList){
            if(currentcluster!= cluster){
              //if there is a cluster in the buffer that is in the considered radius in a time window lower than expected, the loop is brocken and the analyzed cluster is not good
-         if(!((currentcluster.getSeedHit().getIdentifierFieldValue("ix") < posx-radius || currentcluster.getSeedHit().getIdentifierFieldValue("ix")> posx+radius)&& (currentcluster.getSeedHit().getIdentifierFieldValue("iy")< posy-radius || currentcluster.getSeedHit().getIdentifierFieldValue("iy")> posy+radius))&& Math.abs(cluster.getSeedHit().getTime()-currentcluster.getSeedHit().getTime())<timeDifference){
+         if(!((currentcluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix") < posx-radius || currentcluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix")> posx+radius)&& (currentcluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")< posy-radius || currentcluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy")> posy+radius))&& Math.abs(cluster.getCalorimeterHits().get(0).getTime()-currentcluster.getCalorimeterHits().get(0).getTime())<timeDifference){
          check=false;
          break loops;
          }
@@ -275,10 +261,10 @@
       
  
  
- public int getCrystal (HPSEcalCluster cluster){
+ public int getCrystal (Cluster cluster){
  int x,y,id=0;
- x= (-1)*cluster.getSeedHit().getIdentifierFieldValue("ix");
- y= cluster.getSeedHit().getIdentifierFieldValue("iy");
+ x= (-1)*cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ y= cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
  
  if(y==5){
  if(x<0)

Modified: java/trunk/users/src/main/java/org/hps/users/mgraham/TrackExtrapolationAnalysis.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/mgraham/TrackExtrapolationAnalysis.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/mgraham/TrackExtrapolationAnalysis.java	Tue Jan  6 12:54:22 2015
@@ -16,6 +16,7 @@
 import org.hps.recon.tracking.HelixConverter;
 import org.hps.recon.tracking.StraightLineTrack;
 import org.hps.recon.tracking.TrackUtils;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.Track;
 import org.lcsim.fit.helicaltrack.HelicalTrackFit;
@@ -133,8 +134,8 @@
             aida.histogram2D("Extrapolated X: Extend vs SLT").fill(extendAtConverter.y(), slt.getYZAtX(BeamlineConstants.HARP_POSITION_TESTRUN)[0]);
             aida.histogram2D("Extrapolated Y: Extend vs SLT").fill(extendAtConverter.z(), slt.getYZAtX(BeamlineConstants.HARP_POSITION_TESTRUN)[1]);
 
-            List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalCollectionName);
-            HPSEcalCluster clust = findClosestCluster(posAtEcal, clusters);
+            List<Cluster> clusters = event.get(Cluster.class, ecalCollectionName);
+            Cluster clust = findClosestCluster(posAtEcal, clusters);
 
             if (clust != null) {
  //               System.out.println("Cluster Position = ("+clust.getPosition()[0]+","+clust.getPosition()[1]+","+clust.getPosition()[2]+")");
@@ -456,10 +457,10 @@
         style.statisticsBoxStyle().setVisible(true);
     }
 
-    private HPSEcalCluster findClosestCluster(Hep3Vector posonhelix, List<HPSEcalCluster> clusters) {
-        HPSEcalCluster closest = null;
+    private Cluster findClosestCluster(Hep3Vector posonhelix, List<Cluster> clusters) {
+        Cluster closest = null;
         double minDist = 9999;
-        for (HPSEcalCluster cluster : clusters) {
+        for (Cluster cluster : clusters) {
             double[] clPos = cluster.getPosition();
             double clEne = cluster.getEnergy();
 //            double dist = Math.sqrt(Math.pow(clPos[0] - posonhelix.y(), 2) + Math.pow(clPos[1] - posonhelix.z(), 2)); //coordinates!!!

Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/SvtHitEfficiency.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/SvtHitEfficiency.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/SvtHitEfficiency.java	Tue Jan  6 12:54:22 2015
@@ -15,6 +15,8 @@
 import java.util.List;
 import java.util.Map;
 
+import org.hps.recon.tracking.TrackUtils;
+import org.hps.recon.tracking.TrackerHitUtils;
 import org.lcsim.detector.ITransform3D;
 import org.lcsim.detector.solids.Box;
 import org.lcsim.detector.solids.Point3D;
@@ -30,10 +32,6 @@
 import org.lcsim.geometry.Detector;
 import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
-
-import org.hps.recon.ecal.HPSEcalCluster;
-import org.hps.recon.tracking.TrackUtils;
-import org.hps.recon.tracking.TrackerHitUtils;
 
 /**
  * Analysis driver used to calculate the hit efficiency of the SVT.
@@ -250,14 +248,14 @@
         if(tracks.size() >= 2 ) return;
         
         // Get the list of Ecal clusters from the event
-        List<HPSEcalCluster> ecalClusters = event.get(HPSEcalCluster.class, ecalClustersCollectionName);
+        //List<Cluster> ecalClusters = event.get(Cluster.class, ecalClustersCollectionName);
 
         for(Track track : tracks){
         	
             ecalClusterTrackMatch = false;
         	
             // Check if there is an Ecal cluster in the same detector volume as the track
-        	/*for(HPSEcalCluster ecalCluster : ecalClusters){
+        	/*for(Cluster ecalCluster : ecalClusters){
         		if(ecalCluster.getPosition()[1] > 0 && trkUtil.getZ0() > 0){
         			ecalClusterTrackMatch = true;
         			break;

Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackAnalysis.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackAnalysis.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackAnalysis.java	Tue Jan  6 12:54:22 2015
@@ -10,8 +10,8 @@
 import java.util.List;
 import java.util.Map;
 
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.hps.recon.tracking.TrackUtils;
+import org.lcsim.event.Cluster;
 //--- org.lcsim ---//
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.RawTrackerHit;
@@ -264,7 +264,7 @@
     	List<SeedTrack> tracks = event.get(SeedTrack.class, trackCollectionName);
     	
     	Map<Hep3Vector,SeedTrack> trackToEcalPosition = new HashMap<Hep3Vector, SeedTrack>();
-     	Map<SeedTrack, HPSEcalCluster> trackToCluster = new HashMap<SeedTrack, HPSEcalCluster>();
+     	Map<SeedTrack, Cluster> trackToCluster = new HashMap<SeedTrack, Cluster>();
     	List<Hep3Vector> ecalPos = new ArrayList<Hep3Vector>();
     	
     	for(SeedTrack track : tracks){
@@ -318,14 +318,14 @@
     		ecalPos.add(positionEcal);  		
     	}
     	
-    	if(!event.hasCollection(HPSEcalCluster.class, "EcalClusters")) return;
-    	List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, "EcalClusters");
+    	if(!event.hasCollection(Cluster.class, "EcalClusters")) return;
+    	List<Cluster> clusters = event.get(Cluster.class, "EcalClusters");
     	
 
     	for(Hep3Vector ecalP : ecalPos){
         	double xdiff = 1000; 
         	double ydiff = 1000;
-    		for(HPSEcalCluster cluster : clusters){
+    		for(Cluster cluster : clusters){
     			double xd = ecalP.y() - cluster.getPosition()[0];
     			double yd = ecalP.z() - cluster.getPosition()[1];  
     			if(yd < ydiff){
@@ -338,7 +338,7 @@
     		aida.histogram2D("XY Difference between Ecal Cluster and Track Position").fill(xdiff, ydiff);
     	}
     	
-    	for(Map.Entry<SeedTrack, HPSEcalCluster> entry : trackToCluster.entrySet()){
+    	for(Map.Entry<SeedTrack, Cluster> entry : trackToCluster.entrySet()){
     		double Energy = entry.getValue().getEnergy();
     		SeedTrack track = entry.getKey();
     		double pTotal = Math.sqrt(track.getPX()*track.getPX() + track.getPY()*track.getPY() + track.getPZ()*track.getPZ());
@@ -351,7 +351,7 @@
     		aida.histogram2D("E versus P").fill(Energy, pTotal*1000);
     	}
     	
-    	for(HPSEcalCluster cluster : clusters){
+    	for(Cluster cluster : clusters){
     		double[] clusterPosition = cluster.getPosition();
     		
     		System.out.println("Cluster Position: [" + clusterPosition[0] + ", " + clusterPosition[1] + ", " + clusterPosition[2]+ "]");

Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/TestRunTrackReconEfficiency.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/TestRunTrackReconEfficiency.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/TestRunTrackReconEfficiency.java	Tue Jan  6 12:54:22 2015
@@ -11,8 +11,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.hps.recon.tracking.TrackUtils;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.GenericObject;
 import org.lcsim.event.Track;
@@ -143,10 +143,10 @@
         
         // First check if the event contains a collection of Ecal clusters.  If
         // it doesn't skip the event.
-        if(!event.hasCollection(HPSEcalCluster.class, ecalClustersCollectionName)) return;
+        if(!event.hasCollection(Cluster.class, ecalClustersCollectionName)) return;
        
         // Get the list of Ecal clusters in the event
-        List<HPSEcalCluster> ecalClusters = event.get(HPSEcalCluster.class, ecalClustersCollectionName);
+        List<Cluster> ecalClusters = event.get(Cluster.class, ecalClustersCollectionName);
        
         // Get the list of tracks from the event
         List<Track> tracks = event.get(Track.class, trackCollectionName);
@@ -154,7 +154,7 @@
         // If the event has a single Ecal cluster satisfying the threshold cut, 
         // check if there is a track that is well matched to the cluster
         if(ecalClusters.size() == 1){
-        	HPSEcalCluster ecalCluster = ecalClusters.get(0);
+        	Cluster ecalCluster = ecalClusters.get(0);
         	
         	// If the cluster is above the energy threshold, then the track should
         	// be findable
@@ -246,8 +246,8 @@
        	}
        	
        	// Match a track to the trigger cluster
-       	HPSEcalCluster matchedCluster = null; 
-       	for(HPSEcalCluster ecalCluster : ecalClusters){
+       	Cluster matchedCluster = null; 
+       	for(Cluster ecalCluster : ecalClusters){
        		if(ecalCluster.getPosition()[1] > 0 && topTrigger){
        			if(!isClusterMatchedToTrack(ecalCluster, topTracks)){
        				this.printDebug("Trigger cluster-track match was not found.");
@@ -304,14 +304,14 @@
     /**
      * 
      */
-    private boolean isClusterWithinWindow(HPSEcalCluster clusterPosition){
+    private boolean isClusterWithinWindow(Cluster clusterPosition){
     	return true;
     }
     
     /**
      * 
      */
-    private boolean isClusterAboveEnergyThreshold(HPSEcalCluster ecalCluster){
+    private boolean isClusterAboveEnergyThreshold(Cluster ecalCluster){
     	if(ecalCluster.getEnergy() > thresholdEnergy) return true;
     	return false;
     }
@@ -319,7 +319,7 @@
     /**
      * 
      */
-    private boolean hasClustersInOppositeVolumes(List<HPSEcalCluster> ecalClusters){
+    private boolean hasClustersInOppositeVolumes(List<Cluster> ecalClusters){
     	this.printPosition(ecalClusters.get(0).getPosition());
     	this.printPosition(ecalClusters.get(1).getPosition());
     	if((ecalClusters.get(0).getPosition()[1] > 0 && ecalClusters.get(1).getPosition()[1] < 0)
@@ -332,7 +332,7 @@
     /**
      * 
      */
-    private boolean isClusterMatchedToTrack(HPSEcalCluster cluster, List<Track> tracks){
+    private boolean isClusterMatchedToTrack(Cluster cluster, List<Track> tracks){
     	Hep3Vector clusterPos = new BasicHep3Vector(cluster.getPosition());
     	double rMax = Double.MAX_VALUE;
     	Track matchedTrack = null; 

Modified: java/trunk/users/src/main/java/org/hps/users/phansson/FastTrackResidualDriver.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/FastTrackResidualDriver.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/FastTrackResidualDriver.java	Tue Jan  6 12:54:22 2015
@@ -20,10 +20,10 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.detector.identifier.IIdentifier;
 import org.lcsim.detector.identifier.IIdentifierHelper;
 import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.geometry.Detector;
 import org.lcsim.geometry.IDDecoder;
@@ -225,8 +225,8 @@
         
         
         //Get the calorimeter cluster object used to construct the track
-        List<HPSEcalCluster> ecal_all_clusters = getAllEcalClustersForFastTracking(event);
-        //Exit if no clusters found
+        List<Cluster> ecal_all_clusters = getAllEcalClustersForFastTracking(event);
+                //Exit if no clusters found
         if (ecal_all_clusters.size()==0) return;
 
         //if ( 1==1 ) return;
@@ -442,10 +442,10 @@
     
     
     
-//    private List<HPSEcalCluster> getAllEcalClusters(EventHeader event) {
+//    private List<Cluster> getAllEcalClusters(EventHeader event) {
 //        
-//        List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, "EcalReadoutHits"); 
-//        //List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, "EcalClusters"); 
+//        List<Cluster> clusters = event.get(Cluster.class, "EcalReadoutHits"); 
+//        //List<Cluster> clusters = event.get(Cluster.class, "EcalClusters"); 
 //
 //        if ( debug) {
 //            System.out.println("Found " + clusters.size() + " clusters");
@@ -454,18 +454,18 @@
 //    }
 
  
-    public int[] getCrystalPair(HPSEcalCluster cluster) {
+    public int[] getCrystalPair(Cluster cluster) {
         int[] pos = new int[2];
-        pos[0] = cluster.getSeedHit().getIdentifierFieldValue("ix");
-        pos[1] = cluster.getSeedHit().getIdentifierFieldValue("iy");
-        
-        //System.out.println("cluster ix,iy " + pos[0] + "," + pos[1] + "    from pos  " + cluster.getSeedHit().getPositionVec().toString());
+        pos[0] = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+        pos[1] = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
+        
+        //System.out.println("cluster ix,iy " + pos[0] + "," + pos[1] + "    from pos  " + cluster.getCalorimeterHits().get(0).getPositionVec().toString());
         return pos;
         //getCrystalPair(cluster.getPosition());
     }
     
     
-    private List<Integer> getEcalClustersForFastTracking(List<HPSEcalCluster> clusters, String side) {
+    private List<Integer> getEcalClustersForFastTracking(List<Cluster> clusters, String side) {
         if(side!="up" && side!="down") {
             throw new RuntimeException("This ecal side" + side + " do not exist!!");
         }
@@ -494,7 +494,7 @@
         return cls;
     }
      
-    private int selectCluster(List<Integer> ids, List<HPSEcalCluster> clusters) {
+    private int selectCluster(List<Integer> ids, List<Cluster> clusters) {
         //need to decide which cluster to take
 
         
@@ -536,17 +536,12 @@
            
     }
 
-    private List<HPSEcalCluster> getAllEcalClustersForFastTracking(EventHeader event) {
-        
-        //List<HPSEcalCluster> clusters = new ArrayList<HPSEcalCluster>();
-        List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, "EcalClusters"); 
-        //List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, "EcalReadoutHits"); 
-        //List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, "EcalCalHits"); 
+    private List<Cluster> getAllEcalClustersForFastTracking(EventHeader event) {        
+        List<Cluster> clusters = event.get(Cluster.class, "EcalClusters"); 
         if ( debug) {
             System.out.println("Found " + clusters.size() + " EcalClusters");
         }
-        
-     
+             
         return clusters;
     }
 

Modified: java/trunk/users/src/main/java/org/hps/users/phansson/ROOTFlatTupleDriver.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/ROOTFlatTupleDriver.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/ROOTFlatTupleDriver.java	Tue Jan  6 12:54:22 2015
@@ -23,7 +23,6 @@
 import org.hps.analysis.ecal.HPSMCParticlePlotsDriver;
 //===> import org.hps.conditions.deprecated.SvtUtils;
 import org.hps.readout.ecal.TriggerData;
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.hps.recon.tracking.BeamlineConstants;
 import org.hps.recon.tracking.EventQuality;
 import org.hps.recon.tracking.HPSTrack;
@@ -37,6 +36,7 @@
 import org.lcsim.detector.identifier.IIdentifierHelper;
 import org.lcsim.detector.tracker.silicon.DopedSilicon;
 import org.lcsim.detector.tracker.silicon.HpsSiSensor;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.GenericObject;
 import org.lcsim.event.MCParticle;
@@ -325,23 +325,23 @@
         }
         
         
-        List<HPSEcalCluster> clusters = new ArrayList<HPSEcalCluster>();
-
-        if(!event.hasCollection(HPSEcalCluster.class, ecalClusterCollectionName)) {
+        List<Cluster> clusters = new ArrayList<Cluster>();
+
+        if(!event.hasCollection(Cluster.class, ecalClusterCollectionName)) {
             if(_debug) {
                 System.out.println(this.getClass().getSimpleName() + ": event doesn't have a ecal cluster collection ");
             }
         } else {
-            clusters = event.get(HPSEcalCluster.class, ecalClusterCollectionName); 
+            clusters = event.get(Cluster.class, ecalClusterCollectionName); 
         
             if(_debug) {
                 System.out.println(this.getClass().getSimpleName() + ": found " + clusters.size() + " ecal clusters " + event.getEventNumber());
             }
 
 			boolean goodRegion = false;
-			for(HPSEcalCluster c : clusters) {
-                int iy = c.getSeedHit().getIdentifierFieldValue("iy");
-                int ix = c.getSeedHit().getIdentifierFieldValue("ix");
+			for(Cluster c : clusters) {
+                int iy = c.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
+                int ix = c.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
                 double E = c.getEnergy();
 				int evtnr = event.getEventNumber();
                 int clsize = c.getSize();
@@ -525,13 +525,13 @@
      * @return clostest cluster.
      */
 
-    private HPSEcalCluster findEcalCluster(Track trk, List<HPSEcalCluster> clusters) {
-    	HPSEcalCluster matched_cluster = null;
+    private Cluster findEcalCluster(Track trk, List<Cluster> clusters) {
+    	Cluster matched_cluster = null;
     	double drMin = 9999999.9;
     	double drMax = 9999999.9;
     	double dr;
     	Hep3Vector pos_cl,pos_trk;
-    	for(HPSEcalCluster cluster : clusters) {
+    	for(Cluster cluster : clusters) {
     		pos_cl = new BasicHep3Vector(cluster.getPosition());
     		pos_trk = TrackUtils.extrapolateTrack(trk,pos_cl.z());
     		dr = VecOp.sub(pos_cl, pos_trk).magnitude();
@@ -545,7 +545,7 @@
     	return matched_cluster;
     }
     
-    private void fillTextTuple(MCParticle e, MCParticle p, List<CmpTrack> tracks, Hep3Vector vtxPosParticle, Hep3Vector vtxPos, Hep3Vector vtxPosFr, Hep3Vector vtxPosNonBend, List<HPSEcalCluster> clusters, EventHeader event) throws IOException {
+    private void fillTextTuple(MCParticle e, MCParticle p, List<CmpTrack> tracks, Hep3Vector vtxPosParticle, Hep3Vector vtxPos, Hep3Vector vtxPosFr, Hep3Vector vtxPosNonBend, List<Cluster> clusters, EventHeader event) throws IOException {
         if(doPrintBranchInfoLine) {
             throw new RuntimeException("Need to fill tuple branches first!?");
         }
@@ -649,7 +649,7 @@
                 } 
                 else printWriter.format("%5.5f %5.5f %5.5f %5.5f %5.5f ",-9999999.9,-9999999.9,-9999999.9,-9999999.9,-9999999.9);
                 
-                HPSEcalCluster matched_cluster = findEcalCluster(trk1, clusters);
+                Cluster matched_cluster = findEcalCluster(trk1, clusters);
                 if(matched_cluster !=null) {
                 	double[] pos_cluster = matched_cluster.getPosition();
                 	posAtECal = TrackUtils.extrapolateTrack(trk1,pos_cluster[2]);
@@ -816,9 +816,9 @@
             else if(clusters.size()<=i) {
                 printWriter.format("%5.5f %5d %5d %5.5f %5.5f %5.5f %5d ",-999999.9,-999999,-999999,-999999.,-999999.,-999999.,-999999);
             } else {
-                //for(HPSEcalCluster cl : clusters) {
-                int iy = clusters.get(i).getSeedHit().getIdentifierFieldValue("iy");
-                int ix = clusters.get(i).getSeedHit().getIdentifierFieldValue("ix");
+                //for(Cluster cl : clusters) {
+                int iy = clusters.get(i).getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
+                int ix = clusters.get(i).getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
                 double pos[] = clusters.get(i).getPosition();
                 double E = clusters.get(i).getEnergy();
                 int clsize = clusters.get(i).getSize();

Modified: java/trunk/users/src/main/java/org/hps/users/phansson/SimpleResiduals.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/SimpleResiduals.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/SimpleResiduals.java	Tue Jan  6 12:54:22 2015
@@ -17,7 +17,6 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.detector.identifier.IIdentifier;
 import org.lcsim.detector.tracker.silicon.ChargeCarrier;
 import org.lcsim.detector.tracker.silicon.SiSensor;
@@ -25,6 +24,7 @@
 import org.lcsim.detector.tracker.silicon.SiStrips;
 import org.lcsim.detector.tracker.silicon.SiTrackerIdentifierHelper;
 import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.RawTrackerHit;
 import org.lcsim.event.Track;
@@ -208,17 +208,17 @@
         return pos;
     }
         
-    private List<HPSEcalCluster> getAllEcalClusters(EventHeader event) {
-        
-        List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, "EcalClusters"); 
+    private List<Cluster> getAllEcalClusters(EventHeader event) {
+        
+        List<Cluster> clusters = event.get(Cluster.class, "EcalClusters"); 
         if ( debug) {
             System.out.println("Found " + clusters.size() + " clusters");
         }
         return clusters;
     }
 
-    private double[] getClusterPosition(HPSEcalCluster cluster) {
-        CalorimeterHit hit = cluster.getSeedHit();
+    private double[] getClusterPosition(Cluster cluster) {
+        CalorimeterHit hit = cluster.getCalorimeterHits().get(0);
 
         //IDDecoder dec = dec.getSubdetector("Ecal").getIDDecoder();
         dec.setID(hit.getCellID());
@@ -231,14 +231,14 @@
     }
 
     
-    private List<Hep3Vector> getEcalClustersForFastTracking(List<HPSEcalCluster> clusters, String side) {
+    private List<Hep3Vector> getEcalClustersForFastTracking(List<Cluster> clusters, String side) {
         if(!side.equalsIgnoreCase("up") && !side.equalsIgnoreCase("down")) {
             throw new RuntimeException("This ecal side" + side + " do not exist!!");
         }
         List<Hep3Vector> cls = new ArrayList<Hep3Vector>();
         boolean save;
         double [] pos_xy;
-        for ( HPSEcalCluster cl : clusters) {
+        for ( Cluster cl : clusters) {
             save=false;
             pos_xy = getClusterPosition(cl);
             if(pos_xy[1]>=0 && side.equalsIgnoreCase("up")) {
@@ -262,9 +262,9 @@
         
     }
 
-    private List<HPSEcalCluster> getAllEcalClustersForFastTracking(EventHeader event) {
-        
-        List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, "EcalClusters"); 
+    private List<Cluster> getAllEcalClustersForFastTracking(EventHeader event) {
+        
+        List<Cluster> clusters = event.get(Cluster.class, "EcalClusters"); 
         if ( debug) {
             System.out.println("Found " + clusters.size() + " clusters");
         }
@@ -284,7 +284,7 @@
         List<SiTrackerHitStrip1D> trackerHits = getAllHitsInEvent(event);
         
         //Get the calorimeter cluster object used to construct the track
-        List<HPSEcalCluster> ecal_all_clusters = getAllEcalClustersForFastTracking(event);
+        List<Cluster> ecal_all_clusters = getAllEcalClustersForFastTracking(event);
         //Exit if no clusters found
         if (ecal_all_clusters.size()==0) return;
 

Modified: java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java	Tue Jan  6 12:54:22 2015
@@ -14,7 +14,6 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.hps.recon.tracking.BeamlineConstants;
 import org.hps.recon.tracking.DumbShaperFit;
 import org.hps.recon.tracking.HelixConverter;
@@ -24,6 +23,7 @@
 import org.hps.recon.tracking.TrackUtils;
 import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.LCIOParameters.ParameterName;
 import org.lcsim.event.RawTrackerHit;
@@ -648,9 +648,9 @@
 
         List<Track> tracks = event.get(Track.class, trackCollectionName);
         nTracks.fill(tracks.size());
-        if (event.hasCollection(HPSEcalCluster.class, ecalCollectionName)) {
-            List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalCollectionName);
-            for (HPSEcalCluster cluster : clusters) {
+        if (event.hasCollection(Cluster.class, ecalCollectionName)) {
+            List<Cluster> clusters = event.get(Cluster.class, ecalCollectionName);
+            for (Cluster cluster : clusters) {
                 //System.out.println("cluser position = ("+cluster.getPosition()[0]+","+cluster.getPosition()[1]+") with energy = "+cluster.getEnergy());
                 if (cluster.getPosition()[1] > 0) {
                     aida.histogram2D("Top ECal Cluster Position").fill(cluster.getPosition()[0], cluster.getPosition()[1]);
@@ -848,10 +848,10 @@
                     }
                 }
             }
-            if(event.hasCollection(HPSEcalCluster.class,ecalCollectionName)) {
-                List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalCollectionName);
-
-                HPSEcalCluster clust = findClosestCluster(posAtEcal, clusters);
+            if(event.hasCollection(Cluster.class,ecalCollectionName)) {
+                List<Cluster> clusters = event.get(Cluster.class, ecalCollectionName);
+
+                Cluster clust = findClosestCluster(posAtEcal, clusters);
 
                 //           if (clust != null) {
                 if (clust != null) {
@@ -1028,10 +1028,10 @@
         //bottomFrame.dispose();
     }
 
-    private HPSEcalCluster findClosestCluster(Hep3Vector posonhelix, List<HPSEcalCluster> clusters) {
-        HPSEcalCluster closest = null;
+    private Cluster findClosestCluster(Hep3Vector posonhelix, List<Cluster> clusters) {
+        Cluster closest = null;
         double minDist = 9999;
-        for (HPSEcalCluster cluster : clusters) {
+        for (Cluster cluster : clusters) {
             double[] clPos = cluster.getPosition();
             double clEne = cluster.getEnergy();
             double dist = Math.sqrt(Math.pow(clPos[0] - posonhelix.x(), 2) + Math.pow(clPos[1] - posonhelix.y(), 2)); //coordinates!!!

Modified: java/trunk/users/src/main/java/org/hps/users/phansson/TrigRateDriver.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/TrigRateDriver.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/TrigRateDriver.java	Tue Jan  6 12:54:22 2015
@@ -15,8 +15,8 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.hps.recon.ecal.HPSEcalCluster;
 import org.hps.recon.tracking.BeamlineConstants;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.Track;
 import org.lcsim.geometry.Detector;
@@ -255,8 +255,8 @@
         
         if(simTrigger) {
             boolean trigger = false;
-            if(event.hasCollection(HPSEcalCluster.class, triggerClusterCollectionName)) {
-                for(HPSEcalCluster cluster : event.get(HPSEcalCluster.class, triggerClusterCollectionName)) {
+            if(event.hasCollection(Cluster.class, triggerClusterCollectionName)) {
+                for(Cluster cluster : event.get(Cluster.class, triggerClusterCollectionName)) {
                     if(cluster.getEnergy() > triggerThreshold) {
                         trigger = true;
                     }
@@ -276,7 +276,7 @@
         
         //fastTracking(event);
         
-        List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalClusterCollectionName); 
+        List<Cluster> clusters = event.get(Cluster.class, ecalClusterCollectionName); 
         
         
         if(debug) System.out.println( clusters.size() + " ECal clusters in the event");
@@ -295,11 +295,11 @@
         }
         
         
-        for(HPSEcalCluster cl : clusters) {
+        for(Cluster cl : clusters) {
             
             int[] clusterPosIdx = new int[2];
-            clusterPosIdx[0] = cl.getSeedHit().getIdentifierFieldValue("ix");
-            clusterPosIdx[1] = cl.getSeedHit().getIdentifierFieldValue("iy");
+            clusterPosIdx[0] = cl.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+            clusterPosIdx[1] = cl.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
             //Uses shower max position -> update ix,iy above? --> FIX THIS!
             double clusterPosY = cl.getPosition()[1];
             double clusterPosZ = cl.getPosition()[2];         
@@ -356,7 +356,7 @@
     }
        
     /*
-    private boolean hasBadNeighbours(HPSEcalCluster cluster) {
+    private boolean hasBadNeighbours(Cluster cluster) {
         //check if this cluster has a neighbour that is dead or bad
         if(!EcalConditions.badChannelsLoaded()) return false;
         List<CalorimeterHit> hits = cluster.getCalorimeterHits();

Modified: java/trunk/users/src/main/java/org/hps/users/phansson/TriggerTurnOnAnalysis.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/TriggerTurnOnAnalysis.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/TriggerTurnOnAnalysis.java	Tue Jan  6 12:54:22 2015
@@ -19,7 +19,7 @@
 
 import org.hps.analysis.ecal.HPSMCParticlePlotsDriver;
 import org.hps.readout.ecal.TriggerData;
-import org.hps.recon.ecal.HPSEcalCluster;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.MCParticle;
 import org.lcsim.geometry.Detector;
@@ -128,9 +128,9 @@
             if(_DEBUG) System.out.println(this.getClass().getSimpleName() + ": event " + event.getRunNumber() + " has no trigger data");
         }
         
-        List<HPSEcalCluster> clusters = null;
-        if( event.hasCollection(HPSEcalCluster.class, ecalClusterCollectionName) ) {
-            clusters = event.get(HPSEcalCluster.class, ecalClusterCollectionName);
+        List<Cluster> clusters = null;
+        if( event.hasCollection(Cluster.class, ecalClusterCollectionName) ) {
+            clusters = event.get(Cluster.class, ecalClusterCollectionName);
             if(_DEBUG) System.out.println(this.getClass().getSimpleName() + ": event " + event.getRunNumber() + " has " + clusters.size() + " ecal clusters");
         }
         else {