#import ch.psi.pshell.epics.ChannelDouble as ChannelDouble import ch.psi.pshell.bs.Scalar as Scalar import ch.psi.pshell.epics.DiscretePositioner as DiscretePositioner import ch.psi.pshell.epics.ChannelDouble as ChannelDouble #Arguments SAMPLES = 100 ICTS = ["SINEG01-DICT215", "S10DI01-DICT025", "SARMA01-DICT090", "SARBD01-DICT030"] ICTV = ["SINEG01-DICT009:AL1-ICT-VOLTAGE", "S10DI01-DICT113:AL0-ICT-VOLTAGE", "SARMA01-DICT482:AL0-ICT-VOLTAGE","SARBD01-DICT599:AL0-ICT-VOLTAGE"] BPMS = ["SINEG01-DBPM340:Q1", "S10DI01-DBPM110:Q1", "SARMA01-DBPM100:Q1", "SARBD01-DBPM040:Q1", "SARUN20-DBPM070:Q1"] #ROT = ["SLGJG-LMRM-M031:MOT.VAL"] # Polarizer ROT = ["SLGTV-LAPP:SIZE-SET"] # IRIS #RANGE = [50.0, 15.0] #STEP_SIZE = 5.0 RANGE = [4.4, 2.0] # IRIS range STEP_SIZE = 0.1 # IRIS Step size SETTLING_TIME = 3 SIMULATION = False do_elog = True rot_positioners = [] for i in range(len(ROT)): rot_positioners.append( DummyPositioner("rot " + str(i+1)) if SIMULATION else Channel(ROT[i], alias = "rot" + str(i+1))) #Stream creation sensors = [] line_plots = [] st = Stream("pulse_id", dispatcher) st.setFilter("SIN-CVME-TIFGUN-EVR0:BEAMOK == 1") for i in range(len(ICTS)): ict = Scalar("ict" + str(i+1), st, ICTS[i] + ":B1_CHARGE", 1, 0) av = create_averager(ict, SAMPLES, interval = -1) av.setMonitored(i>0) sensors.append(av) sensors.append(av.stdev) sensors.append(av.samples) line_plots.append(av.samples) for i in range(len(BPMS)): bpm = Scalar("bpm" + str(i+1), st, BPMS[i], 1, 0) av1 = create_averager(bpm, SAMPLES, interval = -1) av1.setMonitored((i>0) or (len(ICTS)>0)) sensors.append(av1) sensors.append(av1.stdev) sensors.append(av1.samples) line_plots.append(av1.samples) for i in range(len(ICTV)): """ ictv = Scalar("ictv" + str(i+1), st, ICTV[i], 1, 0) av2 = create_averager(ictv, SAMPLES, interval = -1) av2.setMonitored((i>0) or (len(ICTS)>0)) sensors.append(av2) sensors.append(av2.stdev) sensors.append(av2.samples) """ ictv = ChannelDouble("ictv" + str(i+1), ICTV[i]) add_device(ictv, True) ictv.monitored = True ictv.initialize() av2 = create_averager(ictv, SAMPLES/2 , interval = -1) av2.setMonitored(True) sensors.append(av2) add_device(av2, True) #sensors.append(ictv) #Scalar("beam_ok" , st, "SIN-CVME-TIFGUN-EVR0:BEAMOK" , 1, 0) st.initialize() st.start() st.waitCacheChange(5000) #Wait stream be running before starting scan """ #Averaging aict1 = create_averager(ict1, SAMPLES, interval = -1) aict2 = create_averager(ict2, SAMPLES, interval = -1) aict3 = create_averager(ict3, SAMPLES, interval = -1) aict2.setMonitored(True) aict3.setMonitored(True) """ #Plot setup setup_plotting( line_plots = line_plots) #Metadata set_attribute("/", "Samples" , SAMPLES) set_attribute("/", "StepSize" , STEP_SIZE) set_attribute("/", "SamplingTime" , SETTLING_TIME) set_attribute("/", "Range" , RANGE) set_attribute("/", "ICTS" , ICTS) set_attribute("/", "ICTV" , ICTV) set_attribute("/", "Rot" , ROT) set_attribute("/", "BPM" , BPMS) try: r=lscan(rot_positioners, sensors, [RANGE[0],] * len(rot_positioners), [RANGE[1],] * len(rot_positioners), [STEP_SIZE,] * len(rot_positioners), latency = SETTLING_TIME) #r=bscan(st, 10) finally: st.close() # save the entry in the logbook if do_elog: if get_option("Generated data file:\n" + get_exec_pars().path + "\n\n" + "Save to ELOG?", "YesNo") == "Yes": gsa_log_msg = "Data file: " + get_exec_pars().path gsa_log_msg = gsa_log_msg + "\nSamples = " + str(SAMPLES) gsa_log_msg = gsa_log_msg + "\nStepSize = " + str(STEP_SIZE) gsa_log_msg = gsa_log_msg + "\nSamplingTime = " + str(SETTLING_TIME) gsa_log_msg = gsa_log_msg + "\nRange = " + str(RANGE) gsa_log_msg = gsa_log_msg + "\nICTS = " + str(ICTS) gsa_log_msg = gsa_log_msg + "\nBPM = " + str(BPMS) plots = get_plot_snapshots() save=[] for i in range(len(ICTS)): save.append(plots[3*i]) for i in range(len(BPMS)): save.append(plots[3*i]) elog("Charge scan", gsa_log_msg, save)