def multi_readout_analyze(folder, ccd_height = 100., plot = True, freq = None): """Analyze several readout measurements in different files for readout diagnosys The readout files in dm3 format must be contained in a folder, preferentely numered in the order of acquisition. Parameters ---------- folder : string Folder where the dm3 readout files are stored ccd_heigh : float plot : bool freq : float Frequency of the camera Returns ------- Dictionary """ from spectrum import Spectrum files = glob.glob1(folder, '*.nc') if not files: files = glob.glob1(folder, '*.dm3') spectra = [] variances = [] binnings = [] for f in files: print os.path.join(folder,f) s = Spectrum(os.path.join(folder,f)) variance, channel_mean, norm_time_mean = analyze_readout(s) s.readout_analysis = {} s.readout_analysis['variance'] = variance.mean() s.readout_analysis['pattern'] = channel_mean s.readout_analysis['time'] = norm_time_mean if not hasattr(s,'binning'): s.binning = float(os.path.splitext(f)[0][1:]) if freq: s.readout_frequency = freq s.ccd_height = ccd_height s.save(f) spectra.append(s) binnings.append(s.binning) variances.append(variance.mean()) pixels = ccd_height / np.array(binnings) plt.scatter(pixels, variances, label = 'data') fit = np.polyfit(pixels, variances,1, full = True) if plot: x = np.linspace(0,pixels.max(),100) y = x*fit[0][0] + fit[0][1] plt.plot(x,y, label = 'linear fit') plt.xlabel('number of pixels') plt.ylabel('variance') plt.legend(loc = 'upper left') print "Variance = %s * pixels + %s" % (fit[0][0], fit[0][1]) dictio = {'pixels': pixels, 'variances': variances, 'fit' : fit, 'spectra' : spectra} return dictio
def multi_readout_analyze(folder, ccd_height=100., plot=True, freq=None): """Analyze several readout measurements in different files for readout diagnosys The readout files in dm3 format must be contained in a folder, preferentely numered in the order of acquisition. Parameters ---------- folder : string Folder where the dm3 readout files are stored ccd_heigh : float plot : bool freq : float Frequency of the camera Returns ------- Dictionary """ from spectrum import Spectrum files = glob.glob1(folder, '*.nc') if not files: files = glob.glob1(folder, '*.dm3') spectra = [] variances = [] binnings = [] for f in files: print os.path.join(folder, f) s = Spectrum(os.path.join(folder, f)) variance, channel_mean, norm_time_mean = analyze_readout(s) s.readout_analysis = {} s.readout_analysis['variance'] = variance.mean() s.readout_analysis['pattern'] = channel_mean s.readout_analysis['time'] = norm_time_mean if not hasattr(s, 'binning'): s.binning = float(os.path.splitext(f)[0][1:]) if freq: s.readout_frequency = freq s.ccd_height = ccd_height s.save(f) spectra.append(s) binnings.append(s.binning) variances.append(variance.mean()) pixels = ccd_height / np.array(binnings) plt.scatter(pixels, variances, label='data') fit = np.polyfit(pixels, variances, 1, full=True) if plot: x = np.linspace(0, pixels.max(), 100) y = x * fit[0][0] + fit[0][1] plt.plot(x, y, label='linear fit') plt.xlabel('number of pixels') plt.ylabel('variance') plt.legend(loc='upper left') print "Variance = %s * pixels + %s" % (fit[0][0], fit[0][1]) dictio = { 'pixels': pixels, 'variances': variances, 'fit': fit, 'spectra': spectra } return dictio