ROOT logo
//
// Macro adds ether ladder, module or channel to the SSD bad channels map.
// Input parameter: file name with original SSD bad channels map (optional),  
//                  equipment identifier (DDL),
//                  Slot number, ADC number (optional) and channel number (optional)
// Author: Oleksandr.Borysov@cern.ch
//


#if !defined(__CINT__) || defined(__MAKECINT__)
#include <time.h>
#include <Riostream.h>
#include "TStyle.h"
#include "TFile.h"
#include "TCanvas.h"
#include "TH2F.h"
#include "TString.h"
#include "AliLog.h"
#include "AliRawReaderRoot.h"
#include "AliITSRawStreamSSDv1.h"
#include "AliITSBadChannelsSSDv2.h"
#include "AliITSModuleDaSSD.h"
#include "AliITSHandleDaSSD.h"
#endif


#define EQUIPMENTTODDLMASK        0xFF
#define NUMBEROFSSDMODULESPERSLOT 12
#define MAXSSDDDLID               15
#define MINSSDMODULEID            500

Bool_t readBCMap(const Char_t *filename, AliITSBadChannelsSSDv2*& bcl);
Int_t addModuleBCMap(AliITSBadChannelsSSDv2 *bcl, const Int_t EqId, const Int_t SlotId, const Int_t adc);
Int_t addLadderBCMap(AliITSBadChannelsSSDv2 *bcl, const Int_t EqId, const Int_t SlotId);
Int_t  addChannelBCMap(AliITSBadChannelsSSDv2 *bcl, const Int_t EqId, const Int_t SlotId, const Int_t adc, const Int_t strp);
void  Usage (void);
void drawBadChannelMapDAQDB(const char* filename);
 
//class gives an access to the protected array with SSD_DDL_Map in case the geometry is not initialized
class AliITSRawStreamSSDtmp : public AliITSRawStreamSSDv1 {
public:
  AliITSRawStreamSSDtmp(AliRawReader* rawReader): AliITSRawStreamSSDv1(rawReader) {
    Setv11HybridDDLMapping();
    AliInfo("Using SSD DDL Map initialized by AliITSRawStreamSSDv1::Setv11HybridDDLMapping()");
  }
  virtual ~AliITSRawStreamSSDtmp() {};
  Int_t GetModId(Int_t iDDL, Int_t iModule) {return fgkDDLModuleMap[iDDL][iModule];}
  ClassDef(AliITSRawStreamSSDtmp, 0)
};

//_________________________________________________________//
Int_t patchSSDBadChannelsMap(const Char_t *fname = 0, 
			     const Int_t EqId = -1, 
			     const Int_t SlotId = -1, 
			     const Int_t adc = -1, 
			     const Int_t strp = -1) {
  //Macro to patch the bad channel list
  TString    bcfname, pathstr;
  AliITSBadChannelsSSDv2  *bc = 0;
  if (EqId < 0) { Usage(); cerr << "Equipment number (that is DDL) must be specified! Exit.\n"; return 0; } 
  else if ((EqId & EQUIPMENTTODDLMASK) > MAXSSDDDLID) { 
    cerr << "Icorrect equipment number (that is DDL)! Exit.\n"; 
    return -1;
  }  
  if (SlotId < 1 || SlotId > 9) { 
    cerr << "Slot number must be specified (in the range 1 - 9)! Exit.\n"; 
	Usage();   
    return -2; 
  }
  if (!fname || fname[0]==0) {
    cout << "File name with bad channels map is not specified, an empty map is used!\n";
    bc = new AliITSBadChannelsSSDv2();
    if (!bc) { cerr << "Error creating the AliITSBadChannelsSSDv2 object! Exit.\n"; return -1; }
    pathstr = "";
  }
  else {
	pathstr.Form(fname);
    if (!readBCMap(fname, bc)) {
      cerr << "Error reading file " << fname << " with Static Bad Channels Map! Exit.\n";
      return -3;
    }
  }  
  if (adc < 0) addLadderBCMap(bc, EqId, SlotId);
  else if ((adc < 6) || (adc > 7 && (adc - 2) < NUMBEROFSSDMODULESPERSLOT) ) {
    if (strp < 0) addModuleBCMap(bc, EqId, SlotId, adc);
    else if (strp < AliITSModuleDaSSD::GetStripsPerModuleConst()) addChannelBCMap(bc, EqId, SlotId, adc, strp);
         else {
	        cerr << "Incorrect number for Strip. Exit\n";
	        Usage(); 
            if (bc) delete bc;
            return -5;
        }
  }
  else {
    cerr << "Incorrect number for ADC. Exit\n";
    if (bc) delete bc;
    return -4;
  }
  bcfname = pathstr(0, pathstr.Last('/')+1);
  bcfname.Append(Form("ssdbcmap_%i.root", time(NULL)));
  TFile *bcfile = new TFile (bcfname.Data(),"RECREATE");
  if (bcfile->IsZombie()) {
    cerr << "Error open file " << bcfname.Data() << " for writing new bad channels map!\n";
    if (bc) delete bc;
    return -1;
  }
  bcfile->WriteTObject(bc);
  bcfile->Close();
  delete bcfile;
  cout << "New SSD bad channels map was saved in file " << bcfname.Data() << endl;
  if (bc) delete bc;
  return 0;
}

//_________________________________________________________//
Bool_t readBCMap(const Char_t *filename, AliITSBadChannelsSSDv2*& bcl) {
  // Reads Static Bad Channels Map from the file
  TFile *bcfile;
  if (!filename) {
    cout << "No file name is specified for Static Bad Channels Map!\n";
    return kFALSE;
  } 
  cout << "Reading SSD Bad Channels Map from the file " << filename << endl;
  bcfile = new TFile(filename, "READ");
  if (bcfile->IsZombie()) {
    cerr << "Error reading file " << filename << " with Static Bad Channels Map!\n";
    return kFALSE;
  }
  bcfile->GetObject("AliITSBadChannelsSSDv2;1", bcl);
  if (!bcl) {
    cout << "Error bcl == NULL!\n";
    bcfile->Close();
    delete bcfile;
    return kFALSE;
  }
  bcfile->Close();
  delete bcfile;
  return kTRUE;
}

//_________________________________________________________//
Int_t addModuleBCMap(AliITSBadChannelsSSDv2 *bcl, 
		     const Int_t EqId, const Int_t SlotId, const Int_t adc) {
  // Add module to bad channels map.
  const Char_t     isbad = 3;
  Int_t            ddl, mn, modid;
  AliRawReaderRoot       *rwr = 0;
  AliITSRawStreamSSDtmp  *rst = 0;
  rwr = new AliRawReaderRoot();
  rst = new AliITSRawStreamSSDtmp(rwr);
  ddl = EqId & EQUIPMENTTODDLMASK;
  mn = (SlotId - 1) * NUMBEROFSSDMODULESPERSLOT + (adc<8 ? adc : adc-2);
  modid = rst->GetModId(ddl, mn);
  modid -= MINSSDMODULEID;
  if (modid < 0) return 0;
  for (Int_t strind = 0; strind < AliITSModuleDaSSD::GetPNStripsPerModule(); strind++) {
      bcl->AddBadChannelP(modid, strind, isbad);
      bcl->AddBadChannelN(modid, strind, isbad);
  }
  delete rst;
  delete rwr;
  cout << "Module added:  ModId = " << modid + MINSSDMODULEID << "; Ddl/Ad/Adc: " << ddl 
       << " / " << SlotId << " / " << adc << endl;
  return 0;
}

//_________________________________________________________//
Int_t addLadderBCMap(AliITSBadChannelsSSDv2 *bcl, 
		     const Int_t EqId, const Int_t SlotId) {
  // Add ladder to bad channels map.
  for (Int_t adc = 0; adc < NUMBEROFSSDMODULESPERSLOT; adc++)
    addModuleBCMap(bcl, EqId, SlotId, (adc<6 ? adc : adc+2));
  return 0;
}

//_________________________________________________________//
Int_t  addChannelBCMap(AliITSBadChannelsSSDv2 *bcl, 
		       const Int_t EqId, const Int_t SlotId, 
                       const Int_t adc, const Int_t strp) {
  // Add strip to bad channels map.
  const Char_t     isbad = 3;
  Int_t            ddl, mn, modid;         
  AliRawReaderRoot       *rwr = 0;
  AliITSRawStreamSSDtmp  *rst = 0;
  rwr = new AliRawReaderRoot();
  rst = new AliITSRawStreamSSDtmp(rwr);
  ddl = EqId & EQUIPMENTTODDLMASK;
  mn = (SlotId - 1) * NUMBEROFSSDMODULESPERSLOT + (adc<8 ? adc : adc-2);
  modid = rst->GetModId(ddl, mn);  
  modid -= MINSSDMODULEID;
  if (modid < 0) { cout << "There is no module with given Equipment, Slot, adc.\n" ; return 0; }
  if (strp < AliITSModuleDaSSD::GetPNStripsPerModule() ) {
    bcl->AddBadChannelP(modid, strp, isbad);
  } else {
    bcl->AddBadChannelN(modid, (AliITSChannelDaSSD::GetMaxStripIdConst() - strp), isbad);
  }
  delete rst;
  delete rwr;
  cout << "Channel added (ModId/Ddl/Ad/Adc/Strip): " << modid + MINSSDMODULEID << " / " << ddl << " / " << SlotId 
       << " / " << adc << " / " << strp << endl;
  return 0;
}

//_________________________________________________________//
void  Usage (void) { 
  //Usage function
  cout << "Usage: PatchSSDBadChannelsMap(bc_fname /* can be \"\" */, EqipmentId, SlotId, adc /*optional*/, strip /*optional*/)\n"; 
}

//_______________________________________//
void drawBadChannelMapDAQDB(const char* filename) {
  //Draws the 2D plots of the bad channels maps
  const Int_t fgkSSDMODULES = 1698;
  static const Int_t fgkDefaultNStripsSSD = 768;
  gStyle->SetPalette(1,0);

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

  TH2F *fHistDAQDBNSideBadChannelMapLayer5 = new TH2F("fHistDAQDBNSideBadChannelMapLayer5",
						      "Layer 5;N_{module};N_{ladder}",
						      22,1,23,
						      34,500,534);
  fHistDAQDBNSideBadChannelMapLayer5->GetXaxis()->SetTitleColor(1);
  fHistDAQDBNSideBadChannelMapLayer5->SetStats(kFALSE);
  fHistDAQDBNSideBadChannelMapLayer5->GetYaxis()->SetTitleOffset(1.8);
  fHistDAQDBNSideBadChannelMapLayer5->GetXaxis()->SetNdivisions(22);
  fHistDAQDBNSideBadChannelMapLayer5->GetYaxis()->SetNdivisions(34);
  fHistDAQDBNSideBadChannelMapLayer5->GetXaxis()->SetLabelSize(0.03);
  fHistDAQDBNSideBadChannelMapLayer5->GetYaxis()->SetLabelSize(0.03);
  fHistDAQDBNSideBadChannelMapLayer5->GetZaxis()->SetTitleOffset(1.6);
  fHistDAQDBNSideBadChannelMapLayer5->GetZaxis()->SetTitle("Bad channels (n-side)[%]");
  
  TH2F *fHistDAQDBPSideBadChannelMapLayer6 = new TH2F("fHistDAQDBPSideBadChannelMapLayer6",
						      "Layer 6;N_{module};N_{ladder}",
						      25,1,26,
						      38,600,638);
  fHistDAQDBPSideBadChannelMapLayer6->GetXaxis()->SetTitleColor(1);
  fHistDAQDBPSideBadChannelMapLayer6->SetStats(kFALSE);
  fHistDAQDBPSideBadChannelMapLayer6->GetYaxis()->SetTitleOffset(1.8);
  fHistDAQDBPSideBadChannelMapLayer6->GetXaxis()->SetNdivisions(25);
  fHistDAQDBPSideBadChannelMapLayer6->GetYaxis()->SetNdivisions(38);
  fHistDAQDBPSideBadChannelMapLayer6->GetXaxis()->SetLabelSize(0.03);
  fHistDAQDBPSideBadChannelMapLayer6->GetYaxis()->SetLabelSize(0.03);
  fHistDAQDBPSideBadChannelMapLayer6->GetZaxis()->SetTitleOffset(1.6);
  fHistDAQDBPSideBadChannelMapLayer6->GetZaxis()->SetTitle("Bad channels (p-side)[%]");

  TH2F *fHistDAQDBNSideBadChannelMapLayer6 = new TH2F("fHistDAQDBNSideBadChannelMapLayer6",
						      "Layer 6;N_{module};N_{ladder}",
						      25,1,26,
						      38,600,638);
  fHistDAQDBNSideBadChannelMapLayer6->GetXaxis()->SetTitleColor(1);
  fHistDAQDBNSideBadChannelMapLayer6->SetStats(kFALSE);
  fHistDAQDBNSideBadChannelMapLayer6->GetYaxis()->SetTitleOffset(1.8);
  fHistDAQDBNSideBadChannelMapLayer6->GetXaxis()->SetNdivisions(25);
  fHistDAQDBNSideBadChannelMapLayer6->GetYaxis()->SetNdivisions(38);
  fHistDAQDBNSideBadChannelMapLayer6->GetXaxis()->SetLabelSize(0.03);
  fHistDAQDBNSideBadChannelMapLayer6->GetYaxis()->SetLabelSize(0.03);
  fHistDAQDBNSideBadChannelMapLayer6->GetZaxis()->SetTitleOffset(1.6);
  fHistDAQDBNSideBadChannelMapLayer6->GetZaxis()->SetTitle("Bad channels (n-side)[%]");

  //===============================//
  TFile *f = TFile::Open(filename);
  if(!f) {
    Printf("File poiter not valid");
    return;
  }

  if(!f->IsOpen()) {
    Printf("The file was not found");
    return;
  }
  //===============================//

  AliITSBadChannelsSSDv2 *badChannelsSSD = new AliITSBadChannelsSSDv2();
  badChannelsSSD = dynamic_cast<AliITSBadChannelsSSDv2 *>(f->Get("AliITSBadChannelsSSDv2"));

  //_____________________________________________________________________________//
  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)
	fHistDAQDBPSideBadChannelMapLayer5->Fill(module,499+ladder,
						 100.*nPSideChannelsLayer5/fgkDefaultNStripsSSD);
      else fHistDAQDBPSideBadChannelMapLayer5->Fill(module,499+ladder,0.0001);
      if(nNSideChannelsLayer5 > 0)
	fHistDAQDBNSideBadChannelMapLayer5->Fill(module,499+ladder,
						 100.*nNSideChannelsLayer5/fgkDefaultNStripsSSD);
      else fHistDAQDBNSideBadChannelMapLayer5->Fill(module,499+ladder,0.0001);
    }//layer 5
    if(layer == 6) {
      if(nPSideChannelsLayer6 > 0) 
	fHistDAQDBPSideBadChannelMapLayer6->Fill(module,599+ladder,
						 100.*nPSideChannelsLayer6/fgkDefaultNStripsSSD);
      else fHistDAQDBPSideBadChannelMapLayer6->Fill(module,599+ladder,0.0001);
      if(nNSideChannelsLayer6 > 0) 
	fHistDAQDBNSideBadChannelMapLayer6->Fill(module,599+ladder,
						 100.*nNSideChannelsLayer6/fgkDefaultNStripsSSD);
      else fHistDAQDBNSideBadChannelMapLayer6->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 *cBadChannelDAQDB = new TCanvas("cBadChannelDAQDB",
					  "Bad channel list - DAQ DB",
					  0,0,900,900);
  cBadChannelDAQDB->SetHighLightColor(10); cBadChannelDAQDB->SetFillColor(10); 
  cBadChannelDAQDB->Divide(2,2);

  cBadChannelDAQDB->cd(1)->SetBottomMargin(.2); 
  cBadChannelDAQDB->cd(1)->SetLeftMargin(.15);
  cBadChannelDAQDB->cd(1)->SetRightMargin(.2);
  cBadChannelDAQDB->cd(1)->SetGridx(); cBadChannelDAQDB->cd(1)->SetGridy();
  cBadChannelDAQDB->cd(1); fHistDAQDBPSideBadChannelMapLayer5->Draw("colz"); 
  cBadChannelDAQDB->cd(2)->SetBottomMargin(.2); 
  cBadChannelDAQDB->cd(2)->SetLeftMargin(.15);
  cBadChannelDAQDB->cd(2)->SetRightMargin(.2);
  cBadChannelDAQDB->cd(2)->SetGridx(); cBadChannelDAQDB->cd(2)->SetGridy();
  cBadChannelDAQDB->cd(2); fHistDAQDBPSideBadChannelMapLayer6->Draw("colz");
  cBadChannelDAQDB->cd(3)->SetBottomMargin(.2); 
  cBadChannelDAQDB->cd(3)->SetLeftMargin(.15);
  cBadChannelDAQDB->cd(3)->SetRightMargin(.2);
  cBadChannelDAQDB->cd(3)->SetGridx(); cBadChannelDAQDB->cd(3)->SetGridy();
  cBadChannelDAQDB->cd(3); fHistDAQDBNSideBadChannelMapLayer5->Draw("colz"); 
  cBadChannelDAQDB->cd(4)->SetBottomMargin(.2); 
  cBadChannelDAQDB->cd(4)->SetLeftMargin(.15);
  cBadChannelDAQDB->cd(4)->SetRightMargin(.2);
  cBadChannelDAQDB->cd(4)->SetGridx(); cBadChannelDAQDB->cd(4)->SetGridy();
  cBadChannelDAQDB->cd(4); fHistDAQDBNSideBadChannelMapLayer6->Draw("colz");

  return;
}
 patchSSDBadChannelsMap.C:1
 patchSSDBadChannelsMap.C:2
 patchSSDBadChannelsMap.C:3
 patchSSDBadChannelsMap.C:4
 patchSSDBadChannelsMap.C:5
 patchSSDBadChannelsMap.C:6
 patchSSDBadChannelsMap.C:7
 patchSSDBadChannelsMap.C:8
 patchSSDBadChannelsMap.C:9
 patchSSDBadChannelsMap.C:10
 patchSSDBadChannelsMap.C:11
 patchSSDBadChannelsMap.C:12
 patchSSDBadChannelsMap.C:13
 patchSSDBadChannelsMap.C:14
 patchSSDBadChannelsMap.C:15
 patchSSDBadChannelsMap.C:16
 patchSSDBadChannelsMap.C:17
 patchSSDBadChannelsMap.C:18
 patchSSDBadChannelsMap.C:19
 patchSSDBadChannelsMap.C:20
 patchSSDBadChannelsMap.C:21
 patchSSDBadChannelsMap.C:22
 patchSSDBadChannelsMap.C:23
 patchSSDBadChannelsMap.C:24
 patchSSDBadChannelsMap.C:25
 patchSSDBadChannelsMap.C:26
 patchSSDBadChannelsMap.C:27
 patchSSDBadChannelsMap.C:28
 patchSSDBadChannelsMap.C:29
 patchSSDBadChannelsMap.C:30
 patchSSDBadChannelsMap.C:31
 patchSSDBadChannelsMap.C:32
 patchSSDBadChannelsMap.C:33
 patchSSDBadChannelsMap.C:34
 patchSSDBadChannelsMap.C:35
 patchSSDBadChannelsMap.C:36
 patchSSDBadChannelsMap.C:37
 patchSSDBadChannelsMap.C:38
 patchSSDBadChannelsMap.C:39
 patchSSDBadChannelsMap.C:40
 patchSSDBadChannelsMap.C:41
 patchSSDBadChannelsMap.C:42
 patchSSDBadChannelsMap.C:43
 patchSSDBadChannelsMap.C:44
 patchSSDBadChannelsMap.C:45
 patchSSDBadChannelsMap.C:46
 patchSSDBadChannelsMap.C:47
 patchSSDBadChannelsMap.C:48
 patchSSDBadChannelsMap.C:49
 patchSSDBadChannelsMap.C:50
 patchSSDBadChannelsMap.C:51
 patchSSDBadChannelsMap.C:52
 patchSSDBadChannelsMap.C:53
 patchSSDBadChannelsMap.C:54
 patchSSDBadChannelsMap.C:55
 patchSSDBadChannelsMap.C:56
 patchSSDBadChannelsMap.C:57
 patchSSDBadChannelsMap.C:58
 patchSSDBadChannelsMap.C:59
 patchSSDBadChannelsMap.C:60
 patchSSDBadChannelsMap.C:61
 patchSSDBadChannelsMap.C:62
 patchSSDBadChannelsMap.C:63
 patchSSDBadChannelsMap.C:64
 patchSSDBadChannelsMap.C:65
 patchSSDBadChannelsMap.C:66
 patchSSDBadChannelsMap.C:67
 patchSSDBadChannelsMap.C:68
 patchSSDBadChannelsMap.C:69
 patchSSDBadChannelsMap.C:70
 patchSSDBadChannelsMap.C:71
 patchSSDBadChannelsMap.C:72
 patchSSDBadChannelsMap.C:73
 patchSSDBadChannelsMap.C:74
 patchSSDBadChannelsMap.C:75
 patchSSDBadChannelsMap.C:76
 patchSSDBadChannelsMap.C:77
 patchSSDBadChannelsMap.C:78
 patchSSDBadChannelsMap.C:79
 patchSSDBadChannelsMap.C:80
 patchSSDBadChannelsMap.C:81
 patchSSDBadChannelsMap.C:82
 patchSSDBadChannelsMap.C:83
 patchSSDBadChannelsMap.C:84
 patchSSDBadChannelsMap.C:85
 patchSSDBadChannelsMap.C:86
 patchSSDBadChannelsMap.C:87
 patchSSDBadChannelsMap.C:88
 patchSSDBadChannelsMap.C:89
 patchSSDBadChannelsMap.C:90
 patchSSDBadChannelsMap.C:91
 patchSSDBadChannelsMap.C:92
 patchSSDBadChannelsMap.C:93
 patchSSDBadChannelsMap.C:94
 patchSSDBadChannelsMap.C:95
 patchSSDBadChannelsMap.C:96
 patchSSDBadChannelsMap.C:97
 patchSSDBadChannelsMap.C:98
 patchSSDBadChannelsMap.C:99
 patchSSDBadChannelsMap.C:100
 patchSSDBadChannelsMap.C:101
 patchSSDBadChannelsMap.C:102
 patchSSDBadChannelsMap.C:103
 patchSSDBadChannelsMap.C:104
 patchSSDBadChannelsMap.C:105
 patchSSDBadChannelsMap.C:106
 patchSSDBadChannelsMap.C:107
 patchSSDBadChannelsMap.C:108
 patchSSDBadChannelsMap.C:109
 patchSSDBadChannelsMap.C:110
 patchSSDBadChannelsMap.C:111
 patchSSDBadChannelsMap.C:112
 patchSSDBadChannelsMap.C:113
 patchSSDBadChannelsMap.C:114
 patchSSDBadChannelsMap.C:115
 patchSSDBadChannelsMap.C:116
 patchSSDBadChannelsMap.C:117
 patchSSDBadChannelsMap.C:118
 patchSSDBadChannelsMap.C:119
 patchSSDBadChannelsMap.C:120
 patchSSDBadChannelsMap.C:121
 patchSSDBadChannelsMap.C:122
 patchSSDBadChannelsMap.C:123
 patchSSDBadChannelsMap.C:124
 patchSSDBadChannelsMap.C:125
 patchSSDBadChannelsMap.C:126
 patchSSDBadChannelsMap.C:127
 patchSSDBadChannelsMap.C:128
 patchSSDBadChannelsMap.C:129
 patchSSDBadChannelsMap.C:130
 patchSSDBadChannelsMap.C:131
 patchSSDBadChannelsMap.C:132
 patchSSDBadChannelsMap.C:133
 patchSSDBadChannelsMap.C:134
 patchSSDBadChannelsMap.C:135
 patchSSDBadChannelsMap.C:136
 patchSSDBadChannelsMap.C:137
 patchSSDBadChannelsMap.C:138
 patchSSDBadChannelsMap.C:139
 patchSSDBadChannelsMap.C:140
 patchSSDBadChannelsMap.C:141
 patchSSDBadChannelsMap.C:142
 patchSSDBadChannelsMap.C:143
 patchSSDBadChannelsMap.C:144
 patchSSDBadChannelsMap.C:145
 patchSSDBadChannelsMap.C:146
 patchSSDBadChannelsMap.C:147
 patchSSDBadChannelsMap.C:148
 patchSSDBadChannelsMap.C:149
 patchSSDBadChannelsMap.C:150
 patchSSDBadChannelsMap.C:151
 patchSSDBadChannelsMap.C:152
 patchSSDBadChannelsMap.C:153
 patchSSDBadChannelsMap.C:154
 patchSSDBadChannelsMap.C:155
 patchSSDBadChannelsMap.C:156
 patchSSDBadChannelsMap.C:157
 patchSSDBadChannelsMap.C:158
 patchSSDBadChannelsMap.C:159
 patchSSDBadChannelsMap.C:160
 patchSSDBadChannelsMap.C:161
 patchSSDBadChannelsMap.C:162
 patchSSDBadChannelsMap.C:163
 patchSSDBadChannelsMap.C:164
 patchSSDBadChannelsMap.C:165
 patchSSDBadChannelsMap.C:166
 patchSSDBadChannelsMap.C:167
 patchSSDBadChannelsMap.C:168
 patchSSDBadChannelsMap.C:169
 patchSSDBadChannelsMap.C:170
 patchSSDBadChannelsMap.C:171
 patchSSDBadChannelsMap.C:172
 patchSSDBadChannelsMap.C:173
 patchSSDBadChannelsMap.C:174
 patchSSDBadChannelsMap.C:175
 patchSSDBadChannelsMap.C:176
 patchSSDBadChannelsMap.C:177
 patchSSDBadChannelsMap.C:178
 patchSSDBadChannelsMap.C:179
 patchSSDBadChannelsMap.C:180
 patchSSDBadChannelsMap.C:181
 patchSSDBadChannelsMap.C:182
 patchSSDBadChannelsMap.C:183
 patchSSDBadChannelsMap.C:184
 patchSSDBadChannelsMap.C:185
 patchSSDBadChannelsMap.C:186
 patchSSDBadChannelsMap.C:187
 patchSSDBadChannelsMap.C:188
 patchSSDBadChannelsMap.C:189
 patchSSDBadChannelsMap.C:190
 patchSSDBadChannelsMap.C:191
 patchSSDBadChannelsMap.C:192
 patchSSDBadChannelsMap.C:193
 patchSSDBadChannelsMap.C:194
 patchSSDBadChannelsMap.C:195
 patchSSDBadChannelsMap.C:196
 patchSSDBadChannelsMap.C:197
 patchSSDBadChannelsMap.C:198
 patchSSDBadChannelsMap.C:199
 patchSSDBadChannelsMap.C:200
 patchSSDBadChannelsMap.C:201
 patchSSDBadChannelsMap.C:202
 patchSSDBadChannelsMap.C:203
 patchSSDBadChannelsMap.C:204
 patchSSDBadChannelsMap.C:205
 patchSSDBadChannelsMap.C:206
 patchSSDBadChannelsMap.C:207
 patchSSDBadChannelsMap.C:208
 patchSSDBadChannelsMap.C:209
 patchSSDBadChannelsMap.C:210
 patchSSDBadChannelsMap.C:211
 patchSSDBadChannelsMap.C:212
 patchSSDBadChannelsMap.C:213
 patchSSDBadChannelsMap.C:214
 patchSSDBadChannelsMap.C:215
 patchSSDBadChannelsMap.C:216
 patchSSDBadChannelsMap.C:217
 patchSSDBadChannelsMap.C:218
 patchSSDBadChannelsMap.C:219
 patchSSDBadChannelsMap.C:220
 patchSSDBadChannelsMap.C:221
 patchSSDBadChannelsMap.C:222
 patchSSDBadChannelsMap.C:223
 patchSSDBadChannelsMap.C:224
 patchSSDBadChannelsMap.C:225
 patchSSDBadChannelsMap.C:226
 patchSSDBadChannelsMap.C:227
 patchSSDBadChannelsMap.C:228
 patchSSDBadChannelsMap.C:229
 patchSSDBadChannelsMap.C:230
 patchSSDBadChannelsMap.C:231
 patchSSDBadChannelsMap.C:232
 patchSSDBadChannelsMap.C:233
 patchSSDBadChannelsMap.C:234
 patchSSDBadChannelsMap.C:235
 patchSSDBadChannelsMap.C:236
 patchSSDBadChannelsMap.C:237
 patchSSDBadChannelsMap.C:238
 patchSSDBadChannelsMap.C:239
 patchSSDBadChannelsMap.C:240
 patchSSDBadChannelsMap.C:241
 patchSSDBadChannelsMap.C:242
 patchSSDBadChannelsMap.C:243
 patchSSDBadChannelsMap.C:244
 patchSSDBadChannelsMap.C:245
 patchSSDBadChannelsMap.C:246
 patchSSDBadChannelsMap.C:247
 patchSSDBadChannelsMap.C:248
 patchSSDBadChannelsMap.C:249
 patchSSDBadChannelsMap.C:250
 patchSSDBadChannelsMap.C:251
 patchSSDBadChannelsMap.C:252
 patchSSDBadChannelsMap.C:253
 patchSSDBadChannelsMap.C:254
 patchSSDBadChannelsMap.C:255
 patchSSDBadChannelsMap.C:256
 patchSSDBadChannelsMap.C:257
 patchSSDBadChannelsMap.C:258
 patchSSDBadChannelsMap.C:259
 patchSSDBadChannelsMap.C:260
 patchSSDBadChannelsMap.C:261
 patchSSDBadChannelsMap.C:262
 patchSSDBadChannelsMap.C:263
 patchSSDBadChannelsMap.C:264
 patchSSDBadChannelsMap.C:265
 patchSSDBadChannelsMap.C:266
 patchSSDBadChannelsMap.C:267
 patchSSDBadChannelsMap.C:268
 patchSSDBadChannelsMap.C:269
 patchSSDBadChannelsMap.C:270
 patchSSDBadChannelsMap.C:271
 patchSSDBadChannelsMap.C:272
 patchSSDBadChannelsMap.C:273
 patchSSDBadChannelsMap.C:274
 patchSSDBadChannelsMap.C:275
 patchSSDBadChannelsMap.C:276
 patchSSDBadChannelsMap.C:277
 patchSSDBadChannelsMap.C:278
 patchSSDBadChannelsMap.C:279
 patchSSDBadChannelsMap.C:280
 patchSSDBadChannelsMap.C:281
 patchSSDBadChannelsMap.C:282
 patchSSDBadChannelsMap.C:283
 patchSSDBadChannelsMap.C:284
 patchSSDBadChannelsMap.C:285
 patchSSDBadChannelsMap.C:286
 patchSSDBadChannelsMap.C:287
 patchSSDBadChannelsMap.C:288
 patchSSDBadChannelsMap.C:289
 patchSSDBadChannelsMap.C:290
 patchSSDBadChannelsMap.C:291
 patchSSDBadChannelsMap.C:292
 patchSSDBadChannelsMap.C:293
 patchSSDBadChannelsMap.C:294
 patchSSDBadChannelsMap.C:295
 patchSSDBadChannelsMap.C:296
 patchSSDBadChannelsMap.C:297
 patchSSDBadChannelsMap.C:298
 patchSSDBadChannelsMap.C:299
 patchSSDBadChannelsMap.C:300
 patchSSDBadChannelsMap.C:301
 patchSSDBadChannelsMap.C:302
 patchSSDBadChannelsMap.C:303
 patchSSDBadChannelsMap.C:304
 patchSSDBadChannelsMap.C:305
 patchSSDBadChannelsMap.C:306
 patchSSDBadChannelsMap.C:307
 patchSSDBadChannelsMap.C:308
 patchSSDBadChannelsMap.C:309
 patchSSDBadChannelsMap.C:310
 patchSSDBadChannelsMap.C:311
 patchSSDBadChannelsMap.C:312
 patchSSDBadChannelsMap.C:313
 patchSSDBadChannelsMap.C:314
 patchSSDBadChannelsMap.C:315
 patchSSDBadChannelsMap.C:316
 patchSSDBadChannelsMap.C:317
 patchSSDBadChannelsMap.C:318
 patchSSDBadChannelsMap.C:319
 patchSSDBadChannelsMap.C:320
 patchSSDBadChannelsMap.C:321
 patchSSDBadChannelsMap.C:322
 patchSSDBadChannelsMap.C:323
 patchSSDBadChannelsMap.C:324
 patchSSDBadChannelsMap.C:325
 patchSSDBadChannelsMap.C:326
 patchSSDBadChannelsMap.C:327
 patchSSDBadChannelsMap.C:328
 patchSSDBadChannelsMap.C:329
 patchSSDBadChannelsMap.C:330
 patchSSDBadChannelsMap.C:331
 patchSSDBadChannelsMap.C:332
 patchSSDBadChannelsMap.C:333
 patchSSDBadChannelsMap.C:334
 patchSSDBadChannelsMap.C:335
 patchSSDBadChannelsMap.C:336
 patchSSDBadChannelsMap.C:337
 patchSSDBadChannelsMap.C:338
 patchSSDBadChannelsMap.C:339
 patchSSDBadChannelsMap.C:340
 patchSSDBadChannelsMap.C:341
 patchSSDBadChannelsMap.C:342
 patchSSDBadChannelsMap.C:343
 patchSSDBadChannelsMap.C:344
 patchSSDBadChannelsMap.C:345
 patchSSDBadChannelsMap.C:346
 patchSSDBadChannelsMap.C:347
 patchSSDBadChannelsMap.C:348
 patchSSDBadChannelsMap.C:349
 patchSSDBadChannelsMap.C:350
 patchSSDBadChannelsMap.C:351
 patchSSDBadChannelsMap.C:352
 patchSSDBadChannelsMap.C:353
 patchSSDBadChannelsMap.C:354
 patchSSDBadChannelsMap.C:355
 patchSSDBadChannelsMap.C:356
 patchSSDBadChannelsMap.C:357
 patchSSDBadChannelsMap.C:358
 patchSSDBadChannelsMap.C:359
 patchSSDBadChannelsMap.C:360
 patchSSDBadChannelsMap.C:361
 patchSSDBadChannelsMap.C:362
 patchSSDBadChannelsMap.C:363
 patchSSDBadChannelsMap.C:364
 patchSSDBadChannelsMap.C:365
 patchSSDBadChannelsMap.C:366
 patchSSDBadChannelsMap.C:367
 patchSSDBadChannelsMap.C:368
 patchSSDBadChannelsMap.C:369
 patchSSDBadChannelsMap.C:370
 patchSSDBadChannelsMap.C:371
 patchSSDBadChannelsMap.C:372
 patchSSDBadChannelsMap.C:373
 patchSSDBadChannelsMap.C:374
 patchSSDBadChannelsMap.C:375
 patchSSDBadChannelsMap.C:376
 patchSSDBadChannelsMap.C:377
 patchSSDBadChannelsMap.C:378
 patchSSDBadChannelsMap.C:379
 patchSSDBadChannelsMap.C:380
 patchSSDBadChannelsMap.C:381
 patchSSDBadChannelsMap.C:382
 patchSSDBadChannelsMap.C:383
 patchSSDBadChannelsMap.C:384
 patchSSDBadChannelsMap.C:385
 patchSSDBadChannelsMap.C:386
 patchSSDBadChannelsMap.C:387