ROOT logo
/*
  fbellini@cern.ch - last update on 09/09/2014
  Macro to run the TOF QA trending by accessing the std QA output, 
  to be mainly used with the automatic scripts to fill the QA repository.
  Launch with 
  aliroot -l -b -q "MakeTrendingTOFQA.C(\"${fullpath}/QAresults.root\", ${run}, ...) 
  The macro produces a file containing the tree of trending variables and the main plots.
  A feature that displays the plots in canvases must be enable when needed.
*/


Int_t MakeTrendingTOFQA(char * runlist,
			Int_t year=2010, 
			char *period="LHC10c", 
			char* pass="cpass1_pass4", 
			char* nameSuffix ="_barrel",
			Bool_t isMC=kFALSE,
			Int_t trainId=0, 
			Bool_t saveHisto=kTRUE,
			Bool_t includeStartTime=kTRUE,
			Bool_t drawAll=kTRUE)
{
  Int_t filesCounter=0; 
  if (!runlist) {
    printf("Invalid list of runs given as input: nothing done\n");
    return 1;
  }	
  Int_t runNumber;
  char infile[300]; 
  
  char trendFileName[100]; 
  //Define trending output
  if (trainId==0){
    sprintf(trendFileName,"treeTOFQA_%s_%s.root",period,pass);  
  } else {
    sprintf(trendFileName,"treeTOFQA_QA%i_%s_%s.root",trainId,period,pass);
  }
  TFile * trendFile=new TFile(trendFileName,"recreate");
  FILE * files = fopen(runlist, "r") ; 
  
  //create chain of treePostQA     
  Long64_t nentries=100000, firstentry=0; 
  TChain *chainTree = 0;
  chainTree=new TChain("trendTree");
  
  while (fscanf(files,"%d",&runNumber)==1 ){
    
    //get QAtrain output
    if (trainId==0){
      if (!isMC) sprintf(infile,"alien:///alice/data/%i/%s/000%d/%s/QAresults%s.root",year,period,runNumber,pass,nameSuffix);
      else sprintf(infile,"alien:///alice/sim/%i/%s/%d/QAresults%s.root",year,period,runNumber,nameSuffix);
    } else{
      if (!isMC) sprintf(infile,"alien:///alice/data/%i/%s/000%d/ESDs/%s/QA%i/QAresults%s.root",year,period,runNumber,pass,trainId,nameSuffix);
      else sprintf(infile,"alien:///alice/sim/%i/%s/%d/QA%i/QAresults%s.root",year,period,runNumber,trainId,nameSuffix);
    }
    Printf("============== Opening QA file(s) for run %i =======================\n",runNumber);
    
    //run post-analysis
    if (MakeTrendingTOFQAv2(infile,runNumber,isMC,drawAll,kTRUE,"raw://", saveHisto, includeStartTime)==0){
      filesCounter++;
    } else Printf("Post analysis not run on QA output %s", infile);
  }
  Printf(":::: Processed %i runs", filesCounter);
  return;  
}

//---------------------------------------------------------------------------------
Int_t MakeTrendingTOFQAv2(TString qafilename,       //full path of the QA output; set IsOnGrid to prepend "alien://"
			  Int_t runNumber,          // run number
			  Bool_t isMC=kFALSE,       //MC flag, to disable meaningless checks
			  Bool_t drawAll = kFALSE,  //enable display plots on canvas and save png
			  Bool_t IsOnGrid = kFALSE, //set to kTRUE to access files on the grid
			  TString ocdbStorage = "raw://",
			  Bool_t saveHisto=kTRUE, //set the default ocdb storage
			  Bool_t includeStartTime=kTRUE )
{
  // macro to generate tree with TOF QA trending variables
  // access qa PWGPP output files  
  if (!qafilename) {
    Printf("Error - Invalid input file");
    return 1;
  }

  /*set graphic style*/
  gStyle->SetCanvasColor(kWhite);
  gStyle->SetFrameFillColor(kWhite);
  gStyle->SetFrameBorderMode(0);
  gStyle->SetCanvasBorderMode(0);
  gStyle->SetTitleFillColor(kWhite);
  gStyle->SetTitleBorderSize(0)  ;
  gStyle->SetTitleFont(42);
  gStyle->SetTextFont(42);
  gStyle->SetStatColor(kWhite); 
  gStyle->SetStatBorderSize(1);
  TGaxis::SetMaxDigits(3);
  gStyle->SetOptStat(10);

  char defaultQAoutput[30]="QAresults.root";
  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());
  }
  
  //access histograms lists
  char tofQAdirName[15]="TOF";
  char genListName[15]="base_noPID";
  char t0ListName[15]="timeZero_noPID";
  char pidListName[15]="pid_noPID"; 
  char trdListName[15]="trd_noPID";
  char trgListName[15]="trigger_noPID";
  char PIDqaListName[6]="PIDqa";
  TDirectoryFile * tofQAdir=(TDirectoryFile*)fin->Get(tofQAdirName);
  TDirectoryFile * pidQAdir=(TDirectoryFile*)fin->Get(PIDqaListName);
  if (!tofQAdir) {
    Printf("ERROR: TOF QA directory not present in input file.\n");
    return -1;
  }
  TList * generalList=(TList*)tofQAdir->Get(genListName);
  TList  *timeZeroList=(TList*)tofQAdir->Get(t0ListName);
  TList  *pidList=(TList*)tofQAdir->Get(pidListName);
 
  if (!pidQAdir) {
    printf("WARNING: PIDqa histograms not available\n");
  } else {
    TList  *pidListT0=(TList*)pidQAdir->Get(PIDqaListName);
    TList  *tofPidListT0=(TList*)pidListT0->FindObject("TOF");
  }
  TList  *trdList=(TList*)tofQAdir->Get(trdListName);
  TList  *trgList=(TList*)tofQAdir->Get(trgListName);
  
  if (!generalList) Printf("WARNING: general QA histograms absent or not accessible\n");
  if (!timeZeroList) Printf("WARNING: timeZero QA histograms absent or not accessible\n");
  if (!pidList) Printf("WARNING: PID QA histograms absent or not accessible\n");
  if (!trdList) Printf("WARNING: QA histograms for TRD checks absent or not accessible\n");
  if (!trgList) Printf("WARNING: QA histograms for trigger absent or not accessible\n");
  
  if ( (!generalList) && (!timeZeroList) && (!pidList) ){
    printf("ERROR: no QA available \n");
    return -1;
  }
  
  Printf(":::: Getting post-analysis info for run %i",runNumber);
  TFile * trendFile = new TFile(treePostFileName.Data(),"recreate");

  Double_t avTime=-9999., peakTime=-9999., spreadTime=-9999., peakTimeErr=-9999., spreadTimeErr=-9999., negTimeRatio=-9999.,
    avRawTime=-9999., peakRawTime=-9999., spreadRawTime=-9999., peakRawTimeErr=-9999., spreadRawTimeErr=-9999., avTot=-9999., peakTot=-9999.,spreadTot=-9999.,  peakTotErr=-9999.,spreadTotErr=-9999.,
    orphansRatio=-9999., avL=-9999., negLratio=-9999.,
    effPt1=-9999., effPt2=-9999., matchEffLinFit1Gev=-9999.,matchEffLinFit1GevErr=-9999.;
  
  Double_t avPiDiffTime=-9999.,peakPiDiffTime=-9999., spreadPiDiffTime=-9999.,peakPiDiffTimeErr=-9999., spreadPiDiffTimeErr=-9999.;
  
  Double_t avT0A=-9999.,peakT0A=-9999., spreadT0A=-9999.,peakT0AErr=-9999., spreadT0AErr=-9999.;
  Double_t avT0C=-9999.,peakT0C=-9999., spreadT0C=-9999.,peakT0CErr=-9999., spreadT0CErr=-9999.;
  Double_t avT0AC=-9999.,peakT0AC=-9999., spreadT0AC=-9999.,peakT0ACErr=-9999., spreadT0ACErr=-9999.;
  Double_t avT0res=-9999.,peakT0res=-9999., spreadT0res=-9999.,peakT0resErr=-9999., spreadT0resErr=-9999.;
  Double_t avT0fillRes=-9999.;

  Float_t avMulti=0;
  Float_t fractionEventsWHits=-9999.;
  /*number of good (HW ok && efficient && !noisy) TOF channels from OCDB*/
  Double_t goodChannelRatio=0.0;
  Double_t goodChannelRatioInAcc=0.0;

  TTree * ttree=new TTree("trending","tree of trending variables");
  ttree->Branch("run",&runNumber,"run/I");
  ttree->Branch("avMulti",&avMulti,"avMulti/F");
  ttree->Branch("fractionEventsWHits",&fractionEventsWHits,"fractionEventsWHits/F");
  ttree->Branch("goodChannelsRatio",&goodChannelRatio,"goodChannelRatio/D");
  ttree->Branch("goodChannelsRatioInAcc",&goodChannelRatioInAcc,"goodChannelRatioInAcc/D");
  ttree->Branch("avTime",&avTime,"avTime/D"); //mean time
  ttree->Branch("peakTime",&peakTime,"peakTime/D"); //main peak time after fit
  ttree->Branch("spreadTime",&spreadTime,"spreadTime/D"); //spread of main peak of time after fit
  ttree->Branch("peakTimeErr",&peakTimeErr,"peakTimeErr/D"); //main peak time after fit error
  ttree->Branch("spreadTimeErr",&spreadTimeErr,"spreadTimeErr/D"); //spread of main peak of time after fit error
  ttree->Branch("negTimeRatio",&negTimeRatio,"negTimeRatio/D"); //negative time ratio
  
  ttree->Branch("avRawTime",&avRawTime,"avRawTime/D"); //mean raw time
  ttree->Branch("peakRawTime",&peakRawTime,"peakRawTime/D"); //mean peak of RAW TIME after fit
  ttree->Branch("spreadRawTime",&spreadRawTime,"spreadRawTime/D"); //spread of main peak of raw time after fit
  ttree->Branch("peakRawTimeErr",&peakRawTimeErr,"peakRawTimeErr/D"); //main peak raw  time after fit error
  ttree->Branch("spreadRawTimeErr",&spreadRawTimeErr,"spreadRawTimeErr/D"); //spread of  raw main peak of time after fit error
  
  ttree->Branch("avTot",&avTot,"avTot/D"); //main peak tot
  ttree->Branch("peakTot",&peakTot,"peakTot/D"); // main peak of tot after fit
  ttree->Branch("spreadTot",&spreadTot,"spreadTot/D"); //spread of main peak of tot after fit
  ttree->Branch("peakTotErr",&peakTotErr,"peakTotErr/D"); // main peak of tot after fit
  ttree->Branch("spreadTotErr",&spreadTotErr,"spreadTotErr/D"); //spread of main peak of tot after fit
  
  ttree->Branch("orphansRatio",&orphansRatio,"orphansRatio/D"); //orphans ratio

  ttree->Branch("avL",&avL,"avL/D"); //mean track length
  ttree->Branch("negLratio",&negLratio,"negLratio/D");//ratio of tracks with track length <350 cm
  ttree->Branch("effPt1",&effPt1,"effPt1/D");//matching eff at 1 GeV/c
  ttree->Branch("effPt2",&effPt2,"effPt2/D"); //matching eff at 2 GeV/c
  ttree->Branch("matchEffLinFit1Gev",&matchEffLinFit1Gev,"matchEffLinFit1Gev/D");//matching eff fit param 
  ttree->Branch("matchEffLinFit1GevErr",&matchEffLinFit1GevErr,"matchEffLinFit1GevErr/D");////matching eff fit param error
  
  ttree->Branch("avPiDiffTime",&avPiDiffTime,"avPiDiffTime/D"); //mean t-texp
  ttree->Branch("peakPiDiffTime",&peakPiDiffTime,"peakPiDiffTime/D"); //main peak t-texp after fit
  ttree->Branch("spreadPiDiffTime",&spreadPiDiffTime,"spreadPiDiffTime/D"); //spread of main peak t-texp after fit
  ttree->Branch("peakPiDiffTimeErr",&peakPiDiffTimeErr,"peakPiDiffTimeErr/D"); //main peak t-texp after fit error
  ttree->Branch("spreadPiDiffTimeErr",&spreadPiDiffTimeErr,"spreadPiDiffTimeErr/D"); //spread of main peak of t-texp after fit error

  ttree->Branch("avT0A",&avT0A,"avT0A/D"); //main peak t0A
  ttree->Branch("peakT0A",&peakT0A,"peakT0A/D"); // main peak of t0A after fit
  ttree->Branch("spreadT0A",&spreadT0A,"spreadTot/D"); //spread of main peak of t0A after fit
  ttree->Branch("peakT0AErr",&peakT0AErr,"peakT0AErr/D"); // main peak of t0A after fit
  ttree->Branch("spreadT0AErr",&spreadT0AErr,"spreadT0AErr/D"); //spread of main peak of t0A after fit

  ttree->Branch("avT0C",&avT0C,"avT0C/D"); //main peak t0C
  ttree->Branch("peakT0C",&peakT0C,"peakT0C/D"); // main peak of t0C after fit
  ttree->Branch("spreadT0C",&spreadT0C,"spreadT0C/D"); //spread of main peak of t0C after fit
  ttree->Branch("peakT0CErr",&peakT0CErr,"peakT0CErr/D"); // main peak of t0C after fit
  ttree->Branch("spreadT0CErr",&spreadT0CErr,"spreadT0CErr/D"); //spread of main peak of t0C after fit
 
  ttree->Branch("avT0AC",&avT0AC,"avT0AC/D"); //main peak t0AC
  ttree->Branch("peakT0AC",&peakT0AC,"peakT0AC/D"); // main peak of t0AC after fit
  ttree->Branch("spreadT0AC",&spreadT0AC,"spreadT0AC/D"); //spread of main peak of t0AC after fit
  ttree->Branch("peakT0ACErr",&peakT0ACErr,"peakT0ACErr/D"); // main peak of t0AC after fit
  ttree->Branch("spreadT0ACErr",&spreadT0ACErr,"spreadT0ACErr/D"); //spread of main peak of t0AC after fit
 
  ttree->Branch("avT0res",&avT0res,"avT0res/D"); //main peak t0AC
  ttree->Branch("peakT0res",&peakT0res,"peakT0res/D"); // main peak of t0AC after fit
  ttree->Branch("spreadT0res",&spreadT0res,"spreadT0res/D"); //spread of main peak of t0AC after fit
  ttree->Branch("peakT0resErr",&peakT0resErr,"peakT0resErr/D"); // main peak of t0AC after fit
  ttree->Branch("spreadT0resErr",&spreadT0resErr,"spreadT0resErr/D"); //spread of main peak of t0AC after fit
  ttree->Branch("avT0fillRes",&avT0fillRes,"avT0fillRes/D"); //t0 fill res

  //save quantities for trending
  goodChannelRatio=(Double_t)GetGoodTOFChannelsRatio(runNumber, kFALSE, ocdbStorage, kFALSE);
  goodChannelRatioInAcc=(Double_t)GetGoodTOFChannelsRatio(runNumber, kFALSE, ocdbStorage, kTRUE);
	
  //--------------------------------- Multiplicity ----------------------------------//

  TH1F * hMulti = (TH1F*) generalList->FindObject("hTOFmulti_all");
  TH1F* hFractionEventsWhits = new TH1F("hFractionEventsWhits","hFractionEventsWhits;fraction of events with hits (%)",200,0.,100.);
  Float_t fraction=0.0;
  if (hMulti->GetEntries()>0.0) {
    fraction = ((Float_t) hMulti->GetBinContent(1))/((Float_t) hMulti->GetEntries());
    avMulti = hMulti->GetMean();
  } else { fraction=0.0; }
  hFractionEventsWhits->Fill(fraction*100.);
  
  //--------------------------------- T0F signal ----------------------------------//
  TH1F * hRawTime = (TH1F*)generalList->FindObject("hRawTime_all");
  if ((hRawTime)&&(hRawTime->GetEntries()>0)){
    avRawTime=hRawTime->GetMean();
    if (!isMC){
      hRawTime->Fit("landau","RQ0","",200.,250.);
      if (hRawTime->GetFunction("landau")) {
	peakRawTime=(hRawTime->GetFunction("landau"))->GetParameter(1);
	spreadRawTime=(hRawTime->GetFunction("landau"))->GetParameter(2);
	peakRawTimeErr=(hRawTime->GetFunction("landau"))->GetParError(1);
	spreadRawTimeErr=(hRawTime->GetFunction("landau"))->GetParError(2);
      }
    } else {
      printf("Reminder: Raw time not available in MC simulated data.");
    }
  }
  MakeUpHisto(hRawTime, "matched tracks", 21, kGreen+2);
  
  TH1F * hTime = (TH1F*)generalList->FindObject("hTime_all");
  if ((hTime)&&(hTime->GetEntries()>0)) {
    avTime=hTime->GetMean();
    hTime->Fit("landau","RQ0","",0.,50.);
    if (hTime->GetFunction("landau")) {
      peakTime=(hTime->GetFunction("landau"))->GetParameter(1);
      spreadTime=(hTime->GetFunction("landau"))->GetParameter(2);
      peakTimeErr=(hTime->GetFunction("landau"))->GetParError(1);
      spreadTimeErr=(hTime->GetFunction("landau"))->GetParError(2);
      negTimeRatio=((Double_t)hTime->Integral(1,3)*100.)/((Double_t)hTime->Integral());
    }
    MakeUpHisto(hTime, "matched tracks", 20, kBlue+2);
    
    TLegend *lTime = new TLegend(0.7125881,0.6052519,0.979435,0.7408306,NULL,"brNDC");
    lTime->SetTextSize(0.04281433);
    lTime->AddEntry(hRawTime, "raw","L");
    lTime->AddEntry(hTime, "ESD","L"); 
    lTime->SetFillColor(kWhite);
    lTime->SetShadowColor(0);
  }
      
  TH1F * hTot = (TH1F*)generalList->FindObject("hTot_all");
  if ((hTot)&&(hTot->GetEntries()>0)){
    avTot=hTot->GetMean();
    hTot->Fit("gaus","","",0.,50.);
    if (hTot->GetFunction("gaus")) {
      peakTot=(hTot->GetFunction("gaus"))->GetParameter(1);
      spreadTot=(hTot->GetFunction("gaus"))->GetParameter(2);
      peakTotErr=(hTot->GetFunction("gaus"))->GetParError(1);
      spreadTotErr=(hTot->GetFunction("gaus"))->GetParError(2);
    }
  }      
  MakeUpHisto(hTot, "matched tracks", 8, kViolet-3);
  
  char orphansTxt[200];
  if (hTot->GetEntries()>1){
    orphansRatio=((Float_t) hTot->GetBinContent(1))/((Float_t) hTot->GetEntries()) ;
  }
  sprintf(orphansTxt,"orphans/matched = %4.2f%%",orphansRatio*100.);
  TPaveText *tOrphans = new TPaveText(0.38,0.63,0.88,0.7, "NDC");
  tOrphans->SetBorderSize(0);
  tOrphans->SetTextSize(0.045);
  tOrphans->SetFillColor(0); //white background
  tOrphans->SetTextAlign(12);
  tOrphans->SetTextColor(kViolet-3);
  tOrphans->AddText(orphansTxt);
  
  TH1F * hL=(TH1F*)generalList->FindObject("hMatchedL_all");
  char negLengthTxt[200];
  if (hL->GetEntries()>0){
    avL=hL->GetMean();
    negLratio=(hL->Integral(1,750))/((Float_t) hL->GetEntries()) ;
  }
  MakeUpHisto(hL, "matched tracks", 1, kBlue+2);
  sprintf(negLengthTxt,"trk with L<350cm /matched = %4.2f%%", negLratio*100.);
  TPaveText *tLength = new TPaveText(0.15,0.83,0.65,0.87, "NDC");
  tLength->SetBorderSize(0);
  tLength->SetTextSize(0.04);
  tLength->SetFillColor(0); //white background
  tLength->SetTextAlign(11);
  tLength->SetTextColor(kOrange-3);
  tLength->AddText(negLengthTxt);

  //--------------------------------- residuals -------------------------------------//
  TH2F* hDxPos4profile = (TH2F*) generalList->FindObject("hMatchedDxVsPt_all");
  TH2F* hTOFmatchedDzVsStrip = (TH2F*)generalList->FindObject("hMatchedDzVsStrip_all");
 
  //--------------------------------- matching eff ----------------------------------//
  //matching as function of pT
  TH1F * hMatchingVsPt = new TH1F("hMatchingVsPt","Matching probability vs. Pt; Pt(GeV/c); matching probability", 50, 0., 5. );
  TH1F * hDenom = (TH1F*)generalList->FindObject("hPrimaryPt_all"); 
  if (hDenom) {  
    hDenom->Sumw2();
    hMatchingVsPt=(TH1F*) generalList->FindObject("hMatchedPt_all")->Clone(); 
    hMatchingVsPt->Sumw2();
    // hMatchingVsPt->Rebin(5);
    // hDenom->Rebin(5);
    hMatchingVsPt->Divide(hDenom);
    hMatchingVsPt->GetYaxis()->SetTitle("matching efficiency");
    hMatchingVsPt->SetTitle("TOF matching efficiency as function of transverse momentum");
    hMatchingVsPt->GetYaxis()->SetRangeUser(0,1.2); 
  }
  
  if (hMatchingVsPt->GetEntries()>0){
    hMatchingVsPt->Fit("pol0","","",1.0,10.);
    hMatchingVsPt->Draw();
    if (hMatchingVsPt->GetFunction("pol0")){
      matchEffLinFit1Gev=(hMatchingVsPt->GetFunction("pol0"))->GetParameter(0);
      matchEffLinFit1GevErr=(hMatchingVsPt->GetFunction("pol0"))->GetParError(0);	
      //printf("Matching efficiency fit param is %f +- %f\n",matchEffLinFit1Gev,matchEffLinFit1GevErr );
    }
  } else {
    printf("WARNING: matching efficiency plot has 0 entries. Skipped!\n");
  }
  MakeUpHisto(hMatchingVsPt, "efficiency", 1, kBlue+2);
  
  //matching as function of eta
  TH1F * hMatchingVsEta = new TH1F("hMatchingVsEta","Matching probability vs. #\Eta; #\Eta; matching probability", 20, -1., 1.);
  hDenom->Clear();
  hDenom=(TH1F*)generalList->FindObject("hPrimaryEta_all"); 
  if (hDenom) {  
    hDenom->Sumw2();
    hMatchingVsEta=(TH1F*) generalList->FindObject("hMatchedEta_all")->Clone(); 
    hMatchingVsEta->Sumw2();
      // hMatchingVsEta->Rebin(5);
    // hDenom->Rebin(5);
    hMatchingVsEta->Divide(hDenom);
    hMatchingVsEta->GetXaxis()->SetRangeUser(-1,1);
    hMatchingVsEta->GetYaxis()->SetTitle("matching efficiency");
    hMatchingVsEta->GetYaxis()->SetRangeUser(0,1.2);
    hMatchingVsEta->SetTitle("TOF matching efficiency as function of pseudorapidity");
  }
  MakeUpHisto(hMatchingVsEta, "efficiency", 1, kBlue+2);
  
  //matching as function of phi
  TH1F * hMatchingVsPhi = new TH1F("hMatchingVsPhi","Matching probability vs. Phi; Phi(rad); matching probability", 628, 0., 6.28);
  hDenom->Clear();
  hDenom=(TH1F*)generalList->FindObject("hPrimaryPhi_all");  
  if (hDenom) {  
    hDenom->Sumw2();
    hMatchingVsPhi=(TH1F*) generalList->FindObject("hMatchedPhi_all")->Clone(); 
    // hMatchingVsPhi->Rebin(2);
    // hDenom->Rebin(2);    
    hMatchingVsPhi->Sumw2();
    hMatchingVsPhi->Divide(hDenom);
    hMatchingVsPhi->GetYaxis()->SetTitle("matching efficiency");
    hMatchingVsPhi->SetTitle("TOF matching efficiency as function of phi");
    hMatchingVsPhi->GetYaxis()->SetRangeUser(0,1.2);
  }
  MakeUpHisto(hMatchingVsPhi, "efficiency", 1, kBlue+2);

   if (saveHisto) {
    trendFile->cd();
    hMulti->Write();
    hTime->Write();
    hRawTime->Write();
    hTot->Write();
    hL->Write();
    hDxPos4profile->Write();
    hTOFmatchedDzVsStrip->Write();
    hMatchingVsPt->Write();
    hMatchingVsEta->Write();
    hMatchingVsPhi->Write();
  }  

  

  //--------------------------------- t-texp ----------------------------------//
  TH2F * hBetaP=(TH2F*)pidList->FindObject("hMatchedBetaVsP_all");
  if (hBetaP) hBetaP->GetYaxis()->SetRangeUser(0.,1.2);
  
  TH1F * hMass=(TH1F*)pidList->FindObject("hMatchedMass_all");
  MakeUpHisto(hMass, "tracks", 1, kBlue+2);
  // hMass->SetFillColor(kAzure+10);
  // hMass->SetFillStyle(1001);
  hMass->Rebin(2);
  
  //pions
  TH1F * hPionDiff=(TH1F*)pidList->FindObject("hExpTimePi_all"); 
  if ((hPionDiff)&&(hPionDiff->GetEntries()>0)) {
    avPiDiffTime=hPionDiff->GetMean();
    hPionDiff->Fit("gaus","","",-1000.,500.);
    if (hPionDiff->GetFunction("gaus")){
      peakPiDiffTime=(hPionDiff->GetFunction("gaus"))->GetParameter(1);
      spreadPiDiffTime=(hPionDiff->GetFunction("gaus"))->GetParameter(2);
      peakPiDiffTimeErr=(hPionDiff->GetFunction("gaus"))->GetParError(1);
      spreadPiDiffTimeErr=(hPionDiff->GetFunction("gaus"))->GetParError(2);
      // printf("Main peak t-t_exp (gaus): mean = %f +- %f\n",peakPiDiffTime,peakPiDiffTimeErr );
      // printf("Main peak t-t_exp (gaus): spread = %f +- %f\n",spreadPiDiffTime,spreadPiDiffTimeErr );
    }
  }
 
  TH1F * hDiffTimeT0fillPion=(TH1F*)pidList->FindObject("hExpTimePiFillSub_all"); 
  TH1F * hDiffTimeT0TOFPion1GeV=(TH1F*)pidList->FindObject("hExpTimePiT0Sub1GeV_all");  
  TH2F * hDiffTimePi=(TH2F*)pidList->FindObject("hExpTimePiVsP_all"); 
  hDiffTimePi->SetTitle("PIONS t-t_{exp,#pi} (from tracking) vs. P");
  hDiffTimePi->GetYaxis()->SetRangeUser(-5000.,5000.);

  //Kaon
  TH2F * hDiffTimeKa=(TH2F*)pidList->FindObject("hExpTimeKaVsP_all");  
  hDiffTimeKa->SetTitle("KAONS t-t_{exp,K} (from tracking) vs. P");
  hDiffTimeKa->GetYaxis()->SetRangeUser(-5000.,5000.);

  //Protons
  TH2F * hDiffTimePro=(TH2F*)pidList->FindObject("hExpTimeProVsP_all"); 
  hDiffTimePro->SetTitle("PROTONS t-t_{exp,p} (from tracking) vs. P");
  hDiffTimePro->GetYaxis()->SetRangeUser(-5000.,5000.);
  
  if (saveHisto) {
    trendFile->cd();
    hBetaP->Write();
    hMass->Write();
    hPionDiff->Write();
    hDiffTimeT0fillPion->Write();
    hDiffTimeT0TOFPion1GeV->Write();
    hDiffTimePi->Write();
    hDiffTimeKa->Write();
    hDiffTimePro->Write();
  }

  //--------------------------------- NSigma PID from TOF QA ----------------------------------//
  TH2F * hSigmaPi=(TH2F*)pidList->FindObject("hTOFpidSigmaPi_all"); 
  hSigmaPi->GetYaxis()->SetRangeUser(-5.,5.);
  hSigmaPi->GetXaxis()->SetRangeUser(0.2,10.);
  hSigmaPi->FitSlicesY();
  TH1D * hSigmaPi_1 = (TH1D*)gDirectory->Get("hTOFpidSigmaPi_all_1");
  TH1D * hSigmaPi_2 = (TH1D*)gDirectory->Get("hTOFpidSigmaPi_all_2");
  //hSigmaPiT0->SetName("hSigmaPiT0");
  hSigmaPi_1->SetLineColor(1);
  hSigmaPi_1->SetLineWidth(2);
  hSigmaPi_2->SetLineColor(2);
  hSigmaPi_2->SetLineWidth(2);

  TH2F * hSigmaKa=(TH2F*)pidList->FindObject("hTOFpidSigmaKa_all"); 
  hSigmaKa->GetYaxis()->SetRangeUser(-5.,5.);
  hSigmaKa->GetXaxis()->SetRangeUser(0.2,10.);
  hSigmaKa->FitSlicesY();
  TH1D * hSigmaKa_1 = (TH1D*)gDirectory->Get("hTOFpidSigmaKa_all_1");
  TH1D * hSigmaKa_2 = (TH1D*)gDirectory->Get("hTOFpidSigmaKa_all_2");
  //hSigmaKaT0->SetName("hSigmaKaT0");
  hSigmaKa_1->SetLineColor(1);
  hSigmaKa_1->SetLineWidth(2);
  hSigmaKa_2->SetLineColor(2);
  hSigmaKa_2->SetLineWidth(2);

  TH2F * hSigmaPro=(TH2F*)pidList->FindObject("hTOFpidSigmaPro_all"); 
  hSigmaPro->GetYaxis()->SetRangeUser(-5.,5.);
  hSigmaPro->GetXaxis()->SetRangeUser(0.2,10.);
  hSigmaPro->FitSlicesY();
  TH1D * hSigmaPro_1 = (TH1D*)gDirectory->Get("hTOFpidSigmaPro_all_1");
  TH1D * hSigmaPro_2 = (TH1D*)gDirectory->Get("hTOFpidSigmaPro_all_2");
  //hSigmaProT0->SetName("hSigmaProT0");
  hSigmaPro_1->SetLineColor(1);
  hSigmaPro_1->SetLineWidth(2);
  hSigmaPro_2->SetLineColor(2);
  hSigmaPro_2->SetLineWidth(2);

  TString plotDir(".");
  if (drawAll){
    TCanvas *cPidPerformance3= new TCanvas("cPidPerformance3","summary of pid performance - sigmas",1200,500);
    cPidPerformance3->Divide(3,1);
    cPidPerformance3->cd(1);
    gPad->SetLogz();
    gPad->SetLogx();
    gPad->SetGridx();
    gPad->SetGridy();
    hSigmaPi->Draw("colz");
    hSigmaPi_1->Draw("same");
    hSigmaPi_2->Draw("same");
    cPidPerformance3->cd(2);
    gPad->SetLogz();
    gPad->SetLogx();
    hSigmaKa->Draw("colz");
    hSigmaKa_1->Draw("same");
    hSigmaKa_2->Draw("same");
    cPidPerformance3->cd(3);
    gPad->SetLogz();
    gPad->SetLogx();
    hSigmaPro->Draw("colz");
    hSigmaPro_1->Draw("same");
    hSigmaPro_2->Draw("same");

    cPidPerformance3->Print(Form("%s/%i_PID_sigmas.png", plotDir.Data(), runNumber));

    if (saveHisto){
      hSigmaPi->Write();
      hSigmaKa->Write();
      hSigmaPro->Write();
    }
  } 
 //--------------------------------- NSigma PID from PIDqa ----------------------------------//
  TH2F * hSigmaPiT0 = 0x0;
  TH2F * hSigmaKaT0 = 0x0;
  TH2F * hSigmaProT0 = 0x0;
  if(includeStartTime && pidQAdir){
    //Pions pid
    hSigmaPiT0=(TH2F*)tofPidListT0->FindObject("hNsigmaP_TOF_pion");
    hSigmaPiT0->GetYaxis()->SetRangeUser(-5.,5.);
    hSigmaPiT0->GetXaxis()->SetRangeUser(0.2,10.);
    hSigmaPiT0->FitSlicesY();
    
    TH1D * hSigmaPiT0_1 = (TH1D*)gDirectory->Get("hNsigmaP_TOF_pion_1");
    TH1D * hSigmaPiT0_2 = (TH1D*)gDirectory->Get("hNsigmaP_TOF_pion_2");
    //hSigmaPiT0->SetName("hSigmaPiT0");
    hSigmaPiT0_1->SetLineColor(1);
    hSigmaPiT0_1->SetLineWidth(2);
    hSigmaPiT0_2->SetLineColor(2);
    hSigmaPiT0_2->SetLineWidth(2);
    
    //Kaons pid
    hSigmaKaT0=(TH2F*)tofPidListT0->FindObject("hNsigmaP_TOF_kaon");
    hSigmaKaT0->GetYaxis()->SetRangeUser(-5.,5.);
    hSigmaKaT0->GetXaxis()->SetRangeUser(0.2,10.);
    hSigmaKaT0->FitSlicesY();
    TH1D * hSigmaKaT0_1 = (TH1D*)gDirectory->Get("hNsigmaP_TOF_kaon_1");
    TH1D * hSigmaKaT0_2 = (TH1D*)gDirectory->Get("hNsigmaP_TOF_kaon_2");
    hSigmaKaT0_1->SetLineColor(1);
    hSigmaKaT0_1->SetLineWidth(2);
    hSigmaKaT0_2->SetLineColor(2);
    hSigmaKaT0_2->SetLineWidth(2);

    //protons pid
    hSigmaProT0 = (TH2F*)tofPidListT0->FindObject("hNsigmaP_TOF_proton");
    hSigmaProT0->GetYaxis()->SetRangeUser(-5.,5.);
    hSigmaProT0->GetXaxis()->SetRangeUser(0.2,10.);
    hSigmaProT0->FitSlicesY();
    TH1D * hSigmaProT0_1 = (TH1D*)gDirectory->Get("hNsigmaP_TOF_proton_1");
    TH1D * hSigmaProT0_2 = (TH1D*)gDirectory->Get("hNsigmaP_TOF_proton_2");
    hSigmaProT0_1->SetLineColor(1);
    hSigmaProT0_1->SetLineWidth(2);
    hSigmaProT0_2->SetLineColor(2);
    hSigmaProT0_2->SetLineWidth(2);

    if (drawAll){
      TLine *l1=new TLine(0.,0.,5.,0.);
      TLine *l2=new TLine(0.,1.,5.,1.);
      TCanvas *cPidPerformance3T0 = new TCanvas("cPidPerformance3T0","PID performance from PIDqa - sigmas - with StartTime",1200,500);   
      cPidPerformance3T0->Divide(3,1);
      cPidPerformance3T0->cd(1);
      gPad->SetLogz();
      gPad->SetLogx();
      gPad->SetGridx();
      gPad->SetGridy();
      hSigmaPiT0->Draw("colz");
      hSigmaPiT0_1->Draw("same");
      hSigmaPiT0_2->Draw("same");
      l1->Draw("same");
      l2->Draw("same");
      cPidPerformance3T0->cd(2);
      gPad->SetLogz();
      gPad->SetLogx();
      gPad->SetGridx();
      gPad->SetGridy();
      hSigmaKaT0->Draw("colz");
      hSigmaKaT0_1->Draw("same");
      hSigmaKaT0_2->Draw("same");
      l1->Draw("same");
      l2->Draw("same");
      cPidPerformance3T0->cd(3);
      gPad->SetLogz();
      gPad->SetLogx();
      gPad->SetGridx();
      gPad->SetGridy();
      hSigmaProT0->Draw("colz");
      hSigmaProT0_1->Draw("same");
      hSigmaProT0_2->Draw("same");
      l1->Draw("same");
      l2->Draw("same");
      cPidPerformance3T0->Print(Form("%s/%i_PID_sigmasStartTime.png", plotDir.Data(), runNumber));
    }
    if (saveHisto) {
      trendFile->cd();
      hSigmaPiT0->Write();
      hSigmaKaT0->Write();
      hSigmaProT0->Write();
      hSigmaPiT0_1->Write();
      hSigmaKaT0_1->Write();
      hSigmaProT0_1->Write();
      hSigmaPiT0_2->Write();
      hSigmaKaT0_2->Write();
      hSigmaProT0_2->Write();
    }
  }

   //--------------------------------- T0 detector ----------------------------------//
   
  TH1F*hT0A=(TH1F*)timeZeroList->FindObject("hT0A");
  if ((hT0A)&&(hT0A->GetEntries()>0)) {
    avT0A = hT0A->GetMean();
    hT0A->Fit("gaus","RQ0", "", -1000., 1000.);
    if (hT0A->GetFunction("gaus")) {
      peakT0A=(hT0A->GetFunction("gaus"))->GetParameter(1);
      spreadT0A=(hT0A->GetFunction("gaus"))->GetParameter(2);
      peakT0AErr=(hT0A->GetFunction("gaus"))->GetParError(1);
      spreadT0AErr=(hT0A->GetFunction("gaus"))->GetParError(2);	
      // printf("Main peak T0A(gaus): mean = %f +- %f\n",peakT0A,peakT0AErr );
      // printf("Main peak T0A (gaus): spread = %f +- %f\n",spreadT0A,spreadT0AErr );
      //add integral of main peak over total
    }
  }
  MakeUpHisto(hT0A, "events", 8, kBlue);
  hT0A->Rebin(2);

  TH1F*hT0C=(TH1F*)timeZeroList->FindObject("hT0C");
  if ((hT0C)&&(hT0C->GetEntries()>0)) {
    avT0C=hT0C->GetMean();
    hT0C->Fit("gaus","RQ0","", -1000., 1000.);
    if (hT0C->GetFunction("gaus")) {
      peakT0C=(hT0C->GetFunction("gaus"))->GetParameter(1);
      spreadT0C=(hT0C->GetFunction("gaus"))->GetParameter(2);
      peakT0CErr=(hT0C->GetFunction("gaus"))->GetParError(1);
      spreadT0CErr=(hT0C->GetFunction("gaus"))->GetParError(2);	
      // printf("Main peak T0C(gaus): mean = %f +- %f\n",peakT0C,peakT0CErr );
      // printf("Main peak T0C (gaus): spread = %f +- %f\n",spreadT0C,spreadT0CErr );
      //add integral of main peak over total
    }
  }
  MakeUpHisto(hT0C, "events", 8, kGreen+1);
  hT0C->Rebin(2);
	
  TH1F*hT0AC=(TH1F*)timeZeroList->FindObject("hT0AC");
  if ((hT0AC)&&(hT0AC->GetEntries()>0)) {
    avT0AC=hT0AC->GetMean();
    hT0AC->Fit("gaus","RQ0", "",-1000., 1000.);
    if (hT0AC->GetFunction("gaus")) {
      peakT0AC=(hT0AC->GetFunction("gaus"))->GetParameter(1);
      spreadT0AC=(hT0AC->GetFunction("gaus"))->GetParameter(2);
      peakT0ACErr=(hT0AC->GetFunction("gaus"))->GetParError(1);
      spreadT0ACErr=(hT0AC->GetFunction("gaus"))->GetParError(2);	
      // printf("Main peak T0AC(gaus): mean = %f +- %f\n",peakT0AC,peakT0ACErr );
      // printf("Main peak T0AC (gaus): spread = %f +- %f\n",spreadT0AC,spreadT0ACErr );	 
    }
  }
  MakeUpHisto(hT0AC, "events", 8, kRed+1);
  hT0AC->Rebin(2);
  
  TLegend *lT0 = new TLegend(0.7125881,0.6052519,0.979435,0.7408306,NULL,"brNDC");
  lT0->SetTextSize(0.041);
  lT0->AddEntry(hT0AC, "T0 A&C","L");
  lT0->AddEntry(hT0A, "T0 A","L"); 
  lT0->AddEntry(hT0C, "T0 C","L");
  lT0->SetFillColor(kWhite);
  lT0->SetShadowColor(0);
  
  TH1F*hT0res=(TH1F*)timeZeroList->FindObject("hT0DetRes");
  if ((hT0res)&&(hT0res->GetEntries()>0)) {
    avT0res=hT0res->GetMean();
    hT0res->Fit("gaus");
    if (hT0res->GetFunction("gaus")) {
      peakT0res=(hT0res->GetFunction("gaus"))->GetParameter(1);
      spreadT0res=(hT0res->GetFunction("gaus"))->GetParameter(2);
      peakT0resErr=(hT0res->GetFunction("gaus"))->GetParError(1);
      spreadT0resErr=(hT0res->GetFunction("gaus"))->GetParError(2);	
      // printf("Main peak T0res(gaus): mean = %f +- %f\n",peakT0res,peakT0resErr );
      // printf("Main peak T0res (gaus): spread = %f +- %f\n",spreadT0res,spreadT0resErr );	 
    //add integral of main peak over total
    }
  }
  TH1F*hT0fillRes=(TH1F*)timeZeroList->FindObject("hT0fillRes");
  if ((hT0fillRes)&&(hT0fillRes->GetEntries()>0)) {
    avT0fillRes=hT0fillRes->GetMean();
  }
  
  if (saveHisto) {
    trendFile->cd(); 
    hT0AC->Write();
    hT0A->Write();
    hT0C->Write();
    hT0res->Write();
    hT0fillRes->Write();
  }	
  //Fill tree and save to file
  ttree->Fill();
  printf("==============  Saving trending quantities in tree for run %i ===============\n",runNumber);
  trendFile->cd();
  ttree->Write();
  trendFile->Close();
  
  if (drawAll){
    // TLegend * lSigmaPid=new TLegend(0.75,0.75,0.95,0.95,"#sigma_{PID}");
    // lSigmaPid->AddEntry(profSigmaPi,"#pi^{#pm}","l");
    // lSigmaPid->AddEntry(profSigmaKa,"K^{#pm}","l");
    // lSigmaPid->AddEntry(profSigmaPro,"p^{#pm}","l");

    // TString plotDir(Form("Plots_run%d",runNumber));
    // gSystem->Exec(Form("mkdir %s",plotDir.Data()));
    TCanvas *cTrackProperties= new TCanvas("cTrackProperties","summary of matched tracks properties", 1200, 500);
    cTrackProperties->Divide(3,1);
    cTrackProperties->cd(1);
    gPad->SetLogy();
    hTime->Draw("");
    hRawTime ->Draw("same");
    lTime->Draw();  
    cTrackProperties->cd(2);
    gPad->SetLogy();
    hTot->Draw("");
    tOrphans->Draw(); 
    cTrackProperties->cd(3);
    gPad->SetLogy();
    hL->Draw("");
    tLength->Draw(); 
    
    // TCanvas *cResiduals= new TCanvas("residuals","residuals", 900,500);
    // cResiduals->Divide(2,1);
    // cResiduals->cd(1);
    // gPad->SetLogz();
    // hDxPos4profile->GetYaxis()->SetRangeUser(-5.,5.);
    // hDxPos4profile->Draw("colz");
    // // profDxPos->SetLineColor(kRed);
    // // profDxPos->Draw("same");
    // cResiduals->cd(2);
    // gPad->SetLogz();
    // hDxNeg4profile->GetYaxis()->SetRangeUser(-5.,5.); 
    // hDxNeg4profile->Draw("colz");
    // // profDxNeg->SetLineColor(kBlue);
    // // profDxNeg->Draw("same"); 
   
    TCanvas* cProfile = new TCanvas("cProfile","cProfile",50,50, 750,550);
    cProfile->cd();
    gPad->SetLogz();
    hTOFmatchedDzVsStrip->Draw("colz");
    Int_t binmin = hTOFmatchedDzVsStrip->GetYaxis()->FindBin(-3);
    Int_t binmax = hTOFmatchedDzVsStrip->GetYaxis()->FindBin(3);
    TProfile* hDzProfile = (TProfile*)hTOFmatchedDzVsStrip->ProfileX("hDzProfile",binmin, binmax);
    hDzProfile->SetLineWidth(3);
    hDzProfile->Draw("same");
    
    TCanvas *cMatchingPerformance= new TCanvas("cMatchingPerformance","summary of matching performance",1200,500);
    cMatchingPerformance->Divide(3,1);
    cMatchingPerformance->cd(1);
    hMatchingVsPt->Draw();
    cMatchingPerformance->cd(2);
    hMatchingVsEta->Draw();
    cMatchingPerformance->cd(3);
    hMatchingVsPhi->Draw();
    
    TCanvas *cPidPerformance= new TCanvas("cPidPerformance","summary of pid performance", 900,500);
    cPidPerformance->Divide(2,1);
    cPidPerformance->cd(1);
    gPad->SetLogz();
    hBetaP->Draw("colz");   
    cPidPerformance->cd(2);
    gPad->SetLogy();
    hMass->Draw("HIST");

    TCanvas *cPidPerformance2= new TCanvas("cPidPerformance2","summary of pid performance - expected times", 1200, 500);
    cPidPerformance2->Divide(3,1);
    cPidPerformance2->cd(1);
    gPad->SetLogz();
    hDiffTimePi->Draw("colz");
    cPidPerformance2->cd(2);
    gPad->SetLogz();
    hDiffTimeKa->Draw("colz");
    cPidPerformance2->cd(3);
    gPad->SetLogz();
    hDiffTimePro->Draw("colz");

    TCanvas *cT0detector= new TCanvas("cT0detector","T0 detector",800,600);
    cT0detector->Divide(2,1);
    cT0detector->cd(1);
    gPad->SetGridx();
    hT0AC->Draw("");
    hT0AC->SetTitle("timeZero measured by T0 detector");
    hT0A ->Draw("same");
    hT0C ->Draw("same");
    lT0->Draw();  
    cT0detector->cd(2);
    hT0res->Draw();
    
    cTrackProperties->Print(Form("%s/%i_TrackProperties.png",plotDir.Data(), runNumber));
    cProfile->Print(Form("%s/%i_ProfileDZvsStripNumber.png",plotDir.Data(), runNumber));
    cMatchingPerformance->Print(Form("%s/%i_Matching.png",plotDir.Data(), runNumber));
    cPidPerformance->Print(Form("%s/%i_PID.png",plotDir.Data(), runNumber));
    cPidPerformance2->Print(Form("%s/%i_PID_ExpTimes.png",plotDir.Data(), runNumber));
    cT0detector->Print(Form("%s/%i_T0Detector.png",plotDir.Data(), runNumber));
    //cPidPerformanceTh->Print(Form("%s/PID_theoreticalTimes.png",plotDir.Data()));
    //cResiduals->Print(Form("%s/%i_Residuals.png",plotDir.Data(), runNumber));
  }

  return  0;
}


//----------------------------------------------------------
Double_t GetGoodTOFChannelsRatio(Int_t run = -1, Bool_t saveMap = kFALSE, TString OCDBstorage = "raw://", Bool_t inEta08 = kFALSE)
{
  /*
    It retrieves from OCDB the number of good (= efficient && not noisy && HW ok) TOF channels.
    Optionally is saves the channel map
  */
  if (run<=0) {
    printf("MakeTrendingTOFqa.C - ERROR in CheckCalibStatus(): invalid run number. Please set a run number.\n"); 
    return 0.0;
  }
  
  AliCDBManager *cdb = AliCDBManager::Instance();
  cdb->SetDefaultStorage(OCDBstorage.Data());
  cdb->SetRun(run);
  
  AliCDBEntry *cdbe = cdb->Get("TOF/Calib/Status");
  if (!cdbe) {
    printf("MakeTrendingTOFqa.C - ERROR in CheckCalibStatus(): OCDB entry not available. Please, try again.\n");
    return 0.0;
  }  

  AliTOFChannelOnlineStatusArray *array = (AliTOFChannelOnlineStatusArray *)cdbe->GetObject();
  TH2F *hOkMap = new TH2F("hOkMap", "Ok map (!noisy & !problematic & efficient);sector;strip", 72, 0., 18., 91, 0., 91.);
  TH2F *hOkMapInAcceptance = new TH2F("hOkMapInAcceptance",Form( "Good channels in |#eta|<0.8 - run %i;sector;strip",run), 72, 0., 18., 91, 0., 91.);
  AliTOFcalibHisto calibHisto;
  calibHisto.LoadCalibHisto();
  AliTOFcalib calib;
  calib.Init();
  Int_t sector, sectorStrip, padx, fea;
  Float_t hitmapx, hitmapy;
  for (Int_t i = 0; i <  array->GetSize(); i++) {
    sector = calibHisto.GetCalibMap(AliTOFcalibHisto::kSector, i);
    sectorStrip = calibHisto.GetCalibMap(AliTOFcalibHisto::kSectorStrip, i);
    padx = calibHisto.GetCalibMap(AliTOFcalibHisto::kPadX, i);
    fea = padx / 12;
    hitmapx = sector + ((Double_t)(3 - fea) + 0.5) / 4.;
    hitmapy = sectorStrip;
    if ( !(array->GetNoiseStatus(i) == AliTOFChannelOnlineStatusArray::kTOFNoiseBad)   &&
	 (calib.IsChannelEnabled(i,kTRUE,kTRUE))) {
      hOkMap->Fill(hitmapx,hitmapy);
      /* 3 strips / side excluded from norm. factor to consider |eta|<0.8 */
      if (sectorStrip>2 && sectorStrip<89) hOkMapInAcceptance->Fill(hitmapx,hitmapy);
    }
  }
  Int_t nOk = (Int_t) hOkMap->GetEntries();
  Int_t nOkInAcc = (Int_t) hOkMapInAcceptance->GetEntries();
  Double_t ratioOk = nOk/152928.;
  /* 96 channels * 6 strips * 18 modules excluded from norm. factor to consider |eta|<0.8 */
  Double_t ratioOkInAcc = nOkInAcc/(152928.-6.*18.*96.); 
  if (saveMap) {
    hOkMap->SaveAs(Form("run%i_OKChannelsMap.root",run));
    hOkMapInAcceptance->SaveAs(Form("run%i_OKChannelsInAccMap.root",run));
  }
  cout << "###    Run " << run << ": TOF channels ok = " << nOk << "/ total 152928 channels = " << ratioOk*100. << "% of whole TOF" << endl;
  cout << "###    Run " << run << ": TOF channels in acc. ok = " << nOkInAcc << "/ total 142560 channels = " << ratioOkInAcc*100. << "% of whole TOF" << endl;
  if (inEta08) 
    return ratioOkInAcc;
  else
    return ratioOk;

}

//----------------------------------------------------------
void MakeUpHisto(TH1* histo, TString titleY, Int_t marker=20, Color_t color=kBlue+2)
{
  if (!histo) return;
  histo->SetMarkerStyle(marker);
  histo->SetMarkerSize(0.7);
  histo->SetMarkerColor(color);
  histo->SetLineColor(color);
  histo->SetFillColor(kWhite);
  histo->SetFillStyle(0); 
  histo->GetYaxis()->SetTitle(titleY.Data());
  histo->GetYaxis()->SetTitleOffset(1.35);
  histo->GetXaxis()->SetLabelSize(0.03);
  
  return;
}
 MakeTrendingTOFQAv2.C:1
 MakeTrendingTOFQAv2.C:2
 MakeTrendingTOFQAv2.C:3
 MakeTrendingTOFQAv2.C:4
 MakeTrendingTOFQAv2.C:5
 MakeTrendingTOFQAv2.C:6
 MakeTrendingTOFQAv2.C:7
 MakeTrendingTOFQAv2.C:8
 MakeTrendingTOFQAv2.C:9
 MakeTrendingTOFQAv2.C:10
 MakeTrendingTOFQAv2.C:11
 MakeTrendingTOFQAv2.C:12
 MakeTrendingTOFQAv2.C:13
 MakeTrendingTOFQAv2.C:14
 MakeTrendingTOFQAv2.C:15
 MakeTrendingTOFQAv2.C:16
 MakeTrendingTOFQAv2.C:17
 MakeTrendingTOFQAv2.C:18
 MakeTrendingTOFQAv2.C:19
 MakeTrendingTOFQAv2.C:20
 MakeTrendingTOFQAv2.C:21
 MakeTrendingTOFQAv2.C:22
 MakeTrendingTOFQAv2.C:23
 MakeTrendingTOFQAv2.C:24
 MakeTrendingTOFQAv2.C:25
 MakeTrendingTOFQAv2.C:26
 MakeTrendingTOFQAv2.C:27
 MakeTrendingTOFQAv2.C:28
 MakeTrendingTOFQAv2.C:29
 MakeTrendingTOFQAv2.C:30
 MakeTrendingTOFQAv2.C:31
 MakeTrendingTOFQAv2.C:32
 MakeTrendingTOFQAv2.C:33
 MakeTrendingTOFQAv2.C:34
 MakeTrendingTOFQAv2.C:35
 MakeTrendingTOFQAv2.C:36
 MakeTrendingTOFQAv2.C:37
 MakeTrendingTOFQAv2.C:38
 MakeTrendingTOFQAv2.C:39
 MakeTrendingTOFQAv2.C:40
 MakeTrendingTOFQAv2.C:41
 MakeTrendingTOFQAv2.C:42
 MakeTrendingTOFQAv2.C:43
 MakeTrendingTOFQAv2.C:44
 MakeTrendingTOFQAv2.C:45
 MakeTrendingTOFQAv2.C:46
 MakeTrendingTOFQAv2.C:47
 MakeTrendingTOFQAv2.C:48
 MakeTrendingTOFQAv2.C:49
 MakeTrendingTOFQAv2.C:50
 MakeTrendingTOFQAv2.C:51
 MakeTrendingTOFQAv2.C:52
 MakeTrendingTOFQAv2.C:53
 MakeTrendingTOFQAv2.C:54
 MakeTrendingTOFQAv2.C:55
 MakeTrendingTOFQAv2.C:56
 MakeTrendingTOFQAv2.C:57
 MakeTrendingTOFQAv2.C:58
 MakeTrendingTOFQAv2.C:59
 MakeTrendingTOFQAv2.C:60
 MakeTrendingTOFQAv2.C:61
 MakeTrendingTOFQAv2.C:62
 MakeTrendingTOFQAv2.C:63
 MakeTrendingTOFQAv2.C:64
 MakeTrendingTOFQAv2.C:65
 MakeTrendingTOFQAv2.C:66
 MakeTrendingTOFQAv2.C:67
 MakeTrendingTOFQAv2.C:68
 MakeTrendingTOFQAv2.C:69
 MakeTrendingTOFQAv2.C:70
 MakeTrendingTOFQAv2.C:71
 MakeTrendingTOFQAv2.C:72
 MakeTrendingTOFQAv2.C:73
 MakeTrendingTOFQAv2.C:74
 MakeTrendingTOFQAv2.C:75
 MakeTrendingTOFQAv2.C:76
 MakeTrendingTOFQAv2.C:77
 MakeTrendingTOFQAv2.C:78
 MakeTrendingTOFQAv2.C:79
 MakeTrendingTOFQAv2.C:80
 MakeTrendingTOFQAv2.C:81
 MakeTrendingTOFQAv2.C:82
 MakeTrendingTOFQAv2.C:83
 MakeTrendingTOFQAv2.C:84
 MakeTrendingTOFQAv2.C:85
 MakeTrendingTOFQAv2.C:86
 MakeTrendingTOFQAv2.C:87
 MakeTrendingTOFQAv2.C:88
 MakeTrendingTOFQAv2.C:89
 MakeTrendingTOFQAv2.C:90
 MakeTrendingTOFQAv2.C:91
 MakeTrendingTOFQAv2.C:92
 MakeTrendingTOFQAv2.C:93
 MakeTrendingTOFQAv2.C:94
 MakeTrendingTOFQAv2.C:95
 MakeTrendingTOFQAv2.C:96
 MakeTrendingTOFQAv2.C:97
 MakeTrendingTOFQAv2.C:98
 MakeTrendingTOFQAv2.C:99
 MakeTrendingTOFQAv2.C:100
 MakeTrendingTOFQAv2.C:101
 MakeTrendingTOFQAv2.C:102
 MakeTrendingTOFQAv2.C:103
 MakeTrendingTOFQAv2.C:104
 MakeTrendingTOFQAv2.C:105
 MakeTrendingTOFQAv2.C:106
 MakeTrendingTOFQAv2.C:107
 MakeTrendingTOFQAv2.C:108
 MakeTrendingTOFQAv2.C:109
 MakeTrendingTOFQAv2.C:110
 MakeTrendingTOFQAv2.C:111
 MakeTrendingTOFQAv2.C:112
 MakeTrendingTOFQAv2.C:113
 MakeTrendingTOFQAv2.C:114
 MakeTrendingTOFQAv2.C:115
 MakeTrendingTOFQAv2.C:116
 MakeTrendingTOFQAv2.C:117
 MakeTrendingTOFQAv2.C:118
 MakeTrendingTOFQAv2.C:119
 MakeTrendingTOFQAv2.C:120
 MakeTrendingTOFQAv2.C:121
 MakeTrendingTOFQAv2.C:122
 MakeTrendingTOFQAv2.C:123
 MakeTrendingTOFQAv2.C:124
 MakeTrendingTOFQAv2.C:125
 MakeTrendingTOFQAv2.C:126
 MakeTrendingTOFQAv2.C:127
 MakeTrendingTOFQAv2.C:128
 MakeTrendingTOFQAv2.C:129
 MakeTrendingTOFQAv2.C:130
 MakeTrendingTOFQAv2.C:131
 MakeTrendingTOFQAv2.C:132
 MakeTrendingTOFQAv2.C:133
 MakeTrendingTOFQAv2.C:134
 MakeTrendingTOFQAv2.C:135
 MakeTrendingTOFQAv2.C:136
 MakeTrendingTOFQAv2.C:137
 MakeTrendingTOFQAv2.C:138
 MakeTrendingTOFQAv2.C:139
 MakeTrendingTOFQAv2.C:140
 MakeTrendingTOFQAv2.C:141
 MakeTrendingTOFQAv2.C:142
 MakeTrendingTOFQAv2.C:143
 MakeTrendingTOFQAv2.C:144
 MakeTrendingTOFQAv2.C:145
 MakeTrendingTOFQAv2.C:146
 MakeTrendingTOFQAv2.C:147
 MakeTrendingTOFQAv2.C:148
 MakeTrendingTOFQAv2.C:149
 MakeTrendingTOFQAv2.C:150
 MakeTrendingTOFQAv2.C:151
 MakeTrendingTOFQAv2.C:152
 MakeTrendingTOFQAv2.C:153
 MakeTrendingTOFQAv2.C:154
 MakeTrendingTOFQAv2.C:155
 MakeTrendingTOFQAv2.C:156
 MakeTrendingTOFQAv2.C:157
 MakeTrendingTOFQAv2.C:158
 MakeTrendingTOFQAv2.C:159
 MakeTrendingTOFQAv2.C:160
 MakeTrendingTOFQAv2.C:161
 MakeTrendingTOFQAv2.C:162
 MakeTrendingTOFQAv2.C:163
 MakeTrendingTOFQAv2.C:164
 MakeTrendingTOFQAv2.C:165
 MakeTrendingTOFQAv2.C:166
 MakeTrendingTOFQAv2.C:167
 MakeTrendingTOFQAv2.C:168
 MakeTrendingTOFQAv2.C:169
 MakeTrendingTOFQAv2.C:170
 MakeTrendingTOFQAv2.C:171
 MakeTrendingTOFQAv2.C:172
 MakeTrendingTOFQAv2.C:173
 MakeTrendingTOFQAv2.C:174
 MakeTrendingTOFQAv2.C:175
 MakeTrendingTOFQAv2.C:176
 MakeTrendingTOFQAv2.C:177
 MakeTrendingTOFQAv2.C:178
 MakeTrendingTOFQAv2.C:179
 MakeTrendingTOFQAv2.C:180
 MakeTrendingTOFQAv2.C:181
 MakeTrendingTOFQAv2.C:182
 MakeTrendingTOFQAv2.C:183
 MakeTrendingTOFQAv2.C:184
 MakeTrendingTOFQAv2.C:185
 MakeTrendingTOFQAv2.C:186
 MakeTrendingTOFQAv2.C:187
 MakeTrendingTOFQAv2.C:188
 MakeTrendingTOFQAv2.C:189
 MakeTrendingTOFQAv2.C:190
 MakeTrendingTOFQAv2.C:191
 MakeTrendingTOFQAv2.C:192
 MakeTrendingTOFQAv2.C:193
 MakeTrendingTOFQAv2.C:194
 MakeTrendingTOFQAv2.C:195
 MakeTrendingTOFQAv2.C:196
 MakeTrendingTOFQAv2.C:197
 MakeTrendingTOFQAv2.C:198
 MakeTrendingTOFQAv2.C:199
 MakeTrendingTOFQAv2.C:200
 MakeTrendingTOFQAv2.C:201
 MakeTrendingTOFQAv2.C:202
 MakeTrendingTOFQAv2.C:203
 MakeTrendingTOFQAv2.C:204
 MakeTrendingTOFQAv2.C:205
 MakeTrendingTOFQAv2.C:206
 MakeTrendingTOFQAv2.C:207
 MakeTrendingTOFQAv2.C:208
 MakeTrendingTOFQAv2.C:209
 MakeTrendingTOFQAv2.C:210
 MakeTrendingTOFQAv2.C:211
 MakeTrendingTOFQAv2.C:212
 MakeTrendingTOFQAv2.C:213
 MakeTrendingTOFQAv2.C:214
 MakeTrendingTOFQAv2.C:215
 MakeTrendingTOFQAv2.C:216
 MakeTrendingTOFQAv2.C:217
 MakeTrendingTOFQAv2.C:218
 MakeTrendingTOFQAv2.C:219
 MakeTrendingTOFQAv2.C:220
 MakeTrendingTOFQAv2.C:221
 MakeTrendingTOFQAv2.C:222
 MakeTrendingTOFQAv2.C:223
 MakeTrendingTOFQAv2.C:224
 MakeTrendingTOFQAv2.C:225
 MakeTrendingTOFQAv2.C:226
 MakeTrendingTOFQAv2.C:227
 MakeTrendingTOFQAv2.C:228
 MakeTrendingTOFQAv2.C:229
 MakeTrendingTOFQAv2.C:230
 MakeTrendingTOFQAv2.C:231
 MakeTrendingTOFQAv2.C:232
 MakeTrendingTOFQAv2.C:233
 MakeTrendingTOFQAv2.C:234
 MakeTrendingTOFQAv2.C:235
 MakeTrendingTOFQAv2.C:236
 MakeTrendingTOFQAv2.C:237
 MakeTrendingTOFQAv2.C:238
 MakeTrendingTOFQAv2.C:239
 MakeTrendingTOFQAv2.C:240
 MakeTrendingTOFQAv2.C:241
 MakeTrendingTOFQAv2.C:242
 MakeTrendingTOFQAv2.C:243
 MakeTrendingTOFQAv2.C:244
 MakeTrendingTOFQAv2.C:245
 MakeTrendingTOFQAv2.C:246
 MakeTrendingTOFQAv2.C:247
 MakeTrendingTOFQAv2.C:248
 MakeTrendingTOFQAv2.C:249
 MakeTrendingTOFQAv2.C:250
 MakeTrendingTOFQAv2.C:251
 MakeTrendingTOFQAv2.C:252
 MakeTrendingTOFQAv2.C:253
 MakeTrendingTOFQAv2.C:254
 MakeTrendingTOFQAv2.C:255
 MakeTrendingTOFQAv2.C:256
 MakeTrendingTOFQAv2.C:257
 MakeTrendingTOFQAv2.C:258
 MakeTrendingTOFQAv2.C:259
 MakeTrendingTOFQAv2.C:260
 MakeTrendingTOFQAv2.C:261
 MakeTrendingTOFQAv2.C:262
 MakeTrendingTOFQAv2.C:263
 MakeTrendingTOFQAv2.C:264
 MakeTrendingTOFQAv2.C:265
 MakeTrendingTOFQAv2.C:266
 MakeTrendingTOFQAv2.C:267
 MakeTrendingTOFQAv2.C:268
 MakeTrendingTOFQAv2.C:269
 MakeTrendingTOFQAv2.C:270
 MakeTrendingTOFQAv2.C:271
 MakeTrendingTOFQAv2.C:272
 MakeTrendingTOFQAv2.C:273
 MakeTrendingTOFQAv2.C:274
 MakeTrendingTOFQAv2.C:275
 MakeTrendingTOFQAv2.C:276
 MakeTrendingTOFQAv2.C:277
 MakeTrendingTOFQAv2.C:278
 MakeTrendingTOFQAv2.C:279
 MakeTrendingTOFQAv2.C:280
 MakeTrendingTOFQAv2.C:281
 MakeTrendingTOFQAv2.C:282
 MakeTrendingTOFQAv2.C:283
 MakeTrendingTOFQAv2.C:284
 MakeTrendingTOFQAv2.C:285
 MakeTrendingTOFQAv2.C:286
 MakeTrendingTOFQAv2.C:287
 MakeTrendingTOFQAv2.C:288
 MakeTrendingTOFQAv2.C:289
 MakeTrendingTOFQAv2.C:290
 MakeTrendingTOFQAv2.C:291
 MakeTrendingTOFQAv2.C:292
 MakeTrendingTOFQAv2.C:293
 MakeTrendingTOFQAv2.C:294
 MakeTrendingTOFQAv2.C:295
 MakeTrendingTOFQAv2.C:296
 MakeTrendingTOFQAv2.C:297
 MakeTrendingTOFQAv2.C:298
 MakeTrendingTOFQAv2.C:299
 MakeTrendingTOFQAv2.C:300
 MakeTrendingTOFQAv2.C:301
 MakeTrendingTOFQAv2.C:302
 MakeTrendingTOFQAv2.C:303
 MakeTrendingTOFQAv2.C:304
 MakeTrendingTOFQAv2.C:305
 MakeTrendingTOFQAv2.C:306
 MakeTrendingTOFQAv2.C:307
 MakeTrendingTOFQAv2.C:308
 MakeTrendingTOFQAv2.C:309
 MakeTrendingTOFQAv2.C:310
 MakeTrendingTOFQAv2.C:311
 MakeTrendingTOFQAv2.C:312
 MakeTrendingTOFQAv2.C:313
 MakeTrendingTOFQAv2.C:314
 MakeTrendingTOFQAv2.C:315
 MakeTrendingTOFQAv2.C:316
 MakeTrendingTOFQAv2.C:317
 MakeTrendingTOFQAv2.C:318
 MakeTrendingTOFQAv2.C:319
 MakeTrendingTOFQAv2.C:320
 MakeTrendingTOFQAv2.C:321
 MakeTrendingTOFQAv2.C:322
 MakeTrendingTOFQAv2.C:323
 MakeTrendingTOFQAv2.C:324
 MakeTrendingTOFQAv2.C:325
 MakeTrendingTOFQAv2.C:326
 MakeTrendingTOFQAv2.C:327
 MakeTrendingTOFQAv2.C:328
 MakeTrendingTOFQAv2.C:329
 MakeTrendingTOFQAv2.C:330
 MakeTrendingTOFQAv2.C:331
 MakeTrendingTOFQAv2.C:332
 MakeTrendingTOFQAv2.C:333
 MakeTrendingTOFQAv2.C:334
 MakeTrendingTOFQAv2.C:335
 MakeTrendingTOFQAv2.C:336
 MakeTrendingTOFQAv2.C:337
 MakeTrendingTOFQAv2.C:338
 MakeTrendingTOFQAv2.C:339
 MakeTrendingTOFQAv2.C:340
 MakeTrendingTOFQAv2.C:341
 MakeTrendingTOFQAv2.C:342
 MakeTrendingTOFQAv2.C:343
 MakeTrendingTOFQAv2.C:344
 MakeTrendingTOFQAv2.C:345
 MakeTrendingTOFQAv2.C:346
 MakeTrendingTOFQAv2.C:347
 MakeTrendingTOFQAv2.C:348
 MakeTrendingTOFQAv2.C:349
 MakeTrendingTOFQAv2.C:350
 MakeTrendingTOFQAv2.C:351
 MakeTrendingTOFQAv2.C:352
 MakeTrendingTOFQAv2.C:353
 MakeTrendingTOFQAv2.C:354
 MakeTrendingTOFQAv2.C:355
 MakeTrendingTOFQAv2.C:356
 MakeTrendingTOFQAv2.C:357
 MakeTrendingTOFQAv2.C:358
 MakeTrendingTOFQAv2.C:359
 MakeTrendingTOFQAv2.C:360
 MakeTrendingTOFQAv2.C:361
 MakeTrendingTOFQAv2.C:362
 MakeTrendingTOFQAv2.C:363
 MakeTrendingTOFQAv2.C:364
 MakeTrendingTOFQAv2.C:365
 MakeTrendingTOFQAv2.C:366
 MakeTrendingTOFQAv2.C:367
 MakeTrendingTOFQAv2.C:368
 MakeTrendingTOFQAv2.C:369
 MakeTrendingTOFQAv2.C:370
 MakeTrendingTOFQAv2.C:371
 MakeTrendingTOFQAv2.C:372
 MakeTrendingTOFQAv2.C:373
 MakeTrendingTOFQAv2.C:374
 MakeTrendingTOFQAv2.C:375
 MakeTrendingTOFQAv2.C:376
 MakeTrendingTOFQAv2.C:377
 MakeTrendingTOFQAv2.C:378
 MakeTrendingTOFQAv2.C:379
 MakeTrendingTOFQAv2.C:380
 MakeTrendingTOFQAv2.C:381
 MakeTrendingTOFQAv2.C:382
 MakeTrendingTOFQAv2.C:383
 MakeTrendingTOFQAv2.C:384
 MakeTrendingTOFQAv2.C:385
 MakeTrendingTOFQAv2.C:386
 MakeTrendingTOFQAv2.C:387
 MakeTrendingTOFQAv2.C:388
 MakeTrendingTOFQAv2.C:389
 MakeTrendingTOFQAv2.C:390
 MakeTrendingTOFQAv2.C:391
 MakeTrendingTOFQAv2.C:392
 MakeTrendingTOFQAv2.C:393
 MakeTrendingTOFQAv2.C:394
 MakeTrendingTOFQAv2.C:395
 MakeTrendingTOFQAv2.C:396
 MakeTrendingTOFQAv2.C:397
 MakeTrendingTOFQAv2.C:398
 MakeTrendingTOFQAv2.C:399
 MakeTrendingTOFQAv2.C:400
 MakeTrendingTOFQAv2.C:401
 MakeTrendingTOFQAv2.C:402
 MakeTrendingTOFQAv2.C:403
 MakeTrendingTOFQAv2.C:404
 MakeTrendingTOFQAv2.C:405
 MakeTrendingTOFQAv2.C:406
 MakeTrendingTOFQAv2.C:407
 MakeTrendingTOFQAv2.C:408
 MakeTrendingTOFQAv2.C:409
 MakeTrendingTOFQAv2.C:410
 MakeTrendingTOFQAv2.C:411
 MakeTrendingTOFQAv2.C:412
 MakeTrendingTOFQAv2.C:413
 MakeTrendingTOFQAv2.C:414
 MakeTrendingTOFQAv2.C:415
 MakeTrendingTOFQAv2.C:416
 MakeTrendingTOFQAv2.C:417
 MakeTrendingTOFQAv2.C:418
 MakeTrendingTOFQAv2.C:419
 MakeTrendingTOFQAv2.C:420
 MakeTrendingTOFQAv2.C:421
 MakeTrendingTOFQAv2.C:422
 MakeTrendingTOFQAv2.C:423
 MakeTrendingTOFQAv2.C:424
 MakeTrendingTOFQAv2.C:425
 MakeTrendingTOFQAv2.C:426
 MakeTrendingTOFQAv2.C:427
 MakeTrendingTOFQAv2.C:428
 MakeTrendingTOFQAv2.C:429
 MakeTrendingTOFQAv2.C:430
 MakeTrendingTOFQAv2.C:431
 MakeTrendingTOFQAv2.C:432
 MakeTrendingTOFQAv2.C:433
 MakeTrendingTOFQAv2.C:434
 MakeTrendingTOFQAv2.C:435
 MakeTrendingTOFQAv2.C:436
 MakeTrendingTOFQAv2.C:437
 MakeTrendingTOFQAv2.C:438
 MakeTrendingTOFQAv2.C:439
 MakeTrendingTOFQAv2.C:440
 MakeTrendingTOFQAv2.C:441
 MakeTrendingTOFQAv2.C:442
 MakeTrendingTOFQAv2.C:443
 MakeTrendingTOFQAv2.C:444
 MakeTrendingTOFQAv2.C:445
 MakeTrendingTOFQAv2.C:446
 MakeTrendingTOFQAv2.C:447
 MakeTrendingTOFQAv2.C:448
 MakeTrendingTOFQAv2.C:449
 MakeTrendingTOFQAv2.C:450
 MakeTrendingTOFQAv2.C:451
 MakeTrendingTOFQAv2.C:452
 MakeTrendingTOFQAv2.C:453
 MakeTrendingTOFQAv2.C:454
 MakeTrendingTOFQAv2.C:455
 MakeTrendingTOFQAv2.C:456
 MakeTrendingTOFQAv2.C:457
 MakeTrendingTOFQAv2.C:458
 MakeTrendingTOFQAv2.C:459
 MakeTrendingTOFQAv2.C:460
 MakeTrendingTOFQAv2.C:461
 MakeTrendingTOFQAv2.C:462
 MakeTrendingTOFQAv2.C:463
 MakeTrendingTOFQAv2.C:464
 MakeTrendingTOFQAv2.C:465
 MakeTrendingTOFQAv2.C:466
 MakeTrendingTOFQAv2.C:467
 MakeTrendingTOFQAv2.C:468
 MakeTrendingTOFQAv2.C:469
 MakeTrendingTOFQAv2.C:470
 MakeTrendingTOFQAv2.C:471
 MakeTrendingTOFQAv2.C:472
 MakeTrendingTOFQAv2.C:473
 MakeTrendingTOFQAv2.C:474
 MakeTrendingTOFQAv2.C:475
 MakeTrendingTOFQAv2.C:476
 MakeTrendingTOFQAv2.C:477
 MakeTrendingTOFQAv2.C:478
 MakeTrendingTOFQAv2.C:479
 MakeTrendingTOFQAv2.C:480
 MakeTrendingTOFQAv2.C:481
 MakeTrendingTOFQAv2.C:482
 MakeTrendingTOFQAv2.C:483
 MakeTrendingTOFQAv2.C:484
 MakeTrendingTOFQAv2.C:485
 MakeTrendingTOFQAv2.C:486
 MakeTrendingTOFQAv2.C:487
 MakeTrendingTOFQAv2.C:488
 MakeTrendingTOFQAv2.C:489
 MakeTrendingTOFQAv2.C:490
 MakeTrendingTOFQAv2.C:491
 MakeTrendingTOFQAv2.C:492
 MakeTrendingTOFQAv2.C:493
 MakeTrendingTOFQAv2.C:494
 MakeTrendingTOFQAv2.C:495
 MakeTrendingTOFQAv2.C:496
 MakeTrendingTOFQAv2.C:497
 MakeTrendingTOFQAv2.C:498
 MakeTrendingTOFQAv2.C:499
 MakeTrendingTOFQAv2.C:500
 MakeTrendingTOFQAv2.C:501
 MakeTrendingTOFQAv2.C:502
 MakeTrendingTOFQAv2.C:503
 MakeTrendingTOFQAv2.C:504
 MakeTrendingTOFQAv2.C:505
 MakeTrendingTOFQAv2.C:506
 MakeTrendingTOFQAv2.C:507
 MakeTrendingTOFQAv2.C:508
 MakeTrendingTOFQAv2.C:509
 MakeTrendingTOFQAv2.C:510
 MakeTrendingTOFQAv2.C:511
 MakeTrendingTOFQAv2.C:512
 MakeTrendingTOFQAv2.C:513
 MakeTrendingTOFQAv2.C:514
 MakeTrendingTOFQAv2.C:515
 MakeTrendingTOFQAv2.C:516
 MakeTrendingTOFQAv2.C:517
 MakeTrendingTOFQAv2.C:518
 MakeTrendingTOFQAv2.C:519
 MakeTrendingTOFQAv2.C:520
 MakeTrendingTOFQAv2.C:521
 MakeTrendingTOFQAv2.C:522
 MakeTrendingTOFQAv2.C:523
 MakeTrendingTOFQAv2.C:524
 MakeTrendingTOFQAv2.C:525
 MakeTrendingTOFQAv2.C:526
 MakeTrendingTOFQAv2.C:527
 MakeTrendingTOFQAv2.C:528
 MakeTrendingTOFQAv2.C:529
 MakeTrendingTOFQAv2.C:530
 MakeTrendingTOFQAv2.C:531
 MakeTrendingTOFQAv2.C:532
 MakeTrendingTOFQAv2.C:533
 MakeTrendingTOFQAv2.C:534
 MakeTrendingTOFQAv2.C:535
 MakeTrendingTOFQAv2.C:536
 MakeTrendingTOFQAv2.C:537
 MakeTrendingTOFQAv2.C:538
 MakeTrendingTOFQAv2.C:539
 MakeTrendingTOFQAv2.C:540
 MakeTrendingTOFQAv2.C:541
 MakeTrendingTOFQAv2.C:542
 MakeTrendingTOFQAv2.C:543
 MakeTrendingTOFQAv2.C:544
 MakeTrendingTOFQAv2.C:545
 MakeTrendingTOFQAv2.C:546
 MakeTrendingTOFQAv2.C:547
 MakeTrendingTOFQAv2.C:548
 MakeTrendingTOFQAv2.C:549
 MakeTrendingTOFQAv2.C:550
 MakeTrendingTOFQAv2.C:551
 MakeTrendingTOFQAv2.C:552
 MakeTrendingTOFQAv2.C:553
 MakeTrendingTOFQAv2.C:554
 MakeTrendingTOFQAv2.C:555
 MakeTrendingTOFQAv2.C:556
 MakeTrendingTOFQAv2.C:557
 MakeTrendingTOFQAv2.C:558
 MakeTrendingTOFQAv2.C:559
 MakeTrendingTOFQAv2.C:560
 MakeTrendingTOFQAv2.C:561
 MakeTrendingTOFQAv2.C:562
 MakeTrendingTOFQAv2.C:563
 MakeTrendingTOFQAv2.C:564
 MakeTrendingTOFQAv2.C:565
 MakeTrendingTOFQAv2.C:566
 MakeTrendingTOFQAv2.C:567
 MakeTrendingTOFQAv2.C:568
 MakeTrendingTOFQAv2.C:569
 MakeTrendingTOFQAv2.C:570
 MakeTrendingTOFQAv2.C:571
 MakeTrendingTOFQAv2.C:572
 MakeTrendingTOFQAv2.C:573
 MakeTrendingTOFQAv2.C:574
 MakeTrendingTOFQAv2.C:575
 MakeTrendingTOFQAv2.C:576
 MakeTrendingTOFQAv2.C:577
 MakeTrendingTOFQAv2.C:578
 MakeTrendingTOFQAv2.C:579
 MakeTrendingTOFQAv2.C:580
 MakeTrendingTOFQAv2.C:581
 MakeTrendingTOFQAv2.C:582
 MakeTrendingTOFQAv2.C:583
 MakeTrendingTOFQAv2.C:584
 MakeTrendingTOFQAv2.C:585
 MakeTrendingTOFQAv2.C:586
 MakeTrendingTOFQAv2.C:587
 MakeTrendingTOFQAv2.C:588
 MakeTrendingTOFQAv2.C:589
 MakeTrendingTOFQAv2.C:590
 MakeTrendingTOFQAv2.C:591
 MakeTrendingTOFQAv2.C:592
 MakeTrendingTOFQAv2.C:593
 MakeTrendingTOFQAv2.C:594
 MakeTrendingTOFQAv2.C:595
 MakeTrendingTOFQAv2.C:596
 MakeTrendingTOFQAv2.C:597
 MakeTrendingTOFQAv2.C:598
 MakeTrendingTOFQAv2.C:599
 MakeTrendingTOFQAv2.C:600
 MakeTrendingTOFQAv2.C:601
 MakeTrendingTOFQAv2.C:602
 MakeTrendingTOFQAv2.C:603
 MakeTrendingTOFQAv2.C:604
 MakeTrendingTOFQAv2.C:605
 MakeTrendingTOFQAv2.C:606
 MakeTrendingTOFQAv2.C:607
 MakeTrendingTOFQAv2.C:608
 MakeTrendingTOFQAv2.C:609
 MakeTrendingTOFQAv2.C:610
 MakeTrendingTOFQAv2.C:611
 MakeTrendingTOFQAv2.C:612
 MakeTrendingTOFQAv2.C:613
 MakeTrendingTOFQAv2.C:614
 MakeTrendingTOFQAv2.C:615
 MakeTrendingTOFQAv2.C:616
 MakeTrendingTOFQAv2.C:617
 MakeTrendingTOFQAv2.C:618
 MakeTrendingTOFQAv2.C:619
 MakeTrendingTOFQAv2.C:620
 MakeTrendingTOFQAv2.C:621
 MakeTrendingTOFQAv2.C:622
 MakeTrendingTOFQAv2.C:623
 MakeTrendingTOFQAv2.C:624
 MakeTrendingTOFQAv2.C:625
 MakeTrendingTOFQAv2.C:626
 MakeTrendingTOFQAv2.C:627
 MakeTrendingTOFQAv2.C:628
 MakeTrendingTOFQAv2.C:629
 MakeTrendingTOFQAv2.C:630
 MakeTrendingTOFQAv2.C:631
 MakeTrendingTOFQAv2.C:632
 MakeTrendingTOFQAv2.C:633
 MakeTrendingTOFQAv2.C:634
 MakeTrendingTOFQAv2.C:635
 MakeTrendingTOFQAv2.C:636
 MakeTrendingTOFQAv2.C:637
 MakeTrendingTOFQAv2.C:638
 MakeTrendingTOFQAv2.C:639
 MakeTrendingTOFQAv2.C:640
 MakeTrendingTOFQAv2.C:641
 MakeTrendingTOFQAv2.C:642
 MakeTrendingTOFQAv2.C:643
 MakeTrendingTOFQAv2.C:644
 MakeTrendingTOFQAv2.C:645
 MakeTrendingTOFQAv2.C:646
 MakeTrendingTOFQAv2.C:647
 MakeTrendingTOFQAv2.C:648
 MakeTrendingTOFQAv2.C:649
 MakeTrendingTOFQAv2.C:650
 MakeTrendingTOFQAv2.C:651
 MakeTrendingTOFQAv2.C:652
 MakeTrendingTOFQAv2.C:653
 MakeTrendingTOFQAv2.C:654
 MakeTrendingTOFQAv2.C:655
 MakeTrendingTOFQAv2.C:656
 MakeTrendingTOFQAv2.C:657
 MakeTrendingTOFQAv2.C:658
 MakeTrendingTOFQAv2.C:659
 MakeTrendingTOFQAv2.C:660
 MakeTrendingTOFQAv2.C:661
 MakeTrendingTOFQAv2.C:662
 MakeTrendingTOFQAv2.C:663
 MakeTrendingTOFQAv2.C:664
 MakeTrendingTOFQAv2.C:665
 MakeTrendingTOFQAv2.C:666
 MakeTrendingTOFQAv2.C:667
 MakeTrendingTOFQAv2.C:668
 MakeTrendingTOFQAv2.C:669
 MakeTrendingTOFQAv2.C:670
 MakeTrendingTOFQAv2.C:671
 MakeTrendingTOFQAv2.C:672
 MakeTrendingTOFQAv2.C:673
 MakeTrendingTOFQAv2.C:674
 MakeTrendingTOFQAv2.C:675
 MakeTrendingTOFQAv2.C:676
 MakeTrendingTOFQAv2.C:677
 MakeTrendingTOFQAv2.C:678
 MakeTrendingTOFQAv2.C:679
 MakeTrendingTOFQAv2.C:680
 MakeTrendingTOFQAv2.C:681
 MakeTrendingTOFQAv2.C:682
 MakeTrendingTOFQAv2.C:683
 MakeTrendingTOFQAv2.C:684
 MakeTrendingTOFQAv2.C:685
 MakeTrendingTOFQAv2.C:686
 MakeTrendingTOFQAv2.C:687
 MakeTrendingTOFQAv2.C:688
 MakeTrendingTOFQAv2.C:689
 MakeTrendingTOFQAv2.C:690
 MakeTrendingTOFQAv2.C:691
 MakeTrendingTOFQAv2.C:692
 MakeTrendingTOFQAv2.C:693
 MakeTrendingTOFQAv2.C:694
 MakeTrendingTOFQAv2.C:695
 MakeTrendingTOFQAv2.C:696
 MakeTrendingTOFQAv2.C:697
 MakeTrendingTOFQAv2.C:698
 MakeTrendingTOFQAv2.C:699
 MakeTrendingTOFQAv2.C:700
 MakeTrendingTOFQAv2.C:701
 MakeTrendingTOFQAv2.C:702
 MakeTrendingTOFQAv2.C:703
 MakeTrendingTOFQAv2.C:704
 MakeTrendingTOFQAv2.C:705
 MakeTrendingTOFQAv2.C:706
 MakeTrendingTOFQAv2.C:707
 MakeTrendingTOFQAv2.C:708
 MakeTrendingTOFQAv2.C:709
 MakeTrendingTOFQAv2.C:710
 MakeTrendingTOFQAv2.C:711
 MakeTrendingTOFQAv2.C:712
 MakeTrendingTOFQAv2.C:713
 MakeTrendingTOFQAv2.C:714
 MakeTrendingTOFQAv2.C:715
 MakeTrendingTOFQAv2.C:716
 MakeTrendingTOFQAv2.C:717
 MakeTrendingTOFQAv2.C:718
 MakeTrendingTOFQAv2.C:719
 MakeTrendingTOFQAv2.C:720
 MakeTrendingTOFQAv2.C:721
 MakeTrendingTOFQAv2.C:722
 MakeTrendingTOFQAv2.C:723
 MakeTrendingTOFQAv2.C:724
 MakeTrendingTOFQAv2.C:725
 MakeTrendingTOFQAv2.C:726
 MakeTrendingTOFQAv2.C:727
 MakeTrendingTOFQAv2.C:728
 MakeTrendingTOFQAv2.C:729
 MakeTrendingTOFQAv2.C:730
 MakeTrendingTOFQAv2.C:731
 MakeTrendingTOFQAv2.C:732
 MakeTrendingTOFQAv2.C:733
 MakeTrendingTOFQAv2.C:734
 MakeTrendingTOFQAv2.C:735
 MakeTrendingTOFQAv2.C:736
 MakeTrendingTOFQAv2.C:737
 MakeTrendingTOFQAv2.C:738
 MakeTrendingTOFQAv2.C:739
 MakeTrendingTOFQAv2.C:740
 MakeTrendingTOFQAv2.C:741
 MakeTrendingTOFQAv2.C:742
 MakeTrendingTOFQAv2.C:743
 MakeTrendingTOFQAv2.C:744
 MakeTrendingTOFQAv2.C:745
 MakeTrendingTOFQAv2.C:746
 MakeTrendingTOFQAv2.C:747
 MakeTrendingTOFQAv2.C:748
 MakeTrendingTOFQAv2.C:749
 MakeTrendingTOFQAv2.C:750
 MakeTrendingTOFQAv2.C:751
 MakeTrendingTOFQAv2.C:752
 MakeTrendingTOFQAv2.C:753
 MakeTrendingTOFQAv2.C:754
 MakeTrendingTOFQAv2.C:755
 MakeTrendingTOFQAv2.C:756
 MakeTrendingTOFQAv2.C:757
 MakeTrendingTOFQAv2.C:758
 MakeTrendingTOFQAv2.C:759
 MakeTrendingTOFQAv2.C:760
 MakeTrendingTOFQAv2.C:761
 MakeTrendingTOFQAv2.C:762
 MakeTrendingTOFQAv2.C:763
 MakeTrendingTOFQAv2.C:764
 MakeTrendingTOFQAv2.C:765
 MakeTrendingTOFQAv2.C:766
 MakeTrendingTOFQAv2.C:767
 MakeTrendingTOFQAv2.C:768
 MakeTrendingTOFQAv2.C:769
 MakeTrendingTOFQAv2.C:770
 MakeTrendingTOFQAv2.C:771
 MakeTrendingTOFQAv2.C:772
 MakeTrendingTOFQAv2.C:773
 MakeTrendingTOFQAv2.C:774
 MakeTrendingTOFQAv2.C:775
 MakeTrendingTOFQAv2.C:776
 MakeTrendingTOFQAv2.C:777
 MakeTrendingTOFQAv2.C:778
 MakeTrendingTOFQAv2.C:779
 MakeTrendingTOFQAv2.C:780
 MakeTrendingTOFQAv2.C:781
 MakeTrendingTOFQAv2.C:782
 MakeTrendingTOFQAv2.C:783
 MakeTrendingTOFQAv2.C:784
 MakeTrendingTOFQAv2.C:785
 MakeTrendingTOFQAv2.C:786
 MakeTrendingTOFQAv2.C:787
 MakeTrendingTOFQAv2.C:788
 MakeTrendingTOFQAv2.C:789
 MakeTrendingTOFQAv2.C:790
 MakeTrendingTOFQAv2.C:791
 MakeTrendingTOFQAv2.C:792
 MakeTrendingTOFQAv2.C:793
 MakeTrendingTOFQAv2.C:794
 MakeTrendingTOFQAv2.C:795
 MakeTrendingTOFQAv2.C:796
 MakeTrendingTOFQAv2.C:797
 MakeTrendingTOFQAv2.C:798
 MakeTrendingTOFQAv2.C:799
 MakeTrendingTOFQAv2.C:800
 MakeTrendingTOFQAv2.C:801
 MakeTrendingTOFQAv2.C:802
 MakeTrendingTOFQAv2.C:803
 MakeTrendingTOFQAv2.C:804
 MakeTrendingTOFQAv2.C:805
 MakeTrendingTOFQAv2.C:806
 MakeTrendingTOFQAv2.C:807
 MakeTrendingTOFQAv2.C:808
 MakeTrendingTOFQAv2.C:809
 MakeTrendingTOFQAv2.C:810
 MakeTrendingTOFQAv2.C:811
 MakeTrendingTOFQAv2.C:812
 MakeTrendingTOFQAv2.C:813
 MakeTrendingTOFQAv2.C:814
 MakeTrendingTOFQAv2.C:815
 MakeTrendingTOFQAv2.C:816
 MakeTrendingTOFQAv2.C:817
 MakeTrendingTOFQAv2.C:818
 MakeTrendingTOFQAv2.C:819
 MakeTrendingTOFQAv2.C:820
 MakeTrendingTOFQAv2.C:821
 MakeTrendingTOFQAv2.C:822
 MakeTrendingTOFQAv2.C:823
 MakeTrendingTOFQAv2.C:824
 MakeTrendingTOFQAv2.C:825
 MakeTrendingTOFQAv2.C:826
 MakeTrendingTOFQAv2.C:827
 MakeTrendingTOFQAv2.C:828
 MakeTrendingTOFQAv2.C:829
 MakeTrendingTOFQAv2.C:830
 MakeTrendingTOFQAv2.C:831
 MakeTrendingTOFQAv2.C:832
 MakeTrendingTOFQAv2.C:833
 MakeTrendingTOFQAv2.C:834
 MakeTrendingTOFQAv2.C:835
 MakeTrendingTOFQAv2.C:836
 MakeTrendingTOFQAv2.C:837
 MakeTrendingTOFQAv2.C:838
 MakeTrendingTOFQAv2.C:839
 MakeTrendingTOFQAv2.C:840
 MakeTrendingTOFQAv2.C:841
 MakeTrendingTOFQAv2.C:842
 MakeTrendingTOFQAv2.C:843
 MakeTrendingTOFQAv2.C:844
 MakeTrendingTOFQAv2.C:845
 MakeTrendingTOFQAv2.C:846
 MakeTrendingTOFQAv2.C:847
 MakeTrendingTOFQAv2.C:848
 MakeTrendingTOFQAv2.C:849
 MakeTrendingTOFQAv2.C:850
 MakeTrendingTOFQAv2.C:851
 MakeTrendingTOFQAv2.C:852
 MakeTrendingTOFQAv2.C:853
 MakeTrendingTOFQAv2.C:854
 MakeTrendingTOFQAv2.C:855
 MakeTrendingTOFQAv2.C:856
 MakeTrendingTOFQAv2.C:857
 MakeTrendingTOFQAv2.C:858
 MakeTrendingTOFQAv2.C:859
 MakeTrendingTOFQAv2.C:860
 MakeTrendingTOFQAv2.C:861
 MakeTrendingTOFQAv2.C:862
 MakeTrendingTOFQAv2.C:863
 MakeTrendingTOFQAv2.C:864
 MakeTrendingTOFQAv2.C:865
 MakeTrendingTOFQAv2.C:866
 MakeTrendingTOFQAv2.C:867
 MakeTrendingTOFQAv2.C:868
 MakeTrendingTOFQAv2.C:869
 MakeTrendingTOFQAv2.C:870
 MakeTrendingTOFQAv2.C:871
 MakeTrendingTOFQAv2.C:872
 MakeTrendingTOFQAv2.C:873
 MakeTrendingTOFQAv2.C:874
 MakeTrendingTOFQAv2.C:875
 MakeTrendingTOFQAv2.C:876
 MakeTrendingTOFQAv2.C:877
 MakeTrendingTOFQAv2.C:878
 MakeTrendingTOFQAv2.C:879
 MakeTrendingTOFQAv2.C:880
 MakeTrendingTOFQAv2.C:881
 MakeTrendingTOFQAv2.C:882
 MakeTrendingTOFQAv2.C:883
 MakeTrendingTOFQAv2.C:884
 MakeTrendingTOFQAv2.C:885
 MakeTrendingTOFQAv2.C:886
 MakeTrendingTOFQAv2.C:887
 MakeTrendingTOFQAv2.C:888
 MakeTrendingTOFQAv2.C:889
 MakeTrendingTOFQAv2.C:890
 MakeTrendingTOFQAv2.C:891
 MakeTrendingTOFQAv2.C:892
 MakeTrendingTOFQAv2.C:893
 MakeTrendingTOFQAv2.C:894
 MakeTrendingTOFQAv2.C:895
 MakeTrendingTOFQAv2.C:896
 MakeTrendingTOFQAv2.C:897
 MakeTrendingTOFQAv2.C:898
 MakeTrendingTOFQAv2.C:899
 MakeTrendingTOFQAv2.C:900
 MakeTrendingTOFQAv2.C:901
 MakeTrendingTOFQAv2.C:902
 MakeTrendingTOFQAv2.C:903
 MakeTrendingTOFQAv2.C:904
 MakeTrendingTOFQAv2.C:905
 MakeTrendingTOFQAv2.C:906
 MakeTrendingTOFQAv2.C:907
 MakeTrendingTOFQAv2.C:908
 MakeTrendingTOFQAv2.C:909
 MakeTrendingTOFQAv2.C:910