From 2d3a664c9e47106d56d127f5708a066ec17a7b1f Mon Sep 17 00:00:00 2001 From: lintao <lintao51@gmail.com> Date: Mon, 7 Sep 2020 13:04:12 +0800 Subject: [PATCH] WIP: construct both the inner and outer chambers. --- Detector/DetDriftChamber/compact/det.xml | 16 ++++++ .../src/driftchamber/DriftChamber.cpp | 56 +++++++++++++++++-- 2 files changed, 67 insertions(+), 5 deletions(-) diff --git a/Detector/DetDriftChamber/compact/det.xml b/Detector/DetDriftChamber/compact/det.xml index 11474f9d..00500afe 100644 --- a/Detector/DetDriftChamber/compact/det.xml +++ b/Detector/DetDriftChamber/compact/det.xml @@ -20,6 +20,22 @@ <constant name="world_x" value="world_size"/> <constant name="world_y" value="world_size"/> <constant name="world_z" value="world_size"/> + + <!-- SDT --> + <constant name="SDT_radius_min" value="235*mm"/> + <constant name="SDT_radius_max" value="1716*mm"/> + <constant name="SDT_half_length" value="2225*mm"/> + <constant name="SDT_length" value="SDT_half_length*2"/> + + <constant name="SDT_inner_chamber_radius_min" value="SDT_radius_min"/> + <constant name="SDT_inner_chamber_radius_max" value="909*mm"/> + <constant name="SDT_inner_chamber_length" value="SDT_length"/> + + <constant name="SDT_outer_chamber_radius_min" value="1085*mm"/> + <constant name="SDT_outer_chamber_radius_max" value="SDT_radius_max"/> + <constant name="SDT_outer_chamber_length" value="SDT_length"/> + + </define> <display> diff --git a/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp b/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp index 2f75d470..24aa4900 100644 --- a/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp +++ b/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp @@ -18,30 +18,76 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, xml_h e, dd4hep::SensitiveDetector sens) { + // ======================================================================= + // Parameter Definition + // ======================================================================= + xml_det_t x_det = e; std::string det_name = x_det.nameStr(); std::string det_type = x_det.typeStr(); + // - global + double chamber_radius_min = theDetector.constant<double>("SDT_radius_min"); + double chamber_radius_max = theDetector.constant<double>("SDT_radius_max"); + double chamber_length = theDetector.constant<double>("SDT_length"); + + // - inner chamber + double inner_chamber_radius_min = theDetector.constant<double>("SDT_inner_chamber_radius_min"); + double inner_chamber_radius_max = theDetector.constant<double>("SDT_inner_chamber_radius_max"); + double inner_chamber_length = theDetector.constant<double>("SDT_inner_chamber_length"); + + // - outer chamber + double outer_chamber_radius_min = theDetector.constant<double>("SDT_outer_chamber_radius_min"); + double outer_chamber_radius_max = theDetector.constant<double>("SDT_outer_chamber_radius_max"); + double outer_chamber_length = theDetector.constant<double>("SDT_outer_chamber_length"); + + // ======================================================================= + // Detector Construction + // ======================================================================= + dd4hep::DetElement sdet(det_name, x_det.id()); dd4hep::Volume motherVol = theDetector.pickMotherVolume(sdet); dd4hep::Material det_mat(theDetector.material("Air")); - dd4hep::Tube det_solid(23.5, 171.6, 222.5); + // - global + dd4hep::Tube det_solid(chamber_radius_min, chamber_radius_max, chamber_length*0.5); dd4hep::Volume det_vol(det_name+"_vol", det_solid, det_mat); - dd4hep::Transform3D transform(dd4hep::Rotation3D(), - dd4hep::Position(0,0,0)); - dd4hep::PlacedVolume phv = motherVol.placeVolume(det_vol,transform); - if ( x_det.isSensitive() ) { dd4hep::SensitiveDetector sd = sens; det_vol.setSensitiveDetector(sens); sd.setType("tracker"); } + // - inner + dd4hep::Tube det_inner_chamber_solid(inner_chamber_radius_min, inner_chamber_radius_max, inner_chamber_length*0.5); + dd4hep::Volume det_inner_chamber_vol(det_name+"_inner_chamber_vol", det_inner_chamber_solid, det_mat); + + dd4hep::Transform3D transform_inner_chamber(dd4hep::Rotation3D(), + dd4hep::Position(0,0,0)); + dd4hep::PlacedVolume det_inner_chamber_phy = det_vol.placeVolume(det_inner_chamber_vol, + transform_inner_chamber); + + // - outer + dd4hep::Tube det_outer_chamber_solid(outer_chamber_radius_min, outer_chamber_radius_max, outer_chamber_length*0.5); + dd4hep::Volume det_outer_chamber_vol(det_name+"_outer_chamber_vol", det_outer_chamber_solid, det_mat); + + dd4hep::Transform3D transform_outer_chamber(dd4hep::Rotation3D(), + dd4hep::Position(0,0,0)); + dd4hep::PlacedVolume det_outer_chamber_phy = det_vol.placeVolume(det_outer_chamber_vol, + transform_outer_chamber); + + + + // - place in world + dd4hep::Transform3D transform(dd4hep::Rotation3D(), + dd4hep::Position(0,0,0)); + dd4hep::PlacedVolume phv = motherVol.placeVolume(det_vol,transform); + + if ( x_det.hasAttr(_U(id)) ) { phv.addPhysVolID("system",x_det.id()); } -- GitLab