1 package org.lcsim.recon.tracking.vsegment.geom;
2
3 import org.lcsim.detector.IDetectorElement;
4 import org.lcsim.detector.converter.compact.SubdetectorDetectorElement;
5 import org.lcsim.detector.identifier.IIdentifierDictionary;
6 import org.lcsim.detector.identifier.IIdentifierHelper;
7 import org.lcsim.geometry.Detector;
8 import org.lcsim.geometry.Subdetector;
9
10
11
12
13
14
15
16 public final class Navigator {
17
18
19
20 public Navigator(Detector detector) {
21 this.detector = detector;
22 _vtxBarrel = detector.getSubdetector("VertexBarrel");
23 _vtxEndcap = detector.getSubdetector("VertexEndcap");
24 _trkBarrel = detector.getSubdetector("TrackerBarrel");
25 _trkEndcap = detector.getSubdetector("TrackerEndcap");
26 try {
27 _trkForward = detector.getSubdetector("TrackerForward");
28 } catch (Exception x) {}
29 }
30
31
32
33 public Subdetector VERTEX_BARREL() {return _vtxBarrel;}
34 public Subdetector VERTEX_ENDCAP() {return _vtxEndcap;}
35 public Subdetector TRACKER_FORWARD() {return _trkForward;}
36 public Subdetector TRACKER_BARREL() {return _trkBarrel;}
37 public Subdetector TRACKER_ENDCAP() {return _trkEndcap;}
38
39
40
41 public int getLayer(Sensor sensor) {
42 IDetectorElement de = sensor.getDetectorElement();
43 return de.getIdentifierHelper().getValue(de.getIdentifier(), "layer");
44 }
45
46 public int getSuperLayer(Sensor sensor) {
47 Subdetector sd = getSubdetector(sensor);
48 int layer = getLayer(sensor);
49 if ((sd == _vtxBarrel) || (sd == _vtxEndcap) || (sd == _trkBarrel)) {
50 return layer;
51 } else {
52 return layer/2;
53 }
54 }
55
56 public Subdetector getSubdetector(Sensor sensor) {
57
58 try {
59 IIdentifierHelper helper = sensor.getDetectorElement().getIdentifierHelper();
60 int sysid = helper.getValue(sensor.getDetectorElement().getIdentifier(), "system");
61 return detector.getSubdetector(sysid);
62 }
63 catch (Exception x)
64 {
65 throw new RuntimeException(x);
66 }
67
68 }
69
70 public int getSignZ(Sensor sensor) {
71 double z = sensor.getDetectorElement().getGeometry().getPosition().z();
72 if (z > Double.MIN_VALUE) {
73 return 1;
74 } else if (z < - Double.MIN_VALUE) {
75 return -1;
76 } else {
77 return 0;
78 }
79 }
80
81
82
83 private Subdetector _vtxBarrel;
84 private Subdetector _vtxEndcap;
85 private Subdetector _trkForward;
86 private Subdetector _trkBarrel;
87 private Subdetector _trkEndcap;
88 private Detector detector;
89 }