Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Marc SCHWEITZER
sight
Commits
d5f8dda2
Commit
d5f8dda2
authored
Jan 23, 2015
by
emilie.harquel
Browse files
Merge from branch fw4spl_0.9.2 to branch fw4spl_0.10.0
--HG-- branch : fw4spl_0.10.0
parents
abe4f693
57013c8f
Changes
16
Hide whitespace changes
Inline
Side-by-side
Bundles/LeafUI/uiImageQt/src/uiImageQt/WindowLevel.cpp
View file @
d5f8dda2
...
...
@@ -256,29 +256,7 @@ void WindowLevel::receiving( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTool
if
(
msg
->
hasEvent
(
::
fwComEd
::
ImageMsg
::
BUFFER
))
{
::
fwData
::
Image
::
sptr
image
=
this
->
getObject
<
::
fwData
::
Image
>
();
bool
imageIsValid
=
::
fwComEd
::
fieldHelper
::
MedicalImageHelpers
::
checkImageValidity
(
image
);
if
(
imageIsValid
)
{
this
->
updateImageInfos
(
image
);
this
->
updateTransferFunction
(
image
,
this
->
getSptr
());
if
(
m_autoWindowing
)
{
double
min
,
max
;
::
fwComEd
::
fieldHelper
::
MedicalImageHelpers
::
getMinMax
(
image
,
min
,
max
);
this
->
updateImageWindowLevel
(
min
,
max
);
}
::
fwData
::
TransferFunction
::
sptr
pTF
=
this
->
getTransferFunction
();
SLM_ASSERT
(
"TransferFunction null pointer"
,
pTF
);
::
fwData
::
TransferFunction
::
TFValuePairType
minMax
=
pTF
->
getWLMinMax
();
this
->
onImageWindowLevelChanged
(
minMax
.
first
,
minMax
.
second
);
}
this
->
setEnabled
(
imageIsValid
);
this
->
updating
();
}
if
(
msg
->
hasEvent
(
::
fwComEd
::
TransferFunctionMsg
::
WINDOWING
))
{
...
...
Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SOrganTransformation.hpp
View file @
d5f8dda2
...
...
@@ -31,9 +31,7 @@ namespace uiMedData
namespace
editor
{
/**
* @class SOrganTransformation
* @brief Display the organs list and allow an interactive selection to set the corresponding meshes in a composite
*/
class
UIMEDDATAQT_CLASS_API
SOrganTransformation
:
public
QObject
,
public
::
gui
::
editor
::
IEditor
...
...
Bundles/LeafVisu/visuVTKAdaptor/rc/plugin.xml
View file @
d5f8dda2
...
...
@@ -324,7 +324,6 @@
<service>
::visuVTKAdaptor::ImageSliceOrientationText
</service>
<object>
::fwData::Object
</object>
</extension>
</plugin>
CHANGELOG.txt
View file @
d5f8dda2
=== fw4spl_0.9.2.3 ( diff from fw4spl_0.9.2.2 ) 10/09/2014 ===
* Transplanted from fw4spl_0.10.0:
* Removed all services working on deprecated data PatientDB
* Removed ARLcore dependency in uiMeasurement : load/save landmarks with ioAtoms
* Moved Examples, POC and Training to fw4spl-ext repository
* Fixed AppConfig::getUniqueIdentifier()
* Fixed wrong warning in PushObjectSrv.
* Fixed gui doxygen (menuBar and toolBar)
* Removed useless notify in TransferFunctionEditor::initTransferFunctions()
* General:
* Updated fwAtomsPatch and spyLogger according to Bost 1.54
* Removed author field in doxygen
* Fixed Mac OS issue with Qt (QTBUG-32789)
* Fixed ProfileRunner for Mac OS
* Fixed guiQt, SliceCursor and WindowLevel memory leak
* Moved gdcmIO, ioGdcm and ioGdcmQt to FW4SPL-ext
* Added CMakeLists
* Removed useless SelectedNodeIOUpdater service
* Core:
* Added getConfigDesc in fwServices
* Fixed timer asio one shot
* Changed SigSevBacktrace log level to ERROR
* Fixed PushObjectSrv
* Added 'launched' signal to ConfigActionSrv and SConfigLauncher
* Added 'updated' signal on Graph and Node
* Optimized Graph route
* Added SSignal service
* Updated template arguments to manage five parameters in fwCom
* Fixed fwRuntime compilation on Linux
* Added support of ! operator in seshat path (returns a string pointed by the seshat path if possible, the uid otherwise)
* Allowed empty string in XML <parameter> default value.
* Memory dump system
* Set default streamFactory when buffer's streamFactory was never explicitly set
* Fixed buffer lock and buffer streams
* Fixed an issue due to some implementations returning a non-NULL pointer for malloc(0) in buffer allocation
* Fixed BufferManager and StructureTraits binding
* Added getTemporaryFolder in System
* IO:
* Fixed fwData::Array initialization in vtkGdcmIO/fwVtkIO SeriesDB reader
* Fixed zipped json/xml loading
* Updated ioAtoms to be able to overwrite a lazy-loaded file
* Added custom extensions ability in ioAtoms
* Fixed atom custom extension when using JSON/XML backends
* UI:
* Added a way to configure button state
* Fixed relative URLs in uiGenericQt::action::LaunchBrowserActionService
* Updated IOSelector to display config's description if applicable
* Fixed compilation of DataInfoFromMsgUpdaterSrv
* Updated SExportSeries to use an existing activity description or physician name
* Added ability to pass parameters in config
* Updated Qt MessageDialog to manage a default button
* Added several editors and services to propose a new export config
* Set SShowAbout to modal
* Tools:
* Added fwDataTools::TransformationMatrix3D to manipulate ::fwData::TransformationMatrix3D
* Removed useless dimension check for medical images
* Added lib fwMedDataTools to manage fwMedData UID
* Visu:
* Added autoRender option in genericScene
* Added ability of hidding cropping box by default in visuVTKVRAdaptor::Volume
* Added locks in VTK adaptors
* Updated VTK text adaptor to manage Seshat path, text alignment and font size
* Added patient name in all generic scene.
* Patch system:
* Fixed fatal when visiting enum object in ::fwDataCamp::visitor::getObject class.
* Added medical workspace filtering for MedicalData V2 context
* Added ImageSeries and ActivitySeries to fwStructuralPatch
* Added resection patching in MedicalData V2 context
* Activities:
* Added activity validator concept to fwActivites
* Added image properties validator
* Added new option for SActivityLauncher to define a default association
* Made activity launch cancelable
* Added a new validator for authorizing activity launching with several series from the same study
* Added seshat path ability in activity launcher
* UT:
* Fixed several compilation issues (b4be6561e715 and 20ff6c2d0cda)
* Fixed working directory
* Software:
* Updated VRRender activities:
* 3DVisualisationActivity
* blendActivity
* volumeRenderingActivity
=== fw4spl_0.9.2.2 ( diff from fw4spl_0.9.2.1 ) 20/06/2013 ===
* Transplanted from fw4spl_0.9.1.4.:
...
...
SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/Graph.cpp
View file @
d5f8dda2
/* ***** BEGIN LICENSE BLOCK *****
* FW4SPL - Copyright (C) IRCAD, 2009-201
2
.
* FW4SPL - Copyright (C) IRCAD, 2009-201
4
.
* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
* published by the Free Software Foundation.
* ****** END LICENSE BLOCK ****** */
...
...
@@ -8,6 +8,8 @@
#include
<fwAtoms/Map.hpp>
#include
<fwAtoms/Sequence.hpp>
#include
<fwData/Graph.hpp>
#include
<fwTools/UUID.hpp>
#include
"fwAtomConversion/mapper/Graph.hpp"
#include
"fwAtomConversion/mapper/registry/macros.hpp"
...
...
@@ -43,6 +45,8 @@ fwAtomConversionRegisterMacro( ::fwAtomConversion::mapper::Graph, ::fwData::Grap
{
value
=
::
fwAtoms
::
Object
::
New
();
value
->
setMetaInfo
(
"ID_METAINFO"
,
::
fwTools
::
UUID
::
generateUUID
());
value
->
setAttribute
(
"edge"
,
::
fwAtomConversion
::
convert
(
elem
.
first
,
cache
));
value
->
setAttribute
(
"source"
,
::
fwAtomConversion
::
convert
(
elem
.
second
.
first
,
cache
));
value
->
setAttribute
(
"destination"
,
::
fwAtomConversion
::
convert
(
elem
.
second
.
second
,
cache
));
...
...
@@ -75,7 +79,6 @@ fwAtomConversionRegisterMacro( ::fwAtomConversion::mapper::Graph, ::fwData::Grap
elemAtom
->
type
()
!=
::
fwAtoms
::
Base
::
OBJECT
);
::
fwAtoms
::
Object
::
sptr
objectAtom
=
::
fwAtoms
::
Object
::
dynamicCast
(
elemAtom
);
::
fwAtoms
::
Object
::
sptr
edgeAtom
=
::
fwAtoms
::
Object
::
dynamicCast
(
objectAtom
->
getAttribute
(
"edge"
)
);
::
fwData
::
Edge
::
sptr
edge
=
::
fwData
::
Edge
::
dynamicCast
(
::
fwAtomConversion
::
convert
(
edgeAtom
,
cache
,
uuidPolicy
)
);
...
...
SrcLib/core/fwGui/include/fwGui/IFrameSrv.hpp
View file @
d5f8dda2
...
...
@@ -56,6 +56,7 @@ protected :
<name>My App</name>
<icon>Bundles/myApp_1-0/icon.ico</icon>
<minSize width="800" height="600" />
<style mode="MODAL" />
</frame>
<toolBar />
<menuBar />
...
...
@@ -71,7 +72,9 @@ protected :
* - \b exit (by default) : the application is closed. Use it for the main frame.
* - \b notify : notifies service's object with WINDOW_CLOSED event.
* - \b message : a confirmation dialog appears asking user to confirm closing application
* - \<frame\> : defines the frame name, icon, size.
* - \<frame\> : defines the frame name, icon, size and style.
* - \b style : defines frame style (modal, always on top, etc.), not mandatory.
* Allowed values are MODAL, STAY_ON_TOP and DEFAULT (default value).
* - The toolBar section isn't mandatory.
* - The menuBar section isn't mandatory.
*
...
...
SrcLib/core/fwGui/include/fwGui/layoutManager/IFrameLayoutManager.hpp
View file @
d5f8dda2
...
...
@@ -53,7 +53,8 @@ public:
typedef
enum
{
DEFAULT
,
STAY_ON_TOP
STAY_ON_TOP
,
MODAL
}
Style
;
typedef
std
::
string
RegistryKeyType
;
...
...
SrcLib/core/fwGui/src/fwGui/layoutManager/IFrameLayoutManager.cpp
View file @
d5f8dda2
...
...
@@ -103,6 +103,10 @@ void IFrameLayoutManager::initialize( ConfigurationType configuration)
{
m_frameInfo
.
m_style
=
STAY_ON_TOP
;
}
else
if
(
style
==
"MODAL"
)
{
m_frameInfo
.
m_style
=
MODAL
;
}
else
{
OSLM_FATAL
(
"Sorry, style "
<<
style
<<
" is unknown."
);
...
...
SrcLib/core/fwGuiQt/src/fwGuiQt/WorkerQt.cpp
View file @
d5f8dda2
...
...
@@ -266,6 +266,7 @@ void WorkerQt::init( int &argc, char **argv )
}
OSLM_TRACE
(
"Init Qt"
<<
::
fwThread
::
getCurrentThreadId
()
<<
" Finish"
);
}
WorkerQt
::~
WorkerQt
()
...
...
SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/MessageDialog.cpp
View file @
d5f8dda2
...
...
@@ -123,6 +123,11 @@ void MessageDialog::setDefaultButton(::fwGui::dialog::IMessageDialog::Buttons bu
box
.
addButton
(
m_customButtons
[
i
],
QMessageBox
::
ActionRole
);
}
for
(
int
i
=
0
;
i
<
m_customButtons
.
size
();
++
i
)
{
box
.
addButton
(
m_customButtons
[
i
],
QMessageBox
::
ActionRole
);
}
MessageDialogQtButtonType
::
const_iterator
iter
=
messageDialogQtButton
.
find
(
m_defaultButton
);
if
(
iter
!=
messageDialogQtButton
.
end
())
{
...
...
SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/FrameLayoutManager.cpp
View file @
d5f8dda2
...
...
@@ -71,6 +71,10 @@ void FrameLayoutManager::createFrame()
{
m_qtWindow
->
setWindowFlags
(
Qt
::
WindowStaysOnTopHint
);
}
else
if
(
frameInfo
.
m_style
==
::
fwGui
::
layoutManager
::
IFrameLayoutManager
::
MODAL
)
{
m_qtWindow
->
setWindowModality
(
Qt
::
ApplicationModal
);
}
int
sizeX
=
(
frameInfo
.
m_size
.
first
>
0
)
?
frameInfo
.
m_size
.
first
:
m_qtWindow
->
size
().
width
();
int
sizeY
=
(
frameInfo
.
m_size
.
second
>
0
)
?
frameInfo
.
m_size
.
second
:
m_qtWindow
->
size
().
height
();
...
...
SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/FrameLayoutManager.cpp
View file @
d5f8dda2
/* ***** BEGIN LICENSE BLOCK *****
* FW4SPL - Copyright (C) IRCAD, 2009-201
2
.
* FW4SPL - Copyright (C) IRCAD, 2009-201
4
.
* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
* published by the Free Software Foundation.
* ****** END LICENSE BLOCK ****** */
...
...
@@ -31,7 +31,8 @@ namespace fwGui
const
std
::
map
<
::
fwGui
::
layoutManager
::
IFrameLayoutManager
::
Style
,
long
>
FrameLayoutManager
::
FWSTYLE_TO_WXSTYLE
=
::
boost
::
assign
::
map_list_of
(
::
fwGui
::
layoutManager
::
IFrameLayoutManager
::
DEFAULT
,
wxDEFAULT_FRAME_STYLE
)
(
::
fwGui
::
layoutManager
::
IFrameLayoutManager
::
STAY_ON_TOP
,
wxDEFAULT_FRAME_STYLE
|
wxSTAY_ON_TOP
);
(
::
fwGui
::
layoutManager
::
IFrameLayoutManager
::
STAY_ON_TOP
,
wxDEFAULT_FRAME_STYLE
|
wxSTAY_ON_TOP
)
(
::
fwGui
::
layoutManager
::
IFrameLayoutManager
::
MODAL
,
wxDEFAULT_FRAME_STYLE
|
wxSTAY_ON_TOP
);
//-----------------------------------------------------------------------------
...
...
SrcLib/io/fwAtomsBoostIO/src/fwAtomsBoostIO/Reader.cpp
View file @
d5f8dda2
...
...
@@ -52,10 +52,8 @@ AtomCacheType::mapped_type hitCache(const AtomCacheType::key_type &path) const
AtomCacheType
::
const_iterator
iter
=
m_cache
.
find
(
path
);
if
(
iter
!=
m_cache
.
end
())
{
OSLM_TRACE
(
" cache hit : '"
<<
path
<<
"'"
);
return
iter
->
second
;
}
OSLM_TRACE
(
" cache miss : '"
<<
path
<<
"'"
);
return
AtomCacheType
::
mapped_type
();
}
...
...
@@ -63,7 +61,6 @@ AtomCacheType::mapped_type hitCache(const AtomCacheType::key_type &path) const
void
cache
(
const
std
::
string
&
ptpath
,
const
AtomCacheType
::
mapped_type
&
atom
)
{
OSLM_TRACE
(
" cache : '"
<<
ptpath
<<
"' : "
<<
atom
->
getClassname
()
);
m_cache
.
insert
(
AtomCacheType
::
value_type
(
ptpath
,
atom
)
);
}
...
...
@@ -165,6 +162,12 @@ void cache(const std::string &ptpath, const AtomCacheType::mapped_type &atom)
}
atom
->
setAttributes
(
attributes
);
// Managing object with no id
if
(
atom
->
getMetaInfo
(
"ID_METAINFO"
).
empty
())
{
atom
->
setMetaInfo
(
"ID_METAINFO"
,
::
fwTools
::
UUID
::
generateUUID
());
}
return
atom
;
}
...
...
SrcLib/io/fwAtomsHdf5IO/src/fwAtomsHdf5IO/Reader.cpp
View file @
d5f8dda2
...
...
@@ -102,11 +102,11 @@ Hdf5Visitor(const ::boost::filesystem::path & path)
FW_RAISE
(
"Failed to read file '"
<<
path
.
string
()
<<
"' :
\n
no writer version found."
);
}
FW_RAISE_IF
(
"Failed to read file '"
<<
path
.
string
()
<<
"':
\n
"
FW_RAISE_IF
(
"Failed to read file '"
<<
path
.
string
()
<<
"':
\n
"
<<
"Detected file version is '"
<<
strWriterVersion
<<
"'"
<<
" whereas current version is '"
<<
Writer
::
s_VERSION
<<
"'"
,
Writer
::
s_VERSION
!=
strWriterVersion
);
FW_RAISE_IF
(
"Failed to read file '"
<<
path
.
string
()
<<
"':
\n
"
FW_RAISE_IF
(
"Failed to read file '"
<<
path
.
string
()
<<
"':
\n
"
<<
"Detected atoms version is '"
<<
strAtomsVersion
<<
"'"
<<
" whereas current version is '"
<<
::
fwAtoms
::
Base
::
s_VERSION
<<
"'"
,
::
fwAtoms
::
Base
::
s_VERSION
!=
strAtomsVersion
);
...
...
@@ -255,6 +255,12 @@ Hdf5Visitor(const ::boost::filesystem::path & path)
}
object
->
setAttributes
(
attributes
);
// Managing object with no id
if
(
object
->
getMetaInfo
(
"ID_METAINFO"
).
empty
())
{
object
->
setMetaInfo
(
"ID_METAINFO"
,
::
fwTools
::
UUID
::
generateUUID
());
}
return
object
;
}
...
...
SrcLib/tests/fwTest/include/fwTest/DicomReaderTest.hpp
View file @
d5f8dda2
...
...
@@ -36,6 +36,11 @@ public:
* its represents a CT image of a knee ( 400 slices ).
*/
FWTEST_API
static
bool
checkSeriesACHGenou
(
const
SPTR
(
::
fwMedData
::
ImageSeries
)
&
series
);
/**
* @brief This method is the same as checkSeriesACHGenou but it checks trimmed strings instead of even sized strings
*/
FWTEST_API
static
bool
checkSeriesACHGenouTrimmed
(
const
SPTR
(
::
fwMedData
::
ImageSeries
)
&
series
);
};
...
...
SrcLib/tests/fwTest/src/fwTest/DicomReaderTest.cpp
View file @
d5f8dda2
...
...
@@ -228,6 +228,197 @@ bool DicomReaderTest::checkSeriesACHGenou( const ::fwMedData::ImageSeries::sptr
}
//------------------------------------------------------------------------------
bool
DicomReaderTest
::
checkSeriesACHGenouTrimmed
(
const
::
fwMedData
::
ImageSeries
::
sptr
&
series
)
{
bool
ok
=
true
;
bool
notReallyChecked
=
true
;
::
fwMedData
::
Patient
::
sptr
patient
=
series
->
getPatient
();
::
fwMedData
::
Study
::
sptr
study
=
series
->
getStudy
();
::
fwMedData
::
Equipment
::
sptr
equipment
=
series
->
getEquipment
();
// Study, Acquisition
::
fwData
::
Image
::
sptr
img
=
series
->
getImage
();
//# Dicom-File-Format
//
//# Dicom-Meta-Information-Header
//# Used TransferSyntax:
//(0002,0000) UL 224 # 4,1 File Meta Information Group Length
//(0002,0001) OB 00\01 # 2,1 File Meta Information Version
//(0002,0002) UI [1.2.840.10008.5.1.4.1.1.2] # 26,1 Media Storage SOP Class UID
//(0002,0003) UI [1.2.392.200036.9116.2.6.1.48.1211418863.1225184712.380696] # 58,1 Media Storage SOP Instance UID
//(0002,0010) UI [1.2.840.10008.1.2.1] # 20,1 Transfer Syntax UID
//(0002,0012) UI [1.2.250.1.119.1.1.1.1.1.1.33.3.8.13.7] # 38,1 Implementation Class UID
//(0002,0013) SH [scanplus_33 ] # 12,1 Implementation Version Name
//(0002,0016) AE [scanplus] # 8,1 Source Application Entity Title
//
//# Dicom-Data-Set
//# Used TransferSyntax: 1.2.840.10008.1.2.1
//(0008,0000) UL 426 # 4,1 Generic Group Length
//(0008,0008) CS [ORIGINAL\PRIMARY\AXIAL] # 22,2-n Image Type
//(0008,0016) UI [1.2.840.10008.5.1.4.1.1.2] # 26,1 SOP Class UID
//(0008,0018) UI [1.2.392.200036.9116.2.6.1.48.1211418863.1225184712.380696] # 58,1 SOP Instance UID
//(0008,0020) DA [20081028] # 8,1 Study Date
CHECK_VALUE
(
ok
,
"Study Date doesn't match : "
,
"20081028"
,
study
->
getDate
());
//(0008,0021) DA [20081028] # 8,1 Series Date
CHECK_VALUE
(
ok
,
"Series Modality doesn't match : "
,
"20081028"
,
series
->
getDate
()
);
//(0008,0022) DA [20081028] # 8,1 Acquisition Date
//(0008,0023) DA [20081028] # 8,1 Content Date
//(0008,0030) TM [174327.000] # 10,1 Study Time
CHECK_VALUE
(
ok
,
"Study Time doesn't match : "
,
"174327.000"
,
study
->
getTime
()
);
//(0008,0031) TM [180156.734] # 10,1 Series Time
CHECK_VALUE
(
ok
,
"Series Modality doesn't match : "
,
"180156.734"
,
series
->
getTime
()
);
//(0008,0032) TM [174446.850] # 10,1 Acquisition Time
//(0008,0033) TM [174502.095] # 10,1 Content Time
//(0008,0050) SH [12514 ] # 6,1 Accession Number
//(0008,0060) CS [CT] # 2,1 Modality
CHECK_VALUE
(
ok
,
"Series Modality doesn't match : "
,
"CT"
,
series
->
getModality
()
);
//(0008,0070) LO [TOSHIBA ] # 8,1 Manufacturer
//(0008,0080) LO [SCANNER DE LA MODER ] # 20,1 Institution Name
CHECK_VALUE
(
ok
,
"Equipment's Institution Name doesn't match : "
,
"SCANNER DE LA MODER"
,
equipment
->
getInstitutionName
()
);
//(0008,0090) PN [DR MOREL] # 8,1 Referring Physician's Name
CHECK_VALUE
(
ok
,
"Study Referring Physician's Name doesn't match : "
,
"DR MOREL"
,
study
->
getReferringPhysicianName
()
);
//(0008,1010) SH [00000000001 ] # 12,1 Station Name
//(0008,103e) LO [ OS 0.5 ] # 10,1 Series Description
CHECK_VALUE
(
ok
,
"Study Description doesn't match : "
,
"OS 0.5"
,
series
->
getDescription
()
);
CHECK_VALUE
(
ok
,
"Study Description doesn't match : "
,
""
,
study
->
getDescription
()
);
// 0008,1030
//(0008,1040) LO [ID_DEPARTMENT ] # 14,1 Institutional Department Name
{
fwMedData
::
DicomValuesType
physiciansName
;
ok
&=
(
physiciansName
==
series
->
getPerformingPhysiciansName
());
OSLM_ERROR_IF
(
"Name of the physician(s) administering the Series doesn't match : "
,
(
physiciansName
==
series
->
getPerformingPhysiciansName
()));
}
//(0008,1090) LO [Aquilion] # 8,1 Manufacturer's Model Name
//(0010,0000) UL 104 # 4,1 Generic Group Length
//(0010,0010) PN [CHARNOZ ARNAUD] # 14,1 Patient's Name
CHECK_VALUE
(
ok
,
"Patient's Name doesn't match : "
,
"CHARNOZ ARNAUD"
,
patient
->
getName
()
);
//(0010,0020) LO [12592 ARTHRO GENOU G ] # 22,1 Patient ID
CHECK_VALUE
(
ok
,
"Patient ID doesn't match : "
,
"12592 ARTHRO GENOU G"
,
patient
->
getPatientId
()
);
//(0010,0030) DA [19790618] # 8,1 Patient's Birth Date
CHECK_VALUE
(
ok
,
"Patient's Birth Date doesn't match : "
,
"19790618"
,
patient
->
getBirthdate
()
);
//(0010,0040) CS [M ] # 2,1 Patient's Sex
CHECK_VALUE
(
ok
,
"Patient's Sex doesn't match :"
,
"M"
,
patient
->
getSex
()
);
//(0010,1010) AS [029Y] # 4,1 Patient's Age
CHECK_VALUE
(
ok
,
"Study Patient's Age doesn't match :"
,
"029Y"
,
study
->
getPatientAge
()
);
//(0010,4000) LT [ARTHRO] # 6,1 Patient Comments
//(0018,0000) UL 284 # 4,1 Generic Group Length
//(0018,0015) CS [DR MOREL] # 8,1 Body Part Examined
//(0018,0022) CS [HELICAL_CT] # 10,1-n Scan Options
//(0018,0050) DS [0.5 ] # 4,1 Slice Thickness
//(0018,0060) DS [120 ] # 4,1 KVP
//(0018,0090) DS [400.00] # 6,1 Data Collection Diameter
//(0018,1000) LO [C4522344] # 8,1 Device Serial Number
//(0018,1020) LO [V3.20ER005] # 10,1-n Software Version(s)
//(0018,1030) LO [ARTHRO GENOU] # 12,1 Protocol Name
//(0018,1100) DS [196.875 ] # 8,1 Reconstruction Diameter
//(0018,1120) DS [+0.0] # 4,1 Gantry/Detector Tilt
//(0018,1130) DS [+90.00] # 6,1 Table Height
//(0018,1140) CS [CW] # 2,1 Rotation Direction
//(0018,1150) IS [500 ] # 4,1 Exposure Time
//(0018,1151) IS [200 ] # 4,1 X-Ray Tube Current
//(0018,1152) IS [100 ] # 4,1 Exposure
//(0018,1170) IS [24] # 2,1 Generator Power
//(0018,1190) DS [0.9\0.8 ] # 8,1-n Focal Spot(s)
//(0018,1210) SH [FC30] # 4,1-n Convolution Kernel
//(0018,5100) CS [FFS ] # 4,1 Patient Position
//(0018,9345) UN (FD) 23.1 # 8,1 CTDIvol
//(0020,0000) UL 370 # 4,1 Generic Group Length
//(0020,000d) UI [1.2.392.200036.9116.2.6.1.48.1211418863.1225183167.375775] # 58,1 Study Instance UID
CHECK_VALUE
(
ok
,
"Study Instance UID doesn't match :"
,
"1.2.392.200036.9116.2.6.1.48.1211418863.1225183167.375775"
,
study
->
getInstanceUID
()
);
//(0020,000e) UI [1.2.392.200036.9116.2.6.1.48.1211418863.1225184516.765855] # 58,1 Series Instance UID
CHECK_VALUE
(
ok
,
"Series Instance UID doesn't match :"
,
"1.2.392.200036.9116.2.6.1.48.1211418863.1225184516.765855"
,
series
->
getInstanceUID
()
);
//(0020,0010) SH [12514 ] # 6,1 Study ID
//(0020,0011) IS [3 ] # 2,1 Series Number
//(0020,0012) IS [3 ] # 2,1 Acquisition Number
//(0020,0013) IS [404 ] # 4,1 Instance Number
//(0020,0020) CS [L\P ] # 4,2 Patient Orientation
//(0020,0032) DS [-36.71875\-88.28125\1350.300] # 28,3 Image Position (Patient)
if
(
!
img
)
{
OSLM_ERROR
(
"Missing image."
);
return
false
;
}
CHECK_VALUE_WITH_TOLERANCE
(
ok
,
"Image x origin doesn't match :"
,
-
36.71875
,
img
->
getOrigin
()[
0
],
0.01
);
CHECK_VALUE_WITH_TOLERANCE
(
ok
,
"Image y origin doesn't match :"
,
-
88.28125
,
img
->
getOrigin
()[
1
],
0.01
);
CHECK_VALUE_WITH_TOLERANCE
(
ok
,
"Image z origin doesn't match :"
,
1350.300
,
img
->
getOrigin
()[
2
],
0.01
);
//(0020,0037) DS [1.00000\0.00000\0.00000\0.00000\1.00000\0.00000 ] # 48,6 Image Orientation (Patient)
//(0020,0052) UI [1.2.392.200036.9116.2.6.1.48.1211418863.1225183409.15274] # 56,1 Frame of Reference UID
//(0020,1040) LO (no value) # 0,1 Position Reference Indicator
//(0020,1041) DS [+161.20 ] # 8,1 Slice Location
//(0028,0000) UL 158 # 4,1 Generic Group Length
//(0028,0002) US 1 # 2,1 Samples per Pixel
//(0028,0004) CS [MONOCHROME2 ] # 12,1 Photometric Interpretation
//(0028,0010) US 512 # 2,1 Rows
//(0028,0011) US 512 # 2,1 Columns
CHECK_VALUE
(
ok
,
"Image x size doesn't match :"
,
512
,
img
->
getSize
()[
0
]
);
CHECK_VALUE
(
ok
,
"Image y size doesn't match :"
,
512
,
img
->
getSize
()[
1
]
);
CHECK_VALUE
(
ok
,
"Image z size doesn't match :"
,
404
,
img
->
getSize
()[
2
]
);
//(0028,0030) DS [0.384\0.384 ] # 12,2 Pixel Spacing
CHECK_VALUE_WITH_TOLERANCE
(
ok
,
"Image x spacing doesn't match :"
,
0.384
,
img
->
getSpacing
()[
0
],
0.001
);
CHECK_VALUE_WITH_TOLERANCE
(
ok
,
"Image y spacing doesn't match :"
,
0.384
,
img
->
getSpacing
()[
1
],
0.001
);
CHECK_VALUE_WITH_TOLERANCE
(
ok
,
"Image z spacing doesn't match :"
,
0.399
,
img
->
getSpacing
()[
2
],
0.001
);
//(0028,0100) US 16 # 2,1 Bits Allocated
//(0028,0101) US 16 # 2,1 Bits Stored
CHECK_VALUE
(
notReallyChecked
,
"Image Bits Allocated correspond :"
,
16
,
img
->
getType
().
sizeOf
()
*
8
);
//(0028,0102) US 15 # 2,1 High Bit
//(0028,0103) US 1 # 2,1 Pixel Representation
CHECK_VALUE
(
notReallyChecked
,
"Image Bits Allocated correspond :"
,
false
,
img
->
getType
().
isSigned
()
);
//(0028,1050) DS [500 ] # 4,1-n Window Center
CHECK_VALUE
(
ok
,
"Image Window Center correspond :"
,
500
,
img
->
getWindowCenter
()
);
//(0028,1051) DS [2500] # 4,1-n Window Width
CHECK_VALUE
(
ok
,
"Image Window Width correspond :"
,
2500
,
img
->
getWindowWidth
()
);
//(0028,1052) DS [-1024 ] # 6,1 Rescale Intercept
//(0028,1053) DS [1 ] # 2,1 Rescale Slope
//(0040,0000) UL 116 # 4,1 Generic Group Length
//(0040,0002) DA [20081028] # 8,1 Scheduled Procedure Step Start Date
//(0040,0003) TM [174327.000] # 10,1 Scheduled Procedure Step Start Time
//(0040,0004) DA [20081028] # 8,1 Scheduled Procedure Step End Date
//(0040,0005) TM [181327.000] # 10,1 Scheduled Procedure Step End Time
//(0040,0244) DA [20081028] # 8,1 Performed Procedure Step Start Date
//(0040,0245) TM [174327.000] # 10,1 Performed Procedure Step Start Time
//(0040,0253) SH [12325 ] # 6,1 Performed Procedure Step ID
//(7005,0000) UL 546 # 4,1 Generic Group Length
//(7005,0010) LO [TOSHIBA_MEC_CT3 ] # 16,1 Private Creator
//(7005,1007) UN (DS) [335\269 ] # 8,2 Reconstruction Center
//(7005,1008) UN (DS) [0.5 ] # 4,1 Detector Slice Thickness in mm
//(7005,1009) UN (LO) [1111111111111111] # 16,1 Number of Detector rows to Reconstruct
//(7005,100a) UN (DS) [+5.50 ] # 6,1 Table Speed in mm/rot
//(7005,100b) UN (SH) [ORG ] # 4,1 Filter
//(7005,100d) UN (CS) [DR MOREL] # 8,1 Organ
//(7005,100e) UN (SH) [IMG ] # 4,1 File Type Remarks
//(7005,100f) UN (SH) [FF] # 2,1 Direction
//(7005,1011) UN (LT) [Vol.] # 4,1 Series Comment
//(7005,1012) UN (SH) [SU] # 2,1 Position
//(7005,1013) UN (US) 1 # 2,1 Expert Plan No.
//(7005,1016) UN (UI) [1.2.392.200036.9116.2.6.1.48.1211418863.1225184516.747732] # 58,1 Volume UID
//(7005,1017) UN (US) 404 # 2,1 Total Frame Count in the Volume
//(7005,1018) UN (US) 404 # 2,1 Frame No.
//(7005,1019) UN (UL) 1642763 # 4,1 Frame Sort Key
//(7005,101a) UN (US) 1 # 2,1 Frame Sort Order
//(7005,101b) UN (SH) [FC30] # 4,1 Convolution Kernel
//(7005,101d) UN (UL) 9 # 4,1 Reconstruction Number
//(7005,101e) UN (UL) 13 # 4,1 Raw Data Number
//(7005,101f) UN (LO) [20081028180156768480] # 20,1 Volume Number
//(7005,1020) UN (UL) 3 # 4,1 Local Series Number
//(7005,1021) UN (LO) [BOOST ] # 6,1 Decrease in Artifact Filter
//(7005,1022) UN (DS) [0.40] # 4,1 Reconstruction Interval
//(7005,1023) UN (DS) [0.688 ] # 6,1 Pitch Factor
//(7005,1024) UN (DA) [20081024] # 8,1 The Acquisition Date of NRA
//(7005,1030) UN (CS) [CT] # 2,1 Main Modality in Study
//(7005,1040) UN (FD) 402.4 # 8,1 DLP Dose Length Product
return
ok
;
}
}
// namespace fwTest
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment