Queries
Queries are useful for exploring the available imaging data. The general hierarchy of the cancer imaging archive (TCIA) is:
Collection -> PatientID -> StudyInstanceUID -> SeriesInstanceUID -> SOPInstanceUID
To download images, the SeriesInstanceUID
and/or SOPInstanceUID
must be known. The query functions are meant to help identify the relevant unique identifiers (UIDs)
Detailed information is available in the TCIA's user guide which includes a list of available query endpoints and the type of information returned by each query.
As mentioned in the Formats section, each query returns either a DataFrame or a Dictionary Array. The current section will exclusively use the DataFrame output. That being said, a dictionary array can always be obtained by any of these functions by passing format = "json"
as an input argument.
All collections
The names of all available collections on TCIA is obtained by:
julia> tcia_collections()
128×1 DataFrame Row │ Collection │ String31… ─────┼─────────────────────────── 1 │ TCGA-GBM 2 │ LIDC-IDRI 3 │ BREAST-DIAGNOSIS 4 │ PROSTATE-MRI 5 │ QIN-BREAST 6 │ QIN-HEADNECK 7 │ REMBRANDT 8 │ PROSTATE-DIAGNOSIS ⋮ │ ⋮ 122 │ TCGA-UCEC 123 │ TCGA-SARC 124 │ TCGA-STAD 125 │ VICTRE 126 │ Vestibular-Schwannoma-SEG 127 │ covid-19 128 │ Training-Pseudo 113 rows omitted
Imaging modalities
The imaging modalities in a specific collection and/or anatomy are listed by:
julia> tcia_modalities(collection = "TCGA-KIRP")
3×1 DataFrame Row │ Modality │ String3… ─────┼────────── 1 │ CT 2 │ MR 3 │ PT
julia> tcia_modalities(bodypart = "BRAIN")
5×1 DataFrame Row │ Modality │ String3… ─────┼────────── 1 │ MR 2 │ CT 3 │ DX 4 │ PT 5 │ SEG
julia> tcia_modalities(collection = "CPTAC-HNSCC", bodypart = "HEAD")
2×1 DataFrame Row │ Modality │ String3… ─────┼────────── 1 │ CT 2 │ MR
Capitalization matters when passing in arguments, i.e. bodypart = "BRAIN"
works but passing bodypart = "brain"
will return an empty object. However, there are some cases where different versions are valid. As an example, passing bodypart = Kidney
or bodypart = "KIDNEY"
will both return valid (but different!) results. So although fully-capitalized body part names will work most of the time, do double-check if alternative spellings exist when using the bodypart
argument (see next section for names)
Anatomy/body parts
The anatomy scanned in a specific collection and/or modality are listed by:
julia> tcia_bodyparts(collection = "CPTAC-HNSCC")
7×1 DataFrame Row │ BodyPartExamined │ String15… ─────┼────────────────── 1 │ NECK 2 │ HEAD 3 │ HEADNECK 4 │ ABDOMEN 5 │ CHEST 6 │ CHEST_TO_PELVIS 7 │ Head-Neck
julia> tcia_bodyparts(modality = "CT")
69×1 DataFrame Row │ BodyPartExamined │ String15… ─────┼────────────────── 1 │ BRAIN 2 │ CHEST 3 │ BREAST 4 │ PROSTATE 5 │ COLON 6 │ PHANTOM 7 │ KIDNEY 8 │ ABDOMEN ⋮ │ ⋮ 63 │ THORAX 64 │ WHOLEBODY 65 │ CHESTABDOMEN 66 │ Thorax 67 │ THORAXABD 68 │ CHEST PE 69 │ CHEST_ABDOMEN 54 rows omitted
julia> tcia_bodyparts(collection = "CPTAC-SAR", modality = "MR")
2×1 DataFrame Row │ BodyPartExamined │ String15… ─────┼────────────────── 1 │ Pelvis 2 │ EXTREMITY
julia> tcia_bodyparts(collection = "CPTAC-SAR", modality = "CT")
4×1 DataFrame Row │ BodyPartExamined │ String15… ─────┼────────────────── 1 │ ABDOMEN 2 │ CHEST 3 │ WHOLEBODY 4 │ EXTREMITY
Manufacturers
A list of scanner manufacturers for a specific collection/modality/anatomy is obtained by
julia> tcia_manufacturers(collection = "TCGA-KICH")
3×1 DataFrame Row │ Manufacturer │ String31… ─────┼──────────────────── 1 │ GE MEDICAL SYSTEMS 2 │ SIEMENS 3 │ TOSHIBA
julia> tcia_manufacturers(modality = "CT")
39×1 DataFrame Row │ Manufacturer │ String63… ─────┼─────────────────────────────────── 1 │ GE MEDICAL SYSTEMS 2 │ SIEMENS 3 │ TOSHIBA 4 │ Philips 5 │ Vital Images, Inc 6 │ Philips Medical Systems 7 │ Siemens 8 │ Posda RTOG Converter ⋮ │ ⋮ 33 │ 003 34 │ 004 35 │ 004 313619.2.55.3.419501 36 │ 002 es scanned.ration 37 │ 005 38 │ 005 9 39 │ Varian Medical Systems \\/ MIM S… 24 rows omitted
julia> tcia_manufacturers(bodypart = "BREAST")
10×1 DataFrame Row │ Manufacturer │ String31… ─────┼───────────────────────────── 1 │ Philips Medical Systems 2 │ GE MEDICAL SYSTEMS 3 │ LORAD 4 │ Lorad, A Hologic Company 5 │ Confirma Inc. 6 │ SIEMENS 7 │ Siemens 8 │ GE MEDICAL SYSTEMS, NUCLEAR 9 │ VICTRE 10 │ HOLOGIC, Inc.
The same manufacturer can have different names, e.g. Philips
/Philips Medical Systems
and SIEMENS
/Siemens
.
Patients
The patients in a given collection are listed by:
julia> tcia_patients(collection = "TCGA-SARC")
5×4 DataFrame Row │ PatientID PatientName PatientSex Collection │ String15… String15… String1… String15… ─────┼──────────────────────────────────────────────────── 1 │ TCGA-QQ-A5V2 TCGA-QQ-A5V2 M TCGA-SARC 2 │ TCGA-QQ-A5VC TCGA-QQ-A5VC F TCGA-SARC 3 │ TCGA-QQ-A8VF TCGA-QQ-A8VF M TCGA-SARC 4 │ TCGA-QQ-A8VH TCGA-QQ-A8VH F TCGA-SARC 5 │ TCGA-QQ-A8VG TCGA-QQ-A8VG M TCGA-SARC
Patients for specific modality
To get a patients for which a specific modality was used, a slightly different function is used:
julia> tcia_patients_by_modality(collection = "TCGA-SARC", modality = "CT")
4×3 DataFrame Row │ PatientID Collection Modality │ String15… String15… String3… ─────┼──────────────────────────────────── 1 │ TCGA-QQ-A5V2 TCGA-SARC CT 2 │ TCGA-QQ-A5VC TCGA-SARC CT 3 │ TCGA-QQ-A8VF TCGA-SARC CT 4 │ TCGA-QQ-A8VG TCGA-SARC CT
julia> tcia_patients_by_modality(collection = "TCGA-SARC", modality = "MR")
2×3 DataFrame Row │ PatientID Collection Modality │ String15… String15… String3… ─────┼──────────────────────────────────── 1 │ TCGA-QQ-A8VF TCGA-SARC MR 2 │ TCGA-QQ-A8VH TCGA-SARC MR
Although the functionality of tcia_patients_by_modality()
could be combined into the tcia_patients()
function, they use a different query endpoint so the two functions were given different names to keep that difference explicit.
Patients added after specific date
In large collections, it can be useful to query patients that were added after a date specified as YYYY-MM-DD. This is accomplished by:
julia> tcia_newpatients(collection = "TCGA-GBM", date = "2015-01-01")
104×2 DataFrame Row │ PatientID Collection │ String15… String15… ─────┼────────────────────────── 1 │ TCGA-02-0060 TCGA-GBM 2 │ TCGA-06-1806 TCGA-GBM 3 │ TCGA-02-0006 TCGA-GBM 4 │ TCGA-02-0009 TCGA-GBM 5 │ TCGA-02-0011 TCGA-GBM 6 │ TCGA-02-0027 TCGA-GBM 7 │ TCGA-02-0033 TCGA-GBM 8 │ TCGA-02-0034 TCGA-GBM ⋮ │ ⋮ ⋮ 98 │ TCGA-76-6285 TCGA-GBM 99 │ TCGA-76-6656 TCGA-GBM 100 │ TCGA-76-6657 TCGA-GBM 101 │ TCGA-76-6661 TCGA-GBM 102 │ TCGA-76-6662 TCGA-GBM 103 │ TCGA-76-6663 TCGA-GBM 104 │ TCGA-76-6664 TCGA-GBM 89 rows omitted
Patient studies
A list of visits/studies for a given collection/patient is obtained by:
julia> tcia_studies(collection = "TCGA-THCA")
7×9 DataFrame Row │ Collection PatientID PatientName PatientSex StudyInstanceUID ⋯ │ String15… String15… String15… String1… String ⋯ ─────┼────────────────────────────────────────────────────────────────────────── 1 │ TCGA-THCA TCGA-DE-A4MD TCGA-DE-A4MD M 1.3.6.1.4.1.14519.5 ⋯ 2 │ TCGA-THCA TCGA-DE-A4MA TCGA-DE-A4MA F 1.3.6.1.4.1.14519.5 3 │ TCGA-THCA TCGA-DE-A4MA TCGA-DE-A4MA F 1.3.6.1.4.1.14519.5 4 │ TCGA-THCA TCGA-DE-A4MC TCGA-DE-A4MC F 1.3.6.1.4.1.14519.5 5 │ TCGA-THCA TCGA-DE-A4MB TCGA-DE-A4MB F 1.3.6.1.4.1.14519.5 ⋯ 6 │ TCGA-THCA TCGA-E3-A3DZ TCGA-E3-A3DZ F 1.3.6.1.4.1.14519.5 7 │ TCGA-THCA TCGA-E3-A3E5 TCGA-E3-A3E5 M 1.3.6.1.4.1.14519.5 5 columns omitted
julia> tcia_studies(patient = "TCGA-QQ-A8VF")
0×9 DataFrame
If the unique identifier (UID) for a study is known (a.k.a. StudyInstanceUID), then that can also be used
julia> tcia_studies(study = "1.3.6.1.4.1.14519.5.2.1.3023.4024.298690116465423805879206377806")
0×9 DataFrame
Patient studies added after specific data
A list of visits/studies that were added after some date, formatted by YYYY-MM-DD, can be obtained by:
julia> tcia_newstudies(collection="TCGA-GBM", date="2015-01-01")
106×3 DataFrame Row │ StudyInstanceUID PatientID Collection │ String String15… String15… ─────┼───────────────────────────────────────────────────────────── 1 │ 1.3.6.1.4.1.14519.5.2.1.1706.400… TCGA-02-0060 TCGA-GBM 2 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… TCGA-06-1806 TCGA-GBM 3 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… TCGA-06-1806 TCGA-GBM 4 │ 1.3.6.1.4.1.14519.5.2.1.1706.400… TCGA-02-0006 TCGA-GBM 5 │ 1.3.6.1.4.1.14519.5.2.1.1706.400… TCGA-02-0009 TCGA-GBM 6 │ 1.3.6.1.4.1.14519.5.2.1.1706.400… TCGA-02-0011 TCGA-GBM 7 │ 1.3.6.1.4.1.14519.5.2.1.1706.400… TCGA-02-0027 TCGA-GBM 8 │ 1.3.6.1.4.1.14519.5.2.1.1706.400… TCGA-02-0033 TCGA-GBM ⋮ │ ⋮ ⋮ ⋮ 100 │ 1.3.6.1.4.1.14519.5.2.1.1188.400… TCGA-76-6285 TCGA-GBM 101 │ 1.3.6.1.4.1.14519.5.2.1.1188.400… TCGA-76-6656 TCGA-GBM 102 │ 1.3.6.1.4.1.14519.5.2.1.1188.400… TCGA-76-6657 TCGA-GBM 103 │ 1.3.6.1.4.1.14519.5.2.1.1188.400… TCGA-76-6661 TCGA-GBM 104 │ 1.3.6.1.4.1.14519.5.2.1.1188.400… TCGA-76-6662 TCGA-GBM 105 │ 1.3.6.1.4.1.14519.5.2.1.1188.400… TCGA-76-6663 TCGA-GBM 106 │ 1.3.6.1.4.1.14519.5.2.1.1188.400… TCGA-76-6664 TCGA-GBM 91 rows omitted
Imaging series
Each patient study consists of one or more imaging series which can be obtained by:
julia> tcia_series(collection = "TCGA-THCA")
28×16 DataFrame Row │ PatientID StudyInstanceUID SeriesInstanceUID ⋯ │ String15… String String ⋯ ─────┼────────────────────────────────────────────────────────────────────────── 1 │ TCGA-DE-A4MD 1.3.6.1.4.1.14519.5.2.1.8421.401… 1.3.6.1.4.1.14519.5.2. ⋯ 2 │ TCGA-DE-A4MD 1.3.6.1.4.1.14519.5.2.1.8421.401… 1.3.6.1.4.1.14519.5.2. 3 │ TCGA-DE-A4MA 1.3.6.1.4.1.14519.5.2.1.8421.401… 1.3.6.1.4.1.14519.5.2. 4 │ TCGA-DE-A4MA 1.3.6.1.4.1.14519.5.2.1.8421.401… 1.3.6.1.4.1.14519.5.2. 5 │ TCGA-DE-A4MA 1.3.6.1.4.1.14519.5.2.1.8421.401… 1.3.6.1.4.1.14519.5.2. ⋯ 6 │ TCGA-DE-A4MA 1.3.6.1.4.1.14519.5.2.1.8421.401… 1.3.6.1.4.1.14519.5.2. 7 │ TCGA-DE-A4MA 1.3.6.1.4.1.14519.5.2.1.8421.401… 1.3.6.1.4.1.14519.5.2. 8 │ TCGA-DE-A4MA 1.3.6.1.4.1.14519.5.2.1.8421.401… 1.3.6.1.4.1.14519.5.2. ⋮ │ ⋮ ⋮ ⋮ ⋱ 22 │ TCGA-DE-A4MC 1.3.6.1.4.1.14519.5.2.1.8421.401… 1.3.6.1.4.1.14519.5.2. ⋯ 23 │ TCGA-DE-A4MC 1.3.6.1.4.1.14519.5.2.1.8421.401… 1.3.6.1.4.1.14519.5.2. 24 │ TCGA-DE-A4MB 1.3.6.1.4.1.14519.5.2.1.8421.401… 1.3.6.1.4.1.14519.5.2. 25 │ TCGA-E3-A3DZ 1.3.6.1.4.1.14519.5.2.1.3023.401… 1.3.6.1.4.1.14519.5.2. 26 │ TCGA-E3-A3DZ 1.3.6.1.4.1.14519.5.2.1.3023.401… 1.3.6.1.4.1.14519.5.2. ⋯ 27 │ TCGA-E3-A3E5 1.3.6.1.4.1.14519.5.2.1.3023.401… 1.3.6.1.4.1.14519.5.2. 28 │ TCGA-E3-A3E5 1.3.6.1.4.1.14519.5.2.1.3023.401… 1.3.6.1.4.1.14519.5.2. 14 columns and 13 rows omitted
julia> tcia_series(patient = "TCGA-QQ-A8VF")
15×16 DataFrame Row │ PatientID StudyInstanceUID SeriesInstanceUID ⋯ │ String15… String String ⋯ ─────┼────────────────────────────────────────────────────────────────────────── 1 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. ⋯ 2 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. 3 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. 4 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. 5 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. ⋯ 6 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. 7 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. 8 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. 9 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. ⋯ 10 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. 11 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. 12 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. 13 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. ⋯ 14 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. 15 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. 14 columns omitted
julia> tcia_series(study = "1.3.6.1.4.1.14519.5.2.1.3023.4024.298690116465423805879206377806")
6×16 DataFrame Row │ PatientID StudyInstanceUID SeriesInstanceUID ⋯ │ String15… String String ⋯ ─────┼────────────────────────────────────────────────────────────────────────── 1 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. ⋯ 2 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. 3 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. 4 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. 5 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. ⋯ 6 │ TCGA-QQ-A8VF 1.3.6.1.4.1.14519.5.2.1.3023.402… 1.3.6.1.4.1.14519.5.2. 14 columns omitted
julia> tcia_series(modality = "CT", manufacturer = "TOSHIBA")
2088×16 DataFrame Row │ PatientID StudyInstanceUID SeriesInstanceUID ⋯ │ String31… String String ⋯ ──────┼───────────────────────────────────────────────────────────────────────── 1 │ LIDC-IDRI-0104 1.3.6.1.4.1.14519.5.2.1.6279.600… 1.3.6.1.4.1.14519.5 ⋯ 2 │ LIDC-IDRI-0151 1.3.6.1.4.1.14519.5.2.1.6279.600… 1.3.6.1.4.1.14519.5 3 │ LIDC-IDRI-0156 1.3.6.1.4.1.14519.5.2.1.6279.600… 1.3.6.1.4.1.14519.5 4 │ LIDC-IDRI-0310 1.3.6.1.4.1.14519.5.2.1.6279.600… 1.3.6.1.4.1.14519.5 5 │ LIDC-IDRI-0315 1.3.6.1.4.1.14519.5.2.1.6279.600… 1.3.6.1.4.1.14519.5 ⋯ 6 │ LIDC-IDRI-0334 1.3.6.1.4.1.14519.5.2.1.6279.600… 1.3.6.1.4.1.14519.5 7 │ LIDC-IDRI-0346 1.3.6.1.4.1.14519.5.2.1.6279.600… 1.3.6.1.4.1.14519.5 8 │ LIDC-IDRI-0354 1.3.6.1.4.1.14519.5.2.1.6279.600… 1.3.6.1.4.1.14519.5 ⋮ │ ⋮ ⋮ ⋮ ⋱ 2082 │ AP-DRVN 1.3.6.1.4.1.14519.5.2.1.5438.560… 1.3.6.1.4.1.14519.5 ⋯ 2083 │ AP-6H6G 1.3.6.1.4.1.14519.5.2.1.5438.560… 1.3.6.1.4.1.14519.5 2084 │ AP-97PG 1.3.6.1.4.1.14519.5.2.1.5438.560… 1.3.6.1.4.1.14519.5 2085 │ AP-95DK 1.3.6.1.4.1.14519.5.2.1.5438.560… 1.3.6.1.4.1.14519.5 2086 │ AP-95DK 1.3.6.1.4.1.14519.5.2.1.5438.560… 1.3.6.1.4.1.14519.5 ⋯ 2087 │ AP-95DK 1.3.6.1.4.1.14519.5.2.1.5438.560… 1.3.6.1.4.1.14519.5 2088 │ AP-DRVN 1.3.6.1.4.1.14519.5.2.1.5438.560… 1.3.6.1.4.1.14519.5 14 columns and 2073 rows omitted
julia> tcia_series(bodypart = "EXTREMITY")
625×16 DataFrame Row │ PatientID StudyInstanceUID SeriesInstanceUID ⋯ │ String15… String String ⋯ ─────┼────────────────────────────────────────────────────────────────────────── 1 │ STS_001 1.3.6.1.4.1.14519.5.2.1.5168.190… 1.3.6.1.4.1.14519.5. ⋯ 2 │ STS_010 1.3.6.1.4.1.14519.5.2.1.5168.190… 1.3.6.1.4.1.14519.5. 3 │ STS_001 1.3.6.1.4.1.14519.5.2.1.5168.190… 1.3.6.1.4.1.14519.5. 4 │ STS_001 1.3.6.1.4.1.14519.5.2.1.5168.190… 1.3.6.1.4.1.14519.5. 5 │ STS_010 1.3.6.1.4.1.14519.5.2.1.5168.190… 1.3.6.1.4.1.14519.5. ⋯ 6 │ STS_010 1.3.6.1.4.1.14519.5.2.1.5168.190… 1.3.6.1.4.1.14519.5. 7 │ STS_001 1.3.6.1.4.1.14519.5.2.1.5168.190… 1.3.6.1.4.1.14519.5. 8 │ STS_001 1.3.6.1.4.1.14519.5.2.1.5168.190… 1.3.6.1.4.1.14519.5. ⋮ │ ⋮ ⋮ ⋮ ⋱ 619 │ C3L-02846 1.3.6.1.4.1.14519.5.2.1.6450.262… 1.3.6.1.4.1.14519.5. ⋯ 620 │ C3L-02846 1.3.6.1.4.1.14519.5.2.1.6450.262… 1.3.6.1.4.1.14519.5. 621 │ C3N-00875 1.3.6.1.4.1.14519.5.2.1.3320.327… 1.3.6.1.4.1.14519.5. 622 │ Pseudo-PHI-009 1.3.6.1.4.1.14519.5.2.1.8700.966… 1.3.6.1.4.1.14519.5. 623 │ Pseudo-PHI-018 1.3.6.1.4.1.14519.5.2.1.8700.966… 1.3.6.1.4.1.14519.5. ⋯ 624 │ 8834647487 2.25.274670750841988288332269850… 2.25.227201128343065 625 │ 6614238035 2.25.141609806662491954314930913… 2.25.316416899981897 14 columns and 610 rows omitted
This query's importance is hinted by the smorgasbord of parameters it accepts. That's because this query returns the SeriesInstanceUID
which is needed to download images. Although the above examples only show PatientID
, the query actually returns more information which is not shown because of limited screen space. The complete list of columns are:
julia> series_dataframe = tcia_series(patient = "TCGA-QQ-A8VF");
julia> names(series_dataframe)
16-element Vector{String}: "PatientID" "StudyInstanceUID" "SeriesInstanceUID" "Modality" "ProtocolName" "SeriesDate" "SeriesDescription" "BodyPartExamined" "SeriesNumber" "AnnotationsFlag" "Collection" "Manufacturer" "ManufacturerModelName" "SoftwareVersions" "Visibility" "ImageCount"
The entire table could have been printed by:
show(series_dataframe, allrows = true, allcols = true)
Passing format = "json"
will result in one fewer column. This is because the AnnotationsFlag
field is returned for CSV output but not for JSON.
Imaging series size
The size (in bytes) and number of images for a given imaging series is given by
julia> tcia_series_size(series = "1.3.6.1.4.1.14519.5.2.1.4591.4001.241972527061347495484079664948")
1×2 DataFrame Row │ TotalSizeInBytes ObjectCount │ Float64 Int64 ─────┼─────────────────────────────── 1 │ 1.49149e8 1120
It is recommended that tcia_series_size()
should not be used with format = json
. This is because the json version interprets the TotalSizeInBytes
as string/text rather than a number.
Service-Object Pairs (SOP)
Each imaging series consists of one or more images, each of which have a service-object-pair unique identifier (SOPInstanceUID). These can be listed by
julia> tcia_sop(series = "1.3.6.1.4.1.14519.5.2.1.4591.4001.241972527061347495484079664948")
1120×1 DataFrame Row │ SOPInstanceUID │ String ──────┼─────────────────────────────────── 1 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… 2 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… 3 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… 4 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… 5 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… 6 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… 7 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… 8 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… ⋮ │ ⋮ 1114 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… 1115 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… 1116 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… 1117 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… 1118 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… 1119 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… 1120 │ 1.3.6.1.4.1.14519.5.2.1.4591.400… 1105 rows omitted
These identifiers are useful for accessing a specific image without having to download the entire imaging series.