5 modified files
hps-java/src/main/java/org/lcsim/hps/recon/ecal
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
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
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
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
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