ROOT logo
/*
   //gSystem->AddIncludePath("-I$ALICE_ROOT/PWGPP/TPC");
   //.L $ALICE_ROOT/PWGPP/TPC/macros/MakeReportTPC.C+
   //
   //MakeReportTPC();

   gSystem->AddIncludePath("-I$ALICE_ROOT/TPC/macros");
   gROOT->LoadMacro("$ALICE_ROOT/TPC/macros/AliXRDPROOFtoolkit.cxx+")
   AliXRDPROOFtoolkit tool;
   TChain * chain = tool.MakeChain("summaryTPCQA.txt","tpcQA",0,200000);

   TTree *tree = chain->CopyTree("1");
*/


#if !defined(__CINT__) || defined(__MAKECINT__)
#include "TSystem.h"
#include "TMath.h"
#include "TVectorD.h"
#include "TFile.h"
#include "TGrid.h"
#include "TF1.h"
#include "TH1.h"
#include "TH2.h"
#include "TProfile.h"
#include "THnSparse.h"
#include "TTreeStream.h"
#include "AliPerformanceTPC.h"
#include "AliPerformanceDEdx.h"
#endif

TObject *pTPCObject=0;
TObject *pTPCObjectGain=0;
TTreeSRedirector  *pcstream=0;
void Init();
void ReadObjects(const char * path=0);
void MakeReportTPC(Int_t run, const char *path=0 );
void AnalyzeNCL();
void AnalyzeDrift();
void AnalyzeGain();

void Init(){
  //
  //
  //
  gSystem->Load("libANALYSIS.so");
  gSystem->Load("libANALYSISalice.so");
  gSystem->Load("libTENDER.so");
  gSystem->Load("libCORRFW.so");
  gSystem->Load("libPWG0base.so");
  gSystem->Load("libPWG0dep.so");
  gSystem->Load("libPWG0selectors.so");
  gSystem->Load("libPWGPP.so");
  gSystem->Load("libTPCcalib"); 
//   gSystem->Setenv("alien_CLOSE_SE","ALICE::GSI::SE");
//   TGrid::Connect("alien://",0,0,"t"); 
//   gSystem->Setenv("alien_CLOSE_SE","ALICE::GSI::SE");    
}


void ReadObjects(const char * path){
  //
  //
  //
  TFile *f =0;
  if (path) f=TFile::Open(Form("%s/TPC.PerformanceQAQA.root",path));
  if (!path) f=TFile::Open("TPC.Performance.root");
  if (!f){
    printf("File %s not available\n", path);
    return;
  }
  TList *list = (TList*)f->Get("TPC");
  if (!list){
    printf("QA %s not available\n", path);
    return;
  }
  pTPCObject= (AliPerformanceTPC*)list->FindObject("AliPerformanceTPC");
  pTPCObjectGain = (AliPerformanceDEdx*)list->FindObject("AliPerformanceDEdxTPCInner");
}


void MakeReportTPC(Int_t run, const char *path ){
  //
  // make a tpcQA report
  //  typical variables exported to the tree
  //
  Init();
  ReadObjects(path);
  
  pcstream= new TTreeSRedirector("TPC.PerformanceSummary.root");
  (*pcstream)<<"tpcQA"<<"run="<<run;
  AnalyzeNCL();
  AnalyzeDrift();
  AnalyzeGain();
  (*pcstream)<<"tpcQA"<<"\n";
  delete pcstream;
}


void AnalyzeNCL(){
  //
  // NCL statistic
  //    
  // variables:
  static Double_t meanTPCnclF=0;
  static Double_t rmsTPCnclF=0;
  static Double_t slopeATPCnclF=0;
  static Double_t slopeCTPCnclF=0;
  static Double_t slopeATPCnclFErr=0;
  static Double_t slopeCTPCnclFErr=0;
  static Double_t meanTPCncl=0;
  static Double_t rmsTPCncl=0;
  static Double_t slopeATPCncl=0;
  static Double_t slopeCTPCncl=0;
  static Double_t slopeATPCnclErr=0;
  static Double_t slopeCTPCnclErr=0;
  AliPerformanceTPC * pTPC=  (AliPerformanceTPC *)pTPCObject;

  TH1* his1D=0;
  TProfile* hprof=0;
  static TF1 *fpol1 = new TF1("fpol1","pol1");
  //
  // all clusters
  // eta cut - +-1
  // pt cut  - +-0.250 GeV
  pTPC->GetTPCTrackHisto()->GetAxis(5)->SetRangeUser(-1.,1.);
  pTPC->GetTPCTrackHisto()->GetAxis(7)->SetRangeUser(0.25,10);
  his1D = pTPC->GetTPCTrackHisto()->Projection(0);
  meanTPCncl= his1D->GetMean();
  rmsTPCncl= his1D->GetRMS();
  delete his1D;
  hprof = pTPC->GetTPCTrackHisto()->Projection(0,5)->ProfileX();
  hprof->Fit(fpol1,"QNR","QNR",0,0.8);
  slopeATPCncl= fpol1->GetParameter(1);
  slopeATPCnclErr= fpol1->GetParError(1);
  hprof->Fit(fpol1,"QNR","QNR",-0.8,0.0);
  slopeCTPCncl= fpol1->GetParameter(1);
  slopeCTPCnclErr= fpol1->GetParameter(1);
  delete hprof;
  //
  // findable clusters
  //
  pTPC->GetTPCTrackHisto()->GetAxis(2)->SetRangeUser(0.4,1.1);
  his1D = pTPC->GetTPCTrackHisto()->Projection(2);
  meanTPCnclF= his1D->GetMean();
  rmsTPCnclF= his1D->GetRMS();
  delete his1D;
  his1D = pTPC->GetTPCTrackHisto()->Projection(2,5)->ProfileX();
  his1D->Fit(fpol1,"QNR","QNR",0,0.8);
  slopeATPCnclF= fpol1->GetParameter(1);
  slopeATPCnclFErr= fpol1->GetParError(1);
  his1D->Fit(fpol1,"QNR","QNR",-0.8,0.0);
  slopeCTPCnclF= fpol1->GetParameter(1);
  slopeCTPCnclFErr= fpol1->GetParameter(1);
  delete his1D;
  printf("Cluster QA report\n");
  printf("meanTPCnclF=\t%f\n",meanTPCnclF);
  printf("rmsTPCnclF=\t%f\n",rmsTPCnclF);
  printf("slopeATPCnclF=\t%f\n",slopeATPCnclF);
  printf("slopeCTPCnclF=\t%f\n",slopeCTPCnclF);
  printf("meanTPCncl=\t%f\n",meanTPCncl);
  printf("rmsTPCncl=\t%f\n",rmsTPCncl);
  printf("slopeATPCncl=\t%f\n",slopeATPCncl);
  printf("slopeCTPCncl=\t%f\n",slopeCTPCncl);
  //
  // dump results to the tree
  //
  (*pcstream)<<"tpcQA"<<
    "meanTPCnclF="<<meanTPCnclF <<   
    "rmsTPCnclF="<<rmsTPCnclF <<
    "slopeATPCnclF="<< slopeATPCnclF<<
    "slopeCTPCnclF="<< slopeCTPCnclF<<
    "slopeATPCnclFErr="<< slopeATPCnclFErr<<
    "slopeCTPCnclFErr="<< slopeCTPCnclFErr<<
    "meanTPCncl="<<meanTPCncl <<
    "rmsTPCncl="<< rmsTPCncl<<
    "slopeATPCncl="<< slopeATPCncl<<
    "slopeCTPCncl="<< slopeCTPCncl<<
    "slopeATPCnclErr="<< slopeATPCnclErr<<
    "slopeCTPCnclErr="<< slopeCTPCnclErr;

    
}

void AnalyzeDrift(){
  //
  // Analyze drift velocity imperfections
  //
  // variables:
  static Double_t offsetdZA=0;
  static Double_t slopedZA=0;
  static Double_t offsetdZC=0;
  static Double_t slopedZC=0;
  static Double_t offsetdZAErr=0;
  static Double_t slopedZAErr=0;
  static Double_t offsetdZCErr=0;
  static Double_t slopedZCErr=0;
  static Double_t offsetdZAchi2=0;
  static Double_t slopedZAchi2=0;
  static Double_t offsetdZCchi2=0;
  static Double_t slopedZCchi2=0;
  AliPerformanceTPC * pTPC=  (AliPerformanceTPC *)pTPCObject;

  TH1* his1D=0;
  TH2* his2D=0;
  static TF1 *fpol1 = new TF1("fpol1","pol1");
  TObjArray arrayFit;
  his2D = pTPC->GetTPCTrackHisto()->Projection(4,5);
  his2D->FitSlicesY(0,0,-1,10,"QNR",&arrayFit);
  delete his2D;
  his1D = (TH1*) arrayFit.At(1);
  his1D->Fit(fpol1,"QNRROB=0.8","QNR",-0.8,-0.1);
  offsetdZC=fpol1->GetParameter(0);
  slopedZC=fpol1->GetParameter(1);
  //offsetdZCchi2=fpol1->GetChisquare();
  slopedZCchi2=fpol1->GetChisquare();
  //
  his1D->Fit(fpol1,"QNRROB=0.8","QNR",0.1,0.8);
  offsetdZA=fpol1->GetParameter(0);
  slopedZA=fpol1->GetParameter(1);
  offsetdZAErr=fpol1->GetParError(0);
  slopedZAErr=fpol1->GetParError(1);
  offsetdZAchi2=fpol1->GetChisquare();
  slopedZAchi2=fpol1->GetChisquare();
  //
  printf("Drift velocity QA report\n");
  printf("offsetdZA\t%f\n",offsetdZA);
  printf("slopedZA\t%f\n",slopedZA);
  printf("offsetdZC\t%f\n",offsetdZC);
  printf("slopedZC\t%f\n",slopedZC);
  //
  // dump drift QA values
  //
  (*pcstream)<<"tpcQA"<<
    "offsetdZA="<< offsetdZA<<
    "slopedZA="<< slopedZA<<
    "offsetdZC="<< offsetdZC<<
    "slopedZC="<<slopedZC<<
    //
    "offsetdZAErr="<< offsetdZAErr<<
    "slopedZAErr="<< slopedZAErr<<
    "offsetdZCErr="<< offsetdZCErr<<
    "slopedZCErr="<<slopedZCErr<<
    //
    "offsetdZAchi2="<< offsetdZAchi2<<
    "slopedZAchi2="<< slopedZAchi2<<
    "offsetdZCchi2="<< offsetdZCchi2<<
    "slopedZCchi2="<<slopedZCchi2;
  
}


void AnalyzeGain(){
  //
  // gain statistic
  //
  AliPerformanceDEdx * pTPCgain =  (AliPerformanceDEdx *)pTPCObjectGain;
  static TVectorD MIPvsSector(36);
  static TVectorD sector(36);
  static Float_t MIPmean = 0;
  static Float_t MIPresolution = 0;
  static Float_t attachSlopeC = 0;
  static Float_t attachSlopeA = 0;

  MIPvsSector.Zero();
  //
  // select MIP particles
  //
  if (pTPCgain){
    pTPCgain->GetDeDxHisto()->GetAxis(7)->SetRangeUser(0.4,0.55);
    pTPCgain->GetDeDxHisto()->GetAxis(0)->SetRangeUser(35,60);
    pTPCgain->GetDeDxHisto()->GetAxis(6)->SetRangeUser(80,160);
    pTPCgain->GetDeDxHisto()->GetAxis(5)->SetRangeUser(-1,1);
    //
    // MIP position and resolution
    //
    TF1 gausFit("gausFit","gaus");
    TH1 * hisProj1D = pTPCgain->GetDeDxHisto()->Projection(0);
    hisProj1D->Fit(&gausFit,"QN","QN");
    delete hisProj1D;
    MIPmean = gausFit.GetParameter(1);
    MIPresolution = 0;
    if (MIPmean!=0) MIPresolution = gausFit.GetParameter(2)/MIPmean;
    //
    // MIP position vs. dip angle (attachment)
    //
    pTPCgain->GetDeDxHisto()->GetAxis(5)->SetRangeUser(-3,0);
    TH2* his2D = pTPCgain->GetDeDxHisto()->Projection(0,5);
    TF1 * fpol = new TF1("fpol","pol1");
    TObjArray arrayFit;
    his2D->FitSlicesY(0,0,-1,10,"QN",&arrayFit);
    delete his2D;
    TH1 * his1D = (TH1*) arrayFit.At(1);
    his1D->Fit(fpol,"QNROB=0.8","QNR",-1,0);
    attachSlopeC = fpol->GetParameter(1);
    //
    pTPCgain->GetDeDxHisto()->GetAxis(5)->SetRangeUser(0,3);
    TH2* his2DA = pTPCgain->GetDeDxHisto()->Projection(0,5);
    TF1 * fpolA = new TF1("fpolA","pol1");
    TObjArray arrayFitA;
    his2DA->FitSlicesY(0,0,-1,10,"QN",&arrayFit);
    delete his2DA;
    TH1 * his1DA = (TH1*) arrayFit.At(1);
    his1DA->Fit(fpolA,"QNROB=0.8","QN",0,1);
    attachSlopeA = fpolA->GetParameter(1);
    //
    // MIP position vs. sector
    //
    pTPCgain->GetDeDxHisto()->GetAxis(5)->SetRangeUser(-3,0); // C side
    for(Int_t i = 0; i < 18; i++) { // loop over sectors; correct mapping to be checked!
      TH1* his1D=0;
      Float_t phiLow = -TMath::Pi() + i*(20./360.)*(2*TMath::Pi());
      Float_t phiUp  = -TMath::Pi() + (i+1)*(20./360.)*(2*TMath::Pi());
      pTPCgain->GetDeDxHisto()->GetAxis(1)->SetRangeUser(phiLow,phiUp);
      his1D = pTPCgain->GetDeDxHisto()->Projection(0);
      TF1 gausFunc("gausFunc","gaus");
      his1D->Fit(&gausFunc, "QN");
      MIPvsSector(i) = gausFunc.GetParameter(1);
      sector(i)=i;
      delete his1D;
    }
    //
    pTPCgain->GetDeDxHisto()->GetAxis(5)->SetRangeUser(0,3); // A side
    for(Int_t i = 0; i < 18; i++) { // loop over sectors; correct mapping to be checked!
      TH1* his1D=0;
      Float_t phiLow = -TMath::Pi() + i*(20./360.)*(2*TMath::Pi());
      Float_t phiUp  = -TMath::Pi() + (i+1)*(20./360.)*(2*TMath::Pi());
      pTPCgain->GetDeDxHisto()->GetAxis(1)->SetRangeUser(phiLow,phiUp);
      his1D = pTPCgain->GetDeDxHisto()->Projection(0);
      TF1 gausFunc("gausFunc","gaus");
      his1D->Fit(&gausFunc, "QN");
      MIPvsSector(i+18) = gausFunc.GetParameter(1);
      sector(i+18)=i+18;
      delete his1D;
    }
  }
  //
  printf("Gain QA report\n");
  printf("MIP mean\t%f\n",MIPmean);
  printf("MIP resolution\t%f\n",MIPresolution);
  printf("MIPslopeA\t%f\n",attachSlopeA);
  printf("MIPslopeC\t%f\n",attachSlopeC);
  //
  (*pcstream)<<"tpcQA"<<
    "MIPattachSlopeC="<<attachSlopeC<<
    "MIPattachSlopeA="<<attachSlopeA<<
    "MIPresolution="<<MIPresolution<<
    "MIPvsSector.="<<&MIPvsSector<<
    "sector.="<<&sector<<
    "MIPmean="<<MIPmean;

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