This commit is contained in:
maliakal_d 2021-07-13 17:14:29 +02:00
parent f9feabaacf
commit abb26adc76
2 changed files with 70 additions and 39 deletions

View File

@ -86,11 +86,8 @@ void HDF5VirtualFile::CreateVirtualFile(
DSetCreatPropList plist; DSetCreatPropList plist;
plist.setFillValue(dataType, &fill_value); plist.setFillValue(dataType, &fill_value);
// property list for parameters (fill value and datatype) // property list for parameters (datatype)
std::vector<DSetCreatPropList> plistPara(paraSize); std::vector<DSetCreatPropList> plistPara(paraSize);
for (unsigned int p = 0; p < paraSize; ++p) {
plistPara[p].setFillValue(parameterDataTypes[p], &fill_value);
}
// hyperslab // hyperslab
int numMajorHyperslab = numImagesCaught / maxFramesPerFile; int numMajorHyperslab = numImagesCaught / maxFramesPerFile;

View File

@ -127,6 +127,8 @@ struct MasterAttributes {
}; };
void WriteHDF5Attributes(H5File *fd, Group *group) { void WriteHDF5Attributes(H5File *fd, Group *group) {
char c[1024];
memset(c, 0, sizeof(c));
// clang-format off // clang-format off
// version // version
{ {
@ -143,7 +145,8 @@ struct MasterAttributes {
DataSpace dataspace = DataSpace(H5S_SCALAR); DataSpace dataspace = DataSpace(H5S_SCALAR);
DataSet dataset = DataSet dataset =
group->createDataSet("Timestamp", strdatatype, dataspace); group->createDataSet("Timestamp", strdatatype, dataspace);
dataset.write(std::string(ctime(&t)), strdatatype); sls::strcpy_safe(c, std::string(ctime(&t)));
dataset.write(c, strdatatype);
} }
// detector type // detector type
{ {
@ -151,7 +154,8 @@ struct MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
DataSet dataset = DataSet dataset =
group->createDataSet("Detector Type", strdatatype, dataspace); group->createDataSet("Detector Type", strdatatype, dataspace);
dataset.write(sls::ToString(detType), strdatatype); sls::strcpy_safe(c, sls::ToString(detType));
dataset.write(c, strdatatype);
} }
// timing mode // timing mode
{ {
@ -159,7 +163,8 @@ struct MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
DataSet dataset = DataSet dataset =
group->createDataSet("Timing Mode", strdatatype, dataspace); group->createDataSet("Timing Mode", strdatatype, dataspace);
dataset.write(sls::ToString(timingMode), strdatatype); sls::strcpy_safe(c, sls::ToString(timingMode));
dataset.write(c, strdatatype);
} }
// Image Size // Image Size
{ {
@ -171,7 +176,8 @@ struct MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
Attribute attribute = Attribute attribute =
dataset.createAttribute("Unit", strdatatype, dataspaceAttr); dataset.createAttribute("Unit", strdatatype, dataspaceAttr);
attribute.write(strdatatype, std::string("bytes")); sls::strcpy_safe(c, "bytes");
attribute.write(strdatatype, c);
} }
//TODO: make this into an array? //TODO: make this into an array?
// x // x
@ -201,7 +207,8 @@ struct MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
DataSet dataset = DataSet dataset =
group->createDataSet("Frame Discard Policy", strdatatype, dataspace); group->createDataSet("Frame Discard Policy", strdatatype, dataspace);
dataset.write(sls::ToString(frameDiscardMode), strdatatype); sls::strcpy_safe(c, sls::ToString(frameDiscardMode));
dataset.write(c, strdatatype);
} }
// Frame Padding // Frame Padding
{ {
@ -216,7 +223,8 @@ struct MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
DataSet dataset = DataSet dataset =
group->createDataSet("Scan Parameters", strdatatype, dataspace); group->createDataSet("Scan Parameters", strdatatype, dataspace);
dataset.write(sls::ToString(scanParams), strdatatype); sls::strcpy_safe(c, sls::ToString(scanParams));
dataset.write(c, strdatatype);
} }
// Total Frames // Total Frames
{ {
@ -232,7 +240,8 @@ struct MasterAttributes {
DataSpace dataspace = DataSpace(H5S_SCALAR); DataSpace dataspace = DataSpace(H5S_SCALAR);
DataSet dataset = DataSet dataset =
group->createDataSet("Additional JSON Header", strdatatype, dataspace); group->createDataSet("Additional JSON Header", strdatatype, dataspace);
dataset.write(sls::ToString(additionalJsonHeader), strdatatype); sls::strcpy_safe(c, sls::ToString(additionalJsonHeader));
dataset.write(c, strdatatype);
} }
}; };
@ -241,7 +250,10 @@ struct MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
DataSet dataset = DataSet dataset =
group->createDataSet("Exposure Time", strdatatype, dataspace); group->createDataSet("Exposure Time", strdatatype, dataspace);
dataset.write(sls::ToString(exptime), strdatatype); char c[1024];
memset(c, 0, sizeof(c));
sls::strcpy_safe(c, sls::ToString(exptime));
dataset.write(c, strdatatype);
}; };
void WriteHDF5Period(H5File *fd, Group *group) { void WriteHDF5Period(H5File *fd, Group *group) {
@ -249,7 +261,10 @@ struct MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
DataSet dataset = DataSet dataset =
group->createDataSet("Acquisition Period", strdatatype, dataspace); group->createDataSet("Acquisition Period", strdatatype, dataspace);
dataset.write(sls::ToString(period), strdatatype); char c[1024];
memset(c, 0, sizeof(c));
sls::strcpy_safe(c, sls::ToString(period));
dataset.write(c, strdatatype);
}; };
void WriteHDF5DynamicRange(H5File *fd, Group *group) { void WriteHDF5DynamicRange(H5File *fd, Group *group) {
@ -261,7 +276,8 @@ struct MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
Attribute attribute = Attribute attribute =
dataset.createAttribute("Unit", strdatatype, dataspaceAttr); dataset.createAttribute("Unit", strdatatype, dataspaceAttr);
attribute.write(strdatatype, std::string("bits")); char c[1024] = "bits";
attribute.write( strdatatype, c);
}; };
void WriteHDF5TenGiga(H5File *fd, Group *group) { void WriteHDF5TenGiga(H5File *fd, Group *group) {
@ -371,6 +387,8 @@ class EigerMasterAttributes : public MasterAttributes {
MasterAttributes::WriteHDF5TenGiga(fd, group); MasterAttributes::WriteHDF5TenGiga(fd, group);
MasterAttributes::WriteHDF5Exptime(fd, group); MasterAttributes::WriteHDF5Exptime(fd, group);
MasterAttributes::WriteHDF5Period(fd, group); MasterAttributes::WriteHDF5Period(fd, group);
char c[1024];
memset(c, 0, sizeof(c));
// threshold // threshold
{ {
DataSpace dataspace = DataSpace(H5S_SCALAR); DataSpace dataspace = DataSpace(H5S_SCALAR);
@ -381,7 +399,8 @@ class EigerMasterAttributes : public MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
Attribute attribute = Attribute attribute =
dataset.createAttribute("Unit", strdatatype, dataspaceAttr); dataset.createAttribute("Unit", strdatatype, dataspaceAttr);
attribute.write(strdatatype, std::string("eV")); sls::strcpy_safe(c, "eV");
attribute.write(strdatatype, c);
} }
// SubExptime // SubExptime
{ {
@ -389,7 +408,8 @@ class EigerMasterAttributes : public MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
DataSet dataset = group->createDataSet("Sub Exposure Time", DataSet dataset = group->createDataSet("Sub Exposure Time",
strdatatype, dataspace); strdatatype, dataspace);
dataset.write(sls::ToString(subExptime), strdatatype); sls::strcpy_safe(c, sls::ToString(subExptime));
dataset.write(c, strdatatype);
} }
// SubPeriod // SubPeriod
{ {
@ -397,7 +417,8 @@ class EigerMasterAttributes : public MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
DataSet dataset = DataSet dataset =
group->createDataSet("Sub Period", strdatatype, dataspace); group->createDataSet("Sub Period", strdatatype, dataspace);
dataset.write(sls::ToString(subPeriod), strdatatype); sls::strcpy_safe(c, sls::ToString(subPeriod));
dataset.write(c, strdatatype);
} }
// Quad // Quad
{ {
@ -419,7 +440,8 @@ class EigerMasterAttributes : public MasterAttributes {
StrType strdatatype(PredType::C_S1, 1024); StrType strdatatype(PredType::C_S1, 1024);
DataSet dataset = group->createDataSet("Rate Corrections", DataSet dataset = group->createDataSet("Rate Corrections",
strdatatype, dataspace); strdatatype, dataspace);
dataset.write(sls::ToString(ratecorr), strdatatype); sls::strcpy_safe(c, sls::ToString(ratecorr));
dataset.write(c, strdatatype);
} }
}; };
#endif #endif
@ -462,6 +484,8 @@ class Mythen3MasterAttributes : public MasterAttributes {
MasterAttributes::WriteHDF5DynamicRange(fd, group); MasterAttributes::WriteHDF5DynamicRange(fd, group);
MasterAttributes::WriteHDF5TenGiga(fd, group); MasterAttributes::WriteHDF5TenGiga(fd, group);
MasterAttributes::WriteHDF5Period(fd, group); MasterAttributes::WriteHDF5Period(fd, group);
char c[1024];
memset(c, 0, sizeof(c));
// Counter Mask // Counter Mask
{ {
DataSpace dataspace = DataSpace(H5S_SCALAR); DataSpace dataspace = DataSpace(H5S_SCALAR);
@ -475,7 +499,8 @@ class Mythen3MasterAttributes : public MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
DataSet dataset = DataSet dataset =
group->createDataSet("Exposure Time1", strdatatype, dataspace); group->createDataSet("Exposure Time1", strdatatype, dataspace);
dataset.write(sls::ToString(exptime1), strdatatype); sls::strcpy_safe(c, sls::ToString(exptime1));
dataset.write(c, strdatatype);
} }
// Exptime2 // Exptime2
{ {
@ -483,7 +508,8 @@ class Mythen3MasterAttributes : public MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
DataSet dataset = DataSet dataset =
group->createDataSet("Exposure Time2", strdatatype, dataspace); group->createDataSet("Exposure Time2", strdatatype, dataspace);
dataset.write(sls::ToString(exptime2), strdatatype); sls::strcpy_safe(c, sls::ToString(exptime2));
dataset.write(c, strdatatype);
} }
// Exptime3 // Exptime3
{ {
@ -491,7 +517,8 @@ class Mythen3MasterAttributes : public MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
DataSet dataset = DataSet dataset =
group->createDataSet("Exposure Time3", strdatatype, dataspace); group->createDataSet("Exposure Time3", strdatatype, dataspace);
dataset.write(sls::ToString(exptime3), strdatatype); sls::strcpy_safe(c, sls::ToString(exptime3));
dataset.write(c, strdatatype);
} }
// GateDelay1 // GateDelay1
{ {
@ -499,7 +526,8 @@ class Mythen3MasterAttributes : public MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
DataSet dataset = DataSet dataset =
group->createDataSet("Gate Delay1", strdatatype, dataspace); group->createDataSet("Gate Delay1", strdatatype, dataspace);
dataset.write(sls::ToString(gateDelay1), strdatatype); sls::strcpy_safe(c, sls::ToString(gateDelay1));
dataset.write(c, strdatatype);
} }
// GateDelay2 // GateDelay2
{ {
@ -507,7 +535,8 @@ class Mythen3MasterAttributes : public MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
DataSet dataset = DataSet dataset =
group->createDataSet("Gate Delay2", strdatatype, dataspace); group->createDataSet("Gate Delay2", strdatatype, dataspace);
dataset.write(sls::ToString(gateDelay2), strdatatype); sls::strcpy_safe(c, sls::ToString(gateDelay2));
dataset.write(c, strdatatype);
} }
// GateDelay3 // GateDelay3
{ {
@ -515,7 +544,8 @@ class Mythen3MasterAttributes : public MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
DataSet dataset = DataSet dataset =
group->createDataSet("Gate Delay3", strdatatype, dataspace); group->createDataSet("Gate Delay3", strdatatype, dataspace);
dataset.write(sls::ToString(gateDelay3), strdatatype); sls::strcpy_safe(c, sls::ToString(gateDelay3));
dataset.write(c, strdatatype);
} }
// Gates // Gates
{ {
@ -530,7 +560,8 @@ class Mythen3MasterAttributes : public MasterAttributes {
StrType strdatatype(PredType::C_S1, 1024); StrType strdatatype(PredType::C_S1, 1024);
DataSet dataset = group->createDataSet("Threshold Energies", DataSet dataset = group->createDataSet("Threshold Energies",
strdatatype, dataspace); strdatatype, dataspace);
dataset.write(sls::ToString(thresholdAllEnergyeV), strdatatype); sls::strcpy_safe(c, sls::ToString(thresholdAllEnergyeV));
dataset.write(c, strdatatype);
} }
}; };
#endif #endif
@ -562,7 +593,10 @@ class Gotthard2MasterAttributes : public MasterAttributes {
StrType strdatatype(PredType::C_S1, 256); StrType strdatatype(PredType::C_S1, 256);
DataSet dataset = DataSet dataset =
group->createDataSet("Burst Mode", strdatatype, dataspace); group->createDataSet("Burst Mode", strdatatype, dataspace);
dataset.write(sls::ToString(burstMode), strdatatype); char c[1024];
memset(c, 0, sizeof(c));
sls::strcpy_safe(c, sls::ToString(burstMode));
dataset.write(c, strdatatype);
} }
}; };
#endif #endif