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

Resolve "Update ZDC design"

parent fbb0f706
Branches
Tags
1 merge request!46Resolve "Update ZDC design"
...@@ -259,18 +259,19 @@ ...@@ -259,18 +259,19 @@
(150-169) Far Forward Detectors (150-169) Far Forward Detectors
===================================== =====================================
Forward Roman Pot ID: 150 Forward Roman Pot ID: 150
Forward B0 Tracker ID: 151 Forward B0 Tracker ID: 151
Zero Degree Cal. ID: 160 Zero Degree Cal. Ecal ID: 160
Zero Degree Cal. Hcal ID: 161
</comment> </comment>
<constant name="B0Tracker_ID" value="150"/> <constant name="B0Tracker_ID" value="150"/>
<constant name="ForwardRomanPotA_ID" value="155"/> <constant name="ForwardRomanPotA_ID" value="155"/>
<constant name="ForwardRomanPotB_ID" value="156"/> <constant name="ForwardRomanPotB_ID" value="156"/>
<constant name="ForwardRomanPotC_ID" value="157"/> <constant name="ForwardRomanPotC_ID" value="157"/>
<constant name="ForwardOffMTracker_ID" value="159"/> <constant name="ForwardOffMTracker_ID" value="159"/>
<constant name="ffi_ZDC_ECAL_ID" value="160"/>
<constant name="ffi_ZDC_ID" value="160"/> <constant name="ffi_ZDC_HCAL_ID" value="161"/>
<comment> <comment>
===================================== =====================================
...@@ -630,41 +631,27 @@ ...@@ -630,41 +631,27 @@
Zero Degree Parameters Zero Degree Parameters
---------------------- ----------------------
</comment> </comment>
<comment> BeamLines: IP6 </comment> <constant name="ffi_ZDC_ECAL_z_pos" value="3800.0 * cm"/>
<constant name="ffi_ZDC_z_pos" value="3800.0 * cm"/> <constant name="ffi_ZDC_ECAL_x_pos" value="ffi_ZDC_ECAL_z_pos * ionCrossingAngle"/>
<constant name="ffi_ZDC_x_pos" value="ffi_ZDC_z_pos * ionCrossingAngle"/> <comment> original value="90.0 * cm" </comment> <constant name="ffi_ZDC_ECAL_y_pos" value="0.0 * cm"/>
<constant name="ffi_ZDC_y_pos" value="0.0 * cm"/> <constant name="ffi_ZDC_ECAL_rotateX_angle" value="0.0 * rad"/>
<constant name="ffi_ZDC_rotateX_angle" value="0.0 * rad"/> <constant name="ffi_ZDC_ECAL_rotateY_angle" value="-0.0125 * rad"/>
<constant name="ffi_ZDC_rotateY_angle" value="-0.0125 * rad"/> <constant name="ffi_ZDC_ECAL_rotateZ_angle" value="0.0 * rad"/>
<constant name="ffi_ZDC_rotateZ_angle" value="0.0 * rad"/> <constant name="ffi_ZDC_ECAL_module_width" value="5.0 * cm"/>
<constant name="ffi_ZDC_ECAL_module_thickness" value="20.0 * cm"/>
<comment> BeamLines: IP8 </comment> <constant name="ffi_ZDC_ECAL_module_gap" value="1.0 * mm"/>
<!-- <constant name="ffi_ZDC_ECAL_module_ntower" value="12"/>
<constant name="ffi_ZDC_x_pos" value="127.0 * cm"/> <constant name="ffi_ZDC_ECAL_width" value="(ffi_ZDC_ECAL_module_width + ffi_ZDC_ECAL_module_gap) * ffi_ZDC_ECAL_module_ntower + 2.0 * cm"/>
<constant name="ffi_ZDC_y_pos" value="0.0 * cm"/> <constant name="ffi_ZDC_ECAL_thickness" value="ffi_ZDC_ECAL_module_thickness + 2.0 * cm"/>
<constant name="ffi_ZDC_z_pos" value="3600.0 * cm"/>
<constant name="ffi_ZDC_rotateX_angle" value="0.0 * rad"/> <constant name="ffi_ZDC_HCAL_x_pos" value="ffi_ZDC_ECAL_x_pos"/>
<constant name="ffi_ZDC_rotateY_angle" value="-0.025 * rad"/> <constant name="ffi_ZDC_HCAL_y_pos" value="ffi_ZDC_ECAL_y_pos"/>
<constant name="ffi_ZDC_rotateZ_angle" value="0.0 * rad"/> <constant name="ffi_ZDC_HCAL_z_pos" value="ffi_ZDC_ECAL_z_pos + ffi_ZDC_ECAL_thickness + 3.0 * cm"/>
--> <constant name="ffi_ZDC_HCAL_rotateX_angle" value="ffi_ZDC_ECAL_rotateX_angle"/>
<constant name="ffi_ZDC_HCAL_rotateY_angle" value="ffi_ZDC_ECAL_rotateY_angle"/>
<comment> Global parameters </comment> <constant name="ffi_ZDC_HCAL_rotateZ_angle" value="ffi_ZDC_ECAL_rotateZ_angle"/>
<constant name="ffi_ZDC_width" value="60.0 * cm"/> <constant name="ffi_ZDC_HCAL_width" value="ffi_ZDC_ECAL_module_width * ffi_ZDC_ECAL_module_ntower"/>
<constant name="ffi_ZDC_thickness" value="200.0 * cm"/> <constant name="ffi_ZDC_HCAL_length" value="200.0 * cm"/>
<comment> Original Global parameters </comment>
<!--
<constant name="ffi_ZDC_thickness" value="250.0 * cm"/>
-->
<constant name="ffi_ZDC_ECAL_thickness" value="30.0 * cm"/>
<constant name="ffi_ZDC_ECAL_inner_radius" value="0.0 * cm"/>
<constant name="ffi_ZDC_ECAL_outer_radius" value="60.0 * cm"/>
<constant name="ffi_ZDC_ECAL_width" value="5.0 * cm"/>
<constant name="ffi_ZDC_ECAL_gap" value="5.0 * mm"/>
<constant name="ffi_ZDC_ECAL_ntower" value="10"/>
<comment> Original number of towers parameter </comment>
<!--
<constant name="ffi_ZDC_ECAL_ntower" value="20"/>
-->
<comment> <comment>
----------------------- -----------------------
......
...@@ -50,15 +50,16 @@ ...@@ -50,15 +50,16 @@
<vis name="RICHVis" alpha="0.5" r="1" g="0" b="1" showDaughters="true"/> <vis name="RICHVis" alpha="0.5" r="1" g="0" b="1" showDaughters="true"/>
<vis name="BeamPipeVis" alpha="1" r= "0.75" g="0.75" b="0.75" showDaughters="true" visible="true"/> <vis name="BeamPipeVis" alpha="1" r= "0.75" g="0.75" b="0.75" showDaughters="true" visible="true"/>
<vis name="cb_SolenoidVis" alpha="0.4" r= "0.1" g="0.0" b="0.1" showDaughters="true" visible="true"/> <vis name="cb_SolenoidVis" alpha="0.4" r= "0.1" g="0.0" b="0.1" showDaughters="true" visible="true"/>
<vis name="ffi_ZDCVis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/> <vis name="ffi_ZDC_ECAL_Vis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/>
<vis name="ffi_ZDCmoduleVis" alpha="1.0" r= "0.1" g="1.0" b="0.9" showDaughters="true" visible="true"/> <vis name="ffi_ZDC_ECAL_module_Vis" alpha="1.0" r= "0.1" g="1.0" b="0.9" showDaughters="true" visible="true"/>
<vis name="cb_CTDVis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/> <vis name="ffi_ZDC_HCAL_Vis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/>
<vis name="cb_CTD_Si_layerVis" alpha="1.0" r= "0.9" g="1.0" b="0.1" showDaughters="true" visible="true"/> <vis name="cb_CTDVis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/>
<vis name="ce_GEMVis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/> <vis name="cb_CTD_Si_layerVis" alpha="1.0" r= "0.9" g="1.0" b="0.1" 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="ce_GEMVis" 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_GEM_layerVis" alpha="0.8" r= "0.8" g="0.4" b="0.3" 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_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="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"/>
......
<lccdd>
<comment>
//////////////////////////////////////////////////
// Far Forward Ion Zero Degree Calorimeter - Ecal
// PWO crystal bars
//////////////////////////////////////////////////
</comment>
<detectors>
<detector id="ffi_ZDC_ECAL_ID" name="ffi_ZDC_ECAL" type="ffi_ZDC_ECAL" readout="ffi_ZDC_ECAL_Hits" vis="ffi_ZDC_ECAL_Vis">
<position x="ffi_ZDC_ECAL_x_pos" y="ffi_ZDC_ECAL_y_pos" z="ffi_ZDC_ECAL_z_pos"/>
<rotation x="ffi_ZDC_ECAL_rotateX_angle" y="ffi_ZDC_ECAL_rotateY_angle" z="ffi_ZDC_ECAL_rotateZ_angle"/>
<dimensions x="ffi_ZDC_ECAL_width" z="ffi_ZDC_ECAL_thickness"/>
<module name="ffi_ZDC_ECAL_module"
vis="ffi_ZDC_ECAL_module_Vis"
material="PbWO4"
thickness="ffi_ZDC_ECAL_module_thickness"
width="ffi_ZDC_ECAL_module_width"
gap="ffi_ZDC_ECAL_module_gap"
ntower="ffi_ZDC_ECAL_module_ntower"/>
</detector>
</detectors>
<readouts>
<readout name="ffi_ZDC_ECAL_Hits">
<segmentation type="CartesianGridXY" grid_size_x="5.0*cm" grid_size_y="5.0*cm" />
<id>system:8,module:14,x:32:-16,y:-16</id>
</readout>
</readouts>
</lccdd>
<lccdd>
<comment>
//////////////////////////////////////////////////
// Far Forward Ion Zero Degree Calorimeter - Hcal
// Si+W sampling
//////////////////////////////////////////////////
</comment>
<define>
<constant name="ffi_ZDC_HCAL_NRepeat" value="40"/>
<constant name="ffiZDCHcalTungstenThickness" value="3.5 * mm"/>
<constant name="ffiZDCHcalSiliconThickness" value="500.0 * um"/>
<constant name="ffiZDCHcalAirThickness" value="1.0 * mm"/>
</define>
<detectors>
<detector id="ffi_ZDC_HCAL_ID" name="ffi_ZDC_HCAL" type="ffi_ZDC_HCAL" readout="ffi_ZDC_HCAL_Hits" vis="ffi_ZDC_HCAL_Vis">
<position x="ffi_ZDC_HCAL_x_pos" y="ffi_ZDC_HCAL_y_pos" z="ffi_ZDC_HCAL_z_pos"/>
<rotation x="ffi_ZDC_HCAL_rotateX_angle" y="ffi_ZDC_HCAL_rotateY_angle" z="ffi_ZDC_HCAL_rotateZ_angle"/>
<dimensions x="ffi_ZDC_HCAL_width" z="ffi_ZDC_HCAL_length"/>
<layer repeat="ffi_ZDC_HCAL_NRepeat">
<slice name="Tungsten_slice" material="TungstenDens24" thickness="ffiZDCHcalTungstenThickness" vis="AnlBlue"/>
<slice name="Silicon_slice" material="Silicon" thickness="ffiZDCHcalSiliconThickness" vis="AnlRed" sensitive="true"/>
<slice name="Air_slice" material="Air" thickness="ffiZDCHcalAirThickness" vis="AnlGold"/>
</layer>
</detector>
</detectors>
<readouts>
<readout name="ffi_ZDC_HCAL_Hits">
<segmentation type="CartesianGridXY" grid_size_x="1.0*cm" grid_size_y="1.0*cm" />
<id>system:8,layer:12,slice:12,x:32:-16,y:-16</id>
</readout>
</readouts>
</lccdd>
...@@ -15,7 +15,9 @@ ...@@ -15,7 +15,9 @@
</display> </display>
<include ref="ffi_ZDC.xml" /> <include ref="far_forward_ZDC_Ecal.xml" />
<include ref="far_forward_ZDC_Hcal.xml" />
<detectors> <detectors>
</detectors> </detectors>
......
<lccdd>
<comment>Far Forward Ion Zero Degree Calorimeter</comment>
<define>
</define>
<limits>
</limits>
<regions>
</regions>
<display>
</display>
<detectors>
<detector id="ffi_ZDC_ID" name="ffi_ZDC" type="ffi_ZDC" readout="ffi_ZDC_Hits" vis="ffi_ZDCVis">
<position x="ffi_ZDC_x_pos" y="ffi_ZDC_y_pos" z="ffi_ZDC_z_pos"/>
<rotation x="ffi_ZDC_rotateX_angle" y="ffi_ZDC_rotateY_angle" z="ffi_ZDC_rotateZ_angle"/>
<dimensions x="ffi_ZDC_width" z="ffi_ZDC_thickness"/>
<module name="ffi_ZDC_ECAL_module" vis="ffi_ZDCmoduleVis" material="PbWO4" thickness="ffi_ZDC_ECAL_thickness" rmin="ffi_ZDC_ECAL_inner_radius" rmax="ffi_ZDC_ECAL_outer_radius" width="ffi_ZDC_ECAL_width" gap="ffi_ZDC_ECAL_gap" ntower="ffi_ZDC_ECAL_ntower"/>
</detector>
</detectors>
<readouts>
<readout name="ffi_ZDC_Hits">
<segmentation type="CartesianGridXY" grid_size_x="1.0*mm" grid_size_y="1.0*mm" />
<id>system:8,sector:8,module:14,x:32:-16,y:-16</id>
</readout>
</readouts>
<plugins>
</plugins>
<fields>
</fields>
</lccdd>
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
#include "DD4hep/DetFactoryHelper.h" #include "DD4hep/DetFactoryHelper.h"
#include "DD4hep/Printout.h" #include "DD4hep/Printout.h"
#include <XML/Helper.h> #include <XML/Helper.h>
/////////////////////////////////////////// //////////////////////////////////////////////////
// Far Forward Ion Zero Degree Calorimeter // Far Forward Ion Zero Degree Calorimeter - Ecal
/////////////////////////////////////////// //////////////////////////////////////////////////
using namespace std; using namespace std;
using namespace dd4hep; using namespace dd4hep;
...@@ -30,8 +30,6 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens) ...@@ -30,8 +30,6 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
string modName = mod.nameStr(); string modName = mod.nameStr();
Material mPbWO4 = desc.material(mod.materialStr()); Material mPbWO4 = desc.material(mod.materialStr());
double mThickness = mod.attr<double>(_Unicode(thickness)); double mThickness = mod.attr<double>(_Unicode(thickness));
double mRmin = mod.attr<double>(_Unicode(rmin));
double mRmax = mod.attr<double>(_Unicode(rmax));
double mWidth = mod.attr<double>(_Unicode(width)); double mWidth = mod.attr<double>(_Unicode(width));
double mGap = mod.attr<double>(_Unicode(gap)); double mGap = mod.attr<double>(_Unicode(gap));
int mNTowers = mod.attr<double>(_Unicode(ntower)); int mNTowers = mod.attr<double>(_Unicode(ntower));
...@@ -75,7 +73,7 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens) ...@@ -75,7 +73,7 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
k++; k++;
string module_name = detName + _toString(k,"_ECAL_Phys_%d"); string module_name = detName + _toString(k,"_ECAL_Phys_%d");
PlacedVolume pv_mod = detVol.placeVolume(modVol, Position(mod_x,mod_y,mod_z)); PlacedVolume pv_mod = detVol.placeVolume(modVol, Position(mod_x,mod_y,mod_z));
pv_mod.addPhysVolID("sector", 1).addPhysVolID("module",k+1); pv_mod.addPhysVolID("module",k+1);
} }
} }
...@@ -87,5 +85,4 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens) ...@@ -87,5 +85,4 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
det.setPlacement(detPV); det.setPlacement(detPV);
return det; return det;
} }
DECLARE_DETELEMENT(ffi_ZDC_ECAL, createDetector)
DECLARE_DETELEMENT(ffi_ZDC, createDetector)
#include "DDRec/Surface.h"
#include "DDRec/DetectorData.h"
#include "DD4hep/OpticalSurfaces.h"
#include "DD4hep/DetFactoryHelper.h"
#include "DD4hep/Printout.h"
#include <XML/Helper.h>
#include <XML/Layering.h>
//////////////////////////////////////////////////
// Far Forward Ion Zero Degree Calorimeter - Hcal
//////////////////////////////////////////////////
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 Width = dim.x();
double Length = dim.z();
xml_dim_t pos = x_det.position();
double z = pos.z();
xml_dim_t rot = x_det.rotation();
Material Vacuum = desc.material("Vacuum");
int layer_num = 1;
int slice_num = 1;
double totWidth = Layering(x_det).totalThickness();
Box envelope (Width/2.0, Width/2.0, totWidth/2.0);
Volume envelopeVol(detName+"_envelope", envelope, Vacuum);
envelopeVol.setVisAttributes(desc.visAttributes(x_det.visStr()));
PlacedVolume pv;
xml_comp_t x_layer = x_det.child(_U(layer));
// Read layers
for(xml_coll_t c(x_det,_U(layer)); c; ++c) {
xml_comp_t x_layer = c;
int repeat = x_layer.repeat();
double layerWidth = 0;
for(xml_coll_t l(x_layer,_U(slice)); l; ++l)
layerWidth += xml_comp_t(l).thickness();
// Loop over repeat#
for(int i=0; i< repeat; i++) {
double zlayer = z;
string layer_name = detName + _toString(layer_num,"_layer%d");
Volume layer_vol(layer_name,Box(Width/2.0, Width/2.0,layerWidth/2.0), Vacuum);
// Loop over slices
for(xml_coll_t l(x_layer,_U(slice)); l; ++l) {
xml_comp_t x_slice = l;
double w = x_slice.thickness();
string slice_name = layer_name + _toString(slice_num,"slice%d");
Material slice_mat = desc.material(x_slice.materialStr());
Volume slice_vol (slice_name,Box(Width/2.0, Width/2.0,w/2.0),slice_mat);
if(x_slice.isSensitive()) {
sens.setType("calorimeter");
slice_vol.setSensitiveDetector(sens);
}
slice_vol.setAttributes(desc,x_slice.regionStr(), x_slice.limitsStr(), x_slice.visStr());
pv = layer_vol.placeVolume(slice_vol, Transform3D(RotationZYX(0, 0, 0),Position(0.0,0.0,z-zlayer-layerWidth/2.0+w/2.0)));
pv.addPhysVolID("slice", slice_num);
z += w;
++slice_num;
}
string layer_vis = dd4hep::getAttrOrDefault(x_layer, _Unicode(vis), "InvisibleWithDaughters");
layer_vol.setAttributes(desc, x_layer.regionStr(), x_layer.limitsStr(), layer_vis);
pv = envelopeVol.placeVolume(layer_vol, Transform3D(RotationZYX(0, 0, 0), Position(0,0,zlayer-pos.z()-totWidth/2.0+layerWidth/2.0)));
pv.addPhysVolID("layer", layer_num);
++layer_num;
}
}
DetElement det(detName, detID);
Volume motherVol = desc.pickMotherVolume(det);
Transform3D tr(RotationZYX(rot.z(), -rot.y(), rot.x()), Position(pos.x(), pos.y(), pos.z() + totWidth/2.0));
PlacedVolume phv = motherVol.placeVolume(envelopeVol, tr);
phv.addPhysVolID("system", detID);
det.setPlacement(phv);
return det;
}
DECLARE_DETELEMENT(ffi_ZDC_HCAL, createDetector)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment