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
16
17
18
19
20
21
22 public class SubdetectorBasedSegmenter extends ForwardingSegmenter {
23
24
25
26
27 public SubdetectorBasedSegmenter() {
28 _subdetectorNames = new ArrayList<String>();
29 _segmenters = new ArrayList<AbstractSegmenter>();
30 }
31
32
33
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
51 }
52
53
54
55
56
57
58
59
60
61 public void setSegmenter(String subdetectorName, AbstractSegmenter segmenter) {
62 _subdetectorNames.add(subdetectorName);
63 _segmenters.add(segmenter);
64 }
65
66
67
68
69
70
71 public AbstractSegmenter chooseSegmenter(SimTrackerHit hit) {
72 return _sdToSegmenter.get(hit.getSubdetector());
73 }
74
75
76
77 private ArrayList<String> _subdetectorNames;
78 private ArrayList<AbstractSegmenter> _segmenters;
79 private HashMap<Subdetector, AbstractSegmenter> _sdToSegmenter;
80
81 }