Commit in java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal on MAIN
ECalUtils.java+50727 -> 728
EcalClusterIC.java+205-81727 -> 728
EcalRawConverter.java+12-5727 -> 728
EcalTriggerFilterDriver.java+1-49727 -> 728
HPSCalorimeterHit.java+1-4727 -> 728
HPSEcalCluster.java+1-1727 -> 728
+270-140
6 modified files
working version using the database condition

java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal
ECalUtils.java 727 -> 728
--- java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal/ECalUtils.java	2014-06-19 20:56:41 UTC (rev 727)
+++ java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal/ECalUtils.java	2014-06-19 20:59:30 UTC (rev 728)
@@ -74,4 +74,54 @@
             }
         }
     }
+    
+    /** FIXME hard coded id encoding: need to use the id stuff
+     * Return the identity of a channel based on x and y coordinates of the crystal/channel, cellID is needed to create the IIdentifier
+     * The cellID should be 24 bits of the form
+     * [6 signed bits iy][8 signed bits ix][2 unsigned bits layer][6 unsigned bits system]
+     * where system is always 13 and layer is always 0.
+     * @param cellID (long), ix position (int), iy position (int)
+     * @return ID of the channel/crystal (long)
+     */
+    public static long makeID(int ix, int iy){
+
+       String binX;
+       if(0<ix){ 
+    	   binX = Integer.toBinaryString(ix);          
+           while(binX.length()<8){
+        	   binX="0".concat(binX);  
+           }   
+       }
+       else{ 
+    	   binX = Integer.toBinaryString(256+ix);	   
+           while(binX.length()<8){
+        	   binX="0".concat(binX);  
+           } 
+       }
+
+       String binY;
+       if(0<iy){ 
+    	   binY = Integer.toBinaryString(iy);          
+           while(binY.length()<6){
+        	   binY="0".concat(binY);  
+           }   
+       }
+       else{ 
+    	   binY = Integer.toBinaryString(64+iy);
+           while(binY.length()<6){
+        	   binY="0".concat(binY);  
+           } 
+       } 
+
+       String binC = Integer.toBinaryString(13);
+       while(binC.length()<8){
+    	   binC="0".concat(binC);	   
+       }     
+       
+       String strBinNumber = binY.concat(binX).concat(binC);
+    
+       long newID = Integer.parseInt ( strBinNumber , 2);
+       
+       return newID;
+    } 
 }

java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal
EcalClusterIC.java 727 -> 728
--- java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal/EcalClusterIC.java	2014-06-19 20:56:41 UTC (rev 727)
+++ java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal/EcalClusterIC.java	2014-06-19 20:59:30 UTC (rev 728)
@@ -19,6 +19,7 @@
 import org.lcsim.lcio.LCIOConstants;
 import org.lcsim.util.Driver;
 
+
 /**
  * This Driver creates clusters from the CalorimeterHits of an
  * {@link org.lcsim.geometry.subdetectur.HPSEcal3} detector.
@@ -38,15 +39,17 @@
  */
 public class EcalClusterIC extends Driver {
 	// File writer to output cluster results.
-    FileWriter writeHits;
+    FileWriter writeHits = null;
     // LCIO collection name for calorimeter hits.
     String ecalCollectionName;
     // Name of the calorimeter detector object.
     String ecalName = "Ecal";
     // LCIO cluster collection name to which to write.
     String clusterCollectionName = "EcalClusters";
+    // Collection name for rejected hits
+    String rejectedHitName = "RejectedHits";
     // File path to which to write event display output.
-    String outfile = "cluster-hit-IC.txt";
+    String outfile = null;
     // Map of crystals to their neighbors.
     NeighborMap neighborMap = null;
     // Minimum energy threshold for hits; lower energy hits will be
@@ -54,10 +57,10 @@
     double hitEnergyThreshold = 0.0075;
     // Minimum energy threshold for seed hits; if seed hit is below
     // cluster is excluded from output. Units in GeV.
-    double seedEnergyThreshold = 0.2;
+    double seedEnergyThreshold = 0.1;
     // Minimum energy threshold for cluster hits; if total cluster
     // energy is below, the cluster is excluded. Units in GeV.
-    double clusterEnergyThreshold = 0.4;  
+    double clusterEnergyThreshold = 0.3;  
     // A Comparator that sorts CalorimeterHit objects from highest to
     // lowest energy.
     private static final EnergyComparator ENERGY_COMP = new EnergyComparator();
@@ -85,7 +88,19 @@
     public void setEcalName(String ecalName) {
         this.ecalName = ecalName;
     }
+
+    /**
+     * Output file name for event display output.
+     * @param outfile
+     */
+    public void setOutfile(String outfile) {
+        this.outfile = outfile;
+    }
     
+    public void setRejectedHitName(String rejectedHitName){
+    	this.rejectedHitName = rejectedHitName;
+    }
+    
     /**
      * Minimum energy for a hit to be used in a cluster. Default of 0.0075 GeV
      *
@@ -96,7 +111,7 @@
     }
 
     /**
-     * Minimum energy for a seed hit. Default of 0.2 GeV
+     * Minimum energy for a seed hit. Default of 0.1 GeV
      *
      * @param seedEnergyThreshold
      */
@@ -105,7 +120,7 @@
     }
     
     /**
-     * Minimum energy for a cluster. Default of 0.4 GeV
+     * Minimum energy for a cluster. Default of 0.3 GeV
      *
      * @param clusterEnergyThreshold
      */
@@ -152,12 +167,14 @@
             throw new RuntimeException("The parameter ecalName was not set!");
         }
         
-        // Create a file writer and clear the output file, if it exists.
-        try {
-            writeHits = new FileWriter(outfile);
-            writeHits.write("");
+        if (outfile!=null) {
+            // Create a file writer and clear the output file, if it exists.
+            try {
+                writeHits = new FileWriter(outfile);
+                writeHits.write("");
+            } catch (IOException e) {
+            }
         }
-        catch(IOException e) { }
     }
 
     public void detectorChanged(Detector detector) {
@@ -176,25 +193,29 @@
     	// Make sure the current event contains calorimeter hits.
         if (event.hasCollection(CalorimeterHit.class, ecalCollectionName)) {
             // Get the list of raw calorimeter hits.
-            List<CalorimeterHit> hitList = event.get(CalorimeterHit.class, ecalCollectionName);
             
             // Generate clusters from the calorimeter hits.
-            List<HPSEcalCluster> clusterList = null;
-            try { clusterList = createClusters(hitList); }
+            //List<HPSEcalClusterIC> clusterList = null;
+            try { createClusters(event); }
             catch(IOException e) { }
-            
-            // If clusters were successfully created, put them in the event.
-            if(clusterList != null) {
-	            int flag = 1 << LCIOConstants.CLBIT_HITS;
-	            event.put(clusterCollectionName, clusterList, HPSEcalCluster.class, flag);
-            }
         }
     }
 
-    public List<HPSEcalCluster> createClusters(List<CalorimeterHit> hitList) throws IOException {
+    public void createClusters(EventHeader event) throws IOException {
+    	
+    	// Create a list to store the event hits in.
+        List<CalorimeterHit> hitList = new ArrayList<CalorimeterHit>();
+        List<CalorimeterHit> baseList = event.get(CalorimeterHit.class, ecalCollectionName);
+        for(CalorimeterHit r : baseList) {
+        	hitList.add(r);
+        }
+        
         // Create a list to store the newly created clusters in.
-        ArrayList<HPSEcalCluster> clusterList = new ArrayList<HPSEcalCluster>();
+        ArrayList<HPSEcalClusterIC> clusterList = new ArrayList<HPSEcalClusterIC>();
         
+        // Create a list to store the rejected hits in.
+        ArrayList<CalorimeterHit> rejectedHitList = new ArrayList<CalorimeterHit>();
+        
         // Sort the list of hits by energy.
         Collections.sort(hitList, ENERGY_COMP);
         
@@ -204,7 +225,8 @@
         for(int index = hitList.size() - 1; index >= 0; index--) {
         	// If the hit is below threshold or outside of time window, kill it.
         	if((hitList.get(index).getCorrectedEnergy() < hitEnergyThreshold)||
-        			(timeCut && (hitList.get(index).getTime() < minTime || hitList.get(index).getTime() > minTime + timeWindow))) {
+        			(timeCut && (hitList.get(index).getTime() < minTime || hitList.get(index).getTime() > (minTime + timeWindow)))) {
+        		rejectedHitList.add(hitList.get(index));
         		hitList.remove(index);
         	}
         	
@@ -244,7 +266,7 @@
             for (Long neighbor : neighbors) {
             	// Get the neighboring hit.
             	CalorimeterHit neighborHit = hitMap.get(neighbor);
-            	
+                        	
             	// If it exists, add it to the list.
             	if(neighborHit != null) { neighborHits.add(neighborHit); }
             }
@@ -257,10 +279,11 @@
             // neighboring hits.
             seedHitLoop:
             for(CalorimeterHit neighbor : neighborHits) {
-            	if(hit.getCorrectedEnergy() <= neighbor.getCorrectedEnergy()) {
+            	if(!equalEnergies(hit, neighbor)) {
             		isSeed = false;
-            		break seedHitLoop;
+               		break seedHitLoop;
             	}
+           
             }
             
             // If this hit is a seed hit, just map it to itself.
@@ -289,6 +312,7 @@
                         	// common seeds.
                             commonHitList.add(neighborHit);
                             commonHitList.add(hitSeedMap.get(hit));
+
                             
                             // Put the common seed list back into the set.
                             commonHits.put(hit, commonHitList);
@@ -299,7 +323,7 @@
                     	// associate it with the neighboring seed and note
                         // that it has been clustered.
                         else {
-                        	hitSeedMap.put(hit, neighborHit);
+                          	hitSeedMap.put(hit, neighborHit);
                         	surrSeedSet.add(hit);
                         }
                 	}
@@ -338,12 +362,27 @@
             	// If the neighboring hit is of lower energy than the
             	// current secondary hit, then associate the neighboring
             	// hit with the current secondary hit's seed.
-                if (secondaryNeighborHit.getCorrectedEnergy() < secondaryHit.getCorrectedEnergy()) {
+            	
+            	//  if (secondaryNeighborHit.getCorrectedEnergy() < secondaryHit.getCorrectedEnergy()) {
+            	if(!equalEnergies(secondaryNeighborHit, secondaryHit)) {
                 	hitSeedMap.put(secondaryNeighborHit, hitSeedMap.get(secondaryHit));
                 }
+            	else {continue;}
             }
         } // End component hits loop.
+
+        // This is a check to ensure ALL hits are either components or seeds. 
+        for (CalorimeterHit check : hitList){
+        	if(!hitSeedMap.containsKey(check)){
+        		System.out.println("Something is not clustered or component!");
+        		System.out.println("not clustered:"+"\t"+check.getIdentifierFieldValue("ix")+"\t"+
+        		check.getIdentifierFieldValue("iy")+"\t"+check.getCorrectedEnergy());
+        	}
+        }
         
+        
+        
+        
         // Performs second pass calculations for common hits.
         commonHitsLoop:
         for (CalorimeterHit clusteredHit : hitSeedMap.keySet()) {
@@ -376,9 +415,12 @@
             	// Check to make sure that the clustered neighbor hit
             	// is not already associated with the current clustered
             	// hit's seed.
-                if (hitSeedMap.get(clusteredNeighborHit) != clusteredHitSeed) {
-                    if (clusteredHit.getCorrectedEnergy() < clusteredNeighborHit.getCorrectedEnergy()) {
-                    	// Check and see if a list of common seeds
+            	
+                if (hitSeedMap.get(clusteredNeighborHit) != clusteredHitSeed){
+
+                    //if (clusteredHit.getCorrectedEnergy() < clusteredNeighborHit.getCorrectedEnergy()) {
+                	if(!equalEnergies(clusteredHit, clusteredNeighborHit)){
+                	// Check and see if a list of common seeds
                     	// for this hit already exists or not.
                     	List<CalorimeterHit> commonHitList = commonHits.get(clusteredHit);
                     	
@@ -388,14 +430,17 @@
                     	// Add the neighbors to the seeds to set of
                     	// common seeds.
                         commonHitList.add(clusteredHitSeed);
-                        commonHitList.add(hitSeedMap.get(clusteredNeighborHit));
+                       	commonHitList.add(hitSeedMap.get(clusteredNeighborHit));
                         
                         // Put the common seed list back into the set.
                         commonHits.put(clusteredHit, commonHitList);
                     }
                 }
+                
+                
             }
         } // End common hits loop.
+
         
         // Remove any common hits from the clustered hits collection.
         for(CalorimeterHit commonHit : commonHits.keySet()) {
@@ -403,7 +448,6 @@
         }
         
         
-        
         /*
          * All hits are sorted from above. The next part of the code is for calculating energies. Still 
          * needs implementation into new cluster collection so as to preserve shared hit energy 
@@ -427,33 +471,32 @@
             eEnergy += entry.getKey().getRawEnergy();
             seedEnergy.put(eSeed, eEnergy);
         }
-        
+
         //Distribute common hit energies with clusters
         Map<CalorimeterHit, Double> seedEnergyTot = seedEnergy;
+        
         for (Map.Entry<CalorimeterHit, List<CalorimeterHit>> entry1 : commonHits.entrySet()) {
-            CalorimeterHit commonCell = entry1.getKey();
-            List<CalorimeterHit> commSeedList = entry1.getValue();
-            CalorimeterHit seedA = commSeedList.get(0);
-            CalorimeterHit seedB = commSeedList.get(1);
-            double eFractionA = seedEnergy.get(seedA)/(seedEnergy.get(seedA)+seedEnergy.get(seedB));
+        	CalorimeterHit commonCell = entry1.getKey();
+        	CalorimeterHit seedA = entry1.getValue().get(0);
+        	CalorimeterHit seedB = entry1.getValue().get(1);    	
+        	double eFractionA = seedEnergy.get(seedA)/(seedEnergy.get(seedA)+seedEnergy.get(seedB));
         	double eFractionB = seedEnergy.get(seedB)/(seedEnergy.get(seedA)+seedEnergy.get(seedB));
-            double currEnergyA = seedEnergyTot.get(seedA);
-            double currEnergyB = seedEnergyTot.get(seedB);
-            currEnergyA += eFractionA * commonCell.getCorrectedEnergy();
-            currEnergyB += eFractionB * commonCell.getCorrectedEnergy();
+        	double currEnergyA = seedEnergyTot.get(seedA);
+        	double currEnergyB = seedEnergyTot.get(seedB);
+        	currEnergyA += eFractionA * commonCell.getCorrectedEnergy();
+        	currEnergyB += eFractionB * commonCell.getCorrectedEnergy();
 
-            seedEnergyTot.put(seedA, currEnergyA);
-            seedEnergyTot.put(seedB, currEnergyB);
+        	seedEnergyTot.put(seedA, currEnergyA);
+        	seedEnergyTot.put(seedB, currEnergyB);
         }
+
+
         
-        
-        
-        
         /*
          * Prints the results in event display format. Not analyzed
          * for efficiency, as this will ultimately not be a part of
          * the driver and should be handled by the event display output
-         * driver instead.
+         * driver instead. Contains output loops to collection.
          */
         // Only write to the output file is something actually exists.
         if (hitMap.size() != 0) {
@@ -473,58 +516,86 @@
             
             
             for (Map.Entry<CalorimeterHit, CalorimeterHit> entry2 : hitSeedMap.entrySet()) {
-                if ((entry2.getKey() == entry2.getValue())&&(entry2.getKey().getCorrectedEnergy()>=seedEnergyThreshold)
-                		&&(seedEnergyTot.get(entry2.getKey())>=clusterEnergyThreshold)) {//seed and passes all thresholds
-                	int six = entry2.getKey().getIdentifierFieldValue("ix");
-                	int siy = entry2.getKey().getIdentifierFieldValue("iy");
-                	double energy = seedEnergyTot.get(entry2.getKey());
-//                	writeHits.append(String.format("Cluster\t%d\t%d\t%f%n", six, siy, energy));
+                if (entry2.getKey() == entry2.getValue()){
+                	if((entry2.getKey().getCorrectedEnergy()<seedEnergyThreshold)
+                		||(seedEnergyTot.get(entry2.getKey())<clusterEnergyThreshold)) 
+                	{	
+                		rejectedHitList.add(entry2.getKey());
+                	}
                 	
-                    cluster.setParameters(entry2.getKey());
-                    cluster.addHit(entry2.getKey());
+                	else{
+                	
+                		int six = entry2.getKey().getIdentifierFieldValue("ix");
+                		int siy = entry2.getKey().getIdentifierFieldValue("iy");
+                		double energy = seedEnergyTot.get(entry2.getKey());
+//                		writeHits.append(String.format("Cluster\t%d\t%d\t%f%n", six, siy, energy));
+                	
+                		HPSEcalClusterIC cluster = new HPSEcalClusterIC(entry2.getKey());
+                		cluster.addHit(entry2.getKey());
 
-                    for (Map.Entry<CalorimeterHit, CalorimeterHit> entry3 : hitSeedMap.entrySet()) {
-                        if (entry3.getValue() == entry2.getValue()) {
-                        	int ix = entry3.getKey().getIdentifierFieldValue("ix");
-                        	int iy = entry3.getKey().getIdentifierFieldValue("iy");
-//                       	writeHits.append(String.format("CompHit\t%d\t%d%n", ix, iy));
+                		for (Map.Entry<CalorimeterHit, CalorimeterHit> entry3 : hitSeedMap.entrySet()) {
+                			if (entry3.getValue() == entry2.getValue()) {
+                				if(rejectedHitList.contains(entry2.getValue())){
+                					rejectedHitList.add(entry3.getKey());
+                				}
+                				else{
+                					int ix = entry3.getKey().getIdentifierFieldValue("ix");
+                					int iy = entry3.getKey().getIdentifierFieldValue("iy");
+//                       			writeHits.append(String.format("CompHit\t%d\t%d%n", ix, iy));
                         	
-                            cluster.addHit(entry3.getKey());
-                        }
-                    }
+                					cluster.addHit(entry3.getKey());
+                				}
+                			}
+                		}
+                		
                     for (Map.Entry<CalorimeterHit, List<CalorimeterHit>> entry4 : commonHits.entrySet()) {
                         if (entry4.getValue().contains(entry2.getKey())) {
                         	int ix = entry4.getKey().getIdentifierFieldValue("ix");
                         	int iy = entry4.getKey().getIdentifierFieldValue("iy");
 //                        	writeHits.append(String.format("SharHit\t%d\t%d%n", ix, iy));
                         	
-                            cluster.addHit(entry4.getKey());
+                        	// Added in shared hits for energy distribution between clusters, changed by HS 02JUN14
+//                            cluster.addHit(entry4.getKey());
+                            cluster.addSharedHit(entry4.getKey());
                         }
                     }
-
-                    clusterList.add(cluster);
+                    for(CalorimeterHit q : rejectedHitList)
+                    {// This does not output in correct event display format, just for de-bugging
+//                    	writeHits.append("Rejected"+q.getIdentifierFieldValue("ix")+"\t"+q.getIdentifierFieldValue("iy")+"\n");
+                    }
+                    
+                    
+                    cluster.setEnergy(energy);
+                   	clusterList.add(cluster);
+                	}// End checking thresholds and write out.
                 }
-            }
+                
             
-            // Write the event termination header.
+            } //End cluster loop
+         // Write the event termination header.
 //            writeHits.append("EndEvent\n");
-        } //End event display output loop.
+//            System.out.println("Number of clusters: "+clusterList.size());    
+
+            
+        } //End event display out loop.
+        int flag = 1 << LCIOConstants.CLBIT_HITS;
+        event.put(clusterCollectionName, clusterList, HPSEcalClusterIC.class, flag);
+        event.put(rejectedHitName, rejectedHitList, CalorimeterHit.class, flag);
         
         
-        
-        
-        
-        // Return the resulting cluster list.
-        return clusterList;
     }
     
     public void endOfData() {
-    	// Close the event display output writer.
-        try { writeHits.close(); }
-        catch (IOException e) { }
+        if (writeHits != null) {
+            // Close the event display output writer.
+            try {
+                writeHits.close();
+            } catch (IOException e) {
+            }
+        }
     }
     
-    private static class EnergyComparator implements Comparator<CalorimeterHit> {
+  /*  private static class EnergyComparator implements Comparator<CalorimeterHit> {
         public int compare(CalorimeterHit o1, CalorimeterHit o2) {
         	// If the energies are equivalent, the same, the two hits
         	// are considered equivalent.
@@ -536,5 +607,58 @@
         	// Lower energy hits are ranked lower than higher energy hits.
         	else { return 1; }
         }
+    }*/
+    
+    // Also accounts for pathological case of cluster hits that are EXACTLY the same.
+    private static class EnergyComparator implements Comparator<CalorimeterHit> {
+        public int compare(CalorimeterHit o1, CalorimeterHit o2) {
+        	// If the energies are equivalent, the same, the two hits
+        	// are considered equivalent.
+        	if(o1.getCorrectedEnergy() == o2.getCorrectedEnergy()) { 
+        		if(Math.abs(o1.getIdentifierFieldValue("iy")) < Math.abs(o2.getIdentifierFieldValue("iy"))){
+        			return -1;
+        		}
+        		else if((Math.abs(o1.getIdentifierFieldValue("iy")) == Math.abs(o2.getIdentifierFieldValue("iy")))
+        			&& (o1.getIdentifierFieldValue("ix") < o2.getIdentifierFieldValue("ix"))){
+        			return -1; }
+        		else if (Math.abs(o1.getIdentifierFieldValue("iy")) > Math.abs(o2.getIdentifierFieldValue("iy"))){
+        			return 1;
+        		}
+        		else{return 1;}
+        	}
+        	// Higher energy hits are ranked higher than lower energy hits.
+        	else if(o1.getCorrectedEnergy() > o2.getCorrectedEnergy()) { return -1; }
+        	
+        	// Lower energy hits are ranked lower than higher energy hits.
+        	else { return 1; }
+        }
     }
-}
+     
+     
+    
+
+    // Handles pathological case where multiple neighboring crystals have EXACTLY the same energy.
+    private boolean equalEnergies(CalorimeterHit hit, CalorimeterHit neighbor){
+    	boolean isSeed = true;
+    	
+    	int hix = hit.getIdentifierFieldValue("ix");
+    	int hiy = Math.abs(hit.getIdentifierFieldValue("iy"));
+    	int nix = neighbor.getIdentifierFieldValue("ix");
+    	int niy = Math.abs(neighbor.getIdentifierFieldValue("iy"));
+    	double hE = hit.getCorrectedEnergy();
+    	double nE = neighbor.getCorrectedEnergy();
+    	if(hE < nE) {
+    		isSeed = false;
+    	}
+    	else if((hE == nE) && (hiy > niy)) {
+    		isSeed = false;
+    	}
+    	else if((hE == nE) && (hiy == niy) && (hix > nix)) {
+    		isSeed = false;
+    	}
+    	return isSeed;	
+    }
+    
+    
+    
+}    
\ No newline at end of file

java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal
EcalRawConverter.java 727 -> 728
--- java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal/EcalRawConverter.java	2014-06-19 20:56:41 UTC (rev 727)
+++ java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal/EcalRawConverter.java	2014-06-19 20:59:30 UTC (rev 728)
@@ -30,13 +30,14 @@
     private double gain;
     private boolean use2014Gain = true;
     
-    Detector detector = null;    
+    //get the database condition manager
+    
+//    Detector detector = DatabaseConditionsManager.getInstance().getDetectorObject();
+    Detector detector = null;
     static EcalConditions ecalConditions = null;
     static IIdentifierHelper helper = null;
     static EcalChannelCollection channels = null; 
 
-    HPSCalorimeterHit h1 = new HPSCalorimeterHit();
-    HPSCalorimeterHit h2 = new HPSCalorimeterHit();
 
     public EcalRawConverter() {	
     }
@@ -76,6 +77,10 @@
         double time = hit.getTime();
         long id = hit.getCellID();
         double rawEnergy = adcToEnergy(sumADC(hit), id);
+        
+        HPSCalorimeterHit h1 = new HPSCalorimeterHit();
+        h1.setDetector(detector);
+        
 //        double[] pos = hit.getDetectorElement().getGeometry().getPosition().v();
         h1.setParameters(rawEnergy + 0.0000001, time, id, 0);
         //+0.0000001 is a horrible hack to ensure rawEnergy!=BaseCalorimeterHit.UNSET_CORRECTED_ENERGY
@@ -92,6 +97,8 @@
         EcalChannelConstants channelData = findChannel(id);
         double adcSum = hit.getAmplitude() - window * channelData.getCalibration().getPedestal();
         double rawEnergy = adcToEnergy(adcSum, id);
+        HPSCalorimeterHit h2 = new HPSCalorimeterHit();
+        h2.setDetector(detector);
         h2.setParameters(rawEnergy + 0.0000001, time + timeOffset, id, 0);
         //+0.0000001 is a horrible hack to ensure rawEnergy!=BaseCalorimeterHit.UNSET_CORRECTED_ENERGY
         return h2;
@@ -153,8 +160,8 @@
      */   
     void setDetector(Detector detector) {
     	
-    	h1.setDetector(detector);
-    	h2.setDetector(detector);
+//    	h1.setDetector(detector);
+//    	h2.setDetector(detector);
     	
         this.detector = detector;
         

java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal
EcalTriggerFilterDriver.java 727 -> 728
--- java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal/EcalTriggerFilterDriver.java	2014-06-19 20:56:41 UTC (rev 727)
+++ java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal/EcalTriggerFilterDriver.java	2014-06-19 20:59:30 UTC (rev 728)
@@ -145,7 +145,7 @@
         }
      
         // Creating the new channel from cell id, ix and iy, then reading its ID       
-        long newID = makeID(ix,iy);      
+        long newID = ECalUtils.makeID(ix,iy);      
         
         h.setParameters(hit.getRawEnergy(), hit.getTime()+delay*4, newID, hit.getType());
         //make new hit; set position to null so it gets recalculated
@@ -178,53 +178,5 @@
     } 
  
     
-    /**
-     * Return the identity of a channel based on x and y coordinates of the crystal/channel, cellID is needed to create the IIdentifier
-     * The cellID should be 24 bits of the form
-     * [6 signed bits iy][8 signed bits ix][2 unsigned bits layer][6 unsigned bits system]
-     * where system is always 13 and layer is always 0.
-     * @param cellID (long), ix position (int), iy position (int)
-     * @return ID of the channel/crystal (long)
-     */
-    private long makeID(int ix, int iy){
-
-       String binX;
-       if(0<ix){ 
-    	   binX = Integer.toBinaryString(ix);          
-           while(binX.length()<8){
-        	   binX="0".concat(binX);  
-           }   
-       }
-       else{ 
-    	   binX = Integer.toBinaryString(256+ix);	   
-           while(binX.length()<8){
-        	   binX="0".concat(binX);  
-           } 
-       }
-
-       String binY;
-       if(0<iy){ 
-    	   binY = Integer.toBinaryString(iy);          
-           while(binY.length()<6){
-        	   binY="0".concat(binY);  
-           }   
-       }
-       else{ 
-    	   binY = Integer.toBinaryString(64+iy);
-           while(binY.length()<6){
-        	   binY="0".concat(binY);  
-           } 
-       } 
-
-       String binC = Integer.toBinaryString(13);
-       while(binC.length()<8){
-    	   binC="0".concat(binC);	   
-       }     
-       
-       String strBinNumber = binY.concat(binX).concat(binC);
     
-       long newID = Integer.parseInt ( strBinNumber , 2);
-       
-       return newID;
-    } 
 }

java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal
HPSCalorimeterHit.java 727 -> 728
--- java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal/HPSCalorimeterHit.java	2014-06-19 20:56:41 UTC (rev 727)
+++ java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal/HPSCalorimeterHit.java	2014-06-19 20:59:30 UTC (rev 728)
@@ -14,9 +14,6 @@
 import org.lcsim.conditions.ConditionsManager;
 import org.lcsim.detector.identifier.IIdentifier;
 import org.lcsim.detector.identifier.IIdentifierHelper;
-import org.lcsim.detector.identifier.Identifier;
-import org.hps.conditions.ecal.EcalChannel.EcalChannelCollection;
-import org.lcsim.detector.identifier.IIdentifierHelper;
 import org.lcsim.detector.IDetectorElement;
 import org.lcsim.detector.IDetectorElementContainer;
 import org.lcsim.event.CalorimeterHit;
@@ -117,7 +114,7 @@
         // ID helper.
         helper = detector.getSubdetector("Ecal").getDetectorElement().getIdentifierHelper();
         
-        System.out.println("You are now using the database conditions for HPSCalorimeterHit.");
+//        System.out.println("You are now using the database conditions for HPSCalorimeterHit.");
     }
     
 }

java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal
HPSEcalCluster.java 727 -> 728
--- java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal/HPSEcalCluster.java	2014-06-19 20:56:41 UTC (rev 727)
+++ java/branches/ecal-recon_HPSJAVA-93/src/main/java/org/hps/recon/ecal/HPSEcalCluster.java	2014-06-19 20:59:30 UTC (rev 728)
@@ -43,7 +43,7 @@
     private boolean needsPhotonPosCalculation = true;
     
     /** 
-     * Must be set when an object EcalRawConverter is created.
+     * Must be set when an object is created.
      * @param detector (long)
      */   
     public void setDetector(Detector detector) {
SVNspam 0.1