AliRoot Core  3dc7879 (3dc7879)
AliAnalysisTask Class Referenceabstract


AliAnalysysTask - Class representing a basic analysis task. Any user-defined task should derive from it and implement the Exec() virtual

method.

More...

#include <AliAnalysisTask.h>

Inheritance diagram for AliAnalysisTask:

Public Types

enum  EAnalysisTaskFlags { kTaskUsed = BIT(14), kTaskZombie = BIT(15), kTaskChecked = BIT(16), kTaskPostEventLoop = BIT(17) }
 

Public Member Functions

virtual void ConnectInputData (Option_t *option="")
 
 AliAnalysisTask ()
 
 AliAnalysisTask (const char *name, const char *title)
 
 AliAnalysisTask (const AliAnalysisTask &task)
 
virtual ~AliAnalysisTask ()
 
AliAnalysisTaskoperator= (const AliAnalysisTask &task)
 
virtual void CreateOutputObjects ()
 
virtual void LocalInit ()
 
virtual Bool_t Notify ()
 
virtual Bool_t NotifyBinChange ()
 
virtual void FinishTaskOutput ()
 
Bool_t ConnectInput (Int_t islot, AliAnalysisDataContainer *cont)
 
Bool_t ConnectOutput (Int_t islot, AliAnalysisDataContainer *cont)
 
Bool_t AreSlotsConnected ()
 
void CheckNotify (Bool_t init=kFALSE)
 
Bool_t CheckCircularDeps ()
 
virtual Bool_t CheckPostData () const
 
virtual Bool_t CheckOwnership () const
 
virtual void Reset ()
 
virtual Bool_t ResetOutputData ()
 
void GetBranches (const char *type, TString &result) const
 
Int_t GetNinputs () const
 
Int_t GetNoutputs () const
 
TObject * GetPublishedData () const
 
AliAnalysisDataSlotGetInputSlot (Int_t islot) const
 
AliAnalysisDataSlotGetOutputSlot (Int_t islot) const
 
TClass * GetInputType (Int_t islot) const
 
TClass * GetOutputType (Int_t islot) const
 
TObject * GetInputData (Int_t islot) const
 
TObject * GetOutputData (Int_t islot) const
 
Bool_t IsOutputReady (Int_t islot) const
 
Bool_t IsChecked () const
 
Bool_t IsPostEventLoop () const
 
Bool_t IsInitialized () const
 
Bool_t IsReady () const
 
Bool_t IsUsed () const
 
Bool_t IsZombie () const
 
Bool_t HasBranches () const
 
virtual void PrintTask (Option_t *option="all", Int_t indent=0) const
 
void PrintContainers (Option_t *option="all", Int_t indent=0) const
 
Bool_t ProducersTouched () const
 
void SetBranches (const char *names)
 
void SetChecked (Bool_t flag=kTRUE)
 
void SetPostEventLoop (Bool_t flag=kTRUE)
 
void SetUsed (Bool_t flag=kTRUE)
 
void SetZombie (Bool_t flag=kTRUE)
 
virtual void Exec (Option_t *option)=0
 
Bool_t HasExecuted () const
 
virtual void Terminate (Option_t *option="")
 

Protected Member Functions

void DefineInput (Int_t islot, TClass *type)
 
void DefineOutput (Int_t islot, TClass *type)
 
Bool_t PostData (Int_t iout, TObject *data, Option_t *option="")
 
char * GetBranchAddress (Int_t islot, const char *branch) const
 
Bool_t SetBranchAddress (Int_t islot, const char *branch, void *address) const
 
void EnableBranch (Int_t islot, const char *bname) const
 
TFile * OpenFile (Int_t iout, Option_t *option="RECREATE") const
 

Protected Attributes

Bool_t fReady
 Flag if the task is ready. More...
 
Bool_t fInitialized
 True if Init() was called. More...
 
Int_t fNinputs
 Number of inputs. More...
 
Int_t fNoutputs
 
Bool_t * fOutputReady
 Flags for output readyness. More...
 
TObject * fPublishedData
 ! published data More...
 
TObjArrayfInputs
 Array of input slots. More...
 
TObjArrayfOutputs
 Array of output slots. More...
 
TString fBranchNames
 List of input branches that need to be loaded for this task. More...
 

Detailed Description


AliAnalysysTask - Class representing a basic analysis task. Any user-defined task should derive from it and implement the Exec() virtual

method.

A specific user analysis task have to derive from this class. The list of specific input and output slots have to be defined in the derived class ctor:

UserTask::UserTask(name, title) { DefineInput(0, TTree::Class()); DefineInput(1, TH1::Class()); ... DefineOutput(0, TTree::Class()); DefineOutput(1, MyObject::Class()); ... }

An existing data contaner (AliAnalysisDataContainer) can be connected to the input/output slots of an analysis task. Containers should not be defined and connected by the derived analysis task, but from the level of AliAnalysisManager:

AliAnalysisManager::ConnectInput(AliAnalysisTask *task, Int_t islot, AliAnalysisDataContainer *cont) AliAnalysisManager::ConnectOutput(AliAnalysisTask *task, Int_t islot, AliAnalysisDataContainer *cont) To connect a slot to a data container, the data types declared by both must match.

The method ConnectInputData() has to be overloaded by the derived class in order to set the branch address or connect to a branch address in case the input slots are connected to trees. Example: MyAnalysisTask::ConnectInputData(Option_t *) { // One should first check if the branch address was taken by some other task char ** address = (char **)GetBranchAddress(0, "ESD"); if (address) { fESD = (AliESD*)(*address); } else { fESD = new AliESD(); SetBranchAddress(0, "ESD", &fESD); } }

The method LocalInit() may be implemented to call locally (on the client) all initialization methods of the class. It is not mandatory and was created in order to minimize the complexity and readability of the analysis macro. DO NOT create in this method the histigrams or task output objects that will go in the task output containers. Use CreateOutputObjects for that.

The method CreateOutputObjects() has to be implemented an will contain the objects that should be created only once per session (e.g. output histograms)

void MyAnalysisTask::CreateOutputObjects() { create histograms fhPt = new TH1F("fhPt","This is the Pt distribution",15,0.1,3.1); fhPt->SetStats(kTRUE); fhPt->GetXaxis()->SetTitle("P_{T} [GeV]"); fhPt->GetYaxis()->SetTitle("#frac{dN}{dP_{T}}"); fhPt->GetXaxis()->SetTitleColor(1); fhPt->SetMarkerStyle(kFullCircle); }

The method Terminate() will be called by the framework once at the end of data processing. Overload this if needed. DO NOT ASSUME that the pointers to histograms defined in CreateOutputObjects() are valid, since this is not true in case of PROOF. Restore the pointer values like:

void MyAnalysisTask::Terminate(Option_t *) { fhPt = (TH1F*)GetOutputData(0); ... }

Definition at line 104 of file AliAnalysisTask.h.

Member Enumeration Documentation

Enumerator
kTaskUsed 
kTaskZombie 
kTaskChecked 
kTaskPostEventLoop 

Definition at line 106 of file AliAnalysisTask.h.

Constructor & Destructor Documentation

AliAnalysisTask::AliAnalysisTask ( )

Definition at line 35 of file AliAnalysisTask.cxx.

AliAnalysisTask::AliAnalysisTask ( const char *  name,
const char *  title 
)

Constructor.

Definition at line 50 of file AliAnalysisTask.cxx.

AliAnalysisTask::AliAnalysisTask ( const AliAnalysisTask task)

Copy ctor.

Definition at line 69 of file AliAnalysisTask.cxx.

AliAnalysisTask::~AliAnalysisTask ( )
virtual

Dtor.

Definition at line 96 of file AliAnalysisTask.cxx.

Member Function Documentation

Bool_t AliAnalysisTask::AreSlotsConnected ( )

Check if all input/output slots are connected. If this is the case fReady=true

Definition at line 154 of file AliAnalysisTask.cxx.

Referenced by ConnectInput(), and ConnectOutput().

Bool_t AliAnalysisTask::CheckCircularDeps ( )

Check for illegal circular dependencies, e.g. a daughter task should not have a hierarchical parent as subtask.

Definition at line 565 of file AliAnalysisTask.cxx.

Referenced by CheckCircularDeps(), and AliAnalysisManager::InitAnalysis().

void AliAnalysisTask::CheckNotify ( Bool_t  init = kFALSE)

Check if data is available from all inputs. Change the status of the task accordingly. This method is called automatically for all tasks connected to a container where the data was published.

Definition at line 183 of file AliAnalysisTask.cxx.

Referenced by AliAnalysisDataContainer::SetData(), and AliAnalysisManager::UnpackOutput().

Bool_t AliAnalysisTask::CheckOwnership ( ) const
virtual

Check ownership of containers posted on output slots (1 level only)

Definition at line 231 of file AliAnalysisTask.cxx.

Referenced by CheckPostData().

Bool_t AliAnalysisTask::CheckPostData ( ) const
virtual

Checks if data was posted to all outputs defined by the task. If task does not have output slots this returns always kTRUE.

Definition at line 208 of file AliAnalysisTask.cxx.

Referenced by AliAnalysisManager::SlaveBegin(), and AliAnalysisManager::StartAnalysis().

Bool_t AliAnalysisTask::ConnectInput ( Int_t  islot,
AliAnalysisDataContainer cont 
)

Connect an input slot to a data container.

Definition at line 252 of file AliAnalysisTask.cxx.

Referenced by AliAnalysisManager::ConnectInput().

void AliAnalysisTask::ConnectInputData ( Option_t *  option = "")
virtual
Bool_t AliAnalysisTask::ConnectOutput ( Int_t  islot,
AliAnalysisDataContainer cont 
)

Connect an output slot to a data container.

Definition at line 275 of file AliAnalysisTask.cxx.

Referenced by AliAnalysisManager::ConnectOutput().

void AliAnalysisTask::CreateOutputObjects ( )
virtual

Called once per task either in PROOF or local mode. Overload to put some task initialization and/or create your output objects here.

Reimplemented in TaskRecoPi0, TaskFilter, AliMUONChamberCalibrationTask, AliAnalysisTaskSE, AliAnalysisTaskFilter, AliAnalysisTaskME, and AliAnalysisTaskAddObject.

Definition at line 445 of file AliAnalysisTask.cxx.

Referenced by AliAnalysisManager::SlaveBegin(), AliAnalysisManager::StartAnalysis(), TaskRecoPi0::TaskRecoPi0(), and TaskFilter::~TaskFilter().

void AliAnalysisTask::EnableBranch ( Int_t  islot,
const char *  bname 
) const
protected

Call this in ConnectInputData() to enable only the branches needed by this task. "*" will enable everything.

Definition at line 397 of file AliAnalysisTask.cxx.

virtual void AliAnalysisTask::Exec ( Option_t *  option)
pure virtual
void AliAnalysisTask::FinishTaskOutput ( )
virtual

Optional method that is called in SlaveTerminate phase. Used for calling aditional methods just after the last event was processed ON THE WORKING NODE. The call is made also in local case. Do NOT delete output objects here since they will have to be sent for merging in PROOF mode - use class destructor for cleanup.

Reimplemented in AliMUONAlignmentTask, and AliAnalysisTaskTagCreator.

Definition at line 416 of file AliAnalysisTask.cxx.

Referenced by AliAnalysisManager::PackOutput().

char * AliAnalysisTask::GetBranchAddress ( Int_t  islot,
const char *  branch 
) const
protected

Check if a branch with a given name from the specified input is connected to some address. Call this in Init() before trying to call SetBranchAddress() since the adress may be set by other task.

Definition at line 379 of file AliAnalysisTask.cxx.

Referenced by TaskFilter::ConnectInputData(), and TaskRecoPi0::ConnectInputData().

void AliAnalysisTask::GetBranches ( const char *  type,
TString &  result 
) const

Get the list of branches for a given type (ESD, AOD). The list of branches requested by a task has to ve declared in the form: SetBranches("ESD:branch1,branch2,...,branchN AOD:branch1,branch2,...,branchM")

Definition at line 668 of file AliAnalysisTask.cxx.

Referenced by AliAnalysisManager::InitAnalysis(), AliAnalysisTaskSE::LoadBranches(), and ResetOutputData().

TObject * AliAnalysisTask::GetInputData ( Int_t  islot) const

Retreive input data for a slot if ready. Normally called by Exec() and the object has to be statically cast to the appropriate type.

Definition at line 351 of file AliAnalysisTask.cxx.

Referenced by AliMUONChamberCalibrationTask::ConnectInputData(), AliAnalysisTaskESDfilter::ConvertV0s(), TaskFilter::Exec(), and GetOutputSlot().

TClass * AliAnalysisTask::GetInputType ( Int_t  islot) const

Retreive type of a given input slot.

Definition at line 325 of file AliAnalysisTask.cxx.

Referenced by GetOutputSlot(), and PrintTask().

Int_t AliAnalysisTask::GetNinputs ( ) const
inline

Definition at line 194 of file AliAnalysisTask.h.

Referenced by AliAnalysisManager::InitAnalysis(), and operator=().

Int_t AliAnalysisTask::GetNoutputs ( ) const
inline

Definition at line 195 of file AliAnalysisTask.h.

Referenced by operator=().

TObject * AliAnalysisTask::GetOutputData ( Int_t  islot) const

Retreive output data for a slot. Normally called in UserTask::Terminate to get a valid pointer to data even in case of Proof.

Definition at line 365 of file AliAnalysisTask.cxx.

Referenced by CheckOwnership(), GetOutputSlot(), AliAnalysisTaskMCParticleFilter::Terminate(), AliPriorsTask::Terminate(), and AliAnalysisTaskStat::Terminate().

TClass * AliAnalysisTask::GetOutputType ( Int_t  islot) const

Retreive type of a given output slot.

Definition at line 338 of file AliAnalysisTask.cxx.

Referenced by GetOutputSlot(), and PrintTask().

TObject* AliAnalysisTask::GetPublishedData ( ) const
inline

Definition at line 196 of file AliAnalysisTask.h.

Referenced by AliAnalysisDataContainer::SetData().

Bool_t AliAnalysisTask::HasBranches ( ) const
inline

Definition at line 211 of file AliAnalysisTask.h.

Referenced by AliAnalysisManager::InitAnalysis().

Bool_t AliAnalysisTask::HasExecuted ( ) const
inline

Definition at line 224 of file AliAnalysisTask.h.

Referenced by AliAnalysisDataContainer::ClientsExecuted().

Bool_t AliAnalysisTask::IsChecked ( ) const
inline

Definition at line 205 of file AliAnalysisTask.h.

Referenced by CheckCircularDeps(), and PrintTask().

Bool_t AliAnalysisTask::IsInitialized ( ) const
inline

Definition at line 207 of file AliAnalysisTask.h.

Referenced by operator=().

Bool_t AliAnalysisTask::IsOutputReady ( Int_t  islot) const
inline

Definition at line 204 of file AliAnalysisTask.h.

Referenced by AliAnalysisTask(), and operator=().

Bool_t AliAnalysisTask::IsReady ( ) const
inline

Definition at line 208 of file AliAnalysisTask.h.

Referenced by operator=().

Bool_t AliAnalysisTask::IsUsed ( ) const
inline

Definition at line 209 of file AliAnalysisTask.h.

Referenced by AliAnalysisManager::InitAnalysis().

Bool_t AliAnalysisTask::IsZombie ( ) const
inline

Definition at line 210 of file AliAnalysisTask.h.

void AliAnalysisTask::LocalInit ( )
virtual

The method LocalInit() may be implemented to call locally (on the client) all initialization methods of the class. It is not mandatory and was created in order to minimize the complexity and readability of the analysis macro. DO NOT create in this method the histigrams or task output objects that will go in the task output containers. Use CreateOutputObjects for that.

Reimplemented in AliMUONAlignmentTask, AliMUONChamberCalibrationTask, AliAnalysisTaskESDfilter, AliAnalysisTaskFilterFriendSecond, AliAnalysisTaskFilterSteer, AliAnalysisTaskTagCreator, AliAnalysisTaskCopyESD, and AliAnalysisTaskFilterFriend.

Definition at line 434 of file AliAnalysisTask.cxx.

Referenced by AliAnalysisManager::RunLocalInit().

Bool_t AliAnalysisTask::Notify ( )
virtual

Overload this IF you need to treat input file change.

Reimplemented in AliAnalysisTaskSE, AliAnalysisTaskMCParticleFilter, AliAnalysisTaskESDfilter, and AliAnalysisTaskTagCreator.

Definition at line 484 of file AliAnalysisTask.cxx.

Referenced by AliAnalysisManager::Notify().

Bool_t AliAnalysisTask::NotifyBinChange ( )
virtual

Overload this IF you need to treat bin change in event mixing.

Reimplemented in AliPriorsTask.

Definition at line 492 of file AliAnalysisTask.cxx.

Referenced by AliAnalysisManager::StartAnalysis().

TFile * AliAnalysisTask::OpenFile ( Int_t  iout,
Option_t *  option = "RECREATE" 
) const
protected

This method has to be called INSIDE the user redefined CreateOutputObjects method, before creating each object corresponding to the output containers that are to be written to a file. This need to be done in general for the big output objects that may not fit memory during processing.

  • 'option' is the file opening option.

NOTE !: The method call will be ignored in PROOF mode, in which case the results have to be streamed back to the client and written just before Terminate()

Example: void MyAnaTask::CreateOutputObjects() { OpenFile(0); // Will open the file for the object to be written at output #0 fAOD = new TTree("AOD for D0toKPi"); OpenFile(1); now some histos that should go in the file of the second output container fHist1 = new TH1F("my quality check hist1",...); fHist2 = new TH2F("my quality check hist2",...); }

Definition at line 453 of file AliAnalysisTask.cxx.

Referenced by AliMUONChamberCalibrationTask::CreateOutputObjects(), AliAnalysisTaskTagCreator::UserCreateOutputObjects(), AliPriorsTask::UserCreateOutputObjects(), and AliAnalysisTaskBadChunkID::UserCreateOutputObjects().

AliAnalysisTask & AliAnalysisTask::operator= ( const AliAnalysisTask task)
void AliAnalysisTask::PrintContainers ( Option_t *  option = "all",
Int_t  indent = 0 
) const

Print containers info.

Definition at line 638 of file AliAnalysisTask.cxx.

Referenced by HasBranches(), and PrintTask().

void AliAnalysisTask::PrintTask ( Option_t *  option = "all",
Int_t  indent = 0 
) const
virtual
Bool_t AliAnalysisTask::ProducersTouched ( ) const

Check if all producer containers are in the "touched" state.

Definition at line 584 of file AliAnalysisTask.cxx.

Referenced by HasBranches(), and PrintTask().

void AliAnalysisTask::Reset ( void  )
virtual

Clear activity flag. Reset data for exchange containers.

Definition at line 549 of file AliAnalysisTask.cxx.

Referenced by AliAnalysisManager::ResetAnalysis().

virtual Bool_t AliAnalysisTask::ResetOutputData ( )
inlinevirtual

Definition at line 191 of file AliAnalysisTask.h.

Bool_t AliAnalysisTask::SetBranchAddress ( Int_t  islot,
const char *  branch,
void *  address 
) const
protected

Connect an object address to a branch of the specified input.

Definition at line 389 of file AliAnalysisTask.cxx.

Referenced by TaskFilter::ConnectInputData(), and TaskRecoPi0::ConnectInputData().

void AliAnalysisTask::SetBranches ( const char *  names)
inline

Definition at line 215 of file AliAnalysisTask.h.

void AliAnalysisTask::SetChecked ( Bool_t  flag = kTRUE)
inline

Definition at line 216 of file AliAnalysisTask.h.

Referenced by CheckCircularDeps(), and PrintTask().

void AliAnalysisTask::SetPostEventLoop ( Bool_t  flag = kTRUE)

Set the task execution mode - run after event loop or not. All output containers of this task will get the same type.

Definition at line 653 of file AliAnalysisTask.cxx.

Referenced by SetChecked().

void AliAnalysisTask::SetUsed ( Bool_t  flag = kTRUE)

Set 'used' flag recursively to task and all daughter tasks.

Definition at line 534 of file AliAnalysisTask.cxx.

Referenced by AliAnalysisManager::InitAnalysis(), SetChecked(), and SetUsed().

void AliAnalysisTask::SetZombie ( Bool_t  flag = kTRUE)
inline

Definition at line 219 of file AliAnalysisTask.h.

Referenced by AliAnalysisManager::InitAnalysis().

Member Data Documentation

TString AliAnalysisTask::fBranchNames
protected

List of input branches that need to be loaded for this task.

Definition at line 129 of file AliAnalysisTask.h.

Referenced by GetBranches(), operator=(), and PrintTask().

Bool_t AliAnalysisTask::fInitialized
protected

True if Init() was called.

Definition at line 121 of file AliAnalysisTask.h.

Referenced by CheckNotify(), IsInitialized(), and operator=().

TObjArray* AliAnalysisTask::fInputs
protected

Array of input slots.

Definition at line 127 of file AliAnalysisTask.h.

Referenced by AliAnalysisTask(), AreSlotsConnected(), DefineInput(), operator=(), and ~AliAnalysisTask().

Int_t AliAnalysisTask::fNinputs
protected
Int_t AliAnalysisTask::fNoutputs
protected
Bool_t* AliAnalysisTask::fOutputReady
protected

Flags for output readyness.

Definition at line 125 of file AliAnalysisTask.h.

Referenced by AliAnalysisTask(), DefineOutput(), operator=(), and PostData().

TObjArray* AliAnalysisTask::fOutputs
protected

Array of output slots.

Definition at line 128 of file AliAnalysisTask.h.

Referenced by AliAnalysisTask(), AreSlotsConnected(), DefineOutput(), operator=(), and ~AliAnalysisTask().

TObject* AliAnalysisTask::fPublishedData
protected

! published data

Definition at line 126 of file AliAnalysisTask.h.

Referenced by AliAnalysisTask(), GetPublishedData(), operator=(), and PostData().

Bool_t AliAnalysisTask::fReady
protected

Flag if the task is ready.

Definition at line 120 of file AliAnalysisTask.h.

Referenced by AreSlotsConnected(), IsReady(), and operator=().


The documentation for this class was generated from the following files: