diff --git a/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp b/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
index 9df294c519aae1ef28ac002acc678f8fd8331d44..0522693861992ec0088d68f0afbad060e831d896 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);