Fixing Coding violations
[u/mrichter/AliRoot.git] / STEER / AliRunLoader.h
CommitLineData
88cb7938 1#ifndef ALIRUNLoader_H
2#define ALIRUNLoader_H
3
4//___________________________________________________________________
5/////////////////////////////////////////////////////////////////////
6// //
7// class AliRunLoader //
8// //
9// This class aims to be the only one interface for manging data //
10// It stores Loaders for all modules which knows the filenames //
11// of the data files to be stored. //
12// It aims to substitude AliRun in automatic managing of data //
13// positioning thus there won't be necessity of loading gAlice //
14// from file in order to get fast access to the data //
15// //
16// Logical place to put the specific Loader to the given //
17// detector is detector itself (i.e ITSLoader in ITS). //
18// But, to load detector object one need to load gAlice, and //
19// by the way all other detectors with their geometrieces and //
20// so on. So, if one need to open TPC clusters there is no //
21// principal nedd to read everything. //
22// //
23/////////////////////////////////////////////////////////////////////
24
25#include <TNamed.h>
024a7e64 26
88cb7938 27#include "AliConfig.h"
28#include "AliLoader.h"
29#include "AliDataLoader.h"
30
024a7e64 31class TFile;
88cb7938 32class TString;
33class TFolder;
34class TObjArray;
35class TTree;
36class TTask;
37class TParticle;
38
39class AliRun;
40class AliLoader;
41class AliDetector;
42class AliHeader;
43class AliStack;
44class AliRunDigitizer;
45
46
47class AliRunLoader: public TNamed
48{
49 public:
50
51 AliRunLoader();
52 AliRunLoader(const char* topfoldername);
53 AliRunLoader(TFolder* topfolder);
024a7e64 54 AliRunLoader(const AliRunLoader &rl);
55 AliRunLoader & operator = (const AliRunLoader &rl)
56 {rl.Copy(*this); return *this;}
88cb7938 57
58 virtual ~AliRunLoader();
59
60 static AliRunLoader* Open(const char* filename = "galice.root",
e191bb57 61 const char* eventfoldername = AliConfig::GetDefaultEventFolderName(),
88cb7938 62 Option_t* option = "READ");
63
64 Int_t GetEventNumber() const {return fCurrentEvent;}
65
66 Int_t GetEvent(Int_t evno);//sets the event number and reloads data in folders properly
67 Int_t GetNextEvent(){return GetEvent(fCurrentEvent+1);}//gets next event
68 Int_t SetEventNumber(Int_t evno); //cleans folders and sets the root dirs in files (do not reload data)
69 Int_t SetNextEvent(){return SetEventNumber(fCurrentEvent+1);}
70
71 Int_t GetNumberOfEvents();
72
73 void MakeTree(Option_t *option);
74 void MakeHeader();
75 void MakeStack();
76
77 Int_t LoadgAlice();
78 Int_t LoadHeader();
79 Int_t LoadKinematics(Option_t* option = "READ");
80 Int_t LoadTrackRefs(Option_t* option = "READ");
81
82 void UnloadHeader();
83 void UnloadKinematics();
84 void UnloadgAlice();
85 void UnloadTrackRefs();
86
87 void SetKineFileName(const TString& fname){fKineDataLoader->SetFileName(fname);}
88 void SetTrackRefsFileName(const TString& fname){fTrackRefsDataLoader->SetFileName(fname);}
89
90 TTree* TreeE() const; //returns the tree from folder; shortcut method
91 AliHeader* GetHeader() const;
92
93 AliStack* Stack() const {return fStack;}
94
95 TTree* TreeK() const; //returns the tree from folder; shortcut method
96 TTree* TreeTR() const; //returns the tree from folder; shortcut method
97
98 AliRun* GetAliRun()const;
99
100 Int_t WriteGeometry(Option_t* opt="");
101 Int_t WriteHeader(Option_t* opt="");
102 Int_t WriteAliRun(Option_t* opt="");
103 Int_t WriteKinematics(Option_t* opt="");
104 Int_t WriteTrackRefs(Option_t* opt="");
105 Int_t WriteRunLoader(Option_t* opt="");
106
107 Int_t WriteHits(Option_t* opt="");
108 Int_t WriteSDigits(Option_t* opt="");
109 Int_t WriteDigits(Option_t* opt="");
110 Int_t WriteRecPoints(Option_t* opt="");
111 Int_t WriteTracks(Option_t* opt="");
112
113 Int_t LoadHits(Option_t* detectors = "all",Option_t* opt = "RAED");
114 Int_t LoadSDigits(Option_t* detectors = "all",Option_t* opt = "RAED");
115 Int_t LoadDigits(Option_t* detectors = "all",Option_t* opt = "RAED");
116 Int_t LoadRecPoints(Option_t* detectors = "all",Option_t* opt = "RAED");
117 Int_t LoadTracks(Option_t* detectors = "all",Option_t* opt = "RAED");
1bb20a37 118 Int_t LoadRecParticles(Option_t* detectors = "all",Option_t* opt = "RAED");
88cb7938 119
1bb20a37 120 void UnloadHits(Option_t* detectors = "all");
121 void UnloadSDigits(Option_t* detectors = "all");
122 void UnloadDigits(Option_t* detectors = "all");
123 void UnloadRecPoints(Option_t* detectors = "all");
124 void UnloadTracks(Option_t* detectors = "all");
125 void UnloadRecParticles(Option_t* detectors = "all");
126 void UnloadAll(Option_t* detectors = "all");
88cb7938 127
128 void AddLoader(AliLoader* loader);
129 void AddLoader(AliDetector* det);
130 AliLoader* GetLoader(const char* detname) const;
131 AliLoader* GetLoader(AliDetector* det) const;
e191bb57 132 Int_t SetEventFolderName(const TString& name = AliConfig::GetDefaultEventFolderName());//sets top folder name for this run; of alread
88cb7938 133 void CleanFolders();//removes all abjects from folder structure
134 void CleanDetectors();
135 void CleanKinematics(){Clean(fgkKineContainerName);}
136 void CleanTrackRefs(){Clean(fgkTrackRefsContainerName);}
137
138 void RemoveEventFolder(); //remove folder structure from top folder
139 void SetCompressionLevel(Int_t cl);
140 void SetKineComprLevel(Int_t cl);
141 void SetTrackRefsComprLevel(Int_t cl);
142
143 TFolder* GetEventFolder() const {return fEventFolder;}
144 void CdGAFile();
145
146 void MakeTrackRefsContainer();
147 void SetDirName(TString& dirname);
148 Int_t GetFileOffset() const;
149 void SetNumberOfEventsPerFile(Int_t nevpf){fNEventsPerFile = nevpf;}
150
151 void SetDigitsFileNameSuffix(const TString& suffix);//adds the suffix before ".root",
152 //e.g. TPC.Digits.root -> TPC.DigitsMerged.root
153 //made on Jiri Chudoba demand
154 TString GetFileName() const;//returns name of galice file
155 const TObjArray* GetArrayOfLoaders() const {return fLoaders;}
156 Int_t GetDebug() const {return AliLoader::GetDebug();}
024a7e64 157 void Cd(){fgRunLoader = this;}
f0f6f856 158 void Synchronize();
159
1bb20a37 160 AliLoader* GetDetectorLoader(const char* detname);
161 TTree* GetTreeH(const char* detname, Bool_t maketree);
162 TTree* GetTreeS(const char* detname, Bool_t maketree);
163 TTree* GetTreeD(const char* detname, Bool_t maketree);
164 TTree* GetTreeR(const char* detname, Bool_t maketree);
165 TTree* GetTreeT(const char* detname, Bool_t maketree);
166 TTree* GetTreeP(const char* detname, Bool_t maketree);
d0d4a6b3 167
168 /******************************************/
169 /***** Public S T A T I C Stuff *******/
170 /******************************************/
171 static AliRunLoader* GetRunLoader(const char* eventfoldername);
172 static AliRunLoader* GetRunLoader(){return fgRunLoader;}
173 static AliLoader* GetDetectorLoader(const char* detname, const char* eventfoldername);
174 static TTree* GetTreeH(const char* detname, Bool_t maketree, const char* eventfoldername);
175 static TTree* GetTreeS(const char* detname, Bool_t maketree, const char* eventfoldername);
176 static TTree* GetTreeD(const char* detname, Bool_t maketree, const char* eventfoldername);
177 static TTree* GetTreeR(const char* detname, Bool_t maketree, const char* eventfoldername);
178 static TTree* GetTreeT(const char* detname, Bool_t maketree, const char* eventfoldername);
179 static TTree* GetTreeP(const char* detname, Bool_t maketree, const char* eventfoldername);
180
181// static AliRunDigitizer* GetRunDigitizer();
182// Tasks are supposed to be singletons, that is why following methods are static
183 static TTask* GetRunDigitizer(); //
184 static TTask* GetRunSDigitizer(); //
185 static TTask* GetRunReconstructioner(); //
186 static TTask* GetRunTracker(); //
187 static TTask* GetRunPIDTask(); //
188 static TTask* GetRunQATask(); //
024a7e64 189
190 static TString GetRunLoaderName () {return fgkRunLoaderName;}
191 static TString GetHeaderContainerName () {return fgkHeaderContainerName;}
192 static TString GetKineContainerName () {return fgkKineContainerName;}
193 static TString GetTrackRefsContainerName () {return fgkTrackRefsContainerName;}
194 static TString GetHeaderBranchName () {return fgkHeaderBranchName;}
195 static TString GetKineBranchName () {return fgkKineBranchName;}
196 static TString GetGAliceName () {return fgkGAliceName;}
d0d4a6b3 197
024a7e64 198protected:
88cb7938 199 /**********************************************/
200 /************ PROTECTED ***************/
201 /********* D A T A ************/
202 /**********************************************/
203
204 TObjArray *fLoaders; // List of Detectors
205 TFolder *fEventFolder; //!top folder for this run
206
207 Int_t fCurrentEvent;//!Number of current event
208
209 TFile *fGAFile;//! pointer to main file with AliRun and Run Loader -> galice.root
210 AliHeader *fHeader;//! pointer to header
211 AliStack *fStack; //! pointer to stack
212
213 AliDataLoader *fKineDataLoader;// kinematics data loader
214 AliDataLoader *fTrackRefsDataLoader;//track reference data loader
215
216 Int_t fNEventsPerFile; //defines number of events stored per one file
217 TString fUnixDirName; //! name of unix path to directory that contains event
218 static const TString fgkDefaultKineFileName;//default file name with kinamatics
219 static const TString fgkDefaultTrackRefsFileName;//default file name with kinamatics
220
221
222 /*********************************************/
223 /************ PROTECTED **************/
224 /********* M E T H O D S ***********/
225 /*********************************************/
226
227 void SetGAliceFile(TFile* gafile);//sets the pointer to gAlice file
228 Int_t OpenKineFile(Option_t* opt);
229 Int_t OpenTrackRefsFile(Option_t* opt);
230
231 Int_t OpenDataFile(const TString& filename,TFile*& file,TDirectory*& dir,Option_t* opt,Int_t cl);
232 void SetUnixDir(const TString& udirname);
233 const TString SetFileOffset(const TString& fname);//adds the proper number before .root
234 void SetDetectorAddresses();
235
236 private:
237 void GetListOfDetectors(const char * namelist,TObjArray& pointerarray) const;
238
239 void CleanHeader(){Clean(fgkHeaderContainerName);}
240 void Clean(const TString& name);
241
242 Int_t SetEvent();
243
d0d4a6b3 244 static AliRunLoader* fgRunLoader; //pointer to the AliRunLoader instance
88cb7938 245
024a7e64 246private:
247 void Copy(TObject &arun) const;
248
249 static const TString fgkRunLoaderName; //default name of the run loader
250 static const TString fgkHeaderContainerName; //default name of the kinematics container (TREE) name - TreeE
251 static const TString fgkKineContainerName; //default name of the kinematics container (TREE) name - TreeK
252 static const TString fgkTrackRefsContainerName; //default name of the track references container (TREE) name - TreeTR
253 static const TString fgkHeaderBranchName; //default name of the branch containing the header
254 static const TString fgkKineBranchName; //default name of the branch with kinematics
255 static const TString fgkGAliceName; //default name for gAlice file
88cb7938 256
257 ClassDef(AliRunLoader,1)
258};
259
260#endif