X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ANALYSIS%2FAliAnalysisDataContainer.h;h=5e2a87001a4e10ea360c0b72e1f71a9ed3cff4ca;hb=573322da712664fb93983235e21daed122153be1;hp=4c49ca22b7ecd7ae95f979f0ba6759aba66af27c;hpb=37a26056f695cf4d8ecfb9327ea3f090d83d0a9c;p=u%2Fmrichter%2FAliRoot.git diff --git a/ANALYSIS/AliAnalysisDataContainer.h b/ANALYSIS/AliAnalysisDataContainer.h index 4c49ca22b7e..5e2a87001a4 100644 --- a/ANALYSIS/AliAnalysisDataContainer.h +++ b/ANALYSIS/AliAnalysisDataContainer.h @@ -19,10 +19,15 @@ #include "TNamed.h" #endif +#ifndef ROOT_TString +#include "TString.h" +#endif + class TClass; -class TString; class TObjArray; +class TCollection; class AliAnalysisTask; +class AliAnalysisDataWrapper; class AliESD; class AliAnalysisDataContainer : public TNamed { @@ -33,6 +38,9 @@ enum ENotifyMessage { kSaveData, kFileChange }; +enum EAnalysisContainerFlags { + kPostEventLoop = BIT(14) +}; AliAnalysisDataContainer(); AliAnalysisDataContainer(const AliAnalysisDataContainer &cont); AliAnalysisDataContainer(const char *name, TClass *type); @@ -42,37 +50,78 @@ enum ENotifyMessage { AliAnalysisDataContainer &operator=(const AliAnalysisDataContainer &cont); // Getters TObject *GetData() const {return fData;} - TClass *GetType() const {return fType;} + const char *GetFileName() const {return fFileName.Data();} + TClass *GetType() const; AliAnalysisTask *GetProducer() const {return fProducer;} TObjArray *GetConsumers() const {return fConsumers;} virtual void GetEntry(Long64_t ientry); // Setters + void ResetDataReady() {fDataReady = kFALSE;} virtual Bool_t SetData(TObject *data, Option_t *option=""); void SetDataOwned(Bool_t flag) {fOwnedData = flag;} - void SetFileName(const char *name); + void SetPostEventLoop(Bool_t flag=kTRUE) {TObject::SetBit(kPostEventLoop,flag);} + void SetFileName(const char *filename) {fFileName = filename;} void SetProducer(AliAnalysisTask *prod, Int_t islot); void AddConsumer(AliAnalysisTask *cons, Int_t islot); void DeleteData(); + // Wrapping + AliAnalysisDataWrapper *ExportData() const; + void ImportData(AliAnalysisDataWrapper *pack); // Container status checking Bool_t IsDataReady() const {return fDataReady;} + Bool_t IsPostEventLoop() const {return TObject::TestBit(kPostEventLoop);} Bool_t IsOwnedData() const {return fOwnedData;} Bool_t ClientsExecuted() const; Bool_t HasConsumers() const {return (fConsumers != 0);} Bool_t HasProducer() const {return (fProducer != 0);} + // Container merging + virtual Long64_t Merge(TCollection *list); // Send a notify signal to the container virtual void NotifyChange(ENotifyMessage /*type*/) {;} // Print connected tasks/status void PrintContainer(Option_t *option="all", Int_t indent=0) const; - + +private: + void SetType(TClass *type) {fType = type;} + protected: Bool_t fDataReady; // Flag that data is ready Bool_t fOwnedData; // Flag data ownership - TString fFileName; // Name of the file that will store the data if requested + TString fFileName; // File storing the data TObject *fData; // Contained data - TClass *fType; // Type of contained data + TClass *fType; //! Type of contained data AliAnalysisTask *fProducer; // Analysis task to which the slot belongs TObjArray *fConsumers; // List of consumers of the data ClassDef(AliAnalysisDataContainer,1) // Class describing a data container for analysis }; + +//============================================================================== +// AliAnalysysDataWrapper - A basic wrapper for exchanging via the network +// the data held by AliAnalysisDataContainer between the master and the client +// in PROOF case. +//============================================================================== + +class AliAnalysisDataWrapper : public TNamed { + +public: + AliAnalysisDataWrapper() : TNamed(), fData(NULL) {} + AliAnalysisDataWrapper(TObject *data) : TNamed(), fData(data) {} + AliAnalysisDataWrapper(const AliAnalysisDataWrapper &other) + : TNamed(other), fData(other.fData) {} + virtual ~AliAnalysisDataWrapper() {} + + // Assignment + AliAnalysisDataWrapper &operator=(const AliAnalysisDataWrapper &other); + + TObject *Data() const {return fData;} + // Merging + virtual Long64_t Merge(TCollection *list); + +protected: + TObject *fData; // Wrapped data + + ClassDef(AliAnalysisDataWrapper, 1) // Data wrapper class for exchange via the net +}; + #endif