/*
Make a TPC basic calibration trend plots:
Input - calibTime.root tree with summary info per run expected to be in the local directory
- optional parameters run range can be specified - startRun -endRun
Output - default plots are saved in the pwd/pic/
macro to define the picture style (NimStyle.C) expected to be in the current directory
Example usage:
aliroot -b -q /u/miranov/AliRoot/trunk/TPC/scripts/OCDBscan/makeTPCTrendPlots.C
*/
TTree * tree=0;
const Double_t kmin=0.01;
const Double_t kmax=0.99;
const Double_t kEpsilon=0.0000001;
Int_t run0=0; // value to set from outside
Int_t run1=10000000; // vaue to set from outside
void makeTPCTrendPlots(Int_t startRun=0, Int_t endRun=1000000){
//
// make trend plots of the basic TPC calibration parameters
//
run0=startRun;
run1=endRun;
gROOT->Macro("NimStyle.C");
TFile f("calibTime.root");
tree = (TTree*)f.Get("dcs");
tree->SetMarkerStyle(25);
tree->SetMarkerSize(0.4);
gStyle->SetMarkerSize(0.4);
tree->SetAlias("isValidITS","abs(dits)<3600");
tree->SetAlias("isValidCE","min(abs(dcea),abs(dcec))<3600&&max(tdriftCE.fElements[72],tdriftCE.fElements[73])>100");
tree->SetAlias("isValidCEB","max(abs(dcea),abs(dcec))<3600&&min(tdriftCE.fElements[72],tdriftCE.fElements[73])>100");
printf("makeTPCTrendPlots.C\n\n");
printf("Processing DrawDriftTime();\n\n");
DrawDriftTime();
printf("DrawDriftRun();\n\n");
DrawDriftRun();
printf("DrawDriftCorel();\n\n");
DrawDriftCorel();
}
void DrawDriftTime(){
//
// Draw drift velocity trend grapsh - as function of time
//
TCut cutRun=Form("run>%d&&run<%d",run0,run1);
TCut cutCE="(tdriftCE.fElements[72]>100||tdriftCE.fElements[72]>100)&&min(abs(dcea),abs(dcec))<3600";
TCut cutITS="abs(dits)<3600";
Int_t entries=0;
Double_t max=6;
Double_t min= -6;
Double_t maxT=0,minT=0;
Double_t dmaxmin= 200000;
TCanvas * canvasDrift = new TCanvas("canvasDriftTime","canvasDriftTime",2000,900);
canvasDrift->Divide(1,3);
// P/T part
entries=tree->Draw("100*ptrel0:time",cutRun,"goff");
TGraph * graphPTA = new TGraph(entries,tree->GetV2(),tree->GetV1());
graphPTA->SetTitle("P/T correction A side");
graphPTA->SetName("PTcorrectionAside");
//
entries=tree->Draw("100*ptrel1:time",cutRun,"goff");
TGraph * graphPTC = new TGraph(entries,tree->GetV2(),tree->GetV1());
graphPTC->SetTitle("P/T correction C side");
graphPTC->SetName("PTcorrectionCside");
//
entries=tree->Draw("1000*(ptrel0-ptrel1):time",cutRun,"goff");
TGraph * graphPTAMC = new TGraph(entries,tree->GetV2(),tree->GetV1());
graphPTAMC->SetTitle("P/T correction A-C side");
graphPTAMC->SetName("PTcorrectionAMCside");
//
//
entries=tree->Draw("isValidCE*(-tdriftCE.fElements[72]+990)/10:time",cutRun,"goff");
TGraph * graphCEA = new TGraph(entries,tree->GetV2(),tree->GetV1());
graphCEA->SetName("CEAside");
//
entries=tree->Draw("isValidCE*(-tdriftCE.fElements[73]+990)/10:time",cutRun,"goff");
TGraph * graphCEC = new TGraph(entries,tree->GetV2(),tree->GetV1());
graphCEC->SetName("CECside");
//
entries=tree->Draw("isValidCE*(tdriftCE.fElements[73]-tdriftCE.fElements[72]):time",cutRun,"goff");
TGraph * graphCEAMC = new TGraph(entries,tree->GetV2(),tree->GetV1());
graphCEAMC->SetName("CEAMCside");
//
entries=tree->Draw("isValidITS*vdriftITS*100:time",cutRun,"goff");
TGraph * graphITSTPCA = new TGraph(entries,tree->GetV2(),tree->GetV1());
graphITSTPCA->SetName("ITSTPCAside");
//
entries=tree->Draw("isValidITS*vdriftITS*100:time",cutRun,"goff");
TGraph * graphITSTPCC = new TGraph(entries,tree->GetV2(),tree->GetV1());
graphITSTPCC->SetName("ITSTPCCside");
//
// Drawing part
//
min=-6;
max=6;
graphCEA->SetMinimum(min);
graphCEA->SetMaximum(max);
graphPTA->SetMinimum(min);
graphPTA->SetMaximum(max);
graphITSTPCA->SetMinimum(min);
graphITSTPCA->SetMaximum(max);
graphPTA->GetXaxis()->SetRangeUser(minT,maxT);
graphCEA->GetXaxis()->SetRangeUser(minT,maxT);
graphITSTPCA->GetXaxis()->SetRangeUser(minT,maxT);
//
//
canvasDrift->cd(1);
graphPTA->GetXaxis()->SetTimeDisplay(kTRUE);
graphPTA->GetYaxis()->SetTitle("#Delta P/T (%)");
graphPTA->SetMarkerColor(2);graphPTA->SetMarkerStyle(25);
graphPTC->SetMarkerColor(4);graphPTC->SetMarkerStyle(27);
graphPTA->Draw("alp");
graphPTC->Draw("lp");
graphPTAMC->SetMarkerColor(3);graphPTAMC->SetMarkerStyle(25);
graphPTAMC->Draw("lp");
TLegend *legend = new TLegend(0.11,0.11,0.4,0.35,"P/T correction");
legend->AddEntry(graphPTA,"A side (%)");
legend->AddEntry(graphPTC,"C side (%)");
legend->AddEntry(graphPTAMC,"A-C side (0.1%)");
legend->Draw();
//
canvasDrift->cd(2);
graphITSTPCA->GetXaxis()->SetTimeDisplay(kTRUE);
graphITSTPCA->GetYaxis()->SetTitle("v_{dcorr} (%)");
graphITSTPCA->SetMarkerColor(2);graphITSTPCA->SetMarkerStyle(25);
graphITSTPCC->SetMarkerColor(4);graphITSTPCC->SetMarkerStyle(27);
graphITSTPCA->Draw("ap");
graphITSTPCC->Draw("p");
TLegend *legend = new TLegend(0.11,0.11,0.4,0.35,"Drift correction (TPC-ITS)");
legend->AddEntry(graphITSTPCA,"A side (%)");
legend->AddEntry(graphITSTPCC,"C side (%)");
legend->Draw();
//
canvasDrift->cd(3);
graphCEA->GetXaxis()->SetTimeDisplay(kTRUE);
graphCEA->GetYaxis()->SetTitle("(T_{CE0}-T_{CE})/T_{CE0}");
graphCEA->SetMarkerColor(2);graphCEA->SetMarkerStyle(25);
graphCEC->SetMarkerColor(4);graphCEC->SetMarkerStyle(27);
graphCEA->Draw("ap");
graphCEC->Draw("p");
graphCEAMC->SetMarkerColor(3);graphCEAMC->SetMarkerStyle(25);
graphCEAMC->Draw("p");
TLegend *legend = new TLegend(0.11,0.11,0.4,0.35,"CE laser time (T_{CE0}=990)");
legend->AddEntry(graphCEA,"A side (%)");
legend->AddEntry(graphCEC,"C side (%)");
legend->AddEntry(graphCEAMC,"A-C side (0.1%)");
legend->Draw();
//
canvasDrift->SaveAs("pic/canvasDriftTime.gif");
}
void DrawDriftRun(){
//
//
TCut cutRun=Form("run>%d&&run<%d",run0,run1);
TCut cutCE="(tdriftCE.fElements[72]>100||tdriftCE.fElements[72]>100)&&min(abs(dcea),abs(dcec))<3600";
TCut cutITS="abs(dits)<3600";
Int_t entries=0;
Double_t max=-100000;
Double_t min= 100000;
Double_t maxT=0,minT=0;
Double_t dmaxmin= 200000;
TCanvas * canvasDrift = new TCanvas("canvasDriftRun","canvasDriftRun",2000,900);
canvasDrift->Divide(1,3);
//
// P/T part
TGraph * graphPTA = TStatToolkit::MakeGraphSparse(tree,"100*ptrel0:run",cutRun);
graphPTA->SetTitle("P/T correction A side");
graphPTA->SetName("PTcorrectionAside");
TGraph * graphPTC = TStatToolkit::MakeGraphSparse(tree,"100*ptrel1:run",cutRun);
graphPTC->SetTitle("P/T correction C side");
graphPTC->SetName("PTcorrectionCside");
TGraph * graphPTAMC = TStatToolkit::MakeGraphSparse(tree,"1000*(ptrel0-ptrel1):run",cutRun);
graphPTAMC->SetTitle("P/T correction A-C side");
graphPTAMC->SetName("PTcorrectionAMCside");
//
TGraph * graphCEA = TStatToolkit::MakeGraphSparse(tree,"isValidCE*(-tdriftCE.fElements[72]+990)/10:run",cutRun+cutITS);
graphCEA->SetTitle("P/T correction A side");
graphCEA->SetName("CEcorrectionAside");
TGraph * graphCEC = TStatToolkit::MakeGraphSparse(tree,"isValidCE*(-tdriftCE.fElements[73]+990)/10:run",cutRun+cutITS);
graphCEC->SetTitle("P/T correction C side");
graphCEC->SetName("CEcorrectionCside");
TGraph * graphCEAMC = TStatToolkit::MakeGraphSparse(tree,"(tdriftCE.fElements[73]-tdriftCE.fElements[72]):run",cutRun+cutITS);
graphCEAMC->SetTitle("P/T correction A-C side");
graphCEAMC->SetName("CEcorrectionAMCside");
//
TGraph * graphITSTPCA = TStatToolkit::MakeGraphSparse(tree,"isValidITS*vdriftITS*100:run",cutRun+cutITS);
graphITSTPCA->SetTitle("P/T correction A side");
graphITSTPCA->SetName("ITSTPCcorrectionAside");
TGraph * graphITSTPCC = TStatToolkit::MakeGraphSparse(tree,"isValidITS*vdriftITS*100:run",cutRun+cutITS);
graphITSTPCC->SetTitle("P/T correction C side");
graphITSTPCC->SetName("ITSTPCcorrectionCside");
//
// Drawing part
//
min=-6;
max=6;
graphCEA->SetMinimum(min);
graphCEA->SetMaximum(max);
graphPTA->SetMinimum(min);
graphPTA->SetMaximum(max);
graphITSTPCA->SetMinimum(min);
graphITSTPCA->SetMaximum(max);
//
//
canvasDrift->cd(1);
graphPTA->GetXaxis()->SetTimeDisplay(kTRUE);
graphPTA->GetYaxis()->SetTitle("#Delta P/T (%)");
graphPTA->SetMarkerColor(2);graphPTA->SetMarkerStyle(25);
graphPTC->SetMarkerColor(4);graphPTC->SetMarkerStyle(27);
graphPTA->Draw("alp");
graphPTC->Draw("lp");
graphPTAMC->SetMarkerColor(3);graphPTAMC->SetMarkerStyle(25);
graphPTAMC->Draw("lp");
TLegend *legend = new TLegend(0.11,0.11,0.4,0.35,"P/T correction");
legend->AddEntry(graphPTA,"A side (%)");
legend->AddEntry(graphPTC,"C side (%)");
legend->AddEntry(graphPTAMC,"A-C side (0.1%)");
legend->Draw();
//
canvasDrift->cd(2);
graphITSTPCA->GetXaxis()->SetTimeDisplay(kTRUE);
graphITSTPCA->GetYaxis()->SetTitle("v_{dcorr} (%)");
graphITSTPCA->SetMarkerColor(2);graphITSTPCA->SetMarkerStyle(25);
graphITSTPCC->SetMarkerColor(4);graphITSTPCC->SetMarkerStyle(27);
graphITSTPCA->Draw("ap");
graphITSTPCC->Draw("p");
TLegend *legend = new TLegend(0.11,0.11,0.4,0.35,"Drift correction (TPC-ITS)");
legend->AddEntry(graphITSTPCA,"A side (%)");
legend->AddEntry(graphITSTPCC,"C side (%)");
legend->Draw();
//
canvasDrift->cd(3);
graphCEA->GetXaxis()->SetTimeDisplay(kTRUE);
graphCEA->GetYaxis()->SetTitle("(T_{CE0}-T_{CE})/T_{CE0}");
graphCEA->SetMarkerColor(2);graphCEA->SetMarkerStyle(25);
graphCEC->SetMarkerColor(4);graphCEC->SetMarkerStyle(27);
graphCEA->Draw("ap");
graphCEC->Draw("p");
graphCEAMC->SetMarkerColor(3);graphCEAMC->SetMarkerStyle(25);
graphCEAMC->Draw("p");
TLegend *legend = new TLegend(0.11,0.11,0.4,0.35,"CE laser time (T_{CE0}=990)");
legend->AddEntry(graphCEA,"A side (%)");
legend->AddEntry(graphCEC,"C side (%)");
legend->AddEntry(graphCEAMC,"A-C side (0.1%)");
legend->Draw();
//
canvasDrift->SaveAs("pic/canvasDriftRun.gif");
}
void DrawDriftCorel(){
//
//
//
TStatToolkit toolkit;
Double_t chi2=0;
Int_t npoints=0;
TVectorD param;
TMatrixD covar;
TString *strDelta=0;
Int_t npointsMax=100000;
//
tree->SetAlias("tCEB","(tdriftCE.fElements[72]+tdriftCE.fElements[73]-2000)/2000");
tree->SetAlias("tCEA","(tdriftCE.fElements[72]-1000)/1000");
tree->SetAlias("tCEC","(tdriftCE.fElements[73]-1000)/1000");
tree->SetAlias("tCEE","1-((1+(ptrel0+ptrel1)*0.5)*(1+vdriftITS))");
strDelta= TStatToolkit::FitPlaneConstrain(tree,"tCEB", "tCEE","isValidCEB&&isValidITS", chi2,npoints,param,covar,-1,0, npointsMax, 20);
//
strDelta->Tokenize("++")->Print();
tree->SetAlias("tCEF",strDelta->Data());
TGraph * graphLT = TStatToolkit::MakeGraphSparse(tree,"2.64*1000*(tCEB-tCEF):run","isValidCEB&&isValidITS");
TGraph * graphLTA = TStatToolkit::MakeGraphSparse(tree,"2.64*1000*(tCEA-tCEF):run","isValidCEB&&isValidITS");
TGraph * graphLTC = TStatToolkit::MakeGraphSparse(tree,"2.64*1000*(tCEC-tCEF):run","isValidCEB&&isValidITS");
graphLT->GetYaxis()->SetTitle("#Delta (mm)");
graphLT->SetMarkerStyle(25);
graphLTA->SetMarkerStyle(26); graphLTA->SetMarkerColor(2);
graphLTC->SetMarkerStyle(27); graphLTC->SetMarkerColor(4);
graphLT->SetMaximum(10);
graphLT->SetMinimum(-10);
TCanvas * canvasDrift = new TCanvas("canvasDriftDiff","canvasDriftDiff",2000,500);
graphLT->Draw("alp");
graphLTA->Draw("lp");
graphLTC->Draw("lp");
TLegend *legend = new TLegend(0.11,0.11,0.4,0.35,"CE plane - corrected with tracks");
legend->AddEntry(graphLT,"AC side mean (mm)");
legend->AddEntry(graphLTA,"A side (mm)");
legend->AddEntry(graphLTC,"C side (mm)");
legend->Draw();
//
canvasDrift->SaveAs("pic/canvasDriftDiffRun.gif");
}