Print

Print


Commit in GeomConverter/src/org/lcsim/geometry/compact on RefactorBranch
Region.java+122added 1.1.2.1
CompactElementFactory.java+11.1.2.1 -> 1.1.2.2
CompactReader.java+17-11.16.2.2 -> 1.16.2.3
Detector.java+171.12.2.1 -> 1.12.2.2
converter/lcdd/DiskTracker.java+2-11.13.2.1 -> 1.13.2.2
              /LCDDDetector.java+18-21.12.2.1 -> 1.12.2.2
              /LCDDSubdetector.java+29-51.6.2.1 -> 1.6.2.2
              /MultiLayerTracker.java+2-11.11.2.2 -> 1.11.2.3
converter/lcdd/util/LCDD.java+17-21.15.2.1 -> 1.15.2.2
                   /Region.java+151.2 -> 1.2.2.1
+240-12
1 added + 9 modified, total 10 files
Added support for defining and setting regions in the compact description.

GeomConverter/src/org/lcsim/geometry/compact
Region.java added at 1.1.2.1
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
CompactElementFactory.java 1.1.2.1 -> 1.1.2.2
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
CompactReader.java 1.16.2.2 -> 1.16.2.3
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
Detector.java 1.12.2.1 -> 1.12.2.2
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
DiskTracker.java 1.13.2.1 -> 1.13.2.2
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
LCDDDetector.java 1.12.2.1 -> 1.12.2.2
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
LCDDSubdetector.java 1.6.2.1 -> 1.6.2.2
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
MultiLayerTracker.java 1.11.2.2 -> 1.11.2.3
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
LCDD.java 1.15.2.1 -> 1.15.2.2
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
Region.java 1.2 -> 1.2.2.1
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