ROOT logo
/////////////////////////////////////////////////////////////////////////////////////////
// AODQAChecks.C
//
// Performs some run-by-run high-level QA checks on AOD data 
//    for runs marked with global quality "good" in the RCT
//    for the LHC10h period
//
// Note that the following macros must be in the current
//    directory: CheckEfficiencies.C, CheckIntegratedRawYield.C,
//    CheckMatchingEfficiency.C, CheckNSigmaStability.C,
//    FindOutliers.C, and PlotAndSave.C
//
// Written by John Groh, summer student (Summer 2012)
// Advisors: Michele Floris and Alexander Kalweit
/////////////////////////////////////////////////////////////////////////////////////////

// for cout
#include <iostream>

// for processing .txt file with run numbers
#include <fstream>
using namespace std;

// global constants
const Int_t nPart = 3;
TString Particle[nPart] = {"Pion", "Kaon", "Proton"};
const Int_t nCharge = 2;
TString Charge[nCharge] = {"Pos", "Neg"};
TString Sign[nCharge] = {"Plus", "Minus"};
Int_t Color[nPart] = {1,2,4};
Int_t Marker[nPart*nCharge] = {20,21,22,24,25,26};
TString Names[nPart*nCharge] = {"#pi^{+}",
				"K^{+}",
				"p",
				"#pi^{-}",
				"K^{-}",
				"#bar{p}"};

// possible cuts to use -   0    1    2    3
Double_t CentCutMin[4] =   {0,  30,  30,  30};
Double_t CentCutMax[4] =   {5,  40,  40,  40};
Double_t QvecCutMin[4] =   {0,   0,   0, 1.5};
Double_t QvecCutMax[4] = {100, 100, 0.4, 100};
Double_t EtaMin[4] =    {-0.8,-0.8,-0.8,-0.8};
Double_t EtaMax[4] =     {0.8, 0.8, 0.8, 0.8};
Double_t Nsigmapid = 3.;
UInt_t trkbit = 1024;

// fixed Pt values chosen for efficiency and matching efficiency plots (GeV)
const Float_t FixedPtEff = 0.4;
const Float_t FixedPtMatchEff = 0.9;

// inclusions for functions called
#include "CheckIntegratedRawYield.C"
#include "CheckNSigmaStability.C"
#include "CheckEfficiencies.C"
#include "CheckMatchingEfficiency.C"
#include "PlotAndSave.C"
#include "FindOutliers.C"

//--------------------
// Start of function -
//--------------------
// useMC selects whether to use Monte Carlo or Data - must be run seperately for each
// icut selects which cut to use (2 and 3 have low statistics and cause divide-by-zero errors, so don't use)
// nSigmaCut is the size of the deviation with which to determine outliers
void AODQAChecks(Bool_t useMC = 1, Int_t icut = 1, const Float_t nSigmaCut = 3)
{
  Printf("\n\n--- Running AODQAChecks() with useMC = %i ---\n\n",useMC);

  gSystem->Load("libCore.so");
  gSystem->Load("libPhysics.so");
  gSystem->Load("libTree");
  gSystem->Load("libMatrix");
  gSystem->Load("libSTEERBase");
  gSystem->Load("libESD");
  gSystem->Load("libAOD");
  gSystem->Load("libANALYSIS");
  gSystem->Load("libOADB");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libTENDER");
  gSystem->Load("libCORRFW");
  gSystem->Load("libPWGTools");
  gSystem->Load("libPWGLFspectra");
  gSystem->Load("libProof.so");
  gSystem->AddIncludePath("-I$ALICE_ROOT/include");

  TString fold = "AODQAChecks";

  // get number of runs used
  Int_t nRunsTemp = 0;
  Int_t dummy;
  ifstream runList("output/AODQAChecks/RunList.txt");
  while (!runList.eof())
    {
      runList >> dummy;
      nRunsTemp++;
    }
  runList.close();

  // I know this is silly, but you need a const for array sizes.
  // Also, it seems to want to read one more line than there is in the file
  const Int_t nRuns = nRunsTemp - 1;

  // fill an array with the run numbers and another with the file names
  runList.open("output/AODQAChecks/RunList.txt");
  Int_t runs[nRuns];
  TString dataFiles[nRuns];
  
  for (Int_t irun=0; irun<nRuns; irun++)
    {
      runList >> runs[irun];
      if (useMC) dataFiles[irun] = Form("output/%s/MC/AnalysisResults%i.root",fold.Data(),runs[irun]);
      else dataFiles[irun] = Form("output/%s/DATA/AnalysisResults%i.root",fold.Data(),runs[irun]);
    }
  runList.close();

  // choose which TDirectory in the .root file to use
  TString sname;
  if (useMC)
    sname = Form("OutputAODSpectraTask_MC_Cent%.0fto%.0f_QVec%.1fto%.1f_Eta%.1fto%.1f_%.1fSigmaPID_TrBit%d",CentCutMin[icut],CentCutMax[icut],QvecCutMin[icut],QvecCutMax[icut],EtaMin[icut],EtaMax[icut],Nsigmapid,trkbit);
  else
    sname = Form("OutputAODSpectraTask_Data_Cent%.0fto%.0f_QVec%.1fto%.1f_Eta%.1fto%.1f_%.1fSigmaPID_TrBit%d",CentCutMin[icut],CentCutMax[icut],QvecCutMin[icut],QvecCutMax[icut],EtaMin[icut],EtaMax[icut],Nsigmapid,trkbit);

  // create a .root file for output
  TFile * fout = new TFile(Form("results/%s/Res_%s_AODQAChecks.root",fold.Data(),sname.Data()),"RECREATE");
  TFile * file;
  TDirectoryFile * Dir;
  AliSpectraAODTrackCuts * tcuts;
  AliSpectraAODEventCuts * ecuts;
  AliSpectraAODHistoManager * hman;

  // histograms for stability of nsigma distribution plots
  TH1F * TPCnsigMeanTrendPion = new TH1F("TPCnsigMeanTrendPion","",nRuns,0,nRuns);
  TH1F * TPCnsigMeanTrendKaon = new TH1F("TPCnsigMeanTrendKaon","",nRuns,0,nRuns);
  TH1F * TPCnsigMeanTrendProton = new TH1F("TPCnsigMeanTrendProton","",nRuns,0,nRuns);
  TH1F * TPCnsigSigmaTrendPion = new TH1F("TPCnsigSigmaTrendPion","",nRuns,0,nRuns);
  TH1F * TPCnsigSigmaTrendKaon = new TH1F("TPCnsigSigmaTrendKaon","",nRuns,0,nRuns);
  TH1F * TPCnsigSigmaTrendProton = new TH1F("TPCnsigSigmaTrendProton","",nRuns,0,nRuns);
  TH1F * TOFnsigMeanTrendPion = new TH1F("TOFnsigMeanTrendPion","",nRuns,0,nRuns);
  TH1F * TOFnsigMeanTrendKaon = new TH1F("TOFnsigMeanTrendKaon","",nRuns,0,nRuns);
  TH1F * TOFnsigMeanTrendProton = new TH1F("TOFnsigMeanTrendProton","",nRuns,0,nRuns);
  TH1F * TOFnsigSigmaTrendPion = new TH1F("TOFnsigSigmaTrendPion","",nRuns,0,nRuns);
  TH1F * TOFnsigSigmaTrendKaon = new TH1F("TOFnsigSigmaTrendKaon","",nRuns,0,nRuns);
  TH1F * TOFnsigSigmaTrendProton = new TH1F("TOFnsigSigmaTrendProton","",nRuns,0,nRuns);

  // histograms for integrated raw yield stability plots
  TH1F * IntegRawYieldAll = new TH1F("IntegRawYieldAll","",nRuns,0,nRuns);
  TH1F * IntegRawYieldPiPlus = new TH1F("IntegRawYieldPiPlus","",nRuns,0,nRuns);
  TH1F * IntegRawYieldPiMinus = new TH1F("IntegRawYieldPiMinus","",nRuns,0,nRuns);
  TH1F * IntegRawYieldKPlus = new TH1F("IntegRawYieldKPlus","",nRuns,0,nRuns);  
  TH1F * IntegRawYieldKMinus = new TH1F("IntegRawYieldKMinus","",nRuns,0,nRuns);
  TH1F * IntegRawYieldProton = new TH1F("IntegRawYieldProton","",nRuns,0,nRuns);
  TH1F * IntegRawYieldAntiproton = new TH1F("IntegRawYieldAntiproton","",nRuns,0,nRuns);

  // objects for efficiency plots
  if (useMC)
    {
      TCanvas * cEfficienciesAllRuns = new TCanvas("cEfficienciesAllRuns","cEfficienciesAllRuns",50,25,700,500);
      cEfficienciesAllRuns->Divide(3,2);
      TH1F * EfficiencyPiPlus = new TH1F("EfficiencyPiPlus","",nRuns,0,nRuns);
      TH1F * EfficiencyKPlus = new TH1F("EfficiencyKPlus","",nRuns,0,nRuns);
      TH1F * EfficiencyProton = new TH1F("EfficiencyProton","",nRuns,0,nRuns);
      TH1F * EfficiencyPiMinus = new TH1F("EfficiencyPiMinus","",nRuns,0,nRuns);
      TH1F * EfficiencyKMinus = new TH1F("EfficiencyKMinus","",nRuns,0,nRuns);
      TH1F * EfficiencyAntiproton = new TH1F("EfficiencyAntiproton","",nRuns,0,nRuns);
    }
  else
    {
      TCanvas * cEfficienciesAllRuns = 0x0;
      TH1F * EfficiencyPiPlus = 0x0;
      TH1F * EfficiencyKPlus = 0x0;
      TH1F * EfficiencyProton = 0x0;
      TH1F * EfficiencyPiMinus = 0x0;
      TH1F * EfficiencyKMinus = 0x0;
      TH1F * EfficiencyAntiproton = 0x0;
    }


  // objects for matching efficiency plots
  TH1F * MatchEffPos = new TH1F("MatchEffPos","",nRuns,0,nRuns);
  MatchEffPos->Sumw2();
  TH1F * MatchEffNeg = new TH1F("MatchEffNeg","",nRuns,0,nRuns);
  MatchEffNeg->Sumw2();

  // overall loop over data files (1 per run)
  for (Int_t irun=0; irun<nRuns; irun++)
    {
      Printf("\n--- Processing data from run %i ---\n", runs[irun]);

      // open file and print all objects in file
      file = TFile::Open(dataFiles[irun].Data());     
      if (!file)
	{
	  Printf("\n\n!!! ERROR: Could not open file %s !!!\n\n",dataFiles[irun].Data());
	  continue;
	}
      file->Print();
      Printf("sname: %s", sname.Data());

      // choose the right directory, event, and histo managers
      Dir = (TDirectoryFile*)file->Get(Form("%s",sname.Data()));
      if (!Dir)
	{
	  Printf("\n\n!!! ERROR: Dir is a null pointer. Skipping to next file !!!\n\n");
	  continue;
	}
      ecuts = (AliSpectraAODEventCuts*)Dir->Get("Event Cuts");
      if (!ecuts)
	{
	  Printf("\n\n!!! ERROR: ecuts is a null pointer. Skipping to next file !!!\n\n");
	  continue;
	}      
      tcuts = (AliSpectraAODTrackCuts*)Dir->Get("Track Cuts");
      if (!tcuts)
	{
	  Printf("\n\n!!! ERROR: tcuts is a null pointer. Skipping to next file !!!\n\n");
	  continue;
	}      
      hman = (AliSpectraAODHistoManager*)Dir->Get("SpectraHistos");
      if (!hman)
	{
	  Printf("\n\n!!! ERROR: hman is a null pointer. Skipping to next file !!!\n\n");
	  continue;
	}

      //---------------------------------------------------------------------------------------
      // Find the trends in the means and sigmas of fits to the peaks of fixed-Pt projections -
      // of the nsigma distributions of the TPC and TOF as a function of the run number       -
      //---------------------------------------------------------------------------------------
      CheckNSigmaStability(hman,
			   TPCnsigMeanTrendPion,
			   TPCnsigMeanTrendKaon,
			   TPCnsigMeanTrendProton, 
			   TPCnsigSigmaTrendPion,
			   TPCnsigSigmaTrendKaon,
			   TPCnsigSigmaTrendProton,
			   TOFnsigMeanTrendPion,
			   TOFnsigMeanTrendKaon,
			   TOFnsigMeanTrendProton,
			   TOFnsigSigmaTrendPion,
			   TOFnsigSigmaTrendKaon,
			   TOFnsigSigmaTrendProton,
			   runs,
			   nRuns,
			   irun,
			   useMC);

      //---------------------------------------------------------------------------------
      // plot the stability of the integrated raw yield as a function of the run number -
      //---------------------------------------------------------------------------------
      CheckIntegratedRawYield(ecuts,
			      hman,
			      IntegRawYieldAll,
			      IntegRawYieldPiPlus,
			      IntegRawYieldPiMinus,
			      IntegRawYieldKPlus,
			      IntegRawYieldKMinus,
			      IntegRawYieldProton,
			      IntegRawYieldAntiproton,
			      runs,
			      irun,
			      nRuns,
			      Names,
			      useMC);
      
      //-----------------------------------------------------------------------------
      // find the trend in the MC correction factor as a function of the run number -
      //-----------------------------------------------------------------------------
      if (useMC) CheckEfficiencies(hman,
				   cEfficienciesAllRuns,
				   EfficiencyPiPlus,
				   EfficiencyKPlus,
				   EfficiencyProton,
				   EfficiencyPiMinus,
				   EfficiencyKMinus,
				   EfficiencyAntiproton,
				   FixedPtEff,
				   runs,
				   nRuns,
				   irun);

      //-------------------------------------------------------------------------------
      // for a fixed Pt, plot the matching efficiency as a function of the run number -
      //-------------------------------------------------------------------------------
      CheckMatchingEfficiency(tcuts,
			      MatchEffPos,
			      MatchEffNeg,
			      FixedPtMatchEff,
			      runs,
			      irun,
			      nRuns,
			      useMC);

      //---------------------------------------------------------------------------
      // save eta-phi distributions for each run on a seperate page of a pdf file -
      //---------------------------------------------------------------------------
      // canvas for temporarily drawing
      TCanvas * cEtaPhi = new TCanvas("cEtaPhi","cEtaPhi");
      TH2F * hEtaPhi = (TH2F*)((TH2F*)tcuts->GetHistoEtaPhiHighPt()->Clone("hEtaPhi"));
      hEtaPhi->Rebin2D(4);
      hEtaPhi->Scale(1./hEtaPhi->GetEntries());
      gPad->SetGridy();
      gPad->SetGridx();
      hEtaPhi->DrawClone("COLZ");

      // legend
      TLegend * lEtaPhi = new TLegend(0.4,0.85,.6,.95);
      lEtaPhi->SetFillColor(0);
      lEtaPhi->AddEntry(hEtaPhi,Form("Run %i",runs[irun]),"");
      if (useMC) lEtaPhi->AddEntry(hEtaPhi,"MC","");
      else lEtaPhi->AddEntry(hEtaPhi,"DATA","");
      lEtaPhi->DrawClone();

      // save to a pdf and close the temporary canvas
      if (useMC)
	{
	  if (irun == 0) cEtaPhi->SaveAs("Plots/MC/EtaPhi.pdf(","pdf");
	  else if (irun < nRuns-1) cEtaPhi->SaveAs("Plots/MC/EtaPhi.pdf","pdf");
	  else if (irun == nRuns-1) cEtaPhi->SaveAs("Plots/MC/EtaPhi.pdf)","pdf");
	  cEtaPhi->Close();
	}
      else
	{
	  if (irun == 0) cEtaPhi->SaveAs("Plots/DATA/EtaPhi.pdf(","pdf");
	  else if (irun < nRuns-1) cEtaPhi->SaveAs("Plots/DATA/EtaPhi.pdf","pdf");
	  else if (irun == nRuns-1) cEtaPhi->SaveAs("Plots/DATA/EtaPhi.pdf)","pdf");
	  cEtaPhi->Close();
	}
      
      // close the file and clean up before the next iteration
      file->Close();
      //delete file;
      //delete Dir;
      //delete hman;

      Printf("\n--- Done Processing data from run %i ---\n", runs[irun]);

    }

  //------------------------------------------------------------
  // Plot all the results and save them to the output file     -
  //------------------------------------------------------------
  PlotAndSave(runs,
	      nRuns,
	      useMC,
	      fout,
	      
	      TPCnsigMeanTrendPion,
	      TPCnsigMeanTrendKaon,
	      TPCnsigMeanTrendProton,
	      TPCnsigSigmaTrendPion,
	      TPCnsigSigmaTrendKaon,
	      TPCnsigSigmaTrendProton,
	      TOFnsigMeanTrendPion,
	      TOFnsigMeanTrendKaon,
	      TOFnsigMeanTrendProton,
	      TOFnsigSigmaTrendPion,
	      TOFnsigSigmaTrendKaon,
	      TOFnsigSigmaTrendProton,
	      
	      IntegRawYieldAll,
	      IntegRawYieldPiPlus,
	      IntegRawYieldKPlus,
	      IntegRawYieldProton,
	      IntegRawYieldPiMinus,
	      IntegRawYieldKMinus,
	      IntegRawYieldAntiproton,
	      
	      EfficiencyPiPlus,
	      EfficiencyKPlus,
	      EfficiencyProton,
	      EfficiencyPiMinus,
	      EfficiencyKMinus,
	      EfficiencyAntiproton,
	      
	      MatchEffPos,
	      MatchEffNeg);

  //------------------------------------------------------------------------------
  // Find the outliers from the efficiency, raw yield, matching efficiency, and  -
  // nsigma fit plots and print the corresponding run numbers to the console.    -
  // Also creates a .txt file in the results/ directory with info about outliers -
  //------------------------------------------------------------------------------
  FindOutliers(runs,
	       nRuns,
	       useMC,
	       icut,
	       nSigmaCut,
	       fout,
	       
	       TPCnsigMeanTrendPion,
	       TPCnsigMeanTrendKaon,
	       TPCnsigMeanTrendProton,
	       TPCnsigSigmaTrendPion,
	       TPCnsigSigmaTrendKaon,
	       TPCnsigSigmaTrendProton,
	       TOFnsigMeanTrendPion,
	       TOFnsigMeanTrendKaon,
	       TOFnsigMeanTrendProton,
	       TOFnsigSigmaTrendPion,
	       TOFnsigSigmaTrendKaon,
	       TOFnsigSigmaTrendProton,
	       
	       IntegRawYieldAll,
	       
	       EfficiencyPiPlus,
	       EfficiencyKPlus,
	       EfficiencyProton,
	       EfficiencyPiMinus,
	       EfficiencyKMinus,
	       EfficiencyAntiproton,
	       
	       MatchEffPos,
	       MatchEffNeg);

  
  // close the output file
  fout->Close();
  // also close the unused efficiency canvas
  if (useMC) cEfficienciesAllRuns->Close();
  
  Printf("\n\n--- End of AODQAChecks() ---\n");
}







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