No project description provided
Project description
dicomselect: DICOM database and conversion software
dicomselect is a Python tool that simplifies the process of creating SQLite databases from directories containing .dcm
files or from .zip
archives containing .dcm
files at the root of the zip file. Once the database is created, you can easily perform SQL-like queries on the data directly within Python. Additionally, dicomselect allows you to convert query results into various file formats supported by SimpleITK, providing flexibility in working with your DICOM data.
Installation
Python 3.10 or higher. You can install this project using pip
. If you haven't already, it's recommended to create a virtual environment to isolate project dependencies.
pip install dicomselect
Example
Clone this repo, install dicomselect, then run this example in the repo.
from dicomselect import Database
from pathlib import Path
db_path = Path('tests/output/example.db')
db_path.parent.mkdir(exist_ok=True)
# initialize the Database object with a path to the to-be-created SQLite database file
db = Database(db_path)
# create the .db file, using test data as the input directory.
db.create('tests/input/ProstateX', max_workers=4)
with (db as query):
# we only want to convert images with patient_id "ProstateX-0000" and image_direction "transverse"
query_0000 = query.where('patient_id', '=', 'ProstateX-0000'
).where('image_direction', '=', 'transverse')
# print out a detailed extraction of our query
print(query_0000.info())
# initialize the Plan object, with a template of DICOM headers for our conversion
# (note: dcm to dcm conversion is possible, if you only need restructuring of your data)
plan = db.plan('{patient_id}/prostateX_{series_description}_{instance_creation_time}', query_0000)
# ensure these properties are set
plan.target_dir = 'tests/output/example'
plan.extension = '.mha'
plan.max_workers = 4
# print out a detailed structure of our intended conversion
print(plan.to_string())
plan.execute()
Check out the results in tests/output/example
===========================================================================
Create a new database
from pathlib import Path
from dicomselect.database import Database
db_path = Path("/path/to/dicomselect_archive.db")
archive_path = Path("/path/to/archive")
db_path.parent.mkdir(parents=True, exist_ok=True)
db = Database(db_path)
db.create(archive_path, max_workers=4)
Select scans
- Simple matching of values
from dicomselect.database import Database
mapping = {
"t2w": {
"SeriesDescription": [
"t2_tse_tra_snel_bij bewogen t2 tra",
"t2_tse_tra",
"t2_tse_tra_prostate",
"t2_tse_tra_snel",
"t2_tse_tra_Grappa3"
]
},
}
db_path = Path("/path/to/dicomselect_archive.db")
db = Database(db_path)
cursor = db.open()
query = cursor.where("series_description", "in", mapping["t2w"]["SeriesDescription"])
print(query)
db.close()
- Pattern matching and combining queries
from dicomselect.database import Database
mapping = {
"hbv": {
"SeriesDescription": [
"ep2d_diff_tra%CALC_BVAL",
"diffusie-3Scan-4bval_fsCALC_BVAL"
],
"ImageType": [
r"DERIVED\PRIMARY\DIFFUSION\CALC_BVALUE\TRACEW\DIS2D\DFC",
r"DERIVED\PRIMARY\DIFFUSION\CALC_BVALUE\TRACEW\DIS2D",
r"DERIVED\PRIMARY\DIFFUSION\CALC_BVALUE\TRACEW\ND\DFC",
r"DERIVED\PRIMARY\DIFFUSION\CALC_BVALUE\TRACEW\NORM\DIS2D",
]
}
}
db_path = Path("/path/to/dicomselect_archive.db")
db = Database(db_path)
cursor = db.open()
query1 = cursor.where("series_description", "LIKE", mapping["hbv"]["SeriesDescription"])
query2 = cursor.where("image_type", "LIKE", mapping["hbv"]["ImageType"])
query = query1.union(query2)
print(query)
db.close()
Show info
# print a default overview of the query result
print(query)
# for more fine-grained control of the reporting, use the Info object
# print a summary of series_description given the query
print(query.info().include("series_description"))
# print a summary of everything but series_description given the query
# note: some recommended columns are excluded, such as columns referring to some UID.
print(query.info().exclude("series_description", recommended=True))
Convert
from dicomselect.database import Database
db_path = Path("/path/to/dicomselect_archive.db")
db = Database(db_path)
plan = db.plan("{patient_id}/{series_description}_{patients_age}", query)
plan.target_dir = "/path/to/target_dir"
plan.extension = ".mha"
print(plan)
plan.execute(max_workers=4)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file dicomselect-0.8.7.tar.gz
.
File metadata
- Download URL: dicomselect-0.8.7.tar.gz
- Upload date:
- Size: 66.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2151b0e0e9fd5568d5c4df0c071743ff1c52070573e47879bb1197a65cf9f5bd |
|
MD5 | e72112e395aa19979ddd7c410dff2401 |
|
BLAKE2b-256 | e649d68e5385a46228b5b46a8dc400de03ca837041324dbc6d43bff52c760697 |
File details
Details for the file dicomselect-0.8.7-py3-none-any.whl
.
File metadata
- Download URL: dicomselect-0.8.7-py3-none-any.whl
- Upload date:
- Size: 62.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ea0e8f8a28fe17f6b7ab9d820d8ad4c86bc939bb713d6c5e509b034659655b98 |
|
MD5 | 3ebcbd81e67aaef35ee410695a5a6caa |
|
BLAKE2b-256 | aba91cdd57ffe7578d1155c18c5d5d9ac3894dab60809fb39b014871917a9a0b |