ROOT logo
// Example to check the contents of a bad channels OCDB file
// either local file or alien file
// Author: Gustavo Conesa Balbastre (LPSC-Grenoble)

void PrintBadChannels(TString file = 
		      "$ALICE_ROOT/OCDB/EMCAL/Calib/Pedestals/Run0_999999999_v0_s0.root"
		      "alien:///alice/data/2014/OCDB/EMCAL/Calib/Pedestals/Run0_999999999_v1_s0.root"
		      ) 
{
  // Read status map
 
  if(file.Contains("alien:///"))
    TGrid::Connect("alien://");

  TFile * f = TFile::Open(file,"READ");
  
  AliCDBEntry * cdb = (AliCDBEntry*) f->Get("AliCDBEntry");
  
  AliCaloCalibPedestal * caloped = (AliCaloCalibPedestal *) cdb->GetObject();
  
  TObjArray map = caloped->GetDeadMap();
  Int_t nHisto = map.GetEntries();
  AliEMCALGeometry * geom = AliEMCALGeometry::GetInstance("EMCAL_COMPLETE12SMV1_DCAL_8SM");
  
  printf ("N SM %d, array size %d\n",geom->GetNumberOfSuperModules(),nHisto);

  Int_t nbadTotal  = 0;
  Int_t nhotTotal  = 0;
  Int_t nwarmTotal = 0;
  Int_t ndeadTotal = 0;
  
  for(Int_t iSM = 0; iSM < geom->GetNumberOfSuperModules(); iSM ++)
  {     
    if(iSM >=nHisto || !(TH2D*)map[iSM]))
    {
      printf("No entry for SM %d, skip it!\n",iSM);
      continue;
    }

    printf(">>> SM %d <<< Entries %d \n",iSM,((TH2D*)map[iSM])->GetEntries());

    Int_t nbad  = 0;
    Int_t nhot  = 0;
    Int_t nwarm = 0;
    Int_t ndead = 0;

    for(Int_t i = 0; i < ((TH2D*)map[iSM])->GetNbinsX() ; i++)
    {
      for(Int_t j = 0; j < ((TH2D*)map[iSM])->GetNbinsY() ; j++)
      {
        if(((TH2D*)map[iSM])->GetBinContent(i, j)!=AliCaloCalibPedestal::kAlive)
        {
          Int_t id = geom->GetAbsCellIdFromCellIndexes(iSM,j,i);
          printf("\t Bin (%d-%d) Id %d Content: %d \n",i,j,id,((TH2D*)map[iSM])->GetBinContent(i, j));
          nbad++;
        }	
        
        if(((TH2D*)map[iSM])->GetBinContent(i, j)==AliCaloCalibPedestal::kDead   ) ndead++;
        if(((TH2D*)map[iSM])->GetBinContent(i, j)==AliCaloCalibPedestal::kHot    ) nhot ++;
        if(((TH2D*)map[iSM])->GetBinContent(i, j)==AliCaloCalibPedestal::kWarning) nwarm++;
      }	
    }
    
    printf("Summary : --- dead %d --- hot %d --- warm %d --- bad %d\n",ndead,nhot,nwarm,nbad);  
    
    nbadTotal  += nbad  ;
    nhotTotal  += nhot  ;
    ndeadTotal += ndead ;
    nwarmTotal += nwarm ;
  }
  
  
  printf("All SM summary : --- dead %d --- hot %d --- warm %d --- bad %d\n",ndeadTotal,nhotTotal,nwarmTotal,nbadTotal);  
  
  printf("Total BAD %d\n", caloped->GetDeadTowerCount());
  
}
 PrintBadChannels.C:1
 PrintBadChannels.C:2
 PrintBadChannels.C:3
 PrintBadChannels.C:4
 PrintBadChannels.C:5
 PrintBadChannels.C:6
 PrintBadChannels.C:7
 PrintBadChannels.C:8
 PrintBadChannels.C:9
 PrintBadChannels.C:10
 PrintBadChannels.C:11
 PrintBadChannels.C:12
 PrintBadChannels.C:13
 PrintBadChannels.C:14
 PrintBadChannels.C:15
 PrintBadChannels.C:16
 PrintBadChannels.C:17
 PrintBadChannels.C:18
 PrintBadChannels.C:19
 PrintBadChannels.C:20
 PrintBadChannels.C:21
 PrintBadChannels.C:22
 PrintBadChannels.C:23
 PrintBadChannels.C:24
 PrintBadChannels.C:25
 PrintBadChannels.C:26
 PrintBadChannels.C:27
 PrintBadChannels.C:28
 PrintBadChannels.C:29
 PrintBadChannels.C:30
 PrintBadChannels.C:31
 PrintBadChannels.C:32
 PrintBadChannels.C:33
 PrintBadChannels.C:34
 PrintBadChannels.C:35
 PrintBadChannels.C:36
 PrintBadChannels.C:37
 PrintBadChannels.C:38
 PrintBadChannels.C:39
 PrintBadChannels.C:40
 PrintBadChannels.C:41
 PrintBadChannels.C:42
 PrintBadChannels.C:43
 PrintBadChannels.C:44
 PrintBadChannels.C:45
 PrintBadChannels.C:46
 PrintBadChannels.C:47
 PrintBadChannels.C:48
 PrintBadChannels.C:49
 PrintBadChannels.C:50
 PrintBadChannels.C:51
 PrintBadChannels.C:52
 PrintBadChannels.C:53
 PrintBadChannels.C:54
 PrintBadChannels.C:55
 PrintBadChannels.C:56
 PrintBadChannels.C:57
 PrintBadChannels.C:58
 PrintBadChannels.C:59
 PrintBadChannels.C:60
 PrintBadChannels.C:61
 PrintBadChannels.C:62
 PrintBadChannels.C:63
 PrintBadChannels.C:64
 PrintBadChannels.C:65
 PrintBadChannels.C:66
 PrintBadChannels.C:67
 PrintBadChannels.C:68
 PrintBadChannels.C:69
 PrintBadChannels.C:70
 PrintBadChannels.C:71
 PrintBadChannels.C:72
 PrintBadChannels.C:73
 PrintBadChannels.C:74
 PrintBadChannels.C:75
 PrintBadChannels.C:76
 PrintBadChannels.C:77
 PrintBadChannels.C:78