1 package org.lcsim.util.heprep;
2
3 import hep.graphics.heprep.HepRep;
4 import hep.graphics.heprep.HepRepConverter;
5 import hep.graphics.heprep.HepRepFactory;
6 import hep.graphics.heprep.HepRepInstance;
7 import hep.graphics.heprep.HepRepInstanceTree;
8 import hep.graphics.heprep.HepRepTreeID;
9 import hep.graphics.heprep.HepRepType;
10 import hep.graphics.heprep.HepRepTypeTree;
11
12 import java.awt.Color;
13 import java.util.LinkedList;
14 import java.util.List;
15
16 import org.lcsim.event.EventHeader;
17 import org.lcsim.event.EventHeader.LCMetaData;
18 import org.lcsim.geometry.Detector;
19
20
21
22
23
24 public class LCSimHepRepConverter implements HepRepConverter
25 {
26 private HepRepFactory factory;
27
28 public final static String HITS_LAYER = "Hits";
29 public final static String PARTICLES_LAYER = "Particles";
30 public final static String AXIS_LAYER = "Axis";
31
32 private List<HepRepCollectionConverter> converters = new LinkedList();
33
34 public LCSimHepRepConverter()
35 {
36 try
37 {
38 factory = HepRepFactory.create();
39 register(new CalorimeterHitConverter());
40 register(new ClusterConverter());
41 register(new MCParticleConverter());
42 register(new SimTrackerHitConverter());
43 register(new TrackerHitConverter());
44 register(new TrackConverter());
45 register(new ReconstructedParticleConverterNew());
46 register(new VertexConverter());
47 register(new Hep3VectorConverter());
48 register(new DisplayHitModules());
49 register(new SiTrackerHitStrip1DConverter());
50 register(new SiTrackerHitStrip2DConverter());
51 register(new HelicalTrackHitConverter());
52 register(new RawTrackerHitConverter());
53 }
54 catch (Exception x)
55 {
56 throw new RuntimeException("Could not create heprep factory",x);
57 }
58 }
59 public void register(HepRepCollectionConverter converter)
60 {
61 converters.add(0, converter);
62 }
63 public void deregister(HepRepCollectionConverter converter)
64 {
65 converters.remove(converter);
66 }
67 public boolean canHandle(Class objectClass)
68 {
69 return EventHeader.class.isAssignableFrom(objectClass);
70 }
71
72 public HepRep convert(Object object)
73 {
74 EventHeader event = (EventHeader) object;
75 HepRep root = factory.createHepRep();
76
77
78 try
79 {
80 Detector detector = event.getDetector();
81 detector.appendHepRep(factory,root);
82 }
83 catch (Exception e)
84 {
85 }
86
87
88
89 root.addLayer(PARTICLES_LAYER);
90 root.addLayer(HITS_LAYER);
91
92 HepRepTreeID treeID = factory.createHepRepTreeID("EventType", "1.0");
93 HepRepTypeTree typeTree = factory.createHepRepTypeTree(treeID);
94 root.addTypeTree(typeTree);
95
96 HepRepInstanceTree instanceTree = factory.createHepRepInstanceTree("Event", "1.0", typeTree);
97 root.addInstanceTree(instanceTree);
98
99 List<List<Object>> data = event.get(Object.class);
100
101 for (List collection : data)
102 {
103 LCMetaData meta = event.getMetaData(collection);
104 if(meta==null) continue;
105 Class colType = meta.getType();
106
107 for (HepRepCollectionConverter converter : converters)
108 {
109 if (converter.canHandle(colType))
110 {
111 converter.convert(event,collection,factory,typeTree,instanceTree);
112 }
113 }
114 }
115
116 createAxisLines(factory, root, typeTree, instanceTree);
117
118 return root;
119 }
120
121 private void createAxisLines(HepRepFactory factory, HepRep root, HepRepTypeTree typeTree, HepRepInstanceTree instanceTree)
122 {
123 root.addLayer(AXIS_LAYER);
124
125 HepRepType axis = factory.createHepRepType(typeTree, "axis");
126 axis.addAttValue("drawAs","Line");
127 axis.addAttValue("layer", "Axis");
128 axis.addAttValue("lineWidth", 20);
129
130 HepRepType xaxis = factory.createHepRepType(axis, "xaxis");
131 xaxis.addAttValue("color",Color.RED);
132 xaxis.addAttValue("fill",true);
133 xaxis.addAttValue("fillColor",Color.RED);
134 HepRepInstance x = factory.createHepRepInstance(instanceTree, xaxis);
135 factory.createHepRepPoint(x,0,0,0);
136 factory.createHepRepPoint(x,2000,0,0);
137
138 HepRepType yaxis = factory.createHepRepType(axis, "yaxis");
139 yaxis.addAttValue("color",Color.GREEN);
140 yaxis.addAttValue("fill",true);
141 yaxis.addAttValue("fillColor",Color.GREEN);
142 HepRepInstance y = factory.createHepRepInstance(instanceTree, yaxis);
143 factory.createHepRepPoint(y,0,0,0);
144 factory.createHepRepPoint(y,0,2000,0);
145
146 HepRepType zaxis = factory.createHepRepType(axis, "zaxis");
147 zaxis.addAttValue("color",Color.BLUE);
148 zaxis.addAttValue("fill",true);
149 zaxis.addAttValue("fillColor",Color.BLUE);
150 HepRepInstance z = factory.createHepRepInstance(instanceTree, zaxis);
151 factory.createHepRepPoint(z,0,0,0);
152 factory.createHepRepPoint(z,0,0,2000);
153 }
154 }