lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/recon
diff -u -r1.1 -r1.2
--- TrackerHitRemover.java 24 Feb 2009 22:59:53 -0000 1.1
+++ TrackerHitRemover.java 12 Mar 2009 22:49:54 -0000 1.2
@@ -19,10 +19,10 @@
/**
* Driver that creates a collection of tracker hits that are not associated with
- * any of the specified tracks.
+ * any of the specified tracks. Runs on {@link ITrack} and {@link ITrackerHit} collections.
*
* @author D. Onoprienko
- * @version $Id: TrackerHitRemover.java,v 1.1 2009/02/24 22:59:53 onoprien Exp $
+ * @version $Id: TrackerHitRemover.java,v 1.2 2009/03/12 22:49:54 onoprien Exp $
*/
public class TrackerHitRemover extends Driver implements JobEventListener {
lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/converters
diff -N OldTrackerHitRemover.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ OldTrackerHitRemover.java 12 Mar 2009 22:49:54 -0000 1.1
@@ -0,0 +1,132 @@
+package org.lcsim.contrib.onoprien.crux.converters;
+
+import java.util.*;
+import java.util.logging.Level;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
+
+import org.lcsim.contrib.onoprien.util.job.Driver;
+import org.lcsim.contrib.onoprien.util.job.JobEvent;
+import org.lcsim.contrib.onoprien.util.job.JobEventListener;
+import org.lcsim.contrib.onoprien.util.job.JobManager;
+
+/**
+ * Driver that creates a collection of tracker hits that are not associated with
+ * any of the specified tracks. Runs on {@link Track} and {@link TrackerHit} collections,
+ * and removes only hits directly associated with tracks.
+ *
+ * @author D. Onoprienko
+ * @version $Id: OldTrackerHitRemover.java,v 1.1 2009/03/12 22:49:54 onoprien Exp $
+ */
+public class OldTrackerHitRemover extends Driver implements JobEventListener {
+
+// -- Private parts : ---------------------------------------------------------
+
+ private String[] _inColNames;
+ private String _outColName;
+ private String[] _tracksNames;
+
+
+// -- Constructors and initialization : ---------------------------------------
+
+ public OldTrackerHitRemover() {
+ JobManager.defaultInstance().addListener(this);
+ }
+
+ /** Called by framework to perform detector-dependent initialization. */
+ public void detectorChanged(JobEvent jobEvent) {
+ if (_inColNames == null || _outColName == null) throw new IllegalStateException(ERR_NS);
+ }
+
+// -- Setters : ---------------------------------------------------------------
+
+ /**
+ * Set any parameter.
+ * The following parameters can be set with this method:
+ * <p><dl>
+ * <dt>"INPUT_HITS"</dt> <dd>One or more names of input hit collections. Only hits from
+ * these collections will be added to the output list.<br>
+ * Default: <tt>null</tt> (must be specified before this driver can be used).</dd>
+ * <dt>"OUTPUT_HITS"</dt> <dd>Name of output list that contains unattached hits.<br>
+ * Default: <tt>null</tt> (must be specified before this driver can be used).</dd>
+ * <dt>"TRACKS"</dt> <dd>Names of track collections. Hits associated with tracks from these
+ * collections will not be included in the output list.<br>
+ * Default: <tt>EventHeader.TRACKS</tt> (list returned by <tt>EventHeader.getTracks()</tt> is used).</dd>
+ * </dl>
+ *
+ * @param name Name of parameter to be set. Case is ignored.
+ * @param values List of values to be used for setting the parameter.
+ * @throws NoSuchParameterException Thrown if the supplied parameter name is unknown.
+ * @throws IllegalArgumentException Thrown if incorrect number of values, or a value
+ * of incorrect type is supplied.
+ */
+ public void set(String name, Object... values) {
+ try {
+ if (name.equalsIgnoreCase("INPUT_HITS")) {
+ if (values.length == 0) throw new IllegalArgumentException(ERR_INV + name);
+ _inColNames = new String[values.length];
+ for (int i=0; i<values.length; i++) _inColNames[i] = (String) values[i];
+ } else if (name.equalsIgnoreCase("OUTPUT_HITS")) {
+ if (values.length != 1) throw new IllegalArgumentException(ERR_INV + name);
+ _outColName = (String) values[0];
+ } else if (name.equalsIgnoreCase("TRACKS")) {
+ if (values.length == 0) {
+ _tracksNames = null;
+ } else {
+ _tracksNames = new String[values.length];
+ for (int i=0; i<values.length; i++) _tracksNames[i] = (String) values[i];
+ }
+ } else {
+ super.set(name, values);
+ }
+ } catch (ClassCastException x) {
+ throw new IllegalArgumentException(ERR_VIT, x);
+ }
+ }
+
+
+// -- Processing event : ------------------------------------------------------
+
+ public void process(EventHeader event) {
+
+ LinkedHashSet<TrackerHit> inHits = new LinkedHashSet<TrackerHit>();
+ for (String colName : _inColNames) {
+ try {
+ Collection<TrackerHit> hits = (Collection<TrackerHit>) event.get(colName);
+ for (TrackerHit hit : hits) {
+ inHits.add(hit);
+ }
+ } catch (IllegalArgumentException x) {}
+ }
+
+ LinkedHashSet<Track> tracks = new LinkedHashSet<Track>();
+ if (_tracksNames == null) {
+ tracks.addAll(event.getTracks());
+ } else {
+ for (String colName : _tracksNames) {
+ try {
+ Collection<Track> trs = (Collection<Track>) event.get(colName);
+ tracks.addAll(trs);
+ } catch (IllegalArgumentException x) {}
+ }
+ }
+
+ HashSet<TrackerHit> veto = new HashSet<TrackerHit>();
+ for (Track track : tracks) {
+ veto.addAll(track.getTrackerHits());
+ }
+
+ ArrayList<TrackerHit> outHits = new ArrayList<TrackerHit>(inHits.size());
+ for (TrackerHit hit : inHits) {
+ if (!veto.contains(hit)) {
+ outHits.add(hit);
+ }
+ }
+
+ outHits.trimToSize();
+ event.put(_outColName, outHits, ITrackerHit.class, 0);
+ }
+
+}