Print

Print


Commit in GeomConverter/src/org/lcsim/geometry/layer on MAIN
Layer.java+85-541.8 -> 1.9
LayerFromCompactCnv.java+12-81.5 -> 1.6
LayerStack.java+2-41.9 -> 1.10
+99-66
3 modified files
JM: Cache layering information to improve recon code performance.

GeomConverter/src/org/lcsim/geometry/layer
Layer.java 1.8 -> 1.9
diff -u -r1.8 -r1.9
--- Layer.java	6 Apr 2006 17:35:20 -0000	1.8
+++ Layer.java	22 Jul 2006 23:01:55 -0000	1.9
@@ -6,25 +6,44 @@
 
 package org.lcsim.geometry.layer;
 
-
-import java.util.List;
-import java.util.ArrayList;
 import static java.lang.Math.abs;
 
+import java.util.List;
 
 /**
  *
+ * Provides access to information on individual layers within
+ * a subdetector.
+ *
  * @author jeremym
  */
 public class Layer
 {
-    
     List<LayerSlice> slices;
     double preOffset = 0;
+    double thickness = 0;    
+    double thicknessToSensor = 0;
+    double thicknessToSensorMid = 0;
+    double sensorThickness = 0;
+    int indexOfFirstSensor = -1;
+    double thicknessWithPreOffset = 0;
+    
+    public Layer(List<LayerSlice> slices)
+    {
+    	this.slices = slices;
+    	
+    	// Cache computed layer information.
+    	computeThickness();
+    	computeIndexOfFirstSensor();
+    	computeSensorThickness();
+    	computeThicknessToSensor();    	
+    	computeThicknessToSensorMid();
+    	computeThicknessWithPreOffset();
+    }
     
-    public Layer()
+    public double getThickness()
     {
-        slices = new ArrayList();
+    	return thickness;
     }
     
     public void setPreOffset(double preOffset)
@@ -41,88 +60,79 @@
     {
         return preOffset;
     }
+                 
+    public double getThicknessWithPreOffset()
+    {
+    	return thicknessWithPreOffset;
+    }
     
-    public void addSlice(LayerSlice s)
+    public double getThicknessToSensitiveMid()
     {
-        slices.add(s);
+    	return thicknessToSensorMid;
     }
     
-    public double getThickness()
+    public double getThicknessToSensitive()        
     {
-        double wid = 0.;
-        
-        for ( LayerSlice l : slices)
+    	return thicknessToSensor;
+    }
+    
+    public LayerSlice getSlice(int idx)
+    {
+        if ( idx > ( slices.size() - 1) )
         {
-            wid += l.getThickness();
+            throw new IllegalArgumentException("LayerSlice idx out of range.");
         }
         
-        return wid;
+        return slices.get(idx);
     }
     
-    public double getThicknessWithPreOffset()
+    public List<LayerSlice> getSlices()
     {
-        return getThickness() + getPreOffset();
+        return slices;
     }
     
-    public double getThicknessToSensitiveMid()
+    public double getSensorThickness()
     {
-        int i = indexOfFirstSensor();
-        
-        double thickness = 0.;
-        
-        if ( i != -1)
-        {
-            
-            for ( int ii = 0; ii < i; ii++)
-            {
-                thickness += slices.get(ii).getThickness();
-            }
-            
-            thickness += slices.get(i).getThickness()/2;
-        }
-        
-        return thickness;
+    	return sensorThickness;
     }
     
-    public double getThicknessToSensitive()
+    public int indexOfFirstSensor()
     {
+    	return indexOfFirstSensor;
+    }
+    
+    private void computeThicknessToSensor()
+    {        
         int i = indexOfFirstSensor();
         
-        double thickness = 0.;
-        
         if ( i != -1)
         {
             
             for ( int ii = 0; ii < i; ii++)
             {
-                thickness += slices.get(ii).getThickness();
+                thicknessToSensor += slices.get(ii).getThickness();
             }
         }
-        
-        return thickness;
     }
     
-    public LayerSlice getSlice(int idx)
+    private void computeThickness()
     {
-        if ( idx > ( slices.size() - 1) )
+    	thickness = 0;
+    	for ( LayerSlice l : slices)
         {
-            throw new IllegalArgumentException("LayerSlice idx out of range.");
+            thickness += l.getThickness();
         }
-        
-        return slices.get(idx);
     }
     
-    public List<LayerSlice> getSlices()
-    {
-        return slices;
+    private void computeSensorThickness()
+    {    
+    	if (indexOfFirstSensor() != -1)
+    	{
+    		sensorThickness = slices.get(indexOfFirstSensor()).getThickness();
+    	}
     }
     
-    public double getSensorThickness()
-    {
-    	return slices.get(indexOfFirstSensor()).getThickness();
-    }
-    
-    public int indexOfFirstSensor()
+    private void computeIndexOfFirstSensor()
     {
         int i = 0;
         boolean fnd = false;
@@ -141,6 +151,27 @@
             i = -1;
         }
         
-        return i;
+        indexOfFirstSensor = i;
+    }
+    
+    private void computeThicknessToSensorMid()
+    {
+        int i = indexOfFirstSensor();
+        
+        if ( i != -1)
+        {
+            
+            for ( int ii = 0; ii < i; ii++)
+            {
+            	thicknessToSensorMid += slices.get(ii).getThickness();
+            }
+            
+            thicknessToSensorMid += slices.get(i).getThickness()/2;
+        }
+    }
+    
+    private void computeThicknessWithPreOffset()
+    {
+        thicknessWithPreOffset = getThickness() + getPreOffset();
     }
 }
\ No newline at end of file

GeomConverter/src/org/lcsim/geometry/layer
LayerFromCompactCnv.java 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- LayerFromCompactCnv.java	25 Aug 2005 07:56:10 -0000	1.5
+++ LayerFromCompactCnv.java	22 Jul 2006 23:01:55 -0000	1.6
@@ -6,13 +6,14 @@
 
 package org.lcsim.geometry.layer;
 
-import org.jdom.Element;
-import org.jdom.Attribute;
-import org.jdom.JDOMException;
+import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
+
+import org.jdom.Attribute;
 import org.jdom.DataConversionException;
-import org.lcsim.material.MaterialManager;
-import org.lcsim.material.Material;
+import org.jdom.Element;
+import org.jdom.JDOMException;
 
 /**
  *
@@ -43,7 +44,8 @@
                 Element lyrElem = (Element) i.next();
                 
                 /* Start a new layer. */
-                Layer lyr = new Layer();
+                //Layer lyr = new Layer();
+                List lyrList = new ArrayList();
                 
                 /* Default to one repetition. */
                 int repeat = 1;
@@ -96,10 +98,12 @@
                             thickness.getDoubleValue(),
                             isSens);
                     
-                    /* Add slice to current layer. */
-                    lyr.addSlice(s);
+                    /* Add slice to current layer. */                    
+                    lyrList.add(s);
                 }
                 
+                Layer lyr = new Layer(lyrList);                
+                
                 /* Add layer to stack once for each repetition. */
                 for (int k = 0; k < repeat; k++)
                 {

GeomConverter/src/org/lcsim/geometry/layer
LayerStack.java 1.9 -> 1.10
diff -u -r1.9 -r1.10
--- LayerStack.java	6 Apr 2006 17:35:20 -0000	1.9
+++ LayerStack.java	22 Jul 2006 23:01:56 -0000	1.10
@@ -6,10 +6,8 @@
 
 package org.lcsim.geometry.layer;
 
-import org.lcsim.geometry.layer.Layer;
-
-import java.util.List;
 import java.util.ArrayList;
+import java.util.List;
 
 /**
  *
@@ -22,7 +20,7 @@
     /** Creates a new instance of LayerStack */
     public LayerStack() 
     {
-        layers = new java.util.ArrayList();
+        layers = new ArrayList<Layer>();        
     }        
     
     public void addLayer(Layer l)
CVSspam 0.2.8