Back to index

PHRawOManager.C

 
//----------------------------------------------------------------------------- 
//  $Header: /afs/rhic/phenix/cvsroot/offline/framework/phool/PHRawOManager.C,v 1.7 2000/06/22 19:35:19 messer Exp $ 
// 
//  The PHOOL's Software 
//  Copyright (C) PHENIX collaboration, 1999 
// 
//  Implementation of class PHRawOManager 
// 
//  Author: Matthias Messer 
//----------------------------------------------------------------------------- 
#include "PHRawOManager.h"  
#include "PHCompositeNode.h" 
#include "PHRawDataNode.h" 
#include "ogzBuffer.h" 
#include "EventTypes.h" 
#include "packetConstants.h" 
 
PHRawOManager::PHRawOManager(const PHString & newFile, int run, int bufl, int evtl, int complvl)  
{ 
   if (!setFile(newFile, run, bufl, evtl, complvl)) { 
      filename         = "file open failed"; 
      file             = 0; 
      memBuffer        = 0; 
      fileBuffer       = 0; 
      compressionLevel = 0; 
   }       
} 
 
PHRawOManager::PHRawOManager() 
{ 
   file             = 0; 
   memBuffer        = 0; 
   fileBuffer       = 0; 
   compressionLevel = 0; 
} 
 
PHRawOManager::~PHRawOManager()  
{ 
   closeFile(); 
} 
 
void PHRawOManager::closeFile()  
{ 
   delete fileBuffer; 
   delete memBuffer; 
   fileBuffer = 0; 
   memBuffer = 0; 
   if (file) { 
      fclose(file); 
      file = 0; 
   } 
} 
 
PHBoolean PHRawOManager::setFile(const PHString & setFile, int setRun, int setBufl, int setEvtl, int complvl) 
{ 
   filename         = setFile; 
   runNumber        = setRun; 
   bufferSize       = setBufl; 
   compressionLevel = complvl; 
   if (setEvtl == -1) 
      eventLength = bufferSize / 4; 
   else 
      eventLength = setEvtl; 
 
   closeFile(); 
   file = fopen (filename.getString(), "w"); 
   if (!file) { 
      PHMessage("PHRawOManager::setFile", PHError, "could not open file"); 
      return False; 
   } 
   memBuffer  = new DWORD[bufferSize]; 
   if (compressionLevel == 0) { 
      fileBuffer = new oBuffer(file, memBuffer, bufferSize, runNumber); 
   } 
   else if (1 <= compressionLevel && compressionLevel <= 9) { 
      fileBuffer = new ogzBuffer(file, memBuffer, bufferSize, compressionLevel, runNumber); 
   } 
   else 
      PHMessage("PHRawOManager::setFile", PHWarning, "illegal compression level, no compression done"); 
       
   return True; 
} 
 
PHBoolean PHRawOManager::write(PHCompositeNode* topNode) 
{ 
   // 
   // The write function of the PHCompositeNode topNode will 
   // recursively call the write functions of its subnodes. 
   // The PHRawDataNodes among them call the write function found 
   // below.  
   // 
   if (file && fileBuffer) { 
      fileBuffer->nextEvent(eventLength, DATAEVENT); 
      topNode->write(this); 
      eventNumber++; 
      return True; 
   } 
   return False; 
} 
    
PHBoolean PHRawOManager::write(PHRawDataNode* node) 
{ 
   if(file && fileBuffer) { 
      int bytesAddedToBuffer = fileBuffer->addUnstructPacketData(node->getData(), node->getLength(), node->getID(), 
								 node->getWordLength(), node->getHitFormat()); 
      if (bytesAddedToBuffer <= 0) { 
	 PHMessage("PHRawOManager::write", PHError, "Zero bytes added to buffer"); 
	 return False; 
      } 
      return True; 
   } 
   return False; 
} 
    
void PHRawOManager::print() const 
{ 
   cout << "File attached : " << filename    << endl; 
   cout << "Buffer size   : " << bufferSize  << endl; 
   cout << "Event Length  : " << eventLength << endl; 
   cout << "Run number    : " << runNumber   << endl; 
   cout << "Events written: " << eventNumber << endl; 
} 

Back to index