ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)

#include <Riostream.h>

// ROOT includes
#include "TString.h"
#include "TSystem.h"
#include "TROOT.h"
#include "TFile.h"
#include "TEnv.h"
#include "TObjArray.h"
#include "TObjString.h"
#include "TArrayI.h"
#endif

//_________________________________
TString GetConvertedFilename ( TString filename )
{
  TString convertedFilename = filename;
  convertedFilename.ReplaceAll(".pdf",".txt");
  return convertedFilename;
}

//_________________________________
TString GetTriggerShort ( TString trigName )
{
  TObjArray* arr = trigName.Tokenize("-");
  TString shortName = arr->At(0)->GetName();
  if ( arr->GetEntries() > 2 ) {
    shortName.Append(Form("-%s",arr->At(1)->GetName()));
  }
  delete arr;
  return shortName;
}

//_________________________________
Int_t GetPage ( TString pattern, TString filename )
{
  TString convertedFilename = GetConvertedFilename(filename);

  if ( gSystem->AccessPathName(convertedFilename.Data()) != 0 ) {
    gSystem->Exec(Form("gs -dBATCH -dNOPAUSE -sDEVICE=txtwrite -sOutputFile=- %s > %s",filename.Data(),convertedFilename.Data()));
  }

  ifstream inFile(convertedFilename.Data());
  if ( ! inFile.is_open() ) return -1;

  TObjArray* patternArr = pattern.Tokenize("&");
  TArrayI foundPages(patternArr->GetEntries());
  foundPages.Reset(-1);

  TString currLine = "";
  Int_t currPage = -1;
  Bool_t allOk = kFALSE;
  while ( ! inFile.eof() ) {
    currLine.ReadLine(inFile);
    if ( currLine.Contains("Page") ) {
      currLine.Remove(0,5);
      currPage = currLine.Atoi();
      foundPages.Reset(-1);
    }
    else {
      for ( Int_t ipat=0; ipat<patternArr->GetEntries(); ipat++ ) {
        TString currPattern = static_cast<TObjString*>(patternArr->At(ipat))->GetString();
        if ( currLine.Contains(currPattern.Data()) ) {
          foundPages[ipat] = currPage;
          Bool_t matchAll = kTRUE;
          for ( Int_t jpat=0; jpat<patternArr->GetEntries(); jpat++ ) {
            if ( foundPages[ipat] != foundPages[jpat] ) {
              matchAll = kFALSE;
              break;
            }
          }
          if ( matchAll ) {
            allOk = kTRUE;
            break;
          }
        }
      }
      if ( allOk ) break;
    }
  }
  inFile.close();
  delete patternArr;
  if ( ! allOk ) {
    printf("Warning: cannot find %s\n",pattern.Data());
    return -1;
  }
  return foundPages[0];
}


//_________________________________
void EscapeSpecialChars ( TString& str )
{
  str.ReplaceAll("\\","");
  TString specials = "_";
  TObjArray* specialList = specials.Tokenize(" ");
  for ( Int_t ichar=0; ichar<specialList->GetEntries(); ichar++ ) {
    TString currChar = static_cast<TObjString*>(specialList->At(ichar))->GetString();
    if ( str.Contains(currChar.Data()) ) str.ReplaceAll(currChar.Data(),Form("\\\%s",currChar.Data()));
  }
  delete specialList;
}

//_________________________________
void BeginFrame ( TString title, ofstream& outFile )
{
  outFile << endl;
  outFile << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl;
  outFile << "\\begin{frame}" << endl;
  outFile << " \\frametitle{" << title.Data() << "}" << endl;
}

//_________________________________
void EndFrame ( ofstream& outFile )
{
  outFile << "\\end{frame}" << endl;
}

//_________________________________
void MakeDefaultItem ( ofstream& outFile, TString defaultItem = "" )
{
  outFile << "\\begin{itemize}" << endl;
  outFile << " \\item " << defaultItem.Data() << endl;
  outFile << "\\end{itemize}" << endl;
}

//_________________________________
Bool_t MakeSingleFigureSlide ( TString pattern, TString filename, TString title, ofstream &outFile )
{
  Int_t pageNum = GetPage(pattern,filename);
  if ( pageNum<0 ) {
    return kFALSE;
  }

  BeginFrame(title,outFile);
  outFile << " \\begin{columns}[onlytextwidth]" << endl;
  outFile << "  \\column{\\textwidth}" << endl;
  outFile << "  \\centering" << endl;
  outFile << "  \\includegraphics[width=0.98\\textwidth,height=0.92\\textheight,page=" << pageNum << "]{" << gSystem->BaseName(filename.Data()) << "}" <<endl;
  outFile << " \\end{columns}" << endl;
  EndFrame(outFile);
  return kTRUE;
}

//_________________________________
Bool_t MakeTriggerSlide ( TString filename, ofstream &outFile )
{
  BeginFrame("Trigger chamber efficiencies", outFile);
  outFile << " \\begin{columns}[onlytextwidth]" << endl;
  outFile << "  \\column{0.66\\textwidth}" << endl;
  outFile << "  \\centering" << endl;
  for ( Int_t ich=0; ich<4; ich++ ) {
    if ( ich%2 == 0 ) outFile << endl;
    Int_t ipage = GetPage(Form("Trigger chamber efficiency vs run for chamber %i",11+ich),filename);
    outFile << "  \\includegraphics[width=0.48\\textwidth,page=" << ipage << "]{" << filename.Data() << "}" << endl;
  }
  outFile << "  \\column{0.34\\textwidth}" << endl;
  outFile << "  \\centering" << endl;
  Int_t ipage = GetPage("Multinomial probability",filename);
  outFile << "  \\includegraphics[width=0.98\\textwidth,page=" << ipage << "]{" << filename.Data() << "}" << endl;
  outFile << " \\end{columns}" << endl;
  EndFrame(outFile);
  return kTRUE;
}

//_________________________________
Bool_t MakeTriggerRPCslide ( TString filename, ofstream &outFile )
{
  BeginFrame("Trigger chamber efficiencies per RPC",outFile);
  outFile << " \\begin{columns}[onlytextwidth]" << endl;
  outFile << "  \\column{\\textwidth}" << endl;
  outFile << "  \\centering" << endl;
  for ( Int_t ich=0; ich<4; ich++ ) {
    if ( ich%2 == 0 ) outFile << endl;
    Int_t ipage = GetPage(Form("Trigger chamber efficiency vs run for chamber %i&RPC",11+ich),filename);
    outFile << "  \\includegraphics[width=0.37\\textwidth,page=" << ipage << "]{" << filename.Data() << "}" << endl;
  }
  outFile << " \\end{columns}" << endl;
  EndFrame(outFile);
  return kTRUE;
}

//_________________________________
void MakeSummary ( TString period, ofstream &outFile )
{
  BeginFrame("Summary I",outFile);
  outFile << "General informations" << endl;
  outFile << "\\begin{itemize}" << endl;
  outFile << " \\item Runs selected for MUON on ALICE logbook:" << endl;
  outFile << " \\begin{itemize}" << endl;
  outFile << "  \\item Period: " << period.Data() << endl;
  outFile << "  \\item Run Type: PHYSICS" << endl;
  outFile << "  \\item Beam: STABLE" << endl;
  outFile << "  \\item At least [ MUON\\_TRG \\& MUON\\_TRK \\& SPD ] as Readout" << endl;
  outFile << "  \\item Quality: globaly GOOD and NOT BAD for readout Detectors" << endl;
  outFile << "  \\item Duration: at least 10 min" << endl;
  outFile << " \\end{itemize}" << endl;
  outFile << "\\end{itemize}" << endl;
  outFile << endl;
  outFile << " \\vspace{5mm}" << endl;
  outFile << endl;
  outFile << "\\begin{columns}[onlytextwidth]" << endl;
  outFile << " \\column{\\textwidth}" << endl;
  outFile << " \\centering" << endl;
  outFile << " \\begin{tabular}{|l|lll|}" << endl;
  outFile << "  \\hline" << endl;
  outFile << "  & Total runs & CMUL & CMSL \\\\" << endl;
  outFile << "  \\hline" << endl;
  outFile << "  ALICE logbook & xx & xx & xx\\\\" << endl;
  outFile << "  Good from QA & xx & xx & xx\\\\" << endl;
  outFile << "  \\hline" << endl;
  outFile << " \\end{tabular}" << endl;
  outFile << "\\end{columns}" << endl;
  EndFrame(outFile);

  BeginFrame("Summary II",outFile);
  outFile << endl;
  outFile << "General:" << endl;
  MakeDefaultItem(outFile);
  outFile << endl;
  outFile << "MTR efficiency:" << endl;
  MakeDefaultItem(outFile,"More than xx\\% efficiency in trigger chambers, stable");
  outFile << endl;
  outFile << "MCH and MUON data quality:" << endl;
  MakeDefaultItem(outFile);
  EndFrame(outFile);

  BeginFrame("Run summary",outFile);
  outFile << " \\begin{columns}[onlytextwidth,T]" << endl;
  outFile << "  \\footnotesize" << endl;
  outFile << "  \\column{0.5\\textwidth}" << endl;
  outFile << "  \\centering" << endl;
  outFile << "  \\begin{tabular}{|cp{0.63\\textwidth}|}" << endl;
  outFile << "   \\hline" << endl;
  outFile << "   \\runTab[\\errorColor]{xxx}{xxx}" << endl;
  outFile << "   \\hline" << endl;
  outFile << "  \\end{tabular}" << endl;
  outFile << endl;
  outFile << "  \\column{0.5\\textwidth}" << endl;
  outFile << "  \\begin{tabular}{|cp{0.63\\textwidth}|}" << endl;
  outFile << "   \\hline" << endl;
  outFile << "   \\colorLegend" << endl;
  outFile << "   \\hline" << endl;
  outFile << "  \\end{tabular}" << endl;
  outFile << " \\end{columns}" << endl;
  EndFrame(outFile);
}

//_________________________________
void MakePreamble ( ofstream &outFile )
{
  outFile << "\\documentclass[9pt,table]{beamer}" << endl;
  outFile << "\\mode<presentation>" << endl;
  outFile << "\\usepackage[T1]{fontenc}" << endl;
  outFile << "\\usepackage{lmodern}" << endl;
  outFile << "\\usepackage{amsmath}" << endl;
  outFile << "\\usepackage{color,graphicx}" << endl;
  outFile << "\\usepackage{colortbl}" << endl;
  outFile << "\\usepackage{multirow}" << endl;
  outFile << "\\usepackage{pifont}" << endl;
  outFile << "\\usepackage{wasysym}" << endl;
  outFile << "\\usepackage{appendixnumberbeamer}" << endl;
  outFile << "\\usepackage[absolute,overlay]{textpos}" << endl;
  outFile << "\\usetheme{Madrid}" << endl;
  outFile << "\\useoutertheme{shadow}" << endl;

  outFile << "\\setbeamersize{text margin left=0.5cm, text margin right=0.5cm}" << endl;
  outFile << endl;
  outFile << "% Slightly change the template" << endl;
  outFile << "\\setbeamertemplate{navigation symbols}{} %suppress navigation symbols (bottom-right of frame)" << endl;

  outFile << "\\setbeamercolor*{author in head/foot}{parent=palette tertiary}" << endl;
  outFile << "\\setbeamercolor*{title in head/foot}{parent=palette secondary}" << endl;
  outFile << "\\setbeamercolor*{date in head/foot}{parent=palette primary}" << endl;
  outFile << "\\setbeamercolor*{section in head/foot}{parent=palette tertiary}" << endl;
  outFile << "\\setbeamercolor*{subsection in head/foot}{parent=palette primary}" << endl;
  outFile << "\\newcommand{\\changeFootline}[1]{" << endl;
  outFile << " \\setbeamertemplate{footline}{" << endl;
  outFile << "  \\hbox{%" << endl;
  outFile << "   \\begin{beamercolorbox}[wd=.2\\paperwidth,ht=2.25ex,dp=1ex,center]{author in head/foot}%" << endl;
  outFile << "    \\insertshortauthor%~~(\\insertshortinstitute)" << endl;
  outFile << "   \\end{beamercolorbox}%" << endl;
  outFile << "   \\begin{beamercolorbox}[wd=.6\\paperwidth,ht=2.25ex,dp=1ex,center]{title in head/foot}%" << endl;
  outFile << "    \\insertshorttitle" << endl;
  outFile << "    \\hspace*{2em}\\insertshortdate{}" << endl;
  outFile << "   \\end{beamercolorbox}%" << endl;
  outFile << "   \\begin{beamercolorbox}[wd=.2\\paperwidth,ht=2.25ex,dp=1ex,right]{date in head/foot}%" << endl;
  outFile << "    #1\\hspace*{2ex}" << endl;
  outFile << "  \\end{beamercolorbox}}%" << endl;
  outFile << " }}" << endl;
  outFile << "\\changeFootline{\\insertframenumber{} / \\inserttotalframenumber}" << endl;
  outFile << "\\setbeamertemplate{headline}{}" << endl;
  outFile << endl;
  outFile << endl;
  outFile << "\\newcommand{\\errorColor}{red!50!white}" << endl;
  outFile << "\\newcommand{\\warningColor}{orange!50!white}" << endl;
  outFile << "\\newcommand{\\pendingColor}{yellow!50!white}" << endl;
  outFile << "\\newcommand{\\newColor}{blue!20!white}" << endl;
  outFile << "\\newcommand{\\colorLegend}{" << endl;
  outFile << "  \\multicolumn{2}{|l|}{\\colorbox{\\newColor}{~~} = newly analyzed}\\\\" << endl;
  outFile << "  \\multicolumn{2}{|l|}{\\colorbox{\\pendingColor}{~~} = pending statement}\\\\" << endl;
  outFile << "  \\multicolumn{2}{|l|}{\\colorbox{\\warningColor}{~~} = possible problem}\\\\" << endl;
  outFile << "  \\multicolumn{2}{|l|}{\\colorbox{\\errorColor}{~~} = problem spotted}\\\\}" << endl;
  outFile << "\\newcommand{\\runTab}[3][white]{\\cellcolor{#1} #2 & \\cellcolor{#1} #3\\\\}" << endl;
  outFile << endl;
  outFile << "\\newcommand{\\pik}{\\ensuremath{\\pi\\mathrm{/K}}}" << endl;
  outFile << "\\newcommand{\\mum}{\\mbox{$\\mu {\\rm m}$}}" << endl;
  outFile << "\\newcommand{\\mom}{\\mbox{GeV$\\kern-0.15em /\\kern-0.12em c$}}" << endl;
  outFile << "\\newcommand{\\pt}{\\ensuremath{p_{\\mathrm{T}}}}" << endl;
  outFile << "\\newcommand{\\dd}{\\text{d}}" << endl;
  outFile << "\\newcommand{\\raa}{\\ensuremath{R_{AA}}}" << endl;
}

//_________________________________
void BeginSlides ( TString period, TString pass, TString authors, ofstream &outFile )
{
  TString authorsShort = "";
  Bool_t previousIsLetter = kFALSE;
  for ( Int_t ichar=0; ichar<authors.Length(); ichar++ ) {
    TString currChar = authors[ichar];
    currChar.ToUpper();
    Int_t currentIsLetter = currChar.IsAlpha();
    if ( currentIsLetter && ! previousIsLetter ) authorsShort += currChar + ".";
    if ( currChar == "," ) authorsShort += ",";
    previousIsLetter = currentIsLetter;
  }

  outFile << "\\title{Muon QA: " << period.Data() << " " << pass.Data() << "}" << endl;
  outFile << "\\author[" << authorsShort.Data() << "]{" << authors.Data() << "}" << endl;
  outFile << "\\date{\\today}" << endl;

  outFile << "\\begin{document}" << endl;
  outFile << "\\setlength{\\TPHorizModule}{1bp}" << endl;
  outFile << "\\setlength{\\TPVertModule}{1bp}" << endl;
  outFile << "\\textblockorigin{0bp}{0bp}" << endl;
  outFile << endl;
  outFile << "\\graphicspath{{images/}}" << endl;

  outFile << endl;
  outFile << "\\begin{frame}" << endl;
  outFile << " \\titlepage" << endl;
  outFile << "\\end{frame}" << endl;
}

//_________________________________
void EndSlides ( ofstream &outFile )
{
  outFile << "\\end{document}" << endl;
  outFile.close();
}

//_________________________________
void StartAppendix ( ofstream &outFile )
{
  outFile << endl;
  outFile << endl;
  outFile << "\\AtBeginSection[] % Do nothing for \\section*" << endl;
  outFile << "{" << endl;
  outFile << "  \\begin{frame}<beamer>" << endl;
  outFile << "   \\begin{beamercolorbox}[sep=8pt,center,shadow=true,rounded=true]{title}" << endl;
  outFile << "   \\usebeamerfont{title}\\insertsectionhead" << endl;
  outFile << "   \\end{beamercolorbox}" << endl;
  outFile << "  \\end{frame}" << endl;
  outFile << "}" << endl;
  outFile << endl;
  outFile << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl;
  outFile << "\\appendix" << endl;
  outFile <<"\\changeFootline{A.\\insertframenumber{}}" << endl;
  outFile << "\\section{\\huge Backup slides}" << endl;
}

//_________________________________
void MakeSlides ( TString period, TString pass, TString triggerList, TString authors, TString trackerQA = "QA_muon_tracker.pdf", TString triggerQA = "QA_muon_trigger.pdf", TString  texFilename = "muonQA.tex" )
{
  if ( gSystem->AccessPathName(texFilename.Data()) == 0 ) {
    printf("Output file %s already exists\nPlease remove it!\n", texFilename.Data());
    return;
  }

  TString hasGs = gSystem->GetFromPipe("which gs");
  if ( hasGs.IsNull() ) {
    printf("The macro selects the pdf page with gs, but the program was not found on this machine. Sorry, but slides cannot be automatically generated on this machine.\n");
    return;
  }

  EscapeSpecialChars(period);
  EscapeSpecialChars(pass);

  TObjArray* trigList = triggerList.Tokenize(",");

  ofstream outFile(texFilename);
  MakePreamble(outFile);
  BeginSlides(period,pass,authors,outFile);

  MakeSummary(period,outFile);

  MakeSingleFigureSlide("Selections:  RUN",trackerQA,"Number of events per trigger",outFile);
  MakeSingleFigureSlide("L2A from QA",triggerQA,"Reconstruction: reconstructed triggers in QA wrt L2A from OCDB scalers",outFile);
  MakeTriggerSlide(triggerQA,outFile);

  for ( Int_t itrig=0; itrig<trigList->GetEntries(); itrig++ ) {
    TString currTrig = trigList->At(itrig)->GetName();
    TString shortTrig = GetTriggerShort(currTrig);
    MakeSingleFigureSlide(Form("Number of Tracks /%s",currTrig.Data()),trackerQA,Form("Muon tracks / event in %s events",shortTrig.Data()),outFile);
    MakeSingleFigureSlide(Form("Sum of trigger tracks (matched + trigger-only) / # events in %s",currTrig.Data()),trackerQA,Form("Muon tracker-trigger tracks / event in %s events",shortTrig.Data()),outFile);
    MakeSingleFigureSlide(Form("Matched tracks charge asymmetry for %s with acc. cuts",currTrig.Data()),trackerQA,Form("Charge asymmetry in %s events",shortTrig.Data()),outFile);
    MakeSingleFigureSlide(Form("Identified beam-gas tracks (pxDCA cuts) in matched tracks for %s",currTrig.Data()),trackerQA,Form("Rel. num. of beam-gas tracks (id. by p$\\times$DCA cuts) in %s events",shortTrig.Data()),outFile);
  }
  MakeSingleFigureSlide("averaged number of associated clusters or of the number of chamber hit per track",trackerQA,"Average number of clusters per track and dispersion",outFile);
  MakeSingleFigureSlide("averaged number of clusters in chamber i per track",trackerQA,"Average number of clusters per chamber",outFile);

  StartAppendix(outFile);
  MakeSingleFigureSlide("Phys. Sel. for all selected triggers",trackerQA,"Physics selection effects",outFile);
  MakeSingleFigureSlide("<X> of clusters - associated to a track - in chamber i",trackerQA,"Average cluster position per chamber",outFile);
  MakeSingleFigureSlide("averaged normalized",trackerQA,"Tracking quality",outFile);

  MakeTriggerRPCslide(triggerQA,outFile);
  MakeSingleFigureSlide("Trigger Lpt cut per run",trackerQA,"Trigger \\pt\\ cut",outFile);

  BeginFrame("Hardware issues",outFile);
  outFile << "MUON Trigger" << endl;
  MakeDefaultItem(outFile);
  outFile << endl;
  outFile << "MUON tracker" << endl;
  MakeDefaultItem(outFile);
  EndFrame(outFile);

  EndSlides(outFile);

  delete trigList;

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