Commit in GeomConverter/src/org/lcsim/geometry/compact/converter/pandora on MAIN
Main.java+44-41.1 -> 1.2
implement pandora output binding

GeomConverter/src/org/lcsim/geometry/compact/converter/pandora
Main.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- Main.java	18 Dec 2009 19:32:16 -0000	1.1
+++ Main.java	18 Dec 2009 22:07:44 -0000	1.2
@@ -9,6 +9,8 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.swing.filechooser.FileFilter;
 
@@ -27,7 +29,9 @@
 import org.lcsim.geometry.layer.Layer;
 import org.lcsim.geometry.layer.LayerSlice;
 import org.lcsim.geometry.layer.LayerStack;
+import org.lcsim.geometry.segmentation.AbstractCartesianGrid;
 import org.lcsim.geometry.subdetector.AbstractPolyhedraCalorimeter;
+import org.lcsim.geometry.util.BaseIDDecoder;
 
 /**
  * This class converts from a compact detector description to a format
@@ -90,7 +94,17 @@
                     calorimeter.setAttribute("outerPhi", Double.toString(polycal.getOuterPhi()));
                     calorimeter.setAttribute("outerSymmetryOrder", Double.toString(polycal.getOuterNumberOfSides()));
                     
-                    calorimeters.addContent( calorimeter );
+                    calorimeter.setAttribute("collection", subdetector.getReadout().getName());
+                    
+                    List<Double> cellSizes = getCellSizes(subdetector);
+                    calorimeter.setAttribute("cellSizeU", Double.toString(cellSizes.get(0)));
+                    calorimeter.setAttribute("cellSizeV", Double.toString(cellSizes.get(1)));
+                    
+                    Element iddesc = new Element("id");
+                    iddesc.setText(polycal.getReadout().getIDDescriptor().toString());
+                    calorimeter.addContent(iddesc);
+                    
+                    calorimeters.addContent(calorimeter);
                     
                     LayerStack layers = polycal.getLayering().getLayerStack();
                                    
@@ -119,9 +133,7 @@
                                                                                                                                                                      
                         double intLen = 0;
                         double radLen = 0;
-                        
-                        boolean gotSensor = false;
-                                                                        
+                                                                                               
                         for (int j=0; j<layer.getNumberOfSlices(); j++)
                         {
                             LayerSlice slice = layer.getSlice(j);
@@ -165,6 +177,34 @@
         
         return outputDoc;        
     }
+    
+    private List<Double> getCellSizes(Subdetector subdetector)
+    {
+        List<Double> cellSizes = new ArrayList<Double>();
+        BaseIDDecoder dec = (BaseIDDecoder)subdetector.getReadout().getIDDecoder();
+        for (int i=0; i<dec.getFieldCount(); i++)
+        {
+            if (dec instanceof AbstractCartesianGrid)
+            {
+                AbstractCartesianGrid cgrid = (AbstractCartesianGrid)dec;
+                if (cgrid.getCellSizeX() != 0)
+                {
+                    cellSizes.add(cgrid.getCellSizeX());
+                }
+                if (cgrid.getCellSizeY() != 0)
+                {
+                    cellSizes.add(cgrid.getCellSizeY());
+                }
+                if (cgrid.getCellSizeZ() != 0)
+                {
+                    cellSizes.add(cgrid.getCellSizeZ());
+                }
+            }
+        }
+        if (cellSizes.size() != 2)
+            throw new RuntimeException("Only 2 cell dimensions are allowed.");
+        return cellSizes;
+    }
 
     public String getOutputFormat()
     {
CVSspam 0.2.8