10 modified files
GeomConverter/src/org/lcsim/geometry/layer
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
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
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
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
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
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
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
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
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
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