hps-java/src/main/java/org/lcsim/hps/recon/ecal
diff -u -r1.16 -r1.17
--- HPSFADCTriggerDriver.java 11 Dec 2012 19:56:51 -0000 1.16
+++ HPSFADCTriggerDriver.java 14 Dec 2012 01:29:31 -0000 1.17
@@ -21,7 +21,7 @@
*
* @author Omar Moreno <[log in to unmask]>
* @author Sho Uemura <[log in to unmask]>
- * @version $Id: HPSFADCTriggerDriver.java,v 1.16 2012/12/11 19:56:51 meeg Exp $
+ * @version $Id: HPSFADCTriggerDriver.java,v 1.17 2012/12/14 01:29:31 meeg Exp $
*/
public class HPSFADCTriggerDriver extends HPSTriggerDriver {
@@ -78,7 +78,7 @@
@Override
public void detectorChanged(Detector detector) {
clusterEnergy2D = aida.histogram2D(detector.getDetectorName() + " : " + clusterCollectionName + " : energy difference vs. sum", 100, 0.0, 2 * beamEnergy, 100, 0.0, beamEnergy);
- energyDistance2D = aida.histogram2D(detector.getDetectorName() + " : " + clusterCollectionName + " : distance vs. energy (less energetic cluster)", 100, 0.0, beamEnergy, 100, 0.0, 400.0);
+ energyDistance2D = aida.histogram2D(detector.getDetectorName() + " : " + clusterCollectionName + " : distance vs. energy (less energetic cluster)", 100, 0.0, 0.5*beamEnergy, 50, 0.0, 400.0);
clusterAngle2D = aida.histogram2D(detector.getDetectorName() + " : " + clusterCollectionName + " : cluster angle uncoplanarity vs. more energetic cluster angle", 100, -180.0, 180.0, 100, -180.0, 180.0);
triggerBits1D = aida.histogram1D(detector.getDetectorName() + " : " + clusterCollectionName + " : trigger bits", 17, -1.5, 15.5);
triggerTimes1D = aida.histogram1D(detector.getDetectorName() + " : " + clusterCollectionName + " : trigger times", 500, -0.5, 499.5);
hps-java/src/main/java/org/lcsim/hps/evio
diff -u -r1.9 -r1.10
--- TestRunTriggeredReconToLcio.java 11 Dec 2012 03:12:51 -0000 1.9
+++ TestRunTriggeredReconToLcio.java 14 Dec 2012 01:29:31 -0000 1.10
@@ -116,8 +116,8 @@
events.add(lcsimEvent);
System.out.println("Creating LCIO event " + eventNum);
lcsimEvent.put(MCEvent.MC_PARTICLES, mcParticles);
- lcsimEvent.put(ecalCollectionName, ecalHits);
- lcsimEvent.put(trackerCollectionName, trackerHits);
+ lcsimEvent.put(ecalCollectionName, ecalHits, SimCalorimeterHit.class, 0xe0000000);
+ lcsimEvent.put(trackerCollectionName, trackerHits, SimTrackerHit.class, 0xc0000000);
System.out.println("Adding " + mcParticles.size() + " MCParticles, " + ecalHits.size() + " SimCalorimeterHits, " + trackerHits.size() + " SimTrackerHits");
++eventNum;
}
hps-java/src/main/java/org/lcsim/hps/users/meeg
diff -u -r1.7 -r1.8
--- FilterMCBunches.java 20 Sep 2012 18:41:35 -0000 1.7
+++ FilterMCBunches.java 14 Dec 2012 01:29:32 -0000 1.8
@@ -2,7 +2,9 @@
import java.io.*;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
@@ -12,11 +14,15 @@
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
import org.lcsim.event.EventHeader;
+import org.lcsim.event.RawCalorimeterHit;
+import org.lcsim.event.RawTrackerHit;
import org.lcsim.event.SimCalorimeterHit;
import org.lcsim.event.SimTrackerHit;
import org.lcsim.event.base.BaseLCSimEvent;
+import org.lcsim.geometry.IDDecoder;
import org.lcsim.util.lcio.LCIOReader;
import org.lcsim.util.lcio.LCIOWriter;
+import org.lcsim.util.loop.LCSimConditionsManagerImplementation;
/**
* Selects LCIO events passing a cut; spaces out these events with blank events.
@@ -24,7 +30,7 @@
* Can also be used to chain multiple LCIO files together.
*
* @author Sho Uemura <[log in to unmask]>
- * @version $Id: FilterMCBunches.java,v 1.7 2012/09/20 18:41:35 phansson Exp $
+ * @version $Id: FilterMCBunches.java,v 1.8 2012/12/14 01:29:32 meeg Exp $
*/
public class FilterMCBunches {
@@ -40,6 +46,8 @@
//options.addOption(new Option("e", true, "Interval between non-empty events"));
options.addOption(new Option("n", true, "Number of events to read"));
options.addOption(new Option("a", true, "All events - no cuts"));
+ options.addOption(new Option("t", false, "Filter based on SimTrackerHits"));
+ options.addOption(new Option("r", false, "Filter based on RawTrackerHits"));
return options;
}
@@ -74,6 +82,18 @@
throw new RuntimeException(e);
}
+ EventTester tester = null;
+ if (!cl.hasOption("a")) {
+ tester = new EcalEventTester();
+ }
+ if (cl.hasOption("t")) {
+ tester = new TrackerEventTester();
+ }
+ if (cl.hasOption("r")) {
+ tester = new RTHEventTester();
+ }
+
+
int nEmpty = 0;
if (cl.hasOption("e")) {
nEmpty = Integer.valueOf(cl.getOptionValue("e"));
@@ -119,7 +139,7 @@
detectorName = event.getDetectorName();
}
- if (cl.hasOption("a") || goodEvent(event)) {
+ if (tester == null || tester.goodEvent(event)) {
writtenEvents++;
try {
writer.write(event);
@@ -144,6 +164,10 @@
}
System.out.format("Read %d events, wrote %d of them\n", readEvents, writtenEvents);
+ if (tester != null) {
+ tester.endOfRun();
+ }
+
try {
writer.close();
} catch (IOException e) {
@@ -151,24 +175,116 @@
}
}
- private static boolean goodEvent(EventHeader event) {
- List<SimCalorimeterHit> ecalHits = event.getSimCalorimeterHits("EcalHits");
- List<SimTrackerHit> trackerHits = event.getSimTrackerHits("TrackerHits");
-
- double maxE = 0;
- double totalE = 0;
- for (SimCalorimeterHit hit : ecalHits) {
- totalE += hit.getRawEnergy();
- if (hit.getRawEnergy() > maxE) {
- maxE = hit.getRawEnergy();
+ static int countPairs(Set<Integer> ints) {
+ int pairs = 0;
+ while (!ints.isEmpty()) {
+ Integer next = ints.iterator().next();
+ ints.remove(next);
+ if (ints.remove(next ^ 1)) {
+ pairs++;
}
}
+ return pairs;
+ }
+
+ private static abstract class EventTester {
+
+ abstract boolean goodEvent(EventHeader event);
+
+ void endOfRun() {
+ }
+// abstract boolean goodEvent(List<SimCalorimeterHit> ecalHits, List<SimTrackerHit> trackerHits);
+ }
+
+ private static class RTHEventTester extends EventTester {
+
+ int nEvents = 0;
+ int nEcal = 0;
+ int nRTH = 0;
+
+ public RTHEventTester() {
+ LCSimConditionsManagerImplementation.register();
+ }
+
+ @Override
+ public boolean goodEvent(EventHeader event) {
+ nEvents++;
+ List<RawCalorimeterHit> ecalHits = event.get(RawCalorimeterHit.class, "EcalReadoutHits");
+ List<RawTrackerHit> trackerHits = event.get(RawTrackerHit.class, "SVTRawTrackerHits");
+ nEcal+=ecalHits.size();
+ nRTH+=trackerHits.size();
+
+ Set<Integer> topLayers = new HashSet<Integer>();
+ Set<Integer> botLayers = new HashSet<Integer>();
+ for (RawTrackerHit hit : trackerHits) {
+ IDDecoder dec = hit.getIDDecoder();
+ dec.setID(hit.getCellID());
+ if (dec.getValue("module") % 2 == 0) {
+ topLayers.add(dec.getValue("layer"));
+ } else {
+ botLayers.add(dec.getValue("layer"));
+ }
+ }
+
+// System.out.format("%d SimCalorimeterHits, %d SimTrackerHits, %d top layers, %d bottom layers\n", ecalHits.size(), trackerHits.size(), topLayers.size(), botLayers.size());
+ return (countPairs(topLayers) >= 4 && countPairs(botLayers) >= 4);
+ }
+
+ void endOfRun() {
+ System.out.format("%d events, %f RawCalorimeterHits and %f RawTrackerHits on average\n", nEvents, ((double) nEcal) / nEvents, ((double) nRTH) / nEvents);
+ }
+ }
+
+ private static class TrackerEventTester extends EventTester {
+
+ public TrackerEventTester() {
+ LCSimConditionsManagerImplementation.register();
+ }
+
+ @Override
+ public boolean goodEvent(EventHeader event) {
+ List<SimCalorimeterHit> ecalHits = event.getSimCalorimeterHits("EcalHits");
+ List<SimTrackerHit> trackerHits = event.getSimTrackerHits("TrackerHits");
+
+ Set<Integer> topLayers = new HashSet<Integer>();
+ Set<Integer> botLayers = new HashSet<Integer>();
+ for (SimTrackerHit hit : trackerHits) {
+ IDDecoder dec = hit.getIDDecoder();
+ dec.setID(hit.getCellID());
+ if (dec.getValue("module") % 2 == 0) {
+ topLayers.add(dec.getValue("layer"));
+ } else {
+ botLayers.add(dec.getValue("layer"));
+ }
+ }
+
+// System.out.format("%d SimCalorimeterHits, %d SimTrackerHits, %d top layers, %d bottom layers\n", ecalHits.size(), trackerHits.size(), topLayers.size(), botLayers.size());
+ return (countPairs(topLayers) >= 4 && countPairs(botLayers) >= 4);
+ }
+ }
+
+ private static class EcalEventTester extends EventTester {
+
+ @Override
+ public boolean goodEvent(EventHeader event) {
+ List<SimCalorimeterHit> ecalHits = event.getSimCalorimeterHits("EcalHits");
+ List<SimTrackerHit> trackerHits = event.getSimTrackerHits("TrackerHits");
+
+ double maxE = 0;
+ double totalE = 0;
+ for (SimCalorimeterHit hit : ecalHits) {
+ totalE += hit.getRawEnergy();
+ if (hit.getRawEnergy() > maxE) {
+ maxE = hit.getRawEnergy();
+ }
+ }
// System.out.format("%d SimCalorimeterHits, %d SimTrackerHits, maxE %f, totalE %f\n", ecalHits.size(), trackerHits.size(), maxE, totalE);
// return (ecalHits.size() + trackerHits.size() != 0);
// return (totalE > 0.05 || !trackerHits.isEmpty());
- return (totalE > 0.05);
+ return (totalE > 0.05);
+ }
}
}
\ No newline at end of file