View Issue Details

IDProjectCategoryView StatusLast Update
0002936Slicer4Module DICOMpublic2015-12-12 02:22
Reporterwangk Assigned Topieper  
PrioritynormalSeverityfeatureReproducibilityalways
Status closedResolutionfixed 
Product VersionSlicer 4.2.2-1 
Target VersionSlicer 4.3.0Fixed in VersionSlicer 4.3.0 
Summary0002936: Multiple RT objects with same type not distinguishable in DICOM module
Description

When using DICOM module to import dose, plan and structure set, if there are multiple object with same type. e.g. two rt dose files, there are no description to distinguish one from another. try pinnacle3-0.0-phantom data. Need to fix this as this is often encountered in adaptive RT.

See attached picture.

TagsNo tags attached.

Activities

2013-02-11 11:07

 

dicom-no-description.png (83,348 bytes)
dicom-no-description.png (83,348 bytes)
pieper

pieper

2013-02-11 13:52

administrator   ~0007887

Is the dose file something that gets detected by a SlicerRT DICOM plugin? In that case the plugin can choose a name that will be presented in the dialog (name property of the DICOMLoadable). For example, the ScalarVolume plugin creates a name which is the series number followed by the series description. For dose, in ART maybe the series date could be post-pended?

pieper

pieper

2013-02-16 03:29

administrator   ~0007964

Can you comment on whether this can be accomplished inside the RT plugin?

wangk

wangk

2013-02-20 09:33

developer   ~0007989

I think this could be accomplished inside RT plugin. However, it is a bit complicated. For a CT series, one can just look for the series description in one of the dicom files and that is how it is done in ScalarVolume plugin. For RT dose, there is no series description in itself and it only provides a reference UID to a RT plan, then the series description can be extract from the RT plan. so it is easy to extract the description, but I am not sure how to look for the reference RT plan in the RT plugin or using the general Dicom infrastructure.

pieper

pieper

2013-02-20 09:54

administrator   ~0007992

Hi Kevin -

I'm not 100% sure about how these are structured in RT, but within the plugin you can have access to the dicom database, which lets you get header values for a tag for any of the instances in the database. So can you walk the chain of references to get the info needed to make a meaningful name for a given RT object?

-Steve

wangk

wangk

2013-02-20 10:00

developer   ~0007993

Thanks Steve for your information. It helps a lot! I will start to modify our RT plugin for this. Will keep you posted.

wangk

wangk

2013-03-06 11:55

developer   ~0008090

Hi Steve,

I am using the python interface to access the dicom database but met a problem.

I am trying to access an item in a sequence. more specifically the "ReferencedRTPlanSequence" whose dicom tag is "300C,0002" and item "ReferencedSOPInstanceUID" whose dicom tag is "0008,1155". using slicer.dicomDatabase2.fileValue() method with both tags return ''. I used dcmtk's dcmdump and checked the dcm file and it is not empty for this item. is there a way to access an item in a sequence using ctkDICOM?

Thanks,

Kevin

pieper

pieper

2013-03-06 12:19

administrator   ~0008091

Hi Kevin -

This should be possible by doing something like what is shown below - it's not optimized (not in the tagCache), but maybe you only need to do it once per series so not a big issue. If performance turns out to be an issue we can prioritize a fix.

In the example below I load a new-style MR object with sequences and extract the 0008,1155 value so it should work for you also. Note the output is in 'dcmdump' string format so you need to parse that by hand in python.

Note that you can use loadFileHeader if you know the file name or loadInstanceHeader if you have the sopInstanceUID.

Marco and I talked a lot about how to deal with sequences but this is all we have right now, so I hope it works for you.

In the future I'd like to see the ctkDICOMDataset class exposed with explicit sequence support.

-Steve

slicer.dicomDatabase.loadFileHeader('/Users/pieper/data/broccoli/DICOM/IM_0001')
slicer.dicomDatabase.headerKeys()
(u'0008,0005', u'0008,0008', u'0008,0012', u'0008,0013', u'0008,0014', u'0008,0016', u'0008,0018', u'0008,0020', u'0008,0021', u'0008,0023', u'0008,002a', u'0008,0030', u'0008,0031', u'0008,0033', u'0008,0050', u'0008,0060', u'0008,0070', u'0008,0080', u'0008,0090', u'0008,0100', u'0008,0102', u'0008,0103', u'0008,0104', u'0008,010b', u'0008,010d', u'0008,1010', u'0008,1030', u'0008,103e', u'0008,1040', u'0008,1070', u'0008,1080', u'0008,1090', u'0008,1110', u'0008,1111', u'0008,1150', u'0008,1155', u'0008,2218', u'0008,9007', u'0008,9123', u'0008,9205', u'0008,9206', u'0008,9207', u'0008,9208', u'0008,9209', u'0010,0010', u'0010,0020', u'0010,0030', u'0010,0040', u'0010,1000', u'0010,1030', u'0010,21c0', u'0018,0015', u'0018,0020', u'0018,0021', u'0018,0023', u'0018,0050', u'0018,0080', u'0018,0081', u'0018,0082', u'0018,0083', u'0018,0084', u'0018,0085', u'0018,0086', u'0018,0087', u'0018,0088', u'0018,0089', u'0018,0091', u'0018,0093', u'0018,0094', u'0018,0095', u'0018,1000', u'0018,1020', u'0018,1030', u'0018,1081', u'0018,1082', u'0018,1083', u'0018,1084', u'0018,1088', u'0018,1250', u'0018,1251', u'0018,1310', u'0018,1312', u'0018,1314', u'0018,5100', u'0018,9004', u'0018,9005', u'0018,9006', u'0018,9008', u'0018,9009', u'0018,9010', u'0018,9011', u'0018,9012', u'0018,9014', u'0018,9015', u'0018,9016', u'0018,9017', u'0018,9018', u'0018,9019', u'0018,9020', u'0018,9021', u'0018,9022', u'0018,9024', u'0018,9025', u'0018,9026', u'0018,9027', u'0018,9028', u'0018,9029', u'0018,9030', u'0018,9032', u'0018,9033', u'0018,9034', u'0018,9035', u'0018,9037', u'0018,9041', u'0018,9042', u'0018,9043', u'0018,9044', u'0018,9045', u'0018,9047', u'0018,9048', u'0018,9049', u'0018,9050', u'0018,9051', u'0018,9053', u'0018,9058', u'0018,9059', u'0018,9064', u'0018,9069', u'0018,9073', u'0018,9074', u'0018,9077', u'0018,9078', u'0018,9080', u'0018,9081', u'0018,9082', u'0018,9090', u'0018,9091', u'0018,9093', u'0018,9094', u'0018,9098', u'0018,9100', u'0018,9101', u'0018,9112', u'0018,9114', u'0018,9115', u'0018,9119', u'0018,9125', u'0018,9147', u'0018,9151', u'0018,9152', u'0018,9155', u'0018,9168', u'0018,9170', u'0018,9171', u'0018,9172', u'0018,9174', u'0018,9176', u'0018,9177', u'0018,9178', u'0018,9179', u'0018,9180', u'0018,9181', u'0018,9182', u'0018,9183', u'0018,9199', u'0018,9200', u'0018,9220', u'0018,9226', u'0018,9231', u'0018,9232', u'0018,9239', u'0018,9240', u'0018,9241', u'0020,000d', u'0020,000e', u'0020,0010', u'0020,0011', u'0020,0012', u'0020,0013', u'0020,0032', u'0020,0037', u'0020,0052', u'0020,0100', u'0020,0105', u'0020,1040', u'0020,9056', u'0020,9057', u'0020,9071', u'0020,9072', u'0020,9111', u'0020,9113', u'0020,9116', u'0020,9128', u'0020,9157', u'0020,9164', u'0020,9165', u'0020,9167', u'0020,9221', u'0020,9222', u'0020,9254', u'0020,9255', u'0020,9421', u'0028,0002', u'0028,0004', u'0028,0008', u'0028,0010', u'0028,0011', u'0028,0030', u'0028,0100', u'0028,0101', u'0028,0102', u'0028,0103', u'0028,0301', u'0028,1050', u'0028,1051', u'0028,1052', u'0028,1053', u'0028,1054', u'0028,2110', u'0028,3003', u'0028,9001', u'0028,9002', u'0028,9110', u'0028,9132', u'0028,9145', u'0040,0241', u'0040,0244', u'0040,0245', u'0040,0250', u'0040,0251', u'0040,0253', u'0040,0254', u'0040,0260', u'0040,0321', u'0040,0555', u'0040,9210', u'2001,0010', u'2001,1001', u'2001,1002', u'2001,1003', u'2001,1004', u'2001,1006', u'2001,1007', u'2001,1008', u'2001,1009', u'2001,100a', u'2001,100b', u'2001,100c', u'2001,100e', u'2001,100f', u'2001,1010', u'2001,1011', u'2001,1012', u'2001,1013', u'2001,1014', u'2001,1015', u'2001,1016', u'2001,1017', u'2001,1018', u'2001,1019', u'2001,101a', u'2001,101b', u'2001,101c', u'2001,101d', u'2001,101f', u'2001,1020', u'2001,1021', u'2001,1022', u'2001,1023', u'2001,1024', u'2001,1025', u'2001,102d', u'2001,1032', u'2001,1033', u'2001,1035', u'2001,1036', u'2001,105f', u'2001,1060', u'2001,1061', u'2001,1062', u'2001,1063', u'2001,107b', u'2001,1081', u'2001,1082', u'2001,1083', u'2001,1084', u'2001,1085', u'2001,1086', u'2001,1087', u'2001,1088', u'2001,1089', u'2001,108a', u'2001,108b', u'2001,10f1', u'2005,0010', u'2005,0011', u'2005,0012', u'2005,0013', u'2005,0014', u'2005,1004', u'2005,100b', u'2005,100c', u'2005,100d', u'2005,100e', u'2005,1011', u'2005,1012', u'2005,1013', u'2005,1014', u'2005,1015', u'2005,1016', u'2005,1017', u'2005,1019', u'2005,101a', u'2005,101b', u'2005,101c', u'2005,101d', u'2005,101e', u'2005,101f', u'2005,1020', u'2005,1021', u'2005,1022', u'2005,1023', u'2005,1025', u'2005,1026', u'2005,1027', u'2005,1028', u'2005,1029', u'2005,102a', u'2005,102b', u'2005,102c', u'2005,102d', u'2005,102e', u'2005,102f', u'2005,1030', u'2005,1031', u'2005,1033', u'2005,1034', u'2005,1035', u'2005,1036', u'2005,1037', u'2005,1038', u'2005,1039', u'2005,103b', u'2005,103c', u'2005,103d', u'2005,103e', u'2005,105f', u'2005,1060', u'2005,1061', u'2005,1063', u'2005,106e', u'2005,106f', u'2005,1071', u'2005,1072', u'2005,1073', u'2005,1074', u'2005,1075', u'2005,1076', u'2005,1078', u'2005,1079', u'2005,107a', u'2005,107b', u'2005,107e', u'2005,1080', u'2005,1081', u'2005,1083', u'2005,1084', u'2005,1085', u'2005,1086', u'2005,109e', u'2005,10a0', u'2005,10a1', u'2005,10a2', u'2005,10a3', u'2005,10a4', u'2005,10a5', u'2005,10a6', u'2005,10a7', u'2005,10a8', u'2005,10a9', u'2005,10b0', u'2005,10b1', u'2005,10b2', u'2005,10c0', u'2005,1199', u'2005,1200', u'2005,1201', u'2005,1213', u'2005,1245', u'2005,1249', u'2005,1251', u'2005,1252', u'2005,1253', u'2005,1325', u'2005,1326', u'2005,1327', u'2005,1328', u'2005,1329', u'2005,1330', u'2005,1331', u'2005,1333', u'2005,1334', u'2005,1335', u'2005,1336', u'2005,1337', u'2005,1338', u'2005,1339', u'2005,1340', u'2005,1341', u'2005,1342', u'2005,1343', u'2005,1344', u'2005,1345', u'2005,1346', u'2005,1347', u'2005,1348', u'2005,1349', u'2005,1350', u'2005,1351', u'2005,1352', u'2005,1355', u'2005,1356', u'2005,1357', u'2005,1359', u'2005,1360', u'2005,1361', u'2005,1362', u'2005,1363', u'2005,1364', u'2005,1370', u'2005,1371', u'2005,1381', u'2005,1382', u'2005,1390', u'2005,1391', u'2005,1392', u'2005,1393', u'2005,1396', u'2005,1397', u'2005,1398', u'2005,1399', u'2005,1400', u'2005,1401', u'2005,1402', u'2005,1403', u'2005,1406', u'2005,1407', u'2005,140e', u'2005,140f', u'2005,1412', u'2005,1413', u'2005,1414', u'2005,1415', u'2005,1416', u'2005,1418', u'2005,1419', u'2005,141b', u'2005,141c', u'2005,141d', u'2005,1426', u'2005,1428', u'2005,142a', u'2005,142b', u'2005,142c', u'2005,142d', u'2005,1432', u'2005,1435', u'2005,143a', u'2005,143b', u'2005,143c', u'2005,143d', u'2005,143e', u'2005,143f', u'2005,1440', u'2005,1441', u'2005,1442', u'2005,1443', u'2005,1444', u'2005,1445', u'2005,1447', u'2005,144a', u'2005,144b', u'2005,144c', u'2005,144d', u'2005,144e', u'2005,144f', u'2005,1450', u'2050,0020', u'5200,9229', u'5200,9230', u'7fe0,0010', u'fffe,e000')

slicer.dicomDatabase.headerValue('0008,1155')
u'(0008,1155) UI [1.3.46.670589.11.5730.5.0.1744.2010043012343685003] # 50, 1 ReferencedSOPInstanceUID\n'

wangk

wangk

2013-03-07 05:24

developer   ~0008094

Thanks a lot, Steve. It works for me. I am working on a quick solution that only modifies the DicomRTImport Plugin. will email you once it is done.

wangk

wangk

2013-03-07 10:50

developer   ~0008096

Steve: I was able to modify the dicomRtPlugin python code to get the correct name for the RTDose object from its referenced RTPlan and display in the bottom table. Thanks for the help.

However, the information in the top tree is populated using CTK from fields that are read from the database. So it is not possible to change them right now. That is something we need to think in the long term.

for now, I think you can close the ticket.

pieper

pieper

2013-03-08 12:41

administrator   ~0008100

Great - glad that is working.

I agree about the dicom database not having all the right information in many cases - it's been vexing us for a while. I've been thinking lately that we might need something higher level but I don't have anything concrete yet.

kieumy

kieumy

2015-12-12 02:22

reporter   ~0013675

Dear Steve,
I'm a new researcher in 3DSlicer, this topic is very useful for me to access data in DICOM file. I have a DICOM file (the file is not extension in file name). I can access the header information. But I can not access the pixel value (7fe0,0010). Could you help me to access this information. I think that the pixel value was stored in other part with header information. So I can not know which command to access or show Pixel Value because 3D Slicer can read my file but it can not show the data (only show header information, not show pixel value, my image is multi-slices). Thank you very much.
-KieuMy

Issue History

Date Modified Username Field Change
2013-02-11 11:07 wangk New Issue
2013-02-11 11:07 wangk Status new => assigned
2013-02-11 11:07 wangk Assigned To => pieper
2013-02-11 11:07 wangk File Added: dicom-no-description.png
2013-02-11 13:52 pieper Note Added: 0007887
2013-02-16 03:29 pieper Note Added: 0007964
2013-02-16 03:29 pieper Status assigned => feedback
2013-02-20 09:33 wangk Note Added: 0007989
2013-02-20 09:54 pieper Note Added: 0007992
2013-02-20 10:00 wangk Note Added: 0007993
2013-03-06 11:55 wangk Note Added: 0008090
2013-03-06 12:19 pieper Note Added: 0008091
2013-03-07 05:24 wangk Note Added: 0008094
2013-03-07 06:32 jcfr Target Version => Slicer 4.3.0
2013-03-07 10:50 wangk Note Added: 0008096
2013-03-08 12:41 pieper Note Added: 0008100
2013-03-08 12:41 pieper Status feedback => closed
2013-03-08 12:41 pieper Resolution open => fixed
2013-03-08 12:41 pieper Fixed in Version => Slicer 4.3.0
2015-12-12 02:22 kieumy Note Added: 0013675