ROOT logo
/******************************************************************************************************************************************
Contact person: Marco Leoncino (leoncino@to.infn.it)
Macro to draw the ZDC QA trending plots by accessing the std tree. To be mainly used with the automatic scripts to fill the QA repository.
Launch with aliroot -x -b -q "DrawTrendingZDCQA.C" The macro produces one png file for trending variables and a file with the histograms.
******************************************************************************************************************************************/
#if !defined(__CINT__) || defined(__MAKECINT__)

#include <stdio.h>
#include <stdlib.h>
#include <TROOT.h>
#include <Riostream.h>
#include <TClassTable.h>
#include <TStyle.h>
#include <TMath.h>
#include <TFile.h>
#include <TCanvas.h>
#include <TH1.h>
#include <TH2.h>
#include <TProfile.h>
#include <TLine.h>
#include <TGrid.h>
#include <TBits.h>
#include <TChain.h>
#include <TNtuple.h>
#include <TTree.h>
#include <TBranch.h>
#include <TFileMerger.h>
#include <TGridResult.h>
#include <TSystem.h>
#include <TGaxis.h>
#include <TRandom.h>
#include <TLegend.h>

#endif

Int_t DrawTrendingZDCQA(TString mergedTrendFile = "trending.root", // trending tree file 
                        Bool_t displayAll = kFALSE)                // set to kTRUE to display trending for expert plots
{
  //
  //reads merged trending.root file and draws trending plots from tree
  //
  if (!mergedTrendFile) {
    Printf("Cannot open merged trend file with ZDC QA");
    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);
  gStyle->SetOptStat(0);  
  TGaxis::SetMaxDigits(3);
 
  char  outfilename[200]= "ProductionQA.hist.root";
  TString plotDir(".");
  //TString plotDir(Form("PlotsTrending"));
  //gSystem->Exec(Form("mkdir %s",plotDir.Data()));
  
  legend = new TLegend(0.9,0.1,1.0,0.9);
  legend->SetFillColor(kWhite);

  Int_t runNumber=0;
  Double_t ZNC_mean=0;
  Double_t ZNA_mean=0;
  Double_t ZPA_mean=0;
  Double_t ZPC_mean=0;
  Double_t ZEM1_mean=0;
  Double_t ZEM2_mean=0; 
  Double_t ZNC_XCent=0;
  Double_t ZNC_YCent=0;
  Double_t ZNA_XCent=0;
  Double_t ZNA_YCent=0;  
  Double_t ZNC_XCent_err=0;
  Double_t ZNC_YCent_err=0;
  Double_t ZNA_XCent_err=0;
  Double_t ZNA_YCent_err=0; 
  Double_t ZN_TDC_Sum=0;
  Double_t ZN_TDC_Diff=0;
  Double_t ZN_TDC_Sum_err=0;
  Double_t ZN_TDC_Diff_err=0;

  TFile * fin = TFile::Open(mergedTrendFile.Data());
  TTree * ttree = (TTree*) fin->Get("trending");
  if (!ttree){
    Printf("Invalid trending tree.");
    return 2;
  }
 
  Int_t nRuns=ttree->GetEntries();
  printf("Number of runs to be analyzed:%d\n",nRuns);
  TList list;
 
  TH1D *hZNCpmcSpectrum = new TH1D("hZNCpmcSpectrum","ZNC common tower mean ADC channel vs Run",200.,0.,2000.);
  TH1D *hZNApmcSpectrum = new TH1D("hZNApmcSpectrum","ZNA common tower mean ADC channel vs Run",200.,0.,2000.);
  TH1D *hZPCpmcSpectrum = new TH1D("hZPCpmcSpectrum","ZPC common tower mean ADC channel vs Run",200.,0.,2000.);  
  TH1D *hZPApmcSpectrum = new TH1D("hZPApmcSpectrum","ZPA common tower mean ADC channel vs Run",200.,0.,2000.);
  TH1D *hZEM1Spectrum = new TH1D("hZEM1Spectrum","ZEM1 mean ADC channel vs Run",200.,0.,2000.);  
  TH1D *hZEM2Spectrum = new TH1D("hZEM2Spectrum","ZEM2 mean ADC channel vs Run",200.,0.,2000.);  
  
  ttree->SetBranchAddress("run",&runNumber);
  ttree->SetBranchAddress("ZNC_mean_value",&ZNC_mean);
  ttree->SetBranchAddress("ZNA_mean_value",&ZNA_mean);
  ttree->SetBranchAddress("ZPC_mean_value",&ZPC_mean);
  ttree->SetBranchAddress("ZPA_mean_value",&ZPA_mean); 
  ttree->SetBranchAddress("ZEM1_mean_value",&ZEM1_mean);
  ttree->SetBranchAddress("ZEM2_mean_value",&ZEM2_mean);  
  ttree->SetBranchAddress("ZNC_X_Centroid",&ZNC_XCent);
  ttree->SetBranchAddress("ZNC_Y_Centroid",&ZNC_YCent);   
  ttree->SetBranchAddress("ZNA_X_Centroid",&ZNA_XCent);
  ttree->SetBranchAddress("ZNA_Y_Centroid",&ZNA_YCent);  
  ttree->SetBranchAddress("ZNC_X_Centroid_Err",&ZNC_XCent_err);
  ttree->SetBranchAddress("ZNC_Y_Centroid_Err",&ZNC_YCent_err);   
  ttree->SetBranchAddress("ZNA_X_Centroid_Err",&ZNA_XCent_err);
  ttree->SetBranchAddress("ZNA_Y_Centroid_Err",&ZNA_YCent_err);    
  ttree->SetBranchAddress("ZN_TDC_Sum",&ZN_TDC_Sum);
  ttree->SetBranchAddress("ZN_TDC_Diff",&ZN_TDC_Diff);    
  ttree->SetBranchAddress("ZN_TDC_Sum_Err",&ZN_TDC_Sum_err);
  ttree->SetBranchAddress("ZN_TDC_Diff_Err",&ZN_TDC_Diff_err); 
        
  TH1D *hznc = new TH1D("hznc","ZNC common tower mean ADC channel vs Run",nRuns,0.,nRuns);
  hznc->SetDrawOption("E");
  hznc->SetDrawOption("E");
  
  TH1D *hzna = new TH1D("hzna","ZNA common tower mean ADC channel vs Run",nRuns,0.,nRuns);
  hzna->SetDrawOption("E");
  hzna->SetMarkerStyle(20);  
  
  TH1D *hzpc = new TH1D("hzpc","ZPC common tower mean ADC channel vs Run",nRuns,0.,nRuns);
  hzpc->SetDrawOption("E");
  hzpc->SetMarkerStyle(20);
  
  TH1D *hzpa = new TH1D("hzpa","ZPA common tower mean ADC channel vs Run",nRuns,0.,nRuns);
  hzpa->SetDrawOption("E");
  hzpa->SetMarkerStyle(20);  
  
  TH1D *hzem1 = new TH1D("hzem1","ZEM1 mean ADC channel vs Run",nRuns,0.,nRuns);
  hzem1->SetDrawOption("E");
  hzem1->SetMarkerStyle(20);  
  
  TH1D *hzem2 = new TH1D("hzem2","ZEM2 mean ADC channel vs Run",nRuns,0.,nRuns);
  hzem2->SetDrawOption("E");
  hzem2->SetMarkerStyle(20);
  
  TH1D *hzna_Xcentroid = new TH1D("hzna_Xcentroid","ZNA X centroid vs Run",nRuns,0.,nRuns);
  hzna_Xcentroid->SetDrawOption("E");
  hzna_Xcentroid->SetMarkerStyle(20);

  TH1D *hzna_Ycentroid = new TH1D("hzna_Ycentroid","ZNA Y centroid vs Run",nRuns,0.,nRuns);
  hzna_Ycentroid->SetDrawOption("E");
  hzna_Ycentroid->SetMarkerStyle(20);
  
  TH1D *hznc_Xcentroid = new TH1D("hznc_Xcentroid","ZNC X centroid vs Run",nRuns,0.,nRuns);
  hznc_Xcentroid->SetDrawOption("E");
  hznc_Xcentroid->SetMarkerStyle(20);

  TH1D *hznc_Ycentroid = new TH1D("hznc_Ycentroid","ZNC Y centroid vs Run",nRuns,0.,nRuns);
  hznc_Ycentroid->SetDrawOption("E");
  hznc_Ycentroid->SetMarkerStyle(20);
  
  TH1D *hzn_TDC_Sum = new TH1D("hzn_TDC_Sum","ZNC TDC + ZNA TDC",nRuns,0.,nRuns);
  hzn_TDC_Sum->SetDrawOption("E");
  hzn_TDC_Sum->SetMarkerStyle(20);
  
  TH1D *hzn_TDC_Diff = new TH1D("hzn_TDC_Diff","ZNC TDC - ZNA TDC",nRuns,0.,nRuns);
  hzn_TDC_Diff->SetDrawOption("E");
  hzn_TDC_Diff->SetMarkerStyle(20);   
  
  char runlabel[10];
  int  icol = 0;

  for (Int_t irun=0;irun<nRuns;irun++){
    
    ttree->GetEntry(irun);
    sprintf(runlabel,"%i",runNumber);
    icol = 99*gRandom->Rndm();
    
    //----------------------------------------------------------------------
    //spectra vs run
    //----------------------------------------------------------------------
    
    hZNCpmcSpectrum = dynamic_cast<TH1D*> (fin->Get("fhZNCpmc"));
    hZNCpmcSpectrum->Scale(1./hZNCpmcSpectrum->GetEntries());
    hZNCpmcSpectrum->SetLineColor(icol);
    hZNCpmcSpectrum->SetTitle("ZNC spectra as a function of Run Number");
    hZNCpmcSpectrum->SetXTitle("ZNC signal (ADC ch.)");
    
    hZNApmcSpectrum = dynamic_cast<TH1D*> (fin->Get("fhZNApmc"));
    hZNApmcSpectrum->Scale(1./hZNApmcSpectrum->GetEntries());
    hZNApmcSpectrum->SetLineColor(icol);
    hZNApmcSpectrum->SetTitle("ZNA spectra as a function of Run Number");
    hZNApmcSpectrum->SetXTitle("ZNA signal (ADC ch.)");
    
    hZPCpmcSpectrum = dynamic_cast<TH1D*> (fin->Get("fhZPCpmc"));
    hZPCpmcSpectrum->Scale(1./hZPCpmcSpectrum->GetEntries());
    hZPCpmcSpectrum->SetLineColor(icol);
    hZPCpmcSpectrum->SetTitle("ZPC spectra as a function of Run Number");
    hZPCpmcSpectrum->SetXTitle("ZPC signal (ADC ch.)");
    
    hZPApmcSpectrum = dynamic_cast<TH1D*> (fin->Get("fhZPApmc"));
    hZPApmcSpectrum->Scale(1./hZPApmcSpectrum->GetEntries());
    hZPApmcSpectrum->SetLineColor(icol);
    hZPApmcSpectrum->SetTitle("ZPA spectra as a function of Run Number");
    hZPApmcSpectrum->SetXTitle("ZPA signal (ADC ch.)");    
    
    hZEM1Spectrum = dynamic_cast<TH1D*> (fin->Get("fhZEM1Spectrum"));
    hZEM1Spectrum->Scale(1./hZEM1Spectrum->GetEntries());
    hZEM1Spectrum->SetLineColor(icol);
    hZEM1Spectrum->SetTitle("ZEM1 spectra as a function of Run Number");
    hZEM1Spectrum->SetXTitle("ZEM1 signal (ADC ch.)");    
    
    hZEM2Spectrum = dynamic_cast<TH1D*> (fin->Get("fhZEM2Spectrum"));
    hZEM2Spectrum->Scale(1./hZEM2Spectrum->GetEntries());
    hZEM2Spectrum->SetLineColor(icol);
    hZEM2Spectrum->SetTitle("ZEM2 spectra as a function of Run Number");
    hZEM2Spectrum->SetXTitle("ZEM2 signal (ADC ch.)");    
     
    legend->AddEntry(hZPApmcSpectrum, runlabel, "l");    
      
    //----------------------------------------------------------------------    
    //variables vs run
    //----------------------------------------------------------------------
    
    hznc->SetBinContent(irun+1, ZNC_mean);
    hznc->GetXaxis()->SetBinLabel(irun+1,runlabel);  

    hzna->SetBinContent(irun+1, ZNA_mean);
    hzna->GetXaxis()->SetBinLabel(irun+1,runlabel);
    
    hzpc->SetBinContent(irun+1, ZPC_mean);
    hzpc->GetXaxis()->SetBinLabel(irun+1,runlabel);
    
    hzpa->SetBinContent(irun+1, ZPA_mean);
    hzpa->GetXaxis()->SetBinLabel(irun+1,runlabel);
    
    hzem1->SetBinContent(irun+1, ZEM1_mean);
    hzem1->GetXaxis()->SetBinLabel(irun+1,runlabel);
    
    hzem2->SetBinContent(irun+1, ZEM2_mean);
    hzem2->GetXaxis()->SetBinLabel(irun+1,runlabel); 
    
    hzna_Xcentroid->SetBinContent(irun+1, ZNA_XCent);
    hzna_Xcentroid->SetBinError(irun+1, ZNA_XCent_err);
    hzna_Xcentroid->GetXaxis()->SetBinLabel(irun+1,runlabel);    
    
    hzna_Ycentroid->SetBinContent(irun+1, ZNA_YCent);
    hzna_Ycentroid->SetBinError(irun+1, ZNA_YCent_err); 
    hzna_Ycentroid->GetXaxis()->SetBinLabel(irun+1,runlabel); 
    
    hznc_Xcentroid->SetBinContent(irun+1, ZNC_XCent);
    hznc_Xcentroid->SetBinError(irun+1, ZNC_XCent_err);
    hznc_Xcentroid->GetXaxis()->SetBinLabel(irun+1,runlabel); 
    
    hznc_Ycentroid->SetBinContent(irun+1, ZNC_YCent);
    hznc_Ycentroid->SetBinError(irun+1, ZNC_YCent_err);
    hznc_Ycentroid->GetXaxis()->SetBinLabel(irun+1,runlabel); 
    
    hzn_TDC_Sum->SetBinContent(irun+1, ZN_TDC_Sum);
    hzn_TDC_Sum->SetBinError(irun+1, ZN_TDC_Sum_err);
    hzn_TDC_Sum->GetXaxis()->SetBinLabel(irun+1,runlabel); 
    
    hzn_TDC_Diff->SetBinContent(irun+1, ZN_TDC_Diff);
    hzn_TDC_Diff->SetBinError(irun+1, ZN_TDC_Diff_err); 
    hzn_TDC_Diff->GetXaxis()->SetBinLabel(irun+1,runlabel);     
  }

//----------------------------------------------------------------------
//spectra vs run
//----------------------------------------------------------------------  
  
TCanvas* cZNC_Spectra = new TCanvas("cZNC_Spectra","cZNC_Spectra",50,50,1200,900);
hZNCpmcSpectrum->Draw();
cZNC_Spectra->Print(Form("%s/cZNC_Spectra.png",plotDir.Data()));
gPad->SetLogy();
legend->Draw("same");

TCanvas* cZNA_Spectra = new TCanvas("cZNA_Spectra","cZNA_Spectra",50,50,1200,900);
hZNApmcSpectrum->Draw();
cZNA_Spectra->Print(Form("%s/cZNA_Spectra.png",plotDir.Data()));
gPad->SetLogy();
legend->Draw("same");

TCanvas* cZPC_Spectra = new TCanvas("cZPC_Spectra","cZPC_Spectra",50,50,1200,900);
hZPCpmcSpectrum->Draw();
cZPC_Spectra->Print(Form("%s/cZPC_Spectra.png",plotDir.Data()));
gPad->SetLogy();
legend->Draw("same");

TCanvas* cZPA_Spectra = new TCanvas("cZPA_Spectra","cZPA_Spectra",50,50,1200,900);
hZPApmcSpectrum->Draw();
cZPA_Spectra->Print(Form("%s/cZPA_Spectra.png",plotDir.Data()));
gPad->SetLogy();
legend->Draw("same");

TCanvas* cZEM1_Spectra = new TCanvas("cZEM1_Spectra","cZEM1_Spectra",50,50,1200,900);
hZEM1Spectrum->Draw();
cZEM1_Spectra->Print(Form("%s/cZEM1_Spectra.png",plotDir.Data()));
gPad->SetLogy();
legend->Draw("same");

TCanvas* cZEM2_Spectra = new TCanvas("cZEM2_Spectra","cZEM2_Spectra",50,50,1200,900);
hZEM2Spectrum->Draw();
cZEM2_Spectra->Print(Form("%s/cZEM2_Spectra.png",plotDir.Data()));
gPad->SetLogy();
legend->Draw("same");

//----------------------------------------------------------------------
//variables vs run
//---------------------------------------------------------------------- 
TCanvas* cZNC_mean_values = new TCanvas("cZNC_mean_values","cZNC_mean_values", 50,50,750,550);
hznc->Draw();
cZNC_mean_values->Print(Form("%s/cZNC_mean_values.png",plotDir.Data()));
  
TCanvas* cZNA_mean_values = new TCanvas("cZNA_mean_values","cZNA_mean_values", 50,50,750,550);
hzna->Draw();
cZNA_mean_values->Print(Form("%s/cZNA_mean_values.png",plotDir.Data()));

TCanvas* cZPC_mean_values = new TCanvas("cZPC_mean_values","cZPC_mean_values", 50,50,750,550);
hzpc->Draw();
cZPC_mean_values->Print(Form("%s/cZNP_mean_values.png",plotDir.Data()));

TCanvas* cZPA_mean_values = new TCanvas("cZPA_mean_values","cZPA_mean_values", 50,50,750,550);
hzpa->Draw();
cZPA_mean_values->Print(Form("%s/cZPA_mean_values.png",plotDir.Data()));

TCanvas* cZNA_X_centroid = new TCanvas("cZNA_X_centroid","cZNA_X_centroid", 50,50,750,550);
hzna_Xcentroid->Draw();
cZNA_X_centroid->Print(Form("%s/cZNA_X_centroid.png",plotDir.Data()));

TCanvas* cZNA_Y_centroid = new TCanvas("cZNA_Y_centroid","cZNA_Y_centroid", 50,50,750,550);
hzna_Ycentroid->Draw();
cZNA_Y_centroid->Print(Form("%s/cZNA_Y_centroid.png",plotDir.Data()));

TCanvas* cZNC_X_centroid = new TCanvas("cZNC_X_centroid","cZNC_X_centroid", 50,50,750,550);
hznc_Xcentroid->Draw();
cZNC_X_centroid->Print(Form("%s/cZNC_X_centroid.png",plotDir.Data()));

TCanvas* cZNC_Y_centroid = new TCanvas("cZNC_Y_centroid","cZNC_Y_centroid", 50,50,750,550);
hznc_Ycentroid->Draw();
cZNC_Y_centroid->Print(Form("%s/cZNC_Y_centroid.png",plotDir.Data()));

list.Add(cZNC_Spectra);
list.Add(cZNA_Spectra);
list.Add(cZPC_Spectra);
list.Add(cZPA_Spectra);
list.Add(cZEM1_Spectra);
list.Add(cZEM2_Spectra);
list.Add(hznc);
list.Add(hzna);
list.Add(hzpc);  
list.Add(hzpa);
list.Add(hzem1);  
list.Add(hzem2);
list.Add(hzna_Xcentroid);   
list.Add(hzna_Ycentroid);
list.Add(hznc_Xcentroid);   
list.Add(hznc_Ycentroid);
list.Add(hzn_TDC_Sum);   
list.Add(hzn_TDC_Diff);

TFile * fout=new TFile(outfilename,"recreate");
fout->cd();
list.Write();
fout->Close();

return 0;  
    
}
 DrawTrendingZDCQA.C:1
 DrawTrendingZDCQA.C:2
 DrawTrendingZDCQA.C:3
 DrawTrendingZDCQA.C:4
 DrawTrendingZDCQA.C:5
 DrawTrendingZDCQA.C:6
 DrawTrendingZDCQA.C:7
 DrawTrendingZDCQA.C:8
 DrawTrendingZDCQA.C:9
 DrawTrendingZDCQA.C:10
 DrawTrendingZDCQA.C:11
 DrawTrendingZDCQA.C:12
 DrawTrendingZDCQA.C:13
 DrawTrendingZDCQA.C:14
 DrawTrendingZDCQA.C:15
 DrawTrendingZDCQA.C:16
 DrawTrendingZDCQA.C:17
 DrawTrendingZDCQA.C:18
 DrawTrendingZDCQA.C:19
 DrawTrendingZDCQA.C:20
 DrawTrendingZDCQA.C:21
 DrawTrendingZDCQA.C:22
 DrawTrendingZDCQA.C:23
 DrawTrendingZDCQA.C:24
 DrawTrendingZDCQA.C:25
 DrawTrendingZDCQA.C:26
 DrawTrendingZDCQA.C:27
 DrawTrendingZDCQA.C:28
 DrawTrendingZDCQA.C:29
 DrawTrendingZDCQA.C:30
 DrawTrendingZDCQA.C:31
 DrawTrendingZDCQA.C:32
 DrawTrendingZDCQA.C:33
 DrawTrendingZDCQA.C:34
 DrawTrendingZDCQA.C:35
 DrawTrendingZDCQA.C:36
 DrawTrendingZDCQA.C:37
 DrawTrendingZDCQA.C:38
 DrawTrendingZDCQA.C:39
 DrawTrendingZDCQA.C:40
 DrawTrendingZDCQA.C:41
 DrawTrendingZDCQA.C:42
 DrawTrendingZDCQA.C:43
 DrawTrendingZDCQA.C:44
 DrawTrendingZDCQA.C:45
 DrawTrendingZDCQA.C:46
 DrawTrendingZDCQA.C:47
 DrawTrendingZDCQA.C:48
 DrawTrendingZDCQA.C:49
 DrawTrendingZDCQA.C:50
 DrawTrendingZDCQA.C:51
 DrawTrendingZDCQA.C:52
 DrawTrendingZDCQA.C:53
 DrawTrendingZDCQA.C:54
 DrawTrendingZDCQA.C:55
 DrawTrendingZDCQA.C:56
 DrawTrendingZDCQA.C:57
 DrawTrendingZDCQA.C:58
 DrawTrendingZDCQA.C:59
 DrawTrendingZDCQA.C:60
 DrawTrendingZDCQA.C:61
 DrawTrendingZDCQA.C:62
 DrawTrendingZDCQA.C:63
 DrawTrendingZDCQA.C:64
 DrawTrendingZDCQA.C:65
 DrawTrendingZDCQA.C:66
 DrawTrendingZDCQA.C:67
 DrawTrendingZDCQA.C:68
 DrawTrendingZDCQA.C:69
 DrawTrendingZDCQA.C:70
 DrawTrendingZDCQA.C:71
 DrawTrendingZDCQA.C:72
 DrawTrendingZDCQA.C:73
 DrawTrendingZDCQA.C:74
 DrawTrendingZDCQA.C:75
 DrawTrendingZDCQA.C:76
 DrawTrendingZDCQA.C:77
 DrawTrendingZDCQA.C:78
 DrawTrendingZDCQA.C:79
 DrawTrendingZDCQA.C:80
 DrawTrendingZDCQA.C:81
 DrawTrendingZDCQA.C:82
 DrawTrendingZDCQA.C:83
 DrawTrendingZDCQA.C:84
 DrawTrendingZDCQA.C:85
 DrawTrendingZDCQA.C:86
 DrawTrendingZDCQA.C:87
 DrawTrendingZDCQA.C:88
 DrawTrendingZDCQA.C:89
 DrawTrendingZDCQA.C:90
 DrawTrendingZDCQA.C:91
 DrawTrendingZDCQA.C:92
 DrawTrendingZDCQA.C:93
 DrawTrendingZDCQA.C:94
 DrawTrendingZDCQA.C:95
 DrawTrendingZDCQA.C:96
 DrawTrendingZDCQA.C:97
 DrawTrendingZDCQA.C:98
 DrawTrendingZDCQA.C:99
 DrawTrendingZDCQA.C:100
 DrawTrendingZDCQA.C:101
 DrawTrendingZDCQA.C:102
 DrawTrendingZDCQA.C:103
 DrawTrendingZDCQA.C:104
 DrawTrendingZDCQA.C:105
 DrawTrendingZDCQA.C:106
 DrawTrendingZDCQA.C:107
 DrawTrendingZDCQA.C:108
 DrawTrendingZDCQA.C:109
 DrawTrendingZDCQA.C:110
 DrawTrendingZDCQA.C:111
 DrawTrendingZDCQA.C:112
 DrawTrendingZDCQA.C:113
 DrawTrendingZDCQA.C:114
 DrawTrendingZDCQA.C:115
 DrawTrendingZDCQA.C:116
 DrawTrendingZDCQA.C:117
 DrawTrendingZDCQA.C:118
 DrawTrendingZDCQA.C:119
 DrawTrendingZDCQA.C:120
 DrawTrendingZDCQA.C:121
 DrawTrendingZDCQA.C:122
 DrawTrendingZDCQA.C:123
 DrawTrendingZDCQA.C:124
 DrawTrendingZDCQA.C:125
 DrawTrendingZDCQA.C:126
 DrawTrendingZDCQA.C:127
 DrawTrendingZDCQA.C:128
 DrawTrendingZDCQA.C:129
 DrawTrendingZDCQA.C:130
 DrawTrendingZDCQA.C:131
 DrawTrendingZDCQA.C:132
 DrawTrendingZDCQA.C:133
 DrawTrendingZDCQA.C:134
 DrawTrendingZDCQA.C:135
 DrawTrendingZDCQA.C:136
 DrawTrendingZDCQA.C:137
 DrawTrendingZDCQA.C:138
 DrawTrendingZDCQA.C:139
 DrawTrendingZDCQA.C:140
 DrawTrendingZDCQA.C:141
 DrawTrendingZDCQA.C:142
 DrawTrendingZDCQA.C:143
 DrawTrendingZDCQA.C:144
 DrawTrendingZDCQA.C:145
 DrawTrendingZDCQA.C:146
 DrawTrendingZDCQA.C:147
 DrawTrendingZDCQA.C:148
 DrawTrendingZDCQA.C:149
 DrawTrendingZDCQA.C:150
 DrawTrendingZDCQA.C:151
 DrawTrendingZDCQA.C:152
 DrawTrendingZDCQA.C:153
 DrawTrendingZDCQA.C:154
 DrawTrendingZDCQA.C:155
 DrawTrendingZDCQA.C:156
 DrawTrendingZDCQA.C:157
 DrawTrendingZDCQA.C:158
 DrawTrendingZDCQA.C:159
 DrawTrendingZDCQA.C:160
 DrawTrendingZDCQA.C:161
 DrawTrendingZDCQA.C:162
 DrawTrendingZDCQA.C:163
 DrawTrendingZDCQA.C:164
 DrawTrendingZDCQA.C:165
 DrawTrendingZDCQA.C:166
 DrawTrendingZDCQA.C:167
 DrawTrendingZDCQA.C:168
 DrawTrendingZDCQA.C:169
 DrawTrendingZDCQA.C:170
 DrawTrendingZDCQA.C:171
 DrawTrendingZDCQA.C:172
 DrawTrendingZDCQA.C:173
 DrawTrendingZDCQA.C:174
 DrawTrendingZDCQA.C:175
 DrawTrendingZDCQA.C:176
 DrawTrendingZDCQA.C:177
 DrawTrendingZDCQA.C:178
 DrawTrendingZDCQA.C:179
 DrawTrendingZDCQA.C:180
 DrawTrendingZDCQA.C:181
 DrawTrendingZDCQA.C:182
 DrawTrendingZDCQA.C:183
 DrawTrendingZDCQA.C:184
 DrawTrendingZDCQA.C:185
 DrawTrendingZDCQA.C:186
 DrawTrendingZDCQA.C:187
 DrawTrendingZDCQA.C:188
 DrawTrendingZDCQA.C:189
 DrawTrendingZDCQA.C:190
 DrawTrendingZDCQA.C:191
 DrawTrendingZDCQA.C:192
 DrawTrendingZDCQA.C:193
 DrawTrendingZDCQA.C:194
 DrawTrendingZDCQA.C:195
 DrawTrendingZDCQA.C:196
 DrawTrendingZDCQA.C:197
 DrawTrendingZDCQA.C:198
 DrawTrendingZDCQA.C:199
 DrawTrendingZDCQA.C:200
 DrawTrendingZDCQA.C:201
 DrawTrendingZDCQA.C:202
 DrawTrendingZDCQA.C:203
 DrawTrendingZDCQA.C:204
 DrawTrendingZDCQA.C:205
 DrawTrendingZDCQA.C:206
 DrawTrendingZDCQA.C:207
 DrawTrendingZDCQA.C:208
 DrawTrendingZDCQA.C:209
 DrawTrendingZDCQA.C:210
 DrawTrendingZDCQA.C:211
 DrawTrendingZDCQA.C:212
 DrawTrendingZDCQA.C:213
 DrawTrendingZDCQA.C:214
 DrawTrendingZDCQA.C:215
 DrawTrendingZDCQA.C:216
 DrawTrendingZDCQA.C:217
 DrawTrendingZDCQA.C:218
 DrawTrendingZDCQA.C:219
 DrawTrendingZDCQA.C:220
 DrawTrendingZDCQA.C:221
 DrawTrendingZDCQA.C:222
 DrawTrendingZDCQA.C:223
 DrawTrendingZDCQA.C:224
 DrawTrendingZDCQA.C:225
 DrawTrendingZDCQA.C:226
 DrawTrendingZDCQA.C:227
 DrawTrendingZDCQA.C:228
 DrawTrendingZDCQA.C:229
 DrawTrendingZDCQA.C:230
 DrawTrendingZDCQA.C:231
 DrawTrendingZDCQA.C:232
 DrawTrendingZDCQA.C:233
 DrawTrendingZDCQA.C:234
 DrawTrendingZDCQA.C:235
 DrawTrendingZDCQA.C:236
 DrawTrendingZDCQA.C:237
 DrawTrendingZDCQA.C:238
 DrawTrendingZDCQA.C:239
 DrawTrendingZDCQA.C:240
 DrawTrendingZDCQA.C:241
 DrawTrendingZDCQA.C:242
 DrawTrendingZDCQA.C:243
 DrawTrendingZDCQA.C:244
 DrawTrendingZDCQA.C:245
 DrawTrendingZDCQA.C:246
 DrawTrendingZDCQA.C:247
 DrawTrendingZDCQA.C:248
 DrawTrendingZDCQA.C:249
 DrawTrendingZDCQA.C:250
 DrawTrendingZDCQA.C:251
 DrawTrendingZDCQA.C:252
 DrawTrendingZDCQA.C:253
 DrawTrendingZDCQA.C:254
 DrawTrendingZDCQA.C:255
 DrawTrendingZDCQA.C:256
 DrawTrendingZDCQA.C:257
 DrawTrendingZDCQA.C:258
 DrawTrendingZDCQA.C:259
 DrawTrendingZDCQA.C:260
 DrawTrendingZDCQA.C:261
 DrawTrendingZDCQA.C:262
 DrawTrendingZDCQA.C:263
 DrawTrendingZDCQA.C:264
 DrawTrendingZDCQA.C:265
 DrawTrendingZDCQA.C:266
 DrawTrendingZDCQA.C:267
 DrawTrendingZDCQA.C:268
 DrawTrendingZDCQA.C:269
 DrawTrendingZDCQA.C:270
 DrawTrendingZDCQA.C:271
 DrawTrendingZDCQA.C:272
 DrawTrendingZDCQA.C:273
 DrawTrendingZDCQA.C:274
 DrawTrendingZDCQA.C:275
 DrawTrendingZDCQA.C:276
 DrawTrendingZDCQA.C:277
 DrawTrendingZDCQA.C:278
 DrawTrendingZDCQA.C:279
 DrawTrendingZDCQA.C:280
 DrawTrendingZDCQA.C:281
 DrawTrendingZDCQA.C:282
 DrawTrendingZDCQA.C:283
 DrawTrendingZDCQA.C:284
 DrawTrendingZDCQA.C:285
 DrawTrendingZDCQA.C:286
 DrawTrendingZDCQA.C:287
 DrawTrendingZDCQA.C:288
 DrawTrendingZDCQA.C:289
 DrawTrendingZDCQA.C:290
 DrawTrendingZDCQA.C:291
 DrawTrendingZDCQA.C:292
 DrawTrendingZDCQA.C:293
 DrawTrendingZDCQA.C:294
 DrawTrendingZDCQA.C:295
 DrawTrendingZDCQA.C:296
 DrawTrendingZDCQA.C:297
 DrawTrendingZDCQA.C:298
 DrawTrendingZDCQA.C:299
 DrawTrendingZDCQA.C:300
 DrawTrendingZDCQA.C:301
 DrawTrendingZDCQA.C:302
 DrawTrendingZDCQA.C:303
 DrawTrendingZDCQA.C:304
 DrawTrendingZDCQA.C:305
 DrawTrendingZDCQA.C:306
 DrawTrendingZDCQA.C:307
 DrawTrendingZDCQA.C:308
 DrawTrendingZDCQA.C:309
 DrawTrendingZDCQA.C:310
 DrawTrendingZDCQA.C:311
 DrawTrendingZDCQA.C:312
 DrawTrendingZDCQA.C:313
 DrawTrendingZDCQA.C:314
 DrawTrendingZDCQA.C:315
 DrawTrendingZDCQA.C:316
 DrawTrendingZDCQA.C:317
 DrawTrendingZDCQA.C:318
 DrawTrendingZDCQA.C:319
 DrawTrendingZDCQA.C:320
 DrawTrendingZDCQA.C:321
 DrawTrendingZDCQA.C:322
 DrawTrendingZDCQA.C:323
 DrawTrendingZDCQA.C:324
 DrawTrendingZDCQA.C:325
 DrawTrendingZDCQA.C:326
 DrawTrendingZDCQA.C:327
 DrawTrendingZDCQA.C:328
 DrawTrendingZDCQA.C:329
 DrawTrendingZDCQA.C:330
 DrawTrendingZDCQA.C:331
 DrawTrendingZDCQA.C:332
 DrawTrendingZDCQA.C:333
 DrawTrendingZDCQA.C:334
 DrawTrendingZDCQA.C:335
 DrawTrendingZDCQA.C:336
 DrawTrendingZDCQA.C:337
 DrawTrendingZDCQA.C:338
 DrawTrendingZDCQA.C:339
 DrawTrendingZDCQA.C:340
 DrawTrendingZDCQA.C:341
 DrawTrendingZDCQA.C:342
 DrawTrendingZDCQA.C:343
 DrawTrendingZDCQA.C:344
 DrawTrendingZDCQA.C:345
 DrawTrendingZDCQA.C:346
 DrawTrendingZDCQA.C:347
 DrawTrendingZDCQA.C:348
 DrawTrendingZDCQA.C:349
 DrawTrendingZDCQA.C:350
 DrawTrendingZDCQA.C:351
 DrawTrendingZDCQA.C:352
 DrawTrendingZDCQA.C:353
 DrawTrendingZDCQA.C:354
 DrawTrendingZDCQA.C:355
 DrawTrendingZDCQA.C:356
 DrawTrendingZDCQA.C:357
 DrawTrendingZDCQA.C:358
 DrawTrendingZDCQA.C:359
 DrawTrendingZDCQA.C:360
 DrawTrendingZDCQA.C:361
 DrawTrendingZDCQA.C:362
 DrawTrendingZDCQA.C:363
 DrawTrendingZDCQA.C:364
 DrawTrendingZDCQA.C:365
 DrawTrendingZDCQA.C:366
 DrawTrendingZDCQA.C:367
 DrawTrendingZDCQA.C:368
 DrawTrendingZDCQA.C:369
 DrawTrendingZDCQA.C:370
 DrawTrendingZDCQA.C:371
 DrawTrendingZDCQA.C:372
 DrawTrendingZDCQA.C:373
 DrawTrendingZDCQA.C:374
 DrawTrendingZDCQA.C:375