//Author: Alice Offline Group http://alisoft.cern.ch
//Responsible: Piotr.Skowronski@cern.ch
//
-#include <AliLoader.h>
+#include "AliLoader.h"
//Root includes
#include <TROOT.h>
-#include <TFolder.h>
#include <TFile.h>
-#include <TTree.h>
-#include <TTask.h>
+#include <TFolder.h>
#include <TString.h>
-#include <TError.h>
+#include <TTask.h>
//AliRoot includes
-#include <AliRun.h>
-#include <AliRunLoader.h>
-#include <AliRunDigitizer.h>
-#include <AliDigitizer.h>
-#include <AliDetector.h>
#include "AliConfig.h"
-
-Int_t AliLoader::fgDebug = 0;
+#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";
fModuleFolder(0x0),
fTasksFolder(0x0),
fQAFolder(0x0)
- {
+{
//default constructor
}
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
//fileoption's don't need to initialized because default TString ctor does it correctly
}
/*****************************************************************************/
-AliLoader::AliLoader(const AliLoader& source):TNamed(source) {
+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;
- Fatal("AliLoader","Copy constructor not implemented. Aborting");
+ AliFatal("Copy constructor not implemented. Aborting");
return;
}
// dummy assignment operator
if(&source==this) return *this;
- Fatal("AliLoader","Assignment operator not implemented. Aborting");
+ AliFatal("Assignment operator not implemented. Aborting");
return *this;
}
return dynamic_cast<AliDataLoader*>(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()
{
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;
}
}
//returns the folder speciofic to given detector e.g. /Folders/Event/Data/
if (!fDataFolder)
{
- fDataFolder = dynamic_cast<TFolder*>(GetEventFolder()->FindObject(AliConfig::fgkDataFolderName));
+ fDataFolder = dynamic_cast<TFolder*>(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;
}
}
//Returns pointer to Folder with Alice Tasks
if (!fTasksFolder)
{
- fTasksFolder = dynamic_cast<TFolder*>(GetTopFolder()->FindObject(AliConfig::fgkTasksFolderName));
+ fTasksFolder = dynamic_cast<TFolder*>(GetTopFolder()->FindObject(AliConfig::GetTasksFolderName()));
if (!fTasksFolder)
{
- Fatal("GetTasksFolder","Can not find tasks folder. Aborting");
+ AliFatal("Can not find tasks folder. Aborting");
return 0x0;
}
}
if (!fModuleFolder)
{
- Fatal("GetModulesFolder","Can not find modules folder. Aborting");
+ AliFatal("Can not find modules folder. Aborting");
return 0x0;
}
}
if (fQAFolder == 0x0)
{
- Fatal("GetQAFolder","Can not find Quality Assurance folder. Aborting");
+ AliFatal("Can not find Quality Assurance folder. Aborting");
return 0x0;
}
}
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;
}
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;
}
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;
}
/*****************************************************************************/
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;
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);
// S: - Summable Digits
// R: - Reconstructed Points (clusters)
// T: - Tracks (tracklets)
+// GG: - Trigger
const char *oH = strstr(option,"H");
const char *oD = strstr(option,"D");
const char *oR = strstr(option,"R");
const char *oT = strstr(option,"T");
const char *oP = strstr(option,"P");
+ const char *oGG = strstr(option,"GG");
if (oH) MakeHitsContainer();
if (oD) MakeDigitsContainer();
if (oR) MakeRecPointsContainer();
if (oT) MakeTracksContainer();
if (oP) MakeRecParticlesContainer();
+ if (oGG) AliError("Don't know how to create a trigger tree");
}
/*****************************************************************************/
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();
}
}
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 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;
}
}
//sets the event folder
if (eventfolder == 0x0)
{
- Error("SetEventFolder","Stupid joke. Argument is NULL");
+ AliError("Stupid joke. Argument is NULL");
return 1;
}
//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);
{
//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<AliRunLoader*>(obj);
return rg;
}
/*****************************************************************************/
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()))
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;
}
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()