Added ignores
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / trains / AAFPluginHelper.C
1 /**
2  * @file   AAFPluginHelper.C
3  * @author Christian Holm Christensen <cholm@master.hehi.nbi.dk>
4  * @date   Tue Oct 16 19:01:45 2012
5  * 
6  * @brief  AAF (using AliAnalysisAlien) analysis helper
7  * 
8  * @ingroup pwglf_forward_trains_helper
9  * 
10  */
11 #ifndef AAFPLUGINHELPER_C
12 #define AAFPLUGINHELPER_C
13 #include "PluginHelper.C"
14 #ifndef __CINT__
15 # include <TUrl.h>
16 # include <TString.h>
17 # include <AliAnalysisManager.h>
18 # include <AliAnalysisAlien.h>
19 #else
20 class TUrl;
21 class AliAnalysisAlien;
22 #endif
23
24 // ===================================================================
25 /**
26  * Handle analysis on an Alice Analysis Facility (AAF)
27  * 
28  * This helper is triggered by a URL of the form 
29  *
30  * @code
31  * proof://[<user>@]<host>[:<port>]/<dsname>[?<options>][#<treename>]
32  * @endcode 
33  * where &lt;host@gt; is a known AAF (e.g., <tt>alice-caf.cern.ch</tt>),
34  * and the &lt;options&gt; contains <tt>plugin</tt>
35  * <dl>
36  *   <dt>&lt;user@gt;</dt>
37  *   <dd>Optional user name</dd>
38  *   <dt>&lt;host@gt;</dt>
39  *   <dd>PROOF cluster master host</dd>
40  *   <dt>&lt;port@gt;</dt>
41  *   <dd>Optional PROOF cluster port on master host</dd>
42  *   <dt>&lt;dsname@gt;</dt>
43  *   <dd>Data set name</dd>
44  *   <dt>&lt;treename@gt;</dt>
45  *   <dd>Optional tree name in data set, often <tt>esdTree</tt> or
46  *   <tt>aodTree</tt></dd>
47  *   <dt>&lt;options@gt;</dt>
48  *   <dd>List of options separated by an &amp;
49  *     <dl>
50  *       <dt><tt>dsname</tt>[=&lt;output dataset&gt;]</dt>
51  *       <dd>Register tree output (e.g., AOD) as a new data set on the
52  *         PROOF cluster. If &lt;output dataset&gt; is not specified, take
53  *         the name of the train.</dd>
54  *       <dt><tt>storage=&lt;url&gt;</tt></dt>
55  *       <dd>Specify a non-default storage location for special output
56  *         (e.g., AOD trees).  &lt;url&gt; should be a valid XRootd 
57  *         server URI accessible to the slaves - e.g., 
58  *         <tt>root://lxplus.cern.ch:10930//tmp</tt>.</dd>
59  *       <dt><tt>mode=[default,rec,sim,train,custom]</tt></dt>
60  *       <dd>Set the AliROOT mode.  If not specified <tt>default</tt> 
61  *         is assumed</tt>.  See also CreateAliROOTPar</dd>
62  *       <dt><tt>par</tt></dt>
63  *       <dd> Use PAR files</dd>
64  *       <dt><tt>workers=</tt><i>N</i><tt>[x]</tt></dt>
65  *       <dd>Set the number of workers to use.  If <tt>x</tt> is appended, 
66  *         then it's maximum number of workers per slave</dd>
67  *     </dl>
68  *   </dd>
69  * </dl>  
70  *
71  * @ingroup pwglf_forward_trains_helper
72  */
73 struct AAFPluginHelper : public PluginHelper
74 {
75   /** 
76    * Constructor 
77    * 
78    * @param url  Url 
79    * @param opts Options 
80    */
81   AAFPluginHelper(const TUrl& url, Int_t verbose)
82     : PluginHelper(url, verbose)
83   {
84     fOptions.Add("workers", "N[x]", "Number of workers to use", "0");
85     fOptions.Add("dsname",  "NAME", "Make output dataset", "");
86
87   }
88   /** 
89    * Destructor
90    */
91   virtual ~AAFPluginHelper() {}
92   /** 
93    * Called before setting up 
94    * 
95    * @return true on success 
96    */
97   virtual Bool_t PreSetup()
98   {
99     TString root = fOptions.Get("root");
100     fHandler->SetRootVersionForProof(Form("VO_ALICE@ROOT::%s", root.Data()));
101     fHandler->SetProofCluster(fUrl.GetHost());
102     fHandler->SetProofDataSet(fUrl.GetFile());
103     if (fOptions.Has("workers")) {
104       TString nwork = fOptions.Get("workers");
105       if (nwork.EndsWith("x")) 
106         fHandler->SetNproofWorkersPerSlave(nwork.Atoi());
107       else 
108         fHandler->SetNproofWorkers(nwork.Atoi());
109     }
110     return PluginHelper::PreSetup();
111   }
112   /** 
113    * Set-up done after the task set-ups 
114    *
115    * @return true on success 
116    */
117   virtual Bool_t PostSetup() 
118   {
119     if (!PluginHelper::PostSetup()) return false;
120     if (fOptions.Has("dsname")) 
121       OutputUtilities::RegisterDataset(fOptions.Get("dsname"));
122
123     return true;
124   };
125   /** 
126    * Get the mode identifier 
127    * 
128    * @return Always kProof
129    */
130   virtual UShort_t Mode() const { return kProof; }
131   /**
132    * Get the mode string used for AliAnalysisManager::StartAnalysis
133    */
134   virtual const char* ModeString() const { return "proof"; }
135   /** 
136    * Start the analysis 
137    * 
138    * @param nEvents Number of events to analyse 
139    * 
140    * @return The return value of AliAnalysisManager::StartAnalysis
141    */
142   virtual Long64_t Run(Long64_t nEvents=-1) 
143   {
144     AliAnalysisManager* mgr = AliAnalysisManager::GetAnalysisManager();
145     
146     TString dsName(fUrl.GetFile());
147     if (fUrl.GetAnchor() && fUrl.GetAnchor()[0] != '\0') 
148       dsName.Append(Form("#%s", fUrl.GetAnchor()));
149     return mgr->StartAnalysis(fUrl.GetProtocol(), dsName, nEvents);
150   }
151   /** 
152    * @return URI help string 
153    */
154   virtual const Char_t* UrlHelp() const 
155   {
156     return "proof://<host>/<dataset>?plugin[&<options>][#<treename>]";
157   }
158   /**
159    * @return Short description
160    */
161   virtual const char* Desc() const { return "CAF w/plugin"; }
162 };
163 #endif
164 //
165 // EOF
166 //