+@splittableKwargsFunction()
+def Vzp_bits2nm(data_bits, zpGain=config.zpGain,
+ zpSensitivity=config.zpSensitivity,
+ Vzp_out2V=config.Vzp_out2V):
+ scale_Vzp_bits2V = Vzp_out2V(1) - Vzp_out2V(0)
+ data_V = data_bits / scale_Vzp_bits2V
+ # bits / (bits/V) = V
+ data_nm = data_V * zpGain * zpSensitivity
+ return data_nm
+
+@splittableKwargsFunction()
+def Vphoto_bits2V(data_bits, Vphoto_in2V=config.Vphoto_in2V):
+ scale_Vphoto_bits2V = Vphoto_in2V(1) - Vphoto_in2V(0)
+ Vphoto_V = data_bits / scale_Vphoto_bits2V
+ # bits / (bits/V) = V
+ return Vphoto_V
+
+@splittableKwargsFunction((Vzp_bits2nm, 'data_bits'),
+ (Vphoto_bits2V, 'data_bits'))
+def slope_bitspbit2Vpnm(slope_bitspbit, **kwargs):
+ zp_kwargs,photo_kwargs = slope_bitspbit2Vpnm._splitargs(slope_bitspbit2Vpnm, kwargs)
+ Vzp_bits = 1.0
+ Vphoto_bits = slope_bitspbit * Vzp_bits
+ return Vphoto_bits2V(Vphoto_bits, **photo_kwargs)/Vzp_bits2nm(Vzp_bits, **zp_kwargs)
+