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

/*  $Id$    */



//====================================================================//
void Noise(AliCDBManager * man);
void Pedestal(AliCDBManager * man);
void BadChannelMap(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 readSSDOCDBEntry(const char* type = "alien", Int_t runNumber = 0) {
  //This macro allows to visualize the bad channels in the OCDB
  //The type can be either "local" or "alien" (where the OCDB file comes from)
  //The run nmber is the pedestal one
  gStyle->SetPalette(1,0);
  TString gType = type;
  
  AliCDBManager * man = AliCDBManager::Instance();
  
  if(gType == "alien") {
    //man->SetDefaultStorage("alien://folder=/alice/data/2009/Reference/");
    man->SetDefaultStorage("alien://folder=/alice/data/2009/OCDB/");
  }
  else if(gType == "local") 
    man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  else {
    cout<<"Allowed types: local or alien!!!"<<endl;
    abort();
  }
  
  man->SetRun(runNumber);
    
  //Pedestal(man);
  Noise(man);
  BadChannelMap(man);
  GainCalibration(man);
}

//_____________________________________________________________________//
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->Draw();

  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->Draw();

  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->Draw();

  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->Draw();
}

//_____________________________________________________________________//
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();
  
  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();
  
  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();
  
  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();
}

//_____________________________________________________________________//
void Pedestal(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();

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

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

  Double_t pedestal = 0.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++) {
      pedestal = pedestalSSD->GetPedestalP(i,j);
      //Printf("Pedestal value: %lf",pedestal);
      if(fLayer == 5) 
	gHistPedestalPSideLayer5->Fill(pedestal);
      if(fLayer == 6) 
	gHistPedestalPSideLayer6->Fill(pedestal);
      
      pedestal = pedestalSSD->GetPedestalN(i,j);
      if(fLayer == 5) 
	gHistPedestalNSideLayer5->Fill(pedestal);
      if(fLayer == 6) 
	gHistPedestalNSideLayer6->Fill(pedestal);
    }//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,1000);
  TH1F *gHistNoiseNSideLayer5 = new TH1F("gHistNoiseNSideLayer5",
					 "Noise values (N-side, Layer5); ADC counts; Entries;",
					 1000,0,1000);
  TH1F *gHistNoisePSideLayer6 = new TH1F("gHistNoisePSideLayer6",
					 "Noise values (P-side, Layer6); ADC counts; Entries;",
					 1000,0,1000);
  TH1F *gHistNoiseNSideLayer6 = new TH1F("gHistNoiseNSideLayer6",
					 "Noise values (N-side, Layer6); ADC counts; Entries;",
					 1000,0,1000);

  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;
  }
  
  AliITSNoiseSSDv2 *noiseSSD = new AliITSNoiseSSDv2();
  AliCDBEntry *entryNoiseSSD = man->Get("ITS/Calib/NoiseSSD");
  TObject *empty = (TObject *)entryNoiseSSD->GetObject();
  TString objectname = empty->GetName();
  if(objectname=="TObjArray") {
    TObjArray *noiseSSDOld = (TObjArray *)entryNoiseSSD->GetObject();
    ReadOldSSDNoise(noiseSSDOld, noiseSSD);
  }
  else if(objectname=="AliITSNoiseSSDv2") {
    cout<<"Reading the new format of the calibration file..."<<endl;
    noiseSSD = (AliITSNoiseSSDv2 *)entryNoiseSSD->GetObject();
  }
  
  Double_t noise = 0.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++) {
      noise = noiseSSD->GetNoiseP(i,j);
      hNoiseModule[i]->SetBinContent(j+1,noise);
      if(fLayer == 5) 
	gHistNoisePSideLayer5->Fill(noise);
      if(fLayer == 6) 
	gHistNoisePSideLayer6->Fill(noise);
      
      noise = noiseSSD->GetNoiseN(i,j);
      hNoiseModule[i]->SetBinContent(fgkSSDSTRIPSPERMODULE-j,noise);
      if(fLayer == 5) 
	gHistNoiseNSideLayer5->Fill(noise);
      if(fLayer == 6) 
	gHistNoiseNSideLayer6->Fill(noise);
    }//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 BadChannelMap(AliCDBManager * man) {
  const Int_t fgkSSDMODULES = 1698;
  static const Int_t fgkDefaultNStripsSSD = 768;

  //_____________________________________________________________________________//
  TH2F *fHistPSideBadChannelMapLayer5 = new TH2F("fHistPSideBadChannelMapLayer5",
						 "Layer 5;N_{module};N_{ladder}",
						 22,1,23,
						 34,500,534);
  fHistPSideBadChannelMapLayer5->GetXaxis()->SetTitleColor(1);
  fHistPSideBadChannelMapLayer5->GetZaxis()->SetRangeUser(0.,100.);
  fHistPSideBadChannelMapLayer5->SetStats(kFALSE);
  fHistPSideBadChannelMapLayer5->GetYaxis()->SetTitleOffset(1.8);
  fHistPSideBadChannelMapLayer5->GetXaxis()->SetNdivisions(22);
  fHistPSideBadChannelMapLayer5->GetYaxis()->SetNdivisions(34);
  fHistPSideBadChannelMapLayer5->GetXaxis()->SetLabelSize(0.03);
  fHistPSideBadChannelMapLayer5->GetYaxis()->SetLabelSize(0.03);
  fHistPSideBadChannelMapLayer5->GetZaxis()->SetTitleOffset(1.6);
  fHistPSideBadChannelMapLayer5->GetZaxis()->SetTitle("Bad channels (p-side)[%]");
  TH2F *fHistNSideBadChannelMapLayer5 = new TH2F("fHistNSideBadChannelMapLayer5",
						 "Layer 5;N_{module};N_{ladder}",
						 22,1,23,
						 34,500,534);
  fHistNSideBadChannelMapLayer5->GetXaxis()->SetTitleColor(1);
  fHistNSideBadChannelMapLayer5->GetZaxis()->SetRangeUser(0.,100.);
  fHistNSideBadChannelMapLayer5->SetStats(kFALSE);
  fHistNSideBadChannelMapLayer5->GetYaxis()->SetTitleOffset(1.8);
  fHistNSideBadChannelMapLayer5->GetXaxis()->SetNdivisions(22);
  fHistNSideBadChannelMapLayer5->GetYaxis()->SetNdivisions(34);
  fHistNSideBadChannelMapLayer5->GetXaxis()->SetLabelSize(0.03);
  fHistNSideBadChannelMapLayer5->GetYaxis()->SetLabelSize(0.03);
  fHistNSideBadChannelMapLayer5->GetZaxis()->SetTitleOffset(1.6);
  fHistNSideBadChannelMapLayer5->GetZaxis()->SetTitle("Bad channels (n-side)[%]");

  TH2F *fHistPSideBadChannelMapLayer6 = new TH2F("fHistPSideBadChannelMapLayer6",
					    "Layer 6;N_{module};N_{ladder}",
					    25,1,26,
					    38,600,638);
  fHistPSideBadChannelMapLayer6->GetXaxis()->SetTitleColor(1);
  fHistPSideBadChannelMapLayer6->GetZaxis()->SetRangeUser(0.,100.);
  fHistPSideBadChannelMapLayer6->SetStats(kFALSE);
  fHistPSideBadChannelMapLayer6->GetYaxis()->SetTitleOffset(1.8);
  fHistPSideBadChannelMapLayer6->GetXaxis()->SetNdivisions(25);
  fHistPSideBadChannelMapLayer6->GetYaxis()->SetNdivisions(38);
  fHistPSideBadChannelMapLayer6->GetXaxis()->SetLabelSize(0.03);
  fHistPSideBadChannelMapLayer6->GetYaxis()->SetLabelSize(0.03);
  fHistPSideBadChannelMapLayer6->GetZaxis()->SetTitleOffset(1.6);
  fHistPSideBadChannelMapLayer6->GetZaxis()->SetTitle("Bad channels (p-side)[%]");
  TH2F *fHistNSideBadChannelMapLayer6 = new TH2F("fHistNSideBadChannelMapLayer6",
					    "Layer 6;N_{module};N_{ladder}",
					    25,1,26,
					    38,600,638);
  fHistNSideBadChannelMapLayer6->GetXaxis()->SetTitleColor(1);
  fHistNSideBadChannelMapLayer6->GetZaxis()->SetRangeUser(0.,100.);
  fHistNSideBadChannelMapLayer6->SetStats(kFALSE);
  fHistNSideBadChannelMapLayer6->GetYaxis()->SetTitleOffset(1.8);
  fHistNSideBadChannelMapLayer6->GetXaxis()->SetNdivisions(25);
  fHistNSideBadChannelMapLayer6->GetYaxis()->SetNdivisions(38);
  fHistNSideBadChannelMapLayer6->GetXaxis()->SetLabelSize(0.03);
  fHistNSideBadChannelMapLayer6->GetYaxis()->SetLabelSize(0.03);
  fHistNSideBadChannelMapLayer6->GetZaxis()->SetTitleOffset(1.6);
  fHistNSideBadChannelMapLayer6->GetZaxis()->SetTitle("Bad channels (n-side)[%]");
  //_____________________________________________________________________________//
  
  //_____________________________________________________________________________//
  AliITSBadChannelsSSDv2 *badChannelsSSD = new AliITSBadChannelsSSDv2();
  AliCDBEntry *entryBadChannelsSSD = man->Get("ITS/Calib/BadChannelsSSD");
  TObject *empty = (TObject *)entryBadChannelsSSD->GetObject();
  TString objectname = empty->GetName();
  if(objectname=="TObjArray") {
    TObjArray *badChannelsSSDOld = (TObjArray *)entryBadChannelsSSD->GetObject();
    ReadOldSSDBadChannels(badChannelsSSDOld, badChannelsSSD);
  }
  else if(objectname=="AliITSBadChannelsSSDv2") {
    cout<<"Reading the new format of the calibration file..."<<endl;
    badChannelsSSD = (AliITSBadChannelsSSDv2 *)entryBadChannelsSSD->GetObject();
  }
  //_____________________________________________________________________________//

  //_____________________________________________________________________________//
  Int_t nPSideChannelsTotal = 0, nNSideChannelsTotal = 0;
  Int_t nBadPSideChannelsTotal = 0, nBadNSideChannelsTotal = 0;
  Int_t nBadPSideChannels = 0, nBadNSideChannels = 0;
  Int_t layer = 0, ladder = 0, module = 0;
  Int_t nPSideChannelsLayer5 = 0, nNSideChannelsLayer5 = 0;
  Int_t nPSideChannelsLayer6 = 0, nNSideChannelsLayer6 = 0;
  //_____________________________________________________________________________//

  for(Int_t i = 0; i < fgkSSDMODULES; i++) {
    //for(Int_t i = 0; i < 1; i++) {
    AliITSgeomTGeo::GetModuleId(i+500,layer,ladder,module);
    nBadPSideChannels = 0, nBadNSideChannels = 0;
    nPSideChannelsLayer5 = 0, nNSideChannelsLayer5 = 0;
    nPSideChannelsLayer6 = 0, nNSideChannelsLayer6 = 0;

    Int_t badChannel = 0;
    for(Int_t j = 0; j < fgkDefaultNStripsSSD; j++) {
      badChannel = (Int_t)(badChannelsSSD->GetBadChannelP(i,j));
      //cout<<"Module: "<<i+500<< " Strip: "<<j<<" - "<<badChannel<<endl;
      if(badChannel != 0) {
	if(layer == 5)
	  nPSideChannelsLayer5 += 1;
	if(layer == 6)
	  nPSideChannelsLayer6 += 1;
	nBadPSideChannels += 1;
      }
      badChannel = (Int_t)(badChannelsSSD->GetBadChannelN(i,j));
      //cout<<"Module: "<<i+500<< " Strip: "<<fgkDefaultNStripsSSD+j+1<<" - "<<badChannel<<endl;
      if(badChannel != 0) {
	if(layer == 5)                                                    
	  nNSideChannelsLayer5 += 1;
	if(layer == 6)
	  nNSideChannelsLayer6 += 1;
	nBadNSideChannels += 1;
      }
    }
    if(layer == 5) {
      if(nPSideChannelsLayer5 > 0)
	fHistPSideBadChannelMapLayer5->Fill(module,499+ladder,
					    100.*nPSideChannelsLayer5/fgkDefaultNStripsSSD);
      else fHistPSideBadChannelMapLayer5->Fill(module,499+ladder,0.0001);
      if(nNSideChannelsLayer5 > 0)
	fHistNSideBadChannelMapLayer5->Fill(module,499+ladder,
					    100.*nNSideChannelsLayer5/fgkDefaultNStripsSSD);
      else fHistNSideBadChannelMapLayer5->Fill(module,499+ladder,0.0001);
    }//layer 5
    if(layer == 6) {
      if(nPSideChannelsLayer6 > 0) 
	fHistPSideBadChannelMapLayer6->Fill(module,599+ladder,
					    100.*nPSideChannelsLayer6/fgkDefaultNStripsSSD);
      else fHistPSideBadChannelMapLayer6->Fill(module,599+ladder,0.0001);
      if(nNSideChannelsLayer6 > 0) 
	fHistNSideBadChannelMapLayer6->Fill(module,599+ladder,
					    100.*nNSideChannelsLayer6/fgkDefaultNStripsSSD);
      else fHistNSideBadChannelMapLayer6->Fill(module,599+ladder,0.0001);
    }//layer 6
      
    nBadPSideChannelsTotal += nBadPSideChannels;
    nBadNSideChannelsTotal += nBadNSideChannels;
    nPSideChannelsTotal += fgkDefaultNStripsSSD;
    nNSideChannelsTotal += fgkDefaultNStripsSSD;
  }

  cout<<"================================="<<endl;
  cout<<"Bad p-Side channels: "<<100.*nBadPSideChannelsTotal/nPSideChannelsTotal<<endl;
  cout<<"Bad n-Side channels: "<<100.*nBadNSideChannelsTotal/nNSideChannelsTotal<<endl;
  cout<<"================================="<<endl;

  TCanvas *cBadChannel = new TCanvas("cBadChannel",
				     "Bad channel list",0,0,900,900);
  cBadChannel->SetHighLightColor(10); cBadChannel->SetFillColor(10); 
  cBadChannel->Divide(2,2);

  cBadChannel->cd(1)->SetBottomMargin(.2); 
  cBadChannel->cd(1)->SetLeftMargin(.15);
  cBadChannel->cd(1)->SetRightMargin(.2);
  cBadChannel->cd(1)->SetGridx(); cBadChannel->cd(1)->SetGridy();
  cBadChannel->cd(1); fHistPSideBadChannelMapLayer5->Draw("colz"); 
  cBadChannel->cd(2)->SetBottomMargin(.2); 
  cBadChannel->cd(2)->SetLeftMargin(.15);
  cBadChannel->cd(2)->SetRightMargin(.2);
  cBadChannel->cd(2)->SetGridx(); cBadChannel->cd(2)->SetGridy();
  cBadChannel->cd(2); fHistPSideBadChannelMapLayer6->Draw("colz");
  cBadChannel->cd(3)->SetBottomMargin(.2); 
  cBadChannel->cd(3)->SetLeftMargin(.15);
  cBadChannel->cd(3)->SetRightMargin(.2);
  cBadChannel->cd(3)->SetGridx(); cBadChannel->cd(3)->SetGridy();
  cBadChannel->cd(3); fHistNSideBadChannelMapLayer5->Draw("colz"); 
  cBadChannel->cd(4)->SetBottomMargin(.2); 
  cBadChannel->cd(4)->SetLeftMargin(.15);
  cBadChannel->cd(4)->SetRightMargin(.2);
  cBadChannel->cd(4)->SetGridx(); cBadChannel->cd(4)->SetGridy();
  cBadChannel->cd(4); fHistNSideBadChannelMapLayer6->Draw("colz");
  cBadChannel->SaveAs("Run-BadChannels.gif");

  TFile *fOutput = new TFile("badChannelsSSD.root","recreate");
  fHistPSideBadChannelMapLayer5->Write();
  fHistNSideBadChannelMapLayer5->Write();
  fHistPSideBadChannelMapLayer6->Write();
  fHistNSideBadChannelMapLayer6->Write();
  fOutput->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 
}
 readSSDOCDBEntry.C:1
 readSSDOCDBEntry.C:2
 readSSDOCDBEntry.C:3
 readSSDOCDBEntry.C:4
 readSSDOCDBEntry.C:5
 readSSDOCDBEntry.C:6
 readSSDOCDBEntry.C:7
 readSSDOCDBEntry.C:8
 readSSDOCDBEntry.C:9
 readSSDOCDBEntry.C:10
 readSSDOCDBEntry.C:11
 readSSDOCDBEntry.C:12
 readSSDOCDBEntry.C:13
 readSSDOCDBEntry.C:14
 readSSDOCDBEntry.C:15
 readSSDOCDBEntry.C:16
 readSSDOCDBEntry.C:17
 readSSDOCDBEntry.C:18
 readSSDOCDBEntry.C:19
 readSSDOCDBEntry.C:20
 readSSDOCDBEntry.C:21
 readSSDOCDBEntry.C:22
 readSSDOCDBEntry.C:23
 readSSDOCDBEntry.C:24
 readSSDOCDBEntry.C:25
 readSSDOCDBEntry.C:26
 readSSDOCDBEntry.C:27
 readSSDOCDBEntry.C:28
 readSSDOCDBEntry.C:29
 readSSDOCDBEntry.C:30
 readSSDOCDBEntry.C:31
 readSSDOCDBEntry.C:32
 readSSDOCDBEntry.C:33
 readSSDOCDBEntry.C:34
 readSSDOCDBEntry.C:35
 readSSDOCDBEntry.C:36
 readSSDOCDBEntry.C:37
 readSSDOCDBEntry.C:38
 readSSDOCDBEntry.C:39
 readSSDOCDBEntry.C:40
 readSSDOCDBEntry.C:41
 readSSDOCDBEntry.C:42
 readSSDOCDBEntry.C:43
 readSSDOCDBEntry.C:44
 readSSDOCDBEntry.C:45
 readSSDOCDBEntry.C:46
 readSSDOCDBEntry.C:47
 readSSDOCDBEntry.C:48
 readSSDOCDBEntry.C:49
 readSSDOCDBEntry.C:50
 readSSDOCDBEntry.C:51
 readSSDOCDBEntry.C:52
 readSSDOCDBEntry.C:53
 readSSDOCDBEntry.C:54
 readSSDOCDBEntry.C:55
 readSSDOCDBEntry.C:56
 readSSDOCDBEntry.C:57
 readSSDOCDBEntry.C:58
 readSSDOCDBEntry.C:59
 readSSDOCDBEntry.C:60
 readSSDOCDBEntry.C:61
 readSSDOCDBEntry.C:62
 readSSDOCDBEntry.C:63
 readSSDOCDBEntry.C:64
 readSSDOCDBEntry.C:65
 readSSDOCDBEntry.C:66
 readSSDOCDBEntry.C:67
 readSSDOCDBEntry.C:68
 readSSDOCDBEntry.C:69
 readSSDOCDBEntry.C:70
 readSSDOCDBEntry.C:71
 readSSDOCDBEntry.C:72
 readSSDOCDBEntry.C:73
 readSSDOCDBEntry.C:74
 readSSDOCDBEntry.C:75
 readSSDOCDBEntry.C:76
 readSSDOCDBEntry.C:77
 readSSDOCDBEntry.C:78
 readSSDOCDBEntry.C:79
 readSSDOCDBEntry.C:80
 readSSDOCDBEntry.C:81
 readSSDOCDBEntry.C:82
 readSSDOCDBEntry.C:83
 readSSDOCDBEntry.C:84
 readSSDOCDBEntry.C:85
 readSSDOCDBEntry.C:86
 readSSDOCDBEntry.C:87
 readSSDOCDBEntry.C:88
 readSSDOCDBEntry.C:89
 readSSDOCDBEntry.C:90
 readSSDOCDBEntry.C:91
 readSSDOCDBEntry.C:92
 readSSDOCDBEntry.C:93
 readSSDOCDBEntry.C:94
 readSSDOCDBEntry.C:95
 readSSDOCDBEntry.C:96
 readSSDOCDBEntry.C:97
 readSSDOCDBEntry.C:98
 readSSDOCDBEntry.C:99
 readSSDOCDBEntry.C:100
 readSSDOCDBEntry.C:101
 readSSDOCDBEntry.C:102
 readSSDOCDBEntry.C:103
 readSSDOCDBEntry.C:104
 readSSDOCDBEntry.C:105
 readSSDOCDBEntry.C:106
 readSSDOCDBEntry.C:107
 readSSDOCDBEntry.C:108
 readSSDOCDBEntry.C:109
 readSSDOCDBEntry.C:110
 readSSDOCDBEntry.C:111
 readSSDOCDBEntry.C:112
 readSSDOCDBEntry.C:113
 readSSDOCDBEntry.C:114
 readSSDOCDBEntry.C:115
 readSSDOCDBEntry.C:116
 readSSDOCDBEntry.C:117
 readSSDOCDBEntry.C:118
 readSSDOCDBEntry.C:119
 readSSDOCDBEntry.C:120
 readSSDOCDBEntry.C:121
 readSSDOCDBEntry.C:122
 readSSDOCDBEntry.C:123
 readSSDOCDBEntry.C:124
 readSSDOCDBEntry.C:125
 readSSDOCDBEntry.C:126
 readSSDOCDBEntry.C:127
 readSSDOCDBEntry.C:128
 readSSDOCDBEntry.C:129
 readSSDOCDBEntry.C:130
 readSSDOCDBEntry.C:131
 readSSDOCDBEntry.C:132
 readSSDOCDBEntry.C:133
 readSSDOCDBEntry.C:134
 readSSDOCDBEntry.C:135
 readSSDOCDBEntry.C:136
 readSSDOCDBEntry.C:137
 readSSDOCDBEntry.C:138
 readSSDOCDBEntry.C:139
 readSSDOCDBEntry.C:140
 readSSDOCDBEntry.C:141
 readSSDOCDBEntry.C:142
 readSSDOCDBEntry.C:143
 readSSDOCDBEntry.C:144
 readSSDOCDBEntry.C:145
 readSSDOCDBEntry.C:146
 readSSDOCDBEntry.C:147
 readSSDOCDBEntry.C:148
 readSSDOCDBEntry.C:149
 readSSDOCDBEntry.C:150
 readSSDOCDBEntry.C:151
 readSSDOCDBEntry.C:152
 readSSDOCDBEntry.C:153
 readSSDOCDBEntry.C:154
 readSSDOCDBEntry.C:155
 readSSDOCDBEntry.C:156
 readSSDOCDBEntry.C:157
 readSSDOCDBEntry.C:158
 readSSDOCDBEntry.C:159
 readSSDOCDBEntry.C:160
 readSSDOCDBEntry.C:161
 readSSDOCDBEntry.C:162
 readSSDOCDBEntry.C:163
 readSSDOCDBEntry.C:164
 readSSDOCDBEntry.C:165
 readSSDOCDBEntry.C:166
 readSSDOCDBEntry.C:167
 readSSDOCDBEntry.C:168
 readSSDOCDBEntry.C:169
 readSSDOCDBEntry.C:170
 readSSDOCDBEntry.C:171
 readSSDOCDBEntry.C:172
 readSSDOCDBEntry.C:173
 readSSDOCDBEntry.C:174
 readSSDOCDBEntry.C:175
 readSSDOCDBEntry.C:176
 readSSDOCDBEntry.C:177
 readSSDOCDBEntry.C:178
 readSSDOCDBEntry.C:179
 readSSDOCDBEntry.C:180
 readSSDOCDBEntry.C:181
 readSSDOCDBEntry.C:182
 readSSDOCDBEntry.C:183
 readSSDOCDBEntry.C:184
 readSSDOCDBEntry.C:185
 readSSDOCDBEntry.C:186
 readSSDOCDBEntry.C:187
 readSSDOCDBEntry.C:188
 readSSDOCDBEntry.C:189
 readSSDOCDBEntry.C:190
 readSSDOCDBEntry.C:191
 readSSDOCDBEntry.C:192
 readSSDOCDBEntry.C:193
 readSSDOCDBEntry.C:194
 readSSDOCDBEntry.C:195
 readSSDOCDBEntry.C:196
 readSSDOCDBEntry.C:197
 readSSDOCDBEntry.C:198
 readSSDOCDBEntry.C:199
 readSSDOCDBEntry.C:200
 readSSDOCDBEntry.C:201
 readSSDOCDBEntry.C:202
 readSSDOCDBEntry.C:203
 readSSDOCDBEntry.C:204
 readSSDOCDBEntry.C:205
 readSSDOCDBEntry.C:206
 readSSDOCDBEntry.C:207
 readSSDOCDBEntry.C:208
 readSSDOCDBEntry.C:209
 readSSDOCDBEntry.C:210
 readSSDOCDBEntry.C:211
 readSSDOCDBEntry.C:212
 readSSDOCDBEntry.C:213
 readSSDOCDBEntry.C:214
 readSSDOCDBEntry.C:215
 readSSDOCDBEntry.C:216
 readSSDOCDBEntry.C:217
 readSSDOCDBEntry.C:218
 readSSDOCDBEntry.C:219
 readSSDOCDBEntry.C:220
 readSSDOCDBEntry.C:221
 readSSDOCDBEntry.C:222
 readSSDOCDBEntry.C:223
 readSSDOCDBEntry.C:224
 readSSDOCDBEntry.C:225
 readSSDOCDBEntry.C:226
 readSSDOCDBEntry.C:227
 readSSDOCDBEntry.C:228
 readSSDOCDBEntry.C:229
 readSSDOCDBEntry.C:230
 readSSDOCDBEntry.C:231
 readSSDOCDBEntry.C:232
 readSSDOCDBEntry.C:233
 readSSDOCDBEntry.C:234
 readSSDOCDBEntry.C:235
 readSSDOCDBEntry.C:236
 readSSDOCDBEntry.C:237
 readSSDOCDBEntry.C:238
 readSSDOCDBEntry.C:239
 readSSDOCDBEntry.C:240
 readSSDOCDBEntry.C:241
 readSSDOCDBEntry.C:242
 readSSDOCDBEntry.C:243
 readSSDOCDBEntry.C:244
 readSSDOCDBEntry.C:245
 readSSDOCDBEntry.C:246
 readSSDOCDBEntry.C:247
 readSSDOCDBEntry.C:248
 readSSDOCDBEntry.C:249
 readSSDOCDBEntry.C:250
 readSSDOCDBEntry.C:251
 readSSDOCDBEntry.C:252
 readSSDOCDBEntry.C:253
 readSSDOCDBEntry.C:254
 readSSDOCDBEntry.C:255
 readSSDOCDBEntry.C:256
 readSSDOCDBEntry.C:257
 readSSDOCDBEntry.C:258
 readSSDOCDBEntry.C:259
 readSSDOCDBEntry.C:260
 readSSDOCDBEntry.C:261
 readSSDOCDBEntry.C:262
 readSSDOCDBEntry.C:263
 readSSDOCDBEntry.C:264
 readSSDOCDBEntry.C:265
 readSSDOCDBEntry.C:266
 readSSDOCDBEntry.C:267
 readSSDOCDBEntry.C:268
 readSSDOCDBEntry.C:269
 readSSDOCDBEntry.C:270
 readSSDOCDBEntry.C:271
 readSSDOCDBEntry.C:272
 readSSDOCDBEntry.C:273
 readSSDOCDBEntry.C:274
 readSSDOCDBEntry.C:275
 readSSDOCDBEntry.C:276
 readSSDOCDBEntry.C:277
 readSSDOCDBEntry.C:278
 readSSDOCDBEntry.C:279
 readSSDOCDBEntry.C:280
 readSSDOCDBEntry.C:281
 readSSDOCDBEntry.C:282
 readSSDOCDBEntry.C:283
 readSSDOCDBEntry.C:284
 readSSDOCDBEntry.C:285
 readSSDOCDBEntry.C:286
 readSSDOCDBEntry.C:287
 readSSDOCDBEntry.C:288
 readSSDOCDBEntry.C:289
 readSSDOCDBEntry.C:290
 readSSDOCDBEntry.C:291
 readSSDOCDBEntry.C:292
 readSSDOCDBEntry.C:293
 readSSDOCDBEntry.C:294
 readSSDOCDBEntry.C:295
 readSSDOCDBEntry.C:296
 readSSDOCDBEntry.C:297
 readSSDOCDBEntry.C:298
 readSSDOCDBEntry.C:299
 readSSDOCDBEntry.C:300
 readSSDOCDBEntry.C:301
 readSSDOCDBEntry.C:302
 readSSDOCDBEntry.C:303
 readSSDOCDBEntry.C:304
 readSSDOCDBEntry.C:305
 readSSDOCDBEntry.C:306
 readSSDOCDBEntry.C:307
 readSSDOCDBEntry.C:308
 readSSDOCDBEntry.C:309
 readSSDOCDBEntry.C:310
 readSSDOCDBEntry.C:311
 readSSDOCDBEntry.C:312
 readSSDOCDBEntry.C:313
 readSSDOCDBEntry.C:314
 readSSDOCDBEntry.C:315
 readSSDOCDBEntry.C:316
 readSSDOCDBEntry.C:317
 readSSDOCDBEntry.C:318
 readSSDOCDBEntry.C:319
 readSSDOCDBEntry.C:320
 readSSDOCDBEntry.C:321
 readSSDOCDBEntry.C:322
 readSSDOCDBEntry.C:323
 readSSDOCDBEntry.C:324
 readSSDOCDBEntry.C:325
 readSSDOCDBEntry.C:326
 readSSDOCDBEntry.C:327
 readSSDOCDBEntry.C:328
 readSSDOCDBEntry.C:329
 readSSDOCDBEntry.C:330
 readSSDOCDBEntry.C:331
 readSSDOCDBEntry.C:332
 readSSDOCDBEntry.C:333
 readSSDOCDBEntry.C:334
 readSSDOCDBEntry.C:335
 readSSDOCDBEntry.C:336
 readSSDOCDBEntry.C:337
 readSSDOCDBEntry.C:338
 readSSDOCDBEntry.C:339
 readSSDOCDBEntry.C:340
 readSSDOCDBEntry.C:341
 readSSDOCDBEntry.C:342
 readSSDOCDBEntry.C:343
 readSSDOCDBEntry.C:344
 readSSDOCDBEntry.C:345
 readSSDOCDBEntry.C:346
 readSSDOCDBEntry.C:347
 readSSDOCDBEntry.C:348
 readSSDOCDBEntry.C:349
 readSSDOCDBEntry.C:350
 readSSDOCDBEntry.C:351
 readSSDOCDBEntry.C:352
 readSSDOCDBEntry.C:353
 readSSDOCDBEntry.C:354
 readSSDOCDBEntry.C:355
 readSSDOCDBEntry.C:356
 readSSDOCDBEntry.C:357
 readSSDOCDBEntry.C:358
 readSSDOCDBEntry.C:359
 readSSDOCDBEntry.C:360
 readSSDOCDBEntry.C:361
 readSSDOCDBEntry.C:362
 readSSDOCDBEntry.C:363
 readSSDOCDBEntry.C:364
 readSSDOCDBEntry.C:365
 readSSDOCDBEntry.C:366
 readSSDOCDBEntry.C:367
 readSSDOCDBEntry.C:368
 readSSDOCDBEntry.C:369
 readSSDOCDBEntry.C:370
 readSSDOCDBEntry.C:371
 readSSDOCDBEntry.C:372
 readSSDOCDBEntry.C:373
 readSSDOCDBEntry.C:374
 readSSDOCDBEntry.C:375
 readSSDOCDBEntry.C:376
 readSSDOCDBEntry.C:377
 readSSDOCDBEntry.C:378
 readSSDOCDBEntry.C:379
 readSSDOCDBEntry.C:380
 readSSDOCDBEntry.C:381
 readSSDOCDBEntry.C:382
 readSSDOCDBEntry.C:383
 readSSDOCDBEntry.C:384
 readSSDOCDBEntry.C:385
 readSSDOCDBEntry.C:386
 readSSDOCDBEntry.C:387
 readSSDOCDBEntry.C:388
 readSSDOCDBEntry.C:389
 readSSDOCDBEntry.C:390
 readSSDOCDBEntry.C:391
 readSSDOCDBEntry.C:392
 readSSDOCDBEntry.C:393
 readSSDOCDBEntry.C:394
 readSSDOCDBEntry.C:395
 readSSDOCDBEntry.C:396
 readSSDOCDBEntry.C:397
 readSSDOCDBEntry.C:398
 readSSDOCDBEntry.C:399
 readSSDOCDBEntry.C:400
 readSSDOCDBEntry.C:401
 readSSDOCDBEntry.C:402
 readSSDOCDBEntry.C:403
 readSSDOCDBEntry.C:404
 readSSDOCDBEntry.C:405
 readSSDOCDBEntry.C:406
 readSSDOCDBEntry.C:407
 readSSDOCDBEntry.C:408
 readSSDOCDBEntry.C:409
 readSSDOCDBEntry.C:410
 readSSDOCDBEntry.C:411
 readSSDOCDBEntry.C:412
 readSSDOCDBEntry.C:413
 readSSDOCDBEntry.C:414
 readSSDOCDBEntry.C:415
 readSSDOCDBEntry.C:416
 readSSDOCDBEntry.C:417
 readSSDOCDBEntry.C:418
 readSSDOCDBEntry.C:419
 readSSDOCDBEntry.C:420
 readSSDOCDBEntry.C:421
 readSSDOCDBEntry.C:422
 readSSDOCDBEntry.C:423
 readSSDOCDBEntry.C:424
 readSSDOCDBEntry.C:425
 readSSDOCDBEntry.C:426
 readSSDOCDBEntry.C:427
 readSSDOCDBEntry.C:428
 readSSDOCDBEntry.C:429
 readSSDOCDBEntry.C:430
 readSSDOCDBEntry.C:431
 readSSDOCDBEntry.C:432
 readSSDOCDBEntry.C:433
 readSSDOCDBEntry.C:434
 readSSDOCDBEntry.C:435
 readSSDOCDBEntry.C:436
 readSSDOCDBEntry.C:437
 readSSDOCDBEntry.C:438
 readSSDOCDBEntry.C:439
 readSSDOCDBEntry.C:440
 readSSDOCDBEntry.C:441
 readSSDOCDBEntry.C:442
 readSSDOCDBEntry.C:443
 readSSDOCDBEntry.C:444
 readSSDOCDBEntry.C:445
 readSSDOCDBEntry.C:446
 readSSDOCDBEntry.C:447
 readSSDOCDBEntry.C:448
 readSSDOCDBEntry.C:449
 readSSDOCDBEntry.C:450
 readSSDOCDBEntry.C:451
 readSSDOCDBEntry.C:452
 readSSDOCDBEntry.C:453
 readSSDOCDBEntry.C:454
 readSSDOCDBEntry.C:455
 readSSDOCDBEntry.C:456
 readSSDOCDBEntry.C:457
 readSSDOCDBEntry.C:458
 readSSDOCDBEntry.C:459
 readSSDOCDBEntry.C:460
 readSSDOCDBEntry.C:461
 readSSDOCDBEntry.C:462
 readSSDOCDBEntry.C:463
 readSSDOCDBEntry.C:464
 readSSDOCDBEntry.C:465
 readSSDOCDBEntry.C:466
 readSSDOCDBEntry.C:467
 readSSDOCDBEntry.C:468
 readSSDOCDBEntry.C:469
 readSSDOCDBEntry.C:470
 readSSDOCDBEntry.C:471
 readSSDOCDBEntry.C:472
 readSSDOCDBEntry.C:473
 readSSDOCDBEntry.C:474
 readSSDOCDBEntry.C:475
 readSSDOCDBEntry.C:476
 readSSDOCDBEntry.C:477
 readSSDOCDBEntry.C:478
 readSSDOCDBEntry.C:479
 readSSDOCDBEntry.C:480
 readSSDOCDBEntry.C:481
 readSSDOCDBEntry.C:482
 readSSDOCDBEntry.C:483
 readSSDOCDBEntry.C:484
 readSSDOCDBEntry.C:485
 readSSDOCDBEntry.C:486
 readSSDOCDBEntry.C:487
 readSSDOCDBEntry.C:488
 readSSDOCDBEntry.C:489
 readSSDOCDBEntry.C:490
 readSSDOCDBEntry.C:491
 readSSDOCDBEntry.C:492
 readSSDOCDBEntry.C:493
 readSSDOCDBEntry.C:494
 readSSDOCDBEntry.C:495
 readSSDOCDBEntry.C:496
 readSSDOCDBEntry.C:497
 readSSDOCDBEntry.C:498
 readSSDOCDBEntry.C:499
 readSSDOCDBEntry.C:500
 readSSDOCDBEntry.C:501
 readSSDOCDBEntry.C:502
 readSSDOCDBEntry.C:503
 readSSDOCDBEntry.C:504
 readSSDOCDBEntry.C:505
 readSSDOCDBEntry.C:506
 readSSDOCDBEntry.C:507
 readSSDOCDBEntry.C:508
 readSSDOCDBEntry.C:509
 readSSDOCDBEntry.C:510
 readSSDOCDBEntry.C:511
 readSSDOCDBEntry.C:512
 readSSDOCDBEntry.C:513
 readSSDOCDBEntry.C:514
 readSSDOCDBEntry.C:515
 readSSDOCDBEntry.C:516
 readSSDOCDBEntry.C:517
 readSSDOCDBEntry.C:518
 readSSDOCDBEntry.C:519
 readSSDOCDBEntry.C:520
 readSSDOCDBEntry.C:521
 readSSDOCDBEntry.C:522
 readSSDOCDBEntry.C:523
 readSSDOCDBEntry.C:524
 readSSDOCDBEntry.C:525
 readSSDOCDBEntry.C:526
 readSSDOCDBEntry.C:527
 readSSDOCDBEntry.C:528
 readSSDOCDBEntry.C:529
 readSSDOCDBEntry.C:530
 readSSDOCDBEntry.C:531
 readSSDOCDBEntry.C:532
 readSSDOCDBEntry.C:533
 readSSDOCDBEntry.C:534
 readSSDOCDBEntry.C:535
 readSSDOCDBEntry.C:536
 readSSDOCDBEntry.C:537
 readSSDOCDBEntry.C:538
 readSSDOCDBEntry.C:539
 readSSDOCDBEntry.C:540
 readSSDOCDBEntry.C:541
 readSSDOCDBEntry.C:542
 readSSDOCDBEntry.C:543
 readSSDOCDBEntry.C:544
 readSSDOCDBEntry.C:545
 readSSDOCDBEntry.C:546
 readSSDOCDBEntry.C:547
 readSSDOCDBEntry.C:548
 readSSDOCDBEntry.C:549
 readSSDOCDBEntry.C:550
 readSSDOCDBEntry.C:551
 readSSDOCDBEntry.C:552
 readSSDOCDBEntry.C:553
 readSSDOCDBEntry.C:554
 readSSDOCDBEntry.C:555
 readSSDOCDBEntry.C:556
 readSSDOCDBEntry.C:557
 readSSDOCDBEntry.C:558
 readSSDOCDBEntry.C:559
 readSSDOCDBEntry.C:560
 readSSDOCDBEntry.C:561
 readSSDOCDBEntry.C:562
 readSSDOCDBEntry.C:563
 readSSDOCDBEntry.C:564
 readSSDOCDBEntry.C:565
 readSSDOCDBEntry.C:566
 readSSDOCDBEntry.C:567
 readSSDOCDBEntry.C:568
 readSSDOCDBEntry.C:569
 readSSDOCDBEntry.C:570
 readSSDOCDBEntry.C:571
 readSSDOCDBEntry.C:572
 readSSDOCDBEntry.C:573
 readSSDOCDBEntry.C:574
 readSSDOCDBEntry.C:575
 readSSDOCDBEntry.C:576
 readSSDOCDBEntry.C:577
 readSSDOCDBEntry.C:578
 readSSDOCDBEntry.C:579
 readSSDOCDBEntry.C:580
 readSSDOCDBEntry.C:581
 readSSDOCDBEntry.C:582
 readSSDOCDBEntry.C:583
 readSSDOCDBEntry.C:584
 readSSDOCDBEntry.C:585
 readSSDOCDBEntry.C:586
 readSSDOCDBEntry.C:587
 readSSDOCDBEntry.C:588
 readSSDOCDBEntry.C:589
 readSSDOCDBEntry.C:590
 readSSDOCDBEntry.C:591
 readSSDOCDBEntry.C:592
 readSSDOCDBEntry.C:593
 readSSDOCDBEntry.C:594
 readSSDOCDBEntry.C:595
 readSSDOCDBEntry.C:596
 readSSDOCDBEntry.C:597
 readSSDOCDBEntry.C:598
 readSSDOCDBEntry.C:599
 readSSDOCDBEntry.C:600
 readSSDOCDBEntry.C:601
 readSSDOCDBEntry.C:602
 readSSDOCDBEntry.C:603
 readSSDOCDBEntry.C:604
 readSSDOCDBEntry.C:605
 readSSDOCDBEntry.C:606
 readSSDOCDBEntry.C:607
 readSSDOCDBEntry.C:608
 readSSDOCDBEntry.C:609
 readSSDOCDBEntry.C:610
 readSSDOCDBEntry.C:611
 readSSDOCDBEntry.C:612
 readSSDOCDBEntry.C:613
 readSSDOCDBEntry.C:614
 readSSDOCDBEntry.C:615
 readSSDOCDBEntry.C:616
 readSSDOCDBEntry.C:617
 readSSDOCDBEntry.C:618
 readSSDOCDBEntry.C:619
 readSSDOCDBEntry.C:620
 readSSDOCDBEntry.C:621
 readSSDOCDBEntry.C:622
 readSSDOCDBEntry.C:623
 readSSDOCDBEntry.C:624
 readSSDOCDBEntry.C:625
 readSSDOCDBEntry.C:626
 readSSDOCDBEntry.C:627
 readSSDOCDBEntry.C:628
 readSSDOCDBEntry.C:629
 readSSDOCDBEntry.C:630
 readSSDOCDBEntry.C:631
 readSSDOCDBEntry.C:632