4 //___________________________________________________________________
5 /////////////////////////////////////////////////////////////////////
7 // class AliRunLoader //
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 //
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. //
23 /////////////////////////////////////////////////////////////////////
27 #include "AliConfig.h"
28 #include "AliLoader.h"
29 #include "AliDataLoader.h"
45 class AliRunDigitizer;
47 class AliCentralTrigger;
49 class AliRunLoader: public TNamed
54 AliRunLoader(const char* topfoldername);
55 AliRunLoader(TFolder* topfolder);
57 virtual ~AliRunLoader();
59 static AliRunLoader* Open(const char* filename = "galice.root",
60 const char* eventfoldername = AliConfig::GetDefaultEventFolderName(),
61 Option_t* option = "READ");
63 Int_t GetEventNumber() const {return fCurrentEvent;}
65 Int_t GetEvent(Int_t evno);//sets the event number and reloads data in folders properly
66 Int_t GetNextEvent(){return GetEvent(fCurrentEvent+1);}//gets next event
67 Int_t SetEventNumber(Int_t evno); //cleans folders and sets the root dirs in files (do not reload data)
68 Int_t SetNextEvent(){return SetEventNumber(fCurrentEvent+1);}
70 Int_t GetNumberOfEvents();
72 AliCDBEntry* GetCDBEntry(const char* name) const;
74 void MakeTree(Option_t *option);
81 Int_t LoadKinematics(Option_t* option = "READ");
82 Int_t LoadTrigger(Option_t* option = "READ");
83 Int_t LoadTrackRefs(Option_t* option = "READ");
87 void UnloadKinematics();
89 void UnloadTrackRefs();
91 void SetKineFileName(const TString& fname){fKineDataLoader->SetFileName(fname);}
92 void SetTrackRefsFileName(const TString& fname){fTrackRefsDataLoader->SetFileName(fname);}
94 TTree* TreeE() const; //returns the tree from folder; shortcut method
95 TTree* TreeCT() const; //returns the tree from folder; shortcut method
96 AliHeader* GetHeader() const;
97 AliCentralTrigger* GetTrigger() const;
99 AliStack* Stack() const {return fStack;}
101 TTree* TreeK() const; //returns the tree from folder; shortcut method
102 TTree* TreeTR() const; //returns the tree from folder; shortcut method
104 AliRun* GetAliRun()const;
106 Int_t WriteGeometry(Option_t* opt="");
107 Int_t WriteHeader(Option_t* opt="");
108 Int_t WriteTrigger(Option_t* opt="");
109 Int_t WriteAliRun(Option_t* opt="");
110 Int_t WriteKinematics(Option_t* opt="");
111 Int_t WriteTrackRefs(Option_t* opt="");
112 Int_t WriteRunLoader(Option_t* opt="");
114 Int_t WriteHits(Option_t* opt="");
115 Int_t WriteSDigits(Option_t* opt="");
116 Int_t WriteDigits(Option_t* opt="");
117 Int_t WriteRecPoints(Option_t* opt="");
118 Int_t WriteTracks(Option_t* opt="");
120 Int_t LoadHits(Option_t* detectors = "all",Option_t* opt = "READ");
121 Int_t LoadSDigits(Option_t* detectors = "all",Option_t* opt = "READ");
122 Int_t LoadDigits(Option_t* detectors = "all",Option_t* opt = "READ");
123 Int_t LoadRecPoints(Option_t* detectors = "all",Option_t* opt = "READ");
124 Int_t LoadTracks(Option_t* detectors = "all",Option_t* opt = "READ");
125 Int_t LoadRecParticles(Option_t* detectors = "all",Option_t* opt = "READ");
127 void UnloadHits(Option_t* detectors = "all");
128 void UnloadSDigits(Option_t* detectors = "all");
129 void UnloadDigits(Option_t* detectors = "all");
130 void UnloadRecPoints(Option_t* detectors = "all");
131 void UnloadTracks(Option_t* detectors = "all");
132 void UnloadRecParticles(Option_t* detectors = "all");
133 void UnloadAll(Option_t* detectors = "all");
135 void AddLoader(AliLoader* loader);
136 void AddLoader(AliDetector* det);
137 AliLoader* GetLoader(const char* detname) const;
138 AliLoader* GetLoader(AliDetector* det) const;
139 Int_t SetEventFolderName(const TString& name = AliConfig::GetDefaultEventFolderName());//sets top folder name for this run; of alread
140 void CleanFolders();//removes all abjects from folder structure
141 void CleanDetectors();
142 void CleanKinematics(){Clean(fgkKineContainerName);}
143 void CleanTrackRefs(){Clean(fgkTrackRefsContainerName);}
145 void RemoveEventFolder(); //remove folder structure from top folder
146 void SetCompressionLevel(Int_t cl);
147 void SetKineComprLevel(Int_t cl);
148 void SetTrackRefsComprLevel(Int_t cl);
150 TFolder* GetEventFolder() const {return fEventFolder;}
153 void MakeTrackRefsContainer();
154 void SetDirName(TString& dirname);
155 Int_t GetFileOffset() const;
156 void SetNumberOfEventsPerFile(Int_t nevpf){fNEventsPerFile = nevpf;}
158 void SetDigitsFileNameSuffix(const TString& suffix);//adds the suffix before ".root",
159 //e.g. TPC.Digits.root -> TPC.DigitsMerged.root
160 //made on Jiri Chudoba demand
161 TString GetFileName() const;//returns name of galice file
162 const TObjArray* GetArrayOfLoaders() const {return fLoaders;}
163 void Cd(){fgRunLoader = this;}
166 AliLoader* GetDetectorLoader(const char* detname);
167 TTree* GetTreeH(const char* detname, Bool_t maketree);
168 TTree* GetTreeS(const char* detname, Bool_t maketree);
169 TTree* GetTreeD(const char* detname, Bool_t maketree);
170 TTree* GetTreeR(const char* detname, Bool_t maketree);
171 TTree* GetTreeT(const char* detname, Bool_t maketree);
172 TTree* GetTreeP(const char* detname, Bool_t maketree);
174 /******************************************/
175 /***** Public S T A T I C Stuff *******/
176 /******************************************/
177 static AliRunLoader* GetRunLoader(const char* eventfoldername);
178 static AliRunLoader* GetRunLoader(){return fgRunLoader;}
179 static AliLoader* GetDetectorLoader(const char* detname, const char* eventfoldername);
180 static TTree* GetTreeH(const char* detname, Bool_t maketree, const char* eventfoldername);
181 static TTree* GetTreeS(const char* detname, Bool_t maketree, const char* eventfoldername);
182 static TTree* GetTreeD(const char* detname, Bool_t maketree, const char* eventfoldername);
183 static TTree* GetTreeR(const char* detname, Bool_t maketree, const char* eventfoldername);
184 static TTree* GetTreeT(const char* detname, Bool_t maketree, const char* eventfoldername);
185 static TTree* GetTreeP(const char* detname, Bool_t maketree, const char* eventfoldername);
187 // static AliRunDigitizer* GetRunDigitizer();
188 // Tasks are supposed to be singletons, that is why following methods are static
189 static TTask* GetRunDigitizer(); //
190 static TTask* GetRunSDigitizer(); //
191 static TTask* GetRunReconstructioner(); //
192 static TTask* GetRunTracker(); //
193 static TTask* GetRunPIDTask(); //
194 static TTask* GetRunQATask(); //
196 static TString GetRunLoaderName () {return fgkRunLoaderName;}
197 static TString GetHeaderContainerName () {return fgkHeaderContainerName;}
198 static TString GetTriggerContainerName () {return fgkTriggerContainerName;}
199 static TString GetKineContainerName () {return fgkKineContainerName;}
200 static TString GetTrackRefsContainerName () {return fgkTrackRefsContainerName;}
201 static TString GetHeaderBranchName () {return fgkHeaderBranchName;}
202 static TString GetTriggerBranchName () {return fgkTriggerBranchName;}
203 static TString GetKineBranchName () {return fgkKineBranchName;}
204 static TString GetTriggerFileName() { return fgkDefaultTriggerFileName; }
205 static TString GetGAliceName () {return fgkGAliceName;}
208 /**********************************************/
209 /************ PROTECTED ***************/
210 /********* D A T A ************/
211 /**********************************************/
213 TObjArray *fLoaders; // List of Detectors
214 TFolder *fEventFolder; //!top folder for this run
216 Int_t fCurrentEvent;//!Number of current event
218 TFile *fGAFile;//! pointer to main file with AliRun and Run Loader -> galice.root
219 AliHeader *fHeader;//! pointer to header
220 AliStack *fStack; //! pointer to stack
221 AliCentralTrigger *fCTrigger; //! pointer to CEntral Trigger Processor
223 AliDataLoader *fKineDataLoader;// kinematics data loader
224 AliDataLoader *fTrackRefsDataLoader;//track reference data loader
226 Int_t fNEventsPerFile; //defines number of events stored per one file
227 TString fUnixDirName; //! name of unix path to directory that contains event
228 static const TString fgkDefaultKineFileName;//default file name with kinamatics
229 static const TString fgkDefaultTrackRefsFileName;//default file name with kinamatics
230 static const TString fgkDefaultTriggerFileName;//default file name with trigger
233 /*********************************************/
234 /************ PROTECTED **************/
235 /********* M E T H O D S ***********/
236 /*********************************************/
238 void SetGAliceFile(TFile* gafile);//sets the pointer to gAlice file
239 Int_t OpenKineFile(Option_t* opt);
240 Int_t OpenTrackRefsFile(Option_t* opt);
242 Int_t OpenDataFile(const TString& filename,TFile*& file,TDirectory*& dir,Option_t* opt,Int_t cl);
243 void SetUnixDir(const TString& udirname);
244 const TString SetFileOffset(const TString& fname);//adds the proper number before .root
245 void SetDetectorAddresses();
248 AliRunLoader(const AliRunLoader &r); //Not implemented
249 AliRunLoader & operator = (const AliRunLoader &); //Not implemented
251 void GetListOfDetectors(const char * namelist,TObjArray& pointerarray) const;
253 void CleanHeader(){Clean(fgkHeaderContainerName);}
254 void CleanTrigger(){Clean(fgkTriggerContainerName);}
255 void Clean(const TString& name);
259 static AliRunLoader* fgRunLoader; //pointer to the AliRunLoader instance
262 void Copy(TObject &arun) const;
264 static const TString fgkRunLoaderName; //default name of the run loader
265 static const TString fgkHeaderContainerName; //default name of the kinematics container (TREE) name - TreeE
266 static const TString fgkTriggerContainerName; //default name of the trigger container (TREE) name - TreeCT
267 static const TString fgkKineContainerName; //default name of the kinematics container (TREE) name - TreeK
268 static const TString fgkTrackRefsContainerName; //default name of the track references container (TREE) name - TreeTR
269 static const TString fgkHeaderBranchName; //default name of the branch containing the header
270 static const TString fgkTriggerBranchName; //default name of the branch containing the trigger
271 static const TString fgkKineBranchName; //default name of the branch with kinematics
272 static const TString fgkGAliceName; //default name for gAlice file
274 ClassDef(AliRunLoader,2)