#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TFile.h>
#include <TH1F.h>
+#include <TH2I.h>
#include <TGraph.h>
#include <TStyle.h>
#include <TGrid.h>
+#include <TLine.h>
#include <TCanvas.h>
#include <TObjArray.h>
#include "AliCDBEntry.h"
#include "AliITSCalibrationSDD.h"
+#include "AliITSgeomTGeo.h"
#endif
// Macro to plot the calibration parameters from the OCDB file
//
// Origin: F. Prino (prino@to.infn.it)
-void ShowCalibrationSDD(Char_t *filnam="$ALICE_ROOT/ITS/Calib/CalibSDD/Run0_9999999_v0_s0.root", Int_t iMod=0){
+void ShowCalibrationSDD(Int_t iMod=0, Char_t *filnam="$ALICE_ROOT/ITS/Calib/CalibSDD/Run0_9999999_v0_s0.root"){
TFile *f=TFile::Open(filnam);
AliCDBEntry *ent=(AliCDBEntry*)f->Get("AliCDBEntry");
+ TH2I* hlay3=new TH2I("hlay3","Layer 3",12,-0.5,5.5,14,-0.5,13.5);
+ hlay3->GetXaxis()->SetTitle("Detector");
+ hlay3->GetYaxis()->SetTitle("Ladder");
+ hlay3->GetXaxis()->SetTickLength(0);
+ hlay3->GetYaxis()->SetTickLength(0);
+ hlay3->SetStats(0);
+ hlay3->SetMinimum(-1);
+ TH2I* hlay4=new TH2I("hlay4","Layer 4",16,-0.5,7.5,22,-0.5,21.5);
+ hlay4->GetXaxis()->SetTitle("Detector");
+ hlay4->GetYaxis()->SetTitle("Ladder");
+ hlay4->GetXaxis()->SetTickLength(0);
+ hlay4->GetYaxis()->SetTickLength(0);
+ hlay4->GetYaxis()->SetTitle("Ladder");
+ hlay4->SetStats(0);
+ hlay4->SetMinimum(-1);
+
TObjArray *calSDD = (TObjArray *)ent->GetObject();
printf("Entries in array=%d\n",calSDD->GetEntriesFast());
TH1F* hmodstatus=new TH1F("hmodstatus","",260,0.5,260.5);
TH1F* hgain=new TH1F("hgain","",100,0.,4.);
TH1F* hchstatus=new TH1F("hchstatus","",2,-0.5,1.5);
AliITSCalibrationSDD *cal;
+ Int_t badModCounter3=0;
+ Int_t badModCounter4=0;
+ Int_t badAnodeCounter3=0;
+ Int_t badAnodeCounter4=0;
+ Int_t badAnodeCounterGoodMod3=0;
+ Int_t badAnodeCounterGoodMod4=0;
+ Int_t badAnodeCounterGoodModAndChip3=0;
+ Int_t badAnodeCounterGoodModAndChip4=0;
+ Int_t badChipCounter3=0;
+ Int_t badChipCounter4=0;
for(Int_t i=0; i<260; i++){
cal=(AliITSCalibrationSDD*)calSDD->At(i);
if(cal==0) continue;
printf("Module %d (%d) status = ",i,i+240);
- if(cal->IsBad()) printf("BAD\t");
- else printf("OK\t");
+ Int_t lay,lad,det;
+ AliITSgeomTGeo::GetModuleId(i+240,lay,lad,det);
+ Int_t index=1+(det-1)*2;
+ if(cal->IsBad()){
+ printf("BAD\t");
+ if(lay==3){
+ badModCounter3++;
+ hlay3->SetBinContent(index,lad,0);
+ hlay3->SetBinContent(index+1,lad,0);
+ }else if(lay==4){
+ badModCounter4++;
+ hlay4->SetBinContent(index,lad,0);
+ hlay4->SetBinContent(index+1,lad,0);
+ }
+ hmodstatus->SetBinContent(i+1,0);
+ }else{
+ printf("OK\t");
+ hmodstatus->SetBinContent(i+1,1);
+ if(lay==3){
+ badAnodeCounterGoodMod3+=cal->GetDeadChannels();
+ if(cal->IsChipBad(0) && cal->IsChipBad(1) && cal->IsChipBad(2) && cal->IsChipBad(3)){
+ hlay3->SetBinContent(index,lad,0);
+ }else{
+ hlay3->SetBinContent(index,lad,1);
+ }
+ if(cal->IsChipBad(4) && cal->IsChipBad(5) && cal->IsChipBad(6) && cal->IsChipBad(7)){
+ hlay3->SetBinContent(index+1,lad,0);
+ }else{
+ hlay3->SetBinContent(index+1,lad,1);
+ }
+ }else{
+ badAnodeCounterGoodMod4+=cal->GetDeadChannels();
+ if(cal->IsChipBad(0) && cal->IsChipBad(1) && cal->IsChipBad(2) && cal->IsChipBad(3)){
+ hlay4->SetBinContent(index,lad,0);
+ }else{
+ hlay4->SetBinContent(index,lad,1);
+ }
+ if(cal->IsChipBad(4) && cal->IsChipBad(5) && cal->IsChipBad(6) && cal->IsChipBad(7)){
+ hlay4->SetBinContent(index+1,lad,0);
+ }else{
+ hlay4->SetBinContent(index+1,lad,1);
+ }
+ }
+ }
printf(" Chip Status (0=OK, 1=BAD): ");
- for(Int_t ic=0; ic<8;ic++) printf("%d ",cal->IsChipBad(ic));
+ for(Int_t ic=0; ic<8;ic++){
+ printf("%d ",cal->IsChipBad(ic));
+ if(cal->IsChipBad(ic) && !cal->IsBad()){
+ if(i<84) badChipCounter3++;
+ else badChipCounter4++;
+ }
+ }
+ printf(" # bad anodes = %d ",cal->GetDeadChannels());
if(cal->IsAMAt20MHz()) printf(" 20 MHz sampling");
else printf(" 40 MHz sampling");
printf("\n");
- if(cal->IsBad()) hmodstatus->SetBinContent(i+1,0);
- else hmodstatus->SetBinContent(i+1,1);
+ if(i<84) badAnodeCounter3+=cal->GetDeadChannels();
+ else badAnodeCounter4+=cal->GetDeadChannels();
hnbadch->SetBinContent(i+1,cal->GetDeadChannels());
for(Int_t iAn=0; iAn<512; iAn++){
+ Int_t ic=cal->GetChip(iAn);
+ if(!cal->IsChipBad(ic) && !cal->IsBad() && cal->IsBadChannel(iAn)){
+ if(i<84) badAnodeCounterGoodModAndChip3++;
+ else badAnodeCounterGoodModAndChip4++;
+ }
Float_t base=cal->GetBaseline(iAn);
Float_t noise=cal->GetNoiseAfterElectronics(iAn);
Float_t gain=cal->GetChannelGain(iAn);
if(cal->IsBadChannel(iAn)) hchstatus->Fill(0);
- if(!cal->IsBadChannel(iAn)){
+ if(!cal->IsBadChannel(iAn) && !cal->IsChipBad(ic) && !cal->IsBad() ){
hbase->Fill(base);
hchstatus->Fill(1);
hnoise->Fill(noise);
}
}
}
+ Int_t totbad3=badModCounter3*512+badChipCounter3*64+badAnodeCounterGoodModAndChip3;
+ Int_t tot3=6*14*512;
+ Float_t fracbad3=(Float_t)totbad3/(Float_t)tot3;
+ Int_t totbad4=badModCounter4*512+badChipCounter4*64+badAnodeCounterGoodModAndChip4;
+ Int_t tot4=8*22*512;
+ Float_t fracbad4=(Float_t)totbad4/(Float_t)tot4;
+ Float_t fractot=(Float_t)(totbad3+totbad4)/(Float_t)(tot3+tot4);
+ printf("----------------------Summary----------------------\n");
+ printf("---- Layer 3 ----\n");
+ printf("# of bad modules = %d\n",badModCounter3);
+ printf("# of bad chips in good modules = %d\n",badChipCounter3);
+ printf("# of bad anodes in good modules+chips = %d\n",badAnodeCounterGoodModAndChip3);
+ printf("Fraction of bads (anodes+chips+mod) = %f\n",fracbad3);
+ printf("---- Layer 4 ----\n");
+ printf("# of bad modules = %d\n",badModCounter4);
+ printf("# of bad chips in good modules = %d\n",badChipCounter4);
+ printf("# of bad anodes in good modules+chips = %d\n",badAnodeCounterGoodModAndChip4);
+ printf("Fraction of bads (anodes+chips+mod) = %f\n",fracbad4);
+ printf("---- Total ----\n");
+ printf("# of bad modules = %d\n",badModCounter3+badModCounter4);
+ printf("# of bad chips in good modules = %d\n",badChipCounter3+badChipCounter4);
+ printf("# of bad anodes in good modules+chips = %d\n",badAnodeCounterGoodModAndChip3+badAnodeCounterGoodModAndChip4);
+ printf("Fraction of bads (anodes+chips+mod) = %f\n",fractot);
+ printf("---------------------------------------------------\n");
+
+
TCanvas *c0=new TCanvas("c0","Module status",800,800);
c0->Divide(1,2);
c0->cd(1);
hbase->GetXaxis()->SetTitle("Baseline after equalization");
hbase->GetXaxis()->CenterTitle();
c1->cd(2);
- hnoise->Draw();
+ hnoise->Draw();
hnoise->GetXaxis()->SetTitle("Noise");
hnoise->GetXaxis()->CenterTitle();
c1->cd(3);
hchstatus->Draw();
hchstatus->GetXaxis()->SetTitle("Anode status (0=bad, 1=OK)");
hchstatus->GetXaxis()->CenterTitle();
+ Int_t palette[3]={kGray,2,3};
+ gStyle->SetPalette(3,palette);
+
+ TLine* lin=new TLine(0,0,0,23);
+ TCanvas* clay=new TCanvas("clay","Layer status",900,600);
+ clay->Divide(2,1);
+ clay->cd(1);
+ hlay3->Draw("col");
+ for(Int_t i=0;i<6;i++){
+ lin->SetY1(-0.5);
+ lin->SetY2(13.5);
+ lin->SetX1(i+0.5);
+ lin->SetX2(i+0.5);
+ lin->DrawClone();
+ }
+ for(Int_t i=0;i<14;i++){
+ lin->SetX1(-0.5);
+ lin->SetX2(5.5);
+ lin->SetY1(i+0.5);
+ lin->SetY2(i+0.5);
+ lin->DrawClone();
+ }
+ clay->cd(2);
+ hlay4->Draw("col");
+ for(Int_t i=0;i<8;i++){
+ lin->SetY1(-0.5);
+ lin->SetY2(21.5);
+ lin->SetX1(i+0.5);
+ lin->SetX2(i+0.5);
+ lin->DrawClone();
+ }
+ for(Int_t i=0;i<22;i++){
+ lin->SetX1(-0.5);
+ lin->SetX2(7.5);
+ lin->SetY1(i+0.5);
+ lin->SetY2(i+0.5);
+ lin->DrawClone();
+ }
+
+
+
+
+ // Plot quantities for specified module
cal=(AliITSCalibrationSDD*)calSDD->At(iMod);
if(cal==0) return;
printf(" Chip Status (0=OK, 1=BAD): ");
for(Int_t ic=0; ic<8;ic++) printf("%d ",cal->IsChipBad(ic));
printf("\n");
+ printf(" Number of bad anodes =%d\n",cal->GetDeadChannels());
printf("-----------------------------------\n");
Int_t ipt=0;
TGraph *gbad=new TGraph(0);
gbad->GetYaxis()->SetTitle("Anode Status (1=OK, 0=bad)");
}
-void ShowCalibrationSDD(Int_t nrun, Int_t nv,Int_t nmod=0){
+void ShowCalibrationSDD(Int_t nrun, Int_t nv, Int_t year=2009, Int_t nmod=0){
TGrid::Connect("alien:",0,0,"t");
Char_t filnam[200];
- sprintf(filnam,"alien:///alice/data/2008/LHC08c/OCDB/ITS/Calib/CalibSDD/Run%d_999999999_v%d_s0.root",nrun,nv);
+ sprintf(filnam,"alien:///alice/data/%d/OCDB/ITS/Calib/CalibSDD/Run%d_999999999_v%d_s0.root",year,nrun,nv);
printf("Open file: %s\n",filnam);
- ShowCalibrationSDD(filnam,nmod);
+ ShowCalibrationSDD(nmod,filnam);
}