ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include "TString.h"
#include "TH1.h"
#include "TH2.h"
#include "TFile.h"
#include "TObjArray.h"
#include "TObject.h"
#include "TCanvas.h"
#include "TStyle.h"
#include "Riostream.h"

#include "AliITSgeomTGeo.h"
#include "AliITSGainSSDv2.h"
#include "AliITSBadChannelsSSDv2.h"
#include "AliITSNoiseSSDv2.h"
#include "AliITSPedestalSSDv2.h"
#include "AliITSGainSSD.h"
#include "AliITSBadChannelsSSD.h"
#include "AliITSNoiseSSD.h"
#include "AliITSPedestalSSD.h"
#include "AliCDBManager.h"
#include "AliCDBEntry.h"
#endif


//====================================================================//
void Noise(AliCDBManager * man);
void Pedestal(AliCDBManager * man);
void GainCalibration(AliCDBManager * man);
void ReadOldSSDPedestal(TObjArray *array, AliITSPedestalSSDv2 *pedestalSSD);
void ReadOldSSDNoise(TObjArray *array, AliITSNoiseSSDv2 *noiseSSD);
void ReadOldSSDBadChannels(TObjArray *array, AliITSBadChannelsSSDv2 *badChannelsSSD);
void ReadOldSSDGain(TObjArray *array, AliITSGainSSDv2 *gainSSD);
void drawNoiseDistributions(Int_t runNumber);
void drawPedestalDistributions(Int_t runNumber);
//====================================================================//

//_____________________________________________________________________//
void correlateOCDBforSSD(const char* type = "alien", Int_t runNumber = 0) {
  //This macro allows to read the pedestal values from the reference 
  //directory and correlate them with the bad channel list.
  //It also allows to correlate the noise values in the OCDB with 
  //the bad channel list.
  TString gType = type;
  
  AliCDBManager *man1 = AliCDBManager::Instance();
  
  if(gType == "alien") {
    man1->SetDefaultStorage("alien://folder=/alice/data/2009/OCDB/");
    man1->SetSpecificStorage("ITS/Ref/PedestalSSD",
			     "alien://folder=/alice/data/2009/Reference/");
  }
  else if(gType == "local") {
    man1->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
    man1->SetSpecificStorage("ITS/Ref/PedestalSSD",
			     "local://$ALICE_ROOT/");
  }
  else {
    cout<<"Allowed types: local or alien!!!"<<endl;
    abort();
  }
  
  man1->SetRun(runNumber);
    
  Pedestal(man1);
  Noise(man1);
}

//_____________________________________________________________________//
void drawNoiseDistributions(Int_t runNumber) {
  //Draws the noise distributions for each side and layer
  TString filename = "noiseDistributionsSSD."; filename += runNumber;
  filename += ".root";
  TFile *f = TFile::Open(filename.Data());
  TH1F *gHistNoisePSideLayer5 = dynamic_cast<TH1F *>(f->Get("gHistNoisePSideLayer5"));
  TH1F *gHistNoiseNSideLayer5 = dynamic_cast<TH1F *>(f->Get("gHistNoiseNSideLayer5"));
  TH1F *gHistNoisePSideLayer6 = dynamic_cast<TH1F *>(f->Get("gHistNoisePSideLayer6"));
  TH1F *gHistNoiseNSideLayer6 = dynamic_cast<TH1F *>(f->Get("gHistNoiseNSideLayer6"));

  TCanvas *c1 = new TCanvas("c1","Noise distribution (P-side, Layer 5)",
			    0,0,400,400);
  c1->SetFillColor(10); c1->SetHighLightColor(10); c1->SetLogy();
  gHistNoisePSideLayer5->SetStats(kFALSE); 
  gHistNoisePSideLayer5->GetXaxis()->SetRangeUser(0.0,20.);
  gHistNoisePSideLayer5->Draw();
  c1->SaveAs("Noise-PSide-Layer5.eps");

  TCanvas *c2 = new TCanvas("c2","Noise distribution (N-side, Layer 5)",
			    400,0,400,400);
  c2->SetFillColor(10); c2->SetHighLightColor(10); c2->SetLogy();
  gHistNoiseNSideLayer5->SetStats(kFALSE); 
  gHistNoiseNSideLayer5->GetXaxis()->SetRangeUser(0.0,20.);
  gHistNoiseNSideLayer5->Draw();
  c2->SaveAs("Noise-NSide-Layer5.eps");

  TCanvas *c3 = new TCanvas("c3","Noise distribution (P-side, Layer 6)",
			    0,400,400,400);
  c3->SetFillColor(10); c3->SetHighLightColor(10); c3->SetLogy();
  gHistNoisePSideLayer6->SetStats(kFALSE); 
  gHistNoisePSideLayer6->GetXaxis()->SetRangeUser(0.0,20.);
  gHistNoisePSideLayer6->Draw();
  c3->SaveAs("Noise-PSide-Layer6.eps");

  TCanvas *c4 = new TCanvas("c4","Noise distribution (N-side, Layer 6)",
			    400,400,400,400);
  c4->SetFillColor(10); c4->SetHighLightColor(10); c4->SetLogy();
  gHistNoiseNSideLayer6->SetStats(kFALSE); 
  gHistNoiseNSideLayer6->GetXaxis()->SetRangeUser(0.0,20.);
  gHistNoiseNSideLayer6->Draw();
  c4->SaveAs("Noise-NSide-Layer6.eps");
}

//_____________________________________________________________________//
void drawPedestalDistributions(Int_t runNumber) {
  //Draws the pedestal distributions for each side and layer
  TString filename = "pedestalDistributionsSSD."; filename += runNumber;
  filename += ".root";
  TFile *f = TFile::Open(filename.Data());
  TH1F *gHistPedestalPSideLayer5 = dynamic_cast<TH1F *>(f->Get("gHistPedestalPSideLayer5"));
  TH1F *gHistPedestalNSideLayer5 = dynamic_cast<TH1F *>(f->Get("gHistPedestalNSideLayer5"));
  TH1F *gHistPedestalPSideLayer6 = dynamic_cast<TH1F *>(f->Get("gHistPedestalPSideLayer6"));
  TH1F *gHistPedestalNSideLayer6 = dynamic_cast<TH1F *>(f->Get("gHistPedestalNSideLayer6"));

  TCanvas *c1 = new TCanvas("c1","Pedestal distribution (P-side, Layer 5)",
			    0,0,400,400);
  c1->SetFillColor(10); c1->SetHighLightColor(10); c1->SetLogy();
  gHistPedestalPSideLayer5->SetStats(kFALSE); gHistPedestalPSideLayer5->Draw();
  c1->SaveAs("Pedestal-PSide-Layer5.eps");

  TCanvas *c2 = new TCanvas("c2","Pedestal distribution (N-side, Layer 5)",
			    400,0,400,400);
  c2->SetFillColor(10); c2->SetHighLightColor(10); c2->SetLogy();
  gHistPedestalNSideLayer5->SetStats(kFALSE); gHistPedestalNSideLayer5->Draw();
  c2->SaveAs("Pedestal-NSide-Layer5.eps");
  
  TCanvas *c3 = new TCanvas("c3","Pedestal distribution (P-side, Layer 6)",
			    0,400,400,400);
  c3->SetFillColor(10); c3->SetHighLightColor(10); c3->SetLogy();
  gHistPedestalPSideLayer6->SetStats(kFALSE); gHistPedestalPSideLayer6->Draw();
  c3->SaveAs("Pedestal-PSide-Layer6.eps");

  TCanvas *c4 = new TCanvas("c4","Pedestal distribution (N-side, Layer 6)",
			    400,400,400,400);
  c4->SetFillColor(10); c4->SetHighLightColor(10); c4->SetLogy();
  gHistPedestalNSideLayer6->SetStats(kFALSE); gHistPedestalNSideLayer6->Draw();
  c4->SaveAs("Pedestal-NSide-Layer6.eps");
}

//_____________________________________________________________________//
void Pedestal(AliCDBManager * man) {
  //Reads the noise OCDB file
  const Int_t fgkSSDMODULES = 1698;
  static const Int_t fgkDefaultNStripsSSD = 768;

  Int_t runNumber = man->GetRun();

  //=========================================================//
  //pedestal histograms
  TH1F *gHistPedestalPSideLayer5 = new TH1F("gHistPedestalPSideLayer5",
					    "Pedestal values (P-side, Layer5); ADC counts; Entries;",
					    1000,-500,500);
  TH1F *gHistPedestalNSideLayer5 = new TH1F("gHistPedestalNSideLayer5",
					    "Pedestal values (N-side, Layer5); ADC counts; Entries;",
					    1000,-500,500);
  TH1F *gHistPedestalPSideLayer6 = new TH1F("gHistPedestalPSideLayer6",
					    "Pedestal values (P-side, Layer6); ADC counts; Entries;",
					    1000,-500,500);
  TH1F *gHistPedestalNSideLayer6 = new TH1F("gHistPedestalNSideLayer6",
					    "Pedestal values (N-side, Layer6); ADC counts; Entries;",
					    1000,-500,500);

  //=========================================================//
  Int_t fLayer = 0,fLadder = 0, fModule = 0;
  
  //=========================================================//
  AliITSBadChannelsSSDv2 *badChannelsSSD = new AliITSBadChannelsSSDv2();
  AliCDBEntry *entryBadChannelsSSD = man->Get("ITS/Calib/BadChannelsSSD");
  TObject *emptyBadChannel = (TObject *)entryBadChannelsSSD->GetObject();
  TString objectnameBadChannel = emptyBadChannel->GetName();
  if(objectnameBadChannel=="TObjArray") {
    TObjArray *badChannelsSSDOld = (TObjArray *)entryBadChannelsSSD->GetObject();
    ReadOldSSDBadChannels(badChannelsSSDOld, badChannelsSSD);
  }
  else if(objectnameBadChannel=="AliITSBadChannelsSSDv2") {
    cout<<"Reading the new format of the calibration file..."<<endl;
    badChannelsSSD = (AliITSBadChannelsSSDv2 *)entryBadChannelsSSD->GetObject();
  }

  //=========================================================//
  AliITSPedestalSSDv2 *pedestalSSD = new AliITSPedestalSSDv2();
  AliCDBEntry *entryPedestalSSD = man->Get("ITS/Ref/PedestalSSD");
  TObject *emptyPedestal = (TObject *)entryPedestalSSD->GetObject();
  TString objectnamePedestal = emptyPedestal->GetName();
  if(objectnamePedestal=="TObjArray") {
    TObjArray *pedestalSSDOld = (TObjArray *)entryPedestalSSD->GetObject();
    ReadOldSSDPedestal(pedestalSSDOld, pedestalSSD);
  }
  else if(objectnamePedestal=="AliITSPedestalSSDv2") {
    cout<<"Reading the new format of the calibration file..."<<endl;
    pedestalSSD = (AliITSPedestalSSDv2 *)entryPedestalSSD->GetObject();
  }

  Double_t pedestalPSide = 0.0, pedestalNSide = 0.0;
  Int_t badChannelPSide = 0, badChannelNSide = 0;
  for (Int_t i = 0; i < fgkSSDMODULES; i++) {
    AliITSgeomTGeo::GetModuleId(i+500,fLayer,fLadder,fModule);      
    //cout<<"Pedestal for module: "<<i+500<<" - Layer: "<<fLayer<<endl;
    for(Int_t j = 0; j < fgkDefaultNStripsSSD; j++) {
      badChannelPSide = (Int_t)(badChannelsSSD->GetBadChannelP(i,j));
      pedestalPSide = pedestalSSD->GetPedestalP(i,j);
      if(badChannelPSide == 0) {
	//Printf("Pedestal value: %lf",pedestal);
	if(fLayer == 5) 
	  gHistPedestalPSideLayer5->Fill(pedestalPSide);
	if(fLayer == 6) 
	  gHistPedestalPSideLayer6->Fill(pedestalPSide);
      }
      
      badChannelNSide = (Int_t)(badChannelsSSD->GetBadChannelN(i,j));
      pedestalNSide = pedestalSSD->GetPedestalN(i,j);
      if(badChannelNSide == 0) {
	if(fLayer == 5) 
	  gHistPedestalNSideLayer5->Fill(pedestalNSide);
	if(fLayer == 6) 
	  gHistPedestalNSideLayer6->Fill(pedestalNSide);
      }
    }//loop over strips
  }//loop over modules

  TString output = "pedestalDistributionsSSD."; output += runNumber; 
  output += ".root";
  TFile *f = TFile::Open(output.Data(),"recreate");
  gHistPedestalPSideLayer5->Write();
  gHistPedestalNSideLayer5->Write();
  gHistPedestalPSideLayer6->Write();
  gHistPedestalNSideLayer6->Write();
  f->Close();
}

//_____________________________________________________________________//
void Noise(AliCDBManager * man) {
  //Reads the noise OCDB file
  const Int_t fgkSSDMODULES = 1698;
  const Int_t fgkSSDSTRIPSPERMODULE = 1536;
  static const Int_t fgkDefaultNStripsSSD = 768;

  Int_t runNumber = man->GetRun();

  //noise histograms
  TH1F *gHistNoisePSideLayer5 = new TH1F("gHistNoisePSideLayer5",
					 "Noise values (P-side, Layer5); ADC counts; Entries;",
					 1000,0,100);
  TH1F *gHistNoiseNSideLayer5 = new TH1F("gHistNoiseNSideLayer5",
					 "Noise values (N-side, Layer5); ADC counts; Entries;",
					 1000,0,100);
  TH1F *gHistNoisePSideLayer6 = new TH1F("gHistNoisePSideLayer6",
					 "Noise values (P-side, Layer6); ADC counts; Entries;",
					 1000,0,100);
  TH1F *gHistNoiseNSideLayer6 = new TH1F("gHistNoiseNSideLayer6",
					 "Noise values (N-side, Layer6); ADC counts; Entries;",
					 1000,0,100);

  Int_t fLayer = 0,fLadder = 0, fModule = 0;
  Int_t fHistCounter = 0;
  TString fTitle;
  TObjArray *array = new TObjArray();
  TH1D *hNoiseModule[fgkSSDMODULES];   
  for(Int_t i = 500; i < fgkSSDMODULES + 500; i++) {
    AliITSgeomTGeo::GetModuleId(i,fLayer,fLadder,fModule);
    fTitle = "SSD_Noise_Layer"; fTitle += fLayer;
    fTitle += "_Ladder"; fTitle += fLadder;
    fTitle += "_Module"; fTitle += fModule;
    
    hNoiseModule[fHistCounter] = new TH1D(fTitle.Data(),fTitle.Data(),1540,0,1540);
    hNoiseModule[fHistCounter]->GetXaxis()->SetTitleColor(1);
    hNoiseModule[fHistCounter]->GetXaxis()->SetTitle("Strip number");
    hNoiseModule[fHistCounter]->GetYaxis()->SetTitle("Noise");
    array->AddLast(hNoiseModule[fHistCounter]);
    fHistCounter += 1;
  }
  
  //=========================================================//
  AliITSBadChannelsSSDv2 *badChannelsSSD = new AliITSBadChannelsSSDv2();
  AliCDBEntry *entryBadChannelsSSD = man->Get("ITS/Calib/BadChannelsSSD");
  TObject *emptyBadChannel = (TObject *)entryBadChannelsSSD->GetObject();
  TString objectnameBadChannel = emptyBadChannel->GetName();
  if(objectnameBadChannel=="TObjArray") {
    TObjArray *badChannelsSSDOld = (TObjArray *)entryBadChannelsSSD->GetObject();
    ReadOldSSDBadChannels(badChannelsSSDOld, badChannelsSSD);
  }
  else if(objectnameBadChannel=="AliITSBadChannelsSSDv2") {
    cout<<"Reading the new format of the calibration file..."<<endl;
    badChannelsSSD = (AliITSBadChannelsSSDv2 *)entryBadChannelsSSD->GetObject();
  }

  //=========================================================//
  AliITSNoiseSSDv2 *noiseSSD = new AliITSNoiseSSDv2();
  AliCDBEntry *entryNoiseSSD = man->Get("ITS/Calib/NoiseSSD");
  TObject *emptyNoise = (TObject *)entryNoiseSSD->GetObject();
  TString objectnameNoise = emptyNoise->GetName();
  if(objectnameNoise=="TObjArray") {
    TObjArray *noiseSSDOld = (TObjArray *)entryNoiseSSD->GetObject();
    ReadOldSSDNoise(noiseSSDOld, noiseSSD);
  }
  else if(objectnameNoise=="AliITSNoiseSSDv2") {
    cout<<"Reading the new format of the calibration file..."<<endl;
    noiseSSD = (AliITSNoiseSSDv2 *)entryNoiseSSD->GetObject();
  }
  
  Double_t noisePSide = 0.0, noiseNSide = 0.0;
  Int_t badChannelPSide = 0, badChannelNSide = 0;
  for (Int_t i = 0; i < fgkSSDMODULES; i++) {
    AliITSgeomTGeo::GetModuleId(i+500,fLayer,fLadder,fModule);      
    //cout<<"Noise for module: "<<i+500<<" - Layer: "<<fLayer<<endl;
    for(Int_t j = 0; j < fgkDefaultNStripsSSD; j++) {
      badChannelPSide = (Int_t)(badChannelsSSD->GetBadChannelP(i,j));
      noisePSide = noiseSSD->GetNoiseP(i,j);
      hNoiseModule[i]->SetBinContent(j+1,noisePSide);
      
      badChannelNSide = (Int_t)(badChannelsSSD->GetBadChannelN(i,j));
      noiseNSide = noiseSSD->GetNoiseN(i,j);
      hNoiseModule[i]->SetBinContent(fgkSSDSTRIPSPERMODULE-j,noiseNSide);

      if(badChannelPSide == 0) {
	if(fLayer == 5) 
	  gHistNoisePSideLayer5->Fill(noisePSide);
	if(fLayer == 6) 
	  gHistNoisePSideLayer6->Fill(noisePSide);
      }
      if(badChannelNSide == 0) {
	if(fLayer == 5) 
	  gHistNoiseNSideLayer5->Fill(noiseNSide);
	if(fLayer == 6) 
	  gHistNoiseNSideLayer6->Fill(noiseNSide);
      }
    }//loop over strips
  }//loop over modules
  
  TString output1 = "noiseSSD."; output1 += runNumber; output1 += ".root";
  TFile *f1 = TFile::Open(output1.Data(),"recreate");
  array->Write();
  f1->Close();

  TString output2 = "noiseDistributionsSSD."; output2 += runNumber; 
  output2 += ".root";
  TFile *f2 = TFile::Open(output2.Data(),"recreate");
  gHistNoisePSideLayer5->Write();
  gHistNoiseNSideLayer5->Write();
  gHistNoisePSideLayer6->Write();
  gHistNoiseNSideLayer6->Write();
  f2->Close();
}

//_____________________________________________________________________//
void GainCalibration(AliCDBManager * man) {
  const Int_t fgkSSDMODULES = 1698;
  static const Int_t fgkDefaultNStripsSSD = 768;

  TH2F *fHistGainMapLayer5 = new TH2F("fHistGainMapLayer5",
				      "Layer 5;N_{strip};N_{module}",
				      1537,0,1537,
				      750,499,1249);
  fHistGainMapLayer5->GetXaxis()->SetTitleColor(1);
  fHistGainMapLayer5->SetStats(kFALSE);
  fHistGainMapLayer5->GetYaxis()->SetTitleOffset(1.8);
  TH2F *fHistGainMapLayer6 = new TH2F("fHistGainMapLayer6",
				      "Layer 6;N_{strip};N_{module}",
				      1537,0,1537,
				      952,1249,2199);
  fHistGainMapLayer6->GetXaxis()->SetTitleColor(1);
  fHistGainMapLayer6->SetStats(kFALSE);
  fHistGainMapLayer6->GetYaxis()->SetTitleOffset(1.8);

  AliITSGainSSDv2 *gainSSD = new AliITSGainSSDv2();
  AliCDBEntry *entryGainSSD = man->Get("ITS/Calib/GainSSD");
  TObject *empty = (TObject *)entryGainSSD->GetObject();
  TString objectname = empty->GetName();
  if(objectname=="Gain") {
    TObjArray *gainSSDOld = (TObjArray *)entryGainSSD->GetObject();
    ReadOldSSDGain(gainSSDOld, gainSSD);
  }
  else if(objectname=="AliITSGainSSDv2") {
    cout<<"Reading the new format of the calibration file..."<<endl;
    gainSSD = (AliITSGainSSDv2 *)entryGainSSD->GetObject();
  }
  
  Int_t layer = 0, ladder = 0, module = 0;
  Double_t gain = 0;
  for (Int_t i = 0; i < fgkSSDMODULES; i++) {
  //for (Int_t i = 0; i < 1; i++) {
    AliITSgeomTGeo::GetModuleId(i+500,layer,ladder,module);
    for(Int_t j = 0; j < fgkDefaultNStripsSSD; j++) {
      gain = gainSSD->GetGainP(i,j);
      //cout<<"GainP: "<<gain<<endl;
      if(layer == 5)
	fHistGainMapLayer5->Fill(j,i+500,gain);
      if(layer == 6)
	fHistGainMapLayer6->Fill(j,i+500,gain);
      
      gain = gainSSD->GetGainN(i,j);
      //cout<<"GainN: "<<gain<<endl;
      if(layer == 5)
	fHistGainMapLayer5->Fill(fgkDefaultNStripsSSD+j,i+500,gain);
      if(layer == 6)
	fHistGainMapLayer6->Fill(fgkDefaultNStripsSSD+j,i+500,gain);
    }//strip loop
  }//module loop

  TCanvas *cGain = new TCanvas("cGain","Gain calibration map",0,300,600,300);
  cGain->SetHighLightColor(10); cGain->SetFillColor(10); cGain->Divide(2,1);
  
  cGain->cd(1)->SetBottomMargin(.2); cGain->cd(1)->SetLeftMargin(.15);
  cGain->cd(1); fHistGainMapLayer5->Draw("colz");
  cGain->cd(2)->SetBottomMargin(.2); cGain->cd(2)->SetLeftMargin(.15);
  cGain->cd(2); fHistGainMapLayer6->Draw("colz");
}

//_____________________________________________________________________//
void ReadOldSSDNoise(TObjArray *array, 
		     AliITSNoiseSSDv2 *noiseSSD) {
  const Int_t fgkSSDSTRIPSPERMODULE = 1536;
  const Int_t fgkSSDPSIDESTRIPSPERMODULE = 768;

  Int_t fNMod = array->GetEntries();
  cout<<"Converting old calibration object for noise..."<<endl;

  //NOISE
  Double_t noise = 0.0;
  for (Int_t iModule = 0; iModule < fNMod; iModule++) {
    AliITSNoiseSSD *noiseModule = (AliITSNoiseSSD*) (array->At(iModule));
    for(Int_t iStrip = 0; iStrip < fgkSSDSTRIPSPERMODULE; iStrip++) {
      noise = (iStrip < fgkSSDPSIDESTRIPSPERMODULE) ? noiseModule->GetNoiseP(iStrip) : noiseModule->GetNoiseN(1535 - iStrip);
      if(iStrip < fgkSSDPSIDESTRIPSPERMODULE)
	noiseSSD->AddNoiseP(iModule,iStrip,noise);
      if(iStrip >= fgkSSDPSIDESTRIPSPERMODULE)
	noiseSSD->AddNoiseN(iModule,1535 - iStrip,noise);
    }//loop over strips
  }//loop over modules      
}

//_____________________________________________________________________//
void ReadOldSSDPedestal(TObjArray *array, 
			AliITSPedestalSSDv2 *pedestalSSD) {
  const Int_t fgkSSDSTRIPSPERMODULE = 1536;
  const Int_t fgkSSDPSIDESTRIPSPERMODULE = 768;

  Int_t fNMod = array->GetEntries();
  cout<<"Converting old calibration object for pedestal..."<<endl;

  //PEDESTAL
  Double_t pedestal = 0.0;
  for (Int_t iModule = 0; iModule < fNMod; iModule++) {
    AliITSPedestalSSD *pedestalModule = (AliITSPedestalSSD*) (array->At(iModule));
    for(Int_t iStrip = 0; iStrip < fgkSSDSTRIPSPERMODULE; iStrip++) {
      pedestal = (iStrip < fgkSSDPSIDESTRIPSPERMODULE) ? pedestalModule->GetPedestalP(iStrip) : pedestalModule->GetPedestalN(1535 - iStrip);
      if(iStrip < fgkSSDPSIDESTRIPSPERMODULE)
	pedestalSSD->AddPedestalP(iModule,iStrip,pedestal);
      if(iStrip >= fgkSSDPSIDESTRIPSPERMODULE)
	pedestalSSD->AddPedestalN(iModule,1535 - iStrip,pedestal);
    }//loop over strips
  }//loop over modules      
}

//_____________________________________________________________________//
void ReadOldSSDBadChannels(TObjArray *array, 
			   AliITSBadChannelsSSDv2 *badChannelsSSD) {
  Int_t fNMod = array->GetEntries();
  cout<<"Converting old calibration object for bad channels..."<<endl;
  for (Int_t iModule = 0; iModule < fNMod; iModule++) {
    //for (Int_t iModule = 0; iModule < 1; iModule++) {
    AliITSBadChannelsSSD *bad = (AliITSBadChannelsSSD*) (array->At(iModule));
    TArrayI arrayPSide = bad->GetBadPChannelsList();
    for(Int_t iPCounter = 0; iPCounter < arrayPSide.GetSize(); iPCounter++) 
      badChannelsSSD->AddBadChannelP(iModule,
				     iPCounter,
				     (Char_t)arrayPSide.At(iPCounter));
        
    TArrayI arrayNSide = bad->GetBadNChannelsList();
    for(Int_t iNCounter = 0; iNCounter < arrayNSide.GetSize(); iNCounter++) 
      badChannelsSSD->AddBadChannelN(iModule,
				     iNCounter,
				     (Char_t)arrayNSide.At(iNCounter));
    
  }//loop over modules      
}

//_____________________________________________________________________//
void ReadOldSSDGain(TObjArray *array, 
		    AliITSGainSSDv2 *gainSSD) {
  Int_t fNMod = array->GetEntries();
  cout<<"Converting old calibration object for gain..."<<endl;

  //GAIN
  for (Int_t iModule = 0; iModule < fNMod; iModule++) {
    AliITSGainSSD *gainModule = (AliITSGainSSD*) (array->At(iModule));
    TArrayF arrayPSide = gainModule->GetGainP();
    for(Int_t iPCounter = 0; iPCounter < arrayPSide.GetSize(); iPCounter++)
      gainSSD->AddGainP(iModule,
			iPCounter,
			arrayPSide.At(iPCounter));
    TArrayF arrayNSide = gainModule->GetGainN();
    for(Int_t iNCounter = 0; iNCounter < arrayNSide.GetSize(); iNCounter++)
      gainSSD->AddGainN(iModule,
			iNCounter,
			arrayNSide.At(iNCounter));
  }//loop over modules 
}
 correlateOCDBforSSD.C:1
 correlateOCDBforSSD.C:2
 correlateOCDBforSSD.C:3
 correlateOCDBforSSD.C:4
 correlateOCDBforSSD.C:5
 correlateOCDBforSSD.C:6
 correlateOCDBforSSD.C:7
 correlateOCDBforSSD.C:8
 correlateOCDBforSSD.C:9
 correlateOCDBforSSD.C:10
 correlateOCDBforSSD.C:11
 correlateOCDBforSSD.C:12
 correlateOCDBforSSD.C:13
 correlateOCDBforSSD.C:14
 correlateOCDBforSSD.C:15
 correlateOCDBforSSD.C:16
 correlateOCDBforSSD.C:17
 correlateOCDBforSSD.C:18
 correlateOCDBforSSD.C:19
 correlateOCDBforSSD.C:20
 correlateOCDBforSSD.C:21
 correlateOCDBforSSD.C:22
 correlateOCDBforSSD.C:23
 correlateOCDBforSSD.C:24
 correlateOCDBforSSD.C:25
 correlateOCDBforSSD.C:26
 correlateOCDBforSSD.C:27
 correlateOCDBforSSD.C:28
 correlateOCDBforSSD.C:29
 correlateOCDBforSSD.C:30
 correlateOCDBforSSD.C:31
 correlateOCDBforSSD.C:32
 correlateOCDBforSSD.C:33
 correlateOCDBforSSD.C:34
 correlateOCDBforSSD.C:35
 correlateOCDBforSSD.C:36
 correlateOCDBforSSD.C:37
 correlateOCDBforSSD.C:38
 correlateOCDBforSSD.C:39
 correlateOCDBforSSD.C:40
 correlateOCDBforSSD.C:41
 correlateOCDBforSSD.C:42
 correlateOCDBforSSD.C:43
 correlateOCDBforSSD.C:44
 correlateOCDBforSSD.C:45
 correlateOCDBforSSD.C:46
 correlateOCDBforSSD.C:47
 correlateOCDBforSSD.C:48
 correlateOCDBforSSD.C:49
 correlateOCDBforSSD.C:50
 correlateOCDBforSSD.C:51
 correlateOCDBforSSD.C:52
 correlateOCDBforSSD.C:53
 correlateOCDBforSSD.C:54
 correlateOCDBforSSD.C:55
 correlateOCDBforSSD.C:56
 correlateOCDBforSSD.C:57
 correlateOCDBforSSD.C:58
 correlateOCDBforSSD.C:59
 correlateOCDBforSSD.C:60
 correlateOCDBforSSD.C:61
 correlateOCDBforSSD.C:62
 correlateOCDBforSSD.C:63
 correlateOCDBforSSD.C:64
 correlateOCDBforSSD.C:65
 correlateOCDBforSSD.C:66
 correlateOCDBforSSD.C:67
 correlateOCDBforSSD.C:68
 correlateOCDBforSSD.C:69
 correlateOCDBforSSD.C:70
 correlateOCDBforSSD.C:71
 correlateOCDBforSSD.C:72
 correlateOCDBforSSD.C:73
 correlateOCDBforSSD.C:74
 correlateOCDBforSSD.C:75
 correlateOCDBforSSD.C:76
 correlateOCDBforSSD.C:77
 correlateOCDBforSSD.C:78
 correlateOCDBforSSD.C:79
 correlateOCDBforSSD.C:80
 correlateOCDBforSSD.C:81
 correlateOCDBforSSD.C:82
 correlateOCDBforSSD.C:83
 correlateOCDBforSSD.C:84
 correlateOCDBforSSD.C:85
 correlateOCDBforSSD.C:86
 correlateOCDBforSSD.C:87
 correlateOCDBforSSD.C:88
 correlateOCDBforSSD.C:89
 correlateOCDBforSSD.C:90
 correlateOCDBforSSD.C:91
 correlateOCDBforSSD.C:92
 correlateOCDBforSSD.C:93
 correlateOCDBforSSD.C:94
 correlateOCDBforSSD.C:95
 correlateOCDBforSSD.C:96
 correlateOCDBforSSD.C:97
 correlateOCDBforSSD.C:98
 correlateOCDBforSSD.C:99
 correlateOCDBforSSD.C:100
 correlateOCDBforSSD.C:101
 correlateOCDBforSSD.C:102
 correlateOCDBforSSD.C:103
 correlateOCDBforSSD.C:104
 correlateOCDBforSSD.C:105
 correlateOCDBforSSD.C:106
 correlateOCDBforSSD.C:107
 correlateOCDBforSSD.C:108
 correlateOCDBforSSD.C:109
 correlateOCDBforSSD.C:110
 correlateOCDBforSSD.C:111
 correlateOCDBforSSD.C:112
 correlateOCDBforSSD.C:113
 correlateOCDBforSSD.C:114
 correlateOCDBforSSD.C:115
 correlateOCDBforSSD.C:116
 correlateOCDBforSSD.C:117
 correlateOCDBforSSD.C:118
 correlateOCDBforSSD.C:119
 correlateOCDBforSSD.C:120
 correlateOCDBforSSD.C:121
 correlateOCDBforSSD.C:122
 correlateOCDBforSSD.C:123
 correlateOCDBforSSD.C:124
 correlateOCDBforSSD.C:125
 correlateOCDBforSSD.C:126
 correlateOCDBforSSD.C:127
 correlateOCDBforSSD.C:128
 correlateOCDBforSSD.C:129
 correlateOCDBforSSD.C:130
 correlateOCDBforSSD.C:131
 correlateOCDBforSSD.C:132
 correlateOCDBforSSD.C:133
 correlateOCDBforSSD.C:134
 correlateOCDBforSSD.C:135
 correlateOCDBforSSD.C:136
 correlateOCDBforSSD.C:137
 correlateOCDBforSSD.C:138
 correlateOCDBforSSD.C:139
 correlateOCDBforSSD.C:140
 correlateOCDBforSSD.C:141
 correlateOCDBforSSD.C:142
 correlateOCDBforSSD.C:143
 correlateOCDBforSSD.C:144
 correlateOCDBforSSD.C:145
 correlateOCDBforSSD.C:146
 correlateOCDBforSSD.C:147
 correlateOCDBforSSD.C:148
 correlateOCDBforSSD.C:149
 correlateOCDBforSSD.C:150
 correlateOCDBforSSD.C:151
 correlateOCDBforSSD.C:152
 correlateOCDBforSSD.C:153
 correlateOCDBforSSD.C:154
 correlateOCDBforSSD.C:155
 correlateOCDBforSSD.C:156
 correlateOCDBforSSD.C:157
 correlateOCDBforSSD.C:158
 correlateOCDBforSSD.C:159
 correlateOCDBforSSD.C:160
 correlateOCDBforSSD.C:161
 correlateOCDBforSSD.C:162
 correlateOCDBforSSD.C:163
 correlateOCDBforSSD.C:164
 correlateOCDBforSSD.C:165
 correlateOCDBforSSD.C:166
 correlateOCDBforSSD.C:167
 correlateOCDBforSSD.C:168
 correlateOCDBforSSD.C:169
 correlateOCDBforSSD.C:170
 correlateOCDBforSSD.C:171
 correlateOCDBforSSD.C:172
 correlateOCDBforSSD.C:173
 correlateOCDBforSSD.C:174
 correlateOCDBforSSD.C:175
 correlateOCDBforSSD.C:176
 correlateOCDBforSSD.C:177
 correlateOCDBforSSD.C:178
 correlateOCDBforSSD.C:179
 correlateOCDBforSSD.C:180
 correlateOCDBforSSD.C:181
 correlateOCDBforSSD.C:182
 correlateOCDBforSSD.C:183
 correlateOCDBforSSD.C:184
 correlateOCDBforSSD.C:185
 correlateOCDBforSSD.C:186
 correlateOCDBforSSD.C:187
 correlateOCDBforSSD.C:188
 correlateOCDBforSSD.C:189
 correlateOCDBforSSD.C:190
 correlateOCDBforSSD.C:191
 correlateOCDBforSSD.C:192
 correlateOCDBforSSD.C:193
 correlateOCDBforSSD.C:194
 correlateOCDBforSSD.C:195
 correlateOCDBforSSD.C:196
 correlateOCDBforSSD.C:197
 correlateOCDBforSSD.C:198
 correlateOCDBforSSD.C:199
 correlateOCDBforSSD.C:200
 correlateOCDBforSSD.C:201
 correlateOCDBforSSD.C:202
 correlateOCDBforSSD.C:203
 correlateOCDBforSSD.C:204
 correlateOCDBforSSD.C:205
 correlateOCDBforSSD.C:206
 correlateOCDBforSSD.C:207
 correlateOCDBforSSD.C:208
 correlateOCDBforSSD.C:209
 correlateOCDBforSSD.C:210
 correlateOCDBforSSD.C:211
 correlateOCDBforSSD.C:212
 correlateOCDBforSSD.C:213
 correlateOCDBforSSD.C:214
 correlateOCDBforSSD.C:215
 correlateOCDBforSSD.C:216
 correlateOCDBforSSD.C:217
 correlateOCDBforSSD.C:218
 correlateOCDBforSSD.C:219
 correlateOCDBforSSD.C:220
 correlateOCDBforSSD.C:221
 correlateOCDBforSSD.C:222
 correlateOCDBforSSD.C:223
 correlateOCDBforSSD.C:224
 correlateOCDBforSSD.C:225
 correlateOCDBforSSD.C:226
 correlateOCDBforSSD.C:227
 correlateOCDBforSSD.C:228
 correlateOCDBforSSD.C:229
 correlateOCDBforSSD.C:230
 correlateOCDBforSSD.C:231
 correlateOCDBforSSD.C:232
 correlateOCDBforSSD.C:233
 correlateOCDBforSSD.C:234
 correlateOCDBforSSD.C:235
 correlateOCDBforSSD.C:236
 correlateOCDBforSSD.C:237
 correlateOCDBforSSD.C:238
 correlateOCDBforSSD.C:239
 correlateOCDBforSSD.C:240
 correlateOCDBforSSD.C:241
 correlateOCDBforSSD.C:242
 correlateOCDBforSSD.C:243
 correlateOCDBforSSD.C:244
 correlateOCDBforSSD.C:245
 correlateOCDBforSSD.C:246
 correlateOCDBforSSD.C:247
 correlateOCDBforSSD.C:248
 correlateOCDBforSSD.C:249
 correlateOCDBforSSD.C:250
 correlateOCDBforSSD.C:251
 correlateOCDBforSSD.C:252
 correlateOCDBforSSD.C:253
 correlateOCDBforSSD.C:254
 correlateOCDBforSSD.C:255
 correlateOCDBforSSD.C:256
 correlateOCDBforSSD.C:257
 correlateOCDBforSSD.C:258
 correlateOCDBforSSD.C:259
 correlateOCDBforSSD.C:260
 correlateOCDBforSSD.C:261
 correlateOCDBforSSD.C:262
 correlateOCDBforSSD.C:263
 correlateOCDBforSSD.C:264
 correlateOCDBforSSD.C:265
 correlateOCDBforSSD.C:266
 correlateOCDBforSSD.C:267
 correlateOCDBforSSD.C:268
 correlateOCDBforSSD.C:269
 correlateOCDBforSSD.C:270
 correlateOCDBforSSD.C:271
 correlateOCDBforSSD.C:272
 correlateOCDBforSSD.C:273
 correlateOCDBforSSD.C:274
 correlateOCDBforSSD.C:275
 correlateOCDBforSSD.C:276
 correlateOCDBforSSD.C:277
 correlateOCDBforSSD.C:278
 correlateOCDBforSSD.C:279
 correlateOCDBforSSD.C:280
 correlateOCDBforSSD.C:281
 correlateOCDBforSSD.C:282
 correlateOCDBforSSD.C:283
 correlateOCDBforSSD.C:284
 correlateOCDBforSSD.C:285
 correlateOCDBforSSD.C:286
 correlateOCDBforSSD.C:287
 correlateOCDBforSSD.C:288
 correlateOCDBforSSD.C:289
 correlateOCDBforSSD.C:290
 correlateOCDBforSSD.C:291
 correlateOCDBforSSD.C:292
 correlateOCDBforSSD.C:293
 correlateOCDBforSSD.C:294
 correlateOCDBforSSD.C:295
 correlateOCDBforSSD.C:296
 correlateOCDBforSSD.C:297
 correlateOCDBforSSD.C:298
 correlateOCDBforSSD.C:299
 correlateOCDBforSSD.C:300
 correlateOCDBforSSD.C:301
 correlateOCDBforSSD.C:302
 correlateOCDBforSSD.C:303
 correlateOCDBforSSD.C:304
 correlateOCDBforSSD.C:305
 correlateOCDBforSSD.C:306
 correlateOCDBforSSD.C:307
 correlateOCDBforSSD.C:308
 correlateOCDBforSSD.C:309
 correlateOCDBforSSD.C:310
 correlateOCDBforSSD.C:311
 correlateOCDBforSSD.C:312
 correlateOCDBforSSD.C:313
 correlateOCDBforSSD.C:314
 correlateOCDBforSSD.C:315
 correlateOCDBforSSD.C:316
 correlateOCDBforSSD.C:317
 correlateOCDBforSSD.C:318
 correlateOCDBforSSD.C:319
 correlateOCDBforSSD.C:320
 correlateOCDBforSSD.C:321
 correlateOCDBforSSD.C:322
 correlateOCDBforSSD.C:323
 correlateOCDBforSSD.C:324
 correlateOCDBforSSD.C:325
 correlateOCDBforSSD.C:326
 correlateOCDBforSSD.C:327
 correlateOCDBforSSD.C:328
 correlateOCDBforSSD.C:329
 correlateOCDBforSSD.C:330
 correlateOCDBforSSD.C:331
 correlateOCDBforSSD.C:332
 correlateOCDBforSSD.C:333
 correlateOCDBforSSD.C:334
 correlateOCDBforSSD.C:335
 correlateOCDBforSSD.C:336
 correlateOCDBforSSD.C:337
 correlateOCDBforSSD.C:338
 correlateOCDBforSSD.C:339
 correlateOCDBforSSD.C:340
 correlateOCDBforSSD.C:341
 correlateOCDBforSSD.C:342
 correlateOCDBforSSD.C:343
 correlateOCDBforSSD.C:344
 correlateOCDBforSSD.C:345
 correlateOCDBforSSD.C:346
 correlateOCDBforSSD.C:347
 correlateOCDBforSSD.C:348
 correlateOCDBforSSD.C:349
 correlateOCDBforSSD.C:350
 correlateOCDBforSSD.C:351
 correlateOCDBforSSD.C:352
 correlateOCDBforSSD.C:353
 correlateOCDBforSSD.C:354
 correlateOCDBforSSD.C:355
 correlateOCDBforSSD.C:356
 correlateOCDBforSSD.C:357
 correlateOCDBforSSD.C:358
 correlateOCDBforSSD.C:359
 correlateOCDBforSSD.C:360
 correlateOCDBforSSD.C:361
 correlateOCDBforSSD.C:362
 correlateOCDBforSSD.C:363
 correlateOCDBforSSD.C:364
 correlateOCDBforSSD.C:365
 correlateOCDBforSSD.C:366
 correlateOCDBforSSD.C:367
 correlateOCDBforSSD.C:368
 correlateOCDBforSSD.C:369
 correlateOCDBforSSD.C:370
 correlateOCDBforSSD.C:371
 correlateOCDBforSSD.C:372
 correlateOCDBforSSD.C:373
 correlateOCDBforSSD.C:374
 correlateOCDBforSSD.C:375
 correlateOCDBforSSD.C:376
 correlateOCDBforSSD.C:377
 correlateOCDBforSSD.C:378
 correlateOCDBforSSD.C:379
 correlateOCDBforSSD.C:380
 correlateOCDBforSSD.C:381
 correlateOCDBforSSD.C:382
 correlateOCDBforSSD.C:383
 correlateOCDBforSSD.C:384
 correlateOCDBforSSD.C:385
 correlateOCDBforSSD.C:386
 correlateOCDBforSSD.C:387
 correlateOCDBforSSD.C:388
 correlateOCDBforSSD.C:389
 correlateOCDBforSSD.C:390
 correlateOCDBforSSD.C:391
 correlateOCDBforSSD.C:392
 correlateOCDBforSSD.C:393
 correlateOCDBforSSD.C:394
 correlateOCDBforSSD.C:395
 correlateOCDBforSSD.C:396
 correlateOCDBforSSD.C:397
 correlateOCDBforSSD.C:398
 correlateOCDBforSSD.C:399
 correlateOCDBforSSD.C:400
 correlateOCDBforSSD.C:401
 correlateOCDBforSSD.C:402
 correlateOCDBforSSD.C:403
 correlateOCDBforSSD.C:404
 correlateOCDBforSSD.C:405
 correlateOCDBforSSD.C:406
 correlateOCDBforSSD.C:407
 correlateOCDBforSSD.C:408
 correlateOCDBforSSD.C:409
 correlateOCDBforSSD.C:410
 correlateOCDBforSSD.C:411
 correlateOCDBforSSD.C:412
 correlateOCDBforSSD.C:413
 correlateOCDBforSSD.C:414
 correlateOCDBforSSD.C:415
 correlateOCDBforSSD.C:416
 correlateOCDBforSSD.C:417
 correlateOCDBforSSD.C:418
 correlateOCDBforSSD.C:419
 correlateOCDBforSSD.C:420
 correlateOCDBforSSD.C:421
 correlateOCDBforSSD.C:422
 correlateOCDBforSSD.C:423
 correlateOCDBforSSD.C:424
 correlateOCDBforSSD.C:425
 correlateOCDBforSSD.C:426
 correlateOCDBforSSD.C:427
 correlateOCDBforSSD.C:428
 correlateOCDBforSSD.C:429
 correlateOCDBforSSD.C:430
 correlateOCDBforSSD.C:431
 correlateOCDBforSSD.C:432
 correlateOCDBforSSD.C:433
 correlateOCDBforSSD.C:434
 correlateOCDBforSSD.C:435
 correlateOCDBforSSD.C:436
 correlateOCDBforSSD.C:437
 correlateOCDBforSSD.C:438
 correlateOCDBforSSD.C:439
 correlateOCDBforSSD.C:440
 correlateOCDBforSSD.C:441
 correlateOCDBforSSD.C:442
 correlateOCDBforSSD.C:443
 correlateOCDBforSSD.C:444
 correlateOCDBforSSD.C:445
 correlateOCDBforSSD.C:446
 correlateOCDBforSSD.C:447
 correlateOCDBforSSD.C:448
 correlateOCDBforSSD.C:449
 correlateOCDBforSSD.C:450
 correlateOCDBforSSD.C:451
 correlateOCDBforSSD.C:452
 correlateOCDBforSSD.C:453
 correlateOCDBforSSD.C:454
 correlateOCDBforSSD.C:455
 correlateOCDBforSSD.C:456
 correlateOCDBforSSD.C:457
 correlateOCDBforSSD.C:458
 correlateOCDBforSSD.C:459
 correlateOCDBforSSD.C:460
 correlateOCDBforSSD.C:461
 correlateOCDBforSSD.C:462
 correlateOCDBforSSD.C:463
 correlateOCDBforSSD.C:464
 correlateOCDBforSSD.C:465
 correlateOCDBforSSD.C:466
 correlateOCDBforSSD.C:467
 correlateOCDBforSSD.C:468
 correlateOCDBforSSD.C:469
 correlateOCDBforSSD.C:470
 correlateOCDBforSSD.C:471
 correlateOCDBforSSD.C:472
 correlateOCDBforSSD.C:473
 correlateOCDBforSSD.C:474
 correlateOCDBforSSD.C:475
 correlateOCDBforSSD.C:476
 correlateOCDBforSSD.C:477
 correlateOCDBforSSD.C:478
 correlateOCDBforSSD.C:479
 correlateOCDBforSSD.C:480
 correlateOCDBforSSD.C:481
 correlateOCDBforSSD.C:482
 correlateOCDBforSSD.C:483
 correlateOCDBforSSD.C:484
 correlateOCDBforSSD.C:485
 correlateOCDBforSSD.C:486
 correlateOCDBforSSD.C:487
 correlateOCDBforSSD.C:488
 correlateOCDBforSSD.C:489
 correlateOCDBforSSD.C:490
 correlateOCDBforSSD.C:491
 correlateOCDBforSSD.C:492
 correlateOCDBforSSD.C:493
 correlateOCDBforSSD.C:494
 correlateOCDBforSSD.C:495
 correlateOCDBforSSD.C:496
 correlateOCDBforSSD.C:497
 correlateOCDBforSSD.C:498
 correlateOCDBforSSD.C:499
 correlateOCDBforSSD.C:500
 correlateOCDBforSSD.C:501
 correlateOCDBforSSD.C:502
 correlateOCDBforSSD.C:503
 correlateOCDBforSSD.C:504
 correlateOCDBforSSD.C:505
 correlateOCDBforSSD.C:506
 correlateOCDBforSSD.C:507
 correlateOCDBforSSD.C:508