Skip to content
Snippets Groups Projects
Commit 12aacb3f authored by myliu@ihep.ac.cn's avatar myliu@ihep.ac.cn
Browse files

Merge remote-tracking branch 'origin/master'

parents b066193e a6917184
No related branches found
No related tags found
No related merge requests found
Showing
with 482 additions and 96 deletions
......@@ -6,3 +6,4 @@ add_subdirectory(DetEcalMatrix)
add_subdirectory(DetInterface)
add_subdirectory(DetSegmentation)
add_subdirectory(GeomSvc)
add_subdirectory(Identifier)
......@@ -51,7 +51,10 @@
<readouts>
<readout name="EcalEndcapRingCollection">
<segmentation type="CartesianGridXY" grid_size_x="Ecal_cells_size" grid_size_y="Ecal_cells_size"/>
<segmentation type="CartesianGridXY" grid_size_x="Ecal_cells_size" grid_size_y="Ecal_cells_size"
offset_x="-0.5*Ecal_ECRing_Siplate_Size+0.5*Ecal_cells_size" offset_y="-0.5*Ecal_ECRing_Siplate_Size+0.5*Ecal_cells_size"/>
<id>system:5,module:3,stave:4,tower:3,layer:6,x:32:-16,y:-16</id>
</readout>
</readouts>
......
......@@ -80,8 +80,8 @@
<readouts>
<readout name="EcalEndcapsCollection">
<segmentation type="MegatileLayerGridXY" grid_size_x="10.1667*mm" grid_size_y="10.1667*mm"/>
<id>system:5,module:3,stave:4,tower:5,layer:6,wafer:6,cellX:32:-16,cellY:-16</id>
<segmentation type="WaferGridXY" grid_size_x="10.1667*mm" grid_size_y="10.1667*mm" offset_x="2*mm" offset_y="-1.0999755859375*mm"/>
<id>system:5,module:3,stave:4,tower:5,layer:6,wafer:6,x:32:-16,y:-16</id>
</readout>
</readouts>
......
......@@ -33,8 +33,10 @@
<readouts>
<readout name="HcalBarrelCollection">
<segmentation type="CartesianGridXY" grid_size_x="Hcal_cells_size" grid_size_y="Hcal_cells_size"/>
<segmentation type="TiledLayerGridXY" grid_size_x="Hcal_cells_size" grid_size_y="Hcal_cells_size"/>
<id>system:5,module:3,stave:3,tower:5,layer:6,slice:4,x:32:-16,y:-16</id>
</readout>
</readouts>
......
......@@ -10,7 +10,7 @@
dz="HcalEndcapRing_max_z + 2.0*env_safety"/>
<shape type="PolyhedraRegular" numsides="Hcal_ring_inner_symmetry" rmin="HcalEndcapRing_inner_radius - env_safety"
rmax="HcalEndcapRing_outer_radius*cos(pi/Hcal_ring_outer_symmetry) + env_safety" dz="2.0*HcalEndcapRing_max_z + env_safety" material="Air"/>
<rotation x="0" y="0" z="90*deg-180*deg/Hcal_ring_inner_symmetry"/>
<rotation x="0" y="0" z="-180*deg/Hcal_ring_inner_symmetry"/>
</shape>
<shape type="Box" dx="HcalEndcapRing_outer_radius + 2.0*env_safety" dy="HcalEndcapRing_outer_radius + 2.0*env_safety"
dz="HcalEndcapRing_min_z - env_safety"/>
......@@ -32,8 +32,8 @@
<readouts>
<readout name="HcalEndcapRingCollection">
<segmentation type="CartesianGridXY" grid_size_x="Hcal_cells_size" grid_size_y="Hcal_cells_size"/>
<id>system:5,module:3,stave:4,tower:3,layer:6,x:32:-16,y:-16</id>
<segmentation type="CartesianGridXY" grid_size_x="Hcal_cells_size" grid_size_y="Hcal_cells_size" offset_x="Hcal_cells_size/2.0" offset_y="Hcal_cells_size/2.0"/>
<id>system:5,module:3,stave:4,tower:3,layer:6,y:32:-16,x:-16</id>
</readout>
</readouts>
......
......@@ -31,7 +31,7 @@
<readouts>
<readout name="HcalEndcapsCollection">
<segmentation type="CartesianGridXY" grid_size_x="Hcal_cells_size" grid_size_y="Hcal_cells_size" offset_x="Hcal_cells_size/2.0" offset_y="Hcal_cells_size/2.0" />
<id>system:5,module:3,stave:3,tower:5,layer:6,x:32:-16,y:-16</id>
<id>system:5,module:3,stave:3,tower:5,layer:6,y:32:-16,x:-16</id>
</readout>
</readouts>
......
......@@ -55,7 +55,8 @@
<constant name="Ecal_Slab_Plug_length" value="0*mm"/>
<!-- needed only for ecal ring driver... -->
<constant name="Ecal_cells_size" value="10.2105*mm"/>
<constant name="Ecal_ECRing_Siplate_Size" value="Ecal_endcap_center_box_size - 2*Ecal_EC_Ring_gap - 2*Ecal_lateral_face_thickness"/>
<constant name="Ecal_cells_size" value="Ecal_ECRing_Siplate_Size/76."/>
<constant name="Ecal_Sc_reflector_thickness" value="0.057*mm"/>
<constant name="Ecal_Sc_thickness" value="2.0*mm"/>
<constant name="Ecal_Slab_Sc_PCB_thickness" value="0.8*mm"/>
......
......@@ -4,6 +4,7 @@
#include "DD4hep/DetFactoryHelper.h"
#include "DD4hep/DD4hepUnits.h"
#include "DD4hep/DetType.h"
#include "DDSegmentation/TiledLayerGridXY.h"
#include "DDRec/Surface.h"
#include "DDRec/DetectorData.h"
......@@ -23,6 +24,7 @@ using dd4hep::Volume;
using dd4hep::PlacedVolume;
using dd4hep::Position;
using dd4hep::RotationZYX;
using dd4hep::RotationZ;
using dd4hep::Transform3D;
using dd4hep::Box;
using dd4hep::Tube;
......@@ -63,30 +65,31 @@ static Ref_t create_detector(Detector& theDetector, xml_h element, SensitiveDete
Readout readout = sens.readout();
Segmentation seg = readout.segmentation();
dd4hep::DDSegmentation::TiledLayerGridXY* tiledSeg = dynamic_cast<dd4hep::DDSegmentation::TiledLayerGridXY*> (seg.segmentation());
assert(tiledSeg && "no TiledLayerGridXY found" );
std::vector<double> cellSizeVector = seg.segmentation()->cellDimensions(0);
double cell_sizeX = cellSizeVector[0];
double cell_sizeZ = cellSizeVector[1];
double Hcal_inner_radius = theDetector.constant<double>("Hcal_inner_radius");
double Hcal_outer_radius_set = theDetector.constant<double>("Hcal_outer_radius");
double Hcal_half_length = theDetector.constant<double>("Hcal_half_length");
int Hcal_inner_symmetry = theDetector.constant<int>("Hcal_inner_symmetry");
int Hcal_outer_symmetry = 0;
double Hcal_lateral_plate_thickness = theDetector.constant<double>("Hcal_lateral_structure_thickness");
double Hcal_modules_gap = theDetector.constant<double>("Hcal_modules_gap");
int Hcal_nlayers = theDetector.constant<int>("Hcal_nlayers");
double TPC_outer_radius = theDetector.constant<double>("TPC_outer_radius");
double Ecal_outer_radius = theDetector.constant<double>("Ecal_outer_radius");
int Hcal_barrel_number_modules = theDetector.constant<int>("Hcal_barrel_number_modules");
double Hcal_inner_radius = theDetector.constant<double>("Hcal_inner_radius");
double Hcal_outer_radius_set = theDetector.constant<double>("Hcal_outer_radius");
double Hcal_half_length = theDetector.constant<double>("Hcal_half_length");
int Hcal_inner_symmetry = theDetector.constant<int>("Hcal_inner_symmetry");
int Hcal_outer_symmetry = 0;
double Hcal_lateral_plate_thickness = theDetector.constant<double>("Hcal_lateral_structure_thickness");
double Hcal_modules_gap = theDetector.constant<double>("Hcal_modules_gap");
double Ecal_outer_radius = theDetector.constant<double>("Ecal_outer_radius");
int Hcal_barrel_number_modules = theDetector.constant<int>("Hcal_barrel_number_modules");
double hPrime = Ecal_outer_radius + theDetector.constant<double>("Hcal_Ecal_gap");
double hPrime = Ecal_outer_radius + theDetector.constant<double>("Hcal_Ecal_gap");
Hcal_inner_radius = hPrime / cos(pi/8.);
double Hcal_normal_dim_z = (2*Hcal_half_length - (Hcal_barrel_number_modules-1)*Hcal_modules_gap)/Hcal_barrel_number_modules;
xml_coll_t c(x_det,_U(layer));
xml_comp_t x_layer = c;
int Hcal_nlayers = x_layer.repeat();
double Hcal_radiator_thickness = 0;
double layerThickness = 0.0;
......@@ -95,6 +98,7 @@ static Ref_t create_detector(Detector& theDetector, xml_h element, SensitiveDete
layerThickness += x_slice.thickness();
if(x_slice.materialStr()==Hcal_radiator_material) Hcal_radiator_thickness = x_slice.thickness();
}
cout << " cell size xy = " << cell_sizeX << " cell size z = " << cell_sizeZ << endl;
cout << " layer_thickness (from slices) = " << layerThickness << " and radiator_thickness = " << Hcal_radiator_thickness << endl;
double Hcal_chamber_thickness = layerThickness - Hcal_radiator_thickness;
......@@ -149,28 +153,31 @@ static Ref_t create_detector(Detector& theDetector, xml_h element, SensitiveDete
PlacedVolume calo_pv = envelope.placeVolume(logicCalo, Position(0,0,0));
DetElement calo(det, "envelope", det_id);
calo.setPlacement(calo_pv);
if(tiledSeg) tiledSeg->setOffsetY(-(Hcal_regular_chamber_dim_z/2.-RPC_EdgeWidth)+0.5*cell_sizeZ);
for(int layer_id=1; layer_id<=Hcal_nlayers; layer_id++){
double yn = sqrt(Hcal_outer_radius*Hcal_outer_radius - (hPrime + layer_id*layerThickness)*(hPrime + layer_id*layerThickness));
double Yn = 0.5*d_InnerOctoSize - layer_id*layerThickness;
double halfX = Hcal_chamber_thickness/2.;
double halfZ = (yn+Yn)/2.;
double halfY = (yn+Yn)/2.;
LayeredCalorimeterData::Layer caloLayer ;
caloLayer.cellSize0 = cell_sizeX;
caloLayer.cellSize1 = cell_sizeZ;
//double halfY = Hcal_normal_dim_z / 2.;
double halfY = Hcal_regular_chamber_dim_z / 2.;
//double halfZ = Hcal_normal_dim_z / 2.;
double halfZ = Hcal_regular_chamber_dim_z / 2.;
double localXPos = hPrime + Hcal_radiator_thickness + Hcal_chamber_thickness/2. + (layer_id-1)*layerThickness;
double localYPos = -Yn + 0.5*(Yn + yn);
Box chamberSolid(halfX, halfY, halfZ);
Box chamberSolid(halfY, halfZ, halfX);
string chamberLogical_name = name+_toString(layer_id,"_layer%d");
Volume chamberLogical(chamberLogical_name, chamberSolid, air);
chamberLogical.setAttributes(theDetector, x_layer.regionStr(), x_layer.limitsStr(), x_layer.visStr());
if(tiledSeg) tiledSeg->setLayerOffsetX((-(halfY-RPC_EdgeWidth)+0.5*cell_sizeX)*2/cell_sizeX);
string layer_name = name+_toString(layer_id,"_layer%d");
double nRadiationLengths=0.;
......@@ -196,44 +203,45 @@ static Ref_t create_detector(Detector& theDetector, xml_h element, SensitiveDete
thickness_sum += slice_thickness/2;
// Slice volume & box
Box sliceSolid(slice_thickness/2., halfY, halfZ);
Box sliceSolid(halfY, halfZ, slice_thickness/2.);
Volume sliceVol(slice_name, sliceSolid, slice_material);
if ( x_slice.isSensitive() ) {
sliceVol.setSensitiveDetector(sens);
if(RPC_EdgeWidth>0){
double RPC_GazInlet_In_Y = halfY - RPC_EdgeWidth - RPCGazInletOuterRadius;
double RPC_GazInlet_In_Z = halfZ - RPC_EdgeWidth/2;
double RPC_GazInlet_Out_Y = -RPC_GazInlet_In_Y;
double RPC_GazInlet_Out_Z = RPC_GazInlet_In_Z;
double RPC_GazInlet_In_Z = halfZ - RPC_EdgeWidth - RPCGazInletOuterRadius;
double RPC_GazInlet_In_Y = halfY - RPC_EdgeWidth/2;
double RPC_GazInlet_Out_Z = -RPC_GazInlet_In_Z;
double RPC_GazInlet_Out_Y = RPC_GazInlet_In_Y;
string mateialName = x_slice.attr<string>(_Unicode(edge_material));
Material edge_material = theDetector.material(mateialName);
Box solidRPCEdge1(slice_thickness/2.,halfY, halfZ);
Box solidRPCEdge2(slice_thickness/2.,halfY-RPC_EdgeWidth, halfZ-RPC_EdgeWidth);
Box solidRPCEdge1(halfY, halfZ, slice_thickness/2.);
Box solidRPCEdge2(halfY-RPC_EdgeWidth, halfZ-RPC_EdgeWidth, slice_thickness/2.);
SubtractionSolid solidRPCEdge(solidRPCEdge1, solidRPCEdge2, Position(0,0,0));
Volume logicRPCEdge(slice_name+"_edge", solidRPCEdge, edge_material);
logicRPCEdge.setAttributes(theDetector,x_slice.regionStr(),x_slice.limitsStr(),x_slice.visStr());
sliceVol.placeVolume(logicRPCEdge);
RotationZYX rotGaz(0, pi/2., 0);
Tube solidRPCGazInlet(RPCGazInletInnerRadius,RPCGazInletOuterRadius,RPC_EdgeWidth/*RPCGazInletLength*//2);
Volume logicRPCGazInlet(slice_name+"_GazInlet", solidRPCGazInlet, edge_material);
logicRPCGazInlet.setAttributes(theDetector,x_slice.regionStr(),x_slice.limitsStr(),x_slice.visStr());
logicRPCEdge.placeVolume(logicRPCGazInlet, Position(0,RPC_GazInlet_In_Y,RPC_GazInlet_In_Z));
logicRPCEdge.placeVolume(logicRPCGazInlet, Position(0,RPC_GazInlet_Out_Y,RPC_GazInlet_Out_Z));
logicRPCEdge.placeVolume(logicRPCGazInlet, Transform3D(rotGaz, Position(RPC_GazInlet_In_Y,RPC_GazInlet_In_Z, 0)));
logicRPCEdge.placeVolume(logicRPCGazInlet, Transform3D(rotGaz, Position(RPC_GazInlet_Out_Y,RPC_GazInlet_Out_Z, 0)));
Tube solidRPCGazInsideInlet(0,RPCGazInletInnerRadius,RPC_EdgeWidth/*RPCGazInletLength*//2);
Volume logicRPCGazInsideInlet(slice_name+"_GazInsideInlet", solidRPCGazInsideInlet, slice_material);
logicRPCGazInsideInlet.setAttributes(theDetector,x_slice.regionStr(),x_slice.limitsStr(),"SeeThrough");
logicRPCEdge.placeVolume(logicRPCGazInsideInlet, Position(0,RPC_GazInlet_In_Y,RPC_GazInlet_In_Z));
logicRPCEdge.placeVolume(logicRPCGazInsideInlet, Position(0,RPC_GazInlet_Out_Y,RPC_GazInlet_Out_Z));
logicRPCEdge.placeVolume(logicRPCGazInsideInlet, Transform3D(rotGaz, Position(RPC_GazInlet_In_Y,RPC_GazInlet_In_Z, 0)));
logicRPCEdge.placeVolume(logicRPCGazInsideInlet, Transform3D(rotGaz,Position(RPC_GazInlet_Out_Y,RPC_GazInlet_Out_Z, 0)));
}
if(Hcal_spacer_thickness>0){
Tube solidRPCSpacer(0,Hcal_spacer_thickness/2,slice_thickness/2);
Material space_material = theDetector.material(x_slice.attr<string>(_Unicode(spacer_material)));
Volume logicRPCSpacer(slice_name+"_spacer", solidRPCSpacer, space_material);
logicRPCSpacer.setAttributes(theDetector,x_slice.regionStr(),x_slice.limitsStr(),x_slice.visStr());
RotationZYX rotSpacer(0, pi/2., 0);
RotationZYX rotSpacer(0, 0, 0);
double gap_hZ = halfZ-RPC_EdgeWidth;
double gap_hY = halfY-RPC_EdgeWidth;
......@@ -253,7 +261,7 @@ static Ref_t create_detector(Detector& theDetector, xml_h element, SensitiveDete
double SpacerY = gap_hY - y_lateral_space - y_counter*Hcal_spacer_separation;
for(int z_counter = 0; z_counter <=z_number_of_separations; z_counter++){
double SpacerZ = gap_hZ - z_lateral_space - z_counter*Hcal_spacer_separation;
PlacedVolume space_pv = sliceVol.placeVolume(logicRPCSpacer, Transform3D(rotSpacer, Position(0,SpacerY,SpacerZ)));
PlacedVolume space_pv = sliceVol.placeVolume(logicRPCSpacer, Transform3D(rotSpacer, Position(SpacerY,SpacerZ,0)));
}
}
}
......@@ -279,7 +287,7 @@ static Ref_t create_detector(Detector& theDetector, xml_h element, SensitiveDete
thickness_sum += slice_thickness/2;
// slice PlacedVolume
PlacedVolume slice_phv = chamberLogical.placeVolume(sliceVol,Position(slice_pos_z,0,0));
PlacedVolume slice_phv = chamberLogical.placeVolume(sliceVol,Position(0,0,slice_pos_z));
if ( x_slice.isSensitive() ) {
int slice_id = (layer_id > Hcal_nlayers)? 1:-1;
slice_phv.addPhysVolID("layer",layer_id).addPhysVolID("slice",slice_id);
......@@ -309,14 +317,17 @@ static Ref_t create_detector(Detector& theDetector, xml_h element, SensitiveDete
for(int stave_id = 1; stave_id <= 8; stave_id++){
double phirot = stave_phi_offset+(stave_id-1)*pi/4.;
RotationZYX rot(0, phirot, pi*0.5);
RotationZYX rotInverse(0,-phirot, -pi*0.5);
RotationZYX rot(pi/2, pi/2, 0); //phirot);
RotationZ rotZ(phirot);
RotationZYX rotAll = rotZ*rot;
RotationZYX rotInverse(phirot, 0, 0);
for(int module_id = 1; module_id <= Hcal_barrel_number_modules; module_id++){
module_z_offset = - Hcal_half_length + Hcal_normal_dim_z/2. + (module_id-1)*(Hcal_normal_dim_z+Hcal_modules_gap);
Position localPos(localXPos,-module_z_offset,localYPos);
Position localPos(localXPos,localYPos,module_z_offset);
Position newPos = rotInverse*localPos;
Transform3D tran3D(rot, newPos);
Transform3D tran3D(rotAll, newPos);
PlacedVolume pv = logicCalo.placeVolume(chamberLogical, tran3D);
pv.addPhysVolID("stave",stave_id).addPhysVolID("module",module_id).addPhysVolID("layer",layer_id);
DetElement layer(calo, name+_toString(stave_id,"_stave%d")+_toString(module_id,"_module%d")+_toString(layer_id,"_layer%d"), det_id);
......
......@@ -197,7 +197,7 @@ static Ref_t create_detector(Detector& theDetector, xml_h element, SensitiveDete
// chamber placements
for(int stave_id = 1; stave_id <= 4; stave_id++){
double angle = pi/2.*(stave_id-1);
double angle = -pi/2.*(stave_id-1);
RotationZYX lrot(angle,0,0);
for (int layer_id = 1; layer_id <= number_of_chambers; layer_id++){
double Zoff = -pDz + (layer_id-1)*layerThickness + Hcal_radiator_thickness + Hcal_chamber_thickness/2.;
......@@ -217,28 +217,30 @@ static Ref_t create_detector(Detector& theDetector, xml_h element, SensitiveDete
cout << "Hcal_EndcapRing: inner_thickness= " << inner_thickness << endl;
cout << "Hcal_EndcapRing: outer_thickness= " << thickness_sum << endl;
}
LayeredCalorimeterData::Layer caloLayer ;
caloLayer.cellSize0 = cell_sizeX;
caloLayer.cellSize1 = cell_sizeY;
caloLayer.inner_nRadiationLengths = nRadiationLengthsInside;
caloLayer.inner_nInteractionLengths = nInteractionLengthsInside;
caloLayer.inner_thickness = inner_thickness;
caloLayer.sensitive_thickness = sensitive_thickness;
caloLayer.outer_nRadiationLengths = nRadiationLengths;
caloLayer.outer_nInteractionLengths = nInteractionLengths;
caloLayer.outer_thickness = thickness_sum;
if(stave_id==1){//only one needed, according to wenxingfang's
LayeredCalorimeterData::Layer caloLayer ;
caloLayer.cellSize0 = cell_sizeX;
caloLayer.cellSize1 = cell_sizeY;
caloLayer.inner_nRadiationLengths = nRadiationLengthsInside;
caloLayer.inner_nInteractionLengths = nInteractionLengthsInside;
caloLayer.inner_thickness = inner_thickness;
caloLayer.sensitive_thickness = sensitive_thickness;
caloLayer.outer_nRadiationLengths = nRadiationLengths;
caloLayer.outer_nInteractionLengths = nInteractionLengths;
caloLayer.outer_thickness = thickness_sum;
caloLayer.distance = start_z + (layer_id-1)*layerThickness;
caloLayer.absorberThickness = Hcal_radiator_thickness ;
caloLayer.distance = start_z + (layer_id-1)*layerThickness;
caloLayer.absorberThickness = Hcal_radiator_thickness ;
caloData->layers.push_back( caloLayer ) ;
caloData->layers.push_back( caloLayer ) ;
}
}
}
// Placements
double endcap_z_offset = start_z + pDz;
for(int side = 0; side <= 1; side++){
int module_id = (side==0) ? 0 : 6;
int module_id = (side==0) ? 6 : 0;
double this_module_z_offset = (side==0) ? endcap_z_offset : -endcap_z_offset;
// use reflect volume for z<0, therefore, same rotation
// segmentation violation happen if EndCapRingLogical.reflect(), back to rotate Y
......
......@@ -205,7 +205,7 @@ static Ref_t create_detector(Detector& theDetector, xml_h element, SensitiveDete
if(possible_number_of_chambers < number_of_chambers) number_of_chambers = possible_number_of_chambers;
// chamber placements
for(int stave_id = 1; stave_id <= 4; stave_id++){
double angle = pi/2.*(stave_id-1);
double angle = -pi/2.*(stave_id-1);
//RotationZ lrotz(angle);
RotationZYX lrot(angle,0,0);
for (int layer_id = 1; layer_id <= number_of_chambers; layer_id++){
......@@ -226,28 +226,32 @@ static Ref_t create_detector(Detector& theDetector, xml_h element, SensitiveDete
cout << "Hcal_Endcap: inner_thickness= " << inner_thickness << endl;
cout << "Hcal_Endcap: outer_thickness= " << thickness_sum << endl;
}
LayeredCalorimeterData::Layer caloLayer ;
caloLayer.cellSize0 = cell_sizeX;
caloLayer.cellSize1 = cell_sizeY;
caloLayer.inner_nRadiationLengths = nRadiationLengthsInside;
caloLayer.inner_nInteractionLengths = nInteractionLengthsInside;
caloLayer.inner_thickness = inner_thickness;
caloLayer.sensitive_thickness = sensitive_thickness;
caloLayer.outer_nRadiationLengths = nRadiationLengths;
caloLayer.outer_nInteractionLengths = nInteractionLengths;
caloLayer.outer_thickness = thickness_sum;
caloLayer.distance = Hcal_start_z + (layer_id-1)*layerThickness;
caloLayer.absorberThickness = Hcal_radiator_thickness ;
caloData->layers.push_back( caloLayer ) ;
if(stave_id==1){// only for one stave is good. by wenxingfang
LayeredCalorimeterData::Layer caloLayer ;
caloLayer.cellSize0 = cell_sizeX;
caloLayer.cellSize1 = cell_sizeY;
caloLayer.inner_nRadiationLengths = nRadiationLengthsInside;
caloLayer.inner_nInteractionLengths = nInteractionLengthsInside;
caloLayer.inner_thickness = inner_thickness;
caloLayer.sensitive_thickness = sensitive_thickness;
caloLayer.outer_nRadiationLengths = nRadiationLengths;
caloLayer.outer_nInteractionLengths = nInteractionLengths;
caloLayer.outer_thickness = thickness_sum;
caloLayer.distance = Hcal_start_z + (layer_id-1)*layerThickness;
caloLayer.absorberThickness = Hcal_radiator_thickness ;
caloData->layers.push_back( caloLayer ) ;
}
}
}
// Placements
double endcap_z_offset = Hcal_start_z + Hcal_endcap_thickness/2.;
for(int side = 0; side <= 1; side++){
int module_id = (side==0) ? 0 : 6;
int module_id = (side==0) ? 6 : 0;
double this_module_z_offset = (side==0) ? endcap_z_offset : -endcap_z_offset;
// use reflect volume for z<0, therefore, same rotation
// segmentation violation happen if EndCapRingLogical.reflect(), back to rotate Y
......
<lccdd>
<detectors>
<detector name="Coil" type="SCoil02" vis="SOLVis" id="DetID_COIL" insideTrackingVolume="false" readout="COILCollection">
<envelope vis="SeeThrough">
<shape type="Tube" rmin="Solenoid_inner_radius" rmax="Solenoid_outer_radius" dz="Solenoid_half_length" material="Air"/>
</envelope>
<type_flags type=" DetType_SUPPORT + DetType_COIL " />
<!--fg: for now only a simple aluminum cylinder is created inside the envelope -->
<tube rmin="Solenoid_inner_radius" rmax="Solenoid_outer_radius" dz="Solenoid_half_length" material="G4_Al"/>
</detector>
</detectors>
<readouts>
<readout name="COILCollection">
<id>system:5,side:-2,layer:9,module:8,sensor:8,barrelside:-2</id>
</readout>
</readouts>
</lccdd>
......@@ -14,16 +14,18 @@
<constant name="SDT_radius_min" value="InnerTracker_inner_radius"/>
<constant name="SDT_radius_max" value="OuterTracker_outer_radius"/>
<constant name="SDT_half_length" value="MainTracker_half_length"/>
<constant name="SDT_half_length" value="DC_half_length"/>
<constant name="SDT_length" value="SDT_half_length*2"/>
<constant name="DC_length" value="DC_half_length*2"/>
<constant name="SDT_inner_chamber_radius_min" value="235*mm"/>
<constant name="SDT_inner_chamber_radius_max" value="InnerTracker_outer_radius"/>
<constant name="SDT_chamber_inner_wall_thickness" value="0.2*mm"/>
<constant name="SDT_chamber_outer_wall_thickness" value="2.8*mm"/>
<constant name="SDT_inner_chamber_radius_min" value="InnerTracker_inner_radius+SDT_chamber_inner_wall_thickness"/>
<constant name="SDT_inner_chamber_radius_max" value="InnerTracker_outer_radius-SDT_chamber_outer_wall_thickness"/>
<constant name="SDT_inner_chamber_length" value="DC_length"/>
<constant name="SDT_outer_chamber_radius_min" value="OuterTracker_inner_radius"/>
<constant name="SDT_outer_chamber_radius_max" value="1715*mm"/>
<constant name="SDT_outer_chamber_radius_min" value="OuterTracker_inner_radius+SDT_chamber_inner_wall_thickness"/>
<constant name="SDT_outer_chamber_radius_max" value="OuterTracker_outer_radius-SDT_chamber_outer_wall_thickness"/>
<constant name="SDT_outer_chamber_length" value="DC_length"/>
<constant name="SDT_inner_chamber_layer_number" value="67"/>
......@@ -31,14 +33,14 @@
<constant name="SDT_chamber_layer_width" value="10*mm"/>
<constant name="Epsilon" value="0*deg"/>
<constant name="SDT_inner_chamber_inner_wall_radius_min" value="234.8*mm"/>
<constant name="SDT_inner_chamber_inner_wall_radius_max" value="235*mm"/>
<constant name="SDT_inner_chamber_outer_wall_radius_min" value="906*mm"/>
<constant name="SDT_inner_chamber_outer_wall_radius_max" value="908.8*mm"/>
<constant name="SDT_outer_chamber_inner_wall_radius_min" value="1084.8*mm"/>
<constant name="SDT_outer_chamber_inner_wall_radius_max" value="1085*mm"/>
<constant name="SDT_outer_chamber_outer_wall_radius_min" value="1715*mm"/>
<constant name="SDT_outer_chamber_outer_wall_radius_max" value="1717.8*mm"/>
<constant name="SDT_inner_chamber_inner_wall_radius_min" value="SDT_inner_chamber_radius_min-SDT_chamber_inner_wall_thickness"/>
<constant name="SDT_inner_chamber_inner_wall_radius_max" value="SDT_inner_chamber_radius_min"/>
<constant name="SDT_inner_chamber_outer_wall_radius_min" value="SDT_inner_chamber_radius_max"/>
<constant name="SDT_inner_chamber_outer_wall_radius_max" value="SDT_inner_chamber_radius_max+SDT_chamber_outer_wall_thickness"/>
<constant name="SDT_outer_chamber_inner_wall_radius_min" value="SDT_outer_chamber_radius_min-SDT_chamber_inner_wall_thickness"/>
<constant name="SDT_outer_chamber_inner_wall_radius_max" value="SDT_outer_chamber_radius_min"/>
<constant name="SDT_outer_chamber_outer_wall_radius_min" value="SDT_outer_chamber_radius_max"/>
<constant name="SDT_outer_chamber_outer_wall_radius_max" value="SDT_outer_chamber_radius_max+SDT_chamber_outer_wall_thickness"/>
<constant name="DC_Endcap_rmin" value="SDT_radius_min"/>
<constant name="DC_Endcap_rmax" value="SDT_radius_max"/>
......@@ -55,8 +57,8 @@
<detector id="DetID_DC" name="DriftChamber" type="DriftChamber" readout="DriftChamberHitsCollection" vis="BlueVis" sensitive="true" insideTrackingVolume="true">
<envelope vis="SeeThrough">
<shape type="BooleanShape" operation="Union" material="Air">
<shape type="Tube" rmin="SDT_radius_min" rmax="909*mm" dz="SDT_half_length" />
<shape type="Tube" rmin="1084.8*mm" rmax="SDT_radius_max" dz="SDT_half_length" />
<shape type="Tube" rmin="SDT_radius_min" rmax="InnerTracker_outer_radius" dz="MainTracker_half_length" />
<shape type="Tube" rmin="OuterTracker_inner_radius" rmax="SDT_radius_max" dz="MainTracker_half_length" />
</shape>
</envelope>
......
......@@ -56,8 +56,8 @@
<extended_reconstruction_parameters strip_width="0.001*mm" strip_length="250*mm" strip_pitch="0.01*mm" strip_angle="5*deg" />
<!-- SQL command: "select * from disks;" -->
<disk disk_number="1" z_position_ReltoTPCLength="0" disk_si_thickness="0.02*mm" petal_cp_support_dxMax="71.9*mm" padUp_Si_dxMax="68*mm" petal_cp_support_thickness="1*mm" petal_support_zoffset="1.5*mm" sensor_is_pixel="1" double_sided="0" />
<disk disk_number="2" z_position_ReltoTPCLength="FTD_disk2_zPosRelToDCLength" disk_si_thickness="0.02*mm" petal_cp_support_dxMax="71.9*mm" padUp_Si_dxMax="68*mm" petal_cp_support_thickness="1*mm" petal_support_zoffset="1.5*mm" sensor_is_pixel="1" double_sided="0" />
<disk disk_number="1" z_position_ReltoTPCLength="0" disk_si_thickness="0.02*mm" petal_cp_support_dxMax="71.8*mm" padUp_Si_dxMax="68*mm" petal_cp_support_thickness="1*mm" petal_support_zoffset="1.5*mm" sensor_is_pixel="1" double_sided="0" />
<disk disk_number="2" z_position_ReltoTPCLength="FTD_disk2_zPosRelToDCLength" disk_si_thickness="0.02*mm" petal_cp_support_dxMax="71.8*mm" padUp_Si_dxMax="68*mm" petal_cp_support_thickness="1*mm" petal_support_zoffset="1.5*mm" sensor_is_pixel="1" double_sided="0" />
<disk disk_number="3" z_position_ReltoTPCLength="FTD_disk3_zPosRelToDCLength" disk_si_thickness="0.2*mm" petal_cp_support_dxMax="103.49*mm" padUp_Si_dxMax="99.46*mm" petal_cp_support_thickness="2*mm" petal_support_zoffset="1.5*mm" sensor_is_pixel="0" double_sided="1" />
<disk disk_number="4" z_position_ReltoTPCLength="FTD_disk4_zPosRelToDCLength" disk_si_thickness="0.2*mm" petal_cp_support_dxMax="103.49*mm" padUp_Si_dxMax="99.46*mm" petal_cp_support_thickness="2*mm" petal_support_zoffset="1.5*mm" sensor_is_pixel="0" double_sided="1" />
<disk disk_number="5" z_position_ReltoTPCLength="FTD_disk5_zPosRelToDCLength" disk_si_thickness="0.2*mm" petal_cp_support_dxMax="103.49*mm" padUp_Si_dxMax="99.46*mm" petal_cp_support_thickness="2*mm" petal_support_zoffset="1.5*mm" sensor_is_pixel="0" double_sided="1" />
......
<lccdd>
<define>
<constant name="FTD_inner_radius" value="BeamPipe_VertexRegion_rmax + FTD_BeamPipe_cable_clearance"/>
<constant name="FTD_outer_radius" value="InnerTracker_inner_radius - FTD_InnerTracker_gap"/>
<constant name="FTD_outer_radius_1" value="SIT1_inner_radius - env_safety"/>
<constant name="FTD_outer_radius_2" value="FTD_outer_radius - env_safety"/>
<constant name="FTD_half_length" value="InnerTracker_half_length"/>
<constant name="FTD_min_z_0" value="Vertex_half_length + env_safety"/>
<constant name="FTD_min_z_2" value="SIT1_half_length + env_safety"/>
<constant name="FTD_cone_min_z" value="BeamPipe_CentralAl_zmax"/>
<constant name="FTD_cone_radius" value="FTD_half_length*tan(CrossingAngle/2) + BeamPipe_Dnstream_inner_radius + BeamPipe_Cu_thickness + FTD_BeamPipe_cable_clearance/2"/>
<constant name="petal_cp_support_thickness" value="2.0*mm"/>
<constant name="petal_support_zoffset" value="1.5*mm"/>
<constant name="FTD1_vtx3_distance_z" value="95*mm"/>
<constant name="FTD7_ecal_distance_z" value="200*mm"/>
<constant name="FTD_disk2_zPosRelToDCLength" value="0.158004*2350*mm/InnerTracker_half_length"/>
<constant name="FTD_disk3_zPosRelToDCLength" value="0.273577*2350*mm/InnerTracker_half_length"/>
<constant name="FTD_disk4_zPosRelToDCLength" value="0.359149*2350*mm/InnerTracker_half_length"/>
<constant name="FTD_disk5_zPosRelToDCLength" value="0.393600*2350*mm/InnerTracker_half_length"/>
</define>
<detectors>
<detector id="DetID_FTD" name="FTD" type="FTD_Simple_Staggered" vis="FTDVis" readout="FTDCollection" insideTrackingVolume="true">
<envelope vis="FTDVis">
<shape type="BooleanShape" operation="Subtraction" material="Air" >
<shape type="BooleanShape" operation="Subtraction" material="Air" >
<shape type="BooleanShape" operation="Subtraction" material="Air" >
<shape type="BooleanShape" operation="Subtraction" material="Air" >
<shape type="Tube" rmin="FTD_inner_radius" rmax="FTD_outer_radius" dz="FTD_half_length" />
<shape type="Tube" rmin="0." rmax="FTD_outer_radius+env_safety" dz="FTD_min_z_0" />
</shape>
<shape type="Tube" rmin="FTD_outer_radius_1" rmax="FTD_outer_radius+env_safety" dz="FTD_min_z_2" />
</shape>
<shape type="Cone" rmin1="0" rmax1="FTD_inner_radius" rmin2="0" rmax2="FTD_cone_radius"
z="(FTD_half_length-FTD_cone_min_z)/2. + env_safety "/>
<position x="0" y="0" z="FTD_cone_min_z+(FTD_half_length-FTD_cone_min_z)/2."/>
</shape>
<shape type="Cone" rmin1="0" rmax1="FTD_inner_radius" rmin2="0" rmax2="FTD_cone_radius"
z="(FTD_half_length-FTD_cone_min_z)/2. + env_safety "/>
<position x="0" y="0" z="-FTD_cone_min_z-(FTD_half_length-FTD_cone_min_z)/2."/>
<rotation x="0" y="180.*deg" z="0" />
</shape>
</envelope>
<type_flags type="DetType_TRACKER + DetType_ENDCAP + DetType_PIXEL + DetType_STRIP "/>
<!-- SQL command: "select * from common_parameters;" -->
<common_parameters ftd1_vtx3_distance_z="FTD1_vtx3_distance_z"
ftd7_ecal_distance_z="FTD7_ecal_distance_z" ftd1_sit1_radial_diff="-1*mm" ftd2_sit1_radial_diff="-1*mm" ftd3_sit2_radial_diff="-FTD_InnerTracker_gap"
ftd4to7_tpc_radial_gap="FTD_InnerTracker_gap" beamtube_clearance="FTD_BeamPipe_gap" cables_thickness="0.08*mm" cable_shield_thickness="0.1*mm"
outer_cylinder_total_thickness="1*mm" petal_half_angle_support="11.25*deg" petal_y_ratio="0.5015"
support_spaceframe_width="10*mm"/>
<!-- SQL command: "select * from extended_reconstruction_parameters;" -->
<extended_reconstruction_parameters strip_width="0.001*mm" strip_length="250*mm" strip_pitch="0.01*mm" strip_angle="5*deg" />
<!-- SQL command: "select * from disks;" -->
<disk disk_number="1" z_position_ReltoTPCLength="0" disk_si_thickness="0.02*mm" petal_cp_support_dxMax="62.*mm" padUp_Si_dxMax="58*mm" petal_cp_support_thickness="1*mm" petal_support_zoffset="1.5*mm" sensor_is_pixel="1" double_sided="0" />
<disk disk_number="2" z_position_ReltoTPCLength="FTD_disk2_zPosRelToDCLength" disk_si_thickness="0.02*mm" petal_cp_support_dxMax="62.*mm" padUp_Si_dxMax="58*mm" petal_cp_support_thickness="1*mm" petal_support_zoffset="1.5*mm" sensor_is_pixel="1" double_sided="0" />
<disk disk_number="3" z_position_ReltoTPCLength="FTD_disk3_zPosRelToDCLength" disk_si_thickness="0.2*mm" petal_cp_support_dxMax="103.49*mm" padUp_Si_dxMax="99.46*mm" petal_cp_support_thickness="2*mm" petal_support_zoffset="1.5*mm" sensor_is_pixel="0" double_sided="1" />
<disk disk_number="4" z_position_ReltoTPCLength="FTD_disk4_zPosRelToDCLength" disk_si_thickness="0.2*mm" petal_cp_support_dxMax="103.49*mm" padUp_Si_dxMax="99.46*mm" petal_cp_support_thickness="2*mm" petal_support_zoffset="1.5*mm" sensor_is_pixel="0" double_sided="1" />
<disk disk_number="5" z_position_ReltoTPCLength="FTD_disk5_zPosRelToDCLength" disk_si_thickness="0.2*mm" petal_cp_support_dxMax="103.49*mm" padUp_Si_dxMax="99.46*mm" petal_cp_support_thickness="2*mm" petal_support_zoffset="1.5*mm" sensor_is_pixel="0" double_sided="1" />
</detector>
</detectors>
<readouts>
<readout name="FTDCollection">
<!-- fixme: for now DD4hep cannot handle signed values - side should actually be "-2" -->
<id>system:5,side:2,layer:9,module:8,sensor:8</id>
</readout>
</readouts>
</lccdd>
<lccdd>
<define>
<constant name="Hcal_cells_size" value="10*mm"/>
<constant name="Hcal_inner_radius" value="Hcal_barrel_inner_radius"/>
<constant name="Hcal_half_length" value="Hcal_barrel_half_length"/>
<constant name="Hcal_inner_symmetry" value="Hcal_barrel_symmetry"/>
<constant name="Hcal_nlayers" value="40"/>
<constant name="Hcal_Ecal_gap" value="Hcal_barrel_inner_radius-Ecal_barrel_outer_radius"/>
<constant name="Ecal_outer_radius" value="Ecal_barrel_outer_radius"/>
<constant name="Hcal_radiator_thickness" value="20.0*mm"/>
<constant name="Hcal_airgap_thickness" value="1*mm"/>
<constant name="Hcal_mylar_cathode_thickness" value="0.18*mm"/>
<constant name="Hcal_graphite_cathode_thickness" value="0.05*mm"/>
<constant name="Hcal_glass_cathode_thickness" value="1.1*mm"/>
<constant name="Hcal_sensitive_gas_gap" value="1.2*mm"/>
<constant name="Hcal_glass_anode_thickness" value="0.7*mm"/>
<constant name="Hcal_graphite_anode_thickness" value="0.05*mm"/>
<constant name="Hcal_mylar_anode_thickness" value="0.05*mm"/>
<constant name="Hcal_PCB_thickness" value="0.8*mm"/>
<constant name="Hcal_electronics_mask_thickness" value="1.6*mm"/>
<constant name="Hcal_gas_edge_width" value="1*mm"/>
<constant name="Hcal_MinNumCellsInTransvPlane" value="11"/>
<constant name="Hcal_barrel_number_modules" value="5"/>
<constant name="Hcal_chamber_thickness" value="6.73*mm"/>
<constant name="Hcal_back_plate_thickness" value="15*mm"/>
<constant name="Hcal_lateral_structure_thickness" value="10*mm"/>
<constant name="Hcal_stave_gaps" value="0*mm"/>
<constant name="Hcal_modules_gap" value="2*mm"/>
<constant name="Hcal_pad_separation" value="0*mm"/>
<constant name="Hcal_gasInlet_length" value="3.0*mm"/>
<constant name="Hcal_spacer_separation" value="100*mm"/>
<constant name="Hcal_spacer_thickness" value="8*mm"/>
<constant name="Hcal_gasInlet_inner_radius" value="0.4*mm"/>
<constant name="Hcal_gasInlet_outer_radius" value="0.5*mm"/>
</define>
<detectors>
<detector name="HcalBarrel" type="SHcalRpc01_Barrel" id="DetID_HCAL" readout="HcalBarrelCollection" vis="GreenVis" insideTrackingVolume="false" >
<comment>Hadron Calorimeter Barrel</comment>
<envelope vis="HCALVis">
<shape type="BooleanShape" operation="Subtraction" material="Air" >
<shape type="Cone" z="Hcal_barrel_half_length + env_safety/2" rmin1="0.0" rmax1="Hcal_barrel_outer_radius + env_safety"
rmin2="0.0" rmax2="Hcal_barrel_outer_radius + env_safety"/>
<shape type="PolyhedraRegular" numsides="Hcal_barrel_symmetry" rmin="0.0"
rmax="Hcal_barrel_inner_radius - env_safety" dz="2*(Hcal_barrel_half_length + env_safety)"/>
<rotation x="0" y="0" z="-180*deg/Hcal_barrel_symmetry"/>
</shape>
</envelope>
<type_flags type=" DetType_CALORIMETER + DetType_BARREL + DetType_HADRONIC " />
<staves material="stainless_steel" vis="BlueVis"/>
<layer repeat="Hcal_nlayers" vis="SeeThrough">
<slice material="stainless_steel" thickness="Hcal_radiator_thickness" vis="BlueVis" />
<slice material="Air" thickness="Hcal_airgap_thickness" vis="WhiteVis" />
<slice material="mylar" thickness="Hcal_mylar_cathode_thickness" vis="MagentaVis" />
<slice material="graphite" thickness="Hcal_graphite_cathode_thickness" vis="Invisible" />
<slice material="FloatGlass" thickness="Hcal_glass_cathode_thickness" vis="RedVis" />
<slice material="RPCGAS2" thickness="Hcal_sensitive_gas_gap" sensitive = "yes" vis="YellowVis" edge_material="PEEK-GF30" spacer_material="Nylon"/>
<slice material="FloatGlass" thickness="Hcal_glass_anode_thickness" vis="RedVis" />
<slice material="graphite" thickness="Hcal_graphite_anode_thickness" vis="Invisible" />
<slice material="mylar" thickness="Hcal_mylar_anode_thickness" vis="MagentaVis" />
<slice material="g10" thickness="Hcal_PCB_thickness" vis="CyanVis" />
<slice material="g10" thickness="Hcal_electronics_mask_thickness" vis="GreenVis" />
</layer>
</detector>
</detectors>
<readouts>
<readout name="HcalBarrelCollection">
<segmentation type="CartesianGridYZ" grid_size_y="Hcal_cells_size" grid_size_z="Hcal_cells_size"/>
<id>system:5,module:3,stave:3,tower:5,layer:6,slice:4,y:32:-16,z:-16</id>
</readout>
</readouts>
</lccdd>
<lccdd>
<define>
<constant name="Hcal_endcap_nlayers" value="Hcal_nlayers"/>
<constant name="Hcal_endcap_center_box_size" value="700*mm"/>
</define>
<detectors>
<detector id="DetID_HCAL_ENDCAP" name="HcalEndcap" type="SHcalRpc01_Endcaps" readout="HcalEndcapsCollection" vis="SeeThrough" calorimeterType="HAD_ENDCAP">
<comment>Hadron Calorimeter Endcap</comment>
<envelope vis="HCALVis">
<shape type="BooleanShape" operation="Subtraction" material="Air">
<shape type="BooleanShape" operation="Subtraction" material="Air">
<shape type="Tube" rmin="0.0" rmax="Hcal_endcap_outer_radius + env_safety" dz="Hcal_endcap_zmax + env_safety"/>
<shape type="Tube" rmin="0.0" rmax="Hcal_endcap_outer_radius + 2.0*env_safety" dz="Hcal_endcap_zmin - env_safety"/>
</shape>
<shape type="Box" dx="Hcal_endcap_inner_radius - env_safety" dy="Hcal_endcap_inner_radius - env_safety" dz="Hcal_endcap_zmax + 2.0*env_safety"/>
</shape>
<rotation x="0" y="0" z="0"/>
</envelope>
<type_flags type="DetType_CALORIMETER + DetType_ENDCAP + DetType_HADRONIC " />
<staves material="stainless_steel" vis="SeeThrough"/>
<layer repeat="Hcal_endcap_nlayers" vis="SeeThrough">
<slice material="stainless_steel" thickness="Hcal_radiator_thickness" vis="BlueVis" />
<slice material="Air" thickness="Hcal_airgap_thickness" vis="WhiteVis" />
<slice material="mylar" thickness="Hcal_mylar_cathode_thickness" vis="MagentaVis" />
<slice material="graphite" thickness="Hcal_graphite_cathode_thickness" vis="Invisible" />
<slice material="FloatGlass" thickness="Hcal_glass_cathode_thickness" vis="RedVis" />
<slice material="RPCGAS2" thickness="Hcal_sensitive_gas_gap" sensitive = "yes" vis="YellowVis"/>
<slice material="FloatGlass" thickness="Hcal_glass_anode_thickness" vis="RedVis" />
<slice material="graphite" thickness="Hcal_graphite_anode_thickness" vis="Invisible" />
<slice material="mylar" thickness="Hcal_mylar_anode_thickness" vis="MagentaVis" />
<slice material="g10" thickness="Hcal_PCB_thickness" vis="CyanVis" />
<slice material="g10" thickness="Hcal_electronics_mask_thickness" vis="GreenVis" />
</layer>
</detector>
</detectors>
<readouts>
<readout name="HcalEndcapsCollection">
<segmentation type="CartesianGridXY" grid_size_x="Hcal_cells_size" grid_size_y="Hcal_cells_size" offset_x="Hcal_cells_size/2.0" offset_y="Hcal_cells_size/2.0" />
<id>system:5,module:3,stave:3,tower:5,layer:6,x:32:-16,y:-16</id>
</readout>
</readouts>
</lccdd>
<lccdd>
<define>
<constant name="SET_inner_radius" value="OuterTracker_outer_radius + env_safety"/>
<constant name="SET_outer_radius" value="Ecal_barrel_inner_radius - env_safety "/>
<constant name="SET_half_length" value="OuterTracker_half_length"/>
<constant name="SET_inner_distance_from_tpc" value="InnerTracker_outer_radius-OuterTracker_outer_radius+3*mm"/>
</define>
<detectors>
<detector id="DetID_SET" name="SET" type="SET_Simple_Planar" vis="SETVis" readout="SETCollection" insideTrackingVolume="true">
<envelope vis="SETVis">
<shape type="BooleanShape" operation="Union" material="Air" >
<shape type="Tube" rmin="InnerTracker_outer_radius" rmax="OuterTracker_inner_radius" dz="SET_half_length" material = "Air" />
<shape type="Tube" rmin="SET_inner_radius" rmax="SET_outer_radius" dz="SET_half_length" material = "Air" />
</shape>
</envelope>
<type_flags type="DetType_TRACKER + DetType_BARREL + DetType_STRIP "/>
<reconstruction strip_width="0.0125*mm" strip_length="92*mm" strip_pitch="0.05*mm" strip_angle="7*deg" />
<global sensitive_thickness="0.2*mm" support_thickness="1*mm" sensor_length="92*mm" sensitive_mat="G4_Si"
support_mat="G4_C" sensitive_threshold_KeV="64*keV" />
<layer layer_id="0" sensitive_distance_from_tpc="SET_inner_distance_from_tpc" coverage_of_TPC_Ecal_Hcal_barrel="0.98"
n_ladders="24" ladder_clearance="0.1*mm" faces_IP="1" />
<layer layer_id="1" sensitive_distance_from_tpc="SET_inner_distance_from_tpc+2.5*mm" coverage_of_TPC_Ecal_Hcal_barrel="0.98"
n_ladders="24" ladder_clearance="0.1*mm" faces_IP="0" />
<layer layer_id="2" sensitive_distance_from_tpc="3*mm" coverage_of_TPC_Ecal_Hcal_barrel="0.98"
n_ladders="24" ladder_clearance="0.1*mm" faces_IP="1" />
<layer layer_id="3" sensitive_distance_from_tpc="5.5*mm" coverage_of_TPC_Ecal_Hcal_barrel="0.98"
n_ladders="24" ladder_clearance="0.1*mm" faces_IP="0" />
</detector>
</detectors>
<readouts>
<readout name="SETCollection">
<id>system:5,side:-2,layer:9,module:8,sensor:8,barrelside:-2</id>
</readout>
</readouts>
</lccdd>
<lccdd>
<define>
<constant name="SIT_sensitive_thickness" value="0.2*mm"/>
<constant name="SIT_inner_radius" value="SIT1_inner_radius"/>
<constant name="SIT_inner_radius_1" value="SIT_inner_radius + env_safety"/>
<constant name="SIT_outer_radius_1" value="SIT_inner_radius_1/cos(pi/8)"/>
<constant name="SIT_inner_radius_2" value="SIT2_inner_radius"/>
<constant name="SIT_outer_radius" value="InnerTracker_inner_radius"/>
<constant name="SIT_half_length" value="SIT2_half_length"/>
<constant name="SIT_half_length_1" value="SIT1_half_length"/>
<constant name="SIT_layer_gap" value="2.5*mm"/>
</define>
<detectors>
<detector id="DetID_SIT" name="SIT" type="SIT_Simple_Planar" vis="SITVis" readout="SITCollection" insideTrackingVolume="true">
<envelope vis="SeeThrough">
<shape type="BooleanShape" operation="Union" material="Air" >
<shape type="Tube" rmin="SIT_inner_radius" rmax="SIT_outer_radius_1" dz="SIT_half_length_1" />
<shape type="Tube" rmin="SIT_inner_radius_2" rmax="SIT_outer_radius" dz="SIT_half_length" />
</shape>
</envelope>
<type_flags type="DetType_TRACKER + DetType_BARREL + DetType_STRIP "/>
<!-- database : sit_simple_planar_sensors_03 -->
<!-- SQL command: "select * from extended_reconstruction_parameters;" -->
<reconstruction strip_width="0." strip_length="92*mm" strip_pitch="0." strip_angle="0*deg" />
<!-- SQL command: "select * from global;" -->
<global sensitive_thickness="SIT_sensitive_thickness" support_thickness="1*mm" sensor_length="92*mm"
sensitive_mat="G4_Si" support_mat="G4_C" sensitive_threshold_KeV="64*keV" />
<!-- SQL command: "select * from sit_layers;" -->
<layer layer_id="0" sensitive_radius="SIT_inner_radius_1+0.5*SIT_sensitive_thickness" n_sensors_per_ladder="8" n_ladders="10"
ladder_clearance="0.1*mm" faces_IP="1" is_SIT1="1" is_SIT2="0" />
<layer layer_id="1" sensitive_radius="SIT_inner_radius_2+0.5*SIT_sensitive_thickness" n_sensors_per_ladder="48" n_ladders="16"
ladder_clearance="0.1*mm" faces_IP="1" is_SIT1="0" is_SIT2="1" />
</detector>
</detectors>
<readouts>
<readout name="SITCollection">
<id>system:5,side:-2,layer:9,module:8,sensor:8,barrelside:-2</id>
</readout>
</readouts>
</lccdd>
......@@ -25,7 +25,7 @@
<!-- database : sit_simple_planar_sensors_03 -->
<!-- SQL command: "select * from extended_reconstruction_parameters;" -->
<reconstruction strip_width="0." strip_length="92*mm" strip_pitch="0." strip_angle="0*deg" />
<reconstruction strip_width="0." strip_length="92*mm" strip_pitch="0." strip_angle="7*deg" />
<!-- SQL command: "select * from global;" -->
<global sensitive_thickness="SIT_sensitive_thickness" support_thickness="1*mm" sensor_length="92*mm"
......
<lccdd>
<define>
<constant name="Yoke_cells_size" value="30*mm"/>
</define>
<detectors>
<detector name="YokeBarrel" type="Yoke05_Barrel" id="DetID_YOKE" readout="MuonBarrelCollection" vis="YellowVis" insideTrackingVolume="false">
<envelope vis="YOKEVis">
<shape type="BooleanShape" operation="Intersection" material="Air" >
<shape type="Box" dx="Yoke_barrel_outer_radius + env_safety" dy="Yoke_barrel_outer_radius + env_safety" dz="Yoke_barrel_half_length + env_safety"/>
<shape type="PolyhedraRegular" numsides="Yoke_barrel_symmetry" rmin="Yoke_barrel_inner_radius" rmax="Yoke_barrel_outer_radius"
dz="2.0*Yoke_barrel_half_length" material = "Air" />
<rotation x="0*deg" y="0*deg" z="90*deg-180*deg/Yoke_barrel_symmetry"/>
</shape>
</envelope>
<type_flags type=" DetType_CALORIMETER + DetType_BARREL + DetType_MUON " />
<dimensions numsides="Yoke_barrel_symmetry" rmin="Yoke_barrel_inner_radius" rmax="Yoke_barrel_outer_radius" zhalf="Yoke_barrel_half_length" material="Air"/>
<position x="0*mm" y="0*mm" z="0*mm"/>
<rotation x="0*deg" y="0*deg" z="0*deg"/>
<staves material = "Iron" vis="BlueVis"/>
<!--TODO Yoke05_Barrel fixed 14 layers, should be updated as optional-->
<layer repeat="14" vis="SeeThrough">
<slice material = "Air" thickness = "15.0*mm" vis="YellowVis" />
<slice material = "G4_POLYSTYRENE" thickness = "10.0*mm" sensitive = "yes" vis="CyanVis" />
<slice material = "Air" thickness = "15.0*mm" vis="YellowVis" />
</layer>
</detector>
</detectors>
<readouts>
<readout name="MuonBarrelCollection">
<segmentation type="CartesianGridXZ" grid_size_x="Yoke_cells_size" grid_size_z="Yoke_cells_size"/>
<id>system:5,module:3,stave:4,tower:3,layer:6,x:32:-16,z:-16</id>
</readout>
</readouts>
</lccdd>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment