From: mgermain Date: Tue, 21 Oct 2014 12:33:11 +0000 (+0200) Subject: adding scripts and macros for V0 automatic QA and trending X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=commitdiff_plain;h=a67eba90fb3b43722b4f5de69a1b35653db4009a adding scripts and macros for V0 automatic QA and trending --- diff --git a/PWGPP/QA/detectorQAscripts/V0.sh b/PWGPP/QA/detectorQAscripts/V0.sh new file mode 100755 index 00000000000..4a76b01af4f --- /dev/null +++ b/PWGPP/QA/detectorQAscripts/V0.sh @@ -0,0 +1,18 @@ + + +runLevelQA() +{ + qaFile=$1 + detectorQAcontainerName="VZERO" + cp $ALICE_ROOT/PWGPP/VZERO/trending/MakeTrendingV0QA.C . + aliroot -q -b -l .x "MakeTrendingV0QA.C(\"${qaFile}\",${runNumber},\"${ocdbStorage}\",kFALSE,KFALSE)" + #first booleen for Grid connection (true == connection in maketrending) and last boolen for print histo +} + +periodLevelQA() +{ + trendingFile=$1 + detectorQAcontainerName="VZERO" + cp $ALICE_ROOT/PWGPP/VZERO/trending/DrawTrendingV0QA.C . + aliroot -q -b -l .x "DrawTrendingV0QA.C(\"${trendingFile}\")" +} diff --git a/PWGPP/VZERO/trending/DrawTrendingV0QA.C b/PWGPP/VZERO/trending/DrawTrendingV0QA.C new file mode 100755 index 00000000000..58980f0d29b --- /dev/null +++ b/PWGPP/VZERO/trending/DrawTrendingV0QA.C @@ -0,0 +1,246 @@ +#if !defined(__CINT__) || defined(__MAKECINT__) +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "AliCDBManager.h" +#include "AliCDBEntry.h" +#include "AliGRPObject.h" +#include "AliTriggerInput.h" +#include "AliTriggerConfiguration.h" +#endif + +Int_t DrawTrendingV0QA(TString mergedTrendFile ="trending.root") +{ + if(!mergedTrendFile) + { + printf("Cannot open merged trend file with V0 QA"); + return 1; + } + char outfilename[200]="ProductionQA.hist.root"; + TString plotDir("."); + + Int_t runNumber=0, NumberVoieOff=0, numberBadOffset=0; + TFile*fin=TFile::Open(mergedTrendFile.Data()); + if(!fin) + { + Printf("ERROR: trending file not found. Exiting ...\n"); + return -1; + } + TTree*ttree=(TTree*)fin->Get("trending"); + if(!ttree) + { + printf("Invalid trending tree"); + return 2; + } + Float_t TimesA=0.,TimesC=0., BB_BG=0.,BB_EE=0.,AdcA=0.; + Float_t AdcC=0.,MultA=0.,MultC=0.; + + + ttree->SetBranchAddress("run",&runNumber); + ttree->SetBranchAddress("TimesA",&TimesA); + ttree->SetBranchAddress("TimesC",&TimesC); + ttree->SetBranchAddress("BB_BG",&BB_BG); + ttree->SetBranchAddress("BB_EE",&BB_EE); + ttree->SetBranchAddress("AdcA" ,&AdcA ); + ttree->SetBranchAddress("AdcC" ,&AdcC ); + ttree->SetBranchAddress("MultA",&MultA); + ttree->SetBranchAddress("MultC",&MultC); + ttree->SetBranchAddress("NumberVoieOff",&NumberVoieOff); + ttree->SetBranchAddress("numberBadOffset",&numberBadOffset); + + Int_t nRuns=ttree->GetEntries(); + TList list; + + TH1F * hTimeA = new TH1F("hTimeA","BB Leading time;;Time (ns)",nRuns,-0.5,nRuns-0.5); + TH1F * hTimeC = new TH1F("hTimeC","BB Leading time;;Time (ns)",nRuns,-0.5,nRuns-0.5); + TH1F * hBB_BG = new TH1F("hBB_BG","Trigger ratio",nRuns,-0.5,nRuns-0.5); + TH1F * hBB_EE = new TH1F("hBB_EE","Trigger ratio",nRuns,-0.5,nRuns-0.5); + TH1F * hAdcA = new TH1F("hAdcA","Average Charge",nRuns,-0.5,nRuns-0.5); + TH1F * hAdcC = new TH1F("hAdcC","Average Charge",nRuns,-0.5,nRuns-0.5); + TH1F * hMultA = new TH1F("hMultA","Average number of Fired cell",nRuns,-0.5,nRuns-0.5); + TH1F * hMultC = new TH1F("hMultC","Average number of Fired cell",nRuns,-0.5,nRuns-0.5); + TH1F * hNumberVoieOff=new TH1F("hNumberVoieOff","Number of chanel off",nRuns,-0.5,nRuns-0.5); + hNumberVoieOff->SetMaximum(70); + TH1F * hNumberBadOffset=new TH1F("hNumberBadOffset","Number of pdestal",nRuns,-0.5,nRuns-0.5); + hNumberBadOffset->SetMaximum(70); + + list.Add(hTimeA); + list.Add(hTimeC); + list.Add(hBB_BG); + list.Add(hBB_EE); + list.Add(hAdcA ); + list.Add(hAdcC ); + list.Add(hMultA); + list.Add(hMultC); + list.Add(hNumberVoieOff); + list.Add(hNumberBadOffset); + char runlabel[6]; + + + for(Int_t irun=0;irunGetEntry(irun); + sprintf(runlabel,"%i",runNumber); + + hTimeA->SetBinContent(irun+1,TimesA); + hTimeA->GetXaxis()->SetBinLabel(irun+1,runlabel); + + hTimeC->SetBinContent(irun+1,TimesC); + hTimeC->GetXaxis()->SetBinLabel(irun+1,runlabel); + + hBB_BG->SetBinContent(irun+1,BB_BG); + hBB_BG->GetXaxis()->SetBinLabel(irun+1,runlabel); + + hBB_EE->SetBinContent(irun+1,BB_EE); + hBB_EE->GetXaxis()->SetBinLabel(irun+1,runlabel); + + hAdcA->SetBinContent(irun+1,AdcA); + hAdcA ->GetXaxis()->SetBinLabel(irun+1,runlabel); + + hAdcC->SetBinContent(irun+1,AdcC); + hAdcC ->GetXaxis()->SetBinLabel(irun+1,runlabel); + + hMultA->SetBinContent(irun+1,MultA); + hMultA->GetXaxis()->SetBinLabel(irun+1,runlabel); + + hMultC->SetBinContent(irun+1,MultC); + hMultC->GetXaxis()->SetBinLabel(irun+1,runlabel); + + hNumberVoieOff->SetBinContent(irun+1,NumberVoieOff); + hNumberVoieOff->GetXaxis()->SetBinLabel(irun+1,runlabel); + + hNumberBadOffset->SetBinContent(irun+1,numberBadOffset); + hNumberBadOffset->GetXaxis()->SetBinLabel(irun+1,runlabel); + } + + TFile*fout=new TFile(outfilename,"recreate"); + fout->cd(); + list.Write(); + fout->Close(); + int maxRun =runNumber; + ttree->GetEntry(0); + int minRun = runNumber; + + gStyle->SetOptStat(0); + hTimeA->SetMarkerStyle(20); + hTimeA->SetMarkerColor(2); + + hTimeC->SetMarkerStyle(20); + hTimeC->SetMarkerColor(4); + + + + + TCanvas * c = new TCanvas("c","Leading time versus run number"); + hTimeA->GetYaxis()->SetRange(0,10); + hTimeA->Draw("P"); + hTimeA->SetMinimum(TMath::Min(hTimeA->GetMinimum(),hTimeC->GetMinimum())-1.); + hTimeA->SetMaximum(TMath::Max(hTimeA->GetMaximum(),hTimeC->GetMaximum())+1.); + + hTimeC->GetYaxis()->SetRange(0,10); + hTimeC->Draw("Psame"); + TLegend * lg = new TLegend(0.8,0.9,1,1); + lg->AddEntry(hTimeA,"V0A - 8 ns","p"); + lg->AddEntry(hTimeC,"V0C","p"); + lg->Draw("same"); + float shiftA=8.0; + TPave * pavA = new TPave(-0.5,TMath::Max(hTimeA->GetMinimum(),1.5-shiftA),nRuns-0.5,TMath::Min(hTimeA->GetMaximum(),33.5-shiftA),0); + pavA->SetFillStyle(3004); + pavA->SetFillColor(2); + TPave * pavC = new TPave(-0.5,TMath::Max(hTimeC->GetMinimum(),0.5),nRuns-0.5,TMath::Min(hTimeC->GetMaximum(),25.5),0); + pavC->SetFillStyle(3005); + pavC->SetFillColor(4); + + pavA->Draw("same"); + pavC->Draw("same"); + + + c->Print(Form("%s/QA_Resume_%d_%d.pdf(",plotDir.Data(),minRun,maxRun)); + c->Write(); + + TCanvas * c2 = new TCanvas("c2","Trigger ratios"); + c2->SetGridy(); + + hBB_BG->SetMarkerStyle(20); + hBB_BG->SetMarkerColor(2); + hBB_EE->SetMarkerStyle(20); + hBB_EE->SetMarkerColor(4); + + hBB_BG->Draw("P"); + hBB_EE->Draw("Psame"); + TLegend * lg2 = new TLegend(0.8,0.9,1,1); + lg2->AddEntry(hBB_BG,"BG / BB","p"); + lg2->AddEntry(hBB_EE,"EE / BB","p"); + lg2->Draw("same"); + + c2->Print(Form("%s/QA_Resume_%d_%d.pdf",plotDir.Data(),minRun,maxRun)); + c2->Write(); + + + TCanvas * c3 = new TCanvas("c3","Average Charge"); + c3->SetGridy(); + + hAdcA->SetMarkerStyle(20); + hAdcA->SetMarkerColor(2); + hAdcC->SetMarkerStyle(20); + hAdcC->SetMarkerColor(4); + hAdcA->SetMinimum(0); + hAdcA->SetMaximum(100); + + hAdcA->Draw("P"); + hAdcC->Draw("Psame"); + TLegend * lg3 = new TLegend(0.8,0.9,1,1); + lg3->AddEntry(hAdcA,"V0A","p"); + lg3->AddEntry(hAdcC,"V0C","p"); + lg3->Draw("same"); + + c3->Print(Form("%s/QA_Resume_%d_%d.pdf",plotDir.Data(),minRun,maxRun)); + c3->Write(); + + + TCanvas * c4 = new TCanvas("c4","Average number of cell"); + c4->SetGridy(); + + hMultA->SetMarkerStyle(20); + hMultA->SetMarkerColor(2); + hMultC->SetMarkerStyle(20); + hMultC->SetMarkerColor(4); + hMultA->SetMinimum(0); + hMultA->SetMaximum(32); + + hMultA->Draw("P"); + hMultC->Draw("Psame"); + TLegend * lg4 = new TLegend(0.8,0.9,1,1); + lg4->AddEntry(hMultA,"V0A","p"); + lg4->AddEntry(hMultC,"V0C","p"); + lg4->Draw("same"); + + c4->Print(Form("%s/QA_Resume_%d_%d.pdf",plotDir.Data(),minRun,maxRun)); + c4->Write(); + + TCanvas * c5 = new TCanvas("c5",""); + c5->cd(); + hNumberVoieOff->Draw(); + TCanvas * c6 = new TCanvas("c6",""); + c6->cd(); + hNumberBadOffset->Draw(); + c5->Print(Form("%s/QA_Resume_%d_%d.pdf",plotDir.Data(),minRun,maxRun)); + c6->Print(Form("%s/QA_Resume_%d_%d.pdf)",plotDir.Data(),minRun,maxRun)); + c5->Write(); + return 0; +} diff --git a/PWGPP/VZERO/trending/MakeTrendingV0QA.C b/PWGPP/VZERO/trending/MakeTrendingV0QA.C new file mode 100755 index 00000000000..4bb08185d9e --- /dev/null +++ b/PWGPP/VZERO/trending/MakeTrendingV0QA.C @@ -0,0 +1,345 @@ +#if !defined(__CINT__) || defined(__MAKECINT__) +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "AliCDBManager.h" +#include "AliCDBEntry.h" +#include "AliGRPObject.h" +#include "AliTriggerInput.h" +#include "AliTriggerConfiguration.h" +#endif + + +Int_t MakeTrendingV0QA(TString qafilename,Int_t runNumber,TString ocdbStorage = "raw://",Bool_t IsOnGrid = kFALSE,Bool_t canvasE = kFALSE) +{ + if (!qafilename) + { + Printf("Error - Invalid input file"); + return 1; + } + gStyle->SetPalette(1); + + TString treePostFileName=Form("trending_%i.root",runNumber); + if(IsOnGrid) + TGrid::Connect("alien://"); + TFile*fin=TFile::Open(qafilename,"r"); + + if(!fin) + { + Printf("ERROR: QA output not found. Exiting ...\n"); + return -1; + } + else + { + Printf("INFO: QA output file %s open. \n",fin->GetName()); + } + AliCDBManager *man = AliCDBManager::Instance(); + man->SetDefaultStorage(ocdbStorage); + man->SetRun(runNumber); + AliCDBEntry *entry2=0; + entry2 = man->Get("GRP/GRP/Data"); + AliGRPObject* fGRPData=0; + if (entry2) + { + printf("Found an AliGRPObject in GRP/GRP/Data, reading it\n"); + fGRPData = dynamic_cast(entry2->GetObject()); + entry2->SetOwner(0); + } + TString activeDetList(AliDAQ::ListOfTriggeredDetectors(fGRPData->GetDetectorMask())); + TString runType(fGRPData->GetRunType()); + TString beamType(fGRPData->GetBeamType()); + TString machineMode(fGRPData->GetMachineMode()); + TString lhcState(fGRPData->GetLHCState()); + printf("activeDetList %s\nrunType %s\nbeamType %s\nmachineMode %s\nlhcState %s\n", + activeDetList.Data(),runType.Data(),beamType.Data(), + machineMode.Data(),lhcState.Data()); + + time_t duration = fGRPData->GetTimeEnd() - fGRPData->GetTimeStart(); + + if(!activeDetList.Contains("VZERO")) + { + printf("RUN WITH VZERO NOT ACTIVE\n"); + return 0; + } + if(!runType.Contains("PHYSICS")) + { + printf("RUN NO PHYSICS\n"); + return 0; + } + if(duration<120) + { + printf("RUNS SHORTER THAN 2 MIN\n"); + return 0; + } + Float_t TimesA=-9999.,TimesC=-9999., BB_BG=-9999.,BB_EE=-9999.,AdcA=-9999.; + Float_t AdcC=-9999.,MultA=-9999.,MultC=-9999.; + Int_t NumberVoieOff=0, numberBadOffset=0; + TTree *ttree=new TTree("trending","tree of trending variables"); + + ttree->Branch("run",&runNumber,"run/I"); + ttree->Branch("TimesA",&TimesA,"BB Leading time;;Time (ns)/F"); + ttree->Branch("TimesC",&TimesC,"BB Leading time;;Time (ns)/F"); + ttree->Branch("BB_BG",&BB_BG,"Trigger ratio/F"); + ttree->Branch("BB_EE",&BB_EE,"Trigger ratio/F"); + ttree->Branch("AdcA" ,&AdcA ,"Average Charge/F"); + ttree->Branch("AdcC" ,&AdcC ,"Average Charge/F"); + ttree->Branch("MultA",&MultA,"Average number of Fired cell/F"); + ttree->Branch("MultC",&MultC,"Average number of Fired cell/F"); + ttree->Branch("NumberVoieOff",&NumberVoieOff,"Number of path off/I"); + ttree->Branch("numberBadOffset",&numberBadOffset,"Number of bad offset /I"); + + char v0QAdirName[20]="VZERO_Performance"; + TDirectoryFile * v0QAdir=(TDirectoryFile*)fin->Get(v0QAdirName); + if(!v0QAdir) + { + printf("ERROR: VZERO QA directory not present in input file.\n"); + return -1; + } + TList *list = (TList*)v0QAdir->Get("QAVZEROHists"); + if(!list) + { + cout << "ERROR: No list found" << endl; + return -1; + } + TH2F *hEvents = (TH2F*)list->FindObject("hEvents"); + TH1F *hAdcNoTimeA = (TH1F*)list->FindObject("hAdcNoTimeA"); + TH1F *hAdcWithTimeA = (TH1F*)list->FindObject("hAdcWithTimeA"); + TH1F *hAdcNoTimeC = (TH1F*)list->FindObject("hAdcNoTimeC"); + TH1F *hAdcWithTimeC = (TH1F*)list->FindObject("hAdcWithTimeC"); + TH2F *hadcpmtwithtime = (TH2F*)list->FindObject("hadcpmtwithtime"); + TH1F *htimepmtA = (TH1F*)list->FindObject("htimepmtA"); + TH1F *htimepmtC = (TH1F*)list->FindObject("htimepmtC"); + TH1F *hwidthA = (TH1F*)list->FindObject("hwidthA"); + TH1F *hwidthC = (TH1F*)list->FindObject("hwidthC"); + TH1F *hV0ampl = (TH1F*)list->FindObject("hV0ampl"); + TH2F *htimepmt = (TH2F*)list->FindObject("htimepmt"); + TH2F *hwidthpmt = (TH2F*)list->FindObject("hwidthpmt"); + TH2F *hadcwidthA = (TH2F*)list->FindObject("hadcwidthA"); + TH2F *hadcwidthC = (TH2F*)list->FindObject("hadcwidthC"); + TH2F *hAdcTimeA = (TH2F*)list->FindObject("hAdcTimeA"); + TH2F *hAdcTimeC = (TH2F*)list->FindObject("hAdcTimeC"); + TH2F *htimecorr = (TH2F*)list->FindObject("htimecorr"); + TH1F *hV0A = (TH1F*)list->FindObject("hV0a"); + TH1F *hV0C = (TH1F*)list->FindObject("hV0c"); + TH1F *hV0multA = (TH1F*)list->FindObject("hV0multA"); + TH1F *hV0multC = (TH1F*)list->FindObject("hV0multC"); + TH2F* hVtxXYBB =(TH2F*) list->FindObject("fhVtxXYBB"); + TH1F* hVtxZBB =(TH1F*) list->FindObject("fhVtxZBB"); + TH2F* hVtxXYBGA =(TH2F*) list->FindObject("fhVtxXYBGA"); + TH1F* hVtxZBGA =(TH1F*) list->FindObject("fhVtxZBGA"); + TH2F* hVtxXYBGC =(TH2F*) list->FindObject("fhVtxXYBGC"); + TH1F* hVtxZBGC =(TH1F*) list->FindObject("fhVtxZBGC"); + + float BB = hEvents->GetBinContent(2,2); + float EE = hEvents->GetBinContent(1,1); + float BGA = hEvents->GetBinContent(3,2); + float BGC = hEvents->GetBinContent(2,3); + + if(hAdcWithTimeA->GetEntries()==0) + return 0; + + { + TSpectrum s; + float shiftA = 8.; + Int_t nPeaksFound = s.Search(htimepmtA); + Float_t *peaks = s.GetPositionY(); + Float_t *posiX = s.GetPositionX(); + Float_t maxY = 0.; + Int_t index = -1; + + for(int i=0;imaxY && posiX[i]>0.) + { + maxY = peaks[i]; + index = i; + } + } + Float_t maxX = (index >= 0) ? s.GetPositionX()[index] : -11111; + + TF1 *fgaus = new TF1("gausbbbb","gaus",maxX-1.,maxX+1.); + htimepmtA->Fit(fgaus,"","",maxX-1.,maxX+1.); + TimesA=fgaus->GetParameter(1)-shiftA; + delete fgaus; + } + { + TSpectrum s; + Int_t nPeaksFound = s.Search(htimepmtC); + Float_t *peaks = s.GetPositionY(); + Float_t maxY = 0.; + Int_t index = -1; + for(int i=0;imaxY) + { + maxY = peaks[i]; + index = i; + } + } + Float_t maxX = (index >= 0) ? s.GetPositionX()[index] : -11111; + TF1 *fgaus = new TF1("gausffff","gaus",maxX-1.,maxX+1.); + htimepmtC->Fit(fgaus,"","",maxX-1.,maxX+1.); + TimesC=fgaus->GetParameter(1); + delete fgaus; + } + if(BB) + { + BB_BG=(BGA+BGC)/BB; + BB_EE=EE/BB; + }else + { + BB_BG=0; + BB_EE=0; + } + + MultA=hV0A->GetMean(); + MultC=hV0C->GetMean(); + + AdcA=hAdcWithTimeA->GetMean(); + AdcC=hAdcWithTimeC->GetMean(); + + double valBin=0; + TH1D*hadcXFull=hadcpmtwithtime->ProjectionX("hadcXFull",1,hadcpmtwithtime->GetYaxis()->GetLast()); + TH1D*hadcX=hadcpmtwithtime->ProjectionX("hadcX",10,20); + for(Int_t i=0;i<64;i++) + { + valBin=hadcXFull->GetBinContent(i+1); + if(valBin==0) + NumberVoieOff++; + valBin=hadcX->GetBinContent(i+1); + if(valBin==0) + numberBadOffset++; + } + + TFile * trendFile = new TFile(treePostFileName.Data(),"recreate"); + ttree->Fill(); + trendFile->cd(); + ttree->Write(); + trendFile->Close(); + + if(canvasE) + { + + TCanvas * cOut = new TCanvas("cOut",Form("Run %d",runNumber)); + cOut->Divide(2,2); + cOut->cd(1); cOut->GetPad(1)->SetLogy(); + hAdcNoTimeA->Draw("l"); + hAdcWithTimeA->Draw("same"); hAdcWithTimeA->SetLineColor(2); + + cOut->cd(2); cOut->GetPad(2)->SetLogy(); + hAdcNoTimeC->Draw("l"); + hAdcWithTimeC->Draw("same"); hAdcWithTimeC->SetLineColor(2); + + cOut->cd(3); cOut->GetPad(3)->SetLogz(); + hadcpmtwithtime->Draw("colz"); + + cOut->cd(4); cOut->GetPad(4)->SetLogz(); + hEvents->Draw("colz text"); + + cOut->Print(Form("QA_Run_%d.pdf(",runNumber)); + + + cOut->cd(1); cOut->GetPad(1)->SetLogy(); + htimepmtA->GetXaxis()->SetRangeUser(-25.,25.); htimepmtA->Draw(); + + cOut->cd(2); cOut->GetPad(2)->SetLogy(); + htimepmtC->GetXaxis()->SetRangeUser(-25.,25.); htimepmtC->Draw(); + + cOut->cd(3); cOut->GetPad(3)->SetLogy();cOut->GetPad(3)->SetLogz(0); + hwidthA->GetXaxis()->SetRangeUser(0.,50.); hwidthA->Draw(); + + cOut->cd(4); cOut->GetPad(4)->SetLogy();cOut->GetPad(4)->SetLogz(0); + hwidthC->GetXaxis()->SetRangeUser(0.,50.); hwidthC->Draw(); + + cOut->Print(Form("QA_Run_%d.pdf",runNumber)); + + + cOut->cd(1); cOut->GetPad(1)->SetLogy(0);cOut->GetPad(1)->SetLogz(); + htimepmt->Draw("colz"); + + cOut->cd(2); cOut->GetPad(2)->SetLogy(0);cOut->GetPad(2)->SetLogz(); + hwidthpmt->GetYaxis()->SetRangeUser(0.,50.); hwidthpmt->Draw("colz"); + + cOut->cd(3); cOut->GetPad(3)->SetLogy(0);cOut->GetPad(3)->SetLogz(); + hadcwidthA->GetYaxis()->SetRangeUser(0.,50.); hadcwidthA->Draw("colz"); + + cOut->cd(4); cOut->GetPad(4)->SetLogy(0);cOut->GetPad(4)->SetLogz(); + hadcwidthC->GetYaxis()->SetRangeUser(0.,50.); hadcwidthC->Draw("colz"); + + cOut->Print(Form("QA_Run_%d.pdf",runNumber)); + + + cOut->cd(1); cOut->GetPad(1)->SetLogy(0);cOut->GetPad(1)->SetLogz(); + hAdcTimeA->Draw("colz"); + + cOut->cd(2); cOut->GetPad(2)->SetLogy(0);cOut->GetPad(2)->SetLogz(); + hAdcTimeC->Draw("colz"); + + cOut->cd(3); cOut->GetPad(3)->SetLogy(); cOut->GetPad(3)->SetLogz(0); + hV0ampl->Draw(); + + cOut->cd(4); cOut->GetPad(4)->SetLogy(0); cOut->GetPad(4)->SetLogz(0); + htimecorr->Draw("colz"); + + cOut->Print(Form("QA_Run_%d.pdf",runNumber)); + + + + cOut->cd(1); cOut->GetPad(1)->SetLogy(1);cOut->GetPad(1)->SetLogz(0); + hV0A->GetXaxis()->SetRangeUser(0.,33.);hV0A->Draw(); + + cOut->cd(2); cOut->GetPad(2)->SetLogy(1);cOut->GetPad(2)->SetLogz(0); + hV0C->GetXaxis()->SetRangeUser(0.,33.);hV0C->Draw(); + + cOut->cd(3); cOut->GetPad(3)->SetLogy(); cOut->GetPad(3)->SetLogz(0); + hV0multA->Draw(); + + cOut->cd(4); cOut->GetPad(4)->SetLogy(); cOut->GetPad(3)->SetLogz(0); + hV0multC->Draw(); + + cOut->Print(Form("QA_Run_%d.pdf",runNumber)); + + + cOut->Clear(); + cOut->Divide(2,3); + + cOut->cd(1); cOut->GetPad(1)->SetLogy(0);cOut->GetPad(1)->SetLogz(1); + hVtxXYBB->Draw("colz"); + + cOut->cd(2); cOut->GetPad(2)->SetLogy(1);cOut->GetPad(2)->SetLogz(0); + hVtxZBB->Draw(); + + cOut->cd(3); cOut->GetPad(3)->SetLogy(0); cOut->GetPad(3)->SetLogz(1); + hVtxXYBGA->Draw("colz"); + + cOut->cd(4); cOut->GetPad(4)->SetLogy(); cOut->GetPad(3)->SetLogz(0); + hVtxZBGA->Draw(); + + cOut->cd(5); cOut->GetPad(5)->SetLogy(0); cOut->GetPad(5)->SetLogz(1); + hVtxXYBGC->Draw("colz"); + + cOut->cd(6); cOut->GetPad(6)->SetLogy(); cOut->GetPad(6)->SetLogz(0); + hVtxZBGC->Draw(); + + cOut->Print(Form("QA_Run_%d.pdf)",runNumber)); + delete cOut; + + } + delete v0QAdir; + return 0; +}