Skip to content
Snippets Groups Projects
Commit 4150c55d authored by Chao Peng's avatar Chao Peng
Browse files

add the geometry for endcap ecal

parent 8b8c139e
Branches
No related tags found
No related merge requests found
<lccdd>
<define>
<constant name="CrystalEndcap_rmin" value="VertexTrackerBarrel_rmin"/>
<constant name="CrystalEndcap_rmax" value="EcalEndcapN_rmin"/>
<constant name="CrystalBox_x_length" value="20.0*mm"/>
<constant name="CrystalBox_y_length" value="20.0*mm"/>
<constant name="CrystalBox_z_length" value="200.0*mm"/>
<constant name="CrystalBox_offset" value="0.000001*mm"/>
<constant name="CrystalEndcap_x_pos" value="0.0*m"/>
<constant name="CrystalEndcap_y_pos" value="0.0*m"/>
<constant name="CrystalEndcap_z_pos" value="-EcalEndcapN_zmin"/>
</define>
<limits>
</limits>
<regions>
</regions>
<!-- Common Generic visualization attributes -->
<comment>Common Generic visualization attributes</comment>
<display>
</display>
<detectors>
<comment>
-------------------------------
Backwards Endcap EM Calorimeter
-------------------------------
A layered EM calorimeter with tungsten and silicon (or scintillator) strips
</comment>
<detector id="ECalEndcapN_ID"
name="EcalEndcapN"
type="refdet_PolyhedraEndcapCalorimeter2"
reflect="true"
readout="EcalEndcapHits"
vis="EcalEndcapVis"
calorimeterType="EM_ENDCAP">
<position x="0" y="0" z="0"/>
<dimensions
numsides="CaloSides"
zmin="EcalEndcapN_zmin"
rmin="EcalEndcapN_rmin"
rmax="EcalBarrel_rmin " />
<layer repeat="EcalEndcapNLayer1_NRepeat">
<slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
<slice material="Copper" thickness="EcalCopperThickness"/>
<slice material="Kapton" thickness="EcalKaptonThickness"/>
<slice material="Air" thickness="EcalAir1Thickness"/>
</layer>
<layer repeat="EcalEndcapNLayer2_NRepeat">
<slice material="TungstenDens24" thickness="EcalThinTungstenThickness"/>
<slice material="Air" thickness="EcalAir2Thickness"/>
<slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
<slice material="Copper" thickness="EcalCopperThickness"/>
<slice material="Kapton" thickness="EcalKaptonThickness"/>
<slice material="Air" thickness="EcalAir1Thickness"/>
</layer>
<layer repeat="EcalEndcapNLayer3_NRepeat">
<slice material="TungstenDens24" thickness="EcalThickTungstenThickness"/>
<slice material="Air" thickness="EcalAir2Thickness"/>
<slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
<slice material="Copper" thickness="EcalCopperThickness"/>
<slice material="Kapton" thickness="EcalKaptonThickness"/>
<slice material="Air" thickness="EcalAir1Thickness"/>
</layer>
</detector>
<comment>
-------------------
Crystal Calorimeter
-------------------
Backward (negative pseudorapidity) angle electron detector
</comment>
<detector
id="CrystalEndcap_ID"
name="ElectronECAL"
type="CrystalCalorimeterEndcap"
readout="CrystalEcalHits"
vis="GreenVis">
<position x="CrystalEndcap_x_pos" y="CrystalEndcap_y_pos" z="CrystalEndcap_z_pos" />
<dimensions rmin="CrystalEndcap_rmin" rmax="CrystalEndcap_rmax" x="CrystalBox_x_length" y="CrystalBox_y_length" z="CrystalBox_z_length" delta="CrystalBox_offset"/>
</detector>
</detectors>
<!-- Definition of the readout segmentation/definition -->
<readouts>
<!--
<readout name="PlaneTrackerHits">
<segmentation type="CartesianGridXY" grid_size_x="20.0*mm" grid_size_y="20.0*mm" />
<id>system:5,module:4,x:32:-16,y:-16</id>
</readout>
-->
<readout name="CrystalEcalHits">
<segmentation type="CartesianGridXY" grid_size_x="CrystalBox_x_length" grid_size_y="CrystalBox_y_length" />
<id>system:8,sector:4,module:20,x:48:-8,y:-8</id>
</readout>
<readout name="EcalEndcapHits">
<segmentation type="CartesianGridXY" grid_size_x="3.5 * mm" grid_size_y="3.5 * mm"/>
<id>system:8,barrel:3,module:4,layer:6,slice:5,x:32:-16,y:-16</id>
</readout>
</readouts>
<plugins>
</plugins>
</lccdd>
<lccdd>
<define>
</define>
<detectors>
<detector id="ECalEndcapN_ID"
name="EcalEndcapN"
type="HomogeneousCalorimeter"
readout="EcalEndcapNHits"
vis="InvisibleWithDaughters">
<dimensions shape="disk" rmax="EcalBarrel_rmin" rmin="VertexTrackerBarrel_rmin" length="40*cm + 1*mm"/>
<position x="0" y="0" z="-EcalEndcapN_zmin"/>
<rotation x="0" y="0" z="0"/>
<placements>
<disk rmax="EcalEndcapN_rmin" rmin="VertexTrackerBarrel_rmin" sector="1">
<position z="0"/>
<module sizex="2.05*cm" sizey="2.05*cm" sizez="20*cm" material="PbWO4" vis="AnlTeal"/>
</disk>
<disk rmax="EcalBarrel_rmin" rmin="EcalEndcapN_rmin" sector="2">
<position z="0"/>
<module sizex="4*cm" sizey="4*cm" sizez="40*cm" material="PbGlass" vis="AnlBlue"/>
</disk>
</placements>
</detector>
</detectors>
<readouts>
<readout name="EcalEndcapNHits">
<id>system:8, sector:4, module:20</id>
</readout>
</readouts>
</lccdd>
<lccdd>
<define>
<constant name="CrystalEndcap_rmin" value="VertexTrackerBarrel_rmin"/>
<constant name="CrystalEndcap_rmax" value="EcalEndcapN_rmin"/>
<constant name="CrystalBox_x_length" value="20.0*mm"/>
<constant name="CrystalBox_y_length" value="20.0*mm"/>
<constant name="CrystalBox_z_length" value="200.0*mm"/>
<constant name="CrystalBox_offset" value="0.000001*mm"/>
<constant name="CrystalEndcap_x_pos" value="0.0*m"/>
<constant name="CrystalEndcap_y_pos" value="0.0*m"/>
<constant name="CrystalEndcap_z_pos" value="-EcalEndcapN_zmin"/>
<constant name="EcalEndcapP_rmax" value="Solenoid_rmax "/>
</define>
......@@ -29,6 +17,8 @@
</display>
<include ref="ecal_barrel.xml"/>
<!--<include ref="ce_ecal.xml"/>-->
<include ref="ce_ecal_outer_glass.xml"/>
<detectors>
<comment>
......@@ -41,7 +31,7 @@
name="EcalEndcapP"
reflect="false"
type="refdet_PolyhedraEndcapCalorimeter2"
readout="EcalEndcapHits"
readout="EcalEndcapPHits"
vis="EcalEndcapVis"
calorimeterType="EM_ENDCAP" >
<position x="0" y="0" z="-0"/>
......@@ -73,65 +63,6 @@
<slice material="Air" thickness="EcalAir1Thickness"/>
</layer>
</detector>
<comment>
-------------------------------
Backwards Endcap EM Calorimeter
-------------------------------
A layered EM calorimeter with tungsten and silicon (or scintillator) strips
</comment>
<detector id="ECalEndcapN_ID"
name="EcalEndcapN"
type="refdet_PolyhedraEndcapCalorimeter2"
reflect="true"
readout="EcalEndcapHits"
vis="EcalEndcapVis"
calorimeterType="EM_ENDCAP">
<position x="0" y="0" z="0"/>
<dimensions
numsides="CaloSides"
zmin="EcalEndcapN_zmin"
rmin="EcalEndcapN_rmin"
rmax="EcalBarrel_rmin " />
<layer repeat="EcalEndcapNLayer1_NRepeat">
<slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
<slice material="Copper" thickness="EcalCopperThickness"/>
<slice material="Kapton" thickness="EcalKaptonThickness"/>
<slice material="Air" thickness="EcalAir1Thickness"/>
</layer>
<layer repeat="EcalEndcapNLayer2_NRepeat">
<slice material="TungstenDens24" thickness="EcalThinTungstenThickness"/>
<slice material="Air" thickness="EcalAir2Thickness"/>
<slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
<slice material="Copper" thickness="EcalCopperThickness"/>
<slice material="Kapton" thickness="EcalKaptonThickness"/>
<slice material="Air" thickness="EcalAir1Thickness"/>
</layer>
<layer repeat="EcalEndcapNLayer3_NRepeat">
<slice material="TungstenDens24" thickness="EcalThickTungstenThickness"/>
<slice material="Air" thickness="EcalAir2Thickness"/>
<slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
<slice material="Copper" thickness="EcalCopperThickness"/>
<slice material="Kapton" thickness="EcalKaptonThickness"/>
<slice material="Air" thickness="EcalAir1Thickness"/>
</layer>
</detector>
<comment>
-------------------
Crystal Calorimeter
-------------------
Backward (negative pseudorapidity) angle electron detector
</comment>
<detector
id="CrystalEndcap_ID"
name="ElectronECAL"
type="CrystalCalorimeterEndcap"
readout="CrystalEcalHits"
vis="GreenVis">
<position x="CrystalEndcap_x_pos" y="CrystalEndcap_y_pos" z="CrystalEndcap_z_pos" />
<dimensions rmin="CrystalEndcap_rmin" rmax="CrystalEndcap_rmax" x="CrystalBox_x_length" y="CrystalBox_y_length" z="CrystalBox_z_length" delta="CrystalBox_offset"/>
</detector>
</detectors>
<!-- Definition of the readout segmentation/definition -->
......@@ -142,11 +73,7 @@
<id>system:5,module:4,x:32:-16,y:-16</id>
</readout>
-->
<readout name="CrystalEcalHits">
<segmentation type="CartesianGridXY" grid_size_x="CrystalBox_x_length" grid_size_y="CrystalBox_y_length" />
<id>system:8,sector:4,module:20,x:48:-8,y:-8</id>
</readout>
<readout name="EcalEndcapHits">
<readout name="EcalEndcapPHits">
<segmentation type="CartesianGridXY" grid_size_x="3.5 * mm" grid_size_y="3.5 * mm"/>
<id>system:8,barrel:3,module:4,layer:6,slice:5,x:32:-16,y:-16</id>
</readout>
......
......@@ -73,10 +73,10 @@ using namespace dd4hep::detail;
* <blocks sector="1"/>
* <module sizex="2.05*cm" sizey="2.05*cm" sizez="20*cm" vis="GreenVis" material="PbWO4"/>
* <wrapper thickness="0.015*cm" material="Epoxy" vis="WhiteVis"/>
* <placement x="1*cm" y="1*cm" z="0"/>
* <placement x="-1*cm" y="1*cm" z="0"/>
* <placement x="1*cm" y="-1*cm" z="0"/>
* <placement x="-1*cm" y="-1*cm" z="0"/>
* <placement x="1*cm" y="1*cm" z="0" id="1"/>
* <placement x="-1*cm" y="1*cm" z="0" id="2"/>
* <placement x="1*cm" y="-1*cm" z="0" id="3"/>
* <placement x="-1*cm" y="-1*cm" z="0" id="4"/>
* </blocks>
* </placements>
* </detector>
......@@ -260,21 +260,21 @@ static void add_array(Detector& desc, Volume &env, xml::Collection_t &plm, Sensi
}
}
// place modules
// place modules, id must be provided
static void add_blocks(Detector& desc, Volume &env, xml::Collection_t &plm, SensitiveDetector &sens, int sid)
{
Position modSize;
auto modVol = build_module(desc, plm, sens, modSize);
int sector_id = dd4hep::getAttrOrDefault<int>(plm, _Unicode(sector), sid);
int mid = 1;
for (xml::Collection_t pl(plm, _Unicode(placement)); pl; ++pl, ++mid) {
for (xml::Collection_t pl(plm, _Unicode(placement)); pl; ++pl) {
Position pos(dd4hep::getAttrOrDefault<double>(pl, _Unicode(x), 0.),
dd4hep::getAttrOrDefault<double>(pl, _Unicode(y), 0.),
dd4hep::getAttrOrDefault<double>(pl, _Unicode(z), 0.));
Position rot(dd4hep::getAttrOrDefault<double>(pl, _Unicode(rotx), 0.),
dd4hep::getAttrOrDefault<double>(pl, _Unicode(roty), 0.),
dd4hep::getAttrOrDefault<double>(pl, _Unicode(rotz), 0.));
auto mid = pl.attr<int>(_Unicode(id));
Transform3D tr = Translation3D(pos.x(), pos.y(), pos.z())
* RotationZYX(rot.z(), rot.y(), rot.x());
auto modPV = env.placeVolume(modVol, tr);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment