ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TFile.h>
#include <TH1F.h>
#include <TH2F.h>
#include <TStyle.h>
#include <TSystem.h>
#include <TString.h>
#include <TGrid.h>
#include <TCanvas.h>
#include <TObjArray.h>
#include "AliCDBEntry.h"
#include "AliITSCorrMapSDD.h"
#include "AliITSMapSDD.h"
#endif


// Macro to plot the SDD correction maps 
// from the OCDB file (OCDB/ITS/Calib/MapsTimeSDD)
//
// Origin: F. Prino (prino@to.infn.it)

void ShowCorrMapsSDD(TString filname="alien:///alice/data/2010/OCDB/ITS/Calib/MapsTimeSDD/Run117224_999999999_v3_s0.root"){

  if(filname.Contains("alien")){
    TGrid::Connect("alien:");
  }
  TFile *fil =TFile::Open(filname.Data());
    
  AliCDBEntry* ent=(AliCDBEntry*)fil->Get("AliCDBEntry");
  TObjArray *maptSDD = (TObjArray *)ent->GetObject();
  printf("Entries in array=%d\n",maptSDD->GetEntriesFast());
  TString psnm0 = "mapsSDD.ps[";
  TString psnm1 = "mapsSDD.ps";
  TString psnm2 = "mapsSDD.ps]";
  Bool_t oldMapFormat=kFALSE;
  TObject* objmap=(TObject*)maptSDD->At(0);
  TString cname(objmap->ClassName());
  if(cname.CompareTo("AliITSMapSDD")==0){ 
    oldMapFormat=kTRUE;
    printf("SDD Maps converted to new format\n");
  }
 

  TCanvas * c3=new TCanvas("c3","Layer 3",1200,900);
  c3->Print(psnm0.Data());
  gStyle->SetPalette(1);
  gStyle->SetOptStat(0);
  Int_t cntpad=0;
  for(Int_t i=0; i<84; i++){
    if(i%6==0){
      c3->cd();
      c3->Modified();
      c3->Update();
      if(i) c3->Print(psnm1.Data());
      c3->Clear();
      c3->Divide(4,3);
      cntpad=0;
    }
    Int_t index0=i*2;
    Int_t index1=i*2+1;
    AliITSCorrMapSDD* map0 = 0;
    AliITSCorrMapSDD* map1 = 0;
    if(oldMapFormat){ 
      AliITSMapSDD* oldmap0=(AliITSMapSDD*)maptSDD->At(index0);
      AliITSMapSDD* oldmap1=(AliITSMapSDD*)maptSDD->At(index1);
      map0=oldmap0->ConvertToNewFormat();
      map1=oldmap1->ConvertToNewFormat();
    }else{
      map0=(AliITSCorrMapSDD*)maptSDD->At(index0);
      map1=(AliITSCorrMapSDD*)maptSDD->At(index1);
    }

    printf("Module %s Entries in map %dx%d\n",map0->GetName(),map0->GetNBinsAnode(),map0->GetNBinsDrift());
    if(map0->GetNBinsAnode()==1){
      TH1F* hp0=map0->GetMapProfile();
      TH1F* hp1=map1->GetMapProfile();
      if(hp0->GetMinimum()>-0.000001) hp0->SetMinimum(-10);
      if(hp0->GetMaximum()<0.000001) hp0->SetMaximum(10);
      if(hp1->GetMinimum()>-0.000001) hp1->SetMinimum(-10);
      if(hp1->GetMaximum()<0.000001) hp1->SetMaximum(10);
      hp0->SetTitle(Form("Module %d - Left",i+240));
      hp1->SetTitle(Form("Module %d - Right",i+240));
      hp0->GetXaxis()->SetTitle("Drift distance (mm)");
      hp0->GetYaxis()->SetTitle("Correction (#mum)");
      hp1->GetXaxis()->SetTitle("Drift distance (mm)");
      hp1->GetYaxis()->SetTitle("Correction (#mum)");
      c3->cd(++cntpad);
      hp0->Draw();
      c3->cd(++cntpad);
      hp1->Draw();
    }else{
      TH2F* hmap0=map0->GetMapHisto();
      TH2F* hmap1=map1->GetMapHisto();
      c3->cd(++cntpad);
      hmap0->Draw("colz");
      c3->cd(++cntpad);
      hmap1->Draw("colz");
    }
  }
  c3->cd();
  c3->Modified();
  c3->Update();
  c3->Print(psnm1.Data());

  TCanvas * c4=new TCanvas("c4","Layer 4",1200,900);
  c4->Divide(4,4);
  gStyle->SetPalette(1);
  for(Int_t i=84; i<260; i++){
    Int_t j=i-84;
    if(j%8==0){
      c4->cd();
      c4->Modified();
      c4->Update();
      if(j) c4->Print(psnm1.Data());
      c4->Clear();
      c4->Divide(4,4);
      cntpad=0;
    }
    Int_t index0=i*2;
    Int_t index1=i*2+1;
    AliITSCorrMapSDD* map0 = 0;
    AliITSCorrMapSDD* map1 = 0;
    if(oldMapFormat){ 
      AliITSMapSDD* oldmap0=(AliITSMapSDD*)maptSDD->At(index0);
      AliITSMapSDD* oldmap1=(AliITSMapSDD*)maptSDD->At(index1);
      map0=oldmap0->ConvertToNewFormat();
      map1=oldmap1->ConvertToNewFormat();
    }else{
      map0=(AliITSCorrMapSDD*)maptSDD->At(index0);
      map1=(AliITSCorrMapSDD*)maptSDD->At(index1);
    }
    printf("Module %d Entries in map %dx%d\n",i,map0->GetNBinsAnode(),map0->GetNBinsDrift());
    if(map0->GetNBinsAnode()==1){
      TH1F* hp0=map0->GetMapProfile();
      TH1F* hp1=map1->GetMapProfile();
      if(hp0->GetMinimum()>-0.000001) hp0->SetMinimum(-10);
      if(hp0->GetMaximum()<0.000001) hp0->SetMaximum(10);
      if(hp1->GetMinimum()>-0.000001) hp1->SetMinimum(-10);
      if(hp1->GetMaximum()<0.000001) hp1->SetMaximum(10);
      hp0->SetTitle(Form("Module %d - Left",i+240));
      hp1->SetTitle(Form("Module %d - Right",i+240));
      hp0->GetXaxis()->SetTitle("Drift distance (mm)");
      hp0->GetYaxis()->SetTitle("Correction (#mum)");
      hp1->GetXaxis()->SetTitle("Drift distance (mm)");
      hp1->GetYaxis()->SetTitle("Correction (#mum)");
      c4->cd(++cntpad);
      hp0->Draw();
      c4->cd(++cntpad);
      hp1->Draw();
    }else{
      TH2F* hmap0=map0->GetMapHisto();
      TH2F* hmap1=map1->GetMapHisto();
      c4->cd(++cntpad);
      hmap0->Draw("colz");
      c4->cd(++cntpad);
      hmap1->Draw("colz");
    }
  }
  c4->cd();
  c4->Modified();
  c4->Update();
  c4->Print(psnm1.Data());
  c4->Print(psnm2.Data());

}
 ShowCorrMapsSDD.C:1
 ShowCorrMapsSDD.C:2
 ShowCorrMapsSDD.C:3
 ShowCorrMapsSDD.C:4
 ShowCorrMapsSDD.C:5
 ShowCorrMapsSDD.C:6
 ShowCorrMapsSDD.C:7
 ShowCorrMapsSDD.C:8
 ShowCorrMapsSDD.C:9
 ShowCorrMapsSDD.C:10
 ShowCorrMapsSDD.C:11
 ShowCorrMapsSDD.C:12
 ShowCorrMapsSDD.C:13
 ShowCorrMapsSDD.C:14
 ShowCorrMapsSDD.C:15
 ShowCorrMapsSDD.C:16
 ShowCorrMapsSDD.C:17
 ShowCorrMapsSDD.C:18
 ShowCorrMapsSDD.C:19
 ShowCorrMapsSDD.C:20
 ShowCorrMapsSDD.C:21
 ShowCorrMapsSDD.C:22
 ShowCorrMapsSDD.C:23
 ShowCorrMapsSDD.C:24
 ShowCorrMapsSDD.C:25
 ShowCorrMapsSDD.C:26
 ShowCorrMapsSDD.C:27
 ShowCorrMapsSDD.C:28
 ShowCorrMapsSDD.C:29
 ShowCorrMapsSDD.C:30
 ShowCorrMapsSDD.C:31
 ShowCorrMapsSDD.C:32
 ShowCorrMapsSDD.C:33
 ShowCorrMapsSDD.C:34
 ShowCorrMapsSDD.C:35
 ShowCorrMapsSDD.C:36
 ShowCorrMapsSDD.C:37
 ShowCorrMapsSDD.C:38
 ShowCorrMapsSDD.C:39
 ShowCorrMapsSDD.C:40
 ShowCorrMapsSDD.C:41
 ShowCorrMapsSDD.C:42
 ShowCorrMapsSDD.C:43
 ShowCorrMapsSDD.C:44
 ShowCorrMapsSDD.C:45
 ShowCorrMapsSDD.C:46
 ShowCorrMapsSDD.C:47
 ShowCorrMapsSDD.C:48
 ShowCorrMapsSDD.C:49
 ShowCorrMapsSDD.C:50
 ShowCorrMapsSDD.C:51
 ShowCorrMapsSDD.C:52
 ShowCorrMapsSDD.C:53
 ShowCorrMapsSDD.C:54
 ShowCorrMapsSDD.C:55
 ShowCorrMapsSDD.C:56
 ShowCorrMapsSDD.C:57
 ShowCorrMapsSDD.C:58
 ShowCorrMapsSDD.C:59
 ShowCorrMapsSDD.C:60
 ShowCorrMapsSDD.C:61
 ShowCorrMapsSDD.C:62
 ShowCorrMapsSDD.C:63
 ShowCorrMapsSDD.C:64
 ShowCorrMapsSDD.C:65
 ShowCorrMapsSDD.C:66
 ShowCorrMapsSDD.C:67
 ShowCorrMapsSDD.C:68
 ShowCorrMapsSDD.C:69
 ShowCorrMapsSDD.C:70
 ShowCorrMapsSDD.C:71
 ShowCorrMapsSDD.C:72
 ShowCorrMapsSDD.C:73
 ShowCorrMapsSDD.C:74
 ShowCorrMapsSDD.C:75
 ShowCorrMapsSDD.C:76
 ShowCorrMapsSDD.C:77
 ShowCorrMapsSDD.C:78
 ShowCorrMapsSDD.C:79
 ShowCorrMapsSDD.C:80
 ShowCorrMapsSDD.C:81
 ShowCorrMapsSDD.C:82
 ShowCorrMapsSDD.C:83
 ShowCorrMapsSDD.C:84
 ShowCorrMapsSDD.C:85
 ShowCorrMapsSDD.C:86
 ShowCorrMapsSDD.C:87
 ShowCorrMapsSDD.C:88
 ShowCorrMapsSDD.C:89
 ShowCorrMapsSDD.C:90
 ShowCorrMapsSDD.C:91
 ShowCorrMapsSDD.C:92
 ShowCorrMapsSDD.C:93
 ShowCorrMapsSDD.C:94
 ShowCorrMapsSDD.C:95
 ShowCorrMapsSDD.C:96
 ShowCorrMapsSDD.C:97
 ShowCorrMapsSDD.C:98
 ShowCorrMapsSDD.C:99
 ShowCorrMapsSDD.C:100
 ShowCorrMapsSDD.C:101
 ShowCorrMapsSDD.C:102
 ShowCorrMapsSDD.C:103
 ShowCorrMapsSDD.C:104
 ShowCorrMapsSDD.C:105
 ShowCorrMapsSDD.C:106
 ShowCorrMapsSDD.C:107
 ShowCorrMapsSDD.C:108
 ShowCorrMapsSDD.C:109
 ShowCorrMapsSDD.C:110
 ShowCorrMapsSDD.C:111
 ShowCorrMapsSDD.C:112
 ShowCorrMapsSDD.C:113
 ShowCorrMapsSDD.C:114
 ShowCorrMapsSDD.C:115
 ShowCorrMapsSDD.C:116
 ShowCorrMapsSDD.C:117
 ShowCorrMapsSDD.C:118
 ShowCorrMapsSDD.C:119
 ShowCorrMapsSDD.C:120
 ShowCorrMapsSDD.C:121
 ShowCorrMapsSDD.C:122
 ShowCorrMapsSDD.C:123
 ShowCorrMapsSDD.C:124
 ShowCorrMapsSDD.C:125
 ShowCorrMapsSDD.C:126
 ShowCorrMapsSDD.C:127
 ShowCorrMapsSDD.C:128
 ShowCorrMapsSDD.C:129
 ShowCorrMapsSDD.C:130
 ShowCorrMapsSDD.C:131
 ShowCorrMapsSDD.C:132
 ShowCorrMapsSDD.C:133
 ShowCorrMapsSDD.C:134
 ShowCorrMapsSDD.C:135
 ShowCorrMapsSDD.C:136
 ShowCorrMapsSDD.C:137
 ShowCorrMapsSDD.C:138
 ShowCorrMapsSDD.C:139
 ShowCorrMapsSDD.C:140
 ShowCorrMapsSDD.C:141
 ShowCorrMapsSDD.C:142
 ShowCorrMapsSDD.C:143
 ShowCorrMapsSDD.C:144
 ShowCorrMapsSDD.C:145
 ShowCorrMapsSDD.C:146
 ShowCorrMapsSDD.C:147
 ShowCorrMapsSDD.C:148
 ShowCorrMapsSDD.C:149
 ShowCorrMapsSDD.C:150
 ShowCorrMapsSDD.C:151
 ShowCorrMapsSDD.C:152
 ShowCorrMapsSDD.C:153
 ShowCorrMapsSDD.C:154
 ShowCorrMapsSDD.C:155
 ShowCorrMapsSDD.C:156
 ShowCorrMapsSDD.C:157
 ShowCorrMapsSDD.C:158
 ShowCorrMapsSDD.C:159
 ShowCorrMapsSDD.C:160
 ShowCorrMapsSDD.C:161
 ShowCorrMapsSDD.C:162
 ShowCorrMapsSDD.C:163
 ShowCorrMapsSDD.C:164
 ShowCorrMapsSDD.C:165
 ShowCorrMapsSDD.C:166