Skip to content
Snippets Groups Projects
Commit 8069afab authored by Jihee Kim's avatar Jihee Kim
Browse files

Added endcaps

parent c315293d
No related branches found
No related tags found
1 merge request!47Draft: Resolve "Implement cb_VTX_ENDCAPS"
Pipeline #8251 failed
<lccdd>
<comment> Central Vertex Endcaps Detector </comment>
<define>
</define>
<limits>
</limits>
<regions>
</regions>
<display>
</display>
<detectors>
<detector id="cb_VTX_EndcapP_ID" name="cb_VTX_EndcapP" type="cb_VTX_EndcapP" readout="cb_VTX_Endcaps_Hits" vis="cb_VTX_EndcapsVis" reflect="false" insideTrackingVloume="true">
<dimensions rmin="cb_VTX_EndcapP_rmin" rmax="cb_VTX_EndcapP_rmax" length="cb_VTX_EndcapP_length"/>
<position x="cb_VTX_EndcapP_x_pos" y="cb_VTX_EndcapP_y_pos" z="cb_VTX_EndcapP_z_pos"/>
<material name="Si"/>
</detector>
<detector id="cb_VTX_EndcapN_ID" name="cb_VTX_EndcapN" type="cb_VTX_EndcapN" readout="cb_VTX_Endcaps_Hits" vis="cb_VTX_EndcapsVis" reflect="true" insideTrackingVloume="true">
<dimensions rmin="cb_VTX_EndcapN_rmin" rmax="cb_VTX_EndcapN_rmax" length="cb_VTX_EndcapN_length"/>
<position x="cb_VTX_EndcapN_x_pos" y="cb_VTX_EndcapN_y_pos" z="cb_VTX_EndcapN_z_pos"/>
<material name="Si"/>
</detector>
</detectors>
<readouts>
<readout name="cb_VTX_Endcaps_Hits">
<segmentation type="CartesianGridXY" grid_size_x="1.0*mm" grid_size_y="1.0*mm" />
<id>system:8,barrel:4,layer:4,module:8,x:32:-16,y:-16</id>
</readout>
</readouts>
<plugins>
</plugins>
<fields>
</fields>
</lccdd>
...@@ -68,7 +68,9 @@ ...@@ -68,7 +68,9 @@
Layer 4 subassembly ID: 29 Layer 4 subassembly ID: 29
Layer 5 subassembly ID: 30 Layer 5 subassembly ID: 30
</comment> </comment>
<constant name="cb_VTX_Barrel_ID" value="25"/> <constant name="cb_VTX_Barrel_ID" value="31"/>
<constant name="cb_VTX_EndcapP_ID" value="32"/>
<constant name="cb_VTX_EndcapN_ID" value="33"/>
<comment> <comment>
Unused values reserved for vertex: Unused values reserved for vertex:
constant name="SiVertexSubAssemblyLayer1_ID" value="121" constant name="SiVertexSubAssemblyLayer1_ID" value="121"
...@@ -78,6 +80,7 @@ ...@@ -78,6 +80,7 @@
constant name="SiVertexSubAssemblyLayer5_ID" value="125" constant name="SiVertexSubAssemblyLayer5_ID" value="125"
</comment> </comment>
<comment> <comment>
=============================== ===============================
(50-74) Silicon Tracker System (50-74) Silicon Tracker System
...@@ -340,13 +343,29 @@ ...@@ -340,13 +343,29 @@
<constant name="cb_VTX_Barrel_rmin" value="33.0*mm"/> <constant name="cb_VTX_Barrel_rmin" value="33.0*mm"/>
<constant name="cb_VTX_Barrel_rmax" value="165.0*mm"/> <constant name="cb_VTX_Barrel_rmax" value="165.0*mm"/>
<constant name="cb_VTX_Barrel_length" value="740.0*mm"/> <constant name="cb_VTX_Barrel_length" value="500.0*mm"/>
<constant name="cb_VTX_Barrel_x_pos" value="0.0*mm"/> <constant name="cb_VTX_Barrel_x_pos" value="0.0*mm"/>
<constant name="cb_VTX_Barrel_y_pos" value="0.0*mm"/> <constant name="cb_VTX_Barrel_y_pos" value="0.0*mm"/>
<constant name="cb_VTX_Barrel_z_pos" value="0.0*mm"/> <constant name="cb_VTX_Barrel_z_pos" value="0.0*mm"/>
<constant name="cb_VTX_Barrel_layer" value="6"/> <constant name="cb_VTX_Barrel_layer" value="6"/>
<constant name="cb_VTX_EndcapP_rmin" value="33.0*mm"/>
<constant name="cb_VTX_EndcapP_rmax" value="165.0*mm"/>
<constant name="cb_VTX_EndcapP_length" value="250.0*mm"/>
<constant name="cb_VTX_EndcapP_x_pos" value="0.0*mm"/>
<constant name="cb_VTX_EndcapP_y_pos" value="0.0*mm"/>
<constant name="cb_VTX_EndcapP_z_pos" value="25.0*mm"/>
<constant name="cb_VTX_EndcapN_rmin" value="33.0*mm"/>
<constant name="cb_VTX_EndcapN_rmax" value="165.0*mm"/>
<constant name="cb_VTX_EndcapN_length" value="250.0*mm"/>
<constant name="cb_VTX_EndcapN_x_pos" value="0.0*mm"/>
<constant name="cb_VTX_EndcapN_y_pos" value="0.0*mm"/>
<constant name="cb_VTX_EndcapN_z_pos" value="-25.0*mm"/>
<comment> <comment>
-------------------------- --------------------------
Silicon Tracker Parameters Silicon Tracker Parameters
......
...@@ -57,6 +57,7 @@ ...@@ -57,6 +57,7 @@
<vis name="cb_GEM_layerVis" alpha="0.8" r= "0.8" g="0.4" b="0.3" showDaughters="true" visible="true"/> <vis name="cb_GEM_layerVis" alpha="0.8" r= "0.8" g="0.4" b="0.3" showDaughters="true" visible="true"/>
<vis name="cb_VTX_BarrelVis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/> <vis name="cb_VTX_BarrelVis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/>
<vis name="cb_VTX_Barrel_layerVis" alpha="2.0" r= "0.0" g="0.2" b="0.8" showDaughters="true" visible="true"/> <vis name="cb_VTX_Barrel_layerVis" alpha="2.0" r= "0.0" g="0.2" b="0.8" showDaughters="true" visible="true"/>
<vis name="cb_VTX_EndcapsVis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/>
<vis name="ci_GEMVis" r= "0.8" g="0.4" b="0.3" alpha="0.8" showDaughters="true" visible="true"/> <vis name="ci_GEMVis" r= "0.8" g="0.4" b="0.3" alpha="0.8" showDaughters="true" visible="true"/>
<vis name="ci_HCALVis" r= "0.6" g="0" b="0.6" alpha="1.0" showDaughters="true" visible="true"/> <vis name="ci_HCALVis" r= "0.6" g="0" b="0.6" alpha="1.0" showDaughters="true" visible="true"/>
......
...@@ -114,7 +114,7 @@ ...@@ -114,7 +114,7 @@
<include ref="reference_detector/vertex_tracker.xml"/> <include ref="reference_detector/vertex_tracker.xml"/>
<include ref="compact/silicon_tracker.xml"/> <include ref="compact/silicon_tracker.xml"/>
--> -->
<include ref="ip6/beampipe.xml"/> <!--<include ref="ip6/beampipe.xml"/>
<include ref="compact/solenoid.xml"/> <include ref="compact/solenoid.xml"/>
<include ref="compact/ecal.xml"/> <include ref="compact/ecal.xml"/>
<include ref="compact/cb_CTD_Si.xml"/> <include ref="compact/cb_CTD_Si.xml"/>
...@@ -124,14 +124,15 @@ ...@@ -124,14 +124,15 @@
<include ref="compact/ci_GEM.xml"/> <include ref="compact/ci_GEM.xml"/>
<include ref="compact/hcal.xml"/> <include ref="compact/hcal.xml"/>
<include ref="compact/forward_trd.xml"/> <include ref="compact/forward_trd.xml"/>
<include ref="compact/B0_tracker.xml"/> <include ref="compact/B0_tracker.xml"/>-->
<include ref="compact/cb_VTX_Barrel.xml"/> <include ref="compact/cb_VTX_Barrel.xml"/>
<include ref="compact/cb_VTX_Endcaps.xml"/>
<!-- <!--
<include ref="compact/ci_HCAL.xml"/> <include ref="compact/ci_HCAL.xml"/>
<include ref="compact/forward_rich.xml"/> <include ref="compact/forward_rich.xml"/>
<include ref="compact/roman_pots.xml"/> <include ref="compact/roman_pots.xml"/>
--> -->
<include ref="eic/forward_ion_beamline.xml"/> <!--<include ref="eic/forward_ion_beamline.xml"/>-->
<detectors> <detectors>
......
#include <XML/Helper.h>
#include "DDRec/Surface.h"
#include "DDRec/DetectorData.h"
#include "DD4hep/OpticalSurfaces.h"
#include "DD4hep/DetFactoryHelper.h"
#include "DD4hep/Printout.h"
//////////////////////////////////
// Central Vertex Endcap Detector
//////////////////////////////////
using namespace std;
using namespace dd4hep;
static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
{
xml_det_t x_det = e;
string detName = x_det.nameStr();
int detID = x_det.id();
xml_dim_t dim = x_det.dimensions();
double RIn = dim.rmin();
double ROut = dim.rmax();
double SizeZ = dim.length();
xml_dim_t pos = x_det.position();
Material Vacuum = desc.material("Vacuum");
// Create Global Volume
Tube cb_VTX_EndcapN_GVol_Solid(RIn, ROut, SizeZ / 2.0, 0., 360.0 * deg);
Volume detVol("cb_VTX_EndcapN_GVol_Logic", cb_VTX_EndcapN_GVol_Solid, Vacuum);
detVol.setVisAttributes(desc.visAttributes(x_det.visStr()));
Material mat = desc.material(x_det.materialStr());
//////////////////
// Endcaps Ladder
//////////////////
double x = 0.0 * cm;
double y = 0.0 * cm;
double z = 0.0 * cm;
double phi = 0.0;
int i_layer = 0;
int i_module = 0;
int lay = 0;
int NUMF;
phi = 0.0; x = 0.0; y = 0.0; z = 0.0;
double Fdeltaphi, Ftheta, F2theta;
double RxF[10], RyF[10], RzF[10], RxF2[10], RyF2[10], RzF2[10];
double Rzshift = 24.0 * cm;
double fVTX_END_EDY = 12.0 * cm;
double fVTX_END_EDZ = 0.05 * cm;
double fVTX_END_EDX1 = 6.0 * cm;
double fVTX_END_EDX2 = 4.0 * cm;
for (lay = 0; lay < 3; lay++) {
if (lay == 3) {
fVTX_END_EDY = 18.0 * cm;
NUMF = 24;
Fdeltaphi = 15.0 * deg;
Ftheta = -40.0 * deg;
RxF[lay] = 1.3 * cm;
RyF[lay] = RxF[lay];
RzF[lay] = -Rzshift - 5.5 * cm;
RxF2[lay] = 1.3 * cm;
RyF2[lay] = RxF2[lay];
RzF2[lay] = Rzshift + 5.5 * cm;
}
if (lay == 2) {
NUMF = 20;
fVTX_END_EDY = 16.0 * cm;
Fdeltaphi = 18.0 * deg;
Ftheta = -38.0 * deg;
RxF[lay] = 1.1 * cm;
RyF[lay] = RxF[lay];
RzF[lay] = -Rzshift - 5.5 * cm;
RxF2[lay] = 1.1 * cm;
RyF2[lay] = RxF2[lay];
RzF2[lay] = Rzshift + 5.5 * cm;
}
if (lay == 1) {
NUMF = 18;
fVTX_END_EDY = 14.0 * cm;
Fdeltaphi = 20.0 * deg;
Ftheta = -45.0 * deg;
RxF[lay] = 1.0 * cm;
RyF[lay] = RxF[lay];
RzF[lay] = -Rzshift + 1.0 * cm;
RxF2[lay] = 1.0 * cm;
RyF2[lay] = RxF2[lay];
RzF2[lay] = Rzshift - 1.0 * cm;
}
if (lay == 0) {
NUMF = 12;
fVTX_END_EDY = 12.0 * cm;
Fdeltaphi = 30.0 * deg;
Ftheta = -55.0 * deg;
RxF[lay] = 0.8 * cm;
RyF[lay] = RxF[lay];
RzF[lay] = -Rzshift + 7.0 * cm;
RxF2[lay] = 0.8 * cm;
RyF2[lay] = RxF2[lay];
RzF2[lay] = Rzshift - 7.0 * cm;
}
i_layer++;
// Electron going side Endcap
string logicladderENDEName = detName + _toString(lay, "_logic_ladder_END_E%d");
Volume ladderENDEVol(logicladderENDEName,Trap(fVTX_END_EDZ,fVTX_END_EDY + lay * 2.0, fVTX_END_EDX1, fVTX_END_EDX2), mat);
for (int ia = 0; ia < NUMF; ia++) {
phi = ia * Fdeltaphi;
x = -RxF[lay] * cos(phi);
y = -RyF[lay] * sin(phi);
z = RzF[lay];
RotationZYX ladder_ENDE_rot = RotationZYX(-90.0 + (Fdeltaphi * (ia + 1)), 0.0, Ftheta);
Position ladder_ENDE_pos = Position(x,y,z);
string ladderName = detName + _toString(lay, "_ladder_END_E_Phys_%d") + _toString(ia, "_%d");
PlacedVolume ladderENDEPV = detVol.placeVolume(ladderENDEVol, Transform3D(ladder_ENDE_rot, ladder_ENDE_pos));
i_module++;
ladderENDEPV.addPhysVolID("layer", i_layer).addPhysVolID("module", i_module);
}
}
DetElement det(detName, detID);
Volume motherVol = desc.pickMotherVolume(det);
Transform3D tr(RotationZYX(0.0, 0.0, 0.0), Position(pos.x(), pos.y(), pos.z()));
PlacedVolume detPV = motherVol.placeVolume(detVol, tr);
detPV.addPhysVolID("system", detID);
detPV.addPhysVolID("barrel", 1);
det.setPlacement(detPV);
return det;
}
DECLARE_DETELEMENT(cb_VTX_EndcapN, createDetector)
#include <XML/Helper.h>
#include "DDRec/Surface.h"
#include "DDRec/DetectorData.h"
#include "DD4hep/OpticalSurfaces.h"
#include "DD4hep/DetFactoryHelper.h"
#include "DD4hep/Printout.h"
//////////////////////////////////
// Central Vertex Endcap Detector
//////////////////////////////////
using namespace std;
using namespace dd4hep;
static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
{
xml_det_t x_det = e;
string detName = x_det.nameStr();
int detID = x_det.id();
xml_dim_t dim = x_det.dimensions();
double RIn = dim.rmin();
double ROut = dim.rmax();
double SizeZ = dim.length();
xml_dim_t pos = x_det.position();
Material Vacuum = desc.material("Vacuum");
// Create Global Volume
Tube cb_VTX_EndcapP_GVol_Solid(RIn, ROut, SizeZ / 2.0, 0., 360.0 * deg);
Volume detVol("cb_VTX_EndcapP_GVol_Logic", cb_VTX_EndcapP_GVol_Solid, Vacuum);
detVol.setVisAttributes(desc.visAttributes(x_det.visStr()));
Material mat = desc.material(x_det.materialStr());
//////////////////
// Endcaps Ladder
//////////////////
double x = 0.0 * cm;
double y = 0.0 * cm;
double z = 0.0 * cm;
double phi = 0.0;
int i_layer = 0;
int i_module = 0;
int lay = 0;
int NUMF;
phi = 0.0; x = 0.0; y = 0.0; z = 0.0;
double Fdeltaphi, Ftheta, F2theta;
double RxF[10], RyF[10], RzF[10], RxF2[10], RyF2[10], RzF2[10];
double Rzshift = 24.0 * cm;
double fVTX_END_EDY = 12.0 * cm;
double fVTX_END_EDZ = 0.05 * cm;
double fVTX_END_EDX1 = 6.0 * cm;
double fVTX_END_EDX2 = 4.0 * cm;
for (lay = 0; lay < 3; lay++) {
if (lay == 3) {
fVTX_END_EDY = 18.0 * cm;
NUMF = 24;
Fdeltaphi = 15.0 * deg;
Ftheta = -40.0 * deg;
RxF[lay] = 1.3 * cm;
RyF[lay] = RxF[lay];
RzF[lay] = -Rzshift - 5.5 * cm;
RxF2[lay] = 1.3 * cm;
RyF2[lay] = RxF2[lay];
RzF2[lay] = Rzshift + 5.5 * cm;
}
if (lay == 2) {
NUMF = 20;
fVTX_END_EDY = 16.0 * cm;
Fdeltaphi = 18.0 * deg;
Ftheta = -38.0 * deg;
RxF[lay] = 1.1 * cm;
RyF[lay] = RxF[lay];
RzF[lay] = -Rzshift - 5.5 * cm;
RxF2[lay] = 1.1 * cm;
RyF2[lay] = RxF2[lay];
RzF2[lay] = Rzshift + 5.5 * cm;
}
if (lay == 1) {
NUMF = 18;
fVTX_END_EDY = 14.0 * cm;
Fdeltaphi = 20.0 * deg;
Ftheta = -45.0 * deg;
RxF[lay] = 1.0 * cm;
RyF[lay] = RxF[lay];
RzF[lay] = -Rzshift + 1.0 * cm;
RxF2[lay] = 1.0 * cm;
RyF2[lay] = RxF2[lay];
RzF2[lay] = Rzshift - 1.0 * cm;
}
if (lay == 0) {
NUMF = 12;
fVTX_END_EDY = 12.0 * cm;
Fdeltaphi = 30.0 * deg;
Ftheta = -55.0 * deg;
RxF[lay] = 0.8 * cm;
RyF[lay] = RxF[lay];
RzF[lay] = -Rzshift + 7.0 * cm;
RxF2[lay] = 0.8 * cm;
RyF2[lay] = RxF2[lay];
RzF2[lay] = Rzshift - 7.0 * cm;
}
i_layer++;
// Hadron going side Endcap
string logicladderENDHName = detName + _toString(lay, "_logic_ladder_END_H%d");
Volume ladderENDHVol(logicladderENDHName,Trap(fVTX_END_EDZ, fVTX_END_EDY, fVTX_END_EDX1, fVTX_END_EDX2), mat);
for (int ia = 0; ia < NUMF; ia++) {
phi = ia * Fdeltaphi;
x = -RxF2[lay] * cos(phi);
y = -RyF2[lay] * sin(phi);
z = RzF2[lay];
RotationZYX ladder_ENDH_rot = RotationZYX(-90.0 + (Fdeltaphi * (ia + 1)), 0.0, -Ftheta);
Position ladder_ENDH_pos = Position(x,y,z);
string ladderName = detName + _toString(lay, "_ladder_END_H_Phys_%d") + _toString(ia, "_%d");
PlacedVolume ladderENDHPV = detVol.placeVolume(ladderENDHVol, Transform3D(ladder_ENDH_rot, ladder_ENDH_pos));
i_module++;
ladderENDHPV.addPhysVolID("layer", i_layer).addPhysVolID("module", i_module);
}
}
DetElement det(detName, detID);
Volume motherVol = desc.pickMotherVolume(det);
Transform3D tr(RotationZYX(0.0, 0.0, 0.0), Position(pos.x(), pos.y(), pos.z()));
PlacedVolume detPV = motherVol.placeVolume(detVol, tr);
detPV.addPhysVolID("system", detID);
detPV.addPhysVolID("barrel", 1);
det.setPlacement(detPV);
return det;
}
DECLARE_DETELEMENT(cb_VTX_EndcapP, createDetector)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment