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 parameter sets for mouse and pig bladder #153

Merged
merged 10 commits into from
Aug 22, 2021
207 changes: 181 additions & 26 deletions src/scaffoldmaker/meshtypes/meshtype_3d_bladderurethra1.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,45 @@ class MeshType_3d_bladderurethra1(Scaffold_base):
[[0.0, 0.0, 15.0], [0.0, 0.0, 15.0], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 30.0], [0.0, 0.0, 15.0], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 45.0], [0.0, 0.0, 15.0], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.13, 0.1, 60.45], [0.4, 1.1, 13.5], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
Copy link
Member

Choose a reason for hiding this comment

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

All central paths here have small components in the x direction which make them asymmetric - these components should be zero i.e. curves only in y-z plane.
Can you please make sure that mouse, pig have zero components for all x components of VALUE, D_DS1, D_DS2 then in meshgenerator smooth derivatives, make sides normal and smooth side cross derivatives then list parameters with appropriate precision (say 4-5 sig figs for largest value) then re-paste in here. Ideally all the other species should also be fixed... to discuss.
[Another comment is that this is the only organ that doesn't give the models an absolute scale in mm for each species; they are all about the same size; I'm not asking you to change this yet, just a comment for now.]

[[0.42, 1.42, 75.2], [0.3, 1.4, 13.2], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.85, 3.05, 89.94], [-0.2, 1.8, 15.4], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.26, 5.98, 107.94], [-0.6, 4.5, 16.8], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[-0.66, 12.47, 127.07], [0.35, 6.67, 14.8], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]]]),
[[0.0, 0.1, 60.45], [0.4, 1.1, 13.5], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 1.42, 75.2], [0.3, 1.4, 13.2], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 3.05, 89.94], [-0.2, 1.8, 15.4], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 5.98, 107.94], [-0.6, 4.5, 16.8], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 12.47, 127.07], [0.35, 6.67, 14.8], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]]]),
'userAnnotationGroups': [
{
'_AnnotationGroup': True,
'dimension': 1,
'identifierRanges': '1-5',
'name': get_bladder_term('urinary bladder')[0],
'ontId': get_bladder_term('urinary bladder')[1]
},
{
'_AnnotationGroup': True,
'dimension': 1,
'identifierRanges': '6-8',
'name': get_bladder_term('urethra')[0],
'ontId': get_bladder_term('urethra')[1]
}]
}),
'Human 1': ScaffoldPackage(MeshType_1d_path1, {
'scaffoldSettings': {
'Coordinate dimensions': 3,
'D2 derivatives': True,
'Length': 1.0,
'Number of elements': 8
},
'meshEdits': exnodeStringFromNodeValues(
[Node.VALUE_LABEL_VALUE, Node.VALUE_LABEL_D_DS1, Node.VALUE_LABEL_D_DS2, Node.VALUE_LABEL_D2_DS1DS2], [
[[0.0, 0.0, 0.0], [0.0, 0.0, 20.0], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 20.0], [0.0, 0.0, 20.0], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 40.0], [0.0, 0.0, 20], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 60.0], [0.0, 0.0, 20], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 80.0], [-0.4, 0.3, 17.7], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, -2.1, 100.6], [-1.0, -1.9, 17.2], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, -3.8, 120.3], [-1.4, -0.6, 18.8], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, -3.6, 140.5], [-0.1, 2.0, 18.4], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 160.0], [0.9, 4.0, 15.5], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]]]),
'userAnnotationGroups': [
{
'_AnnotationGroup': True,
Expand All @@ -66,8 +100,8 @@ class MeshType_3d_bladderurethra1(Scaffold_base):
'name': get_bladder_term('urethra')[0],
'ontId': get_bladder_term('urethra')[1]
}]
}),
'Rat 1': ScaffoldPackage(MeshType_1d_path1, {
}),
'Mouse 1': ScaffoldPackage(MeshType_1d_path1, {
'scaffoldSettings': {
'Coordinate dimensions': 3,
'D2 derivatives': True,
Expand All @@ -81,10 +115,10 @@ class MeshType_3d_bladderurethra1(Scaffold_base):
[[0.0, 0.0, 20.0], [0.0, 0.0, 10], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 30.0], [0.0, 0.0, 10], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 40.0], [-0.4, 0.3, 7.7], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[-0.5, -2.1, 49.6], [-1.0, -1.9, 7.2], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[-0.9, -3.8, 59.3], [-1.4, -0.6, 8.8], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[-1.3, -3.6, 71.5], [-0.1, 2.0, 8.4], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 80.0], [0.9, 4.0, 5.5], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]]]),
[[0.0, -2.1, 45.0], [-1.0, -1.9, 7.2], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, -3.8, 50.0], [-1.4, -0.6, 8.8], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, -3.6, 55.0], [-0.1, 2.0, 8.4], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 60.0], [0.9, 4.0, 5.5], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]]]),
'userAnnotationGroups': [
{
'_AnnotationGroup': True,
Expand All @@ -100,8 +134,8 @@ class MeshType_3d_bladderurethra1(Scaffold_base):
'name': get_bladder_term('urethra')[0],
'ontId': get_bladder_term('urethra')[1]
}]
}),
'Human 1': ScaffoldPackage(MeshType_1d_path1, {
}),
'Pig 1': ScaffoldPackage(MeshType_1d_path1, {
'scaffoldSettings': {
'Coordinate dimensions': 3,
'D2 derivatives': True,
Expand All @@ -110,15 +144,49 @@ class MeshType_3d_bladderurethra1(Scaffold_base):
},
'meshEdits': exnodeStringFromNodeValues(
[Node.VALUE_LABEL_VALUE, Node.VALUE_LABEL_D_DS1, Node.VALUE_LABEL_D_DS2, Node.VALUE_LABEL_D2_DS1DS2], [
[[0.0, 0.0, 0.0], [0.0, 0.0, 20.0], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 20.0], [0.0, 0.0, 20.0], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 40.0], [0.0, 0.0, 20], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 60.0], [0.0, 0.0, 20], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 80.0], [-0.4, 0.3, 17.7], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[-0.5, -2.1, 100.6], [-1.0, -1.9, 17.2], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[-0.9, -3.8, 120.3], [-1.4, -0.6, 18.8], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[-1.3, -3.6, 140.5], [-0.1, 2.0, 18.4], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 160.0], [0.9, 4.0, 15.5], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]]]),
[[0.0, 0.0, 0.0], [0.0, 0.0, 23.3], [0.0, 0.5, 0.0], [0.0, 0.0, 0.0]],
[[0.0, 0.0, 25.0], [0.0, 0.0, 21.3], [0.0, 0.5, 0.0], [0.0, 0.0, 0.0]],
[[0.0, 0.0, 40.0], [0.0, 0.0, 20.4], [0.0, 0.5, 0.0], [0.0, 0.0, 0.0]],
[[0.0, 0.0, 65.0], [0.4, 1.0, 24.5], [0.0, 0.5, 0.1], [0.0, -0.0, -0.0]],
[[0.0, 2.4, 90.0], [0.5, 4.2, 23.0], [0.0, 0.5, -0.2], [-0.0, -0.0, -0.1]],
[[0.0, 9.2, 110.0], [0.1, 5.6, 15.4], [-0.0, 0.5, -0.2], [-0.0, 0.0, 0.0]],
[[0.0, 15.3, 125.0], [0.2, 5.3, 12.0], [-0.0, 0.5, -0.2], [0.0, 0.0, -0.1]],
[[0.0, 21.2, 140.0], [0.1, 7.7, 11.9], [0.0, 0.4, -0.3], [0.0, -0.1, -0.1]],
[[0.0, 30.0, 150.0], [2.6, 18.4, 12.5], [-0.0, 0.3, -0.4], [-0.0, -0.2, -0.2]]]),
'userAnnotationGroups': [
{
'_AnnotationGroup': True,
'dimension': 1,
'identifierRanges': '1-4',
'name': get_bladder_term('urinary bladder')[0],
'ontId': get_bladder_term('urinary bladder')[1]
},
{
'_AnnotationGroup': True,
'dimension': 1,
'identifierRanges': '5-8',
'name': get_bladder_term('urethra')[0],
'ontId': get_bladder_term('urethra')[1]
}]
}),
'Rat 1': ScaffoldPackage(MeshType_1d_path1, {
'scaffoldSettings': {
'Coordinate dimensions': 3,
'D2 derivatives': True,
'Length': 1.0,
'Number of elements': 8
},
'meshEdits': exnodeStringFromNodeValues(
[Node.VALUE_LABEL_VALUE, Node.VALUE_LABEL_D_DS1, Node.VALUE_LABEL_D_DS2, Node.VALUE_LABEL_D2_DS1DS2], [
[[0.0, 0.0, 0.0], [0.0, 0.0, 10.0], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 10.0], [0.0, 0.0, 10.0], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 20.0], [0.0, 0.0, 10], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 30.0], [0.0, 0.0, 10], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 40.0], [-0.4, 0.3, 7.7], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, -2.1, 49.6], [-1.0, -1.9, 7.2], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, -3.8, 59.3], [-1.4, -0.6, 8.8], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, -3.6, 71.5], [-0.1, 2.0, 8.4], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]],
[[0.0, 0.0, 80.0], [0.9, 4.0, 5.5], [0.0, 0.5, 0.0], [0.0, 0.0, -0.5]]]),
'userAnnotationGroups': [
{
'_AnnotationGroup': True,
Expand All @@ -134,8 +202,8 @@ class MeshType_3d_bladderurethra1(Scaffold_base):
'name': get_bladder_term('urethra')[0],
'ontId': get_bladder_term('urethra')[1]
}]
})
}
})
}
ostiumDefaultScaffoldPackages = {
'Ureter Cat 1': ScaffoldPackage(MeshType_3d_ostium1, {
'scaffoldSettings': {
Expand Down Expand Up @@ -188,6 +256,58 @@ class MeshType_3d_bladderurethra1(Scaffold_base):
'Refine number of elements through wall': 1
},
}),
'Ureter Mouse 1': ScaffoldPackage(MeshType_3d_ostium1, {
'scaffoldSettings': {
'Number of vessels': 1,
'Number of elements across common': 2,
'Number of elements around ostium': 8, # implemented for 8
'Number of elements along': 1,
'Unit scale': 1.0,
'Outlet': False,
'Ostium diameter': 1.0,
'Ostium length': 0.25,
'Ostium wall thickness': 0.02,
'Use linear through ostium wall': True,
'Vessel end length factor': 2.0,
'Vessel inner diameter': 0.3,
'Vessel wall thickness': 0.1,
'Vessel angle 1 degrees': 0.0,
'Vessel angle 1 spread degrees': 0.0,
'Vessel angle 2 degrees': 0.0,
'Use linear through vessel wall': True,
'Use cross derivatives': False,
'Refine': False,
'Refine number of elements around': 4,
'Refine number of elements along': 4,
'Refine number of elements through wall': 1
},
}),
'Ureter Pig 1': ScaffoldPackage(MeshType_3d_ostium1, {
'scaffoldSettings': {
'Number of vessels': 1,
'Number of elements across common': 2,
'Number of elements around ostium': 8, # implemented for 8
'Number of elements along': 1,
'Unit scale': 1.0,
'Outlet': False,
'Ostium diameter': 2.3,
'Ostium length': 0.35,
'Ostium wall thickness': 0.3,
'Use linear through ostium wall': True,
'Vessel end length factor': 2.0,
'Vessel inner diameter': 1.3,
'Vessel wall thickness': 0.2,
'Vessel angle 1 degrees': 0.0,
'Vessel angle 1 spread degrees': 0.0,
'Vessel angle 2 degrees': 0.0,
'Use linear through vessel wall': True,
'Use cross derivatives': False,
'Refine': False,
'Refine number of elements around': 4,
'Refine number of elements along': 4,
'Refine number of elements through wall': 1
},
}),
'Ureter Human 1': ScaffoldPackage(MeshType_3d_ostium1, {
'scaffoldSettings': {
'Number of vessels': 1,
Expand Down Expand Up @@ -225,19 +345,30 @@ def getParameterSetNames():
return [
'Default',
'Cat 1',
'Rat 1',
'Human 1']
'Human 1',
'Mouse 1',
'Pig 1',
'Rat 1'
]

@classmethod
def getDefaultOptions(cls, parameterSetName='Default'):
if 'Rat 1' in parameterSetName:
centralPathOption_LUT = cls.centralPathDefaultScaffoldPackages_LUT['Rat 1']
if 'Mouse 1' in parameterSetName:
centralPathOption_LUT = cls.centralPathDefaultScaffoldPackages_LUT['Mouse 1']
if 'Pig 1' in parameterSetName:
centralPathOption_LUT = cls.centralPathDefaultScaffoldPackages_LUT['Pig 1']
elif 'Human 1' in parameterSetName:
centralPathOption_LUT = cls.centralPathDefaultScaffoldPackages_LUT['Human 1']
else:
centralPathOption_LUT = cls.centralPathDefaultScaffoldPackages_LUT['Cat 1']
if 'Rat 1' in parameterSetName:
ureterOption = cls.ostiumDefaultScaffoldPackages['Ureter Rat 1']
if 'Mouse 1' in parameterSetName:
ureterOption = cls.ostiumDefaultScaffoldPackages['Ureter Mouse 1']
if 'Pig 1' in parameterSetName:
ureterOption = cls.ostiumDefaultScaffoldPackages['Ureter Pig 1']
elif 'Human 1' in parameterSetName:
ureterOption = cls.ostiumDefaultScaffoldPackages['Ureter Human 1']
else:
Expand Down Expand Up @@ -281,6 +412,30 @@ def getDefaultOptions(cls, parameterSetName='Default'):
options['Urethra diameter 1'] = 0.75
options['Urethra diameter 2'] = 0.65
options['Urethra wall thickness'] = 0.25
if 'Mouse' in parameterSetName:
options['Major diameter'] = 30.0
options['Minor diameter'] = 30.0
options['Wall thickness'] = 0.2
options['Neck diameter 1'] = 5.0
options['Neck diameter 2'] = 7.0
options['Neck angle degrees'] = 25
options['Ureter position around'] = 0.67 # should be on the dorsal part (> 0.5)
options['Ureter position down'] = 0.83
options['Urethra diameter 1'] = 2.0
options['Urethra diameter 2'] = 2.0
options['Urethra wall thickness'] = 0.25
if 'Pig' in parameterSetName:
options['Major diameter'] = 30.0
options['Minor diameter'] = 30.0
options['Wall thickness'] = 0.3
options['Neck diameter 1'] = 8.0
options['Neck diameter 2'] = 7.5
options['Neck angle degrees'] = 25
options['Ureter position around'] = 0.67 # should be on the dorsal part (> 0.5)
options['Ureter position down'] = 0.83
options['Urethra diameter 1'] = 2.0
options['Urethra diameter 2'] = 2.0
options['Urethra wall thickness'] = 0.25
Copy link
Member

Choose a reason for hiding this comment

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

Mouse, pig have followed cat in being quite inflated, rat is half inflated, human perhaps a little more. Need to consistently choose a state, probably partly inflated so regular shaped, not over inflated so strained, not under-inflated so wrinkled up, to be the generic reference state. Do a bit of research and propose what you think is the best state.

if 'Human' in parameterSetName:
options['Number of elements along bladder'] = 8
options['Number of elements around'] = 12
Expand Down