JFConversionFloatingPoint: Integrate other bit depths/signs

This commit is contained in:
2023-11-07 15:36:49 +01:00
parent be546e9f76
commit 2dfd878d01
5 changed files with 184 additions and 17 deletions
+31 -1
View File
@@ -6,6 +6,29 @@ JFConversionFloatingPoint::JFConversionFloatingPoint()
: gain_g0(RAW_MODULE_SIZE), gain_g1(RAW_MODULE_SIZE), gain_g2(RAW_MODULE_SIZE),
pedestal_g0(RAW_MODULE_SIZE), pedestal_g1(RAW_MODULE_SIZE), pedestal_g2(RAW_MODULE_SIZE) {}
JFConversionFloatingPoint::JFConversionFloatingPoint(const DiffractionExperiment &experiment) : JFConversionFloatingPoint() {
summation = experiment.GetSummation();
pixel_signed = experiment.IsPixelSigned();
if (experiment.GetPixelDepth() == 2) {
if (pixel_signed) {
err_pixel = INT16_MIN;
overload_pixel = INT16_MAX;
} else {
err_pixel = UINT16_MAX;
overload_pixel = UINT16_MAX - 1;
}
} else if (experiment.GetPixelDepth() == 4) {
if (pixel_signed) {
err_pixel = INT32_MIN;
overload_pixel = INT32_MAX;
} else {
err_pixel = UINT32_MAX;
overload_pixel = UINT32_MAX - 1;
}
}
}
inline double one_over_gain_energy(double gain_factor, double energy) {
double tmp = gain_factor * energy;
if (!std::isfinite(tmp) || (tmp == 0.0))
@@ -115,8 +138,15 @@ void JFConversionFloatingPoint::ConvertFP(double *dest, const uint16_t *source)
break;
}
if (summation > 1)
expected *= summation;
if ((expected > overload_pixel) && !special_val)
expected = overload_pixel;
dest[i] = expected;
if ((!pixel_signed) && (expected < 0))
dest[i] = 0;
else
dest[i] = expected;
}
}