FairRoot/PandaRoot
Functions
QA/run4/check_complete.C File Reference
#include "TString.h"
#include "TFile.h"
#include "TCanvas.h"
#include "TKey.h"
#include <iostream>
#include "TH1F.h"
#include "TRandom.h"
#include "../auxi.C"

Go to the source code of this file.

Functions

bool check_complete (TString fn="output_ana.root", TString fn2="ana_target.root", double minP=0.03, int minev=3, int maxfail=3)
 

Function Documentation

bool check_complete ( TString  fn = "output_ana.root",
TString  fn2 = "ana_target.root",
double  minP = 0.03,
int  minev = 3,
int  maxfail = 3 
)

Definition at line 13 of file QA/run4/check_complete.C.

References ctime, Double_t, f, f2, h, h2, name, next, P, rtime, and TString.

14 {
15  TStopwatch fTimer;
16  bool fTest=kFALSE;
17  TString templateFile = gSystem->Getenv("VMCWORKDIR");
18  templateFile += "/macro/QA/run4/";
19  templateFile += fn2;
20 
21  TFile *f=new TFile(fn,"READ");
22  if (!f->IsZombie())
23  {
24  TFile *f2=new TFile(templateFile,"READ");
25 
26  TKey *key;
27  TIter next(f->GetListOfKeys());
28 
29  int failcount = 0;
30 
31  while ( (key = (TKey*)next()) )
32  {
33  TObject *obj = key->ReadObj();
34 
35  // only check TH1Fs
36  if (!obj->InheritsFrom("TH1F")) continue;
37 
38  TString name = obj->GetName();
39  TH1F* h = (TH1F*) obj;
40  TH1F* h2 = (TH1F*) f2->Get(name);
41 
42  if ( h->GetEntries()<minev )
43  {
44  cout << "Histogram (almost) empty : " << name << " \"" << h2->GetTitle() << "\": N = " << h->GetEntries() << endl;
45  failcount++;
46  }
47  else
48  {
49  double P = h2->KolmogorovTest(h);
50  TString htitile=h2->GetTitle();
51  htitile.ReplaceAll(" ","");htitile.ReplaceAll("#","");htitile.ReplaceAll("(","");htitile.ReplaceAll(")","");
52  htitile.ReplaceAll("/","");htitile.ReplaceAll("^","");htitile.ReplaceAll("[","");htitile.ReplaceAll("]","");
53  htitile.ReplaceAll(":","");htitile.ReplaceAll(".","");htitile.ReplaceAll("{","");htitile.ReplaceAll("}","");
54  cout << "<DartMeasurement name=\""<<htitile.Data()<<"\" type=\"numeric/double\">";
55  cout << P;
56  cout << "</DartMeasurement>" << endl;
57  if ( P<minP )
58  {
59  cout << "Incompatible distribution: " << name << " \"" << h2->GetTitle() << "\": P = " << P << endl;
60  failcount++;
61  }
62  }
63 
64  }
65 
66  if (failcount<maxfail) fTest = kTRUE;
67  cout << "<DartMeasurement name=\"failcount\" type=\"numeric/int\">"<<failcount<<"</DartMeasurement>"<<endl;
68  }
69 
70  // Extract the maximal used memory an add is as Dart measurement
71  // This line is filtered by CTest and the value send to CDash
72  FairSystemInfo sysInfo;
73  Float_t maxMemory=sysInfo.GetMaxMemory();
74  cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">";
75  cout << maxMemory;
76  cout << "</DartMeasurement>" << endl;
77  fTimer.Stop();
78  Double_t rtime = fTimer.RealTime();
79  Double_t ctime = fTimer.CpuTime();
80 
81  Float_t cpuUsage=ctime/rtime;
82  cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">";
83  cout << cpuUsage;
84  cout << "</DartMeasurement>" << endl;
85 
86  cout << endl;
87  cout << "Real time " << rtime << " s, CPU time " << ctime
88  << "s" << endl;
89  cout << "CPU usage " << cpuUsage*100. << "%" << endl;
90  cout << "Max Memory " << maxMemory << " MB" << endl;
91 
92  if (fTest)
93  {
94  cout << " Macro finished successfully" << endl;
95  cout << " All ok " << endl;
96  }
97  else
98  {
99  cout << " Test Failed" << endl;
100  cout << " Not Ok " << endl;
101  }
102 
103 // CloseGeoManager();
104  return fTest;
105 }
Double_t
TFile * f
Definition: bump_analys.C:12
TString name
Double_t ctime
Definition: hit_dirc.C:114
GeV c P
TFile * f2
Double_t rtime
Definition: hit_dirc.C:113
static int next[96]
Definition: ranlxd.cxx:374