ROOT logo
/**
 * @file   MakeMultDistsTrain.C
 * @author Christian Holm Christensen <cholm@master.hehi.nbi.dk>
 * @date   Fri Jun  1 13:51:26 2012
 * 
 * @brief  
 * 
 * @ingroup pwglf_forward_trains_specific
 * 
 */

#include "TrainSetup.C"

//====================================================================
/**
 * Analysis train to make @f$ P(N_{ch})@f$
 * 
 *
 * @ingroup pwglf_forward_multdists
 * @ingroup pwglf_forward_trains_specific
 */
class MakeMultDistsTrain : public TrainSetup
{
public:
  /** 
   * Constructor.  
   * 
   * @param name     Name of train (free form)
   */
  MakeMultDistsTrain(const char* name)
  : TrainSetup(name)
  {
    fOptions.Add("trig",       "TYPE", "Trigger type", "V0AND");
    fOptions.Add("vzMin",      "CENTIMETER", "Min Ip Z", -4);
    fOptions.Add("vzMax",      "CENTIMETER", "Max Ip Z", +4);
    fOptions.Add("phi-acc",    "Use stored phi acceptance", false);
    fOptions.Add("asymmetric", "Make asymmetric (+/-) bins", false);
  }
protected:
  /** 
   * Create the tasks 
   * 
   */
  void CreateTasks(AliAnalysisManager*)
  {
    // --- Output file name ------------------------------------------
    AliAnalysisManager::SetCommonFileName("forward_multdists.root");

    // --- Load libraries/pars ---------------------------------------
    fRailway->LoadLibrary("PWGLFforward2");
    
    // --- Set load path ---------------------------------------------
    gROOT->SetMacroPath(Form("%s:$(ALICE_ROOT)/PWGLF/FORWARD/analysis2",
			     gROOT->GetMacroPath()));

    // --- Get parameters --------------------------------------------
    TString  trig   = fOptions.AsString("trig", "V0AND");
    Double_t vzMin  = fOptions.AsDouble("vzmin", -4);
    Double_t vzMax  = fOptions.AsDouble("vzmax", +4);
    Bool_t   phiAcc = fOptions.AsBool("phi-acc");
    Bool_t   aSymm  = fOptions.AsBool("asymmetric");

    // --- Form arguments --------------------------------------------
    TString args;
    args.Form("\"%s\",%f,%f,%d,%d",
	      trig.Data(), vzMin, vzMax, phiAcc, aSymm);
    // --- Add the task ----------------------------------------------
    CoupleCar("AddTaskForwardMultDists.C(%s)", args);
    AddMonitor("ForwardMultSums");
  }
  //__________________________________________________________________
  /** 
   * Do not the centrality selection
   */
  //__________________________________________________________________
  void CreateCentralitySelection(Bool_t) {}
  /** 
   * Do not create MC input handler 
   * 
   * @return Always null
   */
  AliVEventHandler* CreateMCHandler(UShort_t, bool) { return 0; }
  //__________________________________________________________________
  /** 
   * Crete output handler - we don't want one here. 
   * 
   * @return 0
   */
  AliVEventHandler* CreateOutputHandler(UShort_t) { return 0; }
  //__________________________________________________________________
  const char* ClassName() const { return "MakeMultDistsTrain"; }
  //__________________________________________________________________
  /** 
   * Overloaded to create new draw.C 
   * 
   * @param asShellScript 
   */
  void SaveSetup(Bool_t asShellScript)
  {
    TrainSetup::SaveSetup(asShellScript);

    SaveSummarize();
    SaveUnfold();
    SaveDraw();
  }
  void SaveUnfold() 
  {
    std::ofstream f("Unfold.C");
    if (!f) { 
      Error("SaveUnfold", "Failed to open Unfold.C script");
      return;
    }
    f << "// Generated by " << ClassName() << "\n"
      << "void Unfold(const char* other=\"\",\n"
      << "            Double_t    regP=20,\n"
      << "            const char* here=\"forward_multdists.root\")\n"
      << "{\n"
      << "  const char* rooUnfold = gSystem->Getenv(\"ROOUNFOLD\");\n"
      << "  if (rooUnfold) {\n"
      << "    gSystem->AddIncludePath(Form(\"-I%s/src\",rooUnfold));\n"
      << "    gSystem->AddDynamicPath(Form(\"%s\", rooUnfold));\n"
      << "  }\n"
      << "  gSystem->Load(\"libRooUnfold\");\n"
      << "  const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
      << "  gROOT->LoadMacro(Form(\"%s/scripts/UnfoldMultDists.C++g\",fwd));\n"
      << "  UnfoldMultDists(\"bayes\",regP,here,other);\n"
      << "}\n"
      << "// EOF" << std::endl;
    
    f.close();
  }
  void SaveSummarize()
  {
    std::ofstream f("Summarize.C");
    if (!f) { 
      Error("SaveSummarize", "Failed to open Summarize.C script");
      return;
    }
    f << "// Generated by " << ClassName() << "\n"
      << "// WHAT is a bit mask of\n"
      << "//   0x001     Forward\n"
      << "//   0x002     Central\n"
      << "//   0x004     Sums\n"
      << "//   0x008     Results\n"
      << "//   0x010     Only min-bias (no centrality)\n"
      << "//   0x020     Landscape\n"
      << "//   0x040     Pause\n"
      << "//\n"
      << "void Summarize(const char* filename=\"forward_multdists.root\",\n"
      << "               UShort_t what=0xF)\n"
      << "{\n"
      << "  const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
      << "  gROOT->LoadMacro(Form(\"%s/DrawMultDistsSummary.C\",fwd));\n"
      << "  DrawMultDistsSummary(filename,what);\n"
      << "}\n"
      << "// EOF" << std::endl;
    f.close();
  }
  void SaveDraw()
  {
    std::ofstream f("Draw.C");
    if (!f) { 
      Error("SaveSummarize", "Failed to open Summarize.C script");
      return;
    }
    f << "// Generated by " << ClassName() << "\n"
      << "// WHAT is a bit mask of\n"
      << "//   0x001     Forward\n"
      << "//   0x002     Central\n"
      << "//   0x004     Sums\n"
      << "//   0x008     Results\n"
      << "//   0x010     Only min-bias (no centrality)\n"
      << "//   0x020     Landscape\n"
      << "//   0x040     Pause\n"
      << "//\n"
      << "void Draw(const char* filename=\"forward_unfolded.root\",\n"
      << "               UShort_t what=0xF)\n"
      << "{\n"
      << "  const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
      << "  gROOT->LoadMacro(Form(\"%s/DrawUnfoldedSummary.C\",fwd));\n"
      << "  DrawUnfoldedSummary(filename);\n"
      << "}\n"
      << "// EOF" << std::endl;
    f.close();
  }
  void PostShellCode(std::ostream& f)
  {
    f << "  echo \"=== Summarizing results ...\"\n"
      << "  aliroot -l -b -q ${prefix}Summarize.C\n"
      << "  echo \"=== Unfolding ...\"\n"
      << "  export ROOUNFOLD=${HOME}/tmp/RooUnfoldMyEdits\n"
      << "  mc=\n"
      << "  if test x$dest != x ; then mc=${dest}/forward_multdists.root; fi\n"
      << "  aliroot -l -b -q ${prefix}Unfold.C\\(\\\"${mc}\\\"\\)\n"
      << "  aliroot -l -b -q ${prefix}Draw.C\n"
      << std::endl;
  }
};
//
// EOF
//
 MakeMultDistsTrain.C:1
 MakeMultDistsTrain.C:2
 MakeMultDistsTrain.C:3
 MakeMultDistsTrain.C:4
 MakeMultDistsTrain.C:5
 MakeMultDistsTrain.C:6
 MakeMultDistsTrain.C:7
 MakeMultDistsTrain.C:8
 MakeMultDistsTrain.C:9
 MakeMultDistsTrain.C:10
 MakeMultDistsTrain.C:11
 MakeMultDistsTrain.C:12
 MakeMultDistsTrain.C:13
 MakeMultDistsTrain.C:14
 MakeMultDistsTrain.C:15
 MakeMultDistsTrain.C:16
 MakeMultDistsTrain.C:17
 MakeMultDistsTrain.C:18
 MakeMultDistsTrain.C:19
 MakeMultDistsTrain.C:20
 MakeMultDistsTrain.C:21
 MakeMultDistsTrain.C:22
 MakeMultDistsTrain.C:23
 MakeMultDistsTrain.C:24
 MakeMultDistsTrain.C:25
 MakeMultDistsTrain.C:26
 MakeMultDistsTrain.C:27
 MakeMultDistsTrain.C:28
 MakeMultDistsTrain.C:29
 MakeMultDistsTrain.C:30
 MakeMultDistsTrain.C:31
 MakeMultDistsTrain.C:32
 MakeMultDistsTrain.C:33
 MakeMultDistsTrain.C:34
 MakeMultDistsTrain.C:35
 MakeMultDistsTrain.C:36
 MakeMultDistsTrain.C:37
 MakeMultDistsTrain.C:38
 MakeMultDistsTrain.C:39
 MakeMultDistsTrain.C:40
 MakeMultDistsTrain.C:41
 MakeMultDistsTrain.C:42
 MakeMultDistsTrain.C:43
 MakeMultDistsTrain.C:44
 MakeMultDistsTrain.C:45
 MakeMultDistsTrain.C:46
 MakeMultDistsTrain.C:47
 MakeMultDistsTrain.C:48
 MakeMultDistsTrain.C:49
 MakeMultDistsTrain.C:50
 MakeMultDistsTrain.C:51
 MakeMultDistsTrain.C:52
 MakeMultDistsTrain.C:53
 MakeMultDistsTrain.C:54
 MakeMultDistsTrain.C:55
 MakeMultDistsTrain.C:56
 MakeMultDistsTrain.C:57
 MakeMultDistsTrain.C:58
 MakeMultDistsTrain.C:59
 MakeMultDistsTrain.C:60
 MakeMultDistsTrain.C:61
 MakeMultDistsTrain.C:62
 MakeMultDistsTrain.C:63
 MakeMultDistsTrain.C:64
 MakeMultDistsTrain.C:65
 MakeMultDistsTrain.C:66
 MakeMultDistsTrain.C:67
 MakeMultDistsTrain.C:68
 MakeMultDistsTrain.C:69
 MakeMultDistsTrain.C:70
 MakeMultDistsTrain.C:71
 MakeMultDistsTrain.C:72
 MakeMultDistsTrain.C:73
 MakeMultDistsTrain.C:74
 MakeMultDistsTrain.C:75
 MakeMultDistsTrain.C:76
 MakeMultDistsTrain.C:77
 MakeMultDistsTrain.C:78
 MakeMultDistsTrain.C:79
 MakeMultDistsTrain.C:80
 MakeMultDistsTrain.C:81
 MakeMultDistsTrain.C:82
 MakeMultDistsTrain.C:83
 MakeMultDistsTrain.C:84
 MakeMultDistsTrain.C:85
 MakeMultDistsTrain.C:86
 MakeMultDistsTrain.C:87
 MakeMultDistsTrain.C:88
 MakeMultDistsTrain.C:89
 MakeMultDistsTrain.C:90
 MakeMultDistsTrain.C:91
 MakeMultDistsTrain.C:92
 MakeMultDistsTrain.C:93
 MakeMultDistsTrain.C:94
 MakeMultDistsTrain.C:95
 MakeMultDistsTrain.C:96
 MakeMultDistsTrain.C:97
 MakeMultDistsTrain.C:98
 MakeMultDistsTrain.C:99
 MakeMultDistsTrain.C:100
 MakeMultDistsTrain.C:101
 MakeMultDistsTrain.C:102
 MakeMultDistsTrain.C:103
 MakeMultDistsTrain.C:104
 MakeMultDistsTrain.C:105
 MakeMultDistsTrain.C:106
 MakeMultDistsTrain.C:107
 MakeMultDistsTrain.C:108
 MakeMultDistsTrain.C:109
 MakeMultDistsTrain.C:110
 MakeMultDistsTrain.C:111
 MakeMultDistsTrain.C:112
 MakeMultDistsTrain.C:113
 MakeMultDistsTrain.C:114
 MakeMultDistsTrain.C:115
 MakeMultDistsTrain.C:116
 MakeMultDistsTrain.C:117
 MakeMultDistsTrain.C:118
 MakeMultDistsTrain.C:119
 MakeMultDistsTrain.C:120
 MakeMultDistsTrain.C:121
 MakeMultDistsTrain.C:122
 MakeMultDistsTrain.C:123
 MakeMultDistsTrain.C:124
 MakeMultDistsTrain.C:125
 MakeMultDistsTrain.C:126
 MakeMultDistsTrain.C:127
 MakeMultDistsTrain.C:128
 MakeMultDistsTrain.C:129
 MakeMultDistsTrain.C:130
 MakeMultDistsTrain.C:131
 MakeMultDistsTrain.C:132
 MakeMultDistsTrain.C:133
 MakeMultDistsTrain.C:134
 MakeMultDistsTrain.C:135
 MakeMultDistsTrain.C:136
 MakeMultDistsTrain.C:137
 MakeMultDistsTrain.C:138
 MakeMultDistsTrain.C:139
 MakeMultDistsTrain.C:140
 MakeMultDistsTrain.C:141
 MakeMultDistsTrain.C:142
 MakeMultDistsTrain.C:143
 MakeMultDistsTrain.C:144
 MakeMultDistsTrain.C:145
 MakeMultDistsTrain.C:146
 MakeMultDistsTrain.C:147
 MakeMultDistsTrain.C:148
 MakeMultDistsTrain.C:149
 MakeMultDistsTrain.C:150
 MakeMultDistsTrain.C:151
 MakeMultDistsTrain.C:152
 MakeMultDistsTrain.C:153
 MakeMultDistsTrain.C:154
 MakeMultDistsTrain.C:155
 MakeMultDistsTrain.C:156
 MakeMultDistsTrain.C:157
 MakeMultDistsTrain.C:158
 MakeMultDistsTrain.C:159
 MakeMultDistsTrain.C:160
 MakeMultDistsTrain.C:161
 MakeMultDistsTrain.C:162
 MakeMultDistsTrain.C:163
 MakeMultDistsTrain.C:164
 MakeMultDistsTrain.C:165
 MakeMultDistsTrain.C:166
 MakeMultDistsTrain.C:167
 MakeMultDistsTrain.C:168
 MakeMultDistsTrain.C:169
 MakeMultDistsTrain.C:170
 MakeMultDistsTrain.C:171
 MakeMultDistsTrain.C:172
 MakeMultDistsTrain.C:173
 MakeMultDistsTrain.C:174
 MakeMultDistsTrain.C:175
 MakeMultDistsTrain.C:176
 MakeMultDistsTrain.C:177
 MakeMultDistsTrain.C:178
 MakeMultDistsTrain.C:179
 MakeMultDistsTrain.C:180
 MakeMultDistsTrain.C:181
 MakeMultDistsTrain.C:182
 MakeMultDistsTrain.C:183
 MakeMultDistsTrain.C:184
 MakeMultDistsTrain.C:185
 MakeMultDistsTrain.C:186
 MakeMultDistsTrain.C:187
 MakeMultDistsTrain.C:188
 MakeMultDistsTrain.C:189
 MakeMultDistsTrain.C:190
 MakeMultDistsTrain.C:191
 MakeMultDistsTrain.C:192
 MakeMultDistsTrain.C:193
 MakeMultDistsTrain.C:194
 MakeMultDistsTrain.C:195
 MakeMultDistsTrain.C:196
 MakeMultDistsTrain.C:197
 MakeMultDistsTrain.C:198
 MakeMultDistsTrain.C:199
 MakeMultDistsTrain.C:200
 MakeMultDistsTrain.C:201
 MakeMultDistsTrain.C:202