ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TFile.h>
#include <TH1F.h>
#include <TH2I.h>
#include <TGraph.h>
#include <TExec.h>
#include <TStyle.h>
#include <TString.h>
#include <TSystem.h>
#include <TGrid.h>
#include <TLine.h>
#include <TCanvas.h>
#include <TObjArray.h>
#include "AliCDBEntry.h"
#include "AliITSCalibrationSDD.h"
#include "AliITSgeomTGeo.h"
#endif

/* $Id$ */

// Macro to plot the calibration parameters from the OCDB file 
// created from PEDESTAL and PULSER runs (OCDB/ITS/Calib/CalibSDD)
// Two methods ShowCalibrationSDD:
//  - the first takes the name of the file to be displayed
//  - the second builds the alien path+name from run number and file version
//
// Origin: F. Prino (prino@to.infn.it)

void MakePalette(){
  Int_t palette[3]={kGray,2,3};  
  gStyle->SetPalette(3,palette);
}

void ShowCalibrationSDD(Char_t *filnam="$ALICE_ROOT/OCDB/ITS/Calib/CalibSDD/Run0_9999999_v0_s0.root", Int_t iMod=0){


  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);
  TH2I* hdeadlay3=new TH2I("hdlay3","Layer 3",6,-0.5,5.5,14,-0.5,13.5);
  hdeadlay3->GetXaxis()->SetTitle("Detector");
  hdeadlay3->GetYaxis()->SetTitle("Ladder");
  hdeadlay3->GetXaxis()->SetTickLength(0);
  hdeadlay3->GetYaxis()->SetTickLength(0);
  hdeadlay3->SetStats(0);
  hdeadlay3->SetMinimum(-1.);
  TH2I* hdeadlay4=new TH2I("hdlay4","Layer 4",8,-0.5,7.5,22,-0.5,21.5);
  hdeadlay4->GetXaxis()->SetTitle("Detector");
  hdeadlay4->GetYaxis()->SetTitle("Ladder");
  hdeadlay4->GetXaxis()->SetTickLength(0);
  hdeadlay4->GetYaxis()->SetTickLength(0);
  hdeadlay4->GetYaxis()->SetTitle("Ladder");
  hdeadlay4->SetStats(0);
  hdeadlay4->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* hnbadch=new TH1F("hnbadch","",260,0.5,260.5);
  TH1F* hbase=new TH1F("hbase","",60,0.5,120.5);
  TH2F* hbasemod=new TH2F("hbasemod","",260,239.5,499.5,50,0.,100.);
  TH1F* hnoise=new TH1F("hnoise","",100,0.,7.);
  TH2F* hnoisemod=new TH2F("hnoisemod","",260,239.5,499.5,50,0.,10.);
  TH1F* hgain=new TH1F("hgain","",100,0.,4.);
  TH2F* hgainmod=new TH2F("hgainmod","",260,239.5,499.5,50,0.,4.);
  TH1F* hchstatus=new TH1F("hchstatus","",2,-0.5,1.5);

  AliITSDDLModuleMapSDD* dmap=new AliITSDDLModuleMapSDD();
  dmap->SetJun09Map();
  TH2I *hddlcarlos=new TH2I("hddlcarlos","",24,-0.5,11.5,24,-0.5,23.5);
  hddlcarlos->GetXaxis()->SetTitle("Module");
  hddlcarlos->GetYaxis()->SetTitle("DDL");
  hddlcarlos->GetXaxis()->SetTickLength(0);
  hddlcarlos->GetYaxis()->SetTickLength(0);
  hddlcarlos->SetStats(0);
  hddlcarlos->SetMinimum(-1.);

  AliITSCalibrationSDD *cal;
  Int_t badModCounter3=0;
  Int_t badModCounter4=0;
  Int_t badHybridCounter3=0;
  Int_t badHybridCounter4=0;
  Int_t badAnodeCounter3=0;
  Int_t badAnodeCounter4=0;
  Int_t badAnodeCounterGoodMod3=0;
  Int_t badAnodeCounterGoodMod4=0;
  Int_t badAnodeCounterGoodHybrid3=0;
  Int_t badAnodeCounterGoodHybrid4=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);
    Int_t lay,lad,det;
    AliITSgeomTGeo::GetModuleId(i+240,lay,lad,det);
    Int_t index=1+(det-1)*2;
    Int_t ddl,carlos;
    dmap->FindInDDLMap(i+240,ddl,carlos);
    Int_t index2=1+carlos*2;
    ddl+=1;
    if(cal->IsBad()){ 
      printf("BAD\t");
      hddlcarlos->SetBinContent(index2,ddl,0);
      hddlcarlos->SetBinContent(index2+1,ddl,0);
      if(lay==3){ 
	badModCounter3++;
	badHybridCounter3+=2;
	hlay3->SetBinContent(index,lad,0);
	hlay3->SetBinContent(index+1,lad,0);
      }else if(lay==4){ 
	badModCounter4++;
	badHybridCounter4+=2;
	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);
	  hddlcarlos->SetBinContent(index2,ddl,0);
	  badHybridCounter3++;
	}else{
	  hlay3->SetBinContent(index,lad,1);
	  hddlcarlos->SetBinContent(index2,ddl,1);
	  for(Int_t iAn=0; iAn<256; iAn++){
	    if(cal->IsBadChannel(iAn)) badAnodeCounterGoodHybrid3++;
	  }
	}
	if(cal->IsChipBad(4) && cal->IsChipBad(5) && cal->IsChipBad(6) && cal->IsChipBad(7)){
	  hlay3->SetBinContent(index+1,lad,0);
	  hddlcarlos->SetBinContent(index2+1,ddl,0);
	  badHybridCounter3++;
	}else{
	  hlay3->SetBinContent(index+1,lad,1);
	  hddlcarlos->SetBinContent(index2+1,ddl,1);
	  for(Int_t iAn=256; iAn<512; iAn++){
	    if(cal->IsBadChannel(iAn)) badAnodeCounterGoodHybrid3++;
	  }
	}
      }else{ 
	badAnodeCounterGoodMod4+=cal->GetDeadChannels();
	if(cal->IsChipBad(0) && cal->IsChipBad(1) && cal->IsChipBad(2) && cal->IsChipBad(3)){
	  hlay4->SetBinContent(index,lad,0);
	  hddlcarlos->SetBinContent(index2,ddl,0);
	  badHybridCounter4++;
	}else{
	  hlay4->SetBinContent(index,lad,1);
	  hddlcarlos->SetBinContent(index2,ddl,1);
	  for(Int_t iAn=0; iAn<256; iAn++){
	    if(cal->IsBadChannel(iAn)) badAnodeCounterGoodHybrid4++;
	  }
	}
	if(cal->IsChipBad(4) && cal->IsChipBad(5) && cal->IsChipBad(6) && cal->IsChipBad(7)){
	  hlay4->SetBinContent(index+1,lad,0);
	  hddlcarlos->SetBinContent(index2+1,ddl,0);
	  badHybridCounter4++;
	}else{
	  hlay4->SetBinContent(index+1,lad,1);
	  hddlcarlos->SetBinContent(index2+1,ddl,1);
	  for(Int_t iAn=256; iAn<512; iAn++){
	    if(cal->IsBadChannel(iAn)) badAnodeCounterGoodHybrid4++;
	  }
	}
      }
    }
    printf("   Chip Status (0=OK, 1=BAD): ");  
    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(" Threshold L %d %d H %d %d\n",cal->GetZSLowThreshold(0),cal->GetZSLowThreshold(1),cal->GetZSHighThreshold(0),cal->GetZSHighThreshold(1));
    if(i<84) badAnodeCounter3+=cal->GetDeadChannels();
    else badAnodeCounter4+=cal->GetDeadChannels();
    hnbadch->SetBinContent(i+1,cal->GetDeadChannels());
    if(lay==3) hdeadlay3->SetBinContent(det,lad,cal->GetDeadChannels());
    if(lay==4) hdeadlay4->SetBinContent(det,lad,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) && !cal->IsChipBad(ic) && !cal->IsBad() ){
	hbase->Fill(base);
	hbasemod->Fill(i+240,base);
	hchstatus->Fill(1);
	hnoise->Fill(noise);
	hnoisemod->Fill(i+240,noise);
	hgain->Fill(gain);
	hgainmod->Fill(i+240,gain);
      }
    }
  }
  Int_t totbad3=badModCounter3*512+badChipCounter3*64+badAnodeCounterGoodModAndChip3;
  Int_t tot3=6*14*512;
  Float_t fracbad3=(Float_t)totbad3/(Float_t)tot3;
  Float_t fracgm3=(Float_t)(84.-badModCounter3)/84.;
  Float_t fracgm4=(Float_t)(176.-badModCounter4)/176.;
  Float_t fracgh3=(Float_t)(84.*2.-badHybridCounter3)/84./2.;
  Float_t fracgh4=(Float_t)(176.*2-badHybridCounter4)/176./2.;
  Float_t fraccgm3=0.;
  if(badModCounter3!=84){
    fraccgm3=1.-(Float_t)(badAnodeCounterGoodModAndChip3+badChipCounter3*64)/(512.*(Float_t)(84.-badModCounter3));
  }
  Float_t fraccgm4=0.;
  if(badModCounter4!=176){
    fraccgm4=1.-(Float_t)(badAnodeCounterGoodModAndChip4+badChipCounter4*64)/(512.*(Float_t)(176.-badModCounter4));
  }
  Float_t fraccgh3=0.;
  if(badHybridCounter3!=(84*2)){
    fraccgh3=1.-(Float_t)badAnodeCounterGoodHybrid3/(256.*(84.*2.-badHybridCounter3));
  }
  Float_t fraccgh4=0.;
  if(badHybridCounter4!=(176*2)){
    fraccgh4=1.-(Float_t)badAnodeCounterGoodHybrid4/(256.*(176.*2.-badHybridCounter4));
  }
  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 hybrids                      = %d\n",badHybridCounter3);
  printf("# of bad anodes in good hybrids       = %d\n",badAnodeCounterGoodHybrid3);
  printf("Fraction of Good modules=%f\n",fracgm3);
  printf("Fraction of Good hybrids=%f\n",fracgh3);
  printf("Fraction of good anodes in good modules = %f\n",fraccgm3);
  printf("Fraction of good anodes in good hybrids = %f\n",fraccgh3);
  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 hybrids                      = %d\n",badHybridCounter4);
  printf("# of bad anodes in good hybrids       = %d\n",badAnodeCounterGoodHybrid4);
  printf("Fraction of Good modules=%f\n",fracgm4);
  printf("Fraction of Good hybrids=%f\n",fracgh4);
  printf("Fraction of good anodes in good modules = %f\n",fraccgm4);
  printf("Fraction of good anodes in good hybrids = %f\n",fraccgh4);
  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");
  

  TLine* lin=new TLine(0,0,0,23);  
  TExec *ex1 = new TExec("ex1","MakePalette();");
  TExec *ex2 = new TExec("ex2","gStyle->SetPalette(1);");

  TCanvas* clay=new TCanvas("clay","Layer status",900,600);
  clay->Divide(2,1);
  clay->cd(1);
  hlay3->Draw("col");
  ex1->Draw();
  hlay3->DrawCopy("col same");
  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->DrawCopy("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();
  }


  TCanvas* cddl=new TCanvas("cddl","DDL status",800,800);
  hddlcarlos->Draw("col");
  ex1->Draw();
  hddlcarlos->DrawCopy("col same");
  for(Int_t i=0;i<12;i++){
    lin->SetY1(-0.5);
    lin->SetY2(23.5);
    lin->SetX1(i+0.5);
    lin->SetX2(i+0.5);
    lin->DrawClone();
  }
  for(Int_t i=0;i<24;i++){
    lin->SetX1(-0.5);
    lin->SetX2(11.5);
    lin->SetY1(i+0.5);
    lin->SetY2(i+0.5);
    lin->DrawClone();
  }
 

  TCanvas *c0b=new TCanvas("c0b","Bad Channels",900,600);
  c0b->Divide(2,1);
  c0b->cd(1);
  hdeadlay3->DrawCopy("colz");
  ex2->Draw();
  hdeadlay3->DrawCopy("colz same");
  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();
  }
  c0b->cd(2);
  hdeadlay4->DrawCopy("colz");
  ex2->Draw();
  hdeadlay4->DrawCopy("colz same");
  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();
  }


  
  TCanvas *c1=new TCanvas("c1","Anode calibration",800,800);
  c1->Divide(2,2);
  c1->cd(1);
  hbase->Draw();
  hbase->GetXaxis()->SetTitle("Baseline after equalization");
  hbase->GetXaxis()->CenterTitle();  
  c1->cd(2);
  hnoise->Draw(); 
  hnoise->GetXaxis()->SetTitle("Noise");
  hnoise->GetXaxis()->CenterTitle();  
  c1->cd(3);
  hgain->Draw();
  hgain->GetXaxis()->SetTitle("Gain");
  hgain->GetXaxis()->CenterTitle();  
  c1->cd(4);
  hchstatus->Draw();
  hchstatus->GetXaxis()->SetTitle("Anode status (0=bad, 1=OK)");
  hchstatus->GetXaxis()->CenterTitle();

  TCanvas *c1m=new TCanvas("c1m","Calib. vs. mod",1000,800);
  c1m->Divide(2,2);
  c1m->cd(1);
  gPad->SetRightMargin(0.14);
  hbasemod->SetStats(0);
  hbasemod->Draw("colz"); 
  hbasemod->GetXaxis()->SetTitle("Module Number");
  hbasemod->GetYaxis()->SetTitle("Baseline");
  c1m->cd(2);
  gPad->SetRightMargin(0.14);
  hnoisemod->SetStats(0);
  hnoisemod->Draw("colz"); 
  hnoisemod->GetXaxis()->SetTitle("Module Number");
  hnoisemod->GetYaxis()->SetTitle("Noise");
  c1m->cd(3);
  gPad->SetRightMargin(0.14);
  hgainmod->SetStats(0);
  hgainmod->Draw("colz");
  hgainmod->GetXaxis()->SetTitle("Module Number");
  hgainmod->GetYaxis()->SetTitle("Gain");
  c1m->cd(4);
  hnbadch->Scale(1/512.);
  hnbadch->SetMarkerStyle(20);
  hnbadch->SetMarkerSize(0.8);
  hnbadch->SetStats(0);
  hnbadch->Draw("P");
  hnbadch->GetXaxis()->SetTitle("Module number");   
  hnbadch->GetYaxis()->SetTitle("Fraction of bad anodes");








  // Plot quantities for specified module

  cal=(AliITSCalibrationSDD*)calSDD->At(iMod);
  if(cal==0) return;
  printf("-----------------------------------\n");
  printf("Module %d    status = ",iMod);
  if(cal->IsBad()) printf("BAD\n");
  else printf("OK\n");
  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->SetTitle("Bad Channels");
  TGraph *gbase=new TGraph(0);
  gbase->SetTitle("Baselines");
  TGraph *gnoi=new TGraph(0);
  gnoi->SetTitle("Noise");
  TGraph *ggain=new TGraph(0);
  ggain->SetTitle("Gain");
  for(Int_t iAn=0; iAn<512; iAn++){
    Float_t bad=1;
    if(cal->IsBadChannel(iAn)) bad=0;
    Float_t base=cal->GetBaseline(iAn);
    Float_t noise=cal->GetNoiseAfterElectronics(iAn);
    Float_t gain=cal->GetChannelGain(iAn);
    gbad->SetPoint(ipt,(Float_t)iAn,bad);
    gbase->SetPoint(ipt,(Float_t)iAn,base);
    ggain->SetPoint(ipt,(Float_t)iAn,gain);
    gnoi->SetPoint(ipt,(Float_t)iAn,noise);
    ipt++;
  }
  Char_t ctit[100];
  sprintf(ctit,"Module %d",iMod);

  TCanvas *c2=new TCanvas("c2",ctit,1200,800);
  c2->Divide(2,2);
  
  c2->cd(1);
  gbase->SetMarkerStyle(7);
  gbase->Draw("AP");
  gbase->GetXaxis()->SetTitle("Anode Number");
  gbase->GetYaxis()->SetTitle("Baseline after equalization");  
  c2->cd(2);
  gnoi->SetMarkerStyle(7);
  gnoi->Draw("AP");
  gnoi->GetXaxis()->SetTitle("Anode Number");
  gnoi->GetYaxis()->SetTitle("Noise");  
  c2->cd(3);
  ggain->SetMarkerStyle(7);
  ggain->Draw("AP");
  ggain->GetXaxis()->SetTitle("Anode Number");
  ggain->GetYaxis()->SetTitle("Gain");
  c2->cd(4);
  gbad->SetMarkerStyle(7);
  gbad->Draw("AP");
  gbad->SetMinimum(-0.1);
  gbad->GetXaxis()->SetTitle("Anode Number");
  gbad->GetYaxis()->SetTitle("Anode Status (1=OK, 0=bad)");
}

void ShowCalibrationSDD(Int_t nrun, Int_t year=2012, Int_t nmod=0){
  TGrid::Connect("alien:",0,0,"t");
  TString cmd=Form("gbbox find \"/alice/data/%d/OCDB/ITS/Calib/CalibSDD\" \"Run%d*.root\" > run.txt",year,nrun);
  gSystem->Exec(cmd.Data());
  Char_t filnam[200],filnamalien[200];
  FILE* runtxt=fopen("run.txt","r");
  Bool_t found=kFALSE;
  while(!feof(runtxt)){
    fscanf(runtxt,"%s\n",filnam);    
    if(strstr(filnam,"/alice/data/")){
      found=kTRUE;
      break;
    }  
  }
  if(!found){
    printf("Bad run number\n");
    //    gSystem->Exec("rm run.txt");
    return;
  }
  sprintf(filnamalien,"alien://%s",filnam);
  
  printf("Open file: %s\n",filnamalien);
  ShowCalibrationSDD(filnamalien,nmod);
  fclose(runtxt);
  gSystem->Exec("rm run.txt");
}
 ShowCalibrationSDD.C:1
 ShowCalibrationSDD.C:2
 ShowCalibrationSDD.C:3
 ShowCalibrationSDD.C:4
 ShowCalibrationSDD.C:5
 ShowCalibrationSDD.C:6
 ShowCalibrationSDD.C:7
 ShowCalibrationSDD.C:8
 ShowCalibrationSDD.C:9
 ShowCalibrationSDD.C:10
 ShowCalibrationSDD.C:11
 ShowCalibrationSDD.C:12
 ShowCalibrationSDD.C:13
 ShowCalibrationSDD.C:14
 ShowCalibrationSDD.C:15
 ShowCalibrationSDD.C:16
 ShowCalibrationSDD.C:17
 ShowCalibrationSDD.C:18
 ShowCalibrationSDD.C:19
 ShowCalibrationSDD.C:20
 ShowCalibrationSDD.C:21
 ShowCalibrationSDD.C:22
 ShowCalibrationSDD.C:23
 ShowCalibrationSDD.C:24
 ShowCalibrationSDD.C:25
 ShowCalibrationSDD.C:26
 ShowCalibrationSDD.C:27
 ShowCalibrationSDD.C:28
 ShowCalibrationSDD.C:29
 ShowCalibrationSDD.C:30
 ShowCalibrationSDD.C:31
 ShowCalibrationSDD.C:32
 ShowCalibrationSDD.C:33
 ShowCalibrationSDD.C:34
 ShowCalibrationSDD.C:35
 ShowCalibrationSDD.C:36
 ShowCalibrationSDD.C:37
 ShowCalibrationSDD.C:38
 ShowCalibrationSDD.C:39
 ShowCalibrationSDD.C:40
 ShowCalibrationSDD.C:41
 ShowCalibrationSDD.C:42
 ShowCalibrationSDD.C:43
 ShowCalibrationSDD.C:44
 ShowCalibrationSDD.C:45
 ShowCalibrationSDD.C:46
 ShowCalibrationSDD.C:47
 ShowCalibrationSDD.C:48
 ShowCalibrationSDD.C:49
 ShowCalibrationSDD.C:50
 ShowCalibrationSDD.C:51
 ShowCalibrationSDD.C:52
 ShowCalibrationSDD.C:53
 ShowCalibrationSDD.C:54
 ShowCalibrationSDD.C:55
 ShowCalibrationSDD.C:56
 ShowCalibrationSDD.C:57
 ShowCalibrationSDD.C:58
 ShowCalibrationSDD.C:59
 ShowCalibrationSDD.C:60
 ShowCalibrationSDD.C:61
 ShowCalibrationSDD.C:62
 ShowCalibrationSDD.C:63
 ShowCalibrationSDD.C:64
 ShowCalibrationSDD.C:65
 ShowCalibrationSDD.C:66
 ShowCalibrationSDD.C:67
 ShowCalibrationSDD.C:68
 ShowCalibrationSDD.C:69
 ShowCalibrationSDD.C:70
 ShowCalibrationSDD.C:71
 ShowCalibrationSDD.C:72
 ShowCalibrationSDD.C:73
 ShowCalibrationSDD.C:74
 ShowCalibrationSDD.C:75
 ShowCalibrationSDD.C:76
 ShowCalibrationSDD.C:77
 ShowCalibrationSDD.C:78
 ShowCalibrationSDD.C:79
 ShowCalibrationSDD.C:80
 ShowCalibrationSDD.C:81
 ShowCalibrationSDD.C:82
 ShowCalibrationSDD.C:83
 ShowCalibrationSDD.C:84
 ShowCalibrationSDD.C:85
 ShowCalibrationSDD.C:86
 ShowCalibrationSDD.C:87
 ShowCalibrationSDD.C:88
 ShowCalibrationSDD.C:89
 ShowCalibrationSDD.C:90
 ShowCalibrationSDD.C:91
 ShowCalibrationSDD.C:92
 ShowCalibrationSDD.C:93
 ShowCalibrationSDD.C:94
 ShowCalibrationSDD.C:95
 ShowCalibrationSDD.C:96
 ShowCalibrationSDD.C:97
 ShowCalibrationSDD.C:98
 ShowCalibrationSDD.C:99
 ShowCalibrationSDD.C:100
 ShowCalibrationSDD.C:101
 ShowCalibrationSDD.C:102
 ShowCalibrationSDD.C:103
 ShowCalibrationSDD.C:104
 ShowCalibrationSDD.C:105
 ShowCalibrationSDD.C:106
 ShowCalibrationSDD.C:107
 ShowCalibrationSDD.C:108
 ShowCalibrationSDD.C:109
 ShowCalibrationSDD.C:110
 ShowCalibrationSDD.C:111
 ShowCalibrationSDD.C:112
 ShowCalibrationSDD.C:113
 ShowCalibrationSDD.C:114
 ShowCalibrationSDD.C:115
 ShowCalibrationSDD.C:116
 ShowCalibrationSDD.C:117
 ShowCalibrationSDD.C:118
 ShowCalibrationSDD.C:119
 ShowCalibrationSDD.C:120
 ShowCalibrationSDD.C:121
 ShowCalibrationSDD.C:122
 ShowCalibrationSDD.C:123
 ShowCalibrationSDD.C:124
 ShowCalibrationSDD.C:125
 ShowCalibrationSDD.C:126
 ShowCalibrationSDD.C:127
 ShowCalibrationSDD.C:128
 ShowCalibrationSDD.C:129
 ShowCalibrationSDD.C:130
 ShowCalibrationSDD.C:131
 ShowCalibrationSDD.C:132
 ShowCalibrationSDD.C:133
 ShowCalibrationSDD.C:134
 ShowCalibrationSDD.C:135
 ShowCalibrationSDD.C:136
 ShowCalibrationSDD.C:137
 ShowCalibrationSDD.C:138
 ShowCalibrationSDD.C:139
 ShowCalibrationSDD.C:140
 ShowCalibrationSDD.C:141
 ShowCalibrationSDD.C:142
 ShowCalibrationSDD.C:143
 ShowCalibrationSDD.C:144
 ShowCalibrationSDD.C:145
 ShowCalibrationSDD.C:146
 ShowCalibrationSDD.C:147
 ShowCalibrationSDD.C:148
 ShowCalibrationSDD.C:149
 ShowCalibrationSDD.C:150
 ShowCalibrationSDD.C:151
 ShowCalibrationSDD.C:152
 ShowCalibrationSDD.C:153
 ShowCalibrationSDD.C:154
 ShowCalibrationSDD.C:155
 ShowCalibrationSDD.C:156
 ShowCalibrationSDD.C:157
 ShowCalibrationSDD.C:158
 ShowCalibrationSDD.C:159
 ShowCalibrationSDD.C:160
 ShowCalibrationSDD.C:161
 ShowCalibrationSDD.C:162
 ShowCalibrationSDD.C:163
 ShowCalibrationSDD.C:164
 ShowCalibrationSDD.C:165
 ShowCalibrationSDD.C:166
 ShowCalibrationSDD.C:167
 ShowCalibrationSDD.C:168
 ShowCalibrationSDD.C:169
 ShowCalibrationSDD.C:170
 ShowCalibrationSDD.C:171
 ShowCalibrationSDD.C:172
 ShowCalibrationSDD.C:173
 ShowCalibrationSDD.C:174
 ShowCalibrationSDD.C:175
 ShowCalibrationSDD.C:176
 ShowCalibrationSDD.C:177
 ShowCalibrationSDD.C:178
 ShowCalibrationSDD.C:179
 ShowCalibrationSDD.C:180
 ShowCalibrationSDD.C:181
 ShowCalibrationSDD.C:182
 ShowCalibrationSDD.C:183
 ShowCalibrationSDD.C:184
 ShowCalibrationSDD.C:185
 ShowCalibrationSDD.C:186
 ShowCalibrationSDD.C:187
 ShowCalibrationSDD.C:188
 ShowCalibrationSDD.C:189
 ShowCalibrationSDD.C:190
 ShowCalibrationSDD.C:191
 ShowCalibrationSDD.C:192
 ShowCalibrationSDD.C:193
 ShowCalibrationSDD.C:194
 ShowCalibrationSDD.C:195
 ShowCalibrationSDD.C:196
 ShowCalibrationSDD.C:197
 ShowCalibrationSDD.C:198
 ShowCalibrationSDD.C:199
 ShowCalibrationSDD.C:200
 ShowCalibrationSDD.C:201
 ShowCalibrationSDD.C:202
 ShowCalibrationSDD.C:203
 ShowCalibrationSDD.C:204
 ShowCalibrationSDD.C:205
 ShowCalibrationSDD.C:206
 ShowCalibrationSDD.C:207
 ShowCalibrationSDD.C:208
 ShowCalibrationSDD.C:209
 ShowCalibrationSDD.C:210
 ShowCalibrationSDD.C:211
 ShowCalibrationSDD.C:212
 ShowCalibrationSDD.C:213
 ShowCalibrationSDD.C:214
 ShowCalibrationSDD.C:215
 ShowCalibrationSDD.C:216
 ShowCalibrationSDD.C:217
 ShowCalibrationSDD.C:218
 ShowCalibrationSDD.C:219
 ShowCalibrationSDD.C:220
 ShowCalibrationSDD.C:221
 ShowCalibrationSDD.C:222
 ShowCalibrationSDD.C:223
 ShowCalibrationSDD.C:224
 ShowCalibrationSDD.C:225
 ShowCalibrationSDD.C:226
 ShowCalibrationSDD.C:227
 ShowCalibrationSDD.C:228
 ShowCalibrationSDD.C:229
 ShowCalibrationSDD.C:230
 ShowCalibrationSDD.C:231
 ShowCalibrationSDD.C:232
 ShowCalibrationSDD.C:233
 ShowCalibrationSDD.C:234
 ShowCalibrationSDD.C:235
 ShowCalibrationSDD.C:236
 ShowCalibrationSDD.C:237
 ShowCalibrationSDD.C:238
 ShowCalibrationSDD.C:239
 ShowCalibrationSDD.C:240
 ShowCalibrationSDD.C:241
 ShowCalibrationSDD.C:242
 ShowCalibrationSDD.C:243
 ShowCalibrationSDD.C:244
 ShowCalibrationSDD.C:245
 ShowCalibrationSDD.C:246
 ShowCalibrationSDD.C:247
 ShowCalibrationSDD.C:248
 ShowCalibrationSDD.C:249
 ShowCalibrationSDD.C:250
 ShowCalibrationSDD.C:251
 ShowCalibrationSDD.C:252
 ShowCalibrationSDD.C:253
 ShowCalibrationSDD.C:254
 ShowCalibrationSDD.C:255
 ShowCalibrationSDD.C:256
 ShowCalibrationSDD.C:257
 ShowCalibrationSDD.C:258
 ShowCalibrationSDD.C:259
 ShowCalibrationSDD.C:260
 ShowCalibrationSDD.C:261
 ShowCalibrationSDD.C:262
 ShowCalibrationSDD.C:263
 ShowCalibrationSDD.C:264
 ShowCalibrationSDD.C:265
 ShowCalibrationSDD.C:266
 ShowCalibrationSDD.C:267
 ShowCalibrationSDD.C:268
 ShowCalibrationSDD.C:269
 ShowCalibrationSDD.C:270
 ShowCalibrationSDD.C:271
 ShowCalibrationSDD.C:272
 ShowCalibrationSDD.C:273
 ShowCalibrationSDD.C:274
 ShowCalibrationSDD.C:275
 ShowCalibrationSDD.C:276
 ShowCalibrationSDD.C:277
 ShowCalibrationSDD.C:278
 ShowCalibrationSDD.C:279
 ShowCalibrationSDD.C:280
 ShowCalibrationSDD.C:281
 ShowCalibrationSDD.C:282
 ShowCalibrationSDD.C:283
 ShowCalibrationSDD.C:284
 ShowCalibrationSDD.C:285
 ShowCalibrationSDD.C:286
 ShowCalibrationSDD.C:287
 ShowCalibrationSDD.C:288
 ShowCalibrationSDD.C:289
 ShowCalibrationSDD.C:290
 ShowCalibrationSDD.C:291
 ShowCalibrationSDD.C:292
 ShowCalibrationSDD.C:293
 ShowCalibrationSDD.C:294
 ShowCalibrationSDD.C:295
 ShowCalibrationSDD.C:296
 ShowCalibrationSDD.C:297
 ShowCalibrationSDD.C:298
 ShowCalibrationSDD.C:299
 ShowCalibrationSDD.C:300
 ShowCalibrationSDD.C:301
 ShowCalibrationSDD.C:302
 ShowCalibrationSDD.C:303
 ShowCalibrationSDD.C:304
 ShowCalibrationSDD.C:305
 ShowCalibrationSDD.C:306
 ShowCalibrationSDD.C:307
 ShowCalibrationSDD.C:308
 ShowCalibrationSDD.C:309
 ShowCalibrationSDD.C:310
 ShowCalibrationSDD.C:311
 ShowCalibrationSDD.C:312
 ShowCalibrationSDD.C:313
 ShowCalibrationSDD.C:314
 ShowCalibrationSDD.C:315
 ShowCalibrationSDD.C:316
 ShowCalibrationSDD.C:317
 ShowCalibrationSDD.C:318
 ShowCalibrationSDD.C:319
 ShowCalibrationSDD.C:320
 ShowCalibrationSDD.C:321
 ShowCalibrationSDD.C:322
 ShowCalibrationSDD.C:323
 ShowCalibrationSDD.C:324
 ShowCalibrationSDD.C:325
 ShowCalibrationSDD.C:326
 ShowCalibrationSDD.C:327
 ShowCalibrationSDD.C:328
 ShowCalibrationSDD.C:329
 ShowCalibrationSDD.C:330
 ShowCalibrationSDD.C:331
 ShowCalibrationSDD.C:332
 ShowCalibrationSDD.C:333
 ShowCalibrationSDD.C:334
 ShowCalibrationSDD.C:335
 ShowCalibrationSDD.C:336
 ShowCalibrationSDD.C:337
 ShowCalibrationSDD.C:338
 ShowCalibrationSDD.C:339
 ShowCalibrationSDD.C:340
 ShowCalibrationSDD.C:341
 ShowCalibrationSDD.C:342
 ShowCalibrationSDD.C:343
 ShowCalibrationSDD.C:344
 ShowCalibrationSDD.C:345
 ShowCalibrationSDD.C:346
 ShowCalibrationSDD.C:347
 ShowCalibrationSDD.C:348
 ShowCalibrationSDD.C:349
 ShowCalibrationSDD.C:350
 ShowCalibrationSDD.C:351
 ShowCalibrationSDD.C:352
 ShowCalibrationSDD.C:353
 ShowCalibrationSDD.C:354
 ShowCalibrationSDD.C:355
 ShowCalibrationSDD.C:356
 ShowCalibrationSDD.C:357
 ShowCalibrationSDD.C:358
 ShowCalibrationSDD.C:359
 ShowCalibrationSDD.C:360
 ShowCalibrationSDD.C:361
 ShowCalibrationSDD.C:362
 ShowCalibrationSDD.C:363
 ShowCalibrationSDD.C:364
 ShowCalibrationSDD.C:365
 ShowCalibrationSDD.C:366
 ShowCalibrationSDD.C:367
 ShowCalibrationSDD.C:368
 ShowCalibrationSDD.C:369
 ShowCalibrationSDD.C:370
 ShowCalibrationSDD.C:371
 ShowCalibrationSDD.C:372
 ShowCalibrationSDD.C:373
 ShowCalibrationSDD.C:374
 ShowCalibrationSDD.C:375
 ShowCalibrationSDD.C:376
 ShowCalibrationSDD.C:377
 ShowCalibrationSDD.C:378
 ShowCalibrationSDD.C:379
 ShowCalibrationSDD.C:380
 ShowCalibrationSDD.C:381
 ShowCalibrationSDD.C:382
 ShowCalibrationSDD.C:383
 ShowCalibrationSDD.C:384
 ShowCalibrationSDD.C:385
 ShowCalibrationSDD.C:386
 ShowCalibrationSDD.C:387
 ShowCalibrationSDD.C:388
 ShowCalibrationSDD.C:389
 ShowCalibrationSDD.C:390
 ShowCalibrationSDD.C:391
 ShowCalibrationSDD.C:392
 ShowCalibrationSDD.C:393
 ShowCalibrationSDD.C:394
 ShowCalibrationSDD.C:395
 ShowCalibrationSDD.C:396
 ShowCalibrationSDD.C:397
 ShowCalibrationSDD.C:398
 ShowCalibrationSDD.C:399
 ShowCalibrationSDD.C:400
 ShowCalibrationSDD.C:401
 ShowCalibrationSDD.C:402
 ShowCalibrationSDD.C:403
 ShowCalibrationSDD.C:404
 ShowCalibrationSDD.C:405
 ShowCalibrationSDD.C:406
 ShowCalibrationSDD.C:407
 ShowCalibrationSDD.C:408
 ShowCalibrationSDD.C:409
 ShowCalibrationSDD.C:410
 ShowCalibrationSDD.C:411
 ShowCalibrationSDD.C:412
 ShowCalibrationSDD.C:413
 ShowCalibrationSDD.C:414
 ShowCalibrationSDD.C:415
 ShowCalibrationSDD.C:416
 ShowCalibrationSDD.C:417
 ShowCalibrationSDD.C:418
 ShowCalibrationSDD.C:419
 ShowCalibrationSDD.C:420
 ShowCalibrationSDD.C:421
 ShowCalibrationSDD.C:422
 ShowCalibrationSDD.C:423
 ShowCalibrationSDD.C:424
 ShowCalibrationSDD.C:425
 ShowCalibrationSDD.C:426
 ShowCalibrationSDD.C:427
 ShowCalibrationSDD.C:428
 ShowCalibrationSDD.C:429
 ShowCalibrationSDD.C:430
 ShowCalibrationSDD.C:431
 ShowCalibrationSDD.C:432
 ShowCalibrationSDD.C:433
 ShowCalibrationSDD.C:434
 ShowCalibrationSDD.C:435
 ShowCalibrationSDD.C:436
 ShowCalibrationSDD.C:437
 ShowCalibrationSDD.C:438
 ShowCalibrationSDD.C:439
 ShowCalibrationSDD.C:440
 ShowCalibrationSDD.C:441
 ShowCalibrationSDD.C:442
 ShowCalibrationSDD.C:443
 ShowCalibrationSDD.C:444
 ShowCalibrationSDD.C:445
 ShowCalibrationSDD.C:446
 ShowCalibrationSDD.C:447
 ShowCalibrationSDD.C:448
 ShowCalibrationSDD.C:449
 ShowCalibrationSDD.C:450
 ShowCalibrationSDD.C:451
 ShowCalibrationSDD.C:452
 ShowCalibrationSDD.C:453
 ShowCalibrationSDD.C:454
 ShowCalibrationSDD.C:455
 ShowCalibrationSDD.C:456
 ShowCalibrationSDD.C:457
 ShowCalibrationSDD.C:458
 ShowCalibrationSDD.C:459
 ShowCalibrationSDD.C:460
 ShowCalibrationSDD.C:461
 ShowCalibrationSDD.C:462
 ShowCalibrationSDD.C:463
 ShowCalibrationSDD.C:464
 ShowCalibrationSDD.C:465
 ShowCalibrationSDD.C:466
 ShowCalibrationSDD.C:467
 ShowCalibrationSDD.C:468
 ShowCalibrationSDD.C:469
 ShowCalibrationSDD.C:470
 ShowCalibrationSDD.C:471
 ShowCalibrationSDD.C:472
 ShowCalibrationSDD.C:473
 ShowCalibrationSDD.C:474
 ShowCalibrationSDD.C:475
 ShowCalibrationSDD.C:476
 ShowCalibrationSDD.C:477
 ShowCalibrationSDD.C:478
 ShowCalibrationSDD.C:479
 ShowCalibrationSDD.C:480
 ShowCalibrationSDD.C:481
 ShowCalibrationSDD.C:482
 ShowCalibrationSDD.C:483
 ShowCalibrationSDD.C:484
 ShowCalibrationSDD.C:485
 ShowCalibrationSDD.C:486
 ShowCalibrationSDD.C:487
 ShowCalibrationSDD.C:488
 ShowCalibrationSDD.C:489
 ShowCalibrationSDD.C:490
 ShowCalibrationSDD.C:491
 ShowCalibrationSDD.C:492
 ShowCalibrationSDD.C:493
 ShowCalibrationSDD.C:494
 ShowCalibrationSDD.C:495
 ShowCalibrationSDD.C:496
 ShowCalibrationSDD.C:497
 ShowCalibrationSDD.C:498
 ShowCalibrationSDD.C:499
 ShowCalibrationSDD.C:500
 ShowCalibrationSDD.C:501
 ShowCalibrationSDD.C:502
 ShowCalibrationSDD.C:503
 ShowCalibrationSDD.C:504
 ShowCalibrationSDD.C:505
 ShowCalibrationSDD.C:506
 ShowCalibrationSDD.C:507
 ShowCalibrationSDD.C:508
 ShowCalibrationSDD.C:509
 ShowCalibrationSDD.C:510
 ShowCalibrationSDD.C:511
 ShowCalibrationSDD.C:512
 ShowCalibrationSDD.C:513
 ShowCalibrationSDD.C:514
 ShowCalibrationSDD.C:515
 ShowCalibrationSDD.C:516
 ShowCalibrationSDD.C:517
 ShowCalibrationSDD.C:518
 ShowCalibrationSDD.C:519
 ShowCalibrationSDD.C:520
 ShowCalibrationSDD.C:521
 ShowCalibrationSDD.C:522
 ShowCalibrationSDD.C:523
 ShowCalibrationSDD.C:524
 ShowCalibrationSDD.C:525
 ShowCalibrationSDD.C:526
 ShowCalibrationSDD.C:527
 ShowCalibrationSDD.C:528