Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
b06c6e7
Add support for processing legacy visits
rowanwalker96 May 28, 2026
ba7d1a2
Support both single and array job modes
rowanwalker96 May 28, 2026
d3efcb5
Check for crystal recollections
rowanwalker96 May 28, 2026
5a915a3
Seperate into model building & hit identification
rowanwalker96 Jun 3, 2026
3a59bf5
Trigger collate per target
rowanwalker96 Jun 3, 2026
1240c5f
Export pipedream results in collate wrapper
rowanwalker96 Jun 3, 2026
3de28bb
Export pipedream_refinement_metrics
rowanwalker96 Jun 3, 2026
1c46d2c
Edit soakDB rows based on RefinementOutcome
rowanwalker96 Jun 4, 2026
d36de93
Sort pandda results into scored buckets
rowanwalker96 Jun 4, 2026
4d16bc6
Move helpers to util
rowanwalker96 Jun 4, 2026
0d58b87
Improve gating logic in trigger_xchem
rowanwalker96 Jun 4, 2026
d475c95
Generate pipedream parameters yaml for manual exports
rowanwalker96 Jun 4, 2026
2eea63c
Send email upon completion
rowanwalker96 Jun 4, 2026
2229ee0
Move find_xchem_visit_dir logic into util
rowanwalker96 Jun 4, 2026
93989bd
Rename restraints wrapper
rowanwalker96 Jun 4, 2026
6769235
Small fixes
rowanwalker96 Jun 5, 2026
47b4632
Edit RefinementOutcome condition
rowanwalker96 Jun 5, 2026
0954150
Fix collate commands to run on cluster
rowanwalker96 Jun 5, 2026
0ceb760
Write PanDDA results to soakDB
rowanwalker96 Jun 10, 2026
ee16809
Run XCA in auto dir
rowanwalker96 Jun 10, 2026
b661956
Small fixes
rowanwalker96 Jun 12, 2026
f27c0fc
Add pipedream array job option
rowanwalker96 Jun 12, 2026
5e2ff28
Small fixes
rowanwalker96 Jun 15, 2026
4f6ad08
Move email to crud
rowanwalker96 Jun 16, 2026
4736c7b
Modify overwrite behaviour
rowanwalker96 Jun 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@
"pandda_xchem = dlstbx.wrapper.pandda_xchem:PanDDAWrapper",
"pipedream_xchem = dlstbx.wrapper.pipedream_xchem:PipedreamWrapper",
"phaser_ellg = dlstbx.wrapper.phaser_ellg:PhasereLLGWrapper",
"ligandrestraints = dlstbx.wrapper.ligandrestraints:LigandRestraintsWrapper",
"rlv = dlstbx.wrapper.rlv:RLVWrapper",
"scaleit = dlstbx.wrapper.scaleit:ScaleitWrapper",
"screen19 = dlstbx.wrapper.screen19:Screen19Wrapper",
Expand Down
56 changes: 56 additions & 0 deletions src/dlstbx/crud.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,24 @@ def get_data_collection(
return query.first()


def get_latest_dcid_for_dtag(
dtag: str,
session: sqlalchemy.orm.session.Session,
) -> int | None:
"""Return the most recent dataCollectionId for the BLSample named `dtag`."""
query = (
session.query(models.DataCollection.dataCollectionId)
.join(
models.BLSample,
models.BLSample.blSampleId == models.DataCollection.BLSAMPLEID,
)
.filter(models.BLSample.name == dtag)
.order_by(models.DataCollection.dataCollectionId.desc())
)
result = query.first()
return result.dataCollectionId if result else None


def get_gridinfo_for_dcid(
dcid: int,
dcgid: int,
Expand Down Expand Up @@ -130,6 +148,44 @@ def get_protein_for_dcid(
return query.first()


def get_visit_team_leader_email(
visit: str, session: sqlalchemy.orm.session.Session
) -> str | None:
"""Return ``<login>@diamond.ac.uk`` for the first Team Leader of a visit.

Returns ``None`` if the visit string cannot be parsed or no Team Leader with
a login is registered against the session."""
try:
proposal, visit_number = visit.split("-")
proposal_code, proposal_number = proposal[:2], proposal[2:]
except (AttributeError, ValueError):
return None

login = (
session.query(models.Person.login)
.join(
models.SessionHasPerson,
models.SessionHasPerson.personId == models.Person.personId,
)
.join(
models.BLSession,
models.BLSession.sessionId == models.SessionHasPerson.sessionId,
)
.join(
models.Proposal, models.Proposal.proposalId == models.BLSession.proposalId
)
.filter(
models.Proposal.proposalCode == proposal_code,
models.Proposal.proposalNumber == proposal_number,
models.BLSession.visit_number == visit_number,
models.SessionHasPerson.role == "Team Leader",
models.Person.login.isnot(None),
)
.first()
)
return f"{login[0]}@diamond.ac.uk" if login else None


def get_priority_processing_for_sample_id(
sample_id: int, session: sqlalchemy.orm.session.Session
) -> str | None:
Expand Down
Loading