X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FShowCalibrationSDD.C;h=92b7823e90482e2a05f752ef5e791e3567ff46a8;hb=258abb9c495df3206173f24c65727c6c28d923d7;hp=e43bb7cb30f61be00bd0911c0bf3b4e14049e7f2;hpb=40b3a8c7ea63860d0826a94adc0e02681c81e3be;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/ShowCalibrationSDD.C b/ITS/ShowCalibrationSDD.C index e43bb7cb30f..92b7823e904 100644 --- a/ITS/ShowCalibrationSDD.C +++ b/ITS/ShowCalibrationSDD.C @@ -1,13 +1,16 @@ #if !defined(__CINT__) || defined(__MAKECINT__) #include #include +#include #include #include #include +#include #include #include #include "AliCDBEntry.h" #include "AliITSCalibrationSDD.h" +#include "AliITSgeomTGeo.h" #endif // Macro to plot the calibration parameters from the OCDB file @@ -18,11 +21,27 @@ // // 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); @@ -32,26 +51,90 @@ void ShowCalibrationSDD(Char_t *filnam="$ALICE_ROOT/ITS/Calib/CalibSDD/Run0_9999 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); @@ -59,6 +142,32 @@ void ShowCalibrationSDD(Char_t *filnam="$ALICE_ROOT/ITS/Calib/CalibSDD/Run0_9999 } } } + 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); @@ -77,7 +186,7 @@ void ShowCalibrationSDD(Char_t *filnam="$ALICE_ROOT/ITS/Calib/CalibSDD/Run0_9999 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); @@ -88,6 +197,49 @@ void ShowCalibrationSDD(Char_t *filnam="$ALICE_ROOT/ITS/Calib/CalibSDD/Run0_9999 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; @@ -98,6 +250,7 @@ void ShowCalibrationSDD(Char_t *filnam="$ALICE_ROOT/ITS/Calib/CalibSDD/Run0_9999 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); @@ -149,10 +302,10 @@ void ShowCalibrationSDD(Char_t *filnam="$ALICE_ROOT/ITS/Calib/CalibSDD/Run0_9999 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); }