GeomConverter/src/org/lcsim/geometry/compact/converter/pandora
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()
{