ROOT logo
// EventTimeTrain.C
#ifndef __CINT__
#include <AliAnalysisManager.h>
#include <fstream>
#else
class AliAnalysisManager;
#endif
#include "TrainSetup.C"
#include "ParUtilities.C"

/** 
 * Train to record time of each event 
 * 
 * @ingroup pwglf_forward_eventtime
 */        
class EventTimeTrain : public TrainSetup
{
public:
  /** 
   * Constructor 
   * 
   * @param name The name 
   */
  EventTimeTrain(const char* name="eventTime") : TrainSetup(name)
  { 
    fOptions.Set("type", "ESD");
  }
  /** 
   * Create our tasks 
   * 
   */
  void CreateTasks(AliAnalysisManager*)
  {
    if (!ParUtilities::MakeScriptPAR(fRailway->Mode() == Railway::kLocal,
				     "EventTimeTask.C",
				     // Gui because of CDB 
				     // XMLParser because of CDB
				     // CDB because look-up of trigger config
				     "Gui,XMLParser,"
				     "STEERBase,CDB,ESD,AOD,ANALYSIS,OADB,"
				     "ANALYSISalice",
				     fRailway)) 
      Fatal("","Failed to make PAR");
    fRailway->LoadLibrary("EventTimeTask");
    gROOT->ProcessLine("EventTimeTask::Create()");
  }
  /** 
   * Do not create a physics selection
   */
  void CreatePhysicsSelection(Bool_t, AliAnalysisManager*) {}
  /** 
   * Do not create a centrality selection
   */
  void CreateCentralitySelection(Bool_t*) {}
  /** 
   * Do not create an output handler
   */
  AliVEventHandler* CreateOutputHandler(UShort_t) { return 0; }
  /** 
   * The train class name 
   * 
   * @return Train class name
   */
  const char* ClassName() const { return "EventTimeTrain"; }
  /** 
   * Overloaded to create new dNdeta.C and dndeta.sh in the output 
   * directory
   * 
   * @param asShellScript 
   */
  void SaveSetup(Bool_t asShellScript)
  {
    TrainSetup::SaveSetup(asShellScript);
    
    SaveSort();
  }
  void SaveSort()
  {
    std::ofstream o("Sort.C");
    o << "// Written by " << ClassName() << "\n"
      << "void Sort(const char* prefix=\"\",\n"
      << "          const char* fileName=\"time.root\",\n"
      << "          const char* outName=\"map.root\",\n"
      << "          const char* treeName=\"T\")\n"
      << "{\n"
      << "  gSystem->AddIncludePath(\"-DNO_TASK -I$ALICE_ROOT/include\");\n"
      << "  TString mac(\"EventTimeTask/EventTimeTask.C+g\");\n"
      << "  if (prefix && prefix[0] != '\\0') mac.Prepend(prefix);\n"
      << "  gROOT->LoadMacro(mac);\n"
      << "  EventTimeSorter s;\n"
      << "  if (!s.Run(fileName,outName,treeName)) return;\n"
      << "  s.Test(fileName,outName,treeName);\n"
      << "}\n"
      << std::endl;
    o.close();
  }
  void PostShellCode(std::ostream& f)
  {
    f << "  echo \"=== Sort results ...\"\n"
      << "  aliroot -l -b -q ${prefix}Sort.C\\(\\\"${prefix}\\\"\\)\n"
      << std::endl;
  }
};
// EOF
 EventTimeTrain.C:1
 EventTimeTrain.C:2
 EventTimeTrain.C:3
 EventTimeTrain.C:4
 EventTimeTrain.C:5
 EventTimeTrain.C:6
 EventTimeTrain.C:7
 EventTimeTrain.C:8
 EventTimeTrain.C:9
 EventTimeTrain.C:10
 EventTimeTrain.C:11
 EventTimeTrain.C:12
 EventTimeTrain.C:13
 EventTimeTrain.C:14
 EventTimeTrain.C:15
 EventTimeTrain.C:16
 EventTimeTrain.C:17
 EventTimeTrain.C:18
 EventTimeTrain.C:19
 EventTimeTrain.C:20
 EventTimeTrain.C:21
 EventTimeTrain.C:22
 EventTimeTrain.C:23
 EventTimeTrain.C:24
 EventTimeTrain.C:25
 EventTimeTrain.C:26
 EventTimeTrain.C:27
 EventTimeTrain.C:28
 EventTimeTrain.C:29
 EventTimeTrain.C:30
 EventTimeTrain.C:31
 EventTimeTrain.C:32
 EventTimeTrain.C:33
 EventTimeTrain.C:34
 EventTimeTrain.C:35
 EventTimeTrain.C:36
 EventTimeTrain.C:37
 EventTimeTrain.C:38
 EventTimeTrain.C:39
 EventTimeTrain.C:40
 EventTimeTrain.C:41
 EventTimeTrain.C:42
 EventTimeTrain.C:43
 EventTimeTrain.C:44
 EventTimeTrain.C:45
 EventTimeTrain.C:46
 EventTimeTrain.C:47
 EventTimeTrain.C:48
 EventTimeTrain.C:49
 EventTimeTrain.C:50
 EventTimeTrain.C:51
 EventTimeTrain.C:52
 EventTimeTrain.C:53
 EventTimeTrain.C:54
 EventTimeTrain.C:55
 EventTimeTrain.C:56
 EventTimeTrain.C:57
 EventTimeTrain.C:58
 EventTimeTrain.C:59
 EventTimeTrain.C:60
 EventTimeTrain.C:61
 EventTimeTrain.C:62
 EventTimeTrain.C:63
 EventTimeTrain.C:64
 EventTimeTrain.C:65
 EventTimeTrain.C:66
 EventTimeTrain.C:67
 EventTimeTrain.C:68
 EventTimeTrain.C:69
 EventTimeTrain.C:70
 EventTimeTrain.C:71
 EventTimeTrain.C:72
 EventTimeTrain.C:73
 EventTimeTrain.C:74
 EventTimeTrain.C:75
 EventTimeTrain.C:76
 EventTimeTrain.C:77
 EventTimeTrain.C:78
 EventTimeTrain.C:79
 EventTimeTrain.C:80
 EventTimeTrain.C:81
 EventTimeTrain.C:82
 EventTimeTrain.C:83
 EventTimeTrain.C:84
 EventTimeTrain.C:85
 EventTimeTrain.C:86
 EventTimeTrain.C:87
 EventTimeTrain.C:88
 EventTimeTrain.C:89
 EventTimeTrain.C:90
 EventTimeTrain.C:91
 EventTimeTrain.C:92
 EventTimeTrain.C:93
 EventTimeTrain.C:94
 EventTimeTrain.C:95
 EventTimeTrain.C:96
 EventTimeTrain.C:97
 EventTimeTrain.C:98
 EventTimeTrain.C:99
 EventTimeTrain.C:100
 EventTimeTrain.C:101
 EventTimeTrain.C:102
 EventTimeTrain.C:103
 EventTimeTrain.C:104
 EventTimeTrain.C:105