diff --git a/src/murfey/server/api/hub.py b/src/murfey/server/api/hub.py index c0a74d05a..b74f7270e 100644 --- a/src/murfey/server/api/hub.py +++ b/src/murfey/server/api/hub.py @@ -1,11 +1,14 @@ from logging import getLogger from typing import List -from fastapi import APIRouter +from fastapi import APIRouter, HTTPException from fastapi.responses import FileResponse from pydantic import BaseModel +from sqlmodel import select +from murfey.server.murfey_db import murfey_db from murfey.util.config import get_machine_config +from murfey.util.db import MagnificationImageShift logger = getLogger("murfey.server.api.hub") @@ -35,3 +38,22 @@ def get_instrument_image(instrument_name: str) -> FileResponse: if config.get(instrument_name): return FileResponse(config[instrument_name].image_path) return FileResponse() + + +class ImageShift(BaseModel): + x: float + y: float + + +@router.get("/instrument/{instrument_name}/mag/{mag}/shifts") +def get_instrument_mag_image_shift( + instrument_name: str, mag: int, db=murfey_db +) -> ImageShift: + shifts = db.exec( + select(MagnificationImageShift) + .where(MagnificationImageShift.instrument_name == instrument_name) + .where(MagnificationImageShift.magnification == mag) + ).one_or_none() + if shifts is None: + raise HTTPException(status_code=404, detail="Image shifts not found") + return ImageShift(x=shifts.x_shift, y=shifts.y_shift) diff --git a/src/murfey/util/db.py b/src/murfey/util/db.py index f49fed38b..3b3b77757 100644 --- a/src/murfey/util/db.py +++ b/src/murfey/util/db.py @@ -26,6 +26,13 @@ class MagnificationLookup(SQLModel, table=True): # type: ignore pixel_size: float = Field(primary_key=True) +class MagnificationImageShift(SQLModel, table=True): # type: ignore + magnification: int = Field(primary_key=True) + instrument_name: str = Field(primary_key=True) + x_shift: float # in microns + y_shift: float # in microns + + class ClientEnvironment(SQLModel, table=True): # type: ignore client_id: Optional[int] = Field(primary_key=True, unique=True) visit: str = Field(default="") diff --git a/src/murfey/util/route_manifest.yaml b/src/murfey/util/route_manifest.yaml index 558600dec..5117c77d1 100644 --- a/src/murfey/util/route_manifest.yaml +++ b/src/murfey/util/route_manifest.yaml @@ -507,6 +507,15 @@ murfey.server.api.hub.router: type: str methods: - GET + - path: /instrument/{instrument_name}/mag/{mag}/shifts + function: get_instrument_mag_image_shift + path_params: + - name: instrument_name + type: str + - name: mag + type: int + methods: + - GET murfey.server.api.instrument.router: - path: /instrument_server/instruments/{instrument_name}/sessions/{session_id}/activate_instrument_server function: activate_instrument_server_for_session