18 m_RangeDistribution(
itk::Math::pi / 16,
itk::Math::pi / 8),
19 m_SignDistribution(-1, 1)
24 m_RadiusRangeDistribution = std::uniform_real_distribution<>(NEW_RADIUS_MINIMUM_RELATIVE_SIZE,
25 NEW_RADIUS_MAXIMUM_RELATIVE_SIZE);
33 m_VesselProperties =
nullptr;
34 m_VesselMeanderStrategy =
nullptr;
40 m_VesselDrawer->ExpandAndDrawVesselInVolume(m_VesselProperties, volume);
41 (m_VesselMeanderStrategy->*calculateNewPosition)(m_VesselProperties->GetDirectionVector(), bendingFactor, rng);
42 m_WalkedDistance += (m_VesselProperties->GetDirectionVector()->GetNorm() / volume->GetSpacing());
47 return m_VesselProperties->GetBifurcationFrequency() < m_WalkedDistance;
50 int mitk::pa::Vessel::GetSign(std::mt19937 *rng)
52 if (m_SignDistribution(*rng) < 0)
61 double thetaChange = m_RangeDistribution(*rng) * GetSign(rng);
62 double phiChange = m_RangeDistribution(*rng) * GetSign(rng);
64 vesselParams->GetDirectionVector()->Rotate(thetaChange, phiChange);
65 m_VesselProperties->GetDirectionVector()->Rotate(-thetaChange, -phiChange);
67 double newRadius = m_RadiusRangeDistribution(*rng)*m_VesselProperties->GetRadiusInVoxel();
68 vesselParams->SetRadiusInVoxel(newRadius);
69 m_VesselProperties->SetRadiusInVoxel(
70 sqrt(m_VesselProperties->GetRadiusInVoxel()*m_VesselProperties->GetRadiusInVoxel() - newRadius*newRadius));
74 return Vessel::New(vesselParams);
79 return m_VesselProperties->GetRadiusInVoxel() < MINIMUM_VESSEL_RADIUS;
84 MITK_INFO(verbose) <<
"=== mitk::pa::Vessel Equal ===";
86 if (rightHandSide.IsNull() || leftHandSide.IsNull())
88 MITK_INFO(verbose) <<
"Cannot compare nullpointers";
92 if (leftHandSide->IsFinished() != rightHandSide->IsFinished())
94 MITK_INFO(verbose) <<
"Not same finished state.";
98 if (leftHandSide->CanBifurcate() != rightHandSide->CanBifurcate())
100 MITK_INFO(verbose) <<
"Not same bifurcation state.";
104 if (!
Equal(leftHandSide->GetVesselProperties(), rightHandSide->GetVesselProperties(),
eps,
verbose))
106 MITK_INFO(verbose) <<
"Vesselproperties not equal";
Vessel::Pointer Bifurcate(std::mt19937 *rng)
Bifurcate bifurcates this vessel into two new ones. Makes sure that the volume of the vessels stays t...
bool CanBifurcate()
CanBifurcate.
MITKPHOTOACOUSTICSLIB_EXPORT bool Equal(const MonteCarloThreadHandler::Pointer leftHandSide, const MonteCarloThreadHandler::Pointer rightHandSide, double eps, bool verbose)
Equal A function comparing two thread handlers for beeing equal.
void ExpandVessel(mitk::pa::InSilicoTissueVolume::Pointer volume, CalculateNewVesselPositionCallback calculateNewPosition, double bendingFactor, std::mt19937 *rng)
ExpandVessel makes this Vessel expand one step in its current direction. After expanding, the vessel will draw itself into the given InSilicoTissueVolume.
Vessel(VesselProperties::Pointer parameters)
bool IsFinished()
IsFinished.
MITKCORE_EXPORT const ScalarType eps
void(VesselMeanderStrategy::* CalculateNewVesselPositionCallback)(Vector::Pointer, double, std::mt19937 *)