View Javadoc

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   * @author tonyj
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          // Lets start with the detector
78          try
79          {
80              Detector detector = event.getDetector();
81              detector.appendHepRep(factory,root);
82          }
83          catch (Exception e)
84          {
85          }
86  
87          // Now on to deal with the event data
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 }