1 #if !defined(__CINT__) || defined(__MAKECINT__)
11 #include "TObjArray.h"
12 #include "TObjString.h"
18 TString
PdfToTxt ( TString filename, Bool_t clear = kFALSE )
20 TString convertedFilename = filename;
21 convertedFilename.ReplaceAll(
".pdf",
".txt");
24 if (
gSystem->AccessPathName(convertedFilename.Data()) == 0 ) {
25 gSystem->Exec(Form(
"rm %s",convertedFilename.Data()));
30 if (
gSystem->AccessPathName(convertedFilename.Data()) != 0 ) {
31 gSystem->Exec(Form(
"gs -dBATCH -dNOPAUSE -sDEVICE=txtwrite -sOutputFile=- %s | xargs -I %% > %s",filename.Data(),convertedFilename.Data()));
34 return convertedFilename;
40 TObjArray* arr = trigName.Tokenize(
"-");
41 TString shortName = arr->At(0)->GetName();
42 if ( arr->GetEntries() > 2 ) {
43 shortName.Append(Form(
"-%s",arr->At(1)->GetName()));
52 TString specials =
"+ ( )";
53 TObjArray* specialList = specials.Tokenize(
" ");
54 for ( Int_t ichar=0; ichar<specialList->GetEntries(); ichar++ ) {
55 TString currChar =
static_cast<TObjString*
>(specialList->At(ichar))->GetString();
56 if ( str.Contains(currChar.Data()) ) str.ReplaceAll(currChar.Data(),Form(
"\\%s",currChar.Data()));
63 Int_t
GetPage ( TString pattern, TString filename, TString trigger =
"", Bool_t warnIfMissing = kTRUE )
65 TString convertedFilename =
PdfToTxt(filename);
67 ifstream inFile(convertedFilename.Data());
68 if ( ! inFile.is_open() )
return -1;
72 TObjArray* patternArr = pattern.Tokenize(
"&");
73 if ( ! trigger.IsNull() ) {
74 trigger.Prepend(
"(^|[ ]|/)");
75 trigger.Append(
"([ ]|$)");
76 patternArr->Add(
new TObjString(trigger));
79 TString currLine =
"", currToken =
"";
80 Int_t currPage = -1, foundPage = -1;
81 while ( ! inFile.eof() ) {
82 currToken.ReadToken(inFile);
83 if ( currToken ==
"Page" || inFile.eof() ) {
85 for ( Int_t ipat=0; ipat<patternArr->GetEntries(); ipat++ ) {
86 TString currPattern(static_cast<TObjString*>(patternArr->At(ipat))->GetString());
87 TPRegexp re(currPattern.Data());
88 if ( ! currLine.Contains(re) ) {
97 if ( ! inFile.eof() ) {
98 currToken.ReadToken(inFile);
99 currPage = currToken.Atoi();
103 else currLine += currToken +
" ";
107 if ( foundPage < 0 && warnIfMissing ) printf(
"Warning: cannot find %s\n",pattern.Data());
115 TString convertedFilename =
PdfToTxt(filename);
117 ifstream inFile(convertedFilename.Data());
118 if ( ! inFile.is_open() )
return -1;
120 TString runList =
"", currToken =
"";
121 TString keyword =
"RUN:";
122 while ( ! inFile.eof() ) {
123 currToken.ReadToken(inFile);
124 if ( currToken.Contains(keyword.Data()) ) {
125 currToken.ReplaceAll(keyword.Data(),
"");
126 if ( currToken.Contains(
",") || currToken.IsDigit() ) {
139 str.ReplaceAll(
"\\",
"");
140 TString specials =
"_";
141 TObjArray* specialList = specials.Tokenize(
" ");
142 for ( Int_t ichar=0; ichar<specialList->GetEntries(); ichar++ ) {
143 TString currChar =
static_cast<TObjString*
>(specialList->At(ichar))->GetString();
144 if ( str.Contains(currChar.Data()) ) str.ReplaceAll(currChar.Data(),Form(
"\\\%s",currChar.Data()));
153 outFile <<
"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl;
154 outFile <<
"\\begin{frame}";
155 if ( ! label.IsNull() ) outFile <<
"\\label{" << label.Data() <<
"}";
157 outFile <<
" \\frametitle{" << title.Data() <<
"}" << endl;
163 outFile <<
"\\end{frame}" << endl;
169 outFile <<
"\\begin{itemize}" << endl;
170 outFile <<
" \\item " << defaultItem.Data() << endl;
171 outFile <<
"\\end{itemize}" << endl;
175 Bool_t
MakeSingleFigureSlide ( TString pattern, TString filename, TString
title, ofstream &outFile, TString trigger =
"", TString label =
"", Bool_t warnIfMissing = kTRUE )
177 Int_t pageNum =
GetPage(pattern,filename,trigger,warnIfMissing);
183 outFile <<
" \\begin{columns}[onlytextwidth]" << endl;
184 outFile <<
" \\column{\\textwidth}" << endl;
185 outFile <<
" \\centering" << endl;
186 outFile <<
" \\includegraphics[width=0.98\\textwidth,height=0.92\\textheight,page=" << pageNum <<
"]{" <<
gSystem->BaseName(filename.Data()) <<
"}" <<endl;
187 outFile <<
" \\end{columns}" << endl;
195 BeginFrame(
"Trigger chamber efficiencies", outFile);
196 outFile <<
" \\begin{columns}[onlytextwidth]" << endl;
197 outFile <<
" \\column{0.66\\textwidth}" << endl;
198 outFile <<
" \\centering" << endl;
199 for ( Int_t ich=0; ich<4; ich++ ) {
200 if ( ich%2 == 0 ) outFile << endl;
201 Int_t ipage =
GetPage(Form(
"Trigger chamber efficiency vs run for chamber %i",11+ich),filename);
202 outFile <<
" \\includegraphics[width=0.48\\textwidth,page=" << ipage <<
"]{" << filename.Data() <<
"}" << endl;
204 outFile <<
" \\column{0.34\\textwidth}" << endl;
205 outFile <<
" \\centering" << endl;
206 Int_t ipage =
GetPage(
"Multinomial probability",filename);
207 outFile <<
" \\includegraphics[width=0.98\\textwidth,page=" << ipage <<
"]{" << filename.Data() <<
"}" << endl;
208 outFile <<
" \\end{columns}" << endl;
216 TString baseName = outliers ?
"eff.-<eff.> for outliers" :
"efficiency";
217 BeginFrame(Form(
"Trigger chamber %s per RPC",baseName.Data()),outFile,outliers?
"":
"rpcEff");
218 outFile <<
" \\begin{columns}[onlytextwidth]" << endl;
219 outFile <<
" \\column{\\textwidth}" << endl;
220 outFile <<
" \\centering" << endl;
221 for ( Int_t ich=0; ich<4; ich++ ) {
222 if ( ich%2 == 0 ) outFile << endl;
223 Int_t ipage =
GetPage(Form(
"Trigger chamber %s vs run for chamber %i&RPC",baseName.Data(),11+ich),filename);
224 outFile <<
" \\includegraphics[width=0.37\\textwidth,page=" << ipage <<
"]{" << filename.Data() <<
"}" << endl;
226 outFile <<
" \\end{columns}" << endl;
232 void MakeSummary ( TString period, ofstream &outFile, TString trackerQA )
235 outFile <<
"General informations" << endl;
236 outFile <<
"\\begin{itemize}" << endl;
237 outFile <<
" \\item Runs selected for MUON on ALICE logbook:" << endl;
238 outFile <<
" \\begin{itemize}" << endl;
239 outFile <<
" \\item Run Type: PHYSICS" << endl;
240 outFile <<
" \\item Duration: at least 10 min" << endl;
241 outFile <<
" \\item GDC mStream Recording: Yes" << endl;
242 outFile <<
" \\item Period: " << period.Data() << endl;
243 outFile <<
" \\item Detectors: At least [ MUON\\_TRG \\& MUON\\_TRK ] as Readout" << endl;
244 outFile <<
" \\item Quality: globally GOOD and NOT BAD for readout Detectors" << endl;
245 outFile <<
" \\item Beam Mode: STABLE" << endl;
246 outFile <<
" \\end{itemize}" << endl;
247 outFile <<
"\\end{itemize}" << endl;
249 outFile <<
" \\vspace{5mm}" << endl;
251 outFile <<
"\\begin{columns}[onlytextwidth]" << endl;
252 outFile <<
" \\column{\\textwidth}" << endl;
253 outFile <<
" \\centering" << endl;
254 outFile <<
" \\begin{tabular}{|l|lll|}" << endl;
255 outFile <<
" \\hline" << endl;
256 outFile <<
" & Total runs & CMUL & CMSL \\\\" << endl;
257 outFile <<
" \\hline" << endl;
258 outFile <<
" ALICE logbook & xx & xx & xx\\\\" << endl;
259 outFile <<
" Good from QA & xx & xx & xx\\\\" << endl;
260 outFile <<
" \\hline" << endl;
261 outFile <<
" \\end{tabular}" << endl;
262 outFile <<
"\\end{columns}" << endl;
267 outFile <<
"General:" << endl;
270 outFile <<
"MTR efficiency:" << endl;
271 MakeDefaultItem(outFile,
"More than xx\\% efficiency in trigger chambers, stable");
273 outFile <<
"MCH and MUON data quality:" << endl;
278 TObjArray* runListArr = runList.Tokenize(
",");
281 TString romanNum[10] = {
"I",
"II",
"III",
"IV",
"V",
"VI",
"VII",
"VIII",
"IX",
"X"};
283 Int_t nRuns = runListArr->GetEntries();
284 Int_t nRunsPerPage = 40;
285 Int_t nRunsPerColumn = nRunsPerPage/2;
287 Int_t nPages = nRuns/nRunsPerPage;
288 if ( nRuns%nRunsPerPage > 0 ) nPages++;
292 for ( Int_t ipage=0; ipage<nPages; ipage++ ) {
293 TString
title =
"Run summary";
294 if ( nPages > 1 ) title += Form(
" (%s)",romanNum[ipage].
Data());
296 outFile <<
" \\begin{columns}[onlytextwidth,T]" << endl;
297 outFile <<
" \\footnotesize" << endl;
298 outFile <<
" \\column{0.5\\textwidth}" << endl;
299 outFile <<
" \\centering" << endl;
300 outFile <<
" \\begin{tabular}{|cp{0.63\\textwidth}|}" << endl;
301 outFile <<
" \\hline" << endl;
303 outFile <<
" \\runTab[\\errorColor]{xxx}{xxx}" << endl;
306 while ( irun<nRuns ) {
307 outFile <<
" \\runTab{" <<
static_cast<TObjString*
>(runListArr->At(irun++))->GetString().Atoi() <<
"}{}" << endl;
308 if ( irun%nRunsPerColumn == 0 )
break;
312 outFile <<
" \\hline" << endl;
313 outFile <<
" \\end{tabular}" << endl;
315 outFile <<
" \\column{0.5\\textwidth}" << endl;
316 outFile <<
" \\begin{tabular}{|cp{0.63\\textwidth}|}" << endl;
317 Bool_t hasRuns = ( irun < nRuns );
318 if ( hasRuns ) outFile <<
" \\hline" << endl;
319 while ( irun<nRuns ) {
320 outFile <<
" \\runTab{" <<
static_cast<TObjString*
>(runListArr->At(irun++))->GetString().Atoi() <<
"}{}" << endl;
321 if ( irun%nRunsPerColumn == 0 )
break;
323 if ( hasRuns ) outFile <<
" \\hline" << endl;
324 if ( ipage == nPages -1 ) {
325 outFile <<
" \\hline" << endl;
326 outFile <<
" \\colorLegend" << endl;
327 outFile <<
" \\hline" << endl;
329 outFile <<
" \\end{tabular}" << endl;
330 outFile <<
" \\end{columns}" << endl;
340 outFile <<
"\\documentclass[9pt,table]{beamer}" << endl;
341 outFile <<
"\\mode<presentation>" << endl;
342 outFile <<
"\\usepackage[T1]{fontenc}" << endl;
343 outFile <<
"\\usepackage{lmodern}" << endl;
344 outFile <<
"\\usepackage{textcomp}" << endl;
345 outFile <<
"\\usepackage{amsmath}" << endl;
346 outFile <<
"\\usepackage{color,graphicx}" << endl;
347 outFile <<
"\\usepackage{colortbl}" << endl;
348 outFile <<
"\\usepackage{multirow}" << endl;
349 outFile <<
"\\usepackage{pifont}" << endl;
350 outFile <<
"\\usepackage{wasysym}" << endl;
351 outFile <<
"\\usepackage{appendixnumberbeamer}" << endl;
352 outFile <<
"\\usepackage[absolute,overlay]{textpos}" << endl;
353 outFile <<
"\\usetheme{Madrid}" << endl;
354 outFile <<
"\\useoutertheme{shadow}" << endl;
356 outFile <<
"\\setbeamersize{text margin left=0.5cm, text margin right=0.5cm}" << endl;
358 outFile <<
"\\hypersetup{colorlinks,linkcolor=red,urlcolor=blue}" << endl;
360 outFile <<
"% Slightly change the template" << endl;
361 outFile <<
"\\setbeamertemplate{navigation symbols}{} %suppress navigation symbols (bottom-right of frame)" << endl;
363 outFile <<
"\\setbeamercolor*{author in head/foot}{parent=palette tertiary}" << endl;
364 outFile <<
"\\setbeamercolor*{title in head/foot}{parent=palette secondary}" << endl;
365 outFile <<
"\\setbeamercolor*{date in head/foot}{parent=palette primary}" << endl;
366 outFile <<
"\\setbeamercolor*{section in head/foot}{parent=palette tertiary}" << endl;
367 outFile <<
"\\setbeamercolor*{subsection in head/foot}{parent=palette primary}" << endl;
368 outFile <<
"\\newcommand{\\changeFootline}[1]{" << endl;
369 outFile <<
" \\setbeamertemplate{footline}{" << endl;
370 outFile <<
" \\hbox{%" << endl;
371 outFile <<
" \\begin{beamercolorbox}[wd=.2\\paperwidth,ht=2.25ex,dp=1ex,center]{author in head/foot}%" << endl;
372 outFile <<
" \\insertshortauthor%~~(\\insertshortinstitute)" << endl;
373 outFile <<
" \\end{beamercolorbox}%" << endl;
374 outFile <<
" \\begin{beamercolorbox}[wd=.6\\paperwidth,ht=2.25ex,dp=1ex,center]{title in head/foot}%" << endl;
375 outFile <<
" \\hypersetup{hidelinks}%" << endl;
376 outFile <<
" \\insertshorttitle" << endl;
377 outFile <<
" \\hspace*{2em}\\insertshortdate{}" << endl;
378 outFile <<
" \\end{beamercolorbox}%" << endl;
379 outFile <<
" \\begin{beamercolorbox}[wd=.2\\paperwidth,ht=2.25ex,dp=1ex,right]{date in head/foot}%" << endl;
380 outFile <<
" #1\\hspace*{2ex}" << endl;
381 outFile <<
" \\end{beamercolorbox}}%" << endl;
382 outFile <<
" }}" << endl;
383 outFile <<
"\\changeFootline{\\insertframenumber{} / \\inserttotalframenumber}" << endl;
384 outFile <<
"\\setbeamertemplate{headline}{}" << endl;
387 outFile <<
"\\newcommand{\\badForPassColor}{magenta!50!white}" << endl;
388 outFile <<
"\\newcommand{\\errorColor}{red!50!white}" << endl;
389 outFile <<
"\\newcommand{\\newColor}{blue!20!white}" << endl;
390 outFile <<
"\\newcommand{\\notInLogColor}{black!20!white}" << endl;
391 outFile <<
"\\newcommand{\\pendingColor}{yellow!50!white}" << endl;
392 outFile <<
"\\newcommand{\\warningColor}{orange!50!white}" << endl;
393 outFile <<
"\\newcommand{\\colorLegend}{" << endl;
394 outFile <<
" \\multicolumn{2}{|l|}{\\colorbox{\\newColor}{~~} = newly analyzed}\\\\" << endl;
395 outFile <<
" \\multicolumn{2}{|l|}{\\colorbox{\\notInLogColor}{~~} = non-selected from e-logbook}\\\\" << endl;
396 outFile <<
" \\multicolumn{2}{|l|}{\\colorbox{\\pendingColor}{~~} = pending statement}\\\\" << endl;
397 outFile <<
" \\multicolumn{2}{|l|}{\\colorbox{\\warningColor}{~~} = possible problem}\\\\" << endl;
398 outFile <<
" \\multicolumn{2}{|l|}{\\colorbox{\\errorColor}{~~} = problem spotted}\\\\" << endl;
399 outFile <<
" \\multicolumn{2}{|l|}{\\colorbox{\\badForPassColor}{~~} = bad for this pass}\\\\}" << endl;
400 outFile <<
"\\newcommand{\\runTab}[3][white]{\\cellcolor{#1} #2 & \\cellcolor{#1} #3\\\\}" << endl;
402 outFile <<
"\\newcommand{\\pik}{\\ensuremath{\\pi\\mathrm{/K}}}" << endl;
403 outFile <<
"\\newcommand{\\mum}{\\mbox{$\\mu {\\rm m}$}}" << endl;
404 outFile <<
"\\newcommand{\\mom}{\\mbox{GeV$\\kern-0.15em /\\kern-0.12em c$}}" << endl;
405 outFile <<
"\\newcommand{\\pt}{\\ensuremath{p_{\\mathrm{T}}}}" << endl;
406 outFile <<
"\\newcommand{\\dd}{\\text{d}}" << endl;
407 outFile <<
"\\newcommand{\\raa}{\\ensuremath{R_{AA}}}" << endl;
408 outFile <<
"\\newcommand{\\un}[1]{\\protect\\detokenize{#1}}" << endl;
413 void BeginSlides ( TString period, TString pass, TString authors, ofstream &outFile )
415 TString authorsShort =
"";
416 Bool_t previousIsLetter = kFALSE;
417 for ( Int_t ichar=0; ichar<authors.Length(); ichar++ ) {
418 TString currChar = authors[ichar];
420 Int_t currentIsLetter = currChar.IsAlpha();
421 if ( currentIsLetter && ! previousIsLetter ) authorsShort += currChar +
".";
422 if ( currChar ==
"," ) authorsShort +=
",";
423 previousIsLetter = currentIsLetter;
426 outFile <<
"\\title{Muon QA: " << period.Data() <<
" " << pass.Data() <<
"}" << endl;
427 outFile <<
"\\author[" << authorsShort.Data() <<
"]{" << authors.Data() <<
"}" << endl;
428 outFile <<
"\\date{\\today}" << endl;
430 outFile <<
"\\begin{document}" << endl;
431 outFile <<
"\\setlength{\\TPHorizModule}{1bp}" << endl;
432 outFile <<
"\\setlength{\\TPVertModule}{1bp}" << endl;
433 outFile <<
"\\textblockorigin{0bp}{0bp}" << endl;
435 outFile <<
"\\graphicspath{{images/}}" << endl;
438 outFile <<
"\\begin{frame}" << endl;
439 outFile <<
" \\titlepage" << endl;
440 outFile <<
"\\end{frame}" << endl;
446 outFile <<
"\\end{document}" << endl;
455 outFile <<
"\\AtBeginSection[] % Do nothing for \\section*" << endl;
456 outFile <<
"{" << endl;
457 outFile <<
" \\begin{frame}<beamer>" << endl;
458 outFile <<
" \\begin{beamercolorbox}[sep=8pt,center,shadow=true,rounded=true]{title}" << endl;
459 outFile <<
" \\usebeamerfont{title}\\insertsectionhead" << endl;
460 outFile <<
" \\end{beamercolorbox}" << endl;
461 outFile <<
" \\end{frame}" << endl;
462 outFile <<
"}" << endl;
464 outFile <<
"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl;
465 outFile <<
"\\appendix" << endl;
466 outFile <<
"\\changeFootline{A.\\insertframenumber{}}" << endl;
467 outFile <<
"\\hypersetup{hidelinks}" << endl;
468 outFile <<
"\\section{\\huge Backup slides}" << endl;
472 void WriteRunList ( TString trackerQA, TString outFilename =
"runListQA.txt" )
475 TObjArray* runListArr = runList.Tokenize(
",");
477 ofstream outFile(outFilename);
478 for ( Int_t irun=0; irun<runListArr->GetEntries(); irun++ ) {
479 outFile << static_cast<TObjString*>(runListArr->At(irun))->GetString().Atoi() << endl;
488 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", TString outRunList =
"" )
490 if (
gSystem->AccessPathName(texFilename.Data()) == 0 ) {
491 printf(
"Output file %s already exists\nPlease remove it!\n", texFilename.Data());
495 TString hasGs =
gSystem->GetFromPipe(
"which gs");
496 if ( hasGs.IsNull() ) {
497 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");
504 TObjArray* trigList = triggerList.Tokenize(
",");
506 ofstream outFile(texFilename);
507 outFile <<
"%TriggerList=" << triggerList.Data() << endl;
514 MakeSingleFigureSlide(
"L2A from QA",triggerQA,
"Reconstruction: reconstructed triggers in QA wrt L2A from OCDB scalers",outFile);
517 for ( Int_t itrig=0; itrig<trigList->GetEntries(); itrig++ ) {
518 TString currTrig = trigList->At(itrig)->GetName();
520 MakeSingleFigureSlide(
"Number of Tracks",trackerQA,Form(
"Muon tracks / event in %s events",shortTrig.Data()),outFile,currTrig);
521 MakeSingleFigureSlide(
"Number of Tracks&for high mult.",trackerQA,Form(
"Muon tracks / event in %s events (central collisions)",shortTrig.Data()),outFile,currTrig,
"",kFALSE);
522 MakeSingleFigureSlide(
"Sum of trigger tracks (matched + trigger-only) / # events in",trackerQA,Form(
"Muon tracker-trigger tracks / event in %s events",shortTrig.Data()),outFile,currTrig);
523 MakeSingleFigureSlide(
"Matched tracks charge asymmetry for&with acc. cuts",trackerQA,Form(
"Charge asymmetry in %s events",shortTrig.Data()),outFile,currTrig);
524 MakeSingleFigureSlide(
"Identified beam-gas tracks (pxDCA cuts) in matched tracks for",trackerQA,Form(
"Rel. num. of beam-gas tracks (id. by p$\\times$DCA cuts) in %s events",shortTrig.Data()),outFile,currTrig);
526 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);
527 MakeSingleFigureSlide(
"averaged number of clusters in chamber i per track",trackerQA,
"Average number of clusters per chamber",outFile,
"",
"clustersPerChamber");
530 MakeSingleFigureSlide(
"Physics Selection Cut on selected triggers:",trackerQA,
"Physics selection effects",outFile);
531 MakeSingleFigureSlide(
"<X> of clusters - associated to a track - in chamber i",trackerQA,
"Average cluster position per chamber",outFile);
539 outFile <<
"MUON Trigger" << endl;
542 outFile <<
"MUON tracker" << endl;
550 if ( ! outRunList.IsNull() )
WriteRunList(trackerQA, outRunList);
553 TString filenames[2] = {trackerQA, triggerQA};
554 for ( Int_t ifile=0; ifile<2; ifile++ ) {
void BeginSlides(TString period, TString pass, TString authors, ofstream &outFile)
return jsonbuilder str().c_str()
Bool_t MakeTriggerSlide(TString filename, ofstream &outFile)
void MakeDefaultItem(ofstream &outFile, TString defaultItem="")
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", TString outRunList="")
void MakeSummary(TString period, ofstream &outFile, TString trackerQA)
void WriteRunList(TString trackerQA, TString outFilename="runListQA.txt")
TString GetRunList(TString filename)
Bool_t MakeTriggerRPCslide(TString filename, ofstream &outFile, Bool_t outliers=kFALSE)
void MakePreamble(ofstream &outFile)
Bool_t MakeSingleFigureSlide(TString pattern, TString filename, TString title, ofstream &outFile, TString trigger="", TString label="", Bool_t warnIfMissing=kTRUE)
void EscapeSpecialChars(TString &str)
void EndSlides(ofstream &outFile)
void BeginFrame(TString title, ofstream &outFile, TString label="")
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
void EndFrame(ofstream &outFile)
Int_t GetPage(TString pattern, TString filename, TString trigger="", Bool_t warnIfMissing=kTRUE)
void StartAppendix(ofstream &outFile)
TString PdfToTxt(TString filename, Bool_t clear=kFALSE)
void EscapeSpecialCharsForRegex(TString &str)
TString GetTriggerShort(TString trigName)