diff --git a/Detector/DetCRD/compact/CRD_common_v01/DC_Simple_v01_01.xml b/Detector/DetCRD/compact/CRD_common_v01/DC_Simple_v01_01.xml
index ad0caf7b2b79fcdd375ef20f9354d681f03c076c..3ea4927d19400bde691cbafcb97e3c5a2edfcb07 100644
--- a/Detector/DetCRD/compact/CRD_common_v01/DC_Simple_v01_01.xml
+++ b/Detector/DetCRD/compact/CRD_common_v01/DC_Simple_v01_01.xml
@@ -14,33 +14,31 @@
     <constant name="SDT_radius_min" value="InnerTracker_inner_radius"/>
     <constant name="SDT_radius_max" value="OuterTracker_outer_radius"/>
 
-    <constant name="SDT_half_length" value="DC_half_length"/>
+    <constant name="SDT_half_length" value="MainTracker_half_length"/>
     <constant name="SDT_length" value="SDT_half_length*2"/>
     <constant name="DC_length" value="DC_half_length*2"/>
 
-    <constant name="SDT_chamber_inner_wall_thickness" value="0.2*mm"/>
-    <constant name="SDT_chamber_outer_wall_thickness" value="2.8*mm"/>
-    <constant name="SDT_inner_chamber_radius_min" value="InnerTracker_inner_radius+SDT_chamber_inner_wall_thickness"/>
-    <constant name="SDT_inner_chamber_radius_max" value="InnerTracker_outer_radius-SDT_chamber_outer_wall_thickness"/>
-    <constant name="SDT_inner_chamber_length" value="DC_length"/>
+    <constant name="SDT_inner_chamber_radius_min" value="DC_inner_chamber_layer_rbegin-DC_safe_distance"/>
+    <constant name="SDT_inner_chamber_radius_max" value="InnerTracker_outer_radius-SDT_outer_wall_thickness"/>
+    <constant name="SDT_inner_chamber_half_length" value="DC_half_length"/>
 
-    <constant name="SDT_outer_chamber_radius_min" value="OuterTracker_inner_radius+SDT_chamber_inner_wall_thickness"/>
-    <constant name="SDT_outer_chamber_radius_max" value="OuterTracker_outer_radius-SDT_chamber_outer_wall_thickness"/>
-    <constant name="SDT_outer_chamber_length" value="DC_length"/>
+    <constant name="SDT_outer_chamber_radius_min" value="DC_outer_chamber_radius_min-DC_safe_distance"/>
+    <constant name="SDT_outer_chamber_radius_max" value="DC_outer_chamber_radius_max"/>
+    <constant name="SDT_outer_chamber_half_length" value="DC_half_length"/>
 
     <constant name="SDT_inner_chamber_layer_number" value="67"/>
     <constant name="SDT_outer_chamber_layer_number" value="63"/>
     <constant name="SDT_chamber_layer_width" value="10*mm"/>
     <constant name="Epsilon" value="0*deg"/>
 
-    <constant name="SDT_inner_chamber_inner_wall_radius_min" value="SDT_inner_chamber_radius_min-SDT_chamber_inner_wall_thickness"/>
+    <constant name="SDT_inner_chamber_inner_wall_radius_min" value="SDT_inner_chamber_radius_min-SDT_inner_wall_thickness"/>
     <constant name="SDT_inner_chamber_inner_wall_radius_max" value="SDT_inner_chamber_radius_min"/>
     <constant name="SDT_inner_chamber_outer_wall_radius_min" value="SDT_inner_chamber_radius_max"/>
-    <constant name="SDT_inner_chamber_outer_wall_radius_max" value="SDT_inner_chamber_radius_max+SDT_chamber_outer_wall_thickness"/>
-    <constant name="SDT_outer_chamber_inner_wall_radius_min" value="SDT_outer_chamber_radius_min-SDT_chamber_inner_wall_thickness"/>
+    <constant name="SDT_inner_chamber_outer_wall_radius_max" value="SDT_inner_chamber_radius_max+SDT_outer_wall_thickness"/>
+    <constant name="SDT_outer_chamber_inner_wall_radius_min" value="SDT_outer_chamber_radius_min-SDT_inner_wall_thickness"/>
     <constant name="SDT_outer_chamber_inner_wall_radius_max" value="SDT_outer_chamber_radius_min"/>
     <constant name="SDT_outer_chamber_outer_wall_radius_min" value="SDT_outer_chamber_radius_max"/>
-    <constant name="SDT_outer_chamber_outer_wall_radius_max" value="SDT_outer_chamber_radius_max+SDT_chamber_outer_wall_thickness"/>
+    <constant name="SDT_outer_chamber_outer_wall_radius_max" value="SDT_outer_chamber_radius_max+SDT_outer_wall_thickness"/>
 
     <constant name="DC_Endcap_rmin" value="SDT_radius_min"/>
     <constant name="DC_Endcap_rmax" value="SDT_radius_max"/>
@@ -51,12 +49,27 @@
 
   </define>
 
+  <limits>
+    <limitset name="DC_limits">
+      <limit name="step_length_max" particles="*" value="0.5" unit="mm" />
+    </limitset>
+  </limits>
+
+  <regions>
+    <region name="DriftChamberRegion">
+    </region>
+  </regions>
+
   <detectors>
-    <detector id="DetID_DC" name="DriftChamber" type="DriftChamber" readout="DriftChamberHitsCollection" vis="BlueVis" sensitive="true" insideTrackingVolume="true">
+    <detector id="DetID_DC" name="DriftChamber" type="DriftChamber" readout="DriftChamberHitsCollection" vis="BlueVis" sensitive="true" insideTrackingVolume="true" limits="DC_limits">
       <envelope vis="SeeThrough">
-        <shape type="BooleanShape" operation="Union" material="Air">
-          <shape type="Tube" rmin="SDT_radius_min" rmax="InnerTracker_outer_radius" dz="MainTracker_half_length" />
-          <shape type="Tube" rmin="OuterTracker_inner_radius" rmax="SDT_radius_max" dz="MainTracker_half_length" />
+<!--        <shape type="BooleanShape" operation="Union" material="Air">
+          <shape type="Tube" rmin="SDT_radius_min" rmax="OuterTracker_inner_radius" dz="SDT_half_length" />
+          <shape type="Tube" rmin="SDT_outer_chamber_inner_wall_radius_min" rmax="SDT_radius_max" dz="SDT_half_length" />
+        </shape> -->
+        <shape type="BooleanShape" operation="Subtraction" material="Air">
+          <shape type="Tube" rmin="SDT_radius_min" rmax="SDT_radius_max" dz="SDT_half_length" />
+          <shape type="Tube" rmin="InnerTracker_outer_radius" rmax="SDT_outer_chamber_inner_wall_radius_min" dz="DC_half_length"/>
         </shape>
       </envelope>
 
@@ -78,9 +91,11 @@
 
   <readouts>
     <readout name="DriftChamberHitsCollection">
-      <segmentation type="GridDriftChamber" cell_size="10*mm" epsilon0="Epsilon" detector_length="DC_length" identifier_phi="cellID" />
+      <segmentation type="GridDriftChamber" cell_size="10*mm" epsilon0="Epsilon" detector_length="DC_length" identifier_phi="cellID" DC_inner_rbegin="DC_inner_chamber_layer_rbegin" DC_inner_rend="DC_inner_chamber_layer_rend" DC_outer_rbegin="DC_outer_chamber_layer_rbegin" DC_outer_rend="DC_outer_chamber_layer_rend" DC_inner_rmin="SDT_inner_chamber_radius_min" DC_inner_rmax="SDT_inner_chamber_radius_max" DC_outer_rmin="SDT_outer_chamber_radius_min" DC_outer_rmax="SDT_outer_chamber_radius_max" DC_inner_layer_number="SDT_inner_chamber_layer_number" DC_outer_layer_number="SDT_outer_chamber_layer_number" 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:8,chamber:1,layer:8,cellID:16</id> -->
+      <!--<id>system:5,side:-2,layer:9,chamber:8,sensor:8,cellID:16</id> -->
+      <id>system:5,layer:7:9,chamber:8,cellID:32:16</id>
     </readout>
   </readouts>
 
diff --git a/Detector/DetCRD/compact/CRD_common_v01/SET_SimplePlanar_v01_01.xml b/Detector/DetCRD/compact/CRD_common_v01/SET_SimplePlanar_v01_01.xml
index 5e39151764a31333ceb947a390e291c08082e015..82071ac2591c17718373cb53e88abbb6313702bd 100644
--- a/Detector/DetCRD/compact/CRD_common_v01/SET_SimplePlanar_v01_01.xml
+++ b/Detector/DetCRD/compact/CRD_common_v01/SET_SimplePlanar_v01_01.xml
@@ -2,7 +2,7 @@
   <define>
     <constant name="SET_inner_radius" value="OuterTracker_outer_radius + env_safety"/>
     <constant name="SET_outer_radius" value="Ecal_barrel_inner_radius - env_safety "/>
-    <constant name="SET_half_length"  value="OuterTracker_half_length"/>
+    <constant name="SET_half_length"  value="DC_half_length"/>
   </define>
 
   <detectors>
diff --git a/Detector/DetCRD/compact/CRD_common_v01/SET_SimplePlanar_v01_02.xml b/Detector/DetCRD/compact/CRD_common_v01/SET_SimplePlanar_v01_02.xml
index 2d90b1c81d0a5e41831bbd2f2dc19b3739e604d3..22db7614e332a8be3d62397dc7489255deb4e34a 100644
--- a/Detector/DetCRD/compact/CRD_common_v01/SET_SimplePlanar_v01_02.xml
+++ b/Detector/DetCRD/compact/CRD_common_v01/SET_SimplePlanar_v01_02.xml
@@ -2,7 +2,7 @@
   <define>
     <constant name="SET_inner_radius" value="OuterTracker_outer_radius + env_safety"/>
     <constant name="SET_outer_radius" value="Ecal_barrel_inner_radius - env_safety "/>
-    <constant name="SET_half_length"  value="OuterTracker_half_length"/>
+    <constant name="SET_half_length"  value="DC_half_length"/>
     <constant name="SET_inner_distance_from_tpc" value="InnerTracker_outer_radius-OuterTracker_outer_radius+3*mm"/>
   </define>
 
diff --git a/Detector/DetCRD/compact/CRD_common_v01/SIT_SimplePixel_v01_01.xml b/Detector/DetCRD/compact/CRD_common_v01/SIT_SimplePixel_v01_01.xml
index 9e7a967efaa134682cb5d9ae978095be20d14846..02a49d5eaa5a5fd32f68e2d51987d7c64505680f 100644
--- a/Detector/DetCRD/compact/CRD_common_v01/SIT_SimplePixel_v01_01.xml
+++ b/Detector/DetCRD/compact/CRD_common_v01/SIT_SimplePixel_v01_01.xml
@@ -5,7 +5,7 @@
     <constant name="SIT_inner_radius_1"   value="SIT_inner_radius + env_safety"/>
     <constant name="SIT_outer_radius_1" value="SIT_inner_radius_1/cos(pi/8)"/>
     <constant name="SIT_inner_radius_2" value="SIT2_inner_radius"/>
-    <constant name="SIT_outer_radius"   value="InnerTracker_inner_radius"/>
+    <constant name="SIT_outer_radius"   value="OuterTracker_inner_radius"/>
     <constant name="SIT_half_length"    value="SIT2_half_length"/>
     <constant name="SIT_half_length_1"  value="SIT1_half_length"/>
     <constant name="SIT_layer_gap" value="2.5*mm"/>
diff --git a/Detector/DetCRD/compact/CRD_o1_v01/CRD_Dimensions_v01_01.xml b/Detector/DetCRD/compact/CRD_o1_v01/CRD_Dimensions_v01_01.xml
index 7fa9b7cba6c11d4e29037539f4dddd8a50181b20..48e8f62bf8e33fae9f9e35114dee34510c8d68b8 100644
--- a/Detector/DetCRD/compact/CRD_o1_v01/CRD_Dimensions_v01_01.xml
+++ b/Detector/DetCRD/compact/CRD_o1_v01/CRD_Dimensions_v01_01.xml
@@ -83,18 +83,29 @@
 
     <constant name="DC_Endcap_z" value="0.1*mm"/>
     <constant name="DC_half_length"  value="2225*mm" />
+    <constant name="DC_safe_distance" value="0.2*mm"/>
+    <constant name="SDT_inner_wall_thickness" value="0.2*mm"/>
+    <constant name="SDT_outer_wall_thickness" value="2.8*mm"/>
+    <constant name="DC_inner_chamber_layer_rbegin" value="235*mm"/>
+    <constant name="DC_inner_chamber_layer_rend" value="905*mm"/>
+    <constant name="DC_outer_chamber_layer_rbegin" value="1085*mm"/>
+    <constant name="DC_outer_chamber_layer_rend" value="1715*mm"/>
+    <constant name="DC_inner_chamber_radius_min" value="DC_inner_chamber_layer_rbegin"/>
+    <constant name="DC_inner_chamber_radius_max" value="909*mm"/>
+    <constant name="DC_outer_chamber_radius_min" value="DC_outer_chamber_layer_rbegin"/>
+    <constant name="DC_outer_chamber_radius_max" value="1716*mm"/>
     <constant name="MainTracker_half_length"  value="DC_half_length+DC_Endcap_z" />
     <constant name="InnerTracker_half_length"  value="DC_half_length" />
-    <constant name="InnerTracker_inner_radius" value="234.8*mm"/>
-    <constant name="InnerTracker_outer_radius" value="908.8*mm"/>
+    <constant name="InnerTracker_inner_radius" value="234*mm"/>
+    <constant name="InnerTracker_outer_radius" value="DC_inner_chamber_radius_max"/>
     <constant name="OuterTracker_half_length"  value="DC_half_length"/>
-    <constant name="OuterTracker_inner_radius" value="1084.8*mm"/>
-    <constant name="OuterTracker_outer_radius" value="1717.8*mm"/>
+    <constant name="OuterTracker_inner_radius" value="DC_outer_chamber_radius_min-DC_safe_distance-SDT_inner_wall_thickness"/>
+    <constant name="OuterTracker_outer_radius" value="1720*mm"/>
     
     <constant name="SIT1_inner_radius"   value="152.90*mm"/>
     <constant name="SIT1_half_length"    value="368.00*mm"/>
     <constant name="SIT2_inner_radius"   value="InnerTracker_outer_radius + env_safety"/>
-    <constant name="SIT2_half_length"    value="InnerTracker_half_length"/>
+    <constant name="SIT2_half_length"    value="DC_half_length"/>
 
     <constant name="FTD_BeamPipe_cable_clearance"     value="10*mm"/> 
     <constant name="FTD_BeamPipe_gap"     value="15*mm"/>
diff --git a/Detector/DetCRD/compact/CRD_o1_v02/CRD_Dimensions_v01_02.xml b/Detector/DetCRD/compact/CRD_o1_v02/CRD_Dimensions_v01_02.xml
index 0ef534ce04ff16c208695f5d74661f21c30ce392..984af96a00dce5aa0aa2c1a8482b9318ec63fdb1 100644
--- a/Detector/DetCRD/compact/CRD_o1_v02/CRD_Dimensions_v01_02.xml
+++ b/Detector/DetCRD/compact/CRD_o1_v02/CRD_Dimensions_v01_02.xml
@@ -83,14 +83,25 @@
 
     <constant name="DC_Endcap_z" value="0.1*mm"/>
     <constant name="DC_half_length"  value="2225*mm" />
+    <constant name="DC_safe_distance" value="0.2*mm"/>
+    <constant name="SDT_inner_wall_thickness" value="0.2*mm"/>
+    <constant name="SDT_outer_wall_thickness" value="2.8*mm"/>
+    <constant name="DC_inner_chamber_layer_rbegin" value="235*mm"/>
+    <constant name="DC_inner_chamber_layer_rend" value="905*mm"/>
+    <constant name="DC_outer_chamber_layer_rbegin" value="1085*mm"/>
+    <constant name="DC_outer_chamber_layer_rend" value="1715*mm"/>
+    <constant name="DC_inner_chamber_radius_min" value="DC_inner_chamber_layer_rbegin"/>
+    <constant name="DC_inner_chamber_radius_max" value="909*mm"/>
+    <constant name="DC_outer_chamber_radius_min" value="DC_outer_chamber_layer_rbegin"/>
+    <constant name="DC_outer_chamber_radius_max" value="1716*mm"/>
     <constant name="MainTracker_half_length"  value="DC_half_length+DC_Endcap_z" />
     <constant name="InnerTracker_half_length"  value="DC_half_length" />
-    <constant name="InnerTracker_inner_radius" value="234.8*mm"/>
-    <constant name="InnerTracker_outer_radius" value="908.8*mm"/>
+    <constant name="InnerTracker_inner_radius" value="234*mm"/>
+    <constant name="InnerTracker_outer_radius" value="DC_inner_chamber_radius_max"/>
     <constant name="OuterTracker_half_length"  value="DC_half_length"/>
-    <constant name="OuterTracker_inner_radius" value="1084.8*mm"/>
-    <constant name="OuterTracker_outer_radius" value="1717.8*mm"/>
-    
+    <constant name="OuterTracker_inner_radius" value="DC_outer_chamber_radius_min-DC_safe_distance-SDT_inner_wall_thickness"/>
+    <constant name="OuterTracker_outer_radius" value="1720*mm"/>
+
     <constant name="SIT1_inner_radius"   value="140*mm"/>
     <constant name="SIT1_half_length"    value="368.00*mm"/>
     <constant name="SIT2_inner_radius"   value="225*mm"/>
diff --git a/Detector/DetDriftChamber/compact/det.xml b/Detector/DetDriftChamber/compact/det.xml
index 3a33224601c201847e452dff7c36538fcef1c269..9058b63d0c1432c8cb1d7b8bbe71e6ac029ba067 100644
--- a/Detector/DetDriftChamber/compact/det.xml
+++ b/Detector/DetDriftChamber/compact/det.xml
@@ -32,30 +32,48 @@
     <constant name="DC_Endcap_dz" value="0.1*mm"/>
 
     <constant name="SDT_half_length" value="2225*mm+DC_Endcap_dz"/>
+    <constant name="DC_half_length" value="2225*mm"/>
     <constant name="SDT_length" value="SDT_half_length*2"/>
     <constant name="DC_length" value="SDT_length-DC_Endcap_dz*2"/>
 
-    <constant name="SDT_inner_chamber_radius_min" value="235*mm"/>
-    <constant name="SDT_inner_chamber_radius_max" value="906*mm"/>
-    <constant name="SDT_inner_chamber_length" value="DC_length"/>
+    <constant name="DC_safe_distance" value="0.2*mm"/>
 
-    <constant name="SDT_outer_chamber_radius_min" value="1085*mm"/>
-    <constant name="SDT_outer_chamber_radius_max" value="1715*mm"/>
-    <constant name="SDT_outer_chamber_length" value="DC_length"/>
+    <constant name="SDT_inner_wall_thickness" value="0.2*mm"/>
+    <constant name="SDT_outer_wall_thickness" value="2.8*mm"/>
+
+    <constant name="DC_inner_chamber_layer_rbegin" value="235*mm"/>
+    <constant name="DC_inner_chamber_layer_rend" value="905*mm"/>
+
+    <constant name="DC_outer_chamber_layer_rbegin" value="1085*mm"/>
+    <constant name="DC_outer_chamber_layer_rend" value="1715*mm"/>
+
+    <constant name="DC_inner_chamber_radius_min" value="DC_inner_chamber_layer_rbegin"/>
+    <constant name="DC_inner_chamber_radius_max" value="909*mm"/>
+
+    <constant name="DC_outer_chamber_radius_min" value="DC_outer_chamber_layer_rbegin"/>
+    <constant name="DC_outer_chamber_radius_max" value="1716*mm"/>
+
+    <constant name="SDT_inner_chamber_radius_min" value="DC_inner_chamber_layer_rbegin-DC_safe_distance"/>
+    <constant name="SDT_inner_chamber_radius_max" value="DC_inner_chamber_radius_max-SDT_outer_wall_thickness"/>
+    <constant name="SDT_inner_chamber_half_length" value="DC_half_length"/>
+
+    <constant name="SDT_outer_chamber_radius_min" value="DC_outer_chamber_layer_rbegin-DC_safe_distance"/>
+    <constant name="SDT_outer_chamber_radius_max" value="DC_outer_chamber_radius_max"/>
+    <constant name="SDT_outer_chamber_half_length" value="DC_half_length"/>
 
     <constant name="SDT_inner_chamber_layer_number" value="67"/>
     <constant name="SDT_outer_chamber_layer_number" value="63"/>
     <constant name="SDT_chamber_layer_width" value="10*mm"/>
     <constant name="Epsilon" value="0*deg"/>
 
-    <constant name="SDT_inner_chamber_inner_wall_radius_min" value="234.8*mm"/>
-    <constant name="SDT_inner_chamber_inner_wall_radius_max" value="235*mm"/>
-    <constant name="SDT_inner_chamber_outer_wall_radius_min" value="906*mm"/>
-    <constant name="SDT_inner_chamber_outer_wall_radius_max" value="908.8*mm"/>
-    <constant name="SDT_outer_chamber_inner_wall_radius_min" value="1084.8*mm"/>
-    <constant name="SDT_outer_chamber_inner_wall_radius_max" value="1085*mm"/>
-    <constant name="SDT_outer_chamber_outer_wall_radius_min" value="1715*mm"/>
-    <constant name="SDT_outer_chamber_outer_wall_radius_max" value="1717.8*mm"/>
+    <constant name="SDT_inner_chamber_inner_wall_radius_min" value="SDT_inner_chamber_radius_min-SDT_inner_wall_thickness"/>
+    <constant name="SDT_inner_chamber_inner_wall_radius_max" value="SDT_inner_chamber_radius_min"/>
+    <constant name="SDT_inner_chamber_outer_wall_radius_min" value="SDT_inner_chamber_radius_max"/>
+    <constant name="SDT_inner_chamber_outer_wall_radius_max" value="SDT_inner_chamber_radius_max+SDT_outer_wall_thickness"/>
+    <constant name="SDT_outer_chamber_inner_wall_radius_min" value="SDT_outer_chamber_radius_min-SDT_inner_wall_thickness"/>
+    <constant name="SDT_outer_chamber_inner_wall_radius_max" value="SDT_outer_chamber_radius_min"/>
+    <constant name="SDT_outer_chamber_outer_wall_radius_min" value="SDT_outer_chamber_radius_max"/>
+    <constant name="SDT_outer_chamber_outer_wall_radius_max" value="SDT_outer_chamber_radius_max+SDT_outer_wall_thickness"/>
 
     <constant name="DC_Endcap_rmin" value="SDT_radius_min"/>
     <constant name="DC_Endcap_rmax" value="SDT_radius_max"/>
@@ -74,17 +92,27 @@
     <vis name="YellowVis" alpha="1.0" r="1.0" g="1.0"  b="0.0"   showDaughters="true"  visible="true"/>
   </display>
 
+  <limits>
+    <limitset name="DC_limits">
+      <limit name="step_length_max" particles="*" value="0.5" unit="mm" />
+    </limitset>
+  </limits>
+
   <regions>
     <region name="DriftChamberRegion">
     </region>
   </regions>
 
   <detectors>
-    <detector id="7" name="DriftChamber" type="DriftChamber" readout="DriftChamberHitsCollection" vis="VisibleBlue" sensitive="true" region="DriftChamberRegion">
+    <detector id="7" name="DriftChamber" type="DriftChamber" readout="DriftChamberHitsCollection" vis="VisibleBlue" sensitive="true" region="DriftChamberRegion" limits="DC_limits">
       <envelope vis="SeeThrough">
-        <shape type="BooleanShape" operation="Union" material="Air">
-          <shape type="Tube" rmin="SDT_radius_min" rmax="909*mm" dz="SDT_half_length" />
-          <shape type="Tube" rmin="1084.8*mm" rmax="SDT_radius_max" dz="SDT_half_length" />
+<!--        <shape type="BooleanShape" operation="Union" material="Air">
+          <shape type="Tube" rmin="SDT_radius_min" rmax="SDT_inner_chamber_outer_wall_radius_max" dz="SDT_half_length" />
+          <shape type="Tube" rmin="SDT_outer_chamber_inner_wall_radius_min" rmax="SDT_radius_max" dz="SDT_half_length" />
+        </shape> -->
+        <shape type="BooleanShape" operation="Subtraction" material="Air">
+          <shape type="Tube" rmin="SDT_radius_min" rmax="SDT_radius_max" dz="SDT_half_length" />
+          <shape type="Tube" rmin="DC_inner_chamber_radius_max" rmax="SDT_outer_chamber_inner_wall_radius_min" dz="DC_half_length"/>
         </shape>
       </envelope>
 
@@ -106,9 +134,10 @@
 
   <readouts>
     <readout name="DriftChamberHitsCollection">
-      <segmentation type="GridDriftChamber" cell_size="10*mm" epsilon0="Epsilon" detector_length="DC_length" identifier_phi="cellID" />
+      <segmentation type="GridDriftChamber" cell_size="10*mm" epsilon0="Epsilon" detector_length="DC_length" identifier_phi="cellID" DC_inner_rbegin="DC_inner_chamber_layer_rbegin" DC_inner_rend="DC_inner_chamber_layer_rend" DC_outer_rbegin="DC_outer_chamber_layer_rbegin" DC_outer_rend="DC_outer_chamber_layer_rend" DC_inner_rmin="SDT_inner_chamber_radius_min" DC_inner_rmax="SDT_inner_chamber_radius_max" DC_outer_rmin="SDT_outer_chamber_radius_min" DC_outer_rmax="SDT_outer_chamber_radius_max" DC_inner_layer_number="SDT_inner_chamber_layer_number" DC_outer_layer_number="SDT_outer_chamber_layer_number" 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:8,chamber:1,layer:8,cellID:16</id> -->
+      <id>system:5,side:-2,layer:9,chamber:8,sensor:8,cellID:16</id>
     </readout>
   </readouts>
 
diff --git a/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp b/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
index 6894e6a4eb591895dc97dcc3108edc1456ae6122..be9dfb78445995639c9fcaa8cfd92db2d2b37906 100644
--- a/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
+++ b/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
@@ -41,24 +41,26 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
     dd4hep::SensitiveDetector sd = sens;
 
     // - 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");
+    double chamber_half_length     = theDetector.constant<double>("DC_half_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");
+    double inner_chamber_half_length     = theDetector.constant<double>("SDT_inner_chamber_half_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");
+    double outer_chamber_half_length     = theDetector.constant<double>("SDT_outer_chamber_half_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");
+    double inner_chamber_layer_rbegin = theDetector.constant<double>("DC_inner_chamber_layer_rbegin");
+    double inner_chamber_layer_rend = theDetector.constant<double>("DC_inner_chamber_layer_rend");
+    double outer_chamber_layer_rbegin = theDetector.constant<double>("DC_outer_chamber_layer_rbegin");
+    double outer_chamber_layer_rend = theDetector.constant<double>("DC_outer_chamber_layer_rend");
 
     double epsilon = theDetector.constant<double>("Epsilon");
 
@@ -66,6 +68,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
     int inner_chamber_enabled = theDetector.constant<int>("DC_inner_chamber_enabled");
     int outer_chamber_enabled = theDetector.constant<int>("DC_outer_chamber_enabled");
 
+
     // =======================================================================
     // Detector Construction
     // =======================================================================
@@ -80,17 +83,30 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
 
 
     dd4hep::Material det_mat(theDetector.material("Air"));
+    dd4hep::Material chamber_mat(theDetector.material("GasHe_90Isob_10"));
 
     // - global
     Assembly det_vol( det_name+"_assembly" ) ;
 
     // - 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::Tube det_inner_chamber_solid(inner_chamber_radius_min, inner_chamber_radius_max, inner_chamber_half_length);
+    dd4hep::Volume det_inner_chamber_vol(det_name+"_inner_chamber_vol", det_inner_chamber_solid, chamber_mat);
+    if ( x_det.isSensitive() )   {
+       det_inner_chamber_vol.setRegion(theDetector,x_det.regionStr());
+       det_inner_chamber_vol.setLimitSet(theDetector,x_det.limitsStr());
+       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);
+     // - outer
+     dd4hep::Tube det_outer_chamber_solid(outer_chamber_radius_min, outer_chamber_radius_max, outer_chamber_half_length);
+     dd4hep::Volume det_outer_chamber_vol(det_name+"_outer_chamber_vol", det_outer_chamber_solid, chamber_mat);
+     if ( x_det.isSensitive() )   {
+        det_outer_chamber_vol.setRegion(theDetector,x_det.regionStr());
+        det_outer_chamber_vol.setLimitSet(theDetector,x_det.limitsStr());
+        det_outer_chamber_vol.setSensitiveDetector(sens);
+        sd.setType("tracker");
+     }
 
     // - wall
     double inner_chamber_inner_wall_rmin = theDetector.constant<double>("SDT_inner_chamber_inner_wall_radius_min");
@@ -115,7 +131,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
       double  module_rmin = x_module.rmin();
       double  module_rmax = x_module.rmax();
       std::string module_name = x_module.nameStr();
-      dd4hep::Tube module_solid(module_rmin,module_rmax,chamber_length*0.5);
+      dd4hep::Tube module_solid(module_rmin,module_rmax,chamber_half_length);
       if(x_module.id()==0) {
          module_vol = dd4hep::Volume(module_name,module_solid,det_mat);
          module_vol.setVisAttributes(theDetector.visAttributes(x_module.visStr()));
@@ -131,7 +147,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
          std::string tube_name = x_tube.nameStr();
          std::string wire_name= module_name + tube_name;
          dd4hep::Material tube_mat = theDetector.material(x_tube.materialStr());
-         dd4hep::Tube wire_solid(tube_rmin,tube_rmax,chamber_length*0.5);
+         dd4hep::Tube wire_solid(tube_rmin,tube_rmax,chamber_half_length);
          dd4hep::Volume wire_vol(wire_name,wire_solid,tube_mat);
          dd4hep::Transform3D transform_wire(dd4hep::Rotation3D(),dd4hep::Position(0.,0.,0.));
          dd4hep::PlacedVolume wire_phy;
@@ -159,21 +175,23 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
     auto DCHseg = dynamic_cast<dd4hep::DDSegmentation::GridDriftChamber*>(_geoSeg->segmentation());
 
     // - layer
+    int chamber_id = -1;
+    int layerIndex = -1;
     for(int layer_id = 0; layer_id < (inner_chamber_layer_number+outer_chamber_layer_number); layer_id++) {
         double rmin,rmax,offset=0;
-        std::string layer_name;
         dd4hep::Volume* current_vol_ptr = nullptr;
-        dd4hep::Material layer_mat(theDetector.material("GasHe_90Isob_10"));
         if(inner_chamber_enabled && (layer_id < inner_chamber_layer_number)) {
            current_vol_ptr = &det_inner_chamber_vol;
-           rmin = inner_chamber_radius_min+(layer_id*chamber_layer_width);
+           rmin = inner_chamber_layer_rbegin+(layer_id*chamber_layer_width);
            rmax = rmin+chamber_layer_width;
-           layer_name = det_name+"_inner_chamber_vol"+_toString(layer_id,"_layer%d");
-        } else if(outer_chamber_enabled && (layer_id > (inner_chamber_layer_number-1))) {
+           chamber_id = 0;
+           layerIndex = layer_id;
+        } else if(outer_chamber_enabled && (layer_id >= inner_chamber_layer_number)) {
            current_vol_ptr = &det_outer_chamber_vol;
-           rmin = outer_chamber_radius_min+((layer_id-inner_chamber_layer_number)*chamber_layer_width);
+           rmin = outer_chamber_layer_rbegin+((layer_id-inner_chamber_layer_number)*chamber_layer_width);
            rmax = rmin+chamber_layer_width;
-           layer_name = det_name+"_outer_chamber_vol"+_toString(layer_id,"_layer%d");
+           chamber_id = 1;
+           layerIndex = layer_id - inner_chamber_layer_number;
         } else continue;
 
         //Construction of drift chamber layers
@@ -187,12 +205,8 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
         if(layer_id %2 ==0){ offset = 0.; }
         else { offset = 0.5 * layer_Phi; }
 
-        DCHseg->setGeomParams(layer_id, layer_Phi, rmid, epsilon, offset);
-        DCHseg->setWiresInLayer(layer_id, numWire);
-
-        dd4hep::Tube layer_solid(rmin,rmax,chamber_length*0.5);
-        dd4hep::Volume layer_vol(layer_name,layer_solid,layer_mat);
-        layer_vol.setAttributes(theDetector,x_det.regionStr(),x_det.limitsStr(),x_det.visStr());
+        DCHseg->setGeomParams(chamber_id, layerIndex, layer_Phi, rmid, epsilon, offset);
+        DCHseg->setWiresInLayer(chamber_id, layerIndex, numWire);
 
         // - wire vol
         //phi <-------------------> -phi
@@ -202,34 +216,28 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
         //    |                     |
         //    |   F0    F1   F2   F3|
         //    -----------------------
-//     if(layer_id == -1) {
+     if(layer_id == 0 || layer_id ==66 || layer_id ==67 || layer_id ==129) {
         for(int icell=0; icell< numWire; icell++) {
             double wire_phi = (icell+0.5)*layer_Phi + offset;
             // - signal wire
             dd4hep::Transform3D transform_module(dd4hep::Rotation3D(),dd4hep::Position(rmid*std::cos(wire_phi),rmid*std::sin(wire_phi),0.));
-            dd4hep::PlacedVolume module_phy = layer_vol.placeVolume(module_vol,transform_module);
+            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 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==(inner_chamber_layer_number-1)||layer_id==(outer_chamber_layer_number-1)) { num = 9; }
+            if(layer_id==(inner_chamber_layer_number-1)||layer_id==(inner_chamber_layer_number+outer_chamber_layer_number-1)) { num = 9; }
             for(int i=0; i<num ; i++) {
                 dd4hep::Position tr3D = Position(radius[i]*std::cos(phi[i]),radius[i]*std::sin(phi[i]),0.);
+
                 dd4hep::Transform3D transform_Module(dd4hep::Rotation3D(),tr3D);
-                Module_phy = layer_vol.placeVolume(Module_vol,transform_Module);
+                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 = (*current_vol_ptr).placeVolume(layer_vol, transform_layer);
-        layer_phy.addPhysVolID("layer",layer_id);
+  }
 
-        //Set drift chamber layers to sensitive detector
-        layer_vol.setSensitiveDetector(sens);
-        sd.setType("tracker");
-      }
+  }
 
     // - place in det
     // inner
@@ -255,16 +263,16 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
             dd4hep::Position(0,0,0));
     dd4hep::PlacedVolume phv = envelope.placeVolume(det_vol,transform);
     // - place wall
-//    dd4hep::PlacedVolume wall_phy;
+    dd4hep::PlacedVolume wall_phy;
     for(int i=0; i<4; i++) {
-       dd4hep::Tube wall_solid(wall_rmin[i],wall_rmax[i],chamber_length*0.5);
+       dd4hep::Tube wall_solid(wall_rmin[i],wall_rmax[i],chamber_half_length);
        dd4hep::Volume wall_vol(det_name+"_wall_vol",wall_solid,wall_mat);
        wall_vol.setVisAttributes(theDetector,"VisibleGreen");
-       dd4hep::PlacedVolume wall_phy = envelope.placeVolume(wall_vol,transform);
+       wall_phy = envelope.placeVolume(wall_vol,transform);
     }
 
     // - place Endcap
-    double endcap_pos[2] = {chamber_length*0.5+Endcap_z*0.5,-chamber_length*0.5-Endcap_z*0.5};
+    double endcap_pos[2] = {chamber_half_length+Endcap_z*0.5,-chamber_half_length-Endcap_z*0.5};
     dd4hep::PlacedVolume endcap_phy;
     for(int i=0; i<2; i++) {
         dd4hep::Transform3D Endcap_transform(dd4hep::Rotation3D(),dd4hep::Position(0,0,endcap_pos[i]));
@@ -282,4 +290,4 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
 
 }
 
-DECLARE_DETELEMENT(DriftChamber, create_detector);
+DECLARE_DETELEMENT(DriftChamber, create_detector)
diff --git a/Detector/DetSegmentation/include/DetSegmentation/GridDriftChamber.h b/Detector/DetSegmentation/include/DetSegmentation/GridDriftChamber.h
index 82a4e8f041b4a9934977fb4943b69a782fc4b37e..f8854d51685eeb122a9a3bfbd183bc194442fdf9 100644
--- a/Detector/DetSegmentation/include/DetSegmentation/GridDriftChamber.h
+++ b/Detector/DetSegmentation/include/DetSegmentation/GridDriftChamber.h
@@ -30,6 +30,20 @@ typedef struct Layer
    }
  } LAYER;
 
+typedef struct CID
+ {
+   int chamberID;
+   int layerID;
+//   CID(){}
+   CID(int i, int j): chamberID(i),layerID(j){}
+   // the operator < defines the operation used in map
+   friend bool operator < (const CID &c1, const CID &c2);
+ } vID;
+
+inline bool operator < (const struct CID &c1, const struct CID &c2) {
+    return c1.chamberID < c2.chamberID || (c1.chamberID == c2.chamberID && c1.layerID < c2.layerID);
+}
+
 namespace dd4hep {
 namespace DDSegmentation {
 class GridDriftChamber : public Segmentation {
@@ -42,6 +56,7 @@ public:
   virtual ~GridDriftChamber() = default;
 
   virtual Vector3D position(const CellID& aCellID) const;
+//  virtual int LayerID(const Vector3D& aGlobalPosition) const;
   virtual CellID cellID(const Vector3D& aLocalPosition, const Vector3D& aGlobalPosition,
                         const VolumeID& aVolumeID) const;
   virtual double distanceTrackWire(const CellID& cID, const TVector3& hit_start, const TVector3& hit_end) const;
@@ -51,7 +66,20 @@ public:
   inline double cell_Size() const { return m_cellSize; }
   inline double epsilon0() const { return m_epsilon0; }
   inline double detectorLength() const { return m_detectorLength; }
+  inline double DC_inner_rbegin() const { return m_DC_inner_rbegin; }
+  inline double DC_inner_rend() const { return m_DC_inner_rend; }
+  inline double DC_outer_rbegin() const { return m_DC_outer_rbegin; }
+  inline double DC_outer_rend() const { return m_DC_outer_rend; }
+  inline double DC_inner_rmin() const { return m_DC_inner_rmin; }
+  inline double DC_inner_rmax() const { return m_DC_inner_rmax; }
+  inline double DC_outer_rmin() const { return m_DC_outer_rmin; }
+  inline double DC_outer_rmax() const { return m_DC_outer_rmax; }
+  inline double safe_distance() const { return m_safe_distance; }
+  inline double layer_width() const { return m_layer_width; }
+  inline int DC_inner_layer_number() const { return m_DC_inner_layer_number; }
+  inline int DC_outer_layer_number() const { return m_DC_outer_layer_number; }
   inline const std::string& fieldNamePhi() const { return m_phiID; }
+  inline const std::string& Layerid() const { return layer_id; }
   // Setters
 
   inline double phiFromXY(const Vector3D& aposition) const {
@@ -60,13 +88,15 @@ public:
     return hit_phi;
   }
 
-  inline void setGeomParams(int layer, double layerphi, double R, double eps, double offset) {
-    layer_params.insert(std::pair<int,LAYER>(layer,LAYER(layerphi,R,eps,offset)));
+  inline void setGeomParams(int chamberID, int layerID, double layerphi, double R, double eps, double offset) {
+
+    layer_params.insert(std::pair<vID,LAYER>(vID(chamberID,layerID),LAYER(layerphi,R,eps,offset)));
+
    }
 
-  inline void setWiresInLayer(int layer, int numWires)
+  inline void setWiresInLayer(int chamber, int layer, int numWires)
   {
-    updateParams(layer);
+    updateParams(chamber,layer);
     for (int i = 0; i<numWires; ++i) {
 
       auto phi_start = _currentLayerphi * (i+0.5) + m_offset;
@@ -92,36 +122,33 @@ public:
 //    return w;
 //  }
 
-  void updateParams(int layer)  const{
+  void updateParams(int chamber, int layer)  const{
     auto it_end = layer_params.cend();
     --it_end;
-    double layerphi = it_end->second.layerphi;
-    double radius = it_end->second.R;
-    double eps = it_end->second.eps;
-    double offset = it_end->second.offset;
+    double LayerPhi = it_end->second.layerphi;
+    double Radius = it_end->second.R;
+    double Eps = it_end->second.eps;
+    double Offset = it_end->second.offset;
 
-    auto map_it = layer_params.find(layer);
+    CID v1(chamber,layer);
+    auto map_it = layer_params.find(v1);
     if (map_it != layer_params.cend()) {
-     layerphi = map_it->second.layerphi;
-     radius = map_it->second.R;
-     eps = map_it->second.eps;
-     offset = map_it->second.offset;
-    }
-    _currentLayerphi = layerphi;
-    _currentRadius = radius;
-    m_epsilon = eps;
-    m_offset = offset;
+     LayerPhi = map_it->second.layerphi;
+     Radius = map_it->second.R;
+     Eps = map_it->second.eps;
+     Offset = map_it->second.offset;
+    } else { std::cout << " Sorry, pair with  key " << layer << " not in map" << std::endl; }
+
+    _currentLayerphi = LayerPhi;
+    _currentRadius = Radius;
+    m_epsilon = Eps;
+    m_offset = Offset;
  }
 
-// inline double returnAlpha() const {
-//   double alpha = 2 * std::asin(m_detectorLength * std::tan(m_epsilon0)/(2 * _currentRadius));
-//   return alpha;
-// }
-
 protected:
 
   double phi(const CellID& cID) const;
-  std::map<int,LAYER> layer_params; // <layer, {layerphi, R, eps, offset}>
+  std::map<vID,LAYER> layer_params; // <{chamberID,layerID}, {layerphi, R, eps, offset}>
   std::map<int, std::vector<std::pair<TVector3, TVector3> >> m_wiresPositions; // < layer, vec<WireMidpoint, WireDirection> >
 
   inline TVector3 returnWirePosition(double angle, int sign) const {
@@ -140,7 +167,21 @@ protected:
   double m_cellSize;
   double m_epsilon0;
   double m_detectorLength;
+  double m_DC_inner_rbegin;
+  double m_DC_inner_rend;
+  double m_DC_outer_rbegin;
+  double m_DC_outer_rend;
+  double m_DC_inner_rmin;
+  double m_DC_inner_rmax;
+  double m_DC_outer_rmin;
+  double m_DC_outer_rmax;
+  double m_layer_width;
+  double m_safe_distance;
+  int m_DC_inner_layer_number;
+  int m_DC_outer_layer_number;
+
   std::string m_phiID;
+  std::string layer_id;
 
   // Current parameters of the layer: sizePhi
   mutable double _currentLayerphi;
diff --git a/Detector/DetSegmentation/src/GridDriftChamber.cpp b/Detector/DetSegmentation/src/GridDriftChamber.cpp
index d4facaaea91861aea6166c8d117d8823178f3b4f..fae415611a0f6b4a97d05d6f05de3885a146ed6a 100644
--- a/Detector/DetSegmentation/src/GridDriftChamber.cpp
+++ b/Detector/DetSegmentation/src/GridDriftChamber.cpp
@@ -13,6 +13,11 @@ GridDriftChamber::GridDriftChamber(const std::string& cellEncoding) : Segmentati
   registerParameter("cell_size", "cell size", m_cellSize, 0., SegmentationParameter::LengthUnit);
   registerParameter("detector_length", "Length of the wire", m_detectorLength, 1., SegmentationParameter::LengthUnit);
   registerIdentifier("identifier_phi", "Cell ID identifier for phi", m_phiID, "cellID");
+  registerIdentifier("layerID", "layer id", layer_id, "layer");
+  registerParameter("DC_inner_rmin", "DC_inner_rmin", m_DC_inner_rmin, 0., SegmentationParameter::LengthUnit);
+  registerParameter("DC_inner_rmax", "DC_inner_rmax", m_DC_inner_rmax, 0., SegmentationParameter::LengthUnit);
+  registerParameter("DC_outer_rmin", "DC_outer_rmin", m_DC_outer_rmin, 0., SegmentationParameter::LengthUnit);
+  registerParameter("DC_outer_rmax", "DC_outer_rmax", m_DC_outer_rmax, 0., SegmentationParameter::LengthUnit);
 }
 
 GridDriftChamber::GridDriftChamber(const BitFieldCoder* decoder) : Segmentation(decoder) {
@@ -24,6 +29,19 @@ GridDriftChamber::GridDriftChamber(const BitFieldCoder* decoder) : Segmentation(
   registerParameter("epsilon0", "epsilon", m_epsilon0, 0., SegmentationParameter::AngleUnit, true);
   registerParameter("detector_length", "Length of the wire", m_detectorLength, 1., SegmentationParameter::LengthUnit);
   registerIdentifier("identifier_phi", "Cell ID identifier for phi", m_phiID, "cellID");
+  registerIdentifier("layerID", "layer id", layer_id, "layer");
+  registerParameter("DC_inner_rbegin", "DC_inner_rbegin", m_DC_inner_rbegin, 0., SegmentationParameter::LengthUnit);
+  registerParameter("DC_inner_rend", "DC_inner_rend", m_DC_inner_rend, 0., SegmentationParameter::LengthUnit);
+  registerParameter("DC_outer_rbegin", "DC_outer_rbegin", m_DC_outer_rbegin, 0., SegmentationParameter::LengthUnit);
+  registerParameter("DC_outer_rend", "DC_outer_rend", m_DC_outer_rend, 0., SegmentationParameter::LengthUnit);
+  registerParameter("DC_inner_rmin", "DC_inner_rmin", m_DC_inner_rmin, 0., SegmentationParameter::LengthUnit);
+  registerParameter("DC_inner_rmax", "DC_inner_rmax", m_DC_inner_rmax, 0., SegmentationParameter::LengthUnit);
+  registerParameter("DC_outer_rmin", "DC_outer_rmin", m_DC_outer_rmin, 0., SegmentationParameter::LengthUnit);
+  registerParameter("DC_outer_rmax", "DC_outer_rmax", m_DC_outer_rmax, 0., SegmentationParameter::LengthUnit);
+  registerParameter("safe_distance", "safe_distance", m_safe_distance, 0., SegmentationParameter::LengthUnit);
+  registerParameter("layer_width", "layer_width", m_layer_width, 0., SegmentationParameter::LengthUnit);
+  registerParameter("DC_inner_layer_number", "DC_inner_layer_number", m_DC_inner_layer_number, 0,SegmentationParameter::LengthUnit);
+  registerParameter("DC_outer_layer_number", "DC_outer_layer_number", m_DC_outer_layer_number, 0, SegmentationParameter::LengthUnit);
 }
 
 Vector3D GridDriftChamber::position(const CellID& /*cID*/) const {
@@ -31,17 +49,38 @@ Vector3D GridDriftChamber::position(const CellID& /*cID*/) const {
   return cellPosition;
 }
 
-
 CellID GridDriftChamber::cellID(const Vector3D& /*localPosition*/, const Vector3D& globalPosition,
                                 const VolumeID& vID) const {
 
   CellID cID = vID;
-  unsigned int layerID = _decoder->get(vID, "layer");
-  updateParams(layerID);
 
-  double phi_hit = phiFromXY(globalPosition);
+  int chamberID = _decoder->get(cID, "chamber");
+
   double posx = globalPosition.X;
   double posy = globalPosition.Y;
+  double radius = sqrt(posx*posx+posy*posy);
+
+  double DC_layerdelta = m_layer_width;
+
+  int layerid;
+  if( radius<= m_DC_inner_rend && radius>= m_DC_inner_rbegin) {
+      layerid = floor((radius - m_DC_inner_rbegin)/DC_layerdelta);
+  } else if ( radius<= m_DC_outer_rend && radius>= m_DC_outer_rbegin ) {
+      layerid = floor((radius - m_DC_outer_rbegin)/DC_layerdelta);
+  } else if ( radius>= (m_DC_inner_rmin-m_safe_distance) && radius < m_DC_inner_rbegin) {
+      layerid = 0;
+  } else if ( radius> m_DC_inner_rend && radius <= (m_DC_inner_rmax+m_safe_distance)) {
+      layerid = m_DC_inner_layer_number-1;
+  } else if ( radius>= (m_DC_outer_rmin-m_safe_distance) && radius < m_DC_outer_rbegin) {
+      layerid = 0;
+  } else if ( radius> m_DC_outer_rend && radius <= (m_DC_outer_rmax+m_safe_distance)) {
+      layerid = m_DC_outer_layer_number-1;
+  }
+
+
+  updateParams(chamberID,layerid);
+
+  double phi_hit = phiFromXY(globalPosition);
   double offsetphi= m_offset;
   int _lphi;
 
@@ -53,17 +92,9 @@ CellID GridDriftChamber::cellID(const Vector3D& /*localPosition*/, const Vector3
   }
 
   int lphi = _lphi;
+  _decoder->set(cID, layer_id, layerid);
   _decoder->set(cID, m_phiID, lphi);
 
-
-// std::cout << "#######################################: " 
-//           <<  " offset : " << m_offset
-//           << " offsetphi: " << offsetphi
-//           << " layerID: " << layerID
-//           << " r: " << _currentRadius
-//           << " layerphi: " << _currentLayerphi
-//           << std::endl;
-
   return cID;
 }
 
@@ -75,8 +106,9 @@ double GridDriftChamber::phi(const CellID& cID) const {
 void GridDriftChamber::cellposition(const CellID& cID, TVector3& Wstart,
                                     TVector3& Wend) const {
 
+  auto chamberIndex = _decoder->get(cID, "chamber");
   auto layerIndex = _decoder->get(cID, "layer");
-  updateParams(layerIndex);
+  updateParams(chamberIndex,layerIndex);
 
   double phi_start = phi(cID);
   double phi_mid = phi_start + _currentLayerphi/2.;
@@ -91,14 +123,6 @@ void GridDriftChamber::cellposition(const CellID& cID, TVector3& Wstart,
 double GridDriftChamber::distanceTrackWire(const CellID& cID, const TVector3& hit_start,
                                            const TVector3& hit_end) const {
 
-//  auto layerIndex = _decoder->get(cID, "layer");
-//  updateParams(layerIndex);
-//
-//  double phi_start = phi(cID);
-//  double phi_end = phi_start + returnAlpha();
-
-//  TVector3 Wstart = returnWirePosition(phi_start, -1); // The default centimeter unit in DD4hep
-//  TVector3 Wend = returnWirePosition(phi_end, 1);   // The default centimeter unit in DD4hep
   TVector3 Wstart = {0,0,0};
   TVector3 Wend = {0,0,0};
   cellposition(cID,Wstart,Wend);
@@ -109,8 +133,6 @@ double GridDriftChamber::distanceTrackWire(const CellID& cID, const TVector3& hi
 
   double num = std::abs(c.Dot(a.Cross(b)));
   double denum = (a.Cross(b)).Mag();
-//  double num = (b.Cross(c)).Mag();
-//  double denum = b.Mag();
 
   double DCA = 0;
 
diff --git a/Simulation/DetSimFastModel/src/DummyFastSimG4Tool.cpp b/Simulation/DetSimFastModel/src/DummyFastSimG4Tool.cpp
index 6fa049f8c45e5754d3e833c2fcdaf1322bc0ac50..90bbe0bce7dd3253f45391128a835691f2c5403b 100644
--- a/Simulation/DetSimFastModel/src/DummyFastSimG4Tool.cpp
+++ b/Simulation/DetSimFastModel/src/DummyFastSimG4Tool.cpp
@@ -6,7 +6,7 @@
 #include "G4VFastSimulationModel.hh"
 #include "DummyFastSimG4Model.h"
 
-DECLARE_COMPONENT(DummyFastSimG4Tool);
+DECLARE_COMPONENT(DummyFastSimG4Tool)
 
 StatusCode DummyFastSimG4Tool::initialize() {
     StatusCode sc;
diff --git a/Simulation/DetSimSD/src/DriftChamberSensDetTool.cpp b/Simulation/DetSimSD/src/DriftChamberSensDetTool.cpp
index 07c7b88f450920dc6cf046cc85f1c2440fecc322..43dfa17828453c1545318eea45c0aec7e271976e 100644
--- a/Simulation/DetSimSD/src/DriftChamberSensDetTool.cpp
+++ b/Simulation/DetSimSD/src/DriftChamberSensDetTool.cpp
@@ -6,7 +6,7 @@
 
 #include "DriftChamberSensitiveDetector.h"
 
-DECLARE_COMPONENT(DriftChamberSensDetTool);
+DECLARE_COMPONENT(DriftChamberSensDetTool)
 
 StatusCode DriftChamberSensDetTool::initialize() {
     StatusCode sc;
diff --git a/Simulation/DetSimSD/src/TimeProjectionChamberSensDetTool.cpp b/Simulation/DetSimSD/src/TimeProjectionChamberSensDetTool.cpp
index 9ca7b471af8832494703c9fab48febd49e72d6df..94c1e223aa124d6f739acfa1eb2d829400148115 100644
--- a/Simulation/DetSimSD/src/TimeProjectionChamberSensDetTool.cpp
+++ b/Simulation/DetSimSD/src/TimeProjectionChamberSensDetTool.cpp
@@ -8,7 +8,7 @@
 
 #include "CLHEP/Units/SystemOfUnits.h"
 
-DECLARE_COMPONENT(TimeProjectionChamberSensDetTool);
+DECLARE_COMPONENT(TimeProjectionChamberSensDetTool)
 
 StatusCode TimeProjectionChamberSensDetTool::initialize() {
   StatusCode sc;