Skip to content

Instantly share code, notes, and snippets.

View matham's full-sized avatar

Matt Einhorn matham

View GitHub Profile
import tqdm
import subprocess
from pathlib import Path
import csv
CSV_NAME = "_tracked_annotated"
def get_csv_mp4(root: Path) -> list[Path]:
csvs = set()
@matham
matham / play_network.py
Created April 17, 2025 21:27
Client API for receiving images from a Filers server over the network (or locally).
"""
Client API for receiving images from a Filers server over the network (or locally).
To install::
pip install tree_config ffpyplayer
To use, see `RemoteVideoPlayer` and the sample script at the end.
"""
from itertools import accumulate
@matham
matham / imspector_scripting.py
Created February 3, 2025 20:55
Tools for acquiring and processing LaVision lightsheet data
import pyautogui as pag
import pyscreeze
import pygetwindow
import pyperclip
from PIL import Image
import time
import datetime
from pathlib import Path
from dataclasses import dataclass
from textwrap import dedent
@matham
matham / lightsheet_lens.py
Created February 3, 2025 20:48
Analyzes lightsheet optics for lenses and RI
import math
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import scipy.special
from scipy.stats import linregress
from scipy import integrate
import scipy.optimize as optimize
from scipy.optimize import curve_fit, minimize, Bounds
import numpy as np
from functools import partial
@matham
matham / behavior_analysis.py
Last active June 2, 2025 22:06
Export results for teaball experiments - sniffing, occupancy etc
from dataclasses import dataclass, field
import pprint
from typing import Callable, Union, Literal, Any
from pathlib import Path
import csv
from scipy.signal import decimate
from copy import deepcopy
import math
import tqdm
import numpy as np
from pathlib import Path
import csv
import numpy as np
root = Path(r"...")
odors = {"CH4", "NH3", "TBP", "TEP", "Air", "Humidity"}
odors = list(sorted(odors))
confusents = {"None", "Diesel", "Gasoline", "Roundup", "Tobacco", "Smoke", "Vanilla"}
confusents = list(sorted(confusents))
import h5py
import matplotlib.pyplot as plt
import numpy as np
import re
from elephant.statistics import time_histogram
import quantities
from neo import SpikeTrain
def arr2str(arr):
package com.cplab.jstripe;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import io.scif.ImageMetadata;
import io.scif.config.SCIFIOConfig;
comm = TeensyComm()
comm.create_serial_device('COM5')
comm.write_serial(comm.make_modio_create(15, 2, 0x12, ModIOFreq.freq_100k, ModIOPullup.disabled))
comm.write_serial(comm.make_modio_write_digital(46, 2, 0x12, False, True))
comm.write_serial(comm.make_modio_write_digital(46, 2, 0x12, False))
for i in range(200):
comm.write_serial(comm.make_modio_write_digital(46, 2, 0x12, *vals[i % 2]))
#comm.write_serial(comm.make_modio_write_digital(46, 2, 0x13, *vals[i % 2]))
import trio
import contextlib
from async_generator import aclosing
async def gen():
for i in range(10):
yield i