ROOT logo
//_HADES_CLASS_DESCRIPTION
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//HLdStackSource
//
//  This is a particular kind of "data source"  (see HDataSource) which takes
//  the event's data directly from a stack.
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "hldstacksource.h"
#include "hrecevent.h"
#include "hruntimedb.h"
#include "hldstackevt.h"
#include "hldsubevt.h"
#include "hldunpack.h"
#include "TDatime.h"
#include "Riostream.h"

ClassImp(HldStackSource)


HldStackSource::HldStackSource(): HldSource()
{
   // test Server IO

   fReadEvent = new HldStackEvt();

   event_already_read = false;

   iter     = 0;
   iter     = fUnpackerList->MakeIterator();
   isDumped = kFALSE;
   refId    = -1;
   runId    = -1;
   fileName = "no_yet_set";
   fDummyMode = kFALSE;
}


HldStackSource::~HldStackSource(void) {
   //Destructor for a remote data source
   if (fUnpackerList) fUnpackerList->Delete();
   fUnpackerList = 0;
   if (fReadEvent) delete fReadEvent;
   fReadEvent    = 0;
   if(iter) delete iter;
   iter = 0;
}

void   HldStackSource::setEvent(HRecEvent* ev)
{
    if(ev){
	runId = ev->getHeader()->getEventRunNumber();
    }
}

Bool_t HldStackSource::init(void) {
   //Calls the init() function for each unpacker.

   if(fDummyMode) return kTRUE;

   if (fEventAddr == 0) {
      printf("HARD ERROR %p\n", fEventAddr);
      exit(7);
   }

   printf("HldStackSource::init %p %p\n", fEventAddr, *fEventAddr);

   if (!(*fEventAddr)) {
      (*fEventAddr) = new HRecEvent;
   }
   if(isDumped || isScanned) return kTRUE;
   iter = fUnpackerList->MakeIterator();
   if (initUnpacker() == kFALSE) {
      printf(" problem init unpacker \n");
      return kFALSE;
   }
   HldUnpack* unpacker;
   while ( (unpacker = (HldUnpack *)iter->Next()) != NULL) {
      fReadEvent->appendSubEvtIdx(*unpacker);
   }
   return kTRUE;
}


Int_t HldStackSource::getCurrentRunId(void)
{
   if (!fDummyMode&&runId == -1) {
      if (fReadEvent == 0) {
         printf("HARD ERROR\n");
         exit(1);
      }
      fReadEvent->execute();
      runId = fReadEvent->getRunNr();
      event_already_read = true;
   }

   return runId;
}


EDsState HldStackSource::getNextEvent(Bool_t doUnpack) {

   if(fDummyMode) {
        fLastEventStatus = kDsOk;
	return kDsOk;
   }
   // test Server IO
   if(isDumped)  return dumpEvt();

   if(isScanned) return scanEvt();

   // printf("HldStackSource::getNextEvent %p %p\n", fEventAddr, fEventAddr ? *fEventAddr : 0);

   if ((fEventAddr == 0) || (*fEventAddr == 0)) {
      printf("HldStackSource::getNextEvent(): HARD ERROR %p %p\n", fEventAddr, fEventAddr ? *fEventAddr : 0);
      exit(7);
   }

   if (!fReadEvent) {
       printf("HldStackSource::getNextEvent(): No ReadEvent!\n");
       fLastEventStatus = kDsError;
       return kDsError;
   }

   if (!event_already_read) {
       //printf("HldStackSource::getNextEvent(): execute\n");
       fReadEvent->execute();
       runId = fReadEvent->getRunNr();
   }
   event_already_read = false;

   if (doUnpack) {
      decodeHeader((*fEventAddr)->getHeader());

      Int_t newId = (*fEventAddr)->getHeader()->getEventRunNumber();
      if(runId < 0 || newId != runId ){
         runId = newId;
         TDatime time;
         fileName = Form("%s_%i.hld",time.AsString(),runId);
         fileName.ReplaceAll(" ","_");
      }

      iter->Reset();
      HldUnpack *unpacker;

      while ( (unpacker = (HldUnpack *)iter->Next()) != NULL) {
	  Int_t ret = unpacker->execute();
	  if(!ret){
	      printf("HldStackSource::getNextEvent(): unpacker %s return %i \n",unpacker->GetName(),ret );
	      fLastEventStatus = kDsError;
	      return kDsError;
	  }
	  if(ret == kDsSkip) {
	      fLastEventStatus = kDsSkip;
	      return kDsSkip;
	  }
      }
   }

   fLastEventStatus = kDsOk;
   return kDsOk;
}

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