X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliLoader.cxx;h=e992699e3171a94b72da6d69067edc43d008959d;hb=12e26c263331e2ed324ce5b54927f438b1242985;hp=c38995bb7320a20e82b650c7602efdd582b47834;hpb=f0f6f85615154d428afd39751009ec53ff441bb7;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliLoader.cxx b/STEER/AliLoader.cxx index c38995bb732..e992699e317 100644 --- a/STEER/AliLoader.cxx +++ b/STEER/AliLoader.cxx @@ -7,25 +7,22 @@ //Author: Alice Offline Group http://alisoft.cern.ch //Responsible: Piotr.Skowronski@cern.ch // -#include +#include "AliLoader.h" //Root includes #include -#include #include -#include -#include +#include #include -#include +#include //AliRoot includes -#include -#include -#include -#include -#include - -Int_t AliLoader::fgDebug = 0; +#include "AliConfig.h" +#include "AliDetector.h" +#include "AliDigitizer.h" +#include "AliLog.h" +#include "AliRun.h" +#include "AliRunLoader.h" const TString AliLoader::fgkDefaultHitsContainerName("TreeH"); const TString AliLoader::fgkDefaultDigitsContainerName = "TreeD"; @@ -59,7 +56,7 @@ AliLoader::AliLoader(): fModuleFolder(0x0), fTasksFolder(0x0), fQAFolder(0x0) - { +{ //default constructor } @@ -76,8 +73,7 @@ AliLoader::AliLoader(const Char_t* detname,const Char_t* eventfoldername): fQAFolder(0x0) { //ctor - if (GetDebug()) Info("AliLoader(const Char_t* detname,const Char_t* eventfoldername)", - "detname = %s eventfoldername = %s",detname,eventfoldername); + AliDebug(1, Form("detname = %s eventfoldername = %s",detname,eventfoldername)); //try to find folder eventfoldername in top alice folder //safe because GetTopFolder will abort in case of failure @@ -111,7 +107,34 @@ AliLoader::AliLoader(const Char_t * detname,TFolder* eventfolder): //fileoption's don't need to initialized because default TString ctor does it correctly } /*****************************************************************************/ +AliLoader::AliLoader(const AliLoader& source) : + TNamed(source), + fDataLoaders(source.fDataLoaders), + fDetectorName(source.fDetectorName), + fEventFolder(source.fEventFolder), + fDataFolder(source.fDataFolder), + fDetectorDataFolder(source.fDetectorDataFolder), + fModuleFolder(source.fModuleFolder), + fTasksFolder(source.fTasksFolder), + fQAFolder(source.fQAFolder) +{ + // dummy copy constructor + if(&source==this)return; + + AliFatal("Copy constructor not implemented. Aborting"); + return; +} + +/*****************************************************************************/ +AliLoader& AliLoader::operator=(const AliLoader& source) { + // dummy assignment operator + if(&source==this) return *this; + + AliFatal("Assignment operator not implemented. Aborting"); + return *this; +} +/*****************************************************************************/ AliLoader::~AliLoader() { //detructor @@ -172,6 +195,26 @@ AliDataLoader* AliLoader::GetDataLoader(const char* name) return dynamic_cast(fDataLoaders->FindObject(name)); } /*****************************************************************************/ +void AliLoader::AddDataLoader(AliDataLoader* dl) +{ + // + // Adds a data loader + // + if (dl == 0x0) + { + AliError("Pointer is NULL"); + return; + } + if (fDataLoaders->FindObject(dl->GetName())) + { + AliError("Such a loader exists"); + return; + } + fDataLoaders->AddLast(dl); + dl->SetEventFolder(fEventFolder); + dl->SetFolder(GetDetectorDataFolder()); //Must exists - ensure register is called before +} +/*****************************************************************************/ Int_t AliLoader::SetEvent() { @@ -186,6 +229,19 @@ Int_t AliLoader::SetEvent() } /******************************************************************/ +void AliLoader::UnloadAll() +{ + //calls UnloadAll for all base laoders + //Unloads everything + TIter next(fDataLoaders); + AliDataLoader* dl; + while ((dl = (AliDataLoader*)next())) + { + dl->UnloadAll(); + } +} +/******************************************************************/ + Int_t AliLoader::GetEvent() { //changes to proper root directory and tries to load data from files to folders @@ -204,7 +260,7 @@ Int_t AliLoader::GetEvent() retval = dl->GetEvent(); if (retval) { - Error("GetEvent","Error occured while GetEvent for %s",dl->GetName()); + AliError(Form("Error occured while GetEvent for %s",dl->GetName())); return retval; } } @@ -233,11 +289,11 @@ TFolder* AliLoader::GetDataFolder() //returns the folder speciofic to given detector e.g. /Folders/Event/Data/ if (!fDataFolder) { - fDataFolder = dynamic_cast(GetEventFolder()->FindObject(AliConfig::fgkDataFolderName)); + fDataFolder = dynamic_cast(GetEventFolder()->FindObject(AliConfig::Instance()->GetDataFolderName())); if (!fDataFolder) { - Fatal("GetDataFolder","Can not find AliRoot data folder. Aborting"); + AliFatal("Can not find AliRoot data folder. Aborting"); return 0x0; } } @@ -251,11 +307,11 @@ TFolder* AliLoader::GetTasksFolder() //Returns pointer to Folder with Alice Tasks if (!fTasksFolder) { - fTasksFolder = dynamic_cast(GetTopFolder()->FindObject(AliConfig::fgkTasksFolderName)); + fTasksFolder = dynamic_cast(GetTopFolder()->FindObject(AliConfig::GetTasksFolderName())); if (!fTasksFolder) { - Fatal("GetTasksFolder","Can not find tasks folder. Aborting"); + AliFatal("Can not find tasks folder. Aborting"); return 0x0; } } @@ -266,13 +322,14 @@ TFolder* AliLoader::GetTasksFolder() TFolder* AliLoader::GetModulesFolder() { + //returns pointer to the folder containing modules if (!fModuleFolder) { fModuleFolder = dynamic_cast(GetEventFolder()->FindObjectAny(AliConfig::GetModulesFolderName())); if (!fModuleFolder) { - Fatal("GetModulesFolder","Can not find modules folder. Aborting"); + AliFatal("Can not find modules folder. Aborting"); return 0x0; } } @@ -291,7 +348,7 @@ TFolder* AliLoader::GetQAFolder() if (fQAFolder == 0x0) { - Fatal("GetQAFolder","Can not find Quality Assurance folder. Aborting"); + AliFatal("Can not find Quality Assurance folder. Aborting"); return 0x0; } } @@ -299,7 +356,7 @@ TFolder* AliLoader::GetQAFolder() } /*****************************************************************************/ -TTask* AliLoader::SDigitizer() +TTask* AliLoader::SDigitizer() const { //returns SDigitizer task for this detector return GetSDigitsDataLoader()->GetBaseTaskLoader()->Task(); @@ -307,14 +364,14 @@ TTask* AliLoader::SDigitizer() } /*****************************************************************************/ -AliDigitizer* AliLoader::Digitizer() +AliDigitizer* AliLoader::Digitizer() const { //returns Digitizer task for this detector return dynamic_cast(GetDigitsDataLoader()->GetBaseTaskLoader()->Task()); } /*****************************************************************************/ -TTask* AliLoader::Reconstructioner() +TTask* AliLoader::Reconstructioner() const { //returns Recontructioner (Cluster Finder, Cluster Maker, //or whatever you want to call it) task for this detector @@ -322,14 +379,14 @@ TTask* AliLoader::Reconstructioner() } /*****************************************************************************/ -TTask* AliLoader::Tracker() +TTask* AliLoader::Tracker() const { //returns tracker return dynamic_cast(GetTracksDataLoader()->GetBaseTaskLoader()->Task()); } /*****************************************************************************/ -TTask* AliLoader::PIDTask() +TTask* AliLoader::PIDTask() const { //returns tracker return dynamic_cast(GetRecParticlesDataLoader()->GetBaseTaskLoader()->Task()); @@ -337,12 +394,13 @@ TTask* AliLoader::PIDTask() /*****************************************************************************/ -TTask* AliLoader::QAtask(const char* name) +TTask* AliLoader::QAtask(const char* name) const { + // Returns pointer to the quality assurance task TTask* qat = AliRunLoader::GetRunQATask(); if ( qat == 0x0 ) { - Error("QAtask","Can not get RunQATask. (Name:%s)",GetName()); + AliError(Form("Can not get RunQATask. (Name:%s)",GetName())); return 0x0; } @@ -351,7 +409,7 @@ TTask* AliLoader::QAtask(const char* name) if ( dqat == 0x0 ) { - Error("QAtask","Can not find QATask in RunQATask for %s",GetDetectorName().Data()); + AliError(Form("Can not find QATask in RunQATask for %s",GetDetectorName().Data())); return 0x0; } @@ -367,7 +425,7 @@ TTask* AliLoader::QAtask(const char* name) if(taskname.BeginsWith(name)) return task ; } - Error("QAtask","Can not find sub-task with name starting with %s in task %s",name,dqat->GetName()); + AliError(Form("Can not find sub-task with name starting with %s in task %s",name,dqat->GetName())); return 0x0; } /*****************************************************************************/ @@ -380,19 +438,18 @@ TDirectory* AliLoader::ChangeDir(TFile* file, Int_t eventno) if (file == 0x0) { - ::Error("AliLoader::ChangeDir","File is null"); + AliErrorClass("File is null"); return 0x0; } if (file->IsOpen() == kFALSE) { - ::Error("AliLoader::ChangeDir","File is not opened"); + AliErrorClass("File is not opened"); return 0x0; } TString dirname("Event"); dirname+=eventno; - if (AliLoader::fgDebug > 1) - ::Info("AliLoader::ChangeDir","Changing Dir to %s in file %s.",dirname.Data(),file->GetName()); + AliDebugClass(1, Form("Changing Dir to %s in file %s.",dirname.Data(),file->GetName())); Bool_t result; @@ -400,22 +457,21 @@ TDirectory* AliLoader::ChangeDir(TFile* file, Int_t eventno) if (dir == 0x0) { - if (AliLoader::fgDebug > 1) - ::Info("AliLoader::ChangeDir","Can not find directory %s in file %s, creating...", - dirname.Data(),file->GetName()); + AliDebugClass(1, Form("Can not find directory %s in file %s, creating...", + dirname.Data(),file->GetName())); if (file->IsWritable() == kFALSE) { - ::Error("AliLoader::ChangeDir","Can not create directory. File %s in not writable.", - file->GetName()); + AliErrorClass(Form("Can not create directory. File %s in not writable.", + file->GetName())); return 0x0; } TDirectory* newdir = file->mkdir(dirname); if (newdir == 0x0) { - ::Error("AliLoader::ChangeDir","Failed to create new directory in file %s.", - file->GetName()); + AliErrorClass(Form("Failed to create new directory in file %s.", + file->GetName())); return 0x0; } result = file->cd(dirname); @@ -434,7 +490,7 @@ TDirectory* AliLoader::ChangeDir(TFile* file, Int_t eventno) } /*****************************************************************************/ -TString AliLoader::GetUnixDir() +TString AliLoader::GetUnixDir() const { //This Method will manage jumping through unix directories in case of //run with more events per run than defined in gAlice @@ -471,16 +527,18 @@ void AliLoader::MakeTree(Option_t *option) } /*****************************************************************************/ -Int_t AliLoader::WriteHits(Option_t* opt) +Int_t AliLoader::WriteHits(Option_t* opt) const { + // Writes hits AliDataLoader* dl = GetHitsDataLoader(); Int_t ret = dl->WriteData(opt); return ret; } /*****************************************************************************/ -Int_t AliLoader::WriteSDigits(Option_t* opt) +Int_t AliLoader::WriteSDigits(Option_t* opt) const { + // Writes summable digits AliDataLoader* dl = GetSDigitsDataLoader(); Int_t ret = dl->WriteData(opt); return ret; @@ -488,38 +546,44 @@ Int_t AliLoader::WriteSDigits(Option_t* opt) /*****************************************************************************/ -Int_t AliLoader::PostSDigitizer(TTask* sdzer) +Int_t AliLoader::PostSDigitizer(TTask* sdzer) const { + // Posts sdigitizer return GetSDigitsDataLoader()->GetBaseTaskLoader()->Post(sdzer); } /*****************************************************************************/ -Int_t AliLoader::PostDigitizer(AliDigitizer* task) +Int_t AliLoader::PostDigitizer(AliDigitizer* task) const { + // Posts digitizer return GetDigitsDataLoader()->GetBaseTaskLoader()->Post(task); } /*****************************************************************************/ -Int_t AliLoader::PostReconstructioner(TTask* task) +Int_t AliLoader::PostReconstructioner(TTask* task) const { + // Posts Reconstructioner return GetRecPointsDataLoader()->GetBaseTaskLoader()->Post(task); } /*****************************************************************************/ -Int_t AliLoader::PostTracker(TTask* task) +Int_t AliLoader::PostTracker(TTask* task) const { + // Posts a tracker return GetTracksDataLoader()->GetBaseTaskLoader()->Post(task); } /*****************************************************************************/ -Int_t AliLoader::PostPIDTask(TTask* task) +Int_t AliLoader::PostPIDTask(TTask* task) const { + // Posts particle identification task return GetRecParticlesDataLoader()->GetBaseTaskLoader()->Post(task); } /*****************************************************************************/ TObject** AliLoader::GetDetectorDataRef(TObject *obj) { + // Returns pointer to an entry in the list of folders pointing to "obj" if (obj == 0x0) { return 0x0; @@ -530,6 +594,7 @@ TObject** AliLoader::GetDetectorDataRef(TObject *obj) TObject** AliLoader::SDigitizerRef() { + // Returns pointer to a Runloader's task-list entry pointing to SDigitizer TTask* rsd = AliRunLoader::GetRunSDigitizer(); if (rsd == 0x0) { @@ -541,6 +606,7 @@ TObject** AliLoader::SDigitizerRef() TObject** AliLoader::DigitizerRef() { + // Returns pointer to a Runloader's task-list entry pointing to Digitizer TTask* rd = AliRunLoader::GetRunDigitizer(); if (rd == 0x0) { @@ -552,6 +618,7 @@ TObject** AliLoader::DigitizerRef() TObject** AliLoader::ReconstructionerRef() { + // Returns pointer to a Runloader's task-list entry pointing to Reconstructioner TTask* rrec = AliRunLoader::GetRunReconstructioner(); if (rrec == 0x0) { @@ -563,6 +630,7 @@ TObject** AliLoader::ReconstructionerRef() TObject** AliLoader::TrackerRef() { + // Returns pointer to a Runloader's task-list entry pointing to Tracker TTask* rrec = AliRunLoader::GetRunTracker(); if (rrec == 0x0) { @@ -574,6 +642,7 @@ TObject** AliLoader::TrackerRef() TObject** AliLoader::PIDTaskRef() { + // Returns pointer to a Runloader's task-list entry pointing to PIDTask TTask* rrec = AliRunLoader::GetRunPIDTask(); if (rrec == 0x0) { @@ -590,7 +659,7 @@ void AliLoader::CleanFolders() AliDataLoader* dl; while ((dl = (AliDataLoader*)next())) { - if (GetDebug()) Info("CleanFolders","name = %s cleaning",dl->GetName()); + AliDebug(1, Form("name = %s cleaning",dl->GetName())); dl->Clean(); } } @@ -601,86 +670,67 @@ void AliLoader::CleanFolders() void AliLoader::CleanSDigitizer() { //removes and deletes detector task from Run Task - TTask* task = AliRunLoader::GetRunSDigitizer(); - if (task == 0x0) - { - Error("CleanSDigitizer","Can not get RunSDigitizer from folder. Can not clean"); - return; - } - - if (GetDebug()) Info("CleanSDigitizer","Attempting to delete S Digitizer"); - delete task->GetListOfTasks()->Remove(SDigitizer()); //TTList::Remove does not delete object + if ( GetSDigitsDataLoader()->GetBaseTaskLoader() == 0x0 ) + { + AliWarning("Task Loader for SDigits does not exist"); + return; + } + GetSDigitsDataLoader()->GetBaseTaskLoader()->Clean(); } /*****************************************************************************/ void AliLoader::CleanDigitizer() { //removes and deletes detector task from Run Task - TTask* task = AliRunLoader::GetRunDigitizer(); - if (task == 0x0) - { - Error("CleanDigitizer","Can not get RunDigitizer from folder. Can not clean"); - return; - } - - if (GetDebug()) - Info("CleanDigitizer","Attempting to delete Digitizer %X", - task->GetListOfTasks()->Remove(Digitizer())); - delete task->GetListOfTasks()->Remove(Digitizer()); //TTList::Remove does not delete object + if ( GetDigitsDataLoader()->GetBaseTaskLoader() == 0x0 ) + { + AliWarning("Task Loader for Digits does not exist"); + return; + } + GetDigitsDataLoader()->GetBaseTaskLoader()->Clean(); } /*****************************************************************************/ void AliLoader::CleanReconstructioner() { //removes and deletes detector Reconstructioner from Run Reconstructioner - TTask* task = AliRunLoader::GetRunReconstructioner(); - if (task == 0x0) - { - Error("CleanReconstructioner","Can not get RunReconstructioner from folder. Can not clean"); - return; - } - - if (GetDebug()) - Info("CleanReconstructioner","Attempting to delete Reconstructioner"); - delete task->GetListOfTasks()->Remove(Reconstructioner()); //TTList::Remove does not delete object + if ( GetRecPointsDataLoader()->GetBaseTaskLoader() == 0x0 ) + { + AliWarning("Task Loader for SDigits does not exist"); + return; + } + GetRecPointsDataLoader()->GetBaseTaskLoader()->Clean(); } /*****************************************************************************/ void AliLoader::CleanTracker() { -//removes and deletes detector tracker from Run Tracker - TTask* task = AliRunLoader::GetRunTracker(); - if (task == 0x0) - { - Error("CleanTracker","Can not get RunTracker from folder. Can not clean"); - return; - } - - if (GetDebug()) - Info("CleanTracker","Attempting to delete Tracker %X", - task->GetListOfTasks()->Remove(Tracker())); - delete task->GetListOfTasks()->Remove(Tracker()); //TTList::Remove does not delete object +//removes and deletes detector task from Run Task + if ( GetTracksDataLoader()->GetBaseTaskLoader() == 0x0 ) + { + AliWarning("Task Loader for Tracks does not exist"); + return; + } + GetTracksDataLoader()->GetBaseTaskLoader()->Clean(); } /*****************************************************************************/ void AliLoader::CleanPIDTask() { //removes and deletes detector Reconstructioner from Run Reconstructioner - TTask* task = AliRunLoader::GetRunPIDTask(); - if (task == 0x0) - { - Error("CleanPIDTask","Can not get Run PID Task from folder. Can not clean"); - return; - } - if (GetDebug()) - Info("CleanPIDTask","Attempting to delete PID Task"); - delete task->GetListOfTasks()->Remove(PIDTask()); //TTList::Remove does not delete object + if ( GetRecParticlesDataLoader()->GetBaseTaskLoader() == 0x0 ) + { + AliWarning("Task Loader for Reconstructed Particles does not exist"); + return; + } + GetRecParticlesDataLoader()->GetBaseTaskLoader()->Clean(); } /*****************************************************************************/ Int_t AliLoader::ReloadAll() { + // Calling Reload function for all the data loaders TIter next(fDataLoaders); AliDataLoader* dl; @@ -689,7 +739,7 @@ Int_t AliLoader::ReloadAll() Int_t err = dl->Reload(); if (err) { - Error("ReloadAll","Reload returned error for %s",dl->GetName()); + AliError(Form("Reload returned error for %s",dl->GetName())); return err; } } @@ -711,9 +761,10 @@ void AliLoader::CloseFiles() Int_t AliLoader::SetEventFolder(TFolder* eventfolder) { + //sets the event folder if (eventfolder == 0x0) { - Error("SetEventFolder","Stupid joke. Argument is NULL"); + AliError("Stupid joke. Argument is NULL"); return 1; } @@ -740,17 +791,17 @@ Int_t AliLoader::Register(TFolder* eventFolder) //creation of folder structure as well (some detectors needs folders //alrady in constructors) - if (GetDebug()) Info("Register","Name is %s.",GetName()); + AliDebug(1, Form("Name is %s.",GetName())); if (eventFolder == 0x0) { - Error("Register","Event folder is not set."); + AliError("Event folder is not set."); return 1; } Int_t retval = AliConfig::Instance()->AddDetector(eventFolder,fDetectorName,fDetectorName); if(retval) { - Error("SetEventFolder","Can not create tasks and/or folders for %s. Event folder name is %s", - fDetectorName.Data(),eventFolder->GetName()); + AliError(Form("Can not create tasks and/or folders for %s. Event folder name is %s", + fDetectorName.Data(),eventFolder->GetName())); return retval; } SetEventFolder(eventFolder); @@ -761,7 +812,7 @@ AliRunLoader* AliLoader::GetRunLoader() { //gets the run-loader from event folder AliRunLoader* rg = 0x0; - TObject * obj = GetEventFolder()->FindObject(AliRunLoader::fgkRunLoaderName); + TObject * obj = GetEventFolder()->FindObject(AliRunLoader::GetRunLoaderName()); if (obj) rg = dynamic_cast(obj); return rg; } @@ -780,7 +831,7 @@ Bool_t AliLoader::TestFileOption(Option_t* opt) /*****************************************************************************/ void AliLoader::SetDirName(TString& dirname) { -//adds "dirname/" to each file +//adds "dirname" to each file. Dirname should end with "#","/", or ":" TIter next(fDataLoaders); AliDataLoader* dl; while((dl = (AliDataLoader*)next())) @@ -791,7 +842,7 @@ void AliLoader::SetDirName(TString& dirname) /*****************************************************************************/ -void AliLoader::SetDigitsFileNameSuffix(const TString& suffix) +void AliLoader::SetDigitsFileNameSuffix(const TString& suffix) const { //adds the suffix before ".root", //e.g. TPC.Digits.root -> TPC.DigitsMerged.root @@ -826,11 +877,12 @@ void AliLoader::Clean() void AliLoader::Clean(const TString& name) { + // Removes object with "name" from the detector's data folder + // and from the memory TObject* obj = GetDetectorDataFolder()->FindObject(name); if(obj) { - if (GetDebug()) - Info("Clean(const TString&)","name=%s, cleaning %s.",GetName(),name.Data()); + AliDebug(1, Form("name=%s, cleaning %s.",GetName(),name.Data())); GetDetectorDataFolder()->Remove(obj); delete obj; } @@ -840,12 +892,28 @@ void AliLoader::Clean(const TString& name) Bool_t AliLoader::IsOptionWritable(const TString& opt) { + // Returns "true" if the option means also "writable" if (opt.CompareTo("recreate",TString::kIgnoreCase)) return kTRUE; if (opt.CompareTo("new",TString::kIgnoreCase)) return kTRUE; if (opt.CompareTo("create",TString::kIgnoreCase)) return kTRUE; if (opt.CompareTo("update",TString::kIgnoreCase)) return kTRUE; return kFALSE; } + +/*****************************************************************************/ + +void AliLoader::SetDebug(Int_t deb) +{ + // Sets debug level + AliLog::SetClassDebugLevel("AliRunLoader", deb); + AliLog::SetClassDebugLevel("AliLoader", deb); + AliLog::SetClassDebugLevel("AliDataLoader", deb); + AliLog::SetClassDebugLevel("AliBaseLoader", deb); + AliLog::SetClassDebugLevel("AliObjectLoader", deb); + AliLog::SetClassDebugLevel("AliTreeLoader", deb); + AliLog::SetClassDebugLevel("AliTaskLoader", deb); + AliLog::SetClassDebugLevel("AliConfig", deb); +} /*****************************************************************************/ void AliLoader::SetTAddrInDet()