From 10e7d6ba5e1702ccd741fa162ad6ecc65c6fce9f Mon Sep 17 00:00:00 2001 From: myliu <201916234@mail.sdu.edu.cn> Date: Wed, 23 Sep 2020 21:45:33 +0800 Subject: [PATCH] first --- .../src/driftchamber/DriftChamber.cpp | 85 ++++++++++++------- 1 file changed, 56 insertions(+), 29 deletions(-) diff --git a/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp b/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp index 9df294c5..05226938 100644 --- a/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp +++ b/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp @@ -3,6 +3,7 @@ //-------------------------------------------------------------------- // // Author: Tao Lin +// Mengyao Liu // //==================================================================== @@ -12,12 +13,16 @@ #include "DDRec/DetectorData.h" #include "DDSegmentation/Segmentation.h" +using namespace dd4hep; +using namespace dd4hep::detail; +using namespace dd4hep::rec ; + #define MYDEBUG(x) std::cout << __FILE__ << ":" << __LINE__ << ": " << x << std::endl; #define MYDEBUGVAL(x) std::cout << __FILE__ << ":" << __LINE__ << ": " << #x << ": " << x << std::endl; static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, - xml_h e, - dd4hep::SensitiveDetector sens) { + xml_h e, + dd4hep::SensitiveDetector sens) { // ======================================================================= // Parameter Definition // ======================================================================= @@ -27,7 +32,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, std::string det_name = x_det.nameStr(); std::string det_type = x_det.typeStr(); - // - global + // - 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"); @@ -42,6 +47,11 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, double outer_chamber_radius_max = theDetector.constant<double>("SDT_outer_chamber_radius_max"); double outer_chamber_length = theDetector.constant<double>("SDT_outer_chamber_length"); + // - layer + int inner_chamber_layer_number = theDetector.constant<int>("SDT_inner_chamber_layer_number"); + int outer_chamber_layer_number = theDetector.constant<int>("SDT_outer_chamber_layer_number"); + double chamber_layer_width = theDetector.constant<double>("SDT_chamber_layer_width"); + // ======================================================================= // Detector Construction // ======================================================================= @@ -51,8 +61,8 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, dd4hep::Volume motherVol = theDetector.pickMotherVolume(sdet); dd4hep::Material det_mat(theDetector.material("Air")); - - // - global + + // - 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); @@ -60,39 +70,56 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, 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); - det_inner_chamber_phy.addPhysVolID("chamber", 0); - if ( x_det.isSensitive() ) { - dd4hep::SensitiveDetector sd = sens; - det_inner_chamber_vol.setSensitiveDetector(sens); - sd.setType("tracker"); - } - - - // - 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); + // - layer + for(int layer_id=0; layer_id<(inner_chamber_layer_number+outer_chamber_layer_number-1);layer_id++) { + double rmin,rmax; + std::string layer_name; + dd4hep::Volume* current_vol_ptr = nullptr; + + if(layer_id<inner_chamber_layer_number){ + current_vol_ptr = &det_inner_chamber_vol; + rmin = inner_chamber_radius_min+(layer_id*chamber_layer_width)+0.01; + rmax = rmin+9.99; + layer_name = det_name+"_inner_chamber_vol"+_toString(layer_id,"_layer%d"); + }else{ + current_vol_ptr = &det_outer_chamber_vol; + rmin = outer_chamber_radius_min+((layer_id-inner_chamber_layer_number)*chamber_layer_width)+0.01; + rmax = rmin+9.99; + layer_name = det_name+"_outer_chamber_vol"+_toString(layer_id,"_layer%d"); + } + dd4hep::Tube layer_solid(rmin,rmax,chamber_length*0.5); + dd4hep::Volume layer_vol(layer_name,layer_solid,det_mat); + dd4hep::Transform3D transform_layer(dd4hep::Rotation3D(),dd4hep::Position(0.,0.,0.)); + dd4hep::PlacedVolume layer_phy = (*current_vol_ptr).placeVolume(layer_vol, transform_layer); + layer_phy.addPhysVolID("layer",layer_id); + + dd4hep::SensitiveDetector sd = sens; + layer_vol.setSensitiveDetector(sens); + sd.setType("tracker"); + } + + // - place in det + // inner + 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); + det_inner_chamber_phy.addPhysVolID("chamber", 0); + + // outer dd4hep::Transform3D transform_outer_chamber(dd4hep::Rotation3D(), - dd4hep::Position(0,0,0)); + dd4hep::Position(0,0,0)); dd4hep::PlacedVolume det_outer_chamber_phy = det_vol.placeVolume(det_outer_chamber_vol, - transform_outer_chamber); - - det_inner_chamber_phy.addPhysVolID("chamber", 1); - if ( x_det.isSensitive() ) { - dd4hep::SensitiveDetector sd = sens; - det_outer_chamber_vol.setSensitiveDetector(sens); - sd.setType("tracker"); - } - + transform_inner_chamber); + det_outer_chamber_phy.addPhysVolID("chamber", 1); // - place in world dd4hep::Transform3D transform(dd4hep::Rotation3D(), - dd4hep::Position(0,0,0)); + dd4hep::Position(0,0,0)); dd4hep::PlacedVolume phv = motherVol.placeVolume(det_vol,transform); -- GitLab