diff --git a/benchmarks/tracking_performances/NhitsvsEta_ePIC.C b/benchmarks/tracking_performances/NhitsvsEta_ePIC.C
new file mode 100644
index 0000000000000000000000000000000000000000..6eaa3395061ad359bdb044487a541762a183b9a2
--- /dev/null
+++ b/benchmarks/tracking_performances/NhitsvsEta_ePIC.C
@@ -0,0 +1,241 @@
+// Code to draw average number of hits vs eta at the generated level
+// Shyam Kumar; shyam055119@gmail.com; shyam.kumar@ba.infn.it
+void NhitsvsEta_ePIC(Double_t mom=0.5)
+  {
+  
+   gStyle->SetPalette(1);
+   gStyle->SetOptTitle(1);
+   gStyle->SetTitleOffset(.85,"X");gStyle->SetTitleOffset(1.0,"Y");
+   gStyle->SetTitleSize(.05,"X");gStyle->SetTitleSize(.05,"Y");
+   gStyle->SetLabelSize(.04,"X");gStyle->SetLabelSize(.04,"Y");
+   gStyle->SetHistLineWidth(2);
+   gStyle->SetOptFit(1);
+   gStyle->SetOptStat(0);
+   
+     // MC Track Properties
+    TFile* file = new TFile(Form("./sim%1.1f.edm4hep.root",mom)); // Tree with tracks and hits
+    TTreeReader myReader("events", file); // name of tree and file
+		
+   TTreeReaderArray<Float_t> charge(myReader, "MCParticles.charge"); 
+   TTreeReaderArray<Double_t> vx_mc(myReader, "MCParticles.vertex.x"); 
+   TTreeReaderArray<Double_t> vy_mc(myReader, "MCParticles.vertex.y"); 
+   TTreeReaderArray<Double_t> vz_mc(myReader, "MCParticles.vertex.z"); 
+   TTreeReaderArray<Float_t> px_mc(myReader, "MCParticles.momentum.x"); 
+   TTreeReaderArray<Float_t> py_mc(myReader, "MCParticles.momentum.y"); 
+   TTreeReaderArray<Float_t> pz_mc(myReader, "MCParticles.momentum.z"); 
+   TTreeReaderArray<Int_t> status(myReader, "MCParticles.generatorStatus"); 
+   TTreeReaderArray<Int_t> pdg(myReader, "MCParticles.PDG"); 
+
+  TTreeReaderArray<Double_t> *vtx_si_x, *vtx_si_y, *vtx_si_z;
+  TTreeReaderArray<Double_t> *barrel_si_x, *barrel_si_y, *barrel_si_z; 
+  TTreeReaderArray<Double_t> *disks_si_x, *disks_si_y, *disks_si_z; 
+  TTreeReaderArray<Double_t> *endcap_etof_x, *endcap_etof_y, *endcap_etof_z;
+  TTreeReaderArray<Double_t> *barrel_mm_x, *barrel_mm_y, *barrel_mm_z;
+  TTreeReaderArray<Double_t> *barrel_tof_x, *barrel_tof_y, *barrel_tof_z;
+  TTreeReaderArray<Double_t> *out_mm_x, *out_mm_y, *out_mm_z; 
+  TTreeReaderArray<Double_t> *endcap_fmm_x, *endcap_fmm_y, *endcap_fmm_z; 
+  TTreeReaderArray<Double_t> *endcap_bmm_x, *endcap_bmm_y, *endcap_bmm_z; 
+
+  // check the quality flag for hits from primary tracks
+  TTreeReaderArray<Int_t> *vtx_si_quality, *barrel_si_quality, *disks_si_quality, *endcap_etof_quality, *barrel_mm_quality, *barrel_tof_quality, *out_mm_quality, *endcap_fmm_quality,      *endcap_bmm_quality; 	
+
+
+   // Hits on detectors
+   // SVT IB
+   vtx_si_x = new TTreeReaderArray<Double_t>(myReader, "VertexBarrelHits.position.x"); 
+   vtx_si_y = new TTreeReaderArray<Double_t>(myReader, "VertexBarrelHits.position.y"); 
+   vtx_si_z = new TTreeReaderArray<Double_t>(myReader, "VertexBarrelHits.position.z"); 
+   vtx_si_quality = new TTreeReaderArray<Int_t>(myReader, "VertexBarrelHits.quality");
+   
+   // SVT OB
+   barrel_si_x = new TTreeReaderArray<Double_t>(myReader, "SiBarrelHits.position.x"); 
+   barrel_si_y = new TTreeReaderArray<Double_t>(myReader, "SiBarrelHits.position.y"); 
+   barrel_si_z = new TTreeReaderArray<Double_t>(myReader, "SiBarrelHits.position.z");
+   barrel_si_quality = new TTreeReaderArray<Int_t>(myReader, "SiBarrelHits.quality");
+   
+   // SVT Disks
+   disks_si_x = new TTreeReaderArray<Double_t>(myReader, "TrackerEndcapHits.position.x"); 
+   disks_si_y = new TTreeReaderArray<Double_t>(myReader, "TrackerEndcapHits.position.y"); 
+   disks_si_z = new TTreeReaderArray<Double_t>(myReader, "TrackerEndcapHits.position.z");
+   disks_si_quality = new TTreeReaderArray<Int_t>(myReader, "TrackerEndcapHits.quality");
+   
+   // ETOF Hits
+   endcap_etof_x = new TTreeReaderArray<Double_t>(myReader, "TOFEndcapHits.position.x"); 
+   endcap_etof_y = new TTreeReaderArray<Double_t>(myReader, "TOFEndcapHits.position.y"); 
+   endcap_etof_z = new TTreeReaderArray<Double_t>(myReader, "TOFEndcapHits.position.z");
+   endcap_etof_quality = new TTreeReaderArray<Int_t>(myReader, "TOFEndcapHits.quality"); 
+    
+   // Inner MPGD
+   barrel_mm_x = new TTreeReaderArray<Double_t>(myReader, "MPGDBarrelHits.position.x"); 
+   barrel_mm_y = new TTreeReaderArray<Double_t>(myReader, "MPGDBarrelHits.position.y"); 
+   barrel_mm_z = new TTreeReaderArray<Double_t>(myReader, "MPGDBarrelHits.position.z");
+   barrel_mm_quality = new TTreeReaderArray<Int_t>(myReader, "MPGDBarrelHits.quality");  
+   
+   // BarrelTOF
+   barrel_tof_x = new TTreeReaderArray<Double_t>(myReader, "TOFBarrelHits.position.x"); 
+   barrel_tof_y = new TTreeReaderArray<Double_t>(myReader, "TOFBarrelHits.position.y"); 
+   barrel_tof_z = new TTreeReaderArray<Double_t>(myReader, "TOFBarrelHits.position.z");
+   barrel_tof_quality = new TTreeReaderArray<Int_t>(myReader, "TOFBarrelHits.quality");  
+   
+    //Outer MPGD Hits
+   out_mm_x = new TTreeReaderArray<Double_t>(myReader, "OuterMPGDBarrelHits.position.x"); 
+   out_mm_y = new TTreeReaderArray<Double_t>(myReader, "OuterMPGDBarrelHits.position.y"); 
+   out_mm_z = new TTreeReaderArray<Double_t>(myReader, "OuterMPGDBarrelHits.position.z");
+   out_mm_quality = new TTreeReaderArray<Int_t>(myReader, "OuterMPGDBarrelHits.quality");
+   
+    //Forward MPGD 
+   endcap_fmm_x = new TTreeReaderArray<Double_t>(myReader, "ForwardMPGDEndcapHits.position.x"); 
+   endcap_fmm_y = new TTreeReaderArray<Double_t>(myReader, "ForwardMPGDEndcapHits.position.y"); 
+   endcap_fmm_z = new TTreeReaderArray<Double_t>(myReader, "ForwardMPGDEndcapHits.position.z");
+   endcap_fmm_quality = new TTreeReaderArray<Int_t>(myReader, "ForwardMPGDEndcapHits.quality");    
+   
+   //Backward MPGD 
+   endcap_bmm_x = new TTreeReaderArray<Double_t>(myReader, "BackwardMPGDEndcapHits.position.x"); 
+   endcap_bmm_y = new TTreeReaderArray<Double_t>(myReader, "BackwardMPGDEndcapHits.position.y"); 
+   endcap_bmm_z = new TTreeReaderArray<Double_t>(myReader, "BackwardMPGDEndcapHits.position.z");
+   endcap_bmm_quality = new TTreeReaderArray<Int_t>(myReader, "BackwardMPGDEndcapHits.quality"); 
+        
+
+   Double_t etamc = 0.; 
+   int iEvent=-1; 
+   
+   TCanvas * c1 = new TCanvas("c1","coutput",1400,1000);
+   c1->SetMargin(0.10, 0.05 ,0.1,0.07);
+   c1->SetGridx();
+   c1->SetGridy();
+  
+  TProfile* hits = new TProfile("hits","Nhits (#theta)",70,-3.5,3.5); 
+  hits->SetTitle(Form("p = %1.1f GeV/c;#eta_{mc};Nhits",mom));
+  hits->GetXaxis()->CenterTitle();
+  hits->GetYaxis()->CenterTitle();
+  hits->SetMinimum(0.);
+  
+    std::vector<TVector3> hitPos; // The ePIC tracker
+    double epsilon = 1.0e-5;
+    bool debug = true;
+    int nhits_SVTIB, nhits_SVTOB, nhits_InMPGD, nhits_BTOF, nhits_OutMPGD, nhits_SVTDisks, nhits_FwdMPGDDisks, nhits_BwdMPGDDisks, nhits_ETOF;
+    
+     while (myReader.Next()) 
+     {
+      hitPos.clear(); 
+      iEvent++;
+      printf("<--------------------Event No. %d---------------------> \n",iEvent);      
+      // Generated primary track
+      if (charge.GetSize()>1) continue; // skip event for larger than 1 tracks
+      Double_t eta_Track = 100.; // set it ouside from -3.5 to 3.5      
+      Double_t pmc = 0.;
+      for (int j = 0; j < charge.GetSize(); ++j){
+      
+      if (status[j] !=1) continue;
+      pmc = sqrt(px_mc[j]*px_mc[j]+py_mc[j]*py_mc[j]+pz_mc[j]*pz_mc[j]);   
+      Double_t pzmc = pz_mc[j];
+      Double_t etamc = -1.0*TMath::Log(TMath::Tan((TMath::ACos(pzmc/pmc))/2));
+      eta_Track = etamc;
+      Double_t particle = pdg[j];
+      }
+      if (fabs(eta_Track)>3.5) continue; //outside tracker acceptance
+      // Associated hits with the primary track of momentum (mom)
+      if (fabs(pmc-mom)> epsilon) continue; 
+    //  if (eta_Track<3.4) continue; // Debug for the hits in a given eta range
+      printf("Eta of the generated track: %f, Momentum (GeV/c): %f \n",eta_Track,pmc);
+     // ePIC SVT IB Tracker
+     for (int j = 0; j < vtx_si_x->GetSize(); ++j){
+       Double_t xhit = vtx_si_x->At(j); Double_t yhit = vtx_si_y->At(j); Double_t zhit = vtx_si_z->At(j);
+       Int_t quality = vtx_si_quality->At(j);
+       if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit));
+     }
+     nhits_SVTIB =  hitPos.size(); hitPos.clear();
+     if (debug)  printf("SVT IB Associated hits: %d \n",nhits_SVTIB);
+     
+     // ePIC SVT OB Tracker
+     for (int j = 0; j < barrel_si_x->GetSize(); ++j){
+       Double_t xhit = barrel_si_x->At(j); Double_t yhit = barrel_si_y->At(j); Double_t zhit = barrel_si_z->At(j);
+       Int_t quality = barrel_si_quality->At(j); 
+       if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit));
+     }
+     nhits_SVTOB =  hitPos.size(); hitPos.clear();
+     if (debug)  printf("SVT OB Associated hits: %d \n",nhits_SVTOB);  
+    
+    // Inner MPGD Tracker
+    for (int j = 0; j < barrel_mm_x->GetSize(); ++j){
+      Double_t xhit = barrel_mm_x->At(j); Double_t yhit = barrel_mm_y->At(j); Double_t zhit = barrel_mm_z->At(j);
+      Int_t quality = barrel_mm_quality->At(j); 
+      if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit));
+    }
+     nhits_InMPGD =  hitPos.size(); hitPos.clear();
+     if (debug)  printf("Inner MPGD Associated hits: %d \n",nhits_InMPGD);
+      
+    // Outer MPGD Tracker
+    for (int j = 0; j < out_mm_x->GetSize(); ++j){
+      Double_t xhit = out_mm_x->At(j); Double_t yhit = out_mm_y->At(j); Double_t zhit = out_mm_z->At(j);
+      Int_t quality = out_mm_quality->At(j);    
+      if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit)); 
+    }
+     nhits_OutMPGD =  hitPos.size(); hitPos.clear();
+     if (debug)  printf("Outer MPGD Associated hits: %d \n",nhits_OutMPGD);
+         
+    // BTOF Tracker
+    for (int j = 0; j < barrel_tof_x->GetSize(); ++j){
+      Double_t xhit = barrel_tof_x->At(j); Double_t yhit = barrel_tof_y->At(j); Double_t zhit = barrel_tof_z->At(j);
+      Int_t quality = barrel_tof_quality->At(j); 
+      if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit)); 
+    }
+    
+     nhits_BTOF =  hitPos.size(); hitPos.clear();
+     if (debug)  printf("BTOF Associated hits: %d \n",nhits_BTOF);
+   
+    // ePIC SVT Disks Hits
+    for (int j = 0; j < disks_si_x->GetSize(); ++j){
+      Int_t quality = disks_si_quality->At(j); 
+      Double_t xhit = disks_si_x->At(j); Double_t yhit = disks_si_y->At(j); Double_t zhit = disks_si_z->At(j);
+      if (quality==0 && zhit>0) hitPos.push_back(TVector3(xhit,yhit,zhit));
+      else if (quality==0 && zhit<0) hitPos.push_back(TVector3(xhit,yhit,zhit));      
+    }
+    
+     nhits_SVTDisks =  hitPos.size(); hitPos.clear();
+     if (debug)  printf("SVT Disks Associated hits: %d \n",nhits_SVTDisks);
+    
+     // ETOF Tracker (Forward)
+    for (int j = 0; j < endcap_etof_x->GetSize(); ++j){
+    Double_t xhit = endcap_etof_x->At(j); Double_t yhit = endcap_etof_y->At(j); Double_t zhit = endcap_etof_z->At(j);
+    Int_t quality = endcap_etof_quality->At(j);    
+    if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit));
+    }  
+    
+     nhits_ETOF =  hitPos.size(); hitPos.clear();
+     if (debug)  printf("ETOF Associated hits: %d \n",nhits_ETOF);
+     
+     // Forward MPGD
+    for (int j = 0; j < endcap_fmm_x->GetSize(); ++j){
+    Double_t xhit = endcap_fmm_x->At(j); Double_t yhit = endcap_fmm_y->At(j); Double_t zhit = endcap_fmm_z->At(j);
+    Int_t quality = endcap_fmm_quality->At(j);    
+    if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit));
+    } 
+     nhits_FwdMPGDDisks =  hitPos.size(); hitPos.clear();
+     if (debug)  printf("Forward MPGD Associated hits: %d \n",nhits_FwdMPGDDisks);
+    
+    // Backward MPGD
+    for (int j = 0; j < endcap_bmm_x->GetSize(); ++j){
+    Double_t xhit = endcap_bmm_x->At(j); Double_t yhit = endcap_bmm_y->At(j); Double_t zhit = endcap_bmm_z->At(j);
+    Int_t quality = endcap_bmm_quality->At(j);    
+    if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit));
+    } 
+     
+     nhits_BwdMPGDDisks =  hitPos.size(); hitPos.clear();
+     if (debug)  printf("Backward MPGD Associated hits: %d \n",nhits_BwdMPGDDisks);
+   
+    int nhits = nhits_SVTIB + nhits_SVTOB + nhits_InMPGD + nhits_BTOF + nhits_OutMPGD + nhits_SVTDisks + nhits_FwdMPGDDisks + nhits_BwdMPGDDisks + nhits_ETOF;
+    if (nhits>0) hits->Fill(eta_Track,nhits); 
+    printf("Total Associated hits: %d \n",nhits);
+
+ }
+ 
+  c1->cd();
+  gPad->SetTicks(1,1);
+  hits->SetLineWidth(2);
+  hits->Draw("hist");
+  c1->SaveAs(Form("./Output/Nhitsvsmom%1.1f.png",mom));
+  c1->SaveAs(Form("./Output/Nhitsvsmom%1.1f.root",mom));
+}
+
+
diff --git a/benchmarks/tracking_performances/draw_hits.C b/benchmarks/tracking_performances/draw_hits.C
new file mode 100644
index 0000000000000000000000000000000000000000..bb2fabc6b1fd1d09d3019bb8026d1944366dab39
--- /dev/null
+++ b/benchmarks/tracking_performances/draw_hits.C
@@ -0,0 +1,313 @@
+// Hits distribution of detectors
+// Shyam Kumar:INFN Bari, shyam.kumar@ba.infn.it; shyam055119@gmail.com
+
+#include <TGraphErrors.h>
+#include <TF1.h>
+#include <TRandom.h>
+#include <TCanvas.h>
+#include <TLegend.h>
+#include <TMath.h>
+
+void draw_hits(double mom=5.0)
+{
+
+//==========Style of the plot============
+   gStyle->SetPalette(1);
+   gStyle->SetOptTitle(1);
+   gStyle->SetTitleOffset(.85,"X");gStyle->SetTitleOffset(.85,"Y");
+   gStyle->SetTitleSize(.04,"X");gStyle->SetTitleSize(.04,"Y");
+   gStyle->SetLabelSize(.04,"X");gStyle->SetLabelSize(.04,"Y");
+   gStyle->SetHistLineWidth(2);
+   gStyle->SetOptFit(1);
+   gStyle->SetOptStat(0);
+
+//=======Reading the root file DD4HEP===========
+ TFile *f = TFile::Open(Form("sim%1.1f.edm4hep.root",mom));
+ TTree *sim = (TTree*)f->Get("events");
+
+ // Timer Start
+  TStopwatch timer;
+  timer.Start();
+
+  TCanvas *c1 = new TCanvas("c1","c1",1200,1000);
+  c1->SetMargin(0.09, 0.03 ,0.1,0.06);
+
+ // X-Y Hits
+  Int_t nbins = 320;
+  Double_t x= 100., y = 100.;
+  TH2D *hitsxy_vtx_si = new TH2D("hitsxy_vtx_si","hitsxy_vtx_si",nbins,-x,x,nbins,-y,y);
+  TH2D *hitsxy_barrel_si = new TH2D("hitsxy_barrel_si","hitsxy_barrel_si",nbins,-x,x,nbins,-y,y);
+  TH2D *hitsxy_barrel_mm_in = new TH2D("hitsxy_barrel_mm_in","hitsxy_barrel_mm_in",nbins,-x,x,nbins,-y,y);
+  TH2D *hitsxy_barrel_tof = new TH2D("hitsxy_barrel_tof","hitsxy_barrel_tof",nbins,-x,x,nbins,-y,y);
+  TH2D *hitsxy_barrel_mm_out = new TH2D("hitsxy_barrel_mm_out","hitsxy_barrel_mm_out",nbins,-x,x,nbins,-y,y);
+
+  TString si_vtx_hitsXY ="VertexBarrelHits.position.y*0.1:VertexBarrelHits.position.x*0.1>>hitsxy_vtx_si";
+  TString si_barrel_hitsXY ="SiBarrelHits.position.y*0.1:SiBarrelHits.position.x*0.1>>hitsxy_barrel_si";
+  TString barrel_mpgd_in_hitsXY ="MPGDBarrelHits.position.y*0.1:MPGDBarrelHits.position.x*0.1>>hitsxy_barrel_mm_in";
+  TString tof_barrel_hitsXY ="TOFBarrelHits.position.y*0.1:TOFBarrelHits.position.x*0.1>>hitsxy_barrel_tof";
+  TString barrel_mpgd_out_hitsXY ="OuterMPGDBarrelHits.position.y*0.1:OuterMPGDBarrelHits.position.x*0.1>>hitsxy_barrel_mm_out";
+
+        sim->Draw(si_vtx_hitsXY.Data(),"",""); // Multiply by 0.1 for cm
+        sim->Draw(si_barrel_hitsXY.Data(),"","");
+        sim->Draw(barrel_mpgd_in_hitsXY.Data(),"","");
+        sim->Draw(tof_barrel_hitsXY.Data(),"","");
+        sim->Draw(barrel_mpgd_out_hitsXY.Data(),"","");
+
+        hitsxy_vtx_si->SetMarkerStyle(31);
+        hitsxy_vtx_si->SetTitle("Hit Points (XY)");
+        hitsxy_vtx_si->SetMarkerColor(kBlack);
+        hitsxy_vtx_si->SetMarkerSize(0.1);
+        hitsxy_vtx_si->SetLineColor(kBlack);
+        hitsxy_vtx_si->GetXaxis()->SetTitle("X [cm]");
+        hitsxy_vtx_si->GetYaxis()->SetTitle("Y [cm]");
+        hitsxy_vtx_si->GetXaxis()->CenterTitle();
+        hitsxy_vtx_si->GetYaxis()->CenterTitle();
+
+        hitsxy_barrel_si->SetMarkerStyle(20);
+        hitsxy_barrel_si->SetMarkerSize(0.1);
+        hitsxy_barrel_si->SetMarkerColor(kMagenta);
+        hitsxy_barrel_si->SetLineColor(kMagenta);
+
+        hitsxy_barrel_mm_in->SetMarkerStyle(20);
+        hitsxy_barrel_mm_in->SetMarkerSize(0.1);
+        hitsxy_barrel_mm_in->SetMarkerColor(kBlue);
+        hitsxy_barrel_mm_in->SetLineColor(kBlue);
+
+        hitsxy_barrel_tof->SetMarkerStyle(20);
+        hitsxy_barrel_tof->SetMarkerSize(0.1);
+        hitsxy_barrel_tof->SetMarkerColor(kGreen);
+        hitsxy_barrel_tof->SetLineColor(kGreen);hitsxy_barrel_mm_out->SetMarkerStyle(20);
+        hitsxy_barrel_mm_out->SetMarkerSize(0.1);
+        hitsxy_barrel_mm_out->SetMarkerColor(kBlue-7);
+        hitsxy_barrel_mm_out->SetLineColor(kBlue-7);
+        
+        c1->cd();
+        hitsxy_vtx_si->Draw();
+        hitsxy_barrel_si->Draw("same");
+        hitsxy_barrel_mm_in->Draw("same");
+        hitsxy_barrel_tof->Draw("same");
+        hitsxy_barrel_mm_out->Draw("same");
+
+ TLegend *l= new TLegend(0.65,0.85,0.90,1.0);
+ l->SetTextSize(0.025);
+ l->SetBorderSize(0);
+ l->AddEntry(hitsxy_vtx_si,"VertexBarrelHits");
+ l->AddEntry(hitsxy_barrel_si,"SiBarrelHits");
+ l->AddEntry(hitsxy_barrel_mm_in,"MPGDBarrelHits");
+ l->AddEntry(hitsxy_barrel_tof,"TOFBarrelHits");
+ l->AddEntry(hitsxy_barrel_mm_out,"OuterMPGDBarrelHits");
+ l->Draw();
+ c1->SaveAs("hitsxy_dd4hep.png");
+ c1->SaveAs("hitsxy_dd4hep.eps");
+ c1->SaveAs("hitsxy_dd4hep.root");
+
+  TCanvas *c2 = new TCanvas("c2","c2",1200,1000);
+  c2->SetMargin(0.09, 0.03 ,0.1,0.06);
+ // Y-Z Hits
+ Int_t nbinsx = 400, nbinsy=1800.;
+ x= 200.; y = 90.;
+ double xmin = -200.;
+
+   TH2D *hitsrz_vtx_si = new TH2D("hitsrz_vtx_si","hitsrz_vtx_si",nbinsx,xmin,x,nbinsy,-y,y);
+   TH2D *hitsrz_barrel_si = new TH2D("hitsrz_barrel_si","hitsrz_barrel_si",nbinsx,-x,x,nbinsy,-y,y);
+   TH2D *hitsrz_barrel_mm_in = new TH2D("hitsrz_barrel_mm_in","hitsrz_barrel_mm_in",nbinsx,-x,x,nbinsy,-y,y);
+   TH2D *hitsrz_barrel_mm_out = new TH2D("hitsrz_barrel_mm_out","hitsrz_barrel_mm_out",nbinsx,-x,x,nbinsy,-y,y);
+   TH2D *hitsrz_barrel_tof = new TH2D("hitsrz_barrel_tof","hitsrz_barrel_tof",nbinsx,-x,x,nbinsy,-y,y);
+   TH2D *hitsrz_disks_si = new TH2D("hitsrz_disks_si","hitsrz_disks_si",nbinsx,-x,x,nbinsy,-y,y);
+   TH2D *hitsrz_endcap_tof = new TH2D("hitsrz_endcap_tof","hitsrz_endcap_tof",nbinsx,-x,x,nbinsy,-y,y);
+   TH2D *hitsrz_fwd_mpgd = new TH2D("hitsrz_fwd_mpgd","hitsrz_fwd_mpgd",nbinsx,-x,x,nbinsy,-y,y);
+   TH2D *hitsrz_bwd_mpgd = new TH2D("hitsrz_bwd_mpgd","hitsrz_bwd_mpgd",nbinsx,-x,x,nbinsy,-y,y);
+
+   TH2D *hitsrz_vtx_si_1 = new TH2D("hitsrz_vtx_si_1","hitsrz_vtx_si_1",nbinsx,xmin,x,nbinsy,-y,y);
+   TH2D *hitsrz_barrel_si_1 = new TH2D("hitsrz_barrel_si_1","hitsrz_barrel_si_1",nbinsx,-x,x,nbinsy,-y,y);
+   TH2D *hitsrz_barrel_mm_in_1 = new TH2D("hitsrz_barrel_mm_in_1","hitsrz_barrel_mm_in_1",nbinsx,-x,x,nbinsy,-y,y);
+   TH2D *hitsrz_barrel_mm_out_1 = new TH2D("hitsrz_barrel_mm_out_1","hitsrz_barrel_mm_out_1",nbinsx,-x,x,nbinsy,-y,y);
+   TH2D *hitsrz_barrel_tof_1 = new TH2D("hitsrz_barrel_tof_1","hitsrz_barrel_tof_1",nbinsx,-x,x,nbinsy,-y,y);
+   TH2D *hitsrz_disks_si_1 = new TH2D("hitsrz_disks_si_1","hitsrz_disks_si_1",nbinsx,-x,x,nbinsy,-y,y);
+   TH2D *hitsrz_endcap_tof_1 = new TH2D("hitsrz_endcap_tof_1","hitsrz_endcap_tof_1",nbinsx,-x,x,nbinsy,-y,y);
+   TH2D *hitsrz_fwd_mpgd_1 = new TH2D("hitsrz_fwd_mpgd_1","hitsrz_fwd_mpgd_1",nbinsx,-x,x,nbinsy,-y,y);
+   TH2D *hitsrz_bwd_mpgd_1 = new TH2D("hitsrz_bwd_mpgd_1","hitsrz_bwd_mpgd_1",nbinsx,-x,x,nbinsy,-y,y);
+
+    TString si_vtx_hitsrz_posR  ="sqrt(VertexBarrelHits.position.x*VertexBarrelHits.position.x+VertexBarrelHits.position.y*VertexBarrelHits.position.y)*0.1:VertexBarrelHits.position.z*0.1>>hitsrz_vtx_si";
+
+    TString si_barrel_hitsrz_posR ="sqrt(SiBarrelHits.position.x*SiBarrelHits.position.x+SiBarrelHits.position.y*SiBarrelHits.position.y)*0.1:SiBarrelHits.position.z*0.1>>hitsrz_barrel_si";
+
+    TString barrel_mpgd_in_hitsrz_posR= "sqrt(MPGDBarrelHits.position.x*MPGDBarrelHits.position.x+MPGDBarrelHits.position.y*MPGDBarrelHits.position.y)*0.1:MPGDBarrelHits.position.z*0.1>>hitsrz_barrel_mm_in";
+
+    TString tof_barrel_hitsrz_posR ="sqrt(TOFBarrelHits.position.x*TOFBarrelHits.position.x+TOFBarrelHits.position.y*TOFBarrelHits.position.y)*0.1:TOFBarrelHits.position.z*0.1>>hitsrz_barrel_tof";
+
+    TString barrel_mpgd_out_hitsrz_posR ="sqrt(OuterMPGDBarrelHits.position.x*OuterMPGDBarrelHits.position.x+OuterMPGDBarrelHits.position.y*OuterMPGDBarrelHits.position.y)*0.1:OuterMPGDBarrelHits.position.z*0.1>>hitsrz_barrel_mm_out";
+
+    TString disks_si_hitsrz_posR ="sqrt(TrackerEndcapHits.position.x*TrackerEndcapHits.position.x+TrackerEndcapHits.position.y*TrackerEndcapHits.position.y)*0.1:TrackerEndcapHits.position.z*0.1>>hitsrz_disks_si";
+
+    TString endcap_tof_hitsrz_posR ="sqrt(TOFEndcapHits.position.x*TOFEndcapHits.position.x+TOFEndcapHits.position.y*TOFEndcapHits.position.y)*0.1:TOFEndcapHits.position.z*0.1>>hitsrz_endcap_tof";
+
+    TString fwd_mpgd_hitsrz_posR ="sqrt(ForwardMPGDEndcapHits.position.x*ForwardMPGDEndcapHits.position.x+ForwardMPGDEndcapHits.position.y*ForwardMPGDEndcapHits.position.y)*0.1:ForwardMPGDEndcapHits.position.z*0.1>>hitsrz_fwd_mpgd";
+
+    TString bwd_mpgd_hitsrz_posR ="sqrt(BackwardMPGDEndcapHits.position.x*BackwardMPGDEndcapHits.position.x+BackwardMPGDEndcapHits.position.y*BackwardMPGDEndcapHits.position.y)*0.1:BackwardMPGDEndcapHits.position.z*0.1>>hitsrz_bwd_mpgd";
+
+
+        sim->Draw(si_vtx_hitsrz_posR.Data(),"VertexBarrelHits.position.y>0",""); // Multiply by 0.1 for cm
+        sim->Draw(si_barrel_hitsrz_posR.Data(),"SiBarrelHits.position.y>0","");
+        sim->Draw(barrel_mpgd_in_hitsrz_posR.Data(),"MPGDBarrelHits.position.y>0","");
+        sim->Draw(tof_barrel_hitsrz_posR.Data(),"TOFBarrelHits.position.y>0","");
+        sim->Draw(disks_si_hitsrz_posR.Data(),"TrackerEndcapHits.position.y>0","");
+        sim->Draw(endcap_tof_hitsrz_posR.Data(),"TOFEndcapHits.position.y>0","");
+  sim->Draw(barrel_mpgd_out_hitsrz_posR.Data(),"OuterMPGDBarrelHits.position.y>0","");
+  sim->Draw(fwd_mpgd_hitsrz_posR.Data(),"ForwardMPGDEndcapHits.position.y>0","");
+        sim->Draw(bwd_mpgd_hitsrz_posR.Data(),"BackwardMPGDEndcapHits.position.y>0","");
+
+    TString si_vtx_hitsrz_negR  ="-1.0*sqrt(VertexBarrelHits.position.x*VertexBarrelHits.position.x+VertexBarrelHits.position.y*VertexBarrelHits.position.y)*0.1:VertexBarrelHits.position.z*0.1>>hitsrz_vtx_si_1";
+
+    TString si_barrel_hitsrz_negR ="-1.0*sqrt(SiBarrelHits.position.x*SiBarrelHits.position.x+SiBarrelHits.position.y*SiBarrelHits.position.y)*0.1:SiBarrelHits.position.z*0.1>>hitsrz_barrel_si_1";
+
+    TString barrel_mpgd_in_hitsrz_negR= "-1.0*sqrt(MPGDBarrelHits.position.x*MPGDBarrelHits.position.x+MPGDBarrelHits.position.y*MPGDBarrelHits.position.y)*0.1:MPGDBarrelHits.position.z*0.1>>hitsrz_barrel_mm_in_1";
+
+    TString tof_barrel_hitsrz_negR ="-1.0*sqrt(TOFBarrelHits.position.x*TOFBarrelHits.position.x+TOFBarrelHits.position.y*TOFBarrelHits.position.y)*0.1:TOFBarrelHits.position.z*0.1>>hitsrz_barrel_tof_1";
+
+    TString barrel_mpgd_out_hitsrz_negR ="-1.0*sqrt(OuterMPGDBarrelHits.position.x*OuterMPGDBarrelHits.position.x+OuterMPGDBarrelHits.position.y*OuterMPGDBarrelHits.position.y)*0.1:OuterMPGDBarrelHits.position.z*0.1>>hitsrz_barrel_mm_out_1";
+
+    TString disks_si_hitsrz_negR ="-1.0*sqrt(TrackerEndcapHits.position.x*TrackerEndcapHits.position.x+TrackerEndcapHits.position.y*TrackerEndcapHits.position.y)*0.1:TrackerEndcapHits.position.z*0.1>>hitsrz_disks_si_1";
+
+    TString endcap_tof_hitsrz_negR ="-1.0*sqrt(TOFEndcapHits.position.x*TOFEndcapHits.position.x+TOFEndcapHits.position.y*TOFEndcapHits.position.y)*0.1:TOFEndcapHits.position.z*0.1>>hitsrz_endcap_tof_1";
+
+    TString fwd_mpgd_hitsrz_negR ="-1.0*sqrt(ForwardMPGDEndcapHits.position.x*ForwardMPGDEndcapHits.position.x+ForwardMPGDEndcapHits.position.y*ForwardMPGDEndcapHits.position.y)*0.1:ForwardMPGDEndcapHits.position.z*0.1>>hitsrz_fwd_mpgd_1";
+
+    TString bwd_mpgd_hitsrz_negR ="-1.0*sqrt(BackwardMPGDEndcapHits.position.x*BackwardMPGDEndcapHits.position.x+BackwardMPGDEndcapHits.position.y*BackwardMPGDEndcapHits.position.y)*0.1:BackwardMPGDEndcapHits.position.z*0.1>>hitsrz_bwd_mpgd_1";
+
+          sim->Draw(si_vtx_hitsrz_negR.Data(),"VertexBarrelHits.position.y<0",""); // Multiply by 0.1 for cm
+          sim->Draw(si_barrel_hitsrz_negR.Data(),"SiBarrelHits.position.y<0","");
+          sim->Draw(barrel_mpgd_in_hitsrz_negR.Data(),"MPGDBarrelHits.position.y<0","");
+          sim->Draw(tof_barrel_hitsrz_negR.Data(),"TOFBarrelHits.position.y<0","");
+          sim->Draw(disks_si_hitsrz_negR.Data(),"TrackerEndcapHits.position.y<0","");
+          sim->Draw(endcap_tof_hitsrz_negR.Data(),"TOFEndcapHits.position.y<0","");
+          sim->Draw(barrel_mpgd_out_hitsrz_negR.Data(),"OuterMPGDBarrelHits.position.y<0","");
+          sim->Draw(fwd_mpgd_hitsrz_negR.Data(),"ForwardMPGDEndcapHits.position.y<0","");
+          sim->Draw(bwd_mpgd_hitsrz_negR.Data(),"BackwardMPGDEndcapHits.position.y<0","");
+
+
+          hitsrz_vtx_si->SetMarkerStyle(31);
+          hitsrz_vtx_si->SetTitle("");
+          hitsrz_vtx_si->SetMarkerSize(0.1);
+          hitsrz_vtx_si->SetLineColor(kBlack);
+          hitsrz_vtx_si->SetMarkerColor(kBlack);
+          hitsrz_vtx_si->GetXaxis()->SetTitle("Z [cm]");
+          hitsrz_vtx_si->GetYaxis()->SetTitle("R [cm]");
+          hitsrz_vtx_si->GetXaxis()->CenterTitle();
+          hitsrz_vtx_si->GetYaxis()->CenterTitle();
+
+          hitsrz_vtx_si_1->SetMarkerSize(0.1);
+          hitsrz_vtx_si_1->SetLineColor(kBlack);
+          hitsrz_vtx_si_1->SetMarkerColor(kBlack);
+
+          hitsrz_barrel_si->SetMarkerStyle(20);
+          hitsrz_barrel_si->SetMarkerSize(0.1);
+          hitsrz_barrel_si->SetMarkerColor(kMagenta);
+          hitsrz_barrel_si->SetLineColor(kMagenta);
+
+          hitsrz_barrel_si_1->SetMarkerSize(0.1);
+          hitsrz_barrel_si_1->SetLineColor(kMagenta);
+          hitsrz_barrel_si_1->SetMarkerColor(kMagenta);
+
+          hitsrz_barrel_mm_in->SetMarkerStyle(20);
+          hitsrz_barrel_mm_in->SetMarkerSize(0.1);
+          hitsrz_barrel_mm_in->SetLineColor(kBlue);
+          hitsrz_barrel_mm_in->SetMarkerColor(kBlue);
+          hitsrz_barrel_mm_in_1->SetMarkerSize(0.1);
+          hitsrz_barrel_mm_in_1->SetLineColor(kBlue);
+          hitsrz_barrel_mm_in_1->SetMarkerColor(kBlue);
+
+          hitsrz_barrel_tof->SetMarkerStyle(20);
+          hitsrz_barrel_tof->SetMarkerSize(0.1);
+          hitsrz_barrel_tof->SetLineColor(kGreen);
+          hitsrz_barrel_tof->SetMarkerColor(kGreen);
+          hitsrz_barrel_tof_1->SetMarkerSize(0.1);
+          hitsrz_barrel_tof_1->SetLineColor(kGreen);
+          hitsrz_barrel_tof_1->SetMarkerColor(kGreen);
+
+
+          hitsrz_barrel_mm_out->SetMarkerStyle(20);
+          hitsrz_barrel_mm_out->SetMarkerSize(0.1);
+          hitsrz_barrel_mm_out->SetMarkerColor(kBlue-7);
+          hitsrz_barrel_mm_out->SetLineColor(kBlue-7);
+
+          hitsrz_barrel_mm_out_1->SetMarkerSize(0.1);
+          hitsrz_barrel_mm_out_1->SetLineColor(kBlue-7);
+          hitsrz_barrel_mm_out_1->SetMarkerColor(kBlue-7);
+          hitsrz_endcap_tof->SetMarkerStyle(20);
+          hitsrz_endcap_tof->SetMarkerSize(0.1);
+          hitsrz_endcap_tof->SetMarkerColor(kCyan);
+          hitsrz_endcap_tof->SetLineColor(kCyan);
+
+          hitsrz_endcap_tof_1->SetMarkerSize(0.1);
+          hitsrz_endcap_tof_1->SetLineColor(kCyan);
+          hitsrz_endcap_tof_1->SetMarkerColor(kCyan);
+
+          hitsrz_disks_si->SetMarkerStyle(20);
+          hitsrz_disks_si->SetMarkerSize(0.1);
+          hitsrz_disks_si->SetMarkerColor(kRed);
+          hitsrz_disks_si->SetLineColor(kRed);
+
+          hitsrz_disks_si_1->SetMarkerSize(0.1);
+          hitsrz_disks_si_1->SetLineColor(kRed);
+          hitsrz_disks_si_1->SetMarkerColor(kRed);
+
+          hitsrz_fwd_mpgd->SetMarkerSize(0.1);
+          hitsrz_fwd_mpgd->SetLineColor(kRed-7);
+          hitsrz_fwd_mpgd->SetMarkerColor(kRed-7);
+          hitsrz_fwd_mpgd_1->SetMarkerSize(0.1);
+          hitsrz_fwd_mpgd_1->SetLineColor(kRed-7);
+          hitsrz_fwd_mpgd_1->SetMarkerColor(kRed-7);
+          hitsrz_bwd_mpgd->SetMarkerSize(0.1);
+          hitsrz_bwd_mpgd->SetLineColor(kOrange);
+          hitsrz_bwd_mpgd->SetMarkerColor(kOrange);
+
+          hitsrz_bwd_mpgd_1->SetMarkerSize(0.1);
+          hitsrz_bwd_mpgd_1->SetLineColor(kOrange);
+          hitsrz_bwd_mpgd_1->SetMarkerColor(kOrange);
+
+        c2->cd();
+        hitsrz_vtx_si->Draw("");
+        hitsrz_vtx_si_1->Draw("same");
+        hitsrz_barrel_si->Draw("same");
+        hitsrz_barrel_si_1->Draw("same");
+        hitsrz_barrel_mm_in->Draw("same");
+        hitsrz_barrel_mm_in_1->Draw("same");
+        hitsrz_barrel_tof->Draw("same");
+        hitsrz_barrel_tof_1->Draw("same");
+        hitsrz_barrel_mm_out->Draw("same");
+        hitsrz_barrel_mm_out_1->Draw("same");
+        hitsrz_endcap_tof->Draw("same");
+        hitsrz_endcap_tof_1->Draw("same");
+        hitsrz_disks_si->Draw("same");
+        hitsrz_disks_si_1->Draw("same");
+        hitsrz_fwd_mpgd->Draw("same");
+        hitsrz_fwd_mpgd_1->Draw("same");
+        hitsrz_bwd_mpgd->Draw("same");
+        hitsrz_bwd_mpgd_1->Draw("same");
+
+  TLegend *l1= new TLegend(0.11,0.88,0.95,0.99);
+  l1->SetNColumns(3);
+  l1->SetTextSize(0.025);
+  l1->SetBorderSize(0);
+  l1->AddEntry(hitsrz_vtx_si,"VertexBarrelHits");
+  l1->AddEntry(hitsrz_barrel_si,"SiBarrelHits");
+  l1->AddEntry(hitsrz_barrel_mm_in,"MPGDBarrelHits");
+  l1->AddEntry(hitsrz_barrel_tof,"TOFBarrelHits");
+  l1->AddEntry(hitsrz_barrel_mm_out,"OuterMPGDBarrelHits");
+  l1->AddEntry(hitsrz_disks_si,"TrackerEndcapHits");
+  l1->AddEntry(hitsrz_endcap_tof,"TOFEndcapHits");
+  l1->AddEntry(hitsrz_fwd_mpgd,"ForwardMPGDEndcapHits");
+  l1->AddEntry(hitsrz_bwd_mpgd,"BackwardMPGDEndcapHits");
+  l1->Draw();
+
+  c2->SaveAs("hitsrz_dd4hep.png");
+  c2->SaveAs("hitsrz_dd4hep.eps");  
+  c2->SaveAs("hitsrz_dd4hep.root");
+ // Timer Stop
+  timer.Stop();
+  Double_t realtime = timer.RealTime();
+  Double_t cputime = timer.CpuTime();
+  printf("RealTime=%f seconds, CpuTime=%f seconds\n",realtime,cputime);
+
+}