5 modified files
lcsim/src/org/lcsim/contrib/onoprien/tracking
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
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
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
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
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