Print

Print


Commit in lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/cheat on MAIN
IRecoDefinition.java+25added 1.1
RecoDefinition.java+161added 1.1
RecoDefinitionExtended.java+204added 1.1
CheatTrackFinderDriver.java+9-341.1 -> 1.2
CheatRecoDefinition.java-1711.1 removed
ICheatRecoDefinition.java-251.1 removed
+399-230
3 added + 2 removed + 1 modified, total 6 files
Updates to reconstructable particle definition

lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/cheat
IRecoDefinition.java added at 1.1
diff -N IRecoDefinition.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ IRecoDefinition.java	24 Jan 2009 05:11:46 -0000	1.1
@@ -0,0 +1,25 @@
+package org.lcsim.contrib.onoprien.crux.cheat;
+
+import org.lcsim.event.MCParticle;
+
+/**
+ * Interface to be implemented by classes that define reconstructable MCParticle.
+ * Used by cheaters and performance analysis classes.
+ *
+ * @author D. Onoprienko
+ * @version $Id: IRecoDefinition.java,v 1.1 2009/01/24 05:11:46 onoprien Exp $
+ */
+public interface IRecoDefinition {
+
+  /**
+   * Returns the name of this definition.
+   */
+  String getName();
+
+  /**
+   * Returns <tt>true</tt> if the specified <tt>MCParticle</tt> produced a findable
+   * track, according to this definition.
+   */
+  boolean isTrackFindable(MCParticle mcParticle);
+
+}

lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/cheat
RecoDefinition.java added at 1.1
diff -N RecoDefinition.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ RecoDefinition.java	24 Jan 2009 05:11:46 -0000	1.1
@@ -0,0 +1,161 @@
+package org.lcsim.contrib.onoprien.crux.cheat;
+
+import java.util.*;
+
+import hep.physics.particle.properties.ParticleType;
+import hep.physics.vec.Hep3Vector;
+import org.lcsim.event.MCParticle;
+
+import org.lcsim.contrib.onoprien.util.NoSuchParameterException;
+
+/**
+ * Simple configurable implementation of {@link IRecoDefinition}.
+ * Used by track finder cheaters and tracking performance analysis classes.
+ * <p>
+ * This definition uses only <tt>MCParticle</tt> own parameters to make selection -
+ * no detector or hit information is accessible. See {@link RecoDefinitionExtended}
+ * if you need to cut on number of layer with hits, etc.
+ * <p>
+ * The definition can be customized either by setting parameters through the
+ * {@link #setCut setCut(String,Object)} method (by default, all cuts are
+ * disabled, so every particle is reconstructable) or by overriding some of
+ * the methods.
+ *
+ * @author D. Onoprienko
+ * @version $Id: RecoDefinition.java,v 1.1 2009/01/24 05:11:46 onoprien Exp $
+ */
+public class RecoDefinition implements IRecoDefinition {
+  
+// -- Constructors :  ----------------------------------------------------------
+
+  public RecoDefinition() {
+    this("");
+  }
+  
+  public RecoDefinition(String name) {
+
+    _name = name;
+
+    _cut_Charged = 0;
+    _cut_Pt = 0.;
+    _cut_ThetaMin = 0.;
+    _cut_ThetaMax = Math.PI;
+    _cut_Types = null;
+  }
+
+  
+// -- Setters :  ---------------------------------------------------------------
+  
+  /**
+   * Set cut parameters. Calling this method this a name of a cat but no values diables the cut.
+   * The following cuts can be configured with this method:
+   * <p><dl>
+   * <dt>"CHARGED"</dt> <dd>Boolean value: if <tt>true</tt>, only charged particles are selected.
+   *             If <tt>false</tt>, only neutral particles are selected.</dd>
+   * <dt>"PT"</dt> <dd>Double value: minimum transverse momentum.</dd>
+   * <dt>"THETA"</dt> <dd>Two double values: mimimum and maximum theta. If only one value is specified,
+   *             it is used as minimum, and symmetric theta range is selected.</dd>
+   * <dt>"PARTICLE_TYPES"</dt> <dd>One ore more <tt>ParticleType</tt> values: only particles
+   *             of these types will be selected.</dd></dl>
+   *
+   * By default, all cuts are disabled.
+   * 
+   * @param name   Name of the cut. Case is ignored.
+   * @param values  List of parameters to be used for configuring the cut.
+   * @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 setCut(String name, Object... values) {
+    Object value = values.length == 0 ? null : values[0];
+    try {
+      if (name.equalsIgnoreCase("CHARGED")) {
+        if (values.length == 0) {
+          _cut_Charged = 0;
+        } else {
+          if ((Boolean)values[0]) {
+            _cut_Charged = 1;
+          } else {
+            _cut_Charged = 2;
+          }
+        }
+      } else if (name.equalsIgnoreCase("PT")) {
+        if (values.length == 0) _cut_Pt = 0.;
+        _cut_Pt = (Double) value;
+      } else if (name.equalsIgnoreCase("THETA")) {
+        if (values.length == 0) {
+          _cut_ThetaMin = 0.;
+          _cut_ThetaMax = Math.PI;
+        } else if (values.length == 1) {
+          _cut_ThetaMin = (Double) values[0];
+          _cut_ThetaMax = Math.PI - _cut_ThetaMin;
+        } else {
+          _cut_ThetaMin = (Double) values[0];
+          _cut_ThetaMax = (Double) values[1];          
+        }
+      } else if (name.equalsIgnoreCase("PARTICLE_TYPES")) {
+        if (values.length == 0) {
+          _cut_Types = null;
+        } else {
+          _cut_Types = new HashSet<ParticleType>();
+          for (Object o : values) {
+            _cut_Types.add((ParticleType)o);
+          }
+        }
+      } else {
+        throw new NoSuchParameterException();
+      }
+    } catch (ClassCastException x) {
+      throw new IllegalArgumentException(x);
+    }
+  }
+
+
+// -- Implementing IRecoDefinition :  ------------------------------------------
+
+  public String getName() {return _name;}
+
+
+// -- Methods defining "reconstructable" and "reconstructed" :  ----------------
+  
+  public boolean isTrackFindable(MCParticle mcParticle) {
+    
+    // Charge cut
+    
+    double charge = mcParticle.getCharge();
+    if (_cut_Charged == 1) {
+      if (Math.abs(charge) < .9) return false;
+    } else if (_cut_Charged == 2) {
+      if (Math.abs(charge) > .1) return false;
+    }
+   
+    // Pt cut
+    
+    Hep3Vector p = mcParticle.getMomentum();
+    double pT = Math.hypot(p.x(), p.y());
+    if (pT < _cut_Pt) return false;
+    
+    // Theta cut
+    
+    double theta = Math.acos(p.z()/p.magnitude());
+    if (theta < _cut_ThetaMin || theta > _cut_ThetaMax) return false;
+    
+    // Particle type cut
+    
+    if (_cut_Types != null && (! _cut_Types.contains(mcParticle.getType()))) return false;
+    
+    // Passed all cuts !
+    
+    return true;
+  }
+
+
+// -- Private parts :  ---------------------------------------------------------
+  
+  private String _name;
+  
+  protected int _cut_Charged;
+  protected double _cut_Pt;
+  protected double _cut_ThetaMin, _cut_ThetaMax;
+  protected Set<ParticleType> _cut_Types;
+}

lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/cheat
RecoDefinitionExtended.java added at 1.1
diff -N RecoDefinitionExtended.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ RecoDefinitionExtended.java	24 Jan 2009 05:11:46 -0000	1.1
@@ -0,0 +1,204 @@
+package org.lcsim.contrib.onoprien.crux.cheat;
+
+import java.util.*;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.MCParticle;
+import org.lcsim.geometry.Subdetector;
+
+import org.lcsim.contrib.onoprien.util.NoSuchParameterException;
+
+import org.lcsim.contrib.onoprien.vsegment.hit.ITrackerHit;
+import org.lcsim.contrib.onoprien.vsegment.mctruth.MCTruthVS;
+
+/**
+ * Simple configurable implementation of {@link IRecoDefinition}.
+ * Used by track finder cheaters and tracking performance analysis classes.
+ * The definition can be customized either by setting parameters through the
+ * {@link #setCut setCut(String,Object)} method (by default, all cuts are
+ * disabled, so every particle is reconstructable) or by overriding some of
+ * the methods.
+ *
+ * @author D. Onoprienko
+ * @version $Id: RecoDefinitionExtended.java,v 1.1 2009/01/24 05:11:46 onoprien Exp $
+ */
+public class RecoDefinitionExtended extends RecoDefinition {
+  
+// -- Constructors :  ----------------------------------------------------------
+
+  public RecoDefinitionExtended() {
+    this("");
+  }
+  
+  public RecoDefinitionExtended(String name) {
+
+    super(name);
+
+    _cut_MinTrackerSuperLayers = 0;
+  }
+
+  
+// -- Setters :  ---------------------------------------------------------------
+  
+  /**
+   * Set cut parameters. Calling this method this a name of a cat but no values diables the cut.
+   * The following cuts can be configured with this method:
+   * <p><dl>
+   * <dt>"MIN_TRACK_HIT_LAYERS"</dt> <dd>Integer value: minimum number of tracker superlayers with hits.
+   *             {@link #getNumTrackerSuperLayers getNumTrackerSuperLayers(MCParticle)} method must be implemented.</dd>
+   * </dl>
+   *
+   * By default, all cuts are disabled.
+   * 
+   * @param name   Name of the cut. Case is ignored.
+   * @param values  List of parameters to be used for configuring the cut.
+   * @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 setCut(String name, Object... values) {
+    Object value = values.length == 0 ? null : values[0];
+    try {
+      if (name.equalsIgnoreCase("MIN_TRACK_HIT_LAYERS")) {
+        if (values.length == 0) _cut_MinTrackerSuperLayers = 0;
+        _cut_MinTrackerSuperLayers = (Integer) value;
+      } else {
+        super.setCut(name, values);
+      }
+    } catch (ClassCastException x) {
+      throw new IllegalArgumentException(x);
+    }
+  }
+
+  /**
+   * Set parameters.
+   * The following parameters can be set with this method:
+   * <p><dl>
+   * <dt>"TRACKER_HIT_COLLECTIONS"</dt> <dd>Name of the tracker hit collection to be used by this
+   *     definition for computing various parameters relevant to tracker-related cuts.<br>
+   *     Default: <tt>null</tt> (tracker clusters are used).</dd>
+   * </dl>
+   *
+   * @param name   Name of the parameter. Case is ignored.
+   * @param values  List of parameters to be used for configuring the cut.
+   * @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("TRACKER_HIT_COLLECTIONS")) {
+        if (values.length == 0) {
+          _trackerHitListNames = null;
+        } else {
+          _trackerHitListNames = new ArrayList<String>(values.length);
+          for (Object o : values) _trackerHitListNames.add((String)o);
+        }
+      } else {
+        throw new NoSuchParameterException();
+      }
+    } catch (ClassCastException x) {
+      throw new IllegalArgumentException(x);
+    }
+  }
+
+  /**
+   * Saves a reference to the event record to be used by this definition.
+   * If a driver calls this method, it has to call {@link #clearEvent()} once the event
+   * processing is finished.
+   */
+  public void setEvent(EventHeader event) {
+    _event = event;
+    try {
+      _mcTruthVS = (MCTruthVS) event.get(MCTruthVS.KEY);
+    } catch(IllegalArgumentException x) {
+      _mcTruthVS = null;
+    }
+  }
+
+  /**
+   *  Clears all references to objects that belong to a particular event.
+   */
+  public void clearEvent() {
+    _event = null;
+    _mcTruthVS = null;
+    _mc2thList = null;
+  }
+
+
+// -- Methods defining "reconstructable" and "reconstructed" :  ----------------
+  
+  public boolean isTrackFindable(MCParticle mcParticle) {
+
+    if (! super.isTrackFindable(mcParticle)) return false;
+
+    // Minimum number of hit layers cut
+
+    if (_cut_MinTrackerSuperLayers > 0 && _cut_MinTrackerSuperLayers > getNumTrackerSuperLayers(mcParticle)) return false;
+    
+    // Passed all cuts !
+    
+    return true;
+  }
+
+
+// -- Helper methods:  ---------------------------------------------------------
+
+  protected int getNumTrackerSuperLayers(MCParticle mc) {
+
+    List<? extends ITrackerHit> hits = Collections.emptyList();
+    if (_trackerHitListNames == null) {
+      hits = _mcTruthVS.getTrackerClusters(mc);
+    } else {
+      if (_mc2thList == null) {
+        _mc2thList = new HashMap<MCParticle, List<ITrackerHit>>();
+        for (String col : _trackerHitListNames) {
+          try {
+            List<ITrackerHit> hitList = (List<ITrackerHit>) _event.get(col);
+            for (ITrackerHit hit : hitList) {
+              List<MCParticle> mcList = _mcTruthVS.getMCParticles(hit);
+              for (MCParticle mcp : mcList) {
+                List<ITrackerHit> hList = _mc2thList.get(mcp);
+                if (hList == null) {
+                  hList = new ArrayList<ITrackerHit>(10);
+                  _mc2thList.put(mcp, hList);
+                }
+                hList.add(hit);
+              }
+            }
+          } catch (IllegalArgumentException x) {}
+        }
+      }
+      hits = _mc2thList.get(mc);
+    }
+    
+    int nLayers = 0;
+    Subdetector sd = null;
+    int layer = -1;
+    for (ITrackerHit hit : hits) {
+      Subdetector sd1 = hit.getSubdetector();
+      int layer1 = hit.getLayer();
+      if (sd != sd1 || layer != layer1) {
+        sd = sd1;
+        layer = layer1;
+        if (hit.getType().nUnmeasured() == 0) {
+          nLayers += 2;
+        } else {
+          nLayers += 1;
+        }
+      }
+    }
+    nLayers /= 2;
+    return nLayers;
+  }
+  
+// -- Private parts :  ---------------------------------------------------------
+  
+  protected int _cut_MinTrackerSuperLayers;
+
+  protected List<String> _trackerHitListNames;
+  protected HashMap<MCParticle, List<ITrackerHit>> _mc2thList;
+
+  protected EventHeader _event;
+  protected MCTruthVS _mcTruthVS;
+}

lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/cheat
CheatTrackFinderDriver.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- CheatTrackFinderDriver.java	22 Jan 2009 21:12:42 -0000	1.1
+++ CheatTrackFinderDriver.java	24 Jan 2009 05:11:46 -0000	1.2
@@ -3,7 +3,6 @@
 import java.util.*;
 
 import hep.physics.vec.Hep3Vector;
-import org.lcsim.geometry.Subdetector;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.MCParticle;
 import org.lcsim.event.SimTrackerHit;
@@ -26,7 +25,7 @@
  * Driver that uses MC truth info to produce a list of tracks.
  *
  * @author D. Onoprienko
- * @version $Id: CheatTrackFinderDriver.java,v 1.1 2009/01/22 21:12:42 onoprien Exp $
+ * @version $Id: CheatTrackFinderDriver.java,v 1.2 2009/01/24 05:11:46 onoprien Exp $
  */
 public class CheatTrackFinderDriver extends Driver implements JobEventListener {
   
@@ -58,7 +57,7 @@
    *             <br>No default, must be set explicitly.</dd>
    * <dt>"TRACK_LIST"</dt> <dd>Name of output list of <tt>Tracks</tt>.
    *             <br>No default, must be set explicitly.</dd>
-   * <dt>"DEFINITION"</dt> <dd>The value is an instance of {@link ICheatRecoDefinition} that will
+   * <dt>"DEFINITION"</dt> <dd>The value is an instance of {@link IRecoDefinition} that will
    *             be used to determine which MCParticles produce reconstructable tracks.
    *             <br>No default, must be either set explicitly or configured after getting.</dd></dl>
    * 
@@ -77,7 +76,7 @@
       } else if (name.equalsIgnoreCase("TRACK_LIST")) {
         _trackListName = (String) value;
       } else if (name.equalsIgnoreCase("DEFINITION")) {
-        _def = (ICheatRecoDefinition) value;
+        _def = (IRecoDefinition) value;
       } else {
         super.set(name, values);
       }
@@ -86,41 +85,17 @@
     }
   }
 
+
 // -- Getters :  ---------------------------------------------------------------
 
   /**
    *  Returns reconstructable particle definition used by this driver.
-   *  If the definition is not an instance of <tt>CheatRecoDefinition</tt>, returns <tt>null</tt>.
    */
-  public CheatRecoDefinition getDefinition() {
-    if (_def == null) {
-      _def = new CheatRecoDefinition() {
-        public int getNumTrackerSuperLayers(MCParticle mc) {
-          List<ITrackerHit> hits = _mc2hit.get(mc);
-          int nLayers = 0;
-          Subdetector sd = null;
-          int layer = -1;
-          for (ITrackerHit hit : hits) {
-            Subdetector sd1 = hit.getSubdetector();
-            int layer1 = hit.getLayer();
-            if (sd != sd1 || layer != layer1) {
-              sd = sd1;
-              layer = layer1;
-              if (hit.getType().nUnmeasured() == 0) {
-                nLayers +=2;
-              } else {
-                nLayers +=1;
-              }
-            }
-          }
-          nLayers /= 2;
-          return nLayers;
-        }
-      };
-    }
-    return (_def instanceof CheatRecoDefinition) ? (CheatRecoDefinition)_def : null ;
+  public IRecoDefinition getDefinition() {
+    return _def;
   }
-  
+
+
 // -- Event processing :  ------------------------------------------------------
   
   /** Called by the framework to process an event. */
@@ -244,7 +219,7 @@
   private ArrayList<String> _hitMapNames;
   private String _trackListName;
 
-  private ICheatRecoDefinition _def;
+  private IRecoDefinition _def;
   
   private MCTruthVS _mcTruth;
   private BField _bField;

lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/cheat
CheatRecoDefinition.java removed after 1.1
diff -N CheatRecoDefinition.java
--- CheatRecoDefinition.java	22 Jan 2009 21:12:42 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,171 +0,0 @@
-package org.lcsim.contrib.onoprien.crux.cheat;
-
-import java.util.*;
-
-import hep.physics.particle.properties.ParticleType;
-import hep.physics.vec.Hep3Vector;
-import org.lcsim.event.MCParticle;
-
-import org.lcsim.contrib.onoprien.util.NoSuchParameterException;
-
-/**
- * Class that defines reconstructable MCParticle. Used by track finder cheaters and
- * tracking performance analysis classes. The definition can be customized either by
- * setting parameters through the {@link #setCut setCut(String,Object)} method (by default, all cuts are
- * disabled, so every particle is reconstructable) or by overriding {@link #isReconstructable(MCParticle)}.
- *
- * @author D. Onoprienko
- * @version $Id: CheatRecoDefinition.java,v 1.1 2009/01/22 21:12:42 onoprien Exp $
- */
-public class CheatRecoDefinition implements ICheatRecoDefinition {
-  
-// -- Constructors :  ----------------------------------------------------------
-
-  public CheatRecoDefinition() {
-    this("");
-  }
-  
-  public CheatRecoDefinition(String name) {
-
-    _name = name;
-
-    _cut_Charged = 0;
-    _cut_Pt = 0.;
-    _cut_ThetaMin = 0.;
-    _cut_ThetaMax = Math.PI;
-    _cut_MinTrackerSuperLayers = 0;
-    _cut_Types = null;
-  }
-
-  
-// -- Setters :  ---------------------------------------------------------------
-  
-  /**
-   * Set cut parameters. Calling this method this a name of a cat but no values diables the cut.
-   * The following cuts can be configured with this method:
-   * <p><dl>
-   * <dt>"CHARGED"</dt> <dd>Boolean value: if <tt>true</tt>, only charged particles are selected.
-   *             If <tt>false</tt>, only neutral particles are selected.</dd>
-   * <dt>"PT"</dt> <dd>Double value: minimum transverse momentum.</dd>
-   * <dt>"THETA"</dt> <dd>Two double values: mimimum and maximum theta. If only one value is specified,
-   *             it is used as minimum, and symmetric theta range is selected.</dd>
-   * <dt>"MIN_TRACK_HIT_LAYERS"</dt> <dd>Integer value: minimum number of tracker superlayers with hits.
-   *             {@link #getNumTrackerSuperLayers getNumTrackerSuperLayers(MCParticle)} method must be implemented.</dd>
-   * <dt>"PARTICLE_TYPES"</dt> <dd>One ore more <tt>ParticleType</tt> values: only particles
-   *             of these types will be selected.</dd></dl>
-   *
-   * By default, all cuts are disabled.
-   * 
-   * @param name   Name of the cut. Case is ignored.
-   * @param values  List of parameters to be used for configuring the cut.
-   * @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 setCut(String name, Object... values) {
-    Object value = values.length == 0 ? null : values[0];
-    try {
-      if (name.equalsIgnoreCase("CHARGED")) {
-        if (values.length == 0) {
-          _cut_Charged = 0;
-        } else {
-          if ((Boolean)values[0]) {
-            _cut_Charged = 1;
-          } else {
-            _cut_Charged = 2;
-          }
-        }
-      } else if (name.equalsIgnoreCase("PT")) {
-        if (values.length == 0) _cut_Pt = 0.;
-        _cut_Pt = (Double) value;
-      } else if (name.equalsIgnoreCase("THETA")) {
-        if (values.length == 0) {
-          _cut_ThetaMin = 0.;
-          _cut_ThetaMax = Math.PI;
-        } else if (values.length == 1) {
-          _cut_ThetaMin = (Double) values[0];
-          _cut_ThetaMax = Math.PI - _cut_ThetaMin;
-        } else {
-          _cut_ThetaMin = (Double) values[0];
-          _cut_ThetaMax = (Double) values[1];          
-        }
-      } else if (name.equalsIgnoreCase("MIN_TRACK_HIT_LAYERS")) {
-        if (values.length == 0) _cut_MinTrackerSuperLayers = 0;
-        _cut_MinTrackerSuperLayers = (Integer) value;
-      } else if (name.equalsIgnoreCase("PARTICLE_TYPES")) {
-        if (values.length == 0) {
-          _cut_Types = null;
-        } else {
-          _cut_Types = new HashSet<ParticleType>();
-          for (Object o : values) {
-            _cut_Types.add((ParticleType)o);
-          }
-        }
-      } else {
-        throw new NoSuchParameterException();
-      }
-    } catch (ClassCastException x) {
-      throw new IllegalArgumentException(x);
-    }
-  }
-
-
-// -- Implementing ICheatRecoDefinition :  ------------------------------------------
-
-  public String getName() {return _name;}
-
-
-// -- Methods defining "reconstructable" and "reconstructed" :  ----------------
-  
-  public boolean isTrackFindable(MCParticle mcParticle) {
-    
-    // Charge cut
-    
-    double charge = mcParticle.getCharge();
-    if (_cut_Charged == 1) {
-      if (Math.abs(charge) < .9) return false;
-    } else if (_cut_Charged == 2) {
-      if (Math.abs(charge) > .1) return false;
-    }
-   
-    // Pt cut
-    
-    Hep3Vector p = mcParticle.getMomentum();
-    double pT = Math.hypot(p.x(), p.y());
-    if (pT < _cut_Pt) return false;
-    
-    // Theta cut
-    
-    double theta = Math.acos(p.z()/p.magnitude());
-    if (theta < _cut_ThetaMin || theta > _cut_ThetaMax) return false;
-    
-    // Minimum number of hit layers cut
-    
-    if (_cut_MinTrackerSuperLayers > 0 && _cut_MinTrackerSuperLayers > getNumTrackerSuperLayers(mcParticle)) return false;
-    
-    // Particle type cut
-    
-    if (_cut_Types != null && (! _cut_Types.contains(mcParticle.getType()))) return false;
-    
-    // Passed all cuts !
-    
-    return true;
-  }
-
-
-// -- Helper methods to be implemented by subclasses:  -------------------------
-
-  protected int getNumTrackerSuperLayers(MCParticle mc) {
-    throw new UnsupportedOperationException();
-  }
-  
-// -- Private parts :  ---------------------------------------------------------
-  
-  private String _name;
-  
-  protected int _cut_Charged;
-  protected double _cut_Pt;
-  protected double _cut_ThetaMin, _cut_ThetaMax;
-  protected int _cut_MinTrackerSuperLayers;
-  protected Set<ParticleType> _cut_Types;
-}

lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/cheat
ICheatRecoDefinition.java removed after 1.1
diff -N ICheatRecoDefinition.java
--- ICheatRecoDefinition.java	22 Jan 2009 21:12:42 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,25 +0,0 @@
-package org.lcsim.contrib.onoprien.crux.cheat;
-
-import org.lcsim.event.MCParticle;
-
-/**
- * Interface to be implemented by classes that define reconstructable MCParticle.
- * Used by cheaters and performance analysis classes.
- *
- * @author D. Onoprienko
- * @version $Id: ICheatRecoDefinition.java,v 1.1 2009/01/22 21:12:42 onoprien Exp $
- */
-public interface ICheatRecoDefinition {
-
-  /**
-   * Returns the name of this definition.
-   */
-  String getName();
-
-  /**
-   * Returns <tt>true</tt> if the specified <tt>MCParticle</tt> produced a findable
-   * track, according to this definition.
-   */
-  boolean isTrackFindable(MCParticle mcParticle);
-
-}
CVSspam 0.2.8