dylab/HelperClasses/Camera.py
2022-07-30 21:50:53 +02:00

70 lines
2.5 KiB
Python

class c11440_36u(dict):
class ConstError(TypeError):
pass
class DataError(TypeError):
pass
def __setitem__(self, name, value):
if name in self.__dict__:
raise self.ConstError("Can't change const %s" % name)
super().__setitem__(name, value)
self.__dict__[name] = value
def __getattr__(self, name):
return self[name]
def __dir__(self):
return sorted(self)
def __init__(self, wavelength):
super().__init__()
self['pixel_size_V'] = 5.86e-6
self['pixel_size_H'] = 5.86e-6
self['pixel_num_H'] = 1920
self['pixel_num_v'] = 1200
# Measured quantum efficiency @ 421nm
# original measurement data is in our shared folder for data
# Data\Measurements\2022\05\23\camera\qe\
if 420e-9 < wavelength < 422e-9:
self['quantum_efficiency'] = 0.639714338817604
self['quantum_efficiency_std'] = 0.021405684133816
# Measured quantum efficiency @ 626nm
# original measurement data is in our shared folder for data
# Data\Measurements\2022\05\24\camera\qe_626\
if 625e-9 < wavelength < 627e-9:
self['quantum_efficiency'] = 0.516529105247143
self['quantum_efficiency_std'] = 0.023114728382457
if self['quantum_efficiency'] is None:
raise self.DataError("Lack for quantum efficiency data at specified wavelength")
self['full_well_capacity'] = 33000
self['reading_to_electron'] = self['full_well_capacity'] / 4095
self['electron_to_reading'] = 4095 / self['full_well_capacity']
self['reading_to_photon'] = self['quantum_efficiency'] * self['reading_to_electron']
self['photon_to_reading'] = self['electron_to_reading'] / self['quantum_efficiency']
self['noise_RMS'] = 6.6
self['noise_RMS_measure'] = 6.458
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
pass
# A function convert the setting value of analog gain to amplification factor in times
def analog_gain_factor(self, setting_value):
return 10**(setting_value * 0.1 / 20)
def reading2electron(self, reading_value):
return reading_value * self['reading_to_electron']
def electron2reading(self, electron_num):
return electron_num * self['electron_to_reading']
def reading2photon(self, reading_value):
return reading_value * self['reading_to_photon']