GeomConverter/src/org/lcsim/geometry/compact/converter/pandora
diff -u -r1.25 -r1.26
--- Main.java 22 Nov 2010 23:25:31 -0000 1.25
+++ Main.java 25 Nov 2010 17:04:45 -0000 1.26
@@ -44,16 +44,19 @@
import org.lcsim.geometry.layer.LayerStack;
import org.lcsim.geometry.segmentation.AbstractCartesianGrid;
import org.lcsim.geometry.subdetector.AbstractPolyhedraCalorimeter;
+import org.lcsim.geometry.subdetector.MultiLayerTracker;
import org.lcsim.geometry.util.BaseIDDecoder;
import org.lcsim.geometry.util.IDDescriptor;
import org.lcsim.geometry.util.SamplingFractionManager;
+import com.sun.xml.internal.bind.v2.TODO;
+
/**
* This class converts from a compact detector description into slicPandora's
* geometry input format.
*
* @author Jeremy McCormick <[log in to unmask]>
- * @version $Id: Main.java,v 1.25 2010/11/22 23:25:31 jeremy Exp $
+ * @version $Id: Main.java,v 1.26 2010/11/25 17:04:45 grefe Exp $
*/
public class Main implements Converter
{
@@ -590,21 +593,50 @@
}
}
}
-
- for (Field f : detector.getFields().values())
- {
- if (f instanceof Solenoid)
- {
- Solenoid s = (Solenoid) f;
- Element coil = new Element("coil");
- coil.setAttribute("bfield", Double.toString(s.getField(new BasicHep3Vector(0, 0, 0)).z()));
- coil.setAttribute("innerR", Double.toString(0.));
- coil.setAttribute("z", Double.toString(s.getZMax()));
- coil.setAttribute("outerR", Double.toString(Math.sqrt(s.getOuterRadius2())));
- root.addContent(coil);
- }
- break;
- }
+
+ // TODO clean up the hard coded assumptions on coil geometry
+ double coilRadLen = 0;
+ double coilIntLen = 0;
+ int coilLayers = 0;
+ double coilInnerR = 0;
+ double coilOuterR = 0;
+ double bfield = 0;
+ double coilMaxZ = 0;
+ try {
+ MultiLayerTracker c = (MultiLayerTracker) detector.getSubdetector("SolenoidCoilBarrel");
+ if (c != null) {
+ coilLayers = c.getNumberOfLayers();
+ coilInnerR = c.getInnerR()[0];
+ coilOuterR = c.getInnerR()[coilLayers-1] + c.getLayerThickness(coilLayers-1);
+ for (int layern = 0; layern != c.getNumberOfLayers(); layern++) {
+ coilRadLen += c.getNumberOfRadiationLengths(layern);
+ coilIntLen += c.getNumberOfInteractionLengths(layern);
+ }
+ //calculate average interaction/radiation length in coil material
+ coilRadLen = coilRadLen/(coilOuterR-coilInnerR);
+ coilIntLen = coilIntLen/(coilOuterR-coilInnerR);
+ }
+ } catch (ClassCastException e) {
+
+ }
+ try {
+ Solenoid s = (Solenoid) detector.getFields().get("GlobalSolenoid");
+ if (s != null) {
+ bfield = s.getField(new BasicHep3Vector(0, 0, 0)).z();
+ coilMaxZ = s.getZMax();
+ }
+ } catch (ClassCastException e) {
+
+ }
+ Element coil = new Element("coil");
+ coil.setAttribute("radLen", xlen.format(coilRadLen));
+ coil.setAttribute("intLen", xlen.format(coilIntLen));
+ coil.setAttribute("innerR", Double.toString(coilInnerR));
+ coil.setAttribute("outerR", Double.toString(coilOuterR));
+ coil.setAttribute("z", Double.toString(coilMaxZ));
+ coil.setAttribute("bfield", Double.toString(bfield));
+ root.addContent(coil);
+
Tube tube = (Tube) detector.getTrackingVolume().getLogicalVolume().getSolid();
Element tracking = new Element("tracking");