Commit in GeomConverter on MAIN
src/org/lcsim/geometry/compact/CompactReader.java+84-61.27 -> 1.28
                              /Constant.java+71.3 -> 1.4
src/org/lcsim/geometry/subdetector/AbstractLayeredSubdetector.java+11.4 -> 1.5
                                  /CylindricalCalorimeter.java-61.14 -> 1.15
test/org/lcsim/geometry/subdetector/ScalingTest.java+44added 1.1
                                   /ScalingTest.xml+81added 1.1
+217-12
2 added + 4 modified, total 6 files
JM: Implement detector scaling as requested by Norman.

GeomConverter/src/org/lcsim/geometry/compact
CompactReader.java 1.27 -> 1.28
diff -u -r1.27 -r1.28
--- CompactReader.java	1 Mar 2007 19:06:57 -0000	1.27
+++ CompactReader.java	8 Mar 2007 20:04:38 -0000	1.28
@@ -5,13 +5,17 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
-import java.util.Set;
 import java.util.Map.Entry;
 
 import org.jdom.Document;
 import org.jdom.Element;
 import org.jdom.JDOMException;
 import org.jdom.input.SAXBuilder;
+import org.lcsim.geometry.layer.Layering;
+import org.lcsim.geometry.subdetector.CylindricalBarrelCalorimeter;
+import org.lcsim.geometry.subdetector.CylindricalEndcapCalorimeter;
+import org.lcsim.geometry.subdetector.DiskTracker;
+import org.lcsim.geometry.subdetector.MultiLayerTracker;
 import org.lcsim.material.XMLMaterialManager;
 import org.lcsim.units.clhep.SystemOfUnitsMap;
 import org.lcsim.util.cache.CachingEntityResolver;
@@ -27,12 +31,13 @@
  * org.lcsim.geometry.GeometryReader class, which extends this.
  *
  * @author tonyj
- * @version $Id: CompactReader.java,v 1.27 2007/03/01 19:06:57 jeremy Exp $
+ * @version $Id: CompactReader.java,v 1.28 2007/03/08 20:04:38 jeremy Exp $
  *
  */
 public class CompactReader
 {
     private ElementFactory factory;
+    private JDOMExpressionFactory expr;
     
     /**
      * Create a CompactReader using a DefaultElementFactory.
@@ -60,13 +65,13 @@
      */
     public Detector read(InputStream in) throws IOException, JDOMException, ElementCreationException
     {
-        JDOMExpressionFactory jdom = new JDOMExpressionFactory();
+        expr = new JDOMExpressionFactory();
         
         // Setup CLHEP units in the expression evaluator.
-        registerCLHEPConstants(jdom);
+        registerCLHEPConstants(expr);
         
         SAXBuilder builder = new SAXBuilder();
-        builder.setFactory(jdom);        
+        builder.setFactory(expr);        
         
         // Enable schema validation
         builder.setValidation(true);
@@ -80,7 +85,7 @@
         Element lccdd = doc.getRootElement();
         Detector det = factory.createElement(Detector.class,lccdd,null);
         
-        readHeader(lccdd, det, jdom);
+        readHeader(lccdd, det, expr);
         readRegions(lccdd, det);
         readLimits(lccdd, det);
         readMaterials(lccdd, det);
@@ -201,6 +206,8 @@
             }
             
             det.addSubdetector(sub);
+            
+            setupScalingVariables(expr, sub);
         }
     }
     
@@ -261,4 +268,75 @@
     		f.addConstant(unit.getKey(),unit.getValue());
     	}
     }
+    
+    /**
+     * Setup scaling variables for compact description.
+     * These are usable within subsequent <detector> elements. 
+     * 
+     * ---Examples---
+     * 
+     * HcalBarrel_outer_radius
+     * HcalBarrel_total_thickness
+     * 
+     * HcalEndcap_zmax
+     * HcalEndcap_total_thickness
+     * 
+     * @param expr
+     * @param subdet
+     */
+    private void setupScalingVariables(JDOMExpressionFactory expr, Subdetector subdet)
+    {
+    	// Get the layering.
+    	Layering layering=null;
+    	try {
+    		layering = subdet.getLayering();
+    		if ( layering == null )
+    		{
+    			//System.out.println("layering is null for <" + subdet.getName()+">");
+    			return;
+    		}
+    	}
+    	catch ( Throwable x )
+    	{
+    		//System.out.println("exception getting layering for <" + subdet.getName()+">");
+    		return;
+    	}
+    	
+    	//System.out.println("Computing scaling variables for " + subdet.getName());
+    	    	    	
+    	// Compute total thickness from layers.
+    	double totalLayerThickness = layering.getThickness();
+    	String name = subdet.getName() + "_total_thickness";
+    	    	
+    	// Add to JDOMExpressionFactory.
+    	expr.addConstant(name, totalLayerThickness);
+    	    
+    	// Handle specific subtypes here.
+    	if ( subdet instanceof CylindricalBarrelCalorimeter )
+    	{
+    		CylindricalBarrelCalorimeter cal = (CylindricalBarrelCalorimeter)subdet;
+    		double outerRadius = cal.getOuterRadius();
+    		expr.addConstant(cal.getName() + "_outer_r", outerRadius);
+    	}
+    	else if ( subdet instanceof CylindricalEndcapCalorimeter )
+    	{
+    		CylindricalEndcapCalorimeter cal = (CylindricalEndcapCalorimeter)subdet;
+    		double zmax = cal.getZMax();
+    		expr.addConstant(cal.getName() + "_outer_z", zmax);
+    	}
+    	else if ( subdet instanceof MultiLayerTracker )
+    	{
+    		MultiLayerTracker tkr = (MultiLayerTracker)subdet;
+    		Layering l = tkr.getLayering();
+    		double outerRadius = tkr.getLayering().getDistanceToLayerBack(l.getNumberOfLayers()-1);
+    		expr.addConstant(tkr.getName() + "_outer_radius", outerRadius);
+    	}
+    	else if ( subdet instanceof DiskTracker )
+    	{
+    		DiskTracker tkr = (DiskTracker)subdet;
+    		Layering l = tkr.getLayering();
+    		double zmax = tkr.getLayering().getDistanceToLayerBack(l.getNumberOfLayers()-1);
+    		expr.addConstant(tkr.getName() + "_outer_z", zmax);
+    	}
+    }
 }
\ No newline at end of file

GeomConverter/src/org/lcsim/geometry/compact
Constant.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- Constant.java	14 Dec 2005 19:56:45 -0000	1.3
+++ Constant.java	8 Mar 2007 20:04:38 -0000	1.4
@@ -11,6 +11,13 @@
 {
    private String name;
    private double value;
+   
+   public Constant(String name, double value)
+   {
+	   this.name = name;
+	   this.value = value;
+   }
+   
    /**
     * Construct a new Constant
     * @param constant The JDOM element corresponding to the constant definition.

GeomConverter/src/org/lcsim/geometry/subdetector
AbstractLayeredSubdetector.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- AbstractLayeredSubdetector.java	11 Oct 2006 00:08:34 -0000	1.4
+++ AbstractLayeredSubdetector.java	8 Mar 2007 20:04:38 -0000	1.5
@@ -31,6 +31,7 @@
     private void build(Element node) throws JDOMException
     {
     	try {
+    		//System.out.println("build layering for <"+getName()+">");
     		layering = org.lcsim.geometry.layer.Layering.makeLayering(node);
     	}
     	catch (JDOMException x)

GeomConverter/src/org/lcsim/geometry/subdetector
CylindricalCalorimeter.java 1.14 -> 1.15
diff -u -r1.14 -r1.15
--- CylindricalCalorimeter.java	24 Aug 2005 07:05:07 -0000	1.14
+++ CylindricalCalorimeter.java	8 Mar 2007 20:04:38 -0000	1.15
@@ -1,14 +1,8 @@
 package org.lcsim.geometry.subdetector;
 
-import hep.graphics.heprep.HepRep;
-import hep.graphics.heprep.HepRepFactory;
 import org.jdom.Element;
 import org.jdom.JDOMException;
-import org.lcsim.geometry.Calorimeter;
 import org.lcsim.geometry.CylindricalSubdetector;
-import org.lcsim.geometry.HepRepProvider;
-import org.lcsim.geometry.IDDecoder;
-import org.lcsim.geometry.layer.Layering;
 
 /**
  *

GeomConverter/test/org/lcsim/geometry/subdetector
ScalingTest.java added at 1.1
diff -N ScalingTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ScalingTest.java	8 Mar 2007 20:04:38 -0000	1.1
@@ -0,0 +1,44 @@
+/*
+ * 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 ScalingTest extends TestCase
+{        
+    public ScalingTest()
+    {}
+    
+    protected void setUp() throws java.lang.Exception
+    {
+        InputStream in = 
+        	this.getClass().getResourceAsStream("/org/lcsim/geometry/subdetector/ScalingTest.xml");        
+        GeometryReader reader = new GeometryReader();
+        Detector det = reader.read(in);                  
+        return;
+    }
+    
+    public static junit.framework.Test suite()
+    {
+        return new TestSuite(ScalingTest.class);
+    }
+    
+    public void testScaling()
+    {
+    	System.out.println("testScaling");
+    }    
+}
\ No newline at end of file

GeomConverter/test/org/lcsim/geometry/subdetector
ScalingTest.xml added at 1.1
diff -N ScalingTest.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ScalingTest.xml	8 Mar 2007 20:04:38 -0000	1.1
@@ -0,0 +1,81 @@
+<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="sidmay05">
+    <comment>The compact format for sidmay05 detector.</comment>
+  </info>
+
+  <!-- Constants -->
+  <define>
+
+    <constant name="cm" value="10"/>
+
+    <!-- world -->
+    <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" />
+
+    <!-- tracking region -->
+    <constant name="tracking_region_radius" value="0.1*cm"/>
+    <constant name="tracking_region_zmax" value="0.1*cm"/>
+
+  </define>
+
+  <materials>
+  </materials>
+
+  <detectors>
+    <detector id="1" name="EMBarrel" type="CylindricalBarrelCalorimeter" readout="EcalBarrHits">
+         <dimensions inner_r = "127.0*cm" outer_z = "179.5*cm" />
+         <layer repeat="2">
+           <slice material = "Tungsten" thickness = "0.25*cm" />
+           <slice material = "Silicon" thickness = "0.25*cm" sensitive = "yes" />
+         </layer>
+    </detector>
+    
+    <detector id="2" name="HadBarrel" type="CylindricalBarrelCalorimeter" readout="EcalBarrHits">
+         <dimensions inner_r = "EMBarrel_outer_r" outer_z = "179.5*cm" />
+         <layer repeat="2">
+           <slice material = "Tungsten" thickness = "0.5*cm" />
+           <slice material = "Polystyrene" thickness = "0.5*cm" sensitive = "yes" />
+         </layer>
+    </detector>
+
+    <detector id="3" name="EMEndcap" reflect="true" type="CylindricalEndcapCalorimeter" readout="EcalEndcapHits">
+        <dimensions inner_r = "20.0*cm" inner_z = "168.0*cm" outer_r = "125.0*cm" />
+        <layer repeat="2" >
+          <slice material = "Tungsten" thickness = "0.25*cm" />
+          <slice material = "Silicon" thickness = "0.032*cm" sensitive = "yes" />
+        </layer>
+    </detector>
+    
+    <detector id="4" name="HadEndcap" reflect="true" type="CylindricalEndcapCalorimeter" readout="EcalEndcapHits">
+        <dimensions inner_r = "20.0*cm" inner_z = "EMEndcap_outer_z" outer_r = "125.0*cm" />
+        <layer repeat="2" >
+          <slice material = "Tungsten" thickness = "0.5*cm" />
+          <slice material = "Polystyrene" thickness = "0.5*cm" sensitive = "yes" />
+        </layer>
+    </detector>
+
+  </detectors>
+
+  <readouts>
+         <readout name="EcalEndcapHits">
+           <segmentation type="ProjectiveZPlane" thetaBins="1024" phiBins="1024"/>
+           <id>layer:7,system:3,barrel:3,theta:32:11,phi:11</id>
+        </readout>
+         <readout name="EcalBarrHits">
+             <segmentation type="ProjectiveCylinder" thetaBins="1000" phiBins="2000"/>
+             <id>layer:7,system:3,barrel:3,theta:32:11,phi:11</id>
+         </readout>
+   </readouts>
+    <fields>
+    <field type="Solenoid" name="GlobalSolenoid"
+              inner_field="5.0"
+              outer_field="-0.6"
+              zmax="1000"
+              outer_radius="(221.0+ 5.0 + 17.5 + 40./2.)*cm"/>  <!-- SolenoidCoilBarrel inner_radius + Al support + Oxygen gap + half coil-->
+   </fields>
+</lccdd>
CVSspam 0.2.8