Print

Print


Commit in hps-java/src/main on MAIN
java/org/lcsim/hps/recon/ecal/HPSFADCTriggerDriver.java+45-81.1 -> 1.2
                             /HPSFADCClusterer.java+3-191.3 -> 1.4
                             /HPSEcalClusterer.java+3-281.16 -> 1.17
                             /HPSEcalFADCReadoutDriver.java+17-21.2 -> 1.3
resources/org/lcsim/hps/steering/ecal_fadc_bkgd.lcsim+2-11.1 -> 1.2
+70-58
5 modified files
moved coincidence window to HPSEcalFADCReadoutDriver from HPSEcalClusterer; added more debug output to HPSFADCTriggerDriver

hps-java/src/main/java/org/lcsim/hps/recon/ecal
HPSFADCTriggerDriver.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- HPSFADCTriggerDriver.java	17 Nov 2011 01:43:26 -0000	1.1
+++ HPSFADCTriggerDriver.java	22 Nov 2011 01:12:41 -0000	1.2
@@ -7,6 +7,7 @@
 
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Cluster;
+import org.lcsim.hps.util.ClockSingleton;
 
 /**
  * Reads clusters and makes trigger decision using opposite quadrant criterion.
@@ -14,7 +15,7 @@
  *
  * @author Omar Moreno <[log in to unmask]>
  * @author Sho Uemura <[log in to unmask]>
- * @version $Id: HPSFADCTriggerDriver.java,v 1.1 2011/11/17 01:43:26 meeg Exp $
+ * @version $Id: HPSFADCTriggerDriver.java,v 1.2 2011/11/22 01:12:41 meeg Exp $
  */
 public class HPSFADCTriggerDriver extends HPSTriggerDriver {
 
@@ -82,45 +83,81 @@
 		// a trigger signal is sent to all other detectors.
 		for (HPSEcalCluster[] clusterPair : clusterPairs) {
 
+			if (outputStream != null) {
+				outputStream.printf("Event %d: cluster pair (energy %f in quadrant %d, energy %f in quadrant %d)\n",
+						ClockSingleton.getClock(),
+						clusterPair[0].getEnergy(), getECalQuadrant(clusterPair[0]),
+						clusterPair[1].getEnergy(), getECalQuadrant(clusterPair[1]));
+			}
+
 			// Require that the event have at least two clusters in opposite
 			// quadrants
-			if (!oppositeQuadrantsCut(clusterPair))
+			if (!oppositeQuadrantsCut(clusterPair)) {
+				if (outputStream != null) {
+					outputStream.println("Failed opposite quadrant cut");
+				}
 				continue;
+			}
 			oppositeQuadrantCount++;
 
+
 			// Require the componets of a cluster pair to have an energy in
 			// the range of 100 MeV to 1.85 GeV
-			if (!clusterECut(clusterPair))
+			if (!clusterECut(clusterPair)) {
+				if (outputStream != null) {
+					outputStream.println("Failed cluster energy cut");
+				}
 				continue;
+			}
 			clusterEnergyCount++;
 
 			// Require the sum of the energies of the components of the
 			// cluster pair to be less than the
 			// (Beam Energy)*(Sampling Fraction) ( 2 GeV for the Test Run )
-			if (!energySum(clusterPair))
+			if (!energySum(clusterPair)) {
+				if (outputStream != null) {
+					outputStream.println("Failed energy sum cut");
+				}
 				continue;
+			}
 			energySumCount++;
 
 			// Require the difference in energy of the components of the
 			// cluster pair to be less than 1.5 GeV
-			if (!energyDifference(clusterPair))
+			if (!energyDifference(clusterPair)) {
+				if (outputStream != null) {
+					outputStream.println("Failed energy difference cut");
+				}
 				continue;
+			}
 			energyDifferenceCount++;
 
 			// Apply a low energy cluster vs. distance cut of the form
 			// E_low + .0032 GeV/mm < .8 GeV
-			if (!energyDistanceCut(clusterPair))
+			if (!energyDistanceCut(clusterPair)) {
+				if (outputStream != null) {
+					outputStream.println("Failed energy-distance cut");
+				}
 				continue;
+			}
 			energyDistanceCount++;
 
 			// Require that the two clusters are coplanar with the beam within
 			// 35 degrees
-			if (!coplanarityCut(clusterPair))
+			if (!coplanarityCut(clusterPair)) {
+				if (outputStream != null) {
+					outputStream.println("Failed coplanarity cut");
+				}
 				continue;
+			}
 			coplanarityCount++;
-			nonuniqueTriggerCount++;
+
 
 			// If all cuts are pased, we have a trigger
+			if (outputStream != null) {
+				outputStream.println("Passed all cuts");
+			}
+			nonuniqueTriggerCount++;
 			trigger = true;
 		}
 		return trigger;

hps-java/src/main/java/org/lcsim/hps/recon/ecal
HPSFADCClusterer.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- HPSFADCClusterer.java	19 Nov 2011 00:52:55 -0000	1.3
+++ HPSFADCClusterer.java	22 Nov 2011 01:12:41 -0000	1.4
@@ -21,22 +21,15 @@
  *
  * @author Sho Uemura <[log in to unmask]>
  *
- * @version $Id: HPSFADCClusterer.java,v 1.3 2011/11/19 00:52:55 meeg Exp $
+ * @version $Id: HPSFADCClusterer.java,v 1.4 2011/11/22 01:12:41 meeg Exp $
  */
 public class HPSFADCClusterer extends HPSEcalClusterer {
 
 	HPSEcalConverter converter = null;
-	int coincidenceWindow = 2;
-	LinkedList<HPSFADCCalorimeterHit> buffer = new LinkedList<HPSFADCCalorimeterHit>();
-	int currentTime;
 
 	public HPSFADCClusterer() {
 	}
 
-	public void setCoincidenceWindow(int coincidenceWindow) {
-		this.coincidenceWindow = coincidenceWindow;
-	}
-
 	public void detectorChanged(Detector detector) {
 		// Get the Subdetector.
 		ecal = (HPSEcal3) detector.getSubdetector(ecalName);
@@ -63,19 +56,10 @@
 		if (hits == null)
 			throw new RuntimeException("Event is missing ECal raw hits collection!");
 
-		buffer.addAll(hits);
 		// Make a hit map for quick lookup by ID.
 		Map<Long, CalorimeterHit> hitMap = new HashMap<Long, CalorimeterHit>();
-		if (!hits.isEmpty()) {
-			currentTime = hits.get(0).getTimeStamp();
-
-			while (buffer.peek().getTimeStamp() <= currentTime - coincidenceWindow) {
-				buffer.remove();
-			}
-
-			for (HPSFADCCalorimeterHit hit : buffer) {
-				hitMap.put(hit.getCellID(), converter.HitDtoA(hit));
-			}
+		for (HPSFADCCalorimeterHit hit : hits) {
+			hitMap.put(hit.getCellID(), converter.HitDtoA(hit));
 		}
 
 		// Put Cluster collection into event.

hps-java/src/main/java/org/lcsim/hps/recon/ecal
HPSEcalClusterer.java 1.16 -> 1.17
diff -u -r1.16 -r1.17
--- HPSEcalClusterer.java	19 Nov 2011 00:52:55 -0000	1.16
+++ HPSEcalClusterer.java	22 Nov 2011 01:12:41 -0000	1.17
@@ -1,9 +1,7 @@
 package org.lcsim.hps.recon.ecal;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -14,7 +12,6 @@
 import org.lcsim.geometry.Detector;
 import org.lcsim.geometry.subdetector.HPSEcal3.NeighborMap;
 import org.lcsim.geometry.subdetector.HPSEcal3;
-import org.lcsim.hps.util.ClockSingleton;
 import org.lcsim.util.Driver;
 import org.lcsim.util.lcio.LCIOConstants;
 
@@ -27,7 +24,7 @@
  * @author Jeremy McCormick <[log in to unmask]>
  * @author Tim Nelson <[log in to unmask]>
  *
- * @version $Id: HPSEcalClusterer.java,v 1.16 2011/11/19 00:52:55 meeg Exp $
+ * @version $Id: HPSEcalClusterer.java,v 1.17 2011/11/22 01:12:41 meeg Exp $
  */
 public class HPSEcalClusterer extends Driver {
 
@@ -43,17 +40,10 @@
 	boolean oddX;
 	// Map of crystals to their neighbors.
 	NeighborMap neighborMap = null;
-	double coincidenceWindow = 8.0;
-	LinkedList<CalorimeterHit> buffer = new LinkedList<CalorimeterHit>();
-	int currentTime;
 
 	public HPSEcalClusterer() {
 	}
 
-	public void setCoincidenceWindow(double coincidenceWindow) {
-		this.coincidenceWindow = coincidenceWindow;
-	}
-
 	public void setClusterCollectionName(String clusterCollectionName) {
 		this.clusterCollectionName = clusterCollectionName;
 	}
@@ -106,25 +96,10 @@
 		if (hits == null)
 			throw new RuntimeException("Event is missing ECal raw hits collection!");
 
-		buffer.addAll(hits);
 		// Make a hit map for quick lookup by ID.
 		Map<Long, CalorimeterHit> hitMap = new HashMap<Long, CalorimeterHit>();
-		if (!hits.isEmpty()) {
-			double time = hits.get(0).getTime() - coincidenceWindow;
-			//purge old hits
-			while (!buffer.isEmpty() && buffer.peek().getTime() <= time) {
-				buffer.remove();
-			}
-
-			for (CalorimeterHit hit : buffer) {
-				//check that the buffer is in sorted order
-				if (hit.getTime() < time) {
-					throw new RuntimeException(String.format("Hits entering clusterer out of order; hit with time %f found"
-							+ " before hit with time %f", time, hit.getTime()));
-				}
-				time = hit.getTime();
-				hitMap.put(hit.getCellID(), hit);
-			}
+		for (CalorimeterHit hit : hits) {
+			hitMap.put(hit.getCellID(), hit);
 		}
 
 		// Put Cluster collection into event.

hps-java/src/main/java/org/lcsim/hps/recon/ecal
HPSEcalFADCReadoutDriver.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- HPSEcalFADCReadoutDriver.java	19 Nov 2011 00:52:55 -0000	1.2
+++ HPSEcalFADCReadoutDriver.java	22 Nov 2011 01:12:41 -0000	1.3
@@ -2,6 +2,7 @@
 
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
@@ -17,7 +18,7 @@
  * Simulates time evolution of preamp output pulse.
  *
  * @author Sho Uemura <[log in to unmask]>
- * @version $Id: HPSEcalFADCReadoutDriver.java,v 1.2 2011/11/19 00:52:55 meeg Exp $
+ * @version $Id: HPSEcalFADCReadoutDriver.java,v 1.3 2011/11/22 01:12:41 meeg Exp $
  */
 public class HPSEcalFADCReadoutDriver extends HPSEcalReadoutDriver<RawCalorimeterHit> {
 	//buffer for deposited energy
@@ -36,6 +37,10 @@
 	//delay (number of readout periods) between start of summing window and output of hit to clusterer
 	int delay0 = 32;
 	HPSEcalConverter converter = null;
+	//output buffer for hits
+	LinkedList<HPSFADCCalorimeterHit> buffer = new LinkedList<HPSFADCCalorimeterHit>();
+	//number of readout periods for which a given hit stays in the buffer
+	int coincidenceWindow = 2;
 	double pulseIntegral;
 
 	public HPSEcalFADCReadoutDriver() {
@@ -45,6 +50,10 @@
 		converter = new HPSEcalConverter(null);
 	}
 
+	public void setCoincidenceWindow(int coincidenceWindow) {
+		this.coincidenceWindow = coincidenceWindow;
+	}
+
 	public void setT0(double t0) {
 		this.t0 = t0;
 	}
@@ -77,8 +86,14 @@
 				System.out.println("Stale hit in output queue");
 				outputQueue.poll();
 			} else
-				hits.add(outputQueue.poll());
+				buffer.add(outputQueue.poll());
 		}
+
+		while (!buffer.isEmpty() && buffer.peek().getTimeStamp() <= readoutCounter - delay0 - coincidenceWindow) {
+			buffer.remove();
+		}
+
+		hits.addAll(buffer);
 	}
 
 	protected void putHits(List<CalorimeterHit> hits) {

hps-java/src/main/resources/org/lcsim/hps/steering
ecal_fadc_bkgd.lcsim 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- ecal_fadc_bkgd.lcsim	19 Nov 2011 00:52:55 -0000	1.1
+++ ecal_fadc_bkgd.lcsim	22 Nov 2011 01:12:42 -0000	1.2
@@ -1,7 +1,7 @@
 <!--
     Example LCSim steering file to run simple HPS ECal clustering and analysis.
     @author Sho Uemura <[log in to unmask]>
-    @version $Id: ecal_fadc_bkgd.lcsim,v 1.1 2011/11/19 00:52:55 meeg Exp $
+    @version $Id: ecal_fadc_bkgd.lcsim,v 1.2 2011/11/22 01:12:42 meeg Exp $
 
 -->
 <lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
@@ -37,6 +37,7 @@
 		<driver name="EcalReadout"
                 type="org.lcsim.hps.recon.ecal.HPSEcalFADCReadoutDriver">
 			<readoutPeriod>4.0</readoutPeriod>
+			<coincidenceWindow>2</coincidenceWindow>
 			<ecalName>Ecal</ecalName>
 			<ecalCollectionName>EcalHits</ecalCollectionName>
 			<ecalRawCollectionName>EcalRawHits</ecalRawCollectionName>
CVSspam 0.2.8