diff --git a/Detector/DetDriftChamber/compact/det.xml b/Detector/DetDriftChamber/compact/det.xml index a98e21bd28c5e8402ecf9329c1cb366a130345ff..b62dd532daa4c15c48ae37228faeffe3fe32692f 100644 --- a/Detector/DetDriftChamber/compact/det.xml +++ b/Detector/DetDriftChamber/compact/det.xml @@ -113,7 +113,6 @@ <segmentation type="GridDriftChamber" cell_size="SDT_chamber_cell_width" epsilon0="Epsilon" detector_length="DC_length" identifier_phi="cellID" DC_rbegin="DC_chamber_layer_rbegin" DC_rend="DC_chamber_layer_rend" DC_rmin="SDT_chamber_radius_min" DC_rmax="SDT_chamber_radius_max" safe_distance="DC_safe_distance" layerID="layer" layer_width="SDT_chamber_layer_width"/> - <!-- <id>system:8,chamber:1,layer:8,cellID:16</id> --> <id>system:5,layer:7:9,chamber:8,cellID:32:16</id> </readout> </readouts> diff --git a/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp b/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp index 6b3a0c1003ba4335292fc095e02c880dfe2fde26..be98c1c14fa100b5fd5a4199450fde98e9aebf72 100644 --- a/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp +++ b/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp @@ -59,6 +59,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, double chamber_layer_rend = theDetector.constant<double>("DC_chamber_layer_rend"); int chamber_layer_number = floor((chamber_layer_rend-chamber_layer_rbegin)/chamber_layer_width); + double safe_distance = theDetector.constant<double>("DC_safe_distance"); double epsilon = theDetector.constant<double>("Epsilon"); // ======================================================================= @@ -83,12 +84,6 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, // - chamber volume dd4hep::Tube det_chamber_solid(chamber_radius_min, chamber_radius_max, chamber_half_length); dd4hep::Volume det_chamber_vol(det_name+"_chamber_vol", det_chamber_solid, chamber_mat); - if ( x_det.isSensitive() ) { - det_chamber_vol.setRegion(theDetector,x_det.regionStr()); - det_chamber_vol.setLimitSet(theDetector,x_det.limitsStr()); - det_chamber_vol.setSensitiveDetector(sens); - sd.setType("tracker"); - } // - wall double chamber_inner_wall_rmin = theDetector.constant<double>("SDT_chamber_inner_wall_radius_min"); @@ -177,6 +172,18 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, DCHseg->setGeomParams(chamber_id, layerIndex, layer_Phi, rmid, epsilon, offset); DCHseg->setWiresInLayer(chamber_id, layerIndex, numWire); + + dd4hep::Tube layer_vol_solid(rmin,rmax,chamber_half_length); + dd4hep::Volume layer_vol(det_name+"_layer_vol",layer_vol_solid,det_mat); + current_vol_ptr = &layer_vol; + + if ( x_det.isSensitive() ) { + layer_vol.setRegion(theDetector,x_det.regionStr()); + layer_vol.setLimitSet(theDetector,x_det.limitsStr()); + layer_vol.setSensitiveDetector(sens); + sd.setType("tracker"); + } + // - wire vol //phi <-------------------> -phi // | F8 F7 F6 F5| Only on the outermost layer. @@ -185,7 +192,6 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, // | | // | F0 F1 F2 F3| // ----------------------- - if(layer_id == 0 || layer_id == 1 || layer_id == 2 || layer_id == 99) { for(int icell=0; icell< numWire; icell++) { double wire_phi = (icell+0.5)*layer_Phi + offset; // - signal wire @@ -193,7 +199,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, dd4hep::PlacedVolume module_phy = (*current_vol_ptr).placeVolume(module_vol,transform_module); // - Field wire dd4hep::PlacedVolume Module_phy; - double radius[9] = {rmid-chamber_layer_width*0.5,rmid-chamber_layer_width*0.5,rmid-chamber_layer_width*0.5,rmid-chamber_layer_width*0.5,rmid,rmid+chamber_layer_width*0.5,rmid+chamber_layer_width*0.5,rmid+chamber_layer_width*0.5,rmid+chamber_layer_width*0.5}; + double radius[9] = {rmid-chamber_layer_width*0.5+safe_distance,rmid-chamber_layer_width*0.5+safe_distance,rmid-chamber_layer_width*0.5+safe_distance,rmid-chamber_layer_width*0.5+safe_distance,rmid,rmid+chamber_layer_width*0.5-safe_distance,rmid+chamber_layer_width*0.5-safe_distance,rmid+chamber_layer_width*0.5-safe_distance,rmid+chamber_layer_width*0.5-safe_distance}; double phi[9] = {wire_phi+layer_Phi*0.25,wire_phi,wire_phi-layer_Phi*0.25,wire_phi-layer_Phi*0.5,wire_phi-layer_Phi*0.5,wire_phi-layer_Phi*0.5,wire_phi-layer_Phi*0.25,wire_phi,wire_phi+layer_Phi*0.25}; int num = 5; if(layer_id==(chamber_layer_number-1)) { @@ -206,9 +212,11 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, Module_phy = (*current_vol_ptr).placeVolume(Module_vol,transform_Module); } } - } - - } + dd4hep::Transform3D transform_layer(dd4hep::Rotation3D(), + dd4hep::Position(0,0,0)); + dd4hep::PlacedVolume layer_phy = det_chamber_vol.placeVolume(layer_vol ,transform_layer); + layer_phy.addPhysVolID("layer", layer_id); + } // - place in det // - chamber