ROOT logo

TGraphErrors * MakeGraphSparse(TTree * tree, const Char_t * expr="mean-fdelta:run", const Char_t * cut="isTPC&&ptype==0&&theta>0"){
  // Format of expr: Var:Error:Run
  //
  // Make a sparse draw of the variables
  //  Format of expr : Var:Error:Run
  //

  const Int_t entries =  tree->Draw(expr,cut,"goff");
  
  Double_t *graphX, *graphY, *graphError;

  //check whether error argument exists in expr
  if(!tree->GetV3()){
      graphX = tree->GetV2();
      graphY = tree->GetV1();
  }
  else{
      graphX = tree->GetV3();
      graphY = tree->GetV1();
      graphError = tree->GetV2();
  }

  // sort according to run number
  Int_t *index = new Int_t[entries];
  TMath::Sort(entries,graphX,index,false);

  // define arrays for the new graph
  Double_t *tempArray = new Double_t[entries];
  Double_t *xError = new Double_t[entries];
  Double_t *yError = new Double_t[entries];
  Int_t *vrun = new Int_t[entries]; 
  Double_t count = 0.5;

  // evaluate arrays for the new graph accroding to the run-number
  Int_t icount=0;
  tempArray[index[0]] = count;
  xError[0] = 0;
  yError[0] = 0;
  if(tree->GetV3())
      yError[index[0]] = graphError[index[0]];
  vrun[0] = graphX[index[0]];

  // loop the rest entries
  for(Int_t i=1;i<entries;i++){
      xError[i] = 0;
      yError[i] = 0;

      if(tree->GetV3())
	  yError[i] = graphError[index[i]];


      if(graphX[index[i]]==graphX[index[i-1]])
	  tempArray[index[i]] = count; 
      else if((graphX[index[i]]!=graphX[index[i-1]])){
	      count++;
	      icount++;
	      tempArray[index[i]] = count;
	      vrun[icount]=graphX[index[i]];
      }
  }

  // count the number of xbins (run-wise) for the new graph
  const Int_t newNbins = int(count+0.5);
  Double_t *newBins = new Double_t[newNbins+1];
  for(Int_t i=0; i<=count+1;i++){
    newBins[i] = i;
  }
  
  // define and fill the new graph
  TGraphErrors *graphNew = new TGraphErrors(entries,tempArray,graphY,xError,yError);
  graphNew->GetXaxis()->Set(newNbins,newBins);
  
  // set the bins for the x-axis
  Char_t xName[50];
  for(Int_t i=0;i<count;i++){
    sprintf(xName,"%d",Int_t(vrun[i]));
    graphNew->GetXaxis()->SetBinLabel(i+1,xName);
  }
  graphNew->GetHistogram()->SetTitle("");
  
  // memory clearing
  delete [] xError; 
  delete [] yError; 
  delete [] tempArray;
  delete [] index;
  delete [] newBins;
  delete [] vrun;
  return graphNew;

}
//------------------------------------------------------------------------------------------------
drawPerformanceT0QATrends(const char* inFile = "trending.root", const char* runType="pp") {
  //
  //
  gROOT->Reset();
  gROOT->SetStyle("Plain");
  gStyle->SetPalette(1);
  gStyle->SetLabelSize(0.04,"x");

 
  // open input file
  //
  TFile *file = TFile::Open(inFile);
  if(!file) return;
  file->cd();
  
  TTree *tree = (TTree*)file->Get("t0QA");
  if(!tree) return;
  int const entries = tree->GetEntries();
  cout<<"number of entries   "<<entries<<endl; 
  TH1F *frame = new TH1F();

  //const float norm_runs = 8.0; 
  if(entries<8)
    const float norm_runs =10.0;
  else if(entries>=8&&entries<16)
    const float norm_runs =20.0;
 else
   const float norm_runs =50.0;
  int const canvas_width = int(((entries*1.0)/norm_runs)*2000.0);
  if(entries>50){
    gStyle->SetTickLength(0.03*norm_runs/(entries*1.0),"Y");
    gStyle->SetTitleYOffset((norm_runs/(entries*1.0))*0.8);
    gStyle->SetPadLeftMargin(0.1*norm_runs/(entries*1.0));
    gStyle->SetPadRightMargin(0.1*norm_runs/(entries*1.0));
  }

  //Define ranges of you trending plots
  double resolutionMin = 10,   resolutionMax = 100;    // OR A - OR C
  double oraplusorcMin = -100, oraplusorcMax = 100;   // OR A + OR CA
  double oraMin        = -100, oraMax        = 100;   // OR A  
  double orcMin        = -100, orcMax        = 100;   // OR C
  double amplMin       =0,    amplMax    =3   ;     // amplitude in each PMT
  double timeMin       ,   timeMax       ;     // amplitude in each PMT
  //-----> add ranges of your new trending plot


  TCanvas *c1  = new  TCanvas("can","can",canvas_width,500);
  c1->SetGridy(1);
  c1->SetGridx(1);
  c1->SetBottomMargin(0.17);
  
  /****** T0 ORA+ORC ******/
  TGraphErrors *grSum = MakeGraphSparse(tree,"tzeroOrAPlusOrC:run","");
  grSum->SetMarkerStyle(20);
  grSum->SetMarkerSize(1.0);
  grSum->SetMarkerColor(2);
  TGraphErrors *grORA = MakeGraphSparse(tree,"tzeroOrA:run","");
  grORA->SetMarkerStyle(28);
  grORA->SetMarkerSize(1.0);
  grORA->SetMarkerColor(4);
  TGraphErrors *grORC = MakeGraphSparse(tree,"tzeroOrC:run","");
  grORC->SetMarkerStyle(25);
  grORC->SetMarkerSize(1.0);
  grORC->SetMarkerColor(1);
 
  grSum->GetHistogram()->SetYTitle("mean [ps]");
  grSum->GetHistogram()->SetTitle("T0 ORA, ORC and (ORA+ORC)/2");
  grSum->GetHistogram()->SetMinimum(oraplusorcMin);
  grSum->GetHistogram()->SetMaximum(oraplusorcMax);
  grSum->Draw("AP");
  grORA->Draw("psame");
  grORC->Draw("psame");
  TLegend *leg = new TLegend(0.1,0.85,0.3,0.95," ","brNDC");
  leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextSize(0.05);leg->SetNColumns(3);leg->SetColumnSeparation(1);
  leg->AddEntry(grORA,"ORA","p"); 
  leg->AddEntry(grORC,"ORC","p"); 
  leg->AddEntry(grSum,"(ORA+ORC)/2","p"); 
  leg->Draw(); 
 
  grSum->GetXaxis()->LabelsOption("v");
  c1->SaveAs("meanT0OrAPlusOrC_vs_run.gif");
 
  /****** T0 Resolution ******/
  TGraphErrors *gr = MakeGraphSparse(tree,"resolution:run","");
  gr->SetMarkerStyle(20);
  gr->SetMarkerSize(1.0);
  gr->SetMarkerColor(2);
  gr->GetHistogram()->SetMinimum(resolutionMin);
  gr->GetHistogram()->SetMaximum(resolutionMax);
  gr->Draw("AP");
  gr->GetXaxis()->LabelsOption("v");
  gr->GetHistogram()->SetYTitle("sigma [ps]");
  gr->GetHistogram()->SetTitle("T0 resolution (ORA -ORC)/2");
  c1->SaveAs("sigmaResolutionT0_vs_run.gif");
 

   /****** Mean T0 OR A ******/
 /* TGraphErrors *gr = MakeGraphSparse(tree,"tzeroOrA:run","");
  gr->SetMarkerStyle(20);
  gr->SetMarkerSize(1.0);
  gr->SetMarkerColor(2);
  gr->GetHistogram()->SetYTitle("mean [ps]");
  gr->GetHistogram()->SetTitle("T0 OR A");
  gr->GetHistogram()->SetMinimum(oraMin);
  gr->GetHistogram()->SetMaximum(oraMax);
  gr->Draw("AP");
  gr->GetXaxis()->LabelsOption("v");
  c1->SaveAs("meanT0OrA_vs_run.gif");
*/

  /****** Mean T0 OR C ******/
 /* TGraphErrors *gr = MakeGraphSparse(tree,"tzeroOrC:run","");
  gr->SetMarkerStyle(20);
  gr->SetMarkerSize(1.0);
  gr->SetMarkerColor(2);
  gr->GetHistogram()->SetYTitle("mean [ps]");
  gr->GetHistogram()->SetTitle("T0 OR C");
  gr->GetHistogram()->SetMinimum(orcMin);
  gr->GetHistogram()->SetMaximum(orcMax);
  gr->Draw("AP");
  gr->GetXaxis()->LabelsOption("v");
  c1->SaveAs("meanT0OrC_vs_run.gif");
*/

  /****** Mean Amplitude in PMT ******/
  const int kNPMTs = 24;
  char name[200];

  for(int ipmt=1;ipmt<=kNPMTs; ipmt++){
    sprintf(name,"amplPMT%d:run",ipmt);
    gr = MakeGraphSparse(tree,name,"");
    gr->SetMarkerStyle(20);
    gr->SetMarkerSize(1.0);
    gr->SetMarkerColor(6);
    gr->GetHistogram()->SetYTitle("mean");
    gr->GetHistogram()->SetTitle(Form("Amplitude PMT%d",ipmt));

    int nRuns = gr->GetN();
    double *y =  gr->GetY();
	double min = y[0];
	double max = y[0];
    for(int irun =1; irun<nRuns;irun++){
      if(min > y[irun] & y[irun]>0) min = y[irun];
      if(max < y[irun]) max = y[irun];
    }
    //  amplMin = min - 2; 
    //  amplMax = max + 2; 

    gr->GetHistogram()->SetMinimum(amplMin);
    gr->GetHistogram()->SetMaximum(amplMax);
    gr->Draw("AP");
    gr->GetXaxis()->LabelsOption("v");
    c1->SaveAs(Form("meanAmplPMT%d_vs_run.gif",ipmt));
  }
  /****** Mean Time in PMT ******/
  for(int ipmt=1;ipmt<=kNPMTs; ipmt++){
    sprintf(name,"timePMT%d:run",ipmt);
    gr = MakeGraphSparse(tree,name,"");


    sprintf(name,"timeDelayPMT%d:run",ipmt);
    TGraphErrors *grDelay = MakeGraphSparse(tree,name,"");
    //regular run
    int nRuns = gr->GetN();
    double *y =  gr->GetY();
	double min = y[0];
	double max = y[0];
    for(int irun =1; irun<nRuns;irun++){
      if(min > y[irun] && y[irun]>0) min = y[irun];
      if(max < y[irun]) max = y[irun];
    }
    //Delay
    //   double *yDelay =  grDelay->GetY();
    //  nRuns = grDelay->GetN();
    //   for(int irun =0; irun<nRuns;irun++){
    //      if(min > yDelay[irun] && yDelay[irun]>0) min = yDelay[irun];
    //    if(max < yDelay[irun]) max = yDelay[irun];
    //  }
    
    timeMin = min - 2; 
    timeMax = max + 2; 

    gr->SetMarkerStyle(20);
    gr->SetMarkerSize(1.0);
    gr->SetMarkerColor(2);
    grDelay->SetMarkerStyle(24);
    grDelay->SetMarkerSize(1.0);
    grDelay->SetMarkerColor(1);

    gr->GetHistogram()->SetYTitle("mean [channels]");
    gr->GetHistogram()->SetTitle(Form("Time PMT%d",ipmt));
    gr->GetHistogram()->SetMinimum(timeMin);
    gr->GetHistogram()->SetMaximum(timeMax);
    gr->GetXaxis()->LabelsOption("v");
    gr->Draw("AP");
    grDelay->Draw("Psame");

    TLegend *leg = new TLegend(0.1,0.85,0.3,0.95," ","brNDC");
    leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextSize(0.05);leg->SetNColumns(3);
    leg->AddEntry(gr,"mean time","p"); 
    //leg->AddEntry(grDelay,"Time Delay OCDB","p"); 
    leg->Draw(); 
 
    c1->SaveAs(Form("meanTimePMT%d_vs_run.gif",ipmt));
  }


  //-----> draw your new trending plot here
}

 drawPerformanceT0QATrends.C:1
 drawPerformanceT0QATrends.C:2
 drawPerformanceT0QATrends.C:3
 drawPerformanceT0QATrends.C:4
 drawPerformanceT0QATrends.C:5
 drawPerformanceT0QATrends.C:6
 drawPerformanceT0QATrends.C:7
 drawPerformanceT0QATrends.C:8
 drawPerformanceT0QATrends.C:9
 drawPerformanceT0QATrends.C:10
 drawPerformanceT0QATrends.C:11
 drawPerformanceT0QATrends.C:12
 drawPerformanceT0QATrends.C:13
 drawPerformanceT0QATrends.C:14
 drawPerformanceT0QATrends.C:15
 drawPerformanceT0QATrends.C:16
 drawPerformanceT0QATrends.C:17
 drawPerformanceT0QATrends.C:18
 drawPerformanceT0QATrends.C:19
 drawPerformanceT0QATrends.C:20
 drawPerformanceT0QATrends.C:21
 drawPerformanceT0QATrends.C:22
 drawPerformanceT0QATrends.C:23
 drawPerformanceT0QATrends.C:24
 drawPerformanceT0QATrends.C:25
 drawPerformanceT0QATrends.C:26
 drawPerformanceT0QATrends.C:27
 drawPerformanceT0QATrends.C:28
 drawPerformanceT0QATrends.C:29
 drawPerformanceT0QATrends.C:30
 drawPerformanceT0QATrends.C:31
 drawPerformanceT0QATrends.C:32
 drawPerformanceT0QATrends.C:33
 drawPerformanceT0QATrends.C:34
 drawPerformanceT0QATrends.C:35
 drawPerformanceT0QATrends.C:36
 drawPerformanceT0QATrends.C:37
 drawPerformanceT0QATrends.C:38
 drawPerformanceT0QATrends.C:39
 drawPerformanceT0QATrends.C:40
 drawPerformanceT0QATrends.C:41
 drawPerformanceT0QATrends.C:42
 drawPerformanceT0QATrends.C:43
 drawPerformanceT0QATrends.C:44
 drawPerformanceT0QATrends.C:45
 drawPerformanceT0QATrends.C:46
 drawPerformanceT0QATrends.C:47
 drawPerformanceT0QATrends.C:48
 drawPerformanceT0QATrends.C:49
 drawPerformanceT0QATrends.C:50
 drawPerformanceT0QATrends.C:51
 drawPerformanceT0QATrends.C:52
 drawPerformanceT0QATrends.C:53
 drawPerformanceT0QATrends.C:54
 drawPerformanceT0QATrends.C:55
 drawPerformanceT0QATrends.C:56
 drawPerformanceT0QATrends.C:57
 drawPerformanceT0QATrends.C:58
 drawPerformanceT0QATrends.C:59
 drawPerformanceT0QATrends.C:60
 drawPerformanceT0QATrends.C:61
 drawPerformanceT0QATrends.C:62
 drawPerformanceT0QATrends.C:63
 drawPerformanceT0QATrends.C:64
 drawPerformanceT0QATrends.C:65
 drawPerformanceT0QATrends.C:66
 drawPerformanceT0QATrends.C:67
 drawPerformanceT0QATrends.C:68
 drawPerformanceT0QATrends.C:69
 drawPerformanceT0QATrends.C:70
 drawPerformanceT0QATrends.C:71
 drawPerformanceT0QATrends.C:72
 drawPerformanceT0QATrends.C:73
 drawPerformanceT0QATrends.C:74
 drawPerformanceT0QATrends.C:75
 drawPerformanceT0QATrends.C:76
 drawPerformanceT0QATrends.C:77
 drawPerformanceT0QATrends.C:78
 drawPerformanceT0QATrends.C:79
 drawPerformanceT0QATrends.C:80
 drawPerformanceT0QATrends.C:81
 drawPerformanceT0QATrends.C:82
 drawPerformanceT0QATrends.C:83
 drawPerformanceT0QATrends.C:84
 drawPerformanceT0QATrends.C:85
 drawPerformanceT0QATrends.C:86
 drawPerformanceT0QATrends.C:87
 drawPerformanceT0QATrends.C:88
 drawPerformanceT0QATrends.C:89
 drawPerformanceT0QATrends.C:90
 drawPerformanceT0QATrends.C:91
 drawPerformanceT0QATrends.C:92
 drawPerformanceT0QATrends.C:93
 drawPerformanceT0QATrends.C:94
 drawPerformanceT0QATrends.C:95
 drawPerformanceT0QATrends.C:96
 drawPerformanceT0QATrends.C:97
 drawPerformanceT0QATrends.C:98
 drawPerformanceT0QATrends.C:99
 drawPerformanceT0QATrends.C:100
 drawPerformanceT0QATrends.C:101
 drawPerformanceT0QATrends.C:102
 drawPerformanceT0QATrends.C:103
 drawPerformanceT0QATrends.C:104
 drawPerformanceT0QATrends.C:105
 drawPerformanceT0QATrends.C:106
 drawPerformanceT0QATrends.C:107
 drawPerformanceT0QATrends.C:108
 drawPerformanceT0QATrends.C:109
 drawPerformanceT0QATrends.C:110
 drawPerformanceT0QATrends.C:111
 drawPerformanceT0QATrends.C:112
 drawPerformanceT0QATrends.C:113
 drawPerformanceT0QATrends.C:114
 drawPerformanceT0QATrends.C:115
 drawPerformanceT0QATrends.C:116
 drawPerformanceT0QATrends.C:117
 drawPerformanceT0QATrends.C:118
 drawPerformanceT0QATrends.C:119
 drawPerformanceT0QATrends.C:120
 drawPerformanceT0QATrends.C:121
 drawPerformanceT0QATrends.C:122
 drawPerformanceT0QATrends.C:123
 drawPerformanceT0QATrends.C:124
 drawPerformanceT0QATrends.C:125
 drawPerformanceT0QATrends.C:126
 drawPerformanceT0QATrends.C:127
 drawPerformanceT0QATrends.C:128
 drawPerformanceT0QATrends.C:129
 drawPerformanceT0QATrends.C:130
 drawPerformanceT0QATrends.C:131
 drawPerformanceT0QATrends.C:132
 drawPerformanceT0QATrends.C:133
 drawPerformanceT0QATrends.C:134
 drawPerformanceT0QATrends.C:135
 drawPerformanceT0QATrends.C:136
 drawPerformanceT0QATrends.C:137
 drawPerformanceT0QATrends.C:138
 drawPerformanceT0QATrends.C:139
 drawPerformanceT0QATrends.C:140
 drawPerformanceT0QATrends.C:141
 drawPerformanceT0QATrends.C:142
 drawPerformanceT0QATrends.C:143
 drawPerformanceT0QATrends.C:144
 drawPerformanceT0QATrends.C:145
 drawPerformanceT0QATrends.C:146
 drawPerformanceT0QATrends.C:147
 drawPerformanceT0QATrends.C:148
 drawPerformanceT0QATrends.C:149
 drawPerformanceT0QATrends.C:150
 drawPerformanceT0QATrends.C:151
 drawPerformanceT0QATrends.C:152
 drawPerformanceT0QATrends.C:153
 drawPerformanceT0QATrends.C:154
 drawPerformanceT0QATrends.C:155
 drawPerformanceT0QATrends.C:156
 drawPerformanceT0QATrends.C:157
 drawPerformanceT0QATrends.C:158
 drawPerformanceT0QATrends.C:159
 drawPerformanceT0QATrends.C:160
 drawPerformanceT0QATrends.C:161
 drawPerformanceT0QATrends.C:162
 drawPerformanceT0QATrends.C:163
 drawPerformanceT0QATrends.C:164
 drawPerformanceT0QATrends.C:165
 drawPerformanceT0QATrends.C:166
 drawPerformanceT0QATrends.C:167
 drawPerformanceT0QATrends.C:168
 drawPerformanceT0QATrends.C:169
 drawPerformanceT0QATrends.C:170
 drawPerformanceT0QATrends.C:171
 drawPerformanceT0QATrends.C:172
 drawPerformanceT0QATrends.C:173
 drawPerformanceT0QATrends.C:174
 drawPerformanceT0QATrends.C:175
 drawPerformanceT0QATrends.C:176
 drawPerformanceT0QATrends.C:177
 drawPerformanceT0QATrends.C:178
 drawPerformanceT0QATrends.C:179
 drawPerformanceT0QATrends.C:180
 drawPerformanceT0QATrends.C:181
 drawPerformanceT0QATrends.C:182
 drawPerformanceT0QATrends.C:183
 drawPerformanceT0QATrends.C:184
 drawPerformanceT0QATrends.C:185
 drawPerformanceT0QATrends.C:186
 drawPerformanceT0QATrends.C:187
 drawPerformanceT0QATrends.C:188
 drawPerformanceT0QATrends.C:189
 drawPerformanceT0QATrends.C:190
 drawPerformanceT0QATrends.C:191
 drawPerformanceT0QATrends.C:192
 drawPerformanceT0QATrends.C:193
 drawPerformanceT0QATrends.C:194
 drawPerformanceT0QATrends.C:195
 drawPerformanceT0QATrends.C:196
 drawPerformanceT0QATrends.C:197
 drawPerformanceT0QATrends.C:198
 drawPerformanceT0QATrends.C:199
 drawPerformanceT0QATrends.C:200
 drawPerformanceT0QATrends.C:201
 drawPerformanceT0QATrends.C:202
 drawPerformanceT0QATrends.C:203
 drawPerformanceT0QATrends.C:204
 drawPerformanceT0QATrends.C:205
 drawPerformanceT0QATrends.C:206
 drawPerformanceT0QATrends.C:207
 drawPerformanceT0QATrends.C:208
 drawPerformanceT0QATrends.C:209
 drawPerformanceT0QATrends.C:210
 drawPerformanceT0QATrends.C:211
 drawPerformanceT0QATrends.C:212
 drawPerformanceT0QATrends.C:213
 drawPerformanceT0QATrends.C:214
 drawPerformanceT0QATrends.C:215
 drawPerformanceT0QATrends.C:216
 drawPerformanceT0QATrends.C:217
 drawPerformanceT0QATrends.C:218
 drawPerformanceT0QATrends.C:219
 drawPerformanceT0QATrends.C:220
 drawPerformanceT0QATrends.C:221
 drawPerformanceT0QATrends.C:222
 drawPerformanceT0QATrends.C:223
 drawPerformanceT0QATrends.C:224
 drawPerformanceT0QATrends.C:225
 drawPerformanceT0QATrends.C:226
 drawPerformanceT0QATrends.C:227
 drawPerformanceT0QATrends.C:228
 drawPerformanceT0QATrends.C:229
 drawPerformanceT0QATrends.C:230
 drawPerformanceT0QATrends.C:231
 drawPerformanceT0QATrends.C:232
 drawPerformanceT0QATrends.C:233
 drawPerformanceT0QATrends.C:234
 drawPerformanceT0QATrends.C:235
 drawPerformanceT0QATrends.C:236
 drawPerformanceT0QATrends.C:237
 drawPerformanceT0QATrends.C:238
 drawPerformanceT0QATrends.C:239
 drawPerformanceT0QATrends.C:240
 drawPerformanceT0QATrends.C:241
 drawPerformanceT0QATrends.C:242
 drawPerformanceT0QATrends.C:243
 drawPerformanceT0QATrends.C:244
 drawPerformanceT0QATrends.C:245
 drawPerformanceT0QATrends.C:246
 drawPerformanceT0QATrends.C:247
 drawPerformanceT0QATrends.C:248
 drawPerformanceT0QATrends.C:249
 drawPerformanceT0QATrends.C:250
 drawPerformanceT0QATrends.C:251
 drawPerformanceT0QATrends.C:252
 drawPerformanceT0QATrends.C:253
 drawPerformanceT0QATrends.C:254
 drawPerformanceT0QATrends.C:255
 drawPerformanceT0QATrends.C:256
 drawPerformanceT0QATrends.C:257
 drawPerformanceT0QATrends.C:258
 drawPerformanceT0QATrends.C:259
 drawPerformanceT0QATrends.C:260
 drawPerformanceT0QATrends.C:261
 drawPerformanceT0QATrends.C:262
 drawPerformanceT0QATrends.C:263
 drawPerformanceT0QATrends.C:264
 drawPerformanceT0QATrends.C:265
 drawPerformanceT0QATrends.C:266
 drawPerformanceT0QATrends.C:267
 drawPerformanceT0QATrends.C:268
 drawPerformanceT0QATrends.C:269
 drawPerformanceT0QATrends.C:270
 drawPerformanceT0QATrends.C:271
 drawPerformanceT0QATrends.C:272
 drawPerformanceT0QATrends.C:273
 drawPerformanceT0QATrends.C:274
 drawPerformanceT0QATrends.C:275
 drawPerformanceT0QATrends.C:276
 drawPerformanceT0QATrends.C:277
 drawPerformanceT0QATrends.C:278
 drawPerformanceT0QATrends.C:279
 drawPerformanceT0QATrends.C:280
 drawPerformanceT0QATrends.C:281
 drawPerformanceT0QATrends.C:282
 drawPerformanceT0QATrends.C:283
 drawPerformanceT0QATrends.C:284
 drawPerformanceT0QATrends.C:285
 drawPerformanceT0QATrends.C:286
 drawPerformanceT0QATrends.C:287
 drawPerformanceT0QATrends.C:288
 drawPerformanceT0QATrends.C:289
 drawPerformanceT0QATrends.C:290
 drawPerformanceT0QATrends.C:291
 drawPerformanceT0QATrends.C:292
 drawPerformanceT0QATrends.C:293
 drawPerformanceT0QATrends.C:294
 drawPerformanceT0QATrends.C:295
 drawPerformanceT0QATrends.C:296
 drawPerformanceT0QATrends.C:297
 drawPerformanceT0QATrends.C:298
 drawPerformanceT0QATrends.C:299
 drawPerformanceT0QATrends.C:300
 drawPerformanceT0QATrends.C:301
 drawPerformanceT0QATrends.C:302
 drawPerformanceT0QATrends.C:303