Skip to content

Instantly share code, notes, and snippets.


Thomas A Caswell tacaswell

  • Brookhaven National Lab
  • New York
View GitHub Profile
tacaswell /
Created Feb 11, 2022
Notes on conda "overlays"

Hot-fixing and extending conda environments


We deploy root-owned conda environments which are the basis of the data collection and analysis environments. On one hand because these are owned by root they are write-protected and ensure that users can not accidentally break the environment, on the other hand because they are write-protected they can not be upgraded or extended. While we want to run with a stable, standard, well understood software environment, we do need this

import numpy as np
import matplotlib
import matplotlib.lines
from matplotlib.artist import allow_rasterization
import matplotlib.pyplot as plt
class MatplotlibException(Exception):
tacaswell /
Last active Oct 27, 2021
What time is it where your friends are?
#! /usr/bin/env python3
_facilities = {
"SLAC/ALS": "America/Los_Angeles",
"APS": "America/Chicago",
"NSLS-II": "America/New_York",
"DLS": "Europe/London",
"MAXIV": "Europe/Paris",
"SLS": "Europe/Paris",
tacaswell /
Last active Aug 13, 2021
A quick little function to walk through the axes in a Figure instance and label each one with annotate.
import string
from itertools import cycle
from six.moves import zip
def label_axes(fig, labels=None, loc=None, **kwargs):
Walks through axes and labels each.
kwargs are collected and passed to `annotate`
tacaswell /
Last active May 27, 2021
factory for adding zoom callback to matplotlib graphs
import matplotlib.pyplot as plt
def zoom_factory(ax,base_scale = 2.):
def zoom_fun(event):
# get the current x and y limits
cur_xlim = ax.get_xlim()
cur_ylim = ax.get_ylim()
# set the range
cur_xrange = (cur_xlim[1] - cur_xlim[0])*.5
tacaswell /
Last active Feb 18, 2021
Files for working with reduced data from 2020-12 experiments at XPD

Collection of notebooks an files for playing with gpcam data

  1. explore_pgcam_data.ipynb -> demo of how to pulll reduced data out of the msgpack databroker
  2. -> code run on xpd against raw data broker to sort out what raw runs we are interested in
  3. -> code run to re-process the raw data and produce the reduced outputs
tacaswell /
Created Jan 17, 2013
Format nicely printed labels based on pi for matplotlib x-axis
def format_frac(fr):
'''Convert a/b to latex'''
sp = str(fr).split('/')
if len(sp) == 1:
return sp[0]
return r'$\frac{%s}{%s}$' % tuple(sp)
frac_size = 4
tacaswell /
Created May 16, 2020
Example of how to ingest sensord logs (from journalctl) to EventModel
from event_model import compose_run
import datetime
import dateutil.parser
import itertools
from io import StringIO
import subprocess
import numpy as np
import functools
def extract_event(ts, batch):
tacaswell / ironmanpython.txt
Created Apr 8, 2020
trace back -> IPython exit
View ironmanpython.txt
Python 3.9.0a5+ (heads/master:799d7d61a9, Apr 6 2020, 17:38:49)
Type 'copyright', 'credits' or 'license' for more information
IPython -- An enhanced Interactive Python. Type '?' for help.
In [1]: 1 /0
Traceback (most recent call last):
File "/home/tcaswell/.virtualenvs/bleeding/lib/python3.9/site-packages/IPython/core/", line 3331, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-1-a37332903225>", line 1, in <module>
1 /0
tacaswell /
Last active Apr 2, 2020
ingest xpd chi files

This is code to consume processed data from XPD back into document model