1
2
3
4
5 package org.lcsim.geometry.segmentation;
6
7 import org.jdom.Element;
8 import org.lcsim.geometry.layer.Layer;
9 import org.lcsim.geometry.layer.LayerStack;
10
11
12
13
14
15
16
17
18
19
20 public abstract class BarrelCylinderSegmentationBase extends SegmentationBase
21 {
22 public BarrelCylinderSegmentationBase(Element e)
23 {
24 super(e);
25 }
26
27
28
29
30
31
32
33
34
35 public int getLayerBin(double r)
36 {
37
38
39
40
41 double depth = r - getRMin();
42 double mean_t = (getRMax() - getRMin()) / getNumberOfLayers();
43
44 int ilay = (int) Math.floor(depth / mean_t);
45 LayerStack stack = getLayering().getLayers();
46 Layer layer = stack.getLayer(ilay);
47 double depHi = stack.getThicknessToLayerBack(ilay);
48 double depLo = depHi - layer.getThickness();
49 for (;;)
50 {
51 if (depth > depLo && depth <= depHi)
52 return ilay;
53 if (depth <= depLo)
54 {
55 --ilay;
56 depHi = depLo;
57 layer = stack.getLayer(ilay);
58 depLo -= layer.getThickness();
59 }
60 if (depth > depHi)
61 {
62 ++ilay;
63 depLo = depHi;
64 layer = stack.getLayer(ilay);
65 depHi += layer.getThickness();
66 }
67 }
68 }
69 }