ROOT logo
/**
 * @file   MakeFMDELossTrain.C
 * @author Christian Holm Christensen <cholm@master.hehi.nbi.dk>
 * @date   Fri Jun  1 13:53:02 2012
 * 
 * @brief  
 * 
 * 
 * @ingroup pwglf_forward_trains_specific
 */
#include "TrainSetup.C"

//====================================================================
/**
 * Analysis train to do energy loss fits
 * 
 * @ingroup pwglf_forward_trains_specific
 * @ingroup pwglf_forward_eloss
 */
class MakeFMDELossTrain : public TrainSetup
{
public:
  /** 
   * Constructor.  
   * 
   * @param name     Name of train 
   */
  MakeFMDELossTrain(const char* name  = "FMD Energy Loss")
    : TrainSetup(name)
  {
    fOptions.Add("only-mb", "Only collect statistics from MB events");
    fOptions.Add("config",  "FILE", "Configuration", "elossFitConfig.C");
    fOptions.Add("corr",    "DIR",  "Corrections dir", "");
    fOptions.Set("type", "ESD");
  }
protected:
  //------------------------------------------------------------------
  /** 
   * Create the analysis manager 
   * 
   * @param name Name of the analysis 
   * 
   * @return Created analysis manager 
   */
  virtual AliAnalysisManager* CreateAnalysisManager(const char* name)
  {
    AliAnalysisManager* mgr = TrainSetup::CreateAnalysisManager(name);
    // mgr->SetAutoBranchLoading(false);
    return mgr;
  }
  //__________________________________________________________________
  /** 
   * Create the tasks 
   * 
   * @param mgr  Analysis manager 
   */
  void CreateTasks(AliAnalysisManager* mgr)
  {
    // --- Output file name ------------------------------------------
    AliAnalysisManager::SetCommonFileName("forward_eloss.root");

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

    // --- Check if this is MC ---------------------------------------
    Bool_t   mc     = HasMCHandler();
    Bool_t   onlyMB = fOptions.AsBool("only-mb");
    TString  config = fOptions.Get("config"); 
    TString  corrs  = "";
    if (fOptions.Has("corr")) corrs = fOptions.Get("corr"); 

    // --- Add the task ----------------------------------------------
    CoupleCar("AddTaskFMDELoss.C", Form("%d,%d,\"%s\",\"%s\"", 
					mc, onlyMB,  
					config.Data(), 
					corrs.Data()));
    fRailway->LoadAux(gSystem->Which(gROOT->GetMacroPath(), config), true);
    if (!corrs.IsNull())
      fRailway->LoadAux(Form("%s/fmd_corrections.root",corrs.Data()), true);
    
  }
  /** 
   * Create entrality selection if enabled 
   * 
   * @param mc   Whether this is MC or not
   * @param mgr  Analysis manager 
   */
  virtual void CreateCentralitySelection(Bool_t mc)
  {
    if (!fOptions.Has("cent")) return;
    TrainSetup::CreateCentralitySelection(mc);    
  }
  /** 
   * Crete output handler - we don't want one here. 
   * 
   * @return 0
   */
  AliVEventHandler* CreateOutputHandler(UShort_t) { return 0; }

  //__________________________________________________________________
  const char* ClassName() const { return "MakeFMDELossTrain"; }
  //__________________________________________________________________
  /** 
   * Overloaded to create new Extract.C in the output 
   * directory
   * 
   * @param asShellScript 
   */
  void SaveSetup(Bool_t asShellScript)
  {
    TrainSetup::SaveSetup(asShellScript);
    SaveExtract();
    SaveSummarize();
    SaveReFit();
  }
  void SaveExtract()
  {
    std::ofstream f("Extract.C");
    if (!f) { 
      Error("SaveSetup", "Failed to open Extract.C");
      return;
    }
    f << "// Generated by " << ClassName() << "\n"
      << "void Extract(Bool_t mc=" << HasMCHandler() << ",\n"
      << "             const char* file=\"forward_eloss.root\")\n"
      << "{\n"
      << "  const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
      << "  gROOT->LoadMacro(Form(\"%s/corrs/ExtractELoss.C\",fwd));\n"
      << "  ExtractELoss(file,mc);\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 << std::boolalpha 
      << "// Generated by " << ClassName() << "\n"
      << "//\n"
      << "void Summarize(Bool_t mc=" << HasMCHandler() << ",\n"
      << "               const char* filename=\"forward_eloss.root\")\n"
      << "{\n"
      << "  const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
      << "  gROOT->LoadMacro(Form(\"%s/corrs/DrawCorrELoss.C\",fwd));\n"
      << "  DrawCorrELoss(mc,filename);\n"
      << "}\n"
      << "// EOF" << std::endl;
    f.close();
  }
  void SaveReFit()
  {
    std::ofstream f("ReFit.C");
    if (!f) { 
      Error("SaveRerun", "Failed to open ReFit.C script");
      return;
    }
    f << std::boolalpha 
      << "// Generated by " << ClassName() << "\n"
      << "// If force=true, then force set parameters\n"
      << "// If shift=true, enable extra shift in Delta from sigma/xi\n"
      << "//\n"
      << "void ReFit(Bool_t      force=false,\n"
      << "           Bool_t      shift=true,\n"
      << "           const char* filename=\"forward_eloss.root\")\n"
      << "{\n"
      << "  const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
      << "  gROOT->LoadMacro(Form(\"%s/corrs/RerunELossFits.C\",fwd));\n"
      << "  RerunELossFits(force,filename);\n"
      << "}\n"
      << "// EOF" << std::endl;
    f.close();
  }
  void PostShellCode(std::ostream& f)
  {
    f << "  mc=" << std::boolalpha << HasMCHandler() << "\n"
      << "  echo \"=== Extracting Corrections ...\"\n"
      << "  aliroot -l -b -q ${prefix}Extract.C\\($mc\\)\n"
      << "  echo \"=== Summarizing results ...\"\n"
      << "  aliroot -l -b -q ${prefix}Summarize.C\\($mc\\)\n"
      << "  if test x$dest = x ; then return ; fi\n"
      << "  echo \"=== Uploading to ${dest} ...\"\n"
      << "  aliroot -l -b -q Upload.C\\(\\\"${dest}\\\"\\);\n"
      << std::endl;
  }
};

//
// EOF
//
 MakeFMDELossTrain.C:1
 MakeFMDELossTrain.C:2
 MakeFMDELossTrain.C:3
 MakeFMDELossTrain.C:4
 MakeFMDELossTrain.C:5
 MakeFMDELossTrain.C:6
 MakeFMDELossTrain.C:7
 MakeFMDELossTrain.C:8
 MakeFMDELossTrain.C:9
 MakeFMDELossTrain.C:10
 MakeFMDELossTrain.C:11
 MakeFMDELossTrain.C:12
 MakeFMDELossTrain.C:13
 MakeFMDELossTrain.C:14
 MakeFMDELossTrain.C:15
 MakeFMDELossTrain.C:16
 MakeFMDELossTrain.C:17
 MakeFMDELossTrain.C:18
 MakeFMDELossTrain.C:19
 MakeFMDELossTrain.C:20
 MakeFMDELossTrain.C:21
 MakeFMDELossTrain.C:22
 MakeFMDELossTrain.C:23
 MakeFMDELossTrain.C:24
 MakeFMDELossTrain.C:25
 MakeFMDELossTrain.C:26
 MakeFMDELossTrain.C:27
 MakeFMDELossTrain.C:28
 MakeFMDELossTrain.C:29
 MakeFMDELossTrain.C:30
 MakeFMDELossTrain.C:31
 MakeFMDELossTrain.C:32
 MakeFMDELossTrain.C:33
 MakeFMDELossTrain.C:34
 MakeFMDELossTrain.C:35
 MakeFMDELossTrain.C:36
 MakeFMDELossTrain.C:37
 MakeFMDELossTrain.C:38
 MakeFMDELossTrain.C:39
 MakeFMDELossTrain.C:40
 MakeFMDELossTrain.C:41
 MakeFMDELossTrain.C:42
 MakeFMDELossTrain.C:43
 MakeFMDELossTrain.C:44
 MakeFMDELossTrain.C:45
 MakeFMDELossTrain.C:46
 MakeFMDELossTrain.C:47
 MakeFMDELossTrain.C:48
 MakeFMDELossTrain.C:49
 MakeFMDELossTrain.C:50
 MakeFMDELossTrain.C:51
 MakeFMDELossTrain.C:52
 MakeFMDELossTrain.C:53
 MakeFMDELossTrain.C:54
 MakeFMDELossTrain.C:55
 MakeFMDELossTrain.C:56
 MakeFMDELossTrain.C:57
 MakeFMDELossTrain.C:58
 MakeFMDELossTrain.C:59
 MakeFMDELossTrain.C:60
 MakeFMDELossTrain.C:61
 MakeFMDELossTrain.C:62
 MakeFMDELossTrain.C:63
 MakeFMDELossTrain.C:64
 MakeFMDELossTrain.C:65
 MakeFMDELossTrain.C:66
 MakeFMDELossTrain.C:67
 MakeFMDELossTrain.C:68
 MakeFMDELossTrain.C:69
 MakeFMDELossTrain.C:70
 MakeFMDELossTrain.C:71
 MakeFMDELossTrain.C:72
 MakeFMDELossTrain.C:73
 MakeFMDELossTrain.C:74
 MakeFMDELossTrain.C:75
 MakeFMDELossTrain.C:76
 MakeFMDELossTrain.C:77
 MakeFMDELossTrain.C:78
 MakeFMDELossTrain.C:79
 MakeFMDELossTrain.C:80
 MakeFMDELossTrain.C:81
 MakeFMDELossTrain.C:82
 MakeFMDELossTrain.C:83
 MakeFMDELossTrain.C:84
 MakeFMDELossTrain.C:85
 MakeFMDELossTrain.C:86
 MakeFMDELossTrain.C:87
 MakeFMDELossTrain.C:88
 MakeFMDELossTrain.C:89
 MakeFMDELossTrain.C:90
 MakeFMDELossTrain.C:91
 MakeFMDELossTrain.C:92
 MakeFMDELossTrain.C:93
 MakeFMDELossTrain.C:94
 MakeFMDELossTrain.C:95
 MakeFMDELossTrain.C:96
 MakeFMDELossTrain.C:97
 MakeFMDELossTrain.C:98
 MakeFMDELossTrain.C:99
 MakeFMDELossTrain.C:100
 MakeFMDELossTrain.C:101
 MakeFMDELossTrain.C:102
 MakeFMDELossTrain.C:103
 MakeFMDELossTrain.C:104
 MakeFMDELossTrain.C:105
 MakeFMDELossTrain.C:106
 MakeFMDELossTrain.C:107
 MakeFMDELossTrain.C:108
 MakeFMDELossTrain.C:109
 MakeFMDELossTrain.C:110
 MakeFMDELossTrain.C:111
 MakeFMDELossTrain.C:112
 MakeFMDELossTrain.C:113
 MakeFMDELossTrain.C:114
 MakeFMDELossTrain.C:115
 MakeFMDELossTrain.C:116
 MakeFMDELossTrain.C:117
 MakeFMDELossTrain.C:118
 MakeFMDELossTrain.C:119
 MakeFMDELossTrain.C:120
 MakeFMDELossTrain.C:121
 MakeFMDELossTrain.C:122
 MakeFMDELossTrain.C:123
 MakeFMDELossTrain.C:124
 MakeFMDELossTrain.C:125
 MakeFMDELossTrain.C:126
 MakeFMDELossTrain.C:127
 MakeFMDELossTrain.C:128
 MakeFMDELossTrain.C:129
 MakeFMDELossTrain.C:130
 MakeFMDELossTrain.C:131
 MakeFMDELossTrain.C:132
 MakeFMDELossTrain.C:133
 MakeFMDELossTrain.C:134
 MakeFMDELossTrain.C:135
 MakeFMDELossTrain.C:136
 MakeFMDELossTrain.C:137
 MakeFMDELossTrain.C:138
 MakeFMDELossTrain.C:139
 MakeFMDELossTrain.C:140
 MakeFMDELossTrain.C:141
 MakeFMDELossTrain.C:142
 MakeFMDELossTrain.C:143
 MakeFMDELossTrain.C:144
 MakeFMDELossTrain.C:145
 MakeFMDELossTrain.C:146
 MakeFMDELossTrain.C:147
 MakeFMDELossTrain.C:148
 MakeFMDELossTrain.C:149
 MakeFMDELossTrain.C:150
 MakeFMDELossTrain.C:151
 MakeFMDELossTrain.C:152
 MakeFMDELossTrain.C:153
 MakeFMDELossTrain.C:154
 MakeFMDELossTrain.C:155
 MakeFMDELossTrain.C:156
 MakeFMDELossTrain.C:157
 MakeFMDELossTrain.C:158
 MakeFMDELossTrain.C:159
 MakeFMDELossTrain.C:160
 MakeFMDELossTrain.C:161
 MakeFMDELossTrain.C:162
 MakeFMDELossTrain.C:163
 MakeFMDELossTrain.C:164
 MakeFMDELossTrain.C:165
 MakeFMDELossTrain.C:166
 MakeFMDELossTrain.C:167
 MakeFMDELossTrain.C:168
 MakeFMDELossTrain.C:169
 MakeFMDELossTrain.C:170
 MakeFMDELossTrain.C:171
 MakeFMDELossTrain.C:172
 MakeFMDELossTrain.C:173
 MakeFMDELossTrain.C:174
 MakeFMDELossTrain.C:175
 MakeFMDELossTrain.C:176
 MakeFMDELossTrain.C:177
 MakeFMDELossTrain.C:178
 MakeFMDELossTrain.C:179
 MakeFMDELossTrain.C:180
 MakeFMDELossTrain.C:181
 MakeFMDELossTrain.C:182
 MakeFMDELossTrain.C:183
 MakeFMDELossTrain.C:184
 MakeFMDELossTrain.C:185
 MakeFMDELossTrain.C:186
 MakeFMDELossTrain.C:187
 MakeFMDELossTrain.C:188
 MakeFMDELossTrain.C:189
 MakeFMDELossTrain.C:190
 MakeFMDELossTrain.C:191
 MakeFMDELossTrain.C:192
 MakeFMDELossTrain.C:193
 MakeFMDELossTrain.C:194
 MakeFMDELossTrain.C:195
 MakeFMDELossTrain.C:196
 MakeFMDELossTrain.C:197
 MakeFMDELossTrain.C:198