]>
Commit | Line | Data |
---|---|---|
d3106602 | 1 | #ifndef ALIANALYSISDATACONTAINER_H |
2 | #define ALIANALYSISDATACONTAINER_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | /* $Id$ */ | |
7 | // Author: Andrei Gheata, 31/05/2006 | |
8 | ||
9 | //============================================================================== | |
10 | // AliAnalysysDataContainer - Container of data of arbitrary type deriving | |
11 | // from TObject used for analysis. A container must be connected to the | |
12 | // output data slot of a single analysis task (producer) , but also as | |
13 | // input slot for possibly several other tasks (consumers). The connected | |
14 | // slots must enforce the same data type as the container (or a derived type). | |
15 | // A container becomes the owner of the contained data once this was produced. | |
16 | //============================================================================== | |
17 | ||
18 | #ifndef ROOT_TNamed | |
19 | #include "TNamed.h" | |
20 | #endif | |
21 | ||
c52c2132 | 22 | #ifndef ROOT_TString |
23 | #include "TString.h" | |
24 | #endif | |
25 | ||
9c19e756 | 26 | #ifndef ROOT_TStopwatch |
27 | #include "TStopwatch.h" | |
28 | #endif | |
29 | ||
d3106602 | 30 | class TClass; |
8d7d3b59 | 31 | class TFile; |
d3106602 | 32 | class TObjArray; |
c52c2132 | 33 | class TCollection; |
d3106602 | 34 | class AliAnalysisTask; |
981f2614 | 35 | class AliAnalysisDataWrapper; |
d3106602 | 36 | |
e61afb80 | 37 | using std::ostream; |
38 | ||
d3106602 | 39 | class AliAnalysisDataContainer : public TNamed { |
40 | ||
41 | public: | |
42 | enum ENotifyMessage { | |
43 | kDeleteData, | |
44 | kSaveData, | |
45 | kFileChange | |
46 | }; | |
c5a87c56 | 47 | enum EAnalysisContainerFlags { |
13ef3bb0 | 48 | kPostEventLoop = BIT(14), |
90a4b3ee | 49 | kSpecialOutput = BIT(15), |
4ff26233 | 50 | kRegisterDataset = BIT(16), |
51 | kExchangeData = BIT(17), | |
52 | kTouchedFlag = BIT(18) | |
c5a87c56 | 53 | }; |
d3106602 | 54 | AliAnalysisDataContainer(); |
37a26056 | 55 | AliAnalysisDataContainer(const AliAnalysisDataContainer &cont); |
d3106602 | 56 | AliAnalysisDataContainer(const char *name, TClass *type); |
57 | virtual ~AliAnalysisDataContainer(); | |
58 | ||
37a26056 | 59 | // Assignment |
60 | AliAnalysisDataContainer &operator=(const AliAnalysisDataContainer &cont); | |
d3106602 | 61 | // Getters |
62 | TObject *GetData() const {return fData;} | |
c52c2132 | 63 | const char *GetFileName() const {return fFileName.Data();} |
84fcd93f | 64 | const char *GetFolderName() const {return fFolderName.Data();} |
8d7d3b59 | 65 | TFile *GetFile() const {return fFile;} |
c52c2132 | 66 | TClass *GetType() const; |
d3106602 | 67 | AliAnalysisTask *GetProducer() const {return fProducer;} |
68 | TObjArray *GetConsumers() const {return fConsumers;} | |
69 | virtual void GetEntry(Long64_t ientry); | |
70 | // Setters | |
4ff26233 | 71 | void Reset() {fData = 0; fDataReady = kFALSE; SetTouched(kFALSE);} |
327eaf46 | 72 | void ResetDataReady() {fDataReady = kFALSE;} |
d3106602 | 73 | virtual Bool_t SetData(TObject *data, Option_t *option=""); |
74 | void SetDataOwned(Bool_t flag) {fOwnedData = flag;} | |
4ff26233 | 75 | void SetExchange(Bool_t flag) {TObject::SetBit(kExchangeData,flag);} |
b1310ef5 | 76 | void SetPostEventLoop(Bool_t flag=kTRUE) {TObject::SetBit(kPostEventLoop,flag);} |
13ef3bb0 | 77 | void SetSpecialOutput(Bool_t flag=kTRUE) {TObject::SetBit(kSpecialOutput,flag);} |
90a4b3ee | 78 | void SetRegisterDataset(Bool_t flag=kTRUE) {TObject::SetBit(kRegisterDataset,flag);} |
84fcd93f | 79 | void SetFileName(const char *filename); |
8d7d3b59 | 80 | void SetFile(TFile *f) {fFile = f;} |
d3106602 | 81 | void SetProducer(AliAnalysisTask *prod, Int_t islot); |
4ff26233 | 82 | void SetTouched(Bool_t flag=kTRUE) {TObject::SetBit(kTouchedFlag,flag);} |
d3106602 | 83 | void AddConsumer(AliAnalysisTask *cons, Int_t islot); |
84 | void DeleteData(); | |
981f2614 | 85 | // Wrapping |
86 | AliAnalysisDataWrapper *ExportData() const; | |
87 | void ImportData(AliAnalysisDataWrapper *pack); | |
d3106602 | 88 | // Container status checking |
89 | Bool_t IsDataReady() const {return fDataReady;} | |
4ff26233 | 90 | Bool_t IsExchange() const {return TObject::TestBit(kExchangeData);} |
b1310ef5 | 91 | Bool_t IsPostEventLoop() const {return TObject::TestBit(kPostEventLoop);} |
13ef3bb0 | 92 | Bool_t IsSpecialOutput() const {return TObject::TestBit(kSpecialOutput);} |
90a4b3ee | 93 | Bool_t IsRegisterDataset() const {return TObject::TestBit(kRegisterDataset);} |
4ff26233 | 94 | Bool_t IsTouched() const {return TObject::TestBit(kTouchedFlag);} |
d3106602 | 95 | Bool_t IsOwnedData() const {return fOwnedData;} |
96 | Bool_t ClientsExecuted() const; | |
97 | Bool_t HasConsumers() const {return (fConsumers != 0);} | |
98 | Bool_t HasProducer() const {return (fProducer != 0);} | |
c52c2132 | 99 | // Container merging |
100 | virtual Long64_t Merge(TCollection *list); | |
d3106602 | 101 | // Send a notify signal to the container |
102 | virtual void NotifyChange(ENotifyMessage /*type*/) {;} | |
103 | // Print connected tasks/status | |
104 | void PrintContainer(Option_t *option="all", Int_t indent=0) const; | |
c52c2132 | 105 | |
106 | private: | |
107 | void SetType(TClass *type) {fType = type;} | |
108 | ||
d3106602 | 109 | protected: |
110 | Bool_t fDataReady; // Flag that data is ready | |
111 | Bool_t fOwnedData; // Flag data ownership | |
c52c2132 | 112 | TString fFileName; // File storing the data |
84fcd93f | 113 | TString fFolderName; // Folder name in the output file |
8d7d3b59 | 114 | TFile *fFile; //! Opened file |
d3106602 | 115 | TObject *fData; // Contained data |
c52c2132 | 116 | TClass *fType; //! Type of contained data |
d3106602 | 117 | AliAnalysisTask *fProducer; // Analysis task to which the slot belongs |
118 | TObjArray *fConsumers; // List of consumers of the data | |
119 | ||
84fcd93f | 120 | ClassDef(AliAnalysisDataContainer,2) // Class describing a data container for analysis |
d3106602 | 121 | }; |
981f2614 | 122 | |
123 | //============================================================================== | |
124 | // AliAnalysysDataWrapper - A basic wrapper for exchanging via the network | |
125 | // the data held by AliAnalysisDataContainer between the master and the client | |
126 | // in PROOF case. | |
127 | //============================================================================== | |
128 | ||
129 | class AliAnalysisDataWrapper : public TNamed { | |
130 | ||
131 | public: | |
8167b1d0 | 132 | |
133 | enum EAnalysisWrapperFlags { | |
134 | kDeleteData = BIT(14) | |
135 | }; | |
981f2614 | 136 | AliAnalysisDataWrapper() : TNamed(), fData(NULL) {} |
8167b1d0 | 137 | AliAnalysisDataWrapper(TObject *data); |
981f2614 | 138 | AliAnalysisDataWrapper(const AliAnalysisDataWrapper &other) |
139 | : TNamed(other), fData(other.fData) {} | |
8167b1d0 | 140 | virtual ~AliAnalysisDataWrapper(); |
981f2614 | 141 | |
142 | // Assignment | |
143 | AliAnalysisDataWrapper &operator=(const AliAnalysisDataWrapper &other); | |
144 | ||
145 | TObject *Data() const {return fData;} | |
146 | // Merging | |
147 | virtual Long64_t Merge(TCollection *list); | |
8167b1d0 | 148 | void SetDeleteData(Bool_t flag=kTRUE) {TObject::SetBit(kDeleteData,flag);} |
981f2614 | 149 | |
150 | protected: | |
151 | TObject *fData; // Wrapped data | |
152 | ||
153 | ClassDef(AliAnalysisDataWrapper, 1) // Data wrapper class for exchange via the net | |
154 | }; | |
155 | ||
9162405c | 156 | //============================================================================== |
157 | // AliAnalysisFileDescriptor - A simple wrapper for data related to accessing | |
158 | // an analysis input file. | |
159 | //============================================================================== | |
9162405c | 160 | class AliAnalysisFileDescriptor : public TObject { |
161 | ||
162 | public: | |
163 | AliAnalysisFileDescriptor(); | |
164 | AliAnalysisFileDescriptor(const TFile *file); | |
165 | AliAnalysisFileDescriptor(const AliAnalysisFileDescriptor &other); | |
166 | virtual ~AliAnalysisFileDescriptor(); | |
167 | ||
168 | // Assignment | |
169 | AliAnalysisFileDescriptor &operator=(const AliAnalysisFileDescriptor &other); | |
170 | ||
171 | void Done(); | |
172 | ||
173 | const char *GetGUID() const {return fGUID;} | |
174 | Int_t GetImage() const {return fImage;} | |
175 | const char *GetLfn() const {return fLfn;} | |
176 | Int_t GetNreplicas() const {return fNreplicas;} | |
177 | Long64_t GetOpenAt() const {return fOpenedAt;} | |
178 | Double_t GetOpenTime() const {return fOpenTime;} | |
179 | const char *GetPfn() const {return fPfn;} | |
180 | Long64_t GetReadBytes() const {return fReadBytes;} | |
181 | Long64_t GetSize() const {return fSize;} | |
182 | const char *GetSE() const {return fSE;} | |
183 | Double_t GetThroughput() const {return fThroughput;} | |
184 | Double_t GetProcessingTime() const {return fProcessingTime;} | |
185 | const char *GetUrl() const {return fUrl;} | |
186 | Bool_t IsArchive() const {return fIsArchive;} | |
187 | virtual void Print(Option_t *option="") const; | |
2ad98fc5 | 188 | virtual void SavePrimitive(std::ostream &out, Option_t *option = ""); |
9162405c | 189 | void SetOpenTime(Double_t time) {fOpenTime = time;} |
190 | ||
191 | ||
192 | protected: | |
193 | TString fLfn; // logical file name | |
194 | TString fGUID; // GUID | |
195 | TString fUrl; // url for the opened copy | |
196 | TString fPfn; // physical file name | |
197 | TString fSE; // Storage element | |
198 | Bool_t fIsArchive; // Archive flag | |
199 | Int_t fImage; // Image number | |
200 | Int_t fNreplicas; // Number of replicas | |
201 | Long64_t fStartBytes;// Total number of read bytes at start | |
202 | Long64_t fReadBytes; // Number of bytes read | |
203 | Long64_t fSize; // Size of the file in bytes | |
204 | Long64_t fOpenedAt; // Absolute value for time when opened | |
205 | Double_t fOpenTime; // Time elapsed to open file | |
206 | Double_t fProcessingTime; // Processing | |
207 | Double_t fThroughput; // Throughput | |
9c19e756 | 208 | TStopwatch fTimer; //! Processing time |
9162405c | 209 | |
210 | ClassDef(AliAnalysisFileDescriptor,1) // Class describing a a file processed in the analysis | |
211 | }; | |
212 | ||
d3106602 | 213 | #endif |