Print

Print


Commit in lcsim/sandbox on MAIN
TrackingVolumeTest.java+104added 1.1


lcsim/sandbox
TrackingVolumeTest.java added at 1.1
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());
+		}				
+	}
+}
CVSspam 0.2.8