ATLAS Offline Software
cpucost.cxx
Go to the documentation of this file.
1 
11 #include <stdlib.h>
12 #include <sys/time.h>
13 #include <sys/stat.h>
14 #include <sys/types.h>
15 
16 #include <iostream>
17 #include <string>
18 #include <vector>
19 
20 #include "utils.h"
21 #include "label.h"
22 #include "DrawLabel.h"
23 
24 #include "TCanvas.h"
25 #include "TFile.h"
26 #include "TH1D.h"
27 #include "TLegend.h"
28 #include "TStyle.h"
29 #include "TSystem.h"
30 
31 #include "TKey.h"
32 #include "TList.h"
33 #include "TDirectory.h"
34 
35 #include "computils.h"
36 
37 #include "AtlasStyle.h"
38 #include "AtlasLabels.h"
39 
41 int usage(const std::string& name, int status) {
42  std::ostream& s = std::cout;
43  s << "Usage: " << name << " [OPTIONS] expert-monitoring.root reference.root algorithm1 algorithm2 algorithm3 ...\n\n";
44  s << " TIDA \'" << name << "\' extracts timing histograms\n\n";
45  s << "Options: \n";
46  s << " -o, --outputfolder value\t puts output in folder 'value' making it if it doesn't exist, \n\n";
47  s << " -t, --tag value \t appends tag 'value' to the end of output plot names, \n";
48  s << " -k, --key value \t prepends key 'value' to the front of output plot names, \n\n";
49  s << " -a, --auto \t process all histograms that are in the file, \n";
50  s << " -r, --replace patt rep\t replace patt wiht rep in the file name\n";
51  s << " -d, --directory value \t if auto is set, search only in specifed directory, \n";
52  s << " --nodir \t do not print the directory name on the plot,\n";
53  s << " -p, --pattern value \t if auto is set, search for histograms containing this string, \n\n";
54  s << " -f, --frac \t explicitly include the fractional plots\n";
55  s << " -nr, --noref \t do not use the reference file, \n\n";
56  s << " -x, --xoffset value \t offset the key by value \n";
57  s << " --logx \t force logx \n";
58  s << " -w, --binwidth \t normalise by bin width\n";
59  s << " -as, --atlasstyle \t use the ATLAS style \n\n";
60  s << " -al, --atlaslabel \t show the ATLAS label \n\n";
61  s << " -v, --verbose \t verbose output\n\n";
62  s << " -h, --help \t this help\n";
63  s << std::endl;
64  return status;
65 }
66 
67 
68 
69 struct histoinfo {
70  histoinfo( const std::string& f, const std::string& d ) : fname(f), dname(d) { }
71  std::string fname; // File name
72  std::string dname; // Display name
73 };
74 
75 
76 std::ostream& operator<<( std::ostream& s, const histoinfo& h ) {
77  return s << h.fname << " : " << h.dname;
78 }
79 
80 
81 void binwidth( TH1F* h ) {
82  for ( int i=0 ; i<h->GetNbinsX() ; i++ ) {
83  double w = h->GetBinLowEdge(i+2)-h->GetBinLowEdge(i+1);
84  h->SetBinContent( i+1, h->GetBinContent(i+1)/w );
85  h->SetBinError( i+1, h->GetBinError(i+1)/w );
86  }
87 }
88 
89 
90 int main(int argc, char** argv) {
91 
92  if (argc < 4) { return usage(argv[0], -1); }
93 
94  std::string output_dir = "";
95  std::string tag = "";
96  std::string key = "";
97 
98  gStyle->SetPadRightMargin(0.05);
99  gStyle->SetPadTopMargin(0.05);
100 
101  gStyle->SetPadLeftMargin(0.14);
102  gStyle->SetPadBottomMargin(0.14);
103  // gStyle->SetTitleXOffset(0.1);
104  // gStyle->SetTitleYOffset(0.1);
105 
106 
107  TFile* ftest = 0;
108  TFile* fref = 0;
109 
110  bool atlasstyle = false;
111  bool atlaslabel = false;
112  bool ylog = true;
113  bool nopng = false;
114 
115  bool autochains = false;
116 
117  std::string autopattern = "";
118 
119  std::vector<std::string> taglabels;
120 
121  std::string directory = "TIMERS";
122  std::vector<std::string> patterns;
123 
124  TDirectory* tdir = gDirectory;
125 
126  bool verbose = false;
127 
128  bool noref = false;
129 
130  std::string frefname = "";
131 
132  double xoffset = 0.17;
133 
134  bool show_directory = true;
135 
136  bool norm_width = true;
137 
138  bool logx = false;
139 
140  bool withlumiblock = false;
141 
142  bool withfractional = false;
143 
144  std::vector<std::string> replace_list;
145 
146  // Parse the arguments
147  std::vector<std::string> algorithms;
148  for(int argnum = 1; argnum < argc; argnum++){
149  std::string arg = argv[argnum];
150 
151  if (arg == "-h" || arg == "--help") {
152  return usage(argv[0], 0);
153  }
154  else if (arg == "-o" || arg == "--outputfolder") {
155  if (++argnum < argc) { output_dir = argv[argnum]; }
156  else { return usage(argv[0], -1); }
157  }
158  else if (arg == "-x" || arg == "--xoffset") {
159  if (++argnum < argc) { xoffset = std::atof(argv[argnum]); }
160  else { return usage(argv[0], -1); }
161  }
162  else if (arg == "-t" || arg == "--tag") {
163  if (++argnum < argc) { tag = std::string("-") + argv[argnum]; }
164  else { return usage(argv[0], -1); }
165  }
166  else if (arg == "-k" || arg == "--key") {
167  if (++argnum < argc) { key = argv[argnum] + std::string("-"); }
168  else { return usage(argv[0], -1); }
169  }
170  else if (arg == "-r" || arg == "--replace") {
171  if (++argnum < argc) replace_list.push_back( argv[argnum] );
172  else { return usage(argv[0], -1); }
173  if (++argnum < argc) replace_list.push_back( argv[argnum] );
174  else { return usage(argv[0], -1); }
175  }
176  else if ( arg == "--logx") {
177  logx = true;
178  }
179  else if (arg == "-np" || arg == "--nopng") {
180  nopng = true;
181  }
182  else if (arg == "-f" || arg == "--frac" ) {
183  withfractional = true;
184  }
185  else if (arg == "-a" || arg == "--auto") {
186  autochains = true;
187  }
188  else if (arg == "--nodir") {
189  show_directory = false;
190  }
191  else if (arg == "-v" || arg == "--verbose") {
192  verbose = true;
193  }
194  else if (arg == "-lb" ) {
195  withlumiblock = true;
196  }
197  else if (arg == "-nr" || arg == "--noref") {
198  noref = true;
199  }
200  else if (arg == "-w" || arg == "--binwidth") {
201  norm_width = true;
202  }
203  else if (arg == "-as" || arg == "--atlasstyle") {
204  atlasstyle = true;
205  }
206  else if (arg == "-al" || arg == "--atlaslabel") {
207  atlaslabel = true;
208  }
209  else if (arg == "-ap" || arg == "--autopattern") {
210  if (++argnum < argc) autopattern = argv[argnum];
211  else return usage(argv[0], -1);
212  }
213  else if (arg == "-d" || arg == "--directory") {
214  if (++argnum < argc) directory = argv[argnum];
215  else return usage(argv[0], -1);
216  }
217  else if (arg == "-p" || arg == "--pattern") {
218  if (++argnum < argc) patterns.push_back(argv[argnum]);
219  else return usage(argv[0], -1);
220  }
221  else {
222  if (ftest == 0) {
223  std::string file = globbed(arg);
224  if (exists(file)) {
225  ftest = new TFile( file.c_str() );
226  }
227  else {
228  std::cerr << "main(): test file " << arg << " does not exist" << std::endl;
229  return -2;
230  }
231  }
232  else if ( frefname=="" ) frefname = arg;
233  else {
234  algorithms.push_back(arg);
235  }
236  }
237  }
238 
239  if ( patterns.empty() ) patterns.push_back( "_TotalTime" );
240 
241 
242  if (ftest == 0 || ( noref==false && frefname=="" ) ) {
243  return usage(argv[0], -4);
244  }
245 
246  if ( fref == 0 && !noref ) {
247  std::string file = globbed(frefname);
248  if (exists(file)) {
249  fref = new TFile( file.c_str() );
250  }
251  else {
252  std::cerr << "main(): ref file " << frefname << " does not exist" << std::endl;
253  return -3;
254  }
255  }
256 
257  if ( atlasstyle ) SetAtlasStyle();
258 
259  gStyle->SetErrorX(0);
260 
261  if ( noref ) fref = ftest;
262 
263  if ( noref ) Plotter::setmeanplotref(!noref);
264 
265  if ( ftest && autochains ) {
266 
267  ftest->cd();
268 
269  std::vector<std::string> dirs;
270 
272 
273  if ( autopattern=="" ) {
274  for ( unsigned j=0 ; j<dirs.size() ; j++ ) {
275  if ( verbose ) std::cout << "\talgorithm " << dirs[j] << std::endl;
276  algorithms.push_back( dirs[j] );
277  }
278  }
279  else {
280  std::cout << "autopattern : " << autopattern << std::endl;
281  for ( unsigned j=0 ; j<dirs.size() ; j++ ) {
282  if ( dirs[j].find(autopattern)!=std::string::npos ) {
283  algorithms.push_back( dirs[j] );
284  std::cout << "adding " << algorithms.back() << std::endl;
285  }
286  }
287  }
288 
289  }
290 
291 
292 
293  // Make output directory
294  if ( output_dir != "" ) {
295  if ( mkdir( output_dir.c_str(), 0777 ) ) {
296  if ( exists(output_dir) ) std::cerr << "main() directory " << output_dir << " aleady exists" << std::endl;
297  else std::cerr << "main() could not create directory " << output_dir << std::endl;
298  }
299  output_dir += "/";
300  }
301 
302 #if 0
303  // Get the timers directories from input files
304  // TDirectoryFile* testtimers = 0;
305  TDirectory* testtimers = 0;
306 
307  if ( directory!="" ) ftest->GetObject( directory.c_str(), testtimers );
308  else testtimers = ftest;
309 
310  if (testtimers == 0 ) {
311  std::cerr << "main(): can not find timers in test file" << std::endl;
312  // return -1;
313  }
314 
315  // TDirectoryFile* reftimers = 0;
316  TDirectory* reftimers = 0;
317 
318  if ( directory!="" ) fref->GetObject( directory.c_str(), reftimers );
319  else reftimers = fref;
320 
321  if (reftimers == 0 ) {
322  std::cerr << "main(): can not find timers in ref file" << std::endl;
323  // return -1;
324  }
325 #endif
326 
327  TFile fcck( "fcck.root", "recreate" );
328 
329 
330  std::vector<histoinfo> histograms;
331  histograms.push_back( histoinfo("_TotalTime", "Total time") );
332 
333  // Provide output to user for progress status
334  // std::cout << "main() processing algorithms : " << algorithms << std::endl;
335 
336  // Loop over histograms
337  // for (unsigned int histogram = 0; histogram < histograms.size(); ++histogram) {
338  for (unsigned int histogram=histograms.size(); histogram-- ; ) {
339 
340 
341 
342  std::cout << "\nhistogram " << histograms.at(histogram) << " : with " << algorithms.size() << " algorithms" << std::endl;
343 
344 
345  std::string xaxis = histograms.at(histogram).dname + " [ms]";
346  std::string yaxis = "Entries";
347 
348 
349  // Loop over input algorithms
350  // for (unsigned int algorithm = 0; algorithm < algorithms.size(); ++algorithm) {
351  for (unsigned int algorithm = algorithms.size(); algorithm-- ; ) {
352 
353  if ( !withlumiblock && algorithms[algorithm].find("LumiBlock")!=std::string::npos ) continue;
354 
355  if ( !withfractional && algorithms[algorithm].find("Fractional")!=std::string::npos ) continue;
356 
357  std::cout << "\nmain() processing algorithm : " << algorithms[algorithm] << std::endl;
358 
359  TCanvas* c1 = new TCanvas( label("canvas-%d",int(histogram)).c_str(), "histogram", 800, 600 );
360  c1->cd();
361 
362  double x1 = xoffset;
363  double x2 = xoffset+0.25;
364  double y1 = 0.75;
365  double y2 = 0.87;
366 
370 
371  Legend legend(x1, x2, y1, y2);
372 
373 
374  std::string histname = algorithms[algorithm]; // + histograms.at(histogram).fname;
375 
376  std::string xaxis_tmp = xaxis;
377  bool fractional = contains( histname, "Fractional" );
378  if ( fractional ) xaxis_tmp = "Fraction of " + histograms.at(histogram).dname;
379 
380 
381  // std::cout << "\t" << histname << "\t" << algorithms.at(algorithm) << " " << histograms.at(histogram).fname << std::endl;
382 
383 
384  // std::cout << "Directory: " << gDirectory->GetName() << std::endl;
385 
386  TH1F* testhist = (TH1F*)ftest->Get(histname.c_str());
387 
388  if (testhist == 0 ) {
389  std::cerr << "main(): can not find hist " << histname << " in test file" << std::endl;
390  continue;
391  }
392 
393  std::cout << "mean time: " << testhist->GetMean() << "\t:: " << testhist->GetName() << std::endl;
394 
395  if ( norm_width ) binwidth( testhist );
396 
398  if ( std::string(testhist->ClassName()).find("TH1")==std::string::npos ) continue;
399 
400  testhist->SetName( tail(algorithms[algorithm],"/").c_str() );
401  testhist->Write();
402 
403  // std::cout << "\n\nfound histname " << histname << std::endl;
404 
405  std::string refhistname = histname;
406 
407 
408  TH1F* refhist = (TH1F*)fref->Get(refhistname.c_str());
409 
410 
413 
414  if ( refhist==0 && replace_list.size()>=2 ) {
415 
416  for ( size_t ir=0 ; ir<replace_list.size()-1 ; ir+=2 ) {
417 
418  size_t pos = refhistname.find(replace_list[ir]);
419  if ( pos != std::string::npos ) {
420 
421  while( pos!=std::string::npos ) {
422  refhistname.replace( pos, replace_list[ir].size(), "XXXX" );
423  pos = refhistname.find(replace_list[ir]);
424  }
425 
426  pos = refhistname.find("XXXX");
427  while( pos!=std::string::npos ) {
428  refhistname.replace( pos, 4, replace_list[ir+1] );
429  pos = refhistname.find("XXXX");
430  }
431  }
432 
433  }
434 
435  refhist = (TH1F*)fref->Get(refhistname.c_str());
436 
437  }
438 
439  if (refhist == 0 ) {
440  std::cerr << "main(): can not find hist " << refhistname << " in ref file" << std::endl;
441  continue;
442  }
443 
444  if ( norm_width ) binwidth( refhist );
445 
446  testhist->GetYaxis()->SetTitle(yaxis.c_str());
447  testhist->GetYaxis()->SetTitleOffset(1.5);
448 
449  refhist->GetYaxis()->SetTitle(yaxis.c_str());
450  refhist->GetYaxis()->SetTitleOffset(1.5);
451 
452  testhist->GetXaxis()->SetTitle(xaxis_tmp.c_str());
453  testhist->GetXaxis()->SetTitleOffset(1.5);
454 
455  refhist->GetXaxis()->SetTitle(xaxis_tmp.c_str());
456  refhist->GetXaxis()->SetTitleOffset(1.5);
457 
458 
459  Plots plots;
460 
461  std::string algname = tail(algorithms[algorithm], "/" );
462  std::string dirname = tail( head(algorithms[algorithm], "/" ), "/" );
463  std::string algpname = algorithms[algorithm];
464  replace( algpname, '/', '_' );
465 
466  if ( algname.find("h_")==0 ) algname.erase(0, 2);
467 
468  // size_t indetpos = algname.find("InDet");
469  // if ( indetpos!=std::string::npos ) algname.erase( indetpos, 5);
470 
471  plots.push_back( Plotter( testhist, refhist, " "+algname ) );
472 
473  std::string plotname = key + algpname + tag;
474 
475  std::string stub = directory;
476 
477  size_t pos = stub.find('/');
478  while ( pos!=std::string::npos ) { stub.erase( pos, 1 ); pos = stub.find('/'); }
479 
480  while ( plotname.find(stub)!=std::string::npos ) {
481  plotname.erase( 0, plotname.find(stub)+stub.size() );
482  }
483 
484  while ( plotname.find('_')==0 ) plotname.erase( 0, 1 );
485 
486  plotname = output_dir + plotname;
487 
488  std::cout << "output dir " << output_dir << "\tkey " << key << "\talgname " << algname << "\ttag " << tag << std::endl;
489 
490  // std::cout << "testhist " << testhist << " " << refhist << std::endl;
491 
492 
493  std::vector<std::string> chains;
494  chains.push_back( algname + tag );
495 
496  bool ylogt = ylog;
497 
498  double Nent = plotable( testhist );
499  double Nent_ref = plotable( refhist );
500 
501  if ( fractional ) ylogt = false;
502 
503  if ( Nent==0 || Nent_ref==0 ) {
504  ylogt = false;
505  std::cerr << "histograms empty: " << testhist->GetName() << std::endl;
506  continue;
507  }
508 
509 
510  testhist->SetTitle("");
511  refhist->SetTitle("");
512 
513 
514  plots.SetLogy(ylogt);
515 
516  if ( logx ) plots.SetLogx(true);
517 
518  double rmin = plots.realmin();
519  double rmax = plots.realmax();
520 
521  if ( rmin == rmax ) rmin = 0;
522 
523  if ( ylogt ) {
524  if ( rmin == 0 ) rmin = rmax*0.0001;
525  double delta = std::log10(rmax)-std::log10(rmin);
526  if ( atlasstyle ) plots.Max( rmax*std::pow(10,delta*0.15*2*(chains.size()+taglabels.size()+1.5)) );
527  else plots.Max( rmax*std::pow(10,delta*0.15*2*(chains.size()+taglabels.size()+1.0)) );
528  plots.Min( rmin*std::pow(10,-delta*0.1) );
529  }
530  else {
531  double delta = rmax-rmin;
532  plots.Max( rmax+delta*0.1*2*chains.size() );
533 
534  double pmin = rmin-delta*0.1;
535  if ( pmin>0 ) plots.Min( pmin );
536  else plots.Min( 0 );
537 
538  }
539 
540  std::vector<double> range = plots.findxrange();
541 
542  double lower = range[0];
543  double upper = range[1];
544 
545  if ( lower<0 ) lower = 0;
546 
547  plots.SetRangeUser( lower, upper );
548 
549  plots.Draw( legend, true );
550 
551  std::string dirtitle = dirname;
552  if ( dirtitle.find("HLT_")==0 && dirtitle.find("__")!=std::string::npos ) dirtitle.erase( dirtitle.find("__"), dirtitle.size() );
553 
554  if ( show_directory ) DrawLabel( x1+0.02, y2+0.02, dirtitle, kBlack, legend.TextSize(), legend.TextFont() );
555 
556  if ( atlasstyle && atlaslabel ) ATLASLabel(0.68, 0.88, "Internal");
557 
561  if ( logx ) gPad->SetLogx(true);
562 
563  plots.back().Print( (plotname+".pdf").c_str() );
564  if ( !nopng ) plots.back().Print( (plotname+".png").c_str() );
565 
566  delete c1;
567 
568  std::cout << "done algorithm " << algorithm << " " << algorithms[algorithm] << std::endl;
569  }
570 
571  std::cout << "done hist " << histogram << " " << histograms.at(histogram).dname << " " << std::endl;
572  }
573 
574  fcck.Write();
575  fcck.Close();
576 
577  tdir->cd();
578 
579 
580 #ifdef USE_SLOW_ROOT_FILE_DELETION
581 
582  std::cout << "deleting ftest" << std::endl;
583 
586 
587 
588  if ( fref!=ftest ) {
589  std::cout << "deleting fref" << std::endl;
590 
591  // delete reftimers;
592  delete fref;
593  }
594 
595  // delete testtimers;
596  delete ftest;
597 
598 #endif
599 
600  std::cout << "done" << std::endl;
601 
602  return 0;
603 }
replace
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition: hcg.cxx:307
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
Plotter
tPlotter< TH1F > Plotter
Definition: computils.h:882
getMenu.algname
algname
Definition: getMenu.py:53
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
SetAtlasStyle
void SetAtlasStyle()
Definition: InnerDetector/InDetCalibAlgs/PixelCalibAlgs/Macro/AtlasStyle.h:17
algorithm
std::string algorithm
Definition: hcg.cxx:82
histoinfo
Definition: cpucost.cxx:69
covarianceTool.histograms
dictionary histograms
Definition: covarianceTool.py:53
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
plot_material.mkdir
def mkdir(path, recursive=True)
Definition: plot_material.py:16
tail
std::string tail(std::string s, const std::string &pattern)
tail of a string
Definition: computils.cxx:300
patterns
std::vector< std::string > patterns
Definition: listroot.cxx:187
hist_file_dump.d
d
Definition: hist_file_dump.py:137
PlotCalibFromCool.label
label
Definition: PlotCalibFromCool.py:78
plotBeamSpotCompare.x2
x2
Definition: plotBeamSpotCompare.py:218
extractSporadic.c1
c1
Definition: extractSporadic.py:134
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
dirname
std::string dirname(std::string name)
Definition: utils.cxx:200
main
int main(int argc, char **argv)
Definition: cpucost.cxx:90
upper
int upper(int c)
Definition: LArBadChannelParser.cxx:49
LArCellConditions.argv
argv
Definition: LArCellConditions.py:112
binwidth
void binwidth(TH1F *h)
Definition: cpucost.cxx:81
DrawLabel
int DrawLabel(float xstart, float ystart, string label)
Definition: GraphToolKit.h:13
python.App.legend
legend
Definition: App.py:62
makeTRTBarrelCans.y1
tuple y1
Definition: makeTRTBarrelCans.py:15
histoinfo::fname
std::string fname
Definition: cpucost.cxx:71
usage
int usage(const std::string &name, int status)
Prints usage instructions to standard output and returns given status.
Definition: cpucost.cxx:41
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
utils.h
PixelAthClusterMonAlgCfg.histname
histname
Definition: PixelAthClusterMonAlgCfg.py:106
DeMoScan.directory
string directory
Definition: DeMoScan.py:80
ParseInputs.gDirectory
gDirectory
Definition: Final2012/ParseInputs.py:133
lumiFormat.i
int i
Definition: lumiFormat.py:92
Plots
set of generic plots
Definition: computils.h:913
makeTRTBarrelCans.y2
tuple y2
Definition: makeTRTBarrelCans.py:18
plot_av_times.stub
stub
Definition: plot_av_times.py:13
contains
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition: hcg.cxx:111
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
file
TFile * file
Definition: tile_monitor.h:29
DQHistogramMergeRegExp.argc
argc
Definition: DQHistogramMergeRegExp.py:20
contents
void contents(std::vector< std::string > &keys, TDirectory *td, const std::string &directory, const std::string &pattern, const std::string &path)
Definition: computils.cxx:319
histoinfo::dname
std::string dname
Definition: cpucost.cxx:72
CxxUtils::atof
double atof(std::string_view str)
Converts a string into a double / float.
Definition: Control/CxxUtils/Root/StringUtils.cxx:91
create_dcsc_inputs_sqlite.arg
list arg
Definition: create_dcsc_inputs_sqlite.py:48
head
std::string head(std::string s, const std::string &pattern)
head of a string
Definition: computils.cxx:310
globbed
std::string globbed(const std::string &s)
match a file name
Definition: computils.cxx:262
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
label.h
tPlotter::setmeanplotref
static void setmeanplotref(bool b)
Definition: computils.h:858
dirs
std::map< std::string, int > dirs
list of directories to be explicitly included, together with corresponding depths of subdirectories
Definition: hcg.cxx:99
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
AtlasStyle.h
ATLAS Style, based on a style file from BaBar.
python.copyTCTOutput.chains
chains
Definition: copyTCTOutput.py:81
ir
int ir
counter of the current depth
Definition: fastadd.cxx:49
operator<<
std::ostream & operator<<(std::ostream &s, const histoinfo &h)
Definition: cpucost.cxx:76
plotable
double plotable(TH1 *h)
Definition: computils.cxx:237
h
TH1F
Definition: rootspy.cxx:320
DeMoStatus.ATLASLabel
def ATLASLabel(x, y, text="")
ATLASLabel copied from atlastyle package, as import does not work for unknown reasons.
Definition: DeMoStatus.py:51
python.TriggerHandler.verbose
verbose
Definition: TriggerHandler.py:297
covarianceTool.plots
plots
Definition: covarianceTool.py:698
histoinfo::histoinfo
histoinfo(const std::string &f, const std::string &d)
Definition: cpucost.cxx:70
merge.status
status
Definition: merge.py:17
DrawLabel.h
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:24
python.dummyaccess.exists
def exists(filename)
Definition: dummyaccess.py:9
python.IoTestsLib.w
def w
Definition: IoTestsLib.py:200
AtlasLabels.h
computils.h
histogram
std::string histogram
Definition: chains.cxx:52
Legend
slightly more convenient legend class
Definition: computils.h:333
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37