diff --git a/scripts/compact_geo_test2.cxx b/scripts/compact_geo_test2.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..683be9a14f09557adb8bb078139fb76a66568e77
--- /dev/null
+++ b/scripts/compact_geo_test2.cxx
@@ -0,0 +1,165 @@
+#include "UTIL/LCTOOLS.h"
+#include "UTIL/Operators.h"
+#include <UTIL/CellIDDecoder.h>
+//#include "DD4hep/LCDD.h"
+//#include "DD4hep/DD4hepUnits.h"
+//#include "DD4hep/Objects.h"
+// check directory
+#include <sys/stat.h>
+#include <TROOT.h>
+#include <TFile.h>
+#include <TH1D.h>
+#include "TMath.h"
+#include"time.h"
+#include <dirent.h>
+#include <string>
+#include <vector>
+#include <map>
+struct stat sb;
+
+std::vector<std::string> get_files_in_directory(std::string path = "data/.") {
+  std::vector<std::string> files;
+  if (stat(path.c_str(), &sb) == 0 && S_ISDIR(sb.st_mode)) { 
+    DIR*    dir;
+    dirent* pdir;
+    dir = opendir(path.c_str());
+    while( pdir = readdir(dir) ){
+        string rfile=path + "/" + pdir->d_name;
+        if (rfile.find(".slcio") != std::string::npos) 
+             files.push_back(rfile); 
+    }
+    } else {
+        cout << "Directory " << path << " does not exist!!" << endl;
+        std::exit(0); 
+        }
+    return files;
+}
+//______________________________________________________________________________
+
+
+void compact_geo_test(
+    const char* DIRNAME            = "data/electrons",
+    const char* result_file_prefix = "SID_1T",
+    const char* compact_file       = "detectors/SiD/slic/sieic3/sieic3_compact.xml")
+    //const char* compact_file       = "detectors/SiD/compact/sid_working/sidloi3_v00.xml")
+{
+
+  using namespace EVENT ;
+  using namespace UTIL;
+  using namespace IMPL ;
+
+  DD4hep::Geometry::LCDD& lcdd = DD4hep::Geometry::LCDD::getInstance();
+  lcdd.fromCompact(compact_file);
+  const double position[3]={0,0,0}; // position to calculate magnetic field at (the origin in this case)
+  double bField[3]={0,0,0}; 
+  lcdd.field().magneticField(position,bField); 
+  _Bz = bField[2]/dd4hep::tesla; 
+
+  std::cout << " Magnetic Field Bz = " << _Bz << std::endl;
+
+  TH1F * hR0   = new TH1F("hR0","R;R [mm];",100,0,1000);
+  TH1F * hZ0   = new TH1F("hZ0","Z;Z [mm];",100,-1000,1000);
+  TH2F * hZR0   = new TH2F("hZR0","ZR;Z [mm];R [mm];",100,-1000,1000,100,0,1000);
+
+  auto readout = lcdd.readout("SiTrackerBarrelHits");
+  auto seg     = readout.segmentation();
+  std::cout << " num col " << readout.numCollections() << std::endl;
+  auto id      = readout.idSpec();
+  std::cout << " id spec " << id.toString() << std::endl;
+  std::cout << " field " << id.fieldDescription() << std::endl;
+  std::cout << " decoder " << id.decoder() << std::endl;
+  auto bf = id.decoder();
+  std::cout << " barrel "   << bf->index("barrel")<<std::endl;
+  std::cout << " barrel "   << (*bf)["barrel"].name() <<std::endl;
+  std::cout << " barrel "   << (*bf)["barrel"].offset() <<std::endl;
+  std::cout << " barrel "   << (*bf)["barrel"].width() <<std::endl;
+  std::cout << " barrel "   << (*bf)["barrel"].value() <<std::endl;
+
+  int  max_files    = 2;
+  int  nEvents      = 0  ;
+  int  n_files_read = 0;
+  auto files        = get_files_in_directory(DIRNAME);
+
+  IO::LCReader* lcReader = IOIMPL::LCFactory::getInstance()->createLCReader() ;
+  EVENT::LCEvent* evt = 0 ;
+  std::string mcpType("std::vector<IMPL::MCParticleImpl*>") ;
+  std::string mcpName("MCParticle") ;
+
+  std::sort(files.begin(),files.end());
+
+  for(auto aFile : files) {
+
+    std::cout << "Opening " << aFile << '\n';
+    lcReader->open( aFile.c_str() ) ;
+    n_files_read++;
+
+    //----------- the event loop -----------
+    while( (evt = lcReader->readNextEvent()) != 0 ) {
+
+      if(nEvents%1000==0) {
+        if(nEvents==0)UTIL::LCTOOLS::dumpEvent( evt ) ;
+        std::cout << "Event " << nEvents << '\n';
+      }
+
+      IMPL::LCCollectionVec* thrown_col = (IMPL::LCCollectionVec*) evt->getCollection( "MCParticle"  ) ;
+      IMPL::LCCollectionVec* tracks_col = (IMPL::LCCollectionVec*) evt->getCollection( "Tracks"  ) ;
+      IMPL::LCCollectionVec* simtrackhits_col = (IMPL::LCCollectionVec*) evt->getCollection("SiTrackerBarrelHits") ;
+
+      //UTIL::LCTOOLS::printMCParticles( col ) ;
+
+      int nMCP    = thrown_col->getNumberOfElements() ;
+      int nTracks = tracks_col->getNumberOfElements() ;
+      bool hasOneTrack  = (nTracks==1);
+      bool hasTwoTracks = (nTracks==2);
+      int nSimTrackHits = simtrackhits_col->getNumberOfElements() ;
+
+      for(int i_track=0 ; i_track<nSimTrackHits ; ++i_track) {
+        auto  ahit = (EVENT::SimTrackerHit*) simtrackhits_col->getElementAt(i_track);
+        double hit_time  = ahit->getTime();
+        double EDep  = ahit->getEDep();
+        //std::cout << "id " << ahit->id() << std::endl;
+        //if(hit_time != 0.0) {
+        //  std::cout << " time " << hit_time << '\n';
+        //}
+        TVector3 x0(ahit->getPosition());
+        TVector3 x1(ahit->getPosition());
+        x1.Print();
+        auto cellid     = seg.cellID(
+            DD4hep::Geometry::Position(x0.x(),x0.y(),x0.z()),
+            DD4hep::Geometry::Position(x1.x(),x1.y(),x1.z()),
+            5);
+        // std::cout << " cellid " << cellid << std::endl;
+        auto pos = seg.position(cellid);
+        //std::cout << " x=" << pos.x() << ", y=" << pos.y() << ", z=" << pos.z() << std::endl;
+        //std::cout << " R   = " << pos.R() << std::endl;
+        //std::cout << " rho = " << pos.Rho() << std::endl;
+        hR0->Fill(pos.R());
+        hZR0->Fill(pos.Z(),pos.R());
+
+        //if(nTracks>1) {
+        //  std::cout <<  (*track) << std::endl;
+        //}
+      }
+      nEvents++;
+    }
+    // -------- end of event loop -----------
+
+    lcReader->close() ;
+
+    if(n_files_read >= max_files) break;
+  }
+
+      //auto bf      = seg.decoder();
+      //std::cout << bf->valueString() << std::endl;
+
+      //auto pos     = seg.position(1000);
+      //std::cout << " x=" << pos.x() << ", y=" << pos.y() << ", z=" << pos.z() << std::endl;
+
+  TCanvas * c = new TCanvas();
+  hR0->Draw();
+
+  c = new TCanvas();
+  hZR0->Draw("cols");
+  return;
+
+}