lcsim/sandbox
diff -N TrackingVolumeTest.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ TrackingVolumeTest.java 31 Aug 2009 18:21:33 -0000 1.1
@@ -0,0 +1,104 @@
+package org.lcsim;
+
+import junit.framework.TestCase;
+
+import java.io.File;
+import java.net.URL;
+
+import org.lcsim.util.Driver;
+import org.lcsim.util.loop.LCSimLoop;
+
+import org.lcsim.util.cache.FileCache;
+
+import org.lcsim.geometry.Detector;
+import org.lcsim.detector.ILogicalVolume;
+import org.lcsim.detector.IPhysicalVolume;
+import org.lcsim.detector.solids.Tube;
+
+/**
+ *
+ * Shows how to access the detector's tracking volume from an {@link org.lcsim.util.Driver}.
+ *
+ * @author Jeremy McCormick
+ * @version $Id: TrackingVolumeTest.java,v 1.1 2009/08/31 18:21:33 jeremy Exp $
+ */
+public class TrackingVolumeTest
+extends TestCase
+{
+ public void testTrackingVolume() throws Exception
+ {
+ URL url =
+ new URL("http://www.lcsim.org/test/lcio/K0L_Theta90_5GeV_slic_1_13_9_geant4_8_0_p01_2006-05-15_sid00.slcio");
+ FileCache cache = new FileCache();
+ File file = cache.getCachedFile(url);
+
+ LCSimLoop loop = new LCSimLoop();
+ loop.setLCIORecordSource(file);
+ loop.add( new TrackingVolumeAccessDriver() );
+ loop.loop(1, null);
+ loop.dispose();
+ }
+
+ class TrackingVolumeAccessDriver
+ extends Driver
+ {
+ /**
+ * This method is called when a new detector is loaded.
+ */
+ protected void detectorChanged(Detector detector)
+ {
+ StringBuffer buff = new StringBuffer();
+
+ // Get the tracking volume from the Detector.
+ ILogicalVolume trackingVolume = detector.getTrackingVolume().getLogicalVolume();
+
+ buff.append(trackingVolume.getName());
+ buff.append('\n');
+
+ // Loop over the layer envelopes in the tracking volume. These have no real
+ // material and are composed of Air.
+ for (IPhysicalVolume layer : trackingVolume.getDaughters())
+ {
+ buff.append(" " + layer.getName());
+ buff.append('\n');
+ // Loop over the slices within the layer. The slices contain the material.
+ for (IPhysicalVolume slice : layer.getLogicalVolume().getDaughters())
+ {
+ buff.append(" " + slice.getName() + " : ");
+
+ // Get the Tube for the slice.
+ Tube sliceTube = (Tube)layer.getLogicalVolume().getSolid();
+
+ // Looks like part of the barrel.
+ if (layer.getName().contains("Barrel"))
+ {
+ // Print thickness for the barrel which corresponds to outer radius minus inner radius.
+ buff.append(sliceTube.getOuterRadius() - sliceTube.getInnerRadius() + " mm ");
+ }
+ // Looks like part of the endcap.
+ else if (layer.getName().contains("Endcap") || layer.getName().contains("positive") || layer.getName().contains("negative"))
+ {
+ // Print thickness for the endcap which correponds to Z.
+ buff.append(sliceTube.getZHalfLength() * 2 + " mm ");
+ }
+ // Don't know what it is! Ignore it.
+ else
+ {}
+
+ // Print material name.
+ buff.append(slice.getLogicalVolume().getMaterial().getName());
+
+ if (slice.isSensitive())
+ {
+ // Flag as sensitive.
+ buff.append(", sensitive");
+ }
+
+ buff.append('\n');
+ }
+ }
+
+ System.out.println(buff.toString());
+ }
+ }
+}