1 added + 9 modified, total 10 files
GeomConverter/src/org/lcsim/geometry/compact
diff -N Region.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ Region.java 27 Oct 2005 22:50:14 -0000 1.1.2.1
@@ -0,0 +1,122 @@
+/*
+ * Region.java
+ */
+package org.lcsim.geometry.compact;
+
+import org.jdom.Element;
+import org.jdom.DataConversionException;
+
+/**
+ *
+ * @author jeremym
+ */
+public class Region
+{
+ String name;
+ boolean storeSecondaries;
+ double rangeCut;
+ String lunit;
+ double energyThreshold;
+ String eunit;
+
+ public Region(Element node)
+ {
+ name = node.getAttributeValue("name");
+
+ try
+ {
+ if (node.getAttribute("store_secondaries") != null)
+ {
+ storeSecondaries = node.getAttribute("store_secondaries").getBooleanValue();
+ }
+ else
+ {
+ storeSecondaries = false;
+ }
+ }
+ catch (DataConversionException dce)
+ {
+ throw new RuntimeException("Problem converting "+node.getAttributeValue("store_secondaries") + " to boolean", dce);
+ }
+
+ try
+ {
+ if (node.getAttribute("cut") != null)
+ {
+ rangeCut = node.getAttribute("cut").getDoubleValue();
+ }
+ else
+ {
+ rangeCut = 1.0;
+ }
+ }
+ catch (DataConversionException dce)
+ {
+ throw new RuntimeException("Problem converting "+node.getAttributeValue("cut") + " to double", dce);
+ }
+
+ if (node.getAttribute("lunit") != null)
+ {
+ lunit = node.getAttributeValue("lunit");
+ }
+ else
+ {
+ lunit = "mm";
+ }
+
+ try
+ {
+ if (node.getAttribute("threshold") != null)
+ {
+ energyThreshold = node.getAttribute("threshold").getDoubleValue();
+ }
+ else
+ {
+ energyThreshold = 0.0;
+ }
+ }
+ catch (DataConversionException dce)
+ {
+ throw new RuntimeException("Problem converting "+node.getAttributeValue("threshold") + " to double", dce);
+ }
+
+ if (node.getAttribute("eunit") != null)
+ {
+ eunit = node.getAttributeValue("eunit");
+ }
+ else
+ {
+ eunit = "MeV";
+ }
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public boolean getStoreSecondaries()
+ {
+ return storeSecondaries;
+ }
+
+ public double getRangeCut()
+ {
+ return rangeCut;
+ }
+
+ public String getLengthUnit()
+ {
+ return lunit;
+ }
+
+ public double getEnergyThreshold()
+ {
+ return energyThreshold;
+ }
+
+ public String getEnergyUnit()
+ {
+ return eunit;
+ }
+}
\ No newline at end of file
GeomConverter/src/org/lcsim/geometry/compact
diff -u -r1.1.2.1 -r1.1.2.2
--- CompactElementFactory.java 27 Oct 2005 20:49:37 -0000 1.1.2.1
+++ CompactElementFactory.java 27 Oct 2005 22:50:13 -0000 1.1.2.2
@@ -27,5 +27,6 @@
register(Segmentation.class);
register(Field.class);
register(LimitSet.class);
+ register(Region.class);
}
}
GeomConverter/src/org/lcsim/geometry/compact
diff -u -r1.16.2.2 -r1.16.2.3
--- CompactReader.java 27 Oct 2005 20:49:37 -0000 1.16.2.2
+++ CompactReader.java 27 Oct 2005 22:50:13 -0000 1.16.2.3
@@ -18,7 +18,7 @@
/**
* A tool for reading xml files containing compact detector descriptions.
* @author tonyj
- * @version $Id: CompactReader.java,v 1.16.2.2 2005/10/27 20:49:37 jeremy Exp $
+ * @version $Id: CompactReader.java,v 1.16.2.3 2005/10/27 22:50:13 jeremy Exp $
*
* This class does not create subclass objects. For example, CylindricalBarrelCalorimeter
* is inserted into Detector as a generic Subdetector. To get subclasses, use the
@@ -65,6 +65,7 @@
Element lccdd = doc.getRootElement();
Detector det = factory.createElement(Detector.class,lccdd,null);
+ /* header */
Element info = lccdd.getChild("info");
det.setHeader(factory.createElement(Header.class,info,null));
Element define = lccdd.getChild("define");
@@ -74,6 +75,18 @@
Constant c = factory.createElement(Constant.class,constant,null);
jdom.addConstant(c.getName(),c.getValue());
det.addConstant(c);
+ }
+
+ /* setup regions */
+ Element regions = lccdd.getChild("regions");
+ if ( regions != null )
+ {
+ for(Iterator i = regions.getChildren("region").iterator(); i.hasNext(); )
+ {
+ Element region = (Element) i.next();
+ Region r = factory.createElement(Region.class, region, null);
+ det.addRegion(r);
+ }
}
/* setup limits */
@@ -117,6 +130,7 @@
det.addReadout(r);
}
+ /* subdetectors */
Element detectors = lccdd.getChild("detectors");
for (Iterator i = detectors.getChildren("detector").iterator(); i.hasNext(); )
{
@@ -133,6 +147,8 @@
}
det.addSubdetector(sub);
}
+
+ /* fields */
Element fields = lccdd.getChild("fields");
if (fields != null)
{
GeomConverter/src/org/lcsim/geometry/compact
diff -u -r1.12.2.1 -r1.12.2.2
--- Detector.java 27 Oct 2005 20:49:37 -0000 1.12.2.1
+++ Detector.java 27 Oct 2005 22:50:14 -0000 1.12.2.2
@@ -1,3 +1,4 @@
+
package org.lcsim.geometry.compact;
import java.util.HashMap;
import java.util.Map;
@@ -17,6 +18,7 @@
private Map<String,Readout> readouts = new HashMap<String,Readout>();
private Map<String,Field> fields = new HashMap<String,Field>();
private Map<String,LimitSet> limits = new HashMap<String,LimitSet>();
+ private Map<String,Region> regions = new HashMap<String,Region>();
protected XMLMaterialManager materialMgr;
@@ -162,4 +164,19 @@
{
return limits;
}
+
+ public void addRegion(Region region)
+ {
+ regions.put(region.getName(), region);
+ }
+
+ public Region getRegion(String name)
+ {
+ return regions.get(name);
+ }
+
+ public Map<String,Region> getRegions()
+ {
+ return regions;
+ }
}
\ No newline at end of file
GeomConverter/src/org/lcsim/geometry/compact/converter/lcdd
diff -u -r1.13.2.1 -r1.13.2.2
--- DiskTracker.java 27 Oct 2005 20:49:38 -0000 1.13.2.1
+++ DiskTracker.java 27 Oct 2005 22:50:14 -0000 1.13.2.2
@@ -91,8 +91,9 @@
volume.setSolid(tube);
if (sensitive) volume.setSensitiveDetector(sens);
- /* FIXME: this needs to be called automatically whenever a new volume is created --JM */
+ /* FIXME: these need to be called automatically whenever a new volume is created --JM */
setLimitSet(lcdd, slice, volume);
+ setRegion(lcdd, slice, volume);
PhysVol physvol = new PhysVol(volume);
physvol.setZ(z-zmin -layerWidth/2 + w/2);
GeomConverter/src/org/lcsim/geometry/compact/converter/lcdd
diff -u -r1.12.2.1 -r1.12.2.2
--- LCDDDetector.java 27 Oct 2005 20:49:38 -0000 1.12.2.1
+++ LCDDDetector.java 27 Oct 2005 22:50:14 -0000 1.12.2.2
@@ -33,6 +33,7 @@
import org.lcsim.geometry.compact.converter.lcdd.util.Tracker;
import org.lcsim.geometry.compact.converter.lcdd.util.LimitSet;
import org.lcsim.geometry.compact.converter.lcdd.util.Limit;
+import org.lcsim.geometry.compact.converter.lcdd.util.Region;
import org.lcsim.geometry.util.IDDescriptor;
/**
@@ -69,7 +70,8 @@
Author author = lcdd.getHeader().getAuthor();
author.setAuthorName(getHeader().getAuthor());
-
+
+ /* standard defines */
Define define = lcdd.getDefine();
Rotation rotation = new Rotation("identity_rot");
define.addRotation(rotation);
@@ -80,7 +82,8 @@
Position position = new Position("identity_pos");
define.addPosition(position);
-
+
+ /* constants */
for (org.lcsim.geometry.compact.Constant c : getConstants().values())
{
define.addConstant(new Constant(c.getName(),String.valueOf(c.getValue())));
@@ -110,6 +113,18 @@
idMap.put(readout,idspec);
}
+ /* regions */
+ for (org.lcsim.geometry.compact.Region region : getRegions().values())
+ {
+ Region lcddRegion = new Region(region.getName());
+ lcddRegion.setStoreSecondaries(region.getStoreSecondaries());
+ lcddRegion.setThreshold(region.getEnergyThreshold());
+ lcddRegion.setEnergyUnit(region.getEnergyUnit());
+ lcddRegion.setLengthUnit(region.getLengthUnit());
+ lcddRegion.setCut(region.getRangeCut());
+ lcdd.addRegion(lcddRegion);
+ }
+
/* limits */
for (org.lcsim.geometry.compact.LimitSet limitset : getLimits().values() )
{
@@ -169,6 +184,7 @@
}
}
+ /* fields */
for (Field field : getFields().values())
{
((LCDDField) field).addToLCDD(lcdd);
GeomConverter/src/org/lcsim/geometry/compact/converter/lcdd
diff -u -r1.6.2.1 -r1.6.2.2
--- LCDDSubdetector.java 27 Oct 2005 20:49:39 -0000 1.6.2.1
+++ LCDDSubdetector.java 27 Oct 2005 22:50:14 -0000 1.6.2.2
@@ -5,6 +5,7 @@
import org.lcsim.geometry.compact.Subdetector;
import org.lcsim.geometry.compact.converter.lcdd.util.LCDD;
import org.lcsim.geometry.compact.converter.lcdd.util.LimitSet;
+import org.lcsim.geometry.compact.converter.lcdd.util.Region;
import org.lcsim.geometry.compact.converter.lcdd.util.SensitiveDetector;
import org.lcsim.geometry.compact.converter.lcdd.util.Volume;
import org.lcsim.geometry.layer.Layering;
@@ -36,16 +37,22 @@
{
return node;
}
-
- public void setLimitSet(LCDD lcdd, Element currNode, Volume currVolume)
+
+ /**
+ * set limits for this volume
+ * @param lcdd LCDD object currently being processed
+ * @param node Current DOM node (e.g. detector, layer, slice, etc.)
+ * @param volume The volume corresponding to the DOM node
+ */
+ public void setLimitSet(LCDD lcdd, Element node, Volume volume)
{
- if ( currNode.getAttribute("limits") != null )
+ if (node.getAttribute("limits") != null)
{
- String limitref = currNode.getAttributeValue("limits");
+ String limitref = node.getAttributeValue("limits");
LimitSet limitset = lcdd.getLimitSet(limitref);
if ( limitset != null )
{
- currVolume.setLimitSet(limitset);
+ volume.setLimitSet(limitset);
}
else
{
@@ -53,4 +60,21 @@
}
}
}
+
+ public void setRegion(LCDD lcdd, Element node, Volume volume)
+ {
+ if (node.getAttribute("region") != null)
+ {
+ String regionref = node.getAttributeValue("region");
+ Region region = lcdd.getRegion(regionref);
+ if (region != null)
+ {
+ volume.setRegion(region);
+ }
+ else
+ {
+ throw new RuntimeException("Region " + regionref + " does not exist");
+ }
+ }
+ }
}
\ No newline at end of file
GeomConverter/src/org/lcsim/geometry/compact/converter/lcdd
diff -u -r1.11.2.2 -r1.11.2.3
--- MultiLayerTracker.java 27 Oct 2005 20:49:39 -0000 1.11.2.2
+++ MultiLayerTracker.java 27 Oct 2005 22:50:15 -0000 1.11.2.3
@@ -72,8 +72,9 @@
volume.setSolid(tube);
if (sensitive) volume.setSensitiveDetector(sens);
- /* FIXME: this needs to be called automatically whenever a new volume is created --JM */
+ /* FIXME: these need to be called automatically whenever a new volume is created --JM */
setLimitSet(lcdd, slice, volume);
+ setRegion(lcdd, slice, volume);
structure.addContent(volume);
PhysVol physvol = new PhysVol(volume);
GeomConverter/src/org/lcsim/geometry/compact/converter/lcdd/util
diff -u -r1.15.2.1 -r1.15.2.2
--- LCDD.java 27 Oct 2005 20:49:39 -0000 1.15.2.1
+++ LCDD.java 27 Oct 2005 22:50:15 -0000 1.15.2.2
@@ -45,7 +45,7 @@
addContent(limits);
Element regions = new Element("regions");
- addContent(regions);
+ addContent(regions);
Element display = new Element("display");
addContent(display);
@@ -227,6 +227,21 @@
getChild("regions").addContent(region);
}
+ public Region getRegion(String name)
+ {
+ Region region = null;
+ for (Iterator i = getChild("regions").getChildren("region").iterator(); i.hasNext(); )
+ {
+ Region thisregion = (Region) i.next();
+ if (thisregion.getRefName().compareTo(name) == 0)
+ {
+ region = thisregion;
+ break;
+ }
+ }
+ return region;
+ }
+
/**
* Pick the world or tracking volume for a subdetector's mother volume,
* depending on the value of the insideTrackingVolume attribute.
@@ -263,7 +278,7 @@
{
throw new RuntimeException("Error converting insideTrackingVolume attribute.", dce);
}
-
+
Volume motherVolume = ( inside ? getStructure().getTrackingVolume() : getStructure().getWorldVolume() );
if ( motherVolume == null )
GeomConverter/src/org/lcsim/geometry/compact/converter/lcdd/util
diff -u -r1.2 -r1.2.2.1
--- Region.java 8 Mar 2005 20:55:43 -0000 1.2
+++ Region.java 27 Oct 2005 22:50:15 -0000 1.2.2.1
@@ -23,4 +23,19 @@
{
setAttribute("threshold",String.valueOf(mev));
}
+
+ public void setEnergyUnit(String eunit)
+ {
+ setAttribute("eunit", eunit);
+ }
+
+ public void setLengthUnit(String lunit)
+ {
+ setAttribute("lunit", lunit);
+ }
+
+ public void setCut(double cut)
+ {
+ setAttribute("cut", String.valueOf(cut));
+ }
}
CVSspam 0.2.8