--- /dev/null
+// $Id$
+//
+// Base class for rho calculation
+//
+// Author: A.Saiola
+
+#include <TF1.h>
+
+#include "AliLog.h"
+#include "AliAnalysisManager.h"
+#include "AliVEventHandler.h"
+#include "AliCentrality.h"
+#include "AliEmcalJet.h"
+#include "AliVCluster.h"
+
+#include "AliAnalysisTaskRhoBase.h"
+
+ClassImp(AliAnalysisTaskRhoBase)
+
+//________________________________________________________________________
+AliAnalysisTaskRhoBase::AliAnalysisTaskRhoBase() :
+ AliAnalysisTaskSE(),
+ fRhoName("Rho"),
+ fRhoFunction(0x0),
+ fCent(-1),
+ fRho(0)
+{
+ // Constructor.
+}
+
+//________________________________________________________________________
+AliAnalysisTaskRhoBase::AliAnalysisTaskRhoBase(const char *name) :
+ AliAnalysisTaskSE(name),
+ fRhoName("Rho"),
+ fRhoFunction(0x0),
+ fCent(-1),
+ fRho(0)
+{
+ // Constructor.
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskRhoBase::UserCreateOutputObjects()
+{
+ // Run at beginning of task.
+
+ AliVEventHandler* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
+ if (!handler) {
+ AliError("Input handler not available!");
+ return;
+ }
+
+ fRho = new TParameter<Double_t>(fRhoName, 0);
+}
+
+//________________________________________________________________________
+Double_t AliAnalysisTaskRhoBase::GetRhoFactor(Double_t cent)
+{
+ // Return rho per centrality.
+
+ Double_t rho = -1;
+ if (fRhoFunction)
+ rho = fRhoFunction->Eval(cent);
+ return rho;
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskRhoBase::UserExec(Option_t *)
+{
+ // Main loop, called for each event.
+
+ // add rho to event if not yet there
+ if (!(InputEvent()->FindListObject(fRhoName))) {
+ new(fRho) TParameter<Double_t>(fRhoName, 0);
+ InputEvent()->AddObject(fRho);
+ }
+
+ // get centrality
+ AliCentrality *centrality = InputEvent()->GetCentrality() ;
+ if (centrality)
+ fCent = centrality->GetCentralityPercentile("V0M");
+ else
+ fCent = 99; // probably pp data
+ if (fCent < 0) {
+ AliError(Form("Centrality negative: %f", fCent));
+ return;
+ }
+
+ Double_t rhochem = GetRhoFactor(fCent);
+ fRho->SetVal(rhochem);
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskRhoBase::Terminate(Option_t *)
+{
+ // Run at the end of the task.
+}
--- /dev/null
+#ifndef ALIANALYSISTASKRHOBASE_cxx
+#define ALIANALYSISTASKRHOBASE_cxx
+
+// $Id$
+
+class TString;
+class TF1;
+
+#include <TParameter.h>
+
+#include "AliAnalysisTaskSE.h"
+
+class AliAnalysisTaskRhoBase : public AliAnalysisTaskSE {
+
+ public:
+ AliAnalysisTaskRhoBase();
+ AliAnalysisTaskRhoBase(const char *name);
+ virtual ~AliAnalysisTaskRhoBase() {}
+
+ virtual void UserCreateOutputObjects();
+ virtual void UserExec(Option_t*);
+ virtual void Terminate(Option_t*);
+
+ void SetRhoFunction(TF1* rf) { fRhoFunction = rf ; }
+ void SetRhoName(const char *name) { fRhoName = name ; }
+
+ protected:
+ virtual Double_t GetRhoFactor(Double_t cent);
+
+ TString fRhoName; // name of rho
+ TF1 *fRhoFunction; // pre-computed rho as a function of centrality
+ Double_t fCent; //!event centrality
+ TParameter<Double_t> *fRho; //!per event calculated rho
+
+ AliAnalysisTaskRhoBase(const AliAnalysisTaskRhoBase&); // not implemented
+ AliAnalysisTaskRhoBase& operator=(const AliAnalysisTaskRhoBase&); // not implemented
+
+ ClassDef(AliAnalysisTaskRhoBase, 1); // Rho base task
+};
+#endif