Commit in GeomConverter/src/org/lcsim/geometry/compact/converter/pandora on MAIN
Main.java+48-161.25 -> 1.26
Rewrote the magnetic field element to fit with slicPandora changes

GeomConverter/src/org/lcsim/geometry/compact/converter/pandora
Main.java 1.25 -> 1.26
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");
CVSspam 0.2.8