diff --git a/Plugins/org.mitk.gui.qt.photoacousticsimulation/src/internal/PASimulator.cpp b/Plugins/org.mitk.gui.qt.photoacousticsimulation/src/internal/PASimulator.cpp index f6115cf088..ee6c3571ed 100644 --- a/Plugins/org.mitk.gui.qt.photoacousticsimulation/src/internal/PASimulator.cpp +++ b/Plugins/org.mitk.gui.qt.photoacousticsimulation/src/internal/PASimulator.cpp @@ -1,317 +1,323 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ // Blueberry #include #include // Qmitk #include "PASimulator.h" // Qt #include #include #include // mitk #include #include #include #ifdef __linux__ #include #include #else #include #endif #include #include const std::string PASimulator::VIEW_ID = "org.mitk.views.pasimulator"; void PASimulator::SetFocus() { m_Controls.pushButtonShowRandomTissue->setFocus(); } void PASimulator::CreateQtPartControl( QWidget *parent ) { // create GUI widgets from the Qt Designer's .ui file m_Controls.setupUi( parent ); connect(m_Controls.pushButtonShowRandomTissue, SIGNAL(clicked()), this, SLOT(DoImageProcessing()) ); connect(m_Controls.checkBoxGauss, SIGNAL(stateChanged(int)), this, SLOT(ClickedGaussBox())); connect(m_Controls.pushButtonOpenPath, SIGNAL(clicked()), this, SLOT(OpenFolder()) ); connect(m_Controls.pushButtonOpenBinary, SIGNAL(clicked()), this, SLOT(OpenBinary()) ); connect(m_Controls.checkBoxGenerateBatch, SIGNAL(clicked()), this, SLOT(UpdateVisibilityOfBatchCreation()) ); connect(m_Controls.pushButtonAjustWavelength, SIGNAL(clicked()), this, SLOT(UpdateParametersAccordingToWavelength()) ); connect(m_Controls.checkBoxRngSeed, SIGNAL(clicked()), this, SLOT(ClickedCheckboxFixedSeed()) ); connect(m_Controls.checkBoxRandomizeParameters, SIGNAL(clicked()), this, SLOT(ClickedRandomizePhysicalParameters()) ); m_Controls.spinboxSigma->setEnabled(false); m_Controls.labelSigma->setEnabled(false); m_Controls.label_NrrdFilePath->setText((std::string(getenv("HOME"))+"/").c_str()); m_PhotoacousticPropertyCalculator = mitk::PhotoacousticPropertyCalculator::New(); UpdateVisibilityOfBatchCreation(); ClickedRandomizePhysicalParameters(); ClickedCheckboxFixedSeed(); ClickedGaussBox(); } void PASimulator::ClickedRandomizePhysicalParameters() { m_Controls.spinboxRandomizeParameters->setEnabled(m_Controls.checkBoxRandomizeParameters->isChecked()); } void PASimulator::ClickedCheckboxFixedSeed() { m_Controls.spinBoxRngSeed->setEnabled(m_Controls.checkBoxRngSeed->isChecked()); } void PASimulator::UpdateParametersAccordingToWavelength() { int wavelength = m_Controls.spinboxWavelength->value(); double bloodOxygenation = m_Controls.spinboxBloodOxygenSaturation->value()/100; mitk::PhotoacousticPropertyCalculator::Properties result = m_PhotoacousticPropertyCalculator->CalculatePropertyForSpecificWavelength( mitk::PhotoacousticPropertyCalculator::TissueType::BLOOD, wavelength, bloodOxygenation); m_Controls.spinboxMaxAbsorption->setValue(result.mua); m_Controls.spinboxMinAbsorption->setValue(result.mua); - m_Controls.spinboxBloodVesselScattering->setValue(result.mus); - m_Controls.spinboxBloodVesselAnisotropy->setValue(result.g); + m_Controls.spinboxBloodVesselScatteringMinimum->setValue(result.mus); + m_Controls.spinboxBloodVesselScatteringMaximum->setValue(result.mus); + m_Controls.spinboxBloodVesselAnisotropyMinimum->setValue(result.g); + m_Controls.spinboxBloodVesselAnisotropyMaximum->setValue(result.g); result = m_PhotoacousticPropertyCalculator->CalculatePropertyForSpecificWavelength( mitk::PhotoacousticPropertyCalculator::TissueType::EPIDERMIS, wavelength, bloodOxygenation); m_Controls.spinboxSkinAbsorption->setValue(result.mua); m_Controls.spinboxSkinScattering->setValue(result.mus); m_Controls.spinboxSkinAnisotropy->setValue(result.g); result = m_PhotoacousticPropertyCalculator->CalculatePropertyForSpecificWavelength( mitk::PhotoacousticPropertyCalculator::TissueType::FAT, wavelength, bloodOxygenation); m_Controls.spinboxFatAbsorption->setValue(result.mua); m_Controls.spinboxFatScattering->setValue(result.mus); m_Controls.spinboxFatAnisotropy->setValue(result.g); result = m_PhotoacousticPropertyCalculator->CalculatePropertyForSpecificWavelength( mitk::PhotoacousticPropertyCalculator::TissueType::STANDARD_TISSUE, wavelength, bloodOxygenation); m_Controls.spinboxBackgroundAbsorption->setValue(result.mua); m_Controls.spinboxBackgroundScattering->setValue(result.mus); m_Controls.spinboxBackgroundAnisotropy->setValue(result.g); } void PASimulator::UpdateVisibilityOfBatchCreation() { m_Controls.widgetBatchFile->setVisible(m_Controls.checkBoxGenerateBatch->isChecked()); } void PASimulator::DoImageProcessing() { if(m_Controls.checkBoxGenerateBatch->isChecked()) { if(m_Controls.labelBinarypath->text().isNull() || m_Controls.labelBinarypath->text().isEmpty()) { QMessageBox::warning(nullptr, QString("Warning"), QString("You need to specify the binary first!")); return; } } int numberOfVolumes = m_Controls.spinboxNumberVolumes->value(); if(numberOfVolumes<1) { QMessageBox::warning(nullptr, QString("Warning"), QString("You need to create at least one volume!")); return; } - // Getting values from UI - double maxAbsorption = m_Controls.spinboxMaxAbsorption->value(); - double minAbsorption = m_Controls.spinboxMinAbsorption->value(); - double maxBending= m_Controls.spinboxMaxBending->value(); - double minBending = m_Controls.spinboxMinBending->value(); - double maxRadius = m_Controls.spinboxMaxDiameter->value(); - double minRadius = m_Controls.spinboxMinDiameter->value(); - int maxVessels = m_Controls.spinboxMaxVessels->value(); - int minVessels = m_Controls.spinboxMinVessels->value(); - + // Getting settings from UI + // General settings int xDim = m_Controls.spinboxXDim->value(); int yDim = m_Controls.spinboxYDim->value(); int zDim = m_Controls.spinboxZDim->value(); + bool doGauss = m_Controls.checkBoxGauss->isChecked(); + bool randomizePhysicalProperties = m_Controls.checkBoxRandomizeParameters->isChecked(); + double randomPercentage = m_Controls.spinboxRandomizeParameters->value(); + double spacing = m_Controls.spinboxSpacing->value(); + bool useRngSeed = m_Controls.checkBoxRngSeed->isChecked(); + long rngSeed = m_Controls.spinBoxRngSeed->value(); + // Monte Carlo simulation parameters int mcflag = m_Controls.spinboxMcFlag->value(); int launchflag = m_Controls.spinboxLaunchFlag->value(); int boundaryflag = m_Controls.spinboxboundaryFlag->value(); double launchPointX = m_Controls.spinboxLaunchpointX->value(); double launchPointY = m_Controls.spinboxLaunchpointY->value(); double launchPointZ = m_Controls.spinboxLaunchpointZ->value(); double focusPointX = m_Controls.spinboxFocuspointX->value(); double focusPointY = m_Controls.spinboxFocuspointY->value(); double focusPointZ = m_Controls.spinboxFocuspointZ->value(); double trajectoryVectorX = m_Controls.spinboxTrajectoryVectorX->value(); double trajectoryVectorY = m_Controls.spinboxTrajectoryVectorY->value(); double trajectoryVectorZ = m_Controls.spinboxTrajectoryVectorZ->value(); double radius = m_Controls.spinboxRadius->value(); double waist = m_Controls.spinboxWaist->value(); double sigma = m_Controls.spinboxSigma->value(); - bool doGauss = m_Controls.checkBoxGauss->isChecked(); + // Vessel settings + double maxAbsorption = m_Controls.spinboxMaxAbsorption->value(); + double minAbsorption = m_Controls.spinboxMinAbsorption->value(); + double maxBending= m_Controls.spinboxMaxBending->value(); + double minBending = m_Controls.spinboxMinBending->value(); + double maxRadius = m_Controls.spinboxMaxDiameter->value(); + double minRadius = m_Controls.spinboxMinDiameter->value(); + int maxVessels = m_Controls.spinboxMaxVessels->value(); + int minVessels = m_Controls.spinboxMinVessels->value(); + double vesselScatteringMinimum = m_Controls.spinboxBloodVesselScatteringMinimum->value(); + double vesselScatteringMaximum = m_Controls.spinboxBloodVesselScatteringMaximum->value(); + double vesselAnisotropyMinimum = m_Controls.spinboxBloodVesselAnisotropyMinimum->value(); + double vesselAnisotropyMaximum = m_Controls.spinboxBloodVesselAnisotropyMaximum->value(); + int bifurcationFrequency = m_Controls.spinboxBifurcationFrequency->value(); + + // Background tissue settings double basicAbsorption = m_Controls.spinboxBackgroundAbsorption->value(); double basicScattering = m_Controls.spinboxBackgroundScattering->value(); double basicAnisotropy = m_Controls.spinboxBackgroundAnisotropy->value(); + // Air settings double airThickness = m_Controls.spinboxAirThickness->value(); + //Fat tissue settings double fatPercentage = m_Controls.spinboxFatPercentage->value(); double fatAbsorption = m_Controls.spinboxFatAbsorption->value(); double fatScattering = m_Controls.spinboxFatScattering->value(); double fatAnisotropy = m_Controls.spinboxFatAnisotropy->value(); + //Skin tissue settings double skinThickness = m_Controls.spinboxSkinThickness->value(); double skinAbsorption = m_Controls.spinboxSkinAbsorption->value(); double skinScattering = m_Controls.spinboxSkinScattering->value(); double skinAnisotropy = m_Controls.spinboxSkinAnisotropy->value(); - bool randomizePhysicalProperties = m_Controls.checkBoxRandomizeParameters->isChecked(); - double randomPercentage = m_Controls.spinboxRandomizeParameters->value(); - - double spacing = m_Controls.spinboxSpacing->value(); - - int bifurcationFrequency = m_Controls.spinboxBifurcationFrequency->value(); - - double vesselScattering = m_Controls.spinboxBloodVesselScattering->value(); - double vesselAnisotropy = m_Controls.spinboxBloodVesselAnisotropy->value(); - - bool useRngSeed = m_Controls.checkBoxRngSeed->isChecked(); - long rngSeed = m_Controls.spinBoxRngSeed->value(); - for(int volumeIndex = 0; volumeIndex < numberOfVolumes; volumeIndex++) { MITK_DEBUG << "Generating in silico data"; mitk::PhotoacousticVolume::Pointer volume = mitk::PhotoacousticTissueGenerator::GenerateInSilicoData(xDim, yDim, zDim, spacing, basicAbsorption, basicScattering, basicAnisotropy, airThickness, skinAbsorption, skinScattering, skinAnisotropy, skinThickness, fatAbsorption, fatScattering, fatAnisotropy, fatPercentage, randomizePhysicalProperties, randomPercentage, minVessels, maxVessels, minBending, maxBending, minAbsorption, maxAbsorption, minRadius, maxRadius, mcflag, launchflag, boundaryflag, launchPointX, launchPointY, launchPointZ, focusPointX, focusPointY, focusPointZ, trajectoryVectorX, trajectoryVectorY, trajectoryVectorZ, radius, waist, sigma, doGauss, bifurcationFrequency, - vesselScattering, vesselAnisotropy, + vesselScatteringMinimum, vesselScatteringMaximum, vesselAnisotropyMinimum, vesselAnisotropyMaximum, useRngSeed, rngSeed, &mitk::PhotoacousticVesselMeanderStrategy::CalculateRandomlyDivergingPosition); MITK_DEBUG << "Generating mitk::Image"; mitk::Image::Pointer tissueVolume = volume->ConvertToMitkImage(); if(m_Controls.checkBoxGenerateBatch->isChecked()) { std::string volumeNumber = ""; if(volumeIndex<10) { volumeNumber = "00" + std::to_string(volumeIndex); } else if(volumeIndex<100) { volumeNumber = "0" + std::to_string(volumeIndex); } else { volumeNumber = std::to_string(volumeIndex); } std::string outputFolderName = m_Controls.label_NrrdFilePath->text().toStdString() + m_Controls.lineEditTissueName->text().toStdString() + volumeNumber; std::string savePath = outputFolderName + ".nrrd"; mitk::IOUtil::Save(tissueVolume, savePath); std::string filename = "executescript"; std::string filenameAllSimulation = "simulate_all"; #ifdef __linux__ mkdir(outputFolderName.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); filename += ".sh"; filenameAllSimulation += ".sh"; #else mkdir(outputFolderName.c_str()); filename += ".bat"; filenameAllSimulation += ".bat"; #endif std::ofstream file(outputFolderName+"/"+filename); if(file.is_open()) { for(double d = -1.8; d <=1.9; d+=0.12) { file << m_Controls.labelBinarypath->text().toStdString() << " -i " << savePath << " -o " << outputFolderName << "/" << m_Controls.lineEditTissueName->text().toStdString() << "_yo" << round(d*100) / 100 << ".nrrd" << " -yo " << round(d*100) / 100 << " -n " << (m_Controls.spinboxNumberPhotons->value()*1000L) << "\n"; } file.close(); } std::ofstream fileAllSimulation(m_Controls.label_NrrdFilePath->text().toStdString()+"/"+filenameAllSimulation, std::ios_base::app); if(fileAllSimulation.is_open()) { for(double d = -1.8; d <=1.9; d+=0.12) { fileAllSimulation << m_Controls.labelBinarypath->text().toStdString() << " -i " << savePath << " -o " << outputFolderName << "/" << m_Controls.lineEditTissueName->text().toStdString() << "_yo" << round(d*100) / 100 << ".nrrd" << " -yo " << round(d*100) / 100 << " -n " << (m_Controls.spinboxNumberPhotons->value()*1000L) << "\n"; } fileAllSimulation.close(); } } mitk::DataNode::Pointer dataNode = mitk::DataNode::New(); dataNode->SetData(tissueVolume); dataNode->SetName(m_Controls.lineEditTissueName->text().toStdString()); this->GetDataStorage()->Add(dataNode); mitk::RenderingManager::GetInstance()->InitializeViewsByBoundingObjects(this->GetDataStorage()); } MITK_DEBUG << "Handing stuff to UI Thread now.."; } void PASimulator::ClickedGaussBox() { if(m_Controls.checkBoxGauss->isChecked()) { m_Controls.spinboxSigma->setEnabled(true); m_Controls.labelSigma->setEnabled(true); } else { m_Controls.spinboxSigma->setEnabled(false); m_Controls.labelSigma->setEnabled(false); } } void PASimulator::OpenFolder() { m_Controls.label_NrrdFilePath->setText(QFileDialog::getExistingDirectory().append("/")); } void PASimulator::OpenBinary() { m_Controls.labelBinarypath->setText(QFileDialog::getOpenFileName()); } diff --git a/Plugins/org.mitk.gui.qt.photoacousticsimulation/src/internal/PASimulatorControls.ui b/Plugins/org.mitk.gui.qt.photoacousticsimulation/src/internal/PASimulatorControls.ui index 1c7ac5080e..43ca018047 100644 --- a/Plugins/org.mitk.gui.qt.photoacousticsimulation/src/internal/PASimulatorControls.ui +++ b/Plugins/org.mitk.gui.qt.photoacousticsimulation/src/internal/PASimulatorControls.ui @@ -1,2296 +1,4334 @@ PASimulatorControls 0 0 430 655 0 0 QmitkTemplate + + + 0 + 0 + + + + + 415 + 600 + + - 0 + 4 - + Generator 10 10 391 581 0 0 0 0 0 0 75 true Volume parameters - - - - - Size x: - - - - - - - 1 - - - 9999 - - - 70 - - - - - - - y: - - - - - - - 9999 - - - 100 - - - - - - - z: - - - - - - - 9999 - - - 70 - - - + - - - voxels - - + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + Tissue name: + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + Size x: + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + + 50 + false + + + + Spacing: + + + + - - - Qt::Horizontal - - - - 40 - 20 - - - + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + PhotoacousticTissue + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 1 + + + 9999 + + + 70 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + y: + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 9999 + + + 100 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + z: + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 9999 + + + 70 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + voxels + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 2 + + + 0.010000000000000 + + + 0.060000000000000 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + cm + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + - - - - - - 50 - false - - - - Spacing: - - - + - - - 2 - - - 0.010000000000000 - - - 0.060000000000000 - - + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + Randomize: + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + Partial volume effects: + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + Custom seed: + + + + - - - cm - - + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + + + + true + + + + + + + true + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + + + + + + + + true + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + + + + + - - - Qt::Horizontal - - - - 40 - 20 - - - + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + sigma: + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 0 + + + 100.000000000000000 + + + 0.010000000000000 + + + 2.000000000000000 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + % + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + sigma: + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 10.000000000000000 + + + 0.100000000000000 + + + 1.000000000000000 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + voxels + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 999999999 + + + 170704057 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + - + - + - Randomize physical parameters: + Generate batch file output: - + - true - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - sigma: - - - - - - - 0 - - - 100.000000000000000 - - - 0.010000000000000 - - - 2.000000000000000 - - - - - - - % - - - - - - - - - - - Partial volume effects - - - - - - - true - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - sigma: - - - - - - - 10.000000000000000 - - - 0.100000000000000 - - - 1.000000000000000 - - - - - - - voxels - - - - - - - - - - - Custom RNG Seed: - - - - - - - true - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - 999999999 - - - 258936 - - - - - - - - - - - Generate batch file output: - - - - - - - - - - false + false - - - - - - Tissue name: - - - - - - - PhotoacousticTissue - - - - - Number of volumes to generate: 1 9999999 1 Qt::Horizontal 40 20 Save generated tissue path: 0 0 50 0 50 16777215 open Path to MitkMcxyz binary: 0 0 50 0 50 16777215 open Number of Photons (x1000): 0 999999999 1 100000 Generate Tissue Qt::Vertical 20 40 - + Tissue 10 10 391 581 0 0 0 0 0 0 - - - - 0 - 0 - - - - - 11 - 75 - true - - - - Air - - - - - - - - - Thickness - - - - - - - 0.100000000000000 - - - 1.800000000000000 - - - - - - - mm - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - 75 - true - - - - Background tissue - - - - - + - + - + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + + 11 + 75 + false + true + false + + - Absorption coefficient: + Air Parameters - - - 0.100000000000000 + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + - - 0.100000000000000 + + + 50 + false + - - - - - per cm + Thickness: - - - Qt::Horizontal + + + + 0 + 0 + - + - 40 - 20 + 0 + 10 - - - - - - - - + + + 16777215 + 10 + + + + + 11 + 75 + true + + - Scattering coefficient: + - - - 1000.000000000000000 + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + + 75 + false + true + false + - - 15.000000000000000 + + Background Parameters - + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + - per cm + Absorption coefficient: - - - Qt::Horizontal + + + + 0 + 0 + + + + + 0 + 25 + - + - 40 - 20 + 16777215 + 25 - + + Scattering coefficient: + + - - - - + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + Anisotropy facor: - - - 1.000000000000000 + + + + 0 + 0 + + + + + 0 + 10 + + + + + 16777215 + 10 + - - 0.010000000000000 + + + 11 + 75 + true + - - 0.900000000000000 + + - - - Qt::Horizontal + + + + 0 + 0 + + + + + 0 + 25 + - + - 40 - 20 + 16777215 + 25 - + + + 75 + false + true + false + + + + Skin Parameters + + - - - - - - - - - 75 - true - - - - Skin - - - - - - - - - Thickness + + + 0 + 0 + - - - - - - 0.100000000000000 + + + 0 + 25 + - - 0.400000000000000 + + + 16777215 + 25 + - - - - - mm + Thickness: - - - Qt::Horizontal + + + + 0 + 0 + - + - 40 - 20 + 0 + 25 + + + + + 16777215 + 25 - - - - - - - - Absorption coefficient: - - - 0.100000000000000 + + + + 0 + 0 + - - 3.000000000000000 + + + 0 + 25 + + + + + 16777215 + 25 + - - - - - per cm + Scattering coefficient: - - - Qt::Horizontal + + + + 0 + 0 + - + - 40 - 20 + 0 + 25 + + + + + 16777215 + 25 - - - - - - - - - Scattering coefficient: + Anisotropy facor: - - - 1000.000000000000000 + + + + 0 + 0 + - - 20.000000000000000 + + + 0 + 10 + + + + + 16777215 + 10 + + + + + 11 + 75 + true + - - - - - per cm + - - - Qt::Horizontal + + + + 0 + 0 + - + - 40 - 20 + 0 + 25 - - - - - - - - + + + 16777215 + 25 + + + + + 75 + false + true + false + + - Anisotropy facor: + Fat Parameters - - - 1.000000000000000 + + + + 0 + 0 + + + + + 0 + 25 + - - 0.010000000000000 + + + 16777215 + 25 + - - 0.900000000000000 + + Anisotropy facor: - - - Qt::Horizontal + + + + 0 + 0 + - + - 40 - 20 + 0 + 25 + + + + + 16777215 + 25 - - - - - - - - - - - 75 - true - - - - Fat - - - - - - - - - - Body fat percentage + Scattering coefficient: - - - 0 + + + + 0 + 0 + - - 0.100000000000000 + + + 0 + 25 + - - 10.000000000000000 + + + 16777215 + 25 + - - - - - % + Absorption coefficient: - - - Qt::Horizontal + + + + 0 + 0 + - + - 40 - 20 + 0 + 25 - + + + 16777215 + 25 + + + + Body fat percentage: + + - + - + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + + 11 + 75 + true + + - Absorption coefficient: + - - - 0.100000000000000 - - - 0.200000000000000 - - + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 0.100000000000000 + + + 1.800000000000000 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + mm + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + - + + + + 0 + 0 + + + + + 0 + 10 + + + + + 16777215 + 10 + + + + + 11 + 75 + true + + - per cm + - - - Qt::Horizontal + + + + 0 + 0 + - + - 40 - 20 + 0 + 25 - - - - - - - - + + + 16777215 + 25 + + + + + 75 + true + + - Scattering coefficient: + - - - 1000.000000000000000 - - - 18.000000000000000 - - + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 0.100000000000000 + + + 0.100000000000000 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + per cm + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + - - - per cm - - + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 1000.000000000000000 + + + 15.000000000000000 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + per cm + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 1.000000000000000 + + + 0.010000000000000 + + + 0.900000000000000 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + - - - Qt::Horizontal + + + + 0 + 0 + - + - 40 - 20 + 0 + 10 - - - - - - - - + + + 16777215 + 10 + + + + + 11 + 75 + true + + - Anisotropy facor: + - - - 1.000000000000000 + + + + 0 + 0 + - - 0.010000000000000 + + + 0 + 25 + - - 0.900000000000000 + + + 16777215 + 25 + + + + + 75 + true + + + + - - - Qt::Horizontal + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 0.100000000000000 + + + 0.400000000000000 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + mm + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 0.100000000000000 + + + 3.000000000000000 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + per cm + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 1000.000000000000000 + + + 20.000000000000000 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + per cm + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 1.000000000000000 + + + 0.010000000000000 + + + 0.900000000000000 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + 0 + - + - 40 - 20 - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - Vessels - - - - - 10 - 10 - 391 - 581 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 75 - true - - - - Vessel Parameters - - - - - - - Count - - - - - - - - - 1 - - - 1 - - - - - - - to - - - - - - - 7 - - - - - - - Vessels - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Diameter - - - - - - - - - 0.600000000000000 - - - - - - - to - - - - - - - 5.000000000000000 - - - - - - - mm - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Absorbtion - - - - - - - - - 2.000000000000000 - - - - - - - to - - - - - - - 10.000000000000000 - - - - - - - per cm - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Curvedness - - - - - - - - - 5.000000000000000 - - - 0.100000000000000 - - - - - - - to - - - - - - - 5.000000000000000 - - - 0.010000000000000 - - - 1.000000000000000 - - - - - - - Curving Units - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Bifurcation frequency - - - - - - - - - 0 - - - 1.000000000000000 - - - 100000.000000000000000 - - - 1.000000000000000 - - - 50.000000000000000 - - - - - - - voxel until bifurcation - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - + 0 + 10 + + + + + 16777215 + 10 + + + + + 11 + 75 + true + + + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + + 75 + true + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 0 + + + 0.100000000000000 + + + 10.000000000000000 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + % + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 0.100000000000000 + + + 0.200000000000000 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + per cm + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 1000.000000000000000 + + + 18.000000000000000 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + per cm + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 1.000000000000000 + + + 0.010000000000000 + + + 0.900000000000000 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + - - - Scattering coefficient + + + Qt::Vertical - - - - - - - - 2 - - - 0.000000000000000 - - - 1000.000000000000000 - - - 1.000000000000000 - - - 15.000000000000000 - - - - - - - per cm - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + + + 20 + 40 + + + + + + + + + Vessels + + + + + 10 + 10 + 391 + 581 + + + + + 0 + + + 0 + + + 0 + + + 0 + - + + + + 75 + true + + + + + - Anisotropy factor + Vessel Parameters - + - - - 2 - - - 0.000000000000000 - - - 1.000000000000000 - - - 0.100000000000000 - - - 0.900000000000000 - - + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The number of bloos vessels to generate + + + Count: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The radius of the blood vessels in mm + + + Radius: + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + the absorption coefficient refers to the number of absorption events per centimeter. + + + Absorption: + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The reduced scattering coefficient. +It refers to the amount of scattering events per centimeter. + + + Scattering: + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The anisotropy factor is the probability of a photon to not change its direction after a scattering event. + + + Anisotropy factor: + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The bifurcation frequency determines how often the vessel should bifurcate. +The vessel will bifurcate after meandering a mean of the specified amount of voxels. +When given a value of 0, the vessel will never bifurcate. + + + Bifurcation frequency: + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The curvedness it a setting to determine how much the vessel is allowed to bend during creation. +A value of 0 refers to no bending at all and a value of 5 is the maximum. + + + Curvedness: + + + + - - - Qt::Horizontal - - - - 40 - 20 - - - + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The minimum number of blood vessels + + + 1 + + + 1 + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + to + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The maximum number of blood vessels + + + 7 + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + Vessels + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 60 + 20 + + + + + + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The minimum radius + + + 0.600000000000000 + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + to + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The maximum radius + + + 5.000000000000000 + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + mm + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 60 + 20 + + + + + + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The minimum absorption coefficient + + + 2.000000000000000 + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + to + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The maximum absorption coefficient + + + 10.000000000000000 + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + per cm + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 60 + 20 + + + + + + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The minimum scattering + + + 2 + + + 0.000000000000000 + + + 999.000000000000000 + + + 1.000000000000000 + + + 15.000000000000000 + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + to + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The minimum scattering + + + 2 + + + 0.000000000000000 + + + 999.000000000000000 + + + 1.000000000000000 + + + 15.000000000000000 + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + per cm + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 60 + 20 + + + + + + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The minimum anisotropy factor + + + 2 + + + 0.000000000000000 + + + 1.000000000000000 + + + 0.100000000000000 + + + 0.900000000000000 + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + to + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The maximum anisotropy factor + + + 2 + + + 0.000000000000000 + + + 1.000000000000000 + + + 0.100000000000000 + + + 0.900000000000000 + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 60 + 20 + + + + + + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The bifurcation frequency determines how often the vessel should bifurcate. +The vessel will bifurcate after meandering a mean of the specified amount of voxels. +When given a value of 0, the vessel will never bifurcate. + + + 0 + + + 1.000000000000000 + + + 999999999.000000000000000 + + + 1.000000000000000 + + + 50.000000000000000 + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + voxels + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 60 + 20 + + + + + + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The minimal curvedness of the vessel. +A value of 0 refers to no bending at all and a value of 5 is the maximum. + + + 5.000000000000000 + + + 0.100000000000000 + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + to + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + The maximal curvedness of the vessel. +A value of 0 refers to no bending at all and a value of 5 is the maximum. + + + 5.000000000000000 + + + 0.010000000000000 + + + 1.000000000000000 + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + units + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 60 + 20 + + + + + + + Qt::Vertical 20 40 + widgetAdvancedSettings + label_13 - + Monte Carlo 10 10 391 581 0 0 0 0 0 0 75 true Monte Carlo Parameters mcflag: 1 4 Qt::Horizontal 40 20 launchflag: 0 0 Qt::Horizontal 40 20 boundaryflag: 1 2 Qt::Horizontal 40 20 - 75 - true + 50 + false Initial launch point: x 3 5.000000000000000 0.000000000000000 y 3 10.000000000000000 0.000000000000000 z 3 10.000000000000000 0.000000000000000 Qt::Horizontal 40 20 - 75 - true + 50 + false Focus point: x 4 1000000.000000000000000 0.000000000000000 y 4 1000000.000000000000000 0.000000000000000 z 4 1000000.000000000000000 0.000000000000000 Qt::Horizontal 40 20 - 75 - true + 50 + false Trajectory vector: x 4 1000000.000000000000000 0.000000000000000 y 4 1000000.000000000000000 0.342000000000000 z 4 1000000.000000000000000 0.939700000000000 Qt::Horizontal 40 20 radius: 4 1000.000000000000000 0.500000000000000 Qt::Horizontal 40 20 waist: 4 1000.000000000000000 0.010000000000000 Qt::Horizontal 40 20 Qt::Vertical 20 40 - + Wavelength 10 10 391 581 0 0 0 0 0 0 75 true Adjust physical properties by wavelength false 16777215 150 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This widget enables the adjustment of the physical properties of the tissue according to a selected wavelength of the light and the oxygen saturation of the blood.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The algorithm and measurements were provided by the publication <span style=" font-weight:600;">Optical properties of biological tissues: a review </span>by Steve L. Jacques.</p></body></html> Wavelength: + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 82 + 20 + + + + 0 300.000000000000000 1000.000000000000000 650.000000000000000 Qt::Horizontal 40 20 Vessel oxygen saturation: 0 100.000000000000000 75.000000000000000 % Qt::Horizontal 40 20 Adjust tissue properties Qt::Vertical 20 40