Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00008
00009
00010 #include "EventFilter/ShmBuffer/interface/FUShmRecoCell.h"
00011
00012 #include <iostream>
00013 #include <iomanip>
00014 #include <cstring>
00015
00016 using namespace std;
00017 using namespace evf;
00018
00019
00021
00023
00024
00025 FUShmRecoCell::FUShmRecoCell(unsigned int payloadSize)
00026 : payloadSize_(payloadSize)
00027 {
00028 payloadOffset_=sizeof(FUShmRecoCell);
00029 void* payloadAddr=(void*)((unsigned long)this+payloadOffset_);
00030 new (payloadAddr) unsigned char[payloadSize_];
00031 }
00032
00033
00034
00035 FUShmRecoCell::~FUShmRecoCell()
00036 {
00037
00038 }
00039
00040
00042
00044
00045
00046 void FUShmRecoCell::initialize(unsigned int index)
00047 {
00048 index_=index;
00049 clear();
00050 }
00051
00052
00053
00054 unsigned char* FUShmRecoCell::payloadAddr() const
00055 {
00056 unsigned char* result=(unsigned char*)((unsigned long)this+payloadOffset_);
00057 return result;
00058 }
00059
00060
00061
00062 void FUShmRecoCell::clear()
00063 {
00064 eventSize_=0;
00065 rawCellIndex_=0xffffffff;
00066 }
00067
00068
00069
00070 void FUShmRecoCell::writeInitMsg(unsigned int outModId,
00071 unsigned int fuProcessId,
00072 unsigned int fuGuid,
00073 unsigned char *data,
00074 unsigned int dataSize,
00075 unsigned int nExpectedEPs)
00076 {
00077 if (eventSize_!=0)
00078 cout<<"FUShmRecoCell::writeInitMsg() WARNING: overwriting data!"<<endl;
00079
00080 if (dataSize>payloadSize_) {
00081 cout<<"FUShmRecoCell::writeInitMsg() ERROR: data does not fit!"<<endl;
00082 return;
00083 }
00084
00085 rawCellIndex_=0xffffffff;
00086 runNumber_ =0xffffffff;
00087 evtNumber_ =0xffffffff;
00088 outModId_ =outModId;
00089 fuProcessId_ =fuProcessId;
00090 fuGuid_ =fuGuid;
00091 type_ =0;
00092 unsigned char* targetAddr=payloadAddr();
00093 memcpy(targetAddr,data,dataSize);
00094 eventSize_=dataSize;
00095 nExpectedEPs_=nExpectedEPs;
00096 }
00097
00098
00099
00100 void FUShmRecoCell::writeEventData(unsigned int rawCellIndex,
00101 unsigned int runNumber,
00102 unsigned int evtNumber,
00103 unsigned int outModId,
00104 unsigned int fuProcessId,
00105 unsigned int fuGuid,
00106 unsigned char *data,
00107 unsigned int dataSize)
00108 {
00109 if (eventSize_!=0)
00110 cout<<"FUShmRecoCell::writeEventData() WARNING: overwriting data!"<<endl;
00111
00112 if (dataSize>payloadSize_) {
00113 cout<<"FUShmRecoCell::writeEventData() ERROR: data does not fit!"<<endl;
00114 return;
00115 }
00116
00117 rawCellIndex_=rawCellIndex;
00118 runNumber_ =runNumber;
00119 evtNumber_ =evtNumber;
00120 outModId_ =outModId;
00121 fuProcessId_ =fuProcessId;
00122 fuGuid_ =fuGuid;
00123 type_ =1;
00124 unsigned char* targetAddr=payloadAddr();
00125 memcpy(targetAddr,data,dataSize);
00126 eventSize_=dataSize;
00127 nExpectedEPs_=0xffffffff;
00128 }
00129
00130
00131
00132 void FUShmRecoCell::writeErrorEvent(unsigned int rawCellIndex,
00133 unsigned int runNumber,
00134 unsigned int evtNumber,
00135 unsigned int fuProcessId,
00136 unsigned char *data,
00137 unsigned int dataSize)
00138 {
00139 if (eventSize_!=0)
00140 cout<<"FUShmRecoCell::writeEventData() WARNING: overwriting data!"<<endl;
00141
00142 if (dataSize>payloadSize_) {
00143 cout<<"FUShmRecoCell::writeEventData() ERROR: data does not fit!"<<endl;
00144 return;
00145 }
00146
00147 rawCellIndex_=rawCellIndex;
00148 runNumber_ =runNumber;
00149 evtNumber_ =evtNumber;
00150 outModId_ =0xffffffff;
00151 fuProcessId_ =fuProcessId;
00152 fuGuid_ =0;
00153 type_ =2;
00154 unsigned char* targetAddr=payloadAddr();
00155 memcpy(targetAddr,data,dataSize);
00156 eventSize_=dataSize;
00157 nExpectedEPs_=0xffffffff;
00158 }
00159
00160
00161
00162 unsigned int FUShmRecoCell::size(unsigned int payloadSize)
00163 {
00164 return sizeof(FUShmRecoCell)+sizeof(unsigned char)*payloadSize;
00165 }