HDF5DataFile: spot information is written as images are coming
This commit is contained in:
@@ -30,9 +30,6 @@ HDF5DataFile::~HDF5DataFile() {
|
||||
if (!spot_count.empty()) {
|
||||
std::vector<hsize_t> dims = {spot_count.size(), max_spots};
|
||||
result_group->SaveVector("nPeaks", spot_count);
|
||||
result_group->SaveVector("peakXPosRaw", spot_x, dims, CompressionAlgorithm::BSHUF_LZ4);
|
||||
result_group->SaveVector("peakYPosRaw", spot_y, dims, CompressionAlgorithm::BSHUF_LZ4);
|
||||
result_group->SaveVector("peakTotalIntensity", spot_intensity, dims, CompressionAlgorithm::BSHUF_LZ4);
|
||||
result_group->SaveVector("indexingResult", indexing_result);
|
||||
|
||||
if (!rad_int_bin_to_q.empty())
|
||||
@@ -65,10 +62,20 @@ void HDF5DataFile::CreateFile() {
|
||||
HDF5DataSpace data_space({1, ypixel, xpixel},{H5S_UNLIMITED, ypixel, xpixel});
|
||||
data_set = std::make_unique<HDF5DataSet>(*data_file, "/entry/data/data", data_type, data_space, dcpl);
|
||||
|
||||
HDF5DataSpace data_space_spots({1, max_spots},{H5S_UNLIMITED, max_spots});
|
||||
HDF5Dcpl dcpl_spots;
|
||||
dcpl_spots.SetChunking({1, max_spots});
|
||||
|
||||
data_set_spot_x = std::make_unique<HDF5DataSet>(*data_file, "/entry/result/peakXPosRaw",
|
||||
HDF5DataType(0.0f), data_space_spots, dcpl_spots);
|
||||
|
||||
data_set_spot_y = std::make_unique<HDF5DataSet>(*data_file, "/entry/result/peakYPosRaw",
|
||||
HDF5DataType(0.0f), data_space_spots, dcpl_spots);
|
||||
|
||||
data_set_spot_int = std::make_unique<HDF5DataSet>(*data_file, "/entry/result/TotalIntensity",
|
||||
HDF5DataType(0.0f), data_space_spots, dcpl_spots);
|
||||
|
||||
spot_count.resize(1);
|
||||
spot_x.resize(max_spots);
|
||||
spot_y.resize(max_spots);
|
||||
spot_intensity.resize(max_spots);
|
||||
indexing_result.resize(1);
|
||||
bunch_id.resize(1);
|
||||
jf_info.resize(1);
|
||||
@@ -84,10 +91,11 @@ void HDF5DataFile::Write(const DataMessage &msg, uint64_t image_number) {
|
||||
if (image_number > max_image_number) {
|
||||
max_image_number = image_number;
|
||||
data_set->SetExtent({max_image_number+1, ypixel, xpixel});
|
||||
data_set_spot_x->SetExtent({max_image_number+1, max_spots});
|
||||
data_set_spot_y->SetExtent({max_image_number+1, max_spots});
|
||||
data_set_spot_int->SetExtent({max_image_number+1, max_spots});
|
||||
|
||||
spot_count.resize(max_image_number + 1);
|
||||
spot_x.resize(max_spots * (max_image_number + 1));
|
||||
spot_y.resize(max_spots * (max_image_number + 1));
|
||||
spot_intensity.resize(max_spots * (max_image_number + 1));
|
||||
indexing_result.resize(max_image_number + 1);
|
||||
bunch_id.resize(max_image_number + 1);
|
||||
jf_info.resize(max_image_number + 1);
|
||||
@@ -102,11 +110,15 @@ void HDF5DataFile::Write(const DataMessage &msg, uint64_t image_number) {
|
||||
|
||||
spot_count[image_number] = cnt;
|
||||
|
||||
std::vector<float> spot_x(max_spots), spot_y(max_spots), spot_intensity(max_spots);
|
||||
for (int i = 0; i < cnt; i++) {
|
||||
spot_x[max_spots * image_number + i] = msg.spots[i].x;
|
||||
spot_y[max_spots * image_number + i] = msg.spots[i].y;
|
||||
spot_intensity[max_spots * image_number + i] = msg.spots[i].intensity;
|
||||
spot_x[i] = msg.spots[i].x;
|
||||
spot_y[i] = msg.spots[i].y;
|
||||
spot_intensity[i] = msg.spots[i].intensity;
|
||||
}
|
||||
data_set_spot_x->WriteVec(spot_x, {image_number, 0}, {1, max_spots});
|
||||
data_set_spot_y->WriteVec(spot_y, {image_number, 0}, {1, max_spots});
|
||||
data_set_spot_int->WriteVec(spot_intensity, {image_number, 0}, {1, max_spots});
|
||||
|
||||
indexing_result[image_number] = msg.indexing_result;
|
||||
bunch_id[image_number] = msg.bunch_id;
|
||||
|
||||
Reference in New Issue
Block a user