using namespace std;
#include "hldrfiofilesource.h"
#include "hldrfiofilevt.h"
#include "hevent.h"
#include "hrecevent.h"
#include <unistd.h>
ClassImp(HldRFIOFileSource)
HldRFIOFileSource::HldRFIOFileSource(void)
: HldFileSource()
{
if(fReadEvent) delete fReadEvent;
fReadEvent=new HldRFIOFilEvt();
fCurrentRobot = "lxgstore";
fCurrentArchive = "hadesraw";
}
Int_t HldRFIOFileSource::getRunId(const Text_t *fileName)
{
HldRFIOFilEvt evt;
Int_t r=-1;
if (fCurrentFile && strcmp(fileName,fCurrentFile->GetName())==0) {
r=fCurrentFile->getRunId();
} else {
if (!evt.setFile(fileName)) r=-1;
else {
evt.read();
r=evt.getRunNr();
}
}
return r;
}
void HldRFIOFileSource::addFile(const Text_t *name,Int_t refId)
{
HldFileDesc *desc=0;
HldFileDesc *newDesc=0;
TString fileName;
fileName=fCurrentRobot+":/"+fCurrentArchive+"/"+fCurrentDir+"/"+name;
desc=(HldFileDesc *)fFileList.FindObject(fileName);
if (desc) {
if (refId==-1)
newDesc=new HldFileDesc(fileName.Data(),desc->getRunId(),desc->getRefId());
else
newDesc=new HldFileDesc(fileName.Data(),desc->getRunId(),refId);
fFileList.Add(newDesc);
Warning("addFile","File %s added more than once\n",fileName.Data());
} else {
if (HRFIOFile::access(fileName.Data(),F_OK)!=0) {
Error("addFile","File %s not found\n",fileName.Data());
} else {
newDesc=new HldFileDesc(fileName.Data(),getRunId(fileName),refId);
fFileList.Add(newDesc);
}
}
}
EDsState HldRFIOFileSource::getNextEvent(Bool_t doUnpack) {
if(isDumped) {
if (dumpEvt()==kDsError) {
if (getNextFile()==kFALSE) return kDsEndData;
else return kDsEndFile;
}
return kDsOk;
}
if (isScanned) {
if (scanEvt()==kDsError) {
if (getNextFile()==kFALSE) return kDsEndData;
else return kDsEndFile;
}
return kDsOk;
}
fEventNr++;
if ( !((HldRFIOFilEvt*)fReadEvent)->execute() || !(fEventNr<fEventLimit)) {
fEventNr = 0;
if (getNextFile()==kFALSE) return kDsEndData;
else return kDsEndFile;
}
if(doUnpack){
decodeHeader((*fEventAddr)->getHeader());
iter->Reset();
HldUnpack *unpacker;
while ( (unpacker=(HldUnpack *)iter->Next())!=NULL) {
Int_t ret=unpacker->execute();
if(!ret) return kDsError;
if(ret==kDsSkip) return kDsSkip;
}
}
return kDsOk;
}
Bool_t HldRFIOFileSource::getNextFile(void )
{
if (!fCurrentFile) {
if (fFileList.IsEmpty()) return kFALSE;
else fCurrentFile=(HldFileDesc *)fFileList.First();
} else {
fCurrentFile=(HldFileDesc *)fFileList.After(fCurrentFile);
if (!fCurrentFile) return kFALSE;
}
((HldRFIOFilEvt *)fReadEvent)->setFile(fCurrentFile->GetName());
return kTRUE;
}
Bool_t HldRFIOFileSource::rewind()
{
if (fFileList.IsEmpty()) return kFALSE;
else fCurrentFile=(HldFileDesc *)fFileList.First();
return ((HldRFIOFilEvt *)fReadEvent)->setFile(fCurrentFile->GetName());
}
void HldRFIOFileSource::setRobot(const Char_t *robotName)
{
TString *tmp;
tmp = new TString(robotName);
tmp->ToUpper();
if(tmp->CompareTo("LXGSTORE")==0)
fCurrentRobot = "lxgstore.gsi.de";
}
Last change: Sat May 22 13:17:58 2010
Last generated: 2010-05-22 13:17
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.