View Javadoc

1   package org.lcsim.recon.tracking.vsegment.geom.segmenters;
2   
3   import java.util.*;
4   
5   import org.lcsim.geometry.Detector;
6   import org.lcsim.geometry.Subdetector;
7   import org.lcsim.event.SimTrackerHit;
8   
9   import org.lcsim.recon.tracking.vsegment.geom.AbstractSegmenter;
10  import org.lcsim.recon.tracking.vsegment.geom.ForwardingSegmenter;
11  import org.lcsim.recon.tracking.vsegment.geom.SegmentationManager;
12  import org.lcsim.recon.tracking.vsegment.geom.Sensor;
13  
14  /**
15   * <tt>Segmenter</tt> that forwards <tt>postfix</tt> and {@link Sensor} creation calls 
16   * to daughter Segmenters based on subdetector where the hit occured.
17   * 
18   * 
19   * @author D.Onoprienko
20   * @version $Id: SubdetectorBasedSegmenter.java,v 1.1 2008/12/06 21:53:43 onoprien Exp $
21   */
22  public class SubdetectorBasedSegmenter extends ForwardingSegmenter {
23    
24  // -- Constructors and initialization :  ---------------------------------------
25    
26    /** Create an instance of <tt>SubdetectorBasedSegmenter</tt>. */
27    public SubdetectorBasedSegmenter() {
28      _subdetectorNames = new ArrayList<String>();
29      _segmenters = new ArrayList<AbstractSegmenter>();
30    }
31    
32    /** 
33     * Detector dependent initialization.
34     */
35    public void detectorChanged(Detector detector) {
36      _subdetectorNames.trimToSize();
37      _segmenters.trimToSize();
38      _sdToSegmenter = new HashMap<Subdetector, AbstractSegmenter>();
39      removeAllDaughterSegmenters();
40      for (int i=0; i<_segmenters.size(); i++) {
41        String name = _subdetectorNames.get(i);
42        Subdetector subDet = detector.getSubdetector(name);
43        if (subDet != null) {
44          AbstractSegmenter segmenter = _segmenters.get(i);
45          _sdToSegmenter.put(subDet, segmenter);
46          addDaughterSegmenter(segmenter);
47        }
48      }
49      super.detectorChanged(detector);
50      //updateDaughterSegmenters(detector);
51    }
52    
53  // -- Setters :  ---------------------------------------------------------------
54  
55    /** 
56     * Set segmenter that will handle a particular subdetector.
57     *
58     * @param subdetectorName  Name of the subdetector to be handled by the supplied <tt>Segmenter</tt>
59     * @param segmenter        <tt>Segmenter</tt> to be used
60     */
61    public void setSegmenter(String subdetectorName, AbstractSegmenter segmenter) {
62      _subdetectorNames.add(subdetectorName);
63      _segmenters.add(segmenter);
64    }
65    
66  // -- Choosing Segmenter :  ----------------------------------------------------
67    
68    /**
69     * Returns daughter <tt>Segmenter</tt> that can handle the given hit.
70     */
71    public AbstractSegmenter chooseSegmenter(SimTrackerHit hit) {
72      return _sdToSegmenter.get(hit.getSubdetector());
73    }
74    
75  // -- Private parts :  ---------------------------------------------------------
76    
77    private ArrayList<String> _subdetectorNames;
78    private ArrayList<AbstractSegmenter> _segmenters;
79    private HashMap<Subdetector, AbstractSegmenter> _sdToSegmenter;
80    
81  }