82int main(
int argc, 
char** argv) {
 
  105    const string& keysExplainer = 
MAKE_STRING(
"Terminal output:" << endl << listOfKeys);
 
  107    JParser<> zap(
"\nProgram to compare histograms in root files that have the same directory structure. See the link below this usage for further details.\n");
 
  109    zap[
's'] = 
make_field(steeringFile , 
"ASCII steering file with list of histograms and tests");
 
  110    zap[
'a'] = 
make_field(file1        , 
"input file 1");
 
  111    zap[
'b'] = 
make_field(file2        , 
"input file 2");
 
  112    zap[
'o'] = 
make_field(output       , 
"output file root") = 
"zebramantis.root";
 
  113    zap[
't'] = 
make_field(ascii        , 
"output file txt" ) = 
"zebramantis.txt";
 
  115    zap[
'w'] = 
make_field(onlyFailures , 
"write only failed tests" );
 
  120  catch(
const exception &error) {
 
  121    ERROR(error.what() << endl);
 
  128  TFile* f1 = TFile::Open(file1.c_str());
 
  129  TFile* f2 = TFile::Open(file2.c_str());
 
  131  TFile out(output.c_str(),
"recreate");
 
  134  results.open (ascii);
 
  135  results << 
"# " << listOfKeys << endl;
 
  139  std::ifstream infile(steeringFile);
 
  146  for (
string line; getline(infile, line); ) {
 
  148    istringstream iss(line);
 
  153    if (!(iss >> name >> testID)) {
 
  157    DEBUG(
"Input: " << name << 
' ' << testID << endl);
 
  159    const TRegexp regexp(name); 
 
  161    for (vector<JRootObjectID>::const_iterator objectID = objectIDs.cbegin() ; objectID != objectIDs.cend() ; ++objectID) {
 
  163      const TString& dirName  = objectID->getDirectory();
 
  164      const TString& fullName = objectID->getFullObjectName();
 
  166      DEBUG(
"Key: " << fullName << 
" match = " << fullName.Contains(regexp) << endl);
 
  168      if ((fullName.Index(regexp) != -1)) {
 
  173        if (!obj1 || !obj2) {
 
  174          DEBUG(
"Could not retrieve " << fullName << endl);
 
  178        d[testID]->read(iss);
 
  179        d[testID]->test(obj1,obj2);
 
  181        if (dirName.Length() > 0 && !out.GetDirectory(dirName)) {
 
  183          if (dirName[0] == JRootObjectID::PATHNAME_SEPARATOR) { 
 
  184            out.mkdir(TString(dirName(1, dirName.Length() - 1))); 
 
  194          if (onlyFailures && r->passed) {
 
  198          print(cout,    *r, keys.cbegin(),       keys.cend(),       
' ', 
false);
 
  199          print(results, *r, listOfKeys.cbegin(), listOfKeys.cend(), 
' ', 
true);
 
  204        const size_t Npass = count_if(d[testID]->cbegin(), d[testID]->cend(),
 
  205                                      make_predicate(&JTestResult::passed, 
true));
 
  208        nfailed += (d[testID]->size() - Npass);
 
  217  results << WHITE << 
"# PASSED: " << npassed << 
" " << 
" FAILED: " << nfailed << 
" FAILURE FRACTION: " << float (nfailed)/(nfailed+npassed) << endl;
 
  219  putObject(&out, 
JMeta(argc, argv));
 
  220  JMeta::copy(file1.c_str(), out);
 
  221  JMeta::copy(file2.c_str(), out);