diff --git a/CALIBRATION/bcm_current_calib/README b/CALIBRATION/bcm_current_calib/README
new file mode 100644
index 0000000000000000000000000000000000000000..4fa7b58896c514b90ee143ff15005b57c4dd497f
--- /dev/null
+++ b/CALIBRATION/bcm_current_calib/README
@@ -0,0 +1,19 @@
+This script runs over a scaler tree (TSH) and save bcm current values
+for BCM1, BCM2, (BCM4a, BCM4b, BCM17) as well as the event number 
+for each scaler event.
+
+How to make a parameter file for the average BCM current information
+
+- Use ROOT version 6.08 to use R__LOAD_LIBRARY
+- Do this once to make shared libraries (or after modifying the marco)
+> root -b
+root [0] .L ScalerCalib.C+
+
+To run a script:
+> roob -b
+root [0] .x run.C("/path/Scaler root output file");
+
+It prints out 
+      # of scaler read, 
+      average bcm current values for each bcm
+      corresponding event number for each scaler event
diff --git a/CALIBRATION/bcm_current_calib/ScalerCalib.C b/CALIBRATION/bcm_current_calib/ScalerCalib.C
new file mode 100644
index 0000000000000000000000000000000000000000..332ffe9be4310561e12e17a02693220c36e8c06c
--- /dev/null
+++ b/CALIBRATION/bcm_current_calib/ScalerCalib.C
@@ -0,0 +1,197 @@
+#include <TFile.h>
+#include <TTree.h>
+
+#include "ScalerCalib.h"
+
+using namespace std;
+
+ofstream outfile;
+
+//_________________________________
+
+ScalerCalib::ScalerCalib(string name) :
+  fName(name), fPrintFlag(DEFAULT)
+{
+
+  filename = "dummyname";
+
+}
+
+//_________________________________
+
+ScalerCalib::~ScalerCalib()
+{
+
+}
+
+//_________________________________
+
+int ScalerCalib::Run()
+{
+
+  FillContainer();
+
+  if(evnum.size() < 1)
+    {
+      cout << "ERROR: empty container! Check the input file" << endl;
+      return -1;
+    }
+
+  int pos = filename.find("scalers_");
+  runstr = (filename.substr(pos+8)).substr(0,4);
+
+  ofilename = "bcmcurrent_" + runstr + ".param";
+  outfile.open(ofilename.c_str());
+
+  outfile << "num_scal_reads = " << evnum.size();
+  outfile << "\n" << "\n";
+  outfile << "scal_read_bcm1_current = ";
+  PrintContainer(bcm1);
+
+  outfile << "\n" << "\n";
+  outfile << "scal_read_bcm2_current = ";
+  PrintContainer(bcm2);
+
+  if(fPrintFlag == ALL)
+    {
+      outfile << "\n" << "\n";
+      outfile << "scal_read_bcm4a_current = ";
+      PrintContainer(bcm4a);
+
+      outfile << "\n" << "\n";
+      outfile << "scal_read_bcm4b_current = ";
+      PrintContainer(bcm4b);
+
+      outfile << "\n" << "\n";
+      outfile << "scal_read_bcm17_current = ";
+      PrintContainer(bcm17);
+    }
+  
+  //  outfile.close();
+
+  return 0;
+  
+}
+
+//_________________________________
+
+int ScalerCalib::PrintContainer(ScalerContainer sc)
+{
+  
+  if(sc.size() < 1)
+    if(evnum.size() < 1)
+      {
+	cout << "ERROR: empty container!" << endl;
+	return -1;
+      }
+
+  for(SCIterator i = sc.begin(); i != sc.end()-1; ++i)
+    {
+      outfile << *i << ", ";
+    }
+  
+  outfile << sc.back();
+
+  /*
+  stringstream sstr;
+  string result;
+
+  std::copy(sc.begin(), sc.end()-1, ofstream_iterator<double>(sstr, ", "));
+  sstr << sc.end();  
+
+  result = sstr.str();
+  outfile << result;
+
+  result = "";
+  sstr.str("");
+  sstr.clear();
+  */
+
+  return 0;
+}
+
+//_________________________________
+
+
+int ScalerCalib::FillContainer()
+{
+
+  ClearContainers();
+
+  TFile* file = new TFile(filename.c_str());
+  if(!file->IsOpen())
+    {
+      cout << "ERROR: " << filename.c_str() << " is not open!" << endl;
+      return -1;      
+    }
+  
+  if(! file->GetListOfKeys()->Contains("TSH") )
+    {
+      cout << "ERROR: Couldn't find the Scaler Tree"  << endl;
+      return -1;      
+    }
+
+  TTree* T = (TTree*)file->Get("TSH");  
+
+  double evnumber;
+  double bcm1_current;
+  double bcm2_current;
+  double bcm4a_current;
+  double bcm4b_current;
+  double bcm17_current;
+
+  string bname[5];
+  string sarray[5] = {".BCM1.scalerCurrent",
+		      ".BCM2.scalerCurrent", 
+		      ".BCM4A.scalerCurrent",
+		      ".BCM4B.scalerCurrent",
+		      ".BCM17.scalerCurrent"};
+
+  for(int i=0; i<5; i++)
+    {
+      bname[i] = "";
+      bname[i] += fName;
+      bname[i] += sarray[i];
+    }
+
+  T->SetBranchAddress("evNumber",       &evnumber);
+  T->SetBranchAddress(bname[0].c_str(), &bcm1_current);
+  T->SetBranchAddress(bname[1].c_str(), &bcm2_current);
+  T->SetBranchAddress(bname[2].c_str(), &bcm4a_current);
+  T->SetBranchAddress(bname[3].c_str(), &bcm4b_current);
+  T->SetBranchAddress(bname[4].c_str(), &bcm17_current);
+
+  Long64_t nentries = T->GetEntries();
+  for(Long64_t ientry=0; ientry<nentries; ientry++)
+    {
+      T->GetEntry(ientry);
+
+      evnum.push_back(evnumber);
+      bcm1.push_back(bcm1_current);
+      bcm2.push_back(bcm2_current);
+      bcm4a.push_back(bcm4a_current);
+      bcm4b.push_back(bcm4b_current);
+      bcm17.push_back(bcm17_current);
+
+    }
+
+  file->Close();
+
+  return 0;
+}
+
+//_________________________________
+
+void ScalerCalib::ClearContainers()
+{
+
+  evnum.clear();
+  bcm1.clear();
+  bcm2.clear();
+  bcm4a.clear();
+  bcm4b.clear();
+  bcm17.clear();
+
+}
+
+ClassImp(ScalerCalib)
diff --git a/CALIBRATION/bcm_current_calib/ScalerCalib.h b/CALIBRATION/bcm_current_calib/ScalerCalib.h
new file mode 100644
index 0000000000000000000000000000000000000000..438dbba1cf76318107c5589abf38d15ecb8b3a29
--- /dev/null
+++ b/CALIBRATION/bcm_current_calib/ScalerCalib.h
@@ -0,0 +1,53 @@
+#ifndef __SCLAERCALIB_H__
+#define __SCLAERCALIB_H__
+
+#include <iostream>
+#include <fstream>
+#include <string>
+
+#include <vector>
+
+using namespace std;
+
+enum PrintOption {DEFAULT, ALL};
+
+typedef vector<double> ScalerContainer;
+typedef ScalerContainer::iterator SCIterator;
+
+class ScalerCalib {
+  
+ public:
+  
+  ScalerCalib(string name);
+  virtual ~ScalerCalib();
+
+  void SetInputFile(string fin){ filename = fin; }
+  void SetPrintFlag(int p_opt){ fPrintFlag = p_opt; }
+  int Run();
+
+ private:
+
+  string fName;
+  int fPrintFlag;
+
+  string runstr; // used to form a output file name
+  string filename;
+  string ofilename;
+
+  void ClearContainers();
+  int FillContainer();
+  int PrintContainer(ScalerContainer sc);
+
+
+  ScalerContainer evnum;
+  ScalerContainer bcm1;
+  ScalerContainer bcm2;
+  ScalerContainer bcm4a;
+  ScalerContainer bcm4b;
+  ScalerContainer bcm17;
+
+  ClassDef(ScalerCalib,0)
+
+};
+
+#endif /*__SCLAERCALIB_H__*/
diff --git a/CALIBRATION/bcm_current_calib/run.C b/CALIBRATION/bcm_current_calib/run.C
new file mode 100644
index 0000000000000000000000000000000000000000..56b580e2af65a49846feaba2c6ce13830032c8be
--- /dev/null
+++ b/CALIBRATION/bcm_current_calib/run.C
@@ -0,0 +1,15 @@
+R__LOAD_LIBRARY(ScalerCalib_C)
+
+void run(string fin="fin.root")
+{
+
+  //H: HMS, P: SHMS
+  ScalerCalib scalib("H");
+  scalib.SetInputFile(fin);
+  scalib.SetPrintFlag(1); //0: bcm1 and bcm2 only, 1: all
+  scalib.Run();
+
+}
+
+
+