mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-01-17 14:48:59 +01:00
saving bit field in hdf5 as string of 512 bytes instead of 512 bits for the time being, will be updated when a better option is figured out
This commit is contained in:
@@ -28,7 +28,6 @@ if (USE_HDF5)
|
|||||||
)
|
)
|
||||||
list (APPEND SOURCES
|
list (APPEND SOURCES
|
||||||
src/HDF5File.cpp
|
src/HDF5File.cpp
|
||||||
src/HDF5FileStatic.cpp
|
|
||||||
)
|
)
|
||||||
endif ()
|
endif ()
|
||||||
endif (USE_HDF5)
|
endif (USE_HDF5)
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ DEPSINCLUDES = $(INCDIR)/ansi.h $(INCDIR)/sls_receiver_defs.h $(INCDIR)/sls_rece
|
|||||||
|
|
||||||
|
|
||||||
ifeq ($(HDF5),yes)
|
ifeq ($(HDF5),yes)
|
||||||
SRC_CLNT += HDF5File.cpp HDF5FileStatic.cpp
|
SRC_CLNT += HDF5File.cpp
|
||||||
endif
|
endif
|
||||||
|
|
||||||
MAIN_SRC = main.cpp
|
MAIN_SRC = main.cpp
|
||||||
|
|||||||
@@ -163,6 +163,7 @@ class BinaryFileStatic {
|
|||||||
"Round Robin Number : 2 bytes\n"
|
"Round Robin Number : 2 bytes\n"
|
||||||
"Detector Type : 1 byte\n"
|
"Detector Type : 1 byte\n"
|
||||||
"Header Version : 1 byte\n"
|
"Header Version : 1 byte\n"
|
||||||
|
"Packets Caught Mask : 64 bytes\n"
|
||||||
,
|
,
|
||||||
version,
|
version,
|
||||||
dr,
|
dr,
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
#ifndef H5_NO_NAMESPACE
|
#ifndef H5_NO_NAMESPACE
|
||||||
using namespace H5;
|
using namespace H5;
|
||||||
#endif
|
#endif
|
||||||
#include <string>
|
|
||||||
|
|
||||||
|
|
||||||
class HDF5File : private virtual slsReceiverDefs, public File, public HDF5FileStatic {
|
class HDF5File : private virtual slsReceiverDefs, public File, public HDF5FileStatic {
|
||||||
@@ -174,11 +173,17 @@ class HDF5File : private virtual slsReceiverDefs, public File, public HDF5FileSt
|
|||||||
/** Number of files in an acquisition - to verify need of virtual file */
|
/** Number of files in an acquisition - to verify need of virtual file */
|
||||||
int numFilesinAcquisition;
|
int numFilesinAcquisition;
|
||||||
|
|
||||||
|
/** parameter names */
|
||||||
|
vector <const char*> parameterNames;
|
||||||
|
|
||||||
|
/** parameter data types */
|
||||||
|
vector <DataType> parameterDataTypes;
|
||||||
|
|
||||||
/** Dataspace of parameters */
|
/** Dataspace of parameters */
|
||||||
DataSpace* dataspace_para;
|
DataSpace* dataspace_para;
|
||||||
|
|
||||||
/** Dataset array for parameters */
|
/** Dataset array for parameters */
|
||||||
DataSet* dataset_para[HDF5FileStatic::NumberofParameters];
|
vector <DataSet*> dataset_para;
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ using namespace H5;
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <stdlib.h> //malloc
|
#include <stdlib.h> //malloc
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
@@ -187,9 +188,16 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Write Parameter Arrays as datasets (to virtual file)
|
* Write Parameter Arrays as datasets (to virtual file)
|
||||||
|
* @param ind self index
|
||||||
|
* @param dspace_para dataspace of parametrs
|
||||||
|
* @param fnum frame number
|
||||||
|
* @param dset_para vector or dataset pointers of parameters
|
||||||
|
* @param rheader sls_receiver_header pointer
|
||||||
|
* @param parameterDataTypes parameter datatypes
|
||||||
*/
|
*/
|
||||||
static int WriteParameterDatasets(int ind, DataSpace* dspace_para, uint64_t fnum,
|
static int WriteParameterDatasets(int ind, DataSpace* dspace_para, uint64_t fnum,
|
||||||
DataSet* dset_para[],sls_receiver_header* rheader)
|
vector <DataSet*> dset_para,sls_receiver_header* rheader,
|
||||||
|
vector <DataType> parameterDataTypes)
|
||||||
{
|
{
|
||||||
sls_detector_header header = rheader->detHeader;
|
sls_detector_header header = rheader->detHeader;
|
||||||
hsize_t count[1] = {1};
|
hsize_t count[1] = {1};
|
||||||
@@ -198,19 +206,20 @@ public:
|
|||||||
Exception::dontPrint(); //to handle errors
|
Exception::dontPrint(); //to handle errors
|
||||||
dspace_para->selectHyperslab( H5S_SELECT_SET, count, start);
|
dspace_para->selectHyperslab( H5S_SELECT_SET, count, start);
|
||||||
DataSpace memspace(H5S_SCALAR);
|
DataSpace memspace(H5S_SCALAR);
|
||||||
dset_para[0]->write(&header.frameNumber, ParameterDataTypes[0], memspace, *dspace_para);
|
dset_para[0]->write(&header.frameNumber, parameterDataTypes[0], memspace, *dspace_para);
|
||||||
dset_para[1]->write(&header.expLength, ParameterDataTypes[1], memspace, *dspace_para);
|
dset_para[1]->write(&header.expLength, parameterDataTypes[1], memspace, *dspace_para);
|
||||||
dset_para[2]->write(&header.packetNumber, ParameterDataTypes[2], memspace, *dspace_para);
|
dset_para[2]->write(&header.packetNumber, parameterDataTypes[2], memspace, *dspace_para);
|
||||||
dset_para[3]->write(&header.bunchId, ParameterDataTypes[3], memspace, *dspace_para);
|
dset_para[3]->write(&header.bunchId, parameterDataTypes[3], memspace, *dspace_para);
|
||||||
dset_para[4]->write(&header.timestamp, ParameterDataTypes[4], memspace, *dspace_para);
|
dset_para[4]->write(&header.timestamp, parameterDataTypes[4], memspace, *dspace_para);
|
||||||
dset_para[5]->write(&header.modId, ParameterDataTypes[5], memspace, *dspace_para);
|
dset_para[5]->write(&header.modId, parameterDataTypes[5], memspace, *dspace_para);
|
||||||
dset_para[6]->write(&header.xCoord, ParameterDataTypes[6], memspace, *dspace_para);
|
dset_para[6]->write(&header.xCoord, parameterDataTypes[6], memspace, *dspace_para);
|
||||||
dset_para[7]->write(&header.yCoord, ParameterDataTypes[7], memspace, *dspace_para);
|
dset_para[7]->write(&header.yCoord, parameterDataTypes[7], memspace, *dspace_para);
|
||||||
dset_para[8]->write(&header.zCoord, ParameterDataTypes[8], memspace, *dspace_para);
|
dset_para[8]->write(&header.zCoord, parameterDataTypes[8], memspace, *dspace_para);
|
||||||
dset_para[9]->write(&header.debug, ParameterDataTypes[9], memspace, *dspace_para);
|
dset_para[9]->write(&header.debug, parameterDataTypes[9], memspace, *dspace_para);
|
||||||
dset_para[10]->write(&header.roundRNumber, ParameterDataTypes[10], memspace, *dspace_para);
|
dset_para[10]->write(&header.roundRNumber, parameterDataTypes[10], memspace, *dspace_para);
|
||||||
dset_para[11]->write(&header.detType, ParameterDataTypes[11], memspace, *dspace_para);
|
dset_para[11]->write(&header.detType, parameterDataTypes[11], memspace, *dspace_para);
|
||||||
dset_para[12]->write(&header.version, ParameterDataTypes[12], memspace, *dspace_para);
|
dset_para[12]->write(&header.version, parameterDataTypes[12], memspace, *dspace_para);
|
||||||
|
dset_para[13]->write(rheader->packetsMask.to_string().c_str(), parameterDataTypes[13], memspace, *dspace_para);
|
||||||
}
|
}
|
||||||
catch(Exception error){
|
catch(Exception error){
|
||||||
cprintf(RED,"Error in writing parameters to file in object %d\n",ind);
|
cprintf(RED,"Error in writing parameters to file in object %d\n",ind);
|
||||||
@@ -360,12 +369,12 @@ public:
|
|||||||
* Create File
|
* Create File
|
||||||
* @param ind object index for debugging
|
* @param ind object index for debugging
|
||||||
* @param owenable overwrite enable
|
* @param owenable overwrite enable
|
||||||
* @param numf number of images
|
|
||||||
* @param fname complete file name
|
* @param fname complete file name
|
||||||
* @param frindexenable frame index enable
|
* @param frindexenable frame index enable
|
||||||
* @param fnum current image number
|
* @param fnum current image number
|
||||||
* @param nx number of pixels in x dir
|
* @param nDimx number of pixels in x dim (#frames)
|
||||||
* @param ny number of pixels in y dir
|
* @param nDimy number of pixels in y dim (height y dir)
|
||||||
|
* @param nDimz number of pixels in z dim (width x dir)
|
||||||
* @param dtype data type
|
* @param dtype data type
|
||||||
* @param fd file pointer
|
* @param fd file pointer
|
||||||
* @param dspace dataspace pointer
|
* @param dspace dataspace pointer
|
||||||
@@ -373,19 +382,18 @@ public:
|
|||||||
* @param version version of software for hdf5 writing
|
* @param version version of software for hdf5 writing
|
||||||
* @param maxchunkedimages maximum chunked images
|
* @param maxchunkedimages maximum chunked images
|
||||||
* @param dspace_para dataspace of parameters
|
* @param dspace_para dataspace of parameters
|
||||||
* @param para1 parameter 1 name
|
* @param dset_para vector of datasets of parameters
|
||||||
* @param dset_para1 dataset of parameter 1
|
* @param parameterNames parameter names
|
||||||
* @param dtype_para1 datatype of parameter 1
|
* @param parameterDataTypes parameter datatypes
|
||||||
* @param para2 parameter 2 name
|
|
||||||
* @param dset_para2 dataset of parameter 2
|
|
||||||
* @param dtype_para2 datatype of parameter 2
|
|
||||||
* @returns 0 for success and 1 for fail
|
* @returns 0 for success and 1 for fail
|
||||||
*/
|
*/
|
||||||
static int CreateDataFile(int ind, bool owenable, string fname, bool frindexenable,
|
static int CreateDataFile(int ind, bool owenable, string fname, bool frindexenable,
|
||||||
uint64_t fnum, uint64_t nDimx, uint32_t nDimy, uint32_t nDimz,
|
uint64_t fnum, uint64_t nDimx, uint32_t nDimy, uint32_t nDimz,
|
||||||
DataType dtype, H5File*& fd, DataSpace*& dspace, DataSet*& dset,
|
DataType dtype, H5File*& fd, DataSpace*& dspace, DataSet*& dset,
|
||||||
double version, uint64_t maxchunkedimages,
|
double version, uint64_t maxchunkedimages,
|
||||||
DataSpace*& dspace_para, DataSet* dset_para[])
|
DataSpace*& dspace_para, vector<DataSet*>& dset_para,
|
||||||
|
vector <const char*> parameterNames,
|
||||||
|
vector <DataType> parameterDataTypes)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
Exception::dontPrint(); //to handle errors
|
Exception::dontPrint(); //to handle errors
|
||||||
@@ -434,8 +442,10 @@ public:
|
|||||||
//create parameter datasets
|
//create parameter datasets
|
||||||
hsize_t dims[1] = {nDimx};
|
hsize_t dims[1] = {nDimx};
|
||||||
dspace_para = new DataSpace (1,dims);
|
dspace_para = new DataSpace (1,dims);
|
||||||
for (int i = 0; i < NumberofParameters; ++i)
|
for (int i = 0; i < parameterNames.size(); ++i){
|
||||||
dset_para[i] = new DataSet(fd->createDataSet(ParameterNames[i], ParameterDataTypes[i], *dspace_para));
|
DataSet* ds = new DataSet(fd->createDataSet(parameterNames[i], parameterDataTypes[i], *dspace_para));
|
||||||
|
dset_para.push_back(ds);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch(Exception error){
|
catch(Exception error){
|
||||||
cprintf(RED,"Error in creating HDF5 handles in object %d\n",ind);
|
cprintf(RED,"Error in creating HDF5 handles in object %d\n",ind);
|
||||||
@@ -461,16 +471,14 @@ public:
|
|||||||
* @param maxFramesPerFile maximum frames per file
|
* @param maxFramesPerFile maximum frames per file
|
||||||
* @param numf number of frames caught
|
* @param numf number of frames caught
|
||||||
* @param srcDataseName source dataset name
|
* @param srcDataseName source dataset name
|
||||||
* @param srcP1DatasetName source parameter 1 dataset name
|
|
||||||
* @param srcP2DatasetName source parameter 2 dataset name
|
|
||||||
* @param dataType datatype of data dataset
|
* @param dataType datatype of data dataset
|
||||||
* @param p1DataType datatype of parameter 1
|
|
||||||
* @param p2DataType datatype of parameter 2
|
|
||||||
* @param numDety number of readouts in Y dir
|
* @param numDety number of readouts in Y dir
|
||||||
* @param numDetz number of readouts in Z dir
|
* @param numDetz number of readouts in Z dir
|
||||||
* @param nDimy number of objects in y dimension in source file (Number of pixels in y dir)
|
* @param nDimy number of objects in y dimension in source file (Number of pixels in y dir)
|
||||||
* @param nDimz number of objects in z dimension in source file (Number of pixels in x dir)
|
* @param nDimz number of objects in z dimension in source file (Number of pixels in x dir)
|
||||||
* @param version version of software for hdf5 writing
|
* @param version version of software for hdf5 writing
|
||||||
|
* @param parameterNames parameter names
|
||||||
|
* @param parameterDataTypes parameter datatypes
|
||||||
* @returns 0 for success and 1 for fail
|
* @returns 0 for success and 1 for fail
|
||||||
*/
|
*/
|
||||||
static int CreateVirtualDataFile(
|
static int CreateVirtualDataFile(
|
||||||
@@ -480,7 +488,9 @@ public:
|
|||||||
uint32_t maxFramesPerFile, uint64_t numf,
|
uint32_t maxFramesPerFile, uint64_t numf,
|
||||||
string srcDataseName, DataType dataType,
|
string srcDataseName, DataType dataType,
|
||||||
int numDety, int numDetz, uint32_t nDimy, uint32_t nDimz,
|
int numDety, int numDetz, uint32_t nDimy, uint32_t nDimz,
|
||||||
double version)
|
double version,
|
||||||
|
vector <const char*> parameterNames,
|
||||||
|
vector <DataType> parameterDataTypes)
|
||||||
{
|
{
|
||||||
//virtual names
|
//virtual names
|
||||||
string virtualFileName = CreateVirtualFileName(fpath, fnameprefix, findex);
|
string virtualFileName = CreateVirtualFileName(fpath, fnameprefix, findex);
|
||||||
@@ -528,12 +538,12 @@ public:
|
|||||||
int fill_value = -1;
|
int fill_value = -1;
|
||||||
if (H5Pset_fill_value (dcpl, GetDataTypeinC(dataType), &fill_value) < 0)
|
if (H5Pset_fill_value (dcpl, GetDataTypeinC(dataType), &fill_value) < 0)
|
||||||
return CloseFileOnError(fd, string("Error in creating fill value in virtual file ") + virtualFileName + string("\n"));
|
return CloseFileOnError(fd, string("Error in creating fill value in virtual file ") + virtualFileName + string("\n"));
|
||||||
hid_t dcpl_para[NumberofParameters];
|
hid_t dcpl_para[parameterNames.size()];
|
||||||
for (int i = 0; i < NumberofParameters; ++i) {
|
for (int i = 0; i < parameterNames.size(); ++i) {
|
||||||
dcpl_para[i] = H5Pcreate (H5P_DATASET_CREATE);
|
dcpl_para[i] = H5Pcreate (H5P_DATASET_CREATE);
|
||||||
if (dcpl_para[i] < 0)
|
if (dcpl_para[i] < 0)
|
||||||
return CloseFileOnError(fd, string("Error in creating file creation properties (parameters) in virtual file ") + virtualFileName + string("\n"));
|
return CloseFileOnError(fd, string("Error in creating file creation properties (parameters) in virtual file ") + virtualFileName + string("\n"));
|
||||||
if (H5Pset_fill_value (dcpl_para[i], GetDataTypeinC(ParameterDataTypes[i]), &fill_value) < 0)
|
if (H5Pset_fill_value (dcpl_para[i], GetDataTypeinC(parameterDataTypes[i]), &fill_value) < 0)
|
||||||
return CloseFileOnError(fd, string("Error in creating fill value (parameters) in virtual file ") + virtualFileName + string("\n"));
|
return CloseFileOnError(fd, string("Error in creating fill value (parameters) in virtual file ") + virtualFileName + string("\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -599,8 +609,8 @@ public:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int k = 0; k < NumberofParameters; ++k) {
|
for (int k = 0; k < parameterNames.size(); ++k) {
|
||||||
if (H5Pset_virtual(dcpl_para[k], vdsDataspace_para, relative_srcFileName.c_str(), ParameterNames[k], srcDataspace_para) < 0) {
|
if (H5Pset_virtual(dcpl_para[k], vdsDataspace_para, relative_srcFileName.c_str(), parameterNames[k], srcDataspace_para) < 0) {
|
||||||
cprintf(RED,"could not set mapping for paramter %d\n", k);
|
cprintf(RED,"could not set mapping for paramter %d\n", k);
|
||||||
error = true;
|
error = true;
|
||||||
break;
|
break;
|
||||||
@@ -629,10 +639,10 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//virtual parameter dataset
|
//virtual parameter dataset
|
||||||
for (int i = 0; i < NumberofParameters; ++i) {
|
for (int i = 0; i < parameterNames.size(); ++i) {
|
||||||
hid_t vdsdataset_para = H5Dcreate2 (fd,
|
hid_t vdsdataset_para = H5Dcreate2 (fd,
|
||||||
(string("/virtual_") + string (ParameterNames[i])).c_str(),
|
(string("/virtual_") + string (parameterNames[i])).c_str(),
|
||||||
GetDataTypeinC(ParameterDataTypes[i]), vdsDataspace_para, H5P_DEFAULT, dcpl_para[i], H5P_DEFAULT);
|
GetDataTypeinC(parameterDataTypes[i]), vdsDataspace_para, H5P_DEFAULT, dcpl_para[i], H5P_DEFAULT);
|
||||||
if (vdsdataset_para < 0)
|
if (vdsdataset_para < 0)
|
||||||
return CloseFileOnError(fd, string("Error in creating virutal dataset (parameters) in virtual file ") + virtualFileName + string("\n"));
|
return CloseFileOnError(fd, string("Error in creating virutal dataset (parameters) in virtual file ") + virtualFileName + string("\n"));
|
||||||
}
|
}
|
||||||
@@ -641,7 +651,7 @@ public:
|
|||||||
H5Fclose(fd); fd = 0;
|
H5Fclose(fd); fd = 0;
|
||||||
|
|
||||||
//link
|
//link
|
||||||
return LinkVirtualInMaster(masterFileName, virtualFileName, virtualDatasetName);
|
return LinkVirtualInMaster(masterFileName, virtualFileName, virtualDatasetName, parameterNames);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -754,9 +764,11 @@ public:
|
|||||||
* @param masterFileName master file name
|
* @param masterFileName master file name
|
||||||
* @param virtualfname virtual file name
|
* @param virtualfname virtual file name
|
||||||
* @param virtualDatasetname virtual dataset name
|
* @param virtualDatasetname virtual dataset name
|
||||||
|
* @param parameterNames parameter names
|
||||||
* @returns 0 for success and 1 for fail
|
* @returns 0 for success and 1 for fail
|
||||||
*/
|
*/
|
||||||
static int LinkVirtualInMaster(string masterFileName, string virtualfname, string virtualDatasetname) {
|
static int LinkVirtualInMaster(string masterFileName, string virtualfname,
|
||||||
|
string virtualDatasetname, vector <const char*> parameterNames) {
|
||||||
char linkname[100];
|
char linkname[100];
|
||||||
hid_t vfd = 0;
|
hid_t vfd = 0;
|
||||||
|
|
||||||
@@ -801,15 +813,15 @@ public:
|
|||||||
H5Dclose(vdset);
|
H5Dclose(vdset);
|
||||||
|
|
||||||
//**paramter datasets**
|
//**paramter datasets**
|
||||||
for (int i = 0; i < NumberofParameters; ++i){
|
for (int i = 0; i < parameterNames.size(); ++i){
|
||||||
hid_t vdset_para = H5Dopen2( vfd, (string("/virtual_") + string (ParameterNames[i])).c_str(), H5P_DEFAULT);
|
hid_t vdset_para = H5Dopen2( vfd, (string("/virtual_") + string (parameterNames[i])).c_str(), H5P_DEFAULT);
|
||||||
if (vdset_para < 0) {
|
if (vdset_para < 0) {
|
||||||
H5Fclose(mfd); mfd = 0;
|
H5Fclose(mfd); mfd = 0;
|
||||||
return CloseFileOnError( vfd, string("Error in opening virtual parameter dataset to create link\n"));
|
return CloseFileOnError( vfd, string("Error in opening virtual parameter dataset to create link\n"));
|
||||||
}
|
}
|
||||||
sprintf(linkname, "/entry/data/%s",(string("/virtual_") + string (ParameterNames[i])).c_str());
|
sprintf(linkname, "/entry/data/%s",(string("/virtual_") + string (parameterNames[i])).c_str());
|
||||||
|
|
||||||
if(H5Lcreate_external( relative_virtualfname.c_str(), (string("/virtual_") + string (ParameterNames[i])).c_str(),
|
if(H5Lcreate_external( relative_virtualfname.c_str(), (string("/virtual_") + string (parameterNames[i])).c_str(),
|
||||||
mfd, linkname, H5P_DEFAULT, H5P_DEFAULT) < 0) {
|
mfd, linkname, H5P_DEFAULT, H5P_DEFAULT) < 0) {
|
||||||
H5Fclose(mfd); mfd = 0;
|
H5Fclose(mfd); mfd = 0;
|
||||||
return CloseFileOnError( vfd, string("Error in creating link to virtual parameter dataset\n"));
|
return CloseFileOnError( vfd, string("Error in creating link to virtual parameter dataset\n"));
|
||||||
@@ -851,18 +863,12 @@ public:
|
|||||||
else if (dtype == PredType::STD_U64LE)
|
else if (dtype == PredType::STD_U64LE)
|
||||||
return H5T_STD_U64LE;
|
return H5T_STD_U64LE;
|
||||||
else {
|
else {
|
||||||
cprintf(RED, "Invalid Data type\n");
|
hid_t s = H5Tcopy(H5T_C_S1);
|
||||||
return H5T_STD_U64LE;
|
H5Tset_size(s, MAX_NUM_PACKETS);
|
||||||
|
return s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const int NumberofParameters = 13;
|
|
||||||
|
|
||||||
private:
|
|
||||||
static const char * const ParameterNames[];
|
|
||||||
static const DataType ParameterDataTypes[];
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -36,14 +36,58 @@ HDF5File::HDF5File(int ind, uint32_t* maxf,
|
|||||||
nPixelsY(ny),
|
nPixelsY(ny),
|
||||||
numFramesInFile(0),
|
numFramesInFile(0),
|
||||||
numActualPacketsInFile(0),
|
numActualPacketsInFile(0),
|
||||||
numFilesinAcquisition(0),
|
numFilesinAcquisition(0)
|
||||||
dataspace_para(0)
|
|
||||||
{
|
{
|
||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
PrintMembers();
|
PrintMembers();
|
||||||
#endif
|
#endif
|
||||||
for (int i = 0; i < HDF5FileStatic::NumberofParameters; ++i)
|
dataset_para.clear();
|
||||||
dataset_para[i] = 0;
|
parameterNames.clear();
|
||||||
|
parameterDataTypes.clear();
|
||||||
|
|
||||||
|
parameterNames.push_back("Frame Number");
|
||||||
|
parameterDataTypes.push_back(PredType::STD_U64LE);
|
||||||
|
|
||||||
|
parameterNames.push_back("Exp Length/ Sub Exposure Time");
|
||||||
|
parameterDataTypes.push_back(PredType::STD_U32LE);
|
||||||
|
|
||||||
|
parameterNames.push_back("Packets Caught");
|
||||||
|
parameterDataTypes.push_back(PredType::STD_U32LE);
|
||||||
|
|
||||||
|
parameterNames.push_back("Bunch Id");
|
||||||
|
parameterDataTypes.push_back(PredType::STD_U64LE);
|
||||||
|
|
||||||
|
parameterNames.push_back("Time Stamp");
|
||||||
|
parameterDataTypes.push_back(PredType::STD_U64LE);
|
||||||
|
|
||||||
|
parameterNames.push_back("Mod Id");
|
||||||
|
parameterDataTypes.push_back(PredType::STD_U16LE);
|
||||||
|
|
||||||
|
parameterNames.push_back("X Coord");
|
||||||
|
parameterDataTypes.push_back(PredType::STD_U16LE);
|
||||||
|
|
||||||
|
parameterNames.push_back("Y Coord");
|
||||||
|
parameterDataTypes.push_back(PredType::STD_U16LE);
|
||||||
|
|
||||||
|
parameterNames.push_back("Z Coord");
|
||||||
|
parameterDataTypes.push_back(PredType::STD_U16LE);
|
||||||
|
|
||||||
|
parameterNames.push_back("Debug");
|
||||||
|
parameterDataTypes.push_back(PredType::STD_U32LE);
|
||||||
|
|
||||||
|
parameterNames.push_back("Round Robin Number");
|
||||||
|
parameterDataTypes.push_back(PredType::STD_U16LE);
|
||||||
|
|
||||||
|
parameterNames.push_back("Detector Type");
|
||||||
|
parameterDataTypes.push_back(PredType::STD_U8LE);
|
||||||
|
|
||||||
|
parameterNames.push_back("Detector Header Version");
|
||||||
|
parameterDataTypes.push_back(PredType::STD_U8LE);
|
||||||
|
|
||||||
|
parameterNames.push_back("Packets Caught Bit Mask");
|
||||||
|
StrType strdatatype(PredType::C_S1, MAX_NUM_PACKETS);
|
||||||
|
parameterDataTypes.push_back(strdatatype);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -104,7 +148,8 @@ int HDF5File::CreateFile(uint64_t fnum) {
|
|||||||
fnum, framestosave, nPixelsY, ((*dynamicRange==4) ? (nPixelsX/2) : nPixelsX),
|
fnum, framestosave, nPixelsY, ((*dynamicRange==4) ? (nPixelsX/2) : nPixelsX),
|
||||||
datatype, filefd, dataspace, dataset,
|
datatype, filefd, dataspace, dataset,
|
||||||
HDF5_WRITER_VERSION, MAX_CHUNKED_IMAGES,
|
HDF5_WRITER_VERSION, MAX_CHUNKED_IMAGES,
|
||||||
dataspace_para, dataset_para) == FAIL) {
|
dataspace_para, dataset_para,
|
||||||
|
parameterNames, parameterDataTypes) == FAIL) {
|
||||||
pthread_mutex_unlock(&Mutex);
|
pthread_mutex_unlock(&Mutex);
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
@@ -157,7 +202,7 @@ int HDF5File::WriteToFile(char* buffer, int buffersize, uint64_t fnum, uint32_t
|
|||||||
if (HDF5FileStatic::WriteParameterDatasets(index, dataspace_para,
|
if (HDF5FileStatic::WriteParameterDatasets(index, dataspace_para,
|
||||||
// infinite then no need for %maxframesperfile
|
// infinite then no need for %maxframesperfile
|
||||||
((*maxFramesPerFile == 0) ? fnum : fnum%(*maxFramesPerFile)),
|
((*maxFramesPerFile == 0) ? fnum : fnum%(*maxFramesPerFile)),
|
||||||
dataset_para, header) == OK) {
|
dataset_para, header, parameterDataTypes) == OK) {
|
||||||
pthread_mutex_unlock(&Mutex);
|
pthread_mutex_unlock(&Mutex);
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
@@ -207,7 +252,8 @@ void HDF5File::EndofAcquisition(bool anyPacketsCaught, uint64_t numf) {
|
|||||||
if ((*numImages > 1)) osfn << "_f" << setfill('0') << setw(12) << 0;
|
if ((*numImages > 1)) osfn << "_f" << setfill('0') << setw(12) << 0;
|
||||||
string dsetname = osfn.str();
|
string dsetname = osfn.str();
|
||||||
pthread_mutex_lock(&Mutex);
|
pthread_mutex_lock(&Mutex);
|
||||||
HDF5FileStatic::LinkVirtualInMaster(masterFileName, currentFileName, dsetname);
|
HDF5FileStatic::LinkVirtualInMaster(masterFileName, currentFileName,
|
||||||
|
dsetname, parameterNames);
|
||||||
pthread_mutex_unlock(&Mutex);
|
pthread_mutex_unlock(&Mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,7 +277,8 @@ int HDF5File::CreateVirtualFile(uint64_t numf) {
|
|||||||
numf+1,
|
numf+1,
|
||||||
"data", datatype,
|
"data", datatype,
|
||||||
numDetY, numDetX, nPixelsY, ((*dynamicRange==4) ? (nPixelsX/2) : nPixelsX),
|
numDetY, numDetX, nPixelsY, ((*dynamicRange==4) ? (nPixelsX/2) : nPixelsX),
|
||||||
HDF5_WRITER_VERSION);
|
HDF5_WRITER_VERSION,
|
||||||
|
parameterNames, parameterDataTypes);
|
||||||
pthread_mutex_unlock(&Mutex);
|
pthread_mutex_unlock(&Mutex);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user