ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include "TH3.h"
#include "TF1.h"
#include "TFile.h"
#include "TLine.h"
#include "TCanvas.h"
#include "AliPHOSEmcBadChannelsMap.h"
#include "AliCDBId.h"
#include "AliCDBMetaData.h"
#include "AliCDBEntry.h"
#include "AliCDBManager.h"
#endif

void MakeRandomBadChannelMap(const TString modules="3", 
			     const Float_t fractionBad=0.02)
{
  // Create a random bad channel map for selected modules 
  // with a fraction of bad channel equal to fractionBad
  // Author Yuri Kharlov
  // 20.07.2008

  const Int_t nZ=56, nX=64;
  Int_t module;
  AliPHOSEmcBadChannelsMap badMap;
  TH2I *hBadChannels[5];
  TCanvas *cb[5];
  gStyle->SetOptStat(10);

  for (Int_t iModule=0; iModule<modules.Length(); iModule++) {
    const char chMod = modules[iModule];
    module = atoi(&chMod);
    if (module<1 || module>5) {
      printf("Wrong module number %d, can be from 1 to 5\n",module);
      exit(1);
    }
    printf("Creating bad channel map for module %d\n",module);

    hBadChannels[iModule] = new TH2I(Form("hBadChannels%d",module),
				     Form("Bad channels for module %d",module),
				     nZ,1,nZ, nX,1,nX);
    hBadChannels[iModule]->SetXTitle("z, cells");
    hBadChannels[iModule]->SetYTitle("x, cells");
    for(Int_t iZ=1; iZ<=nZ; iZ++){
      for(Int_t iX=1; iX<=nX; iX++){
	if (gRandom->Rndm() < fractionBad) {
 	  hBadChannels[iModule]->SetBinContent(iZ,iX,1);
 	  badMap.SetBadChannel(module,iZ,iX);
	}
      }
    }
    cb[iModule] = new TCanvas(Form("BadMap%d",module),
			      Form("Bad channels for module %d",module),
			      15+iModule*40,15+iModule*40,500,600) ;
    cb[iModule]->SetFillColor(kWhite);
    hBadChannels[iModule]->DrawClone("box") ;
  }
  

//   TFile * fout = new TFile("BadMap.root","recreate") ;
//   hBadMap->Write() ;
//   fout->Close() ;

  // put now result to local CDB
  AliCDBManager *CDB = AliCDBManager::Instance();
  CDB->SetDefaultStorage("local://./");
  
  AliCDBMetaData *md= new AliCDBMetaData();
  md->SetResponsible("Yuri Kharlov");
  md->SetComment(Form("Random bad channel map with %.3f bad channels",fractionBad));
  AliCDBId id("PHOS/Calib/EmcBadChannels",0,999999);
  CDB->Put(&badMap,id, md);
 

}
 MakeRandomBadChannelMap.C:1
 MakeRandomBadChannelMap.C:2
 MakeRandomBadChannelMap.C:3
 MakeRandomBadChannelMap.C:4
 MakeRandomBadChannelMap.C:5
 MakeRandomBadChannelMap.C:6
 MakeRandomBadChannelMap.C:7
 MakeRandomBadChannelMap.C:8
 MakeRandomBadChannelMap.C:9
 MakeRandomBadChannelMap.C:10
 MakeRandomBadChannelMap.C:11
 MakeRandomBadChannelMap.C:12
 MakeRandomBadChannelMap.C:13
 MakeRandomBadChannelMap.C:14
 MakeRandomBadChannelMap.C:15
 MakeRandomBadChannelMap.C:16
 MakeRandomBadChannelMap.C:17
 MakeRandomBadChannelMap.C:18
 MakeRandomBadChannelMap.C:19
 MakeRandomBadChannelMap.C:20
 MakeRandomBadChannelMap.C:21
 MakeRandomBadChannelMap.C:22
 MakeRandomBadChannelMap.C:23
 MakeRandomBadChannelMap.C:24
 MakeRandomBadChannelMap.C:25
 MakeRandomBadChannelMap.C:26
 MakeRandomBadChannelMap.C:27
 MakeRandomBadChannelMap.C:28
 MakeRandomBadChannelMap.C:29
 MakeRandomBadChannelMap.C:30
 MakeRandomBadChannelMap.C:31
 MakeRandomBadChannelMap.C:32
 MakeRandomBadChannelMap.C:33
 MakeRandomBadChannelMap.C:34
 MakeRandomBadChannelMap.C:35
 MakeRandomBadChannelMap.C:36
 MakeRandomBadChannelMap.C:37
 MakeRandomBadChannelMap.C:38
 MakeRandomBadChannelMap.C:39
 MakeRandomBadChannelMap.C:40
 MakeRandomBadChannelMap.C:41
 MakeRandomBadChannelMap.C:42
 MakeRandomBadChannelMap.C:43
 MakeRandomBadChannelMap.C:44
 MakeRandomBadChannelMap.C:45
 MakeRandomBadChannelMap.C:46
 MakeRandomBadChannelMap.C:47
 MakeRandomBadChannelMap.C:48
 MakeRandomBadChannelMap.C:49
 MakeRandomBadChannelMap.C:50
 MakeRandomBadChannelMap.C:51
 MakeRandomBadChannelMap.C:52
 MakeRandomBadChannelMap.C:53
 MakeRandomBadChannelMap.C:54
 MakeRandomBadChannelMap.C:55
 MakeRandomBadChannelMap.C:56
 MakeRandomBadChannelMap.C:57
 MakeRandomBadChannelMap.C:58
 MakeRandomBadChannelMap.C:59
 MakeRandomBadChannelMap.C:60
 MakeRandomBadChannelMap.C:61
 MakeRandomBadChannelMap.C:62
 MakeRandomBadChannelMap.C:63
 MakeRandomBadChannelMap.C:64
 MakeRandomBadChannelMap.C:65
 MakeRandomBadChannelMap.C:66
 MakeRandomBadChannelMap.C:67
 MakeRandomBadChannelMap.C:68
 MakeRandomBadChannelMap.C:69
 MakeRandomBadChannelMap.C:70
 MakeRandomBadChannelMap.C:71
 MakeRandomBadChannelMap.C:72
 MakeRandomBadChannelMap.C:73
 MakeRandomBadChannelMap.C:74
 MakeRandomBadChannelMap.C:75