Commit in GeomConverter/src/org/lcsim/detector/converter/compact on MAIN
MultiLayerTrackerConverter.java+117added 1.1
JM: The org.lcsim.detector converter for MultiLayerTracker.

GeomConverter/src/org/lcsim/detector/converter/compact
MultiLayerTrackerConverter.java added at 1.1
diff -N MultiLayerTrackerConverter.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ MultiLayerTrackerConverter.java	20 Mar 2007 23:57:45 -0000	1.1
@@ -0,0 +1,117 @@
+package org.lcsim.detector.converter.compact;
+
+import org.lcsim.detector.DetectorElement;
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.ILogicalVolume;
+import org.lcsim.detector.LogicalVolume;
+import org.lcsim.detector.PhysicalVolume;
+import org.lcsim.detector.material.IMaterial;
+import org.lcsim.detector.material.MaterialStore;
+import org.lcsim.detector.solids.Tube;
+import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.Subdetector;
+import org.lcsim.geometry.layer.Layer;
+import org.lcsim.geometry.layer.LayerSlice;
+import org.lcsim.geometry.layer.Layering;
+import org.lcsim.geometry.subdetector.MultiLayerTracker;
+
+/**
+ * Convert a MultiLayerTracker into the org.lcsim.detector geometry representation.
+ * 
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
+public class MultiLayerTrackerConverter implements ISubdetectorConverter
+{
+    public void convert( Subdetector subdet, Detector detector)
+    {
+        MultiLayerTracker tracker = (MultiLayerTracker)subdet;
+        
+        IDetectorElement deTrackingRegion = detector.getChildren().get("tracking_region");
+        
+        ILogicalVolume trackingVolume = 
+            deTrackingRegion.getGeometry().getLogicalVolume();
+        
+        tracker.setParent(detector);
+        
+        Layering layering = tracker.getLayering();
+        
+        String name = tracker.getName(); 
+        
+        int sensorNum=0;
+        for (int i=0; i<tracker.getLayering().getNumberOfLayers(); i++)
+        {
+            Layer layer = layering.getLayer(i);
+            double layerInnerR = tracker.getInnerR()[i];
+            double layerOuterZ = tracker.getOuterZ()[i];
+            double layerThickness = layer.getThickness();
+            
+            Tube layerTube = new Tube(
+                    name + "_layer" + i + "_tube",
+                    layerInnerR,
+                    layerInnerR + layerThickness,
+                    layerOuterZ
+                    );
+            
+            IMaterial layerMaterial = detector.getGeometry().getLogicalVolume().getMaterial();
+            
+            LogicalVolume layerLV = new LogicalVolume(
+                    name + "_layer" + i,
+                    layerTube,
+                    layerMaterial
+                    );
+            
+            new PhysicalVolume(
+                    null,
+                    name + "_layer" +i,
+                    layerLV,
+                    trackingVolume,
+                    i);
+            
+            double sliceInnerR=layerInnerR;          
+            for (int j=0; j<layer.getNumberOfSlices(); j++)
+            {
+                LayerSlice slice = layer.getSlice(j);
+                
+                double sliceThickness = slice.getThickness();
+                
+                Tube sliceTube = 
+                    new Tube(name + "layer" + i + "_slice" + j + "_tube",
+                            sliceInnerR,
+                            slice.getThickness(),
+                            layerOuterZ
+                            );
+                
+                IMaterial sliceMaterial = 
+                    MaterialStore.getInstance().get(slice.getMaterial().getName());
+                
+                LogicalVolume sliceLV =
+                    new LogicalVolume(
+                            name + "layer" + i + "_slice" + j,
+                            sliceTube,
+                            sliceMaterial
+                            );
+                
+                new PhysicalVolume(
+                        null,
+                        "slice" + j,
+                        sliceLV,
+                        layerLV,
+                        j);                
+                
+                if ( slice.isSensitive() )
+                {
+                    String path = "/tracking_region/" + name + "_layer" +i + "/slice" + j;
+                    new DetectorElement(name + "sensor" + sensorNum, tracker, path);
+                    ++sensorNum;
+                }
+                
+                sliceInnerR += sliceThickness; 
+            }
+        }               
+    }
+    
+    public Class getSubdetectorType()
+    {
+        return MultiLayerTracker.class;
+    }
+}
\ No newline at end of file
CVSspam 0.2.8