diff --git a/gem_tracker.xml b/gem_tracker.xml
index 6c72f93f1cc494b983fd3cd2de9026ef9b5e511a..578252a0c7800c6b791ffe891eaf18edff31c05e 100644
--- a/gem_tracker.xml
+++ b/gem_tracker.xml
@@ -82,8 +82,8 @@
       <layer id="1" z="-100 *cm" inner_r="40*cm"  outer_r="120*cm"   phi0_offset="0.0*deg" />
       <layer id="2" z="-80 *cm"  inner_r="30*cm"  outer_r="90*cm"    phi0_offset="0.0*deg" />
       <layer id="3" z="-60 *cm"  inner_r="20*cm"  outer_r="70*cm"    phi0_offset="0.0*deg" />
-      <layer id="4" z="-40 *cm"  inner_r="20*cm"  outer_r="50.0*cm"  phi0_offset="0.0*deg" />
-      <layer id="5" z=" 40 *cm"  inner_r="20*cm"  outer_r="50.0*cm" phi0_offset="0.0*deg" />
+      <layer id="4" z="-40 *cm"  inner_r="10*cm"  outer_r="20.0*cm"  phi0_offset="0.0*deg" />
+      <layer id="5" z=" 40 *cm"  inner_r="10*cm"  outer_r="20.0*cm" phi0_offset="0.0*deg" />
       <layer id="6" z=" 60 *cm"  inner_r="25*cm"  outer_r="70.0*cm" phi0_offset="0.0*deg" />
       <layer id="7" z=" 80 *cm"  inner_r="30*cm"  outer_r="90.0*cm" phi0_offset="0.0*deg" />
       <layer id="8" z="100 *cm"  inner_r="40*cm"  outer_r="100.0*cm" phi0_offset="0.0*deg" />
diff --git a/gps.mac b/gps.mac
index 90e9bbfba76a238cbfc1a893d9649dd9c496f4af..e8d141d167f7bf5ad379995210092915aa0ac5a6 100644
--- a/gps.mac
+++ b/gps.mac
@@ -18,7 +18,7 @@
 
 #/gps/direction 0 0.1 1.0 
 /gps/ang/type iso
-/gps/ang/mintheta  30 degree
-/gps/ang/maxtheta  160 degree
+/gps/ang/mintheta  10 degree
+/gps/ang/maxtheta  170 degree
 
 /run/beamOn 1000
diff --git a/scripts/tutorial3_id_spec.cxx b/scripts/tutorial3_id_spec.cxx
index 3e95d71fbf191ac61957a00624468c8ea8b90dba..6c5a4f91a84dc22f5312d66f1c752f22ad84d96a 100644
--- a/scripts/tutorial3_id_spec.cxx
+++ b/scripts/tutorial3_id_spec.cxx
@@ -49,8 +49,8 @@ void tutorial3_id_spec(const char* fname = "gem_tracker_sim.root") {
   detector.fromCompact("gem_tracker.xml");
   dd4hep::rec::CellIDPositionConverter cellid_converter(detector);
 
-  fmt::print("--------------------------");
-  fmt::print("ID specification:");
+  fmt::print("--------------------------\n");
+  fmt::print("ID specification:\n");
   auto decoder = detector.readout("GEMTrackerHits").idSpec().decoder();
   fmt::print("{}\n", decoder->fieldDescription());
   auto layer_index = decoder->index("layer");
@@ -59,8 +59,15 @@ void tutorial3_id_spec(const char* fname = "gem_tracker_sim.root") {
   // Simple lambda to define nhits branch
   auto nhits = [](const std::vector<dd4pod::TrackerHitData>& evt) { return (int)evt.size(); };
 
+  auto all_z_pos = [&](const std::vector<dd4pod::TrackerHitData>& hits) {
+    std::vector<double> result;
+    for (const auto& h : hits) {
+      result.push_back(h.position.z / 10.0);
+    }
+    return result;
+  };
   auto local_position = [&](const std::vector<dd4pod::TrackerHitData>& hits) {
-    std::vector<std::array<double, 2>> result;
+    std::vector<std::array<double, 3>> result;
     for (const auto& h : hits) {
       // The actual hit position:
       auto pos0 = (h.position);
@@ -69,32 +76,37 @@ void tutorial3_id_spec(const char* fname = "gem_tracker_sim.root") {
       // geometry information in a flexible way.
       // The segmentation hit postion:
       auto pos1 = cellid_converter.position(h.cellID);
-      fmt::print("              Hit Position : {},{},{}\n", pos0.x / 10.0, pos0.y / 10.0, pos0.z / 10.0);
-      fmt::print("Segmentation-Cell Position : {},{},{}\n", pos1.x(), pos1.y(), pos1.z());
-
-      auto context = cellid_converter.findContext( h.cellID ) ;
-      dd4hep::Readout r  = cellid_converter.findReadout( context->element ) ;
-      dd4hep::Segmentation seg = r.segmentation() ;
-      auto cell_dim = seg.cellDimensions(h.cellID);
-      std::cout << " dim ";
-      for(const auto& dim : cell_dim) {
-        std::cout << dim << ", ";
+      //fmt::print("              Hit Position : {},{},{}\n", pos0.x / 10.0, pos0.y / 10.0, pos0.z / 10.0);
+      //fmt::print("Segmentation-Cell Position : {},{},{}\n", pos1.x(), pos1.y(), pos1.z());
+
+      auto detector_layer = decoder->get(h.cellID, layer_index);
+      if ((detector_layer !=4 ) && (detector_layer !=5 )) {
+        continue;
       }
-      std::cout << "\n";
 
-      result.push_back({pos0.x / 10.0 - pos1.x(), pos0.y / 10.0 - pos1.y()});
+      //auto context = cellid_converter.findContext( h.cellID ) ;
+      //dd4hep::Readout r  = cellid_converter.findReadout( context->element ) ;
+      //dd4hep::Segmentation seg = r.segmentation() ;
+      //auto cell_dim = seg.cellDimensions(h.cellID);
+      //std::cout << " dim ";
+      //for(const auto& dim : cell_dim) {
+      //  std::cout << dim << ", ";
+      //}
+      //std::cout << "\n";
+
+      result.push_back({pos0.x / 10.0 - pos1.x(), pos0.y / 10.0 - pos1.y(),pos0.z / 10.0});
     }
     return result;
   };
 
-  auto x_pos = [&](const std::vector<std::array<double, 2>>& xypos) {
+  auto x_pos = [&](const std::vector<std::array<double, 3>>& xypos) {
     std::vector<double> result;
     for (const auto& h : xypos) {
       result.push_back(h.at(0));
     }
     return result;
   };
-  auto y_pos = [&](const std::vector<std::array<double, 2>>& xypos) {
+  auto y_pos = [&](const std::vector<std::array<double, 3>>& xypos) {
     std::vector<double> result;
     for (auto h : xypos) {
       result.push_back(h.at(1));
@@ -102,24 +114,31 @@ void tutorial3_id_spec(const char* fname = "gem_tracker_sim.root") {
     return result;
   };
 
+  auto z_pos = [&](const std::vector<std::array<double, 3>>& xypos) {
+    std::vector<double> result;
+    for (auto h : xypos) {
+      result.push_back(h.at(2));
+    }
+    return result;
+  };
   auto d1 = d0.Define("nhits", nhits, {"GEMTrackerHits"})
-                //.Filter([=](const std::vector<dd4pod::TrackerHitData>& hits) {
-                //      for (auto h : hits) {
-                //        auto pos = ROOT::Math::XYZVector(h.position.x,h.position.y,h.position.z);
-                //        if ((pos.r() > 100.0) && (std::abs(pos.phi()-M_PI/2.0)< M_PI/6)) {
-                //          return true;
-                //        }
-                //      }
-                //      return false;
-                //    },
-                //    {"GEMTrackerHits"})
+                .Define("all_z_pos", all_z_pos, {"GEMTrackerHits"})
                 .Define("xy_hit_pos", local_position, {"GEMTrackerHits"})
                 .Define("x_pos", x_pos, {"xy_hit_pos"})
-                .Define("y_pos", y_pos, {"xy_hit_pos"});
+                .Define("y_pos", y_pos, {"xy_hit_pos"})
+                .Define("z_pos", z_pos, {"xy_hit_pos"});
 
-  auto h_local_pos = d1.Histo2D(TH2D("h_local_pos", ";x [cm]; y [cm] ", 100, -5.0, 5.0, 100, -5.0, 5.0), "x_pos", "y_pos");
+  auto h_local_pos   = d1.Histo2D(TH2D("h_local_pos", ";x [cm]; y [cm] ", 100, -5.0, 5.0, 100, -5.0, 5.0), "x_pos", "y_pos");
+  auto h_z_position0 = d1.Histo1D(TH1D("h_z_position0", ";z [cm]", 55, -110.0, 110.0), "all_z_pos");
+  auto h_z_position  = d1.Histo1D(TH1D("h_z_position", ";z [cm]",   55, -110.0, 110.0), "z_pos");
 
   TCanvas* c = new TCanvas();
   h_local_pos->DrawClone("colz");
   c->SaveAs("results/hit_position.png");
+
+  h_z_position0->SetLineColor(1);
+  h_z_position0->DrawClone();
+  h_z_position->SetLineColor(2);
+  h_z_position->DrawClone("same");
+  c->SaveAs("results/z_position.png");
 }