Print

Print


Commit in lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/itc on MAIN
LayerData.java+1-31.1 -> 1.2
RosaryClusterer.java+14-101.1 -> 1.2
DotAndBeadFinder.java-561.1 removed
algorithms/FindDotsAndBeads_Basic.java+127added 1.1
+142-69
1 added + 1 removed + 2 modified, total 4 files
Treat Dot and Bead Finder in the same way as other plugins.

lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/itc
LayerData.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- LayerData.java	29 Mar 2009 23:44:19 -0000	1.1
+++ LayerData.java	30 Mar 2009 05:41:21 -0000	1.2
@@ -6,15 +6,13 @@
 import org.lcsim.geometry.IDDecoder;
 
 import org.lcsim.contrib.onoprien.crux.geom.CalLayer;
-import org.lcsim.contrib.onoprien.crux.geom.CalModule;
-import org.lcsim.contrib.onoprien.crux.geom.CalGeometry;
 
 /**
  * An instance of this class stores various data structures used by {@link RosaryClusterer}
  * that belong to a particular layer of a particular calorimeter module.
  *
  * @author D. Onoprienko
- * @version $Id: LayerData.java,v 1.1 2009/03/29 23:44:19 onoprien Exp $
+ * @version $Id: LayerData.java,v 1.2 2009/03/30 05:41:21 onoprien Exp $
  */
 public class LayerData {
 

lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/itc
RosaryClusterer.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- RosaryClusterer.java	29 Mar 2009 23:44:19 -0000	1.1
+++ RosaryClusterer.java	30 Mar 2009 05:41:21 -0000	1.2
@@ -27,6 +27,9 @@
  * <p>
  * Methods that can be overridden to tune the algorithm:
  * <dl>
+ * <dt>{@link #findDotsAndBeads() findDotsAndBeads(CruxHitMap)}</dt>
+ * <dd>Finds Dots and Beads in the calorimeter, and fills corresponding lists for each layer in
+ *     the <tt>_layerDB</tt>.</dd>
  * <dt>{@link #chooseSeedLayers()}</dt>
  * <dd>Returns a list of calorimeter layers from which new rosaries can be started,
  *     in order in which they should be processed.</dd>
@@ -60,7 +63,7 @@
  * </dl>
  *
  * @author D. Onoprienko
- * @version $Id: RosaryClusterer.java,v 1.1 2009/03/29 23:44:19 onoprien Exp $
+ * @version $Id: RosaryClusterer.java,v 1.2 2009/03/30 05:41:21 onoprien Exp $
  */
 public class RosaryClusterer extends Driver implements Clusterer, JobEventListener {
 
@@ -77,8 +80,6 @@
 
   private boolean _saveDotsBeads = false;
 
-  protected DotAndBeadFinder _dotBeadFinder;
-
   protected LayerDataBase _layerDB;
   protected int _nLayers;
 
@@ -94,6 +95,7 @@
   protected AcceptThreadedRosary _acceptThreadedRosary;
   protected SelectRosaries _selectRosaries;
   protected ComputeTrajectory _computeTrajectory;
+  protected FindDotsAndBeads _findDotsAndBeads;
 
 
 // -- Constructors and initialization :  ---------------------------------------
@@ -107,7 +109,6 @@
   
   public void detectorChanged(JobEvent jEvent) {
     _nLayers = -1;
-    _dotBeadFinder = new DotAndBeadFinder();
   }
 
 // -- Set/Get plug-in algorithms :  --------------------------------------------
@@ -124,6 +125,7 @@
   public void setAcceptThreadedRosary(AcceptThreadedRosary plugin) {_acceptThreadedRosary = plugin;}
   public void setSelectRosaries(SelectRosaries plugin) {_selectRosaries = plugin;}
   public void setComputeTrajectory(ComputeTrajectory plugin) {_computeTrajectory = plugin;}
+  public void setFindDotsAndBeads(FindDotsAndBeads plugin) {_findDotsAndBeads = plugin;}
 
   final public ChooseSeedLayers getChooseSeedLayers() {return _chooseSeedLayers;}
   final public SeedFromTrack getSeedFromTrack() {return _seedFromTrack;}
@@ -137,6 +139,8 @@
   final public AcceptThreadedRosary getAcceptThreadedRosary() {return _acceptThreadedRosary;}
   final public SelectRosaries getSelectRosaries() {return _selectRosaries;}
   final public ComputeTrajectory getComputeTrajectory() {return _computeTrajectory;}
+  final public FindDotsAndBeads getFindDotsAndBeads() {return _findDotsAndBeads;}
+
 
 // -- Setters :  ---------------------------------------------------------------
 
@@ -282,8 +286,6 @@
 // -- Actual clustering algorithm :  -------------------------------------------
 
   public List<Cluster> createClusters(CruxHitMap hitMap) {
-    
-    _layerDB = new LayerDataBase();
 
     if (_inParticles != null) {
       for (CruxParticle p : _inParticles) {
@@ -294,10 +296,8 @@
     
     // Find Dots and Beads in all layers :
     
-    for (LayerData layerData : _layerDB) {
-      CruxHitMap layerMap = hitMap.toMap(layerData.cruxLayer);
-      _dotBeadFinder.findDotsAndBeads(layerMap, layerData.dots, layerData.beads);
-    }
+    _layerDB = new LayerDataBase();
+    _findDotsAndBeads.findDotsAndBeads(hitMap);
     _layerDB.initialize();
 
     // Create Rosaries from tracks :
@@ -373,6 +373,10 @@
 
 // -- Algorithm plug-in interfaces :  ------------------------------------------
 
+  public interface FindDotsAndBeads {
+    void findDotsAndBeads(CruxHitMap hitMap);
+  }
+
   public interface ChooseSeedLayers {
     List<CalLayer> chooseSeedLayers();
   }

lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/itc
DotAndBeadFinder.java removed after 1.1
diff -N DotAndBeadFinder.java
--- DotAndBeadFinder.java	29 Mar 2009 23:44:19 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,56 +0,0 @@
-package org.lcsim.contrib.onoprien.crux.itc;
-
-import java.util.*;
-
-import org.lcsim.event.Cluster;
-import org.lcsim.recon.cluster.nn.NearestNeighborClusterer;
-import org.lcsim.recon.cluster.util.Clusterer;
-
-import org.lcsim.contrib.onoprien.util.job.JobManager;
-
-import org.lcsim.contrib.onoprien.crux.geom.CalLayer;
-import org.lcsim.contrib.onoprien.crux.geom.CalGeometry;
-import org.lcsim.contrib.onoprien.crux.infrastructure.*;
-
-/**
- * Clusterer that creates {@link Dot}s and {@link Beads} on a layer.
- *
- * @author D. Onoprienko
- * @version $Id: DotAndBeadFinder.java,v 1.1 2009/03/29 23:44:19 onoprien Exp $
- */
-public class DotAndBeadFinder {
-  
-// -- Constructors and initialization :  ---------------------------------------
-  
-  public DotAndBeadFinder() {
-    _clusterer = new NearestNeighborClusterer(1, 1, 0, 0, 0.);
-    _geom = JobManager.defaultInstance().get(CalGeometry.class);
-  }
-    
-  
-// -- Dot finding :  -----------------------------------------------------------
-  
-  /**
-   * Fills the supplied lists with <tt>Dots</tt> and <tt>Beads</tt> created from hits in the 
-   * given map. The map should only contain hits on a single calorimeter layer.
-   */
-  public void findDotsAndBeads(CruxHitMap hitMap, ArrayList<Dot> dots, ArrayList<Bead> beads) {
-    if (hitMap.isEmpty()) return;
-    CalLayer layer = _geom.getLayer(hitMap.values().iterator().next());
-    List<Cluster> clusters = _clusterer.createClusters(hitMap);
-    for (Cluster cluster : clusters) {
-      if (cluster.getSize() < 2) {
-        dots.add(new Dot(layer, cluster));
-      } else {
-        beads.add(new Bead(layer, cluster));
-      }
-    }
-    dots.trimToSize();
-    beads.trimToSize();
-  }
-
-// -- Private parts :  ---------------------------------------------------------
-  
-  Clusterer _clusterer;
-  CalGeometry _geom;
-}

lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/itc/algorithms
FindDotsAndBeads_Basic.java added at 1.1
diff -N FindDotsAndBeads_Basic.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ FindDotsAndBeads_Basic.java	30 Mar 2009 05:41:22 -0000	1.1
@@ -0,0 +1,127 @@
+package org.lcsim.contrib.onoprien.crux.itc.algorithms;
+
+import java.util.*;
+
+import org.lcsim.event.Cluster;
+import org.lcsim.recon.cluster.nn.NearestNeighborClusterer;
+import org.lcsim.recon.cluster.util.Clusterer;
+
+import org.lcsim.contrib.onoprien.util.NoSuchParameterException;
+import org.lcsim.contrib.onoprien.util.job.Driver;
+import org.lcsim.contrib.onoprien.util.job.JobManager;
+
+import org.lcsim.contrib.onoprien.crux.geom.CalLayer;
+import org.lcsim.contrib.onoprien.crux.geom.CalGeometry;
+import org.lcsim.contrib.onoprien.crux.infrastructure.CruxHitMap;
+import org.lcsim.contrib.onoprien.crux.itc.Bead;
+import org.lcsim.contrib.onoprien.crux.itc.Dot;
+import org.lcsim.contrib.onoprien.crux.itc.LayerData;
+import org.lcsim.contrib.onoprien.crux.itc.LayerDataBase;
+import org.lcsim.contrib.onoprien.crux.itc.RosaryClusterer;
+
+/**
+ * Implements findDotsAndBeads(CruxHitMap hitMap).
+ * <p>
+ * See methods javadoc for details on algorithms and implementations.
+ *
+ * @author D. Onoprienko
+ * @version $Id: FindDotsAndBeads_Basic.java,v 1.1 2009/03/30 05:41:22 onoprien Exp $
+ */
+public class FindDotsAndBeads_Basic implements RosaryClusterer.FindDotsAndBeads {
+
+// -- Private parts :  ---------------------------------------------------------
+
+  RosaryClusterer _clusterer;
+  CalGeometry _geom;
+
+  Clusterer _layerClusterer;
+  int _dotSizeLimit;
+
+
+// -- Constructors and initialization :  ---------------------------------------
+
+  public FindDotsAndBeads_Basic(RosaryClusterer clusterer) {
+
+    _clusterer = clusterer;
+    _geom = JobManager.defaultInstance().get(CalGeometry.class);
+
+    _layerClusterer = new NearestNeighborClusterer(1, 1, 0, 0, 0.);
+    _dotSizeLimit = 1;
+  }
+
+
+// -- Setters :  ---------------------------------------------------------------
+
+  /**
+   * Set any parameter.
+   * The following parameters can be set with this method:
+   * <p><dl>
+   * <dt>"CLUSTERER"</dt> <dd>{@link Clusterer} to be used on each calorimeter layer.
+   *          <br>Default: <tt>NearestNeighborClusterer(1, 1, 0, 0, 0.)</tt>.</dd>
+   * <dt>"DOT_SIZE_LIMIT"</dt> <dd>Integer value. Clusters with no more hits than this value
+   *          will be considered Dots. All other clusters will be treated as Beads.
+   *          <br>Default: 1.</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("N")) {
+        _layerClusterer = (Clusterer) values[0];
+      } else if (name.equalsIgnoreCase("DOT_SIZE_LIMIT")) {
+        _dotSizeLimit = (Integer) values[0];
+      } else {
+        throw new NoSuchParameterException(name);
+      }
+    } catch (ClassCastException x) {
+      throw new IllegalArgumentException(Driver.ERR_VIT + name, x);
+    }
+  }
+
+
+// -- Algorithms :  ------------------------------------------------------------
+
+  /**
+   * Finds Dots and Beads in the calorimeter, and fills corresponding lists for each layer in
+   * the {@link RosaryClusterer#getLayerDB()}.
+   * <p>
+   * Algorithm :  use the specified {@link Clusterer} on each layer separately, then
+   * classify clusters into Dots and Beads depending on their size.
+   *
+   * @param hitMap   Map of all calorimeter hits to be used in finding Dots and Beads.
+   */
+  public void findDotsAndBeads(CruxHitMap hitMap) {
+
+    LayerDataBase db = _clusterer.getLayerDB();
+
+    for (LayerData data : db) {
+
+      CalLayer layer = data.cruxLayer;
+      ArrayList<Dot> dots = data.dots;
+      ArrayList<Bead> beads = data.beads;
+
+      CruxHitMap layerMap = hitMap.toMap(layer);
+      if (layerMap.isEmpty()) return;
+
+      List<Cluster> clusters = _clusterer.createClusters(layerMap);
+      for (Cluster cluster : clusters) {
+        if (cluster.getSize() <= _dotSizeLimit) {
+          dots.add(new Dot(layer, cluster));
+        } else {
+          beads.add(new Bead(layer, cluster));
+        }
+      }
+      dots.trimToSize();
+      beads.trimToSize();
+
+    }
+
+    db.initialize();
+  }
+
+}
CVSspam 0.2.8