CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PlaybackRawDataProvider.cc
Go to the documentation of this file.
1 //
3 // PlaybackRawDataProvider
4 // -----------------------
5 //
6 // 21/09/2006 Philipp Schieferdecker <philipp.schieferdecker@cern.ch>
8 
9 
14 #include <cstring>
15 
16 using namespace std;
17 using namespace edm;
18 
20 // initialize static data members
22 
24 
25 
27 // construction/destruction
29 
30 //______________________________________________________________________________
32  : queueSize_(0)
33  , eventQueue_(0)
34  , runNumber_(0)
35  , evtNumber_(0)
36  , count_(0)
37  , writeIndex_(0)
38  , readIndex_(0)
39  , freeToEof_(false)
40 {
41  queueSize_=iConfig.getUntrackedParameter<unsigned int>("queueSize",32);
42  sem_init(&lock_,0,1);
43  sem_init(&writeSem_,0,queueSize_);
44  sem_init(&readSem_,0,0);
45  runNumber_ =new unsigned int[queueSize_];
46  evtNumber_ =new unsigned int[queueSize_];
48  for (unsigned int i=0;i<queueSize_;i++) eventQueue_[i]=0;
49  edm::LogInfo("PbImpl") << "Created Concrete RawData Provider 0x"<< hex << (unsigned long) this << dec << endl;
50  instance_=this;
51 }
52 
53 
54 //______________________________________________________________________________
56 {
57  if (0!=runNumber_) delete [] runNumber_;
58  if (0!=evtNumber_) delete [] evtNumber_;
59  if (0!=eventQueue_) {
60  for (unsigned int i=0;i<queueSize_;i++)
61  if (0!=eventQueue_[i]) delete eventQueue_[i];
62  delete [] eventQueue_;
63  }
64  edm::LogInfo("PbImpl") << "Destroyed Concrete RawData Provider 0x"<< hex << (unsigned long) this << dec << endl;
65  instance_=0;
66 }
67 
68 
70 // implementation of member functions
72 
73 //______________________________________________________________________________
75  const EventSetup& iSetup)
76 {
77  if(freeToEof_) return;
78  waitWriteSem();
79  if(freeToEof_) return;
80  runNumber_[writeIndex_]=iEvent.id().run();
81  evtNumber_[writeIndex_]=iEvent.id().event();
82 
84  iEvent.getByType(pRawData);
85 
86  if (!pRawData.isValid()) {
87  edm::LogError("InvalidHandle")<<"no raw data found!"<<endl;
88  return;
89  }
90 
91 
92  // copy the raw data collection into rawData_, retrievable via getFEDRawData()
93  assert(0==eventQueue_[writeIndex_]);
95  for (unsigned int i=0;i<(unsigned int)FEDNumbering::MAXFEDID+1;i++) {
96  unsigned int fedSize=pRawData->FEDData(i).size();
97  if (fedSize>0) {
99  fedData.resize(fedSize);
100  memcpy(fedData.data(),pRawData->FEDData(i).data(),fedSize);
101  }
102  }
103 
104  lock();
105  writeIndex_=(writeIndex_+1)%queueSize_;
106  count_++;
107  unlock();
108 
109  postReadSem();
110 
111  return;
112 }
113 
114 
115 //______________________________________________________________________________
117 {
118 
119 }
120 
121 
122 //______________________________________________________________________________
124 {
125  edm::LogInfo("Summary")<<count_<<" events read."<<endl;
126 }
127 
128 
129 //______________________________________________________________________________
131 {
133  waitReadSem();
134  lock();
135  result = eventQueue_[readIndex_];
138  unlock();
139 
140  postWriteSem();
141  return result;
142 }
143 
144 
145 //______________________________________________________________________________
147  unsigned int& evtNumber)
148 {
149 
151  waitReadSem();
152  lock();
153  runNumber=runNumber_[readIndex_];
154  evtNumber=evtNumber_[readIndex_];
155  result=eventQueue_[readIndex_];
156  // assert(0!=result);
159 
160  unlock();
161 
162  postWriteSem();
163  return result;
164 }
165 
166 
167 //______________________________________________________________________________
169 {
170  lock();
171  int wsem,rsem;
172  sem_getvalue(&writeSem_,&wsem);
173  sem_getvalue(&readSem_,&rsem);
174  cout<<"sem_print():"
175  <<" wsem="<<wsem
176  <<" rsem="<<rsem
177  <<" writeIndex="<<writeIndex_
178  <<" readIndex="<<readIndex_
179  <<endl;
180  unlock();
181 }
182 
184 {
185  // cout << " PlaybackRawDataProvider::setFreeToEof()" << endl;
186  freeToEof_ = true;
187  // cout << " PlaybackRawDataProvider::setFreeToEof() call postReadSem" << endl;
188  postWriteSem();
189 }
191 // framework module implementation macro
193 
RunNumber_t run() const
Definition: EventID.h:42
static const char runNumber_[]
FEDRawDataCollection ** eventQueue_
EventNumber_t event() const
Definition: EventID.h:44
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
PlaybackRawDataProvider(const edm::ParameterSet &)
virtual FEDRawDataCollection * getFEDRawData()
bool getByType(Handle< PROD > &result) const
Definition: Event.h:403
int iEvent
Definition: GenABIO.cc:243
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
static PlaybackRawDataProvider * instance_
void resize(size_t newsize)
Definition: FEDRawData.cc:33
tuple result
Definition: query.py:137
bool isValid() const
Definition: HandleBase.h:76
virtual void analyze(const edm::Event &, const edm::EventSetup &)
edm::EventID id() const
Definition: EventBase.h:56
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:29
tuple cout
Definition: gather_cfg.py:41