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

first

parent 089d48db
No related branches found
No related tags found
No related merge requests found
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
//-------------------------------------------------------------------- //--------------------------------------------------------------------
// //
// Author: Tao Lin // Author: Tao Lin
// Mengyao Liu
// //
//==================================================================== //====================================================================
...@@ -12,12 +13,16 @@ ...@@ -12,12 +13,16 @@
#include "DDRec/DetectorData.h" #include "DDRec/DetectorData.h"
#include "DDSegmentation/Segmentation.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 MYDEBUG(x) std::cout << __FILE__ << ":" << __LINE__ << ": " << x << std::endl;
#define MYDEBUGVAL(x) std::cout << __FILE__ << ":" << __LINE__ << ": " << #x << ": " << x << std::endl; #define MYDEBUGVAL(x) std::cout << __FILE__ << ":" << __LINE__ << ": " << #x << ": " << x << std::endl;
static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
xml_h e, xml_h e,
dd4hep::SensitiveDetector sens) { dd4hep::SensitiveDetector sens) {
// ======================================================================= // =======================================================================
// Parameter Definition // Parameter Definition
// ======================================================================= // =======================================================================
...@@ -27,7 +32,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, ...@@ -27,7 +32,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
std::string det_name = x_det.nameStr(); std::string det_name = x_det.nameStr();
std::string det_type = x_det.typeStr(); std::string det_type = x_det.typeStr();
// - global // - global
double chamber_radius_min = theDetector.constant<double>("SDT_radius_min"); double chamber_radius_min = theDetector.constant<double>("SDT_radius_min");
double chamber_radius_max = theDetector.constant<double>("SDT_radius_max"); double chamber_radius_max = theDetector.constant<double>("SDT_radius_max");
double chamber_length = theDetector.constant<double>("SDT_length"); double chamber_length = theDetector.constant<double>("SDT_length");
...@@ -42,6 +47,11 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, ...@@ -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_radius_max = theDetector.constant<double>("SDT_outer_chamber_radius_max");
double outer_chamber_length = theDetector.constant<double>("SDT_outer_chamber_length"); 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 // Detector Construction
// ======================================================================= // =======================================================================
...@@ -51,8 +61,8 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, ...@@ -51,8 +61,8 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
dd4hep::Volume motherVol = theDetector.pickMotherVolume(sdet); dd4hep::Volume motherVol = theDetector.pickMotherVolume(sdet);
dd4hep::Material det_mat(theDetector.material("Air")); dd4hep::Material det_mat(theDetector.material("Air"));
// - global // - global
dd4hep::Tube det_solid(chamber_radius_min, chamber_radius_max, chamber_length*0.5); 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::Volume det_vol(det_name+"_vol", det_solid, det_mat);
...@@ -60,39 +70,56 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, ...@@ -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::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::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 // - outer
dd4hep::Tube det_outer_chamber_solid(outer_chamber_radius_min, outer_chamber_radius_max, outer_chamber_length*0.5); 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::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::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, dd4hep::PlacedVolume det_outer_chamber_phy = det_vol.placeVolume(det_outer_chamber_vol,
transform_outer_chamber); transform_inner_chamber);
det_outer_chamber_phy.addPhysVolID("chamber", 1);
det_inner_chamber_phy.addPhysVolID("chamber", 1);
if ( x_det.isSensitive() ) {
dd4hep::SensitiveDetector sd = sens;
det_outer_chamber_vol.setSensitiveDetector(sens);
sd.setType("tracker");
}
// - place in world // - place in world
dd4hep::Transform3D transform(dd4hep::Rotation3D(), dd4hep::Transform3D transform(dd4hep::Rotation3D(),
dd4hep::Position(0,0,0)); dd4hep::Position(0,0,0));
dd4hep::PlacedVolume phv = motherVol.placeVolume(det_vol,transform); dd4hep::PlacedVolume phv = motherVol.placeVolume(det_vol,transform);
......
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