Commit in lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/cheat on MAIN
RecoDefinitionExtended.java+48-261.1 -> 1.2
Enable use of arbitrary collections of ITrackerHits in reconstructable particle definition.

lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/cheat
RecoDefinitionExtended.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- RecoDefinitionExtended.java	24 Jan 2009 05:11:46 -0000	1.1
+++ RecoDefinitionExtended.java	24 Jan 2009 22:38:34 -0000	1.2
@@ -4,10 +4,14 @@
 
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.MCParticle;
+import org.lcsim.event.SimTrackerHit;
 import org.lcsim.geometry.Subdetector;
 
 import org.lcsim.contrib.onoprien.util.NoSuchParameterException;
+import org.lcsim.contrib.onoprien.util.job.JobManager;
 
+import org.lcsim.contrib.onoprien.vsegment.geom.SegmentationManager;
+import org.lcsim.contrib.onoprien.vsegment.geom.Sensor;
 import org.lcsim.contrib.onoprien.vsegment.hit.ITrackerHit;
 import org.lcsim.contrib.onoprien.vsegment.mctruth.MCTruthVS;
 
@@ -20,7 +24,7 @@
  * the methods.
  *
  * @author D. Onoprienko
- * @version $Id: RecoDefinitionExtended.java,v 1.1 2009/01/24 05:11:46 onoprien Exp $
+ * @version $Id: RecoDefinitionExtended.java,v 1.2 2009/01/24 22:38:34 onoprien Exp $
  */
 public class RecoDefinitionExtended extends RecoDefinition {
   
@@ -74,9 +78,14 @@
    * 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>
+   * <dt>"TRACKER_HIT_COLLECTIONS"</dt> <dd>Zero or more <tt>String</tt> values specifying
+   *     the names of tracker hit collections to be used by this
+   *     definition for computing various parameters relevant to tracker-related cuts.
+   *     The hits in the specified collections must be of type {@link ITrackerHit}. If an
+   *     empty <tt>String</tt> is supplied as the first value, tracker clusters will be used.
+   *     If the setter is called with no values, <tt>SimTrackerHits</tt> will be used instead of
+   *     digitized hits.<br>
+   *     Default: <tt>SimTrackerHits</tt> are used.</dd>
    * </dl>
    *
    * @param name   Name of the parameter. Case is ignored.
@@ -90,6 +99,8 @@
       if (name.equalsIgnoreCase("TRACKER_HIT_COLLECTIONS")) {
         if (values.length == 0) {
           _trackerHitListNames = null;
+        } else if (((String)(values[0])).equals("")) {
+          _trackerHitListNames = Collections.emptyList();
         } else {
           _trackerHitListNames = new ArrayList<String>(values.length);
           for (Object o : values) _trackerHitListNames.add((String)o);
@@ -146,42 +157,53 @@
 
   protected int getNumTrackerSuperLayers(MCParticle mc) {
 
-    List<? extends ITrackerHit> hits = Collections.emptyList();
+    SegmentationManager segMan = null;
+    List<? extends Object> hits;
     if (_trackerHitListNames == null) {
+      hits = _mcTruthVS.getSimTrackerHits(mc);
+      segMan = JobManager.defaultInstance().get(SegmentationManager.class);
+    } else if (_trackerHitListNames.isEmpty()) {
       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) {}
-        }
+        _mc2thList = _mcTruthVS.mapByMCParticle(_trackerHitListNames.toArray(new String[0]));
       }
       hits = _mc2thList.get(mc);
+      if (hits == null) return 0;
     }
     
     int nLayers = 0;
     Subdetector sd = null;
     int layer = -1;
-    for (ITrackerHit hit : hits) {
-      Subdetector sd1 = hit.getSubdetector();
-      int layer1 = hit.getLayer();
+    for (Object ob : hits) {
+      Subdetector sd1;
+      int layer1;
+      if (ob instanceof ITrackerHit) {
+        ITrackerHit hit = (ITrackerHit) ob;
+        sd1 = hit.getSubdetector();
+        layer1 = hit.getLayer();
+      } else {
+        SimTrackerHit hit = (SimTrackerHit) ob;
+        sd1 = hit.getSubdetector();
+        layer1 = hit.getLayer();
+      }
       if (sd != sd1 || layer != layer1) {
         sd = sd1;
         layer = layer1;
-        if (hit.getType().nUnmeasured() == 0) {
+        ITrackerHit.Type hitType;
+        if (ob instanceof ITrackerHit) {
+          ITrackerHit hit = (ITrackerHit) ob;
+          hitType = hit.getType();
+        } else {
+          SimTrackerHit hit = (SimTrackerHit) ob;
+          List<Sensor> sensors = segMan.getSensor(hit);
+          if (sensors.isEmpty()) {
+            hitType = ITrackerHit.Type.UNKNOWN;
+          } else {
+            hitType = sensors.get(0).getType().getHitType();
+          }
+        }
+        if (hitType.nUnmeasured() == 0) {
           nLayers += 2;
         } else {
           nLayers += 1;
CVSspam 0.2.8