chunked upto 1000 and new dataset every 10000

This commit is contained in:
Dhanya Maliakal 2017-01-03 12:11:55 +01:00
parent abb5bfb6e4
commit adb5ab5ed1
2 changed files with 33 additions and 10 deletions

View File

@ -647,6 +647,7 @@ private:
H5File *hdf5_fileId[MAX_NUMBER_OF_WRITER_THREADS]; H5File *hdf5_fileId[MAX_NUMBER_OF_WRITER_THREADS];
DataType hdf5_datatype; DataType hdf5_datatype;
const static int MAX_IMAGES_IN_DATASET = 10000; const static int MAX_IMAGES_IN_DATASET = 10000;
const static int MAX_CHUNKED_IMAGES = 1000;
#endif #endif
//***acquisition indices/count parameters*** //***acquisition indices/count parameters***
/** Frame Number of First Frame of an entire Acquisition (including all scans) */ /** Frame Number of First Frame of an entire Acquisition (including all scans) */

View File

@ -1855,11 +1855,6 @@ int UDPStandardImplementation::createNewFile(int ithread){
group5.close(); group5.close();
//data //data
//create property list for a dataset and set up fill values
/*int fillvalue = -1; //Aldo suggested its time consuming
DSetCreatPropList plist;
plist.setFillValue(hdf5_datatype, &fillvalue);*/
//create dataspace for the dataset in the file //create dataspace for the dataset in the file
int numimagesindataset = ((numberOfFrames < MAX_IMAGES_IN_DATASET)? numberOfFrames:MAX_IMAGES_IN_DATASET); int numimagesindataset = ((numberOfFrames < MAX_IMAGES_IN_DATASET)? numberOfFrames:MAX_IMAGES_IN_DATASET);
hsize_t srcdims[3] = {NY,NX,numimagesindataset}; hsize_t srcdims[3] = {NY,NX,numimagesindataset};
@ -1868,9 +1863,22 @@ int UDPStandardImplementation::createNewFile(int ithread){
hdf5_dataspaceId[ithread] = new DataSpace (3,srcdims); hdf5_dataspaceId[ithread] = new DataSpace (3,srcdims);
char dsetname[100]; char dsetname[100];
sprintf(dsetname, "/entry/data/data_%06lld", 0);//(long long int)currentFrameNumber[ithread]+1) sprintf(dsetname, "/entry/data/data_%06lld", 0);//(long long int)currentFrameNumber[ithread]+1)
//Create dataset and write it into the file
hdf5_datasetId[ithread] = new DataSet (hdf5_fileId[ithread]->createDataSet( //create chunked dataset if greater than max_chunked_images
dsetname, hdf5_datatype, *hdf5_dataspaceId[ithread]));/*, plist));*/ if(numimagesindataset > MAX_CHUNKED_IMAGES){
//create property list for a dataset
DSetCreatPropList plist;
/*//set up fill values
int fillvalue = -1; //Aldo suggested its time consuming
plist.setFillValue(hdf5_datatype, &fillvalue);*/
hsize_t chunk_dims[3] ={NY, srcdims[1],MAX_CHUNKED_IMAGES};
plist.setChunk(3, chunk_dims);
//Create dataset and write it into the file
hdf5_datasetId[ithread] = new DataSet (hdf5_fileId[ithread]->createDataSet(
dsetname, hdf5_datatype, *hdf5_dataspaceId[ithread], plist));
}else
hdf5_datasetId[ithread] = new DataSet (hdf5_fileId[ithread]->createDataSet(
dsetname, hdf5_datatype, *hdf5_dataspaceId[ithread]));
} }
catch(Exception error){ catch(Exception error){
cprintf(RED,"Error in creating HDF5 handles in thread %d\n",ithread); cprintf(RED,"Error in creating HDF5 handles in thread %d\n",ithread);
@ -3154,8 +3162,22 @@ void UDPStandardImplementation::handleCompleteFramesOnly(int ithread, char* wbuf
srcdims[1] = NX/2; srcdims[1] = NX/2;
hdf5_dataspaceId[ithread] = new DataSpace (3,srcdims); hdf5_dataspaceId[ithread] = new DataSpace (3,srcdims);
} }
hdf5_datasetId[ithread] = new DataSet (hdf5_fileId[ithread]->createDataSet(
dsetname, hdf5_datatype, *hdf5_dataspaceId[ithread])); //create chunked dataset if greater than max_chunked_images
if(numimagesindataset > MAX_CHUNKED_IMAGES){
DSetCreatPropList plist;
hsize_t chunk_dims[3] ={NY, NX, MAX_CHUNKED_IMAGES};
if(dynamicRange == 4)
chunk_dims[1] = NX/2;
plist.setChunk(3, chunk_dims);
hdf5_datasetId[ithread] = new DataSet (hdf5_fileId[ithread]->createDataSet(
dsetname, hdf5_datatype, *hdf5_dataspaceId[ithread],plist));
}
else
hdf5_datasetId[ithread] = new DataSet (hdf5_fileId[ithread]->createDataSet(
dsetname, hdf5_datatype, *hdf5_dataspaceId[ithread]));
} }
catch(Exception error){ catch(Exception error){
cprintf(RED,"Error in closing HDF5 dataset to create a new one in thread %d\n",ithread); cprintf(RED,"Error in closing HDF5 dataset to create a new one in thread %d\n",ithread);