Commit 53293b76a35f96c1806b4110485cc5b62fe3f493
1 parent
e7bf8988
Exists in
master
and in
67 other branches
FIX: Fixed encoding problem
Showing
3 changed files
with
121 additions
and
9 deletions
Show diff stats
invesalius/gui/import_network_panel.py
... | ... | @@ -389,12 +389,11 @@ class FindPanel(wx.Panel): |
389 | 389 | |
390 | 390 | sizer_txt_find = wx.BoxSizer(wx.HORIZONTAL) |
391 | 391 | sizer_txt_find.Add((5, 0), 0, wx.EXPAND|wx.HORIZONTAL) |
392 | - find_txt = wx.TextCtrl(self, -1,size=(225, -1)) | |
392 | + self.find_txt = wx.TextCtrl(self, -1,size=(225, -1)) | |
393 | 393 | |
394 | 394 | self.btn_find = wx.Button(self, -1, _("Search")) |
395 | - | |
396 | 395 | |
397 | - sizer_txt_find.Add(find_txt) | |
396 | + sizer_txt_find.Add(self.find_txt) | |
398 | 397 | sizer_txt_find.Add(self.btn_find) |
399 | 398 | |
400 | 399 | self.sizer.Add((0, 5), 0, wx.EXPAND|wx.HORIZONTAL) |
... | ... | @@ -415,6 +414,7 @@ class FindPanel(wx.Panel): |
415 | 414 | self._bind_gui_evt() |
416 | 415 | |
417 | 416 | def __bind_evt(self): |
417 | + ps.Publisher().subscribe(self.SetHostsList, 'Set FindPanel hosts list') | |
418 | 418 | #ps.Publisher().subscribe(self.ShowDicomSeries, 'Load dicom preview') |
419 | 419 | #ps.Publisher().subscribe(self.SetDicomSeries, 'Load group into import panel') |
420 | 420 | #ps.Publisher().subscribe(self.SetPatientSeries, 'Load patient into import panel') |
... | ... | @@ -426,9 +426,26 @@ class FindPanel(wx.Panel): |
426 | 426 | self.Bind(wx.EVT_BUTTON, self.OnButtonFind, self.btn_find) |
427 | 427 | |
428 | 428 | def OnButtonFind(self, evt): |
429 | - print "clicked...." | |
429 | + hosts = self.GetHostList() | |
430 | + | |
431 | + for key in hosts.keys(): | |
432 | + if key != 0: | |
433 | + dn = dcm_net.DicomNet() | |
434 | + dn.SetHost(self.hosts[key][1]) | |
435 | + dn.SetPort(self.hosts[key][2]) | |
436 | + dn.SetAETitleCall(self.hosts[key][3]) | |
437 | + dn.SetAETitle(self.hosts[0][3]) | |
438 | + dn.SetSearchWord(self.find_txt.GetValue()) | |
439 | + print dn.RunCFind() | |
430 | 440 | |
431 | 441 | |
442 | + def SetHostsList(self, evt_pub): | |
443 | + self.hosts = evt_pub.data | |
444 | + | |
445 | + def GetHostList(self): | |
446 | + ps.Publisher().sendMessage('Get NodesPanel host list') | |
447 | + return self.hosts | |
448 | + | |
432 | 449 | class HostFindPanel(wx.Panel): |
433 | 450 | def __init__(self, parent): |
434 | 451 | wx.Panel.__init__(self, parent, -1) |
... | ... | @@ -525,6 +542,7 @@ class NodesPanel(wx.Panel): |
525 | 542 | self.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.EndEdition, self.tree_node) |
526 | 543 | |
527 | 544 | ps.Publisher().subscribe(self.CheckItemDict, "Check item dict") |
545 | + ps.Publisher().subscribe(self.GetHostsList, "Get NodesPanel host list") | |
528 | 546 | #ps.Publisher().subscribe(self.UnCheckItemDict, "Uncheck item dict") |
529 | 547 | |
530 | 548 | |
... | ... | @@ -583,6 +601,10 @@ class NodesPanel(wx.Panel): |
583 | 601 | self.SetAutoLayout(1) |
584 | 602 | self.sizer = sizer |
585 | 603 | |
604 | + def GetHostsList(self, pub_evt): | |
605 | + ps.Publisher().sendMessage('Set FindPanel hosts list', self.hosts) | |
606 | + | |
607 | + | |
586 | 608 | def EndEdition(self, evt): |
587 | 609 | index = evt.m_itemIndex |
588 | 610 | item = evt.m_item |
... | ... | @@ -637,9 +659,6 @@ class NodesPanel(wx.Panel): |
637 | 659 | else: |
638 | 660 | self.tree_node.SetStringItem(key, 4, _("error")) |
639 | 661 | |
640 | - | |
641 | - | |
642 | - | |
643 | 662 | def RightButton(self,evt): |
644 | 663 | event.Skip() |
645 | 664 | |
... | ... | @@ -651,7 +670,6 @@ class NodesPanel(wx.Panel): |
651 | 670 | if evt.m_itemIndex != 0: |
652 | 671 | self.tree_node.SetDeselected(evt.m_itemIndex) |
653 | 672 | |
654 | - | |
655 | 673 | def CheckItemDict(self, evt_pub): |
656 | 674 | index, flag = evt_pub.data |
657 | 675 | if index != 0: | ... | ... |
invesalius/net/dicom.py
... | ... | @@ -7,6 +7,11 @@ class DicomNet: |
7 | 7 | self.port = '' |
8 | 8 | self.aetitle_call = '' |
9 | 9 | self.aetitle = '' |
10 | + self.search_word = '' | |
11 | + self.search_type = 'patient' | |
12 | + | |
13 | + def __call__(self): | |
14 | + return self | |
10 | 15 | |
11 | 16 | def SetHost(self, address): |
12 | 17 | self.address = address |
... | ... | @@ -20,7 +25,93 @@ class DicomNet: |
20 | 25 | def SetAETitle(self, ae_title): |
21 | 26 | self.aetitle = ae_title |
22 | 27 | |
28 | + def SetSearchWord(self, word): | |
29 | + self.search_word = word | |
30 | + | |
31 | + def SetSearchType(self, stype): | |
32 | + self.search_type = stype | |
33 | + | |
34 | + def GetValueFromDICOM(self, ret, tag): | |
35 | + value = str(ret.GetDataElement(gdcm.Tag(tag[0],\ | |
36 | + tag[1])).GetValue()) | |
37 | + return value | |
38 | + | |
39 | + | |
23 | 40 | def RunCEcho(self): |
24 | 41 | cnf = gdcm.CompositeNetworkFunctions() |
25 | 42 | return cnf.CEcho(self.address, int(self.port),\ |
26 | 43 | self.aetitle, self.aetitle_call) |
44 | + | |
45 | + def RunCFind(self): | |
46 | + | |
47 | + tags = [(0x0010, 0x0010), (0x0010, 0x1010), (0x0010,0x0040), (0x0008,0x1030),\ | |
48 | + (0x0008,0x0060), (0x0008,0x0022), (0x0008,0x0080), (0x0010,0x0030),\ | |
49 | + (0x0008,0x0050), (0x0008,0x0090)] | |
50 | + | |
51 | + | |
52 | + ds = gdcm.DataSet() | |
53 | + | |
54 | + for tag in tags: | |
55 | + | |
56 | + bit_size = len(self.search_word) + 1 | |
57 | + | |
58 | + tg = gdcm.Tag(tag[0], tag[1]) | |
59 | + | |
60 | + de = gdcm.DataElement(tg) | |
61 | + | |
62 | + if self.search_type == 'patient': | |
63 | + de.SetByteValue(str(self.search_word + '*'), gdcm.VL(bit_size)) | |
64 | + else: | |
65 | + de.SetByteValue('*', gdcm.VL(1)) | |
66 | + | |
67 | + ds.Insert(de) | |
68 | + | |
69 | + | |
70 | + cnf = gdcm.CompositeNetworkFunctions() | |
71 | + theQuery = cnf.ConstructQuery(gdcm.ePatientRootType, gdcm.eImageOrFrame, ds) | |
72 | + ret = gdcm.DataSetArrayType() | |
73 | + | |
74 | + cnf.CFind(self.address, int(self.port), theQuery, ret, self.aetitle,\ | |
75 | + self.aetitle_call) | |
76 | + | |
77 | + patients = {} | |
78 | + | |
79 | + exist_images = False | |
80 | + c = 0 | |
81 | + for i in range(0,ret.size()): | |
82 | + patient_id = str(ret[i].GetDataElement(gdcm.Tag(0x0010, 0x0020)).GetValue()) | |
83 | + serie_id = str(ret[i].GetDataElement(gdcm.Tag(0x0020, 0x000e)).GetValue()) | |
84 | + | |
85 | + if not(patient_id in patients.keys()): | |
86 | + patients[patient_id] = {} | |
87 | + | |
88 | + | |
89 | + if not(serie_id in patients[patient_id]): | |
90 | + | |
91 | + rt = ret[i] | |
92 | + | |
93 | + | |
94 | + name = self.GetValueFromDICOM(rt, ((0x0010, 0x0010))) | |
95 | + age = self.GetValueFromDICOM(rt, ((0x0010, 0x1010))) | |
96 | + gender = self.GetValueFromDICOM(rt, ((0x0010),(0x0040))) | |
97 | + study_description = self.GetValueFromDICOM(rt, ((0x0008),(0x1030))) | |
98 | + modality = self.GetValueFromDICOM(rt, ((0x0008),(0x0060))) | |
99 | + date_acquisition = self.GetValueFromDICOM(rt, ((0x0008),(0x0022))) | |
100 | + institution = self.GetValueFromDICOM(rt, ((0x0008),(0x0080))) | |
101 | + date_of_birth = self.GetValueFromDICOM(rt, ((0x0010),(0x0030))) | |
102 | + acession_number = self.GetValueFromDICOM(rt, ((0x0008),(0x0050))) | |
103 | + ref_physician = self.GetValueFromDICOM(rt, ((0x0008),(0x0090))) | |
104 | + | |
105 | + patients[patient_id][serie_id] = {'name':name, 'age':age, 'gender':gender,\ | |
106 | + 'study_description':study_description,\ | |
107 | + 'modality':modality, \ | |
108 | + 'date_acquision':date_acquisition,\ | |
109 | + 'institution':institution,\ | |
110 | + 'date_of_birth':date_of_birth,\ | |
111 | + 'acession_number':acession_number,\ | |
112 | + 'ref_physician':ref_physician} | |
113 | + | |
114 | + patients[patient_id][serie_id]['n_images'] = 1 | |
115 | + else: | |
116 | + patients[patient_id][serie_id]['n_images'] += 1 | |
117 | + | ... | ... |
invesalius/reader/dicom_reader.py
... | ... | @@ -125,7 +125,10 @@ class LoadDicom: |
125 | 125 | encoding = "ISO_IR 100" |
126 | 126 | else: |
127 | 127 | encoding = const.DICOM_ENCODING_TO_PYTHON[encoding_value] |
128 | - | |
128 | + else: | |
129 | + encoding = "ISO_IR 100" | |
130 | + | |
131 | + | |
129 | 132 | # Iterate through the Header |
130 | 133 | iterator = header.GetDES().begin() |
131 | 134 | while (not iterator.equal(header.GetDES().end())): | ... | ... |