Mostly documentation changes.
authorcholm <cholm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 23 Mar 2011 13:34:27 +0000 (13:34 +0000)
committercholm <cholm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 23 Mar 2011 13:34:27 +0000 (13:34 +0000)
Also added ability to choose dN/deta normalisation scheme

58 files changed:
PWG2/FORWARD/analysis2/AddTaskCentral.C
PWG2/FORWARD/analysis2/AddTaskCentralMult.C
PWG2/FORWARD/analysis2/AddTaskCentraldNdeta.C
PWG2/FORWARD/analysis2/AddTaskCopyHeader.C
PWG2/FORWARD/analysis2/AddTaskFMDELoss.C
PWG2/FORWARD/analysis2/AddTaskForwardFlow.C
PWG2/FORWARD/analysis2/AddTaskForwardMult.C [moved from PWG2/FORWARD/analysis2/AddTaskFMD.C with 75% similarity]
PWG2/FORWARD/analysis2/AddTaskForwarddNdeta.C
PWG2/FORWARD/analysis2/AliAODCentralMult.h
PWG2/FORWARD/analysis2/AliAODForwardMult.cxx
PWG2/FORWARD/analysis2/AliAODForwardMult.h
PWG2/FORWARD/analysis2/AliBasedNdetaTask.cxx
PWG2/FORWARD/analysis2/AliBasedNdetaTask.h
PWG2/FORWARD/analysis2/AliCentralCorrAcceptance.h
PWG2/FORWARD/analysis2/AliCentralCorrSecondaryMap.h
PWG2/FORWARD/analysis2/AliCentralMultiplicityTask.h
PWG2/FORWARD/analysis2/AliCentraldNdetaTask.cxx
PWG2/FORWARD/analysis2/AliCentraldNdetaTask.h
PWG2/FORWARD/analysis2/AliFMDCorrAcceptance.h
PWG2/FORWARD/analysis2/AliFMDCorrDoubleHit.h
PWG2/FORWARD/analysis2/AliFMDCorrELossFit.h
PWG2/FORWARD/analysis2/AliFMDCorrMergingEfficiency.h
PWG2/FORWARD/analysis2/AliFMDCorrSecondaryMap.h
PWG2/FORWARD/analysis2/AliFMDCorrVertexBias.h
PWG2/FORWARD/analysis2/AliFMDCorrector.h
PWG2/FORWARD/analysis2/AliFMDDensityCalculator.h
PWG2/FORWARD/analysis2/AliFMDEnergyFitter.h
PWG2/FORWARD/analysis2/AliFMDEnergyFitterTask.h
PWG2/FORWARD/analysis2/AliFMDEventInspector.h
PWG2/FORWARD/analysis2/AliFMDHistCollector.h
PWG2/FORWARD/analysis2/AliFMDMCCorrector.h
PWG2/FORWARD/analysis2/AliFMDMCDensityCalculator.h
PWG2/FORWARD/analysis2/AliFMDMCEventInspector.h
PWG2/FORWARD/analysis2/AliFMDMCSharingFilter.h
PWG2/FORWARD/analysis2/AliFMDSharingFilter.h
PWG2/FORWARD/analysis2/AliFMDStripIndex.h
PWG2/FORWARD/analysis2/AliForwardCorrectionManager.cxx
PWG2/FORWARD/analysis2/AliForwardCorrectionManager.h
PWG2/FORWARD/analysis2/AliForwardFlowTaskQC.h
PWG2/FORWARD/analysis2/AliForwardFlowUtil.cxx
PWG2/FORWARD/analysis2/AliForwardFlowUtil.h
PWG2/FORWARD/analysis2/AliForwardMCCorrectionsTask.h
PWG2/FORWARD/analysis2/AliForwardMCMultiplicityTask.h
PWG2/FORWARD/analysis2/AliForwardMultiplicityBase.h
PWG2/FORWARD/analysis2/AliForwardMultiplicityTask.h
PWG2/FORWARD/analysis2/AliForwardUtil.h
PWG2/FORWARD/analysis2/AliForwarddNdetaTask.cxx
PWG2/FORWARD/analysis2/AliForwarddNdetaTask.h
PWG2/FORWARD/analysis2/DrawdNdeta.C
PWG2/FORWARD/analysis2/ForwardAODConfig.C
PWG2/FORWARD/analysis2/MakeAOD.C
PWG2/FORWARD/analysis2/MakeELossFits.C
PWG2/FORWARD/analysis2/MakeFlow.C
PWG2/FORWARD/analysis2/MakedNdeta.C
PWG2/FORWARD/analysis2/OtherData.C
PWG2/FORWARD/analysis2/Run.sh
PWG2/FORWARD/analysis2/TrainSetup.C
PWG2/FORWARD/analysis2/scripts/RunViaPlugin.C

index 8d7f33437d594b25c6a92691b00304788d088aed..8ff7aa318581b423c2e1fae196c73c880c51ef83 100644 (file)
@@ -1,17 +1,18 @@
-/** 
- * @defgroup pwg2_forward_scripts Scripts used in the analysis
- *
- * @ingroup pwg2_forward
- */
 /**
- * @file 
- * @ingroup pwg2_forward_scripts
+ * @file   AddTaskCentral.C
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 12:13:25 2011
+ * 
+ * @brief  
  * 
+ * 
+ * @ingroup pwg2_forward_scripts_tasks
  */
+
 /**
- * This is the macro to include the Forward multiplicity in a train.  
+ * This is the macro to include the Central multiplicity in a train.  
  * 
- * @ingroup pwg2_forward_scripts
+ * @ingroup pwg2_forward_aod
  */
 AliAnalysisTask* AddTaskCentral(UShort_t sys=0, UShort_t sNN=0, 
                                Short_t field=0)
index b8d03a02efea11d6844a71527a71beedbd6242c9..4c797dc9afb7c1816d4f1bc3f498a92cb7a2948b 100644 (file)
@@ -1,11 +1,12 @@
 /**
- * @file   AddCentralMultTask.C
+ * @file   AddTaskCentralMult.C
  * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
  * @date   Fri Jan 28 10:22:26 2011
  * 
  * @brief Class and script to add a multiplicity task for the central
  *        @f$\eta@f$ region
  * 
+ * @ingroup pwg2_forward_scripts_tasks
  * 
  */
 #include <AliAnalysisTaskSE.h>
@@ -73,6 +74,8 @@ class TH1D;
  *
  * Only minimum bias events with a @f$v_z@f$ within the defined cut
  * are analysed.
+ *
+ * @ingroup pwg2_forward_aod
  */
 class CentralMultTask : public AliAnalysisTaskSE
 {
@@ -120,7 +123,7 @@ public:
    */
   virtual void UserExec(Option_t* option);
   /** 
-   * Called at end of event processing.
+   * Called at end of event processing.
    *
    * This is called once in the master 
    * 
@@ -132,6 +135,7 @@ protected:
    * Check if this event is within cuts
    * 
    * @param esd Event
+   * @param vz  Vertex @f$ z@f$ coordinate 
    * 
    * @return true if this event is to be considered
    */
index 712e3d7068e14cc86596f498d96826209c3fa951..368824ecb2f7a1d9889a2e09ea14c4026da98aa0 100644 (file)
@@ -7,31 +7,72 @@
  *        @f$\eta@f$ region
  * 
  * 
+ * @ingroup pwg2_forward_scripts_tasks
+ */
+/** 
+ * Create the central @f$ dN/d\eta@f$ analysis task 
+ * 
+ * @param trig      Trigger to use 
+ * @param vzMin     Smallest @f$ v_z@f$
+ * @param vzMax     Biggest @f$ v_z@f$
+ * @param useCent   Whether to use the centrality or not
+ * @param scheme    Normalisation scheme
+ * @param cutEdges  Whether to cut edges when rebinning 
+ * 
+ * @return Newly created and configured task
+ *
+ * @ingroup pwg2_forward_dndeta
  */
 AliAnalysisTask*
 AddTaskCentraldNdeta(const char* trig     = "INEL", 
                     Double_t    vzMin    = -10, 
                     Double_t    vzMax    = +10, 
                     Bool_t      useCent  = false,
+                    const char* scheme   = 0,
                     Bool_t      cutEdges = false)
 {
-  // analysis manager
+  // --- Analysis manager --------------------------------------------
   AliAnalysisManager* mgr = AliAnalysisManager::GetAnalysisManager();
   
-  // Make our object.  2nd argumenent is absolute max Eta 
-  // 3rd argument is absolute max Vz
+  // --- Make our object ---------------------------------------------
   AliCentraldNdetaTask* task = new AliCentraldNdetaTask("Central");
+  // Set the vertex range to use 
   task->SetVertexRange(vzMin, vzMax);
+  // Set the trigger mask to use (INEL,INEL>0,NSD)
   task->SetTriggerMask(trig);
+  // Whether to cut edges when re-binning 
   task->SetCutEdges(cutEdges);
-  task->SetUseShapeCorrection(false);
+  // Bit mask of 
+  // 
+  //    kNone           Normalise to accepted events 
+  //    kEventLevel     Normalise to all events in selected range 
+  //    kAltEventLevel  Normalise to all events in selected range 
+  //    kBackground     Also correct for background triggers 
+  //    kShape          Correct shape 
+  // 
+  // kNone, kEventLevel, and kAltEventLevel are mutually exclusive.
+  // If neither kEventLevel, nor kAltEventLevel is specified, then
+  // kNone is assumed.  kBackground (when implemented) only makes
+  // sense with kEventLevel and kAltEventLevel.  Furthermore, there
+  // are some constants that encode the common cases
+  //     
+  //    kFull    = kEventLevel |  kBackground | kShape 
+  //    kAltFull = kAltEventLevel |  kBackground | kShape 
+  // 
+  // Default is kFull
+  task->SetNormalizationScheme(AliBasedNdetaTask::kFull);
+  if (scheme) task->SetNormalizationScheme(scheme);
+  // Set the centrality bins to use.  These are mutually exclusive.
+  // Note, that a bin specified as a-b, covers the interval from a,
+  // inclusive to b exclusive.  An upper bound of 100 is treated
+  // especially, and the upper bound is inclusive in that case .
   if (useCent) {
     Short_t bins[] = { 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
     task->SetCentralityAxis(11, bins);
   }
   mgr->AddTask(task);
 
-  // create containers for input/output
+  // --- create containers for input/output --------------------------
   AliAnalysisDataContainer *sums = 
     mgr->CreateContainer("CentralSums", TList::Class(), 
                         AliAnalysisManager::kOutputContainer, 
@@ -41,11 +82,11 @@ AddTaskCentraldNdeta(const char* trig     = "INEL",
                         AliAnalysisManager::kParamContainer, 
                         AliAnalysisManager::GetCommonFileName());
   
-  // connect input/output
+  // --- connect input/output ----------------------------------------
   mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
   mgr->ConnectOutput(task, 1, sums);
   mgr->ConnectOutput(task, 2, output);
-
+  
   return task;
 }
 
index 6738c50c679825caaab6902c4a5d5988efa5d8cc..9be71974329f094585aa7985943ce4c10bae3f32 100644 (file)
@@ -1,3 +1,13 @@
+/**
+ * @file   AddTaskCopyHeader.C
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 12:13:43 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_scripts_tasks
+ */
 #include "AliAnalysisTaskSE.h"
 #include "AliInputEventHandler.h"
 #include "AliESDEvent.h"
@@ -6,6 +16,12 @@
 #include "AliAnalysisManager.h"
 #include <TROOT.h>
 
+/**
+ * Task to copy header from ESD to AOD 
+ * 
+ * @ingroup pwg2_forward_scripts_tasks
+ * @ingroup pwg2_forward_aod
+ */
 class CopyHeaderTask : public AliAnalysisTaskSE
 {
 public:
@@ -88,12 +104,17 @@ void
 CopyHeaderTask::Terminate(Option_t*)
 {}
 
+/** 
+ * 
+ * 
+ * @ingroup pwg2_forward_aod
+ */
 void
 AddTaskCopyHeader()
 {
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr) {
-    Error("AddTaskFMD", "No analysis manager to connect to.");
+    Error("AddTaskCopyHeader", "No analysis manager to connect to.");
     return;
   }   
   
index e1dc641f975fc2aa16fdc8dc6c5e78cd827926a0..77088f6655b31b4dabc81901e3b1372ac17e9ce9 100644 (file)
@@ -1,17 +1,22 @@
-/** 
- * @defgroup pwg2_forward_scripts Scripts used in the analysis
- *
- * @ingroup pwg2_forward
- */
 /**
- * @file 
- * @ingroup pwg2_forward_scripts
+ * @file   AddTaskFMDELoss.C
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 12:14:03 2011
+ * 
+ * @brief  
+ * 
  * 
+ * @ingroup pwg2_forward_scripts_tasks
  */
+/**
+ * @defgroup pwg2_forward_eloss Energy Loss Fits
+ * @ingroup pwg2_forward_topical
+ */
+
 /**
  * This is the macro to include the FMD energy fitter in a train.  
  * 
- * @ingroup pwg2_forward_scripts
+ * @ingroup pwg2_forward_eloss
  */
 AliAnalysisTask*
 AddTaskFMDELoss(Bool_t mc, Float_t blow=0, Float_t bhigh=100)
@@ -20,7 +25,7 @@ AddTaskFMDELoss(Bool_t mc, Float_t blow=0, Float_t bhigh=100)
 
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr) {
-    Error("AddTaskFMD", "No analysis manager to connect to.");
+    Error("AddTaskFMDELoss", "No analysis manager to connect to.");
     return NULL;
   }   
   
index fd3df1c2c143bc2959a5de53a5c2f63b83098cd0..2350136ecb1c5f4b5032c72304fd1247ef49f6af 100644 (file)
@@ -1,3 +1,29 @@
+/**
+ * @file   AddTaskForwardFlow.C
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 12:14:17 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_scripts_tasks
+ */
+/** 
+ * @defgroup pwg2_forward_flow Flow 
+ * @ingroup pwg2_forward_topical
+ */
+/** 
+ * Add Flow task to train 
+ * 
+ * @param type 
+ * @param etabins 
+ * @param zVertex 
+ * @param addFlow 
+ * @param addFType 
+ * @param addFOrder 
+ *
+ * @ingroup pwg2_forward_flow
+ */
 void AddTaskForwardFlow(TString type = "", 
                         Int_t etabins = 40,
                         Int_t zVertex = 2,
similarity index 75%
rename from PWG2/FORWARD/analysis2/AddTaskFMD.C
rename to PWG2/FORWARD/analysis2/AddTaskForwardMult.C
index 6ce04bb09f8ea37a84deeef6e41b3f4184400426..d6b69591d6620ea809f1f5937dafbc3cb75dd8f9 100644 (file)
@@ -3,24 +3,33 @@
  *
  * @ingroup pwg2_forward
  */
-/**
- * @file 
+/** 
+ * @defgroup pwg2_forward_scripts_tasks Scripts to add tasks to manager 
  * @ingroup pwg2_forward_scripts
+ */
+/**
+ * @file   AddTaskForwardMult.C
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 12:13:54 2011
  * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_scripts_tasks
  */
 /**
  * This is the macro to include the Forward multiplicity in a train.  
  * 
- * @ingroup pwg2_forward_scripts
+ * @ingroup pwg2_forward_aod
  */
 AliAnalysisTask*
-AddTaskFMD(Bool_t mc, UShort_t sys=0, UShort_t sNN=0, Short_t field=0)
+AddTaskForwardMult(Bool_t mc, UShort_t sys=0, UShort_t sNN=0, Short_t field=0)
 {
   gSystem->Load("libPWG2forward2");
 
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr) {
-    Error("AddTaskFMD", "No analysis manager to connect to.");
+    Error("AddTaskForwardMult", "No analysis manager to connect to.");
     return NULL;
   }   
 
@@ -38,10 +47,10 @@ AddTaskFMD(Bool_t mc, UShort_t sys=0, UShort_t sNN=0, Short_t field=0)
   const char* config = gSystem->Which(gROOT->GetMacroPath(),
                                      "ForwardAODConfig.C");
   if (!config) 
-    Warning("AddTaskFMD", "ForwardAODConfig.C not found in %s",
+    Warning("AddTaskForwardMult", "ForwardAODConfig.C not found in %s",
            gROOT->GetMacroPath());
   else {
-    Info("AddTaskFMD", 
+    Info("AddTaskForwardMult", 
         "Loading configuration of '%s' from %s",
         task->ClassName(), config);
     gROOT->Macro(Form("%s((AliForwardMultiplicityBase*)%p)", config, task));
index f4f290fa09b2d8279c31210dbd2ba6473234dc35..1b4bb11d2a0864d5bfd0581d4f463cd7bd572b50 100644 (file)
@@ -7,31 +7,72 @@
  *        @f$\eta@f$ region
  * 
  * 
+ * @ingroup pwg2_forward_scripts_tasks
+ */
+/** 
+ * Create the Forward @f$ dN/d\eta@f$ analysis task 
+ * 
+ * @param trig      Trigger to use 
+ * @param vzMin     Smallest @f$ v_z@f$
+ * @param vzMax     Biggest @f$ v_z@f$
+ * @param useCent   Whether to use the centrality or not
+ * @param scheme    Normalisation scheme
+ * @param cutEdges  Whether to cut edges when rebinning 
+ * 
+ * @return Newly created and configured task
+ *
+ * @ingroup pwg2_forward_dndeta
  */
 AliAnalysisTask*
 AddTaskForwarddNdeta(const char* trig     = "INEL", 
                     Double_t    vzMin    = -10, 
                     Double_t    vzMax    = +10, 
                     Bool_t      useCent  = false,
+                    const char* scheme   = 0,
                     Bool_t      cutEdges = false)
 {
-  // analysis manager
+  // --- Analysis manager --------------------------------------------
   AliAnalysisManager* mgr = AliAnalysisManager::GetAnalysisManager();
   
-  // Make our object.  2nd argumenent is absolute max Eta 
-  // 3rd argument is absolute max Vz
+  // --- Make our object ---------------------------------------------
   AliForwarddNdetaTask* task = new AliForwarddNdetaTask("Forward");
+  // Set the vertex range to use 
   task->SetVertexRange(vzMin, vzMax);
+  // Set the trigger mask to use (INEL,INEL>0,NSD)
   task->SetTriggerMask(trig);
+  // Whether to cut edges when re-binning 
   task->SetCutEdges(cutEdges);
-  task->SetUseShapeCorrection(false);
+  // Bit mask of 
+  // 
+  //    kNone           Normalise to accepted events 
+  //    kEventLevel     Normalise to all events in selected range 
+  //    kAltEventLevel  Normalise to all events in selected range 
+  //    kBackground     Also correct for background triggers 
+  //    kShape          Correct shape 
+  // 
+  // kNone, kEventLevel, and kAltEventLevel are mutually exclusive.
+  // If neither kEventLevel, nor kAltEventLevel is specified, then
+  // kNone is assumed.  kBackground (when implemented) only makes
+  // sense with kEventLevel and kAltEventLevel.  Furthermore, there
+  // are some constants that encode the common cases
+  //     
+  //    kFull    = kEventLevel |  kBackground | kShape 
+  //    kAltFull = kAltEventLevel |  kBackground | kShape 
+  // 
+  // Default is kFull
+  task->SetNormalizationScheme(AliBasedNdetaTask::kFull);
+  if (scheme) task->SetNormalizationScheme(scheme);
+  // Set the centrality bins to use.  These are mutually exclusive.
+  // Note, that a bin specified as a-b, covers the interval from a,
+  // inclusive to b exclusive.  An upper bound of 100 is treated
+  // especially, and the upper bound is inclusive in that case .
   if (useCent) {
     Short_t bins[] = { 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
     task->SetCentralityAxis(11, bins);
   }
   mgr->AddTask(task);
 
-  // create containers for input/output
+  // --- create containers for input/output --------------------------
   AliAnalysisDataContainer *sums = 
     mgr->CreateContainer("ForwardSums", TList::Class(), 
                         AliAnalysisManager::kOutputContainer, 
@@ -41,7 +82,7 @@ AddTaskForwarddNdeta(const char* trig     = "INEL",
                         AliAnalysisManager::kParamContainer, 
                         AliAnalysisManager::GetCommonFileName());
   
-  // connect input/output
+  // --- connect input/output ----------------------------------------
   mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
   mgr->ConnectOutput(task, 1, sums);
   mgr->ConnectOutput(task, 2, output);
index 9845be173d743b5db7b4ca65cee9d180385af8ec..e1448c0bd79000ed86b658909c54ab6ecf7d6162 100644 (file)
@@ -3,6 +3,16 @@
 //
 #ifndef ALIAODCENTRALMULT_H
 #define ALIAODCENTRALMULT_H
+/**
+ * @file   AliAODCentralMult.h
+ * @author Hans Hjersing Dalsgaard
+ * @date   Wed Mar 23 13:57:24 2011
+ * 
+ * @brief  
+ * 
+ * @ingroup pwg2_forward_aod
+ * 
+ */
 #include <TObject.h>
 #include <TH2D.h>
 class TBrowser;
@@ -21,8 +31,10 @@ class TBrowser;
  * the vertex efficiency.  This simply boils down to defining a 2D
  * histogram and summing the event histograms in that histogram.  One
  * should of course also do proper book-keeping of the accepted event.
+ *
+ * @ingroup pwg2_forward
+ * @ingroup pwg2_forward_aod
  */
-
 class AliAODCentralMult : public TObject
 {
 public:
@@ -63,10 +75,11 @@ public:
   TH2D& GetHistogram() { return fHist; } // Get histogram 
   /**
    * Clear Object between events
-   * @param t option
+   *
+   * @param opt option (not used)
    *
    */
-  void Clear(Option_t*);
+  void Clear(Option_t* opt);
   /** 
    * browse this object 
    * 
index 96131304130d876d9c89dc7f075005ae06b6aa8e..414dbf2d5417189f3c2c6a5a72aadf5ed0033eba 100644 (file)
@@ -21,7 +21,7 @@
 #include <TObjString.h>
 
 ClassImp(AliAODForwardMult)
-#if 0 
+#ifdef DOXY_INPUT
 ; // For Emacs 
 #endif
 
@@ -195,6 +195,19 @@ AliAODForwardMult::GetTriggerString(UInt_t mask)
 TH1I*
 AliAODForwardMult::MakeTriggerHistogram(const char* name) 
 {
+  // 
+  // Make a histogram to record triggers in. 
+  //
+  // The bins defined by the trigger enumeration in this class.  One
+  // can use this enumeration to retrieve the number of triggers for
+  // each class.
+  // 
+  // Parameters:
+  //    name Name of the histogram 
+  // 
+  // Return:
+  //    Newly allocated histogram 
+  //
   TH1I* ret = new TH1I(name, "Triggers", kAccepted+1, -.5, kAccepted+.5);
   ret->SetYTitle("Events");
   ret->SetFillColor(kRed+1);
@@ -225,7 +238,30 @@ AliAODForwardMult::CheckEvent(Int_t    triggerMask,
                              UShort_t cMin,  UShort_t cMax, 
                              TH1*     hist) const
 {
-
+  // 
+  // Check if event meets the passses requirements.   
+  //
+  // It returns true if @e all of the following is true 
+  //
+  // - The trigger is within the bit mask passed.
+  // - The vertex is within the specified limits. 
+  // - The centrality is within the specified limits, or if lower
+  //   limit is equal to or larger than the upper limit.
+  // 
+  // If a histogram is passed in the last parameter, then that
+  // histogram is filled with the trigger bits. 
+  // 
+  // Parameters:
+  //    triggerMask  Trigger mask
+  //    vzMin        Minimum @f$ v_z@f$ (in centimeters)
+  //    vzMax        Maximum @f$ v_z@f$ (in centimeters) 
+  //    cMin         Minimum centrality (in percent)
+  //    cMax         Maximum centrality (in percent)
+  //    hist         Histogram to fill 
+  // 
+  // Return:
+  //    @c true if the event meets the requirements 
+  //
   if (cMin < cMax && (cMin > fCentrality || cMax <= fCentrality)) return false;
 
   if (hist) { 
index 4d11b199a0d11d68fa12c0848223a1c5d54751d1..e7e8fedaa5ae5657dffb6a88c0fb84d76df6ed3c 100644 (file)
@@ -3,6 +3,16 @@
 //
 #ifndef ALIAODFORWARDMULT_H
 #define ALIAODFORWARDMULT_H
+/**
+ * @file   AliAODForwardMult.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 13:58:00 2011
+ * 
+ * @brief  
+ * 
+ * @ingroup pwg2_forward_aod
+ * 
+ */
 #include <TObject.h>
 #include <TH2D.h>
 class TBrowser;
@@ -87,6 +97,7 @@ class TH1I;
  * like flow, event-plane, centrality, and so on. 
  *
  * @ingroup pwg2_forward 
+ * @ingroup pwg2_forward_aod
  */
 class AliAODForwardMult : public TObject
 {
@@ -311,7 +322,17 @@ public:
    */
   const Char_t* GetName() const { return (fIsMC ? "ForwardMC" : "Forward"); }
   /** 
-   * Check if event meets the passses requirements 
+   * Check if event meets the passses requirements.   
+   *
+   * It returns true if @e all of the following is true 
+   *
+   * - The trigger is within the bit mask passed.
+   * - The vertex is within the specified limits. 
+   * - The centrality is within the specified limits, or if lower
+   *   limit is equal to or larger than the upper limit.
+   * 
+   * If a histogram is passed in the last parameter, then that
+   * histogram is filled with the trigger bits. 
    * 
    * @param triggerMask  Trigger mask
    * @param vzMin        Minimum @f$ v_z@f$ (in centimeters)
@@ -335,13 +356,17 @@ public:
    */
   static const Char_t* GetTriggerString(UInt_t mask);
   /** 
-   * Make a histogram to record triggers in 
+   * Make a histogram to record triggers in. 
+   *
+   * The bins defined by the trigger enumeration in this class.  One
+   * can use this enumeration to retrieve the number of triggers for
+   * each class.
    * 
    * @param name Name of the histogram 
    * 
    * @return Newly allocated histogram 
    */
-  static TH1I* MakeTriggerHistogram(const char* name);
+  static TH1I* MakeTriggerHistogram(const char* name="triggers");
 protected: 
   Bool_t  fIsMC;     // Whether this is from MC 
   TH2D    fHist;     // Histogram of d^2N_{ch}/(deta dphi) for this event
index d5e0c8558ffa8847eccf86f3abe70229e94f2a49..411219de90fa3bca68e16cb1def9c2bdf6066183 100644 (file)
@@ -29,11 +29,11 @@ AliBasedNdetaTask::AliBasedNdetaTask()
     fTriggerEff(1),
     fShapeCorr(0),
     fListOfCentralities(0),
-    fUseShapeCorr(true),
     fSNNString(0),
     fSysString(0),
     fCent(0),
-    fCentAxis(0)
+    fCentAxis(0),
+    fNormalizationScheme(kFull)
 {
   // 
   // Constructor
@@ -55,11 +55,11 @@ AliBasedNdetaTask::AliBasedNdetaTask(const char* name)
     fTriggerEff(1),
     fShapeCorr(0),
     fListOfCentralities(0),
-    fUseShapeCorr(true),
     fSNNString(0),
     fSysString(0),
     fCent(0),
-    fCentAxis(0)
+    fCentAxis(0),
+    fNormalizationScheme(kFull)
 {
   // 
   // Constructor
@@ -86,11 +86,11 @@ AliBasedNdetaTask::AliBasedNdetaTask(const AliBasedNdetaTask& o)
     fTriggerEff(o.fTriggerEff),
     fShapeCorr(o.fShapeCorr),
     fListOfCentralities(o.fListOfCentralities),
-    fUseShapeCorr(o.fUseShapeCorr),
     fSNNString(o.fSNNString),
     fSysString(o.fSysString),
     fCent(o.fCent),
-    fCentAxis(o.fCentAxis)
+    fCentAxis(o.fCentAxis),
+    fNormalizationScheme(o.fNormalizationScheme)
 {}
 
 //____________________________________________________________________
@@ -160,6 +160,34 @@ AliBasedNdetaTask::MakeCentralityBin(const char* name,
   //
   return new CentralityBin(name, low, high);
 }
+//________________________________________________________________________
+void 
+AliBasedNdetaTask::SetNormalizationScheme(const char* what)
+{
+  // 
+  // Set normalisation scheme 
+  // 
+  UShort_t    scheme = 0;
+  TString     twhat(what);
+  twhat.ToUpper();
+  TObjString* opt;
+  TIter       next(twhat.Tokenize(" ,|"));
+  while ((opt = static_cast<TObjString*>(next()))) { 
+    TString s(opt->GetString());
+    if      (s.IsNull()) continue;
+    if      (s.CompareTo("EVENT")     == 0) scheme |= kEventLevel;
+    else if (s.CompareTo("ALTEVENT")  == 0) scheme |= kAltEventLevel;
+    else if (s.CompareTo("SHAPE")     == 0) scheme |= kShape;
+    else if (s.CompareTo("BACKGROUND")== 0) scheme |= kBackground;
+    else if (s.CompareTo("FULL")      == 0) scheme |= kFull;
+    else if (s.CompareTo("ALTFULL")   == 0) scheme |= kAltFull;
+    else if (s.CompareTo("NONE")      == 0) scheme |= kNone;
+    else 
+      Warning("SetNormalizationScheme", "Unknown option %s", s.Data());
+  }
+  SetNormalizationScheme(scheme);
+}
+
 //________________________________________________________________________
 void 
 AliBasedNdetaTask::SetTriggerMask(const char* mask)
@@ -282,7 +310,8 @@ AliBasedNdetaTask::UserExec(Option_t *)
   TH2D* dataMC = GetHistogram(aod, true);
 
   // Loop over centrality bins 
-  CentralityBin* allBin = static_cast<CentralityBin*>(fListOfCentralities->At(0));
+  CentralityBin* allBin = 
+    static_cast<CentralityBin*>(fListOfCentralities->At(0));
   allBin->ProcessEvent(forward, fTriggerMask, fVtxMin, fVtxMax, data, dataMC);
   
   // Find this centrality bin 
@@ -292,7 +321,8 @@ AliBasedNdetaTask::UserExec(Option_t *)
     if (icent >= 1 && icent <= fCentAxis->GetNbins()) 
       thisBin = static_cast<CentralityBin*>(fListOfCentralities->At(icent));
     if (thisBin)
-      thisBin->ProcessEvent(forward, fTriggerMask, fVtxMin, fVtxMax, data, dataMC);
+      thisBin->ProcessEvent(forward, fTriggerMask, fVtxMin, fVtxMax, 
+                           data, dataMC);
   }
 
   // Here, we get the update 
@@ -470,9 +500,9 @@ AliBasedNdetaTask::Terminate(Option_t *)
   TIter next(fListOfCentralities);
   CentralityBin* bin = 0;
   while ((bin = static_cast<CentralityBin*>(next()))) 
-    bin->End(fSums, fOutput, fUseShapeCorr ? fShapeCorr : 0, fTriggerEff,
+    bin->End(fSums, fOutput, fNormalizationScheme, fShapeCorr, fTriggerEff,
             fSymmetrice, fRebin, fCorrEmpty, fCutEdges, 
-            fVtxMin, fVtxMax, fTriggerMask);
+            fVtxMin, fVtxMax, fTriggerMask, GetColor(), GetMarker());
 
   // Output collision energy string 
   if (fSNNString) fOutput->Add(fSNNString->Clone());
@@ -498,7 +528,17 @@ AliBasedNdetaTask::Terminate(Option_t *)
   // Output trigger efficiency and shape correction 
   fOutput->Add(new TParameter<Double_t>("triggerEff", fTriggerEff)); 
   if (fShapeCorr) fOutput->Add(fShapeCorr);
+
+  TString tscheme;
+  if (fNormalizationScheme & kEventLevel)    tscheme.Append("EVENTLEVEL,");
+  if (fNormalizationScheme & kAltEventLevel) tscheme.Append("ALTEVENTLEVEL,");
+  if (fNormalizationScheme & kBackground)    tscheme.Append("BACKGROUND,");
+  if (fNormalizationScheme & kShape)         tscheme.Append("SHAPE,");
   
+  TNamed* scheme = new TNamed("scheme", tscheme.Data()); 
+  scheme->SetUniqueID(fNormalizationScheme); 
+  fOutput->Add(scheme);
+
   PostData(2, fOutput);
 }
 //________________________________________________________________________
@@ -791,23 +831,8 @@ AliBasedNdetaTask::CentralityBin::CreateOutputObjects(TList* dir)
   fSums->SetOwner();
   dir->Add(fSums);
 
-  fTriggers = new TH1D("triggers", "Number of triggers", 
-                      kAccepted, 1, kAccepted);
-  fTriggers->SetYTitle("# of events");
-  fTriggers->GetXaxis()->SetBinLabel(kAll,         "All events");
-  fTriggers->GetXaxis()->SetBinLabel(kB,           "w/B trigger");
-  fTriggers->GetXaxis()->SetBinLabel(kA,           "w/A trigger");
-  fTriggers->GetXaxis()->SetBinLabel(kC,           "w/C trigger");
-  fTriggers->GetXaxis()->SetBinLabel(kE,           "w/E trigger");
-  fTriggers->GetXaxis()->SetBinLabel(kMB,          "w/Collision trigger");
-  fTriggers->GetXaxis()->SetBinLabel(kWithVertex,  "w/Vertex");
-  fTriggers->GetXaxis()->SetBinLabel(kWithTrigger, "w/Selected trigger");
-  fTriggers->GetXaxis()->SetBinLabel(kPileUp,      "w/Pileup");
-  fTriggers->GetXaxis()->SetBinLabel(kAccepted,    "Accepted by cut");
-  fTriggers->GetXaxis()->SetNdivisions(kAccepted, false);
-  fTriggers->SetFillColor(kRed+1);
-  fTriggers->SetFillStyle(3001);
-  fTriggers->SetStats(0);
+  fTriggers = AliAODForwardMult::MakeTriggerHistogram("triggers");
+  fTriggers->SetDirectory(0);
   fSums->Add(fTriggers);
 }
 //____________________________________________________________________
@@ -851,46 +876,9 @@ AliBasedNdetaTask::CentralityBin::CheckEvent(const AliAODForwardMult* forward,
   //    true if the event is to be used 
   //
   if (!forward) return false;
-  
-  // Check the centrality class unless this is the 'all' bin 
-  // if (!IsAllBin()) { 
-  //   Double_t centrality = forward->GetCentrality();
-  //  if (centrality < fLow || centrality >= fHigh) return false;
-  // }
-  
-  fTriggers->AddBinContent(kAll);
-  if (forward->IsTriggerBits(AliAODForwardMult::kB)) 
-    fTriggers->AddBinContent(kB);
-  if (forward->IsTriggerBits(AliAODForwardMult::kA)) 
-    fTriggers->AddBinContent(kA);
-  if (forward->IsTriggerBits(AliAODForwardMult::kC)) 
-    fTriggers->AddBinContent(kC);
-  if (forward->IsTriggerBits(AliAODForwardMult::kE)) 
-    fTriggers->AddBinContent(kE);
-  if (forward->IsTriggerBits(AliAODForwardMult::kInel)) 
-    fTriggers->AddBinContent(kMB);
-  if (forward->IsTriggerBits(AliAODForwardMult::kMCNSD)) 
-    fTriggers->AddBinContent(kMCNSD);
-  if (forward->IsTriggerBits(AliAODForwardMult::kPileUp)) 
-    fTriggers->AddBinContent(kPileUp);
-  
-  // Check if we have an event of interest. 
-  if (!forward->IsTriggerBits(triggerMask)) return false;
-  
-  //Check for pileup
-  if (forward->IsTriggerBits(AliAODForwardMult::kPileUp)) return false;
-  
-  fTriggers->AddBinContent(kWithTrigger);
-  
-  // Check that we have a valid vertex
-  if (!forward->HasIpZ()) return false;
-  fTriggers->AddBinContent(kWithVertex);
 
-  // Check that vertex is within cuts 
-  if (!forward->InRange(vzMin, vzMax)) return false;
-  fTriggers->AddBinContent(kAccepted);
-  
-  return true;
+  // We do not check for centrality here - it's already done 
+  return forward->CheckEvent(triggerMask, vzMin, vzMax, 0, 0, fTriggers);
 }
   
   
@@ -924,6 +912,7 @@ AliBasedNdetaTask::CentralityBin::ProcessEvent(const AliAODForwardMult* forward,
 void 
 AliBasedNdetaTask::CentralityBin::End(TList*      sums, 
                                      TList*      results,
+                                     UShort_t    scheme,
                                      const TH1*  shapeCorr, 
                                      Double_t    trigEff,
                                      Bool_t      symmetrice,
@@ -932,7 +921,9 @@ AliBasedNdetaTask::CentralityBin::End(TList*      sums,
                                      Bool_t      cutEdges, 
                                      Double_t    vzMin, 
                                      Double_t    vzMax, 
-                                     Int_t       triggerMask) 
+                                     Int_t       triggerMask,
+                                     Int_t       color, 
+                                     Int_t       marker) 
 {
   // 
   // End of processing 
@@ -964,7 +955,7 @@ AliBasedNdetaTask::CentralityBin::End(TList*      sums,
 
   fSum      = static_cast<TH2D*>(fSums->FindObject(GetName()));
   fSumMC    = static_cast<TH2D*>(fSums->FindObject(Form("%sMC", GetName())));
-  fTriggers = static_cast<TH1D*>(fSums->FindObject("triggers"));
+  fTriggers = static_cast<TH1I*>(fSums->FindObject("triggers"));
 
   if (!fTriggers) { 
     AliError("Couldn't find histogram 'triggers' in list");
@@ -974,16 +965,17 @@ AliBasedNdetaTask::CentralityBin::End(TList*      sums,
     AliError(Form("Couldn't find histogram '%s' in list", GetName()));
     return;
   }
-  
-  Int_t nAll        = Int_t(fTriggers->GetBinContent(kAll));
-  Int_t nB          = Int_t(fTriggers->GetBinContent(kB));
-  Int_t nA          = Int_t(fTriggers->GetBinContent(kA));
-  Int_t nC          = Int_t(fTriggers->GetBinContent(kC));
-  Int_t nE          = Int_t(fTriggers->GetBinContent(kE));
-  Int_t nMB         = Int_t(fTriggers->GetBinContent(kMB));
-  Int_t nTriggered  = Int_t(fTriggers->GetBinContent(kWithTrigger));
-  Int_t nWithVertex = Int_t(fTriggers->GetBinContent(kWithVertex));
-  Int_t nAccepted   = Int_t(fTriggers->GetBinContent(kAccepted));
+
+  TH1I& t = *fTriggers;
+  Int_t nAll        = Int_t(t.GetBinContent(AliAODForwardMult::kBinAll));
+  Int_t nB          = Int_t(t.GetBinContent(AliAODForwardMult::kBinB));
+  Int_t nA          = Int_t(t.GetBinContent(AliAODForwardMult::kBinA));
+  Int_t nC          = Int_t(t.GetBinContent(AliAODForwardMult::kBinC));
+  Int_t nE          = Int_t(t.GetBinContent(AliAODForwardMult::kBinE));
+  Int_t nMB         = Int_t(t.GetBinContent(AliAODForwardMult::kBinInel));
+  Int_t nTriggered  = Int_t(t.GetBinContent(AliAODForwardMult::kWithTrigger));
+  Int_t nWithVertex = Int_t(t.GetBinContent(AliAODForwardMult::kWithVertex));
+  Int_t nAccepted   = Int_t(t.GetBinContent(AliAODForwardMult::kAccepted));
   Int_t nGood       = nB - nA - nC + 2 * nE;
 
   
@@ -1005,7 +997,6 @@ AliBasedNdetaTask::CentralityBin::End(TList*      sums,
   // Scaling 
   //  N_A + N_A/N_V (N_T - N_V) = N_A + N_A/N_V*N_T - N_A 
   //                            = N_A/N_V * N_T 
-  // 
   // where 
   //    N_A = nAccepted 
   //    N_V = nWithVertex 
@@ -1015,17 +1006,38 @@ AliBasedNdetaTask::CentralityBin::End(TList*      sums,
   // where 
   //    E_V=N_V/N_T is the vertex efficiency from data 
   // 
+  // If we calculate the number of events with no vertex as 
+  // (N_T - N_A), we get 
+  //  
+  //  N_A + N_A/N_V (N_T - N_A) = N_A (1 + 1/N_V (N_T - N_A))
+  //                            = N_A (1 + N_T/N_V - N_A/N_V)
+  //                            = N_A (1 + 1/E_V - N_A/N_V)
+  // 
   // Double_t alpha    = Double_t(nAccepted) / nWithVertex;
   // Double_t vNorm    = nAccepted + alpha*(nTriggered - nWithVertex);
-  AliInfo(Form("Calculating event normalisation as "
-              "1 / trigEff * nAccepted * nTriggered / nWithVertex "
-              "= 1/%f * %d * %d / %d = %f",
-              trigEff, nAccepted, nTriggered, nWithVertex,
-              1. / trigEff * nAccepted * double(nTriggered) / nWithVertex));
-  Double_t vNorm    = double(nWithVertex) / double(nTriggered);
-  Double_t vtxEff   = vNorm;
-  Double_t ntotal   = vtxEff * trigEff;
-  
+  Double_t ntotal = 1;
+  Double_t vtxEff = double(nWithVertex) / double(nTriggered);;
+  Bool_t   shape  = (scheme & kShape);
+  if     (scheme & kEventLevel) {
+    AliInfo(Form("Calculating event normalisation as "
+                "1 / trigEff * nAccepted * nTriggered / nWithVertex "
+                "= 1/%f * %d * %d / %d = %f",
+                trigEff, nAccepted, nTriggered, nWithVertex,
+                1. / trigEff * nAccepted * double(nTriggered) / nWithVertex));
+    ntotal = vtxEff * trigEff;
+  }
+  else if (scheme & kAltEventLevel) {
+    AliInfo(Form("Calculating event normalisation as " 
+                "1 / trigEff * nAccepted * (1 + nTriggered / nWithVertex - "
+                "nAccepted / nWithVertex) = "
+                "1/ %f * %d (1 + %d / %d - %d / %d) = %f", 
+                trigEff, nAccepted, nTriggered, nWithVertex, 
+                nAccepted, nWithVertex, 
+                1/trigEff * nAccepted * (1 + double(nTriggered)/nWithVertex - 
+                                       double(nAccepted) / nWithVertex)));
+    ntotal = trigEff * 1 / (1 + double(nTriggered)/nWithVertex - 
+                           double(nAccepted) / nWithVertex);
+  }
 
   AliInfo(Form("Total of %9d events for %s\n"
               "                   of these %9d are triggered minimum bias\n"
@@ -1053,7 +1065,7 @@ AliBasedNdetaTask::CentralityBin::End(TList*      sums,
   norm->SetDirectory(0);
 
   // Scale by shape correction 
-  if(shapeCorr) fSum->Divide(shapeCorr);
+  if(shape && shapeCorr) fSum->Divide(shapeCorr);
   else AliInfo("No shape correction specified, or disabled");
   
   // Project on X axis 
@@ -1067,8 +1079,9 @@ AliBasedNdetaTask::CentralityBin::End(TList*      sums,
   // Scale by the vertex efficiency 
   dndeta->Scale(ntotal, "width");
   
-  SetHistogramAttributes(dndeta, kRed+1, 20, Form("ALICE %s", name));
-  SetHistogramAttributes(norm, kRed+1,20,Form("ALICE %s normalisation", name)); 
+  SetHistogramAttributes(dndeta, color, marker, Form("ALICE %s", name));
+  SetHistogramAttributes(norm,   color, marker, Form("ALICE %s normalisation", 
+                                                    name)); 
 
   fOutput->Add(fTriggers->Clone());
   if (symmetrice)   fOutput->Add(Symmetrice(dndeta));
@@ -1087,12 +1100,13 @@ AliBasedNdetaTask::CentralityBin::End(TList*      sums,
     // Normalize to the acceptance 
     dndetaMC->Divide(normMC);
     // Scale by the vertex efficiency 
-    dndetaMC->Scale(vNorm, "width");
+    dndetaMC->Scale(ntotal, "width");
     normMC->Scale(1. / nAccepted);
 
-    SetHistogramAttributes(dndetaMC, kRed+3, 21, Form("ALICE %s (MC)",name));
-    SetHistogramAttributes(normMC, kRed+3, 21, Form("ALICE %s (MC) "
-                                                   "normalisation",name)); 
+    SetHistogramAttributes(dndetaMC, color+2, marker, 
+                          Form("ALICE %s (MC)",name));
+    SetHistogramAttributes(normMC,   color+2, marker, 
+                          Form("ALICE %s (MC) normalisation",name)); 
 
     fOutput->Add(dndetaMC);
     if (symmetrice)   fOutput->Add(Symmetrice(dndetaMC));    
@@ -1103,9 +1117,10 @@ AliBasedNdetaTask::CentralityBin::End(TList*      sums,
     if (symmetrice)   
       fOutput->Add(Symmetrice(Rebin(dndetaMC, rebin, cutEdges)));
   }
-  if (!IsAllBin()) return;
 
   // Temporary stuff 
+  if (!IsAllBin()) return;
+
   TFile* forward = TFile::Open("forward.root", "READ");
   if (!forward)  { 
     AliWarning(Form("No forward.root file found"));
@@ -1134,8 +1149,8 @@ AliBasedNdetaTask::CentralityBin::End(TList*      sums,
       if (shapeCorrProj) oEta->Divide(shapeCorrProj);
       oEta->Scale(ntotal/nAccepted, "width");
       oEta->SetDirectory(0);
-      oEta->SetMarkerStyle(21);
-      oEta->SetMarkerColor(kCyan+3);
+      oEta->SetMarkerStyle(marker+4);
+      oEta->SetMarkerColor(color+5);
       fOutput->Add(oEta);
       fOutput->Add(Rebin(oEta, rebin, false));
     }
@@ -1160,8 +1175,8 @@ AliBasedNdetaTask::CentralityBin::End(TList*      sums,
       if (shapeCorrProj) oEta->Divide(shapeCorrProj);
       oEta->Scale(ntotal/nAccepted, "width");
       oEta->SetDirectory(0);
-      oEta->SetMarkerStyle(22);
-      oEta->SetMarkerColor(kMagenta+2);
+      oEta->SetMarkerStyle(marker);
+      oEta->SetMarkerColor(color+5);
       fOutput->Add(oEta);
       fOutput->Add(Rebin(oEta, rebin, false));
     }
index 7a6c2cde962b99bebae34173dff5133b53158f53..a2908d9c0c8c7690f9bf19f4457ac2c5f92e65ea 100644 (file)
@@ -3,21 +3,84 @@
 //
 #ifndef ALIBASEDNDETATASK_H
 #define ALIBASEDNDETATASK_H
+/**
+ * @file   AliBasedNdetaTask.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 13:58:12 2011
+ * 
+ * @brief  
+ * 
+ * @ingroup pwg2_forward_dndeta
+ * 
+ */
 #include <AliAnalysisTaskSE.h>
 class TAxis;
 class TList;
 class TH2D;
 class TH1D;
+class TH1I;
 class AliAODEvent;
 class AliAODForwardMult;
 class TObjArray;
 
+/** 
+ * @defgroup pwg2_forward_tasks_dndeta dN/deta tasks 
+ * @ingroup pwg2_forward_tasks 
+ */
+/**
+ * @defgroup pwg2_forward_dndeta dN/deta
+ *
+ * @f$ dN/d\eta@f$ code 
+ *
+ * @ingroup pwg2_forward_topical
+ */
 /**
- * Task to determine the 
+ * Base class for tasks to determine @f$ dN/d\eta@f$ 
+ *
+ * @ingroup pwg2_forward_tasks_dndeta
+ * @ingroup pwg2_forward_dndeta
  */
 class AliBasedNdetaTask : public AliAnalysisTaskSE
 {
 public:
+  /** 
+   * Bit mask values of the normalisation scheme 
+   */
+  enum {
+    /** Only normalize to accepted events */
+    kNone = 0,
+    /** 
+     * Do the full normalisation 
+     * @f[ 
+     *   N = \frac{1}{\epsilon_X}(N_A-N_A/N_V(N_T-N_V)) = 
+     *       \frac{1}{\epsilon_X}\frac{1}{\epsilon_V}N_A
+     * @f]
+     */
+    kEventLevel = 0x1,
+    /** 
+     * Do the alternative event normalisation, 
+     * @f[
+     *   N' = \frac{1}{\epsilon_X}(N_A-N_A/N_V(N_T-N_A))
+     * @f]
+     */
+    kAltEventLevel = 0x2, 
+    /** 
+     * Do the shape correction
+     */
+    kShape = 0x4, 
+    /** 
+     * Correct for background events (A+C-E). Not implemented yet
+     */
+    kBackground = 0x8,
+    /**
+     * Do the full correction
+     */
+    kFull = kEventLevel | kShape | kBackground,
+    /** 
+     * Do the full correction, using the alternative event-level normalisation. 
+     */
+    kAltFull = kAltEventLevel | kShape | kBackground
+  };
   /** 
    * Constructor 
    * 
@@ -27,7 +90,6 @@ public:
    * Constructor
    * 
    * @param name    Name of task 
-   * @param maxVtx  Set @f$v_z@f$ range
    */
   AliBasedNdetaTask(const char* name);
   /**
@@ -78,9 +140,9 @@ public:
    */
   void SetCentralityAxis(UShort_t n, Short_t* bins);
   /** 
-   * Trigger efficiency for selected trigger(s)
+   * Whether to cut edges when merging 
    * 
-   * @param e Trigger efficiency 
+   * @param cut If true, cut edges 
    */
   void SetCutEdges(Bool_t cut) {fCutEdges = cut;}
   /** 
@@ -97,11 +159,20 @@ public:
    */
   void SetShapeCorrection(const TH1* h);
   /** 
-   * Set whether to use the shape correction 
-   *
-   * @param use  whether to use the shape correction 
+   * Setthe normalisation scheme to use 
+   * 
+   * @param scheme Normalisation scheme 
+   */
+  void SetNormalizationScheme(UShort_t scheme) 
+  {
+    fNormalizationScheme = scheme; 
+  }
+  /** 
+   * Space, pipe, or comma separated list of options
+   * 
+   * @param what List of options 
    */
-  void SetUseShapeCorrection(Bool_t use) { fUseShapeCorr = use; }
+  void SetNormalizationScheme(const char* what);
   /** 
    * Load the normalization data - done automatically if not set from outside
    * 
@@ -132,14 +203,14 @@ public:
    */
   virtual void UserExec(Option_t* option);
   /** 
-   * Called at end of event processing.
+   * Called at end of event processing.
    *
    * This is called once in the master 
    * 
    * @param option Not used 
    */
   virtual void Terminate(Option_t* option);
-  /** @} */
+  /* @} */
 
   /** 
    * @{ 
@@ -148,7 +219,9 @@ public:
   /** 
    * Make a copy of the input histogram and rebin that histogram
    * 
-   * @param h  Histogram to rebin
+   * @param h         Histogram to rebin
+   * @param rebin     Rebinning factor 
+   * @param cutEdges  Whether to cut edges when rebinning
    * 
    * @return New (rebinned) histogram
    */
@@ -168,6 +241,7 @@ public:
    * @param name      New name 
    * @param firstbin  First bin to use 
    * @param lastbin   Last bin to use
+   * @param corr      Whether to do corrections or not 
    * @param error     Whether to calculate errors
    * 
    * @return Newly created histogram or null
@@ -205,9 +279,22 @@ protected:
    * @return Retrieved histogram or null
    */
   virtual TH2D* GetHistogram(const AliAODEvent* aod, Bool_t mc=false) = 0;
+  /** 
+   * Get the colour to use for markers
+   * 
+   * @return Marker colour 
+   */
+  virtual Int_t GetColor() const { return kRed+1; }
+  /** 
+   * Get the marker style 
+   * 
+   * @return Marker style 
+   */
+  virtual Int_t GetMarker() const { return 20; }
   /** 
    * Add a centrality bin 
    * 
+   * @param at   Where in the list to add this bin 
    * @param low  Low cut
    * @param high High cut
    */
@@ -223,29 +310,13 @@ protected:
    */
   virtual CentralityBin* MakeCentralityBin(const char* name, Short_t low, 
                                           Short_t high) const;
-  /** 
-   * Trigger histogram bins 
-   */
-  enum { 
-    kAll        = 1, 
-    kB          = 2, 
-    kA          = 3, 
-    kC          = 4, 
-    kE          = 5,
-    kMB         = 6,
-    kPileUp     = 7,
-    kWithTrigger= 8,
-    kWithVertex = 9,
-    kAccepted   = 10,
-    kMCNSD      = 11
-  };
   /**
    * Calculations done per centrality 
    * 
    */
   struct CentralityBin : public TNamed
   {
-    /** 
+    /** dN
      * Constructor 
      */
     CentralityBin();
@@ -304,14 +375,17 @@ protected:
      * @param mc          MC histogram
      */
     virtual void ProcessEvent(const AliAODForwardMult* forward, 
-                             Int_t triggerMask,
-                             Double_t vzMin, Double_t vzMax, 
-                             const TH2D* data, const TH2D* mc);
+                             Int_t                    triggerMask,
+                             Double_t                 vzMin, 
+                             Double_t                 vzMax, 
+                             const TH2D*              data, 
+                             const TH2D*              mc);
     /** 
      * End of processing 
      * 
      * @param sums        List of sums
      * @param results     Output list of results
+     * @param scheme      Normalisation scheme options
      * @param shapeCorr   Shape correction or nil
      * @param trigEff     Trigger efficiency 
      * @param symmetrice  Whether to symmetrice the results
@@ -321,9 +395,12 @@ protected:
      * @param vzMin       Minimum IP z coordinate
      * @param vzMax      Maximum IP z coordinate
      * @param triggerMask Trigger mask 
+     * @param color       Base colour for markers 
+     * @param marker      Marker style 
      */
     virtual void End(TList*      sums, 
                     TList*      results,
+                    UShort_t    scheme,
                     const TH1*  shapeCorr, 
                     Double_t    trigEff,
                     Bool_t      symmetrice,
@@ -332,7 +409,9 @@ protected:
                     Bool_t      cutEdges, 
                     Double_t    vzMin, 
                     Double_t    vzMax, 
-                    Int_t       triggerMask);
+                    Int_t       triggerMask,
+                    Int_t       color,
+                    Int_t       marker);
     /**
      * @{
      * @name Access histograms
@@ -358,13 +437,13 @@ protected:
      * 
      * @return Trigger histogram
      */
-    const TH1D* GetTriggers() const { return fTriggers; } 
+    const TH1I* GetTriggers() const { return fTriggers; } 
     /** 
      * Get trigger histogram
      * 
      * @return Trigger histogram 
      */
-    TH1D* GetTrigggers() { return fTriggers; }
+    TH1I* GetTrigggers() { return fTriggers; }
     /** @} */
   protected:
     /** 
@@ -377,18 +456,22 @@ protected:
     /** 
      * Check the trigger, vertex, and centrality
      * 
-     * @param aod Event input 
+     * @param forward Event input 
+     * @param triggerMask  The used trigger mask 
+     * @param vzMin        Least @f$ v_z@f$
+     * @param vzMax        Largest @f$ v_z@f$
      * 
      * @return true if the event is to be used 
      */
     virtual Bool_t CheckEvent(const AliAODForwardMult* forward, 
-                             Int_t triggerMask,
-                             Double_t vzMin, Double_t vzMax);
+                             Int_t                    triggerMask,
+                             Double_t                 vzMin, 
+                             Double_t vzMax);
     TList*   fSums;      // Output list 
     TList*   fOutput;    // Output list 
     TH2D*    fSum;       // Sum histogram
     TH2D*    fSumMC;     // MC sum histogram
-    TH1D*    fTriggers;  // Trigger histogram 
+    TH1I*    fTriggers;  // Trigger histogram 
     UShort_t fLow;       // Lower limit (inclusive)
     UShort_t fHigh;      // Upper limit (exclusive)
 
@@ -406,13 +489,12 @@ protected:
   Double_t        fTriggerEff;   // Trigger efficiency for selected trigger(s)
   TH1*            fShapeCorr;    // Shape correction 
   TObjArray*      fListOfCentralities; // Centrality bins 
-  Bool_t          fUseShapeCorr; // Whether to use shape correction
   TNamed*         fSNNString;    // sqrt(s_NN) string 
   TNamed*         fSysString;    // Collision system string 
   TH1D*           fCent;         // Centrality distribution 
   TAxis*          fCentAxis;     // Centrality axis
-
-  ClassDef(AliBasedNdetaTask,2); // Determine multiplicity in base area
+  UShort_t        fNormalizationScheme; // Normalization scheme
+  ClassDef(AliBasedNdetaTask,3); // Determine multiplicity in base area
 };
 
 #endif
index 3f43299742eef7f7f23513c62095f2b766c475cc..30b15c88d8be93c9d173df510cbf782fe098d9d2 100644 (file)
@@ -4,6 +4,16 @@
 //
 #ifndef ALICENTRALCORRACCEPTANCE_H
 #define ALICENTRALCORRACCEPTANCE_H
+/**
+ * @file   AliCentralCorrAcceptance.h
+ * @author Hans Hjersing Dalsgaard 
+ * @date   Wed Mar 23 13:58:33 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_corr
+ */
 #include <TObject.h>
 #include <TObjArray.h>
 #include <TAxis.h>
@@ -49,8 +59,6 @@ public:
   /** 
    * Get the acceptance correction @f$ a_{r,v}@f$ 
    *
-   * @param d  Detector number (1-3)
-   * @param r  Ring identifier (I or O)
    * @param v  Primary interaction point @f$z@f$ coordinate
    * 
    * @return The correction @f$ a_{r,v}@f$ 
@@ -59,8 +67,6 @@ public:
   /** 
    * Get the acceptance correction @f$ a_{r,v}@f$ 
    *
-   * @param d  Detector number (1-3)
-   * @param r  Ring identifier (I or O)
    * @param b  Bin corresponding to the primary interaction point 
    *           @f$z@f$ coordinate (1 based)
    * 
@@ -83,8 +89,6 @@ public:
    * Set the acceptance correction @f$ a_{r,v}(\eta)@f$.
    * Note, that the object takes ownership of the passed pointer.
    * 
-   * @param d    Detector number (1-3)
-   * @param r    Ring identifier (I or O)
    * @param v    Primary interaction point @f$z@f$ coordinate  
    * @param h    @f$ a_{r,v}(\eta)@f$ 
    * 
@@ -95,8 +99,6 @@ public:
    * Set the acceptance correction @f$ a_{r,v}(\eta)@f$ 
    * Note, that the object takes ownership of the passed pointer.
    * 
-   * @param d    Detector number (1-3)
-   * @param r    Ring identifier (I or O)
    * @param b    Bin corresponding to the primary interaction point 
    *             @f$z@f$ coordinate  (1 based)
    * @param h    @f$ a_{r,v}(\eta)@f$ 
index 5c2a2b2f3960ce1155d498afa926e180e977aa31..c12427d7e257a1e2d4faabb15889ffb04c33c498 100644 (file)
@@ -4,6 +4,16 @@
 //
 #ifndef ALICENTRALCORRSECONDARYMAP_H
 #define ALICENTRALCORRSECONDARYMAP_H
+/**
+ * @file   AliCentralCorrSecondaryMap.h
+ * @author Hans Hjersing Dalsgaard 
+ * @date   Wed Mar 23 13:59:03 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_corr
+ */
 #include <TObject.h>
 #include <TObjArray.h>
 #include <TAxis.h>
@@ -49,8 +59,6 @@ public:
   /** 
    * Get the acceptance correction @f$ a_{r,v}@f$ 
    *
-   * @param d  Detector number (1-3)
-   * @param r  Ring identifier (I or O)
    * @param v  Primary interaction point @f$z@f$ coordinate
    * 
    * @return The correction @f$ a_{r,v}@f$ 
@@ -59,8 +67,6 @@ public:
   /** 
    * Get the acceptance correction @f$ a_{r,v}@f$ 
    *
-   * @param d  Detector number (1-3)
-   * @param r  Ring identifier (I or O)
    * @param b  Bin corresponding to the primary interaction point 
    *           @f$z@f$ coordinate (1 based)
    * 
@@ -83,8 +89,6 @@ public:
    * Set the acceptance correction @f$ a_{r,v}(\eta)@f$.
    * Note, that the object takes ownership of the passed pointer.
    * 
-   * @param d    Detector number (1-3)
-   * @param r    Ring identifier (I or O)
    * @param v    Primary interaction point @f$z@f$ coordinate  
    * @param h    @f$ a_{r,v}(\eta)@f$ 
    * 
@@ -95,8 +99,6 @@ public:
    * Set the acceptance correction @f$ a_{r,v}(\eta)@f$ 
    * Note, that the object takes ownership of the passed pointer.
    * 
-   * @param d    Detector number (1-3)
-   * @param r    Ring identifier (I or O)
    * @param b    Bin corresponding to the primary interaction point 
    *             @f$z@f$ coordinate  (1 based)
    * @param h    @f$ a_{r,v}(\eta)@f$ 
index 172d04c7e1bb038244dd125c4756d937385ee55d..24d6b2d1b8bf9a928699396d5b48a5642bf43073 100644 (file)
@@ -4,6 +4,16 @@
 // 
 #ifndef ALICENTRALMULTIPLICITYTASK_H
 #define ALICENTRALMULTIPLICITYTASK_H
+/**
+ * @file   AliCentralMultiplicityTask.h
+ * @author Hans Hjersing Dalsgaard
+ * @date   Wed Mar 23 14:00:03 2011
+ * 
+ * @brief  
+ * 
+ * @ingroup pwg2_forward_aod
+ * 
+ */
 #include <AliAnalysisTaskSE.h>
 #include "AliForwardUtil.h"
 #include "AliAODCentralMult.h"
@@ -15,25 +25,6 @@ class TH2D;
 class TList;
 class TTree;
 
-
-/** 
- * @mainpage ALICE PWG2 Forward Multiplcity Analysis 
- */
-/** 
- * @defgroup pwg2_forward PWG2 Forward analysis
- *
- * Code to do the multiplicity analysis in the central pseudo-rapidity
- * regions
- *
- */
-/** 
- * @defgroup pwg2_forward_tasks Tasks
- *
- * Code to do the multiplicity analysis in the central pseudo-rapidity
- * regions
- *
- * @ingroup pwg2_forward 
- */
 /** 
  * Class that calculates the multiplicity in the
  * central region event-by-event
@@ -49,6 +40,7 @@ class TTree;
  * @par Corrections used 
  * 
  * @ingroup pwg2_forward_tasks
+ * @ingroup pwg2_forward_aod
  * 
  */
 class AliCentralMultiplicityTask : public AliAnalysisTaskSE
index 70c55a1d37d73be8a4bcd0fce878f9f02a9b81bc..1c67606a713a425ef4a1e6786be7e978d5fd8e01 100644 (file)
 #include "AliAODForwardMult.h"
 #include "AliAODCentralMult.h"
 
+ClassDef(AliCentraldNdetaTask)
+#ifdef DOXY_INPUT
+;
+#endif
+
+//____________________________________________________________________
+AliCentraldNdetaTask::AliCentraldNdetaTask(const char*)
+  : AliBasedNdetaTask("Central") 
+{ 
+  fSymmetrice = false; 
+  fCorrEmpty  = false;
+}
 
 //____________________________________________________________________
 TH2D*
index b3bb2408123414f591536c82b26060ce8691bc99..4eeaace96febab58c68bd18340839b415775a91c 100644 (file)
@@ -3,13 +3,26 @@
 //
 #ifndef ALICENTRALDNDETATASK_H
 #define ALICENTRALDNDETATASK_H
+/**
+ * @file   AliCentraldNdetaTask.h
+ * @author Hans Hjersing Dalsgaard
+ * @date   Wed Mar 23 13:59:26 2011
+ * 
+ * @brief  
+ * 
+ * @ingroup pwg2_forward_dndeta
+ * 
+ */
 #include "AliBasedNdetaTask.h"
 class TList;
 class TH2D;
 class TH1D;
 
 /**
- * Task to determine the 
+ * Tasks to determine @f$ dN/d\eta@f$ in the forward regions
+ *
+ * @ingroup pwg2_forward_tasks_dndeta
+ * @ingroup pwg2_forward_dndeta
  */
 class AliCentraldNdetaTask : public AliBasedNdetaTask
 {
@@ -21,16 +34,10 @@ public:
   AliCentraldNdetaTask() : AliBasedNdetaTask() {}
   /** 
    * Constructor
-   * 
-   * @param name    Name of task 
-   * @param maxVtx  Set @f$v_z@f$ range
+   *
+   * @param name Name of task - ignored
    */
- AliCentraldNdetaTask(const char*) 
-   : AliBasedNdetaTask("Central") 
-  { 
-    fSymmetrice = false; 
-    fCorrEmpty  = false;
-  }
+  AliCentraldNdetaTask(const char* name) 
   /**
    * Destructor
    * 
@@ -46,6 +53,18 @@ protected:
    * @return 
    */
   TH2D* GetHistogram(const AliAODEvent* aod, Bool_t mc=false);
+  /** 
+   * Get the colour to use for markers
+   * 
+   * @return Marker colour 
+   */
+  virtual Int_t GetColor() const { return kRed+1; }
+  /** 
+   * Get the marker style 
+   * 
+   * @return Marker style 
+   */
+  virtual Int_t GetMarker() const { return 21; }
 
   ClassDef(AliCentraldNdetaTask,1); // Determine multiplicity in central area
 };
index 0ff12a514eb7e602ef8abd7ab5d337d64feec7df..380e7a5d8d6f2e690dac8e52816faf9468caf2e7 100644 (file)
@@ -4,6 +4,16 @@
 //
 #ifndef ALIFMDCORRACCEPTANCE_H
 #define ALIFMDCORRACCEPTANCE_H
+/**
+ * @file   AliFMDCorrAcceptance.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:00:40 2011
+ * 
+ * @brief  
+ * 
+ * @ingroup pwg2_forward_corr
+ * 
+ */
 #include <TObject.h>
 #include <TObjArray.h>
 #include <TAxis.h>
index e64591d454e6ac42a2054d180adc2a2e3837acd8..07bca7298efb95fea6c25c2a2f274dd3a633a59f 100644 (file)
@@ -4,6 +4,16 @@
 //
 #ifndef ALIFMDCORRDOUBLEHIT_H
 #define ALIFMDCORRDOUBLEHIT_H
+/**
+ * @file   AliFMDCorrDoubleHit.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:00:50 2011
+ * 
+ * @brief  
+ * 
+ * @ingroup pwg2_forward_corr
+ * 
+ */
 #include <TObject.h>
 #include <TObjArray.h>
 class TH1D;
index 027afb80fee37f25a97d4ea285f3b1406114375b..4ca91e5be8ef7cc27eafca31f169c929e7580443 100644 (file)
@@ -3,6 +3,16 @@
 // These are generated from Monte-Carlo or real ESDs. 
 #ifndef ALIFMDCORRELOSSFIT_H
 #define ALIFMDCORRELOSSFIT_H
+/**
+ * @file   AliFMDCorrELossFit.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:01:15 2011
+ * 
+ * @brief  
+ * 
+ * @ingroup pwg2_forward_eloss
+ * 
+ */
 #include <TObject.h>
 #include <TAxis.h>
 #include <TObjArray.h>
@@ -20,6 +30,7 @@ class TBrowser;
  * These are generated from Monte-Carlo or real ESDs. 
  *
  * @ingroup pwg2_forward_corr
+ * @ingroup pwg2_forward_eloss
  */
 class AliFMDCorrELossFit : public TObject 
 {
index b03f5b931d9cfb2d9779ba4263d21ed3f9a5ac82..da0a6ef2d160c232b6c6549ecd8bcc9b23f12822 100644 (file)
@@ -4,6 +4,16 @@
 //
 #ifndef ALIFMDCORRMERGINGEFFICIENCY_H
 #define ALIFMDCORRMERGINGEFFICIENCY_H
+/**
+ * @file   AliFMDCorrMergingEfficiency.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:01:28 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_corr
+ */
 #include <TObject.h>
 #include <TObjArray.h>
 #include <TAxis.h>
index a414c163efbc1940cc5b9e4b1aaf0effc714e12f..68cbfe828dec0c38323e124d30674d6eaeef8e51 100644 (file)
@@ -4,6 +4,16 @@
 //
 #ifndef ALIFMDCORRSECONDARYMAP_H
 #define ALIFMDCORRSECONDARYMAP_H
+/**
+ * @file   AliFMDCorrSecondaryMap.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:01:42 2011
+ * 
+ * @brief  
+ * 
+ * @ingroup pwg2_forward_corr
+ * 
+ */
 #include <TObject.h>
 #include <TObjArray.h>
 #include <TAxis.h>
index 8573da9c5e895df46cc00da22d54f2082922ec60..40331a4aa42c11a2152851fe6109eb90d784f82b 100644 (file)
@@ -4,6 +4,16 @@
 //
 #ifndef ALIFMDCORRVERTEXBIAS_H
 #define ALIFMDCORRVERTEXBIAS_H
+/**
+ * @file   AliFMDCorrVertexBias.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:01:56 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_corr
+ */
 #include <TObject.h>
 #include <TObjArray.h>
 #include <TAxis.h>
index bfa0784200b7a28ecd3d5524217857aa655e497a..4471cbd7103d05bd784817c56866e4e3768ff91c 100644 (file)
@@ -3,6 +3,16 @@
 //
 #ifndef ALIFMDCORRECTOR_H
 #define ALIFMDCORRECTOR_H
+/**
+ * @file   AliFMDCorrector.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:01:02 2011
+ * 
+ * @brief  
+ * 
+ * @ingroup pwg2_forward_aod
+ * 
+ */
 #include <TNamed.h>
 #include <TList.h>
 #include "AliForwardUtil.h"
@@ -31,6 +41,7 @@ class TH2D;
  *   - AliFMDCorrMergingEfficiency
  *
  * @ingroup pwg2_forward_algo 
+ * @ingroup pwg2_forward_aod
  */
 class AliFMDCorrector : public TNamed
 {
index 2f78db69f3a3886e648ff58abda7382f1d084048..02ea26439964da1ccbf9e300897be793a233671b 100644 (file)
@@ -3,6 +3,16 @@
 //
 #ifndef ALIFMDDENSITYCALCULATOR_H
 #define ALIFMDDENSITYCALCULATOR_H
+/**
+ * @file   AliFMDDensityCalculator.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:02:09 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_aod
+ */
 #include <TNamed.h>
 #include <TList.h>
 #include <TArrayI.h>
@@ -30,6 +40,7 @@ class AliFMDCorrELossFit;
  *   - AliFMDDeadCorrection 
  *
  * @ingroup pwg2_forward_algo
+ * @ingroup pwg2_forward_aod
  */
 class AliFMDDensityCalculator : public TNamed
 {
@@ -111,7 +122,7 @@ public:
    * number of particles that has hit within a region.  If this is true, 
    * then the average charge particle density is given by 
    * @f[
-   *  \lamda = -\log\left(\frac{N_e}{N_t}\right)
+   *  \lambda = -\log\left(\frac{N_e}{N_t}\right)
    * @f]
    * where $N_e$ is the number of strips within the region that has no
    * hits over threshold, and $N_t$ is the total number of strips in the 
index 62a85a2170765ed6ef9a145a5e68cb07bec554d7..95e24427783c0468bd32074088847f9802cb46ee 100644 (file)
@@ -3,6 +3,16 @@
 //
 #ifndef ALIFMDENERGYFITTER_H
 #define ALIFMDENERGYFITTER_H
+/**
+ * @file   AliFMDEnergyFitter.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:02:23 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_eloss
+ */
 #include <TNamed.h>
 #include <TH1D.h>
 #include <TAxis.h>
@@ -31,6 +41,7 @@ class TArrayD;
  *
  *
  * @ingroup pwg2_forward_algo
+ * @ingroup pwg2_forward_eloss
  */
 class AliFMDEnergyFitter : public TNamed
 {
index 4085577f530fdf3845f40973e603143ce3e8f115..5e1a1c245d84df0a69f89248ef36cf45d71b466a 100644 (file)
@@ -3,6 +3,16 @@
 // Wraps AliFMDEnergyFitter 
 #ifndef ALIFMDENERGYFITTERTASK_H
 #define ALIFMDENERGYFITTERTASK_H
+/**
+ * @file   AliFMDEnergyFitterTask.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:02:39 2011
+ * 
+ * @brief  
+ * 
+ * @ingroup pwg2_forward_eloss
+ * 
+ */
 #include <AliAnalysisTaskSE.h>
 #include "AliFMDEventInspector.h"
 #include "AliFMDEnergyFitter.h"
@@ -29,6 +39,7 @@ class TTree;
  *   - None
  * 
  * @ingroup pwg2_forward_tasks
+ * @ingroup pwg2_forward_eloss
  * 
  */
 class AliFMDEnergyFitterTask : public AliAnalysisTaskSE
index 64a784de0b9dfbf035d8b5139d28f53383f4a387..1af4991f9c9e157b8f820290be6abc4e75aae475 100644 (file)
@@ -3,6 +3,16 @@
 //
 #ifndef ALIFMDEVENTINSPECTOR_H
 #define ALIFMDEVENTINSPECTOR_H
+/**
+ * @file   AliFMDEventInspector.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:02:48 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_aod
+ */
 #include <TNamed.h>
 class AliESDEvent;
 class TH2D;
@@ -30,6 +40,7 @@ class TList;
  *   - None
  *
  * @ingroup pwg2_forward_algo 
+ * @ingroup pwg2_forward_aod
  */
 class AliFMDEventInspector : public TNamed
 {
@@ -232,6 +243,7 @@ protected:
    * 
    * @param esd  Event 
    * @param cent On return, the centrality or negative if not found
+   * @param qual On return, centrality quality flag
    * 
    * @return False on error, true otherwise 
    */
index 34fe9b14489e4409115b52f8d0e81b8810cade93..56634c88e228ed8f788d5979b62e44b21b0e0c9f 100644 (file)
@@ -4,6 +4,16 @@
 //
 #ifndef ALIFMDHISTCOLLECTOR_H
 #define ALIFMDHISTCOLLECTOR_H
+/**
+ * @file   AliFMDHistCollector.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:03:01 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_aod
+ */
 #include <TNamed.h>
 #include <TList.h>
 #include <TArrayI.h>
@@ -26,6 +36,7 @@ class TH2D;
  *   - AliFMDCorrSecondaryMap
  *
  * @ingroup pwg2_forward_algo
+ * @ingroup pwg2_forward_aod
  */
 class AliFMDHistCollector : public TNamed
 {
@@ -55,15 +66,15 @@ public:
      *             \frac{1}{e_1^2}+\frac{1}{e_2^2}}
      * @f]
      * @f[
-     *   e = \sqrt{\frac{1}{\frac{1}{e_1^2}+\frac{1}{e_2^2}}
+     *   e = \sqrt{\frac{1}{\frac{1}{e_1^2}+\frac{1}{e_2^2}}}
      * @f]
      */
     kWeightedMean, 
     /** 
      * @f[
      *     c = \left\{\begin{array}{cl}
-     *          c_1 & \text{if $e_1 < e_2} \\
-     *          c_2 & \text{otherwise}\end{array}\right.
+     *          c_1 & \mbox{if $e_1 < e_2$} \\
+     *          c_2 & \mbox{otherwise}\end{array}\right.
      * @f]
      */
     kLeastError
@@ -150,7 +161,8 @@ public:
   /** 
    * Intialise 
    * 
-   * @param vtxAxis  Vertex axis 
+   * @param vtxAxis  @f$ v_z@f$ axis 
+   * @param etaAxis  @f$ \eta@f$ axis 
    */  
   virtual void Init(const TAxis& vtxAxis,
                    const TAxis& etaAxis);
index b85a9ba66383406bb11b98bfd69f2746200e6ab9..a0b2d8e9194af8761873fa0dba80270df06670ed 100644 (file)
@@ -4,6 +4,16 @@
 //
 #ifndef ALIFMDMCCORRECTOR_H
 #define ALIFMDMCCORRECTOR_H
+/**
+ * @file   AliFMDMCCorrector.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:03:15 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_aod
+ */
 #include "AliFMDCorrector.h"
 #include <TList.h>
 class TProfile2D;
@@ -33,6 +43,7 @@ class TH2;
  *
  * @ingroup pwg2_forward_algo
  * @ingroup pwg2_forward_mc
+ * @ingroup pwg2_forward_aod
  */
 class AliFMDMCCorrector : public AliFMDCorrector
 {
index 98bbe6122d6bcce11b1563939013d2c9a1843427..c5b3a109e58bfd5181733e25d87081fed7d58013 100644 (file)
@@ -4,6 +4,16 @@
 //
 #ifndef ALIFMDMCDENSITYCALCULATOR_H
 #define ALIFMDMCDENSITYCALCULATOR_H
+/**
+ * @file   AliFMDMCDensityCalculator.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:03:27 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_aod
+ */
 #include "AliFMDDensityCalculator.h"
 #include <TList.h>
 #include "AliForwardUtil.h"
@@ -27,6 +37,7 @@ class TProfile2D;
  *
  * @ingroup pwg2_forward_algo
  * @ingroup pwg2_forward_mc
+ * @ingroup pwg2_forward_aod
  */
 class AliFMDMCDensityCalculator : public AliFMDDensityCalculator
 {
@@ -107,10 +118,8 @@ public:
   /** 
    * Calculate the charged particle density from the MC track references. 
    * 
-   * @param event  MC event
+   * @param fmd    FMD ESD event structure
    * @param hists  Histograms to fill
-   * @param vz     Interaction z coordinate @f$ v_z@f$
-   * @param vtxBin bin corresponding to @f$ v_z@f$
    * 
    * @return true on success
    */
index 2994988b0c6d5c97f38f9ba622d383edf03b0a31..51df035906dcd3caeb962f11a73f11579bcd70c8 100644 (file)
@@ -3,6 +3,16 @@
 //
 #ifndef ALIFMDMCEVENTINSPECTOR_H
 #define ALIFMDMCEVENTINSPECTOR_H
+/**
+ * @file   AliFMDMCEventInspector.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:03:40 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_aod
+ */
 #include "AliFMDEventInspector.h"
 class AliMCEvent;
 class TH2F;
@@ -24,6 +34,8 @@ class TH2F;
  *   - None
  *
  * @ingroup pwg2_forward_algo 
+ * @ingroup pwg2_forward_mc
+ * @ingroup pwg2_forward_aod
  */
 class AliFMDMCEventInspector : public AliFMDEventInspector
 {
@@ -69,13 +81,13 @@ public:
    * 
    * @param event     Input event 
    * @param triggers  On return, the triggers fired 
-   * @param lowFlux   On return, true if the event is considered a low-flux 
-   *                  event (according to the setting of fLowFluxCut) 
    * @param ivz       On return, the found vertex bin (1-based).  A zero
    *                  means outside of the defined vertex range
    * @param vz        On return, the z position of the interaction
-   * @param cent      On return, the centrality (in percent) or < 0 
-   *                  if not found
+   * @param b         On return, impact parameter [fm] (if available)
+   * @param npart     On return, number of participants (if available)
+   * @param nbin      On return, number of binary collisions (if available)
+   * @param phiR      On return, reaction plane angle (if available)
    * 
    * @return 0 (or kOk) on success, otherwise a bit mask of error codes 
    */
@@ -92,10 +104,14 @@ public:
    * the inclusive charged particle density to analysing 
    * MC truth 
    * 
-   * @param esd 
-   * @param mc 
+   * @param vz       Found @f$ v_z@f$
+   * @param trueVz   True  @f$ v_z@f$
+   * @param cent     Centrality
+   * @param b        Impact parameter (if available)
+   * @param npart    Number of participants (if available)
+   * @param nbin     Number of binary collisions (if available)
    * 
-   * @return 
+   * @return true
    */
   virtual Bool_t CompareResults(Double_t vz,    Double_t trueVz, 
                                Double_t cent,  Double_t b,
@@ -106,6 +122,7 @@ protected:
    * 
    * @param esd  Event 
    * @param cent On return, the centrality or negative if not found
+   * @param qual Quality flag 
    * 
    * @return False on error, true otherwise 
    */
index 0b3372e108adf0243c2c3fc5573289d5648b29a0..894761c60c0b16b1a4f65345bd76fed669832732 100644 (file)
@@ -3,6 +3,16 @@
 //
 #ifndef ALIFMDMCSHARINGFILTER_H
 #define ALIFMDMCSHARINGFILTER_H
+/**
+ * @file   AliFMDMCSharingFilter.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:03:47 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_aod
+ */
 #include "AliFMDSharingFilter.h"
 class AliMCEvent;
 
@@ -29,6 +39,7 @@ class AliMCEvent;
  *
  * @ingroup pwg2_forward_algo
  * @ingroup pwg2_forward_mc
+ * @ingroup pwg2_forward_aod
  */
 class AliFMDMCSharingFilter : public AliFMDSharingFilter
 {
index b954c20b04d6886f7ad61185272f57f7689fe37a..f103bc810354c2505c0b7431dd921268052055e2 100644 (file)
@@ -6,6 +6,16 @@
 //
 #ifndef ALIFMDSHARINGFILTER_H
 #define ALIFMDSHARINGFILTER_H
+/**
+ * @file   AliFMDSharingFilter.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:03:57 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_aod
+ */
 #include <TNamed.h>
 #include <TH2.h>
 #include <TList.h>
@@ -38,6 +48,7 @@ class TH2;
  * 
  *
  * @ingroup pwg2_forward_algo 
+ * @ingroup pwg2_forward_aod
  */
 class AliFMDSharingFilter : public TNamed
 {
index b6d524cff9942f151dc52c480190394d2f1eca93..7a05b6d8a1e12890dd4a25ebd00bfa470d9743d2 100644 (file)
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
+/**
+ * @file   AliFMDStripIndex.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:04:10 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_mc
+ */
 
 // Struct to encode a strip address into one integer
 // developed by Christian Holm Christensen (cholm@nbi.dk).
 // Added by Hans H. Dalsgaard (hans.dalsgaard@cern.ch) 
 
 
+/** 
+ * Functions to encode/decode strip address from User ID in a
+ * track-reference
+ * 
+ * @ingroup pwg2_forward_mc 
+ */
 class AliFMDStripIndex
 {
 public:
index 55b1ac65d544b0233c6a743d4b4b8c7ac5c022d6..b359c5a2b9cd04165dabff840c4404e552b10d71 100644 (file)
@@ -909,7 +909,7 @@ AliForwardCorrectionManager::Browse(TBrowser* b)
   if (fAcceptance)       b->Add(fAcceptance,        "Acceptance corr");
 }
 
-#if 1
+#ifndef DOXY_INPUT
 //______________________________________________________________________________
 void AliForwardCorrectionManager::Streamer(TBuffer &R__b)
 {
index d705c2e9cccf7022691bd58e9023a6a4e6c1ae99..9beea99ff6dfea80882f067968d930fc7a1856a4 100644 (file)
@@ -3,18 +3,22 @@
 // 
 #ifndef ALIFORWARDCORRECTIONMANAGER_H
 #define ALIFORWARDCORRECTIONMANAGER_H
+/**
+ * @file   AliForwardCorrectionManager.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:04:27 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_aod
+ */
 #include <TObject.h>
-// #include "AliFMDCorrELossFit.h"
 #include "AliFMDCorrSecondaryMap.h"
-// #include "AliFMDCorrDoubleHit.h"
-// #include "AliFMDCorrVertexBias.h"
-// #include "AliFMDCorrMergingEfficiency.h"
-// #include "AliFMDCorrAcceptance.h"
 #include <TString.h>
 class TFile;
 class TBrowser;
 class AliFMDCorrELossFit;
-// class AliFMDCorrSecondaryMap;
 class AliFMDCorrDoubleHit;
 class AliFMDCorrVertexBias;
 class AliFMDCorrMergingEfficiency;
@@ -28,6 +32,7 @@ class AliFMDCorrAcceptance;
  * of this type.
  * 
  * @ingroup pwg2_forward_corr 
+ * @ingroup pwg2_forward_aod
  */
 class AliForwardCorrectionManager : public TObject
 {
index dcee800a2d886dd9a3db70b93bc67e64c7222861..de61fffed89c8f2e54cf63bb5eab7f17fdec5c7f 100644 (file)
@@ -3,10 +3,24 @@
 //
 #ifndef ALIFORWARDFLOWTASKQC_H
 #define ALIFORWARDFLOWTASKQC_H
+/**
+ * @file   AliForwardFlowTaskQC.h
+ * @author Alexander Hansen
+ * @date   Wed Mar 23 14:05:06 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_flow
+ */
 #include "AliAnalysisTaskSE.h"
 #include "AliForwardFlowUtil.h"
 class AliAODEvent;
 
+/**
+ * @defgroup pwg2_forward_traks_flow Flow tasks 
+ * @ingroup pwg2_forward_tasks
+ */
 /**
  * Calculate the flow in the forward regions using the Q cumulants method
  *
@@ -16,7 +30,8 @@ class AliAODEvent;
  * Outputs:
  *   - AnalysisResults.root
  *
- * @ingroup pwg2_forward_tasks
+ * @ingroup pwg2_forward_tasks_flow
+ * @ingroup pwg2_forward_flow
  *
  * @todo Add centrality stuff
  *
@@ -37,28 +52,15 @@ public:
   /**
    * Destructor
    */
-  virtual ~AliForwardFlowTaskQC() {;}
-  /** 
-   * Copy constructor 
-   * 
-   * @param o Object to copy from 
-   */
-  AliForwardFlowTaskQC(const AliForwardFlowTaskQC& o);
-  /** 
-   * Assignment operator 
-   * 
-   * @param o Object to assign from 
-   * 
-   * @return Reference to this object 
-   */
-  AliForwardFlowTaskQC& operator=(const AliForwardFlowTaskQC&) { return *this; }
+  virtual ~AliForwardFlowTaskQC() {}
   /** 
    * @{ 
-   * @name Interface methods 
+   * @name Task interface methods 
    */
   /** 
    * Create output objects 
    * 
+   * @todo Check if this shouldn't be UserCreateOutputObjects!
    */
   virtual void CreateOutputObjects();
   /**
@@ -78,45 +80,68 @@ public:
    * @param option Not used 
    */
   virtual void Terminate(Option_t *option);
+  /* @} */
   /*
    * Returns the outputlist
    *
+   * @return output list
    */
   TList* GetOutputList() { return fOutputList; }
   /* 
-   * Set Number of eta bins to be used in flow analysis
+   * Set Number of @f$ \eta@f$ bins to be used in flow analysis
    *
+   * @param nbins Number of @f$ \eta@f$ bins  
    */
   void SetUseNEtaBins(Int_t nbins) { fEtaBins = nbins; }
   /* 
-   * Set which harmonics to calculate
-   * v_{1} to v_{4} is available and calculated as default
+   * Set which harmonics to calculate. @f$ v_{1}@f$ to @f$ v_{4}@f$ is
+   * available and calculated as default
    *
+   * @param v1  Do @f$ v_{1}@f$ 
+   * @param v2  Do @f$ v_{2}@f$ 
+   * @param v3  Do @f$ v_{3}@f$ 
+   * @param v4  Do @f$ v_{4}@f$ 
    */
   void SetDoHarmonics(Bool_t v1 = kTRUE, Bool_t v2 = kTRUE, 
                      Bool_t v3 = kTRUE, Bool_t v4 = kTRUE) { 
     fv[1] = v1; fv[2] = v2; fv[3] = v3; fv[4] = v4; }
   /*
    * Set string to add flow to MC truth particles
+   * 
+   * @param type String 
    */
   void AddFlow(TString type = "") { fAddFlow = type; }
   /*
    * Set which function fAddFlow should use
+   * 
+   * @param number Type of AddFlow 
    */
   void AddFlowType(Int_t number = 0) { fAddType = number; }
   /*
    * Set which order of flow to add
+   *
+   * @param order Flow order 
    */
   void AddFlowOrder(Int_t order = 2) { fAddOrder = order; }
  /**
    * Set Z vertex range - Used by flow task
+   * 
+   * @param vertex Vertex range
    */
   void SetVertexRange(Int_t vertex = 2) { fZvertex = vertex; }
+protected:
   /** 
-   * @} 
+   * Copy constructor 
+   * 
+   * @param o Object to copy from 
    */
-  
-protected:
+  AliForwardFlowTaskQC(const AliForwardFlowTaskQC& o);
+  /** 
+   * Assignment operator 
+   * 
+   * @return Reference to this object 
+   */
+  AliForwardFlowTaskQC& operator=(const AliForwardFlowTaskQC&) { return *this; }
   /*
    * if MC information is available do analysis on Monte Carlo truth
    * and track references
@@ -125,25 +150,39 @@ protected:
   void ProcessPrimary();
   /**
    * Calculate Q cumulant
-   * Parameters:
-   *  type: Determines which histograms should be used
-   *        - "" = data histograms
-   *        - "TrRef" = track reference histograms
-   *        - "MC" = MC truth histograms
-   *  harmonic: Which harmonic to calculate
+   * 
+   * @param type     Determines which histograms should be used
+   *                 - "" = data histograms
+   *                 - "TrRef" = track reference histograms
+   *                 - "MC" = MC truth histograms
+   * @param harmonic Which harmonic to calculate
    */
   void CumulantsMethod(TString type, Int_t harmonic);
   /**
    * Caclulate the variance of x squared - used to finalize
    * calculations in Terminate()
    *
+   * @param wxx2      Weight of @f$ x^2@f$
+   * @param x         @f$ x@f$
+   * @param wx        Weight of @f$ x@f$
+   * @param wxx       Weight of @f$ x^2@f$
+   * @param sqrtwx2   @f$ \sqrt{wx^2}@f$ 
+   * 
+   * @return Variance squared 
    */
   Double_t VarSQ(Double_t wxx2, Double_t x, Double_t wx, 
                 Double_t wxx, Double_t sqrtwx2) const ;
-  /**
+  /** 
    * Caclulate the covariance between x and y - used to finalize
    * calculations in Terminate()
-   *
+   * 
+   * @param wxwyxy @f$ w_x w_y x y@f$
+   * @param wxwy   @f$ w_x w_y@f$
+   * @param XY     @f$ xy@f$ 
+   * @param wx     @f$ w_x@f$
+   * @param wy     @f$ w_y@f$
+   * 
+   * @return 
    */
   Double_t CovXY(Double_t wxwyxy, Double_t wxwy, Double_t XY, 
                 Double_t wx, Double_t wy) const;
index 1425dd07760a1ed0550714c0add6b264b195b5e6..ca3719bc7049f876511461df5b77f7a53cf9747d 100644 (file)
@@ -17,10 +17,12 @@ ClassImp(AliForwardFlowUtil)
 //_____________________________________________________________________
 AliForwardFlowUtil::AliForwardFlowUtil() : 
   fList(0),
-  fZvertex(0) {} 
+  fZvertex(0) 
+{ 
   //
   // Default Constructor
   //
+}
 //_____________________________________________________________________
 AliForwardFlowUtil::AliForwardFlowUtil(TList* outputList) :
   fList(0),
index fecd7f5a89856e29ae33396a63ca10741d0e783e..9360345780d328ad938b31687a37dff2b24a1009 100644 (file)
@@ -4,6 +4,16 @@
 //
 #ifndef ALIFORWARDFLOWUTIL_H
 #define ALIFORWARDFLOWUTIL_H
+/**
+ * @file   AliForwardFlowUtil.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:05:40 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_flow
+ */
 #include "TNamed.h"
 class AliAODForwardMult;
 class AliAODEvent;
@@ -14,7 +24,8 @@ class TList;
  * Class used to handle the input from AODs and put it into histograms
  * the Forward Flow tasks can run on.
  *
- * @ingroup pwg2_forward_tasks
+ * @ingroup pwg2_forward_tasks_flow
+ * @ingroup pwg2_forward_flow
  */
 class AliForwardFlowUtil : public TNamed
 {
@@ -26,67 +37,102 @@ public:
   /*
    * Constructor
    *
-   * @param fList list of histograms for flow analysis
-   */
-  AliForwardFlowUtil(TList* fList);
-  /*
-   * Copy constructor
-   *
-   * @param o Object to copy from
-   */
-  AliForwardFlowUtil(const AliForwardFlowUtil& o) : TNamed(),
-                                                   fList(o.fList),
-                                                   fZvertex(o.fZvertex) {}
-  /** 
-   * Assignment operator 
-   * 
-   * @param o Object to assign from 
-   * 
-   * @return Reference to this object 
+   * @param l list of histograms for flow analysis
    */
-  AliForwardFlowUtil& operator=(const AliForwardFlowUtil&) { return *this; }
+  AliForwardFlowUtil(TList* l);
   /**
    * Check that AOD event meet trigger requirements
+   * 
+   * @param aodfm Forward multplicity AOD event structure 
+   * 
+   * @return true on success
    */
   Bool_t AODCheck(const AliAODForwardMult* aodfm) const;
   /**
    * Loop over AliAODForwardMult object and fill flow histograms
+   * 
+   * @param AODevent AOD event structure 
+   * 
+   * @return true on success
    */
   Bool_t LoopAODFMD(const AliAODEvent* AODevent) const;
   /*
    * Loop over AliAODForwardCentral object and fill flow histograms
+   * 
+   * @param AODevent AOD event structure 
+   * 
+   * @return true on success
    */
   Bool_t LoopAODSPD(const AliAODEvent* AODevent) const;
   /**
    * Loop over AliAODForwardMult object and fill flow histograms from
    * track refs
+   * 
+   * @param AODevent AOD event structure 
+   * 
+   * @return true on success
    */
   Bool_t LoopAODtrrefHits(const AliAODEvent* AODevent) const;
- /**
 /**
    * Loop over AliAODMCParticle branch object and fill flow histograms
    * add flow if arguments are set
+   * 
+   * @param AODevent AOD event structure 
+   * @param addFlow  What to add flow to 
+   * @param type     Type of flow 
+   * @param order    Order of added flow 
+   * 
+   * @return true on success
    */
-  Bool_t LoopAODmc(const AliAODEvent* AODevent, TString addFlow, Int_t type, Int_t order) const;
+  Bool_t LoopAODmc(const AliAODEvent* AODevent, TString addFlow, 
+                  Int_t type, Int_t order) const;
  /**
    * Set Z vertex range - Used by flow task
+   *
+   * @param vertex Vertex range 
    */
   void SetVertexRange(Int_t vertex = 2) { fZvertex = vertex; }
    
 protected:
+  /*
+   * Copy constructor
+   *
+   * @param o Object to copy from
+   */
+  AliForwardFlowUtil(const AliForwardFlowUtil& o) : TNamed(),
+                                                   fList(o.fList),
+                                                   fZvertex(o.fZvertex) {}
+  /** 
+   * Assignment operator 
+   * 
+   * @return Reference to this object 
+   */
+  AliForwardFlowUtil& operator=(const AliForwardFlowUtil&) { return *this; }
   /**
    * Add pt dependent flow factor
+   *
+   * @param Pt   @f$ p_T@f$
+   * @param type Type of flow 
    */
   Double_t AddptFlow(Double_t Pt, Int_t type) const;
   /**
    * Add pid dependent flow factor
+   * 
+   * @param ID   Particle ID 
+   * @param type Type of flow
    */
   Double_t AddpidFlow(Int_t ID, Int_t type) const;
   /**
    * Add eta dependent flow factor
+   * 
+   * @param Eta  @f$\eta@f$ 
+   * @param type Type of flow 
    */
   Double_t AddetaFlow(Double_t Eta, Int_t type) const;
   /**
    * Get centrality form MC impact parameter
+   * 
+   * @param AODevent AOD event structure 
    */
   Double_t GetCentFromMC(const AliAODEvent* AODevent) const;
 
index 720ceaff8d94ecc58a8f1624a030181454a3a74a..80b7f09b4d5b5aacf29660c960cac88e468ec844 100644 (file)
@@ -3,6 +3,16 @@
 // 
 #ifndef ALIFORWARDMCCORRECTIONS_H
 #define ALIFORWARDMCCORRECTIONS_H
+/**
+ * @file   AliForwardMCCorrectionsTask.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:05:51 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_aod
+ */
 #include <AliAnalysisTaskSE.h>
 #include <AliESDFMD.h>
 #include <TH1I.h>
@@ -29,6 +39,7 @@ class TTree;
  * 
  * @ingroup pwg2_forward_tasks
  * @ingroup pwg2_forward_mc
+ * @ingroup pwg2_forward_aod
  * 
  */
 class AliForwardMCCorrectionsTask : public AliAnalysisTaskSE
@@ -112,8 +123,8 @@ public:
    * Set the eta axis to use
    * 
    * @param nBins Number of bins
-   * @param vzMin Least @f$\eta@f$ 
-   * @param vzMax Largest @f$\eta@f$ 
+   * @param etaMin Least @f$\eta@f$ 
+   * @param etaMax Largest @f$\eta@f$ 
    */
   void SetEtaAxis(Int_t nBins, Double_t etaMin, Double_t etaMax=-1000000);
   /** 
index e2084976643a44e4af670e45c1e6b04f19b25b65..8412b3c70e0da59c7a0978da3d471d9ae436d636 100644 (file)
@@ -3,6 +3,16 @@
 // 
 #ifndef ALIFORWARDMCMULTIPLICITYTASK_H
 #define ALIFORWARDMCMULTIPLICITYTASK_H
+/**
+ * @file   AliForwardMCMultiplicityTask.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:06:13 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_aod
+ */
 #include "AliForwardMultiplicityBase.h"
 #include "AliForwardUtil.h"
 #include "AliFMDMCEventInspector.h"
@@ -35,6 +45,7 @@ class TList;
  * 
  * @ingroup pwg2_forward_tasks
  * @ingroup pwg2_forward_mc
+ * @ingroup pwg2_forward_aod
  * 
  */
 class AliForwardMCMultiplicityTask : public AliForwardMultiplicityBase
index 57f6de2c1c54bf8a6676101c48b2c04417847ce8..d4c9e504c40ff1963ed8e754d040c9f2aa3c2bcc 100644 (file)
@@ -4,6 +4,16 @@
 // 
 #ifndef ALIFORWARDMULTIPLICITYBASE_H
 #define ALIFORWARDMULTIPLICITYBASE_H
+/**
+ * @file   AliForwardMultiplicityBase.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:06:29 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_aod
+ */
 #include <AliAnalysisTaskSE.h>
 class AliFMDEventInspector;
 class AliFMDEnergyFitter;
@@ -20,6 +30,61 @@ class TAxis;
 
 /** 
  * @mainpage ALICE PWG2 Forward Multiplcity Analysis 
+ * 
+ * This is the analysis code for analysis of the Forward data. 
+ * 
+ * @par Code overview 
+ * 
+ * See the <a href="modules.html">Modules</a> page 
+ * 
+ * @par Run.sh script 
+ * 
+ * @verbatim 
+ * Usage: Run.sh [OPTIONS]
+ * 
+ * Do Pass1 and Pass2 on ESD files in current directory.  
+ * 
+ * Options:
+ *     -h,--help               This help                  
+ *     -n,--events N           Number of events            (-1)
+ *     -1,--pass1              Run pass 1, only AOD        (0)
+ *     -2,--pass2              Run pass 2, only Hists      (0)
+ *     -3,--pass3              Draw results                (0)
+ *     -v,--vz-min CM          Minimum value of vz         (-10)
+ *     -V,--vz-max CM          Maximum value of vz         (10)
+ *     -t,--trigger TYPE       Select trigger TYPE         (INEL)
+ *     -b,--batch              Do batch processing         (0)
+ *     -P,--proof NWORKERS     Run in PROOF(Lite) mode     (0)
+ *     -M,--mc                 Run over MC data            (0)
+ *     -g,--gdb                Run in GDB mode             (0)
+ *     -E,--eloss              Run energy loss script      
+ *      -r,--rebin              Rebin factor                (1)
+ *      -C,--use-centrality     Run centrality task         (0)
+ *     -O,--show-older         Show older data             (0)
+ *     -J,--show-published     Show ALICE published data   (1)
+ *     -R,--show-ratios        Show ratios to other data   (1)
+ *     -Z,--show-asymmetry     Show asymmetry              (1)
+ *     -S,--scheme SCHEME      Normalisation scheme        (full)
+ *     -T,--title STRING       Title on plots              ()
+ * 
+ * TYPE is a comma or space separated list of 
+ *  
+ *   INEL            Inelastic triggers (V0A|V0C|SPD)
+ *   INEL>0      As above + N_ch > 0 in -0.5<eta<+0.5
+ *   NSD         Non-single diffractive ((VOA&VOC)|N_ch > 5 -1.9<eta<+1.9)
+ * 
+ * SCHEME is a comma or space separated list of 
+ * 
+ *   NONE          No event-level normalization except trivial one 
+ *   EVENTLEVEL    Event-level normalization 
+ *   ALTEVENTLEVEL Event-level normalization (alternative version)
+ *   BACKGROUND    Not implemented yet 
+ *   SHAPE         Shape correction 
+ *   FULL          Same as EVENTLEVEL,BACKGROUND,SHAPE
+ *   ALTFULL       Same as ALTEVENTLEVEL,BACKGROUND,SHAPE
+ * 
+ * If NWORKERS is 0, then the analysis will be run in local mode.
+ * @endverbatim
  */
 /** 
  * @defgroup pwg2_forward PWG2 Forward analysis
@@ -36,6 +101,13 @@ class TAxis;
  *
  * @ingroup pwg2_forward 
  */
+/** 
+ * @defgroup pwg2_forward_topical Topical
+ */
+/** 
+ * @defgroup pwg2_forward_aod AOD
+ * @ingroup pwg2_forward_topical
+ */
 /** 
  * Base class for classes that calculate the multiplicity in the
  * forward regions event-by-event
@@ -51,6 +123,7 @@ class TAxis;
  * @par Corrections used 
  * 
  * @ingroup pwg2_forward_tasks
+ * @ingroup pwg2_forward_aod
  * 
  */
 class AliForwardMultiplicityBase : public AliAnalysisTaskSE
index 414bcd643129337f1353b30f445d39a2102ddb26..63b4149415ffe655be20b2ec5de51c6b97212a6c 100644 (file)
@@ -3,6 +3,16 @@
 // 
 #ifndef ALIFORWARDMULTIPLICITYTASK_H
 #define ALIFORWARDMULTIPLICITYTASK_H
+/**
+ * @file   AliForwardMultiplicityTask.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:06:42 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_aod
+ */
 #include "AliForwardMultiplicityBase.h"
 #include "AliForwardUtil.h"
 #include "AliFMDEventInspector.h"
@@ -32,6 +42,7 @@ class TList;
  * @par Corrections used 
  * 
  * @ingroup pwg2_forward_tasks
+ * @ingroup pwg2_forward_aod
  * 
  */
 class AliForwardMultiplicityTask : public AliForwardMultiplicityBase
index 4857543a822b15537f35617628b03e7158201816..d7f103574f07d483bc26f434e1487347b08c587d 100644 (file)
@@ -4,6 +4,16 @@
 //
 #ifndef ALIFORWARDUTIL_H
 #define ALIFORWARDUTIL_H
+/**
+ * @file   AliForwardUtil.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:06:54 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward 
+ */
 #include <TObject.h>
 #include <TString.h>
 #include <TObjArray.h>
@@ -22,14 +32,14 @@ class AliESDEvent;
 class AliForwardUtil : public TObject
 {
 public:
-    /** 
-     * Get the standard color for a ring  
-     *
-     * @param d Detector
-     * @param r Ring 
-     
-     * @return 
-     */
+  /** 
+   * Get the standard color for a ring  
+   *
+   * @param d Detector
+   * @param r Ring 
+   * 
+   * @return 
+   */
   static Color_t RingColor(UShort_t d, Char_t r)
   { 
     return ((d == 1 ? kRed : (d == 2 ? kGreen : kBlue))
index 9c768ad2bf0c9066f6cf547fb1933b984d42af01..41d5f2c67061b3eb287660481d02da4735502de3 100644 (file)
@@ -170,6 +170,7 @@ AliForwarddNdetaTask::CentralityBin::ProcessPrimary(const AliAODForwardMult*
 void
 AliForwarddNdetaTask::CentralityBin::End(TList*      sums, 
                                         TList*      results,
+                                        UShort_t    scheme,
                                         const TH1*  shapeCorr, 
                                         Double_t    trigEff,
                                         Bool_t      symmetrice,
@@ -178,25 +179,29 @@ AliForwarddNdetaTask::CentralityBin::End(TList*      sums,
                                         Bool_t      cutEdges, 
                                         Double_t    vzMin, 
                                         Double_t    vzMax, 
-                                        Int_t       triggerMask)
+                                        Int_t       triggerMask,
+                                        Int_t       color,
+                                        Int_t       marker)
 {
-  AliBasedNdetaTask::CentralityBin::End(sums, results, shapeCorr, trigEff, 
+  AliBasedNdetaTask::CentralityBin::End(sums, results, scheme, 
+                                       shapeCorr, trigEff, 
                                        symmetrice, rebin, corrEmpty, cutEdges,
-                                       vzMin, vzMax, triggerMask);
+                                       vzMin, vzMax, triggerMask,
+                                       color, marker);
 
   fSumPrimary     = static_cast<TH2D*>(fSums->FindObject("truth"));
 
   if (!fSumPrimary) return;
-  Int_t n           = (triggerMask == AliAODForwardMult::kNSD ? 
-                      Int_t(fTriggers->GetBinContent(kMCNSD)) : 
-                      Int_t(fTriggers->GetBinContent(kAll)));
+  Int_t n = (triggerMask == AliAODForwardMult::kNSD ? 
+            Int_t(fTriggers->GetBinContent(AliAODForwardMult::kBinMCNSD)) : 
+            Int_t(fTriggers->GetBinContent(AliAODForwardMult::kBinAll)));
 
     
   TH1D* dndetaTruth = fSumPrimary->ProjectionX("dndetaTruth",1,
                                               fSumPrimary->GetNbinsY(),"e");
   dndetaTruth->Scale(1./n, "width");
 
-  SetHistogramAttributes(dndetaTruth, kBlue+3, 22, "Monte-Carlo truth");
+  SetHistogramAttributes(dndetaTruth, color-2, marker+4, "Monte-Carlo truth");
     
   fOutput->Add(dndetaTruth);
   fOutput->Add(Rebin(dndetaTruth, rebin, cutEdges));
index 74fd328c0f612fdaf70351ca519ba24ff5761d44..539665af5a1605f4e82d3a8c9fcbb286be642da6 100644 (file)
@@ -3,13 +3,26 @@
 //
 #ifndef ALIFORWARDDNDETATASK_H
 #define ALIFORWARDDNDETATASK_H
+/**
+ * @file   AliForwarddNdetaTask.h
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:04:54 2011
+ * 
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_dndeta
+ */
 #include "AliBasedNdetaTask.h"
 class TList;
 class TH2D;
 class TH1D;
 
 /**
- * Task to determine the 
+ * Tasks to determine @f$ dN/d\eta@f$ in the forward regions
+ *
+ * @ingroup pwg2_forward_tasks_dndeta
+ * @ingroup pwg2_forward_dndeta
  */
 class AliForwarddNdetaTask : public AliBasedNdetaTask
 {
@@ -23,7 +36,6 @@ public:
    * Constructor
    * 
    * @param name    Name of task 
-   * @param maxVtx  Set @f$v_z@f$ range
    */
   AliForwarddNdetaTask(const char* name);
   /**
@@ -127,6 +139,7 @@ protected:
      * 
      * @param sums        List of sums
      * @param results     Output list of results
+     * @param scheme      Normalisation scheme options
      * @param shapeCorr   Shape correction or nil
      * @param trigEff     Trigger efficiency 
      * @param symmetrice  Whether to symmetrice the results
@@ -136,9 +149,12 @@ protected:
      * @param vzMin       Minimum IP z coordinate
      * @param vzMax      Maximum IP z coordinate
      * @param triggerMask Trigger mask 
+     * @param color       Marker colour 
+     * @param marker      Marker style 
      */
     virtual void End(TList*      sums, 
                     TList*      results,
+                    UShort_t    scheme,
                     const TH1*  shapeCorr, 
                     Double_t    trigEff,
                     Bool_t      symmetrice,
@@ -147,7 +163,9 @@ protected:
                     Bool_t      cutEdges, 
                     Double_t    vzMin, 
                     Double_t    vzMax, 
-                    Int_t       triggerMask);
+                    Int_t       triggerMask,
+                    Int_t       color, 
+                    Int_t       marker);
   protected: 
     TH2D*           fSumPrimary;    //  Sum of primary histograms
     ClassDef(CentralityBin,1); // A centrality bin     
index 6650af9624662435c7b92b98bce901f9304ba2b2..05e83e1648c2667133c3064cc4ce8892f03e80ae 100644 (file)
@@ -1,7 +1,15 @@
 /**
- * Script to visualise the dN/deta 
+ * @file   DrawdNdeta.C
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:07:10 2011
+ * 
+ * @brief  Script to visualise the dN/deta 
  *
- * This script is independent of any AliROOT code - and should stay that way. 
+ * This script is independent of any AliROOT code - and should stay
+ * that way.
+ * 
+ * 
+ * @ingroup pwg2_forward_dndeta
  */
 #include <TH1.h>
 #include <THStack.h>
@@ -26,6 +34,8 @@
 /**
  * Class to draw dN/deta results 
  * 
+ * @ingroup pwg2_forward_tasks_dndeta
+ * @ingroup pwg2_forward_dndeta
  */
 struct dNdetaDrawer 
 {
@@ -57,14 +67,7 @@ struct dNdetaDrawer
       fSNNString(0),           // TNamed*
       fSysString(0),           // TNamed*
       fVtxAxis(0),             // TAxis*
-      // fForward(0),          // TH1*
-      // fForwardMC(0),                // TH1*
-      // fForwardHHD(0),       // TH1*
-      // fTruth(0),            // TH1*
-      // fCentral(0),          // TH1*
-      // fForwardSym(0),       // TH1*
-      // fForwardMCSym(0),     // TH1*
-      // fForwardHHDSym(0),    // TH1*
+      fCentAxis(0),             // TAxis*
       fTriggers(0),            // TH1*
       fRangeParam(0)
 
@@ -76,6 +79,24 @@ struct dNdetaDrawer
     fRangeParam->fSlave2Axis = 0;
     fRangeParam->fSlave2Pad  = 0;
   }
+  //__________________________________________________________________
+  virtual ~dNdetaDrawer()
+  {
+    if (fRatios  && fRatios->GetHists())  fRatios->GetHists()->Delete();
+    if (fResults && fResults->GetHists()) fResults->GetHists()->Delete();
+
+    if (fTrigString) { delete fTrigString; fTrigString = 0; }
+    if (fSNNString)  { delete fSNNString;  fSNNString  = 0; }
+    if (fSysString)  { delete fSysString;  fSysString  = 0; }
+    if (fVtxAxis)    { delete fVtxAxis;    fVtxAxis    = 0; }
+    if (fCentAxis)   { delete fCentAxis;   fCentAxis   = 0; }
+    if (fResults)    { delete fResults;    fResults    = 0; }
+    if (fRatios)     { delete fRatios;     fRatios     = 0; }
+    if (fOthers)     { delete fOthers;     fOthers     = 0; }
+    if (fTriggers)   { delete fTriggers;   fTriggers   = 0; } 
+    fRangeParam = 0;
+  }
+
   //==================================================================
   /** 
    * @{ 
@@ -318,7 +339,7 @@ struct dNdetaDrawer
       centTxt = Form("\n   Centrality: %d bins", nCent);
       for (Int_t i = 0; i <= nCent; i++) 
        centTxt.Append(Form("%c%d", i == 0 ? ' ' : ',', 
-                           fCentAxis->GetXbins()->At(i)));
+                           int(fCentAxis->GetXbins()->At(i))));
     }
     Info("FetchInformation", 
         "Initialized for\n"
@@ -410,18 +431,18 @@ struct dNdetaDrawer
   {
     if (!h) return;
     if (color < 0) return;
-    h->SetLineColor(color);
+    // h->SetLineColor(color);
     h->SetMarkerColor(color);
-    h->SetFillColor(color);
+    // h->SetFillColor(color);
   }
   //__________________________________________________________________
   void SetAttributes(TGraph* g, Int_t color)
   {
     if (!g) return;
     if (color < 0) return;
-    g->SetLineColor(color);
+    // g->SetLineColor(color);
     g->SetMarkerColor(color);
-    g->SetFillColor(color);
+    // g->SetFillColor(color);
   }
   //__________________________________________________________________
   void ModifyTitle(TNamed* h, const char* centTxt)
@@ -436,8 +457,9 @@ struct dNdetaDrawer
    * 
    * @param list       List 
    * @param name       Name 
-   * @param centLow    Low cut on centrality 
-   * @param centHigh   high cut on centrality 
+   * @param thisOther  Other graphs 
+   * @param color      Color 
+   * @param centTxt    Centrality text
    * @param max        On return, data maximum
    * @param rmax       On return, ratio maximum 
    * @param amax       On return, left-right maximum 
@@ -457,6 +479,7 @@ struct dNdetaDrawer
     TH1* dndetaSym   = 0;
     TH1* dndetaMCSym = 0;
     TH1* tracks      = FetchResult(list, "tracks");
+    if (tracks) tracks->SetTitle("ALICE Tracks");
     SetAttributes(dndeta,     color);
     SetAttributes(dndetaMC,   color+2);
     SetAttributes(dndetaTruth,color);
@@ -494,13 +517,16 @@ struct dNdetaDrawer
        SetAttributes(g, color);
        ModifyTitle(g, centTxt);
        if (!fOthers->GetListOfGraphs() || 
-           !fOthers->GetListOfGraphs()->FindObject(g->GetName()))
+           !fOthers->GetListOfGraphs()->FindObject(g->GetName())) {
+         max = TMath::Max(max,TMath::MaxElement(g->GetN(), g->GetY()));
          fOthers->Add(g);
+       }
       }
       // fOthers->Add(thisOther);
     }
     if (tracks) { 
-      if (!fRatios->GetHists()->FindObject(tracks->GetName()))
+      if (!fRatios->GetHists() || 
+         !fRatios->GetHists()->FindObject(tracks->GetName()))
        fRatios->Add(Ratio(dndeta, tracks, rmax));
     }
 
@@ -537,17 +563,18 @@ struct dNdetaDrawer
     else { 
       Double_t y11 = y1;
       y1 = (y11 > 0.0001 ? 0.4 : 0.2);
-      y2 = (y11 > 0.0001 ? y11 : 0.2);
+      y2 = (y11 > 0.0001 ? 0.2 : 0.3);
     }
     TCanvas* c = new TCanvas("Results", "Results", w, h);
     c->SetFillColor(0);
     c->SetBorderSize(0);
     c->SetBorderMode(0);
 
-#if 0
+#if 1
     Info("Plot", "y1=%f, y2=%f, y3=%f extra: %s %s", 
         y1, y2, y2, (fShowRatios ? "ratios" : ""), 
         (fShowLeftRight ? "right/left" : ""));
+    Info("Plot", "Maximum is %f", max);
 #endif
     PlotResults(max, y1);
     c->cd();
@@ -563,7 +590,7 @@ struct dNdetaDrawer
     Int_t   vMax = fVtxAxis->GetXmax();    
     TString trg(fTrigString->GetTitle());
     Int_t   nev  = 0;
-    if (fTriggers) nev = fTriggers->GetBinContent(fTriggers->GetNbinsX());
+    if (fTriggers) nev = fTriggers->GetBinContent(1);
     trg          = trg.Strip(TString::kBoth);
     TString base(Form("dndeta_%s_%s_%s_%c%02d%c%02dcm_%09dev",
                      fSysString->GetTitle(), 
@@ -580,12 +607,15 @@ struct dNdetaDrawer
   /** 
    * Build main legend 
    * 
-   * @param x1 
-   * @param y1 
-   * @param x2 
-   * @param y2 
+   * @param stack   Stack to include 
+   * @param mg      (optional) Multi graph to include 
+   * @param x1      Lower X coordinate in the range [0,1]
+   * @param y1      Lower Y coordinate in the range [0,1]
+   * @param x2      Upper X coordinate in the range [0,1]
+   * @param y2             Upper Y coordinate in the range [0,1]
    */
-  void BuildLegend(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
+  void BuildLegend(THStack* stack, TMultiGraph* mg, 
+                  Double_t x1, Double_t y1, Double_t x2, Double_t y2)
   {
     TLegend* l = new TLegend(x1,y1,x2,y2);
     l->SetNColumns(2);
@@ -594,18 +624,20 @@ struct dNdetaDrawer
     l->SetBorderSize(0);
     l->SetTextFont(132);
 
-    TIter    next(fResults->GetHists());
+    TIter    next(stack->GetHists());
     TObject* hist = 0;
     while ((hist = next())) { 
       TString n(hist->GetTitle());
       if (n.Contains("mirrored")) continue;
       l->AddEntry(hist, hist->GetTitle(), "pl");
     }
-    TIter nexto(fOthers->GetListOfGraphs());
-    while ((hist = nexto())) { 
-      TString n(hist->GetTitle());
-      if (n.Contains("mirrored")) continue;
-      l->AddEntry(hist, hist->GetTitle(), "pl");
+    if (mg) {
+      TIter nexto(mg->GetListOfGraphs());
+      while ((hist = nexto())) { 
+       TString n(hist->GetTitle());
+       if (n.Contains("mirrored")) continue;
+       l->AddEntry(hist, hist->GetTitle(), "pl");
+      }
     }
     TLegendEntry* d1 = l->AddEntry("d1", "Data", "lp");
     d1->SetLineColor(kBlack);
@@ -661,7 +693,7 @@ struct dNdetaDrawer
     }
 
     // Make a legend in the main result pad
-    BuildLegend(.15,p1->GetBottomMargin()+.01,.90,.35);
+    BuildLegend(fResults, fOthers, .15,p1->GetBottomMargin()+.01,.90,.35);
 #if 0
     TLegend* l = p1->BuildLegend(.15,p1->GetBottomMargin()+.01,.90,.35);
     l->SetNColumns(2);
@@ -672,6 +704,7 @@ struct dNdetaDrawer
 #endif
 
     // Put a title on top
+    fTitle.ReplaceAll("@", " ");
     TLatex* tit = new TLatex(0.10, 0.95, fTitle.Data());
     tit->SetNDC();
     tit->SetTextFont(132);
@@ -695,7 +728,7 @@ struct dNdetaDrawer
 
     // Put number of accepted events on the plot
     Int_t nev = 0;
-    if (fTriggers) nev = fTriggers->GetBinContent(fTriggers->GetNbinsX());
+    if (fTriggers) nev = fTriggers->GetBinContent(1);
     TLatex* et = new TLatex(.93, .83, Form("%d events", nev));
     et->SetNDC();
     et->SetTextFont(132);
@@ -771,6 +804,9 @@ struct dNdetaDrawer
 
     
     // Make a legend
+    BuildLegend(fRatios, 0, .15,p2->GetBottomMargin()+.01,.9,
+               isBottom ? .6 : .4);
+#if 0
     TLegend* l2 = p2->BuildLegend(.15,p2->GetBottomMargin()+.01,.9,
                                  isBottom ? .6 : .4);
     l2->SetNColumns(2);
@@ -778,7 +814,7 @@ struct dNdetaDrawer
     l2->SetFillStyle(0);
     l2->SetBorderSize(0);
     l2->SetTextFont(132);
-
+#endif
     // Make a nice band from 0.9 to 1.1
     TGraphErrors* band = new TGraphErrors(2);
     band->SetPoint(0, fResults->GetXaxis()->GetXmin(), 1);
@@ -830,16 +866,6 @@ struct dNdetaDrawer
     p3->Draw();
     p3->cd();
 
-    TH1* dummy = 0;
-    if (fLeftRight->GetHists()->GetEntries() == 1) { 
-      // Add dummy histogram
-      dummy = new TH1F("dummy","", 10, -6, 6);
-      dummy->SetLineColor(0);
-      dummy->SetFillColor(0);
-      dummy->SetMarkerColor(0);
-      fLeftRight->Add(dummy);
-    }
-
     // Fix up axis
     FixAxis(fLeftRight, 1/yd/1.7, "Right/Left", 4);
 
@@ -856,19 +882,7 @@ struct dNdetaDrawer
     l2->SetFillStyle(0);
     l2->SetBorderSize(0);
     l2->SetTextFont(132);
-#ifndef __CINT__
-    if (dummy) {
-      TList* prims = l2->GetListOfPrimitives();
-      TIter next(prims);
-      TLegendEntry* o = 0;
-      while ((o = static_cast<TLegendEntry*>(next()))) { 
-       TString lbl(o->GetLabel());
-       if (lbl != "dummy") continue; 
-       prims->Remove(o);
-       break;
-      }
-    }
-#endif
+
     // Make a nice band from 0.9 to 1.1
     TGraphErrors* band = new TGraphErrors(2);
     band->SetPoint(0, fResults->GetXaxis()->GetXmin(), 1);
@@ -978,7 +992,6 @@ struct dNdetaDrawer
    * Rebin a histogram 
    * 
    * @param h     Histogram to rebin
-   * @param rebin Rebinning factor 
    * 
    * @return 
    */
@@ -1206,31 +1219,57 @@ struct dNdetaDrawer
   /** 
    * Make the ratio of h1 to h2 
    * 
-   * @param h1 First histogram (numerator) 
-   * @param h2 Second histogram (denominator)
+   * @param o1  First object (numerator) 
+   * @param o2  Second object (denominator)
+   * @param max Maximum diviation from 1 
    * 
-   * @return h1 / h2
+   * @return o1 / o2
    */
   TH1* Ratio(const TObject* o1, const TObject* o2, Double_t& max) const
   {
+    TH1* r = 0;
     const TH1* h1 = dynamic_cast<const TH1*>(o1); 
     if (h1) { 
+      // Info("Ratio", "First is a TH1");
       const TH1* h2 = dynamic_cast<const TH1*>(o2); 
-      if (h2) return Ratio(h1,h2,max);
-      
-      const TGraph* g2 = dynamic_cast<const TGraph*>(o2);
-      if (g2) return Ratio(h1,g2,max);      
+      if (h2) { 
+       // Info("Ratio", "Second is a TH1");
+       r = RatioHH(h1,h2,max);
+      }
+      else {
+       const TGraph* g2 = dynamic_cast<const TGraph*>(o2);
+       if (g2) { 
+         // Info("Ratio", "Second os a TGraph");
+         r = RatioHG(h1,g2,max);      
+       }
+      }
     }
-    
-    const TGraphAsymmErrors* g1 = dynamic_cast<const TGraphAsymmErrors*>(o1);
-    if (g1) { 
-      const TGraphAsymmErrors* g2 = dynamic_cast<const TGraphAsymmErrors*>(o2);
-      if (g2) return Ratio(g1, g2, max);
+    else {
+      const TGraphAsymmErrors* g1 = dynamic_cast<const TGraphAsymmErrors*>(o1);
+      if (g1) { 
+       // Info("Ratio", "First is a TGraphAsymmErrors");
+       const TGraphAsymmErrors* g2 = 
+         dynamic_cast<const TGraphAsymmErrors*>(o2);
+       if (g2) {
+         // Info("Ratio", "Second is a TGraphAsymmErrors");
+         r = RatioGG(g1, g2, max);
+       }
+      }
     }
-
-    Warning("Ratio", "Don't know how to divide a %s (%s) with a %s (%s)", 
-           o1->ClassName(), o1->GetName(), o2->ClassName(), o2->GetName());
-    return 0;
+    if (!r) {
+      Warning("Ratio", "Don't know how to divide a %s (%s) with a %s (%s)", 
+             o1->ClassName(), o1->GetName(), o2->ClassName(), o2->GetName());
+      return 0;
+    }
+    // Check that the histogram isn't empty
+    if (r->GetEntries() <= 0) { 
+      delete r; 
+      r = 0; 
+    }
+    // for (Int_t bin = 1; bin <= r->GetNbinsX(); bin++) 
+    //   if (r->GetBinContent(bin) != 0) return r;
+      
+    return r;
   }
   //__________________________________________________________________
   /** 
@@ -1239,10 +1278,11 @@ struct dNdetaDrawer
    * 
    * @param h  Numerator 
    * @param g  Divisor 
+   * @param max Maximum diviation from 1 
    * 
    * @return h/g 
    */
-  TH1* Ratio(const TH1* h, const TGraph* g, Double_t& max) const 
+  TH1* RatioHG(const TH1* h, const TGraph* g, Double_t& max) const 
   {
     if (!h || !g) return 0;
 
@@ -1250,9 +1290,12 @@ struct dNdetaDrawer
     ret->SetName(Form("%s_over_%s", h->GetName(), g->GetName()));
     ret->SetTitle(Form("%s / %s", h->GetTitle(), g->GetTitle()));
     ret->Reset();
-    ret->SetMarkerStyle(g->GetMarkerStyle());
-    ret->SetMarkerColor(h->GetMarkerColor());
-    ret->SetMarkerSize(0.9*g->GetMarkerSize());
+    ret->SetMarkerStyle(h->GetMarkerStyle());
+    ret->SetMarkerColor(g->GetMarkerColor());
+    ret->SetMarkerSize(0.9*h->GetMarkerSize());
+    // ret->SetMarkerStyle(g->GetMarkerStyle());
+    // ret->SetMarkerColor(h->GetMarkerColor());
+    // ret->SetMarkerSize(0.9*g->GetMarkerSize());
     ret->SetDirectory(0);
     Double_t xlow  = g->GetX()[0];
     Double_t xhigh = g->GetX()[g->GetN()-1];
@@ -1271,11 +1314,7 @@ struct dNdetaDrawer
       ret->SetBinContent(i, c / f);
       ret->SetBinError(i, h->GetBinError(i) / f);
     }
-    if (ret->GetEntries() <= 0) { 
-      delete ret; 
-      ret = 0; 
-    }
-    else 
+    if (ret->GetEntries() > 0) 
       max = TMath::Max(RatioMax(ret), max);
     return ret;
   }
@@ -1285,10 +1324,11 @@ struct dNdetaDrawer
    * 
    * @param h1 First histogram (numerator) 
    * @param h2 Second histogram (denominator)
+   * @param max Maximum diviation from 1 
    * 
    * @return h1 / h2
    */
-  TH1* Ratio(const TH1* h1, const TH1* h2, Double_t& max) const
+  TH1* RatioHH(const TH1* h1, const TH1* h2, Double_t& max) const
   {
     if (!h1 || !h2) return 0;
     TH1* t1 = static_cast<TH1*>(h1->Clone(Form("%s_%s", 
@@ -1296,8 +1336,11 @@ struct dNdetaDrawer
                                               h2->GetName())));
     t1->SetTitle(Form("%s / %s", h1->GetTitle(), h2->GetTitle()));
     t1->Divide(h2);
-    t1->SetMarkerColor(h1->GetMarkerColor());
-    t1->SetMarkerStyle(h2->GetMarkerStyle());
+    // t1->SetMarkerColor(h1->GetMarkerColor());
+    // t1->SetMarkerStyle(h2->GetMarkerStyle());
+    t1->SetMarkerColor(h2->GetMarkerColor());
+    t1->SetMarkerStyle(h1->GetMarkerStyle());
+    t1->SetMarkerSize(0.9*h1->GetMarkerSize());
     t1->SetDirectory(0);
     max = TMath::Max(RatioMax(t1), max);
     return t1;
@@ -1308,11 +1351,12 @@ struct dNdetaDrawer
    * 
    * @param g1 Numerator 
    * @param g2 Denominator
+   * @param max Maximum diviation from 1 
    * 
    * @return g1 / g2 in a histogram 
    */
-  TH1* Ratio(const TGraphAsymmErrors* g1, 
-            const TGraphAsymmErrors* g2, Double_t& max) const
+  TH1* RatioGG(const TGraphAsymmErrors* g1, 
+              const TGraphAsymmErrors* g2, Double_t& max) const
   {
     Int_t    nBins = g1->GetN();
     TArrayF  bins(nBins+1);
@@ -1336,9 +1380,12 @@ struct dNdetaDrawer
     else {
       h = new TH1F(name.Data(), title.Data(), nBins, bins.fArray);
     }
-    h->SetMarkerStyle(g2->GetMarkerStyle());
-    h->SetMarkerColor(g1->GetMarkerColor());
-    h->SetMarkerSize(0.9*g2->GetMarkerSize());
+    h->SetMarkerStyle(g1->GetMarkerStyle());
+    h->SetMarkerColor(g2->GetMarkerColor());
+    h->SetMarkerSize(0.9*g1->GetMarkerSize());
+    // h->SetMarkerStyle(g2->GetMarkerStyle());
+    // h->SetMarkerColor(g1->GetMarkerColor());
+    // h->SetMarkerSize(0.9*g2->GetMarkerSize());
     h->SetDirectory(0);
 
     Double_t low  = g2->GetX()[0];
@@ -1525,6 +1572,22 @@ void RangeExec(dNdetaDrawer::RangeParam* p)
 }
 
 //=== Steering function ==============================================  
+/** 
+ * Draw @f$ dN/d\eta@f$ 
+ * 
+ * @param filename  File name 
+ * @param flags     Flags 
+ * @param title     Title 
+ * @param rebin     Rebinning factor 
+ * @param cutEdges  Whether to cut edges when rebinning
+ * @param sNN       (optional) Collision energy [GeV]
+ * @param sys       (optional) Collision system (1: pp, 2: PbPb)
+ * @param trg       (optional) Trigger (1: INEL, 2: INEL>0, 4: NSD)   
+ * @param vzMin     Least @f$ v_z@f$
+ * @param vzMax     Largest @f$ v_z@f$
+ *
+ * @ingroup pwg2_forward_dndeta
+ */
 void
 DrawdNdeta(const char* filename="forward_dndeta.root", 
           Int_t       flags=0xf,
@@ -1533,11 +1596,12 @@ DrawdNdeta(const char* filename="forward_dndeta.root",
           Bool_t      cutEdges=false,
           UShort_t    sNN=0, 
           UShort_t    sys=0,
-          UShort_t    trg=1,
+          UShort_t    trg=0,
           Float_t     vzMin=999, 
           Float_t     vzMax=-999)
 {
-  dNdetaDrawer d;
+  dNdetaDrawer* pd = new dNdetaDrawer;
+  dNdetaDrawer& d = *pd;
   d.SetRebin(rebin);
   d.SetCutEdges(cutEdges);
   d.SetTitle(title);
index 686323f173342babbff8cdbcc9ee4c3afe41b084..ad3af9753118526fd4344ca7ed449a87a7e45430 100644 (file)
@@ -1,3 +1,13 @@
+/**
+ * @file   ForwardAODConfig.C
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 13:56:02 2011
+ * 
+ * @brief  
+ * 
+ * @ingroup pwg2_forward_scripts_tasks
+ * 
+ */
 /**
  * Configuration script for forward multiplicity task.  
  *
@@ -5,6 +15,7 @@
  * directory up-front in your ROOT macro path, and edit it to suit your
  * needs.
  * 
+ * @ingroup pwg2_forward_aod
  */
 void
 ForwardAODConfig(AliForwardMultiplicityBase* task)
index a67c03c621f539d8d51f13df18978ba7912e8f35..0a9672b67af2d4e16ff72dd8b123ba8eb1351f2d 100644 (file)
@@ -1,24 +1,32 @@
+/** 
+ * @defgroup pwg2_forward_scripts_makers Maker scripts 
+ * @ingroup pwg2_forward_scripts
+ */
 /**
- * @file 
+ * @file   MakeAOD.C
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 09:40:10 2011
  * 
- * @ingroup pwg2_forward_scripts
+ * @brief  Run first pass of the analysis - AOD generation
+ * 
+ * @ingroup pwg2_forward_scripts_makers
  */
-
 /** 
  * Run first pass of the analysis - that is read in ESD and produce AOD
  * 
- * @param esddir    ESD input directory. Any file matching the pattern 
- *                  *AliESDs*.root are added to the chain 
- * @param nEvents   Number of events to process.  If 0 or less, then 
- *                  all events are analysed
- * @param proof     Run in proof mode 
- * @param mc        Run over MC data
+ * @param esddir     ESD input directory. Any file matching the pattern 
+ *                   *AliESDs*.root are added to the chain 
+ * @param nEvents    Number of events to process.  If 0 or less, then 
+ *                   all events are analysed
+ * @param proof      If larger then 1, run in PROOF-Lite mode with this 
+ *                   many number of workers. 
+ * @param mc         Data is assumed to be from simulations  
+ * @param centrality Whether to use centrality or not 
  *
  * If PROOF mode is selected, then Terminate will be run on the master node 
  * in any case. 
- * 
  *
- * @ingroup pwg2_forward_scripts
+ * @ingroup pwg2_forward_aod
  */
 void MakeAOD(const char* esddir, 
             Int_t       nEvents=-1, 
@@ -56,33 +64,6 @@ void MakeAOD(const char* esddir,
 
   // --- ESD input handler -------------------------------------------
   AliESDInputHandler *esdHandler = new AliESDInputHandler();
-  esdHandler->SetInactiveBranches(// "AliESDRun " 
-                                 // "AliESDHeader "
-                                 // "AliESDZDC "
-                                 // "AliESDFMD "
-                                 // "AliESDVZERO " 
-                                 "AliESDTZERO " 
-                                 "TPCVertex " 
-                                 //"SPDVertex "
-                                 // "PrimaryVertex "
-                                 // "AliMultiplicity "
-                                 "PHOSTrigger "
-                                 "EMCALTrigger "
-                                 //"SPDPileupVertices " 
-                                 //"TrkPileupVertices " 
-                                 // "Tracks "
-                                 "MuonTracks " 
-                                 "PmdTracks "
-                                 "TrdTracks "
-                                 "V0s " 
-                                 "Cascades " 
-                                 "Kinks " 
-                                 "CaloClusters "
-                                 "EMCALLCells "
-                                 "PHOSCells "
-                                 "AliRawDataErrorLogs "
-                                 "ALIESDCACORDE " 
-                                 "HLTGlobalTrigger");
   mgr->SetInputEventHandler(esdHandler);      
        
   // --- Monte Carlo handler -----------------------------------------
@@ -101,8 +82,7 @@ void MakeAOD(const char* esddir,
   // --- Add tasks ---------------------------------------------------
   // Physics selection 
   gROOT->LoadMacro("AddTaskPhysicsSelection.C");
-  // test HHD
-  AddTaskPhysicsSelection(mc, kTRUE, kTRUE);
+  AddTaskPhysicsSelection(mc, kTRUE, kFALSE);
 
 #if 0
   // Centrality 
@@ -114,13 +94,11 @@ void MakeAOD(const char* esddir,
 #endif
   if(centrality) {
     gROOT->LoadMacro("AddTaskCentrality.C");
-    AliCentralitySelectionTask* centtask = AddTaskCentrality();
-    if(mc)
-      centtask->SetMCInput();
+    AddTaskCentrality();
   }
   // FMD 
-  gROOT->LoadMacro("AddTaskFMD.C");
-  AddTaskFMD(mc);
+  gROOT->LoadMacro("AddTaskForwardMult.C");
+  AddTaskForwardMult(mc);
 
   // Central 
   gROOT->LoadMacro("AddTaskCentral.C");
index 88004b2cda034876106a6de3a48933a75c6297f5..f721a4c50adfeee0b9bcfb2eb3449cefd927d89e 100644 (file)
@@ -1,13 +1,18 @@
 /**
- * @file 
+ * @file   MakeELossFits.C
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 14:08:14 2011
  * 
- * @ingroup pwg2_forward_scripts
+ * @brief  
+ * 
+ * 
+ * @ingroup pwg2_forward_eloss
  */
 /** 
  * Run a pass on ESD data to produce the energ loss fits 
  * 
  *
- * @ingroup pwg2_forward_scripts
+ * @ingroup pwg2_forward_eloss
  */
 void MakeELossFits(const char* esddir, 
                   Int_t       nEvents=1000, 
index a85d4132f1a38939a4bbd6eec291ba6172978c1e..f0757fc54ec780fadc9c4056525e13d558da47f1 100644 (file)
@@ -1,3 +1,13 @@
+/**
+ * @file   MakeFlow.C
+ * @author Alexander Hansen 
+ * @date   Wed Mar 23 12:11:33 2011
+ * 
+ * @brief  
+ * 
+ * @ingroup pwg2_forward_scripts_makers
+ * 
+ */
 /**
  * Script to analyse AOD input for flow
  * 
@@ -10,7 +20,8 @@
  * 
  * @par Outputs: 
  * - 
- * 
+ *
+ * @ingroup pwg2_forward_flow
  */
 void MakeFlow(TString data      = "", 
              Int_t   nevents   = 0, 
index bd108089e6da1f4729d92d7b20f38c523c6a582c..6651c0d0505c80334ed6f18603df1159e21be2f5 100644 (file)
@@ -1,29 +1,34 @@
 /**
- * @file 
+ * @file   MakedNdeta.C
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 09:41:56 2011
  * 
- * @ingroup pwg2_forward_scripts
+ * @brief  Run second pass analysis - make @f$ dN/d\eta@f$
+ * 
+ * @ingroup pwg2_forward_scripts_makers
  */
-
 /** 
- * Run first pass of the analysis - that is read in ESD and produce AOD
- * 
- * @param esddir    ESD input directory. Any file matching the pattern 
- *                  *AliESDs*.root are added to the chain 
- * @param nEvents   Number of events to process.  If 0 or less, then 
- *                  all events are analysed
- * @param proof     Run in proof mode 
- * @param mc        Run over MC data
- *
- * If PROOF mode is selected, then Terminate will be run on the master node 
- * in any case. 
+ * Run second pass analysis - make @f$ dN/d\eta@f$
  * 
+ * @param aoddir     AOD input directory. Any file matching the pattern 
+ *                   *AliAODs*.root are added to the chain 
+ * @param nEvents    Number of events to process.  If 0 or less, then 
+ *                   all events are analysed
+ * @param trig       Trigger to use 
+ * @param useCent    Whether to use centrality or not 
+ * @param scheme     Normalisation scheme 
+ * @param vzMin      Least @f$ v_z@f$ (centimeter)
+ * @param vzMax      Largest @f$ v_z@f$ (centimeter)
+ * @param proof      If larger then 1, run in PROOF-Lite mode with this 
+ *                   many number of workers. 
  *
- * @ingroup pwg2_forward_scripts
+ * @ingroup pwg2_forward_dndeta
  */
 void MakedNdeta(const char* aoddir   = ".", 
                Int_t       nEvents  = -1, 
                const char* trig     = "INEL",
                Bool_t      useCent  = false,
+               const char* scheme   = 0,
                Double_t    vzMin    = -10,
                Double_t    vzMax    = +10,
                Int_t       proof    = 0)
@@ -60,10 +65,10 @@ void MakedNdeta(const char* aoddir   = ".",
   // --- Add tasks ---------------------------------------------------
   // Forward 
   gROOT->LoadMacro("AddTaskForwarddNdeta.C");
-  AddTaskForwarddNdeta(trig, vzMin, vzMax, useCent, true);
+  AddTaskForwarddNdeta(trig, vzMin, vzMax, useCent, scheme, true);
   // Central
   gROOT->LoadMacro("AddTaskCentraldNdeta.C");
-  AddTaskCentraldNdeta(trig, vzMin, vzMax, useCent);
+  AddTaskCentraldNdeta(trig, vzMin, vzMax, useCent, scheme);
 
   
   // --- Run the analysis --------------------------------------------
index f7fa94475282ffb8961c3a4974521e03c1e42199..915c3c0d1b098c76005e9fc5e8b9b035ce2c312d 100644 (file)
@@ -1,7 +1,13 @@
+//____________________________________________________________________
+/**
+ * @defgroup pwg2_forward_otherdata  External data 
+ *
+ * @ingroup pwg2_forward_scripts
+ */
 /**
  * @file 
  * 
- * @ingroup pwg2_forward_scripts
+ * @ingroup pwg2_forward_script_otherdata
  */
 #include <TGraphAsymmErrors.h>
 #include <TMultiGraph.h>
 #include <TCanvas.h>
 #include <TLegend.h>
 
-//____________________________________________________________________
-/**
- * @defgroup pwg2_forward_otherdata  External data 
- *
- * @ingroup pwg2_forward_scripts
- */
 //____________________________________________________________________
 /**
  * Values used 
  * @ingroup pwg2_forward_otherdata 
  */
 enum { 
+  UA5, 
+  CMS, 
+  ALICE, 
+  INEL, 
+  INELGt0, 
+  NSD
+};
+enum { 
+  /** Style used for UA5 data */
+  UA5Style   = 21, 
+  /** Style used for CMS data */
+  CMSStyle   = 29, 
+  /** Style used for ALICE published data */
+  ALICEStyle = 27,
   /** Color used for UA5 data */
   UA5Color   = kBlue+1,
   /** Color used for CMS data */
   CMSColor   = kGreen+1,
   /** Color used for ALICE data */
   ALICEColor = kMagenta+1,
+}; 
+enum { 
   /** Marker style INEL data */
-  INELStyle  = 22,
+  INELStyle   = 22,
   /** Marker style INEL>0 data */
-  INELGtStyle= 29,
+  INELGt0Style= 29,
   /** Marker style NSD data */
-  NSDStyle   = 23,
-  /** Colour offset for mirror data */
+  NSDStyle    = 23,
+  /** Color used for UA5 data */
+  INELColor   = kBlue+1,
+  /** Color used for CMS data */
+  INELGt0Color = kGreen+1,
+  /** Color used for ALICE data */
+  NSDColor     = kMagenta+1
+};
+enum {
+  /** Style offset for mirror data */
   MirrorOff  = 4
 };
 
 //____________________________________________________________________
 /** 
- * Set graph attributes 
+ * Set graph attributes based on trigger type and experiment. 
  * 
  * @param g        Graph
- * @param marker   Marker style 
- * @param color    Marker and line color
+ * @param trig     Trigger (INEL, INEL>0, NSD)
+ * @param exp      Experiment 
+ * @param mirror   True if mirrored data 
  * @param name     Name of graph 
  * @param title    Title of graph 
  * 
  * @ingroup pwg2_forward_otherdata
  */
 void
-SetGraphAttributes(TGraph* g, Int_t marker, Int_t color,
+SetGraphAttributes(TGraph* g, Int_t trig, Int_t exp, bool mirror,
                   const Char_t* name, const Char_t* title)
 {
+  Int_t color = 0;
+  switch (exp) { 
+  case UA5:   color = UA5Color;   break;
+  case CMS:   color = CMSColor;   break;
+  case ALICE: color = ALICEColor; break;
+  }
+  Int_t style = 0;
+  switch (exp) { 
+  case UA5:   style = UA5Style;   break;
+  case CMS:   style = CMSStyle;   break;
+  case ALICE: style = ALICEStyle; break;
+  }
+  Float_t size = g->GetMarkerSize();
+  switch (style) {
+  case 21: 
+  case 25: size *= 0.8; break;
+  case 27: size *= 1.4; break;
+  }
+    
+  if (mirror) style += MirrorOff;
+
   g->SetName(name);
   g->SetTitle(title);
-  g->SetMarkerStyle(marker);
+  g->SetMarkerStyle(style);
+  g->SetMarkerSize(size);
   g->SetMarkerColor(color);
   g->SetLineColor(color);
   g->SetFillColor(0);
@@ -113,8 +160,8 @@ TGraphAsymmErrors* UA5Nsd(Bool_t mirrored=false)
 
   TGraphAsymmErrors* g  = new TGraphAsymmErrors(19,x, y, exm, exp, eym, eyp);
   TGraphAsymmErrors* gm = new TGraphAsymmErrors(19,xm,ym,exmm,expm,eymm,eypm);
-  SetGraphAttributes(g,  NSDStyle, UA5Color,"ua5_nsd",         "UA5 NSD");
-  SetGraphAttributes(gm, NSDStyle+MirrorOff, UA5Color,"ua5_nsd_mirrored",
+  SetGraphAttributes(g,  NSD, UA5, false,"ua5_nsd",         "UA5 NSD");
+  SetGraphAttributes(gm, NSD, UA5, true,"ua5_nsd_mirrored",
                     "UA5 NSD (mirrored)");
 
   return (mirrored ? gm : g);
@@ -166,8 +213,8 @@ TGraphAsymmErrors* UA5Inel(Bool_t mirrored=false)
   TGraphAsymmErrors* g  = new TGraphAsymmErrors(np,x, y, exm, exp, eym, eyp);
   TGraphAsymmErrors* gm = new TGraphAsymmErrors(np,xm,ym,exmm,expm,eymm,eypm);
 
-  SetGraphAttributes(g,  INELStyle, UA5Color, "ua5_inel", "UA5 INEL");
-  SetGraphAttributes(gm, INELStyle+MirrorOff, UA5Color, "ua5_inel_mirrored", 
+  SetGraphAttributes(g,  INEL, UA5, false, "ua5_inel", "UA5 INEL");
+  SetGraphAttributes(gm, INEL, UA5, true, "ua5_inel_mirrored", 
                     "UA5 INEL (mirrored)");
   
   return (mirrored ? gm : g);
@@ -215,7 +262,7 @@ TGraphAsymmErrors* AliceCentralInel900()
     eyp[i] += 0.02;
   }
   g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, INELStyle, ALICEColor, "alice_inel", 
+  SetGraphAttributes(g, INEL, ALICE, false, "alice_inel", 
                     "ALICE INEL (publ.)");
 
   return g;
@@ -261,7 +308,7 @@ TGraphAsymmErrors* AliceCentralInelGt900()
   }
 
   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, INELGtStyle, ALICEColor, "alice_inelgt900", 
+  SetGraphAttributes(g, INELGt0, ALICE, false, "alice_inelgt900", 
                     "ALICE INEL>0 (publ.)");
   return g;
 
@@ -303,7 +350,7 @@ TGraphAsymmErrors* AliceCentralInelGt2360()
   }
 
   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, INELGtStyle, ALICEColor, "alice_inelgt2360", 
+  SetGraphAttributes(g, INELGt0, ALICE, false, "alice_inelgt2360", 
                     "ALICE INEL>0 (publ.)");
   return g;
 }
@@ -345,7 +392,7 @@ TGraphAsymmErrors* AliceCentralInelGt7000()
   }
 
   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, INELGtStyle, ALICEColor, "alice_inelgt7000", 
+  SetGraphAttributes(g, INELGt0, ALICE, false, "alice_inelgt7000", 
                     "ALICE INEL>0 (publ.)");
   return g;
 }
@@ -394,7 +441,7 @@ TGraphAsymmErrors* AliceCentralNsd900()
   }
 
   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, NSDStyle, ALICEColor, "alice_nsd", "ALICE NSD (publ.)");
+  SetGraphAttributes(g, NSD, ALICE, false, "alice_nsd", "ALICE NSD (publ.)");
 
   return g;
 }
@@ -443,7 +490,7 @@ TGraphAsymmErrors* AliceCentralInel2360()
   }
 
   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, NSDStyle, ALICEColor, "alice_inel2360", 
+  SetGraphAttributes(g, NSD, ALICE, false, "alice_inel2360", 
                     "ALICE INEL (publ.)");
   return g;
 }
@@ -493,7 +540,7 @@ TGraphAsymmErrors* AliceCentralNsd2360()
   }
 
   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, NSDStyle, ALICEColor, "alice_nsd2360", 
+  SetGraphAttributes(g, NSD, ALICE, false, "alice_nsd2360", 
                     "ALICE NSD (publ.)");
   return g;
 }
@@ -522,7 +569,7 @@ TGraphAsymmErrors* CMSNsd900()
   double eyp[] = { 0.13, 0.14, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.14, 0.13 };
   const int np = 10;
   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, NSDStyle, CMSColor, "cms_nsd900", "CMS NSD");
+  SetGraphAttributes(g, NSD, CMS, false, "cms_nsd900", "CMS NSD");
 
   return g;
 }
@@ -550,7 +597,7 @@ TGraphAsymmErrors* CMSNsd2360()
   double eyp[] = { 0.17, 0.18, 0.17, 0.17, 0.16, 0.16, 0.17, 0.17, 0.18, 0.17 };
   const int np = 10;
   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, NSDStyle, CMSColor, "cms_nsd2360", "CMS NSD");
+  SetGraphAttributes(g, NSD, CMS, false, "cms_nsd2360", "CMS NSD");
   return g;
 }
 
@@ -577,7 +624,7 @@ TGraphAsymmErrors* CMSNsd7000()
   double eyp[] = { 0.25, 0.25, 0.24, 0.24, 0.23, 0.23, 0.24, 0.24, 0.25, 0.25 };
   const int np = 10;
   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, NSDStyle, CMSColor, "cms_nsd7000", "CMS NSD");
+  SetGraphAttributes(g, NSD, CMS, false, "cms_nsd7000", "CMS NSD");
   return g;
 }
 
@@ -591,6 +638,9 @@ TGraphAsymmErrors* CMSNsd7000()
  *   - 0x1 INEL 
  *   - 0x2 INEL>0
  *   - 0x4 NSD 
+ * @param centLow   Low centrality cut (only for PbPB)
+ * @param centHigh  High centrality cut (only for PbPB)
+ * @param aliceOnly Only return other ALICE data
  * 
  * @return A multi graph with the selected data. 
  * 
@@ -697,8 +747,15 @@ GetData(UShort_t sys,
  * Plot external data for a given selection of energy and trigger type
  * (see GetData)
  * 
- * @param energy  Energy in GeV
- * @param type    Trigger type bit mask 
+ * @param sys    Collision system (1: pp, 2: PbPb)
+ * @param energy Energy in GeV (900, 2360, 7000)
+ * @param type   Bit pattern of trigger type 
+ *   - 0x1 INEL 
+ *   - 0x2 INEL>0
+ *   - 0x4 NSD 
+ * @param centLow   Low centrality cut (only for PbPB)
+ * @param centHigh  High centrality cut (only for PbPB)
+ * @param aliceOnly Only return other ALICE data
  * 
  * @ingroup pwg2_forward_otherdata
  */
index 68c5abd3c14e440a7e2332d6a06c68f3e111abd9..fbe0796a6f92a338516b6112dfe8cad7a6b278d1 100755 (executable)
@@ -19,6 +19,7 @@ others=0
 published=1
 ratios=1
 asymm=1 
+scheme="full"
 dopass1=0
 dopass2=0
 dopass3=0
@@ -57,6 +58,8 @@ Options:
        -J,--show-published     Show ALICE published data   ($published)
        -R,--show-ratios        Show ratios to other data   ($ratios)
        -Z,--show-asymmetry     Show asymmetry              ($asymm)
+       -S,--scheme SCHEME      Normalisation scheme        ($scheme)
+       -T,--title STRING       Title on plots              ($tit)
 
 TYPE is a comma or space separated list of 
  
@@ -64,6 +67,16 @@ TYPE is a comma or space separated list of
   INEL>0      As above + N_ch > 0 in -0.5<eta<+0.5
   NSD         Non-single diffractive ((VOA&VOC)|N_ch > 5 -1.9<eta<+1.9)
 
+SCHEME is a comma or space separated list of 
+
+  NONE          No event-level normalization except trivial one 
+  EVENTLEVEL    Event-level normalization 
+  ALTEVENTLEVEL Event-level normalization (alternative version)
+  BACKGROUND    Not implemented yet 
+  SHAPE         Shape correction 
+  FULL          Same as EVENTLEVEL,BACKGROUND,SHAPE
+  ALTFULL       Same as ALTEVENTLEVEL,BACKGROUND,SHAPE
+
 If NWORKERS is 0, then the analysis will be run in local mode. 
 EOF
 }
@@ -120,6 +133,8 @@ while test $# -gt 0 ; do
        -J|--show-published)  published=`toggle $published`     ;;
        -R|--show-ratios)     ratios=`toggle $ratios`   ;;
        -Z|--show-asymmetry)  asymm=`toggle $asymm`     ;;
+       -S|--scheme)          scheme=`echo $2 | tr ' ' ','` ; shift ;;
+       -T|--title)           tit=$2 ; shift ;; 
        -t|--type)           
            #if test "x$type" = "x" ; then type=$2 ; else type="$type|$2"; fi
            type=$2
@@ -175,7 +190,7 @@ fi
 if test $dopass2 -gt 0 ; then
     rotate ${output2}
 
-    args=(\(\".\",$nev,\"$type\",$cent,$vzmin,$vzmax,$proof\))
+    args=(\(\".\",$nev,\"$type\",$cent,\"$scheme\",$vzmin,$vzmax,$proof\))
     if test "x$pass1" = "xMakeELossFits.C" ; then 
        args=(\(\"${output1}\"\))
     fi
@@ -200,7 +215,7 @@ if test $dopass3 -gt 0 ; then
     if test $ratios    -gt 0 ; then let flags=$(($flags|0x4)); fi
     if test $asymm     -gt 0 ; then let flags=$(($flags|0x8)); fi
 
-    args=(\(\"${output2}\"\,${flags},\"\",$rebin \))
+    args=(\(\"${output2}\"\,${flags},\"$tit\",$rebin \))
     if test "x$pass1" = "xMakeELossFits.C" ; then 
        args=(\(\"${output1}\"\))
     fi
index c3f1c6f12f6d09af3ec7694a3e8cb5c47c484660..812b4a8fbf035fcc876c4f6f8b3611236047034e 100644 (file)
@@ -1,3 +1,14 @@
+/**
+ * @file   TrainSetup.C
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date   Wed Mar 23 12:12:00 2011
+ * 
+ * @brief  
+ * 
+ * @ingroup pwg2_forward_scripts_makers
+ * 
+ */
+
 #ifndef __CINT__
 #include <fstream>
 
@@ -32,32 +43,130 @@ class AliAnalysisManager;
 #endif
 
 //====================================================================
+/** 
+ * Generic set-up of an analysis train using the grid-handler (AliEn plugin). 
+ * 
+ * Users should define a class that derives from this.  The class
+ * should implement the member function CreateTasks to add needed
+ * tasks to the train
+ * 
+ * @code 
+ * // MyTrain.C 
+ * class MyTrain : public TrainSetup
+ * {
+ * public:
+ *   MyTrain(Bool_t   dateTime = false, 
+ *           UShort_t year     = 0, 
+ *           UShort_t month    = 0, 
+ *           UShort_t day      = 0, 
+ *           UShort_t hour     = 0, 
+ *           UShort_t min      = 0) 
+ *     : TrainSetup("My train", dateTime, year, month, day, hour, min)
+ *   {}
+ *   void Run(const char* type, const char* mode, const char* oper, 
+ *            Int_t nEvents=-1, Bool_t mc=false,
+ *            Bool_t usePar=false)
+ *   {
+ *     Exec(type, mode, oper, nEvents, mc, usePar);
+ *   }
+ * protected:
+ *   void CreateTasks(EMode mode, Bool_t par, AliAnalysisManager* mgr)
+ *   {
+ *     AliAnalysisManager::SetCommonFileName("my_analysis.root");
+ *     LoadLibrary("MyAnalysis", mode, par, true);
+ *     Bool_t mc = mgr->GetMCtruthEventHandler() != 0;
+ *     gROOT->Macro("MyAnalysis.C");
+ *   }
+ * };
+ * @endcode 
+ * 
+ * This can then be run like 
+ * 
+ * @verbatim 
+ * > aliroot 
+ * Root> .L TrainSetup.C 
+ * Root> .L MyTrain.C 
+ * Root> MyTrain t;
+ * Root> t.Run();
+ * @endverbatim 
+ * 
+ * or as a script 
+ * 
+ * @code 
+ * {
+ *   gROOT->LoadMacro("TrainSetup.C");
+ *   gROOT->LoadMacro("MyTrain.C");
+ *   MyTrain t;
+ *   t.Run();
+ * }
+ * @endcode 
+ * 
+ * To byte compile this, you need to load the analsys libraries first 
+ *
+ * @verbatim 
+ * > aliroot 
+ * Root> gSystem->Load("libANALYSIS.so");
+ * Root> gSystem->Load("libANALYSISalice.so");
+ * Root> gROOT->LoadMacro("TrainSetup.C++");
+ * @endverbatim 
+ * 
+ * @ingroup pwg2_forward_scripts_makers
+ * 
+ */
 struct TrainSetup
 {
+  /** 
+   * Data type to process 
+   */
   enum EType { 
+    /** Event Summary Data */
     kESD, 
+    /** Analysis Object Data */
     kAOD
   };
+  /**
+   * How to run the analysis
+   * 
+   */
   enum EMode {
+    /** Locally */ 
     kLocal = 1, 
+    /** In PROOF(-Lite) cluster */
     kProof, 
+    /** On the Grid */
     kGrid 
   };
+  /**
+   * What stage of the analysis to run 
+   * 
+   */
   enum EOper { 
+    /** Testing.  Local processing, a single copied from Grid */
     kTest, 
+    /** Off-line */
     kOffline, 
+    /** Submit to queue */
     kSubmit, 
+    /** Merge and terminate */
     kTerminate, 
+    /** Full run */
     kFull
   };
 
   //__________________________________________________________________
   /** 
-   * Constructor
+   * Constructor 
    * 
-    * @param name Name of analysis 
+   * @param name         Name of analysis (free-form)
+   * @param useDateTime  Whether to append date and time to the name 
+   * @param year         Year - if not specified, taken from current date
+   * @param month        Month - if not specified, taken from current date 
+   * @param day          Day - if not specified, taken from current date 
+   * @param hour         Hour - if not specified, taken from current time  
+   * @param min          Minute - if not specified, taken from current time  
    */
-  TrainSetup(const char* name, UShort_t year=0, UShort_t month=0, 
+  TrainSetup(const char* name, Bool_t useDateTime=true, 
+            UShort_t year=0, UShort_t month=0, 
             UShort_t day=0, UShort_t hour=0, UShort_t min=0) 
     : fName(name),
       fRootVersion("v5-28-00a"),
@@ -82,16 +191,18 @@ struct TrainSetup
       p++;
     }
 
-    if (year == 0 || month == 0 || day == 0) {
-      TDatime now;
-      year  = now.GetYear();
-      month = now.GetMonth();
-      day   = now.GetDay();
-      hour  = now.GetHour();
-      min   = now.GetMinute();
+    if (useDateTime) { 
+      if (year == 0 || month == 0 || day == 0) {
+       TDatime now;
+       year  = now.GetYear();
+       month = now.GetMonth();
+       day   = now.GetDay();
+       hour  = now.GetHour();
+       min   = now.GetMinute();
+      }
+      fEscapedName.Append(Form("_%04d%02d%02d_%02d%02d", 
+                              year, month, day, hour, min));
     }
-    fEscapedName.Append(Form("_%04d%02d%02d_%02d%02d", 
-                            year, month, day, hour, min));
 
   }
 
@@ -199,23 +310,89 @@ struct TrainSetup
   }
 
   //__________________________________________________________________
+  /** 
+   * Set ROOT version to use 
+   * 
+   * @param v 
+   */
   void SetROOTVersion(const char* v)    { fRootVersion = v; }
+  //__________________________________________________________________
+  /** 
+   * Set AliROOT version to use 
+   * 
+   * @param v 
+   */
   void SetAliROOTVersion(const char* v) { fAliRootVersion = v; }
+  //__________________________________________________________________
+  /** 
+   * Set the proof server URL
+   * 
+   * @param s 
+   */
   void SetProofServer(const char* s)    { fProofServer = s; }
+  //__________________________________________________________________
+  /** 
+   * Set the GRID/Local data dir 
+   * 
+   * @param d 
+   */
   void SetDataDir(const char* d)        { fDataDir = d; }
+  //__________________________________________________________________
+  /** 
+   * Set the PROOF data set 
+   * 
+   * @param d 
+   */
   void SetDataSet(const char* d)        { fDataSet = d; }
+  //__________________________________________________________________
+  /** 
+   * Set the XML file to use 
+   * 
+   * @param x 
+   */
   void SetXML(const char* x)            { fXML = x; }
+  //__________________________________________________________________
+  /** 
+   * Set how many replicas of the output we want 
+   * 
+   * @param n 
+   */
   void SetNReplica(Int_t n)             { fNReplica = n; }
+  //__________________________________________________________________
+  /** 
+   * Add a source file to be copied and byte compiled on slaves 
+   * 
+   * @param src          Sources 
+   * @param addToExtra   If false, do not copy 
+   */
   void AddSource(const char* src, bool addToExtra=true) 
   { 
     fListOfSources.Add(new TObjString(src)); 
     if (addToExtra) AddExtraFile(src); // Source code isn't copied!
   }
+  //__________________________________________________________________
+  /** 
+   * Add binary data to be uploaded to slaves 
+   * 
+   * @param lib Name of binary file 
+   */
   void AddLibrary(const char* lib) { fListOfLibraries.Add(new TObjString(lib));}
+  //__________________________________________________________________
+  /** 
+   * Add a run to be analysed
+   *  
+   * @param run Run number
+   */
   void AddRun(Int_t run) 
   {
     Int_t i = fRunNumbers.fN; fRunNumbers.Set(i+1); fRunNumbers[i] = run;
   }
+  //__________________________________________________________________
+  /** 
+   * Read run numbers from a file 
+   * 
+   * @param filename File name 
+   */
   void ReadRunNumbers(const char* filename)
   {
     std::ifstream file(filename);
@@ -232,6 +409,12 @@ struct TrainSetup
     }
     file.close();
   }
+  //__________________________________________________________________
+  /** 
+   * Add an extra file to be uploaded to slave 
+   * 
+   * @param file Extra file to be uploaded 
+   */
   void AddExtraFile(const char* file)
   {
     fListOfExtras.Add(new TObjString(file));
@@ -348,14 +531,48 @@ protected:
   /** 
    * Run this analysis 
    * 
-   * @param type Type of input for analysis  (kESD, kAOD)
-   * @param mode Mode of job (kLocal, kProof, kGrid)
-   * @param oper Operation 
-   * @param mc   Whether to connect MC data 
-   * @param dbg  Debug level
+   * @param type    Type of input for analysis  (kESD, kAOD)
+   * @param mode    Mode of job (kLocal, kProof, kGrid)
+   * @param oper    Operation 
+   * @param nEvents Number of events to analyse (<0 means all)
+   * @param mc      Whether to connect MC data 
+   * @param usePar  Whether to use PARs  
+   * @param dbg     Debug level
    */
-  void Exec(EType type, EMode mode, EOper oper, Int_t nEvents, 
-           Bool_t mc, Bool_t usePar, Int_t dbg=0)
+  void Exec(const char*  type, 
+           const char*  mode="GRID", 
+           const char*  oper="FULL", 
+           Int_t        nEvents=-1, 
+           Bool_t       mc=false, 
+           Bool_t       usePar=false, 
+           Int_t        dbg=0)
+  {
+    EType eType = ParseType(type);
+    EMode eMode = ParseMode(mode);
+    EOper eOper = ParseOperation(oper);
+
+    Exec(eType, eMode, eOper, nEvents, mc, usePar, dbg);
+  }
+
+  //__________________________________________________________________
+  /** 
+   * Run this analysis 
+   * 
+   * @param type    Type of input for analysis  (kESD, kAOD)
+   * @param mode    Mode of job (kLocal, kProof, kGrid)
+   * @param oper    Operation 
+   * @param nEvents Number of events to analyse (<0 means all)
+   * @param mc      Whether to connect MC data 
+   * @param usePar  Whether to use PARs  
+   * @param dbg     Debug level
+   */
+  void Exec(EType  type, 
+           EMode  mode, 
+           EOper  oper, 
+           Int_t  nEvents, 
+           Bool_t mc, 
+           Bool_t usePar, 
+           Int_t  dbg=0)
   {
     if (mode == kProof) usePar    = true;
 
@@ -405,9 +622,12 @@ protected:
    // --- AOD output handler -----------------------------------------
     mgr->SetOutputEventHandler(CreateOutputHandler(type));
     
+    // --- Include analysis macro path in search path ----------------
+    gROOT->SetMacroPath(Form("%s:$ALICE_ROOT/ANALYSIS/macros",
+                            gROOT->GetMacroPath()));
+
     // --- Physics selction ------------------------------------------
-    gROOT->Macro(Form("$ALICE_ROOT/ANALYSIS/macros/"
-                     "AddTaskPhysicsSelection.C(%d)", mc));
+    gROOT->Macro(Form("AddTaskPhysicsSelection.C(%d)", mc));
     mgr->RegisterExtraFile("event_stat.root");
     
     // --- Create tasks ----------------------------------------------
@@ -415,8 +635,7 @@ protected:
 
     // --- Create Grid handler ----------------------------------------
     // _must_ be done after all tasks has been added
-    mgr->SetGridHandler(CreateGridHandler(mode, oper));
-    
+    mgr->SetGridHandler(CreateGridHandler(type, mode, oper));
     
     // --- Create the chain ------------------------------------------
     TChain* chain = CreateChain(type, mode, oper);
@@ -472,11 +691,13 @@ protected:
   /** 
    * Create a grid handler 
    * 
+   * @param type Data type
+   * @param mode Run mode 
    * @param oper Operation 
    * 
    * @return Grid handler 
    */
-  AliAnalysisAlien* CreateGridHandler(EMode mode, EOper oper)
+  AliAnalysisAlien* CreateGridHandler(EType type, EMode mode, EOper oper)
   {
     if (mode != kGrid) return 0;
 
@@ -510,8 +731,12 @@ protected:
     plugin->SetGridDataDir(fDataDir);
 
     // Data search patterns 
-    plugin->SetRunPrefix("000");
-    plugin->SetDataPattern(Form("*ESDs/pass%d/*/*ESDs.root", fESDPass));
+    if (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())
+      plugin->SetRunPrefix("");
+    else
+      plugin->SetRunPrefix("000");
+    plugin->SetDataPattern(Form("*ESDs/pass%d/*/*%s.root", 
+                               fESDPass, type == kESD ? "ESDs" : "AOD"));
 
     // Add the run numbers 
     for (Int_t i = 0; i < fRunNumbers.fN; i++) {
@@ -651,7 +876,8 @@ protected:
   /** 
    * Create input handler 
    * 
-   * @param type 
+   * @param type  Run type (ESD or AOD)
+   * @param mc    Assume monte-carlo input 
    * 
    * @return 
    */
@@ -686,8 +912,9 @@ protected:
   /** 
    * Create analysis tasks 
    * 
-   * @param mgr Manager
-   * @param par Whether to use pars 
+   * @param mode Run mode
+   * @param mgr  Manager
+   * @param par  Whether to use pars 
    */
   virtual void CreateTasks(EMode mode, Bool_t par, AliAnalysisManager* mgr)=0;
   //__________________________________________________________________
@@ -760,7 +987,8 @@ protected:
   /** 
    * Load common libraries 
    * 
-   * @param mode Running mode 
+   * @param mode Running mode                  
+   * @param par  If true, load as PARs 
    * 
    * @return true on success 
    */
@@ -793,6 +1021,7 @@ protected:
    * 
    * @param what What library to load
    * @param mode Mode (local, proof, grid)
+   * @param par  If true, load as PAR
    * @param rec  If true, also load on slaves
    * 
    * @return true on success 
@@ -1056,13 +1285,12 @@ protected:
   }
   //__________________________________________________________________
   /** 
+   * Create a chain of data 
    * 
+   * @param type Type of data
+   * @param mode Operation mode 
    * 
-   * @param type 
-   * @param mode 
-   * @param oper 
-   * 
-   * @return 
+   * @return TChain of data 
    */    
   TChain* CreateChain(EType type, EMode mode, EOper /* oper */)
   {
@@ -1119,23 +1347,53 @@ protected:
 };
 
 //====================================================================
+/**
+ * Analysis train to make Forward and Central multiplicity
+ * 
+ * @ingroup pwg2_forward_scripts_makers
+ * @ingroup pwg2_forward_aod
+ */
 class ForwardPass1 : public TrainSetup
 {
 public:
-  ForwardPass1(UShort_t sys   = 0, 
-              UShort_t sNN   = 0, 
-              Short_t  field = 0, 
-              UShort_t year  = 0, 
-              UShort_t month = 0, 
-              UShort_t day   = 0, 
-              UShort_t hour  = 0, 
-              UShort_t min   = 0) 
-    : TrainSetup("Forward d2Ndetadphi pass1",
+  /** 
+   * Constructor.  Date and time must be specified when running this
+   * in Termiante mode on Grid
+   * 
+   * @param dateTime Append date and time to name 
+   * @param sys      Collision system (1: pp, 2: PbPb)
+   * @param sNN      Center of mass energy [GeV]
+   * @param field    L3 magnetic field - one of {-5,0,+5} kG
+   * @param year     Year     - if not specified, current year
+   * @param month    Month    - if not specified, current month
+   * @param day      Day      - if not specified, current day
+   * @param hour     Hour     - if not specified, current hour
+   * @param min      Minutes  - if not specified, current minutes
+   */
+  ForwardPass1(UShort_t sys      = 0, 
+              UShort_t sNN      = 0, 
+              Bool_t   dateTime = false, 
+              Short_t  field    = 0, 
+              UShort_t year     = 0, 
+              UShort_t month    = 0, 
+              UShort_t day      = 0, 
+              UShort_t hour     = 0, 
+              UShort_t min      = 0) 
+    : TrainSetup("Forward d2Ndetadphi pass1", dateTime, 
                 year, month, day, hour, min),
       fSys(sys), 
       fSNN(sNN), 
       fField(field)
   {}
+  /** 
+   * Run this analysis 
+   * 
+   * @param mode     Mode
+   * @param oper     Operation
+   * @param nEvents  Number of events (negative means all)
+   * @param mc       If true, assume simulated events 
+   * @param usePar   If true, use PARs 
+   */
   void Run(const char* mode, const char* oper, 
           Int_t nEvents=-1, Bool_t mc=false,
           Bool_t usePar=false)
@@ -1145,17 +1403,44 @@ public:
     
     Run(eMode, eOper, nEvents, mc, usePar);
   }
-  void Run(EMode mode, EOper oper, Int_t nEvents=-1, Bool_t mc=false, Bool_t usePar = false)
+  /** 
+   * Run this analysis 
+   * 
+   * @param mode     Mode
+   * @param oper     Operation
+   * @param nEvents  Number of events (negative means all)
+   * @param mc       If true, assume simulated events 
+   * @param usePar   If true, use PARs 
+   */
+  void Run(EMode mode, EOper oper, Int_t nEvents=-1, Bool_t mc=false, 
+          Bool_t usePar = false)
   {
     Exec(kESD, mode, oper, nEvents, mc, usePar);
   }
+  /** 
+   * Create the tasks 
+   * 
+   * @param mode Processing mode
+   * @param par  Whether to use par files 
+   * @param mgr  Analysis manager 
+   */
   void CreateTasks(EMode mode, Bool_t par, AliAnalysisManager* mgr)
   {
+    // --- Output file name ------------------------------------------
     AliAnalysisManager::SetCommonFileName("forward.root");
+
+    // --- Load libraries/pars ---------------------------------------
     LoadLibrary("PWG2forward2", mode, par, true);
+    
+    // --- Set load path ---------------------------------------------
+    gROOT->SetMacroPath(Form("%s:$(ALICE_ROOT)/PWG2/FORWARD/analysis2"
+                            gROOT->GetMacroPath()));
+
+    // --- Check if this is MC ---------------------------------------
     Bool_t mc = mgr->GetMCtruthEventHandler() != 0;
-    gROOT->LoadMacro("$ALICE_ROOT/PWG2/FORWARD/analysis2/AddTaskFMD.C");
-    gROOT->ProcessLine(Form("AddTaskFMD(%d,%d,%d,%d)", mc, fSys, fSNN, fField));
+
+    // --- Add the task ----------------------------------------------
+    gROOT->Macro(Form("AddTaskForwardMult(%d,%d,%d,%d).C", mc, fSys, fSNN, fField));
   }
 private:
   UShort_t fSys;
@@ -1163,42 +1448,100 @@ private:
   Short_t  fField;
 };
 //====================================================================
+/**
+ * Analysis train to make @f$ dN/d\eta@f$
+ * 
+ * @ingroup pwg2_forward_scripts_makers
+ * @ingroup pwg2_forward_dndeta
+ */
 class ForwardPass2 : public TrainSetup
 {
 public:
+  /** 
+   * Constructor.  Date and time must be specified when running this
+   * in Termiante mode on Grid
+   * 
+   * @param trig     Trigger to use 
+   * @param vzMin    Least @f$ v_z@f$
+   * @param vzMax    Largest @f$ v_z@f$
+   * @param dateTime Append date and time to name 
+   * @param year     Year     - if not specified, current year
+   * @param month    Month    - if not specified, current month
+   * @param day      Day      - if not specified, current day
+   * @param hour     Hour     - if not specified, current hour
+   * @param min      Minutes  - if not specified, current minutes
+   */
   ForwardPass2(const char* trig="INEL", 
               Double_t    vzMin=-10, 
               Double_t    vzMax=10, 
+              Bool_t      dateTime=false,
               UShort_t    year  = 0, 
               UShort_t    month = 0, 
               UShort_t    day   = 0, 
               UShort_t    hour  = 0, 
               UShort_t    min   = 0) 
-    : TrainSetup("Forward d2Ndetadphi pass2",
+    : TrainSetup("Forward d2Ndetadphi pass2", dateTime,
                 year, month, day, hour, min),
       fTrig(trig), 
       fVzMin(vzMin), 
       fVzMax(vzMax)
   {}
+  /** 
+   * Run this analysis 
+   * 
+   * @param mode     Mode
+   * @param oper     Operation
+   * @param nEvents  Number of events (negative means all)
+   * @param mc       If true, assume simulated events 
+   * @param usePar   If true, use PARs 
+   */
   void Run(const char* mode, const char* oper, 
-          Int_t nEvents=-1, Bool_t mc=false)
+          Int_t nEvents=-1, Bool_t mc=false, Bool_t usePar=false)
   {
     EMode eMode = ParseMode(mode);
     EOper eOper = ParseOperation(oper);
     
-    Run(eMode, eOper, nEvents, mc);
+    Run(eMode, eOper, nEvents, mc, usePar);
   }
-  void Run(EMode mode, EOper oper, Int_t nEvents=-1, Bool_t mc=false)
+  /** 
+   * Run this analysis 
+   * 
+   * @param mode     Mode
+   * @param oper     Operation
+   * @param nEvents  Number of events (negative means all)
+   * @param mc       If true, assume simulated events 
+   * @param usePar   If true, use PARs 
+   */
+  void Run(EMode mode, EOper oper, Int_t nEvents=-1, Bool_t mc=false,
+          Bool_t usePar=false)
   {
-    Exec(kESD, mode, oper, nEvents, mc, true);
+    Exec(kESD, mode, oper, nEvents, mc, usePar);
   }
+  /** 
+   * Create the tasks 
+   * 
+   * @param mode Processing mode
+   * @param par  Whether to use par files 
+   * @param mgr  Analysis manager 
+   */
   void CreateTasks(EMode mode, Bool_t par, AliAnalysisManager* mgr)
   {
+    // --- Output file name ------------------------------------------
     AliAnalysisManager::SetCommonFileName("forward_dndeta.root");
+
+    // --- Load libraries/pars ---------------------------------------
     LoadLibrary("PWG2forward2", mode, par, true);
-    gROOT->LoadMacro("$ALICE_ROOT/PWG2/FORWARD/analysis2/AddTaskForwarddNdeta.C");
-    gROOT->ProcessLine(Form("AddTaskForwarddNdeta(\"%s\",%f,%f)",
-                           fTrig.Data(), fVzMin, fVzMax));
+    
+    // --- Set load path ---------------------------------------------
+    gROOT->SetMacroPath(Form("%s:$(ALICE_ROOT)/PWG2/FORWARD/analysis2"
+                            gROOT->GetMacroPath()));
+
+    // --- Check if this is MC ---------------------------------------
+    Bool_t mc = mgr->GetMCtruthEventHandler() != 0;
+
+    // --- Add the task ----------------------------------------------
+    gROOT->Macro(Form("AddTaskForwarddNdeta.C(\"%s\",%f,%f)",
+                     fTrig.Data(), fVzMin, fVzMax));
   }
 private:
   TString fTrig;
@@ -1206,17 +1549,42 @@ private:
   Double_t fVzMax;
 };
 //====================================================================
+/**
+ * Analysis train to do energy loss fits
+ * 
+ * @ingroup pwg2_forward_scripts_makers
+ */
 class ForwardELoss : public TrainSetup
 {
 public:
-  ForwardELoss(UShort_t year  = 0, 
+  /** 
+   * Constructor.  Date and time must be specified when running this
+   * in Termiante mode on Grid
+   * 
+   * @param dateTime Append date and time to name 
+   * @param year     Year
+   * @param month    Month 
+   * @param day      Day
+   * @param hour     Hour 
+   * @param min      Minutes
+   */
+  ForwardELoss(Bool_t   dateTime, 
+              UShort_t year  = 0, 
               UShort_t month = 0, 
               UShort_t day   = 0, 
               UShort_t hour  = 0, 
               UShort_t min   = 0) 
-    : TrainSetup("Forward energy loss",
+    : TrainSetup("Forward energy loss", dateTime, 
                 year, month, day, hour, min) 
   {}
+  /** 
+   * Run this analysis 
+   * 
+   * @param mode     Mode
+   * @param oper     Operation
+   * @param nEvents  Number of events (negative means all)
+   * @param mc       If true, assume simulated events 
+   */
   void Run(const char* mode, const char* oper, 
           Int_t nEvents=-1, Bool_t mc=false)
   {
@@ -1225,19 +1593,42 @@ public:
     
     Run(eMode, eOper, nEvents, mc);
   }
+  /** 
+   * Run this analysis 
+   * 
+   * @param mode     Mode
+   * @param oper     Operation
+   * @param nEvents  Number of events (negative means all)
+   * @param mc       If true, assume simulated events 
+   */
   void Run(EMode mode, EOper oper, Int_t nEvents=-1, Bool_t mc=false)
   {
     Exec(kESD, mode, oper, nEvents, mc, true);
   }
+  /** 
+   * Create the tasks 
+   * 
+   * @param mode Processing mode
+   * @param par  Whether to use par files 
+   * @param mgr  Analysis manager 
+   */
   void CreateTasks(EMode mode, Bool_t par, AliAnalysisManager* mgr)
   {
-    // --- Forward multiplicity ---------------------------------------
+    // --- Output file name ------------------------------------------
     AliAnalysisManager::SetCommonFileName("forward_eloss.root");
 
+    // --- Load libraries/pars ---------------------------------------
     LoadLibrary("PWG2forward2", mode, par, true);
+    
+    // --- Set load path ---------------------------------------------
+    gROOT->SetMacroPath(Form("%s:$(ALICE_ROOT)/PWG2/FORWARD/analysis2"
+                            gROOT->GetMacroPath()));
+
+    // --- Check if this is MC ---------------------------------------
     Bool_t mc = mgr->GetMCtruthEventHandler() != 0;
-    gROOT->Macro(Form("$ALICE_ROOT/PWG2/FORWARD/analysis2/AddTaskFMDEloss.C(%d)",
-                     mc));
+
+    // --- Add the task ----------------------------------------------
+    gROOT->Macro(Form("AddTaskForwardMultEloss.C(%d)", mc));
   }
 };
   
index fc16bb7346db43bfd2287af52cedfbaab2a63ec7..1bd8d0b68badb4450743410a10161cb41933c714 100644 (file)
@@ -86,8 +86,8 @@ RunViaPlugin(const Char_t* runMode="",
     
     
     // FMD 
-    gROOT->LoadMacro("$ALICE_ROOT/PWG2/FORWARD/analysis2/AddTaskFMD.C");
-    AddTaskFMD(mc);
+    gROOT->LoadMacro("$ALICE_ROOT/PWG2/FORWARD/analysis2/AddTaskForwardMult.C");
+    AddTaskForwardMult(mc);
     anaName = "FMD_AOD";
   }
   else if (swhat.Contains("eloss")) {