ROOT logo
/*
  Make default plotsfrom AliTPCdataQA components:

  aliroot -b -q  $ALICE_ROOT/TPC/CalibMacros/CalibQA.C\(121694\);
  
  .L $ALICE_ROOT/TPC/CalibMacros/CalibQA.C
  Int_t run=121694;
  CalibQA(run);
*/

TCut cutNoise="PadNoise.fElements<1.5&&abs(PadNoise.fElements/PadNoise_Median-1)<0.5";
TCut cutTime="abs(TimePosition.fElements-TimePosition_Median)<100";
TCut cutOccu="abs(NoThreshold.fElements/NoThreshold_Median-1)<0.9";
TCut cutAmp="abs(MaxCharge.fElements/MaxCharge_Median-1)<0.99";
TCut cutIROC="sector<36";
TCut cutOROC="sector>=36";


void CalibQA(Int_t run){
  InitOCDB(run);
  MakeTree();
  TCanvas *canvas=0;
  //
  TPostScript *ps = new TPostScript("rawQA.ps", 112);  
  ps->NewPage();
  canvas=DrawOccupancy();
  ps->NewPage();
  canvas->Update();
  ps->Close();
  delete ps;

}

void InitOCDB(Int_t run){
  gSystem->Load("libANALYSIS");
  gSystem->Load("libTPCcalib");
  gROOT->LoadMacro("$ALICE_ROOT/TPC/scripts/OCDBscan/ConfigOCDBLustre.C");
  //gROOT->LoadMacro("$ALICE_ROOT/TPC/scripts/OCDBscan/ConfigOCDB.C");
  gROOT->Macro("$ALICE_ROOT/TPC/scripts/OCDBscan/NimStyle.C");
  ConfigOCDB(run);
}

void MakeTree(){
  //
  // make summary tree
  //
  AliTPCcalibDB::Instance()->UpdateNonRec();
  AliTPCdataQA* dataQA =   AliTPCcalibDB::Instance()->GetDataQA();
  AliTPCCalPad* gain   =   AliTPCcalibDB::Instance()->GetDedxGainFactor();
  AliTPCCalPad * padNoise = AliTPCcalibDB::Instance()->GetPadNoise();
  AliTPCPreprocessorOnline preprocesor;
  gain->SetName("krGain");
  preprocesor.AddComponent(gain);
  preprocesor.AddComponent(dataQA->GetNPads());
  preprocesor.AddComponent(dataQA->GetNTimeBins());
  preprocesor.AddComponent(dataQA->GetMaxCharge());
  preprocesor.AddComponent(dataQA->GetNoThreshold());
  preprocesor.AddComponent(dataQA->GetNLocalMaxima());
  preprocesor.AddComponent(dataQA->GetTimePosition());
  preprocesor.AddComponent(padNoise);
  preprocesor.DumpToFile("QA.root");
}


TCanvas * DrawOccupancy(){
  TH1::AddDirectory(0);
  gStyle->SetOptStat(0);
  TFile f("QA.root");
  TTree  * tree = (TTree*)f.Get("calPads");
  TLegend *legend=0;
  TProfile * phoccGainIROC=0;
  TProfile * phoccGainOROC=0;
  //
  TCanvas * canvas = new TCanvas("occupancy","occupancy",700,700);
  canvas->Divide(2,2);
  canvas->cd(1);
  tree->Draw("NoThreshold.fElements:gy.fElements:gx.fElements>>hisOccuA(250,-250,250,250,-250,250)",cutNoise+cutTime+cutOccu+"sector%36<18","profcolz");
  canvas->cd(2);
  tree->Draw("NoThreshold.fElements:gy.fElements:gx.fElements>>hisOccuC(250,-250,250,250,-250,250)",cutNoise+cutTime+cutOccu+"sector%36>=18","profcolz");

  canvas->cd(3);
  tree->Draw("NoThreshold.fElements:krGain.fElements>>hoccGainIROC(20,0.7,1.2)",cutNoise+cutTime+cutOccu+cutIROC,"prof");
  legend = new TLegend(0.45,0.15,0.85,0.35, "Raw cluster occupancy");
  phoccGainIROC = (TProfile*)(gROOT->FindObject("hoccGainIROC")->Clone());
  phoccGainIROC->Draw();
  phoccGainIROC->SetTitle("IROC");
  phoccGainIROC->SetName("IROC");
  phoccGainIROC->GetXaxis()->SetTitle("Krypton Amp (a.u.)");
  legend->AddEntry(phoccGainIROC);
  legend->Draw();

  canvas->cd(4);
  tree->Draw("NoThreshold.fElements:krGain.fElements>>hoccGainOROC(20,0.8,1.2)",cutNoise+cutTime+cutOccu+cutOROC+"lx.fElements<200","prof");
  phoccGainOROC = (TProfile*)(gROOT->FindObject("hoccGainOROC")->Clone());
  phoccGainOROC->Draw();
  phoccGainOROC->SetTitle("OROC");
  phoccGainOROC->SetName("OROC");
  phoccGainOROC->GetXaxis()->SetTitle("Krypton Amp (a.u.)");
  legend = new TLegend(0.45,0.15,0.85,0.35, "Raw cluster occupancy");
  legend->AddEntry(phoccGainOROC);
  legend->Draw();
  return canvas;
}

TCanvas * DrawGain(){
  //
  // Compare the amplitude with krypton gain amplitude
  // Similar filtering as in occupancy plot
  //						
  return 0;
}
 CalibQA.C:1
 CalibQA.C:2
 CalibQA.C:3
 CalibQA.C:4
 CalibQA.C:5
 CalibQA.C:6
 CalibQA.C:7
 CalibQA.C:8
 CalibQA.C:9
 CalibQA.C:10
 CalibQA.C:11
 CalibQA.C:12
 CalibQA.C:13
 CalibQA.C:14
 CalibQA.C:15
 CalibQA.C:16
 CalibQA.C:17
 CalibQA.C:18
 CalibQA.C:19
 CalibQA.C:20
 CalibQA.C:21
 CalibQA.C:22
 CalibQA.C:23
 CalibQA.C:24
 CalibQA.C:25
 CalibQA.C:26
 CalibQA.C:27
 CalibQA.C:28
 CalibQA.C:29
 CalibQA.C:30
 CalibQA.C:31
 CalibQA.C:32
 CalibQA.C:33
 CalibQA.C:34
 CalibQA.C:35
 CalibQA.C:36
 CalibQA.C:37
 CalibQA.C:38
 CalibQA.C:39
 CalibQA.C:40
 CalibQA.C:41
 CalibQA.C:42
 CalibQA.C:43
 CalibQA.C:44
 CalibQA.C:45
 CalibQA.C:46
 CalibQA.C:47
 CalibQA.C:48
 CalibQA.C:49
 CalibQA.C:50
 CalibQA.C:51
 CalibQA.C:52
 CalibQA.C:53
 CalibQA.C:54
 CalibQA.C:55
 CalibQA.C:56
 CalibQA.C:57
 CalibQA.C:58
 CalibQA.C:59
 CalibQA.C:60
 CalibQA.C:61
 CalibQA.C:62
 CalibQA.C:63
 CalibQA.C:64
 CalibQA.C:65
 CalibQA.C:66
 CalibQA.C:67
 CalibQA.C:68
 CalibQA.C:69
 CalibQA.C:70
 CalibQA.C:71
 CalibQA.C:72
 CalibQA.C:73
 CalibQA.C:74
 CalibQA.C:75
 CalibQA.C:76
 CalibQA.C:77
 CalibQA.C:78
 CalibQA.C:79
 CalibQA.C:80
 CalibQA.C:81
 CalibQA.C:82
 CalibQA.C:83
 CalibQA.C:84
 CalibQA.C:85
 CalibQA.C:86
 CalibQA.C:87
 CalibQA.C:88
 CalibQA.C:89
 CalibQA.C:90
 CalibQA.C:91
 CalibQA.C:92
 CalibQA.C:93
 CalibQA.C:94
 CalibQA.C:95
 CalibQA.C:96
 CalibQA.C:97
 CalibQA.C:98
 CalibQA.C:99
 CalibQA.C:100
 CalibQA.C:101
 CalibQA.C:102
 CalibQA.C:103
 CalibQA.C:104
 CalibQA.C:105
 CalibQA.C:106
 CalibQA.C:107
 CalibQA.C:108
 CalibQA.C:109
 CalibQA.C:110
 CalibQA.C:111
 CalibQA.C:112