diff --git a/CALIBRATION/shms_dc_calib/README.md b/CALIBRATION/shms_dc_calib/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e16f7ed1345a6cc624e66c24770da5a82888b4bd
--- /dev/null
+++ b/CALIBRATION/shms_dc_calib/README.md
@@ -0,0 +1,88 @@
+SHMS Drift Chambers Calibration
+============================================
+This directory contains the code for calibrating the pair of SHMS drift chambers.
+
+
+
+Directory structure
+----------------------
+* hallc_replay/CALIBRATION/shms_dc_calib/run_Cal.C   : steering C++ code that executes all codes in the 'scripts' directory
+* hallc_replay/CALIBRATION/shms_dc_calib/scripts  : all scripts necessary to do calibration lie in this directory
+* hallc_replay/CALIBRATION/shms_dc_calib/root_files : all root files produced by the calibration are in this directory
+* hallc_replay/CALIBRATION/shms_dc_calib/data_files : all data files produced by the calibration are in this directory
+
+
+
+
+Running code
+---------------
+* First set the parameter 'p_using_tzero_per_wire = 0' in the 
+  parameter file located at: hallc_replay/PARAM/SHMS/DC/pdc.param
+
+* Replay the data to produce the uncalibrated root file to be used as input in the calibration
+  * From the hallc_replay execute: ./hcana SCRIPTS/SHMS/replay_shms.C
+
+* From THIS! directory execute: root -l run_Cal.C
+
+* From the calibration results, two parameter files will be produced in:
+  * hallc_replay/PARAM/SHMS/DC/pdc_tzero_per_wire_run%d_NEW.param. %d=run_number
+  * hallc_replay/PARAM/SHMS/DC/pdriftmap_new.param
+
+* Rename the new parameter files as follows:
+  * copy: pdc_tzero_per_wire_run%d_NEW.param to pdc_tzero_per_wire.param
+  * copy: pdriftmap_new.param to pdriftmap.param
+
+* Before replaying the data again, set the parameter 'p_using_tzero_per_wire = 1' to 
+  allow the source code (hcana) to read the parameter values during the replay.
+
+* Replay the data with the updated parameters to produce the new calibrated root files
+  with the corrected drift times and drift distances.
+
+* Compare the calibrated and uncalibrated root files to verify the calibration was done properly.
+
+
+
+Brief decription of code
+------------------------
+* Overview: The code determines the tzero offsets on a wire-by-wire basis. These offsets are 
+            corrections by which each wire drift time spectrum must be shifted to align it with a 
+            drift time of "0 ns". This time corresponds to when the electrons from the ionized gas inside
+            the chamber are in contact with the sense wire, hence a drift time of "0 ns". 
+
+* Brief Description of the scripts in the '/scripts' directory
+  *** to run the scripts independenlty, open the input_RUN.txt files and write the filen_ame, run_number and number of events in this order: root_file.root   run_number   events 
+
+  	** get_pdc_time_histo.C : 
+	  	-- outputs root_file: 'shms_dc_time_%d.root', (%d=run_number)
+		-- contains re-binned per-plane drift time histograms
+	
+	** wire_drift_times.C (and wire_drift_times.h) - See instructions in wire_drift_times.C on how to execute independently 
+	   	-- outputs root_file: 'shms_DC_plane_%d_wire_histos.root' 
+		-- contains a 2-D histo of "drift time vs. Wire Number" and drift time spectra for all wires in the plane
+
+	** get_wire_tzero.C 
+	        -- outputs root_file: 'shms_DC_plane_%d_fitted_histos.root'
+		-- contains line-fitted wire drift time histos. The extrapolation of the fit to the x-axis is defined as "tzero" 
+		   Also contains two "tzero vs. wirenumber" plots: one for all wires, and the other is after setting tzero=0 for
+                   wires that did not have enough statistics for a good quality fit, a weighted average was calculated for the latter.  
+		   
+		-- outputs data_file: 'shms_dc_planetzero_run%d.dat'         -> contains list of "tzero" values for all wires  	
+		   	   	      'shms_dc_planetzero_run%d_updated.dat' -> contains list of "tzero" values for all wires that
+				      					     	had a good fit. The remaining tzeros are set to 0.
+				      'tzero_weighted_avg_run%d.dat          -> contains weighted tzero values per plane 
+
+	** get_tzero_per_wire_param.C
+		-- outputs data_file: 'tzero_values_per_wire.dat'
+		-- contains list of tzero values for all wires in all planes 
+
+		-- outputs param_file: /hallc_replay/PARAM/SHMS/DC/pdc_tzero_per_wire_run%d_NEW.param, where %d=run_number
+                -- contains tzero values for all wires in all planes, but the file is formatted so that the values may be read by the source code (hcana)
+	  
+	** get_pdc_time_histo_tzero_corrected.C  	  	
+	   	-- outputs root_file: 'shms_tzero_corr_histos.root'
+		-- contains list of "t0-corrected" wire drift times, and their respective plane drift times.
+
+	** get_LookUp_Values.C
+	        -- outputs param_file: /hallc_replay/PARAM/SHMS/DC/pdriftmap_new.param
+ 		-- contains scaling factors calculated from the corrected plane drift times on a bin-by-in basis. These values get read by the source code
+		   which will be used to scale the drift distance histograms. 
diff --git a/CALIBRATION/shms_dc_calib/run_Cal.C b/CALIBRATION/shms_dc_calib/run_Cal.C
index 806e42f2c66e3a69186615c5d2143f0b6035e7dc..2f6377006371b4e766b27c5c07cce2699a569053 100644
--- a/CALIBRATION/shms_dc_calib/run_Cal.C
+++ b/CALIBRATION/shms_dc_calib/run_Cal.C
@@ -52,11 +52,6 @@
 	system(dir_data);
       }
     
-    if (std::system(dir_data) != 0) 
-      {
-	  
-      }
-    
     
     
     //Create run Directories if they dont exist
diff --git a/CALIBRATION/shms_dc_calib/scripts/get_pdc_time_histo_tzero_corrected.C b/CALIBRATION/shms_dc_calib/scripts/get_pdc_time_histo_tzero_corrected.C
index e2ec3d519a90fbe023b16a229e3c95867922c882..5a24ddfbda00358f78ea2c2b47c47b5b82d10d2c 100644
--- a/CALIBRATION/shms_dc_calib/scripts/get_pdc_time_histo_tzero_corrected.C
+++ b/CALIBRATION/shms_dc_calib/scripts/get_pdc_time_histo_tzero_corrected.C
@@ -25,7 +25,7 @@ void get_pdc_time_histo_tzero_corrected()
   int tot_wires[NPLANES] = {107, 107, 79, 79, 107, 107, 107, 107, 79, 79, 107, 107};
 
   //sum over all wires in both DC
-  static int wire_sum = 0;
+  int wire_sum = 0;
   for (ip=0; ip<NPLANES; ip++) {
     wire_sum = wire_sum + tot_wires[ip];
   }
@@ -38,8 +38,9 @@ void get_pdc_time_histo_tzero_corrected()
   string line;
   int counter;
   Double_t value;
-  Double_t tzero_offset[wire_sum];
-   
+  Double_t *tzero_offset;
+  tzero_offset = new Double_t[wire_sum];
+  
 
   counter = 0;
     
@@ -116,29 +117,31 @@ void get_pdc_time_histo_tzero_corrected()
   TString file_name =  Form("../root_files/run%d/shms_tzero_corr_histos.root", run_NUM);
   TFile *g = new TFile(file_name, "RECREATE");
     
-
   TH1F *h_add[NPLANES]; //t0-corrected plane drift times 
 
- 
- 
 
+  
+ 
+  
  //Loop over all planes
  for (ip = 0; ip < NPLANES; ip++){
-
-   //READ wire drift time root file per plane
-   root_file = "../root_files/"+run+"/shms_DC_"+plane_names[ip]+Form("_%d_wire_histos.root",run_NUM);
-   f[ip] = new TFile(root_file, "READ");
    
+   //READ wire drift time root file per plane
+    root_file = "../root_files/"+run+"/shms_DC_"+plane_names[ip]+Form("_%d_wire_histos.root",run_NUM);
+    f[ip] = new TFile(root_file, "READ");
+    
 
    h_add[ip] =new TH1F("plane_"+plane_names[ip]+"drifttime", "", nbins, -50, 350);
    
    h_add[ip]->GetXaxis()->SetTitle("Drift Time (ns)");
    h_add[ip]->GetYaxis()->SetTitle("Number of Entries / 2 ns");
 
-   TH1F *cell_dt[tot_wires[ip]];
-   TH1F *cell_dt_corr[tot_wires[ip]];
+
+   TH1F *cell_dt[107];
+   TH1F *cell_dt_corr[107];
  
- 	
+  
+  	
    //Get wire histos from root file and loop over each 
    //  sense wire of a plane in shms Drift Chambers (DC1 or DC2)
    
@@ -146,8 +149,8 @@ void get_pdc_time_histo_tzero_corrected()
    
    for (sw=1; sw<=tot_wires[ip]; sw++){
 
-    
-
+     
+     
      //set title of histos in root file
      TString drift_time_histo = Form("wire_%d", sw); 
  
@@ -169,7 +172,7 @@ void get_pdc_time_histo_tzero_corrected()
      //************APPLY TZERO OFFSET ON A WIRE-BY-WIRE BASIS TO ALL WIRES IN ALL PLANES***************
 
 
-     //INCLUDE the code 'shift.C ', which shifts a histogram 
+     //INCLUDE the code 'shift.C ', which shifts a histogram   
 
      for (i=1; i<=nbins; i++) {
        
@@ -185,7 +188,7 @@ void get_pdc_time_histo_tzero_corrected()
 
      //*************************************************************************************************
      
-
+    
 
      //write wire drift times (after tzero corrections) to file
      g->cd();
@@ -195,21 +198,22 @@ void get_pdc_time_histo_tzero_corrected()
      //add all cell drift times into a single plane
      h_add[ip]->Add(cell_dt_corr[sw-1]);
      
-     
-     
+           
      
    } // end loop over sense wires
    
    
    //Wire combined wire drift times (t0 -corrected) for each plane to file, 
-   g->cd();
-   h_add[ip]->Write();
+    g->cd();
+    h_add[ip]->Write();
    
 
+     
+
  } // end loop over planes
  
  
  
-  
+    
 
 }
diff --git a/CALIBRATION/shms_dc_calib/scripts/get_tzero_per_wire_param.C b/CALIBRATION/shms_dc_calib/scripts/get_tzero_per_wire_param.C
index 9bb118faff08bba70032ad4bd2cb7cf5cb4858b1..b6bb687d096c67bcb7ef76cc945d5e4cdf9f09f6 100644
--- a/CALIBRATION/shms_dc_calib/scripts/get_tzero_per_wire_param.C
+++ b/CALIBRATION/shms_dc_calib/scripts/get_tzero_per_wire_param.C
@@ -5,11 +5,11 @@
 
 #define NPLANES 12
 
-
+using namespace std;
 void get_tzero_per_wire_param()
 {
 
-
+  
  //read run number from input file
   int run_NUM;
   Long64_t num_evts;        //added
@@ -20,15 +20,14 @@ void get_tzero_per_wire_param()
 
   TString run = Form("run%d", run_NUM);
 
-
   TString planes[NPLANES] =   {"1u1","1u2","1x1","1x2","1v1","1v2","2v2","2v1","2x2","2x1","2u2","2u1"};   //planes 0, 1, 2, 3, 4, 5 OK :: 
 
 
-int fNWires[NPLANES] = {107, 107, 79, 79, 107, 107, 107, 107, 79, 79, 107, 107};
-
-int sw;
-int ip;
+  int fNWires[NPLANES] = {107, 107, 79, 79, 107, 107, 107, 107, 79, 79, 107, 107};
 
+ int sw;
+ int ip;
+ 
 Int_t **wire = new Int_t*[NPLANES];
 Double_t **t0 = new Double_t*[NPLANES];
 //Double_t **t0_err = new Double_t*[NPLANES];
@@ -41,47 +40,55 @@ Double_t **t0 = new Double_t*[NPLANES];
    }
  }
 
-  
-
  
+  
 //Loop over each plane
  for(ip=0; ip<NPLANES; ip++) {
    
          //write plane headers
 
-      Int_t nwire;
-      Double_t nt0;
-      Double_t nt0_err;
-      Int_t nentries;
-
+      int nwire;
+      double nt0;
+      double nt0_err;
+      int nentries;
 
 
     //open and read each wire tzero file
-    string line;
-    ifstream input;
-    input.open(Form("../data_files/run%d/shms_dc_"+planes[ip]+"tzero_run%d_updated.dat", run_NUM, run_NUM ) );
-    
-    
-     sw = 0;  //se wire counter to 0
+      TString file_name = Form("../data_files/run%d/shms_dc_", run_NUM) + planes[ip] + Form("tzero_run%d_updated.dat", run_NUM);
+      
+      //  cout << file_name << endl;
+
+      string line;
+      ifstream input;
+      input.open(file_name);
+      
     
+       sw = 0;
       while (getline(input, line))
 	{
-	 
-	  if (line != '#')
-	    {	     
-	      input >> nwire >> nt0 >> nt0_err >> nentries;
-	     // cout << nwire << " :: " << nt0 <<  endl;		       
-	      //cout << ip << " :: " << sw << endl;
-	   
-	      t0[ip][nwire-1] = nt0;
+	  // cout << line << endl;
+	  if (line[0]!='#')
+	    {	  
+	      if(!input.good()) {break;}
+	      sscanf(line.c_str(), "%d %lf", &nwire, &nt0);
+	     
+	      if(sw>0) {
 	      
-	       sw++;		  
+	       t0[ip][nwire-1] = nt0;
+	    
+	      }
+	      sw++;
+	    
 	    }
 	  
 	} 
    
       input.close();
     
+    
+
+
+     
  } //end loop over planes
  
  
diff --git a/CALIBRATION/shms_dc_calib/scripts/get_wire_tzero.C b/CALIBRATION/shms_dc_calib/scripts/get_wire_tzero.C
index 4c301360ea502493d8d801a45c468a9345f6ff38..b0031a4b7a3340e45ade08032d0501cac68f0e99 100644
--- a/CALIBRATION/shms_dc_calib/scripts/get_wire_tzero.C
+++ b/CALIBRATION/shms_dc_calib/scripts/get_wire_tzero.C
@@ -6,6 +6,8 @@ a certain number of bins and this fit is extrapolated to y=0(x-axis). The extrap
 
 #include <vector>
 #include "TMath.h"
+#include <iomanip>
+#include <iostream>
 
 #define NPLANES 12
   using namespace std;
@@ -53,7 +55,7 @@ void get_wire_tzero()
    ofs.open (t_zero_file);
 
    //Set headers for subsequent columns of data
-   ofs << "#WIRE " << "   "  << "t0" << "   " << "t0_err" << "   " << " entries " << endl;
+   ofs << "#WIRE " << setw(15)  << "t0" << setw(15) << "t0_err" << setw(15) << "entries" << endl;
 
    //Create root file to store fitted wire drift times histos and "t0 vs. wirenum"
    TString output_root_file = "../root_files/"+run+"/shms_DC_"+plane_names[ip]+Form("_%d_fitted_histos.root", run_NUM);
@@ -239,7 +241,7 @@ void get_wire_tzero()
      entries = cell_dt[sensewire-1]->GetEntries();  //number of entries (triggers) per wire
      //cout << "y_int: " << y_int << " :: " << "m: " << m << " :: " << "t0: " << setprecision(6) << -y_int/m << endl;
      //Write "t0" values to file
-     ofs << sensewire << "          " << setprecision(6) << -y_int/m << "          " <<  t_zero_err << "          " << entries << endl;
+     ofs << sensewire << setw(15) << setprecision(6) << -y_int/m << setw(15) <<  t_zero_err << setw(15) << entries << endl;
      
      //Change to output root file and write fitted histos to file
      g->cd();
@@ -268,13 +270,10 @@ void get_wire_tzero()
    graph->Draw("AP");
    t->Update();
    t->Write(title);   //write to a root file
+  
    
    //close dat file
    ofs.close();
-   //save plots
-   //TString tzero_plots = "plots/"+run_NUM +"/hdc"+plane_names[ip]+Form("TESTING_tzero_v_wire_%d.eps", run);
-   //t->SaveAs(tzero_plots);
-   
    
    //*****************************************************************************************//
    //        CALCULATE THE "t0s" WEIGHTED AVERAGE FOR WIRE DRIFT TIMES WITH ENTRIES > = 300   //
@@ -289,7 +288,7 @@ void get_wire_tzero()
    //open new data file to write updated t0 values
    TString t_zero_file_corr = "../data_files/" + run + "/shms_dc_"+plane_names[ip]+Form("tzero_run%d_updated.dat", run_NUM);
    ofs.open(t_zero_file_corr);
-   ofs << " #Wire " << "     " << " t_zero " << "     " << " t_zero_err " << "     " << " entries " << endl; 
+   ofs << "#Wire" << setw(15)  << "t_zero" << setw(15) << "t_zero_err" << setw(15) << "entries" << endl; 
    
    //Initialize variables related to weighted avg
    double sum_NUM;  //numerator of weighted avg
@@ -298,9 +297,12 @@ void get_wire_tzero()
    double weighted_AVG_err; 
   
     int counter;
-    double t0_corr;
-    double t0_corr_err;
-   //set them to zero to start sum inside while loop 
+    // double t0_corr; 
+    //double t0_corr_err;
+    Double_t t0;
+    Double_t t0_err;
+
+    //set them to zero to start sum inside while loop 
    sum_NUM = 0.0;
    sum_DEN = 0.0;
    
@@ -311,38 +313,40 @@ void get_wire_tzero()
    //read line bt line the t_zero_file
    while(getline(ifs, line)) {
 
-     if(line!='#') {
+     if(line[0]!='#') {
        
-       sscanf(line.c_str(), "%d %lf %lf %d", &sensewire, &t0_corr, &t0_corr_err, &entries); //assign each of the variables above a data in the t_zero_file
- 
-       if(sensewire<=fNWires[ip]){
-	
+       sscanf(line.c_str(), "%d %lf %lf %d", &sensewire, &t0, &t0_err, &entries); //assign each of the variables above a data in the t_zero_file
 
+       //  if(sensewire<=fNWires[ip]){
+	
+       cout << sensewire << endl;
      //Check if entries for each sensewire exceeds a certain number of events
      
-     if (entries>300 && t_zero < 30) 
-{
+       if (entries>300 && abs(t0)<30) 
+       {
 
-	
-     	
-       //Calculate the weighted average of t0s
-       sum_NUM = sum_NUM + t0_corr/(t0_corr_err*t0_corr_err);
-       sum_DEN = sum_DEN + 1.0/(t0_corr_err*t0_corr_err);      
-       
-       //cout << "sum_NUM : " << sum_NUM << endl;  
-       //cout << "sum_DEN : " << sum_DEN << endl;  
-       
-    
+	 //cout << ip << "::" << sensewire << "::" << t0 << endl;
+	 //Calculate the weighted average of t0s
+	 sum_NUM = sum_NUM + t0/(t0_err*t0_err);
+	 sum_DEN = sum_DEN + 1.0/(t0_err*t0_err);      
+	 
+	 //cout << "sum_NUM : " << sum_NUM << endl;  
+	 //cout << "sum_DEN : " << sum_DEN << endl;  
+	 
+	 
 
+	 
+	 ofs << sensewire << setw(15) << t0 << setw(15) << t0_err << setw(15) << entries << endl;
+	 //cout << "TZERO: " << t0 << endl;
+	 
+	 
 
-       ofs << sensewire << "        " << t0_corr << "        " << t0_corr_err << "        " << entries << endl;
-       //cout << "TZERO: " << t_zero << endl;
-       
-       
-     }
-     
-     else { ofs << sensewire << "        " << 0.0 << "       " << 0.0 << "        " << entries << endl;}
        }
+     
+     else { ofs << sensewire << setw(15) << 0.0 << setw(15) << 0.0 << setw(15) << entries << endl;}
+     
+     //}
+     
      } //end if statement
    }
    
@@ -362,10 +366,7 @@ void get_wire_tzero()
    
    ofile << " #weighted_AVG " << "     " << " DC plane: " <<  plane_names[ip] << endl; 
    ofile << weighted_AVG << endl;
-   
-  
-   
-   
+     
    
    ifs.close();
 
@@ -402,9 +403,9 @@ void get_wire_tzero()
    ltx1->DrawLatex(t1->GetUxmax()*0.75,40, Form("Weighted Average = %lf #pm %lf ns", weighted_AVG, weighted_AVG_err) );
    
    t1->Write(title1);   //write canvas to a root file
-   ofs.close();  //close data file
-   
-   
+ 
+      ofs.close();  //close data file
+
 
 
 
diff --git a/CALIBRATION/shms_dc_calib/scripts/wire_drift_times.C b/CALIBRATION/shms_dc_calib/scripts/wire_drift_times.C
index 7cf84cb779bbee1976f6b736c38ebc2c3c589c1b..cb0a6bc1d22f510080428cadf9e4a1013dd02ed9 100644
--- a/CALIBRATION/shms_dc_calib/scripts/wire_drift_times.C
+++ b/CALIBRATION/shms_dc_calib/scripts/wire_drift_times.C
@@ -87,7 +87,7 @@ void wire_drift_times::Loop()
       for (wirenum=1; wirenum<=total_wires_uv; wirenum++){
 	cell_dt[wirenum-1] = new TH1F(Form("wire_%d", wirenum), "", 200., -50., 350.);
                 
-      cell_dt[wirenum-1]->GetXaxis()->SetTitle("Wire Number");
+      cell_dt[wirenum-1]->GetXaxis()->SetTitle("Drift Time (ns)");
       cell_dt[wirenum-1]->GetYaxis()->SetTitle("Number of Entries / 2 ns");
       }
 	
@@ -221,7 +221,7 @@ void wire_drift_times::Loop()
       for (int wirenum=1; wirenum<=total_wires_x; wirenum++){
 	cell_dt[wirenum-1] = new TH1F(Form("wire_%d", wirenum), "", 200., -50., 350.);
   
-	cell_dt[wirenum-1]->GetXaxis()->SetTitle("Wire Number");
+	cell_dt[wirenum-1]->GetXaxis()->SetTitle("Drift Time (ns)");
 	cell_dt[wirenum-1]->GetYaxis()->SetTitle("Number of Entries / 2 ns");