Source code for APS_BlueSky_tools.demo

#!/usr/bin/env python

"""
demonstrate a BlueSky callback that writes SPEC data files

.. autosummary::
   
   ~plan_catalog
   ~specfile_example

"""

# Copyright (c) 2017-2018, UChicago Argonne, LLC.  See LICENSE file.


import datetime
from .filewriters import SpecWriterCallback, _rebuild_scan_command
import logging


logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
DEMO_SPEC_FILE = "test_specdata.txt"


[docs]def specfile_example(headers, filename=DEMO_SPEC_FILE): """write one or more headers (scans) to a SPEC data file""" specwriter = SpecWriterCallback(filename=filename, auto_write=True) if not isinstance(headers, list): headers = [headers] for h in headers: for key, doc in h.db.get_documents(h): specwriter.receiver(key, doc) lines = specwriter.prepare_scan_contents() if lines is not None: logger.info("\n".join(lines)) logger.info("#"*60) logger.info("Look at SPEC data file: "+specwriter.spec_filename)
[docs]def plan_catalog(db): """ make a table of all scans known in the databroker Example:: from APS_BlueSky_tools.demo import plan_catalog plan_catalog(db) """ import pyRestTable t = pyRestTable.Table() t.labels = "date/time short_uid id plan args".split() for h in db.hs.find_run_starts(): row = [] dt = datetime.datetime.fromtimestamp(h["time"]) row.append(str(dt).split(".")[0]) row.append(h['uid'][:8]) command = _rebuild_scan_command(h) scan_id = command.split()[0] command = command[len(scan_id):].strip() plan = command.split("(")[0] args = command[len(plan)+1:].rstrip(")") row.append(scan_id) row.append(plan) row.append(args) t.addRow(row) t.rows = t.rows[::-1] # reverse the list return t
def main(): from databroker import Broker # load config from ~/.config/databroker/mongodb_config.yml db = Broker.named("mongodb_config") table = plan_catalog(db) print(table) print("Found {} plans (start documents)".format(len(table.rows))) if __name__ == "__main__": main() # load config from ~/.config/databroker/mongodb_config.yml # db = Broker.named("mongodb_config") # plan_catalog(db) # specfile_example(db[-1]) # specfile_example(db[-5:][::-1]) # specfile_example(db["1d2a3890"]) # specfile_example(db["15d12d"]) # specfile_example(db[-10:-5]) # specfile_example(db[-80]) # specfile_example(db[-10000:][-25:])