ROOT logo
#ifndef ALIANALYSISDATASLOT_H
#define ALIANALYSISDATASLOT_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */
// Author: Andrei Gheata, 31/05/2006

//==============================================================================
//   AliAnalysysDataSlot - Class representing a data slot of an analysis task.
//      An analysis slot enforces a certain data type required by the Exec()
//      method of the analysis task. The slot must be connected to a data 
//      container with data of the same type.
//==============================================================================

#ifndef ROOT_TNamed
#include "TNamed.h"
#endif

class TClass;
class TTree;
class AliAnalysisDataContainer;
class AliAnalysisTask;

class AliAnalysisDataSlot : public TNamed {

public:
   AliAnalysisDataSlot() : TNamed(), fType(NULL), fParent(NULL), fContainer(NULL) {}
   AliAnalysisDataSlot(TClass *type, AliAnalysisTask *task);
   AliAnalysisDataSlot(const AliAnalysisDataSlot &slot);
   virtual ~AliAnalysisDataSlot() {}

   // Assignment
   AliAnalysisDataSlot &operator=(const AliAnalysisDataSlot &slot);
   // Connect some container to the slot
   Bool_t                    ConnectContainer(AliAnalysisDataContainer *cont);
   static Int_t              EnableBranch(const char *bname, TTree *tree);
   // Getters
   void                     *GetBranchAddress(const char *branch) const;
   Bool_t                    SetBranchAddress(const char *branch, void *address);
   TClass                   *GetType() const;
   AliAnalysisTask          *GetParent() const    {return fParent;}
   AliAnalysisDataContainer *GetContainer() const {return fContainer;}
   TObject                  *GetData() const;
   // Slot status checking
   Bool_t                    IsConnected() const  {return ((fContainer)?kTRUE:kFALSE);}
   Bool_t                    IsDataReady() const;

private:
   void                      SetType(TClass *type) {fType = type;}
   
protected:
   TClass                   *fType;       //! Type of the slot
   AliAnalysisTask          *fParent;     // Analysis task to which the slot belongs
   AliAnalysisDataContainer *fContainer;  // Container connected to the slot
   
   ClassDef(AliAnalysisDataSlot,1)  // Class describing an analysis data slot
};
#endif
 AliAnalysisDataSlot.h:1
 AliAnalysisDataSlot.h:2
 AliAnalysisDataSlot.h:3
 AliAnalysisDataSlot.h:4
 AliAnalysisDataSlot.h:5
 AliAnalysisDataSlot.h:6
 AliAnalysisDataSlot.h:7
 AliAnalysisDataSlot.h:8
 AliAnalysisDataSlot.h:9
 AliAnalysisDataSlot.h:10
 AliAnalysisDataSlot.h:11
 AliAnalysisDataSlot.h:12
 AliAnalysisDataSlot.h:13
 AliAnalysisDataSlot.h:14
 AliAnalysisDataSlot.h:15
 AliAnalysisDataSlot.h:16
 AliAnalysisDataSlot.h:17
 AliAnalysisDataSlot.h:18
 AliAnalysisDataSlot.h:19
 AliAnalysisDataSlot.h:20
 AliAnalysisDataSlot.h:21
 AliAnalysisDataSlot.h:22
 AliAnalysisDataSlot.h:23
 AliAnalysisDataSlot.h:24
 AliAnalysisDataSlot.h:25
 AliAnalysisDataSlot.h:26
 AliAnalysisDataSlot.h:27
 AliAnalysisDataSlot.h:28
 AliAnalysisDataSlot.h:29
 AliAnalysisDataSlot.h:30
 AliAnalysisDataSlot.h:31
 AliAnalysisDataSlot.h:32
 AliAnalysisDataSlot.h:33
 AliAnalysisDataSlot.h:34
 AliAnalysisDataSlot.h:35
 AliAnalysisDataSlot.h:36
 AliAnalysisDataSlot.h:37
 AliAnalysisDataSlot.h:38
 AliAnalysisDataSlot.h:39
 AliAnalysisDataSlot.h:40
 AliAnalysisDataSlot.h:41
 AliAnalysisDataSlot.h:42
 AliAnalysisDataSlot.h:43
 AliAnalysisDataSlot.h:44
 AliAnalysisDataSlot.h:45
 AliAnalysisDataSlot.h:46
 AliAnalysisDataSlot.h:47
 AliAnalysisDataSlot.h:48
 AliAnalysisDataSlot.h:49
 AliAnalysisDataSlot.h:50
 AliAnalysisDataSlot.h:51
 AliAnalysisDataSlot.h:52
 AliAnalysisDataSlot.h:53
 AliAnalysisDataSlot.h:54
 AliAnalysisDataSlot.h:55
 AliAnalysisDataSlot.h:56
 AliAnalysisDataSlot.h:57
 AliAnalysisDataSlot.h:58
 AliAnalysisDataSlot.h:59