ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
  #include <TError.h>
  #include <TROOT.h>
  #include <TKey.h>
  #include <TH2.h>
  #include <TF1.h>
  #include <TFile.h>
  #include <TCanvas.h>
  #include <TPad.h>
  #include <TStyle.h>
  #include <TGrid.h>
  #include <TGridResult.h>
  #include <TEnv.h>
  #include <TLegend.h>
  #include <TMath.h>
  #include <TSpectrum.h>

  #include "AliCDBManager.h"
  #include "AliCDBEntry.h"
  #include "AliGRPObject.h"
  #include "AliTriggerInput.h"
  #include "AliTriggerConfiguration.h"
#endif

void readQAPbPb(const char * period ="LHC11h", char * files = "list.txt"){
	gStyle->SetPalette(1);
	 TGrid::Connect("alien://");
	// gSystem->Exec("alien_find /alice/data/2011/LHC11a/* ESDs/pass1/QA*/QAresults.root > list.txt");
	// gSystem->Exec("sed '$d' < list.txt > tmplist.txt ; mv tmplist.txt list.txt");

   // TGridResult *res = gGrid->Query(Form("/alice/data/2011/%s/*",period),"ESDs/pass1/QAresults.root");
   // const Int_t nFiles = res->GetEntries();
   // if (nFiles ==0) {
   //   Error("QA","No QA files found");
   //   delete res;
   //   return;
   // }

	TArrayI valid(1);
	TArrayI runs(1);
	AliCDBManager *man = AliCDBManager::Instance();

  man->SetDefaultStorage("raw://");

Int_t minRun = 1000000;
Int_t maxRun = 0;
Int_t nValid =0;

FILE * fin = fopen(files,"r");
Int_t runNumber, nfiles=0;
while(EOF!=fscanf(fin,"%d\n",&runNumber)){
	valid.Set(nfiles+1);
	runs.Set(nfiles+1);
	valid.SetAt(kTRUE,nfiles);
	runs.SetAt(runNumber,nfiles);


 gEnv->SetValue("XNet.ConnectTimeout",10);
 gEnv->SetValue("XNet.RequestTimeout",10);
 gEnv->SetValue("XNet.MaxRedirectCount",2);
 gEnv->SetValue("XNet.ReconnectTimeout",10);
 gEnv->SetValue("XNet.FirstConnectMaxCnt",1);	

  	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<AliGRPObject*>(entry2->GetObject());  // new GRP entry
      	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());
	cout<<"beamType "<<beamType<<endl;
	cout<<"machineMode "<<machineMode<<endl;
	cout<<"lhcState "<<lhcState<<endl;
	
	time_t duration = fGRPData->GetTimeEnd() - fGRPData->GetTimeStart();

	if(!lhcState.Contains("STABLE BEAMS")){ // Remove no BEAM runs
		valid.SetAt(kFALSE,nfiles);
		continue;
	}
	if(!activeDetList.Contains("VZERO")){ // Remove Runs where VZERO is not active
		valid.SetAt(kFALSE,nfiles);
		continue;
	}
	if(!runType.Contains("PHYSICS")){ // Remove no PHYSICS runs
		valid.SetAt(kFALSE,nfiles);
		continue;
	}
	if(duration<600){ // Remove Runs shorter than 10 min
		valid.SetAt(kFALSE,nfiles);
		continue;
	}
	nfiles++;
	nValid++;
	
	if(runNumber>maxRun) maxRun = runNumber;
	if(runNumber<minRun) minRun = runNumber;
}

TH1F * hTimeA = new TH1F("hTimeA","BB Leading time;;Time (ns)",nValid,-0.5,nValid-0.5);
TH1F * hTimeC = new TH1F("hTimeC","BB Leading time;;Time (ns)",nValid,-0.5,nValid-0.5);
TH1F * hBB_BG = new TH1F("hBB_BG","Trigger ratio",nValid,-0.5,nValid-0.5);
TH1F * hBB_EE = new TH1F("hBB_EE","Trigger ratio",nValid,-0.5,nValid-0.5);
TH1F * hAdcA = new TH1F("hAdcA","Average Charge",nValid,-0.5,nValid-0.5);
TH1F * hAdcC = new TH1F("hAdcC","Average Charge",nValid,-0.5,nValid-0.5);
TH1F * hMultA = new TH1F("hMultA","Average number of Fired cell",nValid,-0.5,nValid-0.5);
TH1F * hMultC = new TH1F("hMultC","Average number of Fired cell",nValid,-0.5,nValid-0.5);
TH1F * hTriggerEff_CVLN = new TH1F("hTriggerEff_CVLN","CVLN / CVBN",nValid,-0.5,nValid-0.5);
TH1F * hTriggerEff_CVHN = new TH1F("hTriggerEff_CVHN","CVHN / CVBN",nValid,-0.5,nValid-0.5);
TH1F * hTriggerEff_CVHN2 = new TH1F("hTriggerEff_CVHN2","CVHN / CVLN",nValid,-0.5,nValid-0.5);
TH1F * hPMTEdges[64];
for(int i = 0; i < 64; ++i){
	hPMTEdges[i] = new  TH1F(Form("hPMTEdges%d",i),Form("Multiplicity edge Cell %d",i),nValid,-0.5,nValid-0.5);
}

int nEntries=0;
TString trigMB, trigCVLN, trigCVHN;
for(int ifile = nfiles-1; ifile >= 0; ifile--){

	if(!valid.At(ifile)) continue;
	runNumber = runs.At(ifile);

	if(runNumber>=169683) {
		trigMB   = "CPBI2_B1";
		trigCVLN = "CSEMI_R1";
		trigCVHN = "CCENT_R2";
	} else if(runNumber>168171){
		trigMB   = "CPBI2_B1";
		trigCVLN = "CVLN_R1";
		trigCVHN = "CVHN_R2";
	} else if(runNumber>167693){
		trigMB   = "CPBI2_B1";
		trigCVLN = "CVLN_B2";
		trigCVHN = "CVHN_R2";
	} else if(runNumber>166532)	{
		trigMB   = "CPBI1";
		trigCVLN = "CVLN";
		trigCVHN = "CVHN";
	} else {
		trigMB   = "CPBI1";
		trigCVLN = "CVLN";
		trigCVHN = "CVHN";
	}
		
	TGridResult *res;
	if(strcmp(period,"LHC11h")==0){
		res = gGrid->Query(Form("/alice/data/2011/%s/000%d/*",period,runNumber),"ESDs/pass1_HLT/QAresults.root");
	}


if (res->GetEntries() ==0) {
     Error("QA",Form("No QA files found for run %d\n",runNumber));
     delete res;
	 nEntries++;
     continue;
   }

	   man->SetRun(runNumber);
 	
	AliCDBEntry *entryCTP = man->Get("GRP/CTP/Config");
   AliTriggerConfiguration *configCTP = (AliTriggerConfiguration*)entryCTP->GetObject();
	TObjArray  inputsArray = configCTP->GetInputs();
	
	Double_t rnd1=1., rnd2=1., bc1=1., bc2=1.;
	AliTriggerInput * input;
	input = (AliTriggerInput*)(inputsArray.FindObject("RND1"));
	if(input) rnd1 =  (input->GetSignature())/(double)(0x7fffffff );
	if(input)cout<<Form("RND1 = %d",input->GetSignature())<<endl;

	input = (AliTriggerInput*)(inputsArray.FindObject("RND2"));
	if(input) rnd2 =  (input->GetSignature())/(double)(0x7fffffff );
	if(input)cout<<Form("RND2 = %d",input->GetSignature())<<endl;
	
	input = (AliTriggerInput*)(inputsArray.FindObject("BC1"));
	if(input) bc1 =  1./(input->GetSignature()+1.);
	if(input)cout<<Form("BC1 = %d",input->GetSignature())<<endl;
	
	input = (AliTriggerInput*)(inputsArray.FindObject("BC2"));
	if(input) bc2 =  1./(input->GetSignature()+1.);
	if(input)cout<<Form("BC2 = %d",input->GetSignature())<<endl;


	
   	TString filename = res->GetKey(0, "turl");
	//   	TObjArray* tmp = filename.Tokenize("/");
	if(filename == "") continue;
   	TFile *fQA = TFile::Open(filename.Data());
   	if (!fQA) {
     	Error("QA",Form("Can not open QA file found for run %d\n",runNumber));
		nEntries++;
     	continue;
   	}
	TList *list = (TList*)fQA->Get("VZERO_PbPb_Performance/PbPbVZEROHists");
	TH2F *hTriggerDecision = (TH2F*)list->FindObject("hTriggerDecision");
	TH1F *hAdcNoTimeA = (TH1F*)list->FindObject("hAdcNoTimeV0A");
	TH1F *hAdcWithTimeA = (TH1F*)list->FindObject("hAdcWithTimeV0A");
	TH1F *hAdcNoTimeC = (TH1F*)list->FindObject("hAdcNoTimeV0C");
	TH1F *hAdcWithTimeC = (TH1F*)list->FindObject("hAdcWithTimeV0C");
	TH2F *hadcpmtwithtime = (TH2F*)list->FindObject("hadcpmtwithtime");	
	TH1F *htimepmtA = (TH1F*)list->FindObject("htimepmtV0A");
	TH1F *htimepmtC = (TH1F*)list->FindObject("htimepmtV0C");
	TH1F *hwidthA = (TH1F*)list->FindObject("hwidthV0A");
	TH1F *hwidthC = (TH1F*)list->FindObject("hwidthV0C");
	//	TH1F *hV0ampl = (TH1F*)list->FindObject("hV0ampl");
	TH2F *htimepmt = (TH2F*)list->FindObject("htimepmt");	
	TH2F *hwidthpmt = (TH2F*)list->FindObject("hwidthpmt");	
	TH2F *hadcwidthA = (TH2F*)list->FindObject("hadcwidthV0A");	
	TH2F *hadcwidthC = (TH2F*)list->FindObject("hadcwidthV0C");	
	TH2F *hAdcTimeA = (TH2F*)list->FindObject("hAdcTimeV0A");	
	TH2F *hAdcTimeC = (TH2F*)list->FindObject("hAdcTimeV0C");	
	TH2F *htimecorr = (TH2F*)list->FindObject("htimecorr");	
	TH2F *hNFlags   = (TH2F*)list->FindObject("hNFlags");
	TH1F *hV0A = (TH1F*)hNFlags->ProjectionX("hV0A",1,hNFlags->GetNbinsY());
	TH1F *hV0C = (TH1F*)hNFlags->ProjectionY("hV0C",1,hNFlags->GetNbinsX());
	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");
	
	TH2F* hRecoMult = (TH2F*) list->FindObject(Form("hRecoMult_%s-",trigMB.Data()));
	TH2F* hRecoMultPMT = (TH2F*) list->FindObject(Form("hRecoMultPMT_%s-",trigMB.Data()));
	TH1F* hTotRecoMult = (TH1F*) list->FindObject(Form("hTotRecoMult_%s-",trigMB.Data()));
	TH1F* hTotRecoMult_CVLN = (TH1F*) list->FindObject(Form("hTotRecoMult_%s-",trigCVLN.Data()));
	TH1F* hTotRecoMult_CVHN = (TH1F*) list->FindObject(Form("hTotRecoMult_%s-",trigCVHN.Data()));
	TH2F* hEqualizedMult = (TH2F*) list->FindObject(Form("hEqualizedMult_%s-",trigMB.Data()));
	
	Double_t BB  = hTriggerDecision->GetBinContent(2,2);
	Double_t EE  = hTriggerDecision->GetBinContent(1,1);
	Double_t BGA = hTriggerDecision->GetBinContent(3,2);
	Double_t BGC = hTriggerDecision->GetBinContent(2,3);
		
	hTimeA->GetXaxis()->SetBinLabel(nEntries+1,Form("%d",runNumber));
	hTimeC->GetXaxis()->SetBinLabel(nEntries+1,Form("%d",runNumber));
	hBB_BG->GetXaxis()->SetBinLabel(nEntries+1,Form("%d",runNumber));
	hBB_EE->GetXaxis()->SetBinLabel(nEntries+1,Form("%d",runNumber));
	hAdcA->GetXaxis()->SetBinLabel(nEntries+1,Form("%d",runNumber));
	hAdcC->GetXaxis()->SetBinLabel(nEntries+1,Form("%d",runNumber));
	hMultA->GetXaxis()->SetBinLabel(nEntries+1,Form("%d",runNumber));
	hMultC->GetXaxis()->SetBinLabel(nEntries+1,Form("%d",runNumber));
	hTriggerEff_CVLN->GetXaxis()->SetBinLabel(nEntries+1,Form("%d",runNumber));
	hTriggerEff_CVHN->GetXaxis()->SetBinLabel(nEntries+1,Form("%d",runNumber));
	hTriggerEff_CVHN2->GetXaxis()->SetBinLabel(nEntries+1,Form("%d",runNumber));
    for(int i = 0; i < 64; ++i) {
        hPMTEdges[i]->GetXaxis()->SetBinLabel(nEntries+1,Form("%d",runNumber));
    }
	
	if(hAdcWithTimeA->GetEntries()==0) {
		delete fQA;	
		nEntries++;		
		continue;
	}

	Double_t cVLN = hTotRecoMult_CVLN->GetEntries();
	Double_t cVHN = hTotRecoMult_CVHN->GetEntries();
	Double_t cVBN = hTotRecoMult->GetEntries();
	
	// Correct for downscaling factor
	Double_t scaleVBN = 1., scaleVLN = 1., scaleVHN = 1.;
	if(trigMB.Contains("B1")) {
		if(bc1>0.) scaleVBN=1./bc1;
	} else 	if(trigMB.Contains("B2")) {
		if(bc2>0.) scaleVBN=1./bc2;
	} else if(trigMB.Contains("R1")) {
		if(rnd1>0.) scaleVBN=1./rnd1;
	} else if(trigMB.Contains("R2")) {
		if(rnd2>0.) scaleVBN=1./rnd2;
	}
	if(trigCVLN.Contains("B1")) {
		if(bc1>0.) scaleVLN=1./bc1;
	} else 	if(trigCVLN.Contains("B2")) {
		if(bc2>0.) scaleVLN=1./bc2;
	} else if(trigCVLN.Contains("R1")) {
		if(rnd1>0.) scaleVLN=1./rnd1;
	} else if(trigCVLN.Contains("R2")) {
		if(rnd2>0.) scaleVLN=1./rnd2;
	}
	
	if(trigCVHN.Contains("B1")) {
		if(bc1>0.) scaleVHN=1./bc1;
	} else 	if(trigCVHN.Contains("B2")) {
		if(bc2>0.) scaleVHN=1./bc2;
	} else if(trigCVHN.Contains("R1")) {
		if(rnd1>0.) scaleVHN=1./rnd1;
	} else if(trigCVHN.Contains("R2")) {
		if(rnd2>0.) scaleVHN=1./rnd2;
	}

	cout<<Form("CVBN = %lf \nCVLN = %lf \nCVHN = %lf\n",cVBN,cVLN,cVHN);
	hTotRecoMult->Scale(scaleVBN);
	hTotRecoMult_CVLN->Scale(scaleVLN);
	hTotRecoMult_CVHN->Scale(scaleVHN);

	cVBN *= scaleVBN/100.;
	cVLN *= scaleVLN;
	cVHN *= scaleVHN;
	
	cout<<Form("CVBN = %lf \nCVLN = %lf \nCVHN = %lf\n",cVBN,cVLN,cVHN);

	if(cVBN >0.){
		hTriggerEff_CVLN->SetBinContent(nEntries+1,cVBN/cVLN);
		if(cVLN>0.) hTriggerEff_CVLN->SetBinError(nEntries+1,cVBN/cVLN*(TMath::Sqrt(1./cVLN+1./cVBN)));
		hTriggerEff_CVHN->SetBinContent(nEntries+1,cVBN/cVHN);
		if(cVHN>0.) hTriggerEff_CVHN->SetBinError(nEntries+1,cVBN/cVHN*(TMath::Sqrt(1./(cVHN/scaleVHN)+1./(cVBN/scaleVBN*100.))));
		if(cVLN>0.) hTriggerEff_CVHN2->SetBinContent(nEntries+1,cVLN/cVHN);
		if(cVHN>0. && cVLN>0.) hTriggerEff_CVHN2->SetBinError(nEntries+1,cVLN/cVHN*(TMath::Sqrt(1./(cVHN/scaleVHN)+1./(cVLN/scaleVLN))));
	}

    Double_t beta1[64], beta2[64];
    Double_t q = 1. - 1.e-4;
    Double_t q2 = 1. - 2.e-4;
    for(int i = 0; i < 64; ++i) {
    	((TH1D*)hRecoMultPMT->ProjectionY(Form("hRecoMultPMT%d",i),i+1,i+1))->GetQuantiles(1,&beta1[i],&q);
    	((TH1D*)hRecoMultPMT->ProjectionY(Form("hRecoMultPMT%d",i),i+1,i+1))->GetQuantiles(1,&beta2[i],&q2);
        hPMTEdges[i]->SetBinContent(nEntries+1,(beta1[i]+beta2[i])/2.);
		hPMTEdges[i]->SetBinError(nEntries+1,(beta1[i] - beta2[i]));
    }

    Double_t betaSide1[2];
    Double_t betaSide2[2];
    for(int i = 0; i < 2; ++i) {
		if(i==0){
			((TH1D*)hRecoMult->ProjectionY(Form("hRecoMult1%d",i)))->GetQuantiles(1,&betaSide1[i],&q);
			((TH1D*)hRecoMult->ProjectionY(Form("hRecoMult2%d",i)))->GetQuantiles(1,&betaSide2[i],&q2);
	    }else{
			((TH1D*)hRecoMult->ProjectionX(Form("hRecoMult1%d",i)))->GetQuantiles(1,&betaSide1[i],&q);
			((TH1D*)hRecoMult->ProjectionX(Form("hRecoMult2%d",i)))->GetQuantiles(1,&betaSide2[i],&q2);
		}
    }
	hAdcA->SetBinContent(nEntries+1,(betaSide1[1] + betaSide2[1])/2.);
	hAdcC->SetBinContent(nEntries+1,(betaSide1[0] + betaSide2[0])/2.);
	hAdcA->SetBinError(nEntries+1,(betaSide1[1] - betaSide2[1]));
	hAdcC->SetBinError(nEntries+1,(betaSide1[0] - betaSide2[0]));
	
	

	
		TSpectrum s;
		int nPeaksFound;
		float * peaks;
		float max;
		float shiftA = 8.;

		nPeaksFound = s.Search(htimepmtA); peaks = s.GetPositionX(); max = -25.;
		for(int i=0;i<nPeaksFound;i++) if(peaks[i]>max) max = peaks[i];	
		htimepmtA->Fit("gaus","","",max-1.,max+1.);
		hTimeA->Fill(nEntries,htimepmtA->GetFunction("gaus")->GetParameter(1)-shiftA);

		nPeaksFound = s.Search(htimepmtC); peaks = s.GetPositionX(); max = -25.;
		for(int i=0;i<nPeaksFound;i++) if(peaks[i]>max) max = peaks[i];	
		htimepmtC->Fit("gaus","","",max-1.,max+1.);
		hTimeC->Fill(nEntries,htimepmtC->GetFunction("gaus")->GetParameter(1));

		if(BB) {
			hBB_BG->SetBinContent(nEntries,(BGA+BGC)/BB);
			hBB_EE->SetBinContent(nEntries,EE/BB);
		} else {
			hBB_BG->SetBinContent(nEntries,0);
			hBB_EE->SetBinContent(nEntries,0);
		}

		hMultA->SetBinContent(nEntries,hV0A->GetMean());
		hMultC->SetBinContent(nEntries,hV0C->GetMean());

		//		hAdcA->SetBinContent(nEntries,hAdcWithTimeA->GetMean());
		//		hAdcC->SetBinContent(nEntries,hAdcWithTimeC->GetMean());

//-------------
	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)->SetLogy(0);cOut->GetPad(4)->SetLogz(1);
	hEqualizedMult->Draw("colz");  
	
	cOut->Print(Form("QA_Run_%d.pdf(",runNumber));
//-------------

	cOut->Clear();
	cOut->Divide(2,2);
	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->Clear();
	cOut->Divide(2,2);
	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->Clear();
	cOut->Divide(2,2);
	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)->SetLogz();
	hTriggerDecision->Draw("text");
	
	cOut->cd(4); cOut->GetPad(4)->SetLogz(); cOut->GetPad(4)->SetLogz(0);
	htimecorr->Draw("colz");

	cOut->Print(Form("QA_Run_%d.pdf",runNumber));
//-------------

	cOut->Clear();
	cOut->Divide(2,2);
	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(0);cOut->GetPad(3)->SetLogz(0); cOut->GetPad(3)->SetGridy(1);
	hTotRecoMult->Sumw2();
	hTotRecoMult_CVLN->Sumw2();
	hTotRecoMult_CVHN->Sumw2();
	hTotRecoMult_CVLN->Divide(hTotRecoMult);
	hTotRecoMult_CVHN->Divide(hTotRecoMult);
	hTotRecoMult_CVLN->Draw("e"); hTotRecoMult_CVLN->SetLineColor(4);hTotRecoMult_CVLN->SetMarkerStyle(0);hTotRecoMult_CVLN->SetMaximum(1.2);
	hTotRecoMult_CVLN->SetTitle("Multiplicity efficiency CVLN (blue) and CHVN (red)");
	hTotRecoMult_CVHN->Draw("esame"); hTotRecoMult_CVHN->SetLineColor(2);hTotRecoMult_CVHN->SetMarkerStyle(0);
	
	cOut->cd(4); cOut->GetPad(4)->SetLogy(0);cOut->GetPad(4)->SetLogz(1); cOut->GetPad(4)->SetGridx(1); cOut->GetPad(4)->SetGridy(1);
	hRecoMult->Draw("colz");
	
	
	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 fQA;			

			nEntries++;

		}
//		delete res;

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");
c->SetGridy();
hTimeA->Draw("P");
hTimeA->SetMinimum(TMath::Min(hTimeA->GetMinimum(),hTimeC->GetMinimum())-1.);
hTimeA->SetMaximum(TMath::Max(hTimeA->GetMaximum(),hTimeC->GetMaximum())+1.);
// hTimeA->GetXaxis()->SetLabelOptions("v");
// hTimeC->GetXaxis()->SetLabelOptions("v");

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");
// TPave * pavA = new TPave(-0.5,TMath::Max(hTimeA->GetMinimum(),1.5-shiftA),nValid-0.5,TMath::Min(hTimeA->GetMaximum(),33.5-shiftA),0);
// pavA->SetFillStyle(3004);
// pavA->SetFillColor(2);
// TPave * pavC = new TPave(-0.5,TMath::Max(hTimeA->GetMinimum(),0.5),nValid-0.5,TMath::Min(hTimeA->GetMaximum(),25.5),0);
// pavC->SetFillStyle(3005);
// pavC->SetFillColor(4);
// 
// pavA->Draw("same");
// pavC->Draw("same");
TFile * fout = TFile::Open(Form("QA_Resume_%d_%d.root",minRun,maxRun),"RECREATE");

c->Print(Form("QA_Resume_%d_%d.pdf(",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_BG->SetTitle("Beam-Gas / Beam-Beam");
// 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("QA_Resume_%d_%d.pdf",minRun,maxRun));
c2->Write();


TCanvas * c3 = new TCanvas("c3","Multiplicity Eddes V0A/V0C");
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("QA_Resume_%d_%d.pdf",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("QA_Resume_%d_%d.pdf",minRun,maxRun));
c4->Write();

TCanvas * c5 = new TCanvas("c5","Trigger Efficiency");
c5->SetGridy();

hTriggerEff_CVLN->SetMarkerStyle(20);
hTriggerEff_CVLN->SetMarkerColor(2);
hTriggerEff_CVHN->SetMarkerStyle(20);
hTriggerEff_CVHN->SetMarkerColor(4);
hTriggerEff_CVHN2->SetMarkerStyle(4);
hTriggerEff_CVHN2->SetMarkerColor(1);
hTriggerEff_CVLN->SetMinimum(0);
hTriggerEff_CVLN->SetMaximum(15.);
hTriggerEff_CVLN->SetTitle("Centrality triggers fraction");

hTriggerEff_CVLN->Draw("P");
hTriggerEff_CVHN->Draw("Psame");
hTriggerEff_CVHN2->Draw("Psame");
TLegend * lg5 = new TLegend(0.7,0.8,1,1);
lg5->AddEntry(hTriggerEff_CVLN,"(CPBI2/100) / CVLN","p");
lg5->AddEntry(hTriggerEff_CVHN,"(CPBI2/100) / CVHN","p");
lg5->AddEntry(hTriggerEff_CVHN2,"CVLN / CVHN","p");
lg5->Draw("same");

c5->Print(Form("QA_Resume_%d_%d.pdf",minRun,maxRun));
c5->Write();


TCanvas * cedge[8];
for(int i = 0; i < 8; ++i){
	cedge[i] = new TCanvas(Form("cedge%d",i),Form("Edge Ring %d",i));
	cedge[i]->SetGridy();
	cedge[i]->Divide(3,3);
	for(int iCh = 0; iCh < 8; ++iCh){
		cedge[i]->cd(iCh+1);
		hPMTEdges[iCh+i*8]->SetMarkerStyle(20);
		hPMTEdges[iCh+i*8]->Draw("P");
	}
	if(i==7) cedge[i]->Print(Form("QA_Resume_%d_%d.pdf)",minRun,maxRun));
	else cedge[i]->Print(Form("QA_Resume_%d_%d.pdf",minRun,maxRun));
	cedge[i]->Write();
}





fout->Close();

gSystem->Exec(Form("tar cvf QA_Runs_%d_%d.tar QA_Run*.pdf QA_Resume_%d_%d.pdf QA_Resume_%d_%d.root",minRun,maxRun,minRun,maxRun,minRun,maxRun));
gSystem->Exec(Form("rm -f QA_Run*.pdf QA_Resume_%d_%d.pdf  QA_Resume_%d_%d.root",minRun,maxRun,minRun,maxRun));


}

 readQAPbPb.C:1
 readQAPbPb.C:2
 readQAPbPb.C:3
 readQAPbPb.C:4
 readQAPbPb.C:5
 readQAPbPb.C:6
 readQAPbPb.C:7
 readQAPbPb.C:8
 readQAPbPb.C:9
 readQAPbPb.C:10
 readQAPbPb.C:11
 readQAPbPb.C:12
 readQAPbPb.C:13
 readQAPbPb.C:14
 readQAPbPb.C:15
 readQAPbPb.C:16
 readQAPbPb.C:17
 readQAPbPb.C:18
 readQAPbPb.C:19
 readQAPbPb.C:20
 readQAPbPb.C:21
 readQAPbPb.C:22
 readQAPbPb.C:23
 readQAPbPb.C:24
 readQAPbPb.C:25
 readQAPbPb.C:26
 readQAPbPb.C:27
 readQAPbPb.C:28
 readQAPbPb.C:29
 readQAPbPb.C:30
 readQAPbPb.C:31
 readQAPbPb.C:32
 readQAPbPb.C:33
 readQAPbPb.C:34
 readQAPbPb.C:35
 readQAPbPb.C:36
 readQAPbPb.C:37
 readQAPbPb.C:38
 readQAPbPb.C:39
 readQAPbPb.C:40
 readQAPbPb.C:41
 readQAPbPb.C:42
 readQAPbPb.C:43
 readQAPbPb.C:44
 readQAPbPb.C:45
 readQAPbPb.C:46
 readQAPbPb.C:47
 readQAPbPb.C:48
 readQAPbPb.C:49
 readQAPbPb.C:50
 readQAPbPb.C:51
 readQAPbPb.C:52
 readQAPbPb.C:53
 readQAPbPb.C:54
 readQAPbPb.C:55
 readQAPbPb.C:56
 readQAPbPb.C:57
 readQAPbPb.C:58
 readQAPbPb.C:59
 readQAPbPb.C:60
 readQAPbPb.C:61
 readQAPbPb.C:62
 readQAPbPb.C:63
 readQAPbPb.C:64
 readQAPbPb.C:65
 readQAPbPb.C:66
 readQAPbPb.C:67
 readQAPbPb.C:68
 readQAPbPb.C:69
 readQAPbPb.C:70
 readQAPbPb.C:71
 readQAPbPb.C:72
 readQAPbPb.C:73
 readQAPbPb.C:74
 readQAPbPb.C:75
 readQAPbPb.C:76
 readQAPbPb.C:77
 readQAPbPb.C:78
 readQAPbPb.C:79
 readQAPbPb.C:80
 readQAPbPb.C:81
 readQAPbPb.C:82
 readQAPbPb.C:83
 readQAPbPb.C:84
 readQAPbPb.C:85
 readQAPbPb.C:86
 readQAPbPb.C:87
 readQAPbPb.C:88
 readQAPbPb.C:89
 readQAPbPb.C:90
 readQAPbPb.C:91
 readQAPbPb.C:92
 readQAPbPb.C:93
 readQAPbPb.C:94
 readQAPbPb.C:95
 readQAPbPb.C:96
 readQAPbPb.C:97
 readQAPbPb.C:98
 readQAPbPb.C:99
 readQAPbPb.C:100
 readQAPbPb.C:101
 readQAPbPb.C:102
 readQAPbPb.C:103
 readQAPbPb.C:104
 readQAPbPb.C:105
 readQAPbPb.C:106
 readQAPbPb.C:107
 readQAPbPb.C:108
 readQAPbPb.C:109
 readQAPbPb.C:110
 readQAPbPb.C:111
 readQAPbPb.C:112
 readQAPbPb.C:113
 readQAPbPb.C:114
 readQAPbPb.C:115
 readQAPbPb.C:116
 readQAPbPb.C:117
 readQAPbPb.C:118
 readQAPbPb.C:119
 readQAPbPb.C:120
 readQAPbPb.C:121
 readQAPbPb.C:122
 readQAPbPb.C:123
 readQAPbPb.C:124
 readQAPbPb.C:125
 readQAPbPb.C:126
 readQAPbPb.C:127
 readQAPbPb.C:128
 readQAPbPb.C:129
 readQAPbPb.C:130
 readQAPbPb.C:131
 readQAPbPb.C:132
 readQAPbPb.C:133
 readQAPbPb.C:134
 readQAPbPb.C:135
 readQAPbPb.C:136
 readQAPbPb.C:137
 readQAPbPb.C:138
 readQAPbPb.C:139
 readQAPbPb.C:140
 readQAPbPb.C:141
 readQAPbPb.C:142
 readQAPbPb.C:143
 readQAPbPb.C:144
 readQAPbPb.C:145
 readQAPbPb.C:146
 readQAPbPb.C:147
 readQAPbPb.C:148
 readQAPbPb.C:149
 readQAPbPb.C:150
 readQAPbPb.C:151
 readQAPbPb.C:152
 readQAPbPb.C:153
 readQAPbPb.C:154
 readQAPbPb.C:155
 readQAPbPb.C:156
 readQAPbPb.C:157
 readQAPbPb.C:158
 readQAPbPb.C:159
 readQAPbPb.C:160
 readQAPbPb.C:161
 readQAPbPb.C:162
 readQAPbPb.C:163
 readQAPbPb.C:164
 readQAPbPb.C:165
 readQAPbPb.C:166
 readQAPbPb.C:167
 readQAPbPb.C:168
 readQAPbPb.C:169
 readQAPbPb.C:170
 readQAPbPb.C:171
 readQAPbPb.C:172
 readQAPbPb.C:173
 readQAPbPb.C:174
 readQAPbPb.C:175
 readQAPbPb.C:176
 readQAPbPb.C:177
 readQAPbPb.C:178
 readQAPbPb.C:179
 readQAPbPb.C:180
 readQAPbPb.C:181
 readQAPbPb.C:182
 readQAPbPb.C:183
 readQAPbPb.C:184
 readQAPbPb.C:185
 readQAPbPb.C:186
 readQAPbPb.C:187
 readQAPbPb.C:188
 readQAPbPb.C:189
 readQAPbPb.C:190
 readQAPbPb.C:191
 readQAPbPb.C:192
 readQAPbPb.C:193
 readQAPbPb.C:194
 readQAPbPb.C:195
 readQAPbPb.C:196
 readQAPbPb.C:197
 readQAPbPb.C:198
 readQAPbPb.C:199
 readQAPbPb.C:200
 readQAPbPb.C:201
 readQAPbPb.C:202
 readQAPbPb.C:203
 readQAPbPb.C:204
 readQAPbPb.C:205
 readQAPbPb.C:206
 readQAPbPb.C:207
 readQAPbPb.C:208
 readQAPbPb.C:209
 readQAPbPb.C:210
 readQAPbPb.C:211
 readQAPbPb.C:212
 readQAPbPb.C:213
 readQAPbPb.C:214
 readQAPbPb.C:215
 readQAPbPb.C:216
 readQAPbPb.C:217
 readQAPbPb.C:218
 readQAPbPb.C:219
 readQAPbPb.C:220
 readQAPbPb.C:221
 readQAPbPb.C:222
 readQAPbPb.C:223
 readQAPbPb.C:224
 readQAPbPb.C:225
 readQAPbPb.C:226
 readQAPbPb.C:227
 readQAPbPb.C:228
 readQAPbPb.C:229
 readQAPbPb.C:230
 readQAPbPb.C:231
 readQAPbPb.C:232
 readQAPbPb.C:233
 readQAPbPb.C:234
 readQAPbPb.C:235
 readQAPbPb.C:236
 readQAPbPb.C:237
 readQAPbPb.C:238
 readQAPbPb.C:239
 readQAPbPb.C:240
 readQAPbPb.C:241
 readQAPbPb.C:242
 readQAPbPb.C:243
 readQAPbPb.C:244
 readQAPbPb.C:245
 readQAPbPb.C:246
 readQAPbPb.C:247
 readQAPbPb.C:248
 readQAPbPb.C:249
 readQAPbPb.C:250
 readQAPbPb.C:251
 readQAPbPb.C:252
 readQAPbPb.C:253
 readQAPbPb.C:254
 readQAPbPb.C:255
 readQAPbPb.C:256
 readQAPbPb.C:257
 readQAPbPb.C:258
 readQAPbPb.C:259
 readQAPbPb.C:260
 readQAPbPb.C:261
 readQAPbPb.C:262
 readQAPbPb.C:263
 readQAPbPb.C:264
 readQAPbPb.C:265
 readQAPbPb.C:266
 readQAPbPb.C:267
 readQAPbPb.C:268
 readQAPbPb.C:269
 readQAPbPb.C:270
 readQAPbPb.C:271
 readQAPbPb.C:272
 readQAPbPb.C:273
 readQAPbPb.C:274
 readQAPbPb.C:275
 readQAPbPb.C:276
 readQAPbPb.C:277
 readQAPbPb.C:278
 readQAPbPb.C:279
 readQAPbPb.C:280
 readQAPbPb.C:281
 readQAPbPb.C:282
 readQAPbPb.C:283
 readQAPbPb.C:284
 readQAPbPb.C:285
 readQAPbPb.C:286
 readQAPbPb.C:287
 readQAPbPb.C:288
 readQAPbPb.C:289
 readQAPbPb.C:290
 readQAPbPb.C:291
 readQAPbPb.C:292
 readQAPbPb.C:293
 readQAPbPb.C:294
 readQAPbPb.C:295
 readQAPbPb.C:296
 readQAPbPb.C:297
 readQAPbPb.C:298
 readQAPbPb.C:299
 readQAPbPb.C:300
 readQAPbPb.C:301
 readQAPbPb.C:302
 readQAPbPb.C:303
 readQAPbPb.C:304
 readQAPbPb.C:305
 readQAPbPb.C:306
 readQAPbPb.C:307
 readQAPbPb.C:308
 readQAPbPb.C:309
 readQAPbPb.C:310
 readQAPbPb.C:311
 readQAPbPb.C:312
 readQAPbPb.C:313
 readQAPbPb.C:314
 readQAPbPb.C:315
 readQAPbPb.C:316
 readQAPbPb.C:317
 readQAPbPb.C:318
 readQAPbPb.C:319
 readQAPbPb.C:320
 readQAPbPb.C:321
 readQAPbPb.C:322
 readQAPbPb.C:323
 readQAPbPb.C:324
 readQAPbPb.C:325
 readQAPbPb.C:326
 readQAPbPb.C:327
 readQAPbPb.C:328
 readQAPbPb.C:329
 readQAPbPb.C:330
 readQAPbPb.C:331
 readQAPbPb.C:332
 readQAPbPb.C:333
 readQAPbPb.C:334
 readQAPbPb.C:335
 readQAPbPb.C:336
 readQAPbPb.C:337
 readQAPbPb.C:338
 readQAPbPb.C:339
 readQAPbPb.C:340
 readQAPbPb.C:341
 readQAPbPb.C:342
 readQAPbPb.C:343
 readQAPbPb.C:344
 readQAPbPb.C:345
 readQAPbPb.C:346
 readQAPbPb.C:347
 readQAPbPb.C:348
 readQAPbPb.C:349
 readQAPbPb.C:350
 readQAPbPb.C:351
 readQAPbPb.C:352
 readQAPbPb.C:353
 readQAPbPb.C:354
 readQAPbPb.C:355
 readQAPbPb.C:356
 readQAPbPb.C:357
 readQAPbPb.C:358
 readQAPbPb.C:359
 readQAPbPb.C:360
 readQAPbPb.C:361
 readQAPbPb.C:362
 readQAPbPb.C:363
 readQAPbPb.C:364
 readQAPbPb.C:365
 readQAPbPb.C:366
 readQAPbPb.C:367
 readQAPbPb.C:368
 readQAPbPb.C:369
 readQAPbPb.C:370
 readQAPbPb.C:371
 readQAPbPb.C:372
 readQAPbPb.C:373
 readQAPbPb.C:374
 readQAPbPb.C:375
 readQAPbPb.C:376
 readQAPbPb.C:377
 readQAPbPb.C:378
 readQAPbPb.C:379
 readQAPbPb.C:380
 readQAPbPb.C:381
 readQAPbPb.C:382
 readQAPbPb.C:383
 readQAPbPb.C:384
 readQAPbPb.C:385
 readQAPbPb.C:386
 readQAPbPb.C:387
 readQAPbPb.C:388
 readQAPbPb.C:389
 readQAPbPb.C:390
 readQAPbPb.C:391
 readQAPbPb.C:392
 readQAPbPb.C:393
 readQAPbPb.C:394
 readQAPbPb.C:395
 readQAPbPb.C:396
 readQAPbPb.C:397
 readQAPbPb.C:398
 readQAPbPb.C:399
 readQAPbPb.C:400
 readQAPbPb.C:401
 readQAPbPb.C:402
 readQAPbPb.C:403
 readQAPbPb.C:404
 readQAPbPb.C:405
 readQAPbPb.C:406
 readQAPbPb.C:407
 readQAPbPb.C:408
 readQAPbPb.C:409
 readQAPbPb.C:410
 readQAPbPb.C:411
 readQAPbPb.C:412
 readQAPbPb.C:413
 readQAPbPb.C:414
 readQAPbPb.C:415
 readQAPbPb.C:416
 readQAPbPb.C:417
 readQAPbPb.C:418
 readQAPbPb.C:419
 readQAPbPb.C:420
 readQAPbPb.C:421
 readQAPbPb.C:422
 readQAPbPb.C:423
 readQAPbPb.C:424
 readQAPbPb.C:425
 readQAPbPb.C:426
 readQAPbPb.C:427
 readQAPbPb.C:428
 readQAPbPb.C:429
 readQAPbPb.C:430
 readQAPbPb.C:431
 readQAPbPb.C:432
 readQAPbPb.C:433
 readQAPbPb.C:434
 readQAPbPb.C:435
 readQAPbPb.C:436
 readQAPbPb.C:437
 readQAPbPb.C:438
 readQAPbPb.C:439
 readQAPbPb.C:440
 readQAPbPb.C:441
 readQAPbPb.C:442
 readQAPbPb.C:443
 readQAPbPb.C:444
 readQAPbPb.C:445
 readQAPbPb.C:446
 readQAPbPb.C:447
 readQAPbPb.C:448
 readQAPbPb.C:449
 readQAPbPb.C:450
 readQAPbPb.C:451
 readQAPbPb.C:452
 readQAPbPb.C:453
 readQAPbPb.C:454
 readQAPbPb.C:455
 readQAPbPb.C:456
 readQAPbPb.C:457
 readQAPbPb.C:458
 readQAPbPb.C:459
 readQAPbPb.C:460
 readQAPbPb.C:461
 readQAPbPb.C:462
 readQAPbPb.C:463
 readQAPbPb.C:464
 readQAPbPb.C:465
 readQAPbPb.C:466
 readQAPbPb.C:467
 readQAPbPb.C:468
 readQAPbPb.C:469
 readQAPbPb.C:470
 readQAPbPb.C:471
 readQAPbPb.C:472
 readQAPbPb.C:473
 readQAPbPb.C:474
 readQAPbPb.C:475
 readQAPbPb.C:476
 readQAPbPb.C:477
 readQAPbPb.C:478
 readQAPbPb.C:479
 readQAPbPb.C:480
 readQAPbPb.C:481
 readQAPbPb.C:482
 readQAPbPb.C:483
 readQAPbPb.C:484
 readQAPbPb.C:485
 readQAPbPb.C:486
 readQAPbPb.C:487
 readQAPbPb.C:488
 readQAPbPb.C:489
 readQAPbPb.C:490
 readQAPbPb.C:491
 readQAPbPb.C:492
 readQAPbPb.C:493
 readQAPbPb.C:494
 readQAPbPb.C:495
 readQAPbPb.C:496
 readQAPbPb.C:497
 readQAPbPb.C:498
 readQAPbPb.C:499
 readQAPbPb.C:500
 readQAPbPb.C:501
 readQAPbPb.C:502
 readQAPbPb.C:503
 readQAPbPb.C:504
 readQAPbPb.C:505
 readQAPbPb.C:506
 readQAPbPb.C:507
 readQAPbPb.C:508
 readQAPbPb.C:509
 readQAPbPb.C:510
 readQAPbPb.C:511
 readQAPbPb.C:512
 readQAPbPb.C:513
 readQAPbPb.C:514
 readQAPbPb.C:515
 readQAPbPb.C:516
 readQAPbPb.C:517
 readQAPbPb.C:518
 readQAPbPb.C:519
 readQAPbPb.C:520
 readQAPbPb.C:521
 readQAPbPb.C:522
 readQAPbPb.C:523
 readQAPbPb.C:524
 readQAPbPb.C:525
 readQAPbPb.C:526
 readQAPbPb.C:527
 readQAPbPb.C:528
 readQAPbPb.C:529
 readQAPbPb.C:530
 readQAPbPb.C:531
 readQAPbPb.C:532
 readQAPbPb.C:533
 readQAPbPb.C:534
 readQAPbPb.C:535
 readQAPbPb.C:536
 readQAPbPb.C:537
 readQAPbPb.C:538
 readQAPbPb.C:539
 readQAPbPb.C:540
 readQAPbPb.C:541
 readQAPbPb.C:542
 readQAPbPb.C:543
 readQAPbPb.C:544
 readQAPbPb.C:545
 readQAPbPb.C:546
 readQAPbPb.C:547
 readQAPbPb.C:548
 readQAPbPb.C:549
 readQAPbPb.C:550
 readQAPbPb.C:551
 readQAPbPb.C:552
 readQAPbPb.C:553
 readQAPbPb.C:554
 readQAPbPb.C:555
 readQAPbPb.C:556
 readQAPbPb.C:557
 readQAPbPb.C:558
 readQAPbPb.C:559
 readQAPbPb.C:560
 readQAPbPb.C:561
 readQAPbPb.C:562
 readQAPbPb.C:563
 readQAPbPb.C:564
 readQAPbPb.C:565
 readQAPbPb.C:566
 readQAPbPb.C:567
 readQAPbPb.C:568
 readQAPbPb.C:569
 readQAPbPb.C:570
 readQAPbPb.C:571
 readQAPbPb.C:572
 readQAPbPb.C:573
 readQAPbPb.C:574
 readQAPbPb.C:575
 readQAPbPb.C:576
 readQAPbPb.C:577
 readQAPbPb.C:578
 readQAPbPb.C:579
 readQAPbPb.C:580
 readQAPbPb.C:581
 readQAPbPb.C:582
 readQAPbPb.C:583
 readQAPbPb.C:584
 readQAPbPb.C:585
 readQAPbPb.C:586
 readQAPbPb.C:587
 readQAPbPb.C:588
 readQAPbPb.C:589
 readQAPbPb.C:590
 readQAPbPb.C:591
 readQAPbPb.C:592
 readQAPbPb.C:593
 readQAPbPb.C:594
 readQAPbPb.C:595
 readQAPbPb.C:596
 readQAPbPb.C:597
 readQAPbPb.C:598
 readQAPbPb.C:599
 readQAPbPb.C:600
 readQAPbPb.C:601
 readQAPbPb.C:602
 readQAPbPb.C:603
 readQAPbPb.C:604
 readQAPbPb.C:605
 readQAPbPb.C:606
 readQAPbPb.C:607
 readQAPbPb.C:608
 readQAPbPb.C:609
 readQAPbPb.C:610
 readQAPbPb.C:611
 readQAPbPb.C:612
 readQAPbPb.C:613
 readQAPbPb.C:614
 readQAPbPb.C:615
 readQAPbPb.C:616
 readQAPbPb.C:617
 readQAPbPb.C:618
 readQAPbPb.C:619
 readQAPbPb.C:620
 readQAPbPb.C:621
 readQAPbPb.C:622
 readQAPbPb.C:623
 readQAPbPb.C:624
 readQAPbPb.C:625
 readQAPbPb.C:626
 readQAPbPb.C:627
 readQAPbPb.C:628
 readQAPbPb.C:629
 readQAPbPb.C:630
 readQAPbPb.C:631
 readQAPbPb.C:632
 readQAPbPb.C:633
 readQAPbPb.C:634
 readQAPbPb.C:635
 readQAPbPb.C:636
 readQAPbPb.C:637
 readQAPbPb.C:638
 readQAPbPb.C:639
 readQAPbPb.C:640
 readQAPbPb.C:641
 readQAPbPb.C:642
 readQAPbPb.C:643
 readQAPbPb.C:644
 readQAPbPb.C:645
 readQAPbPb.C:646
 readQAPbPb.C:647
 readQAPbPb.C:648
 readQAPbPb.C:649
 readQAPbPb.C:650
 readQAPbPb.C:651
 readQAPbPb.C:652
 readQAPbPb.C:653
 readQAPbPb.C:654
 readQAPbPb.C:655
 readQAPbPb.C:656
 readQAPbPb.C:657