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
21
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
70
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
84
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 }