diff --git a/src/Vts.Test/MonteCarlo/DataStructuresValidation/SimulationInputValidationTests.cs b/src/Vts.Test/MonteCarlo/DataStructuresValidation/SimulationInputValidationTests.cs
index 2ad8afb3..cb0ff09c 100644
--- a/src/Vts.Test/MonteCarlo/DataStructuresValidation/SimulationInputValidationTests.cs
+++ b/src/Vts.Test/MonteCarlo/DataStructuresValidation/SimulationInputValidationTests.cs
@@ -108,7 +108,8 @@ public void Validate_ellipsoid_tissue_with_off_zaxis_center_and_cylindrical_dete
}
///
- /// Test to verify input cylindrical detector and ellipsoid in tissue is invalid
+ /// Test to verify input cylindrical detector and ellipsoid in tissue issues warning
+ /// but continues as valid input
///
[Test]
public void Validate_ellipsoid_tissue_without_cylindrical_symmetry_and_cylindrical_detectors_issues_warning()
@@ -130,6 +131,35 @@ public void Validate_ellipsoid_tissue_without_cylindrical_symmetry_and_cylindric
Assert.That(output.ToString(), Is.EqualTo("Warning: ellipsoid with Dx != Dy in tissue with cylindrical detector defined: user discretion advised\r\n"));
}
+ ///
+ /// Test to verify input cylindrical detector and voxel in tissue issues warning
+ /// but continues as valid input
+ ///
+ [Test]
+ public void Validate_voxel_tissue_and_cylindrical_detectors_issues_warning()
+ {
+ // generate input embedded ellipsoid tissue and cylindrical detector
+ var input = new SimulationInput
+ {
+ TissueInput = new SingleVoxelTissueInput
+ {
+ VoxelRegion = new VoxelTissueRegion
+ {
+ X = new DoubleRange(-1.0, 1.0, 2),
+ Y = new DoubleRange(-1.0, 1.0,2),
+ Z = new DoubleRange(0.01, 1, 2)
+ }
+ },
+ DetectorInputs = new List { new ROfRhoDetectorInput() }
+ };
+ // set to catch Console output
+ var output = new StringWriter();
+ Console.SetOut(output);
+ var result = SimulationInputValidation.ValidateInput(input);
+ Assert.IsTrue(result.IsValid); // only warning
+ Assert.That(output.ToString(), Is.EqualTo("Warning: voxel in tissue with cylindrical detector defined: user discretion advised\r\n"));
+ }
+
///
/// Test to verify input with angled source and cylindrical detectors outputs warning
/// but continues as valid input
diff --git a/src/Vts/MonteCarlo/DataStructuresValidation/SimulationInputValidation.cs b/src/Vts/MonteCarlo/DataStructuresValidation/SimulationInputValidation.cs
index 2bfa6be9..a5a4d349 100644
--- a/src/Vts/MonteCarlo/DataStructuresValidation/SimulationInputValidation.cs
+++ b/src/Vts/MonteCarlo/DataStructuresValidation/SimulationInputValidation.cs
@@ -140,7 +140,9 @@ private static ValidationResult ValidateDetectorInput(SimulationInput si)
/// and source, tissue, detector definitions. The philosophy here is that if the transport will
/// not error, a warning is issued and the validation result remains true. This allows users to
/// specify inconsistent combinations, e.g. angled source and cylindrical coordinate detectors,
- /// receive a warning and have the simulation proceed.
+ /// receive a warning and have the simulation proceed. However, if the transport will error then
+ /// the validation result will be false, the validationRule and remarks output and simulation stops,
+ /// e.g. embedded ellipsoid in tissue that overlaps tissue layer.
///
/// input to be validated
/// An instance of ValidationResult with IsValid set and error message if false
@@ -201,10 +203,11 @@ private static ValidationResult ValidateCombinedInputParameters(SimulationInput
{
if (detectorInput.TallyDetails.IsCylindricalTally)
{
- return new ValidationResult(
- false,
- "Cannot use Single Voxel Tissue for cylindrical tallies",
- "Change detector inputs to specify non-cylindrical type tallies");
+ Console.WriteLine("Warning: voxel in tissue with cylindrical detector defined: user discretion advised");
+ return new ValidationResult(
+ true,
+ "Warning: voxel in tissue with cylindrical detector defined",
+ "User discretion advised: change detector inputs to specify non-cylindrical type tallies");
}
if (detectorInput.TallyType != TallyType.ROfFx) continue;