View Javadoc

1   package org.lcsim.geometry.layer;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   /**
7    *
8    * A stack of @see Layer objects representing layers in a subdetector.
9    * 
10   * @author Jeremy McCormick <jeremym@slac.stanford.edu>
11   * @version $Id: LayerStack.java,v 1.13 2010/04/14 18:24:54 jeremy Exp $
12   */
13  public class LayerStack {        
14      
15      List<Layer> layers;
16      
17      /** Creates a new instance of LayerStack */
18      public LayerStack() 
19      {
20          layers = new ArrayList<Layer>();        
21      }        
22      
23      public void addLayer(Layer l)
24      {
25          layers.add(l);
26      }
27      
28      public Layer getLayer(int i)
29      {
30          return layers.get(i);
31      }
32      
33      public double getTotalThickness()
34      {
35          return getSectionThickness(0, layers.size() - 1);        
36      }
37      
38      public double getSectionThickness(int is, int ie) throws IllegalArgumentException
39      {
40          double thick = 0.0;
41                  
42          if ( is > ie) 
43          {
44              throw new java.lang.IllegalArgumentException("First index must be <= second index.");
45          }
46          
47          if ( is < 0 || is > getNumberOfLayers() - 1 ) 
48          {
49              throw new java.lang.IllegalArgumentException("First index out of range: "+is+", #layers="+getNumberOfLayers());
50          }
51          
52          if ( ie < 0 || ie > getNumberOfLayers() - 1 ) 
53          {
54              throw new java.lang.IllegalArgumentException("Second index out of range: "+ie+", #layers="+getNumberOfLayers());
55          }
56                  
57          for ( int i = is; i <= ie; i++ )
58          {            
59              Layer layer = getLayer(i); 
60              thick += getLayer(i).getThicknessWithPreOffset();  
61          }
62          
63          return thick;
64      }
65      
66      public double getThicknessToLayerBack(int i)
67      {
68          return getSectionThickness(0, i);
69      }
70      
71      public double getThicknessToLayerMid(int i)
72      {
73          return getThicknessToLayerBack(i) - layers.get(i).getThickness() / 2;
74      }
75          
76      public double getThicknessToLayerFront(int i)
77      {
78          return getThicknessToLayerBack(i) - getLayer(i).getThickness();
79      }
80          
81      public int getNumberOfLayers()
82      {
83          return layers.size();
84      }        
85      
86      public String toString()
87      {
88      	StringBuffer sb = new StringBuffer();
89      
90      	int layern=0;
91      	for (Layer layer : layers)
92      	{    		
93      		sb.append("Layer: " + layern +'\n');
94      		sb.append("inner_radius="+layer.getPreOffset()+'\n');
95      		sb.append("thickness="+layer.getThickness()+'\n');
96      		sb.append('\n');
97      		
98      		int slicen=0;
99      		for (LayerSlice slice : layer.getSlices())
100     		{
101     			assert(slice.getMaterial() != null);
102     			sb.append("    " + slicen + ", " + slice.getMaterial().getName() + ", " + slice.getThickness());
103     			sb.append('\n');
104     			++slicen;
105     		}
106     		
107     		sb.append('\n');
108     		
109     		++layern;
110     	}
111     	
112     	return sb.toString();
113     }
114 }