Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
29 changes: 15 additions & 14 deletions Source/SIMPLib/CoreFilters/GenerateTiltSeries.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
#include <thread>
#include <cmath>

#define GTS_GENERATE_DEBUG_ARRAYS 0
#define GTS_GENERATE_DEBUG_ARRAYS 1
// If we are writing out all the arrays for debugging then we MUST be single threaded.
#if(GTS_GENERATE_DEBUG_ARRAYS == 1)
#undef SIMPL_USE_PARALLEL_ALGORITHMS
Expand Down Expand Up @@ -225,7 +225,8 @@ class ResampleGrid

#if GTS_GENERATE_DEBUG_ARRAYS
// Write out the sampling grid
DataContainer::Pointer gridGeomDC = DataContainer::New(QString("Vertex Grid %1").arg(m_GridIndex));
QString dcName = QString("%1 Vertex Grid %2").arg(m_Filter->getOutputPrefix()).arg(m_GridIndex);
DataContainer::Pointer gridGeomDC = DataContainer::New(dcName);
VertexGeom::Pointer gridVertGeom = VertexGeom::CreateGeometry(copyOfGrid->getNumberOfTuples(), "Grid Geometry", true);
gridVertGeom->setVertices(copyOfGrid);
gridGeomDC->setGeometry(gridVertGeom);
Expand Down Expand Up @@ -349,7 +350,7 @@ void GenerateTiltSeries::setupFilterParameters()
parameter->setGetterCallback(SIMPL_BIND_GETTER(GenerateTiltSeries, this, RotationAxis));
parameters.push_back(parameter);
}
parameters.push_back(SIMPL_NEW_FLOAT_FP("Rotation Increment (Deg)", Increment, FilterParameter::Parameter, GenerateTiltSeries));
parameters.push_back(SIMPL_NEW_FLOAT_VEC3_FP("Rotation Limits (Start, Stop, Increment) Degrees", RotationLimits, FilterParameter::Parameter, GenerateTiltSeries));
parameters.push_back(SIMPL_NEW_FLOAT_VEC3_FP("Resample Spacing", Spacing, FilterParameter::Parameter, GenerateTiltSeries));
// DataArrayCreationFilterParameter::RequirementType dacReq;
// parameters.push_back(SIMPL_NEW_DA_CREATION_FP("Created Array Path", CreatedArrayPath, FilterParameter::Parameter, GenerateTiltSeries, dacReq));
Expand Down Expand Up @@ -401,10 +402,9 @@ void GenerateTiltSeries::dataCheck()
ImageGeom::Pointer gridGeometry = gridPair.second;
SizeVec3Type gridDims = gridGeometry->getDimensions();

float increment = getIncrement();
size_t gridIndex = 0;

for(float currentDeg = 0.0f; currentDeg < 180.0f; currentDeg += increment)
for(float currentDeg = m_RotationLimits[0]; currentDeg < m_RotationLimits[1]; currentDeg += m_RotationLimits[2])
{
QString gridDCName = m_OutputPrefix + QString::number(gridIndex);
DataContainer::Pointer gridDC = DataContainer::New(gridDCName);
Expand Down Expand Up @@ -482,9 +482,8 @@ void GenerateTiltSeries::execute()
int32_t rotAxisSelection = getRotationAxis();

// Now Start Rotating the grid around the axis
float increment = getIncrement();
size_t gridIndex = 0;
for(float currentDeg = 0.0f; currentDeg < 180.0f; currentDeg += increment)
for(float currentDeg = m_RotationLimits[0]; currentDeg < m_RotationLimits[1]; currentDeg += m_RotationLimits[2])
{
QString msg;
QTextStream out(&msg);
Expand Down Expand Up @@ -533,14 +532,16 @@ void GenerateTiltSeries::execute()
#if GTS_GENERATE_DEBUG_ARRAYS
// Write out the sampling grid
{
DataContainer::Pointer gridGeomDC = DataContainer::New("Grid Geom (Vertex)");
QString dcName = QString("%1 Grid Geom (Vertex)").arg(getOutputPrefix());
DataContainer::Pointer gridGeomDC = DataContainer::New(dcName);
VertexGeom::Pointer gridVertGeom = VertexGeom::CreateGeometry(gridCoords->getNumberOfTuples(), "Grid Geometry", true);
gridVertGeom->setVertices(gridCoords);
gridGeomDC->setGeometry(gridVertGeom);
getDataContainerArray()->insertOrAssign(gridGeomDC);
}
{
DataContainer::Pointer gridGeomDC = DataContainer::New("Grid Geom (Image)");
QString dcName = QString("%1 Grid Geom (Image)").arg(getOutputPrefix());
DataContainer::Pointer gridGeomDC = DataContainer::New(dcName);
gridGeomDC->setGeometry(gridGeometry);
getDataContainerArray()->insertOrAssign(gridGeomDC);
}
Expand Down Expand Up @@ -941,7 +942,7 @@ QString GenerateTiltSeries::ClassName()
}

// -----------------------------------------------------------------------------
void GenerateTiltSeries::setRotationAxis(const int& value)
void GenerateTiltSeries::setRotationAxis(int value)
{
m_RotationAxis = value;
}
Expand All @@ -953,15 +954,15 @@ int GenerateTiltSeries::getRotationAxis() const
}

// -----------------------------------------------------------------------------
void GenerateTiltSeries::setIncrement(const float& value)
void GenerateTiltSeries::setRotationLimits(const FloatVec3Type& value)
{
m_Increment = value;
m_RotationLimits = value;
}

// -----------------------------------------------------------------------------
float GenerateTiltSeries::getIncrement() const
FloatVec3Type GenerateTiltSeries::getRotationLimits() const
{
return m_Increment;
return m_RotationLimits;
}

// -----------------------------------------------------------------------------
Expand Down
19 changes: 10 additions & 9 deletions Source/SIMPLib/CoreFilters/GenerateTiltSeries.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include "SIMPLib/Filtering/AbstractFilter.h"
#include "SIMPLib/Geometry/ImageGeom.h"
#include "SIMPLib/SIMPLib.h"
#include "SIMPLib/Common/SIMPLArray.hpp"

/**
* @brief The GenerateTiltSeries class. See [Filter documentation](@ref GenerateTiltSeries) for details.
Expand All @@ -52,7 +53,7 @@ class SIMPLib_EXPORT GenerateTiltSeries : public AbstractFilter
PYB11_SHARED_POINTERS(GenerateTiltSeries)
PYB11_STATIC_NEW_MACRO(GenerateTiltSeries)
PYB11_PROPERTY(int RotationAxis READ getRotationAxis WRITE setRotationAxis)
PYB11_PROPERTY(float Increment READ getIncrement WRITE setIncrement)
PYB11_PROPERTY(float RotationLimits READ getRotationLimits WRITE setRotationLimits)
PYB11_PROPERTY(float Spacing READ getSpacing WRITE setSpacing)
PYB11_PROPERTY(DataArrayPath InputDataArrayPath READ getInputDataArrayPath WRITE setInputDataArrayPath)
PYB11_PROPERTY(QString OutputPrefix READ getOutputPrefix WRITE setOutputPrefix)
Expand Down Expand Up @@ -88,7 +89,7 @@ class SIMPLib_EXPORT GenerateTiltSeries : public AbstractFilter
/**
* @brief Setter property for RotationAxis
*/
void setRotationAxis(const int& value);
void setRotationAxis(int value);
/**
* @brief Getter property for RotationAxis
* @return Value of RotationAxis
Expand All @@ -98,16 +99,16 @@ class SIMPLib_EXPORT GenerateTiltSeries : public AbstractFilter
Q_PROPERTY(int RotationAxis READ getRotationAxis WRITE setRotationAxis)

/**
* @brief Setter property for Increment
* @brief Setter property for RotationLimits
*/
void setIncrement(const float& value);
void setRotationLimits(const FloatVec3Type& value);
/**
* @brief Getter property for Increment
* @return Value of Increment
* @brief Getter property for RotationLimits
* @return Value of RotationLimits
*/
float getIncrement() const;
FloatVec3Type getRotationLimits() const;

Q_PROPERTY(float Increment READ getIncrement WRITE setIncrement)
Q_PROPERTY(FloatVec3Type RotationLimits READ getRotationLimits WRITE setRotationLimits)

/**
* @brief Setter property for Spacing
Expand Down Expand Up @@ -247,7 +248,7 @@ class SIMPLib_EXPORT GenerateTiltSeries : public AbstractFilter

private:
int m_RotationAxis = 0;
float m_Increment = 1.0f;
FloatVec3Type m_RotationLimits = FloatVec3Type{0.0f, 180.f, 10.0f};
FloatVec3Type m_Spacing = FloatVec3Type(1.0, 1.0, 1.0);
DataArrayPath m_InputDataArrayPath = DataArrayPath("DataContainer", "AttributeMatrix", "FeatureIds");
QString m_OutputPrefix = {"Rotation_"};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@

#pragma once

#include "SIMPLib/DataContainers/DataContainerArray.h"
#include "SIMPLib/CoreFilters/DataContainerReader.h"
#include "SIMPLib/CoreFilters/GenerateTiltSeries.h"
#include "SIMPLib/DataArrays/DataArray.hpp"
Expand Down Expand Up @@ -120,7 +121,8 @@ class GenerateTiltSeriesTest

GenerateTiltSeries::Pointer generateTiltSeries = GenerateTiltSeries::New();
generateTiltSeries->setDataContainerArray(dca);
generateTiltSeries->setIncrement(k_Increment);
FloatVec3Type rotationLimits = {0.0f, 180.0f, k_Increment};
generateTiltSeries->setRotationLimits(rotationLimits);
generateTiltSeries->setInputDataArrayPath(k_CellDataArray);

for(const auto& rotation : rotations)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@ This **Filter** creates a series of slices through the Image Geometry where each

![images/GenerateTiltSeries.](Images/GenerateTiltSeries.png)

Each Slice is saved as a new DataContainer with a Cell Attribute Matrix. The user will select which Cell Level Data Array to resample using a simple nearest neighbor algorithm. The filter will only rotation from Zero to **less than** 180 Degrees.
Each Slice is saved as a new DataContainer with a Cell Attribute Matrix. The user will select which Cell Level Data Array to resample using a simple nearest neighbor algorithm. The user can change the default rotation limits of 0.0 < 180.0 (increments of 10.0) degrees by setting the *Rotation Limits* input parameter.

## Parameters ##

| Name | Type | Description |
|------|------|------|
| Rotation Axis | Int | 0=<100>, 1=<010>, 2=<001> |
| Rotation Increment | Float | The number of degrees of rotation between each slice |
| Rotation Limits | Float Vec 3 | The minimum, maximum and increment angle in degrees |
| Resample Spacing | Float Vec 3 | The Spacing in the X, Y, Z direction for the resampling |
| Input Data Array Path | DataArrayPath | The path to the Cell level data array to resample |

Expand Down