Skip to content

Commit a380a5b

Browse files
committed
Merge branch 'main' into cryolo-model
2 parents 05845f8 + c5a5767 commit a380a5b

4 files changed

Lines changed: 46 additions & 70 deletions

File tree

src/murfey/server/api/workflow.py

Lines changed: 11 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,11 @@
5757
TiltSeries,
5858
)
5959
from murfey.util.models import ProcessingParametersSPA, ProcessingParametersTomo
60-
from murfey.util.processing_params import cryolo_model_path, default_spa_parameters
60+
from murfey.util.processing_params import (
61+
cryolo_model_path,
62+
default_spa_parameters,
63+
motion_corrected_mrc,
64+
)
6165
from murfey.util.tomo import midpoint
6266

6367
logger = getLogger("murfey.server.api.workflow")
@@ -364,29 +368,7 @@ async def request_spa_preprocessing(
364368
machine_config = get_machine_config(instrument_name=instrument_name)[
365369
instrument_name
366370
]
367-
parts = [secure_filename(p) for p in Path(proc_file.path).parts]
368-
visit_idx = parts.index(visit_name)
369-
core = Path("/") / Path(*parts[: visit_idx + 1])
370-
ppath = Path("/") / Path(*parts)
371-
sub_dataset = ppath.relative_to(core).parts[0]
372-
extra_path = machine_config.processed_extra_directory
373-
for i, p in enumerate(ppath.parts):
374-
if p.startswith("raw"):
375-
movies_path_index = i
376-
break
377-
else:
378-
raise ValueError(f"{proc_file.path} does not contain a raw directory")
379-
mrc_out = (
380-
core
381-
/ machine_config.processed_directory_name
382-
/ sub_dataset
383-
/ extra_path
384-
/ "MotionCorr"
385-
/ "job002"
386-
/ "Movies"
387-
/ "/".join(ppath.parts[movies_path_index + 1 : -1])
388-
/ str(ppath.stem + "_motion_corrected.mrc")
389-
)
371+
mrc_out = motion_corrected_mrc(Path(proc_file.path), visit_name, machine_config)
390372
try:
391373
collected_ids = db.exec(
392374
select(DataCollectionGroup, DataCollection, ProcessingJob, AutoProcProgram)
@@ -490,7 +472,8 @@ async def request_spa_preprocessing(
490472
_transport_object.send("processing_recipe", zocalo_message)
491473
else:
492474
logger.error(
493-
f"Pe-processing was requested for {sanitise(ppath.name)} but no Zocalo transport object was found"
475+
f"Pre-processing was requested for {sanitise(Path(proc_file.path).name)} "
476+
"but no Zocalo transport object was found"
494477
)
495478
return proc_file
496479

@@ -645,22 +628,7 @@ async def request_tomography_preprocessing(
645628
machine_config = get_machine_config(instrument_name=instrument_name)[
646629
instrument_name
647630
]
648-
visit_idx = Path(proc_file.path).parts.index(visit_name)
649-
core = Path(*Path(proc_file.path).parts[: visit_idx + 1])
650-
ppath = Path("/".join(secure_filename(p) for p in Path(proc_file.path).parts))
651-
sub_dataset = "/".join(ppath.relative_to(core).parts[:-1])
652-
extra_path = machine_config.processed_extra_directory
653-
mrc_out = (
654-
core
655-
/ machine_config.processed_directory_name
656-
/ sub_dataset
657-
/ extra_path
658-
/ "MotionCorr"
659-
/ "job002"
660-
/ "Movies"
661-
/ str(ppath.stem + "_motion_corrected.mrc")
662-
)
663-
mrc_out = Path("/".join(secure_filename(p) for p in mrc_out.parts))
631+
mrc_out = motion_corrected_mrc(Path(proc_file.path), visit_name, machine_config)
664632

665633
recipe_name = machine_config.recipes.get("em-tomo-preprocess", "em-tomo-preprocess")
666634

@@ -731,7 +699,8 @@ async def request_tomography_preprocessing(
731699
_transport_object.send("processing_recipe", zocalo_message)
732700
else:
733701
logger.error(
734-
f"Pe-processing was requested for {sanitise(ppath.name)} but no Zocalo transport object was found"
702+
f"Pre-processing was requested for {sanitise(Path(proc_file.path).name)} "
703+
f"but no Zocalo transport object was found"
735704
)
736705
return proc_file
737706
else:

src/murfey/server/feedback.py

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
get_microscope,
5252
get_security_config,
5353
)
54-
from murfey.util.processing_params import default_spa_parameters
54+
from murfey.util.processing_params import default_spa_parameters, motion_corrected_mrc
5555
from murfey.util.tomo import midpoint
5656

5757
logger = logging.getLogger("murfey.server.feedback")
@@ -106,37 +106,16 @@ def get_all_tilts(tilt_series_id: int) -> List[str]:
106106
).all()
107107
if not complete_results:
108108
return []
109+
visit_name = complete_results[0][2].visit
109110
instrument_name = complete_results[0][2].instrument_name
110111
results = [r[0] for r in complete_results]
111112
machine_config = get_machine_config(instrument_name=instrument_name)[
112113
instrument_name
113114
]
114-
115-
def _mc_path(mov_path: Path) -> str:
116-
for p in mov_path.parts:
117-
if "-" in p and p.startswith(("bi", "nr", "nt", "cm", "sw")):
118-
visit_name = p
119-
break
120-
else:
121-
raise ValueError(f"No visit found in {mov_path}")
122-
visit_idx = Path(mov_path).parts.index(visit_name)
123-
core = Path(*Path(mov_path).parts[: visit_idx + 1])
124-
ppath = Path(mov_path)
125-
sub_dataset = "/".join(ppath.relative_to(core).parts[:-1])
126-
extra_path = machine_config.processed_extra_directory
127-
mrc_out = (
128-
core
129-
/ machine_config.processed_directory_name
130-
/ sub_dataset
131-
/ extra_path
132-
/ "MotionCorr"
133-
/ "job002"
134-
/ "Movies"
135-
/ str(ppath.stem + "_motion_corrected.mrc")
136-
)
137-
return str(mrc_out)
138-
139-
return [_mc_path(Path(r.movie_path)) for r in results]
115+
return [
116+
str(motion_corrected_mrc(Path(r.movie_path), visit_name, machine_config))
117+
for r in results
118+
]
140119

141120

142121
def get_job_ids(tilt_series_id: int, appid: int) -> JobIDs:

src/murfey/util/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class MachineConfig(BaseModel): # type: ignore
5757
processing_enabled: bool = True
5858
process_by_default: bool = True
5959
gain_directory_name: str = "processing"
60+
process_multiple_datasets: bool = True
6061
processed_directory_name: str = "processed"
6162
processed_extra_directory: str = ""
6263
recipes: dict[str, str] = {

src/murfey/util/processing_params.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,35 @@
44
from typing import Literal, Optional
55

66
from pydantic import BaseModel
7+
from werkzeug.utils import secure_filename
78

8-
from murfey.util.config import get_machine_config
9+
from murfey.util.config import MachineConfig, get_machine_config
10+
11+
12+
def motion_corrected_mrc(
13+
input_movie: Path, visit_name: str, machine_config: MachineConfig
14+
):
15+
parts = [secure_filename(p) for p in input_movie.parts]
16+
visit_idx = parts.index(visit_name)
17+
core = Path("/") / Path(*parts[: visit_idx + 1])
18+
ppath = Path("/") / Path(*parts)
19+
if machine_config.process_multiple_datasets:
20+
sub_dataset = ppath.relative_to(core).parts[0]
21+
else:
22+
sub_dataset = ""
23+
extra_path = machine_config.processed_extra_directory
24+
mrc_out = (
25+
core
26+
/ machine_config.processed_directory_name
27+
/ sub_dataset
28+
/ extra_path
29+
/ "MotionCorr"
30+
/ "job002"
31+
/ "Movies"
32+
/ ppath.parent.relative_to(core / sub_dataset)
33+
/ str(ppath.stem + "_motion_corrected.mrc")
34+
)
35+
return Path("/".join(secure_filename(p) for p in mrc_out.parts))
936

1037

1138
@lru_cache(maxsize=5)

0 commit comments

Comments
 (0)