ROOT logo
/**
 * @file   RunTrain.C
 * @author Christian Holm Christensen <cholm@nbi.dk>
 * @date   Tue Oct 16 17:49:49 2012
 * 
 * @brief  Script to run a train 
 *
 * @ingroup pwglf_forward_trains
 */
/** 
 * Build a script 
 * 
 * @param name     Name of script 
 * @param verbose  Whether to be verbose 
 * @param force    Whether to force re-compilation 
 * @param debug    Whether to enable debug symbols  
 * 
 * @return true on success 
 *
 * @ingroup pwglf_forward_trains
 */
Bool_t
BuildScript(const char* name, Bool_t verbose, Bool_t force, Bool_t debug)
{
  const char opt[] = { (force ? '+' : debug ? 'g' : '\0'), 
		       (force && debug ? 'g' : '\0'), '\0' };
  if (verbose) Printf("Building %s ...",name);
  Int_t error;
  Int_t ret = gROOT->LoadMacro(Form("%s.C+%s", name, opt), &error);
  if (ret < 0 || error) { 
    Error("BuildScript", "Failed to build %s: %d", error);
    return false;
  }
  return true;
  
}

/** 
 * Build all helper classes 
 * 
 * @param verbose Whether to be verbose 
 * @param force   Whether to force re-builds
 * @param debug   Whether to enable debug symbols 
 * @param all     Whether to build all helpers 
 *
 * @return true on success 
 *
 * @ingroup pwglf_forward_trains
 */
Bool_t
BuildRailways(Bool_t verbose, Bool_t force, Bool_t debug,
	     Bool_t all=false)
{
  gSystem->AddIncludePath("-I$ALICE_ROOT/include");
  gSystem->AddIncludePath("-I$ALICE_ROOT/PWGLF/FORWARD/trains/");
  gROOT->SetMacroPath(Form("%s:$ALICE_ROOT/PWGLF/FORWARD/trains",
			   gROOT->GetMacroPath()));
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  const char* scripts[] = { "AvailableSoftware", 
			    "ChainBuilder", 
			    "ParUtilities",
			    "OutputUtilities", 
			    "Option",
			    "Railway", 
			    "TrainSetup",
			    (all ? "LocalRailway" : 0), 
			    "ProofRailway", 
			    "LiteRailway", 
			    "AAFRailway", 
			    "PluginRailway", 
			    "AAFPluginRailway", 
			    "GridRailway", 
			    0 };
  const char** ptr = scripts;
  while ((*ptr)) {
    if (!BuildScript(*ptr, verbose, force, debug)) return false;
    ptr++;
  }
  return true;
}

/** 
 * Show the usage 
 * 
 *
 * @ingroup pwglf_forward_trains
 */
void PlainUsage()
{
  std::cout << "Usage: .x RunTrain.C(NAME,CLASS,OPTIONS)\n\n"
	    << "  NAME       Name of train (free form)\n"
	    << "  CLASS      Name of class implementing TrainSetup\n"
	    << "  OPTIONS    Comma separated list of options\n"
	    << std::endl;
}

/** 
 * Function to run a train.  
 * 
 * @param name  Name of the train. 
 * @param cls   class name of train setup
 * @param uri   Exection URI  
 * @param opts  Optons 
 * 
 * @return true on success
 *
 * @ingroup pwglf_forward_trains
 */
Bool_t RunTrain(const TString& name, const TString& cls, 
		const TUrl& uri,     const TString& opts)
{
  // Check for help 
  if (name.IsNull() || name.EqualTo("help", TString::kIgnoreCase) || 
      cls.IsNull()  || cls.EqualTo("help", TString::kIgnoreCase) || 
      !uri.IsValid()) {
    PlainUsage();
    return true;
  }
  
  Bool_t verb = opts.Contains("verbose");
  // Build our helpers 
  if (!BuildRailways(verb, false, true)) return false;

  // Tokenize options 
  if (!opts.EndsWith(",")) opts.Append(",");
  opts.Append("url="); 
  opts.Append(uri.GetUrl());
  TObjArray* optList = opts.Tokenize(",");
  return TrainSetup::Main(name, cls, optList, false);
}
/*
 * EOF
 */	
    
 RunTrain.C:1
 RunTrain.C:2
 RunTrain.C:3
 RunTrain.C:4
 RunTrain.C:5
 RunTrain.C:6
 RunTrain.C:7
 RunTrain.C:8
 RunTrain.C:9
 RunTrain.C:10
 RunTrain.C:11
 RunTrain.C:12
 RunTrain.C:13
 RunTrain.C:14
 RunTrain.C:15
 RunTrain.C:16
 RunTrain.C:17
 RunTrain.C:18
 RunTrain.C:19
 RunTrain.C:20
 RunTrain.C:21
 RunTrain.C:22
 RunTrain.C:23
 RunTrain.C:24
 RunTrain.C:25
 RunTrain.C:26
 RunTrain.C:27
 RunTrain.C:28
 RunTrain.C:29
 RunTrain.C:30
 RunTrain.C:31
 RunTrain.C:32
 RunTrain.C:33
 RunTrain.C:34
 RunTrain.C:35
 RunTrain.C:36
 RunTrain.C:37
 RunTrain.C:38
 RunTrain.C:39
 RunTrain.C:40
 RunTrain.C:41
 RunTrain.C:42
 RunTrain.C:43
 RunTrain.C:44
 RunTrain.C:45
 RunTrain.C:46
 RunTrain.C:47
 RunTrain.C:48
 RunTrain.C:49
 RunTrain.C:50
 RunTrain.C:51
 RunTrain.C:52
 RunTrain.C:53
 RunTrain.C:54
 RunTrain.C:55
 RunTrain.C:56
 RunTrain.C:57
 RunTrain.C:58
 RunTrain.C:59
 RunTrain.C:60
 RunTrain.C:61
 RunTrain.C:62
 RunTrain.C:63
 RunTrain.C:64
 RunTrain.C:65
 RunTrain.C:66
 RunTrain.C:67
 RunTrain.C:68
 RunTrain.C:69
 RunTrain.C:70
 RunTrain.C:71
 RunTrain.C:72
 RunTrain.C:73
 RunTrain.C:74
 RunTrain.C:75
 RunTrain.C:76
 RunTrain.C:77
 RunTrain.C:78
 RunTrain.C:79
 RunTrain.C:80
 RunTrain.C:81
 RunTrain.C:82
 RunTrain.C:83
 RunTrain.C:84
 RunTrain.C:85
 RunTrain.C:86
 RunTrain.C:87
 RunTrain.C:88
 RunTrain.C:89
 RunTrain.C:90
 RunTrain.C:91
 RunTrain.C:92
 RunTrain.C:93
 RunTrain.C:94
 RunTrain.C:95
 RunTrain.C:96
 RunTrain.C:97
 RunTrain.C:98
 RunTrain.C:99
 RunTrain.C:100
 RunTrain.C:101
 RunTrain.C:102
 RunTrain.C:103
 RunTrain.C:104
 RunTrain.C:105
 RunTrain.C:106
 RunTrain.C:107
 RunTrain.C:108
 RunTrain.C:109
 RunTrain.C:110
 RunTrain.C:111
 RunTrain.C:112
 RunTrain.C:113
 RunTrain.C:114
 RunTrain.C:115
 RunTrain.C:116
 RunTrain.C:117
 RunTrain.C:118
 RunTrain.C:119
 RunTrain.C:120
 RunTrain.C:121
 RunTrain.C:122
 RunTrain.C:123
 RunTrain.C:124
 RunTrain.C:125
 RunTrain.C:126
 RunTrain.C:127
 RunTrain.C:128
 RunTrain.C:129
 RunTrain.C:130
 RunTrain.C:131
 RunTrain.C:132
 RunTrain.C:133
 RunTrain.C:134
 RunTrain.C:135
 RunTrain.C:136