1 #pragma rtGlobals=3// Use modern global access method and strict wave access.
2 #pragma IgorVersion = 6.1
3 #pragma ModuleName = PearlArpesScans
5 #include "mm-physconst"
6 #include "pearl-optics-theory"
7 #include "pearl-epics",
version >= 1.01
13 static
const string basename =
"X03DA-SCIENTA:";
21 dfref savedf = GetDataFolderDFR()
22 print
"connecting EPICS channels..."
26 controls += basename +
camname +
"PASS_ENERGY;"
27 controls += basename +
camname +
"LOW_ENERGY;"
28 controls += basename +
camname +
"CENTRE_ENERGY;"
29 controls += basename +
camname +
"HIGH_ENERGY;"
30 controls += basename +
camname +
"LENS_MODE;"
31 controls += basename +
camname +
"ACQ_MODE;"
32 controls += basename +
camname +
"ENERGY_MODE;"
33 controls += basename +
camname +
"DETECTOR_MODE;"
34 controls += basename +
camname +
"ELEMENT_SET;"
35 controls += basename +
camname +
"STEP_SIZE;"
36 controls += basename +
camname +
"SLICES;"
37 controls += basename +
camname +
"NumExposures;"
38 controls += basename +
camname +
"FRAMES;"
39 controls += basename +
camname +
"STEP_TIME;"
42 monitors += basename +
camname +
"PASS_ENERGY_RBV;"
43 monitors += basename +
camname +
"LOW_ENERGY_RBV;"
44 monitors += basename +
camname +
"CENTRE_ENERGY_RBV;"
45 monitors += basename +
camname +
"HIGH_ENERGY_RBV;"
46 monitors += basename +
camname +
"ENERGY_WIDTH_RBV;"
47 monitors += basename +
camname +
"LENS_MODE_RBV;"
48 monitors += basename +
camname +
"ACQ_MODE_RBV;"
49 monitors += basename +
camname +
"ENERGY_MODE_RBV;"
50 monitors += basename +
camname +
"DETECTOR_MODE_RBV;"
51 monitors += basename +
camname +
"ELEMENT_SET_RBV;"
52 monitors += basename +
camname +
"STEP_SIZE_RBV;"
53 monitors += basename +
camname +
"SLICES_RBV;"
54 monitors += basename +
camname +
"NumExposures_RBV;"
55 monitors += basename +
camname +
"CURRENT_CHANNEL_RBV;"
56 monitors += basename +
camname +
"TOTAL_POINTS_RBV;"
57 monitors += basename +
camname +
"PROGRESS_RBV;"
59 monitors += basename +
camname +
"BinX_RBV;"
60 monitors += basename +
camname +
"BinY_RBV;"
61 monitors += basename +
camname +
"MinX_RBV;"
62 monitors += basename +
camname +
"MinY_RBV;"
63 monitors += basename +
camname +
"SizeX_RBV;"
64 monitors += basename +
camname +
"SizeY_RBV;"
65 monitors += basename +
camname +
"ReverseX_RBV;"
66 monitors += basename +
camname +
"ReverseY_RBV;"
70 variables = AddListItem(
"ArrayData", variables,
";", ItemsInList(variables))
83 string attr_channel_name
87 pvOpen chid, attr_channel_name
89 switch(wavetype($attr_wave_name, 1))
91 wave w_attr = $attr_wave_name
92 pvPutNumber /Q chid, w_attr[0]
96 wave /t wt_attr = $attr_wave_name
97 pvPutString /Q chid, wt_attr[0]
110 variable scan_rec_num
112 string chan_base =
"X03DA-PC:scan" + num2str(scan_rec_num) +
":"
113 string wave_base =
"Scan" + num2str(scan_rec_num)
119 wave /z w_active = $(wave_base +
"Active")
120 if (WaveExists(w_active))
121 if (w_active[0] != 0)
123 for (ifield = 1; ifield <= nfields; ifield += 1)
124 sscanf wave_name,
"%sPositioner%u", ifield
125 sscanf chan_name,
"%sP%uPV", chan_base, ifield
127 sscanf wave_name,
"%sReadback%u", ifield
128 sscanf chan_name,
"%sR%uPV", chan_base, ifield
130 sscanf wave_name,
"%sTrigger%u", ifield
131 sscanf chan_name,
"%sT%uPV", chan_base, ifield
135 for (ifield = 1; ifield <= nfields; ifield += 1)
136 sscanf wave_name,
"%sDetector%u", ifield
137 sscanf chan_name,
"%sD%uPV", chan_base, ifield
146 dfref savedf = GetDataFolderDFR()
variable pearl_set_sscan(variable scan_rec_num)
static variable epics_connect()
connect the angle scan tracker to EPICS
static const string statsname
variable pearl_set_attr_ch(string attr_wave_name, string attr_channel_name)
static const string imgname
static const string camname
variable scienta_connect()
static const string hdfname
variable pearl_repeat_scan()