Beam test: macro to get pedestals, mapping and constants necessary for pedestals
authorgustavo <gustavo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 18 Oct 2007 13:31:27 +0000 (13:31 +0000)
committergustavo <gustavo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 18 Oct 2007 13:31:27 +0000 (13:31 +0000)
EMCAL/macros/CalibrationDB/constants.h [new file with mode: 0755]
EMCAL/macros/CalibrationDB/get_pedestalAll.C [new file with mode: 0755]
EMCAL/macros/CalibrationDB/map.txt [new file with mode: 0755]

diff --git a/EMCAL/macros/CalibrationDB/constants.h b/EMCAL/macros/CalibrationDB/constants.h
new file mode 100755 (executable)
index 0000000..231750f
--- /dev/null
@@ -0,0 +1,51 @@
+#ifndef CONSTANTS_H
+#define CONSTANTS_H
+
+#ifndef __CINT__
+
+#ifndef TRUE
+#define TRUE                   1
+#endif
+
+#ifndef FALSE
+#define FALSE                  0
+#endif
+
+#define WHERE __FILE__ << ":" << __LINE__ << ": "
+
+#endif
+
+// from MWPC
+const int nMWPCHitMax = 10000;
+const int NMWPCPLANES = 7;
+
+// for the mapping and geometry constants
+const int ncards = 2;
+const int rows = 8;
+const int cols = 8;
+const int gains        = 2;
+const int FEC[ncards] = {5, 6}; // cards in the crate
+// we should have one charge-sensitive pre-amp per module
+const int NCSP = rows*cols;
+
+// for the readout
+const int NFEC = 2;                             // Max 2 FrontEndCard
+const int NCHIP = 4;                            // 4 ALTROs per FEC
+const int NCHAN = 16;                           // Channels per ALTRO
+const int CHANNELS = NFEC*NCHIP*NCHAN;         // Max uses ALTRO channels 
+const int TOTCHAN = CHANNELS;
+
+const int REQSAMPLES = 50;                     // This is what we ask for in the RCU
+const int EXTRASAMPLES = 15;                    // We get a few bonus ones
+const int REALSAMPLES = REQSAMPLES + EXTRASAMPLES;     // This is the reported wordcount-2
+const int SAMPLES = REQSAMPLES + EXTRASAMPLES;                 // Number of readout ALTRO words per channel (last 4 words is trailer)
+
+// general flags
+const int debug = 0;                           // Set 0/1/2/3 to print debug messages of different detail levels
+
+// put in nominal errors for pedestal for fits
+// low, and high gains are separate
+const double  NOMINAL_PEDESTAL_RMS[NFEC][2] = { {0.3, 2.0},   // FEC 1
+                                               {0.6, 4.0} }; // FEC 2 
+
+#endif
diff --git a/EMCAL/macros/CalibrationDB/get_pedestalAll.C b/EMCAL/macros/CalibrationDB/get_pedestalAll.C
new file mode 100755 (executable)
index 0000000..7d67b22
--- /dev/null
@@ -0,0 +1,611 @@
+typedef struct
+{        
+  int row;
+  int col;
+  int gain;
+  int csp;
+  int fee;
+  int chip;
+  int chan;
+} mapData;
+
+#include "constants.h"
+
+void get_pedestalAll(int runNumber = 33, 
+                    const int save = 0, const int saveDb=0)
+{
+  //Extracts pedestals from the file RUN_0{runNumber}.root.
+  //If saveDb != 0, saves pedestals to the local OCDB, separately for low and high gains.
+  //Used constant.h file with the constants and map.txt file with mapping related 
+  //to the Sept-Oct 2007 beam test at CERN.
+
+  TString DBFolder  ="local://";
+  TString DBPathLow = "Calib/Data/LowGain";
+  TString DBPathHigh = "Calib/Data/HighGain";
+    
+  Int_t firstRun = runNumber;
+  Int_t lastRun = 999999999;
+
+  // setup
+  gROOT->Time();
+  gStyle->SetOptFit(1);
+  gStyle->SetOptTitle(1);
+  gStyle->SetOptStat(0);
+  
+  gStyle->SetFillColor(10);
+  gStyle->SetCanvasColor(10);
+  
+  gStyle->SetPadBorderSize(0);
+  gStyle->SetPadBorderMode(0);
+  gStyle->SetPadLeftMargin(0.15);
+  gStyle->SetPadBottomMargin(0.15);
+  gStyle->SetTitleOffset(1.2,"X");
+  gStyle->SetTitleOffset(0.9,"Y");                  
+  gStyle->SetTitleSize(0.045,"X");
+  gStyle->SetTitleSize(0.045,"Y");
+
+  char FECstr0[20];
+  char FECstr1[20];
+  sprintf(FECstr0, "FEC %d", FEC[0]);
+  sprintf(FECstr1, "FEC %d", FEC[1]);
+
+  // get root file
+  char rootFile[80];
+  sprintf(rootFile,"RUN_%04d.root",runNumber);
+  cout<<"\n root file: "<<rootFile<<endl;
+  TFile *f = new TFile(rootFile);
+  if (f==NULL) 
+    {
+      cout<<"\n ---> No root file.\n"<<endl;
+      return 0;
+    }
+
+
+  // get map info
+  ifstream fin;
+  fin.open("map.txt");
+    
+  mapData chmap[CHANNELS];
+
+  char dummy[20];
+  fin >> dummy >> dummy >> dummy >> dummy >> dummy >> dummy >> dummy >> dummy >> dummy;
+  int ichan = 0;
+  int idum = 0;
+  int nchan = 0;
+  while ( fin.good() ) {
+    fin >> idum >> ichan;
+    if (! (fin.good() && ichan<CHANNELS) ) break;
+    fin >> chmap[ichan].row >> chmap[ichan].col >> chmap[ichan].gain >> chmap[ichan].csp
+       >> chmap[ichan].fee >> chmap[ichan].chip >> chmap[ichan].chan;
+    nchan++;
+  }
+
+  cout << " info for " << nchan << " channels read from map " << endl;
+
+  // get hSig and hPed profile histograms; the indices are channel id's
+  TProfile *hPed = (TProfile *) gROOT->FindObject("hPed");
+  TProfile *hMean = (TProfile *) gROOT->FindObject("hMean");
+  TProfile *hSig = (TProfile *) gROOT->FindObject("hSig");
+  TProfile *hAll = (TProfile *) gROOT->FindObject("hAll");
+  hPed->Approximate(false); // prevent ROOT from smoothing. profiles.
+  hMean->Approximate(false);
+  hSig->Approximate(false);
+  hAll->Approximate(false);
+
+  hPed->SetErrorOption("s"); // don't divide error with sqrt(entries)
+  hMean->SetErrorOption("s");
+  hSig->SetErrorOption("s");
+  hAll->SetErrorOption("s");
+
+  TH1F *hRMS = new TH1F("hRMS", "hRMS", CHANNELS, -0.5, CHANNELS - 0.5);
+  TH1F *hRMS1D = new TH1F("hRMS1D", "hRMS1D", 100, 0, 1);
+
+  // define canvas : we'll have plots with info vs channel and info vs CSP (high and low)
+  bool extra = false;
+  if (extra) {
+    TCanvas *cSignal = new TCanvas("cSignal","Signal",500,0,500,620);  
+    cSignal->Divide(1,3);
+  }
+  TCanvas *cPedestal = new TCanvas("cPedestal","Pedestal",400,50,500,620);  
+  cPedestal->Divide(1,3); 
+  TCanvas *cMean = new TCanvas("cMean","Mean",400,50,500,620);  
+  cMean->Divide(1,3); 
+  TCanvas *cRMS = new TCanvas("cRMS","Pedestal RMS",400,50,500,620);  
+  cRMS->Divide(1,3); 
+
+  TCanvas *cRMS1D = new TCanvas("cRMS1D","Pedestal RMS - 1D",10,10,400,300);  
+
+  const int NGAIN = 2;
+  const char * GAINSTR[] = {"Low", "High"};
+
+  // plot results
+  TH1F* hRMSCSP[NGAIN];
+  TH1F* hPedCSP[NGAIN]; 
+  TH1F* hSigCSP[NGAIN]; 
+  TH1F* hMeanCSP[NGAIN]; 
+
+  char info[80];
+  char id[80];
+
+  for (int igain=0; igain<NGAIN; igain++) { 
+    sprintf(id, "hRMSCSP%d",igain);
+    sprintf(info, "RMS vs CSP # - %s gain",GAINSTR[igain]);
+    hRMSCSP[igain] = new TH1F(id, info, NCSP, -0.5, NCSP-0.5);
+
+    sprintf(id, "hPedCSP%d",igain);
+    sprintf(info, "Pedestal vs CSP # - %s gain",GAINSTR[igain]);
+    hPedCSP[igain] = new TH1F(id, info, NCSP, -0.5, NCSP-0.5);
+
+    sprintf(id, "hSigCSP%d",igain);
+    sprintf(info, "Signal vs CSP # - %s gain",GAINSTR[igain]);
+    hSigCSP[igain] = new TH1F(id, info, NCSP, -0.5, NCSP-0.5);
+
+    sprintf(id, "hMeanCSP%d",igain);
+    sprintf(info, "Mean vs CSP # - %s gain",GAINSTR[igain]);
+    hMeanCSP[igain] = new TH1F(id, info, NCSP, -0.5, NCSP-0.5);
+
+    // setup the way the plots should look
+    hRMSCSP[igain]->SetXTitle("CSP channels");
+    hRMSCSP[igain]->SetYTitle("RMS (ADC counts)");
+    hRMSCSP[igain]->SetMarkerStyle(20);
+    hRMSCSP[igain]->SetMarkerColor(2);
+    hRMSCSP[igain]->SetMarkerSize(1);
+    hRMSCSP[igain]->GetYaxis()->SetNdivisions(505);
+
+    hPedCSP[igain]->SetXTitle("CSP channels");
+    hPedCSP[igain]->SetYTitle("Pedestal (ADC counts)");
+    hPedCSP[igain]->SetMarkerStyle(20);
+    hPedCSP[igain]->SetMarkerColor(2);
+    hPedCSP[igain]->SetMarkerSize(1);
+    hPedCSP[igain]->GetYaxis()->SetNdivisions(505);
+
+    hSigCSP[igain]->SetXTitle("CSP channels");
+    hSigCSP[igain]->SetYTitle("Signal (ADC counts)");
+    hSigCSP[igain]->SetMarkerStyle(20);
+    hSigCSP[igain]->SetMarkerColor(2);
+    hSigCSP[igain]->SetMarkerSize(1);
+    hSigCSP[igain]->GetYaxis()->SetNdivisions(505);
+
+    hMeanCSP[igain]->SetXTitle("CSP channels");
+    hMeanCSP[igain]->SetYTitle("Signal (ADC counts)");
+    hMeanCSP[igain]->SetMarkerStyle(20);
+    hMeanCSP[igain]->SetMarkerColor(2);
+    hMeanCSP[igain]->SetMarkerSize(1);
+    hMeanCSP[igain]->GetYaxis()->SetNdivisions(505);
+  }
+
+  //Creates calibration objects
+  AliEMCALCalibData* cdb[2];
+  cdb[0] = new AliEMCALCalibData(); //for low gain
+  cdb[1] = new AliEMCALCalibData(); //for high gain
+
+  // fill CSP histograms too
+  for (Int_t k=0; k<CHANNELS; k++) {
+    int igain = chmap[k].gain;
+    int icsp = chmap[k].csp;
+    int col = chmap[k].col;
+    int row = chmap[k].row;
+    if (chmap[k].fee != FEC[0]) { icsp += NCSP/2; } // offset for 2nd card
+
+    // report suspicious channels
+    if ( hPed->GetBinContent(k+1) == 0 ) {
+      printf("Zero pedestal channel : %d, FEE %d Chip %d Chan %d : CSP %d gain %d\n", 
+            k, chmap[k].fee, chmap[k].chip, chmap[k].chan,  icsp, igain); 
+    }
+
+    hRMSCSP[igain]->SetBinContent(icsp+1, hPed->GetBinError(k+1));
+    hRMS->SetBinContent(k+1, hPed->GetBinError(k+1));
+    if (igain == 1) {
+      hRMS1D->Fill(hPed->GetBinError(k+1));
+    }
+
+    Int_t supermod=0;
+    cdb[igain]->SetADCpedestal(supermod,col,row,hPed->GetBinContent(k+1));
+    printf("--- col%d row%d gain%d ped %.3f\n",col,row,igain,
+          cdb[igain]->GetADCpedestal(supermod,col,row));
+
+    hPedCSP[igain]->SetBinContent(icsp+1, hPed->GetBinContent(k+1));
+    hPedCSP[igain]->SetBinError(icsp+1, hPed->GetBinError(k+1));
+
+    hSigCSP[igain]->SetBinContent(icsp+1, hSig->GetBinContent(k+1));
+    hSigCSP[igain]->SetBinError(icsp+1, hSig->GetBinError(k+1));
+
+    hMeanCSP[igain]->SetBinContent(icsp+1, hMean->GetBinContent(k+1));
+    hMeanCSP[igain]->SetBinError(icsp+1, hMean->GetBinError(k+1));
+  }
+
+  //-------------------------------------------------------------------------------
+  
+  //Save calibration objects to OCDB.
+  if(saveDb) {
+
+    AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT");
+    AliCDBManager::Instance()->SetSpecificStorage("EMCAL/*",DBFolder.Data());
+
+    AliCDBMetaData md;
+    md.SetComment("EMCAL beam test at CERN (Oct 2007)");
+   
+    AliCDBStorage* storage = AliCDBManager::Instance()->GetSpecificStorage("EMCAL/*");
+    if(storage) {
+      AliCDBId idLow(DBPathLow.Data(),firstRun,lastRun);
+      storage->Put(cdb[0],idLow, &md);
+
+      AliCDBId idHigh(DBPathHigh.Data(),firstRun,lastRun);
+      storage->Put(cdb[1],idHigh, &md);
+
+    }
+    
+  }
+  
+  
+  // draw RMS
+  cRMS->cd(1);
+  hRMS->Draw("hist");
+  cRMS->cd(2);
+  hRMSCSP[0]->Draw("P");
+  cRMS->cd(3);
+  hRMSCSP[1]->Draw("P");
+
+  // lines
+  double min = hRMSCSP[1]->GetMinimum();
+  double max = hRMSCSP[1]->GetMaximum();
+  int ntcards = NCSP/8; // 8 CSPs per T-card
+  for (int tcard = 0; tcard<ntcards; tcard++) {
+    double xpos = tcard*8 - 0.5;
+    TLine *line = new TLine(xpos, min, xpos, max); 
+    line->SetLineColor(3);
+    line->SetLineWidth(1);
+    line->Draw("same");
+
+    //text
+    double xtex = tcard*8 + 1;
+    double ytex = max * 0.1;
+    char texstr[20];
+    sprintf(texstr,"T-card %d", tcard%4);        
+    TLatex *tex = new TLatex(xtex, ytex, texstr);
+    tex->SetTextSize(0.05);
+    tex->SetTextColor(4);
+    tex->SetLineWidth(2);
+    tex->Draw();
+  }
+
+  char Run[40];
+  sprintf(Run,"Run: %d", runNumber);
+  TLatex *tex = new TLatex(8, max*1.1, Run);    // 8 is just an arb. position    
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+   
+  TLatex *tex = new TLatex(16, max*1.1, ", Gain: high");        
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  cRMS->cd(1);
+  min = hRMS->GetMinimum();
+  max = hRMS->GetMaximum();
+  double fecpos = CHANNELS/2 - 0.5;
+  TLine *line = new TLine(fecpos, min, fecpos, max); 
+  line->SetLineColor(4);
+  line->SetLineWidth(1);
+  line->Draw("same");
+
+  TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  cRMS->cd(2);
+  min = hRMSCSP[0]->GetMinimum();
+  max = hRMSCSP[0]->GetMaximum();
+  fecpos = NCSP/2 - 0.5;
+  TLine *line = new TLine(fecpos, min, fecpos, max); 
+  line->SetLineColor(4);
+  line->SetLineWidth(1);
+  line->Draw("same");
+
+  TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  // make Pedestal plot
+  //-------------------------------------------------------------------------------
+  cPedestal->cd(1);
+  hPed->Draw("hist");
+  cPedestal->cd(2);
+  hPedCSP[0]->Draw("P");
+  cPedestal->cd(3);
+  hPedCSP[1]->Draw("P");
+
+  // lines
+  min = hPedCSP[1]->GetMinimum();
+  max = hPedCSP[1]->GetMaximum();
+  for (int tcard = 0; tcard<ntcards; tcard++) {
+    double xpos = tcard*8 - 0.5;
+    TLine *line = new TLine(xpos, min, xpos, max); 
+    line->SetLineColor(3);
+    line->SetLineWidth(1);
+    line->Draw("same");
+
+    //text
+    double xtex = tcard*8 + 1;
+    double ytex = max * 0.1;
+    char texstr[20];
+    sprintf(texstr,"T-card %d", tcard%4);        
+    TLatex *tex = new TLatex(xtex, ytex, texstr);
+    tex->SetTextSize(0.05);
+    tex->SetTextColor(4);
+    tex->SetLineWidth(2);
+    tex->Draw();
+  }
+
+  sprintf(Run,"Run: %d", runNumber);
+  TLatex *tex = new TLatex(8, max*1.1, Run);    // 8 is just an arb. position    
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+   
+  TLatex *tex = new TLatex(16, max*1.1, ", Gain: high");        
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  cPedestal->cd(1);
+  min = hPed->GetMinimum();
+  max = hPed->GetMaximum();
+  fecpos = CHANNELS/2 - 0.5;
+  TLine *line = new TLine(fecpos, min, fecpos, max); 
+  line->SetLineColor(4);
+  line->SetLineWidth(1);
+  line->Draw("same");
+
+  TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  cPedestal->cd(2);
+  min = hPedCSP[0]->GetMinimum();
+  max = hPedCSP[0]->GetMaximum();
+  fecpos = NCSP/2 - 0.5;
+  TLine *line = new TLine(fecpos, min, fecpos, max); 
+  line->SetLineColor(4);
+  line->SetLineWidth(1);
+  line->Draw("same");
+
+  TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  // make Signal plot 
+  //-------------------------------------------------------------------------------
+  if (extra) {
+  cSignal->cd(1);
+  hSig->Draw("hist");
+  cSignal->cd(2);
+  hSigCSP[0]->Draw("P");
+  cSignal->cd(3);
+  hSigCSP[1]->Draw("P");
+
+  // lines
+  min = hSigCSP[1]->GetMinimum();
+  max = hSigCSP[1]->GetMaximum();
+  for (int tcard = 0; tcard<ntcards; tcard++) {
+    double xpos = tcard*8 - 0.5;
+    TLine *line = new TLine(xpos, min, xpos, max); 
+    line->SetLineColor(3);
+    line->SetLineWidth(1);
+    line->Draw("same");
+
+    //text
+    double xtex = tcard*8 + 1;
+    double ytex = max * 0.1;
+    char texstr[20];
+    sprintf(texstr,"T-card %d", tcard%4);        
+    TLatex *tex = new TLatex(xtex, ytex, texstr);
+    tex->SetTextSize(0.05);
+    tex->SetTextColor(4);
+    tex->SetLineWidth(2);
+    tex->Draw();
+  }
+
+  sprintf(Run,"Run: %d", runNumber);
+  TLatex *tex = new TLatex(8, max*1.1, Run);    // 8 is just an arb. position    
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+   
+  TLatex *tex = new TLatex(16, max*1.1, ", Gain: high");        
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  cSignal->cd(1);
+  min = hSig->GetMinimum();
+  max = hSig->GetMaximum();
+  fecpos = CHANNELS/2 - 0.5;
+  TLine *line = new TLine(fecpos, min, fecpos, max); 
+  line->SetLineColor(4);
+  line->SetLineWidth(1);
+  line->Draw("same");
+
+  TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  cSignal->cd(2);
+  min = hSigCSP[0]->GetMinimum();
+  max = hSigCSP[0]->GetMaximum();
+  fecpos = NCSP/2 - 0.5;
+  TLine *line = new TLine(fecpos, min, fecpos, max); 
+  line->SetLineColor(4);
+  line->SetLineWidth(1);
+  line->Draw("same");
+
+  TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+  }
+
+  // make Mean plot 
+  //-------------------------------------------------------------------------------
+  cMean->cd(1);
+  hMean->Draw("hist");
+  cMean->cd(2);
+  hMeanCSP[0]->Draw("P");
+  cMean->cd(3);
+  hMeanCSP[1]->Draw("P");
+
+  // lines
+  min = hMeanCSP[1]->GetMinimum();
+  max = hMeanCSP[1]->GetMaximum();
+  for (int tcard = 0; tcard<ntcards; tcard++) {
+    double xpos = tcard*8 - 0.5;
+    TLine *line = new TLine(xpos, min, xpos, max); 
+    line->SetLineColor(3);
+    line->SetLineWidth(1);
+    line->Draw("same");
+
+    //text
+    double xtex = tcard*8 + 1;
+    double ytex = max * 0.1;
+    char texstr[20];
+    sprintf(texstr,"T-card %d", tcard%4);        
+    TLatex *tex = new TLatex(xtex, ytex, texstr);
+    tex->SetTextSize(0.05);
+    tex->SetTextColor(4);
+    tex->SetLineWidth(2);
+    tex->Draw();
+  }
+
+  sprintf(Run,"Run: %d", runNumber);
+  TLatex *tex = new TLatex(8, max*1.1, Run);    // 8 is just an arb. position    
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+   
+  TLatex *tex = new TLatex(16, max*1.1, ", Gain: high");        
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  cMean->cd(1);
+  min = hMean->GetMinimum();
+  max = hMean->GetMaximum();
+  fecpos = CHANNELS/2 - 0.5;
+  TLine *line = new TLine(fecpos, min, fecpos, max); 
+  line->SetLineColor(4);
+  line->SetLineWidth(1);
+  line->Draw("same");
+
+  TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  cMean->cd(2);
+  min = hMeanCSP[0]->GetMinimum();
+  max = hMeanCSP[0]->GetMaximum();
+  fecpos = NCSP/2 - 0.5;
+  TLine *line = new TLine(fecpos, min, fecpos, max); 
+  line->SetLineColor(4);
+  line->SetLineWidth(1);
+  line->Draw("same");
+
+  TLatex *tex = new TLatex(fecpos*0.5, max*1.1, FECstr0);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  TLatex *tex = new TLatex(fecpos*1.5, max*1.1, FECstr1);
+  tex->SetTextSize(0.05);
+  tex->SetTextColor(4);
+  tex->SetLineWidth(2);
+  tex->Draw();
+
+  // make unique files 
+  if (save) {
+  char gifFile[80];
+  if (extra) {
+    sprintf(gifFile,"gif/Run%d_Signal.gif",runNumber);
+    cSignal->SaveAs(gifFile);
+  }
+  sprintf(gifFile,"gif/Run%d_Pedestal.gif",runNumber);
+  cPedestal->SaveAs(gifFile);
+  sprintf(gifFile,"gif/Run%d_RMS.gif",runNumber);
+  cRMS->SaveAs(gifFile);
+  sprintf(gifFile,"gif/Run%d_Mean.gif",runNumber);
+  cMean->SaveAs(gifFile);
+  }
+
+  cRMS1D->cd();
+  hRMS1D->Fit("gaus");
+  hRMS1D->Draw();
+
+}
+
diff --git a/EMCAL/macros/CalibrationDB/map.txt b/EMCAL/macros/CalibrationDB/map.txt
new file mode 100755 (executable)
index 0000000..3fc2395
--- /dev/null
@@ -0,0 +1,129 @@
+i      num     row     col     gain    csp     fee     chip    chan
+0      0       3       2       0       11      5       0       0
+1      1       3       2       1       11      5       0       1
+2      2       3       3       0       27      5       0       2
+3      3       3       3       1       27      5       0       3
+4      4       2       2       0       10      5       0       4
+5      5       2       2       1       10      5       0       5
+6      6       2       3       0       26      5       0       6
+7      7       2       3       1       26      5       0       7
+8      8       0       3       1       24      5       0       8
+9      9       0       3       0       24      5       0       9
+10     10      0       2       1       8       5       0       10
+11     11      0       2       0       8       5       0       11
+12     12      1       3       1       25      5       0       12
+13     13      1       3       0       25      5       0       13
+14     14      1       2       1       9       5       0       14
+15     15      1       2       0       9       5       0       15
+16     16      4       0       0       3       5       2       0
+17     17      4       0       1       3       5       2       1
+18     18      4       1       0       19      5       2       2
+19     19      4       1       1       19      5       2       3
+20     20      5       0       0       2       5       2       4
+21     21      5       0       1       2       5       2       5
+22     22      5       1       0       18      5       2       6
+23     23      5       1       1       18      5       2       7
+24     24      7       1       1       16      5       2       8
+25     25      7       1       0       16      5       2       9
+26     26      7       0       1       0       5       2       10
+27     27      7       0       0       0       5       2       11
+28     28      6       1       1       17      5       2       12
+29     29      6       1       0       17      5       2       13
+30     30      6       0       1       1       5       2       14
+31     31      6       0       0       1       5       2       15
+32     32      3       0       0       4       5       3       0
+33     33      3       0       1       4       5       3       1
+34     34      3       1       0       20      5       3       2
+35     35      3       1       1       20      5       3       3
+36     36      2       0       0       5       5       3       4
+37     37      2       0       1       5       5       3       5
+38     38      2       1       0       21      5       3       6
+39     39      2       1       1       21      5       3       7
+40     40      0       1       1       23      5       3       8
+41     41      0       1       0       23      5       3       9
+42     42      0       0       1       7       5       3       10
+43     43      0       0       0       7       5       3       11
+44     44      1       1       1       22      5       3       12
+45     45      1       1       0       22      5       3       13
+46     46      1       0       1       6       5       3       14
+47     47      1       0       0       6       5       3       15
+48     48      4       2       0       12      5       4       0
+49     49      4       2       1       12      5       4       1
+50     50      4       3       0       28      5       4       2
+51     51      4       3       1       28      5       4       3
+52     52      5       2       0       13      5       4       4
+53     53      5       2       1       13      5       4       5
+54     54      5       3       0       29      5       4       6
+55     55      5       3       1       29      5       4       7
+56     56      7       3       1       31      5       4       8
+57     57      7       3       0       31      5       4       9
+58     58      7       2       1       15      5       4       10
+59     59      7       2       0       15      5       4       11
+60     60      6       3       1       30      5       4       12
+61     61      6       3       0       30      5       4       13
+62     62      6       2       1       14      5       4       14
+63     63      6       2       0       14      5       4       15
+64     64      3       6       0       11      6       0       0
+65     65      3       6       1       11      6       0       1
+66     66      3       7       0       27      6       0       2
+67     67      3       7       1       27      6       0       3
+68     68      2       6       0       10      6       0       4
+69     69      2       6       1       10      6       0       5
+70     70      2       7       0       26      6       0       6
+71     71      2       7       1       26      6       0       7
+72     72      0       7       1       24      6       0       8
+73     73      0       7       0       24      6       0       9
+74     74      0       6       1       8       6       0       10
+75     75      0       6       0       8       6       0       11
+76     76      1       7       1       25      6       0       12
+77     77      1       7       0       25      6       0       13
+78     78      1       6       1       9       6       0       14
+79     79      1       6       0       9       6       0       15
+80     80      4       4       0       3       6       2       0
+81     81      4       4       1       3       6       2       1
+82     82      4       5       0       19      6       2       2
+83     83      4       5       1       19      6       2       3
+84     84      5       4       0       2       6       2       4
+85     85      5       4       1       2       6       2       5
+86     86      5       5       0       18      6       2       6
+87     87      5       5       1       18      6       2       7
+88     88      7       5       1       16      6       2       8
+89     89      7       5       0       16      6       2       9
+90     90      7       4       1       0       6       2       10
+91     91      7       4       0       0       6       2       11
+92     92      6       5       1       17      6       2       12
+93     93      6       5       0       17      6       2       13
+94     94      6       4       1       1       6       2       14
+95     95      6       4       0       1       6       2       15
+96     96      3       4       0       4       6       3       0
+97     97      3       4       1       4       6       3       1
+98     98      3       5       0       20      6       3       2
+99     99      3       5       1       20      6       3       3
+100    100     2       4       0       5       6       3       4
+101    101     2       4       1       5       6       3       5
+102    102     2       5       0       21      6       3       6
+103    103     2       5       1       21      6       3       7
+104    104     0       5       1       23      6       3       8
+105    105     0       5       0       23      6       3       9
+106    106     0       4       1       7       6       3       10
+107    107     0       4       0       7       6       3       11
+108    108     1       5       1       22      6       3       12
+109    109     1       5       0       22      6       3       13
+110    110     1       4       1       6       6       3       14
+111    111     1       4       0       6       6       3       15
+112    112     4       6       0       12      6       4       0
+113    113     4       6       1       12      6       4       1
+114    114     4       7       0       28      6       4       2
+115    115     4       7       1       28      6       4       3
+116    116     5       6       0       13      6       4       4
+117    117     5       6       1       13      6       4       5
+118    118     5       7       0       29      6       4       6
+119    119     5       7       1       29      6       4       7
+120    120     7       7       1       31      6       4       8
+121    121     7       7       0       31      6       4       9
+122    122     7       6       1       15      6       4       10
+123    123     7       6       0       15      6       4       11
+124    124     6       7       1       30      6       4       12
+125    125     6       7       0       30      6       4       13
+126    126     6       6       1       14      6       4       14
+127    127     6       6       0       14      6       4       15