Commit in GeomConverter on MAIN | |||
src/org/lcsim/detector/converter/compact/HPSEcal3Converter.java | +319 | -8 | 1.1 -> 1.2 |
test/org/lcsim/detector/converter/compact/HPSEcal3ConverterTest.java | +41 | added 1.1 | |
testResources/org/lcsim/geometry/subdetector/HPSEcal3Test.xml | +6 | -219 | 1.2 -> 1.3 |
+366 | -227 |
alpha version of HPSEcal3 impl for Java
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; } }
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
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>
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