#include <TBranch.h>
#include <TFile.h>
#include <TFolder.h>
-#include <TGeometry.h>
#include <TObjArray.h>
#include <TString.h>
class TTask;
#include <TTree.h>
-#include <TDirectory.h>
#include "AliLog.h"
#include "AliRun.h"
AliRunLoader::AliRunLoader():
fLoaders(0x0),
fEventFolder(0x0),
+ fRun(-1),
fCurrentEvent(0),
fGAFile(0x0),
fHeader(0x0),
fKineDataLoader(0x0),
fTrackRefsDataLoader(0x0),
fNEventsPerFile(1),
+ fNEventsPerRun(0),
fUnixDirName(".")
{
AliConfig::Instance();//force to build the folder structure
TNamed(fgkRunLoaderName,fgkRunLoaderName),
fLoaders(new TObjArray()),
fEventFolder(0x0),
+ fRun(-1),
fCurrentEvent(0),
fGAFile(0x0),
fHeader(0x0),
fKineDataLoader(new AliDataLoader(fgkDefaultKineFileName,fgkKineContainerName,"Kinematics")),
fTrackRefsDataLoader(new AliDataLoader(fgkDefaultTrackRefsFileName,fgkTrackRefsContainerName,"Track References")),
fNEventsPerFile(1),
+ fNEventsPerRun(0),
fUnixDirName(".")
{
//ctor
}
/**************************************************************************/
-AliRunLoader::AliRunLoader(const AliRunLoader &rl):
- TNamed(rl),
- fLoaders(0x0),
- fEventFolder(0x0),
- fCurrentEvent(0),
- fGAFile(0x0),
- fHeader(0x0),
- fStack(0x0),
- fCTrigger(0x0),
- fKineDataLoader(0x0),
- fTrackRefsDataLoader(0x0),
- fNEventsPerFile(0),
- fUnixDirName(".")
-{
- //
- // Copy ctor
- //
- rl.Copy(*this);
-}
-/**************************************************************************/
-
AliRunLoader::~AliRunLoader()
{
//dtor
- if (fgRunLoader == this) fgRunLoader = 0x0;
+
UnloadHeader();
UnloadgAlice();
-
+ if (fgRunLoader == this) fgRunLoader = 0x0;
if(fLoaders) {
fLoaders->SetOwner();
delete fLoaders;
//fEventFolder is deleted by the way of removing - TopAliceFolder owns it
if( fCTrigger ) delete fCTrigger;
- delete fHeader;
delete fStack;
delete fGAFile;
}
TNamed(fgkRunLoaderName,fgkRunLoaderName),
fLoaders(new TObjArray()),
fEventFolder(topfolder),
+ fRun(-1),
fCurrentEvent(0),
fGAFile(0x0),
fHeader(0x0),
fKineDataLoader(new AliDataLoader(fgkDefaultKineFileName,fgkKineContainerName,"Kinematics")),
fTrackRefsDataLoader(new AliDataLoader(fgkDefaultTrackRefsFileName,fgkTrackRefsContainerName,"Track References")),
fNEventsPerFile(1),
+ fNEventsPerRun(0),
fUnixDirName(".")
{
//ctor
fEventFolder->Add(this);//put myself to the folder to accessible for all
}
-/**************************************************************************/
-void AliRunLoader::Copy(TObject &) const
-{
- AliFatal("Not implemented");
-}
/**************************************************************************/
Int_t AliRunLoader::GetEvent(Int_t evno)
//Reloads all data properly
//PH if (fCurrentEvent == evno) return 0;
- // TDirectory::TContext restores the current directory is restored when the scope ends.
- TDirectory::TContext context(0);
-
if (evno < 0)
{
AliError("Can not give the event with negative number");
//Reload stack (If header was loaded)
if (TreeE()) fStack = GetHeader()->Stack();
//Set event folder in stack (it does not mean that we read kinematics from file)
- if (fStack)
- {
- fStack->SetEventFolderName(fEventFolder->GetName());
- }
- else
- {
- AliWarning("Stack not found in header");
- }
-
if( GetTrigger() && TreeCT() ) {
retval = TreeCT()->GetEvent(fCurrentEvent);
if ( retval < 0 ) {
if (fStack && fKineDataLoader->GetBaseLoader(0)->IsLoaded())
{
+ fStack->ConnectTree(TreeK());
+
if (fStack->GetEvent() == kFALSE)
{
AliError(Form("Error occured while GetEvent for Stack. Event %d",evno));
//returns the pointer to run Loader which can be further used for accessing data
//in case of error returns NULL
- // TDirectory::TContext restores the current directory is restored when the scope ends.
- TDirectory::TContext context(0);
-
static const TString kwebaddress("http://alisoft.cern.ch/people/skowron/codedoc/split/index.html");
AliDebugClass(1,Form("\n\n\nNew I/O strcture: See more info:\n %s\n\n\n",kwebaddress.Data()));
-
+
AliRunLoader* result = 0x0;
-
+
/* ************************************************ */
/* Chceck if folder with given name already exists */
/* ************************************************ */
-
+
TObject* obj = AliConfig::Instance()->GetTopFolder()->FindObject(eventfoldername);
if(obj)
{
fStack = fHeader->Stack(); //should be safe - if we created Stack, header returns pointer to the same object
if (fStack)
{
- fStack->SetEventFolderName(fEventFolder->GetName());
- if (TreeK()) fStack->GetEvent();
+ if (TreeK()) {
+ fStack->ConnectTree(TreeK());
+ fStack->GetEvent();
+ }
}
else
{
if(fStack == 0x0)
{
fStack = new AliStack(10000);
- fStack->SetEventFolderName(fEventFolder->GetName());
}
}
/**************************************************************************/
const char *oK = strstr(option,"K"); //Kine
const char *oE = strstr(option,"E"); //Header
const char *oGG = strstr(option,"GG"); //Central TriGGer
-
- if(oK && !TreeK())
- {
- if (fKineDataLoader->GetBaseLoader(0)->IsLoaded() == kFALSE)
+
+ if(oK)
+ {
+ if (fKineDataLoader->GetBaseLoader(0)->IsLoaded() == kFALSE)
{
- AliError("Load Kinematics first");
+ AliError("Load Kinematics first");
}
- else
+ else
{
- fKineDataLoader->MakeTree();
- MakeStack();
- fStack->ConnectTree();
- WriteKinematics("OVERWRITE");
- }
- }
+ if (!TreeK()) {
+ fKineDataLoader->MakeTree();
+ MakeStack();
+ }
+ fStack->ConnectTree(TreeK());
+ WriteKinematics("OVERWRITE");
+ }
+ } // TreeK
if(oE && !TreeE())
{
// create the CTP Trigger output file and tree
TFile* file = gROOT->GetFile( fgkDefaultTriggerFileName );
if( !file ) {
- file = TFile::Open( gSystem->ConcatFileName( fUnixDirName.Data(), fgkDefaultTriggerFileName.Data() ), "RECREATE" ) ;
+ char* tmp = gSystem->ConcatFileName( fUnixDirName.Data(), fgkDefaultTriggerFileName.Data() );
+ file = TFile::Open(tmp , "RECREATE" ) ;
+ delete[] tmp;
}
file->cd();
Int_t AliRunLoader::LoadTrigger(Option_t* option)
{
//Load treeCT
-
+ static Bool_t warned = kFALSE;
if( TreeCT() ) {
- AliWarning("Trigger is already loaded. Nothing done");
+ if (!warned) AliWarning("Trigger is already loaded. Nothing done. Message will not be repeated.");
+ warned = kTRUE;
return 0;
}
return 1;
}
// get the CTP Trigger output file and tree
- TString trgfile = gSystem->ConcatFileName( fUnixDirName.Data(),
- fgkDefaultTriggerFileName.Data() );
+ char* tmp = gSystem->ConcatFileName( fUnixDirName.Data(),
+ fgkDefaultTriggerFileName.Data() );
+ TString trgfile(tmp);
+ delete[] tmp;
+
TFile* file = gROOT->GetFile( trgfile );
if( !file ) {
file = TFile::Open( trgfile, option ) ;
Int_t AliRunLoader::LoadKinematics(Option_t* option)
{
- //Loads the kinematics
-
- // TDirectory::TContext restores the current directory is restored when the scope ends.
- TDirectory::TContext context(0);
-
+//Loads the kinematics
Int_t retval = fKineDataLoader->GetBaseLoader(0)->Load(option);
if (retval)
{
}
if (fStack)
{
- retval = fStack->GetEvent();
+ fStack->ConnectTree(TreeK());
+ retval = fStack->GetEvent();
if ( retval == kFALSE)
{
AliError("Error occured while loading kinamatics tree.");
}
/**************************************************************************/
-Int_t AliRunLoader::WriteGeometry(Option_t* /*opt*/)
-{
-//writes geometry to the file
- fGAFile->cd();
- TGeometry* geo = GetAliRun()->GetGeometry();
- if (geo == 0x0)
- {
- AliError("Can not get geometry from gAlice");
- return 1;
- }
- geo->Write();
- return 0;
-}
-/**************************************************************************/
-
Int_t AliRunLoader::WriteHeader(Option_t* opt)
{
//writes treeE
fEventFolder = AliConfig::Instance()->BuildEventFolder(name,"Event Folder");
fEventFolder->Add(this);//put myself to the folder to accessible for all
- if (Stack()) Stack()->SetEventFolderName(fEventFolder->GetName());
TIter next(fLoaders);
AliLoader *loader;
while((loader = (AliLoader*)next()))
{
//LoadHits in selected detectors i.e. detectors="ITS TPC TRD" or "all"
- // TDirectory::TContext restores the current directory is restored when the scope ends.
- TDirectory::TContext context(0);
-
AliDebug(1, "Loading Hits");
TObjArray* loaders;
TObjArray arr;
{
//LoadHits in selected detectors i.e. detectors="ITS TPC TRD" or "all"
- // TDirectory::TContext restores the current directory is restored when the scope ends.
- TDirectory::TContext context(0);
-
TObjArray* loaders;
TObjArray arr;
{
//LoadHits in selected detectors i.e. detectors="ITS TPC TRD" or "all"
- // TDirectory::TContext restores the current directory is restored when the scope ends.
- TDirectory::TContext context(0);
-
TObjArray* loaders;
TObjArray arr;
{
//LoadHits in selected detectors i.e. detectors="ITS TPC TRD" or "all"
- // TDirectory::TContext restores the current directory is restored when the scope ends.
- TDirectory::TContext context(0);
-
TObjArray* loaders;
TObjArray arr;
{
//LoadHits in selected detectors i.e. detectors="ITS TPC TRD" or "all"
- // TDirectory::TContext restores the current directory is restored when the scope ends.
- TDirectory::TContext context(0);
-
TObjArray* loaders;
TObjArray arr;
{
//LoadHits in selected detectors i.e. detectors="ITS TPC TRD" or "all"
- // TDirectory::TContext restores the current directory is restored when the scope ends.
- TDirectory::TContext context(0);
-
TObjArray* loaders;
TObjArray arr;
//removes TreeE from folder and deletes it
// as well as fHeader object
CleanHeader();
- delete fHeader;
fHeader = 0x0;
}
/**************************************************************************/