4 added + 3 modified, total 7 files
GeomConverter/src/org/lcsim/geometry
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
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
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
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
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
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
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