# Tool to align the solenoid on the gun. # S. Bettoni, A. Gobbo, D. Voulot # 06/06/2016 #Code ok with the GUI # Procedure: # switch off all the magnets between the gun solenoid and the screen or BPM used for the measurement # change the current of the gun soleoid # look at the centroid position (BPM or screen) downstream of the gun. import datetime mode = "camtool" # "camtool", "bpm" or "direct" camera_name = "simulation" #camera_name = "SLG-LCAM-C041" use_good_region=False if True: #get_exec_pars().source == CommandSource.ui: I1 = 95.0 I2 = 100.0 dI = 1.0 settling_time = 0.1 plot_image = False number_images = 3 use_background = False multiple_background = True number_backgrounds = 3 do_elog = False centroid_excursion_plot = True else: centroid_excursion_plot = False #check_camtool() #laser_was_on = is_laser_on() positioner = DummyPositioner("positioner") original_gun_solenoid = positioner.read() multiple_background = multiple_background and use_background print "Parameters: ", I1, I2, dI, settling_time, plot_image, number_images, use_background, multiple_background, number_backgrounds plot_name = datetime.datetime.fromtimestamp(time.time()).strftime('%H%M%S') if mode == "camtool": if use_background: #laser_off() if not multiple_background: camtool.stop() camtool.grabBackground(camera_name, number_backgrounds) #camtool.stop() #camtool.startPipeline(camera_name, 0, use_background, None, 0.0, None) #camtool.startReceiver(); camtool.start(camera_name, 0, use_background, None, 0.0, None) if camtool.value is not None: print "Started " , camtool.value.getTimestamp() wait_camtool_message() print "OK" else: if mode == "bpm": add_device(BpmStats("image_stats", camera_name), True) else: add_device(ImageStats(PsiCamera("image_stats", camera_name)), True) multiple_background = False use_background = False image_stats.setNumberOfImages(max(number_images,1)) #switch_off_magnets() # add here gun phase setting see wiki page def before_sample(): if mode == "camtool": if multiple_background: camtool.stop() camtool.grabBackground(camera_name, number_backgrounds) camtool.start(camera_name, 0, use_background, None, 0.0, None) #laser_on() wait_camtool_message(number_images) #Wait filing the averager cache else: image_stats.update() def after_sample(): if multiple_background: #laser_off() pass r = None #if not multiple_background: # laser_on() try: if mode == "camtool": print "Getting sensors" sensors = get_camtool_stats(number_images, good_region=use_good_region) print "Sensors ok" if plot_image: sensors.append(camtool.getDataMatrix()) else: sensors = [image_stats.com_x_mean, image_stats.com_y_mean, image_stats.com_x_stdev, image_stats.com_y_stdev] r = lscan(positioner, sensors , I1, I2, dI, settling_time, before_read = before_sample, after_read = after_sample) finally: if mode == "camtool": camtool.stop() #pass positioner.write(original_gun_solenoid) #if laser_was_on: # laser_on() #else: # laser_off() # take the result of the scan and generate convex hull plot if centroid_excursion_plot: (hx,hy)=add_convex_hull_plot ("Centroid excursion", r.getReadable(0),r.getReadable(1), plot_name) else: (hx,hy)= convex_hull(x=r.getReadable(0), y=r.getReadable(1)) hx.append(hx[0]); hy.append(hy[0]) # save the entry in the logbook gsa_log_msg = "Data file: " + get_exec_pars().path gsa_log_msg = gsa_log_msg + "\nImages: " + str(number_images) gsa_log_msg = gsa_log_msg + "\nBackground: enabled=" + str(use_background) + " multiple=" + str(multiple_background) + " number=" + str(number_backgrounds) gsa_log_msg = gsa_log_msg + "\n\n" + r.print() if do_elog: elog("Gun solenoid current scan", gsa_log_msg , get_plot_snapshots()) set_return([r, hx, hy])