JFConversionFloatingPoint: Integrate other bit depths/signs
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user