1 package org.lcsim.geometry.layer;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6
7
8
9
10
11
12
13 public class LayerStack {
14
15 List<Layer> layers;
16
17
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 }