Print

Print


Commit in GeomConverter on MAIN
src/org/lcsim/geometry/layer/LayerSlice.java+81.7 -> 1.8
                            /LayerStack.java+291.10 -> 1.11
                            /Layering.java+51.4 -> 1.5
src/org/lcsim/geometry/subdetector/AbstractLayeredSubdetector.java+51.3 -> 1.4
                                  /SiTrackerBarrel.java+242-1561.3 -> 1.4
src/org/lcsim/geometry/subdetector/tracker/silicon/Component.java+17-131.1 -> 1.2
                                                  /SiTrackerBarrelLayer.java+21-21.1 -> 1.2
                                                  /SiTrackerModule.java+4-11.1 -> 1.2
src/org/lcsim/material/MaterialManager.java+61.10 -> 1.11
test/org/lcsim/geometry/subdetector/SiTrackerBarrelTest.xml+21.1 -> 1.2
+339-172
10 modified files
JM: Updates and additions to Tim's silicon tracker classes.  Creation of LayerStack from module and component information.

GeomConverter/src/org/lcsim/geometry/layer
LayerSlice.java 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- LayerSlice.java	20 Jul 2005 19:11:58 -0000	1.7
+++ LayerSlice.java	11 Oct 2006 00:08:33 -0000	1.8
@@ -70,11 +70,19 @@
     
     public void setMaterial(Material m)
     {
+    	if (m == null)
+    	{
+    		throw new IllegalArgumentException("Material argument to LayerSlice is null!");
+    	}
         material = m;
     }
     
     public void setThickness(double t)
     {
+    	if (t < 0.0)
+    	{
+    		throw new IllegalArgumentException("Thickness cannot be < 0.0");
+    	}
         thickness = t;
     }
     

GeomConverter/src/org/lcsim/geometry/layer
LayerStack.java 1.10 -> 1.11
diff -u -r1.10 -r1.11
--- LayerStack.java	22 Jul 2006 23:01:56 -0000	1.10
+++ LayerStack.java	11 Oct 2006 00:08:33 -0000	1.11
@@ -88,4 +88,33 @@
     {
         return layers.size();
     }        
+    
+    public String toString()
+    {
+    	StringBuffer sb = new StringBuffer();
+    
+    	int layern=0;
+    	for (Layer layer : layers)
+    	{    		
+    		sb.append("Layer: " + layern);
+    		sb.append("inner_radius="+layer.getPreOffset()+'\n');
+    		sb.append("thickness="+layer.getThickness()+'\n');
+    		sb.append('\n');
+    		
+    		int slicen=0;
+    		for (LayerSlice slice : layer.getSlices())
+    		{
+    			assert(slice.getMaterial() != null);
+    			sb.append("    " + slicen + ", " + slice.getMaterial().getName() + ", " + slice.getThickness());
+    			sb.append('\n');
+    			++slicen;
+    		}
+    		
+    		sb.append('\n');
+    		
+    		++layern;
+    	}
+    	
+    	return sb.toString();
+    }
 }

GeomConverter/src/org/lcsim/geometry/layer
Layering.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- Layering.java	6 Apr 2006 17:35:21 -0000	1.4
+++ Layering.java	11 Oct 2006 00:08:33 -0000	1.5
@@ -33,6 +33,11 @@
         layerStack = LayerFromCompactCnv.makeLayerStackFromCompact(e);
     }
     
+    public Layering(LayerStack s)
+    {
+    	layerStack = s;
+    }
+    
     public double getDistanceToLayer(int layer)
     {
         return getLayerStack().getThicknessToLayerFront(layer) + offset;

GeomConverter/src/org/lcsim/geometry/subdetector
AbstractLayeredSubdetector.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- AbstractLayeredSubdetector.java	29 Sep 2006 01:00:09 -0000	1.3
+++ AbstractLayeredSubdetector.java	11 Oct 2006 00:08:34 -0000	1.4
@@ -48,4 +48,9 @@
     {
         return layering;
     }
+    
+    public void setLayering(Layering layering)
+    {
+    	this.layering = layering;
+    }
 }
\ No newline at end of file

GeomConverter/src/org/lcsim/geometry/subdetector
SiTrackerBarrel.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- SiTrackerBarrel.java	10 Oct 2006 21:57:29 -0000	1.3
+++ SiTrackerBarrel.java	11 Oct 2006 00:08:34 -0000	1.4
@@ -3,18 +3,27 @@
 import hep.graphics.heprep.HepRep;
 import hep.graphics.heprep.HepRepFactory;
 
-import java.util.Iterator;
-import java.util.Map;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
-import java.util.ArrayList;
+import java.util.Map;
 
 import org.jdom.DataConversionException;
 import org.jdom.Element;
 import org.jdom.JDOMException;
+import org.lcsim.geometry.layer.Layer;
+import org.lcsim.geometry.layer.LayerSlice;
+import org.lcsim.geometry.layer.LayerStack;
+import org.lcsim.geometry.layer.Layering;
+import org.lcsim.geometry.subdetector.tracker.silicon.Box;
+import org.lcsim.geometry.subdetector.tracker.silicon.Component;
+import org.lcsim.geometry.subdetector.tracker.silicon.SiTrackerBarrelLayer;
+import org.lcsim.geometry.subdetector.tracker.silicon.SiTrackerModule;
+import org.lcsim.geometry.subdetector.tracker.silicon.Solid;
 import org.lcsim.material.Material;
 import org.lcsim.material.MaterialManager;
-import org.lcsim.geometry.subdetector.tracker.silicon.*;
+import org.lcsim.material.MaterialNotFoundException;
 
 /**
  *
@@ -27,156 +36,233 @@
  */
 public class SiTrackerBarrel extends AbstractTracker
 {
-    
-    // Fields
-    //=======
-    Map<String,SiTrackerModule> _modules = new HashMap<String,SiTrackerModule>();
-    List<SiTrackerBarrelLayer> _layers = new ArrayList<SiTrackerBarrelLayer>();
-    
-    SiTrackerBarrel(Element node) throws JDOMException
-    {
-        super(node);
-        build(node);
-    }
-
-    private void build(Element node) throws DataConversionException
-    {        
-    	//System.out.println("SiTrackerBarrel.build");
-    	
-    	Element detector = node;
-    	
-    	// Loop over modules.
-    	for (Iterator i = detector.getChildren("module").iterator(); i.hasNext();)
-    	{
-    		Element module_element = (Element)i.next();
-    		
-                String module_name = module_element.getAttributeValue("name");
-    		Element module_envelope = module_element.getChild("module_envelope");
-                
-    		double module_width = module_envelope.getAttribute("width").getDoubleValue();
-    		double module_length = module_envelope.getAttribute("length").getDoubleValue();
-    		double module_thickness = module_envelope.getAttribute("thickness").getDoubleValue();
-                
-    		// Make basic logical module object
-                SiTrackerModule module = new SiTrackerModule(new Box(module_width,module_length,module_thickness));
-                               
-    		// Loop over module components
-    		for (Iterator j = module_element.getChildren("module_component").iterator(); j.hasNext();)
-    		{
-    			Element module_component_element = (Element)j.next();
-    			
-    			// module_component parameters.
-    			double module_component_length = module_component_element.getAttribute("width").getDoubleValue();
-    			double module_component_thickness = module_component_element.getAttribute("thickness").getDoubleValue();
-    			double module_component_width = module_component_element.getAttribute("width").getDoubleValue();
-    			Material material = MaterialManager.getMaterial(module_component_element.getAttributeValue("material"));    			
-    			boolean sensitive = (module_component_element.getAttribute("sensitive") == null) ? false : 
-                            module_component_element.getAttribute("sensitive").getBooleanValue();
-    	
-                        // Build component
-                        Component component = new Component
-                                (new Box(module_component_width,module_component_length,module_component_thickness), material );
-                                                
-    			// module_component positions
-    			double module_component_x, module_component_y, module_component_z = 0.0;
-    			if (module_component_element.getChild("position") != null)
-    			{
-    				Element position = (Element)module_component_element.getChild("position");
-    				
-    				if (position.getAttribute("x") != null)
-    				{
-    					module_component_x = position.getAttribute("x").getDoubleValue();
-    				}
-    				
-    				if (position.getAttribute("y") != null)
-    				{
-    					module_component_y = position.getAttribute("y").getDoubleValue();
-    				}
-    				
-    				if (position.getAttribute("z") != null)
-    				{
-    					module_component_z = position.getAttribute("z").getDoubleValue();
-    				}
-    			}
-    			
-    			// module_component rotations
-    			double module_component_rx, module_component_ry, module_component_rz = 0.0;
-    			if (module_component_element.getChild("rotation") != null)
-    			{
-    				Element rotation = (Element)module_component_element.getChild("rotation");
-    				
-    				if (rotation.getAttribute("x") != null)
-    				{
-    					module_component_x = rotation.getAttribute("x").getDoubleValue();
-    				}
-    				
-    				if (rotation.getAttribute("y") != null)
-    				{
-    					module_component_y = rotation.getAttribute("y").getDoubleValue();
-    				}
-    				
-    				if (rotation.getAttribute("z") != null)
-    				{
-    					module_component_z = rotation.getAttribute("z").getDoubleValue();
-    				}
-    			}
-    			
-                        // FIXME: position the component
-                        
-                        
-    			// Add the module_component to the module.
-                        module.addComponent(component);
-                
-                }    
-                
-                // Store the module
-                _modules.put(module_name, module);
-    
-    	}
-    	
-    	// Loop over layers.
-    	int layern=0;
-    	for (Iterator i = detector.getChildren("layer").iterator(); i.hasNext(); ++layern)
-    	{
-    		Element layer_element = (Element)i.next();
-    		
-    		// Name of the module associated with this layer.
-    		String module_lkp = layer_element.getAttributeValue("module");
-    		
-    		// barrel_envelope parameters.
-    		Element barrel_envelope = layer_element.getChild("barrel_envelope");
-    		double layer_inner_r = barrel_envelope.getAttribute("inner_r").getDoubleValue();
-    		double layer_outer_r = barrel_envelope.getAttribute("outer_r").getDoubleValue();
-    		double layer_z_length = barrel_envelope.getAttribute("z_length").getDoubleValue();
-
-    		// rphi_layout parameters.
-    		Element rphi_layout = layer_element.getChild("rphi_layout");
-    		double phi_tilt = rphi_layout.getAttribute("phi_tilt").getDoubleValue();
-    		int nphi = rphi_layout.getAttribute("nphi").getIntValue();
-    		double phi0 = rphi_layout.getAttribute("phi0").getDoubleValue();
-    		double rc = rphi_layout.getAttribute("rc").getDoubleValue();
-    		double dr = rphi_layout.getAttribute("dr").getDoubleValue();
-  
-    		// z_layout parameters.
-    		Element z_layout = layer_element.getChild("z_layout");
-    		double z_dr = z_layout.getAttribute("dr").getDoubleValue();
-    		double z0 = z_layout.getAttribute("z0").getDoubleValue();
-    		int nz = z_layout.getAttribute("nz").getIntValue();
-    		
-    		// Make layer object.
-                SiTrackerBarrelLayer layer = new SiTrackerBarrelLayer(layer_inner_r,layer_outer_r,layer_z_length);
-                layer.setPhiLayout(rc,nphi,phi0,phi_tilt,dr);
-                layer.setZLayout(nz,z0,z_dr);
-                layer.setModule(_modules.get(module_lkp));
-        
-        }
-    }
-    
-    public void appendHepRep(HepRepFactory factory, HepRep heprep)
-    {}
-    
-    public boolean isBarrel()
-    {
-        return true;
-    }
+
+	// Fields
+	//=======
+	Map<String, SiTrackerModule> _modules = new HashMap<String, SiTrackerModule>();
+	List<SiTrackerBarrelLayer> _layers = new ArrayList<SiTrackerBarrelLayer>();
+
+	SiTrackerBarrel(Element node) throws JDOMException
+	{
+		super(node);		
+		build(node);
+		makeLayering();
+	}
+
+	private void build(Element node) throws DataConversionException
+	{
+		//System.out.println("SiTrackerBarrel.build");
+
+		Element detector = node;
+
+		// Loop over modules.
+		for (Iterator i = detector.getChildren("module").iterator(); i.hasNext();)
+		{
+			Element module_element = (Element) i.next();
+
+			String module_name = module_element.getAttributeValue("name");
+			Element module_envelope = module_element.getChild("module_envelope");
+
+			double module_width = module_envelope.getAttribute("width").getDoubleValue();
+			double module_length = module_envelope.getAttribute("length").getDoubleValue();
+			double module_thickness = module_envelope.getAttribute("thickness").getDoubleValue();
+
+			// Make basic logical module object
+			SiTrackerModule module = new SiTrackerModule(new Box(module_width, module_length, module_thickness));
+
+			// Loop over module components
+			for (Iterator j = module_element.getChildren("module_component").iterator(); j.hasNext();)
+			{
+				Element module_component_element = (Element) j.next();
+
+				// module_component parameters.
+				double module_component_length = module_component_element.getAttribute("width").getDoubleValue();
+				double module_component_thickness = module_component_element.getAttribute("thickness").getDoubleValue();
+				double module_component_width = module_component_element.getAttribute("width").getDoubleValue();
+				//System.out.println("looking up material --> " + module_component_element.getAttributeValue("material"));
+				
+				Material module_component_material;
+				try {
+					module_component_material = MaterialManager.findMaterial(module_component_element.getAttributeValue("material"));
+				}
+				catch (MaterialNotFoundException x)
+				{
+					throw new RuntimeException(x);
+				}
+				
+				//System.out.println("module_component_material="+module_component_material.getName());
+				
+				boolean sensitive = (module_component_element.getAttribute("sensitive") == null) ? false : module_component_element.getAttribute("sensitive").getBooleanValue();
+
+				// Build component
+				Component component = new Component(new Box(module_component_width, module_component_length, module_component_thickness), module_component_material, sensitive);
+
+				// module_component positions
+				double module_component_x, module_component_y, module_component_z = 0.0;
+				if (module_component_element.getChild("position") != null)
+				{
+					Element position = (Element) module_component_element.getChild("position");
+
+					if (position.getAttribute("x") != null)
+					{
+						module_component_x = position.getAttribute("x").getDoubleValue();
+					}
+
+					if (position.getAttribute("y") != null)
+					{
+						module_component_y = position.getAttribute("y").getDoubleValue();
+					}
+
+					if (position.getAttribute("z") != null)
+					{
+						module_component_z = position.getAttribute("z").getDoubleValue();
+					}
+				}
+
+				// module_component rotations
+				double module_component_rx, module_component_ry, module_component_rz = 0.0;
+				if (module_component_element.getChild("rotation") != null)
+				{
+					Element rotation = (Element) module_component_element.getChild("rotation");
+
+					if (rotation.getAttribute("x") != null)
+					{
+						module_component_x = rotation.getAttribute("x").getDoubleValue();
+					}
+
+					if (rotation.getAttribute("y") != null)
+					{
+						module_component_y = rotation.getAttribute("y").getDoubleValue();
+					}
+
+					if (rotation.getAttribute("z") != null)
+					{
+						module_component_z = rotation.getAttribute("z").getDoubleValue();
+					}
+				}
+
+				// FIXME: position the component
+
+				// Add the module_component to the module.
+				module.addComponent(component);
+
+			}
+
+			// Store the module
+			_modules.put(module_name, module);
+
+		}
+
+		// Loop over layers.
+		int layern = 0;
+		for (Iterator i = detector.getChildren("layer").iterator(); i.hasNext(); ++layern)
+		{
+			Element layer_element = (Element) i.next();
+
+			// Name of the module associated with this layer.
+			String module_lkp = layer_element.getAttributeValue("module");
+
+			// barrel_envelope parameters.
+			Element barrel_envelope = layer_element.getChild("barrel_envelope");
+			double layer_inner_r = barrel_envelope.getAttribute("inner_r").getDoubleValue();
+			double layer_outer_r = barrel_envelope.getAttribute("outer_r").getDoubleValue();
+			double layer_z_length = barrel_envelope.getAttribute("z_length").getDoubleValue();
+
+			// rphi_layout parameters.
+			Element rphi_layout = layer_element.getChild("rphi_layout");
+			double phi_tilt = rphi_layout.getAttribute("phi_tilt").getDoubleValue();
+			int nphi = rphi_layout.getAttribute("nphi").getIntValue();
+			double phi0 = rphi_layout.getAttribute("phi0").getDoubleValue();
+			double rc = rphi_layout.getAttribute("rc").getDoubleValue();
+			double dr = rphi_layout.getAttribute("dr").getDoubleValue();
+
+			// z_layout parameters.
+			Element z_layout = layer_element.getChild("z_layout");
+			double z_dr = z_layout.getAttribute("dr").getDoubleValue();
+			double z0 = z_layout.getAttribute("z0").getDoubleValue();
+			int nz = z_layout.getAttribute("nz").getIntValue();
+
+			// Make layer object.
+			SiTrackerBarrelLayer layer = new SiTrackerBarrelLayer(layer_inner_r, layer_outer_r, layer_z_length);
+			layer.setPhiLayout(rc, nphi, phi0, phi_tilt, dr);
+			layer.setZLayout(nz, z0, z_dr);
+			layer.setModule(_modules.get(module_lkp));
+			this._layers.add(layer);
+		}
+	}
+
+	private void makeLayering()
+	{
+		//System.out.println("SiTrackerBarrel.makeLayering");
+
+		//System.out.println("nlayers=" + this._layers.size());
+
+		LayerStack layerStack = new LayerStack();
+		for (SiTrackerBarrelLayer tkrlayer : this._layers)
+		{
+			Map<Material, Double> matMap = new HashMap<Material, Double>();
+
+			double ir = tkrlayer.getInnerRadius();
+			double z = tkrlayer.getZLength();
+
+			SiTrackerModule module = tkrlayer.getModule();
+
+			int n_modules = tkrlayer.getNModules();
+
+			for (Component component : module.getComponents())
+			{
+				Solid solid = component.getSolid();
+				Double volume = Double.valueOf(solid.getVolume()) * ((double) n_modules);
+				Material material = component.getMaterial();
+
+				assert (material != null);
+				//System.out.println("component material=" + material.getName());
+
+				if (matMap.get(material) == null)
+				{
+					matMap.put(material, volume);
+				}
+				else
+				{
+					Double volume_update = matMap.get(material);
+					volume_update += volume;
+					matMap.put(material, volume_update);
+				}
+			}
+
+			List<LayerSlice> slices = new ArrayList<LayerSlice>();
+
+			for (Material material : matMap.keySet())
+			{
+				//System.out.println("material=" + material.getName());
+
+				double volume = matMap.get(material);
+
+				double mat_or = Math.sqrt((volume / (Math.PI * z)) + ir * ir);
+
+				double thickness = mat_or - ir;
+
+				LayerSlice slice = new LayerSlice();
+				slice.setMaterial(material);
+				slice.setThickness(thickness);
+				slices.add(slice);
+			}
+
+			Layer l = new Layer(slices);
+			l.setPreOffset(ir);
+			layerStack.addLayer(l);
+		}
+
+		System.out.println(layerStack.toString());
+
+		setLayering(new Layering(layerStack));
+	}
+
+	public void appendHepRep(HepRepFactory factory, HepRep heprep)
+	{}
+
+	public boolean isBarrel()
+	{
+		return true;
+	}
 }
\ No newline at end of file

GeomConverter/src/org/lcsim/geometry/subdetector/tracker/silicon
Component.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- Component.java	10 Oct 2006 21:58:07 -0000	1.1
+++ Component.java	11 Oct 2006 00:08:34 -0000	1.2
@@ -10,28 +10,23 @@
 package org.lcsim.geometry.subdetector.tracker.silicon;
 
 import org.lcsim.material.Material;
-import org.lcsim.material.MaterialManager;
 
 /**
- *
+ * 
  * @author tknelson
  */
 public class Component
-{
-    
+{    
     // Fields
-    Material _material = MaterialManager.getMaterial("Air");
-    Solid _solid = new Box();
-    
-    /** Creates a new instance of Component */
-    public Component()
-    {
-    }
+    Material _material;
+    Solid _solid; 
+    boolean _sensitive;
     
-    public Component(Solid solid, Material material)
+    public Component(Solid solid, Material material, boolean sensitive)
     {
         _solid = solid;
         _material = material;
+        _sensitive = sensitive;
     }
     
     // Accessors
@@ -39,5 +34,14 @@
     {
         return _material;
     }
+
+    public Solid getSolid()
+    {
+    	return _solid;
+    }
     
-}
+    public boolean isSensitive()
+    {
+    	return _sensitive;
+    }  
+}
\ No newline at end of file

GeomConverter/src/org/lcsim/geometry/subdetector/tracker/silicon
SiTrackerBarrelLayer.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- SiTrackerBarrelLayer.java	10 Oct 2006 21:58:07 -0000	1.1
+++ SiTrackerBarrelLayer.java	11 Oct 2006 00:08:34 -0000	1.2
@@ -103,6 +103,26 @@
         return checkedZIndex(z_index);
     }    
     
+    public SiTrackerModule getModule()
+    {
+    	return this._module;
+    }
+    
+    public double getInnerRadius()
+    {
+    	return _r_inner;
+    }
+    
+    public double getOuterRadius()
+    {
+    	return _r_outer;
+    }
+    
+    public double getZLength()
+    {
+    	return _z_length;
+    }
+    
 //    public CoordinateTransformation3D getModuleCoordinates(int phi_index, int z_index)
 //    {
 //        
@@ -122,6 +142,5 @@
         if (z_index < 0) z_index = 0;
         if (z_index > _n_z) z_index = _n_z;
         return z_index;
-    }
-    
+    }    
 }

GeomConverter/src/org/lcsim/geometry/subdetector/tracker/silicon
SiTrackerModule.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- SiTrackerModule.java	10 Oct 2006 21:58:07 -0000	1.1
+++ SiTrackerModule.java	11 Oct 2006 00:08:34 -0000	1.2
@@ -37,5 +37,8 @@
         _components.add(component);
     }
     
-    
+    public List<Component> getComponents()
+    {
+    	return _components;
+    }
 }

GeomConverter/src/org/lcsim/material
MaterialManager.java 1.10 -> 1.11
diff -u -r1.10 -r1.11
--- MaterialManager.java	24 Jul 2005 06:47:43 -0000	1.10
+++ MaterialManager.java	11 Oct 2006 00:08:34 -0000	1.11
@@ -81,6 +81,12 @@
         // FIXME: Should throw an exception or notify if material already exists.
     }
     
+    /**
+     * 
+     * @param materialName
+     * @return
+     * @deprecated Bugged!  Please use @link{#MaterialManager.instance().findMaterial()}
+     */
     public static Material getMaterial(String materialName)
     {
         return _materials.get(materialName);

GeomConverter/test/org/lcsim/geometry/subdetector
SiTrackerBarrelTest.xml 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- SiTrackerBarrelTest.xml	6 Oct 2006 19:11:30 -0000	1.1
+++ SiTrackerBarrelTest.xml	11 Oct 2006 00:08:35 -0000	1.2
@@ -17,6 +17,7 @@
 		<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>
+	<!--
 		<detector id="1" name="VtxBarrel" type="SiTrackerBarrel" readout="VtxBarrel_RO" vis="TestVis">
 			<module name="VtxBarrelModuleInner">
 				<module_envelope width="9.8" length="63.0 * 2" thickness="0.6"/>
@@ -68,6 +69,7 @@
 				<z_layout dr="0.0" z0="0.0" nz="1"/>
 			</layer>
 		</detector>
+-->
 		<detector id="2" name="SiTrackerBarrel" type="SiTrackerBarrel" readout="SiTrackerBarrel_RO" vis="TestVis">
 			<module name="SiTrackerModule">
 				<module_envelope width="97.79" length="97.79" thickness="5.5"/>
CVSspam 0.2.8