View Javadoc

1   package org.lcsim.util.heprep;
2   
3   import hep.graphics.heprep.HepRepFactory;
4   import hep.graphics.heprep.HepRepInstance;
5   import hep.graphics.heprep.HepRepInstanceTree;
6   import hep.graphics.heprep.HepRepPoint;
7   import hep.graphics.heprep.HepRepType;
8   import hep.graphics.heprep.HepRepTypeTree;
9   
10  import java.awt.Color;
11  import java.util.List;
12  
13  import org.lcsim.event.CalorimeterHit;
14  import org.lcsim.event.EventHeader;
15  import org.lcsim.event.EventHeader.LCMetaData;
16  import org.lcsim.event.SimCalorimeterHit;
17  
18  /**
19   *
20   * @author tonyj
21   * @version $Id: CalorimeterHitConverter.java,v 1.10 2010/05/05 20:36:35 ngraf Exp $
22   */
23  class CalorimeterHitConverter implements HepRepCollectionConverter
24  {
25     private ColorMap hitColorMap = new RainbowColorMap();
26     
27     public boolean canHandle(Class k)
28     {
29        return CalorimeterHit.class.isAssignableFrom(k);
30     }
31     public void convert(EventHeader event, List collection, HepRepFactory factory, HepRepTypeTree typeTree, HepRepInstanceTree instanceTree)
32     {
33        LCMetaData meta = event.getMetaData(collection);
34        String name = meta.getName();
35        int flags = meta.getFlags();
36        
37        HepRepType typeX = factory.createHepRepType(typeTree, name);
38        typeX.addAttValue("layer",LCSimHepRepConverter.HITS_LAYER);
39        typeX.addAttValue("drawAs","Point");
40        typeX.addAttValue("color",Color.RED);
41        typeX.addAttValue("fill",true);
42        typeX.addAttValue("fillColor",Color.RED);
43        typeX.addAttValue("MarkName","Box");      
44        typeX.addAttDef("energy", "Hit Energy", "physics", "");
45        
46        double maxEnergy = 0;
47        double minEnergy = Double.MAX_VALUE;
48        if (hitColorMap != null)
49        {
50           for (CalorimeterHit hit : (List<CalorimeterHit>) collection)
51           {
52               double e = 0.;
53               if(hit instanceof SimCalorimeterHit)
54               {
55                   e = hit.getRawEnergy();
56               }
57               else
58               {
59                   e = hit.getCorrectedEnergy();
60               }
61  
62              if (Double.isNaN(e) || Double.isInfinite(e) || e <= 0) continue;
63              if (e > maxEnergy) maxEnergy = e;
64              if (e < minEnergy) minEnergy = e;
65           }
66        }
67        if (minEnergy == maxEnergy) maxEnergy = minEnergy + 1;
68        
69        //boolean hasPos = LCIOUtil.bitTest(flags,LCIOConstants.CHBIT_LONG);
70        //CalorimeterIDDecoder decoder = hasPos ? null : (CalorimeterIDDecoder) meta.getIDDecoder();
71        for (CalorimeterHit hit : (List<CalorimeterHit>) collection)
72        {
73            double e = 0.;
74            if(hit instanceof SimCalorimeterHit)
75            {
76              e = hit.getRawEnergy();
77            }
78            else
79            {
80                e = hit.getCorrectedEnergy();
81            }
82           if (Double.isNaN(e) || Double.isInfinite(e) || e <= 0) continue;
83           //if (!hasPos) decoder.setID(hit.getCellID());
84           //double[] pos = hasPos ?  hit.getPosition() : decoder.getPosition();
85           double pos[] = null;
86           try {
87          	 pos = hit.getPosition();
88           }
89           catch (Exception x)
90           {}
91           
92           if (pos != null)
93           {
94          	 HepRepInstance instanceX = factory.createHepRepInstance(instanceTree, typeX);
95          	 instanceX.addAttValue("energy",e);
96          	 if (hitColorMap != null)
97          	 {
98          		 double v = (Math.log(e)-Math.log(minEnergy))/(Math.log(maxEnergy)-Math.log(minEnergy));
99          		 instanceX.addAttValue("color",hitColorMap.getColor(v,1.0f));
100         	 }
101         	 HepRepPoint pp = factory.createHepRepPoint(instanceX,pos[0],pos[1],pos[2]);
102          }
103       }
104    }
105 }