View Javadoc

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   * @author Tony Johnson
17   * @author Jeremy McCormick
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 }