GeomConverter/src/org/lcsim/detector/converter/compact
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/testResources/org/lcsim/geometry/subdetector
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>