CMS 3D CMS Logo

PlaybackRawDataProvider.h

Go to the documentation of this file.
00001 #ifndef PLAYBACKRAWDATAPROVIDER_H
00002 #define PLAYBACKRAWDATAPROVIDER_H 1
00003 
00004 #include "FWCore/Framework/interface/EDAnalyzer.h"
00005 #include "FWCore/Framework/interface/Event.h"
00006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00007 
00008 #include <memory>
00009 #include <semaphore.h>
00010 
00011 class FEDRawDataCollection;
00012 
00013 class PlaybackRawDataProvider : public edm::EDAnalyzer
00014 {
00015 public:
00016   //
00017   // construction/destruction
00018   //
00019   explicit PlaybackRawDataProvider(const edm::ParameterSet&);
00020   virtual ~PlaybackRawDataProvider();
00021   
00022   // EDAnalyzer interface
00023   virtual void beginJob(const edm::EventSetup&);
00024   virtual void analyze(const edm::Event&, const edm::EventSetup&);
00025   virtual void endJob();
00026 
00027   // provide cached fed collection (and run/evt number, if needed!)
00028   virtual FEDRawDataCollection* getFEDRawData();
00029   virtual FEDRawDataCollection* getFEDRawData(unsigned int& runNumber,
00030                                               unsigned int& evtNumber);
00031   void setFreeToEof();
00032   
00033   static PlaybackRawDataProvider* instance();
00034   
00035   
00036 private:
00037 
00038   static PlaybackRawDataProvider* instance_;
00039     //
00040   // private member functions
00041   //
00042   void lock()         { sem_wait(&lock_); }
00043   void unlock()       { sem_post(&lock_); }
00044   void waitWriteSem() { sem_wait(&writeSem_); }
00045   void postWriteSem() { sem_post(&writeSem_); }
00046   void waitReadSem()  { sem_wait(&readSem_);}
00047   void postReadSem()  { sem_post(&readSem_); }
00048 
00049 
00050   void sem_print();
00051   
00052   
00053 private:
00054   //
00055   // member data
00056   //
00057   unsigned int           queueSize_;
00058   FEDRawDataCollection **eventQueue_;
00059   unsigned int          *runNumber_;
00060   unsigned int          *evtNumber_;
00061   unsigned int           count_;
00062   
00063   sem_t                  lock_;
00064   sem_t                  writeSem_;
00065   sem_t                  readSem_;
00066   unsigned int           writeIndex_;
00067   unsigned int           readIndex_;
00068   bool                   freeToEof_;
00069 };
00070 
00071 
00072 //
00073 // implementation of inline functions
00074 //
00075 
00076 //______________________________________________________________________________
00077 inline
00078 PlaybackRawDataProvider* PlaybackRawDataProvider::instance()
00079 {
00080   return instance_;
00081 }
00082 
00083 
00084 #endif

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