Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add hazenlib init tests coverage #144

Merged
merged 28 commits into from
Dec 22, 2021
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
9c66202
creating test functions for hazenlib.__init__
Lucrezia-Cester Nov 9, 2021
fd1bea4
added test functions to __hazenlib.init
Lucrezia-Cester Nov 15, 2021
98241ce
finished adding tests for functions in hazenlib
Lucrezia-Cester Nov 17, 2021
d3a3217
Update __init__.py
Lucrezia-Cester Nov 18, 2021
bf4f53e
added test for get_field_of_view
Lucrezia-Cester Nov 19, 2021
507526c
Merge branch 'develop' into add-hazelib.__init__-tests-coverage
Lucrezia-Cester Nov 22, 2021
0ee77f6
Update __init__.py
Lucrezia-Cester Nov 22, 2021
6b5491b
added tests for hazenlib.main()
Lucrezia-Cester Nov 24, 2021
bc42917
updated hazenlib.__main__
Lucrezia-Cester Nov 24, 2021
d6137d8
fixed failing tests
Lucrezia-Cester Nov 24, 2021
d2d224e
updated hazenlib_tests
Lucrezia-Cester Nov 24, 2021
008df9e
updated hazenlib_tests
Lucrezia-Cester Nov 24, 2021
39353b7
re added is_dicom_file
Lucrezia-Cester Nov 29, 2021
4afff59
put import statements at the beginning of the file
Lucrezia-Cester Nov 29, 2021
1ee8679
added *.logs to gitignore
Lucrezia-Cester Nov 30, 2021
54e6fb1
updated hazenlib_init_ tests
Lucrezia-Cester Dec 8, 2021
858c2f2
Merge branch 'release/0.5.0' into add-hazelib.__init__-tests-coverage
Lucrezia-Cester Dec 9, 2021
238be87
Update __init__.py
Lucrezia-Cester Dec 9, 2021
f9cc8c4
changed *.logs to *.log
Lucrezia-Cester Dec 22, 2021
44c2ddc
deleted logs file
Lucrezia-Cester Dec 22, 2021
2510d13
split big function into single functions
Lucrezia-Cester Dec 22, 2021
aef3f7a
Merge branch 'release/0.5.2' into add-hazelib.__init__-tests-coverage
Lucrezia-Cester Dec 22, 2021
51fa679
inserted pprint before return
Lucrezia-Cester Dec 22, 2021
658eab3
Merge branch 'release/0.5.2' into add-hazelib.__init__-tests-coverage
Lucrezia-Cester Dec 22, 2021
ada0244
updated init.py
Lucrezia-Cester Dec 22, 2021
0c05753
updates tests to work with pprint strings
Dec 22, 2021
fdbecc9
almsot equal relaxometry tests and set -Eeuxo pipefail
Dec 22, 2021
28f4690
adds entry point to allow us to return a string without exit code 0
Dec 22, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ coverage.xml
**/__pycache__
.idea
logs
*.log
uploads
tests/data/slicepos/results
tests/data/uniformity/results
Expand Down
1 change: 1 addition & 0 deletions Hazen_logger.log
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

48 changes: 30 additions & 18 deletions hazenlib/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,14 @@
import pydicom
from docopt import docopt
import numpy as np
import cv2
from hazenlib.tools import is_dicom_file


__version__ = '0.5.1'



import hazenlib.exceptions

EXCLUDED_FILES = ['.DS_Store']
Expand All @@ -106,12 +110,10 @@ def rescale_to_byte(array):
image_histogram, bins = np.histogram(array.flatten(), 255)
cdf = image_histogram.cumsum() # cumulative distribution function
cdf = 255 * cdf / cdf[-1] # normalize

# use linear interpolation of cdf to find new pixel values
image_equalized = np.interp(array.flatten(), bins[:-1], cdf)

return image_equalized.reshape(array.shape).astype('uint8')

#

def is_enhanced_dicom(dcm: pydicom.Dataset) -> bool:
"""
Expand Down Expand Up @@ -309,9 +311,29 @@ def get_field_of_view(dcm: pydicom.Dataset):
return fov


def parse_relaxometry_data(task, arguments, dicom_objects, report): #def parse_relaxometry_data(arguments, dicom_objects, report): #

# Relaxometry arguments
relaxometry_cli_args = {'--calc_t1', '--calc_t2', '--plate_number',
'--show_template_fit', '--show_relax_fits',
'--show_rois', '--verbose'}

# Pass arguments with dictionary, stripping initial double dash ('--')
relaxometry_args = {}

for key in relaxometry_cli_args:
relaxometry_args[key[2:]] = arguments[key]

return task.main(dicom_objects, report_path = report,
**relaxometry_args)






def main():
arguments = docopt(__doc__, version=__version__)

task = importlib.import_module(f"hazenlib.{arguments['<task>']}")
folder = arguments['<folder>']
files = [os.path.join(folder, x) for x in os.listdir(folder) if x not in EXCLUDED_FILES]
Expand All @@ -338,25 +360,15 @@ def main():
# logging.basicConfig()
logging.getLogger().setLevel(logging.INFO)


if not arguments['<task>'] == 'snr' and arguments['--measured_slice_width']:
raise Exception("the (--measured_slice_width) option can only be used with snr")
elif arguments['<task>'] == 'snr' and arguments['--measured_slice_width']:
measured_slice_width = float(arguments['--measured_slice_width'])
return pp.pprint(task.main(dicom_objects, measured_slice_width, report_path=report))
return task.main(dicom_objects, measured_slice_width, report_path=report)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why have you chosen to return the output outside of a pprint object? How does this effect the output the user sees?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is not done to change the output the user sees, rather for me to be able to test the function because print returns NONE

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you mean print returns none or pp.pprint returns none? Could you add some screenshots to example outputs to explain what you mean? I don't think we want to change this if we can.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Lucrezia-Cester, would that mean that the user does not see the result printed to the command line when they run the SNR task? Could you try something like the below so we print the result and we also return a value?

    if not arguments['<task>'] == 'snr' and arguments['--measured_slice_width']:
        raise Exception("the (--measured_slice_width) option can only be used with snr")
    elif arguments['<task>'] == 'snr' and arguments['--measured_slice_width']:
        measured_slice_width = float(arguments['--measured_slice_width'])
        result = task.main(dicom_objects, measured_slice_width, report_path=report)
    elif arguments['<task>'] == 'relaxometry':
        result = parse_relaxometry_data(task, arguments, dicom_objects, report)
    else:
        result = task.main(dicom_objects, report_path=report)

    pp.pprint(result)

    return result


if arguments['<task>'] == 'relaxometry':
# Relaxometry arguments
relaxometry_cli_args = {'--calc_t1', '--calc_t2', '--plate_number',
'--show_template_fit', '--show_relax_fits',
'--show_rois', '--verbose'}

# Pass arguments with dictionary, stripping initial double dash ('--')
relaxometry_args = {}

for key in relaxometry_cli_args:
relaxometry_args[key[2:]] = arguments[key]

return pp.pprint(task.main(dicom_objects, report_path=report,
**relaxometry_args))
return parse_relaxometry_data(task, arguments, dicom_objects, report)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As above we need to re-add this relaxometry code due to the earlier branching from develop

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is still there, I have put this relaxometry code in a function outside the main function.


return pp.pprint(task.main(dicom_objects, report_path=report))

2 changes: 2 additions & 0 deletions hazenlib/spatial_resolution.py
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,8 @@ def get_esf(edge_arr, y):
return u, esf




def calculate_mtf_for_edge(dicom, edge, report_path=False):
pixels = dicom.pixel_array
pe = dicom.InPlanePhaseEncodingDirection
Expand Down
Binary file added tests/data/resolution/philips/non_dicom_test.jfif
Binary file not shown.
Loading