1 #ifndef ALIDATALOADER_H
2 #define ALIDATALOADER_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
8 //__________________________________________
9 ////////////////////////////////////////////
11 // class AliDataLoader //
13 // Loader responsible for one data type //
14 // i.e. Hits, Kine, etc. //
15 // many objects type can be assciated //
16 // with one data type: storing object //
17 // (usually tree), task producing it, //
18 // Quality Assurance(QA), QA Task, and //
22 ////////////////////////////////////////////
24 #include <TDirectory.h>
34 class AliObjectLoader;
39 class AliDataLoader: public TNamed
43 AliDataLoader(const char* filename, const char* contname, const char* name, Option_t* opt = "t");
44 AliDataLoader(const AliDataLoader& source);
45 AliDataLoader& operator=(const AliDataLoader& source);
46 virtual ~AliDataLoader();
48 virtual Int_t SetEvent();
49 virtual Int_t GetEvent();
51 //shrtcuts method to basic data base loader 0
52 virtual Int_t Load(Option_t* opt="");
53 virtual void Unload();
54 virtual Int_t Reload();
55 virtual Int_t WriteData(Option_t* opt="");
56 virtual TTree* Tree() const;
58 virtual void MakeTree();
59 virtual Int_t OpenFile(Option_t* opt);
61 virtual void CloseFile();
64 const TString& GetFileName() const {return fFileName;}
65 TFile* GetFile() const {return fFile;}
66 TDirectory* GetDirectory() const {return fDirectory;}
67 const TString& GetFileOption() const {return fFileOption;}
68 const Int_t& GetCompressionLevel() const {return fCompressionLevel;}
70 Bool_t Cd(){return (fDirectory)?fDirectory->cd():kFALSE;}
72 virtual void SetFileName(const TString& filename){fFileName = filename;}
73 virtual void SetFileOption(const Option_t* fileopt);
74 virtual void SetCompressionLevel(Int_t cl);
76 Int_t SetEventFolder(TFolder* eventfolder);//sets the event folder
77 Int_t SetFolder(TFolder* folder);//sets the data folder ??????
78 TFolder* GetEventFolder();
79 TFolder* GetFolder() const {return fFolder;}
81 // TObject* GetFromDirectory(const char *name){return (fDirectory)?fDirectory->Get(name):0x0;}
82 void SetFileNameSuffix(const TString& suffix);//adds the suffix before ".root",
83 //e.g. TPC.Digits.root -> TPC.DigitsMerged.root
84 //made on Jiri Chudoba demand
85 const TString SetFileOffset(const TString& fname);//adds the proper number before .root extension suffix
86 void SetDirName(TString& dirname);
88 void AddBaseLoader(AliBaseLoader* bl);
89 enum EStdBasicLoaders {kData = 0,kTask,kQA,kQATask};//standard basic loaders identifiers
91 AliBaseLoader* GetBaseLoader(const TString& name) const;
92 AliBaseLoader* GetBaseLoader(Int_t n) const;
93 AliObjectLoader* GetBaseDataLoader();
94 AliTaskLoader* GetBaseTaskLoader();
95 AliBaseLoader* GetBaseQALoader();
96 AliTaskLoader* GetBaseQATaskLoader();
98 void SetBaseDataLoader(AliBaseLoader* bl);
99 void SetBaseTaskLoader(AliTaskLoader* bl);
100 void SetBaseQALoader(AliBaseLoader* bl);
101 void SetBaseQATaskLoader(AliTaskLoader* bl);
103 Bool_t CheckReload();//checks if we have to reload given file
104 Bool_t IsFileWritable() const;
105 Bool_t IsFileOpen() const;
106 Bool_t IsOptionContrary(const TString& option) const;
111 Int_t GetDebug() const;
112 AliRunLoader* GetRunLoader();//gets the run-loader from event folder
116 TString fFileName; //name of the file
117 TFile* fFile; //! pointer to file
118 TDirectory* fDirectory; //!pointer to TDirectory
119 TString fFileOption; //!file option while opened
120 Int_t fCompressionLevel; //Compression Level of File
122 TObjArray* fBaseLoaders;//base loaders
123 Bool_t fHasTask;// flag if has a task
124 TString fTaskName;// name of the task
125 TTask* fParentalTask;//Parental task
127 TFolder* fEventFolder;//!event folder
128 TFolder* fFolder;//! folder with data
130 ClassDef(AliDataLoader,1)
134 //__________________________________________
135 ////////////////////////////////////////////
137 // class AliBaseLoader //
140 ////////////////////////////////////////////
143 class AliBaseLoader: public TNamed
147 AliBaseLoader(const TString& name, AliDataLoader* dl, Bool_t storeontop = kFALSE);
148 AliBaseLoader(const AliBaseLoader& source);
149 AliBaseLoader& operator=(const AliBaseLoader& source);
151 virtual ~AliBaseLoader(){};
153 virtual Int_t Load(Option_t* opt="");
154 virtual void Unload();
155 virtual Int_t Reload();
156 virtual Int_t WriteData(Option_t* opt="");
157 virtual void Clean();
158 virtual Int_t Post();//Takes from file and sends to proper TFolder (Data Folder)
159 virtual Int_t Post(TObject* data);//Sends to proper TFolder (Data Folder)
160 virtual TObject* Get() const = 0;
161 Bool_t IsLoaded()const{return fIsLoaded;}
162 void SetDataLoader(AliDataLoader* dl){fDataLoader = dl;}
163 void SetEventFolder(TFolder* /*ef*/){;}
164 void SetDoNotReload(Bool_t flag){fDoNotReload = flag;}
165 Bool_t DoNotReload() const {return fDoNotReload;}
166 TDirectory* GetDirectory() const;//returns pointer to directory where data are stored.
167 TObject* GetFromDirectory(const char *name) const
168 {return (GetDirectory())?GetDirectory()->Get(name):0x0;}
171 virtual Int_t AddToBoard(TObject* obj) = 0;//add to white board - board can be TTask or TFolder
172 virtual void RemoveFromBoard(TObject* obj) = 0;
174 AliDataLoader* GetDataLoader() const;
175 Int_t GetDebug() const;
177 Bool_t fIsLoaded; //! flag indicating if data are loaded
178 Bool_t fStoreInTopOfFile;// if true, data are stored in top of file ->Indicates fDoNotReload == kTRUE
181 Bool_t fDoNotReload; // if this flag is on object is not reloaded while GetEvent is called.
182 //Specially important for tasks. Task loops over events while producing data,
183 //and has a base loader which writes it to file every processed event.
184 //If this flag is not on, while taking next event, loader deletes task
185 // and tries to get new one from file
186 AliDataLoader* fDataLoader; //! pointer to Data Loader this Base Loader belongs to
188 ClassDef(AliBaseLoader,1)
191 //__________________________________________
192 ////////////////////////////////////////////
194 // class AliObjectLoader //
197 ////////////////////////////////////////////
199 class AliObjectLoader: public AliBaseLoader
203 AliObjectLoader(const TString& name, AliDataLoader* dl, Bool_t storeontop = kFALSE);
204 AliObjectLoader(const AliObjectLoader& source);
205 AliObjectLoader& operator=(const AliObjectLoader& source);
206 virtual ~AliObjectLoader(){};
207 TObject* Get() const;
210 TFolder* GetFolder() const;
211 Int_t AddToBoard(TObject* obj);
212 void RemoveFromBoard(TObject* obj);
214 ClassDef(AliObjectLoader,1)
218 //__________________________________________
219 ////////////////////////////////////////////
221 // class AliTreeLoader //
224 ////////////////////////////////////////////
226 class AliTreeLoader: public AliObjectLoader
230 AliTreeLoader(const TString& name, AliDataLoader* dl, Bool_t storeontop = kFALSE);
231 AliTreeLoader(const AliTreeLoader& source);
232 AliTreeLoader& operator=(const AliTreeLoader& source);
233 virtual ~AliTreeLoader(){};
235 virtual TTree* Tree() const {return dynamic_cast<TTree*>(Get());}
236 virtual void MakeTree();
237 virtual Int_t WriteData(Option_t* opt="");
239 ClassDef(AliTreeLoader,1)
242 //__________________________________________
243 ////////////////////////////////////////////
245 // class AliTaskLoader //
248 ////////////////////////////////////////////
250 class AliTaskLoader: public AliBaseLoader
253 AliTaskLoader():fParentalTask(0x0){};
254 AliTaskLoader(const TString& name, AliDataLoader* dl, TTask* parentaltask, Bool_t storeontop = kFALSE);
255 AliTaskLoader(const AliTaskLoader& source);
256 AliTaskLoader& operator=(const AliTaskLoader& source);
257 virtual ~AliTaskLoader(){};
259 TObject* Get() const;
260 virtual TTask* Task() const {return dynamic_cast<TTask*>(Get());}
261 virtual void Clean();
264 Int_t AddToBoard(TObject* obj);
265 void RemoveFromBoard(TObject* obj);
266 TTask* GetParentalTask() const;
269 TTask* fParentalTask; // Parental task
271 ClassDef(AliTaskLoader,1)