Print

Print


Commit in GeomConverter/src/org/lcsim/geometry/compact/converter/pandora on MAIN
Main.java+32-151.32 -> 1.33
correction to rad and int length calcs for coil

GeomConverter/src/org/lcsim/geometry/compact/converter/pandora
Main.java 1.32 -> 1.33
diff -u -r1.32 -r1.33
--- Main.java	11 Mar 2011 19:22:20 -0000	1.32
+++ Main.java	17 Mar 2011 22:06:36 -0000	1.33
@@ -53,7 +53,7 @@
  * geometry input format.
  * 
  * @author Jeremy McCormick <[log in to unmask]>
- * @version $Id: Main.java,v 1.32 2011/03/11 19:22:20 jeremy Exp $
+ * @version $Id: Main.java,v 1.33 2011/03/17 22:06:36 jeremy Exp $
  */
 public class Main implements Converter
 {
@@ -621,32 +621,50 @@
         double coilOuterR = 0;
         double bfield = 0;
         double coilMaxZ = 0;
-        try {
+        try 
+        {
         	MultiLayerTracker c = (MultiLayerTracker) detector.getSubdetector("SolenoidCoilBarrel");
-        	if (c != null) {
+        	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.getRadiationLengths(layern);
-        			coilIntLen += c.getInteractionLengths(layern);
+        		for (int layern = 0; layern != c.getNumberOfLayers(); layern++) 
+        		{
+        		    for (LayerSlice slice : c.getLayer(layern).getSlices())
+        		    {
+        		        double x0 = slice.getMaterial().getRadiationLength();
+        		        double sliceRadLen = slice.getThickness() / (x0*10);                   
+        		        double lambda = slice.getMaterial().getNuclearInteractionLength();
+        		        double sliceIntLen = slice.getThickness() / (lambda*10);
+        		        
+        		        coilRadLen += sliceRadLen;
+        		        coilIntLen += sliceIntLen; 
+        		    }
         		}
         		//calculate average interaction/radiation length in coil material
         		coilRadLen = coilRadLen/(coilOuterR-coilInnerR);
         		coilIntLen = coilIntLen/(coilOuterR-coilInnerR);
-        	}
-        } catch (ClassCastException e) {
-        	
+        	}        
+        } 
+        catch (ClassCastException e) 
+        {        
+            throw new RuntimeException(e);
         }
-        try {
+        try 
+        {
         	Solenoid s = (Solenoid) detector.getFields().get("GlobalSolenoid");
-        	if (s != null) {
+        	if (s != null) 
+        	{
         		bfield = s.getField(new BasicHep3Vector(0, 0, 0)).z();
         		coilMaxZ = s.getZMax();
         	}
-        } catch (ClassCastException e) {
-        	
+        } 
+        catch (ClassCastException e) 
+        {
+            throw new RuntimeException(e);
         }
+        
         Element coil = new Element("coil");
         coil.setAttribute("radLen", xlen.format(coilRadLen));
         coil.setAttribute("intLen", xlen.format(coilIntLen));
@@ -654,8 +672,7 @@
         coil.setAttribute("outerR", Double.toString(coilOuterR));
         coil.setAttribute("z", Double.toString(coilMaxZ));
         coil.setAttribute("bfield", Double.toString(bfield));
-        root.addContent(coil);
-        
+        root.addContent(coil);        
 
         Tube tube = (Tube) detector.getTrackingVolume().getLogicalVolume().getSolid();
         Element tracking = new Element("tracking");
CVSspam 0.2.8