Print

Print


Commit in lcsim/src/org/lcsim/contrib/onoprien/tracking on MAIN
ExampleDriver.java+16-111.1 -> 1.2
geom/SegmentationManager.java+39-71.1 -> 1.2
geom/segmentation/CylindricalBarrelSegmenter.java+20-121.2 -> 1.3
                 /RingSegmenter.java+18-121.2 -> 1.3
                 /SubdetectorBasedSegmentation.java+4-21.1 -> 1.2
+97-44
5 modified files


lcsim/src/org/lcsim/contrib/onoprien/tracking
ExampleDriver.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- ExampleDriver.java	7 May 2007 19:02:41 -0000	1.1
+++ ExampleDriver.java	10 May 2007 07:11:12 -0000	1.2
@@ -1,22 +1,26 @@
 package org.lcsim.contrib.onoprien.tracking;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.lcsim.event.EventHeader;
 import org.lcsim.recon.cat.util.Const;
 import org.lcsim.util.Driver;
 
-
-
 import org.lcsim.contrib.onoprien.tracking.digitization.DigitizationDriver;
 import org.lcsim.contrib.onoprien.tracking.digitization.Digitizer;
 import org.lcsim.contrib.onoprien.tracking.digitization.digitizers.DigitizerSmear;
 import org.lcsim.contrib.onoprien.tracking.geom.SegmentationManager;
+import org.lcsim.contrib.onoprien.tracking.geom.Sensor;
 import org.lcsim.contrib.onoprien.tracking.geom.segmentation.CylindricalBarrelSegmenter;
 import org.lcsim.contrib.onoprien.tracking.geom.segmentation.RingSegmenter;
 import org.lcsim.contrib.onoprien.tracking.geom.segmentation.SubdetectorBasedSegmentation;
+import org.lcsim.contrib.onoprien.tracking.hit.DigiTrackerHit;
 
 /**
  *
  * @author D.Onoprienko
- * @version $Id: ExampleDriver.java,v 1.1 2007/05/07 19:02:41 onoprien Exp $
+ * @version $Id: ExampleDriver.java,v 1.2 2007/05/10 07:11:12 onoprien Exp $
  */
 public class ExampleDriver extends Driver {
   
@@ -27,28 +31,28 @@
     SubdetectorBasedSegmentation segmentationManager = new SubdetectorBasedSegmentation();
     
     CylindricalBarrelSegmenter vtxBarrelSegmenter = new CylindricalBarrelSegmenter("VertexBarrel");
-    vtxBarrelSegmenter.setStripLength(5.*Const.micrometer);
-    vtxBarrelSegmenter.setStripWidth(5.*Const.micrometer);
+    vtxBarrelSegmenter.setStripLength(25.*Const.micrometer);
+    vtxBarrelSegmenter.setStripWidth(25.*Const.micrometer);
     segmentationManager.addSegmenter("VertexBarrel", vtxBarrelSegmenter);
     
     CylindricalBarrelSegmenter trackerBarrelSegmenter = new CylindricalBarrelSegmenter("TrackerBarrel");
     trackerBarrelSegmenter.setStripLength(10.*Const.cm);
-    trackerBarrelSegmenter.setStripWidth(5.*Const.micrometer);
+    trackerBarrelSegmenter.setStripWidth(25.*Const.micrometer);
     segmentationManager.addSegmenter("TrackerBarrel", trackerBarrelSegmenter);
     
     RingSegmenter vtxEndcapSegmenter = new RingSegmenter("VertexEndcap");
-    vtxEndcapSegmenter.setStripLength(5.*Const.micrometer);
-    vtxEndcapSegmenter.setStripWidth(5.*Const.micrometer);
+    vtxEndcapSegmenter.setStripLength(25.*Const.micrometer);
+    vtxEndcapSegmenter.setStripWidth(25.*Const.micrometer);
     segmentationManager.addSegmenter("VertexEndcap", vtxEndcapSegmenter);
     
     RingSegmenter forwardSegmenter = new RingSegmenter("TrackerForward");
-    forwardSegmenter.setStripLength(5.*Const.micrometer);
-    forwardSegmenter.setStripWidth(5.*Const.micrometer);
+    forwardSegmenter.setStripLength(25.*Const.micrometer);
+    forwardSegmenter.setStripWidth(25.*Const.micrometer);
     segmentationManager.addSegmenter("TrackerForward", forwardSegmenter);
     
     RingSegmenter trackerEndcapSegmenter = new RingSegmenter("TrackerEndcap");
     trackerEndcapSegmenter.setStripLength(10.*Const.cm);
-    trackerEndcapSegmenter.setStripWidth(5.*Const.micrometer);
+    trackerEndcapSegmenter.setStripWidth(25.*Const.micrometer);
     trackerEndcapSegmenter.setStereoAngle(45.*Const.degree);
     segmentationManager.addSegmenter("TrackerEndcap", trackerEndcapSegmenter);
     
@@ -59,6 +63,7 @@
     Digitizer digitizer = new DigitizerSmear();
 
     DigitizationDriver digitizationDriver = new DigitizationDriver(digitizer);
+    digitizationDriver.setOutputCollection("DigiHits");
     add(digitizationDriver);
         
   }

lcsim/src/org/lcsim/contrib/onoprien/tracking/geom
SegmentationManager.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- SegmentationManager.java	7 May 2007 19:02:42 -0000	1.1
+++ SegmentationManager.java	10 May 2007 07:11:12 -0000	1.2
@@ -2,6 +2,7 @@
 
 import java.lang.ref.SoftReference;
 import java.util.ArrayList;
+import java.util.List;
 import java.util.Collection;
 import java.util.HashMap;
 
@@ -9,6 +10,9 @@
 import org.lcsim.conditions.ConditionsEvent;
 import org.lcsim.conditions.ConditionsManager;
 import org.lcsim.conditions.ConditionsManager.ConditionsSetNotFoundException;
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.IGeometryInfo;
+import org.lcsim.detector.IPhysicalVolume;
 import org.lcsim.geometry.Detector;
 import org.lcsim.event.SimTrackerHit;
 import hep.physics.vec.BasicHep3Vector;
@@ -24,7 +28,7 @@
  * {@link #getSegmenters()} methods.
  *
  * @author D.Onoprienko
- * @version $Id: SegmentationManager.java,v 1.1 2007/05/07 19:02:42 onoprien Exp $
+ * @version $Id: SegmentationManager.java,v 1.2 2007/05/10 07:11:12 onoprien Exp $
  */
 abstract public class SegmentationManager implements ConditionsListener {
   
@@ -32,8 +36,6 @@
   
   public SegmentationManager() {
     _sensorMap = new HashMap<Integer, SoftReference<Sensor>>();
-    ConditionsManager.defaultInstance().addConditionsListener(this);
-    conditionsChanged(null);
   }
 
 // -- Initialization and cleanup :  --------------------------------------------
@@ -64,8 +66,8 @@
       int prefix = 0;
       for (Segmenter segmenter : segmenterList) {
         segmenter.setPostfixLength(_idPostfixLength);
-        segmenter.setPrefix(prefix);
-        _segmenters.set(prefix++, segmenter);
+        segmenter.setPrefix(prefix++);
+        _segmenters.add(segmenter);
       }
     } catch (ConditionsSetNotFoundException x) {}
   }
@@ -78,7 +80,9 @@
    * Returns {@link Sensor} object corresponding to the given sensor ID.
    */
   public Sensor getSensor(int sensorID) {
-    Sensor sensor = _sensorMap.get(sensorID).get();
+    Sensor sensor = null;
+    SoftReference<Sensor> ref = _sensorMap.get(sensorID);
+    if (ref != null) sensor = ref.get();
     if (sensor == null) {
       sensor = getSegmenter(sensorID).getSensor(sensorID);
       if (sensor != null) _sensorMap.put(sensorID, new SoftReference<Sensor>(sensor));
@@ -150,9 +154,16 @@
   
 // -- Static access to segmentation manader :  - -------------------------------
   
-  /** Set default segmentation manager. */
+  /** 
+   * Set default segmentation manager. 
+   * The supplied <tt>SegmentationManager</tt> object is also added to the list 
+   * of conditions listeners, and its {@link #conditionsChanged(ConditionsEvent)} 
+   * method is called immediately.
+   */
   static public void setDefaultInstance(SegmentationManager segMan) {
     _defaultSegMan = segMan;
+    ConditionsManager.defaultInstance().addConditionsListener(segMan);
+    segMan.conditionsChanged(null);
   }
   
   /**
@@ -173,6 +184,27 @@
     return _segmenters.get(sensorID >> _idPostfixLength);
   }
   
+  /**
+   * Returns a list of sensitive lowest-level decendents of the diven detector element.
+   * FIXME: This should be a DetectorElement method !
+   */
+  static public List<IDetectorElement> getLeaves(IDetectorElement del) {
+    ArrayList<IDetectorElement> out = new ArrayList<IDetectorElement>();
+    if (del.hasChildren()) {
+      for (IDetectorElement child : del.getChildren()) {
+        out.addAll(getLeaves(child));
+      }
+    } else {
+      IGeometryInfo gInfo = del.getGeometry();
+      if (gInfo != null) {
+        IPhysicalVolume pVol = gInfo.getPhysicalVolume();
+        if (pVol != null) out.add(del);
+//        if (pVol != null && pVol.isSensitive()) out.add(del); Returns false for every volume - why ?
+      }
+    }
+    return out;
+  }
+  
 // -- Private parts :  ---------------------------------------------------------
   
   static private SegmentationManager _defaultSegMan;

lcsim/src/org/lcsim/contrib/onoprien/tracking/geom/segmentation
CylindricalBarrelSegmenter.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- CylindricalBarrelSegmenter.java	9 May 2007 23:57:34 -0000	1.2
+++ CylindricalBarrelSegmenter.java	10 May 2007 07:11:12 -0000	1.3
@@ -1,8 +1,11 @@
 package org.lcsim.contrib.onoprien.tracking.geom.segmentation;
 
+import java.util.List;
+
 import hep.physics.vec.BasicHep3Vector;
 import org.lcsim.event.SimTrackerHit;
 import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.Subdetector;
 import org.lcsim.detector.IDetectorElement;
 import org.lcsim.detector.IGeometryInfo;
 import org.lcsim.detector.ILogicalVolume;
@@ -10,6 +13,7 @@
 import org.lcsim.detector.solids.Tube;
 import org.lcsim.recon.cat.util.Const;
 
+import org.lcsim.contrib.onoprien.tracking.geom.SegmentationManager;
 import org.lcsim.contrib.onoprien.tracking.geom.Segmenter;
 import org.lcsim.contrib.onoprien.tracking.geom.Sensor;
 import org.lcsim.contrib.onoprien.tracking.geom.SensorType;
@@ -19,7 +23,7 @@
 /**
  *
  * @author D.Onoprienko
- * @version $Id: CylindricalBarrelSegmenter.java,v 1.2 2007/05/09 23:57:34 jeremy Exp $
+ * @version $Id: CylindricalBarrelSegmenter.java,v 1.3 2007/05/10 07:11:12 onoprien Exp $
  */
 public class CylindricalBarrelSegmenter extends Segmenter {
   
@@ -29,11 +33,11 @@
   public CylindricalBarrelSegmenter(String subdetectorName) {
     _sdName = subdetectorName;
     if (_sdName == "TrackerBarrel") {
-      _stripWidth = 5. * Const.micrometer;
+      _stripWidth = 25. * Const.micrometer;
       _stripLength = 10. * Const.cm;
     } else if (_sdName == "VertexBarrel") {
-      _stripWidth = 5. * Const.micrometer;
-      _stripLength = 5. * Const.micrometer;
+      _stripWidth = 25. * Const.micrometer;
+      _stripLength = 25. * Const.micrometer;
     }
   }
   
@@ -42,17 +46,21 @@
    */
   public void detectorChanged(Detector detector) {
     super.detectorChanged(detector);
-    for (IDetectorElement del : detector.getSubdetector(_sdName).getDetectorElement().getChildren()) {
+    List<IDetectorElement> sensors = SegmentationManager.getLeaves(detector.getSubdetector(_sdName).getDetectorElement());
+    _nLayers = sensors.size();
+    _radius = new double[_nLayers];
+    _length = new double[_nLayers];
+    _thickness = new double[_nLayers];
+    int id = 0;
+    for (IDetectorElement del : sensors) {
       IGeometryInfo gInfo = del.getGeometry();
-      ILogicalVolume lv = gInfo.getLogicalVolume(); 
-      IPhysicalVolume pv = gInfo.getPath().getLeafVolume();
-      int layer = pv.getCopyNumber();
-      Tube solid = (Tube) lv.getSolid();
+      Tube solid = (Tube) gInfo.getLogicalVolume().getSolid();
       double rInner = solid.getInnerRadius();
       double rOuter = solid.getOuterRadius();
-      _radius[layer] = (rInner + rOuter)/2.;
-      _length[layer] = solid.getZHalfLength()*2.;
-      _thickness[layer] = (rOuter - rInner);
+      _radius[id] = (rInner + rOuter)/2.;
+      _length[id] = solid.getZHalfLength()*2.;
+      _thickness[id] = (rOuter - rInner);
+      id++;
     }
   }
   

lcsim/src/org/lcsim/contrib/onoprien/tracking/geom/segmentation
RingSegmenter.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- RingSegmenter.java	9 May 2007 19:22:43 -0000	1.2
+++ RingSegmenter.java	10 May 2007 07:11:12 -0000	1.3
@@ -1,5 +1,7 @@
 package org.lcsim.contrib.onoprien.tracking.geom.segmentation;
 
+import java.util.List;
+
 import hep.physics.vec.BasicHep3Vector;
 import hep.physics.vec.Hep3Vector;
 import org.lcsim.event.SimTrackerHit;
@@ -12,6 +14,7 @@
 import org.lcsim.detector.solids.Tube;
 import org.lcsim.recon.cat.util.Const;
 
+import org.lcsim.contrib.onoprien.tracking.geom.SegmentationManager;
 import org.lcsim.contrib.onoprien.tracking.geom.Segmenter;
 import org.lcsim.contrib.onoprien.tracking.geom.Sensor;
 import org.lcsim.contrib.onoprien.tracking.geom.SensorType;
@@ -24,7 +27,7 @@
  * Fix relation between layer returned by hits and copy number.
  *
  * @author D.Onoprienko
- * @version $Id: RingSegmenter.java,v 1.2 2007/05/09 19:22:43 jeremy Exp $
+ * @version $Id: RingSegmenter.java,v 1.3 2007/05/10 07:11:12 onoprien Exp $
  */
 public class RingSegmenter extends Segmenter {
   
@@ -34,11 +37,11 @@
   public RingSegmenter(String subdetectorName) {
     _sdName = subdetectorName;
     if (_sdName == "TrackerEndcap") {
-      setStripWidth(5.*Const.micrometer);
+      setStripWidth(25.*Const.micrometer);
       setStripLength(10.*Const.cm);
     } else if (_sdName == "VertexEndcap" || _sdName == "TrackerForward") {
-      setStripWidth(5.*Const.micrometer);
-      setStripLength(5.*Const.micrometer);
+      setStripWidth(25.*Const.micrometer);
+      setStripLength(25.*Const.micrometer);
     }
     setStereoAngle(Math.PI / 2.);
   }
@@ -48,18 +51,21 @@
    */
   public void detectorChanged(Detector detector) {
     super.detectorChanged(detector);
-    Subdetector subDet = detector.getSubdetector(_sdName);
-    _nDisks = subDet.getLayering().getNumberOfLayers();
-    for (IDetectorElement del : subDet.getDetectorElement().getChildren()) {
+    List<IDetectorElement> sensors = SegmentationManager.getLeaves(detector.getSubdetector(_sdName).getDetectorElement());
+    _nDisks = sensors.size();
+    _radiusInner = new double[_nDisks];
+    _radiusOuter = new double[_nDisks];
+    _thickness = new double[_nDisks];
+    _z = new double[_nDisks];
+    int id = 0;
+    for (IDetectorElement del : sensors) {
       IGeometryInfo gInfo = del.getGeometry();
-      ILogicalVolume lv = gInfo.getLogicalVolume(); 
-      IPhysicalVolume pv = gInfo.getPath().getLeafVolume();
-      int id = pv.getCopyNumber();
-      Tube solid = (Tube) lv.getSolid();
+      Tube solid = (Tube) gInfo.getLogicalVolume().getSolid();
       _radiusInner[id] = solid.getInnerRadius();
       _radiusOuter[id] = solid.getOuterRadius();
       _thickness[id] = solid.getZHalfLength()*2.;
-      _z[id] = pv.getTranslation().z();
+      _z[id] = gInfo.getPosition().z();
+      id++;
     }
   }
   

lcsim/src/org/lcsim/contrib/onoprien/tracking/geom/segmentation
SubdetectorBasedSegmentation.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- SubdetectorBasedSegmentation.java	7 May 2007 19:02:42 -0000	1.1
+++ SubdetectorBasedSegmentation.java	10 May 2007 07:11:12 -0000	1.2
@@ -14,14 +14,16 @@
  * Segmentation that chooses {@link Segmenter} based on subdetector where the hit occured.
  *
  * @author D.Onoprienko
- * @version $Id: SubdetectorBasedSegmentation.java,v 1.1 2007/05/07 19:02:42 onoprien Exp $
+ * @version $Id: SubdetectorBasedSegmentation.java,v 1.2 2007/05/10 07:11:12 onoprien Exp $
  */
 public class SubdetectorBasedSegmentation extends SegmentationManager {
   
 // -- Constructors and initialization :  ---------------------------------------
   
   /** Create an instance of <tt>SubdetectorBasedSegmentation</tt>. */
-  public SubdetectorBasedSegmentation() {}
+  public SubdetectorBasedSegmentation() {
+    _nameToSegmenter = new HashMap<String, Segmenter>();
+  }
   
   /** 
    * Detector dependent initialization.
CVSspam 0.2.8