Skip to content

Commit 4027b55

Browse files
committed
Split out the dbs
1 parent 7dad07e commit 4027b55

2 files changed

Lines changed: 115 additions & 78 deletions

File tree

src/murfey/util/db.py

Lines changed: 1 addition & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,11 @@
44
"""
55

66
from datetime import datetime
7-
from typing import TYPE_CHECKING, List, Optional
7+
from typing import List, Optional
88

99
import sqlalchemy
1010
from sqlmodel import Field, Relationship, SQLModel, create_engine
1111

12-
if TYPE_CHECKING:
13-
from murfey.util.processing_db import (
14-
CTF,
15-
MotionCorrection,
16-
ParticleClassificationGroup,
17-
ParticlePicker,
18-
RelativeIceThickness,
19-
TiltImageAlignment,
20-
Tomogram,
21-
)
22-
2312
"""
2413
GENERAL
2514
"""
@@ -440,14 +429,6 @@ class DataCollectionGroup(SQLModel, table=True): # type: ignore
440429
sa_relationship_kwargs={"cascade": "delete"},
441430
)
442431
)
443-
grid_squares: List["GridSquare"] = Relationship(
444-
back_populates="data_collection_group",
445-
sa_relationship_kwargs={"cascade": "delete"},
446-
)
447-
search_maps: List["SearchMap"] = Relationship(
448-
back_populates="data_collection_group",
449-
sa_relationship_kwargs={"cascade": "delete"},
450-
)
451432

452433

453434
class NotificationParameter(SQLModel, table=True): # type: ignore
@@ -487,13 +468,6 @@ class DataCollection(SQLModel, table=True): # type: ignore
487468
processing_jobs: List["ProcessingJob"] = Relationship(
488469
back_populates="data_collection", sa_relationship_kwargs={"cascade": "delete"}
489470
)
490-
movies: List["Movie"] = Relationship(
491-
back_populates="data_collection", sa_relationship_kwargs={"cascade": "delete"}
492-
)
493-
MotionCorrection: List["MotionCorrection"] = Relationship(
494-
back_populates="DataCollection"
495-
)
496-
Tomogram: List["Tomogram"] = Relationship(back_populates="DataCollection")
497471

498472

499473
class ProcessingJob(SQLModel, table=True): # type: ignore
@@ -595,20 +569,6 @@ class AutoProcProgram(SQLModel, table=True): # type: ignore
595569
murfey_ids: List["MurfeyLedger"] = Relationship(
596570
back_populates="auto_proc_program", sa_relationship_kwargs={"cascade": "delete"}
597571
)
598-
MotionCorrection: List["MotionCorrection"] = Relationship(
599-
back_populates="DataCollection"
600-
)
601-
Tomogram: List["Tomogram"] = Relationship(back_populates="AutoProcProgram")
602-
CTF: List["CTF"] = Relationship(back_populates="AutoProcProgram")
603-
ParticlePicker: List["ParticlePicker"] = Relationship(
604-
back_populates="AutoProcProgram"
605-
)
606-
RelativeIceThickness: List["RelativeIceThickness"] = Relationship(
607-
back_populates="AutoProcProgram"
608-
)
609-
ParticleClassificationGroup: List["ParticleClassificationGroup"] = Relationship(
610-
back_populates="AutoProcProgram"
611-
)
612572

613573

614574
class MurfeyLedger(SQLModel, table=True): # type: ignore
@@ -660,13 +620,6 @@ class GridSquare(SQLModel, table=True): # type: ignore
660620
thumbnail_size_x: Optional[int]
661621
thumbnail_size_y: Optional[int]
662622
pixel_size: Optional[float] = None
663-
scaled_pixel_size: Optional[float] = None
664-
pixel_location_x: Optional[int] = None
665-
pixel_location_y: Optional[int] = None
666-
height: Optional[int] = None
667-
width: Optional[int] = None
668-
angle: Optional[float] = None
669-
quality_indicator: Optional[float] = None
670623
image: str = ""
671624
session: Optional[Session] = Relationship(back_populates="grid_squares")
672625
clem_image_series: List["CLEMImageSeries"] = Relationship(
@@ -675,9 +628,6 @@ class GridSquare(SQLModel, table=True): # type: ignore
675628
foil_holes: List["FoilHole"] = Relationship(
676629
back_populates="grid_square", sa_relationship_kwargs={"cascade": "delete"}
677630
)
678-
data_collection_group: Optional["DataCollectionGroup"] = Relationship(
679-
back_populates="grid_squares"
680-
)
681631

682632

683633
class FoilHole(SQLModel, table=True): # type: ignore
@@ -694,11 +644,6 @@ class FoilHole(SQLModel, table=True): # type: ignore
694644
thumbnail_size_x: Optional[int]
695645
thumbnail_size_y: Optional[int]
696646
pixel_size: Optional[float] = None
697-
scaled_pixel_size: Optional[float] = None
698-
pixel_location_x: Optional[int] = None
699-
pixel_location_y: Optional[int] = None
700-
diameter: Optional[int] = None
701-
quality_indicator: Optional[float] = None
702647
image: str = ""
703648
grid_square: Optional[GridSquare] = Relationship(back_populates="foil_holes")
704649
session: Optional[Session] = Relationship(back_populates="foil_holes")
@@ -713,21 +658,13 @@ class FoilHole(SQLModel, table=True): # type: ignore
713658
class SearchMap(SQLModel, table=True): # type: ignore
714659
id: Optional[int] = Field(primary_key=True, default=None)
715660
session_id: int = Field(foreign_key="session.id")
716-
atlas_id: Optional[int] = Field(foreign_key="datacollectiongroup.id")
717661
name: str
718662
tag: str
719663
x_location: Optional[float] = None
720664
y_location: Optional[float] = None
721665
x_stage_position: Optional[float] = None
722666
y_stage_position: Optional[float] = None
723667
pixel_size: Optional[float] = None
724-
scaled_pixel_size: Optional[float] = None
725-
pixel_location_x: Optional[int] = None
726-
pixel_location_y: Optional[int] = None
727-
scaled_height: Optional[int] = None
728-
scaled_width: Optional[int] = None
729-
angle: Optional[float] = None
730-
quality_indicator: Optional[float] = None
731668
image: str = ""
732669
binning: Optional[float] = None
733670
reference_matrix_m11: Optional[float] = None
@@ -748,27 +685,17 @@ class SearchMap(SQLModel, table=True): # type: ignore
748685
tilt_series: List["TiltSeries"] = Relationship(
749686
back_populates="search_map", sa_relationship_kwargs={"cascade": "delete"}
750687
)
751-
data_collection_group: Optional["DataCollectionGroup"] = Relationship(
752-
back_populates="search_maps"
753-
)
754-
Tomogram: List["Tomogram"] = Relationship(back_populates="SearchMap")
755688

756689

757690
class Movie(SQLModel, table=True): # type: ignore
758691
murfey_id: int = Field(primary_key=True, foreign_key="murfeyledger.id")
759692
foil_hole_id: int = Field(foreign_key="foilhole.id", nullable=True, default=None)
760-
data_collection_id: Optional[int] = Field(foreign_key="datacollection.id")
761693
path: str
762694
image_number: int
763695
tag: str
764696
preprocessed: bool = False
765697
murfey_ledger: Optional[MurfeyLedger] = Relationship(back_populates="movies")
766698
foil_hole: Optional[FoilHole] = Relationship(back_populates="movies")
767-
data_collection: Optional["DataCollection"] = Relationship(back_populates="movies")
768-
MotionCorrection: List["MotionCorrection"] = Relationship(back_populates="Movie")
769-
TiltImageAlignment: List["TiltImageAlignment"] = Relationship(
770-
back_populates="Movie"
771-
)
772699

773700

774701
class CtfParameters(SQLModel, table=True): # type: ignore

src/murfey/util/processing_db.py

Lines changed: 114 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,102 @@
11
import datetime
2-
from typing import TYPE_CHECKING, List, Optional
2+
from typing import List, Optional
33

4-
from sqlmodel import Enum, Field, Relationship, SQLModel
4+
import sqlalchemy
5+
from sqlmodel import Enum, Field, Relationship, create_engine
56

6-
if TYPE_CHECKING:
7-
from murfey.util.db import AutoProcProgram, DataCollection, Movie, SearchMap
7+
from murfey.util.db import (
8+
AutoProcProgram as AutoProcProgramOrig,
9+
DataCollection as DataCollectionOrig,
10+
DataCollectionGroup as DataCollectionGroupOrig,
11+
FoilHole as FoilHoleOrig,
12+
GridSquare as GridSquareOrig,
13+
Movie as MovieOrig,
14+
SearchMap as SearchMapOrig,
15+
SQLModel,
16+
)
17+
18+
19+
class DataCollectionGroup(DataCollectionGroupOrig):
20+
grid_squares: List["GridSquare"] = Relationship(
21+
back_populates="data_collection_group",
22+
sa_relationship_kwargs={"cascade": "delete"},
23+
)
24+
search_maps: List["SearchMap"] = Relationship(
25+
back_populates="data_collection_group",
26+
sa_relationship_kwargs={"cascade": "delete"},
27+
)
28+
29+
30+
class DataCollection(DataCollectionOrig):
31+
movies: List["Movie"] = Relationship(
32+
back_populates="data_collection", sa_relationship_kwargs={"cascade": "delete"}
33+
)
34+
MotionCorrection: List["MotionCorrection"] = Relationship(
35+
back_populates="DataCollection"
36+
)
37+
Tomogram: List["Tomogram"] = Relationship(back_populates="DataCollection")
38+
39+
40+
class AutoProcProgram(AutoProcProgramOrig):
41+
MotionCorrection: List["MotionCorrection"] = Relationship(
42+
back_populates="DataCollection"
43+
)
44+
Tomogram: List["Tomogram"] = Relationship(back_populates="AutoProcProgram")
45+
CTF: List["CTF"] = Relationship(back_populates="AutoProcProgram")
46+
ParticlePicker: List["ParticlePicker"] = Relationship(
47+
back_populates="AutoProcProgram"
48+
)
49+
RelativeIceThickness: List["RelativeIceThickness"] = Relationship(
50+
back_populates="AutoProcProgram"
51+
)
52+
ParticleClassificationGroup: List["ParticleClassificationGroup"] = Relationship(
53+
back_populates="AutoProcProgram"
54+
)
55+
56+
57+
class GridSquare(GridSquareOrig):
58+
scaled_pixel_size: Optional[float] = None
59+
pixel_location_x: Optional[int] = None
60+
pixel_location_y: Optional[int] = None
61+
height: Optional[int] = None
62+
width: Optional[int] = None
63+
angle: Optional[float] = None
64+
quality_indicator: Optional[float] = None
65+
data_collection_group: Optional["DataCollectionGroup"] = Relationship(
66+
back_populates="grid_squares"
67+
)
68+
69+
70+
class FoilHole(FoilHoleOrig):
71+
scaled_pixel_size: Optional[float] = None
72+
pixel_location_x: Optional[int] = None
73+
pixel_location_y: Optional[int] = None
74+
diameter: Optional[int] = None
75+
quality_indicator: Optional[float] = None
76+
77+
78+
class SearchMap(SearchMapOrig):
79+
atlas_id: Optional[int] = Field(foreign_key="datacollectiongroup.id")
80+
scaled_pixel_size: Optional[float] = None
81+
pixel_location_x: Optional[int] = None
82+
pixel_location_y: Optional[int] = None
83+
scaled_height: Optional[int] = None
84+
scaled_width: Optional[int] = None
85+
angle: Optional[float] = None
86+
quality_indicator: Optional[float] = None
87+
data_collection_group: Optional["DataCollectionGroup"] = Relationship(
88+
back_populates="search_maps"
89+
)
90+
Tomogram: List["Tomogram"] = Relationship(back_populates="SearchMap")
91+
92+
93+
class Movie(MovieOrig):
94+
data_collection_id: Optional[int] = Field(foreign_key="datacollection.id")
95+
data_collection: Optional["DataCollection"] = Relationship(back_populates="movies")
96+
MotionCorrection: List["MotionCorrection"] = Relationship(back_populates="Movie")
97+
TiltImageAlignment: List["TiltImageAlignment"] = Relationship(
98+
back_populates="Movie"
99+
)
8100

9101

10102
class MotionCorrection(SQLModel, table=True): # type: ignore
@@ -249,3 +341,21 @@ class CryoemInitialModel(SQLModel, table=True): # type: ignore
249341
ParticleClassification: List["ParticleClassification"] = Relationship(
250342
back_populates="CryoemInitialModel"
251343
)
344+
345+
346+
"""
347+
FUNCTIONS
348+
"""
349+
350+
351+
def setup(url: str):
352+
engine = create_engine(url)
353+
SQLModel.metadata.create_all(engine)
354+
355+
356+
def clear(url: str):
357+
engine = create_engine(url)
358+
metadata = sqlalchemy.MetaData()
359+
metadata.create_all(engine)
360+
metadata.reflect(engine)
361+
metadata.drop_all(engine)

0 commit comments

Comments
 (0)