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