View Javadoc

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   * Utility class that contains helper methods for geometry navigation.
12   *
13   * @author D. Onoprienko
14   * @version $Id: Navigator.java,v 1.1 2008/12/06 21:53:43 onoprien Exp $
15   */
16  public final class Navigator {
17    
18  // -- Constructors :  ----------------------------------------------------------
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  // -- Subdetectors :  ----------------------------------------------------------
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  // -- Sensor location in the detector hierarchy :  -----------------------------
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  	  // Replaced with lookup in Detector by system ID.  --JM
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  //    return sensor.getDetectorElement().findAncestors(SubdetectorDetectorElement.class).get(0).getSubdetector();
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  // -- Private parts :  ---------------------------------------------------------
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  }