CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FUShmRawCell.cc
Go to the documentation of this file.
1 //
3 // FUShmRawCell
4 // ------------
5 //
6 // 09/11/2006 Philipp Schieferdecker <philipp.schieferdecker@cern.ch>
8 
9 
11 
12 #include <iostream>
13 #include <iomanip>
14 #include <cstring>
15 
16 #define NSUPERFRAG_MAX 80
17 #define NFED_MAX 1024
18 
19 
20 using namespace std;
21 using namespace evf;
22 
23 
25 // construction/destruction
27 
28 //______________________________________________________________________________
29 FUShmRawCell::FUShmRawCell(unsigned int payloadSize)
30  : payloadSize_(payloadSize)
31  , nFed_(NFED_MAX)
32  , nSuperFrag_(NSUPERFRAG_MAX)
33 {
35  unsigned int* fedSizeAddr;
36  fedSizeAddr=(unsigned int*)((unsigned long)this+fedSizeOffset_);
37  new(fedSizeAddr) unsigned int[nFed_];
38 
39  fedOffset_=fedSizeOffset_+sizeof(unsigned int)*nFed_;
40  unsigned int* fedAddr;
41  fedAddr=(unsigned int*)((unsigned long)this+fedOffset_);
42  new(fedAddr) unsigned int[nFed_];
43 
44  superFragSizeOffset_=fedOffset_+sizeof(unsigned int)*nFed_;
45  unsigned int* superFragSizeAddr;
46  superFragSizeAddr=(unsigned int*)((unsigned long)this+superFragSizeOffset_);
47  new(superFragSizeAddr) unsigned int[nSuperFrag_];
48 
50  unsigned char* superFragAddr;
51  superFragAddr=(unsigned char*)((unsigned long)this+superFragOffset_);
52  new(superFragAddr) unsigned char[nSuperFrag_];
53 
54  payloadOffset_=superFragOffset_+sizeof(unsigned int)*nSuperFrag_;
55  unsigned char* payloadAddr;
56  payloadAddr=(unsigned char*)((unsigned long)this+payloadOffset_);
57  new(payloadAddr) unsigned char[payloadSize_];
58 }
59 
60 
61 //______________________________________________________________________________
63 {
64 
65 }
66 
67 
69 // implementation of member functions
71 
72 //______________________________________________________________________________
73 void FUShmRawCell::initialize(unsigned int index)
74 {
75  index_=index;
76  lumiSection_=0;
78 }
79 
80 
81 //______________________________________________________________________________
82 unsigned int FUShmRawCell::fedSize(unsigned int i) const
83 {
84  if (i>=nFed()) {cout<<"invalid fed index '"<<i<<"'."<<endl; return 0; }
85  unsigned int* fedSizeAddr;
86  fedSizeAddr=(unsigned int*)((unsigned long)this+fedSizeOffset_);
87  fedSizeAddr+=i;
88  unsigned int result=*fedSizeAddr;
89  return result;
90 }
91 
92 
93 //______________________________________________________________________________
94 unsigned char* FUShmRawCell::fedAddr(unsigned int i) const
95 {
96  if (i>=nFed()) {cout<<"invalid fed index '"<<i<<"'."<<endl; return 0; }
97  unsigned int* fedOffsetAddr;
98  fedOffsetAddr=(unsigned int*)((unsigned long)this+fedOffset_);
99  fedOffsetAddr+=i;
100  unsigned int fedOffset=*fedOffsetAddr;
101  unsigned char* result=(unsigned char*)((unsigned long)payloadAddr()+fedOffset);
102  return result;
103 }
104 
105 
106 //______________________________________________________________________________
107 unsigned int FUShmRawCell::superFragSize(unsigned int i) const
108 {
109  if (i>=nSuperFrag()) {cout<<"invalid sf index '"<<i<<"'."<<endl; return 0; }
110  unsigned int* superFragSizeAddr;
111  superFragSizeAddr=(unsigned int*)((unsigned long)this+superFragSizeOffset_);
112  superFragSizeAddr+=i;
113  unsigned int result=*superFragSizeAddr;
114  return result;
115 }
116 
117 
118 //______________________________________________________________________________
119 unsigned char* FUShmRawCell::superFragAddr(unsigned int i) const
120 {
121  if (i>=nSuperFrag()) {cout<<"invalid fed index '"<<i<<"'."<<endl; return 0; }
122  unsigned int* superFragOffsetAddr;
123  superFragOffsetAddr=(unsigned int*)((unsigned long)this+superFragOffset_);
124  superFragOffsetAddr+=i;
125  unsigned int superFragOffset=*superFragOffsetAddr;
126  unsigned char* result=(unsigned char*)((unsigned long)payloadAddr()+superFragOffset);
127  return result;
128 }
129 
130 
131 //______________________________________________________________________________
132 unsigned char* FUShmRawCell::payloadAddr() const
133 {
134  unsigned char* result=(unsigned char*)((unsigned long)this+payloadOffset_);
135  return result;
136 }
137 
138 
139 //______________________________________________________________________________
140 unsigned int FUShmRawCell::eventSize() const
141 {
142  return payloadPosition_;
143 }
144 
145 
146 //______________________________________________________________________________
148 {
149  fuResourceId_=0xffffffff;
150  buResourceId_=0xffffffff;
151  lumiSection_ =0;
153  unsigned int* fedSizeAddr;
154  fedSizeAddr=(unsigned int*)((unsigned long)this+fedSizeOffset_);
155  for (unsigned int i=0;i<nFed();i++) *fedSizeAddr++=0;
156 
157  unsigned int* superFragSizeAddr;
158  superFragSizeAddr=(unsigned int*)((unsigned long)this+superFragSizeOffset_);
159  for (unsigned int i=0;i<nSuperFrag();i++) *superFragSizeAddr++=0;
160 
162 }
163 
164 
165 //______________________________________________________________________________
166 void FUShmRawCell::dump() const
167 {
168  for (unsigned int i=0;i<nFed();i++) {
169  cout<<"fed "<<i<<": "<<flush;
170  unsigned char* addr=fedAddr(i);
171  unsigned int size=fedSize(i);
172  cout.fill(0);
173  cout<<setiosflags(ios::right);
174  for (unsigned int j=0;j<size;j++)
175  cout<<setw(2)<<hex<<(int)addr[j]<<dec<<" "<<flush;
176  cout<<endl;
177  }
178 }
179 
180 
181 //______________________________________________________________________________
182 unsigned int FUShmRawCell::readFed(unsigned int i,
183  unsigned char* buffer) const
184 {
185  unsigned int size=fedSize(i);
186  unsigned char* addr=fedAddr(i);
187  memcpy(buffer,addr,size);
188  return size;
189 }
190 
191 
192 //______________________________________________________________________________
193 unsigned char* FUShmRawCell::writeData(unsigned char* data,
194  unsigned int dataSize)
195 {
196  if (payloadPosition_+dataSize>payloadSize_) {
197  cout<<"FUShmRawCell::writeData: data to be written does not fit!"<<endl;
198  return 0;
199  }
200 
201  // result = addr of data to be written *in* the cell
202  unsigned char* result=
203  (unsigned char*)((unsigned long)this+payloadOffset_+payloadPosition_);
204  memcpy(result,data,dataSize);
205  payloadPosition_+=dataSize;
206  return result;
207 }
208 
209 //______________________________________________________________________________
211 {
213 }
214 //______________________________________________________________________________
215 bool FUShmRawCell::markFed(unsigned int i,
216  unsigned int size,
217  unsigned char* addr)
218 {
219  if (i>=nFed())
220  {cout<<"invalid fed index '"<<i<<"'."<<endl; return false; }
221  if (addr<payloadAddr())
222  { cout<<"invalid fed addr '0x"<<hex<<(unsigned long)addr<<dec<<"'."<<endl; return false; }
223 
224  unsigned long offset=(unsigned long)addr-(unsigned long)payloadAddr();
225 
226  if (offset>=payloadSize())
227  { cout<<"invalid fed addr '0x"<<hex<<(unsigned long)addr<<dec<<"'."<<endl; return false; }
228 
229  unsigned int* fedSizeAddr;
230  fedSizeAddr=(unsigned int*)((unsigned long)this+fedSizeOffset_);
231  fedSizeAddr+=i;
232  *fedSizeAddr=size;
233 
234  unsigned int* fedAddr;
235  fedAddr=(unsigned int*)((unsigned long)this+fedOffset_);
236  fedAddr+=i;
237  *fedAddr=offset;
238 
239  return true;
240 }
241 
242 
243 //______________________________________________________________________________
244 bool FUShmRawCell::markSuperFrag(unsigned int i,
245  unsigned int size,
246  unsigned char* addr)
247 {
248  if (i>=nSuperFrag())
249  {cout<<"invalid sf index '"<<i<<"'."<<endl; return false; }
250  if (addr<payloadAddr())
251  {cout<<"invalid sf addr '0x"<<hex<<(unsigned long)addr<<dec<<"'."<<endl;return false;}
252 
253  unsigned int offset=(unsigned long)addr-(unsigned long)payloadAddr();
254 
255  if (offset>=payloadSize())
256  {cout<<"invalid sf addr '0x"<<hex<<(unsigned long)addr<<dec<<"'."<<endl;return false;}
257 
258  unsigned int* superFragSizeAddr;
259  superFragSizeAddr=(unsigned int*)((unsigned long)this+superFragSizeOffset_);
260  superFragSizeAddr+=i;
261  *superFragSizeAddr=size;
262 
263  unsigned int* superFragAddr;
264  superFragAddr=(unsigned int*)((unsigned long)this+superFragOffset_);
265  superFragAddr+=i;
266  *superFragAddr=offset;
267 
268  return true;
269 }
270 
271 
272 //______________________________________________________________________________
273 unsigned int FUShmRawCell::size(unsigned int payloadSize)
274 {
275  return
276  sizeof(FUShmRawCell)+
277  sizeof(unsigned int)*2*(NFED_MAX+NSUPERFRAG_MAX)+
278  sizeof(unsigned char)*payloadSize;
279 }
#define NFED_MAX
Definition: FUShmRawCell.cc:17
int i
Definition: DBlmapReader.cc:9
unsigned int payloadPosition_
Definition: FUShmRawCell.h:95
unsigned int superFragOffset_
Definition: FUShmRawCell.h:93
unsigned char * writeData(unsigned char *data, unsigned int dataSize)
bool markFed(unsigned int i, unsigned int size, unsigned char *addr)
unsigned int eventType_
Definition: FUShmRawCell.h:89
unsigned int nSuperFrag_
Definition: FUShmRawCell.h:87
void dump() const
static unsigned int size(unsigned int payloadSize)
void initialize(unsigned int index)
Definition: FUShmRawCell.cc:73
unsigned char * payloadAddr() const
tuple result
Definition: query.py:137
unsigned char * superFragAddr(unsigned int i) const
int j
Definition: DBlmapReader.cc:9
unsigned int payloadOffset_
Definition: FUShmRawCell.h:94
bool markSuperFrag(unsigned int i, unsigned int size, unsigned char *addr)
unsigned int offset(bool)
unsigned char * fedAddr(unsigned int i) const
Definition: FUShmRawCell.cc:94
unsigned int fedOffset_
Definition: FUShmRawCell.h:91
unsigned int payloadSize() const
Definition: FUShmRawCell.h:30
unsigned int readFed(unsigned int i, unsigned char *buffer) const
unsigned int fuResourceId_
Definition: FUShmRawCell.h:82
unsigned int lumiSection_
Definition: FUShmRawCell.h:88
unsigned int index_
Definition: FUShmRawCell.h:81
unsigned int payloadSize_
Definition: FUShmRawCell.h:85
unsigned int eventSize() const
unsigned int superFragSize(unsigned int i) const
unsigned int superFragSizeOffset_
Definition: FUShmRawCell.h:92
unsigned int fedSizeOffset_
Definition: FUShmRawCell.h:90
unsigned int buResourceId_
Definition: FUShmRawCell.h:83
unsigned int index() const
Definition: FUShmRawCell.h:25
void setLumiSection(unsigned int)
unsigned int nFed() const
Definition: FUShmRawCell.h:33
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
unsigned int nSuperFrag() const
Definition: FUShmRawCell.h:37
tuple cout
Definition: gather_cfg.py:121
unsigned int fedSize(unsigned int i) const
Definition: FUShmRawCell.cc:82
FUShmRawCell(unsigned int payloadSize)
Definition: FUShmRawCell.cc:29
tuple size
Write out results.
#define NSUPERFRAG_MAX
Definition: FUShmRawCell.cc:16
unsigned int nFed_
Definition: FUShmRawCell.h:86