1
2
3
4
5
6
7
8
9
10 package org.lcsim.util.heprep;
11
12 import hep.graphics.heprep.HepRepFactory;
13 import hep.graphics.heprep.HepRepInstance;
14 import hep.graphics.heprep.HepRepInstanceTree;
15 import hep.graphics.heprep.HepRepType;
16 import hep.graphics.heprep.HepRepTypeTree;
17 import java.awt.Color;
18 import java.util.List;
19 import org.lcsim.detector.IDetectorElement;
20 import org.lcsim.event.TrackerHit;
21 import org.lcsim.detector.solids.Point3D;
22 import org.lcsim.event.EventHeader;
23 import org.lcsim.event.EventHeader.LCMetaData;
24 import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
25
26
27
28
29
30
31
32
33
34
35
36
37 public class SiTrackerHitStrip1DConverter implements HepRepCollectionConverter {
38
39
40 public SiTrackerHitStrip1DConverter() {
41 }
42
43 public boolean canHandle(Class k){
44 return TrackerHit.class.isAssignableFrom(k);
45 }
46
47 public void convert(EventHeader event, List collection, HepRepFactory factory, HepRepTypeTree typeTree, HepRepInstanceTree instanceTree)
48 {
49
50 if (collection.isEmpty() || !(collection.get(0) instanceof SiTrackerHitStrip1D)) return;
51
52 LCMetaData meta = event.getMetaData(collection);
53 String name = meta.getName()+"_Strip1D";
54
55 HepRepType parentType = factory.createHepRepType(typeTree,name);
56 parentType.addAttValue("layer",LCSimHepRepConverter.HITS_LAYER);
57 parentType.addAttValue("drawAs","Line");
58
59 parentType.addAttDef("dEdx","Hit dEdx", "physics","");
60 parentType.addAttDef("time","Hit time", "physics","");
61 parentType.addAttDef("length","Hit Length", "physics", "");
62 parentType.addAttDef("numsimhits", "Number of SimTrackerHits","physics","");
63 parentType.addAttDef("numrawhits", "Number of contributing raw hits","physics","");
64 HepRepType normalType = factory.createHepRepType(parentType,"Normal Hits");
65 HepRepType noiseType = factory.createHepRepType(parentType,"Noise Hits");
66
67 normalType.addAttValue("color",Color.GREEN);
68 noiseType.addAttValue("Color",Color.MAGENTA);
69
70
71 HepRepType moduleType = DisplayHitModules.getModuleType(factory, typeTree, name+"_noiseModules");
72 HepRepType sensorType = DisplayHitModules.getSensorType(factory, typeTree, name+"_noiseSensors");
73
74 for (SiTrackerHitStrip1D hit : (List<SiTrackerHitStrip1D>) collection)
75 {
76 HepRepInstance instance;
77
78 if (!hit.getSimHits().isEmpty()) {
79 instance = factory.createHepRepInstance(instanceTree,normalType);
80 }
81 else {
82 instance = factory.createHepRepInstance(instanceTree, noiseType);
83 IDetectorElement sensor = hit.getSensor();
84 IDetectorElement module = sensor.getParent();
85 DisplayHitModules.drawPolyhedron(module, moduleType, instanceTree, factory);
86 DisplayHitModules.drawPolyhedron(sensor, sensorType, instanceTree, factory);
87 }
88 instance.addAttValue("dEdx",hit.getdEdx());
89 instance.addAttValue("time",hit.getTime());
90 instance.addAttValue("length",hit.getHitLength());
91 instance.addAttValue("numsimhits",hit.getSimHits().size());
92 instance.addAttValue("numrawhits",hit.getRawHits().size());
93
94 for (Point3D p : hit.getHitSegment().getPoints()) {
95 factory.createHepRepPoint(instance,p.x(),p.y(),p.z());
96 }
97 }
98 }
99 }