1 package org.lcsim.plugin.browser;
2
3 import hep.physics.particle.properties.UnknownParticleIDException;
4
5 import java.util.ArrayList;
6 import java.util.List;
7
8 import javax.swing.table.AbstractTableModel;
9
10 import org.lcsim.event.EventHeader.LCMetaData;
11 import org.lcsim.event.MCParticle;
12 import org.lcsim.event.MCParticle.SimulatorStatus;
13
14
15
16
17
18
19 class MCParticleTableModel extends AbstractTableModel implements EventBrowserTableModel
20 {
21 private List particles;
22 private static Class floatArrayClass = new float[0].getClass();
23 private static Class doubleArrayClass = new double[0].getClass();
24 private static Class intArrayClass = new int[0].getClass();
25 private static final String[] columns = {"N","PDG ID","Type","Generator Status","Simulator Status","Parent","Energy","Momentum","Start","End","Mass","Charge","Time","Spin","Color Flow"};
26 private static final Class[] classes = {Integer.class, Integer.class, Integer.class, String.class, String.class, String.class, Double.class, floatArrayClass, doubleArrayClass, doubleArrayClass, Float.class, Float.class, Float.class, floatArrayClass, intArrayClass};
27
28 public boolean canDisplay(Class c)
29 {
30 return MCParticle.class.isAssignableFrom(c);
31 }
32 public void setData(LCMetaData meta, List particles)
33 {
34 this.particles = particles;
35 fireTableDataChanged();
36 }
37 public int getRowCount()
38 {
39 return particles == null ? 0 : particles.size();
40 }
41 public int getColumnCount()
42 {
43 return columns.length;
44 }
45 public String getColumnName(int index)
46 {
47 return columns[index];
48 }
49 public Class getColumnClass(int index)
50 {
51 return classes[index];
52 }
53 public Object getValueAt(int row, int column)
54 {
55 MCParticle p = (MCParticle) particles.get(row);
56 try
57 {
58 switch (column)
59 {
60 case 0: return row;
61 case 1: return p.getPDGID();
62 case 2: return p.getType().getName();
63 case 3: return convert(p.getGeneratorStatus());
64 case 4: return convert(p.getSimulatorStatus());
65 case 5: return parents(p);
66 case 6: return p.getEnergy();
67 case 7: return p.getMomentum().v();
68 case 8: return p.getOrigin().v();
69 case 9:
70 try
71 {
72 return p.getEndPoint().v();
73 }
74 catch (Exception x) { return null; }
75 case 10: return p.getMass();
76 case 11: return p.getCharge();
77 case 12: return p.getProductionTime();
78 case 13: return p.getSpin();
79 case 14: return p.getColorFlow();
80 default: return " ";
81 }
82 }
83 catch (UnknownParticleIDException x)
84 {
85 return "id="+x.getPDGID()+"?";
86 }
87 }
88 static String convert(SimulatorStatus status)
89 {
90 List<String> s = new ArrayList<String>();
91 if (status.hasLeftDetector())
92 {
93 s.add("Left");
94 }
95 if (status.isBackscatter())
96 {
97 s.add("Backscatter");
98 }
99 if (status.isCreatedInSimulation())
100 {
101 s.add("Created In Simulation");
102 }
103 if (status.isDecayedInCalorimeter())
104 {
105 s.add("Decayed In Calorimeter");
106 }
107 if (status.isDecayedInTracker())
108 {
109 s.add("Decayed In Tracker");
110 }
111 if (status.isStopped())
112 {
113 s.add("Stopped");
114 }
115 StringBuffer buff = new StringBuffer();
116 for (int i=0; i<s.size(); i++)
117 {
118 buff.append(s.get(i)+",");
119 }
120 buff.setLength(Math.max(0,buff.length()-1));
121 return buff.toString();
122 }
123 static String convert(int status)
124 {
125 switch (status)
126 {
127 case 1: return "Final State";
128 case 2: return "Intermediate";
129 case 3: return "Documentation";
130 default: return "Other ("+status+")";
131 }
132 }
133 private String parents(MCParticle p)
134 {
135 StringBuffer buf = new StringBuffer();
136 List<MCParticle> parents = p.getParents();
137 for (MCParticle parent : parents)
138 {
139 buf.append(particles.indexOf(parent));
140 buf.append(',');
141 }
142 buf.setLength(Math.max(0,buf.length()-1));
143 return buf.toString();
144 }
145 }