ROOT logo
#include "TH1.h"
#include "TH2.h"
#include "TCanvas.h"
#include "TFile.h"
#include "TLine.h"
#include "TList.h"
#include "TMath.h"
#include "TPaveText.h"
#include "TObjArray.h"
#include "TString.h"
#include "TStyle.h"
#include "TROOT.h"
#include "TSystem.h"
#include "TF1.h"
#include "TPDF.h"
#include "TColor.h"

#include "AliPID.h"

void SetupStyle();
TH2* Get2DHistogramfromList(TList *pidqalist, const char* listname, const char* histoname);
void AddFit(TH2* h2d);
void PublishCanvas(TList *qaList, const char* det, const char* name, TString nadd="");
void SetupPadStyle();

void LoadLibs();
Int_t CheckLoadLibrary(const char* library);

TCanvas *fCanvas=0x0;

/*

Example (require aliroot environment)

root.exe -l -b -q $ALICE_ROOT/ANALYSIS/macros/MakePIDqaReport.C'("PIDqa.root")'

*/

void MakePIDqaReport(const char* inputFile, const char* outputFile="PIDqaReport.pdf")
{
  //
  // Make a pdf file with the efficiency report
  //

  LoadLibs();
  SetupStyle();

  TFile f(inputFile);
  if (!f.IsOpen()){
    printf("Could not open file '%s'\n",f.GetName());
    return;
  }

  TList *qaList = (TList*) f.Get("PIDqa");
  if (!qaList){
    printf("Could not fine list 'PIDqa' in file '%s'\n",f.GetName());
    return;
  }

  fCanvas=new TCanvas;

  TPDF p(outputFile);

  //
  // Invariant mass plots
  //


  //
  // Make QA info
  //

  // ITS PID
  PublishCanvas(qaList,"ITS","hNsigmaP_ITS_%s");

  // TPC PID
  PublishCanvas(qaList,"TPC","hNsigmaP_TPC_%s");
  //   if (man->GetCurrentPeriod()=="11h"){
    //     PublishCanvas(qaList,"TPC","hNsigmaP_TPC_%s_Hybrid","Hybrid");
  //     PublishCanvas(qaList,"TPC","hNsigmaP_TPC_%s_OROChigh","OROChigh");
  //   }

  // TPC PID after 3 sigma TOF cut
  PublishCanvas(qaList,"TPC_TOF","hNsigmaP_TPC_TOF_%s");

  // TOF PID
  PublishCanvas(qaList,"TOF","hNsigmaP_TOF_%s");

  // TRD PID
  fCanvas->Divide(2,3);
  TH2 *hLikeP_TRD_3tls_electron=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_3tls_electron");
  TH2 *hLikeP_TRD_3tls_pion=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_3tls_pion");
  TH2 *hLikeP_TRD_4tls_electron=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_4tls_electron");
  TH2 *hLikeP_TRD_4tls_pion=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_4tls_pion");
  TH2 *hLikeP_TRD_5tls_electron=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_5tls_electron");
  TH2 *hLikeP_TRD_5tls_pion=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_5tls_pion");

  /*
   *  cTRDnsigma[countcanvas]->cd(1);
   *  TPaveText pt3TRD(.02,.02,.49,.52);
   *  pt3TRD.SetTextAlign(11);
   *  pt3TRD.SetTextSizePixels(16);
   *  pt3TRD.AddText(Form(" TRD PID QA %s.%s.%d", first.Data(), man->GetCurrentPeriod().Data(), pass));
   *  pt3TRD.Draw();
   */
  fCanvas->cd(1);
  SetupPadStyle();
  hLikeP_TRD_3tls_electron->Draw("colz");
  fCanvas->cd(2);
  SetupPadStyle();
  hLikeP_TRD_3tls_pion->Draw("colz");
  fCanvas->cd(3);
  SetupPadStyle();
  hLikeP_TRD_4tls_electron->Draw("colz");
  fCanvas->cd(4);
  SetupPadStyle();
  hLikeP_TRD_4tls_pion->Draw("colz");
  fCanvas->cd(5);
  SetupPadStyle();
  hLikeP_TRD_5tls_electron->Draw("colz");
  fCanvas->cd(6);
  SetupPadStyle();
  hLikeP_TRD_5tls_pion->Draw("colz");

  fCanvas->Update();
  fCanvas->Clear();

  // TPC Response info
  TObjArray *qaInfo=(TObjArray*)qaList->FindObject("QAinfo");
  TObjArray *tpcInfo=0x0;
  if (qaInfo && (tpcInfo=(TObjArray*)qaInfo->FindObject("TPC_info"))){
    TObjArray *tpcSplineInfo=(TObjArray*)tpcInfo->FindObject("TPC_spline_names");
    TObjArray *tpcConfigInfo=(TObjArray*)tpcInfo->FindObject("TPC_config_info");
    fCanvas->Divide(1,2);
  
    TPaveText pt(.1,.1,.9,.9,"NDC");
    pt.SetBorderSize(1);
    pt.SetFillColor(0);
    pt.SetTextSizePixels(16);

    if (tpcSplineInfo){
      for (Int_t i=0; i<tpcSplineInfo->GetEntriesFast();++i) pt.AddText(tpcSplineInfo->At(i)->GetName());
    }
    
    TPaveText pt2(.1,.1,.9,.9,"NDC");
    pt2.SetBorderSize(1);
    pt2.SetFillColor(0);
    pt2.SetTextSizePixels(16);
    if (tpcConfigInfo){
      for (Int_t i=0; i<tpcConfigInfo->GetEntriesFast();++i) pt2.AddText(tpcConfigInfo->At(i)->GetName());
    }

    fCanvas->cd(1);
    pt.Draw();
    fCanvas->cd(2);
    pt2.Draw();
    
    fCanvas->Update();
    fCanvas->Clear();
  }
  
  delete qaList;

  p.Close();
  delete fCanvas;
}

void SetupStyle()
{
  const Int_t NCont=255;

  TStyle *st = new TStyle("mystyle","mystyle");
  gROOT->GetStyle("Plain")->Copy((*st));
  st->SetTitleX(0.1);
  st->SetTitleW(0.8);
  st->SetTitleH(0.08);
  st->SetStatX(.9);
  st->SetStatY(.9);
  st->SetNumberContours(NCont);
  st->SetPalette(1,0);
  st->SetOptStat("erm");
  st->SetOptFit(0);
  st->SetGridColor(kGray+1);
  st->SetPadGridX(kTRUE);
  st->SetPadGridY(kTRUE);
  st->SetPadTickX(kTRUE);
  st->SetPadTickY(kTRUE);
  st->cd();

  const Int_t NRGBs = 5;
  Double_t stops[NRGBs] = { 0.00, 0.34, 0.61, 0.84, 1.00 };
  Double_t red[NRGBs]   = { 0.00, 0.00, 0.87, 1.00, 0.51 };
  Double_t green[NRGBs] = { 0.00, 0.81, 1.00, 0.20, 0.00 };
  Double_t blue[NRGBs]  = { 0.51, 1.00, 0.12, 0.00, 0.00 };

  TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont);

}

TH2* Get2DHistogramfromList(TList *pidqalist, const char* listname, const char* histoname)
{
  TList *histolist = (TList *)pidqalist->FindObject(listname);
  if (!histolist) {printf(" list not found \n");  return 0x0; }
  TH2* histo = (TH2*)histolist->FindObject(histoname);
  //   if (!histo) {printf(" histogram not found \n");  return 0x0; }
  return histo;
}

void AddFit(TH2* h2d)
{
  //
  // Fit in slices and draw mean and sigma
  //
  TF1 *f1 = new TF1("f1", "gaus");
  f1->SetRange(-1.5,1.5);
  TObjArray aSlices;
  h2d->FitSlicesY(f1, 0,-1, 0, "QNR",&aSlices);
  aSlices.SetOwner(1);
  TH1* hMean=(TH1*)aSlices.At(1);
  TH1* hSigma=(TH1*)aSlices.At(2);
  TH1* hChi2=(TH1*)aSlices.At(3);
  hChi2->Scale(1./10.);
  aSlices.AddAt(0x0,1);
  aSlices.AddAt(0x0,2);
  aSlices.AddAt(0x0,3);
  hMean->SetMarkerStyle(20);
  hMean->SetMarkerSize(0.3);
  hMean->SetOption("same");
  h2d->GetListOfFunctions()->Add(hMean);
  hSigma->SetMarkerStyle(20);
  hSigma->SetMarkerSize(0.3);
  hSigma->SetOption("same");
  hSigma->SetMarkerColor(kMagenta);
  h2d->GetListOfFunctions()->Add(hSigma);
  hChi2->SetOption("same");
  hChi2->SetMarkerColor(kMagenta + 2);
  hChi2->SetLineColor(kMagenta + 2);
  h2d->GetListOfFunctions()->Add(hChi2);

  TLine *l=0x0;
  l=new TLine(h2d->GetXaxis()->GetXmin(),0,h2d->GetXaxis()->GetXmax(),0);
  l->SetLineStyle(2);
  h2d->GetListOfFunctions()->Add(l);
  l=new TLine(h2d->GetXaxis()->GetXmin(),1,h2d->GetXaxis()->GetXmax(),1);
  l->SetLineStyle(2);
  h2d->GetListOfFunctions()->Add(l);
}

void PublishCanvas(TList *qaList, const char* det, const char* name, TString nadd)
{
  //
  // draw all nSigma + signal histo
  //


  TObjArray arrHistos;

  TPaveText pt(.1,.1,.9,.9,"NDC");
  pt.SetBorderSize(1);
  pt.SetFillColor(0);
  pt.SetTextSizePixels(16);
  pt.AddText(Form("%s PID QA",det));
  if (!nadd.IsNull()){
    pt.AddText(nadd.Data());
    nadd.Prepend("_");
  }
  arrHistos.Add(&pt);

  TH2 *hSig=Get2DHistogramfromList(qaList,det,Form("hSigP_%s",det));
  if (hSig){
    hSig->SetOption("colz");
    arrHistos.Add(hSig);
  }

  for (Int_t i=0;i<AliPID::kSPECIESC;++i){
    //     for (Int_t i=0;i<AliPID::kSPECIES;++i){
    if (i==(Int_t)AliPID::kMuon) continue;
    TH2 *h=Get2DHistogramfromList(qaList,det,Form(name,AliPID::ParticleName(i)));
    if (!h) continue;
    h->SetOption("colz");
    AddFit(h);
    arrHistos.Add(h);
  }

  Int_t nPads=arrHistos.GetEntriesFast();
  Int_t nCols = (Int_t)TMath::Ceil( TMath::Sqrt(nPads) );
  Int_t nRows = (Int_t)TMath::Ceil( (Double_t)nPads/(Double_t)nCols );

  
  fCanvas->Divide(nCols,nRows);


  for (Int_t i=0; i<nPads;++i) {
    fCanvas->cd(i+1);
    SetupPadStyle();
    arrHistos.At(i)->Draw();
  }

  fCanvas->Update();
  fCanvas->Clear();

}

void SetupPadStyle()
{
  gPad->SetLogx();
  gPad->SetLogz();
  gPad->SetGridx();
  gPad->SetGridy();
  gPad->SetTickx();
  gPad->SetTicky();
}

void LoadLibs()
{
  CheckLoadLibrary("libCore");
  CheckLoadLibrary("libPhysics");
  CheckLoadLibrary("libMinuit");
  CheckLoadLibrary("libGui");
  CheckLoadLibrary("libXMLParser");
  
  CheckLoadLibrary("libGeom");
  CheckLoadLibrary("libVMC");
  
  CheckLoadLibrary("libNet");
  CheckLoadLibrary("libTree");
  CheckLoadLibrary("libProof");
  
  CheckLoadLibrary("libSTEERBase");
  CheckLoadLibrary("libESD");
  CheckLoadLibrary("libCDB");
  CheckLoadLibrary("libRAWDatabase");
  CheckLoadLibrary("libRAWDatarec");
  CheckLoadLibrary("libANALYSIS");
  CheckLoadLibrary("libSTEER");
  
  CheckLoadLibrary("libSTAT");
  
  CheckLoadLibrary("libAOD");
  CheckLoadLibrary("libOADB");
  CheckLoadLibrary("libANALYSISalice");
  CheckLoadLibrary("libCORRFW");
  
  
  CheckLoadLibrary("libTPCbase");
}

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