X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliStream.cxx;h=7658b123196efb466260cb0cd27b55c94c6df52f;hb=020c3cc4b8a217179fc018bb04d49e809a784e7b;hp=ff3f9b289ad6d8dcd66946227d93807e984624c9;hpb=fb17acd412e4de1f64fd41bde1684280cacc9016;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliStream.cxx b/STEER/AliStream.cxx index ff3f9b289ad..7658b123196 100644 --- a/STEER/AliStream.cxx +++ b/STEER/AliStream.cxx @@ -13,7 +13,16 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* $Header$ */ +/* $Id$ */ + +#include +#include +#include + +#include "AliLog.h" +#include "AliLoader.h" +#include "AliRun.h" +#include "AliStream.h" //////////////////////////////////////////////////////////////////////// // @@ -23,95 +32,82 @@ // - open and close files // - return serial event number of the next event in the stream // and the TFile pointer for a proper file +// Author: Jiri Chudoba (CERN), 2001 // //////////////////////////////////////////////////////////////////////// -#include - -#include "TFile.h" -#include "TObjString.h" -#include "TROOT.h" -#include "TTree.h" - -#include "AliRun.h" -#include "AliStream.h" - ClassImp(AliStream) -//_______________________________________________________________________ AliStream::AliStream(): - fLastEventSerialNr(0), + fLastEventSerialNr(-1), fLastEventNr(0), - fCurrentFileIndex(0), + fCurrentFileIndex(-1), fEvents(0), fMode(0), - fCurrentFile(0), - fFileNames(0) + fFileNames(0x0), + fEventFolderName(0) { - // // root requires default ctor, where no new objects can be created // do not use this ctor, it is supplied only for root needs - // } - //_______________________________________________________________________ -AliStream::AliStream(Option_t *option): + +AliStream::AliStream(const char* foldername,Option_t *option): fLastEventSerialNr(-1), fLastEventNr(0), fCurrentFileIndex(-1), fEvents(0), fMode(option), - fCurrentFile(0), - fFileNames(new TObjArray(1)) + fFileNames(new TObjArray(1)), + fEventFolderName(foldername) { - // - // Default ctor - // +// ctor } - //_______________________________________________________________________ -AliStream::AliStream(const AliStream& str): - TNamed(str), - fLastEventSerialNr(0), + +AliStream::AliStream(const AliStream &as): + TNamed(as), + fLastEventSerialNr(-1), fLastEventNr(0), - fCurrentFileIndex(0), + fCurrentFileIndex(-1), fEvents(0), fMode(0), - fCurrentFile(0), - fFileNames(0) + fFileNames(0x0), + fEventFolderName(" ") { // // Copy ctor // - str.Copy(*this); + as.Copy(*this); } - //_______________________________________________________________________ -void AliStream::Copy(AliStream& ) const -{ - Fatal("Copy","Not implemented\n"); -} -//_______________________________________________________________________ AliStream::~AliStream() { // default dtor - if (fFileNames) { - fFileNames->Delete(); - delete fFileNames; - } + delete AliRunLoader::GetRunLoader(fEventFolderName); //clear the eventuall session + if (fFileNames) delete fFileNames; } +//_______________________________________________________________________ +void AliStream::Copy(TObject &) const +{ + // + // Copy function + // + AliFatal("Not implemented!"); +} //_______________________________________________________________________ + void AliStream::AddFile(const char *fileName) { // stores the name of the file TObjString *name = new TObjString(fileName); fFileNames->Add(name); } - //_______________________________________________________________________ -Bool_t AliStream::NextEventInStream(Int_t &serialNr) + +Bool_t AliStream::NextEventInStream() { // returns kFALSE if no more events // returns kTRUE and the serial nr of the next event @@ -119,88 +115,125 @@ Bool_t AliStream::NextEventInStream(Int_t &serialNr) // no files given: if (fFileNames->GetLast() < 0) return kFALSE; - - if (!fCurrentFile) { - if (!OpenNextFile()) return kFALSE; - } - if (fLastEventSerialNr+1 >= fEvents) { + AliRunLoader* currentloader = AliRunLoader::GetRunLoader(fEventFolderName); + if (currentloader == 0x0) + { + AliDebug(1, Form( + "Can not get RL from folder named %s. Attempting to open next file", + fEventFolderName.Data())); + Int_t res = OpenNextFile(); + if ( res == 0) return kFALSE; + currentloader = AliRunLoader::GetRunLoader(fEventFolderName); + } + + if (fLastEventSerialNr+1 >= fEvents) + { if (!OpenNextFile()) return kFALSE; - } - serialNr = ++fLastEventSerialNr; + } + AliDebug(1, Form("Trying to get event %d",fLastEventSerialNr+1)); + currentloader->GetEvent(++fLastEventSerialNr); return kTRUE; } - //_______________________________________________________________________ + void AliStream::ChangeMode(Option_t* option) -// set the mode to READ or UPDATE, reopen file with the new mode -// only change from UPDATE to READ have sense in the current scheme, -// other changes are possible but not usefull { + // set the mode to READ or UPDATE, reopen file with the new mode + // only change from UPDATE to READ have sense in the current scheme, + // other changes are possible but not usefull + fMode = option; - if (fCurrentFile) { - fCurrentFile->Close(); + AliRunLoader* currentloader = AliRunLoader::GetRunLoader(fEventFolderName); + if (currentloader) { + delete currentloader; fCurrentFileIndex--; OpenNextFile(); } } - //_______________________________________________________________________ + Bool_t AliStream::OpenNextFile() { + // + // Opens next file in the list + // if (++fCurrentFileIndex > fFileNames->GetLast()) { - cerr<<"No more files in the stream"<(fFileNames->At(fCurrentFileIndex))->GetName(); + const char* filename = static_cast(fFileNames->At(fCurrentFileIndex))->GetName(); // check if the file was already opened by some other code - TFile *f = dynamic_cast(gROOT->GetListOfFiles()->FindObject(filename)); + TFile *f = (TFile *)(gROOT->GetListOfFiles()->FindObject(filename)); if (f) f->Close(); - if (fCurrentFile) { - if (fCurrentFile->IsOpen()) { - fCurrentFile->Close(); - } - } + AliRunLoader* currentloader = AliRunLoader::GetRunLoader(fEventFolderName); + + if (currentloader) + { + delete currentloader; + } + + currentloader = AliRunLoader::Open(filename,fEventFolderName,fMode); + - fCurrentFile = TFile::Open(filename,fMode.Data()); - if (!fCurrentFile) { + if (currentloader == 0x0) + { // cannot open file specified on input. Do not skip it silently. - cerr<<"Cannot open file "<(fCurrentFile->Get("TE")); - if (!te) { - Error("OpenNextFile", "input file does not contain TE"); - return kFALSE; - } - fEvents = static_cast(te->GetEntries()); + + if ( AliLoader::TestFileOption(fMode) )//tests if file is opened in read or update mode + { + Int_t res = currentloader->LoadHeader(); + if (res) + { + AliError("Problems with loading header"); + return kFALSE; + } + fEvents = static_cast(currentloader->TreeE()->GetEntries()); + } + else + { + //if it is new, create or recreate there is no chance to find header in file + fEvents = 0; + } + fLastEventSerialNr = -1; return kTRUE; } - //_______________________________________________________________________ + Bool_t AliStream::ImportgAlice() { + // + // Imports gAlice object from file + // if (fFileNames->GetLast() < 0) return kFALSE; - if (!fCurrentFile) { + + AliRunLoader* currentloader = AliRunLoader::GetRunLoader(fEventFolderName); + if (!currentloader) + { if (!OpenNextFile()) return kFALSE; - } - gAlice = dynamic_cast(fCurrentFile->Get("gAlice")); + currentloader = AliRunLoader::GetRunLoader(fEventFolderName); + } + currentloader->LoadgAlice(); + gAlice = currentloader->GetAliRun(); if (!gAlice) return kFALSE; return kTRUE; } //_______________________________________________________________________ -TString AliStream::GetFileName(const Int_t order) const -// returns name of the order-th file -// returns empty string if such file does not exist -// first file in the input stream is 0 +TString AliStream::GetFileName(Int_t order) const { + // returns name of the order-th file + // returns empty string if such file does not exist + // first file in the input stream is 0 TString fileName(""); if (order > fFileNames->GetLast()) return fileName; TObjString *fileNameStored = dynamic_cast(fFileNames->At(order));