Print

Print


Commit in GeomConverter on MAIN
src/org/lcsim/geometry/compact/converter/lcdd/SiStripTrackerBarrel.java+412added 1.1
                                             /LCDDSubdetector.java+7-11.11 -> 1.12
                                             /Main.java+11.12 -> 1.13
src/org/lcsim/geometry/subdetector/SiStripTrackerBarrel.java+35added 1.1
                                  /AbstractLayeredSubdetector.java+7-11.2 -> 1.3
test/org/lcsim/geometry/compact/converter/lcdd/SiStripTrackerBarrelTest.java+33added 1.1
test/org/lcsim/geometry/subdetector/SiStripTrackerBarrelTest.java+42added 1.1
                                   /SiStripTrackerBarrelTest.xml+97added 1.1
+634-2
5 added + 3 modified, total 8 files
JM: Checking in SiStripTrackerBarrel LCDD driver.  The compact subdetector is only a placeholder right now.  WORK IN PROGRESS.

GeomConverter/src/org/lcsim/geometry/compact/converter/lcdd
SiStripTrackerBarrel.java added at 1.1
diff -N SiStripTrackerBarrel.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SiStripTrackerBarrel.java	29 Sep 2006 01:00:08 -0000	1.1
@@ -0,0 +1,412 @@
+package org.lcsim.geometry.compact.converter.lcdd;
+
+import static java.lang.Math.cos;
+import static java.lang.Math.sin;
+
+import java.util.Iterator;
+
+import org.jdom.Element;
+import org.jdom.JDOMException;
+import org.lcsim.geometry.compact.converter.lcdd.util.Box;
+import org.lcsim.geometry.compact.converter.lcdd.util.LCDD;
+import org.lcsim.geometry.compact.converter.lcdd.util.Material;
+import org.lcsim.geometry.compact.converter.lcdd.util.PhysVol;
+import org.lcsim.geometry.compact.converter.lcdd.util.Position;
+import org.lcsim.geometry.compact.converter.lcdd.util.Rotation;
+import org.lcsim.geometry.compact.converter.lcdd.util.SensitiveDetector;
+import org.lcsim.geometry.compact.converter.lcdd.util.Solids;
+import org.lcsim.geometry.compact.converter.lcdd.util.Structure;
+import org.lcsim.geometry.compact.converter.lcdd.util.Tube;
+import org.lcsim.geometry.compact.converter.lcdd.util.Volume;
+
+/**
+ * 
+ * Convert an SiStripTrackerBarrel subdetector to the LCDD format.
+ * 
+ * @author Jeremy McCormick <[log in to unmask]>
+ * @author Tim Nelson <[log in to unmask]>
+ *
+ */
+public class SiStripTrackerBarrel extends LCDDSubdetector
+{
+	private int sensor_number = 0;
+	private int module_number = 0;
+	
+	public SiStripTrackerBarrel(Element node) throws JDOMException
+	{
+		super(node);
+	}
+
+	/**
+	 * Build the LCDD for the subdetector.
+	 * @param lcdd The LCDD file being created.
+	 * @param sens The SD for this subdetector.
+	 */
+	public void addToLCDD(LCDD lcdd, SensitiveDetector sens) throws JDOMException
+	{
+		// ID of the detector.
+		int id = this.node.getAttribute("id").getIntValue();
+
+		// Name of the detector.
+		String detector_name = this.node.getAttributeValue("name");
+
+		// Get air from LCDD materials DB.
+		Material air = lcdd.getMaterial("Air");
+
+		// Get solids collection from LCDD. 
+		Solids solids = lcdd.getSolids();
+
+		// Get structure collection from LCDD.
+		Structure structure = lcdd.getStructure();
+
+		// Pick the mother volume (tracking volume).
+		Volume tracking_logvol = lcdd.pickMotherVolume(this);
+
+		// Build the layers.
+		int nlayer = 0;
+		for (Iterator i = node.getChildren("layer").iterator(); i.hasNext(); nlayer++)
+		{
+			// Get the next layer element.
+			Element layer = (Element) i.next();
+
+			// Get the barrel_envelope for this layer.
+			Element barrel_envelope = layer.getChild("barrel_envelope");
+
+			// Inner radius of layer.
+			double ir = barrel_envelope.getAttribute("inner_r").getDoubleValue();
+
+			// Outer radius of layer.
+			double or = barrel_envelope.getAttribute("outer_r").getDoubleValue();
+
+			// Full length in z of layer.
+			double oz = barrel_envelope.getAttribute("z_length").getDoubleValue();
+
+			// Name of this layer including layer number.
+			String layer_name = detector_name + "_layer" + nlayer;
+
+			//System.out.println("layer_name=" + layer_name);
+
+			// Create the layer tube solid.
+			Tube layer_tube = new Tube(layer_name + "_tube");
+			layer_tube.setRMin(ir);
+			layer_tube.setRMax(or);
+			layer_tube.setZ(oz);
+			solids.addContent(layer_tube);
+
+			// Create the layer envelope volume.
+			Volume layer_envelope_logvol = new Volume(layer_name);
+			layer_envelope_logvol.setMaterial(air);
+			layer_envelope_logvol.setSolid(layer_tube);
+
+			// Get the rphi_layout element.
+			Element rphi_layout = layer.getChild("rphi_layout");
+
+			// Starting phi of first module.
+			double phi0 = rphi_layout.getAttribute("phi0").getDoubleValue();
+
+			// Number of modules in phi.
+			int nphi = rphi_layout.getAttribute("nphi").getIntValue();
+			assert (nphi > 0);
+
+			// Phi tilt of a module.
+			double phi_tilt = rphi_layout.getAttribute("phi_tilt").getDoubleValue();
+
+			// Radius of the module center.
+			double rc = rphi_layout.getAttribute("rc").getDoubleValue();
+
+			// Phi increment for one module.
+			double phi_incr = (Math.PI * 2) / nphi;
+
+			// Phi of the module center.
+			double phic = 0;
+			phic += phi0;
+
+			// Get the <z_layout> element.
+			Element z_layout = layer.getChild("z_layout");
+
+			// Z position of first module in phi.
+			double z0 = z_layout.getAttribute("z0").getDoubleValue();
+
+			// Number of modules to place in z.
+			double nz = z_layout.getAttribute("nz").getIntValue();
+			assert (nz > 0);
+
+			// Radial displacement parameter, of every other module.
+			double dr = z_layout.getAttribute("dr").getDoubleValue();
+
+			// Z increment for module placement along Z axis.
+			// Adjust for z0 at center of module rather than
+			// the end of cylindrical envelope.
+			double z_incr = (2.0 * z0) / (nz - 1);
+
+			// Starting z for module placement along Z axis.
+			double module_z = -z0;
+
+			// DEBUG 
+			//System.out.println("layer ir=" + ir);
+			//System.out.println("layer or=" + or);
+			//System.out.println("layer oz=" + oz);
+			//System.out.println("phi_tilt=" + phi_tilt);
+			//System.out.println("rc=" + rc);
+			//System.out.println("phi0=" + phi0);
+			//System.out.println("module z_incr=" + z_incr);
+			//System.out.println("module z0=" + z0);
+			//System.out.println("module nz=" + nz);
+			//System.out.println("module dr=" + dr);
+			//
+
+			String module_lkp_name = layer.getAttributeValue("module");
+
+			// Create the module for this layer.
+			// A new module is created, even if
+			// the logical structure is the name,
+			// in order to maintain the correct
+			// sensor number for track recon.
+			Volume module_envelope;
+			try {
+				module_envelope = buildModule(node, module_lkp_name, lcdd, sens);
+			}
+			catch (Exception x)
+			{
+				throw new RuntimeException(x);
+			}
+
+			// Loop over the number of modules in phi.
+			for (int ii = 0; ii < nphi; ii++)
+			{
+				// Delta x of module position.
+				double dx = dr * cos(phic + phi_tilt);
+				
+				// Delta y of module position.
+				double dy = dr * sin(phic + phi_tilt);
+
+				// Basic x module position.
+				double x = rc * cos(phic);
+				
+				// Basic y module position.
+				double y = rc * sin(phic);
+
+				// Loop over the number of modules in z.
+				for (int j = 0; j < nz; j++)
+				{
+					String module_place_name = detector_name + "_" + module_lkp_name + "_phi" + ii + "_z" + j;
+
+					double z = module_z;
+
+					// DEBUG
+					//System.out.println("module build...");
+					//System.out.println("module nphi=" + ii);
+					//System.out.println("module nz" + j);
+					//System.out.println("module x=" + x);
+					//System.out.println("module y=" + y);
+					//System.out.println("module z=" + z);
+					// DEBUG
+					
+					// Position of module.
+					Position module_position = new Position(module_place_name + "_position");
+					module_position.setX(x);
+					module_position.setY(y);
+					module_position.setZ(z);
+					lcdd.getDefine().addPosition(module_position);
+
+					// Rotation of module.
+					Rotation module_rotation = new Rotation(module_place_name + "_rotation");
+					double rotx = Math.PI / 2;
+					double roty = -((Math.PI / 2) - phic - phi_tilt);
+					double rotz = 0;
+					module_rotation.setX(rotx);
+					module_rotation.setY(roty);
+					module_rotation.setZ(rotz);
+					lcdd.getDefine().addRotation(module_rotation);
+
+					//System.out.println("module rotx=" + rotx);
+					////System.out.println("module roty=" + roty);
+					//System.out.println("module rotz=" + rotz);
+
+					// Module PhysicalVolume.
+					PhysVol module_physvol = new PhysVol(module_envelope);
+					module_physvol.setPosition(module_position);
+					module_physvol.setRotation(module_rotation);
+					module_physvol.addPhysVolID("phi", ii);
+					module_physvol.addPhysVolID("z", j);
+					layer_envelope_logvol.addPhysVol(module_physvol);
+
+					// Adjust the x and y coordinates of the module.
+					x += dx;
+					y += dy;
+
+					// Flip sign of x and y adjustments.
+					dx *= -1;
+					dy *= -1;
+
+					// Add z increment to get next z placement pos.
+					module_z += z_incr;
+
+					//System.out.println();
+				}
+
+				// Increment the phi placement of module.
+				phic += phi_incr;
+
+				// Reset the Z placement parameter for module.
+				module_z = -z0;
+			}
+
+			// Add the layer volume to LCDD.
+			structure.addVolume(layer_envelope_logvol);
+
+			// Create the PhysicalVolume for the layer.
+			PhysVol layer_envelope_physvol = new PhysVol(layer_envelope_logvol);
+
+			// Set the subdetector system ID.
+			layer_envelope_physvol.addPhysVolID("system", id);
+			
+			// Flag this as a barrel subdetector.
+			layer_envelope_physvol.addPhysVolID("barrel",0);
+			
+			// Set the layer ID.
+			layer_envelope_physvol.addPhysVolID("layer", nlayer);
+			
+			// Put the layer into the mother volume.
+			tracking_logvol.addPhysVol(layer_envelope_physvol);
+		}
+	}
+
+	/**
+	 * Build a module logical volume.
+	 * @param detector The detector XML node.
+	 * @param name The name of the module for lookup.
+	 * @param lcdd The LCDD being processed.
+	 * @return
+	 * @throws Exception
+	 */
+	Volume buildModule(Element detector, String name, LCDD lcdd, SensitiveDetector sens) throws Exception
+	{				
+		String detector_name = detector.getAttributeValue("name");
+		Volume module_logvol = null;
+		
+		for (Iterator i = detector.getChildren("module").iterator(); i.hasNext();)
+		{
+			Element module = (Element) i.next();
+			
+			if (module.getAttributeValue("name").compareTo(name) == 0)
+			{				
+				Element module_envelope = module.getChild("module_envelope");	
+
+				String module_name = detector_name + "_" + module.getAttributeValue("name") + "_module" + module_number;
+
+				// Create the module box.
+				double module_length = module_envelope.getAttribute("length").getDoubleValue();
+				double module_width = module_envelope.getAttribute("width").getDoubleValue();
+				double module_thickness = module_envelope.getAttribute("thickness").getDoubleValue();
+				Box module_box = new Box(module_name + "_box");
+				module_box.setX(module_width);
+				module_box.setY(module_length);
+				module_box.setZ(module_thickness);
+				lcdd.getSolids().addSolid(module_box);
+
+				// Create the module logical volume.
+				module_logvol = new Volume(module_name);
+				module_logvol.setMaterial(lcdd.getMaterial("Air"));
+				module_logvol.setSolid(module_box);
+
+				// Build module components.
+				int ncomponents = 0;
+				for (Iterator j = module.getChildren("module_component").iterator(); j.hasNext(); ++ncomponents)
+				{										
+					Element component = (Element) j.next();
+
+					boolean sensitive = ( (component.getAttribute("sensitive") == null) ? false : component.getAttribute("sensitive").getBooleanValue());					
+					
+					String component_name = module_name + "_component" + ncomponents;
+
+					// DEBUG
+					//System.out.println("component_name=" + component_name);
+					//System.out.println("build component="+ncomponents);
+					//
+		
+					// Create the box solid for the module component.
+					double component_length = component.getAttribute("length").getDoubleValue();
+					double component_width = component.getAttribute("width").getDoubleValue();
+					double component_thickness = component.getAttribute("thickness").getDoubleValue();
+					Box component_box = new Box(component_name + "_box");
+					component_box.setX(component_width);
+					component_box.setY(component_length);
+					component_box.setZ(component_thickness);
+					lcdd.getSolids().addSolid(component_box);
+
+					// Create the volume for the module component.
+					Volume component_logvol = new Volume(component_name);
+					Material component_material = lcdd.getMaterial(component.getAttributeValue("material"));
+					component_logvol.setMaterial(component_material);
+					component_logvol.setSolid(component_box);
+					lcdd.getStructure().addVolume(component_logvol);
+
+					PhysVol component_physvol = new PhysVol(component_logvol);
+					
+					// Set component position.
+					Position component_position = new Position(component_name + "_position");
+					component_position.setZ(component.getAttribute("zc").getDoubleValue());
+					lcdd.getDefine().addPosition(component_position);
+					component_physvol.setPosition(component_position);
+					
+					// Set component rotation.
+					// FIXME: Processing of rotations should be generalized in compact description.
+					if (component.getChild("rotation") != null)
+					{
+						Element rot_elem = component.getChild("rotation");
+						
+						Rotation component_rotation = new Rotation(component_name + "_rotation");
+						
+						if (rot_elem.getAttribute("x") != null)
+						{
+							component_rotation.setX(rot_elem.getAttribute("x").getDoubleValue());
+						}
+						
+						if (rot_elem.getAttribute("y") != null)
+						{
+							component_rotation.setY(rot_elem.getAttribute("y").getDoubleValue());
+						}
+						
+						if (rot_elem.getAttribute("z") != null)
+						{
+							component_rotation.setZ(rot_elem.getAttribute("z").getDoubleValue());
+						}
+
+						component_physvol.setRotation(component_rotation);
+						
+						lcdd.getDefine().addRotation(component_rotation);
+					}					
+							
+					if (sensitive)
+					{
+						component_logvol.setSensitiveDetector(sens);
+						component_physvol.addPhysVolID("sensor",this.sensor_number);
+						++this.sensor_number;
+					}
+					
+					module_logvol.addPhysVol(component_physvol);
+				}
+
+				++module_number;
+				
+				break;
+			}
+		}
+		
+		if (module_logvol == null)
+		{
+			throw new RuntimeException("Failed to find module " + name);
+		}
+		
+		// Add module logical volume to LCDD.
+		lcdd.getStructure().addVolume(module_logvol);
+		
+		return module_logvol;
+	}
+
+	public boolean isTracker()
+	{
+		return true;
+	}
+}
\ No newline at end of file

GeomConverter/src/org/lcsim/geometry/compact/converter/lcdd
LCDDSubdetector.java 1.11 -> 1.12
diff -u -r1.11 -r1.12
--- LCDDSubdetector.java	12 Sep 2006 01:20:54 -0000	1.11
+++ LCDDSubdetector.java	29 Sep 2006 01:00:08 -0000	1.12
@@ -29,7 +29,13 @@
         /* make compact layering descr for thickness calcs in addToLCDD */
         if (layers == null)
         {
-            layers = org.lcsim.geometry.layer.Layering.makeLayering(c);
+        	try {
+        		layers = org.lcsim.geometry.layer.Layering.makeLayering(c);
+        	}
+        	catch (JDOMException x)
+        	{
+        		System.err.println("WARNING: " + x.getMessage());
+        	}
         }
     }
 

GeomConverter/src/org/lcsim/geometry/compact/converter/lcdd
Main.java 1.12 -> 1.13
diff -u -r1.12 -r1.13
--- Main.java	15 Jul 2005 02:54:58 -0000	1.12
+++ Main.java	29 Sep 2006 01:00:08 -0000	1.13
@@ -62,6 +62,7 @@
          SAXBuilder builder = new SAXBuilder();
          builder.setEntityResolver(new CachingEntityResolver());
          builder.setValidation(true);
+         builder.setValidation(false);
          builder.setFeature("http://apache.org/xml/features/validation/schema",true);
          builder.build(new ByteArrayInputStream(stream.toByteArray()));
       }

GeomConverter/src/org/lcsim/geometry/subdetector
SiStripTrackerBarrel.java added at 1.1
diff -N SiStripTrackerBarrel.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SiStripTrackerBarrel.java	29 Sep 2006 01:00:09 -0000	1.1
@@ -0,0 +1,35 @@
+package org.lcsim.geometry.subdetector;
+
+import hep.graphics.heprep.HepRep;
+import hep.graphics.heprep.HepRepFactory;
+
+import org.jdom.DataConversionException;
+import org.jdom.Element;
+import org.jdom.JDOMException;
+
+/**
+ *
+ * @author tonyj
+ *
+ */
+public class SiStripTrackerBarrel extends AbstractTracker
+{
+    SiStripTrackerBarrel(Element node) throws JDOMException
+    {
+        super(node);
+        build(node);
+    }
+
+    private void build(Element node) throws DataConversionException
+    {        
+    	System.out.println("SiStripTrackerBarrel.build");
+    }
+    
+    public void appendHepRep(HepRepFactory factory, HepRep heprep)
+    {}
+    
+    public boolean isBarrel()
+    {
+        return true;
+    }
+}
\ No newline at end of file

GeomConverter/src/org/lcsim/geometry/subdetector
AbstractLayeredSubdetector.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- AbstractLayeredSubdetector.java	28 Oct 2005 00:34:23 -0000	1.2
+++ AbstractLayeredSubdetector.java	29 Sep 2006 01:00:09 -0000	1.3
@@ -30,7 +30,13 @@
     
     private void build(Element node) throws JDOMException
     {
-        layering = org.lcsim.geometry.layer.Layering.makeLayering(node);
+    	try {
+    		layering = org.lcsim.geometry.layer.Layering.makeLayering(node);
+    	}
+    	catch (JDOMException x)
+    	{
+    		System.err.println("WARNING: " + x.getMessage());
+    	}
     }
     
     public boolean isLayered()

GeomConverter/test/org/lcsim/geometry/compact/converter/lcdd
SiStripTrackerBarrelTest.java added at 1.1
diff -N SiStripTrackerBarrelTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SiStripTrackerBarrelTest.java	29 Sep 2006 01:00:09 -0000	1.1
@@ -0,0 +1,33 @@
+package org.lcsim.geometry.compact.converter.lcdd;
+
+import java.io.BufferedOutputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ *
+ * @author jeremym
+ */
+public class SiStripTrackerBarrelTest extends TestCase
+{    
+    public SiStripTrackerBarrelTest(String name)
+    {
+    	super(name);
+    }
+    
+    public static TestSuite suite()
+    {
+        return new TestSuite(SiStripTrackerBarrelTest.class);
+    }
+    
+    public void test_SiStripTrackerBarrelConverter() throws Exception
+    {
+        InputStream in = SiStripTrackerBarrel.class.getResourceAsStream("/org/lcsim/geometry/subdetector/SiStripTrackerBarrelTest.xml");
+        OutputStream out = new BufferedOutputStream(new FileOutputStream("SiStripTrackerBarrelTest.lcdd"));
+        new Main(true).convert("SiStripTrackerBarrelTest",in,out);
+    }
+}

GeomConverter/test/org/lcsim/geometry/subdetector
SiStripTrackerBarrelTest.java added at 1.1
diff -N SiStripTrackerBarrelTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SiStripTrackerBarrelTest.java	29 Sep 2006 01:00:10 -0000	1.1
@@ -0,0 +1,42 @@
+/*
+ * CylindricalBarrelCalorimeterTest.java
+ *
+ * Created on June 15, 2005, 12:00 PM
+ */
+
+package org.lcsim.geometry.subdetector;
+
+import java.io.InputStream;
+
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.lcsim.geometry.GeometryReader;
+import org.lcsim.geometry.compact.Detector;
+
+/**
+ *
+ * @author jeremym
+ */
+public class SiStripTrackerBarrelTest extends TestCase
+{    
+    public SiStripTrackerBarrelTest(String name)
+    {
+    	super(name);
+    }
+    
+    protected void setUp() throws java.lang.Exception
+    {
+        InputStream in = this.getClass().getResourceAsStream("/org/lcsim/geometry/subdetector/SiStripTrackerBarrelTest.xml");
+        GeometryReader reader = new GeometryReader();
+        Detector det = reader.read(in);
+    }
+    
+    public static junit.framework.Test suite()
+    {
+        return new TestSuite(SiStripTrackerBarrelTest.class);
+    }
+    
+    public void test_Dummy()
+    {}
+}

GeomConverter/test/org/lcsim/geometry/subdetector
SiStripTrackerBarrelTest.xml added at 1.1
diff -N SiStripTrackerBarrelTest.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SiStripTrackerBarrelTest.xml	29 Sep 2006 01:00:10 -0000	1.1
@@ -0,0 +1,97 @@
+<lccdd xmlns:compact="http://www.lcsim.org/schemas/compact/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/compact/1.0/compact.xsd">
+	<info name="subdetectors_test">
+		<comment/>
+	</info>
+	<define>
+		<constant name="cm" value="10"/>
+
+		<constant name="world_side" value="30000"/>
+		<constant name="world_x" value="world_side"/>
+		<constant name="world_y" value="world_side"/>
+		<constant name="world_z" value="world_side"/>
+
+		<constant name="tracking_region_radius" value="180.0 * cm"/>
+		<constant name="tracking_region_zmax" value="0.1 * cm"/>
+	</define>                                                                       
+	<materials>
+    </materials>
+	<display>
+		<vis name="TestVis" alpha="1.0" r="1.0" g="0.0" b="0.0" drawingStyle="wireframe" lineStyle="unbroken" showDaughters="true" visible="true" />
+	</display>
+	<detectors>
+
+	<!-- 1st layer configuration from actual SiD tracker barrel f/ Tim Nelson. -->
+	<!--
+		<detector id="1" name="SiStripTrackerBarrel" type="SiStripTrackerBarrel" readout="SiStripTrackerBarrel_RO" vis="TestVis">
+			<layer inner_r="1220.0" outer_r="1265.0" z_length="3260.0" ladders="90" phi0="0.01745">
+				<ladder width="93.531" length="93.531" thickness="4.0" rc="1230.0" phi_tilt="0.19" eta_stereo="0.0" z0="1583.0" nz="37" dr="5.0" id="1"/>
+			</layer>
+		</detector>
+	-->
+	
+		<detector id="1" name="SiStripTrackerBarrel" type="SiStripTrackerBarrel" readout="SiStripTrackerBarrel_RO" vis="TestVis">
+			<module name="SiTrackerModule">
+		
+				<module_envelope width="97.79" length="97.79" thickness="5.5"/>
+				
+				<!--<module_envelope width="200.0" length="200.0" thickness="20.0"/>-->
+				
+				<module_component zc="-2.692" width="97.79" length="97.79" thickness="0.1" material="Kapton" sensitive="false" />				
+				<module_component zc="-2.492" width="63.8" length="6.67" thickness="0.3" material="Silicon" sensitive="false" />				
+				<module_component zc="-2.082" width="93.031" length="93.031" thickness="0.3" material="Silicon" sensitive="true">
+					<rotation z="0.04" />
+				</module_component>
+
+				<module_component zc="-1.702" width="97.79" length="97.79" thickness="0.228" material="CarbonFiber" sensitive="false" />
+
+				<module_component zc="0.0" width="97.79" length="97.79" thickness="3.175" material="Rohacell31" sensitive="false" />
+				
+				<module_component zc="1.702" width="97.79" length="97.79" thickness="0.228" material="CarbonFiber" sensitive="false" />
+				
+				<module_component zc="2.082" width="93.031" length="93.031" thickness="0.3" material="Silicon" sensitive="true" />
+				<module_component zc="2.492" width="63.8" length="6.67" thickness="0.3" material="Silicon" sensitive="false" />
+				<module_component zc="2.692" width="97.79" length="97.79" thickness="0.1" material="Kapton" sensitive="false" />
+				
+				<!--
+				<module_component zc="" width="97.79" length="97.79" thickness="" material="" sensitive="false" />
+				-->
+				
+			</module>
+			<layer module="SiTrackerModule">
+				<barrel_envelope inner_r="1220.0" outer_r="1265.0" z_length="3260.0" />
+				<!--<rphi_layout phi_tilt="0.19" nphi="1" phi0="0.01745" rc="1230.0" />
+				<z_layout dr="5.5" z0="1581.0" nz="1"/>-->
+				<rphi_layout phi_tilt="0.19" nphi="90" phi0="0.01745" rc="1230.0" />
+				<z_layout dr="5.5" z0="1581.0" nz="37"/>
+			</layer>
+		</detector>	
+	
+	<!--
+		<detector id="1" name="SiStripTrackerBarrel" type="SiStripTrackerBarrel" readout="SiStripTrackerBarrel_RO" vis="TestVis">
+			<module name="MyModule">
+				<module_envelope width="100.0" length="100.0" thickness="5.0"/>
+				<module_component zc="-2.0" width="100" length="100" thickness="1.0" material="Silicon" sensitive="true"/>
+				<module_component zc="-1.0" width="100" length="100" thickness="1.0" material="Silicon" sensitive="false"/>
+				<module_component zc="0" width="100" length="100" thickness="1.0" material="Silicon" sensitive="false"/>
+				<module_component zc="1.0" width="100" length="100" thickness="1.0" material="Silicon" sensitive="false"/>
+				<module_component zc="2.0" width="100" length="100" thickness="1.0" material="Silicon" sensitive="true">
+					<rotation x="0.0"/>
+				</module_component>
+			</module>
+			<layer module="MyModule">
+				<barrel_envelope inner_r="900.0" outer_r="1100.0" z_length="1000.0" />
+				<rphi_layout phi_tilt="0.2" nphi="50" phi0="0.2" rc="1000.0" />
+				<z_layout dr="10" z0="450" nz="10"/>
+			</layer>
+		</detector>
+		-->
+		
+	</detectors>
+	<readouts>
+		<readout name="SiStripTrackerBarrel_RO">
+			<id>system:3,barrel:2,layer:4,phi:8,z:8,sensor:5</id>
+		</readout>
+	</readouts>
+	<fields>
+   </fields>
+</lccdd>
CVSspam 0.2.8