Print

Print


Commit in GeomConverter on MAIN
src/org/lcsim/geometry/Subdetector.java+3-11.9 -> 1.10
src/org/lcsim/geometry/compact/ParameterSet.java+137added 1.1
                              /CompactReader.java+10-51.19 -> 1.20
                              /Subdetector.java+111.10 -> 1.11
test/org/lcsim/geometry/compact/ParameterSetTest.xml+66added 1.1
                               /ParameterSet_ClassTest.java+58added 1.1
                               /ParameterSet_XMLTest.java+48added 1.1
+333-6
4 added + 3 modified, total 7 files
Adding named parameters to the compact description.

GeomConverter/src/org/lcsim/geometry
Subdetector.java 1.9 -> 1.10
diff -u -r1.9 -r1.10
--- Subdetector.java	28 Oct 2005 00:34:16 -0000	1.9
+++ Subdetector.java	17 Jan 2006 18:42:39 -0000	1.10
@@ -1,7 +1,8 @@
 package org.lcsim.geometry;
 
+import org.lcsim.geometry.compact.ParameterSet;
 import org.lcsim.geometry.layer.Layering;
-import org.lcsim.geometry.SubdetectorIDDecoder;
+
 
 /**
  * @author jeremym
@@ -11,6 +12,7 @@
     String getName();
     IDDecoder getIDDecoder();
     Layering getLayering();
+    ParameterSet getParameters();
         
     boolean isTracker();
     boolean isCalorimeter();

GeomConverter/src/org/lcsim/geometry/compact
ParameterSet.java added at 1.1
diff -N ParameterSet.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ParameterSet.java	17 Jan 2006 18:42:39 -0000	1.1
@@ -0,0 +1,137 @@
+package org.lcsim.geometry.compact;
+
+import java.util.Map;
+import java.util.HashMap;
+import org.jdom.Element;
+
+/**
+ *
+ * ParameterSet is used to store generic subdetector parameters 
+ * within the compact Subdetector object.  Values are converted
+ * from <parameter> elements within the <detector> element.  The
+ * parameters can be of type Double, Integer, or String.
+ *
+ * @author jeremym
+ * @version $Id: ParameterSet.java,v 1.1 2006/01/17 18:42:39 jeremy Exp $
+ */
+public class ParameterSet
+{
+    /* Map for storing and looking up parameters by name. */
+    Map<String, Object> _parameters = new HashMap<String, Object>();
+    
+    /** Constructor taking the <detector> node for a subdetector. */
+    protected ParameterSet(Element node)
+    {
+        convertFromXML(node);
+    }
+    
+    /** Convert <parameter> elements within <detector>. */
+    private void convertFromXML(Element node)
+    {
+        assert(node.getName().compareTo("detector") == 0);
+        
+        // Iterate over <parameter> elements
+        for ( Object object : node.getChildren("parameter") )
+        {
+            Element element = (Element) object;
+            
+            // Get name
+            String name = element.getAttributeValue("name");
+            assert(name != null);
+            
+            // Get parameter type
+            String type = element.getAttributeValue("type");
+            assert(type != null);
+            
+            // Get parameter value (can be null)
+            String value = element.getAttributeValue("value");
+            
+            // Get value from text data within the tag if no value attribute exists
+            if ( value == null )
+            {
+                value = element.getTextNormalize();                
+            }
+            
+            Object convert = null;
+            
+            // Convert to Double
+            if ( type.compareToIgnoreCase("double") == 0 )
+            {
+                convert = Double.parseDouble(value);
+            }
+            // Convert to Integer
+            else if ( type.compareToIgnoreCase("integer") == 0 || type.compareToIgnoreCase("int") == 0 )
+            {
+                convert = Integer.parseInt(value);
+            }
+            // Convert to String
+            else if ( type.compareToIgnoreCase("string") == 0 ) {                
+                convert = value;
+            }
+            // Type is invalid
+            else {
+                throw new RuntimeException("Unknown parameter type " + type);
+            }
+            
+            // add the parameter
+            addParameter(name, convert);
+        }
+    }
+    
+    /** Constructor without Element argument. */
+    protected ParameterSet()
+    {}
+    
+    /** Adds a parameter to the ParameterSet, checking that the type is valid. */
+    protected void addParameter(String name, Object object)
+    {
+        if ( object instanceof Double || object instanceof Integer || object instanceof String )
+        {
+            if ( _parameters.get(name) == null )
+            {
+                _parameters.put(name, object);
+            }
+            else
+            {
+                throw new RuntimeException("Parameter " + name + " already exists in this ParameterSet.");
+            }
+        }
+        else
+        {
+            throw new RuntimeException("Parameter " + name + " is not of type Double, Integer or String.");
+        }
+    }
+    
+    /** Returns a named parameter as a generic java Object. */
+    protected Object getParameter(String name, Class klass)
+    {
+        Object object = _parameters.get(name);
+        if ( object.getClass() == klass )
+        {
+            return object;
+        }
+        else
+        {
+            System.err.println("Found object but type does not match.");
+            return null;
+        }
+    }
+    
+    /** Returns a named parameter of type Double. */
+    public Double getDouble(String name)
+    {
+        return (Double)getParameter(name, Double.class);
+    }
+    
+    /** Returns a named parameter of type Integer. */
+    public Integer getInteger(String name)
+    {
+        return (Integer)getParameter(name, Integer.class);
+    }
+    
+    /** Returns a named parameter of type String. */
+    public String getString(String name)
+    {
+        return (String)getParameter(name, String.class);
+    }
+}

GeomConverter/src/org/lcsim/geometry/compact
CompactReader.java 1.19 -> 1.20
diff -u -r1.19 -r1.20
--- CompactReader.java	14 Dec 2005 19:56:44 -0000	1.19
+++ CompactReader.java	17 Jan 2006 18:42:39 -0000	1.20
@@ -23,7 +23,7 @@
  * org.lcsim.geometry.GeometryReader class, which extends this.
  *
  * @author tonyj
- * @version $Id: CompactReader.java,v 1.19 2005/12/14 19:56:44 tonyj Exp $
+ * @version $Id: CompactReader.java,v 1.20 2006/01/17 18:42:39 jeremy Exp $
  *
  */
 public class CompactReader
@@ -71,7 +71,7 @@
         Map<String,Readout> readoutMap = readReadouts(lccdd, det);
         readSubdetectors(lccdd, det, readoutMap);
         readFields(lccdd, det);
-
+        
         return det;
     }
     
@@ -86,7 +86,7 @@
             Constant c = factory.createElement(Constant.class,constant,null);
             jdom.addConstant(c.getName(),c.getValue());
             det.addConstant(c);
-        }       
+        }
     }
     private void readRegions(Element lccdd, Detector det) throws JDOMException, ElementCreationException
     {
@@ -159,9 +159,14 @@
                 if (r== null) throw new JDOMException("Unknown readout "+readout);
                 sub.setReadout(r);
             }
+             
+            // setup generic parameters in this subdetector
+            sub.setParameters(new ParameterSet(detector));            
+            
             det.addSubdetector(sub);
-        }   
+        }
     }
+    
     private void readFields(Element lccdd, Detector det) throws JDOMException, ElementCreationException
     {
         Element fields = lccdd.getChild("fields");
@@ -177,7 +182,7 @@
             }
         }
     }
-
+    
     
     /** Create impl objects of materials and their references. */
     void readMaterials(org.jdom.Element lccdd, Detector det) throws JDOMException

GeomConverter/src/org/lcsim/geometry/compact
Subdetector.java 1.10 -> 1.11
diff -u -r1.10 -r1.11
--- Subdetector.java	14 Dec 2005 19:56:44 -0000	1.10
+++ Subdetector.java	17 Jan 2006 18:42:40 -0000	1.11
@@ -17,6 +17,7 @@
     private Readout readout;
     private String  name;
     private int     systemID;
+    private ParameterSet _parameters;
     
     protected Subdetector(Element element) throws JDOMException
     {
@@ -45,6 +46,16 @@
         return readout;
     }
     
+    public void setParameters(ParameterSet parameters)
+    {
+        _parameters = parameters;
+    }
+    
+    public ParameterSet getParameters()
+    {
+        return _parameters;
+    }
+    
     /* org.lcsim.geometry.Subdetector */
     public IDDecoder getIDDecoder()
     {

GeomConverter/test/org/lcsim/geometry/compact
ParameterSetTest.xml added at 1.1
diff -N ParameterSetTest.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ParameterSetTest.xml	17 Jan 2006 18:42:40 -0000	1.1
@@ -0,0 +1,66 @@
+<lccdd xmlns:lccdd="namespaceUrl"
+       xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"          
+       xs:noNamespaceSchemaLocation="noNamespaceUrl">
+
+  <!-- info tag containing author, version, time, unique id (url) -->
+  <info name="ParameterSetTest"       
+	author="Jeremy McCormick">
+        <comment></comment>
+  </info>
+
+  <!-- Constants -->
+  <define>
+  
+    <constant name="cm" value="10"/>  
+    <!-- world -->
+    <constant name="world_side" value="15000" />
+    <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="127.0*cm"/>
+    <constant name="tracking_region_zmax" value="168.0*cm"/>    
+    
+  </define>
+
+  <materials>
+  </materials>
+  
+  <limits>
+  </limits>
+  
+  <regions>
+  </regions>
+  
+  <detectors>
+  
+    <detector id="0" name="ParameterSetTest" type="CylindricalBarrelCalorimeter" readout="EcalBarrHits">  
+         <dimensions inner_r = "127.0*cm" outer_z = "184.0*cm" />
+         <layer repeat="1">
+           <slice material = "Silicon" thickness = "0.04*cm" sensitive = "yes" />
+         </layer>
+         
+         <!-- test parameters with value attributes -->
+         <parameter name="p1" type="string" value="ecal" />
+         <parameter name="p2" type="double" value="2.0" />
+         <parameter name="p3" type="integer" value="1" />
+         
+         <!-- test parameters with text data -->
+         <parameter name="p4" type="string">ecal</parameter>
+         <parameter name="p5" type="double">2.0</parameter>
+         <parameter name="p6" type="integer">1</parameter>
+         
+    </detector> 
+  </detectors> 
+
+  <readouts>
+         <readout name="EcalBarrHits"> 
+             <segmentation type="ProjectiveCylinder" thetaBins="840" phiBins="1680"/>
+             <id>layer:7,system:3,barrel:3,theta:32:11,phi:11</id>
+         </readout>
+   </readouts>
+   
+   <fields>
+   </fields>
+</lccdd>

GeomConverter/test/org/lcsim/geometry/compact
ParameterSet_ClassTest.java added at 1.1
diff -N ParameterSet_ClassTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ParameterSet_ClassTest.java	17 Jan 2006 18:42:40 -0000	1.1
@@ -0,0 +1,58 @@
+package org.lcsim.geometry.compact;
+
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.lcsim.geometry.compact.ParameterSet;
+
+
+/**
+ *
+ * @author jeremym
+ * @version $Id: ParameterSet_ClassTest.java,v 1.1 2006/01/17 18:42:40 jeremy Exp $
+ */
+public class ParameterSet_ClassTest extends TestCase
+{
+    public ParameterSet_ClassTest()
+    {
+    }
+    
+    public static junit.framework.Test suite()
+    {
+        return new TestSuite(ParameterSet_ClassTest.class);
+    }
+    
+    public static void testParameterSet() throws Exception
+    {        
+        ParameterSet parameterSet = new ParameterSet();
+        
+        String p1 = "xyz123";
+        int p2 = 1;
+        double p3 = 2.0;
+        
+        parameterSet.addParameter("string", p1);
+        parameterSet.addParameter("int", p2);
+        parameterSet.addParameter("double", p3);
+        
+        String p1_chk = parameterSet.getString("string");        
+        assert(p1_chk != null);     
+        assert(p1_chk.compareTo(p1) == 0);
+        
+        Integer p2_chk = parameterSet.getInteger("int");        
+        assert(p2_chk != null);
+        assert(p2_chk == 1);
+        
+        Double p3_chk = parameterSet.getDouble("double");                
+        assert(p3_chk != null);
+        assert(p3_chk == 2.0);
+        
+        p1_chk = (String)parameterSet.getParameter("string", String.class);
+        assert(p1_chk != null);
+        
+        p2_chk = (Integer)parameterSet.getParameter("int", Integer.class);
+        assert(p2_chk != null);
+        
+        p3_chk = (Double)parameterSet.getParameter("double", Double.class);
+        assert(p3_chk != null);
+    }    
+}
+

GeomConverter/test/org/lcsim/geometry/compact
ParameterSet_XMLTest.java added at 1.1
diff -N ParameterSet_XMLTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ParameterSet_XMLTest.java	17 Jan 2006 18:42:40 -0000	1.1
@@ -0,0 +1,48 @@
+package org.lcsim.geometry.compact;
+
+import java.io.IOException;
+import junit.framework.*;
+import java.io.InputStream;
+import org.jdom.JDOMException;
+import org.lcsim.util.xml.ElementFactory.ElementCreationException;
+
+/**
+ *
+ * @author tonyj
+ */
+public class ParameterSet_XMLTest extends TestCase
+{
+    Detector det = null;
+    
+    public ParameterSet_XMLTest(String testName)
+    {
+        super(testName);
+    }
+    
+    public static Test suite()
+    {
+        return new TestSuite(ParameterSet_XMLTest.class);
+    }
+        
+    protected void setUp() throws Exception
+    {
+        InputStream in = CompactReaderTest.class.getResourceAsStream("ParameterSetTest.xml");
+        CompactReader reader = new CompactReader();
+        det = reader.read(in);
+    }
+           
+    public void testParameterSet()
+    {
+            Subdetector subdet = det.getSubdetector("ParameterSetTest");
+                                    
+            ParameterSet params = subdet.getParameters();
+            
+            assert(params.getString("p1").compareTo("ecal") == 0);
+            assert(params.getDouble("p2") == 2.0);
+            assert(params.getInteger("p3") == 1);
+            assert(params.getString("p4").compareTo("ecal") == 0);
+            assert(params.getDouble("p5") == 2.0);
+            assert(params.getInteger("p6") == 1);         
+            
+    }    
+}
\ No newline at end of file
CVSspam 0.2.8