ROOT logo
/**
 * @file   MakedNdetaTrain.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$ dN/d\eta@f$
 * 
 *
 * @ingroup pwglf_forward_dndeta
 * @ingroup pwglf_forward_trains_specific
 */
class MakedNdetaTrain : public TrainSetup
{
public:
  /** 
   * Constructor.  
   * 
   * @param name     Name of train (free form)
   */
  MakedNdetaTrain(const char* name)
  : TrainSetup(name)
  {
    fOptions.Add("trig",     "TYPE", "Trigger type", "INEL");
    fOptions.Add("vzMin",    "CENTIMETER", "Min Ip Z", "-10");
    fOptions.Add("vzMax",    "CENTIMETER", "Max Ip Z", "+10");
    fOptions.Add("scheme",   "SCHEME", "Normalization scheme", "EVENT,TRIGGER");
    fOptions.Add("trigEff",  "EFFICENCY", "Trigger effeciency", "1");
    fOptions.Add("trigEff0", "EFFICENCY", "0-bin trigger effeciency", "1");
    fOptions.Add("cent",     "ESTIMATOR", "Use centrality", "none");
    fOptions.Add("mc",       "Also make dN/deta for MC truth");
    fOptions.Add("satellite","Restrict analysis to satellite events", false);
    fOptions.Add("forward-config", "FILE", "Forward configuration", 
		 "dNdetaConfig.C");
    fOptions.Add("central-config", "FILE", "Central configuration", 
		 "dNdetaConfig.C");
    fOptions.Add("truth-config", "FILE", "MC-Truth configuration", 
		 "dNdetaConfig.C");
  }
protected:
  /** 
   * Create the tasks 
   * 
   */
  void CreateTasks(AliAnalysisManager*)
  {
    // --- Output file name ------------------------------------------
    AliAnalysisManager::SetCommonFileName("forward_dndeta.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.Get("trig");
    TString  scheme  = fOptions.Get("scheme");
    Double_t vzMin   = fOptions.AsDouble("vzmin", -10);
    Double_t vzMax   = fOptions.AsDouble("vzmax", +10);
    Double_t effT    = fOptions.AsDouble("trigEff", 1);
    Double_t effT0   = fOptions.AsDouble("trigEff0", 1);
    TString  cent    = fOptions.Get("cent");
    Bool_t   mc      = fOptions.Has("mc");
    Bool_t   satonly = fOptions.AsBool("satellite");
    TString  fwdCfg  = fOptions.Get("forward-config");
    TString  cenCfg  = fOptions.Get("central-config");
    TString  mcCfg   = fOptions.Get("truth-config");
    if (!mc) mc      = fRailway->IsMC(); 
    if (!fOptions.Has("cent")) cent="none";

    // Info("", "Centrality option is '%s'", cent.Data());
    fOptions.Show(std::cout);

    // --- Form arguments --------------------------------------------
    TString fargs;
    fargs.Form("\"%s\",\"%s\",%f,%f,\"%s\",\"%s\",%g,%g,%d",
	       fwdCfg.Data(), trig.Data(), vzMin, vzMax, cent.Data(), 
	       scheme.Data(), effT, effT0, satonly);
    TString cargs(fargs);
    cargs.ReplaceAll(fwdCfg, cenCfg);
    // Info("", "fargs=\"%s\", cargs=\"%s\"", fargs.Data(), cargs.Data()); 

    // --- Add the task ----------------------------------------------
    CoupleCar("AddTaskForwarddNdeta.C", fargs);
    CoupleCar("AddTaskCentraldNdeta.C", cargs);
    if (mc) {
      TString margs(fargs);
      margs.ReplaceAll(fwdCfg, mcCfg);
      CoupleCar("AddTaskMCTruthdNdeta.C", margs);
    }
  }
  //__________________________________________________________________
  /** 
   * 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 "MakedNdetaTrain"; }
  //__________________________________________________________________
  /** 
   * Overloaded to create new draw.C 
   * 
   * @param asShellScript 
   */
  void SaveSetup(Bool_t asShellScript)
  {
    TrainSetup::SaveSetup(asShellScript);

    SaveDraw();
    SaveSummarize();
  }
  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"
      << "//   0x080     Assume simulation results\n"
      << "//   0x100     Landscape\n"
      << "//   0x200     Pause\n"
      << "//   0x400     Also draw single result canvas\n"
      << "//\n"
      << "void Summarize(const char* filename=\"forward_dndeta.root\",\n"
      << "               UShort_t what=0x10F)\n"
      << "{\n"
      << "  const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
      << "  gROOT->LoadMacro(Form(\"%s/DrawdNdetaSummary.C\",fwd));\n"
      << "  DrawdNdetaSummary(filename,what & 0x3FF);\n"
      << "\n"
      << "  if (!(what & 0x400)) return;\n"
      << "  gROOT->SetMacroPath(Form(\"../:%s\",gROOT->GetMacroPath()));\n"
      << "  gROOT->Macro(\"Draw.C\");\n"
      << "}\n"
      << "// EOF" << std::endl;
    f.close();
  }
  /** 
   * Make a ROOT script to draw results 
   * 
   */
  void SaveDraw()
  {
    std::ofstream o("Draw.C");
    if (!o) { 
      Error("MakedNdetaTrain::SaveSetup", "Failed to open Draw.C");
      return;
    }

    o << "// Created by " << ClassName() << "\n"
      << "Bool_t SetupDrawer(const TString& title, Bool_t old)\n"
      << "{\n"
      << "  const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
      << "  gROOT->LoadMacro(Form(\"%s/DrawdNdeta.C+\",fwd));\n"
      << "  if (title.EqualTo(\"help\",TString::kIgnoreCase)) {\n"
      << "    if (old)\n"
      << "      DrawdNdeta(\"help\",\"\",5); // Get the help\n"
      << "    else\n"
      << "      DrawdNdeta(\"help\",\"\",\"\"); // Get the help\n"
      << "    return false;\n"
      << "  }\n"
      << "  return true;\n"
      << "}\n"
      << std::endl;
    o << "// Will draw dN/deta results from produced file\n"
      << "// \n"
      << "// Options can be specified as needed. To get help, pass the\n"
      << "// string \"help\" for the title:\n"
      << "// \n"
      << "//   root -l Draw.C\\(\\\"help\\\"\\)\n"
      << "// \n";
    o << "void Draw(const TString& title=\"" << fName << "\",\n"
      << "          UShort_t       rebin=5,\n"
      << "          UShort_t       others=0xf,\n"
      << "          UInt_t         flags=0x1CE07,\n"
      << "          UShort_t       sNN=0,\n"
      << "          UShort_t       sys=0,\n"
      << "          UShort_t       trg=0,\n"
      << "          Float_t        eff=0,\n"
      << "          UShort_t       centMin=0,\n"
      << "          UShort_t       centMax=100,\n"
      << "          Float_t        vzMin=999,\n"
      << "          Float_t        vzMax=-999)\n"
      << "{\n"
      << "  if (!SetupDrawer(title, true)) return;\n"
      << "  DrawdNdeta(\"forward_dndeta.root\",\n"
      << "             title,\n"
      << "             rebin,\n"
      << "             others,\n"
      << "             flags,\n"
      << "             sNN,\n"
      << "             sys,\n"
      << "             trg,\n"
      << "             eff,\n"
      << "             centMin,\n"
      << "             centMax,\n"
      << "             vzMin,\n"
      << "             vzMax,\n"
      << "              \"dNdeta_<trig>\");\n"
      << "}\n"
      << std::endl;
    o << "// Alternative using strings\n"
      << "void Draw(const TString& title,\n"
      << "          const TString& others=\"ALL\",\n"
      << "          const TString& options=\"DEFAULT\",\n"
      << "          const TString& formats=\"ALL\",\n"
      << "          UShort_t       rebin=5,\n"
      << "          Float_t        eff=0,\n"
      << "          UShort_t       centMin=0,\n"
      << "          UShort_t       centMax=0,\n"
      << "          Float_t        vzMin=+999,\n"
      << "          Float_t        vzMax=-999,\n"
      << "          const TString& base="")\n"
      << "{\n"
      << "  if (!SetupDrawer(title, false)) return;\n"
      << "  DrawdNdeta(\"forward_dndeta.root\",\n"
      << "             title,others,options,formats,\n"
      << "             rebin,eff,centMin,centMax,\n"
      << "             vzMin,vzMax,\"dNdeta_<trig>\");\n"
      << "}\n"  
      << "//\n"
      << "// EOF\n"
      << "//" << std::endl;
    o.close();
  }
  void PostShellCode(std::ostream& f)
  {
    f << "  echo \"=== Summarizing results ...\"\n"
      << "  aliroot -l -b -q ${prefix}Summarize.C\n"
      << "  echo \"=== Draw results ...\"\n"
      << "  aliroot -l -b -q ${prefix}Draw.C\n"
      << std::endl;
  }
};
//
// EOF
//
 MakedNdetaTrain.C:1
 MakedNdetaTrain.C:2
 MakedNdetaTrain.C:3
 MakedNdetaTrain.C:4
 MakedNdetaTrain.C:5
 MakedNdetaTrain.C:6
 MakedNdetaTrain.C:7
 MakedNdetaTrain.C:8
 MakedNdetaTrain.C:9
 MakedNdetaTrain.C:10
 MakedNdetaTrain.C:11
 MakedNdetaTrain.C:12
 MakedNdetaTrain.C:13
 MakedNdetaTrain.C:14
 MakedNdetaTrain.C:15
 MakedNdetaTrain.C:16
 MakedNdetaTrain.C:17
 MakedNdetaTrain.C:18
 MakedNdetaTrain.C:19
 MakedNdetaTrain.C:20
 MakedNdetaTrain.C:21
 MakedNdetaTrain.C:22
 MakedNdetaTrain.C:23
 MakedNdetaTrain.C:24
 MakedNdetaTrain.C:25
 MakedNdetaTrain.C:26
 MakedNdetaTrain.C:27
 MakedNdetaTrain.C:28
 MakedNdetaTrain.C:29
 MakedNdetaTrain.C:30
 MakedNdetaTrain.C:31
 MakedNdetaTrain.C:32
 MakedNdetaTrain.C:33
 MakedNdetaTrain.C:34
 MakedNdetaTrain.C:35
 MakedNdetaTrain.C:36
 MakedNdetaTrain.C:37
 MakedNdetaTrain.C:38
 MakedNdetaTrain.C:39
 MakedNdetaTrain.C:40
 MakedNdetaTrain.C:41
 MakedNdetaTrain.C:42
 MakedNdetaTrain.C:43
 MakedNdetaTrain.C:44
 MakedNdetaTrain.C:45
 MakedNdetaTrain.C:46
 MakedNdetaTrain.C:47
 MakedNdetaTrain.C:48
 MakedNdetaTrain.C:49
 MakedNdetaTrain.C:50
 MakedNdetaTrain.C:51
 MakedNdetaTrain.C:52
 MakedNdetaTrain.C:53
 MakedNdetaTrain.C:54
 MakedNdetaTrain.C:55
 MakedNdetaTrain.C:56
 MakedNdetaTrain.C:57
 MakedNdetaTrain.C:58
 MakedNdetaTrain.C:59
 MakedNdetaTrain.C:60
 MakedNdetaTrain.C:61
 MakedNdetaTrain.C:62
 MakedNdetaTrain.C:63
 MakedNdetaTrain.C:64
 MakedNdetaTrain.C:65
 MakedNdetaTrain.C:66
 MakedNdetaTrain.C:67
 MakedNdetaTrain.C:68
 MakedNdetaTrain.C:69
 MakedNdetaTrain.C:70
 MakedNdetaTrain.C:71
 MakedNdetaTrain.C:72
 MakedNdetaTrain.C:73
 MakedNdetaTrain.C:74
 MakedNdetaTrain.C:75
 MakedNdetaTrain.C:76
 MakedNdetaTrain.C:77
 MakedNdetaTrain.C:78
 MakedNdetaTrain.C:79
 MakedNdetaTrain.C:80
 MakedNdetaTrain.C:81
 MakedNdetaTrain.C:82
 MakedNdetaTrain.C:83
 MakedNdetaTrain.C:84
 MakedNdetaTrain.C:85
 MakedNdetaTrain.C:86
 MakedNdetaTrain.C:87
 MakedNdetaTrain.C:88
 MakedNdetaTrain.C:89
 MakedNdetaTrain.C:90
 MakedNdetaTrain.C:91
 MakedNdetaTrain.C:92
 MakedNdetaTrain.C:93
 MakedNdetaTrain.C:94
 MakedNdetaTrain.C:95
 MakedNdetaTrain.C:96
 MakedNdetaTrain.C:97
 MakedNdetaTrain.C:98
 MakedNdetaTrain.C:99
 MakedNdetaTrain.C:100
 MakedNdetaTrain.C:101
 MakedNdetaTrain.C:102
 MakedNdetaTrain.C:103
 MakedNdetaTrain.C:104
 MakedNdetaTrain.C:105
 MakedNdetaTrain.C:106
 MakedNdetaTrain.C:107
 MakedNdetaTrain.C:108
 MakedNdetaTrain.C:109
 MakedNdetaTrain.C:110
 MakedNdetaTrain.C:111
 MakedNdetaTrain.C:112
 MakedNdetaTrain.C:113
 MakedNdetaTrain.C:114
 MakedNdetaTrain.C:115
 MakedNdetaTrain.C:116
 MakedNdetaTrain.C:117
 MakedNdetaTrain.C:118
 MakedNdetaTrain.C:119
 MakedNdetaTrain.C:120
 MakedNdetaTrain.C:121
 MakedNdetaTrain.C:122
 MakedNdetaTrain.C:123
 MakedNdetaTrain.C:124
 MakedNdetaTrain.C:125
 MakedNdetaTrain.C:126
 MakedNdetaTrain.C:127
 MakedNdetaTrain.C:128
 MakedNdetaTrain.C:129
 MakedNdetaTrain.C:130
 MakedNdetaTrain.C:131
 MakedNdetaTrain.C:132
 MakedNdetaTrain.C:133
 MakedNdetaTrain.C:134
 MakedNdetaTrain.C:135
 MakedNdetaTrain.C:136
 MakedNdetaTrain.C:137
 MakedNdetaTrain.C:138
 MakedNdetaTrain.C:139
 MakedNdetaTrain.C:140
 MakedNdetaTrain.C:141
 MakedNdetaTrain.C:142
 MakedNdetaTrain.C:143
 MakedNdetaTrain.C:144
 MakedNdetaTrain.C:145
 MakedNdetaTrain.C:146
 MakedNdetaTrain.C:147
 MakedNdetaTrain.C:148
 MakedNdetaTrain.C:149
 MakedNdetaTrain.C:150
 MakedNdetaTrain.C:151
 MakedNdetaTrain.C:152
 MakedNdetaTrain.C:153
 MakedNdetaTrain.C:154
 MakedNdetaTrain.C:155
 MakedNdetaTrain.C:156
 MakedNdetaTrain.C:157
 MakedNdetaTrain.C:158
 MakedNdetaTrain.C:159
 MakedNdetaTrain.C:160
 MakedNdetaTrain.C:161
 MakedNdetaTrain.C:162
 MakedNdetaTrain.C:163
 MakedNdetaTrain.C:164
 MakedNdetaTrain.C:165
 MakedNdetaTrain.C:166
 MakedNdetaTrain.C:167
 MakedNdetaTrain.C:168
 MakedNdetaTrain.C:169
 MakedNdetaTrain.C:170
 MakedNdetaTrain.C:171
 MakedNdetaTrain.C:172
 MakedNdetaTrain.C:173
 MakedNdetaTrain.C:174
 MakedNdetaTrain.C:175
 MakedNdetaTrain.C:176
 MakedNdetaTrain.C:177
 MakedNdetaTrain.C:178
 MakedNdetaTrain.C:179
 MakedNdetaTrain.C:180
 MakedNdetaTrain.C:181
 MakedNdetaTrain.C:182
 MakedNdetaTrain.C:183
 MakedNdetaTrain.C:184
 MakedNdetaTrain.C:185
 MakedNdetaTrain.C:186
 MakedNdetaTrain.C:187
 MakedNdetaTrain.C:188
 MakedNdetaTrain.C:189
 MakedNdetaTrain.C:190
 MakedNdetaTrain.C:191
 MakedNdetaTrain.C:192
 MakedNdetaTrain.C:193
 MakedNdetaTrain.C:194
 MakedNdetaTrain.C:195
 MakedNdetaTrain.C:196
 MakedNdetaTrain.C:197
 MakedNdetaTrain.C:198
 MakedNdetaTrain.C:199
 MakedNdetaTrain.C:200
 MakedNdetaTrain.C:201
 MakedNdetaTrain.C:202
 MakedNdetaTrain.C:203
 MakedNdetaTrain.C:204
 MakedNdetaTrain.C:205
 MakedNdetaTrain.C:206
 MakedNdetaTrain.C:207
 MakedNdetaTrain.C:208
 MakedNdetaTrain.C:209
 MakedNdetaTrain.C:210
 MakedNdetaTrain.C:211
 MakedNdetaTrain.C:212
 MakedNdetaTrain.C:213
 MakedNdetaTrain.C:214
 MakedNdetaTrain.C:215
 MakedNdetaTrain.C:216
 MakedNdetaTrain.C:217
 MakedNdetaTrain.C:218
 MakedNdetaTrain.C:219
 MakedNdetaTrain.C:220
 MakedNdetaTrain.C:221
 MakedNdetaTrain.C:222
 MakedNdetaTrain.C:223
 MakedNdetaTrain.C:224
 MakedNdetaTrain.C:225
 MakedNdetaTrain.C:226
 MakedNdetaTrain.C:227
 MakedNdetaTrain.C:228
 MakedNdetaTrain.C:229
 MakedNdetaTrain.C:230
 MakedNdetaTrain.C:231
 MakedNdetaTrain.C:232
 MakedNdetaTrain.C:233
 MakedNdetaTrain.C:234
 MakedNdetaTrain.C:235
 MakedNdetaTrain.C:236
 MakedNdetaTrain.C:237
 MakedNdetaTrain.C:238
 MakedNdetaTrain.C:239
 MakedNdetaTrain.C:240
 MakedNdetaTrain.C:241
 MakedNdetaTrain.C:242
 MakedNdetaTrain.C:243
 MakedNdetaTrain.C:244
 MakedNdetaTrain.C:245
 MakedNdetaTrain.C:246
 MakedNdetaTrain.C:247
 MakedNdetaTrain.C:248
 MakedNdetaTrain.C:249
 MakedNdetaTrain.C:250
 MakedNdetaTrain.C:251
 MakedNdetaTrain.C:252
 MakedNdetaTrain.C:253
 MakedNdetaTrain.C:254
 MakedNdetaTrain.C:255
 MakedNdetaTrain.C:256
 MakedNdetaTrain.C:257
 MakedNdetaTrain.C:258
 MakedNdetaTrain.C:259
 MakedNdetaTrain.C:260
 MakedNdetaTrain.C:261
 MakedNdetaTrain.C:262
 MakedNdetaTrain.C:263
 MakedNdetaTrain.C:264
 MakedNdetaTrain.C:265
 MakedNdetaTrain.C:266
 MakedNdetaTrain.C:267
 MakedNdetaTrain.C:268
 MakedNdetaTrain.C:269
 MakedNdetaTrain.C:270