A shell script has been developed for sweeping EPICS variables and recording the response. The tool is very flexible and can be used for a variety of tasks during system configuration and operation.
Let's take a look at the usage directions for the script:
Usage: sweep.sh [-p] [-d delay] [-b N] CTRL MONITOR START STEP STOP CTRL - EPICS channel to sweep MONITOR - EPICS channel to record START - Start value for the sweep STEP - Increment step STOP - Stop value for the sweep [-p] - Plot option, uses octave to generate the sweep plot (sweep.eps) [-d delay] - Set delay between steps (defaults to 2 seconds) [-b N] - Bunch number to monitor (defaults to 1)
By default the script will step the EPICS variable specified by CTRL
through the range defined by START
, STEP
, and STOP
. At each setting the script pauses for an adjustable period of time and then acquires the monitor value from the EPICS channel MONITOR
. Upon completion the script prints out two columns of data: settings of the control channel and the monitor channel values.
With -p option the script also generates a plot of sweep results, as illustrated on the right. This plot is generated by sweeping the ADC delay with the input driven by a short unipolar pulse.
sweep.sh -p -b 46 IGPF:LFB:PHASE_SERVO:SETPT IGPF:LFB:MEAN 0 100 2000
Here we are sweeping the front-end phase shifter from 0 to 2000 with steps of 100 and recording the mean value of bunch 46. After sweeping a plot is generated.
sweep.sh -p -b 46 IGPF:LFB:TADC IGPF:LFB:MEAN 0 500 1500
Here we are sweeping the ADC DELAY
and recording the mean — front-end is expected to be in the amplitude detection state
sweep.sh -p IGPF:LFB:PHASE_SERVO:SETPT IGPF:LFB:MEAN 0 50 2000
Here we are sweeping the front-end phase shifter from 0 to 2000 with steps of 100 and recording the mean value of bunch 1. From this sweep one can determine phase shifter setting that produces phase-detection (no offset in the filled bucket relative to the empty buckets).
sweep.sh -p -b 137 IGPF:LFB:WRT:BE_PHASE IGPF:LFB:RMS 0 50 2000
Now we are sweeping the back-end phase shifter and recording the RMS motion of bunch 137. Maximum RMS corresponds to the optimal back-end carrier phase.
sweep.sh -p IGPF:LFB:TDAC IGPF:LFB:RMS 0 50 1950
The DAC clock is swept in 50 ps steps through the 1.95 ns range (proper settings for 500 MHz) and the RMS amplitude of the first bunch is recorded
sweep.sh -p IGPF:LFB:TADC IGPF:LFB:RMS 0 50 1950
Sweeping the ADC clock through the 1.95 ns range gives us the front-end response.