ROOT logo
//*-- AUTHOR : Manuel Sanchez
//*-- Modified : 13/19/1999 by Ilse Koenig

//_HADES_CLASS_DESCRIPTION 
///////////////////////////////////////////////////////////////////////////////
//
//  HRunAnalizer
//
//  Reconstructor to analyze the event header and to retrieve the information
//  stored in the Oracle database table hades_oper.runs:
//       hld file name
//       run id
//       run start (date and time of first event)
//       run stop (date and time of last event, must not be a stop event)
//       total number of events in the file
//       number of calibration events
//  The information is written to an Ascii file (default name: "run_info.txt").
//
///////////////////////////////////////////////////////////////////////////////

#include "hrunanalizer.h"
#include "hevent.h"
#include "heventheader.h"
#include "hades.h"
#include "hruntimedb.h"
#include <unistd.h>

ClassImp(HRunAnalizer)

HRunAnalizer::HRunAnalizer(Text_t *name,Text_t *title,Text_t *fileName)
  : HReconstructor(name,title) {
  // constructor
  // default name of output file: run_info.txt
  Char_t defaultFileName[]="run_info.txt";
  fEventHeader=0;
  fFirstRun=kTRUE;
  fTotEvents=0;
  fCalEvents=0;
  if (!fileName) fileName=defaultFileName;
  if (access(fileName,F_OK)==0) { //If file exists
    fOut=fopen(fileName,"a"); 
  } else {
    fOut=fopen(fileName,"w"); 
    writeHeader();
  }
}
/*
// old code ... mase copy constructor private
 HRunAnalizer::HRunAnalizer(HRunAnalizer &analizer) {
  // copy constructor (not implemented!)
  Error("HRunAnalizer","Copy constructor not defined");
}
*/
HRunAnalizer::~HRunAnalizer(void) {
  // destructor
  fclose(fOut);
}

Int_t HRunAnalizer::execute(void) {
  // reads the start event -> run id, run start
  // extracts the date and time of the last event, the total number of
  // events and the number of calibration events in the file
  UInt_t fId=fEventHeader->getId();
  if (fId==65538) { // start event
    extractStartInfo();
    fFirstEvent=kFALSE;
  } else {
    fRunStopTime=fEventHeader->getTime();
    fRunStopDate=fEventHeader->getDate();
    if (fId!=65539) fTotEvents++;  //no increment for stop event
    if (fId==4) fCalEvents++;
  }
  return 0;
}

Bool_t HRunAnalizer::init(void) {
  fEventHeader=gHades->getCurrentEvent()->getHeader();
  fFirstRun=kTRUE;
  fTotEvents=0;
  fCalEvents=0;
  return kTRUE;
}

Bool_t HRunAnalizer::reinit(void) {
  if (fFirstRun)
    fFirstRun=kFALSE;
  else
    writeInfo(); // Write info of previous file.
  fTotEvents=0;
  fCalEvents=0;
  fFirstEvent=kTRUE;
  return kTRUE;
}

Bool_t HRunAnalizer::finalize(void) {
  if (!fFirstRun) writeInfo();
  return kTRUE;
}

void HRunAnalizer::extractStartInfo(void) {
  fRunStartTime=fEventHeader->getTime();
  fRunStartDate=fEventHeader->getDate();
  fRunId=fEventHeader->getEventRunNumber();
  fFileName=gHades->getRuntimeDb()->getCurrentFileName();
}

void HRunAnalizer::writeHeader(void) {
  fprintf(fOut,"########################################################\n");
  //  fprintf(fOut,"#Run Id\t\tRun Start Time\tNr Events\tFile name\n");
  fprintf(fOut,"#Run Id   File name   Total nr of events   Nr of cal events\n");
  fprintf(fOut,"#    Run Start  Run Stop Time\n");
  fprintf(fOut,"########################################################\n");
}

void HRunAnalizer::writeInfo(void) {
  UInt_t db=fRunStartDate;
  UInt_t tb=fRunStartTime;
  UInt_t de=fRunStopDate;
  UInt_t te=fRunStopTime;
  fprintf(fOut,"%u  %s  %i  %i\n",fRunId,fFileName.Data(),fTotEvents,fCalEvents);
  fprintf(fOut,"    %02i-%02i-%4i::%02i:%02i:%02i  %02i-%02i-%4i::%02i:%02i:%02i\n", 
         (db & 0xFF),1+( (db>>8) & 0xFF),1900+((db>>16) & 0xFF),
         ((tb>>16) & 0xFF),( (tb>>8) & 0xFF),( tb & 0xFF),
         (de & 0xFF),1+( (de>>8) & 0xFF),1900+((de>>16) & 0xFF),
	 ((te>>16) & 0xFF),( (te>>8) & 0xFF),( te & 0xFF));
}

 hrunanalizer.cc:1
 hrunanalizer.cc:2
 hrunanalizer.cc:3
 hrunanalizer.cc:4
 hrunanalizer.cc:5
 hrunanalizer.cc:6
 hrunanalizer.cc:7
 hrunanalizer.cc:8
 hrunanalizer.cc:9
 hrunanalizer.cc:10
 hrunanalizer.cc:11
 hrunanalizer.cc:12
 hrunanalizer.cc:13
 hrunanalizer.cc:14
 hrunanalizer.cc:15
 hrunanalizer.cc:16
 hrunanalizer.cc:17
 hrunanalizer.cc:18
 hrunanalizer.cc:19
 hrunanalizer.cc:20
 hrunanalizer.cc:21
 hrunanalizer.cc:22
 hrunanalizer.cc:23
 hrunanalizer.cc:24
 hrunanalizer.cc:25
 hrunanalizer.cc:26
 hrunanalizer.cc:27
 hrunanalizer.cc:28
 hrunanalizer.cc:29
 hrunanalizer.cc:30
 hrunanalizer.cc:31
 hrunanalizer.cc:32
 hrunanalizer.cc:33
 hrunanalizer.cc:34
 hrunanalizer.cc:35
 hrunanalizer.cc:36
 hrunanalizer.cc:37
 hrunanalizer.cc:38
 hrunanalizer.cc:39
 hrunanalizer.cc:40
 hrunanalizer.cc:41
 hrunanalizer.cc:42
 hrunanalizer.cc:43
 hrunanalizer.cc:44
 hrunanalizer.cc:45
 hrunanalizer.cc:46
 hrunanalizer.cc:47
 hrunanalizer.cc:48
 hrunanalizer.cc:49
 hrunanalizer.cc:50
 hrunanalizer.cc:51
 hrunanalizer.cc:52
 hrunanalizer.cc:53
 hrunanalizer.cc:54
 hrunanalizer.cc:55
 hrunanalizer.cc:56
 hrunanalizer.cc:57
 hrunanalizer.cc:58
 hrunanalizer.cc:59
 hrunanalizer.cc:60
 hrunanalizer.cc:61
 hrunanalizer.cc:62
 hrunanalizer.cc:63
 hrunanalizer.cc:64
 hrunanalizer.cc:65
 hrunanalizer.cc:66
 hrunanalizer.cc:67
 hrunanalizer.cc:68
 hrunanalizer.cc:69
 hrunanalizer.cc:70
 hrunanalizer.cc:71
 hrunanalizer.cc:72
 hrunanalizer.cc:73
 hrunanalizer.cc:74
 hrunanalizer.cc:75
 hrunanalizer.cc:76
 hrunanalizer.cc:77
 hrunanalizer.cc:78
 hrunanalizer.cc:79
 hrunanalizer.cc:80
 hrunanalizer.cc:81
 hrunanalizer.cc:82
 hrunanalizer.cc:83
 hrunanalizer.cc:84
 hrunanalizer.cc:85
 hrunanalizer.cc:86
 hrunanalizer.cc:87
 hrunanalizer.cc:88
 hrunanalizer.cc:89
 hrunanalizer.cc:90
 hrunanalizer.cc:91
 hrunanalizer.cc:92
 hrunanalizer.cc:93
 hrunanalizer.cc:94
 hrunanalizer.cc:95
 hrunanalizer.cc:96
 hrunanalizer.cc:97
 hrunanalizer.cc:98
 hrunanalizer.cc:99
 hrunanalizer.cc:100
 hrunanalizer.cc:101
 hrunanalizer.cc:102
 hrunanalizer.cc:103
 hrunanalizer.cc:104
 hrunanalizer.cc:105
 hrunanalizer.cc:106
 hrunanalizer.cc:107
 hrunanalizer.cc:108
 hrunanalizer.cc:109
 hrunanalizer.cc:110
 hrunanalizer.cc:111
 hrunanalizer.cc:112
 hrunanalizer.cc:113
 hrunanalizer.cc:114
 hrunanalizer.cc:115
 hrunanalizer.cc:116
 hrunanalizer.cc:117
 hrunanalizer.cc:118
 hrunanalizer.cc:119
 hrunanalizer.cc:120
 hrunanalizer.cc:121
 hrunanalizer.cc:122
 hrunanalizer.cc:123
 hrunanalizer.cc:124
 hrunanalizer.cc:125
 hrunanalizer.cc:126
 hrunanalizer.cc:127