From 83909585d405870300cf4a53068a80cd6e238466 Mon Sep 17 00:00:00 2001 From: Jeremy McCormick Date: Thu, 26 Nov 2020 00:43:43 -0600 Subject: [PATCH 01/11] First version of signal overlay driver --- .../org/hps/util/SignalOverlayDriver.java | 130 ++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 util/src/main/java/org/hps/util/SignalOverlayDriver.java diff --git a/util/src/main/java/org/hps/util/SignalOverlayDriver.java b/util/src/main/java/org/hps/util/SignalOverlayDriver.java new file mode 100644 index 0000000000..185c50d831 --- /dev/null +++ b/util/src/main/java/org/hps/util/SignalOverlayDriver.java @@ -0,0 +1,130 @@ +package org.hps.util; + +import java.io.EOFException; +import java.io.File; +import java.io.IOException; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; +import java.util.Set; +import java.util.logging.Logger; + +import org.lcsim.event.EventHeader; +import org.lcsim.event.EventHeader.LCMetaData; +import org.lcsim.lcio.LCIOReader; +import org.lcsim.util.Driver; + +/** + * Overlay signal collections from a side event stream every N events. + */ +public class SignalOverlayDriver extends Driver { + + private static Logger LOGGER = Logger.getLogger(SignalOverlayDriver.class.getPackage().getName()); + + private Queue signalFileNames = new LinkedList(); + private int eventSpacing = 250; + private int sequence = 0; + LCIOReader reader = null; + + class EndOfDataException extends Exception { + private static final long serialVersionUID = 1L; + } + + public void setSignalFile(String signalFileName) { + this.signalFileNames.add(signalFileName); + } + + public void setEventSpacing(int eventSpacing) { + if (eventSpacing <= 0) { + throw new IllegalArgumentException("Bad value for event spacing: " + eventSpacing); + } + this.eventSpacing = eventSpacing; + } + + @Override + protected void startOfData() { + if (this.signalFileNames.size() == 0) { + throw new RuntimeException("No signal files were provided!"); + } + String filePath = this.signalFileNames.remove(); + try { + LOGGER.info("Opening signal file: " + filePath); + File file = new File(filePath); + if (!file.exists()) { + throw new RuntimeException("File does not exist: " + file.getName()); + } + reader = new LCIOReader(file); + } catch (IOException e) { + LOGGER.severe("Failed to read from: " + filePath); + throw new RuntimeException(e); + } + } + + private void openNextFile() throws EndOfDataException { + try { + LOGGER.info("Closing previous reader..."); + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + if (signalFileNames.size() == 0) { + throw new EndOfDataException(); + } + String path = signalFileNames.remove(); + LOGGER.info("Opening next file: " + path); + try { + reader = new LCIOReader(new File(path)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private EventHeader readNextEvent() throws EndOfDataException { + EventHeader event = null; + try { + LOGGER.info("Reading next event..."); + event = this.reader.read(); + } catch (EOFException eof) { + openNextFile(); + try { + LOGGER.info("Reading first event in new file..."); + event = this.reader.read(); + } catch (IOException e) { + e.printStackTrace(); + } + } catch (IOException ioe) { + ioe.printStackTrace(); + } finally { + if (event == null) { + throw new RuntimeException("Failed to read next event."); + } + } + return event; + } + + @Override + protected void process(EventHeader event) { + try { + LOGGER.fine("Processing background event: " + event.getEventNumber()); + if (this.sequence % this.eventSpacing == 0) { + EventHeader signalEvent = this.readNextEvent(); + LOGGER.fine("Read signal event: " + signalEvent.getEventNumber()); + Set lists = signalEvent.getLists(); + for (List list : lists) { + LCMetaData meta = signalEvent.getMetaData(list); + String collName = meta.getName(); + if (!event.hasItem(collName)) { + event.put(collName, list, meta.getType(), meta.getFlags()); + } else { + event.get(meta.getClass(), collName).addAll(list); + } + LOGGER.info("Added " + list.size() + " objects to collection: " + collName); + } + } + ++this.sequence; + } catch (EndOfDataException e) { + throw new RuntimeException("Ran out of signal events!"); + } + } +} + From 2c2fd05507f895b32e76b60abc0c3486e7073a60 Mon Sep 17 00:00:00 2001 From: Jeremy McCormick Date: Fri, 27 Nov 2020 14:28:07 -0600 Subject: [PATCH 02/11] Update signal overlay driver --- .../org/hps/util/SignalOverlayDriver.java | 140 +++++++++++++++--- 1 file changed, 119 insertions(+), 21 deletions(-) diff --git a/util/src/main/java/org/hps/util/SignalOverlayDriver.java b/util/src/main/java/org/hps/util/SignalOverlayDriver.java index 185c50d831..d67b48f60e 100644 --- a/util/src/main/java/org/hps/util/SignalOverlayDriver.java +++ b/util/src/main/java/org/hps/util/SignalOverlayDriver.java @@ -3,6 +3,7 @@ import java.io.EOFException; import java.io.File; import java.io.IOException; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Queue; @@ -11,25 +12,90 @@ import org.lcsim.event.EventHeader; import org.lcsim.event.EventHeader.LCMetaData; +import org.lcsim.event.SimCalorimeterHit; +import org.lcsim.event.SimTrackerHit; import org.lcsim.lcio.LCIOReader; import org.lcsim.util.Driver; /** - * Overlay signal collections from a side event stream every N events. + * Overlay signal collections from a side event stream every N events, + * applying optional event filters to reject events. */ public class SignalOverlayDriver extends Driver { - private static Logger LOGGER = Logger.getLogger(SignalOverlayDriver.class.getPackage().getName()); - + private static Logger LOGGER = + Logger.getLogger(SignalOverlayDriver.class.getCanonicalName()); private Queue signalFileNames = new LinkedList(); private int eventSpacing = 250; private int sequence = 0; + private int nRejected = 0; + private int nSignal = 0; + private String ecalHitCollection = "EcalHits"; + private String hodoHitCollection = "HodoscopeHits"; + LCIOReader reader = null; + interface EventFilter { + public boolean accept(EventHeader event); + } + + class EcalEnergyFilter implements EventFilter { + + double eCut = 0; + + public EcalEnergyFilter(double eCut) { + this.eCut = eCut; + } + + public boolean accept(EventHeader event) { + List ecalHits = event.get(SimCalorimeterHit.class, + SignalOverlayDriver.this.ecalHitCollection); + double totalE = 0; + for (SimCalorimeterHit hit : ecalHits) { + totalE += hit.getRawEnergy(); + } + System.out.println("totalE = " + totalE); + return totalE > eCut; + } + } + + class HodoHitFilter implements EventFilter { + + int nHits = 0; + + public HodoHitFilter(int nHits) { + this.nHits = nHits; + } + + public boolean accept(EventHeader event) { + List hodoHits = event.get(SimTrackerHit.class, + SignalOverlayDriver.this.hodoHitCollection); + return hodoHits.size() >= nHits; + } + } + + private Set eventFilters = new HashSet(); + class EndOfDataException extends Exception { private static final long serialVersionUID = 1L; } + public void setMinHodoHits(int nHits) { + eventFilters.add(new HodoHitFilter(nHits)); + } + + public void setHodoHitCollection(String hodoHitCollection) { + this.hodoHitCollection = hodoHitCollection; + } + + public void setEcalEnergyCut(double eCut) { + eventFilters.add(new EcalEnergyFilter(eCut)); + } + + public void setEcalHitCollection(String ecalHitCollection) { + this.ecalHitCollection = ecalHitCollection; + } + public void setSignalFile(String signalFileName) { this.signalFileNames.add(signalFileName); } @@ -102,29 +168,61 @@ private EventHeader readNextEvent() throws EndOfDataException { return event; } + private boolean accept(EventHeader event) { + for (EventFilter filter : eventFilters) { + if (!filter.accept(event)) { + return false; + } + } + return true; + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) @Override protected void process(EventHeader event) { - try { - LOGGER.fine("Processing background event: " + event.getEventNumber()); - if (this.sequence % this.eventSpacing == 0) { - EventHeader signalEvent = this.readNextEvent(); - LOGGER.fine("Read signal event: " + signalEvent.getEventNumber()); - Set lists = signalEvent.getLists(); - for (List list : lists) { - LCMetaData meta = signalEvent.getMetaData(list); - String collName = meta.getName(); - if (!event.hasItem(collName)) { - event.put(collName, list, meta.getType(), meta.getFlags()); - } else { - event.get(meta.getClass(), collName).addAll(list); - } - LOGGER.info("Added " + list.size() + " objects to collection: " + collName); + LOGGER.fine("Processing background event: " + event.getEventNumber()); + + // Overlay signal event + if (this.sequence % this.eventSpacing == 0) { + + // Find the next acceptable signal event + EventHeader signalEvent = null; + try { + signalEvent = this.readNextEvent(); + while (true) { + if (accept(signalEvent)) break; + LOGGER.fine("Rejected signal event: " + signalEvent.getEventNumber()); + nRejected += 1; + signalEvent = this.readNextEvent(); + } + } catch (EndOfDataException e) { + throw new RuntimeException("Ran out of signal events!", e); + } + LOGGER.fine("Read signal event: " + signalEvent.getEventNumber()); + + // Overlay signal collections onto background event + Set lists = signalEvent.getLists(); + for (List list : lists) { + LCMetaData meta = signalEvent.getMetaData(list); + String collName = meta.getName(); + if (!event.hasItem(collName)) { + event.put(collName, list, meta.getType(), meta.getFlags()); + } else { + event.get(meta.getClass(), collName).addAll(list); } + LOGGER.info("Added " + list.size() + " objects to collection: " + collName); } - ++this.sequence; - } catch (EndOfDataException e) { - throw new RuntimeException("Ran out of signal events!"); + + ++nSignal; } + + ++this.sequence; + } + + protected void endOfData() { + System.out.println("End event sequence: " + this.sequence); + System.out.println("Signal events rejected: " + nRejected); + System.out.println("Signal events overlaid: " + nSignal); } } From b8b08468945bd0d008209180087f7a8411cb84f3 Mon Sep 17 00:00:00 2001 From: Jeremy McCormick Date: Fri, 27 Nov 2020 14:34:47 -0600 Subject: [PATCH 03/11] Add example steering file for signal overlay --- .../readout/SignalOverlayExample.lcsim | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 steering-files/src/main/resources/org/hps/steering/readout/SignalOverlayExample.lcsim diff --git a/steering-files/src/main/resources/org/hps/steering/readout/SignalOverlayExample.lcsim b/steering-files/src/main/resources/org/hps/steering/readout/SignalOverlayExample.lcsim new file mode 100644 index 0000000000..e28c9da300 --- /dev/null +++ b/steering-files/src/main/resources/org/hps/steering/readout/SignalOverlayExample.lcsim @@ -0,0 +1,26 @@ + + + ${beamFile} + + + + + + + + + 250 + 0.04 + + ${signalFile} + + + ${outputFile}.slcio + + + From 2906f03b278675cb37d570a1aeddc8b00e5b69ee Mon Sep 17 00:00:00 2001 From: Jeremy McCormick Date: Fri, 27 Nov 2020 14:35:14 -0600 Subject: [PATCH 04/11] Rename file --- .../src/main/java/org/hps/readout}/SignalOverlayDriver.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename {util/src/main/java/org/hps/util => ecal-readout-sim/src/main/java/org/hps/readout}/SignalOverlayDriver.java (98%) diff --git a/util/src/main/java/org/hps/util/SignalOverlayDriver.java b/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java similarity index 98% rename from util/src/main/java/org/hps/util/SignalOverlayDriver.java rename to ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java index d67b48f60e..a0c23ab3d0 100644 --- a/util/src/main/java/org/hps/util/SignalOverlayDriver.java +++ b/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java @@ -1,4 +1,4 @@ -package org.hps.util; +package org.hps.readout; import java.io.EOFException; import java.io.File; @@ -148,12 +148,12 @@ private void openNextFile() throws EndOfDataException { private EventHeader readNextEvent() throws EndOfDataException { EventHeader event = null; try { - LOGGER.info("Reading next event..."); + LOGGER.fine("Reading next event..."); event = this.reader.read(); } catch (EOFException eof) { openNextFile(); try { - LOGGER.info("Reading first event in new file..."); + LOGGER.fine("Reading first event in new file..."); event = this.reader.read(); } catch (IOException e) { e.printStackTrace(); From 03b85478bbf2bfe1b23e39b3431aac369fe0e173 Mon Sep 17 00:00:00 2001 From: Jeremy McCormick Date: Fri, 27 Nov 2020 15:04:33 -0600 Subject: [PATCH 05/11] Use logger for debug printout --- .../src/main/java/org/hps/readout/SignalOverlayDriver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java b/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java index a0c23ab3d0..67e795680c 100644 --- a/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java +++ b/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java @@ -54,7 +54,7 @@ public boolean accept(EventHeader event) { for (SimCalorimeterHit hit : ecalHits) { totalE += hit.getRawEnergy(); } - System.out.println("totalE = " + totalE); + LOGGER.fine("ECAL totalE = " + totalE); return totalE > eCut; } } From b5d78ed0e4004ff5f7d3a4b07155dc850e9937a8 Mon Sep 17 00:00:00 2001 From: Jeremy McCormick Date: Fri, 27 Nov 2020 17:14:48 -0600 Subject: [PATCH 06/11] Minor cleanup --- .../java/org/hps/readout/SignalOverlayDriver.java | 6 +++--- .../steering/readout/SignalOverlayExample.lcsim | 15 +++++++++------ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java b/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java index 67e795680c..7f61781013 100644 --- a/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java +++ b/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java @@ -18,13 +18,13 @@ import org.lcsim.util.Driver; /** - * Overlay signal collections from a side event stream every N events, - * applying optional event filters to reject events. + * Overlay signal event collections every N events, applying optional + * filters to reject unwanted events. */ public class SignalOverlayDriver extends Driver { private static Logger LOGGER = - Logger.getLogger(SignalOverlayDriver.class.getCanonicalName()); + Logger.getLogger(SignalOverlayDriver.class.getPackageName()); private Queue signalFileNames = new LinkedList(); private int eventSpacing = 250; private int sequence = 0; diff --git a/steering-files/src/main/resources/org/hps/steering/readout/SignalOverlayExample.lcsim b/steering-files/src/main/resources/org/hps/steering/readout/SignalOverlayExample.lcsim index e28c9da300..ecc16a75d4 100644 --- a/steering-files/src/main/resources/org/hps/steering/readout/SignalOverlayExample.lcsim +++ b/steering-files/src/main/resources/org/hps/steering/readout/SignalOverlayExample.lcsim @@ -1,13 +1,15 @@ + + ${beamFile} - @@ -16,7 +18,8 @@ 250 0.04 - + + ${signalFile} From 7dd449324b4dcaf8fc85cf5834c2126ba471f669 Mon Sep 17 00:00:00 2001 From: Jeremy McCormick Date: Fri, 27 Nov 2020 17:57:50 -0600 Subject: [PATCH 07/11] Add copy of 2016 readout with signal overlay --- ...2016TrigPairs1_NoTruth_SignalOverlay.lcsim | 283 ++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPairs1_NoTruth_SignalOverlay.lcsim diff --git a/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPairs1_NoTruth_SignalOverlay.lcsim b/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPairs1_NoTruth_SignalOverlay.lcsim new file mode 100644 index 0000000000..86948f951b --- /dev/null +++ b/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPairs1_NoTruth_SignalOverlay.lcsim @@ -0,0 +1,283 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 250 + 0.04 + + ${signalFile} + + + + + EcalHits + + + 8.0 + 32.0 + false + + + + MCParticle + + + 32.0 + 32.0 + false + + + + TrackerHits + + + 8.0 + 32.0 + false + + + + TrackerHits_Inactive + + + 8.0 + 32.0 + false + + + + TrackerHitsECal + + + 8.0 + 32.0 + false + + + + + + false + true + true + + + + + + EcalHits + EcalRawHits + EcalReadoutHits + EcalTruthRelations + TriggerPathTruthRelations + + + 1 + true + + 13 + 50 + 25 + 5 + 18 + + + false + + + false + + + + + + 25 + 5 + + + false + + + + + + 4 + + 0.100 + + + false + + + + + EcalClustersGTP + + + 15 + + + 0.100 + + 2 + + 3 + + 0.150 + + 1.400 + + 0.600 + + 2.000 + + 1.1 + + 35 + + 0.0055 + + 0.700 + + + + 200 + ${outputFile}.slcio + + + + + From 9d3fa634b9354380500a26873fad82676d04d061 Mon Sep 17 00:00:00 2001 From: Jeremy McCormick Date: Fri, 27 Nov 2020 19:08:54 -0600 Subject: [PATCH 08/11] Cleanup steering file (dos2unix) --- ...2016TrigPairs1_NoTruth_SignalOverlay.lcsim | 566 +++++++++--------- 1 file changed, 283 insertions(+), 283 deletions(-) diff --git a/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPairs1_NoTruth_SignalOverlay.lcsim b/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPairs1_NoTruth_SignalOverlay.lcsim index 86948f951b..82ce88d11d 100644 --- a/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPairs1_NoTruth_SignalOverlay.lcsim +++ b/steering-files/src/main/resources/org/hps/steering/readout/PhysicsRun2016TrigPairs1_NoTruth_SignalOverlay.lcsim @@ -1,283 +1,283 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 250 - 0.04 - - ${signalFile} - - - - - EcalHits - - - 8.0 - 32.0 - false - - - - MCParticle - - - 32.0 - 32.0 - false - - - - TrackerHits - - - 8.0 - 32.0 - false - - - - TrackerHits_Inactive - - - 8.0 - 32.0 - false - - - - TrackerHitsECal - - - 8.0 - 32.0 - false - - - - - - false - true - true - - - - - - EcalHits - EcalRawHits - EcalReadoutHits - EcalTruthRelations - TriggerPathTruthRelations - - - 1 - true - - 13 - 50 - 25 - 5 - 18 - - - false - - - false - - - - - - 25 - 5 - - - false - - - - - - 4 - - 0.100 - - - false - - - - - EcalClustersGTP - - - 15 - - - 0.100 - - 2 - - 3 - - 0.150 - - 1.400 - - 0.600 - - 2.000 - - 1.1 - - 35 - - 0.0055 - - 0.700 - - - - 200 - ${outputFile}.slcio - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 250 + 0.04 + + ${signalFile} + + + + + EcalHits + + + 8.0 + 32.0 + false + + + + MCParticle + + + 32.0 + 32.0 + false + + + + TrackerHits + + + 8.0 + 32.0 + false + + + + TrackerHits_Inactive + + + 8.0 + 32.0 + false + + + + TrackerHitsECal + + + 8.0 + 32.0 + false + + + + + + false + true + true + + + + + + EcalHits + EcalRawHits + EcalReadoutHits + EcalTruthRelations + TriggerPathTruthRelations + + + 1 + true + + 13 + 50 + 25 + 5 + 18 + + + false + + + false + + + + + + 25 + 5 + + + false + + + + + + 4 + + 0.100 + + + false + + + + + EcalClustersGTP + + + 15 + + + 0.100 + + 2 + + 3 + + 0.150 + + 1.400 + + 0.600 + + 2.000 + + 1.1 + + 35 + + 0.0055 + + 0.700 + + + + 200 + ${outputFile}.slcio + + + + + From 832e44ec80bee166d8910ad4ea4535eb8b6fef0e Mon Sep 17 00:00:00 2001 From: Jeremy McCormick Date: Sun, 29 Nov 2020 18:25:53 -0600 Subject: [PATCH 09/11] Add method to read signal files from list in a text file --- .../org/hps/readout/SignalOverlayDriver.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java b/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java index 7f61781013..a5511b49ba 100644 --- a/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java +++ b/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java @@ -1,7 +1,9 @@ package org.hps.readout; +import java.io.BufferedReader; import java.io.EOFException; import java.io.File; +import java.io.FileReader; import java.io.IOException; import java.util.HashSet; import java.util.LinkedList; @@ -24,7 +26,7 @@ public class SignalOverlayDriver extends Driver { private static Logger LOGGER = - Logger.getLogger(SignalOverlayDriver.class.getPackageName()); + Logger.getLogger(SignalOverlayDriver.class.getPackage().getName()); private Queue signalFileNames = new LinkedList(); private int eventSpacing = 250; private int sequence = 0; @@ -100,6 +102,21 @@ public void setSignalFile(String signalFileName) { this.signalFileNames.add(signalFileName); } + public void setSignalFileList(String signalFileList) { + BufferedReader reader; + try { + reader = new BufferedReader(new FileReader(signalFileList)); + String line = reader.readLine(); + while (line != null) { + line = reader.readLine(); + signalFileNames.add(line); + } + reader.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + public void setEventSpacing(int eventSpacing) { if (eventSpacing <= 0) { throw new IllegalArgumentException("Bad value for event spacing: " + eventSpacing); @@ -210,7 +227,7 @@ protected void process(EventHeader event) { } else { event.get(meta.getClass(), collName).addAll(list); } - LOGGER.info("Added " + list.size() + " objects to collection: " + collName); + LOGGER.finer("Added " + list.size() + " objects to collection: " + collName); } ++nSignal; From e49447af1b77ef8be7c63b298c81e9fca96fd42b Mon Sep 17 00:00:00 2001 From: Jeremy McCormick Date: Sun, 29 Nov 2020 18:26:45 -0600 Subject: [PATCH 10/11] Add example steering reading signal files from a list --- .../readout/SignalOverlayListExample.lcsim | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 steering-files/src/main/resources/org/hps/steering/readout/SignalOverlayListExample.lcsim diff --git a/steering-files/src/main/resources/org/hps/steering/readout/SignalOverlayListExample.lcsim b/steering-files/src/main/resources/org/hps/steering/readout/SignalOverlayListExample.lcsim new file mode 100644 index 0000000000..7676309eb9 --- /dev/null +++ b/steering-files/src/main/resources/org/hps/steering/readout/SignalOverlayListExample.lcsim @@ -0,0 +1,29 @@ + + + + + beam_files.txt + + + + + + + + 250 + 0.04 + + + signal_files.txt + + + ${outputFile}.slcio + + + From 17f6a6859b3017bea63e7aa73386b9fc9a2158da Mon Sep 17 00:00:00 2001 From: Jeremy McCormick Date: Tue, 1 Dec 2020 13:39:09 -0600 Subject: [PATCH 11/11] Add ecal pair event filter --- .../org/hps/readout/SignalOverlayDriver.java | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java b/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java index a5511b49ba..e96c402128 100644 --- a/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java +++ b/ecal-readout-sim/src/main/java/org/hps/readout/SignalOverlayDriver.java @@ -34,8 +34,8 @@ public class SignalOverlayDriver extends Driver { private int nSignal = 0; private String ecalHitCollection = "EcalHits"; private String hodoHitCollection = "HodoscopeHits"; - - LCIOReader reader = null; + private LCIOReader reader = null; + private Set eventFilters = new HashSet(); interface EventFilter { public boolean accept(EventHeader event); @@ -76,7 +76,29 @@ public boolean accept(EventHeader event) { } } - private Set eventFilters = new HashSet(); + class EcalPairFilter implements EventFilter { + + double eCut; + + public EcalPairFilter(double eCut) { + this.eCut = eCut; + } + + @Override + public boolean accept(EventHeader event) { + List ecalHits = event.get(SimCalorimeterHit.class, + SignalOverlayDriver.this.ecalHitCollection); + double topE = 0, botE = 0; + for (SimCalorimeterHit hit : ecalHits) { + if (hit.getIdentifierFieldValue("iy") > 0) { + topE += hit.getRawEnergy(); + } else { + botE += hit.getRawEnergy(); + } + } + return (topE > eCut && botE > eCut); + } + } class EndOfDataException extends Exception { private static final long serialVersionUID = 1L; @@ -98,6 +120,10 @@ public void setEcalHitCollection(String ecalHitCollection) { this.ecalHitCollection = ecalHitCollection; } + public void setEcalPairEnergyCut(double eCut) { + eventFilters.add(new EcalPairFilter(eCut)); + } + public void setSignalFile(String signalFileName) { this.signalFileNames.add(signalFileName); }