diff --git a/compact/ce_GEM.xml b/compact/ce_GEM.xml new file mode 100644 index 0000000000000000000000000000000000000000..6cbc95031a0459cd4c9fa0c2800b9d2972dd882e --- /dev/null +++ b/compact/ce_GEM.xml @@ -0,0 +1,39 @@ +<lccdd> + + <comment> Electron endcap GEM tracking </comment> + + <define> + </define> + + <limits> + </limits> + + <regions> + </regions> + + <display> + </display> + + <detectors> + <detector id="ce_GEM_ID" name="ce_GEM" type="ce_GEM" readout="ce_GEM_Hits" vis="ce_GEMVis" insideTrackingVloume="true"> + <dimensions rmin="ce_GEM_rmin" rmax="ce_GEM_rmax" length="ce_GEM_length"/> + <position x="ce_GEM_x_pos" y="ce_GEM_y_pos" z="ce_GEM_z_pos"/> + <layer repeat="ce_GEM_layer" vis="ce_GEM_layerVis"> + <slice name="Ar10CO2_slice" material="Ar10CO2" thickness="ce_GEM_layer_thickness" sensitive="true"/> + </layer> + </detector> + </detectors> + + <readouts> + <readout name="ce_GEM_Hits"> + <segmentation type="CartesianGridXY" grid_size_x="1.0*mm" grid_size_y="1.0*mm" /> + <id>system:8,layer:8,x:32:-16,y:-16</id> + </readout> + </readouts> + + <plugins> + </plugins> + + <fields> + </fields> +</lccdd> diff --git a/compact/definitions.xml b/compact/definitions.xml index 1f454dc65c626784ec861a8f1a4054df08c30999..c23b1cc6d5296f3853fb2c6e3af9cbfb3cad75f0 100644 --- a/compact/definitions.xml +++ b/compact/definitions.xml @@ -130,7 +130,7 @@ =================== Unused IDs: 75-99 - TBD + TBD </comment> <comment> @@ -189,10 +189,12 @@ ===================================== Modular RICH ID: 130 - Unused IDs: 131-139 + Electron Endcap GEM tracking ID: 131 + Unused IDs: 132-139 </comment> <constant name="ce_MRICH_ID" value="130"/> + <constant name="ce_GEM_ID" value="131"/> <comment> ===================================== @@ -531,8 +533,21 @@ <constant name="ce_MRICHLength" value="15*cm"/> <constant name="ce_MRICHZMin" value="-EcalEndcap_zmin+10.*cm"/> - - + <comment> + ------------------ + ce_GEM Parameters + ------------------ + </comment> + <constant name="ce_GEM_rmin" value="5.0 * cm"/> <comment> temporary number. Need beampipe radius </comment> + <!--<constant name="ce_GEM_rmin" value="0.0 * cm"/>--> + <constant name="ce_GEM_rmax" value="HcalEndcapN_rmin + 8.0 * cm"/> <comment> temporary number to avoid overlaps </comment> + <!--<constant name="ce_GEM_rmax" value="45.0 * cm + 50.0 * cm"/>--> + <constant name="ce_GEM_length" value="30.0 * cm"/> + <constant name="ce_GEM_x_pos" value="0.0 * cm"/> + <constant name="ce_GEM_y_pos" value="0.0 * cm"/> + <constant name="ce_GEM_z_pos" value="-SolenoidLength/2.0 + ce_GEM_length/2.0"/> + <constant name="ce_GEM_layer" value="8"/> + <constant name="ce_GEM_layer_thickness" value="1.0 * cm"/> </define> diff --git a/compact/display.xml b/compact/display.xml index 81130895a31b7a1ae52aa2daa5af2ce38d196641..5befdb0e535e3d4eefebe823f47aaecc26ebffdf 100644 --- a/compact/display.xml +++ b/compact/display.xml @@ -53,6 +53,8 @@ <vis name="ffi_ZDCmoduleVis" 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="cb_CTD_Si_layerVis" alpha="1.0" r= "0.9" g="1.0" b="0.1" 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_GEM_layerVis" alpha="0.8" r= "0.8" g="0.4" b="0.3" showDaughters="true" visible="true"/> <comment> Deprecated colors. diff --git a/compact/materials.xml b/compact/materials.xml index f6f705f68423d130c840cd19e0d4eeb10f9bbe9d..837b7f028d3138380804a505b5dbe1ca64ed71ab 100644 --- a/compact/materials.xml +++ b/compact/materials.xml @@ -186,4 +186,12 @@ <composite n="4" ref="O"/> </material> + <material name="Ar10CO2"> + <D type="density" value="1.802" unit="mg / cm3"/> + <composite n="0.891" ref="Argon"/> + <!--<composite n="0.109" ref="CarbonDioxide"/>--> + <composite n="0.036" ref="C"/> + <composite n="0.073" ref="O"/> + </material> + </materials> diff --git a/reference_detector.xml b/reference_detector.xml index 5273af7b84b6b03b87e67300717f2e01bb4d90cc..c65d5a7d76568cc682b7c0525fbad6b7df19603d 100644 --- a/reference_detector.xml +++ b/reference_detector.xml @@ -122,6 +122,7 @@ <include ref="compact/hcal.xml"/> <include ref="compact/forward_rich.xml"/> <include ref="compact/ce_mrich.xml"/> + <include ref="compact/ce_GEM.xml"/> <!-- <include ref="compact/roman_pots.xml"/> --> diff --git a/src/ce_GEM.cpp b/src/ce_GEM.cpp new file mode 100644 index 0000000000000000000000000000000000000000..92315945fb6edfe117b2e846c984a879fa0fbe61 --- /dev/null +++ b/src/ce_GEM.cpp @@ -0,0 +1,66 @@ +#include <XML/Helper.h> +////////////////////////////////// +// Electron Endcap GEM Tracking +////////////////////////////////// + +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 ce_GEM_GVol_Solid(RIn, ROut, SizeZ / 2.0, 0., 360.0 * deg); + Volume detVol("ce_GEM_GVol_Logic", ce_GEM_GVol_Solid, Vacuum); + detVol.setVisAttributes(desc.visAttributes(x_det.visStr())); + + // Construct Layers + xml_comp_t x_layer = x_det.child(_U(layer)); + const int repeat = x_layer.repeat(); + + xml_comp_t x_slice = x_layer.child(_U(slice)); + Material slice_mat = desc.material(x_slice.materialStr()); + double layerSizeZ = x_slice.thickness(); + double layerRIn; + double layerROut; + double layerPosZ; + + // Loop over layers + for(int i = 0; i < repeat; i++) { + layerRIn = RIn + 1.0 * cm + ((double)i * 0.5) * cm; + layerROut = ROut - 25.0 * cm + ((double)i * 2.0) * cm; + layerPosZ = SizeZ / 2.0 - 5.0 * cm - ((double)i * 3.0) * cm; + layerSizeZ = 1.0 * cm; + + string logic_layer_name = detName + _toString(i, "_Logic_lay_%d"); + Volume layerVol(logic_layer_name,Tube(layerRIn, layerROut, layerSizeZ / 2.0, 0.0, 360.0 * deg), slice_mat); + layerVol.setVisAttributes(desc,x_layer.visStr()); + sens.setType("tracker"); + layerVol.setSensitiveDetector(sens); + + Position layer_pos = Position(0.0, 0.0, layerPosZ); + PlacedVolume layerPV = detVol.placeVolume(layerVol, layer_pos); + layerPV.addPhysVolID("layer", i+1); + } + + 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); + det.setPlacement(detPV); + return det; +} + +DECLARE_DETELEMENT(ce_GEM, createDetector)