ROOT logo
/**
 * @file   AAFHelper.C
 * @author Christian Holm Christensen <cholm@master.hehi.nbi.dk>
 * @date   Tue Oct 16 19:02:14 2012
 * 
 * @brief  AAF analysis helper
 * 
 * @ingroup pwglf_forward_trains_helper
 * 
 */
#ifndef AAFHELPER_C
#define AAFHELPER_C
#include "ProofHelper.C"
#ifndef __CINT__
# include "AvailableSoftware.C"
# include <TUrl.h>
# include <TString.h>
# include <TProof.h>
# include <AliAnalysisManager.h>
#else
class TUrl;
class AliAnalysisAlien;
#endif

// ===================================================================
/**
 * Handle analysis on an Alice Analysis Facility (AAF)
 * 
 * This helper is triggered by a URL of the form 
 *
 * @code
 * proof://[<user>@]<host>[:<port>]/<dsname>[?<options>][#<treename>]
 * @endcode 
 * where &lt;host@&t; is a known AAF (e.g., <tt>alice-caf.cern.ch</tt>)
 * <dl>
 *   <dt>&lt;user&gt;</dt>
 *   <dd>Optional user name</dd>
 *   <dt>&lt;host&gt;</dt>
 *   <dd>PROOF cluster master host</dd>
 *   <dt>&lt;port&gt;</dt>
 *   <dd>Optional PROOF cluster port on master host</dd>
 *   <dt>&lt;dsname&gt;</dt>
 *   <dd>Data set name</dd>
 *   <dt>&lt;treename&gt;</dt>
 *   <dd>Optional tree name in data set, often <tt>esdTree</tt> or
 *   <tt>aodTree</tt></dd>
 *   <dt>&lt;options&gt;</dt>
 *   <dd>List of options separated by an &amp;
 *     <dl>
 *       <dt><tt>dsname</tt>[=&lt;output dataset&gt;]</dt>
 *       <dd>Register tree output (e.g., AOD) as a new data set on the
 *         PROOF cluster. If &lt;output dataset&gt; is not specified, take
 *         the name of the train.</dd>
 *       <dt><tt>storage=&lt;url&gt;</tt></dt>
 *       <dd>Specify a non-default storage location for special output
 *         (e.g., AOD trees).  &lt;url&gt; should be a valid XRootd 
 *         server URI accessible to the slaves - e.g., 
 *         <tt>root://lxplus.cern.ch:10930//tmp</tt>.</dd>
 *       <dt><tt>mode=[default,rec,sim,train,custom]</tt></dt>
 *       <dd>Set the AliROOT mode.  If not specified <tt>default</tt> 
 *         is assumed.  See also CreateAliROOTPar</dd>
 *       <dt><tt>par</tt></dt>
 *       <dd> Use par files </dd>
 *     </dl>
 *   </dd>
 * </dl>  
 *
 * Note, this helper does not use the AliAnalysisAlien plugin
 *
 * @ingroup pwglf_forward_trains_helper
 */
struct AAFHelper : public ProofHelper
{
  /** 
   * Constructor 
   * 
   * @param url  Url 
   * @param verbose Verbosity 
   */
  AAFHelper(const TUrl& url, Int_t verbose)
    : ProofHelper(url, verbose)
  {
    fOptions.Add("aliroot", "VERSION", "AliROOT version", "last");
    fOptions.Add("root",    "VERISON", "ROOT version", "last");
    fOptions.Add("nocache", "Disable tree cache");
  }
  virtual ~AAFHelper() {}
  /** 
   * Get the name of the AliROOT par file to use 
   * 
   * @return String 
   */
  virtual const char* AliROOTParName() const
  {
    return Form("VO_ALICE@AliRoot::%s", fOptions.Get("aliroot").Data());
  }
  virtual Bool_t CreateAliROOTPar()
  {
    return true;
  }
  /** 
   * Set-up done before task set-ups. Overload ProofHelper::PreSetup
   * to specify the ROOT version using TProofMgr::SetROOTVersion
   * 
   * @return true on success 
   */
  virtual Bool_t PreSetup() 
  {
    TString aliroot("last");
    TString root("last");
    if (fOptions.Has("aliroot")) aliroot = fOptions.Get("aliroot");
    if (fOptions.Has("root"))    root    = fOptions.Get("root");

    AvailableSoftware::Check(aliroot, root);
    fOptions.Set("aliroot", aliroot);
    fOptions.Set("root", root);

    fBasePars = false;

    // Set this before we try to access the cluster
    gEnv->SetValue("XSec.GSI.DelegProxy", "2");

    TProof::Mgr(fUrl.GetHost())
      ->SetROOTVersion(Form("VO_ALICE@ROOT::%s", root.Data()));

    if (!ProofHelper::PreSetup()) return false;

    if (fOptions.Has("nocache")) 
      gProof->SetParameter("PROOF_UseTreeCache", 0);
    return true;
  }
  /** 
   * @return URI help string 
   */
  virtual const Char_t* UrlHelp() const 
  {
    return "proof://<host>/<dataset>?[&<options>][#<treename>]";
  }
  /** 
   * @return short description
   */
  virtual const char* Desc() const { return "AAF"; }
};
#endif
//
// EOF
//
 AAFHelper.C:1
 AAFHelper.C:2
 AAFHelper.C:3
 AAFHelper.C:4
 AAFHelper.C:5
 AAFHelper.C:6
 AAFHelper.C:7
 AAFHelper.C:8
 AAFHelper.C:9
 AAFHelper.C:10
 AAFHelper.C:11
 AAFHelper.C:12
 AAFHelper.C:13
 AAFHelper.C:14
 AAFHelper.C:15
 AAFHelper.C:16
 AAFHelper.C:17
 AAFHelper.C:18
 AAFHelper.C:19
 AAFHelper.C:20
 AAFHelper.C:21
 AAFHelper.C:22
 AAFHelper.C:23
 AAFHelper.C:24
 AAFHelper.C:25
 AAFHelper.C:26
 AAFHelper.C:27
 AAFHelper.C:28
 AAFHelper.C:29
 AAFHelper.C:30
 AAFHelper.C:31
 AAFHelper.C:32
 AAFHelper.C:33
 AAFHelper.C:34
 AAFHelper.C:35
 AAFHelper.C:36
 AAFHelper.C:37
 AAFHelper.C:38
 AAFHelper.C:39
 AAFHelper.C:40
 AAFHelper.C:41
 AAFHelper.C:42
 AAFHelper.C:43
 AAFHelper.C:44
 AAFHelper.C:45
 AAFHelper.C:46
 AAFHelper.C:47
 AAFHelper.C:48
 AAFHelper.C:49
 AAFHelper.C:50
 AAFHelper.C:51
 AAFHelper.C:52
 AAFHelper.C:53
 AAFHelper.C:54
 AAFHelper.C:55
 AAFHelper.C:56
 AAFHelper.C:57
 AAFHelper.C:58
 AAFHelper.C:59
 AAFHelper.C:60
 AAFHelper.C:61
 AAFHelper.C:62
 AAFHelper.C:63
 AAFHelper.C:64
 AAFHelper.C:65
 AAFHelper.C:66
 AAFHelper.C:67
 AAFHelper.C:68
 AAFHelper.C:69
 AAFHelper.C:70
 AAFHelper.C:71
 AAFHelper.C:72
 AAFHelper.C:73
 AAFHelper.C:74
 AAFHelper.C:75
 AAFHelper.C:76
 AAFHelper.C:77
 AAFHelper.C:78
 AAFHelper.C:79
 AAFHelper.C:80
 AAFHelper.C:81
 AAFHelper.C:82
 AAFHelper.C:83
 AAFHelper.C:84
 AAFHelper.C:85
 AAFHelper.C:86
 AAFHelper.C:87
 AAFHelper.C:88
 AAFHelper.C:89
 AAFHelper.C:90
 AAFHelper.C:91
 AAFHelper.C:92
 AAFHelper.C:93
 AAFHelper.C:94
 AAFHelper.C:95
 AAFHelper.C:96
 AAFHelper.C:97
 AAFHelper.C:98
 AAFHelper.C:99
 AAFHelper.C:100
 AAFHelper.C:101
 AAFHelper.C:102
 AAFHelper.C:103
 AAFHelper.C:104
 AAFHelper.C:105
 AAFHelper.C:106
 AAFHelper.C:107
 AAFHelper.C:108
 AAFHelper.C:109
 AAFHelper.C:110
 AAFHelper.C:111
 AAFHelper.C:112
 AAFHelper.C:113
 AAFHelper.C:114
 AAFHelper.C:115
 AAFHelper.C:116
 AAFHelper.C:117
 AAFHelper.C:118
 AAFHelper.C:119
 AAFHelper.C:120
 AAFHelper.C:121
 AAFHelper.C:122
 AAFHelper.C:123
 AAFHelper.C:124
 AAFHelper.C:125
 AAFHelper.C:126
 AAFHelper.C:127
 AAFHelper.C:128
 AAFHelper.C:129
 AAFHelper.C:130
 AAFHelper.C:131
 AAFHelper.C:132
 AAFHelper.C:133
 AAFHelper.C:134
 AAFHelper.C:135
 AAFHelper.C:136
 AAFHelper.C:137
 AAFHelper.C:138
 AAFHelper.C:139
 AAFHelper.C:140
 AAFHelper.C:141
 AAFHelper.C:142
 AAFHelper.C:143
 AAFHelper.C:144
 AAFHelper.C:145
 AAFHelper.C:146
 AAFHelper.C:147
 AAFHelper.C:148