70 lines
2.5 KiB
Python
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']
|