CMS 3D CMS Logo

EventOutputService.cc

Go to the documentation of this file.
00001 // $Id: EventOutputService.cc,v 1.3 2008/10/24 17:41:55 loizides Exp $
00002 
00003 #include <EventFilter/StorageManager/interface/EventOutputService.h>
00004 #include <IOPool/Streamer/interface/EventMessage.h>
00005 
00006 #include <iostream>
00007  
00008 using namespace edm;
00009 using namespace std;
00010 using boost::shared_ptr;
00011 
00012 
00013 //
00014 // *** EventOutputService
00015 //
00016 EventOutputService::EventOutputService(boost::shared_ptr<FileRecord> file, 
00017                                        InitMsgView const& view)
00018 {
00019   file_ = file;
00020 
00021   string streamerFileName = file_ -> filePath() + file_ -> fileName() + file_ -> fileCounterStr() + ".dat";
00022   string indexFileName    = file_ -> filePath() + file_ -> fileName() + file_ -> fileCounterStr() + ".ind";
00023 
00024   writer_ = shared_ptr<StreamerFileWriter> (new StreamerFileWriter(streamerFileName, indexFileName));
00025   writeHeader(view);
00026 
00027   file_ -> firstEntry(getTimeStamp());
00028   file_ -> insertFileInDatabase();
00029 }
00030 
00031 
00032 //
00033 // *** call close file
00034 //
00035 EventOutputService::~EventOutputService()
00036 {
00037   //std::cout << "EventOutputService Destructor called." << std::endl;
00038   closeFile();
00039 }
00040 
00041 
00042 // 
00043 // *** write file header
00044 // *** write increase file size by file header size
00045 //
00046 void EventOutputService::writeHeader(InitMsgView const& view)
00047 {
00048   writer_ -> doOutputHeader(view);
00049   file_   -> increaseFileSize(view.size());
00050 }
00051 
00052 
00053 //
00054 // *** write event to file
00055 // *** increase the file size
00056 // *** update time of last entry 
00057 // *** increase event count
00058 //
00059 void EventOutputService::writeEvent(const uint8 * const bufPtr)
00060 {
00061   EventMsgView view((void *) bufPtr);
00062   writer_ -> doOutputEvent(view);
00063   file_   -> increaseFileSize(view.size());
00064   file_   -> lastEntry(getTimeStamp());
00065   file_   -> increaseEventCount();
00066 }
00067 
00068 
00069 // 
00070 // *** stop file write
00071 // *** add end of file record size to file size
00072 // *** move file to "closed" directory
00073 // *** write to summary catalog
00074 // *** write to mail box
00075 //
00076 void EventOutputService::closeFile()
00077 {
00078   writer_ -> stop();
00079   file_   -> increaseFileSize(writer_->getStreamEOFSize());
00080   file_   -> setadler(writer_->get_adler32_stream(),writer_->get_adler32_index());
00081   file_   -> moveFileToClosed();
00082   file_   -> writeToSummaryCatalog();
00083   file_   -> updateDatabase();
00084 }
00085 
00086 
00087 //
00088 // *** report status of OutputService
00089 //
00090 void EventOutputService::report(ostream &os, int indentation) const
00091 {
00092   string prefix(indentation, ' ');
00093   os << prefix << "------------- EventOutputService -------------\n";
00094   file_ -> report(os,indentation);
00095   double time = (double) file_ -> lastEntry() - (double) file_ -> firstEntry();
00096   double rate = (time>0) ? (double) file_ -> events() / (double) time : 0.; 
00097   double tput = (time>0) ? (double) file_ -> fileSize() / ((double) time * 1048576.) : 0.; 
00098   os << prefix << "rate                " << rate            << " evts/s\n";
00099   os << prefix << "throughput          " << tput            << " MB/s\n";
00100   os << prefix << "time                " << time            << " s\n";
00101   os << prefix << "-----------------------------------------\n";  
00102 }

Generated on Tue Jun 9 17:34:56 2009 for CMSSW by  doxygen 1.5.4