#ifndef ALILOADER_H
#define ALILOADER_H
class TDirectory;
class TFile;
class TString;
class TTree;
#include <TFolder.h>
#include <TObjArray.h>
class AliRunLoader;
#include "AliDataLoader.h"
#include "AliBaseLoader.h"
class AliLoader: public TNamed
{
public:
AliLoader();
AliLoader(const Char_t *detname,const Char_t *eventfoldername);
AliLoader(const Char_t *detname,TFolder* eventfolder);
virtual ~AliLoader();
virtual Int_t GetEvent();
virtual Int_t SetEvent();
virtual void MakeTree(Option_t* opt);
AliDataLoader* GetHitsDataLoader() const {return (AliDataLoader*)fDataLoaders->At(kHits);}
AliDataLoader* GetSDigitsDataLoader() const {return (AliDataLoader*)fDataLoaders->At(kSDigits);}
AliDataLoader* GetDigitsDataLoader() const {return (AliDataLoader*)fDataLoaders->At(kDigits);}
AliDataLoader* GetRecPointsDataLoader()const {return (AliDataLoader*)fDataLoaders->At(kRecPoints);}
AliDataLoader* GetTracksDataLoader() const {return (AliDataLoader*)fDataLoaders->At(kTracks);}
AliDataLoader* GetRecParticlesDataLoader()const {return (AliDataLoader*)fDataLoaders->At(kRecParticles);}
AliDataLoader* GetDataLoader(const char* name);
void AddDataLoader(AliDataLoader* dl);
Int_t SetEventFolder(TFolder* eventfolder);
Int_t Register(TFolder* eventFolder);
TFolder* GetTopFolder();
TFolder* GetEventFolder();
TFolder* GetDataFolder();
TFolder* GetDetectorDataFolder();
TFolder* GetModulesFolder();
virtual void MakeHitsContainer() const {GetHitsDataLoader()->MakeTree();}
virtual void MakeSDigitsContainer() const {GetSDigitsDataLoader()->MakeTree();}
virtual void MakeDigitsContainer() const {GetDigitsDataLoader()->MakeTree();}
virtual void MakeRecPointsContainer() const {GetRecPointsDataLoader()->MakeTree();}
virtual void MakeTracksContainer() const {GetTracksDataLoader()->MakeTree();}
virtual void MakeRecParticlesContainer() const {GetRecParticlesDataLoader()->MakeTree();}
virtual void CleanFolders();
virtual void CloseFiles();
TTree* TreeH() const
{return GetHitsDataLoader()->Tree();}
TTree* TreeS() const
{return GetSDigitsDataLoader()->Tree();}
TTree* TreeD() const
{return GetDigitsDataLoader()->Tree();}
TTree* TreeR() const
{return GetRecPointsDataLoader()->Tree();}
TTree* TreeT() const
{return GetTracksDataLoader()->Tree();}
TTree* TreeP() const
{return GetRecParticlesDataLoader()->Tree();}
Int_t LoadHits(Option_t* opt=""){
Int_t status = GetHitsDataLoader()->Load(opt);
SetTAddrInDet();
return status;
}
Int_t LoadSDigits(Option_t* opt=""){
Int_t status = GetSDigitsDataLoader()->Load(opt);
SetTAddrInDet();
return status;
}
Int_t LoadDigits(Option_t* opt=""){
Int_t status = GetDigitsDataLoader()->Load(opt);
SetTAddrInDet();
return status;
}
Int_t LoadRecPoints(Option_t* opt="") {
Int_t status = GetRecPointsDataLoader()->Load(opt);
SetTAddrInDet();
return status;
}
Int_t LoadTracks(Option_t* opt="") {
Int_t status = GetTracksDataLoader()->Load(opt);
SetTAddrInDet();
return status;
}
Int_t LoadRecParticles(Option_t* opt="") {
Int_t status = GetRecParticlesDataLoader()->Load(opt);
SetTAddrInDet();
return status;
}
void UnloadHits() const {GetHitsDataLoader()->Unload();}
void UnloadSDigits() const {GetSDigitsDataLoader()->Unload();}
void UnloadDigits() const {GetDigitsDataLoader()->Unload();}
void UnloadRecPoints() const{GetRecPointsDataLoader()->Unload();}
void UnloadTracks() const {GetTracksDataLoader()->Unload();}
void UnloadRecParticles() const {GetRecParticlesDataLoader()->Unload();}
void UnloadAll();
virtual Int_t ReloadHits() const {return GetHitsDataLoader()->Reload();}
virtual Int_t ReloadSDigits() const {return GetSDigitsDataLoader()->Reload();}
virtual Int_t ReloadDigits() const {return GetDigitsDataLoader()->Reload();}
virtual Int_t ReloadRecPoints() const {return GetRecPointsDataLoader()->Reload();}
virtual Int_t ReloadTracks() const {return GetTracksDataLoader()->Reload();}
virtual Int_t ReloadRecParticles() const {return GetRecParticlesDataLoader()->Reload();}
virtual Int_t ReloadAll();
virtual Int_t WriteHits(Option_t* opt="") const;
virtual Int_t WriteSDigits(Option_t* opt="") const;
virtual Int_t WriteDigits(Option_t* opt="") const {return GetDigitsDataLoader()->WriteData(opt);}
virtual Int_t WriteRecPoints(Option_t* opt="") const {return GetRecPointsDataLoader()->WriteData(opt);}
virtual Int_t WriteTracks(Option_t* opt="") const {return GetTracksDataLoader()->WriteData(opt);}
virtual Int_t WriteRecParticles(Option_t* opt="") const {return GetRecParticlesDataLoader()->WriteData(opt);}
void SetHitsFileName(const TString& fname) const
{GetHitsDataLoader()->SetFileName(fname);}
void SetSDigitsFileName(const TString& fname) const
{GetSDigitsDataLoader()->SetFileName(fname);}
void SetDigitsFileName(const TString& fname) const
{GetDigitsDataLoader()->SetFileName(fname);}
void SetRecPointsFileName(const TString& fname) const
{GetRecPointsDataLoader()->SetFileName(fname);}
void SetTracksFileName(const TString& fname) const
{GetTracksDataLoader()->SetFileName(fname);}
void SetRecParticlesFileName(const TString& fname) const
{GetRecParticlesDataLoader()->SetFileName(fname);}
const TString& GetHitsFileName() const
{return GetHitsDataLoader()->GetFileName();}
const TString& GetSDigitsFileName() const
{return GetSDigitsDataLoader()->GetFileName();}
const TString& GetDigitsFileName() const
{return GetDigitsDataLoader()->GetFileName();}
const TString& GetRecPointsFileName() const
{return GetRecPointsDataLoader()->GetFileName();}
const TString& GetTracksFileName() const
{return GetTracksDataLoader()->GetFileName();}
const TString& GetRecParticlesFileName() const
{return GetRecParticlesDataLoader()->GetFileName();}
virtual void CleanHits() const
{GetHitsDataLoader()->Clean();}
virtual void CleanSDigits() const
{GetSDigitsDataLoader()->Clean();}
virtual void CleanDigits() const
{GetDigitsDataLoader()->Clean();}
virtual void CleanRecPoints() const
{GetRecPointsDataLoader()->Clean();}
virtual void CleanTracks() const
{GetTracksDataLoader()->Clean();}
virtual void SetHitsFileOption(Option_t* newopt) const
{GetHitsDataLoader()->SetFileOption(newopt);}
virtual void SetSDigitsFileOption(Option_t* newopt) const
{GetSDigitsDataLoader()->SetFileOption(newopt);}
virtual void SetDigitsFileOption(Option_t* newopt) const
{GetDigitsDataLoader()->SetFileOption(newopt);}
virtual void SetRecPointsFileOption(Option_t* newopt) const
{GetRecPointsDataLoader()->SetFileOption(newopt);}
virtual void SetTracksFileOption(Option_t* newopt) const
{GetTracksDataLoader()->SetFileOption(newopt);}
virtual void SetRecParticlesFileOption(Option_t* newopt) const
{GetRecParticlesDataLoader()->SetFileOption(newopt);}
virtual void SetHitsComprLevel(Int_t cl) const
{GetHitsDataLoader()->SetCompressionLevel(cl);}
virtual void SetDigitsComprLevel(Int_t cl) const
{GetSDigitsDataLoader()->SetCompressionLevel(cl);}
virtual void SetSDigitsComprLevel(Int_t cl) const
{GetDigitsDataLoader()->SetCompressionLevel(cl);}
virtual void SetRecPointsComprLevel(Int_t cl) const
{GetRecPointsDataLoader()->SetCompressionLevel(cl);}
virtual void SetTracksComprLevel(Int_t cl) const
{GetTracksDataLoader()->SetCompressionLevel(cl);}
virtual void SetRecParticlesComprLevel(Int_t cl) const
{GetRecParticlesDataLoader()->SetCompressionLevel(cl);}
virtual void SetCompressionLevel(Int_t cl);
void SetDirName(TString& name);
const TString& GetDetectorName() const{return fDetectorName;}
AliRunLoader* GetRunLoader();
void SetDigitsFileNameSuffix(const TString& suffix) const;
void Synchronize();
static TDirectory* ChangeDir(TFile* file, Int_t eventno);
static Bool_t TestFileOption(Option_t* opt);
static Bool_t IsOptionWritable(const TString& opt);
static void SetDebug(Int_t deb = 1);
protected:
enum EDataTypes{kHits = 0,kSDigits,kDigits,kRecPoints,kTracks,kRecParticles,kNDataTypes};
virtual Int_t PostHits() const
{return GetHitsDataLoader()->GetBaseLoader(0)->Load();}
virtual Int_t PostSDigits() const
{return GetSDigitsDataLoader()->GetBaseLoader(0)->Load();}
virtual Int_t PostDigits() const
{return GetDigitsDataLoader()->GetBaseLoader(0)->Load();}
virtual Int_t PostRecPoints() const
{return GetRecPointsDataLoader()->GetBaseLoader(0)->Load();}
virtual Int_t PostTracks() const
{return GetTracksDataLoader()->GetBaseLoader(0)->Load();}
virtual Int_t PostRecParticles() const
{return GetRecParticlesDataLoader()->GetBaseLoader(0)->Load();}
void Clean();
void Clean(const TString& name);
TString GetUnixDir() const;
TObject* GetDetectorData(const char* name){return GetDetectorDataFolder()->FindObject(name);}
TObject** GetDetectorDataRef(TObject* obj);
virtual void InitDefaults();
void ResetDataInfo();
void SetTAddrInDet();
TObjArray* fDataLoaders;
TString fDetectorName;
TFolder* fEventFolder;
TFolder* fDataFolder;
TFolder* fDetectorDataFolder;
TFolder* fModuleFolder;
static const TString fgkDefaultHitsContainerName;
static const TString fgkDefaultDigitsContainerName;
static const TString fgkDefaultSDigitsContainerName;
static const TString fgkDefaultRecPointsContainerName;
static const TString fgkDefaultTracksContainerName;
static const TString fgkDefaultRecParticlesContainerName;
static const TString fgkLoaderBaseName;
private:
AliLoader(const AliLoader&);
AliLoader& operator=(const AliLoader&);
ClassDef(AliLoader,3)
};
inline TFolder* AliLoader::GetDetectorDataFolder()
{
if(!fDetectorDataFolder)
{
fDetectorDataFolder = dynamic_cast<TFolder*>(GetDataFolder()->FindObject(fDetectorName.Data()));
if(!fDetectorDataFolder)
{
Fatal("GetDetectorDataFolder",
"Can not find folder %s in folder %s. Aborting",
fDetectorName.Data(),GetDataFolder()->GetName());
return 0x0;
}
}
return fDetectorDataFolder;
}
#endif