9 #include <rawdata/dataobjects/RawCOPPER.h>
11 #include <framework/utilities/HTML.h>
22 RawCOPPER::RawCOPPER()
28 RawCOPPER::~RawCOPPER()
30 if (m_access != NULL)
delete m_access;
34 void RawCOPPER::SetVersion()
37 if (m_buffer == NULL) {
39 sprintf(err_buf,
"m_buffer is NULL. Exiting...");
40 printf(
"%s", err_buf); fflush(stdout);
44 if (m_access != NULL) {
48 m_version = ((m_buffer[ POS_FORMAT_VERSION ]) & FORMAT_MASK) >> 8;
50 case LATEST_POSTREDUCTION_FORMAT_VER :
54 case (0x80 + LATEST_POSTREDUCTION_FORMAT_VER) :
72 sprintf(err_buf,
"[FATAL] ERROR_EVENT : Invalid version of a data format(0x%.8x = 0x7f7f**..). Exiting...\n %s %s %d\n",
73 m_buffer[ POS_FORMAT_VERSION ], __FILE__, __PRETTY_FUNCTION__, __LINE__);
74 printf(
"%s", err_buf); fflush(stdout);
79 m_access->SetBuffer(m_buffer, m_nwords, 0, m_num_events, m_num_nodes);
85 void RawCOPPER::SetVersion(
string class_name)
88 if (m_access != NULL) {
92 if (class_name ==
"PostRawCOPPERFormat_latest") {
94 m_version = (0 << 7) | LATEST_POSTREDUCTION_FORMAT_VER;
95 }
else if (class_name ==
"PreRawCOPPERFormat_latest") {
97 m_version = (1 << 7) | LATEST_POSTREDUCTION_FORMAT_VER;
98 }
else if (class_name ==
"PostRawCOPPERFormat_v1") {
100 m_version = (0 << 7) | 1;
101 }
else if (class_name ==
"PreRawCOPPERFormat_v1") {
103 m_version = (1 << 7) | 1;
104 }
else if (class_name ==
"RawCOPPERFormat_v0") {
106 m_version = (0 << 7) | 0;
109 sprintf(err_buf,
"Invalid name of a data format class (%s). Exiting...\n %s %s %d\n",
110 class_name.c_str(), __FILE__, __PRETTY_FUNCTION__, __LINE__);
111 printf(
"%s", err_buf); fflush(stdout);
128 m_access->SetBuffer(m_buffer, m_nwords, 0, m_num_events, m_num_nodes);
132 void RawCOPPER::SetBuffer(
int* bufin,
int nwords,
int delete_flag,
int num_events,
int num_nodes)
136 sprintf(err_buf,
"[DEBUG] bufin is NULL. Exting...\n");
137 printf(
"%s", err_buf); fflush(stdout);
141 if (!m_use_prealloc_buf && m_buffer != NULL)
delete[] m_buffer;
143 if (delete_flag == 0) {
144 m_use_prealloc_buf =
true;
146 m_use_prealloc_buf =
false;
152 m_num_nodes = num_nodes;
153 m_num_events = num_events;
160 void RawCOPPER::ShowBuffer()
164 printf(
"POINTER %p\n", m_buffer);
165 for (
int k = 0; k < 100; k++) {
166 printf(
"%.8x ", m_buffer[ k ]);
167 if ((k + 1) % 10 == 0) printf(
"\n%.8x : ", k);
174 void RawCOPPER::PackDetectorBuf(
175 int* detector_buf_1st,
int nwords_1st,
176 int* detector_buf_2nd,
int nwords_2nd,
177 int* detector_buf_3rd,
int nwords_3rd,
178 int* detector_buf_4th,
int nwords_4th,
182 if (m_access != NULL) {
186 m_version = LATEST_POSTREDUCTION_FORMAT_VER;
190 int* packed_buf = NULL;
191 packed_buf = m_access->PackDetectorBuf(&m_nwords,
192 detector_buf_1st, nwords_1st,
193 detector_buf_2nd, nwords_2nd,
194 detector_buf_3rd, nwords_3rd,
195 detector_buf_4th, nwords_4th,
199 SetBuffer(packed_buf, m_nwords, delete_flag, m_num_events, m_num_nodes);
202 m_access->SetBuffer(m_buffer, m_nwords, delete_flag, m_num_events, m_num_nodes);
208 void RawCOPPER::PackDetectorBuf4DummyData(
209 int* detector_buf_1st,
int nwords_1st,
210 int* detector_buf_2nd,
int nwords_2nd,
211 int* detector_buf_3rd,
int nwords_3rd,
212 int* detector_buf_4th,
int nwords_4th,
216 if (m_access != NULL) {
220 m_version = LATEST_POSTREDUCTION_FORMAT_VER;
224 int* packed_buf = NULL;
225 packed_buf = m_access->PackDetectorBuf(&m_nwords,
226 detector_buf_1st, nwords_1st,
227 detector_buf_2nd, nwords_2nd,
228 detector_buf_3rd, nwords_3rd,
229 detector_buf_4th, nwords_4th,
233 SetBuffer(packed_buf, m_nwords, delete_flag, m_num_events, m_num_nodes);
236 m_access->SetBuffer(m_buffer, m_nwords, delete_flag, m_num_events, m_num_nodes);
241 std::string RawCOPPER::getInfoHTML()
const
249 s <<
"Entries: " << nEntries;
250 s <<
", Total size (32bit words): " << m_nwords <<
"<br>";
252 s <<
"COPPER format version: " << m_version;
255 for (
int iEntry = 0; iEntry < nEntries; ++iEntry) {
256 s <<
"<h4>Entry " << iEntry <<
"</h4>";
257 s <<
"Node ID: 0x" << std::hex << nonconst_this->
GetNodeID(iEntry) << std::dec;
258 for (
int iFinesse = 0; iFinesse < 4; iFinesse++) {
261 s <<
"<p>Finesse " << char(a + iFinesse) <<
" (Size: " << nWords <<
")</p>";
262 s << HTML::getHexDump(buf, nWords) <<
"<br>";