Pull, Visualize and Play the data from Archiver Appliance¶

The following slides present how to use pyarchappl Python package to work with Archiver Appliance web service, along with a practical use case, which shows how to extract the machine settings from the recorded data, based on the machine performance trends with timestamps, which could also be visualized with the data.

Furthermore, it also shows how to interface the high-level application so-called Settings Manager, by exporting the extracted settings data into a data file and loading into, as such, other operations could be well performed in the context of Settings Manager.


Tong Zhang zhangt@frib.msu.edu

Last updated: 2020-12-02

Introduction of pyarchappl¶

  • Python package for communicating with Archiver Appliance web application
  • Develop with Python 3.x
  • Integration with PHANTASY framework, if phantasy is installed
  • Work data with pandas
  • Hosted on GitHub
  • Installation: pip install pyarchappl
In [3]:
import archappl
print(archappl.__doc__)
print("Version: ", archappl.__version__)
print("Author : ", archappl.__author__)
archappl: Python interface of Archiver Appliance.
Version:  0.9.2
Author :  Tong Zhang <zhangt@frib.msu.edu>
In [4]:
from archappl.contrib import get_dataset
get_dataset?
Signature: get_dataset(element_list, field_list, from_time, to_time, **kws)
Docstring:
Pull data from Archiver Appliance, with a given list of devices and dynamic fields,
within defined time slot.

Parameters
----------
element_list : list
    A list of high-level device element objects.
field_list : list
    A list of field names should applied to all elements, otherwise skip invalid field which
    does not belong to some element.
from_time : str
    A string of start time of the data in ISO8601 format.
to_time : str
    A string of end time of the data in ISO8601 format.

Keyword Arguments
-----------------
client : ArchiverDataClient
    ArchiverDataClient instance, default is FRIBArchiverDataClient.
resample : str
    The offset string or object representing target conversion, e.g. resample with 1 second
    offset could be defined as '1S'.
verbose : int
    Verbosity level of the log output, default is 0, no output, 1, output progress, 2 output
    progress with description.
handle : str
    PV handle for field list, by default is 'readback', other options: 'setpoint'.

Returns
-------
r : dataframe
    Pandas dataframe with datetime as the index, and device PV names as columns

See Also
--------
get_dataset
phantasy.CaElement, phantasy.CaField
archappl.dformat

Examples
--------
>>> from archappl.client import ArchiverDataClient
>>> data_client = ArchiverDataClient()
>>> data_client.url = "http://127.0.0.1:17665"
>>>
>>> from phantasy import MachinePortal
>>> mp = MachinePortal("FRIB_VA", "LS1FS1")
>>> bpms = mp.get_elements(type="BPM")

>>> from archappl import dformat
>>> t0 = dformat(2020, 11, 16, 15, 10)
>>> t1 = dformat(2020, 11, 16, 16, 17)
>>> field_list = ['X', 'Y']
>>> data_set = get_dataset_with_devices(bpms, field_list, t0, t1,
                                        resample="1S", verbose=2,
                                        client=data_client)
In [5]:
from archappl.contrib import get_dataset_at_time
get_dataset_at_time?
Signature: get_dataset_at_time(element_list, field_list, at_time, **kws)
Docstring:
Pull data from Archiver Appliance, with a given list of devices and dynamic fields at a
specified time.

Parameters
----------
element_list : list
    A list of high-level device element objects.
field_list : list
    A list of field names should applied to all elements, otherwise skip invalid field which
    does not belong to some element.
at_time : str
    A string of time of the data in ISO8601 format.

Keyword Arguments
-----------------
client : ArchiverDataClient
    ArchiverDataClient instance, default is FRIBArchiverDataClient.
handle : str
    PV handle for field list, by default is 'readback', other options: 'setpoint'.
tz : str
    Name of timezone for the returned index, default is local zone.

Returns
-------
r : dataframe
    Pandas dataframe.
In [6]:
from archappl import dformat
dformat?

dformat is convenient function provided by pyarchappl, which can correctly handle the datetime, by default the time is localized at time zone of 'America/New_York'.

Signature: dformat(*args, **kws)
Docstring:
Return ISO8601 format of date time.

Input up to 7 arguments as year, month, day, hour, minute, second,
millisecond, it is recommended always input year, month, day, hour,
minute, second and millisecond as 0 if not input.

Set up data client¶

The data client is the client that send request to and receive response from Archiver Appliance.

In this notebook, all the data are retrieved from a local hosted Archiver Appliance, for FRIB FTC, just use FRIBArchiverDataClient.

In [7]:
from archappl.client import ArchiverDataClient

data_client = ArchiverDataClient()
data_client.url = "http://127.0.0.1:17665"  # local hosted Archiver Appliance
In [8]:
# For FRIB FTC working environment, use FRIBArchiverDataClient
from archappl.client import FRIBArchiverDataClient

Set up devices, work with high-level devices¶

In this notebook, archived data are from virtual accelerator, trajectory correction with ORM app is used to change the machine status, changes are recorded by Archiver Appliance.

For FRIB FTC, set machine and segment with 'FRIB' and 'LINAC'.

The data integration with FRIB high-level physics controls is achieved via phantasy, for those phantasy is not available, other generic data structure is returned.

In [9]:
from phantasy import MachinePortal

mp = MachinePortal(machine="FRIB_VA", segment="LS1FS1")

# get all the BPMs and Correctors
bpms = mp.get_elements(type="BPM")
hcors = mp.get_elements(type='HCOR')
vcors = mp.get_elements(type='VCOR')
[09:29:44.484] INFO: phantasy.library.operation.core: Load new machine: 'FRIB_VA', segment: 'LS1FS1'
[09:29:44.488] INFO: phantasy.library.parser.config: Importing FRIB_VA from /home/tong/Dropbox/phantasy-project/phantasy-machines/FRIB_VA
[09:29:44.492] INFO: phantasy.library.parser.config: Loading machine configuration from /home/tong/Dropbox/phantasy-project/phantasy-machines/FRIB_VA/phantasy.ini
[09:29:44.494] INFO: phantasy.library.operation.lattice: Loading segment: 'LS1FS1'
[09:29:44.499] WARNING: phantasy.library.operation.lattice: Default UNICORN policy will be applied.
[09:29:44.501] WARNING: phantasy.library.operation.lattice: Default device polarity will be applied.
[09:29:44.503] INFO: phantasy.library.operation.lattice: Loading PV data from CSV/SQLite: /home/tong/Dropbox/phantasy-project/phantasy-machines/FRIB_VA/ls1fs1/channels.csv
[09:29:44.505] INFO: phantasy.library.pv.datasource: Set source to be CSV table: channels.csv.
[09:29:44.595] INFO: phantasy.library.operation.lattice: Model data directory: /home/tong/phantasy_data/20201202/model_data/data_092944
[09:29:44.600] INFO: phantasy.library.operation.lattice: Found 1725 PVs in 'LS1FS1'.
[09:29:44.931] INFO: phantasy.library.operation.lattice: 'LS1FS1' has 417 elements
In [10]:
# Only choose the devices that are controllable

lat = mp.work_lattice_conf
non_diag_devices = [i for i in lat if not i.is_diag()]
non_diag_devices
Out[10]:
[LS1_CA01:CAV1_D1127 [CAV] @ sb=0.218087,
 LS1_CA01:SOL1_D1132 [SOL] @ sb=0.685364,
 LS1_CA01:DCV_D1132 [VCOR] @ sb=0.785365,
 LS1_CA01:DCH_D1132 [HCOR] @ sb=0.785365,
 LS1_CA01:CAV2_D1136 [CAV] @ sb=1.059770,
 LS1_CA01:CAV3_D1142 [CAV] @ sb=1.693326,
 LS1_CA01:SOL2_D1146 [SOL] @ sb=2.160603,
 LS1_CA01:DCV_D1146 [VCOR] @ sb=2.260604,
 LS1_CA01:DCH_D1146 [HCOR] @ sb=2.260604,
 LS1_CA01:CAV4_D1150 [CAV] @ sb=2.535008,
 LS1_CA02:CAV1_D1161 [CAV] @ sb=3.591182,
 LS1_CA02:SOL1_D1165 [SOL] @ sb=4.058459,
 LS1_CA02:DCV_D1165 [VCOR] @ sb=4.158460,
 LS1_CA02:DCH_D1165 [HCOR] @ sb=4.158460,
 LS1_CA02:CAV2_D1169 [CAV] @ sb=4.432864,
 LS1_CA02:CAV3_D1176 [CAV] @ sb=5.066420,
 LS1_CA02:SOL2_D1180 [SOL] @ sb=5.533698,
 LS1_CA02:DCV_D1180 [VCOR] @ sb=5.633699,
 LS1_CA02:DCH_D1180 [HCOR] @ sb=5.633699,
 LS1_CA02:CAV4_D1184 [CAV] @ sb=5.908104,
 LS1_CA03:CAV1_D1195 [CAV] @ sb=6.964276,
 LS1_CA03:SOL1_D1199 [SOL] @ sb=7.431554,
 LS1_CA03:DCV_D1199 [VCOR] @ sb=7.531555,
 LS1_CA03:DCH_D1199 [HCOR] @ sb=7.531555,
 LS1_CA03:CAV2_D1203 [CAV] @ sb=7.805960,
 LS1_CA03:CAV3_D1209 [CAV] @ sb=8.439516,
 LS1_CA03:SOL2_D1214 [SOL] @ sb=8.906794,
 LS1_CA03:DCV_D1214 [VCOR] @ sb=9.006794,
 LS1_CA03:DCH_D1214 [HCOR] @ sb=9.006794,
 LS1_CA03:CAV4_D1218 [CAV] @ sb=9.281199,
 LS1_CB01:CAV1_D1229 [CAV] @ sb=10.366596,
 LS1_CB01:SOL1_D1235 [SOL] @ sb=10.894208,
 LS1_CB01:DCV_D1235 [VCOR] @ sb=11.144208,
 LS1_CB01:DCH_D1235 [HCOR] @ sb=11.144208,
 LS1_CB01:CAV2_D1241 [CAV] @ sb=11.568946,
 LS1_CB01:CAV3_D1245 [CAV] @ sb=11.966634,
 LS1_CB01:CAV4_D1249 [CAV] @ sb=12.364322,
 LS1_CB01:SOL2_D1255 [SOL] @ sb=12.891934,
 LS1_CB01:DCV_D1255 [VCOR] @ sb=13.141934,
 LS1_CB01:DCH_D1255 [HCOR] @ sb=13.141934,
 LS1_CB01:CAV5_D1261 [CAV] @ sb=13.566672,
 LS1_CB01:CAV6_D1265 [CAV] @ sb=13.964360,
 LS1_CB01:CAV7_D1269 [CAV] @ sb=14.362048,
 LS1_CB01:SOL3_D1275 [SOL] @ sb=14.889660,
 LS1_CB01:DCV_D1275 [VCOR] @ sb=15.139660,
 LS1_CB01:DCH_D1275 [HCOR] @ sb=15.139660,
 LS1_CB01:CAV8_D1281 [CAV] @ sb=15.564398,
 LS1_CB02:CAV1_D1293 [CAV] @ sb=16.739021,
 LS1_CB02:SOL1_D1299 [SOL] @ sb=17.266632,
 LS1_CB02:DCV_D1299 [VCOR] @ sb=17.516632,
 LS1_CB02:DCH_D1299 [HCOR] @ sb=17.516632,
 LS1_CB02:CAV2_D1305 [CAV] @ sb=17.941371,
 LS1_CB02:CAV3_D1309 [CAV] @ sb=18.339059,
 LS1_CB02:CAV4_D1313 [CAV] @ sb=18.736747,
 LS1_CB02:SOL2_D1319 [SOL] @ sb=19.264358,
 LS1_CB02:DCV_D1319 [VCOR] @ sb=19.514358,
 LS1_CB02:DCH_D1319 [HCOR] @ sb=19.514358,
 LS1_CB02:CAV5_D1325 [CAV] @ sb=19.939097,
 LS1_CB02:CAV6_D1329 [CAV] @ sb=20.336785,
 LS1_CB02:CAV7_D1333 [CAV] @ sb=20.734473,
 LS1_CB02:SOL3_D1339 [SOL] @ sb=21.262084,
 LS1_CB02:DCV_D1339 [VCOR] @ sb=21.512084,
 LS1_CB02:DCH_D1339 [HCOR] @ sb=21.512084,
 LS1_CB02:CAV8_D1345 [CAV] @ sb=21.936823,
 LS1_CB03:CAV1_D1356 [CAV] @ sb=23.111446,
 LS1_CB03:SOL1_D1363 [SOL] @ sb=23.639057,
 LS1_CB03:DCV_D1363 [VCOR] @ sb=23.889057,
 LS1_CB03:DCH_D1363 [HCOR] @ sb=23.889057,
 LS1_CB03:CAV2_D1368 [CAV] @ sb=24.313795,
 LS1_CB03:CAV3_D1372 [CAV] @ sb=24.711483,
 LS1_CB03:CAV4_D1376 [CAV] @ sb=25.109171,
 LS1_CB03:SOL2_D1383 [SOL] @ sb=25.636783,
 LS1_CB03:DCV_D1383 [VCOR] @ sb=25.886783,
 LS1_CB03:DCH_D1383 [HCOR] @ sb=25.886783,
 LS1_CB03:CAV5_D1388 [CAV] @ sb=26.311521,
 LS1_CB03:CAV6_D1392 [CAV] @ sb=26.709209,
 LS1_CB03:CAV7_D1396 [CAV] @ sb=27.106897,
 LS1_CB03:SOL3_D1403 [SOL] @ sb=27.634509,
 LS1_CB03:DCV_D1403 [VCOR] @ sb=27.884509,
 LS1_CB03:DCH_D1403 [HCOR] @ sb=27.884509,
 LS1_CB03:CAV8_D1408 [CAV] @ sb=28.309247,
 LS1_CB04:CAV1_D1420 [CAV] @ sb=29.483870,
 LS1_CB04:SOL1_D1426 [SOL] @ sb=30.011481,
 LS1_CB04:DCV_D1426 [VCOR] @ sb=30.261481,
 LS1_CB04:DCH_D1426 [HCOR] @ sb=30.261481,
 LS1_CB04:CAV2_D1432 [CAV] @ sb=30.686220,
 LS1_CB04:CAV3_D1436 [CAV] @ sb=31.083908,
 LS1_CB04:CAV4_D1440 [CAV] @ sb=31.481596,
 LS1_CB04:SOL2_D1446 [SOL] @ sb=32.009207,
 LS1_CB04:DCV_D1446 [VCOR] @ sb=32.259207,
 LS1_CB04:DCH_D1446 [HCOR] @ sb=32.259207,
 LS1_CB04:CAV5_D1452 [CAV] @ sb=32.683946,
 LS1_CB04:CAV6_D1456 [CAV] @ sb=33.081634,
 LS1_CB04:CAV7_D1460 [CAV] @ sb=33.479322,
 LS1_CB04:SOL3_D1466 [SOL] @ sb=34.006933,
 LS1_CB04:DCV_D1466 [VCOR] @ sb=34.256933,
 LS1_CB04:DCH_D1466 [HCOR] @ sb=34.256933,
 LS1_CB04:CAV8_D1472 [CAV] @ sb=34.681672,
 LS1_CB05:CAV1_D1484 [CAV] @ sb=35.856295,
 LS1_CB05:SOL1_D1490 [SOL] @ sb=36.383906,
 LS1_CB05:DCV_D1490 [VCOR] @ sb=36.633906,
 LS1_CB05:DCH_D1490 [HCOR] @ sb=36.633906,
 LS1_CB05:CAV2_D1496 [CAV] @ sb=37.058644,
 LS1_CB05:CAV3_D1500 [CAV] @ sb=37.456332,
 LS1_CB05:CAV4_D1504 [CAV] @ sb=37.854020,
 LS1_CB05:SOL2_D1510 [SOL] @ sb=38.381632,
 LS1_CB05:DCV_D1510 [VCOR] @ sb=38.631632,
 LS1_CB05:DCH_D1510 [HCOR] @ sb=38.631632,
 LS1_CB05:CAV5_D1516 [CAV] @ sb=39.056370,
 LS1_CB05:CAV6_D1520 [CAV] @ sb=39.454058,
 LS1_CB05:CAV7_D1524 [CAV] @ sb=39.851746,
 LS1_CB05:SOL3_D1530 [SOL] @ sb=40.379358,
 LS1_CB05:DCV_D1530 [VCOR] @ sb=40.629358,
 LS1_CB05:DCH_D1530 [HCOR] @ sb=40.629358,
 LS1_CB05:CAV8_D1536 [CAV] @ sb=41.054096,
 LS1_CB06:CAV1_D1548 [CAV] @ sb=42.228719,
 LS1_CB06:SOL1_D1554 [SOL] @ sb=42.756330,
 LS1_CB06:DCV_D1554 [VCOR] @ sb=43.006330,
 LS1_CB06:DCH_D1554 [HCOR] @ sb=43.006330,
 LS1_CB06:CAV2_D1560 [CAV] @ sb=43.431069,
 LS1_CB06:CAV3_D1564 [CAV] @ sb=43.828757,
 LS1_CB06:CAV4_D1567 [CAV] @ sb=44.226445,
 LS1_CB06:SOL2_D1574 [SOL] @ sb=44.754056,
 LS1_CB06:DCV_D1574 [VCOR] @ sb=45.004056,
 LS1_CB06:DCH_D1574 [HCOR] @ sb=45.004056,
 LS1_CB06:CAV5_D1580 [CAV] @ sb=45.428795,
 LS1_CB06:CAV6_D1583 [CAV] @ sb=45.826483,
 LS1_CB06:CAV7_D1587 [CAV] @ sb=46.224171,
 LS1_CB06:SOL3_D1594 [SOL] @ sb=46.751782,
 LS1_CB06:DCV_D1594 [VCOR] @ sb=47.001782,
 LS1_CB06:DCH_D1594 [HCOR] @ sb=47.001782,
 LS1_CB06:CAV8_D1599 [CAV] @ sb=47.426521,
 LS1_CB07:CAV1_D1611 [CAV] @ sb=48.601144,
 LS1_CB07:SOL1_D1618 [SOL] @ sb=49.128755,
 LS1_CB07:DCV_D1618 [VCOR] @ sb=49.378755,
 LS1_CB07:DCH_D1618 [HCOR] @ sb=49.378755,
 LS1_CB07:CAV2_D1623 [CAV] @ sb=49.803493,
 LS1_CB07:CAV3_D1627 [CAV] @ sb=50.201181,
 LS1_CB07:CAV4_D1631 [CAV] @ sb=50.598869,
 LS1_CB07:SOL2_D1637 [SOL] @ sb=51.126481,
 LS1_CB07:DCV_D1637 [VCOR] @ sb=51.376481,
 LS1_CB07:DCH_D1637 [HCOR] @ sb=51.376481,
 LS1_CB07:CAV5_D1643 [CAV] @ sb=51.801219,
 LS1_CB07:CAV6_D1647 [CAV] @ sb=52.198907,
 LS1_CB07:CAV7_D1651 [CAV] @ sb=52.596595,
 LS1_CB07:SOL3_D1657 [SOL] @ sb=53.124207,
 LS1_CB07:DCV_D1657 [VCOR] @ sb=53.374207,
 LS1_CB07:DCH_D1657 [HCOR] @ sb=53.374207,
 LS1_CB07:CAV8_D1663 [CAV] @ sb=53.798945,
 LS1_CB08:CAV1_D1675 [CAV] @ sb=54.973568,
 LS1_CB08:SOL1_D1681 [SOL] @ sb=55.501179,
 LS1_CB08:DCV_D1681 [VCOR] @ sb=55.751179,
 LS1_CB08:DCH_D1681 [HCOR] @ sb=55.751179,
 LS1_CB08:CAV2_D1687 [CAV] @ sb=56.175918,
 LS1_CB08:CAV3_D1691 [CAV] @ sb=56.573606,
 LS1_CB08:CAV4_D1695 [CAV] @ sb=56.971294,
 LS1_CB08:SOL2_D1701 [SOL] @ sb=57.498905,
 LS1_CB08:DCV_D1701 [VCOR] @ sb=57.748905,
 LS1_CB08:DCH_D1701 [HCOR] @ sb=57.748905,
 LS1_CB08:CAV5_D1707 [CAV] @ sb=58.173644,
 LS1_CB08:CAV6_D1711 [CAV] @ sb=58.571332,
 LS1_CB08:CAV7_D1715 [CAV] @ sb=58.969020,
 LS1_CB08:SOL3_D1721 [SOL] @ sb=59.496631,
 LS1_CB08:DCV_D1721 [VCOR] @ sb=59.746631,
 LS1_CB08:DCH_D1721 [HCOR] @ sb=59.746631,
 LS1_CB08:CAV8_D1727 [CAV] @ sb=60.171370,
 LS1_CB09:CAV1_D1739 [CAV] @ sb=61.345993,
 LS1_CB09:SOL1_D1745 [SOL] @ sb=61.873604,
 LS1_CB09:DCV_D1745 [VCOR] @ sb=62.123604,
 LS1_CB09:DCH_D1745 [HCOR] @ sb=62.123604,
 LS1_CB09:CAV2_D1751 [CAV] @ sb=62.548343,
 LS1_CB09:CAV3_D1755 [CAV] @ sb=62.946031,
 LS1_CB09:CAV4_D1759 [CAV] @ sb=63.343719,
 LS1_CB09:SOL2_D1765 [SOL] @ sb=63.871330,
 LS1_CB09:DCV_D1765 [VCOR] @ sb=64.121330,
 LS1_CB09:DCH_D1765 [HCOR] @ sb=64.121330,
 LS1_CB09:CAV5_D1771 [CAV] @ sb=64.546068,
 LS1_CB09:CAV6_D1775 [CAV] @ sb=64.943756,
 LS1_CB09:CAV7_D1779 [CAV] @ sb=65.341444,
 LS1_CB09:SOL3_D1785 [SOL] @ sb=65.869056,
 LS1_CB09:DCV_D1785 [VCOR] @ sb=66.119056,
 LS1_CB09:DCH_D1785 [HCOR] @ sb=66.119056,
 LS1_CB09:CAV8_D1791 [CAV] @ sb=66.543794,
 LS1_CB10:CAV1_D1802 [CAV] @ sb=67.718417,
 LS1_CB10:SOL1_D1809 [SOL] @ sb=68.246029,
 LS1_CB10:DCV_D1809 [VCOR] @ sb=68.496029,
 LS1_CB10:DCH_D1809 [HCOR] @ sb=68.496029,
 LS1_CB10:CAV2_D1814 [CAV] @ sb=68.920767,
 LS1_CB10:CAV3_D1818 [CAV] @ sb=69.318455,
 LS1_CB10:CAV4_D1822 [CAV] @ sb=69.716143,
 LS1_CB10:SOL2_D1829 [SOL] @ sb=70.243754,
 LS1_CB10:DCV_D1829 [VCOR] @ sb=70.493754,
 LS1_CB10:DCH_D1829 [HCOR] @ sb=70.493754,
 LS1_CB10:CAV5_D1834 [CAV] @ sb=70.918493,
 LS1_CB10:CAV6_D1838 [CAV] @ sb=71.316181,
 LS1_CB10:CAV7_D1842 [CAV] @ sb=71.713869,
 LS1_CB10:SOL3_D1849 [SOL] @ sb=72.241480,
 LS1_CB10:DCV_D1849 [VCOR] @ sb=72.491480,
 LS1_CB10:DCH_D1849 [HCOR] @ sb=72.491480,
 LS1_CB10:CAV8_D1854 [CAV] @ sb=72.916219,
 LS1_CB11:CAV1_D1866 [CAV] @ sb=74.090842,
 LS1_CB11:SOL1_D1872 [SOL] @ sb=74.618453,
 LS1_CB11:DCV_D1872 [VCOR] @ sb=74.868453,
 LS1_CB11:DCH_D1872 [HCOR] @ sb=74.868453,
 LS1_CB11:CAV2_D1878 [CAV] @ sb=75.293192,
 LS1_CB11:CAV3_D1882 [CAV] @ sb=75.690880,
 LS1_CB11:CAV4_D1886 [CAV] @ sb=76.088568,
 LS1_CB11:SOL2_D1892 [SOL] @ sb=76.616179,
 LS1_CB11:DCV_D1892 [VCOR] @ sb=76.866179,
 LS1_CB11:DCH_D1892 [HCOR] @ sb=76.866179,
 LS1_CB11:CAV5_D1898 [CAV] @ sb=77.290917,
 LS1_CB11:CAV6_D1902 [CAV] @ sb=77.688605,
 LS1_CB11:CAV7_D1906 [CAV] @ sb=78.086293,
 LS1_CB11:SOL3_D1912 [SOL] @ sb=78.613905,
 LS1_CB11:DCV_D1912 [VCOR] @ sb=78.863905,
 LS1_CB11:DCH_D1912 [HCOR] @ sb=78.863905,
 LS1_CB11:CAV8_D1918 [CAV] @ sb=79.288643,
 LS1_BTS:DCV_D1937 [VCOR] @ sb=81.365954,
 LS1_BTS:DCH_D1937 [HCOR] @ sb=81.365954,
 LS1_BTS:QH_D1942 [QUAD] @ sb=81.715954,
 LS1_BTS:QV_D1950 [QUAD] @ sb=82.465954,
 LS1_BTS:DCV_D1964 [VCOR] @ sb=84.013954,
 LS1_BTS:DCH_D1964 [HCOR] @ sb=84.013954,
 LS1_BTS:QH_D1969 [QUAD] @ sb=84.363954,
 LS1_BTS:QV_D1976 [QUAD] @ sb=85.113954,
 LS1_BTS:DCV_D1997 [VCOR] @ sb=87.348954,
 LS1_BTS:DCH_D1997 [HCOR] @ sb=87.348954,
 LS1_BTS:QH_D2002 [QUAD] @ sb=87.698954,
 LS1_BTS:QV_D2013 [QUAD] @ sb=88.835166,
 LS1_BTS:DCV_D2024 [VCOR] @ sb=90.055166,
 LS1_BTS:DCH_D2024 [HCOR] @ sb=90.055166,
 LS1_BTS:QH_D2029 [QUAD] @ sb=90.405166,
 LS1_BTS:QV_D2042 [QUAD] @ sb=91.741378,
 LS1_BTS:DCV_D2061 [VCOR] @ sb=93.710487,
 LS1_BTS:DCH_D2061 [HCOR] @ sb=93.710487,
 LS1_BTS:QV_D2066 [QUAD] @ sb=94.060487,
 LS1_BTS:QH_D2073 [QUAD] @ sb=94.810487,
 LS1_CH01:CAV1_D2085 [CAV] @ sb=96.007467,
 LS1_CH01:CAV2_D2089 [CAV] @ sb=96.405155,
 LS1_CH01:CAV3_D2096 [CAV] @ sb=97.100345,
 LS1_CH01:CAV4_D2100 [CAV] @ sb=97.498033,
 LS1_BTS:DCV_D2114 [VCOR] @ sb=98.985556,
 LS1_BTS:DCH_D2114 [HCOR] @ sb=98.985556,
 LS1_BTS:QV_D2118 [QUAD] @ sb=99.335556,
 LS1_BTS:QH_D2126 [QUAD] @ sb=100.085556,
 FS1_CH01:CAV1_D2137 [CAV] @ sb=101.212819,
 FS1_CH01:CAV2_D2141 [CAV] @ sb=101.610507,
 FS1_CH01:CAV3_D2148 [CAV] @ sb=102.305697,
 FS1_CH01:CAV4_D2152 [CAV] @ sb=102.703385,
 FS1_CSS:DH_D2163 [BEND] @ sb=103.798309,
 FS1_CSS:DH_D2169 [BEND] @ sb=104.348309,
 FS1_CSS:DH_D2174 [BEND] @ sb=104.898309,
 FS1_CSS:DH_D2180 [BEND] @ sb=105.448309,
 FS1_CSS:DCV_D2189 [VCOR] @ sb=106.573309,
 FS1_CSS:DCH_D2189 [HCOR] @ sb=106.573309,
 FS1_CSS:QH_D2194 [QUAD] @ sb=106.923309,
 FS1_CSS:QV_D2202 [QUAD] @ sb=107.711159,
 FS1_CSS:DCV_D2210 [VCOR] @ sb=108.611159,
 FS1_CSS:DCH_D2210 [HCOR] @ sb=108.611159,
 FS1_CSS:QH_D2215 [QUAD] @ sb=108.961159,
 FS1_CSS:QV_D2220 [QUAD] @ sb=109.461159,
 FS1_CSS:QV_D2254 [QUAD] @ sb=112.861159,
 FS1_CSS:DCV_D2257 [VCOR] @ sb=113.303665,
 FS1_CSS:DCH_D2257 [HCOR] @ sb=113.303665,
 FS1_CSS:QH_D2260 [QUAD] @ sb=113.511159,
 FS1_CSS:QV_D2272 [QUAD] @ sb=114.711159,
 FS1_CSS:DCV_D2276 [VCOR] @ sb=115.199815,
 FS1_CSS:DCH_D2276 [HCOR] @ sb=115.199815,
 FS1_CSS:QH_D2280 [QUAD] @ sb=115.499009,
 FS1_CSS:DH_D2290 [BEND] @ sb=116.514603,
 FS1_CSS:DH_D2296 [BEND] @ sb=117.064603,
 FS1_CSS:DH_D2302 [BEND] @ sb=117.714603,
 FS1_CSS:DH_D2308 [BEND] @ sb=118.264603,
 FS1_MGB01:CAV_D2320 [CAV] @ sb=119.483733,
 FS1_MGB01:CAV_D2323 [CAV] @ sb=119.802058,
 FS1_MGB01:CAV_D2327 [CAV] @ sb=120.120384,
 FS1_MGB01:CAV_D2325 [CAV] @ sb=120.120384,
 FS1_MGB01:CAV_D2330 [CAV] @ sb=120.438709,
 FS1_CSS:DCV_D2351 [VCOR] @ sb=122.726306,
 FS1_CSS:DCH_D2351 [HCOR] @ sb=122.726306,
 FS1_CSS:QH_D2356 [QUAD] @ sb=123.076306,
 FS1_CSS:QH_D2362 [QUAD] @ sb=123.701306,
 FS1_CSS:DCV_D2367 [VCOR] @ sb=124.351306,
 FS1_CSS:DCH_D2367 [HCOR] @ sb=124.351306,
 FS1_CSS:QV_D2372 [QUAD] @ sb=124.701306,
 FS1_CSS:QH_D2377 [QUAD] @ sb=125.201306,
 FS1_CSS:DCV_D2381 [VCOR] @ sb=125.696306,
 FS1_CSS:DCH_D2381 [HCOR] @ sb=125.696306,
 FS1_BBS:DH_D2394 [BEND] @ sb=126.486180,
 FS1_BBS:DCV_D2412 [VCOR] @ sb=128.836833,
 FS1_BBS:DCH_D2412 [HCOR] @ sb=128.836833,
 FS1_BBS:QH_D2416 [QUAD] @ sb=129.086833,
 FS1_BBS:S_D2419 [SEXT] @ sb=129.476833,
 FS1_BBS:QV_D2424 [QUAD] @ sb=129.936833,
 FS1_BBS:DH_D2435 [BEND] @ sb=130.590056,
 FS1_BBS:DH_D2453 [BEND] @ sb=132.400708,
 FS1_BBS:QV_D2463 [QUAD] @ sb=133.844584,
 FS1_BBS:S_D2469 [SEXT] @ sb=134.404584,
 FS1_BBS:QH_D2472 [QUAD] @ sb=134.694584,
 FS1_BBS:DCV_D2476 [VCOR] @ sb=135.194584,
 FS1_BBS:DCH_D2476 [HCOR] @ sb=135.194584,
 FS1_BBS:DH_D2494 [BEND] @ sb=136.504584,
 FS1_BMS:DCV_D2507 [VCOR] @ sb=138.335237,
 FS1_BMS:DCH_D2507 [HCOR] @ sb=138.335237,
 FS1_BMS:QV_D2511 [QUAD] @ sb=138.580237,
 FS1_BMS:QH_D2515 [QUAD] @ sb=139.030237,
 FS1_BMS:DCV_D2534 [VCOR] @ sb=141.005237,
 FS1_BMS:DCH_D2534 [HCOR] @ sb=141.005237,
 FS1_BMS:QV_D2539 [QUAD] @ sb=141.355237,
 FS1_BMS:QH_D2563 [QUAD] @ sb=143.805237,
 FS1_BMS:DCV_D2584 [VCOR] @ sb=146.052835,
 FS1_BMS:DCH_D2584 [HCOR] @ sb=146.052835,
 FS1_BMS:QV_D2590 [QUAD] @ sb=146.453642,
 FS1_BMS:QH_D2597 [QUAD] @ sb=147.203642,
 FS1_MGB02:CAV_D2606 [CAV] @ sb=148.088649,
 FS1_MGB02:CAV_D2609 [CAV] @ sb=148.406974,
 FS1_MGB02:CAV_D2613 [CAV] @ sb=148.725300,
 FS1_MGB02:CAV_D2616 [CAV] @ sb=149.043625,
 FS1_BMS:DCV_D2640 [VCOR] @ sb=151.672285,
 FS1_BMS:DCH_D2640 [HCOR] @ sb=151.672285,
 FS1_BMS:QH_D2645 [QUAD] @ sb=152.022285,
 FS1_BMS:QV_D2654 [QUAD] @ sb=152.894690,
 FS1_BMS:DCV_D2662 [VCOR] @ sb=153.794690,
 FS1_BMS:DCH_D2662 [HCOR] @ sb=153.794690,
 FS1_BMS:QH_D2666 [QUAD] @ sb=154.144690,
 FS1_BMS:QH_D2679 [QUAD] @ sb=155.444690,
 FS1_BMS:DCV_D2688 [VCOR] @ sb=156.435283,
 FS1_BMS:DCH_D2688 [HCOR] @ sb=156.435283,
 FS1_BMS:QV_D2693 [QUAD] @ sb=156.843690,
 FS1_BMS:QH_D2698 [QUAD] @ sb=157.343690]

Define the time range for data retrieval¶

Retrieve data in a time range defined by from one time to another time, the time should be formated as ISO-8601 format, pyarchappl correctly handles the daylight saving time zone, e.g. in America/New_York zone.

By default, the input tuple of time to function dformat is localized at America/New_York.

In [11]:
# Define the time range from 2020-11-16, 15:10 to 2020-11-16, 16:17, EST

t0 = dformat(2020, 11, 16, 15, 10) 
t1 = dformat(2020, 11, 16, 16, 17)

# The output t0 and t1 is converted to UTC time zone, which is 5 hours ahead of EST now.
print(t0)
print(t1)
2020-11-16T20:10:00.000Z
2020-11-16T21:17:00.000Z

Retrieve all the BPM X Y readings in defined time range¶

Additionally, do:

  1. Align the timestamps
  2. Resample the data rate at 1 second
  3. Show the retrieving progress

Which could be achieved by setting the parameters of function _getdataset().

In [12]:
data_set = get_dataset(bpms, ['X', 'Y'], t0, t1,
                       resample="1S", verbose=1, client=data_client)

# set verbose > 0 will display a progress bar for the retrieval, in this case, totally made 150 requests. 
[2020-12-02T09:29:53.118138] Fetched all, time cost: 8.2 seconds.

Show the retrieved data set¶

In [13]:
data_set.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 4020 entries, 2020-11-16 15:10:00-05:00 to 2020-11-16 16:16:59-05:00
Freq: S
Columns: 150 entries, VA:LS1_CA01:BPM_D1129:X_RD to VA:FS1_BMS:BPM_D2702:Y_RD
dtypes: float64(150)
memory usage: 4.6 MB
In [14]:
data_set.describe()
Out[14]:
VA:LS1_CA01:BPM_D1129:X_RD VA:LS1_CA01:BPM_D1129:Y_RD VA:LS1_CA01:BPM_D1144:X_RD VA:LS1_CA01:BPM_D1144:Y_RD VA:LS1_WA01:BPM_D1155:X_RD VA:LS1_WA01:BPM_D1155:Y_RD VA:LS1_CA02:BPM_D1163:X_RD VA:LS1_CA02:BPM_D1163:Y_RD VA:LS1_CA02:BPM_D1177:X_RD VA:LS1_CA02:BPM_D1177:Y_RD ... VA:FS1_BMS:BPM_D2587:X_RD VA:FS1_BMS:BPM_D2587:Y_RD VA:FS1_BMS:BPM_D2600:X_RD VA:FS1_BMS:BPM_D2600:Y_RD VA:FS1_BMS:BPM_D2665:X_RD VA:FS1_BMS:BPM_D2665:Y_RD VA:FS1_BMS:BPM_D2690:X_RD VA:FS1_BMS:BPM_D2690:Y_RD VA:FS1_BMS:BPM_D2702:X_RD VA:FS1_BMS:BPM_D2702:Y_RD
count 4.020000e+03 4.020000e+03 4.020000e+03 4020.000000 4020.000000 4020.000000 4020.000000 4020.000000 4020.000000 4020.000000 ... 4020.000000 4020.000000 4020.000000 4020.000000 4020.000000 4020.000000 4020.000000 4020.000000 4020.000000 4020.000000
mean 5.318739e-06 -7.408959e-06 -1.179285e-04 -0.000336 -0.000958 -0.000963 -0.001801 -0.002056 0.000712 0.000353 ... -0.000329 -0.008596 -0.004140 -0.005371 -0.005903 -0.002286 0.000666 0.000194 0.002451 0.002098
std 2.496021e-09 1.772378e-07 4.913073e-07 0.000001 0.001051 0.001018 0.002396 0.002345 0.000726 0.000698 ... 0.001118 0.007362 0.005924 0.004485 0.006434 0.000838 0.001859 0.000911 0.003520 0.001108
min 5.314098e-06 -7.742169e-06 -1.190655e-04 -0.000340 -0.002377 -0.002340 -0.005043 -0.005230 0.000008 -0.000221 ... -0.014774 -0.020388 -0.034180 -0.012603 -0.015101 -0.005383 -0.001147 -0.001378 -0.000427 -0.000011
25% 5.316601e-06 -7.560853e-06 -1.183103e-04 -0.000337 -0.002369 -0.002329 -0.005016 -0.005201 0.000203 -0.000215 ... -0.001634 -0.017976 -0.011855 -0.011067 -0.014445 -0.002700 -0.000863 -0.000598 -0.000246 0.001670
50% 5.318709e-06 -7.408243e-06 -1.179311e-04 -0.000336 -0.000170 -0.000230 -0.000006 -0.000367 0.000206 -0.000106 ... 0.000332 -0.003966 0.000205 -0.002593 -0.001339 -0.002630 -0.000490 -0.000308 -0.000133 0.001716
75% 5.320892e-06 -7.257442e-06 -1.175302e-04 -0.000335 -0.000168 -0.000228 -0.000001 -0.000363 0.001661 0.001283 ... 0.000596 -0.003794 0.000389 -0.002487 -0.001272 -0.002299 0.002913 0.001306 0.007041 0.003281
max 5.323512e-06 -7.084694e-06 -1.167591e-04 -0.000333 -0.000087 -0.000059 0.000065 0.000028 0.001790 0.001299 ... 0.000806 0.000108 0.000703 0.000063 0.000039 0.000017 0.020418 0.001960 0.019851 0.004013

8 rows × 150 columns

In [15]:
data_set.head(2)
Out[15]:
VA:LS1_CA01:BPM_D1129:X_RD VA:LS1_CA01:BPM_D1129:Y_RD VA:LS1_CA01:BPM_D1144:X_RD VA:LS1_CA01:BPM_D1144:Y_RD VA:LS1_WA01:BPM_D1155:X_RD VA:LS1_WA01:BPM_D1155:Y_RD VA:LS1_CA02:BPM_D1163:X_RD VA:LS1_CA02:BPM_D1163:Y_RD VA:LS1_CA02:BPM_D1177:X_RD VA:LS1_CA02:BPM_D1177:Y_RD ... VA:FS1_BMS:BPM_D2587:X_RD VA:FS1_BMS:BPM_D2587:Y_RD VA:FS1_BMS:BPM_D2600:X_RD VA:FS1_BMS:BPM_D2600:Y_RD VA:FS1_BMS:BPM_D2665:X_RD VA:FS1_BMS:BPM_D2665:Y_RD VA:FS1_BMS:BPM_D2690:X_RD VA:FS1_BMS:BPM_D2690:Y_RD VA:FS1_BMS:BPM_D2702:X_RD VA:FS1_BMS:BPM_D2702:Y_RD
time
2020-11-16 15:10:00-05:00 0.000005 -0.000008 -0.000118 -0.000336 -0.000087 -0.000095 -2.884984e-07 -0.000364 0.0002 -0.000218 ... 0.000679 -0.003908 0.000518 -0.002564 -0.001352 -0.002718 -0.000976 -0.000615 -0.000319 0.001734
2020-11-16 15:10:01-05:00 0.000005 -0.000008 -0.000118 -0.000336 -0.000087 -0.000095 -2.884984e-07 -0.000364 0.0002 -0.000218 ... 0.000679 -0.003908 0.000518 -0.002564 -0.001352 -0.002718 -0.000976 -0.000615 -0.000319 0.001734

2 rows × 150 columns

In [16]:
data_set.tail(2)
Out[16]:
VA:LS1_CA01:BPM_D1129:X_RD VA:LS1_CA01:BPM_D1129:Y_RD VA:LS1_CA01:BPM_D1144:X_RD VA:LS1_CA01:BPM_D1144:Y_RD VA:LS1_WA01:BPM_D1155:X_RD VA:LS1_WA01:BPM_D1155:Y_RD VA:LS1_CA02:BPM_D1163:X_RD VA:LS1_CA02:BPM_D1163:Y_RD VA:LS1_CA02:BPM_D1177:X_RD VA:LS1_CA02:BPM_D1177:Y_RD ... VA:FS1_BMS:BPM_D2587:X_RD VA:FS1_BMS:BPM_D2587:Y_RD VA:FS1_BMS:BPM_D2600:X_RD VA:FS1_BMS:BPM_D2600:Y_RD VA:FS1_BMS:BPM_D2665:X_RD VA:FS1_BMS:BPM_D2665:Y_RD VA:FS1_BMS:BPM_D2690:X_RD VA:FS1_BMS:BPM_D2690:Y_RD VA:FS1_BMS:BPM_D2702:X_RD VA:FS1_BMS:BPM_D2702:Y_RD
time
2020-11-16 16:16:58-05:00 0.000005 -0.000007 -0.000118 -0.000337 -0.000143 -0.000062 0.000056 0.000021 0.000013 -0.000005 ... 0.000008 0.000068 0.000012 0.000041 -8.031803e-08 -0.000006 -0.00002 -0.000011 0.000006 -0.000005
2020-11-16 16:16:59-05:00 0.000005 -0.000007 -0.000118 -0.000337 -0.000143 -0.000062 0.000056 0.000021 0.000013 -0.000005 ... 0.000008 0.000068 0.000012 0.000041 -8.031803e-08 -0.000006 -0.00002 -0.000011 0.000006 -0.000005

2 rows × 150 columns

Plot the trajectory distribution along time range¶

Extract X and Y trajectory readings¶

In [17]:
data_set_x = data_set.iloc[:, 0::2]
data_set_y = data_set.iloc[:, 1::2]
In [18]:
data_set_x.head(2)
Out[18]:
VA:LS1_CA01:BPM_D1129:X_RD VA:LS1_CA01:BPM_D1144:X_RD VA:LS1_WA01:BPM_D1155:X_RD VA:LS1_CA02:BPM_D1163:X_RD VA:LS1_CA02:BPM_D1177:X_RD VA:LS1_WA02:BPM_D1188:X_RD VA:LS1_CA03:BPM_D1196:X_RD VA:LS1_CA03:BPM_D1211:X_RD VA:LS1_WA03:BPM_D1222:X_RD VA:LS1_CB01:BPM_D1231:X_RD ... VA:FS1_CSS:BPM_D2383:X_RD VA:FS1_BBS:BPM_D2421:X_RD VA:FS1_BBS:BPM_D2466:X_RD VA:FS1_BMS:BPM_D2502:X_RD VA:FS1_BMS:BPM_D2537:X_RD VA:FS1_BMS:BPM_D2587:X_RD VA:FS1_BMS:BPM_D2600:X_RD VA:FS1_BMS:BPM_D2665:X_RD VA:FS1_BMS:BPM_D2690:X_RD VA:FS1_BMS:BPM_D2702:X_RD
time
2020-11-16 15:10:00-05:00 0.000005 -0.000118 -0.000087 -2.884984e-07 0.0002 0.000083 0.000225 -0.00003 0.000003 -0.000097 ... -0.001219 -0.002086 -0.004205 0.00147 0.001525 0.000679 0.000518 -0.001352 -0.000976 -0.000319
2020-11-16 15:10:01-05:00 0.000005 -0.000118 -0.000087 -2.884984e-07 0.0002 0.000083 0.000225 -0.00003 0.000003 -0.000097 ... -0.001219 -0.002086 -0.004205 0.00147 0.001525 0.000679 0.000518 -0.001352 -0.000976 -0.000319

2 rows × 75 columns

Show data as images¶

In [19]:
# x readings
heatmap(data_set_x, cmap='bwr')
Out[19]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fe1da016670>
In [20]:
# y readings
heatmap(data_set_y, cmap='bwr')
Out[20]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fe1d8587550>

Question: What were the machine settings when the trajectory reached minimum?¶

(When the trajectory correction was performed)

Show trajectory standard deviation trend¶

In [21]:
stdx_series = data_set_x.std(axis=1) * 1e3  # m --> mm
stdy_series = data_set_y.std(axis=1) * 1e3  # m --> mm
In [22]:
plt.plot(stdx_series, label='$\sigma_x$', lw=2)
plt.plot(stdy_series, label='$\sigma_y$', lw=2)
plt.xlabel('Time in UTC', fontsize=14)
plt.ylabel('Trajectory Deviation [mm]', fontsize=14)
plt.grid()
plt.legend()
Out[22]:
<matplotlib.legend.Legend at 0x7fe1d9da6ee0>

Find the timestamp at which both $\sigma_x$ and $\sigma_y$ reaches minimum¶

In [23]:
t_min_x = stdx_series.idxmin()
t_min_y = stdy_series.idxmin()
x_min = stdx_series.min()
y_min = stdy_series.min()

print(f"Sigma x reaches min at: {t_min_x}, of value: {x_min:.3f} [mm]")
print(f"Sigma y reaches min at: {t_min_y}, of value: {y_min:.3f} [mm]")
Sigma x reaches min at: 2020-11-16 15:49:06-05:00, of value: 0.024 [mm]
Sigma y reaches min at: 2020-11-16 15:49:13-05:00, of value: 0.043 [mm]

Retrieve the machine settings at a specific time¶

Signature: get_dataset_at_time(element_list, field_list, at_time, **kws)
Docstring:
Pull data from Archiver Appliance, with a given list of devices and dynamic fields at a
specified time.

Parameters
----------
element_list : list
    A list of high-level device element objects.
field_list : list
    A list of field names should applied to all elements, otherwise skip invalid field which
    does not belong to some element.
at_time : str
    A string of time of the data in ISO8601 format.

Keyword Arguments
-----------------
client : ArchiverDataClient
    ArchiverDataClient instance, default is FRIBArchiverDataClient.
handle : str
    PV handle for field list, by default is 'readback', other options: 'setpoint'.
tz : str
    Name of timezone for the returned index, default is local zone.

Returns
-------
r : dataframe
    Pandas dataframe.
In [24]:
# 2020-11-16 15:49:13-05:00
t = dformat(2020, 11, 16, 15, 49, 13) 
df = get_dataset_at_time(non_diag_devices, ['I', 'AMP', 'PHA'], 
                         t, handle='setpoint',
                         client=data_client,
                         tz='America/New_York')
In [25]:
df
Out[25]:
Name Field Type Pos Setpoint time
0 LS1_CA01:DCV_D1132 I VCOR 0.785365 1.455600e-04 2020-11-16 14:20:57.045000-05:00
1 LS1_CA01:DCH_D1132 I HCOR 0.785365 2.150000e-06 2020-11-16 14:20:56.940000-05:00
2 LS1_CA01:DCV_D1146 I VCOR 2.260604 1.834400e-04 2020-11-16 15:48:49.753000-05:00
3 LS1_CA01:DCH_D1146 I HCOR 2.260604 -3.482000e-05 2020-11-16 15:48:49.750000-05:00
4 LS1_CA02:DCV_D1165 I VCOR 4.158460 1.690400e-04 2020-11-16 15:48:49.764000-05:00
... ... ... ... ... ... ...
113 FS1_BMS:DCH_D2584 I HCOR 146.052835 -1.300000e-07 2020-11-16 15:48:50.019000-05:00
114 FS1_BMS:DCV_D2640 I VCOR 151.672285 7.689300e-04 2020-11-16 15:48:50.026000-05:00
115 FS1_BMS:DCH_D2640 I HCOR 151.672285 2.198000e-05 2020-11-16 15:48:50.025000-05:00
116 FS1_BMS:DCV_D2662 I VCOR 153.794690 -4.819400e-04 2020-11-16 15:48:50.031000-05:00
117 FS1_BMS:DCH_D2662 I HCOR 153.794690 -2.711000e-05 2020-11-16 15:48:50.029000-05:00

118 rows × 6 columns

Export settings as a CSV file to work with Settings Manager¶

  1. The user controls where to export the data file
  2. The data file can be drag and drop into Settings Manager to work with
  3. The data file also can be put into the common data directory where all other settings files are managed
In [26]:
from archappl.contrib.data import export_as_settings_manager_datafile
Signature: export_as_settings_manager_datafile(df, filepath, **kws)
Docstring:
Export dataframe as the datafile for Settings Manager.

Parameters
----------
df : dataframe
    Data of device settings.
filepath : str
    Full path of exported data file.

Keyword Arguments
-----------------
note : str
    Note string.
tags : str
    Tags string.
machine : str
    Name of machine, default is 'FRIB'.
segment : str
    Name of segment, default is 'LINAC'.
In [27]:
export_as_settings_manager_datafile(df, f'settings_at_{t}.csv', note='Settings pulled from archiver',
                                    machine='FRIB_VA', segment='LS1FS1')
In [28]:
!cat settings_at_2020-11-16T20\:49\:13.000Z.csv
# timestamp: 1605559639.725576
# datetime: 2020-11-16T15:47:19.725576
# note: Settings pulled from archiver
# filepath: settings_at_2020-11-16T20:49:13.000Z.csv
# user: tong
# ion_name: 
# ion_number: 
# ion_mass: 
# ion_charge: 
# machine: FRIB_VA
# segment: LS1FS1
# tags: 
# app: Settings Manager
# version: 5.0
Name,Field,Type,Pos,Setpoint,Readback,Last Setpoint,Tolerance,Writable
LS1_CA01:DCV_D1132,I,VCOR,0.7853645,0.00014556,nan,nan,0.1,True
LS1_CA01:DCH_D1132,I,HCOR,0.7853645,2.15e-06,nan,nan,0.1,True
LS1_CA01:DCV_D1146,I,VCOR,2.2606035,0.00018344,nan,nan,0.1,True
LS1_CA01:DCH_D1146,I,HCOR,2.2606035,-3.482e-05,nan,nan,0.1,True
LS1_CA02:DCV_D1165,I,VCOR,4.1584595,0.00016904,nan,nan,0.1,True
LS1_CA02:DCH_D1165,I,HCOR,4.1584595,-0.00012577,nan,nan,0.1,True
LS1_CA02:DCV_D1180,I,VCOR,5.6336985,0.00014821,nan,nan,0.1,True
LS1_CA02:DCH_D1180,I,HCOR,5.6336985,5.185e-05,nan,nan,0.1,True
LS1_CA03:DCV_D1199,I,VCOR,7.5315545,0.00013771,nan,nan,0.1,True
LS1_CA03:DCH_D1199,I,HCOR,7.5315545,2.356e-05,nan,nan,0.1,True
LS1_CA03:DCV_D1214,I,VCOR,9.0067935,0.00021266,nan,nan,0.1,True
LS1_CA03:DCH_D1214,I,HCOR,9.0067935,-3.084e-05,nan,nan,0.1,True
LS1_CB01:DCV_D1235,I,VCOR,11.14420784,0.00085521,nan,nan,0.1,True
LS1_CB01:DCH_D1235,I,HCOR,11.14420784,2.514e-05,nan,nan,0.1,True
LS1_CB01:DCV_D1255,I,VCOR,13.14193368,0.00080906,nan,nan,0.1,True
LS1_CB01:DCH_D1255,I,HCOR,13.14193368,3.316e-05,nan,nan,0.1,True
LS1_CB01:DCV_D1275,I,VCOR,15.13965952,0.00075353,nan,nan,0.1,True
LS1_CB01:DCH_D1275,I,HCOR,15.13965952,-3.677e-05,nan,nan,0.1,True
LS1_CB02:DCV_D1299,I,VCOR,17.51663236,0.00061836,nan,nan,0.1,True
LS1_CB02:DCH_D1299,I,HCOR,17.51663236,3.682e-05,nan,nan,0.1,True
LS1_CB02:DCV_D1319,I,VCOR,19.5143582,0.0004911,nan,nan,0.1,True
LS1_CB02:DCH_D1319,I,HCOR,19.5143582,1.759e-05,nan,nan,0.1,True
LS1_CB02:DCV_D1339,I,VCOR,21.51208404,0.00049448,nan,nan,0.1,True
LS1_CB02:DCH_D1339,I,HCOR,21.51208404,-4.45e-06,nan,nan,0.1,True
LS1_CB03:DCV_D1363,I,VCOR,23.88905688,0.00039428,nan,nan,0.1,True
LS1_CB03:DCH_D1363,I,HCOR,23.88905688,2.663e-05,nan,nan,0.1,True
LS1_CB03:DCV_D1383,I,VCOR,25.88678272,0.00033497,nan,nan,0.1,True
LS1_CB03:DCH_D1383,I,HCOR,25.88678272,2.014e-05,nan,nan,0.1,True
LS1_CB03:DCV_D1403,I,VCOR,27.88450856,0.00036422,nan,nan,0.1,True
LS1_CB03:DCH_D1403,I,HCOR,27.88450856,3.4e-07,nan,nan,0.1,True
LS1_CB04:DCV_D1426,I,VCOR,30.2614814,0.00029213,nan,nan,0.1,True
LS1_CB04:DCH_D1426,I,HCOR,30.2614814,2.186e-05,nan,nan,0.1,True
LS1_CB04:DCV_D1446,I,VCOR,32.25920724,0.00026242,nan,nan,0.1,True
LS1_CB04:DCH_D1446,I,HCOR,32.25920724,2.022e-05,nan,nan,0.1,True
LS1_CB04:DCV_D1466,I,VCOR,34.25693308,0.00029325,nan,nan,0.1,True
LS1_CB04:DCH_D1466,I,HCOR,34.25693308,1.74e-06,nan,nan,0.1,True
LS1_CB05:DCV_D1490,I,VCOR,36.63390592,0.00022976,nan,nan,0.1,True
LS1_CB05:DCH_D1490,I,HCOR,36.63390592,1.95e-05,nan,nan,0.1,True
LS1_CB05:DCV_D1510,I,VCOR,38.63163176,0.00021353,nan,nan,0.1,True
LS1_CB05:DCH_D1510,I,HCOR,38.63163176,1.9e-05,nan,nan,0.1,True
LS1_CB05:DCV_D1530,I,VCOR,40.6293576,0.00024265,nan,nan,0.1,True
LS1_CB05:DCH_D1530,I,HCOR,40.6293576,2.86e-06,nan,nan,0.1,True
LS1_CB06:DCV_D1554,I,VCOR,43.00633044,0.00018918,nan,nan,0.1,True
LS1_CB06:DCH_D1554,I,HCOR,43.00633044,1.82e-05,nan,nan,0.1,True
LS1_CB06:DCV_D1574,I,VCOR,45.00405628,0.00018111,nan,nan,0.1,True
LS1_CB06:DCH_D1574,I,HCOR,45.00405628,1.712e-05,nan,nan,0.1,True
LS1_CB06:DCV_D1594,I,VCOR,47.00178212,0.00021416,nan,nan,0.1,True
LS1_CB06:DCH_D1594,I,HCOR,47.00178212,3.88e-06,nan,nan,0.1,True
LS1_CB07:DCV_D1618,I,VCOR,49.37875496,0.00016468,nan,nan,0.1,True
LS1_CB07:DCH_D1618,I,HCOR,49.37875496,1.538e-05,nan,nan,0.1,True
LS1_CB07:DCV_D1637,I,VCOR,51.3764808,0.00016049,nan,nan,0.1,True
LS1_CB07:DCH_D1637,I,HCOR,51.3764808,1.766e-05,nan,nan,0.1,True
LS1_CB07:DCV_D1657,I,VCOR,53.37420664,0.00019645,nan,nan,0.1,True
LS1_CB07:DCH_D1657,I,HCOR,53.37420664,2.36e-06,nan,nan,0.1,True
LS1_CB08:DCV_D1681,I,VCOR,55.75117948,0.00014625,nan,nan,0.1,True
LS1_CB08:DCH_D1681,I,HCOR,55.75117948,1.503e-05,nan,nan,0.1,True
LS1_CB08:DCV_D1701,I,VCOR,57.74890532,0.00014546,nan,nan,0.1,True
LS1_CB08:DCH_D1701,I,HCOR,57.74890532,1.666e-05,nan,nan,0.1,True
LS1_CB08:DCV_D1721,I,VCOR,59.74663116,0.00017756,nan,nan,0.1,True
LS1_CB08:DCH_D1721,I,HCOR,59.74663116,3.44e-06,nan,nan,0.1,True
LS1_CB09:DCV_D1745,I,VCOR,62.123604,0.00013135,nan,nan,0.1,True
LS1_CB09:DCH_D1745,I,HCOR,62.123604,1.341e-05,nan,nan,0.1,True
LS1_CB09:DCV_D1765,I,VCOR,64.12132984,0.00013235,nan,nan,0.1,True
LS1_CB09:DCH_D1765,I,HCOR,64.12132984,1.604e-05,nan,nan,0.1,True
LS1_CB09:DCV_D1785,I,VCOR,66.11905568,0.00016133,nan,nan,0.1,True
LS1_CB09:DCH_D1785,I,HCOR,66.11905568,3.43e-06,nan,nan,0.1,True
LS1_CB10:DCV_D1809,I,VCOR,68.49602852,0.00011953,nan,nan,0.1,True
LS1_CB10:DCH_D1809,I,HCOR,68.49602852,1.207e-05,nan,nan,0.1,True
LS1_CB10:DCV_D1829,I,VCOR,70.49375436,0.0001209,nan,nan,0.1,True
LS1_CB10:DCH_D1829,I,HCOR,70.49375436,1.502e-05,nan,nan,0.1,True
LS1_CB10:DCV_D1849,I,VCOR,72.4914802,0.00015105,nan,nan,0.1,True
LS1_CB10:DCH_D1849,I,HCOR,72.4914802,3.19e-06,nan,nan,0.1,True
LS1_CB11:DCV_D1872,I,VCOR,74.86845304,0.0001088,nan,nan,0.1,True
LS1_CB11:DCH_D1872,I,HCOR,74.86845304,1.274e-05,nan,nan,0.1,True
LS1_CB11:DCV_D1892,I,VCOR,76.86617888,0.00011545,nan,nan,0.1,True
LS1_CB11:DCH_D1892,I,HCOR,76.86617888,9.95e-06,nan,nan,0.1,True
LS1_CB11:DCV_D1912,I,VCOR,78.86390472,0.00012897,nan,nan,0.1,True
LS1_CB11:DCH_D1912,I,HCOR,78.86390472,1.334e-05,nan,nan,0.1,True
LS1_BTS:DCV_D1937,I,VCOR,81.36595376,-3.87e-06,nan,nan,0.1,True
LS1_BTS:DCH_D1937,I,HCOR,81.36595376,-2.093e-05,nan,nan,0.1,True
LS1_BTS:DCV_D1964,I,VCOR,84.01395376,-1.254e-05,nan,nan,0.1,True
LS1_BTS:DCH_D1964,I,HCOR,84.01395376,1.742e-05,nan,nan,0.1,True
LS1_BTS:DCV_D1997,I,VCOR,87.34895376,1e-08,nan,nan,0.1,True
LS1_BTS:DCH_D1997,I,HCOR,87.34895376,-1.4e-07,nan,nan,0.1,True
LS1_BTS:DCV_D2024,I,VCOR,90.05516576,1.6e-07,nan,nan,0.1,True
LS1_BTS:DCH_D2024,I,HCOR,90.05516576,-9e-08,nan,nan,0.1,True
LS1_BTS:DCV_D2061,I,VCOR,93.71048676,6.136e-05,nan,nan,0.1,True
LS1_BTS:DCH_D2061,I,HCOR,93.71048676,6e-08,nan,nan,0.1,True
LS1_BTS:DCV_D2114,I,VCOR,98.98555576,0.00010865,nan,nan,0.1,True
LS1_BTS:DCH_D2114,I,HCOR,98.98555576,-5.9e-07,nan,nan,0.1,True
FS1_CSS:DCV_D2189,I,VCOR,106.57330876,0.00057446,nan,nan,0.1,True
FS1_CSS:DCH_D2189,I,HCOR,106.57330876,1.23e-06,nan,nan,0.1,True
FS1_CSS:DCV_D2210,I,VCOR,108.61115876,-0.00059569,nan,nan,0.1,True
FS1_CSS:DCH_D2210,I,HCOR,108.61115876,-8.3e-07,nan,nan,0.1,True
FS1_CSS:DCV_D2257,I,VCOR,113.30366476,2.3e-07,nan,nan,0.1,True
FS1_CSS:DCH_D2257,I,HCOR,113.30366476,7e-08,nan,nan,0.1,True
FS1_CSS:DCV_D2276,I,VCOR,115.19981476,-2.8e-07,nan,nan,0.1,True
FS1_CSS:DCH_D2276,I,HCOR,115.19981476,5e-08,nan,nan,0.1,True
FS1_CSS:DCV_D2351,I,VCOR,122.72630576,0.00113443,nan,nan,0.1,True
FS1_CSS:DCH_D2351,I,HCOR,122.72630576,3.399e-05,nan,nan,0.1,True
FS1_CSS:DCV_D2367,I,VCOR,124.35130576,-0.00032726,nan,nan,0.1,True
FS1_CSS:DCH_D2367,I,HCOR,124.35130576,-0.00022171,nan,nan,0.1,True
FS1_CSS:DCV_D2381,I,VCOR,125.69630576,7e-07,nan,nan,0.1,True
FS1_CSS:DCH_D2381,I,HCOR,125.69630576,0.0008024,nan,nan,0.1,True
FS1_BBS:DCV_D2412,I,VCOR,128.836832826,-5.3e-07,nan,nan,0.1,True
FS1_BBS:DCH_D2412,I,HCOR,128.836832826,0.00328714,nan,nan,0.1,True
FS1_BBS:DCV_D2476,I,VCOR,135.19458396,-3.8e-07,nan,nan,0.1,True
FS1_BBS:DCH_D2476,I,HCOR,135.19458396,0.0032,nan,nan,0.1,True
FS1_BMS:DCV_D2507,I,VCOR,138.335236526,2.5e-07,nan,nan,0.1,True
FS1_BMS:DCH_D2507,I,HCOR,138.335236526,0.00095394,nan,nan,0.1,True
FS1_BMS:DCV_D2534,I,VCOR,141.005236526,7e-07,nan,nan,0.1,True
FS1_BMS:DCH_D2534,I,HCOR,141.005236526,-0.00023002,nan,nan,0.1,True
FS1_BMS:DCV_D2584,I,VCOR,146.052834626,-4.8e-07,nan,nan,0.1,True
FS1_BMS:DCH_D2584,I,HCOR,146.052834626,-1.3e-07,nan,nan,0.1,True
FS1_BMS:DCV_D2640,I,VCOR,151.672284626,0.00076893,nan,nan,0.1,True
FS1_BMS:DCH_D2640,I,HCOR,151.672284626,2.198e-05,nan,nan,0.1,True
FS1_BMS:DCV_D2662,I,VCOR,153.794689726,-0.00048194,nan,nan,0.1,True
FS1_BMS:DCH_D2662,I,HCOR,153.794689726,-2.711e-05,nan,nan,0.1,True

Drag and drop the settings file into Settings Manager:¶

loaded_into_settings_manager

After apply all the device settings, the trajectory shows as before (solid line) and after (w/ marker) changing:¶

tv_data_show

Beam Data, 2020-10-13¶

BPM readings from 2020-10-13, 16:00:00 DST to 20:00:00 DST, when trajectory correction with ORM was performing.

  1. Daylight saving time range
  2. BPMs from MEBT to FS1, excluded: D1413, D1980, D2421, D2436, D2466, D2467
  3. Aligned timestamp, resampled at 1 Hz
In [29]:
from archappl.contrib import read_csv
In [30]:
data = read_csv('/home/tong/Downloads/bpm_data.csv')
data_x = data.iloc[:, 0::2]
data_y = data.iloc[:, 1::2]
data.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 14400 entries, 2020-10-13 16:00:00-04:00 to 2020-10-13 19:59:59-04:00
Columns: 150 entries, FE_MEBT:BPM_D1056:XPOS_RD to FS1_BMS:BPM_D2690:YPOS_RD
dtypes: float64(150)
memory usage: 16.6 MB
In [31]:
# x
heatmap(data_x, cmap='bwr', vmin=-15, vmax=15)
Out[31]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fe1c8434e50>
In [32]:
# y
heatmap(data_y, cmap='bwr', vmin=-15, vmax=15)
Out[32]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fe1c83aa400>
In [33]:
plt.plot(data_x.std(axis=1), label='$\sigma_x$', lw=2)
plt.plot(data_y.std(axis=1), label='$\sigma_y$', lw=2)
plt.xlabel('Time in UTC', fontsize=14)
plt.ylabel('Trajectory Deviation [mm]', fontsize=14)
plt.grid()
plt.legend()
Out[33]:
<matplotlib.legend.Legend at 0x7fe1c8275d60>