Commit in GeomConverter/src/org/lcsim/geometry on MAIN
layer/Layer.java+53-231.6 -> 1.7
     /LayerStack.java+5-11.6 -> 1.7
subdetector/DiskTracker.java+231.10 -> 1.11
           /MultiLayerTracker.java+25-51.11 -> 1.12
+106-29
4 modified files
Fixed GC-53 - layering distances wrong for trackers

GeomConverter/src/org/lcsim/geometry/layer
Layer.java 1.6 -> 1.7
diff -u -r1.6 -r1.7
--- Layer.java	18 Jul 2005 18:00:04 -0000	1.6
+++ Layer.java	21 Sep 2005 01:37:17 -0000	1.7
@@ -9,48 +9,72 @@
 
 import java.util.List;
 import java.util.ArrayList;
+import static java.lang.Math.abs;
+
 
 /**
  *
  * @author jeremym
  */
-public class Layer {
+public class Layer
+{
     
-    List<LayerSlice> slices;    
+    List<LayerSlice> slices;
     double preOffset = 0;
     
     public Layer()
     {
         slices = new ArrayList();
-    }                        
+    }
+    
+    public void setPreOffset(double preOffset)
+    {
+        if ( abs(preOffset) < 1E-7 )
+        {
+            preOffset = 0;
+        }
+               
+        this.preOffset = preOffset;
+    }
+    
+    public double getPreOffset()
+    {
+        return preOffset;
+    }
     
     public void addSlice(LayerSlice s)
     {
         slices.add(s);
-    }   
-
+    }
+    
     public double getThickness()
     {
-        double wid = 0.;                
-                
-        for ( LayerSlice l : slices) {
+        double wid = 0.;
+        
+        for ( LayerSlice l : slices)
+        {
             wid += l.getThickness();
         }
         
-        wid += preOffset;
-        
         return wid;
     }
     
+    public double getThicknessWithPreOffset()
+    {
+        return getThickness() + getPreOffset();
+    }
+    
     public double getThicknessToSensitiveMid()
     {
         int i = findIndexOfFirstSensitiveSlice();
         
         double thickness = 0.;
         
-        if ( i != -1) {
+        if ( i != -1)
+        {
             
-            for ( int ii = 0; ii < i; ii++) {
+            for ( int ii = 0; ii < i; ii++)
+            {
                 thickness += slices.get(ii).getThickness();
             }
             
@@ -66,19 +90,23 @@
         
         double thickness = 0.;
         
-        if ( i != -1) {
+        if ( i != -1)
+        {
             
-            for ( int ii = 0; ii < i; ii++) {
+            for ( int ii = 0; ii < i; ii++)
+            {
                 thickness += slices.get(ii).getThickness();
-            }                        
+            }
         }
         
         return thickness;
     }
     
-    public LayerSlice getSlice(int idx) {
-        if ( idx > ( slices.size() - 1) ) {
-            throw new IllegalArgumentException("LayerSlice idx out of range.");            
+    public LayerSlice getSlice(int idx)
+    {
+        if ( idx > ( slices.size() - 1) )
+        {
+            throw new IllegalArgumentException("LayerSlice idx out of range.");
         }
         
         return slices.get(idx);
@@ -90,19 +118,21 @@
     }
     
     public int findIndexOfFirstSensitiveSlice()
-    {        
-        int i = 0;        
+    {
+        int i = 0;
         boolean fnd = false;
-        for ( LayerSlice l : slices ) {            
+        for ( LayerSlice l : slices )
+        {
             if ( l.isSensitive() )
-            {               
+            {
                 fnd = true;
                 break;
             }
             i++;
         }
         
-        if (!fnd) {
+        if (!fnd)
+        {
             i = -1;
         }
         

GeomConverter/src/org/lcsim/geometry/layer
LayerStack.java 1.6 -> 1.7
diff -u -r1.6 -r1.7
--- LayerStack.java	18 Jul 2005 18:00:04 -0000	1.6
+++ LayerStack.java	21 Sep 2005 01:37:17 -0000	1.7
@@ -61,7 +61,11 @@
                 
         for ( int i = is; i <= ie; i++ )
         {            
-            thick += getLayer(i).getThickness();            
+            Layer layer = getLayer(i); 
+            thick += getLayer(i).getThicknessWithPreOffset();  
+//            System.out.println("layer " + i + " thickness = " + layer.getThickness());
+//            System.out.println("layer " + i + " offset = " + layer.getPreOffset());
+//            System.out.println("layer " + i + " distance = " + thick);
         }
         
         return thick;

GeomConverter/src/org/lcsim/geometry/subdetector
DiskTracker.java 1.10 -> 1.11
diff -u -r1.10 -r1.11
--- DiskTracker.java	24 Aug 2005 07:05:07 -0000	1.10
+++ DiskTracker.java	21 Sep 2005 01:37:17 -0000	1.11
@@ -8,6 +8,7 @@
 import hep.graphics.heprep.HepRepInstanceTree;
 import hep.graphics.heprep.HepRepType;
 import hep.graphics.heprep.HepRepTypeTree;
+import org.lcsim.geometry.layer.LayerStack;
 
 import java.util.Iterator;
 import java.util.List;
@@ -62,20 +63,42 @@
         innerR = new double[n];
         outerR = new double[n];
         innerZ = new double[n];
+        
         thickness = new double[n];
+        LayerStack layerStack = getLayering().getLayerStack();
+        double prevOuterZ = 0;
+        double thisOffset = 0;
         for (int i=0; i<n; i++)
         {
             Element layer = (Element) layers.get(i);
             innerR[i] = layer.getAttribute("inner_r").getDoubleValue();
             outerR[i] = layer.getAttribute("outer_r").getDoubleValue();
             innerZ[i] = layer.getAttribute("inner_z").getDoubleValue();
+            
+            /* Base offset for this layer */
+            thisOffset = innerZ[i];           
+            
+            /* Subtract the previous outerZ to get distance between adjacent layers */
+            thisOffset -= prevOuterZ;            
+            
+            /* Set next outerZ */
+            prevOuterZ = innerZ[i];
+            
+            /* Store the pre-offset into the layer object for distance calcs */
+            layerStack.getLayer(i).setPreOffset(thisOffset);
+            
             thickness[i] = 0;
             for (Iterator iter = layer.getChildren("slice").iterator(); iter.hasNext();)
             {
                 Element slice = (Element) iter.next();
                 thickness[i] += slice.getAttribute("thickness").getDoubleValue();
             }
+            
+            /* Incr next outerZ by thickness of this layer */
+            prevOuterZ += thickness[i];            
         }
+        
+        //System.out.println("DiskTracker total thickness=" + getLayering().getThickness());
     }
     
     public void appendHepRep(HepRepFactory factory, HepRep heprep)

GeomConverter/src/org/lcsim/geometry/subdetector
MultiLayerTracker.java 1.11 -> 1.12
diff -u -r1.11 -r1.12
--- MultiLayerTracker.java	24 Aug 2005 07:05:07 -0000	1.11
+++ MultiLayerTracker.java	21 Sep 2005 01:37:17 -0000	1.12
@@ -1,6 +1,5 @@
 package org.lcsim.geometry.subdetector;
 
-import org.lcsim.geometry.subdetector.TrackerIDDecoder;
 import java.util.Iterator;
 import java.util.List;
 import org.jdom.DataConversionException;
@@ -12,6 +11,7 @@
 import hep.graphics.heprep.HepRepInstanceTree;
 import hep.graphics.heprep.HepRepType;
 import hep.graphics.heprep.HepRepTypeTree;
+import org.lcsim.geometry.layer.LayerStack;
 
 /**
  *
@@ -20,11 +20,12 @@
  */
 public class MultiLayerTracker extends AbstractTracker
 {
+    /* FIXME: This is a bad way to store geometry data for each layer. */
     private double[] innerR;
     private double[] outerZ;
 
-    private double[] thickness;
-    
+    /* FIXME: This duplicates functionality provided by the layering engine. */
+    private double[] thickness;    
 
     public double[] getInnerR()
     {
@@ -48,24 +49,43 @@
     }
 
     private void build(Element node) throws DataConversionException
-    {
+    {        
         List layers = node.getChildren("layer");
         int n = layers.size();
         innerR = new double[n];
         outerZ = new double[n];
         thickness = new double[n];
+        LayerStack layerStack = getLayering().getLayerStack();
+        double prevOuterR = 0;
+        double thisOffset = 0;
         for (int i=0; i<n; i++)
         {
             Element layer = (Element) layers.get(i);
             innerR[i] = layer.getAttribute("inner_r").getDoubleValue();
-            outerZ[i] = layer.getAttribute("outer_z").getDoubleValue();
+            
+            /* Base offset for this layer */
+            thisOffset = innerR[i];
+            
+            /* Subtract the previous outerR to get distance between adjacent layers */
+            thisOffset -= prevOuterR;
+            
+            /* Set next outerR */
+            prevOuterR = innerR[i];            
+            
+            /* Store the pre-offset into the layer object for distance calcs */
+            layerStack.getLayer(i).setPreOffset(thisOffset);            
+
             thickness[i] = 0;
             for (Iterator iter = layer.getChildren("slice").iterator(); iter.hasNext();)
             {
                 Element slice = (Element) iter.next();
                 thickness[i] += slice.getAttribute("thickness").getDoubleValue();
             }
+            
+            /* Incr next outerR by thickness of this layer */
+            prevOuterR += thickness[i];
         }
+//        System.out.println("layering total thickness = " + layerStack.getTotalThickness());
     }
     
     public void appendHepRep(HepRepFactory factory, HepRep heprep)
CVSspam 0.2.8