1 package org.lcsim.geometry.subdetector;
2
3 import hep.graphics.heprep.HepRep;
4 import hep.graphics.heprep.HepRepFactory;
5 import hep.graphics.heprep.HepRepInstance;
6 import hep.graphics.heprep.HepRepInstanceTree;
7 import hep.graphics.heprep.HepRepType;
8 import hep.graphics.heprep.HepRepTypeTree;
9 import org.jdom.Element;
10 import org.jdom.JDOMException;
11 import org.lcsim.detector.converter.heprep.DetectorElementToHepRepConverter;
12 import org.lcsim.geometry.segmentation.GridXYZ;
13
14
15
16
17
18 public class CylindricalEndcapCalorimeter extends CylindricalCalorimeter
19 {
20 CylindricalEndcapCalorimeter( Element node ) throws JDOMException
21 {
22 super( node );
23 build( node );
24 }
25
26 public boolean isEndcap()
27 {
28 return true;
29 }
30
31 private void build( Element node ) throws JDOMException
32 {
33 Element dimensions = node.getChild( "dimensions" );
34
35
36 innerR = dimensions.getAttribute( "inner_r" ).getDoubleValue();
37 outerR = dimensions.getAttribute( "outer_r" ).getDoubleValue();
38 minZ = dimensions.getAttribute( "inner_z" ).getDoubleValue();
39 maxZ = minZ + getLayering().getLayers().getTotalThickness();
40 zlength = maxZ - minZ;
41
42 getLayering().setOffset( minZ );
43 }
44
45 public void appendHepRep( HepRepFactory factory, HepRep heprep )
46 {
47 DetectorElementToHepRepConverter.convert( getDetectorElement(), factory, heprep, 2, true, getVisAttributes().getColor() );
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 }
78
79
80
81
82 public double[] transformLocalToGlobal( double[] localPos )
83 {
84 double[] globPos = { localPos[ 0 ], localPos[ 1 ], localPos[ 2 ] };
85 GridXYZ gridSeg = ( GridXYZ ) getReadout().getSegmentation();
86
87 if ( gridSeg != null )
88 {
89 globPos[ 2 ] += gridSeg.getDistanceToSensitive( gridSeg.getLayer() );
90
91
92 if ( gridSeg.getBarrelEndcapFlag().isEndcapSouth() )
93 {
94
95
96 globPos[ 2 ] = -globPos[ 2 ];
97 }
98 }
99
100 return globPos;
101 }
102
103 public double getZLength()
104 {
105 return this.maxZ - this.minZ;
106 }
107 }