View Javadoc

1   /*
2    * SiTrackerHitStrip1DConverter.java
3    *
4    * Created on December 26, 2007, 4:09 PM
5    *
6    * To change this template, choose Tools | Template Manager
7    * and open the template in the editor.
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   * @author cozzy
29   *
30   *  This is a converter for SiTrackerHit1D objects. It draws the hit segment
31   *  for each instance. 
32   *
33   * Since SiTrackerHitStrip1D implements TrackerHit, TrackerHitConverter will 
34   * also fire and draw a marker for each of these. 
35   *    
36   */
37  public class SiTrackerHitStrip1DConverter implements HepRepCollectionConverter {
38      
39      /** Creates a new instance of SiTrackerHitStrip1DConverter */
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          // Check if the TrackerHit can be cast to a SiTrackerHitStrip1D.
50      	if (collection.isEmpty() || !(collection.get(0) instanceof SiTrackerHitStrip1D)) return; 
51          
52          LCMetaData meta = event.getMetaData(collection);
53          String name = meta.getName()+"_Strip1D"; //added string because TrackerHitConverter will also fire on this collection... 
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          // Draw modules for noise hits because they don't have associated SimTrackerhits 
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  }