#include <TBranch.h>
#include <TFile.h>
#include <TFolder.h>
-#include <TGeometry.h>
#include <TObjArray.h>
#include <TString.h>
class TTask;
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)
//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));
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 ) ;
}
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()))
//run loader object
char loadername[256];
- sprintf(loadername, "%sLoader", detname);
+ snprintf(loadername, 255, "%sLoader", detname);
AliLoader* loader = GetLoader(loadername);
if (!loader) {
AliError(Form("No loader for %s found", detname));
char buff[10];
char dets [200];
- strcpy(dets,namelist);//compiler cries when char* = const Option_t*;
- dets[strlen(dets)+1] = '\n';//set endl at the end of string
+ strncpy(dets,namelist,199);//compiler cries when char* = const Option_t*;
+ // dets[strlen(dets)+1] = '\n';//set endl at the end of string
char* pdet = dets;
Int_t tmp;
for(;;)
{
- tmp = sscanf(pdet,"%s",buff);//read the string from the input string pdet into buff
+ tmp = sscanf(pdet,"%9s",buff);//read the string from the input string pdet into buff
if ( (buff[0] == 0) || (tmp == 0) ) break; //if not read
pdet = strstr(pdet,buff) + strlen(buff);//move the input pointer about number of bytes (letters) read
//removes TreeE from folder and deletes it
// as well as fHeader object
CleanHeader();
- delete fHeader;
fHeader = 0x0;
}
/**************************************************************************/