1
2
3
4
5
6
7
8
9
10 package org.lcsim.recon.tracking.digitization.sisim;
11
12 import java.util.ArrayList;
13 import java.util.Arrays;
14 import java.util.HashSet;
15 import java.util.List;
16 import java.util.Set;
17
18 import org.lcsim.detector.IDetectorElement;
19 import org.lcsim.detector.tracker.silicon.SiSensor;
20 import org.lcsim.detector.tracker.silicon.SiTrackerModule;
21 import org.lcsim.event.EventHeader;
22 import org.lcsim.event.RawTrackerHit;
23 import org.lcsim.geometry.Detector;
24 import org.lcsim.recon.tracking.digitization.sisim.config.SimTrackerHitReadoutDriver;
25 import org.lcsim.util.Driver;
26 import org.lcsim.lcio.LCIOConstants;
27
28
29
30
31
32 public class TrackerHitDriver extends Driver
33 {
34
35 List<String> _readouts = new ArrayList<String>();
36
37 List<String> _process_paths = new ArrayList<String>();
38 List<IDetectorElement> _process_de = new ArrayList<IDetectorElement>();
39 Set<SiSensor> _process_sensors = new HashSet<SiSensor>();
40 Set<SiTrackerModule> _process_modules = new HashSet<SiTrackerModule>();
41
42
43 SiSensorSim _strip_simulation = new CDFSiSensorSim();
44 ReadoutChip _strip_readout = new Kpix();
45
46 SiSensorSim _pixel_simulation = new CDFSiSensorSim();
47 ReadoutChip _pixel_readout = new Kpix();
48
49 SiDigitizer _digitizer = new RawTrackerHitMaker(_strip_simulation,_strip_readout);
50 Clusterer _strip_clusterer = new StripHitMaker(_strip_simulation,_strip_readout);
51 Clusterer _pixel_clusterer = new PixelHitMaker(_pixel_simulation,_pixel_readout);
52 StripHitCombiner _striphit_combiner = new StripHit2DMaker();
53
54
55
56
57
58
59 public TrackerHitDriver()
60 {
61
62 }
63
64
65 public TrackerHitDriver(SiDigitizer digitizer, Clusterer strip_clusterer,
66 Clusterer pixel_clusterer, StripHitCombiner striphit_combiner)
67 {
68 _digitizer = digitizer;
69 _strip_clusterer = strip_clusterer;
70 _pixel_clusterer = pixel_clusterer;
71 _striphit_combiner = striphit_combiner;
72 }
73
74
75
76 public void setDigitizer(SiDigitizer digitizer)
77 {
78 _digitizer = digitizer;
79 }
80
81 public void setStripClusterer(Clusterer strip_clusterer)
82 {
83 _strip_clusterer = strip_clusterer;
84 }
85
86 public void setPixelClusterer(Clusterer pixel_clusterer)
87 {
88 _pixel_clusterer = pixel_clusterer;
89 }
90
91 public void setStripHitCombiner(StripHitCombiner striphit_combiner)
92 {
93 _striphit_combiner = striphit_combiner;
94 }
95
96
97
98 public SiDigitizer getDigitizer()
99 {
100 return _digitizer;
101 }
102
103 public Clusterer getStripClusterer()
104 {
105 return _strip_clusterer;
106 }
107
108 public Clusterer getPixelClusterer()
109 {
110 return _pixel_clusterer;
111 }
112
113 public StripHitCombiner getStripHitCombiner()
114 {
115 return _striphit_combiner;
116 }
117
118
119
120 public String getRawHitsName()
121 {
122 return _digitizer.getName()+"_RawTrackerHits";
123 }
124
125 public String getStripHits1DName()
126 {
127 return _strip_clusterer.getName()+"_SiTrackerHitStrip1D";
128 }
129
130 String getPixelHitsName()
131 {
132 return _pixel_clusterer.getName()+"_SiTrackerHitPixel";
133 }
134
135 public String getStripHits2DName()
136 {
137 return _striphit_combiner.getName()+"_SiTrackerHitStrip2D";
138 }
139
140
141
142
143
144
145 public void setReadout(String readout)
146 {
147 _readouts.add(readout);
148 }
149
150 public void setReadouts(String readout[])
151 {
152 _readouts.addAll(Arrays.asList(readout));
153 }
154
155 public void setElementsToProcess(String de_paths[])
156 {
157 _process_paths.addAll(Arrays.asList(de_paths));
158 }
159
160
161 public void addElementToProcess(String de_path)
162 {
163 _process_paths.add(de_path);
164 }
165
166
167
168 public void detectorChanged(Detector detector)
169 {
170 System.out.println(detector.getName());
171 super.detectorChanged(detector);
172
173
174 IDetectorElement detector_de = detector.getDetectorElement();
175 System.out.println(detector_de.getName());
176 for (String de_path : _process_paths)
177 {
178 _process_de.add(detector_de.findDetectorElement(de_path));
179 }
180
181 if (_process_de.size() == 0)
182 {
183 _process_de.add(detector_de);
184 }
185
186 for (IDetectorElement detector_element : _process_de)
187 {
188 _process_sensors.addAll(detector_element.findDescendants(SiSensor.class));
189 _process_modules.addAll(detector_element.findDescendants(SiTrackerModule.class));
190 }
191
192 }
193
194 public void startOfData()
195 {
196
197 if (_readouts.size() != 0)
198 {
199 System.out.println("Adding SimTrackerHitIdentifierReadoutDriver with readouts: "+_readouts);
200 super.add( new SimTrackerHitReadoutDriver( _readouts ) );
201 }
202
203
204 super.startOfData();
205
206
207
208 _readouts.clear();
209
210 }
211
212 public void process(EventHeader event)
213 {
214 super.process(event);
215 System.out.println("TrackerHitDriver processing event...");
216
217
218 List<RawTrackerHit> raw_hits = new ArrayList<RawTrackerHit>();
219
220 List<SiTrackerHit> hits_strip1D = new ArrayList<SiTrackerHit>();
221 List<SiTrackerHit> hits_pixel = new ArrayList<SiTrackerHit>();
222 List<SiTrackerHit> hits_strip2D = new ArrayList<SiTrackerHit>();
223
224
225
226
227
228 for (SiSensor sensor : _process_sensors)
229 {
230
231
232
233
234
235
236 raw_hits.addAll(_digitizer.makeHits(sensor));
237
238 if (sensor.hasStrips())
239 {
240 hits_strip1D.addAll(_strip_clusterer.makeHits(sensor));
241 }
242
243
244
245
246
247
248
249 if (sensor.isDoubleSided())
250 {
251
252
253 }
254 }
255
256
257
258 for (SiTrackerModule module : _process_modules)
259 {
260
261 if (module.isDoubleSided())
262 {
263
264
265
266 }
267 }
268
269
270
271
272
273
274
275
276
277
278
279
280 int flag = (1 << LCIOConstants.TRAWBIT_ID1);
281 event.put(getRawHitsName(),raw_hits,RawTrackerHit.class,flag,toString());
282 event.put(getStripHits1DName(),hits_strip1D,SiTrackerHitStrip1D.class,0,toString());
283 event.put(getPixelHitsName(),hits_pixel,SiTrackerHitPixel.class,0,toString());
284 event.put(getStripHits2DName(),hits_strip2D,SiTrackerHitStrip2D.class,0,toString());
285
286
287 }
288
289 }
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366