# 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 use_bpm = False if get_exec_pars().source == CommandSource.ui: phi1= 95.0 phi2 = 100.0 dphi = 1.0 settling_time = 0.1 plot_image = False number_images = 5 use_background = True multiple_background = False number_backgrounds = 5 do_elog = False centroid_excursion_plot = True else: centroid_excursion_plot = False #from camtool import CamTool run("camtool") #from ImageStats import ImageStats, get_simulated_source #from BpmStats import BpmStats laser_was_on = is_laser_on() original_phase = gun_phase.read() multiple_background = multiple_background and use_background print "Parameters: ", phi1, phi2, dphi, settling_time, plot_image, number_images, use_background, multiple_background, number_backgrounds plot_name = datetime.datetime.fromtimestamp(time.time()).strftime('%H%M%S') if (use_bpm): add_device(BpmStats("image_stats", "SINEG01-DBPM340"), True) use_background = False multiple_background = False else: latch = True if get_device("image_stats") is None: print "Instantiating camtool" add_device(CamTool("image_stats", prefix = "SINEG01-DSCR190:", latch = True, camera = "SINEG01-DSCR190"), True) if (image_stats.latch): image_stats.start() #add_device(ImageStats("image_stats", get_simulated_source(image)), True) image_stats.setNumberOfImages(max(number_images,1)) image_stats.enableBackground (use_background) if use_background: laser_off() if not multiple_background: image_stats.captureBackground(number_backgrounds) # Switch off magnets mag = [ "SINEG01-MCRX120","SINEG01-MCRY120", "SINEG01-MQUA140", "SINEG01-MQUA150", "SINEG01-MCRX160","SINEG01-MCRY160", "SINEG01-MCRX180","SINEG01-MCRY180", "SINEG01-MCRX200","SINEG01-MCRY200", "SINEG01-MCRX220","SINEG01-MCRY220", "SINEG01-MQUA310", "SINEG01-MQUA320" ] #switch_off_magnets(mag) # add here gun phase setting see wiki page def before_sample(): if multiple_background: image_stats.captureBackground(number_backgrounds) laser_on() image_stats.update() def after_sample(): if multiple_background: laser_off() r = None if not multiple_background: laser_on() try: #sensors = [image_stats.com_x, image_stats.com_y] sensors = [image_stats.com_x_mean, image_stats.com_y_mean, image_stats.com_x_stdev, image_stats.com_y_stdev] if plot_image: sensors.append(image_stats.image) r = lscan(gun_phase, sensors , phi1, phi2, dphi, settling_time, before_read = before_sample, after_read = after_sample) finally: pass #image_stats.stop() gun_phase.write(original_phase) 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) + " Background: enabled=" + str(use_background) + " multiple=" + str(multiple_background) + " number=" + str(number_backgrounds) gsa_log_msg = gsa_log_msg + "\nPhase range: " + str(phi1) + " to " + str(phi2) gsa_log_msg = gsa_log_msg + "\nLaser position on cathod: " + str(caget("SLG-LCAM-C103:FIT-XPOS")) + "/" + str(caget("SLG-LCAM-C103:FIT-YPOS")) gsa_log_msg = gsa_log_msg + "\n\n" + r.print() if do_elog: elog("Laser alignment with phase scan", gsa_log_msg , get_plot_snapshots()) _=[r, hx, hy] set_return([r, hx, hy])