def saveDetectorCalibration(master_loop, detCalib, config, verbose=False, beta=0): # Concatenate the list of all calibration data calibValues = np.concatenate(master_loop.calibValues, axis=0) print 'calibValues', calibValues # Check the data that is not NAN #I = np.isfinite(calibValues.sum(axis=1)) #print 'mask', I ## average the finite values #average = calibValues[I,:].mean(axis=0) average = np.array([ np.nan if np.all(np.isnan(det)) else det[np.isfinite(det)].mean() for det in calibValues.T ]) print 'average', average #factors = average[config.boolFitMask].max()/average params = cookie_box.initial_params() params['A'].value = 1 params['beta'].value = beta params['tilt'].value = 0 params['linear'].value = 1 phi = np.linspace(0, 2 * np.pi, 16, endpoint=False) factors = cookie_box.model_function(params, phi) / average factors /= factors[np.isfinite(factors)].max() factors[~config.boolFitMask] = np.nan if verbose: print len(calibValues) print master_loop.calibValues[0].shape print calibValues.shape print average print 'Calibration factors:', factors calibFile = ( detCalib.path + '/' + detCalib.name + '{}.txt'.format(detCalib.fileNumber + 1 if np.isfinite(detCalib.fileNumber) else '')) np.savetxt(calibFile, factors)
def saveDetectorCalibration(master_loop, detCalib, config, verbose=False, beta=0): # Concatenate the list of all calibration data calibValues = np.concatenate(master_loop.calibValues, axis=0) print 'calibValues', calibValues # Check the data that is not NAN #I = np.isfinite(calibValues.sum(axis=1)) #print 'mask', I ## average the finite values #average = calibValues[I,:].mean(axis=0) average = np.array([np.nan if np.all(np.isnan(det)) else det[np.isfinite(det)].mean() for det in calibValues.T]) print 'average', average #factors = average[config.boolFitMask].max()/average params = cookie_box.initial_params() params['A'].value = 1 params['beta'].value = beta params['tilt'].value = 0 params['linear'].value = 1 phi = np.linspace(0, 2*np.pi, 16, endpoint=False) factors = cookie_box.model_function(params, phi) / average factors /= factors[np.isfinite(factors)].max() factors[~config.boolFitMask] = np.nan if verbose: print len(calibValues) print master_loop.calibValues[0].shape print calibValues.shape print average print 'Calibration factors:', factors calibFile = (detCalib.path + '/' + detCalib.name + '{}.txt'.format( detCalib.fileNumber+1 if np.isfinite(detCalib.fileNumber) else '' ) ) np.savetxt(calibFile, factors)
ax.set_xlim(220, 245) plt.tight_layout() # %% try: angular_plot = plt.figure('Angular') angular_plot.clf() except: pass angular_plot, angular_axis_array = plt.subplots(1, 2, subplot_kw={'polar': True}, num='Angular') phi = cookie_box.phi_rad phi_line = np.linspace(0, 2*np.pi, 2**8) norm_params = cookie_box.initial_params() norm_params['A'].value = 1 norm_params['beta'].value = 2 norm_params['beta'].vary = False norm_params['tilt'].value = 0 norm_params['tilt'].vary = False norm_params['linear'].value = 1 norm_params['linear'].vary = False lmfit.minimize(cookie_box.model_function, norm_params, args=(phi, photo_signals_average_corrected[285] * auger_factors[285])) beta2_factors = (cookie_box.model_function(norm_params, phi) / (photo_signals_average_corrected[285] * auger_factors[285]))
def get_event_data(config, scales, detCalib, cb, args, epics, verbose=False): if verbose: print 'Rank {} grabbing data.'.format(rank) data = np.zeros(dSize, dtype=float) # Get the time amplitudes time_amplitudes = cb.get_time_amplitudes_filtered() # If there is a None in the data, some axqiris trace is missing if None in time_amplitudes: # Don't try to pull any more data from this event print 'Rank {} detected None in time amplitude.'.format(rank) return None # This construction can handle traces of different length data[dTraces] = np.nan length = (dTraces.stop - dTraces.start) / 16 #print 'length =', length #print data.shape, dTraces.start, dTraces.stop start = dTraces.start for t_sig in time_amplitudes: if t_sig is None: return None #print len(t_sig) #print start, start+len(t_sig) #print data.shape, data[dTraces].shape data[start : start + len(t_sig)] = t_sig start += length # Get the intensities # Roi 0 base information (photoline) data[dIntRoi0] = np.array([np.sum(trace) for trace in cb.get_time_amplitudes_filtered(roi=0)]) # Use roi 2 for backgorud subtraction, could be commented out to not do # subtraction... data[dIntRoi0] -= (np.array([np.sum(trace) for trace in cb.get_time_amplitudes_filtered(roi=2)]) * scales.tRoi0BgFactors) # Rescale the data for roi 0 data[dIntRoi0] *= config.nanFitMask * detCalib.factors # Get roi 1 imformation (auger line) data[dIntRoi1] = (np.array([np.sum(trace) for trace in cb.get_time_amplitudes_filtered(roi=1)]) * detCalib.factors * config.nanFitMask) # Get the initial fit parameters #params = cookie_box.initial_params(evt_data.intRoi0[-1]) params = cookie_box.initial_params() params['A'].value, params['linear'].value, params['tilt'].value = \ cb.proj.solve(data[dIntRoi0], args.beta) # Lock the beta parameter params['beta'].value = args.beta params['beta'].vary = False #print params['A'].value, params['linear'].value, params['tilt'].value # Perform the fit #print scales.angles[config.boolFitMask] #print evt_data.intRoi0[-1][config.boolFitMask] res = lmfit.minimize( cookie_box.model_function, params, args=(scales.angles[config.boolFitMask], data[dIntRoi0][config.boolFitMask]), method='leastsq') #print params['A'].value, params['linear'].value, params['tilt'].value #lmfit.report_fit(params) # Store the values data[dPol] = np.array([params['A'].value, params['A'].stderr, params['beta'].value, params['beta'].stderr, params['tilt'].value, params['tilt'].stderr, params['linear'].value, params['linear'].stderr]) # Get the energy traces data[d_energy_trace] = np.mean([trace for trace, test in zip(cb.get_energy_amplitudes(), config.energy_spectrum_mask) if test], axis=0) # Get the photon energy center and width if args.photonEnergy != 'no': data[dEnergy] = cb.getPhotonEnergy(energyShift=args.energyShift) # Get lcls parameters data[dEL3] = lcls.getEBeamEnergyL3_MeV() data[dFEE] = lcls.getPulseEnergy_mJ() # timing information data[dFiducials] = lcls.getEventFiducial() data[dTime] = lcls.getEventTime() data[dDeltaK] = epics.value('USEG:UND1:3350:KACT') data[dDeltaEnc] = np.array( [epics.value('USEG:UND1:3350:{}:ENC'.format(i)) for i in range(1,5)]) return data
plt.tight_layout() # %% try: angular_plot = plt.figure('Angular') angular_plot.clf() except: pass angular_plot, angular_axis_array = plt.subplots(1, 2, subplot_kw={'polar': True}, num='Angular') phi = cookie_box.phi_rad phi_line = np.linspace(0, 2 * np.pi, 2**8) norm_params = cookie_box.initial_params() norm_params['A'].value = 1 norm_params['beta'].value = 2 norm_params['beta'].vary = False norm_params['tilt'].value = 0 norm_params['tilt'].vary = False norm_params['linear'].value = 1 norm_params['linear'].vary = False lmfit.minimize(cookie_box.model_function, norm_params, args=(phi, photo_signals_average_corrected[285])) beta2_factors = (cookie_box.model_function(norm_params, phi) / photo_signals_average_corrected[285]) I_fit = np.ones(16, dtype=bool)
def get_event_data(config, scales, detCalib, cb, args, epics, verbose=False): if verbose: print 'Rank {} grabbing data.'.format(rank) data = np.zeros(dSize, dtype=float) # Get the time amplitudes time_amplitudes = cb.get_time_amplitudes_filtered() # If there is a None in the data, some axqiris trace is missing if None in time_amplitudes: # Don't try to pull any more data from this event print 'Rank {} detected None in time amplitude.'.format(rank) return None # This construction can handle traces of different length data[dTraces] = np.nan length = (dTraces.stop - dTraces.start) / 16 #print 'length =', length #print data.shape, dTraces.start, dTraces.stop start = dTraces.start for t_sig in time_amplitudes: if t_sig is None: return None #print len(t_sig) #print start, start+len(t_sig) #print data.shape, data[dTraces].shape data[start:start + len(t_sig)] = t_sig start += length # Get the intensities # Roi 0 base information (photoline) data[dIntRoi0] = np.array( [np.sum(trace) for trace in cb.get_time_amplitudes_filtered(roi=0)]) # Use roi 2 for backgorud subtraction, could be commented out to not do # subtraction... data[dIntRoi0] -= (np.array( [np.sum(trace) for trace in cb.get_time_amplitudes_filtered(roi=2)]) * scales.tRoi0BgFactors) # Rescale the data for roi 0 data[dIntRoi0] *= config.nanFitMask * detCalib.factors # Get roi 1 imformation (auger line) data[dIntRoi1] = (np.array( [np.sum(trace) for trace in cb.get_time_amplitudes_filtered(roi=1)]) * detCalib.factors * config.nanFitMask) # Get the initial fit parameters #params = cookie_box.initial_params(evt_data.intRoi0[-1]) params = cookie_box.initial_params() params['A'].value, params['linear'].value, params['tilt'].value = \ cb.proj.solve(data[dIntRoi0], args.beta) # Lock the beta parameter params['beta'].value = args.beta params['beta'].vary = False #print params['A'].value, params['linear'].value, params['tilt'].value # Perform the fit #print scales.angles[config.boolFitMask] #print evt_data.intRoi0[-1][config.boolFitMask] res = lmfit.minimize(cookie_box.model_function, params, args=(scales.angles[config.boolFitMask], data[dIntRoi0][config.boolFitMask]), method='leastsq') #print params['A'].value, params['linear'].value, params['tilt'].value #lmfit.report_fit(params) # Store the values data[dPol] = np.array([ params['A'].value, params['A'].stderr, params['beta'].value, params['beta'].stderr, params['tilt'].value, params['tilt'].stderr, params['linear'].value, params['linear'].stderr ]) # Get the energy traces data[d_energy_trace] = np.mean([ trace for trace, test in zip(cb.get_energy_amplitudes(), config.energy_spectrum_mask) if test ], axis=0) # Get the photon energy center and width if args.photonEnergy != 'no': data[dEnergy] = cb.getPhotonEnergy(energyShift=args.energyShift) # Get lcls parameters data[dEL3] = lcls.getEBeamEnergyL3_MeV() data[dFEE] = lcls.getPulseEnergy_mJ() # timing information data[dFiducials] = lcls.getEventFiducial() data[dTime] = lcls.getEventTime() data[dDeltaK] = epics.value('USEG:UND1:3350:KACT') data[dDeltaEnc] = np.array( [epics.value('USEG:UND1:3350:{}:ENC'.format(i)) for i in range(1, 5)]) return data
def updatePlot(figs): socket.recv() data = socket.recv_pyobj(zmq.NOBLOCK) # we've got data, see if it is the most recent while 1: try: socket.recv(zmq.NOBLOCK) data = socket.recv_pyobj() # if we get here with no exception there was # more data print '*** throw away data' continue except zmq.error.Again: print '*** got last data' break if verbose: print 'Data contains:' for k, v in data.iteritems(): print '\n\t{} of type {}'.format(k, type(v)), if isinstance(v, dict): print 'with components:' for k2, v2 in v.iteritems(): print '\t\t{} of type {}'.format(k2, type(v2)), if isinstance(v2, list): print 'of length {}.'.format(len(v2)) print '\t\t\tlengths = (', for elem in v2: try: print '{},'.format(len(elem)), except: pass print ')' elif isinstance(v2, np.ndarray): print 'of shape {}.'.format(v2.shape) else: print '' else: print '' #try: # print 'polar:roi0 =', data['polar']['roi0'] # print 'polar:roi1 =', data['polar']['roi1'] #except: # pass #try: # print 'err_degree = ', data['strip'][1][:,7] #except: # pass plotKey = 'polar' if plotKey in data.keys(): d = data[plotKey] ax = figs[1].axes[0] lines = ax.lines for l, roi in enumerate(['roi0', 'roi1']): if roi in d.keys(): try: lines[l].set_ydata(d[roi]/d[roi][ np.isfinite(d[roi]) ].max()) except: print 'Data error' # The fit in figure 2 params = cookie_box.initial_params() for k in params: params[k].value = d[k] try: params['A'].value /= d['roi0'][ np.isfinite(d['roi0']) ].max() except: params['A'].value = 0 lines[2].set_ydata(cookie_box.model_function(params, angle)) if args.beta != None: params['beta'].value = args.beta params['linear'].value = 1.0 params['tilt'].value = 0 y = cookie_box.model_function(params, angle) lines[3].set_ydata(y/y.max()) ax.relim() ax.autoscale_view() figs[1].canvas.draw() plotKey = 'strip' if plotKey in data.keys(): ax = figs[2].axes[0] ax.cla() ax.set_title('Degree of linear polarization.') storage['fiducial'].extend( data[plotKey][0] ) storage['degree'].extend( data[plotKey][1][:,6] ) storage['err_degree'].extend( data[plotKey][1][:,7] ) storage['tilt'].extend( data[plotKey][1][:,4] ) storage['err_tilt'].extend( data[plotKey][1][:,5] ) #storage['intFull'].extend(data[plotKey][2]) storage['intRoi0'].extend(data[plotKey][2]) #storage['intRoi1'].extend(data[plotKey][4]) #ax.plot(storage['fiducial'], storage['degree'],'.') #plt.sca(ax) if args.errors: ax.errorbar(np.array(storage['fiducial']), np.array(storage['degree']), np.array(storage['err_degree']), linestyle='', marker='.', capsize=0) else: ax.plot(np.array(storage['fiducial']), np.array(storage['degree']), linestyle='', marker='.') if args.a: ax.relim() ax.autoscale_view() else: ax.set_ylim(-0.4, 1.4) #ax.plot(data[plotKey][0], data[plotKey][1][:,6], '.b') #ax.errorbar(data[plotKey][0], data[plotKey][1][:,6], # data[plotKey][1][:,7], ls='None', color='b') #ax.relim() #ax.autoscale_view() #ax.ylim ax = figs[2].axes[1] ax.cla() ax.set_title('Polarization tilt') if args.errors: ax.errorbar(np.array(storage['fiducial']), np.array(storage['tilt']), np.array(storage['err_tilt']), linestyle='', marker='.', capsize=0) else: ax.plot(np.array(storage['fiducial']), np.array(storage['tilt'])*180/np.pi, linestyle='', marker='.') if args.a: ax.relim() ax.autoscale_view() else: ax.set_ylim(-90, 90) #ax.errorbar(data[plotKey][0], data[plotKey][1][:,4], # data[plotKey][1][:,5], ls='None', color='b') ax = figs[2].axes[2] ax.cla() ax.set_title('Photoline intensity') ax.plot(np.array(storage['fiducial']), np.array(storage['intRoi0']), '.') ax.relim() ax.autoscale_view() min_value, _ = ax.get_ylim() ax.set_ylim(bottom=np.minimum(min_value, 0)) figs[2].canvas.draw() plotKey = 'traces' if plotKey in data.keys(): plot = data[plotKey] for i, ax in enumerate(figs[0].axes): lines = ax.lines if 'timeScale' in plot.keys(): lines[raw].set_xdata(data[plotKey]['timeScale'][i]) lines[filt].set_xdata(data[plotKey]['timeScale'][i]) if 'timeScaleRoi0' in plot.keys(): lines[roi0].set_xdata(data[plotKey]['timeScaleRoi0'][i]) if 'timeScaleRoi1' in plot.keys(): lines[roi1].set_xdata(data[plotKey]['timeScaleRoi1'][i]) if 'timeRaw' in plot.keys(): lines[raw].set_ydata(plot['timeRaw'][i]) if 'timeFiltered' in plot.keys(): lines[filt].set_ydata(plot['timeFiltered'][i]) if 'timeRoi0' in plot.keys(): lines[roi0].set_ydata(plot['timeRoi0'][i]) if 'timeRoi1' in plot.keys(): lines[roi1].set_ydata(plot['timeRoi1'][i]) ax.relim() ax.autoscale_view() figs[0].canvas.draw() plotKey = 'spectrum' if plotKey in data.keys(): plotData = data[plotKey] ax = figs[3].axes[0] l = ax.lines[0] l.set_xdata(plotData['energyScale']) l.set_ydata(plotData['energyAmplitude']) l = ax.lines[1] l.set_xdata(plotData['energyScaleRoi0']) l.set_ydata(plotData['energyAmplitudeRoi0']) ax.relim() ax.autoscale_view() ax.figure.canvas.draw()