Commit in GeomConverter on MAIN
src/org/lcsim/detector/converter/compact/HPSEcal3Converter.java+319-81.1 -> 1.2
test/org/lcsim/detector/converter/compact/HPSEcal3ConverterTest.java+41added 1.1
testResources/org/lcsim/geometry/subdetector/HPSEcal3Test.xml+6-2191.2 -> 1.3
+366-227
1 added + 2 modified, total 3 files
alpha version of HPSEcal3 impl for Java

GeomConverter/src/org/lcsim/detector/converter/compact
HPSEcal3Converter.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- HPSEcal3Converter.java	1 Sep 2011 23:58:41 -0000	1.1
+++ HPSEcal3Converter.java	30 Apr 2012 16:28:57 -0000	1.2
@@ -1,18 +1,329 @@
 package org.lcsim.detector.converter.compact;
 
+import static java.lang.Math.atan;
+import static java.lang.Math.cos;
+import static java.lang.Math.sin;
+import static java.lang.Math.tan;
+import hep.physics.vec.Hep3Vector;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jdom.DataConversionException;
+import org.jdom.Element;
+import org.lcsim.detector.DetectorElement;
+import org.lcsim.detector.ILogicalVolume;
+import org.lcsim.detector.IPhysicalVolume;
+import org.lcsim.detector.IRotation3D;
+import org.lcsim.detector.ITranslation3D;
+import org.lcsim.detector.LogicalVolume;
+import org.lcsim.detector.PhysicalVolume;
+import org.lcsim.detector.RotationGeant;
+import org.lcsim.detector.Transform3D;
+import org.lcsim.detector.Translation3D;
+import org.lcsim.detector.identifier.ExpandedIdentifier;
+import org.lcsim.detector.identifier.IExpandedIdentifier;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.identifier.IIdentifierDictionary;
+import org.lcsim.detector.identifier.IIdentifierHelper;
+import org.lcsim.detector.material.MaterialStore;
+import org.lcsim.detector.solids.Trd;
 import org.lcsim.geometry.compact.Detector;
 import org.lcsim.geometry.compact.Subdetector;
 import org.lcsim.geometry.subdetector.HPSEcal3;
 
-public class HPSEcal3Converter extends AbstractSubdetectorConverter
-{
-    public void convert(Subdetector subdet, Detector detector)
-    {
-        //System.out.println(this.getClass().getCanonicalName());        
+public class HPSEcal3Converter extends AbstractSubdetectorConverter {
+
+    // Tolerance factor for moving crystals to appropriate place in mom volume.
+    static final double tolerance = 0.0;
+
+    // Tolerance factor for separating crystals to avoid overlaps.
+    static final double crystalTolerance = 0.15;
+
+    // Margin for mother volume.
+    static final double margin = 1.1;
+
+    List<CrystalRange> ranges = new ArrayList<CrystalRange>();
+
+    IIdentifierHelper helper;
+    IIdentifierDictionary dict;
+
+    private static class CrystalRange {
+        int ixmin;
+        int ixmax;
+        int iymin;
+        int iymax;
+
+        CrystalRange(Element elem) throws Exception {
+            ixmin = ixmax = iymin = iymax = 0;
+
+            if (elem.getAttribute("ixmin") != null) {
+                ixmin = elem.getAttribute("ixmin").getIntValue();
+            } else {
+                throw new RuntimeException("Missing ixmin parameter.");
+            }
+
+            if (elem.getAttribute("ixmax") != null) {
+                ixmax = elem.getAttribute("ixmax").getIntValue();
+            } else {
+                throw new RuntimeException("Missing ixmax parameter.");
+            }
+
+            if (elem.getAttribute("iymin") != null) {
+                iymin = elem.getAttribute("iymin").getIntValue();
+            } else {
+                throw new RuntimeException("Missing ixmax parameter.");
+            }
+
+            if (elem.getAttribute("iymax") != null) {
+                iymax = elem.getAttribute("iymax").getIntValue();
+            } else {
+                throw new RuntimeException("Missing iymax parameter.");
+            }
+        }
+    }
+
+    private boolean checkRange(int ix, int iy, List<CrystalRange> ranges) {
+        if (ranges.size() == 0)
+            return true;
+        for (CrystalRange range : ranges) {
+            if ((ix >= range.ixmin && ix <= range.ixmax) && ((iy >= range.iymin) && (iy <= range.iymax))) {
+                return false;
+            }
+
+        }
+        return true;
+    }
+
+    public void convert(Subdetector subdet, Detector detector) {
+
+        helper = subdet.getDetectorElement().getIdentifierHelper();
+        dict = helper.getIdentifierDictionary();
+
+        // Crystal dimensions.
+        Element dimensions = subdet.getNode().getChild("dimensions");
+
+        double dx1, dx2, dy1, dy2, dz;
+        Element layout;
+        double beamgap;
+        int nx, ny;
+        double dface;
+
+        try {
+            dx1 = dimensions.getAttribute("x1").getDoubleValue();
+            dx2 = dimensions.getAttribute("x2").getDoubleValue();
+            dy1 = dimensions.getAttribute("y1").getDoubleValue();
+            dy2 = dimensions.getAttribute("y2").getDoubleValue();
+            dz = dimensions.getAttribute("z").getDoubleValue();
+
+            // Layout parameters.
+            layout = subdet.getNode().getChild("layout");
+            beamgap = layout.getAttribute("beamgap").getDoubleValue();
+            nx = layout.getAttribute("nx").getIntValue();
+            ny = layout.getAttribute("ny").getIntValue();
+            dface = layout.getAttribute("dface").getDoubleValue();
+        } catch (DataConversionException e) {
+            throw new RuntimeException("Error converting HPSEcal3 from XML.", e);
+        }
+
+        // Crystal material.
+        Element mat = subdet.getNode().getChild("material");
+        String materialName = mat.getAttributeValue("name");
+
+        // Setup range of indices to be skipped.
+        for (Object obj : layout.getChildren("remove")) {
+            Element remove = (Element) obj;
+            try {
+                ranges.add(new CrystalRange(remove));
+            } catch (Exception x) {
+                throw new RuntimeException(x);
+            }
+        }
+
+        // Setup crystal logical volume.
+        Trd crystalTrap = new Trd("crystal_trap", dx1, dx2, dy1, dy2, dz);
+        ILogicalVolume crystalLogVol = new LogicalVolume("crystal_volume", crystalTrap, MaterialStore.getInstance().get(materialName));
+
+        //
+        // Now we calculate parameters for crystal placement...
+        //
+
+        // Slope of the trapezoid side in X.
+        double sx = (dx2 - dx1) / (2 * dz);
+
+        // Angle of the side of the trapezoid w.r.t. center line in X. Rotation
+        // about Y axis.
+        double dthetay = atan(sx);
+
+        // Slope of the trapezoid side in Y.
+        double sy = (dy2 - dy1) / (2 * dz);
+
+        // Angle of the side of the trapezoid w.r.t. center line in Y. Rotation
+        // about X axis.
+        double dthetax = atan(sx);
+
+        // Distance between (virtual) angular origin and center of trapezoid in
+        // X.
+        double z0x = dx1 / sx + dz;
+
+        // Distance between (virtual) angular origin and center of trapezoid in
+        // Y.
+        double z0y = dy1 / sy + dz;
+
+        // Odd or even number of crystals in X.
+        boolean oddx = (nx % 2 != 0);
+
+        // Calculate number of X for loop.
+        if (oddx) {
+            nx -= 1;
+            nx /= 2;
+        } else {
+            nx /= 2;
+        }
+
+        double ycorrtot = 0;
+        double zcorrtoty = 0;
+
+        // Crystal sequence number used for unique volume names.
+        int crystaln = 1;
+
+        // Base name for volume.
+        String baseName = subdet.getName() + "_crystal";
+
+        // World volume.
+        ILogicalVolume mom = detector.getWorldVolume().getLogicalVolume();
+
+        for (int iy = 1; iy <= ny; iy++) {
+            double zcorrtotx = 0;
+            double xcorrtot = 0;
+
+            int coeffy = 2 * iy - 1;
+            double thetax = coeffy * dthetax;
+            double zcorry = dy1 * (2 * sin(coeffy * dthetax));
+            double ycorr = zcorry * tan((coeffy - 1) * dthetax);
+            double ycenter = z0y * sin(coeffy * dthetax) + ycorr + ycorrtot + (crystalTolerance * iy);
+            double thetaz = 0;
+
+            for (int ix = 0; ix <= nx; ix++) {
+                // Coefficient for even/odd crystal
+                int coeffx = 2 * ix;
+                if (!oddx) {
+                    coeffx -= 1;
+                    // For even number of crystals, the 0th is skipped.
+                    if (ix == 0)
+                        continue;
+                }
+
+                // Set parameters for next crystal placement.
+                double thetay = coeffx * dthetay;
+                double zcorrx = dx1 * (2 * sin(coeffx * dthetay));
+                double xcorr = zcorrx * tan((coeffx - 1) * dthetay);
+                double xcenter = z0x * sin(coeffx * dthetay) + xcorr + xcorrtot + (crystalTolerance * ix);
+                double zcenter = z0y * (cos(coeffy * dthetax) - 1) + z0x * (cos(coeffx * dthetay) - 1) + zcorrx + zcorrtotx + zcorry + zcorrtoty;
+                zcenter += dz;
+
+                //
+                // Bottom section.
+                //
+
+                if (checkRange(ix, -iy, ranges)) {
+                    // Transform of positive bottom crystal.
+                    ITranslation3D iposBot = new Translation3D(xcenter, -(beamgap + ycenter + tolerance), zcenter + tolerance + dface);
+                    IRotation3D irotBot = new RotationGeant(-thetax, -thetay, thetaz);
+
+                    // Place positive crystal.
+                    IPhysicalVolume posCrystalPlacementBot = new PhysicalVolume(new Transform3D(iposBot, irotBot), baseName + crystaln, crystalLogVol, mom, crystaln);
+                    createDetectorElement(detector, subdet, posCrystalPlacementBot, ix, -iy);
+                    ++crystaln;
+                }
+
+                // Reflection to negative.
+                if (ix != 0) {
+                    if (checkRange(-ix, -iy, ranges)) {
+                        // Transform of negative.
+                        ITranslation3D iposnegBot = new Translation3D(-xcenter, -(beamgap + ycenter + tolerance), zcenter + tolerance + dface);
+                        IRotation3D irotnegBot = new RotationGeant(-thetax, thetay, thetaz);
+
+                        // Place negative crystal.
+                        PhysicalVolume negCrystalPlacementBot = new PhysicalVolume(new Transform3D(iposnegBot, irotnegBot), baseName + crystaln, crystalLogVol, detector.getWorldVolume().getLogicalVolume(), crystaln);
+                        createDetectorElement(detector, subdet, negCrystalPlacementBot, -ix, -iy);
+                        ++crystaln;
+                    }
+                }
+
+                if (checkRange(ix, iy, ranges)) {
+                    // Transform of positive top crystal.
+                    Translation3D iposTop = new Translation3D(xcenter, beamgap + ycenter + tolerance, zcenter + tolerance + dface);
+                    IRotation3D irotTop = new RotationGeant(thetax, -thetay, thetaz);
+
+                    // Place positive top crystal.
+                    PhysicalVolume posCrystalPlacementTop = new PhysicalVolume(new Transform3D(iposTop, irotTop), baseName + crystaln, crystalLogVol, detector.getWorldVolume().getLogicalVolume(), crystaln);
+                    createDetectorElement(detector, subdet, posCrystalPlacementTop, ix, iy);
+                    ++crystaln;
+                }
+
+                // Reflection to negative.
+                if (ix != 0) {
+                    if (checkRange(-ix, iy, ranges)) {
+                        // Transform of negative.
+                        ITranslation3D iposnegTop = new Translation3D(-xcenter, beamgap + ycenter + tolerance, zcenter + tolerance + dface);
+                        IRotation3D irotnegTop = new RotationGeant(thetax, thetay, thetaz);
+
+                        // Place negative crystal.
+                        PhysicalVolume negCrystalPlacementTop = new PhysicalVolume(new Transform3D(iposnegTop, irotnegTop), baseName + crystaln, crystalLogVol, detector.getWorldVolume().getLogicalVolume(), crystaln);
+                        createDetectorElement(detector, subdet, negCrystalPlacementTop, -ix, iy);
+                        ++crystaln;
+                    }
+                }
+
+                // Increment running X and Z totals and include tolerance to
+                // avoid overlaps.
+                xcorrtot += xcorr;
+                zcorrtotx += zcorrx;
+            }
+
+            // Increment running Y totals.
+            ycorrtot += ycorr;
+            zcorrtoty += zcorry;
+        }
     }
-    
-    public Class getSubdetectorType()
-    {
+
+    /**
+     * Create a DetectorElement for an ECal crystal.
+     * 
+     * @param detector
+     *            The full detector.
+     * @param subdet
+     *            The subdetector.
+     * @param crystal
+     *            The crystal physical volume.
+     * @param ix
+     *            The value of the ix field.
+     * @param iy
+     *            The value of the iy field.
+     */
+    private final void createDetectorElement(Detector detector, Subdetector subdet, IPhysicalVolume crystal, int ix, int iy) {
+        final String path = "/" + crystal.getName();
+        final IExpandedIdentifier expId = new ExpandedIdentifier(helper.getIdentifierDictionary().getNumberOfFields());
+        expId.setValue(dict.getFieldIndex("system"), subdet.getSystemID());
+        expId.setValue(dict.getFieldIndex("ix"), ix);
+        expId.setValue(dict.getFieldIndex("iy"), iy);
+        final IIdentifier id = helper.pack(expId);
+        // DetectorElement(String name, IDetectorElement parent, String support, IIdentifier id)
+        //DetectorElement de = 
+        new DetectorElement(subdet.getName() + "_crystal" + crystal.getCopyNumber(), subdet.getDetectorElement(), path, id);
+
+        // debug print
+        //System.out.println(de.getName());
+        //Hep3Vector t = de.getGeometry().getPosition();
+        //System.out.println("  id = " + expId.toString());
+        //System.out.println("  pos = " + t.x() + ", " + t.y() + "," + t.z());
+        //IRotation3D r = de.getGeometry().getPhysicalVolume().getTransform().getRotation();
+        //System.out.println("  rot = " + r.toString());
+        //System.out.println("--------");
+    }
+
+    public Class getSubdetectorType() {
         return HPSEcal3.class;
     }
 }

GeomConverter/test/org/lcsim/detector/converter/compact
HPSEcal3ConverterTest.java added at 1.1
diff -N HPSEcal3ConverterTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ HPSEcal3ConverterTest.java	30 Apr 2012 16:28:57 -0000	1.1
@@ -0,0 +1,41 @@
+package org.lcsim.detector.converter.compact;
+
+import java.io.InputStream;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.identifier.IIdentifierHelper;
+import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.GeometryReader;
+
+public class HPSEcal3ConverterTest extends TestCase {
+    Detector detector = null;
+    private static final String resource = "/org/lcsim/geometry/subdetector/HPSEcal3Test.xml";
+    
+    public static Test suite() {
+        return new TestSuite(HPSEcal3ConverterTest.class);
+    }
+
+    public void setUp() {
+        InputStream in = this.getClass().getResourceAsStream(resource);
+        GeometryReader reader = new GeometryReader();
+        try {
+            detector = reader.read(in);
+        }
+        catch (Throwable x) {
+            throw new RuntimeException(x);
+        }
+    }
+    
+    public void testEcal() {
+        IDetectorElement de = detector.getSubdetector("ECAL").getDetectorElement();
+        System.out.println("ECAL has " + de.getChildren().size() + " children.");
+        IIdentifierHelper helper = de.getIdentifierHelper();
+        for (IDetectorElement crystal : de.getChildren()) {
+            System.out.println(crystal.getName() + " - " + helper.unpack(crystal.getIdentifier()));
+        }
+    }
+}
\ No newline at end of file

GeomConverter/testResources/org/lcsim/geometry/subdetector
HPSEcal3Test.xml 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- HPSEcal3Test.xml	1 Sep 2011 23:58:42 -0000	1.2
+++ HPSEcal3Test.xml	30 Apr 2012 16:28:57 -0000	1.3
@@ -1,81 +1,22 @@
 <lccdd xmlns:compact="http://www.lcsim.org/schemas/compact/1.0"
        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
        xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/compact/1.0/compact.xsd">
-
-    <info name="HPSTest">
-        <comment>HPS test setup</comment>
-    </info>
-
+    <info name="HPSEcal3Test"/>
     <define>   
-
-<!--        <constant name="pi" value="3.14159" />-->
-        <constant name="SA"  value="0.10" />
-        <constant name="SA2"  value="0.05" />
-
-        <!-- world -->
+        <!-- world volume -->
         <constant name="world_side" value="10000.0*cm" />
         <constant name="world_x" value="world_side" />
         <constant name="world_y" value="world_side" />
         <constant name="world_z" value="world_side" />
-    
         <!-- tracking region -->
         <constant name="tracking_region_radius" value="200.0*cm"/>
         <constant name="tracking_region_min" value="5.0*cm"/>
         <constant name="tracking_region_zmax" value="100.0*cm"/>
-    
-        <constant name="xCent1" value="10*cm"/>
-        <constant name="xCent2" value="20*cm"/>
-        <constant name="xCent3" value="30*cm"/>
-        <constant name="xCent4" value="50*cm"/>
-        <constant name="xCent5" value="70*cm"/>
-        
-        <constant name="zgap1" value="0.30*cm" />
-        <constant name="zgap2" value="0.60*cm" />
-        <constant name="zgap3" value="0.90*cm" />
-        <constant name="zgap4" value="1.5*cm" />
-        <constant name="zgap5" value="2.1*cm" />
-        
-        <constant name="zPlaneDist" value="1.0*cm"/>
-        
-        <constant name="modLength" value="10.0*cm"/>
-        <constant name="modWidth" value="4.0*cm"/>
-
+        <!-- ECal placement parameters -->       
         <constant name="ecal_front" value="13.3/2*mm" />
         <constant name="ecal_back" value="16/2*mm" />
-        <!--<constant name="ecal_back" value="30/2*mm"/>-->
         <constant name="ecal_z" value="160/2*mm" />
-        
-
-        <!-- tracking region -->
-<!--
-        <constant name="tracking_region_radius" value="200.0*cm"/>
-        <constant name="tracking_region_min" value="5.0*cm"/>
-        <constant name="tracking_region_zmax" value="100.0*cm"/>	
-
-        <constant name="xCent1" value="10*cm" />
-        <constant name="xCent2" value="20*cm" />
-
-        <constant name="xCent3" value="30*cm" />
-        <constant name="xCent4" value="50*cm" />
-        <constant name="xCent5" value="70*cm" />
-        <constant name="xCent6" value="90*cm" />
-
-        <constant name="zgap1" value="0.30*cm" />
-        <constant name="zgap2" value="0.60*cm" />
-
-        <constant name="zgap3" value="0.498*cm" />
-        <constant name="zgap4" value="0.830*cm" />
-        <constant name="zgap5" value="1.162*cm" />
-        <constant name="zgap6" value="1.494*cm" />
-
-        <constant name="zPlaneDist" value="1.0*cm" />
-
-        <constant name="modLength" value="10.0*cm" />
-        <constant name="modWidth" value="4.0*cm" />
--->
-
     </define>
-
     <materials>
         <material name="LeadTungstate">
             <D value="8.28" unit="g/cm3"/>
@@ -84,177 +25,23 @@
             <composite n="4" ref="O"/>
         </material>
     </materials>
-
     <detectors>
-
         <detector id="13" 
-                  name="HPSEcalTest" 
+                  name="ECAL" 
                   type="HPSEcal3" 
                   insideTrackingVolume="false" 
-                  readout="EcalHits">
+                  readout="ECAL_HITS">
             <material name="LeadTungstate" />
             <dimensions x1="ecal_front" y1="ecal_front" x2="ecal_back" y2="ecal_back" z="ecal_z" />
             <layout beamgap="20.0*mm" nx="46" ny="5" dface="120.0*cm">
                 <remove ixmin="2" ixmax="7" iymin="-1" iymax="1" /> 
             </layout>
         </detector>
-
-<!--
-        <detector id="1" name="Tracker" type="SiTrackerFixedTarget2" readout="TrackerHits" combineHits="true" reflect="true"  flipSA="true">
-            <module name="Module1">
-                <trd x1="modWidth/2" x2="modWidth/2" z="modLength/2" />
-                <module_component   thickness="0.032*cm" material = "Silicon" sensitive="true"/>
-                <module_component   thickness="0.02*cm" material = "Carbon" sensitive="false"/> 
-            </module> 
-            
-            <layer id="1">
-                <quadrant yStart="0" ny="1" yStep="modLength" zStart="(zgap1+modWidth)/2" nz="1" zStep="modWidth" phi0="0.0" x="xCent1" dx="0.0*cm"  module="Module1"/>
-            </layer>
-            <layer id="2">
-                <quadrant yStart="0" ny="1" yStep="modLength" zStart="(zgap1+modWidth)/2" nz="1" zStep="modWidth" phi0="SA" x="xCent1+zPlaneDist" dx="0.0*cm"  module="Module1"/>
-            </layer>
-
-            <layer id="3">
-                <quadrant yStart="0" ny="1" yStep="modLength" zStart="(zgap2+modWidth)/2" nz="1" zStep="modWidth" phi0="0.0" x="xCent2" dx="0.0*cm"  module="Module1"/>
-            </layer>
-            <layer id="4">
-                <quadrant yStart="0" ny="1" yStep="modLength" zStart="(zgap2+modWidth)/2" nz="1" zStep="modWidth" phi0="SA" x="xCent2+zPlaneDist" dx="0.0*cm"  module="Module1"/>
-            </layer>
-            
-            
-            <layer id="5">
-                <quadrant yStart="0" ny="1" yStep="modLength" zStart="(zgap3+modWidth)/2" nz="1" zStep="modWidth" phi0="0.0" x="xCent3" dx="0.0*cm"  module="Module1"/>
-            </layer>
-            <layer id="6">
-                <quadrant yStart="0" ny="1" yStep="modLength" zStart="(zgap3+modWidth)/2" nz="1" zStep="modWidth" phi0="SA" x="xCent3+zPlaneDist" dx="0.0*cm"  module="Module1"/>
-            </layer>
-
-            <layer id="7">
-                <quadrant yStart="0" ny="1" yStep="modLength" zStart="(zgap4+modWidth)/2" nz="1" zStep="modWidth" phi0="0.0" x="xCent4" dx="0.0*cm"  module="Module1"/>
-            </layer>
-            <layer id="8">
-                <quadrant yStart="0" ny="1" yStep="modLength" zStart="(zgap4+modWidth)/2" nz="1" zStep="modWidth" phi0="SA2" x="xCent4+zPlaneDist" dx="0.0*cm"  module="Module1"/>
-            </layer>
-
-            <layer id="9">
-                <quadrant yStart="0" ny="1" yStep="modLength" zStart="(zgap5+modWidth)/2" nz="1" zStep="modWidth" phi0="0.0" x="xCent5" dx="0.0*cm"  module="Module1"/>
-            </layer>
-            <layer id="10">
-                <quadrant yStart="0" ny="1" yStep="modLength" zStart="(zgap5+modWidth)/2" nz="1" zStep="modWidth" phi0="SA2" x="xCent5+zPlaneDist" dx="0.0*cm"  module="Module1"/>
-            </layer>
-
-
-        </detector>     
--->
-
-<!--                
-Proposal detector
-        <detector id="1" name="Tracker" type="SiTrackerFixedTarget2"
-                  readout="TrackerHits" combineHits="true" reflect="true">
-            <module name="Module1">
-                <trd x1="modWidth/2" x2="modWidth/2" z="modLength/2" />
-                <module_component thickness="0.032*cm" material="Silicon"
-                                  sensitive="true" />
-                <module_component thickness="0.02*cm" material="Carbon"
-                                  sensitive="false" />
-            </module>
-            
-            <layer id="1">
-                <quadrant yStart="0" ny="1" yStep="modLength" zStart="(zgap1+modWidth)/2"
-                          nz="1" zStep="modWidth" phi0="0.0" x="xCent1" dx="0.0*cm" module="Module1" />
-            </layer>
-            <layer id="2">
-                <quadrant yStart="-1*modWidth/2" ny="2" yStep="modWidth"
-                          zStart="(zgap1+modLength)/2" nz="1" zStep="modLength" phi0="pi/2.0"
-                          x="xCent1+zPlaneDist" dx="0.0*cm" module="Module1" />
-            </layer>
-            
-            
-            <layer id="3">
-                <quadrant yStart="0" ny="1" yStep="modLength" zStart="(zgap2+modWidth)/2"
-                          nz="2" zStep="modWidth" phi0="0.0" x="xCent2" dx="0.0*cm" module="Module1" />
-            </layer>
-            <layer id="4">
-                <quadrant yStart="-1*modWidth" ny="3" yStep="modWidth"
-                          zStart="(zgap2+modLength)/2" nz="1" zStep="modLength" phi0="pi/2.0"
-                          x="xCent2+zPlaneDist" dx="0.0*cm" module="Module1" />
-            </layer>
-            
-            <layer id="5">
-                <quadrant yStart="0" ny="1" yStep="modLength" zStart="(zgap3+modWidth)/2"
-                          nz="2" zStep="modWidth" phi0="0.0" x="xCent3" dx="0.0*cm" module="Module1" />
-            </layer>
-            <layer id="6">
-                <quadrant yStart="-1*modWidth" ny="3" yStep="modWidth"
-                          zStart="(zgap3+modLength)/2" nz="1" zStep="modLength" phi0="pi/2.0"
-                          x="xCent3+zPlaneDist" dx="0.0*cm" module="Module1" />
-            </layer>
-            
-            
-            
-            <layer id="7">
-                <quadrant yStart="-2*modWidth" ny="5" yStep="modWidth"
-                          zStart="(zgap4+modLength)/2" nz="1" zStep="modLength" phi0="pi/2.0-SA"
-                          x="xCent4" dx="0.0*cm" module="Module1" />
-            </layer>
-            <layer id="8">
-                <quadrant yStart="-2*modWidth" ny="5" yStep="modWidth"
-                          zStart="(zgap4+modLength)/2" nz="1" zStep="modLength" phi0="pi/2.0"
-                          x="xCent4+zPlaneDist" dx="0.0*cm" module="Module1" />
-            </layer>
-            
-            <layer id="9">
-                <quadrant yStart="-3*modWidth" ny="7" yStep="modWidth"
-                          zStart="(zgap5+modLength)/2" nz="1" zStep="modLength" phi0="pi/2.0+SA"
-                          x="xCent5" dx="0.0*cm" module="Module1" />
-            </layer>
-            <layer id="10">
-                <quadrant yStart="-3*modWidth" ny="7" yStep="modWidth"
-                          zStart="(zgap5+modLength)/2" nz="1" zStep="modLength" phi0="pi/2.0"
-                          x="xCent5+zPlaneDist" dx="0.0*cm" module="Module1" />
-            </layer>
-
-            <layer id="11">
-                <quadrant yStart="-7*modWidth/2" ny="8" yStep="modWidth"
-                          zStart="(zgap6+modLength)/2" nz="1" zStep="modLength" phi0="pi/2.0-SA"
-                          x="xCent6" dx="0.0*cm" module="Module1" />
-            </layer>
-            <layer id="12">
-                <quadrant yStart="-7*modWidth/2" ny="8" yStep="modWidth"
-                          zStart="(zgap6+modLength)/2" nz="1" zStep="modLength" phi0="pi/2.0"
-                          x="xCent6+zPlaneDist" dx="0.0*cm" module="Module1" />
-            </layer>
-
-        </detector>
--->
-
     </detectors>
-
     <readouts>
-        <readout name="EcalHits">
+        <readout name="ECAL_HITS">
             <segmentation type="GridXYZ" gridSizeX="0.0" gridSizeY="0.0" gridSizeZ="0.0" />
             <id>system:6,side:-2,layer:4,ix:9,iy:9</id>
         </readout>
-        <readout name="TargetHits">
-            <id>system:6,barrel:3,layer:4,wedge:4,module:12,sensor:1,side:32:-2,strip:12</id>
-        </readout>
-        <readout name="TrackerHits">
-            <id>system:6,barrel:3,layer:4,wedge:4,module:12,sensor:1,side:32:-2,strip:12</id>
-        </readout>
     </readouts>
-    <fields>
-        <field type="Solenoid" 
-               name="GlobalSolenoid" 
-               inner_field="0.0"
-               outer_field="1.0" 
-               zmax="17.78*cm"
-               inner_radius="10.0*cm"
-               outer_radius="101.44*cm"
-               />
-    </fields>
-
-    <includes>
-        <gdmlFile ref="file:///u1/projects/GeomConverter/HEAD/vacuumChamber.gdml"/>    
-    </includes>
-
 </lccdd>
CVSspam 0.2.12


Use REPLY-ALL to reply to list

To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1