GeomConverter/src/org/lcsim/detector
diff -u -r1.35 -r1.36
--- DetectorElement.java 28 Aug 2007 22:26:33 -0000 1.35
+++ DetectorElement.java 21 Sep 2007 00:44:33 -0000 1.36
@@ -9,14 +9,13 @@
import org.lcsim.detector.identifier.IIdentifier;
import org.lcsim.detector.identifier.IIdentifierHelper;
import org.lcsim.detector.identifier.Identifier;
-import org.lcsim.detector.identifier.IIdentifierDictionary.InvalidIndexException;
import org.lcsim.detector.solids.Inside;
/**
* Implementation of {@link IDetectorElement}.
*
* @author Jeremy McCormick
- * @version $Id: DetectorElement.java,v 1.35 2007/08/28 22:26:33 jeremy Exp $
+ * @version $Id: DetectorElement.java,v 1.36 2007/09/21 00:44:33 jeremy Exp $
*/
public class DetectorElement
extends Named
@@ -171,6 +170,21 @@
DetectorElementStore.getInstance().add(this);
}
}
+
+ private void checkName(String name)
+ {
+ if (name == null)
+ throw new IllegalArgumentException("Name argument is null!");
+
+ if (name.length() == 0)
+ throw new IllegalArgumentException("Name is zero length!");
+
+ if (name.trim().length() == 0)
+ throw new IllegalArgumentException("Name contains only white space!");
+
+ if (name.contains("/"))
+ throw new IllegalArgumentException("Name contains a '/', which is not a legal character!");
+ }
private void setup(
IDetectorElement parent,
@@ -178,6 +192,8 @@
IIdentifier id
)
{
+ checkName(getName());
+
if ( parent != null )
{
setParent(parent);
@@ -596,4 +612,30 @@
}
return search;
}
-}
+
+ public IDetectorElement findDetectorElement(String pathString)
+ {
+ return findDetectorElement(pathString.split("/"));
+ }
+
+ public IDetectorElement findDetectorElement(String[] path)
+ {
+ IDetectorElement de = this;
+ for (int i=0; i<path.length; i++)
+ {
+ //System.out.println("looking up path component <" + path[i] + ">");
+
+ if(!de.hasChildren() && i != path.length)
+ throw new RuntimeException("Not enough child DetectorElements for path argument.");
+
+ IDetectorElementContainer children = de.getChildren();
+
+ IDetectorElementContainer matches = children.find(path[i]);
+ if (matches.size() > 1)
+ throw new RuntimeException("Found more than one match for path component <" + path[i] + ">.");
+
+ de = matches.get(0);
+ }
+ return de;
+ }
+}
\ No newline at end of file
GeomConverter/src/org/lcsim/detector
diff -u -r1.20 -r1.21
--- IDetectorElement.java 28 Aug 2007 03:21:54 -0000 1.20
+++ IDetectorElement.java 21 Sep 2007 00:44:33 -0000 1.21
@@ -27,7 +27,7 @@
*
* @author jeremym
* @author tknelson
- * @version $Id: IDetectorElement.java,v 1.20 2007/08/28 03:21:54 jeremy Exp $
+ * @version $Id: IDetectorElement.java,v 1.21 2007/09/21 00:44:33 jeremy Exp $
*/
public interface IDetectorElement
extends IIdentifiable, INamed
@@ -128,6 +128,20 @@
public IDetectorElementContainer findDetectorElement(IIdentifier id);
/**
+ * Locate a child detector element given a slash-separated list of DetectorElement names.
+ * @param pathString
+ * @return
+ */
+ public IDetectorElement findDetectorElement(String pathString);
+
+ /**
+ * Locate a child detector element given an ordered list of DetectorElement names.
+ * @param path
+ * @return
+ */
+ public IDetectorElement findDetectorElement(String[] path);
+
+ /**
* Get the readout associated with this DetectorElement,
* or <code>null</code> if the DetectorElement has no
* associated readout.
GeomConverter/test/org/lcsim/detector
diff -N DetectorElementTest.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ DetectorElementTest.java 21 Sep 2007 00:44:33 -0000 1.1
@@ -0,0 +1,29 @@
+package org.lcsim.detector;
+
+import junit.framework.TestCase;
+
+public class DetectorElementTest extends TestCase
+{
+ IDetectorElement node1 = null;
+ IDetectorElement node2 = null;
+ IDetectorElement node3 = null;
+
+ protected void setUp()
+ {
+ node1 = new DetectorElement("node1");
+ node2 = new DetectorElement("node2",node1);
+ node3 = new DetectorElement("node3",node2);
+ }
+
+ public void test_findDetectorElement()
+ {
+ IDetectorElement de1 = node1.findDetectorElement("node2");
+ assertEquals(de1,node2);
+
+ IDetectorElement de2 = de1.findDetectorElement("node3");
+ assertEquals(de2,node3);
+
+ IDetectorElement de3 = node1.findDetectorElement("node2/node3");
+ assertEquals(de3,node3);
+ }
+}
\ No newline at end of file