From ee04aea07efbc77c29e254ade803790151814802 Mon Sep 17 00:00:00 2001 From: bpinsard Date: Thu, 27 Sep 2012 10:13:09 +0200 Subject: [PATCH 1/4] attempt for RealWorldValueMapping rescale support in Wrapper --- nibabel/nicom/dicomwrappers.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/nibabel/nicom/dicomwrappers.py b/nibabel/nicom/dicomwrappers.py index c9aef8b75a..a64dfadc3e 100644 --- a/nibabel/nicom/dicomwrappers.py +++ b/nibabel/nicom/dicomwrappers.py @@ -355,6 +355,19 @@ def is_same_series(self, other): def _scale_data(self, data): scale = self.get('RescaleSlope', 1) offset = self.get('RescaleIntercept', 0) + if scale == 1 and offset == 0: + mpseq = self.get('RealWorldValueMappingSequence',None) + if mpseq == None: # compatibility with pydicom < 0.9.7 ???? + mpseq = self.get('RealWorldValueMappings',None) + print mpseq + if mpseq != None and len(mpseq)>0: + print mpseq + mpseq = mpseq[0] + if mpseq.has_key('RealWorldValueSlope'): + scale = mpseq.RealWorldValueSlope + if mpseq.has_key('RealWorldValueIntercept'): + offset = mpseq.RealWorldValueIntercept + print scale, offset # a little optimization. If we are applying either the scale or # the offset, we need to allow upcasting to float. if scale != 1: From 9fd59590543716e85346c1436c688a85b6344da5 Mon Sep 17 00:00:00 2001 From: bpinsard Date: Mon, 3 Dec 2012 09:13:35 +0100 Subject: [PATCH 2/4] cleaning debug prints --- nibabel/nicom/dicomwrappers.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/nibabel/nicom/dicomwrappers.py b/nibabel/nicom/dicomwrappers.py index a64dfadc3e..e5f465e840 100644 --- a/nibabel/nicom/dicomwrappers.py +++ b/nibabel/nicom/dicomwrappers.py @@ -359,15 +359,12 @@ def _scale_data(self, data): mpseq = self.get('RealWorldValueMappingSequence',None) if mpseq == None: # compatibility with pydicom < 0.9.7 ???? mpseq = self.get('RealWorldValueMappings',None) - print mpseq if mpseq != None and len(mpseq)>0: - print mpseq mpseq = mpseq[0] if mpseq.has_key('RealWorldValueSlope'): scale = mpseq.RealWorldValueSlope if mpseq.has_key('RealWorldValueIntercept'): offset = mpseq.RealWorldValueIntercept - print scale, offset # a little optimization. If we are applying either the scale or # the offset, we need to allow upcasting to float. if scale != 1: From 7d5854043565128d45285e3df14b81ef18544207 Mon Sep 17 00:00:00 2001 From: bpinsard Date: Thu, 7 Mar 2013 10:57:43 +0100 Subject: [PATCH 3/4] merge --- nibabel/nicom/dicomwrappers.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nibabel/nicom/dicomwrappers.py b/nibabel/nicom/dicomwrappers.py index e5f465e840..152b546618 100644 --- a/nibabel/nicom/dicomwrappers.py +++ b/nibabel/nicom/dicomwrappers.py @@ -353,8 +353,9 @@ def is_same_series(self, other): return True def _scale_data(self, data): - scale = self.get('RescaleSlope', 1) - offset = self.get('RescaleIntercept', 0) + # depending on pydicom and dicom files, values might need casting from Decimal to float + scale = float(self.get('RescaleSlope', 1)) + offset = float(self.get('RescaleIntercept', 0)) if scale == 1 and offset == 0: mpseq = self.get('RealWorldValueMappingSequence',None) if mpseq == None: # compatibility with pydicom < 0.9.7 ???? From 7e9533cc3aa0a70811195c405dd89b06583c4fa0 Mon Sep 17 00:00:00 2001 From: bpinsard Date: Tue, 26 Mar 2013 15:32:17 +0100 Subject: [PATCH 4/4] has_key not working???, workaround --- nibabel/nicom/dicomwrappers.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/nibabel/nicom/dicomwrappers.py b/nibabel/nicom/dicomwrappers.py index 152b546618..862b07e6e2 100644 --- a/nibabel/nicom/dicomwrappers.py +++ b/nibabel/nicom/dicomwrappers.py @@ -362,10 +362,8 @@ def _scale_data(self, data): mpseq = self.get('RealWorldValueMappings',None) if mpseq != None and len(mpseq)>0: mpseq = mpseq[0] - if mpseq.has_key('RealWorldValueSlope'): - scale = mpseq.RealWorldValueSlope - if mpseq.has_key('RealWorldValueIntercept'): - offset = mpseq.RealWorldValueIntercept + scale = mpseq.get('RealWorldValueSlope',1) + offset = mpseq.get('RealWorldValueIntercept',0) # a little optimization. If we are applying either the scale or # the offset, we need to allow upcasting to float. if scale != 1: