2 //Class (base) responsible for management of data:
3 // - opening and closing proper files
4 // - posting data to folders
5 // - writing data from folders to proper files
7 //Author: Alice Offline Group http://alisoft.cern.ch
8 //Responsible: Piotr.Skowronski@cern.ch
10 #include <AliLoader.h>
24 #include <AliRunLoader.h>
25 #include <AliRunDigitizer.h>
26 #include <AliDigitizer.h>
27 #include <AliDetector.h>
28 #include "AliConfig.h"
30 const TString AliLoader::fgkDefaultHitsContainerName("TreeH");
31 const TString AliLoader::fgkDefaultDigitsContainerName = "TreeD";
32 const TString AliLoader::fgkDefaultSDigitsContainerName = "TreeS";
33 const TString AliLoader::fgkDefaultRecPointsContainerName = "TreeR";
34 const TString AliLoader::fgkDefaultTracksContainerName = "TreeT";
35 const TString AliLoader::fgkDefaultRecParticlesContainerName = "TreeP";
36 const TString AliLoader::fgkLoaderBaseName("Loader");
39 //___________________________________________________________________
40 /////////////////////////////////////////////////////////////////////
44 // Base class for Loaders. //
45 // Loader provides base I/O fascilities for "standard" data. //
46 // Each detector has a laoder data member //
47 // loader is accessible via folder structure as well //
49 /////////////////////////////////////////////////////////////////////
51 /*****************************************************************************/
53 AliLoader::AliLoader():
58 fDetectorDataFolder(0x0),
66 /******************************************************************/
68 AliLoader::AliLoader(const Char_t* detname,const Char_t* eventfoldername):
69 fDataLoaders(new TObjArray(kNDataTypes)),
73 fDetectorDataFolder(0x0),
79 AliDebug(1, Form("detname = %s eventfoldername = %s",detname,eventfoldername));
81 //try to find folder eventfoldername in top alice folder
82 //safe because GetTopFolder will abort in case of failure
84 fDetectorName = detname;
85 fName = fDetectorName+"Loader";
88 TObject* fobj = GetTopFolder()->FindObject(eventfoldername);
89 fEventFolder = (fobj)?dynamic_cast<TFolder*>(fobj):0x0;//in case FindObject returns NULL dynamic cast cause seg. fault
90 SetEventFolder(fEventFolder);
93 /*****************************************************************************/
95 AliLoader::AliLoader(const Char_t * detname,TFolder* eventfolder):
96 fDataLoaders(new TObjArray(kNDataTypes)),
97 fDetectorName(detname),
100 fDetectorDataFolder(0x0),
106 fDetectorName = detname;
107 fName = fDetectorName+"Loader";
109 SetEventFolder(eventfolder);
110 //fileoption's don't need to initialized because default TString ctor does it correctly
112 /*****************************************************************************/
113 AliLoader::AliLoader(const AliLoader& source) :
115 fDataLoaders(source.fDataLoaders),
116 fDetectorName(source.fDetectorName),
117 fEventFolder(source.fEventFolder),
118 fDataFolder(source.fDataFolder),
119 fDetectorDataFolder(source.fDetectorDataFolder),
120 fModuleFolder(source.fModuleFolder),
121 fTasksFolder(source.fTasksFolder),
122 fQAFolder(source.fQAFolder)
124 // dummy copy constructor
125 if(&source==this)return;
127 AliFatal("Copy constructor not implemented. Aborting");
131 /*****************************************************************************/
132 AliLoader& AliLoader::operator=(const AliLoader& source) {
133 // dummy assignment operator
134 if(&source==this) return *this;
136 AliFatal("Assignment operator not implemented. Aborting");
140 /*****************************************************************************/
141 AliLoader::~AliLoader()
144 if (fDataLoaders) fDataLoaders->SetOwner();
147 /*****************************************************************************/
149 void AliLoader::InitDefaults()
153 dl = new AliDataLoader(fDetectorName + ".Hits.root",fgkDefaultHitsContainerName, "Hits" );
154 fDataLoaders->AddAt(dl,kHits);
157 // S U M M A B L E D I G I T S
158 dl = new AliDataLoader(fDetectorName + ".SDigits.root",fgkDefaultSDigitsContainerName, "Summable Digits");
159 AliTaskLoader* tl = new AliTaskLoader(fDetectorName + AliConfig::Instance()->GetSDigitizerTaskName(),
160 dl,AliRunLoader::GetRunSDigitizer(),kTRUE);
161 dl->SetBaseTaskLoader(tl);
162 fDataLoaders->AddAt(dl,kSDigits);
165 dl = new AliDataLoader(fDetectorName + ".Digits.root",fgkDefaultDigitsContainerName, "Digits");
166 tl = new AliTaskLoader(fDetectorName + AliConfig::Instance()->GetDigitizerTaskName(),
167 dl,AliRunLoader::GetRunDigitizer(),kTRUE);
168 dl->SetBaseTaskLoader(tl);
169 fDataLoaders->AddAt(dl,kDigits);
171 // R E C O N S T R U C T E D P O I N T S aka C L U S T E R S
172 dl = new AliDataLoader(fDetectorName + ".RecPoints.root",fgkDefaultRecPointsContainerName, "Reconstructed Points");
173 tl = new AliTaskLoader(fDetectorName + AliConfig::Instance()->GetReconstructionerTaskName(),
174 dl,AliRunLoader::GetRunReconstructioner(),kTRUE);
175 dl->SetBaseTaskLoader(tl);
176 fDataLoaders->AddAt(dl,kRecPoints);
179 dl = new AliDataLoader(fDetectorName + ".Tracks.root",fgkDefaultTracksContainerName, "Tracks");
180 tl = new AliTaskLoader(fDetectorName + AliConfig::Instance()->GetTrackerTaskName(),
181 dl,AliRunLoader::GetRunTracker(),kTRUE);
182 dl->SetBaseTaskLoader(tl);
183 fDataLoaders->AddAt(dl,kTracks);
185 // R E C O N S T R U C T E D P O I N T S aka C L U S T E R S
186 dl = new AliDataLoader(fDetectorName + ".RecParticles.root",fgkDefaultRecParticlesContainerName, "Reconstructed Particles");
187 tl = new AliTaskLoader(fDetectorName + AliConfig::Instance()->GetPIDTaskName(),
188 dl,AliRunLoader::GetRunPIDTask(),kTRUE);
189 dl->SetBaseTaskLoader(tl);
190 fDataLoaders->AddAt(dl,kRecParticles);
193 /*****************************************************************************/
195 AliDataLoader* AliLoader::GetDataLoader(const char* name)
197 //returns Data Loader with specified name
198 return dynamic_cast<AliDataLoader*>(fDataLoaders->FindObject(name));
200 /*****************************************************************************/
201 void AliLoader::AddDataLoader(AliDataLoader* dl)
204 // Adds a data loader
208 AliError("Pointer is NULL");
211 if (fDataLoaders->FindObject(dl->GetName()))
213 AliError("Such a loader exists");
216 fDataLoaders->AddLast(dl);
217 dl->SetEventFolder(fEventFolder);
218 dl->SetFolder(GetDetectorDataFolder()); //Must exists - ensure register is called before
220 /*****************************************************************************/
222 Int_t AliLoader::SetEvent()
224 //basically the same that GetEvent but do not post data to folders
225 TIter next(fDataLoaders);
227 while ((dl = (AliDataLoader*)next()))
233 /******************************************************************/
235 void AliLoader::UnloadAll()
237 //calls UnloadAll for all base laoders
239 TIter next(fDataLoaders);
241 while ((dl = (AliDataLoader*)next()))
246 /******************************************************************/
248 Int_t AliLoader::GetEvent()
250 //changes to proper root directory and tries to load data from files to folders
251 // event number is defined in RunLoader
254 // 0 - in case of no error
255 // 1 - event not found
259 TIter next(fDataLoaders);
261 while ((dl = (AliDataLoader*)next()))
263 retval = dl->GetEvent();
266 AliError(Form("Error occured while GetEvent for %s",dl->GetName()));
274 /******************************************************************/
276 TFolder* AliLoader::GetTopFolder()
278 //returns TOP aliroot folder, just a simple interface to AliConfig (gives shorter notation)
279 return AliConfig::Instance()->GetTopFolder();
282 /******************************************************************/
284 TFolder* AliLoader::GetEventFolder()
286 //get EVENT folder (data that are changing from event to event, even in single run)
289 /******************************************************************/
290 TFolder* AliLoader::GetDataFolder()
292 //returns the folder speciofic to given detector e.g. /Folders/Event/Data/
295 fDataFolder = dynamic_cast<TFolder*>(GetEventFolder()->FindObject(AliConfig::Instance()->GetDataFolderName()));
299 AliFatal("Can not find AliRoot data folder. Aborting");
306 /*****************************************************************************/
308 TFolder* AliLoader::GetTasksFolder()
310 //Returns pointer to Folder with Alice Tasks
313 fTasksFolder = dynamic_cast<TFolder*>(GetTopFolder()->FindObject(AliConfig::GetTasksFolderName()));
317 AliFatal("Can not find tasks folder. Aborting");
324 /*****************************************************************************/
326 TFolder* AliLoader::GetModulesFolder()
328 //returns pointer to the folder containing modules
331 fModuleFolder = dynamic_cast<TFolder*>(GetEventFolder()->FindObjectAny(AliConfig::GetModulesFolderName()));
335 AliFatal("Can not find modules folder. Aborting");
339 return fModuleFolder;
342 /*****************************************************************************/
344 TFolder* AliLoader::GetQAFolder()
346 //returns folder with Quality assurance
347 if (fQAFolder == 0x0)
349 TObject *obj = GetEventFolder()->FindObjectAny(AliConfig::Instance()->GetQAFolderName());
350 fQAFolder = (obj)?dynamic_cast<TFolder*>(obj):0x0;
352 if (fQAFolder == 0x0)
354 AliFatal("Can not find Quality Assurance folder. Aborting");
361 /*****************************************************************************/
362 TTask* AliLoader::SDigitizer() const
364 //returns SDigitizer task for this detector
365 return GetSDigitsDataLoader()->GetBaseTaskLoader()->Task();
368 /*****************************************************************************/
370 AliDigitizer* AliLoader::Digitizer() const
372 //returns Digitizer task for this detector
373 return dynamic_cast<AliDigitizer*>(GetDigitsDataLoader()->GetBaseTaskLoader()->Task());
375 /*****************************************************************************/
377 TTask* AliLoader::Reconstructioner() const
379 //returns Recontructioner (Cluster Finder, Cluster Maker,
380 //or whatever you want to call it) task for this detector
381 return GetRecPointsDataLoader()->GetBaseTaskLoader()->Task();
383 /*****************************************************************************/
385 TTask* AliLoader::Tracker() const
388 return dynamic_cast<TTask*>(GetTracksDataLoader()->GetBaseTaskLoader()->Task());
391 /*****************************************************************************/
392 TTask* AliLoader::PIDTask() const
395 return dynamic_cast<TTask*>(GetRecParticlesDataLoader()->GetBaseTaskLoader()->Task());
398 /*****************************************************************************/
400 TTask* AliLoader::QAtask(const char* name) const
402 // Returns pointer to the quality assurance task
403 TTask* qat = AliRunLoader::GetRunQATask();
406 AliError(Form("Can not get RunQATask. (Name:%s)",GetName()));
410 TString dqatname(fDetectorName + AliConfig::Instance()->GetQATaskName());
411 TTask* dqat = dynamic_cast<TTask*>(qat->GetListOfTasks()->FindObject(dqatname));
415 AliError(Form("Can not find QATask in RunQATask for %s",GetDetectorName().Data()));
419 if (strlen(name) == 0) return dqat;
421 TList* list = dqat->GetListOfTasks();
425 while((task = static_cast<TTask *>(it.Next()) ))
427 TString taskname(task->GetName()) ;
428 if(taskname.BeginsWith(name))
431 AliError(Form("Can not find sub-task with name starting with %s in task %s",name,dqat->GetName()));
434 /*****************************************************************************/
436 TDirectory* AliLoader::ChangeDir(TFile* file, Int_t eventno)
438 //changes the root directory in "file" to "dirname" which corresponds to event 'eventno'
439 //in case of success returns the pointer to directory
444 AliErrorClass("File is null");
447 if (file->IsOpen() == kFALSE)
449 AliErrorClass("File is not opened");
453 TString dirname("Event");
455 AliDebugClass(1, Form("Changing Dir to %s in file %s.",dirname.Data(),file->GetName()));
459 TDirectory* dir = dynamic_cast<TDirectory*>(file->Get(dirname));
463 AliDebugClass(1, Form("Can not find directory %s in file %s, creating...",
464 dirname.Data(),file->GetName()));
466 if (file->IsWritable() == kFALSE)
468 AliErrorClass(Form("Can not create directory. File %s in not writable.",
473 TDirectory* newdir = file->mkdir(dirname);
476 AliErrorClass(Form("Failed to create new directory in file %s.",
480 result = file->cd(dirname);
481 if (result == kFALSE)
488 file->cd();//make a file active
489 file->cd(dirname);//cd event dir
494 /*****************************************************************************/
496 TString AliLoader::GetUnixDir() const
498 //This Method will manage jumping through unix directories in case of
499 //run with more events per run than defined in gAlice
505 /*****************************************************************************/
506 /************************************************************/
508 void AliLoader::MakeTree(Option_t *option)
510 //Makes a tree depending on option
513 // S: - Summable Digits
514 // R: - Reconstructed Points (clusters)
515 // T: - Tracks (tracklets)
517 const char *oH = strstr(option,"H");
518 const char *oD = strstr(option,"D");
519 const char *oS = strstr(option,"S");
520 const char *oR = strstr(option,"R");
521 const char *oT = strstr(option,"T");
522 const char *oP = strstr(option,"P");
524 if (oH) MakeHitsContainer();
525 if (oD) MakeDigitsContainer();
526 if (oS) MakeSDigitsContainer();
527 if (oR) MakeRecPointsContainer();
528 if (oT) MakeTracksContainer();
529 if (oP) MakeRecParticlesContainer();
532 /*****************************************************************************/
533 Int_t AliLoader::WriteHits(Option_t* opt) const
536 AliDataLoader* dl = GetHitsDataLoader();
537 Int_t ret = dl->WriteData(opt);
540 /*****************************************************************************/
542 Int_t AliLoader::WriteSDigits(Option_t* opt) const
544 // Writes summable digits
545 AliDataLoader* dl = GetSDigitsDataLoader();
546 Int_t ret = dl->WriteData(opt);
550 /*****************************************************************************/
552 Int_t AliLoader::PostSDigitizer(TTask* sdzer) const
555 return GetSDigitsDataLoader()->GetBaseTaskLoader()->Post(sdzer);
557 /*****************************************************************************/
559 Int_t AliLoader::PostDigitizer(AliDigitizer* task) const
562 return GetDigitsDataLoader()->GetBaseTaskLoader()->Post(task);
564 /*****************************************************************************/
566 Int_t AliLoader::PostReconstructioner(TTask* task) const
568 // Posts Reconstructioner
569 return GetRecPointsDataLoader()->GetBaseTaskLoader()->Post(task);
571 /*****************************************************************************/
573 Int_t AliLoader::PostTracker(TTask* task) const
576 return GetTracksDataLoader()->GetBaseTaskLoader()->Post(task);
578 /*****************************************************************************/
580 Int_t AliLoader::PostPIDTask(TTask* task) const
582 // Posts particle identification task
583 return GetRecParticlesDataLoader()->GetBaseTaskLoader()->Post(task);
585 /*****************************************************************************/
587 TObject** AliLoader::GetDetectorDataRef(TObject *obj)
589 // Returns pointer to an entry in the list of folders pointing to "obj"
594 return GetDetectorDataFolder()->GetListOfFolders()->GetObjectRef(obj) ;
596 /*****************************************************************************/
598 TObject** AliLoader::SDigitizerRef()
600 // Returns pointer to a Runloader's task-list entry pointing to SDigitizer
601 TTask* rsd = AliRunLoader::GetRunSDigitizer();
606 return rsd->GetListOfTasks()->GetObjectRef(SDigitizer());
608 /*****************************************************************************/
610 TObject** AliLoader::DigitizerRef()
612 // Returns pointer to a Runloader's task-list entry pointing to Digitizer
613 TTask* rd = AliRunLoader::GetRunDigitizer();
618 return rd->GetListOfTasks()->GetObjectRef(Digitizer()) ;
620 /*****************************************************************************/
622 TObject** AliLoader::ReconstructionerRef()
624 // Returns pointer to a Runloader's task-list entry pointing to Reconstructioner
625 TTask* rrec = AliRunLoader::GetRunReconstructioner();
630 return rrec->GetListOfTasks()->GetObjectRef(Reconstructioner());
632 /*****************************************************************************/
634 TObject** AliLoader::TrackerRef()
636 // Returns pointer to a Runloader's task-list entry pointing to Tracker
637 TTask* rrec = AliRunLoader::GetRunTracker();
642 return rrec->GetListOfTasks()->GetObjectRef(Tracker());
644 /*****************************************************************************/
646 TObject** AliLoader::PIDTaskRef()
648 // Returns pointer to a Runloader's task-list entry pointing to PIDTask
649 TTask* rrec = AliRunLoader::GetRunPIDTask();
654 return rrec->GetListOfTasks()->GetObjectRef(PIDTask());
657 /*****************************************************************************/
658 void AliLoader::CleanFolders()
660 //Cleans all posted objects == removes from folders and deletes them
661 TIter next(fDataLoaders);
663 while ((dl = (AliDataLoader*)next()))
665 AliDebug(1, Form("name = %s cleaning",dl->GetName()));
669 /*****************************************************************************/
671 /*****************************************************************************/
673 void AliLoader::CleanSDigitizer()
675 //removes and deletes detector task from Run Task
676 if ( GetSDigitsDataLoader()->GetBaseTaskLoader() == 0x0 )
678 AliWarning("Task Loader for SDigits does not exist");
681 GetSDigitsDataLoader()->GetBaseTaskLoader()->Clean();
683 /*****************************************************************************/
685 void AliLoader::CleanDigitizer()
687 //removes and deletes detector task from Run Task
688 if ( GetDigitsDataLoader()->GetBaseTaskLoader() == 0x0 )
690 AliWarning("Task Loader for Digits does not exist");
693 GetDigitsDataLoader()->GetBaseTaskLoader()->Clean();
695 /*****************************************************************************/
697 void AliLoader::CleanReconstructioner()
699 //removes and deletes detector Reconstructioner from Run Reconstructioner
700 if ( GetRecPointsDataLoader()->GetBaseTaskLoader() == 0x0 )
702 AliWarning("Task Loader for SDigits does not exist");
705 GetRecPointsDataLoader()->GetBaseTaskLoader()->Clean();
707 /*****************************************************************************/
709 void AliLoader::CleanTracker()
711 //removes and deletes detector task from Run Task
712 if ( GetTracksDataLoader()->GetBaseTaskLoader() == 0x0 )
714 AliWarning("Task Loader for Tracks does not exist");
717 GetTracksDataLoader()->GetBaseTaskLoader()->Clean();
719 /*****************************************************************************/
721 void AliLoader::CleanPIDTask()
723 //removes and deletes detector Reconstructioner from Run Reconstructioner
725 if ( GetRecParticlesDataLoader()->GetBaseTaskLoader() == 0x0 )
727 AliWarning("Task Loader for Reconstructed Particles does not exist");
730 GetRecParticlesDataLoader()->GetBaseTaskLoader()->Clean();
732 /*****************************************************************************/
734 Int_t AliLoader::ReloadAll()
736 // Calling Reload function for all the data loaders
737 TIter next(fDataLoaders);
740 while((dl = (AliDataLoader*)next()))
742 Int_t err = dl->Reload();
745 AliError(Form("Reload returned error for %s",dl->GetName()));
751 /*****************************************************************************/
753 void AliLoader::CloseFiles()
755 //close files for data loaders
756 TIter next(fDataLoaders);
758 while((dl = (AliDataLoader*)next()))
763 /*****************************************************************************/
765 Int_t AliLoader::SetEventFolder(TFolder* eventfolder)
767 //sets the event folder
768 if (eventfolder == 0x0)
770 AliError("Stupid joke. Argument is NULL");
774 fEventFolder = eventfolder;
775 TIter next(fDataLoaders);
778 while((dl = (AliDataLoader*)next()))
780 dl->SetEventFolder(fEventFolder);
781 dl->SetFolder(GetDetectorDataFolder()); //Must exists - ensure register is called before
785 }//sets the event folder
786 /*****************************************************************************/
788 Int_t AliLoader::Register(TFolder* eventFolder)
790 //triggers creation of subfolders for a given detector
791 //this method is called when session is read from disk
793 //warning: AliDetector in constructor (not default) calls
794 //creation of folder structure as well (some detectors needs folders
795 //alrady in constructors)
797 AliDebug(1, Form("Name is %s.",GetName()));
798 if (eventFolder == 0x0)
800 AliError("Event folder is not set.");
803 Int_t retval = AliConfig::Instance()->AddDetector(eventFolder,fDetectorName,fDetectorName);
806 AliError(Form("Can not create tasks and/or folders for %s. Event folder name is %s",
807 fDetectorName.Data(),eventFolder->GetName()));
810 SetEventFolder(eventFolder);
813 /*****************************************************************************/
814 AliRunLoader* AliLoader::GetRunLoader()
816 //gets the run-loader from event folder
817 AliRunLoader* rg = 0x0;
818 TObject * obj = GetEventFolder()->FindObject(AliRunLoader::GetRunLoaderName());
819 if (obj) rg = dynamic_cast<AliRunLoader*>(obj);
822 /*****************************************************************************/
823 Bool_t AliLoader::TestFileOption(Option_t* opt)
825 //tests the TFile::Option
826 //if file is truncated at opening moment ("recreate", "new" or "create") returns kFALSE;
827 //else kTRUE (means opened with "read" or "update" mode)
829 if (option.CompareTo("recreate",TString::kIgnoreCase) == 0) return kFALSE;
830 if (option.CompareTo("new",TString::kIgnoreCase) == 0) return kFALSE;
831 if (option.CompareTo("create",TString::kIgnoreCase) == 0) return kFALSE;
834 /*****************************************************************************/
835 void AliLoader::SetDirName(TString& dirname)
837 //adds "dirname/" to each file
838 TIter next(fDataLoaders);
840 while((dl = (AliDataLoader*)next()))
842 dl->SetDirName(dirname);
846 /*****************************************************************************/
848 void AliLoader::SetDigitsFileNameSuffix(const TString& suffix) const
850 //adds the suffix before ".root",
851 //e.g. TPC.Digits.root -> TPC.DigitsMerged.root
852 //made on Jiri Chudoba demand
853 GetDigitsDataLoader()->SetFileNameSuffix(suffix);
855 /*****************************************************************************/
857 void AliLoader::SetCompressionLevel(Int_t cl)
859 //sets comression level for data defined by di
860 TIter next(fDataLoaders);
862 while((dl = (AliDataLoader*)next()))
864 dl->SetCompressionLevel(cl);
867 /*****************************************************************************/
869 void AliLoader::Clean()
871 //Cleans all data loaders
872 TIter next(fDataLoaders);
874 while((dl = (AliDataLoader*)next()))
879 /*****************************************************************************/
881 void AliLoader::Clean(const TString& name)
883 // Removes object with "name" from the detector's data folder
884 // and from the memory
885 TObject* obj = GetDetectorDataFolder()->FindObject(name);
888 AliDebug(1, Form("name=%s, cleaning %s.",GetName(),name.Data()));
889 GetDetectorDataFolder()->Remove(obj);
894 /*****************************************************************************/
896 Bool_t AliLoader::IsOptionWritable(const TString& opt)
898 // Returns "true" if the option means also "writable"
899 if (opt.CompareTo("recreate",TString::kIgnoreCase)) return kTRUE;
900 if (opt.CompareTo("new",TString::kIgnoreCase)) return kTRUE;
901 if (opt.CompareTo("create",TString::kIgnoreCase)) return kTRUE;
902 if (opt.CompareTo("update",TString::kIgnoreCase)) return kTRUE;
905 /*****************************************************************************/
907 Int_t AliLoader::GetDebug()
909 AliWarningClass("Don't use this method any more, use AliDebug instead");
910 return AliDebugLevelClass();
912 /*****************************************************************************/
914 void AliLoader::SetDebug(Int_t deb)
917 AliLog::SetClassDebugLevel("AliRunLoader", deb);
918 AliLog::SetClassDebugLevel("AliLoader", deb);
919 AliLog::SetClassDebugLevel("AliDataLoader", deb);
920 AliLog::SetClassDebugLevel("AliBaseLoader", deb);
921 AliLog::SetClassDebugLevel("AliObjectLoader", deb);
922 AliLog::SetClassDebugLevel("AliTreeLoader", deb);
923 AliLog::SetClassDebugLevel("AliTaskLoader", deb);
924 AliLog::SetClassDebugLevel("AliConfig", deb);
926 /*****************************************************************************/
928 void AliLoader::SetTAddrInDet()
930 //calls SetTreeAddress for corresponding detector
931 AliRunLoader* rl = GetRunLoader();
932 if (rl == 0x0) return;
933 AliRun* ar = rl->GetAliRun();
934 if (ar == 0x0) return;
935 AliDetector* det = ar->GetDetector(fDetectorName);
936 if (det == 0x0) return;
937 det->SetTreeAddress();
939 /*****************************************************************************/
941 void AliLoader::Synchronize()
943 //synchrinizes all writtable files
944 TIter next(fDataLoaders);
946 while ((dl = (AliDataLoader*)next()))
952 /*****************************************************************************/
953 /*****************************************************************************/
954 /*****************************************************************************/