Another round of effc++ changes
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisDataSlot.cxx
CommitLineData
d3106602 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id$ */
17// Author: Andrei Gheata, 31/05/2006
18
19//==============================================================================
20// AliAnalysysDataSlot - Class representing a data slot of an analysis task.
21// An analysis slot enforces a certain data type required by the Exec()
22// method of the analysis task. The slot must be connected to a data
23// container with data of the same type.
24//
25// The class should not be directly created by users - it is created by
26// each AliAnalysisTask when defining its input/output slots using:
27//
28// AliAnalysisTask::SetInput(Int_t index, TClass *type);
29// AliAnalysisTask::SetOutput(TClass *type);
30//
31// An existing data contaner (AliAnalysisDataContainer) can be connected to the
32// input/output slots of an analysis task using:
33//
34// AliAnalysisModule::ConnectInput(AliAnalysisTask *task, Int_t islot,
35// AliAnalysisDataContainer *cont)
36// AliAnalysisModule::ConnectOutput(AliAnalysisTask *task,
37// AliAnalysisDataContainer *cont)
38// To connect a slot to a data container, the data types declared by both must
39// match.
40//==============================================================================
41
42#include "TClass.h"
43#include "AliLog.h"
44
45#include "AliAnalysisDataSlot.h"
46#include "AliAnalysisTask.h"
47#include "AliAnalysisDataContainer.h"
48
49ClassImp(AliAnalysisDataSlot)
50
51//______________________________________________________________________________
52Bool_t AliAnalysisDataSlot::ConnectContainer(AliAnalysisDataContainer *cont)
53{
54// Connect the data slot with a given container. The operation will succeed only
55// if the type defined by the slot inherits from the type enforced by the container.
56// The error message in case of failure is posted by the caller.
57 if (!cont || !fType) return kFALSE;
58 if (!fType->InheritsFrom(cont->GetType())) {
59 AliError(Form("Data slot of type %s of task %s cannot be connected to data container %s of type %s",
60 fType->GetName(), fParent->GetName(), cont->GetName(), cont->GetType()->GetName()));
61 return kFALSE;
62 }
63 fContainer = cont;
64 return kTRUE;
65}
66
67//______________________________________________________________________________
68TObject *AliAnalysisDataSlot::GetData() const
69{
70// Retreives the data from the container if it is ready.
71 if (!fContainer) {
72 AliError(Form("Data slot of type %s of task %s has no connected data container",
73 fType->GetName(), fParent->GetName()));
74 return NULL;
75 }
76 if (!fContainer->IsDataReady()) return NULL;
77 return fContainer->GetData();
78}
79
80//______________________________________________________________________________
81Bool_t AliAnalysisDataSlot::IsDataReady() const
82{
83// Check if data for this slot is ready in its container.
84 if (!fContainer) {
85 AliError(Form("Data slot of type %s of task %s has no connected data container",
86 fType->GetName(), fParent->GetName()));
87 return kFALSE;
88 }
89 return fContainer->IsDataReady();
90}
91