ROOT logo
//*-- Author : Joern Wuestenfeld
//_HADES_CLASS_DESCRIPTION 
//////////////////////////////////////////////////////////
//HLdFileSourceBase
//
//  This "data source" is the base for all LMD datasources reading
//  from files on disk or via RFIO.
//  (further information in base class HldSource)
//
///////////////////////////////////////////////////////////////////////////////

#include "hldfilesourcebase.h"
#include "hrecevent.h"
#include "hldfilevt.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hmessagemgr.h"
#include <iostream>
#include <unistd.h>
#include <limits.h>

ClassImp(HldFileDesc)
ClassImp(HldFileSourceBase)

HldFileSourceBase::HldFileSourceBase() : HldSource() {
  // Default constructor for a Lmd file data source.
  iter=0;
  fCurrentFile=0;
  fEventNr = 0;
  iter = NULL;
  fEventLimit = INT_MAX;
}


HldFileSourceBase::~HldFileSourceBase(void) {
  // Destructor for a LMD file data source
  if (fReadEvent)
  {
    delete fReadEvent;
    fReadEvent=0;
  }
  if (iter)
  {
    delete iter;
    iter = NULL;
  }
}


HldFileSourceBase::HldFileSourceBase(HldFileSourceBase &so) {
  fFileList.AddAll(&so.fFileList);
  if (so.fCurrentFile) {
    fCurrentFile=(HldFileDesc *)fFileList.FindObject(so.fCurrentFile->GetName());
    iter=0;
  }
  fReadEvent=so.fReadEvent; //FIXME: Do a real copy!!
  fEventNr = 0;
  fEventLimit = INT_MAX;
}


Bool_t HldFileSourceBase::init(void)
{
  // initializes the unpackers and creates the fReadEvent of the first file
  Bool_t r=kFALSE;
  if (!(*fEventAddr)) {
    (*fEventAddr) = new HRecEvent;
  }
  if (isDumped || isScanned)  return getNextFile();  
  iter=fUnpackerList->MakeIterator();
  if (initUnpacker()==kFALSE) return kFALSE;
  r=getNextFile();

  HldUnpack *unpacker;
  while ( (unpacker=(HldUnpack *)iter->Next()) != 0 ) {
    fReadEvent->appendSubEvtIdx( (*unpacker) );
  }
  INFO_msg(10,HMessageMgr::DET_ALL,"initailized");
  return r;
}

Int_t HldFileSourceBase::getCurrentRunId(void) {
  Int_t r=-1;
  HldFileDesc *file=(fCurrentFile)?fCurrentFile:(HldFileDesc *)fFileList.First();
  if (file) {
    r=file->getRunId();
  }

  return r;
}


Int_t HldFileSourceBase::getCurrentRefId(void) {
  Int_t r=-1;
  HldFileDesc *file=(fCurrentFile) ?
                    fCurrentFile : (HldFileDesc *)fFileList.First();
  if (file) {
    r=file->getRefId();
  } 

  return r;
}


EDsState HldFileSourceBase::getNextEvent(Bool_t doUnpack) {
  // loops over the event files in the runtime database
  // Tries to read a new event from the LMD file and put the info into the 
  // HEvent structure:

  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 ( !((HldFilEvt*)fReadEvent)->execute() || !(fEventNr<fEventLimit)) {
    //End of current file
    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;
}
 


void HldFileSourceBase::addFile(const Text_t *fileName,const Text_t *refFile) {
  Int_t r=-1;
  TString rf=fCurrentDir+"/";
  rf+=refFile;
  r=getRunId(rf.Data());
  if (r==-1) Error("addFile","File %s not found\n",rf.Data());
  else addFile(fileName,r);
}








 hldfilesourcebase.cc:1
 hldfilesourcebase.cc:2
 hldfilesourcebase.cc:3
 hldfilesourcebase.cc:4
 hldfilesourcebase.cc:5
 hldfilesourcebase.cc:6
 hldfilesourcebase.cc:7
 hldfilesourcebase.cc:8
 hldfilesourcebase.cc:9
 hldfilesourcebase.cc:10
 hldfilesourcebase.cc:11
 hldfilesourcebase.cc:12
 hldfilesourcebase.cc:13
 hldfilesourcebase.cc:14
 hldfilesourcebase.cc:15
 hldfilesourcebase.cc:16
 hldfilesourcebase.cc:17
 hldfilesourcebase.cc:18
 hldfilesourcebase.cc:19
 hldfilesourcebase.cc:20
 hldfilesourcebase.cc:21
 hldfilesourcebase.cc:22
 hldfilesourcebase.cc:23
 hldfilesourcebase.cc:24
 hldfilesourcebase.cc:25
 hldfilesourcebase.cc:26
 hldfilesourcebase.cc:27
 hldfilesourcebase.cc:28
 hldfilesourcebase.cc:29
 hldfilesourcebase.cc:30
 hldfilesourcebase.cc:31
 hldfilesourcebase.cc:32
 hldfilesourcebase.cc:33
 hldfilesourcebase.cc:34
 hldfilesourcebase.cc:35
 hldfilesourcebase.cc:36
 hldfilesourcebase.cc:37
 hldfilesourcebase.cc:38
 hldfilesourcebase.cc:39
 hldfilesourcebase.cc:40
 hldfilesourcebase.cc:41
 hldfilesourcebase.cc:42
 hldfilesourcebase.cc:43
 hldfilesourcebase.cc:44
 hldfilesourcebase.cc:45
 hldfilesourcebase.cc:46
 hldfilesourcebase.cc:47
 hldfilesourcebase.cc:48
 hldfilesourcebase.cc:49
 hldfilesourcebase.cc:50
 hldfilesourcebase.cc:51
 hldfilesourcebase.cc:52
 hldfilesourcebase.cc:53
 hldfilesourcebase.cc:54
 hldfilesourcebase.cc:55
 hldfilesourcebase.cc:56
 hldfilesourcebase.cc:57
 hldfilesourcebase.cc:58
 hldfilesourcebase.cc:59
 hldfilesourcebase.cc:60
 hldfilesourcebase.cc:61
 hldfilesourcebase.cc:62
 hldfilesourcebase.cc:63
 hldfilesourcebase.cc:64
 hldfilesourcebase.cc:65
 hldfilesourcebase.cc:66
 hldfilesourcebase.cc:67
 hldfilesourcebase.cc:68
 hldfilesourcebase.cc:69
 hldfilesourcebase.cc:70
 hldfilesourcebase.cc:71
 hldfilesourcebase.cc:72
 hldfilesourcebase.cc:73
 hldfilesourcebase.cc:74
 hldfilesourcebase.cc:75
 hldfilesourcebase.cc:76
 hldfilesourcebase.cc:77
 hldfilesourcebase.cc:78
 hldfilesourcebase.cc:79
 hldfilesourcebase.cc:80
 hldfilesourcebase.cc:81
 hldfilesourcebase.cc:82
 hldfilesourcebase.cc:83
 hldfilesourcebase.cc:84
 hldfilesourcebase.cc:85
 hldfilesourcebase.cc:86
 hldfilesourcebase.cc:87
 hldfilesourcebase.cc:88
 hldfilesourcebase.cc:89
 hldfilesourcebase.cc:90
 hldfilesourcebase.cc:91
 hldfilesourcebase.cc:92
 hldfilesourcebase.cc:93
 hldfilesourcebase.cc:94
 hldfilesourcebase.cc:95
 hldfilesourcebase.cc:96
 hldfilesourcebase.cc:97
 hldfilesourcebase.cc:98
 hldfilesourcebase.cc:99
 hldfilesourcebase.cc:100
 hldfilesourcebase.cc:101
 hldfilesourcebase.cc:102
 hldfilesourcebase.cc:103
 hldfilesourcebase.cc:104
 hldfilesourcebase.cc:105
 hldfilesourcebase.cc:106
 hldfilesourcebase.cc:107
 hldfilesourcebase.cc:108
 hldfilesourcebase.cc:109
 hldfilesourcebase.cc:110
 hldfilesourcebase.cc:111
 hldfilesourcebase.cc:112
 hldfilesourcebase.cc:113
 hldfilesourcebase.cc:114
 hldfilesourcebase.cc:115
 hldfilesourcebase.cc:116
 hldfilesourcebase.cc:117
 hldfilesourcebase.cc:118
 hldfilesourcebase.cc:119
 hldfilesourcebase.cc:120
 hldfilesourcebase.cc:121
 hldfilesourcebase.cc:122
 hldfilesourcebase.cc:123
 hldfilesourcebase.cc:124
 hldfilesourcebase.cc:125
 hldfilesourcebase.cc:126
 hldfilesourcebase.cc:127
 hldfilesourcebase.cc:128
 hldfilesourcebase.cc:129
 hldfilesourcebase.cc:130
 hldfilesourcebase.cc:131
 hldfilesourcebase.cc:132
 hldfilesourcebase.cc:133
 hldfilesourcebase.cc:134
 hldfilesourcebase.cc:135
 hldfilesourcebase.cc:136
 hldfilesourcebase.cc:137
 hldfilesourcebase.cc:138
 hldfilesourcebase.cc:139
 hldfilesourcebase.cc:140
 hldfilesourcebase.cc:141
 hldfilesourcebase.cc:142
 hldfilesourcebase.cc:143
 hldfilesourcebase.cc:144
 hldfilesourcebase.cc:145
 hldfilesourcebase.cc:146
 hldfilesourcebase.cc:147
 hldfilesourcebase.cc:148
 hldfilesourcebase.cc:149
 hldfilesourcebase.cc:150
 hldfilesourcebase.cc:151
 hldfilesourcebase.cc:152
 hldfilesourcebase.cc:153
 hldfilesourcebase.cc:154
 hldfilesourcebase.cc:155
 hldfilesourcebase.cc:156
 hldfilesourcebase.cc:157
 hldfilesourcebase.cc:158
 hldfilesourcebase.cc:159
 hldfilesourcebase.cc:160
 hldfilesourcebase.cc:161
 hldfilesourcebase.cc:162
 hldfilesourcebase.cc:163
 hldfilesourcebase.cc:164
 hldfilesourcebase.cc:165