Giter VIP home page Giter VIP logo

simpl's Introduction

SIMPL

SIMPL is an open source, cross-platform and modular software package that allows users to instantiate, read and write the basic SIMPL data structures.

License

SIMPLView is open-source and available under a BSD license. See the Resources/SIMPLView/SIMPLViewLicense.txt file that comes with the project for more information.

Building DREAM.3D

For information on building DREAM.3D and all its necessary dependencies, see the Documentation/Developer/ directory.

Getting Help

Please consider signing up for the DREAM.3D Users Google group! It's the fastest way to ask your DREAM.3D questions, get help with using DREAM.3D, and connect with both developers and the community at large. If you are interested in contributing to the DREAM.3D project, also sign up to the DREAM.3D Developers Google group to get help with compiling and adding to DREAM.3D. If you find an error with DREAM.3D or want to request a new feature, please open up an issue.

Contributing to SIMPL

Please reference the Contributing file for more information on contributing to the SIMPL project.

Funding Sources

Major portions of DREAM.3D were written under US Air Force (AFRL) Contracts:

  • FA8650-07-D-5800
  • FA8650-10-D-5210
  • FA8650-15-D-5231

and Naval Research Labs (NRL) Contract:

  • N00173-07-C-2068.

Many others have contributed to the code including the following (non-exhaustive) list

Major Contributing Institutions

  • BlueQuartz Software
  • US Air Force Research Laboratory (Materials Directorate)
  • Carnegie Mellon University, Department of Materials Science and Engineering
  • US Naval Research Laboratory
  • The Ohio State University

List of Code (C) and Vision (V) Contributors

Air Force Research Laboratory (AFRL)

  • Dr. Michael A. Groeber (V, C)
  • Dr. Adam Pilchak (V, C)
  • Dr. Michael Uchic (V)
  • Dr. Chris Woodward (V)
  • Dr. Sean P. Donegan (V, C)

BlueQuartz Software

  • Mr. Michael A. Jackson (V, C)
  • Mr. Joseph B. Kleingers (V, C)
  • Mr. Matthew Marine (V, C)
  • Dr. Dennis Dimiduk (V)

Ohio State University/Johns Hopkins University

  • Dr. Somnath Ghosh (V)

Carnegie Mellon University

  • Dr. Abhijeet Brahme (C)
  • Dr. Patrick Callahan (C)
  • Dr. Lisa Chan (C)
  • Dr. Marc De Graef (C)
  • Dr. Joe Fridy (C)
  • Dr. Sukbin Lee (C)
  • Dr. Greg Rohrer (C)
  • Dr. Tony Rollett (V, C)
  • Dr. David Saylor (C)
  • Dr. Stephen Sintay (C)
  • Dr. Shlomo Ta'asan (C)
  • Dr. Joseph C. Tucker (V, C)

Naval Research Laboratory (NRL)

  • Dr. Dave Rowenhorst (V, C)

Other Institutions

  • Dr. Megna Shah (V, C)
  • Dr. Krzysztof Glowinski (C) (Institute of Metallurgy and Materials Science PAS, Krakow, Poland)
  • Mr. William Lenthe (V, C) (University of California, Santa Barbara)
  • Dr. Adam Morawiec (V) (Institute of Metallurgy and Materials Science PAS, Krakow, Poland)
  • Mr. Matthew Priddy (C) (Georgia Tech University)
  • Mr. Jarrell Waggoner (C) (Univ. South Carolina)
  • Dr. Megna Shah (V, C)

simpl's People

Contributors

cryos avatar imikejackson avatar jduffeybq avatar jmarquisbq avatar joeykleingers avatar kglowins avatar leavy avatar lostbean avatar malloc47 avatar megnashah avatar mgroeber avatar mhitzem avatar mmarinebluequartz avatar nyoungbq avatar saconnell avatar sdonegan avatar thewtex avatar v7t avatar vkudri avatar wlenthe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

simpl's Issues

Remove Boost as a dependency

The only reason we have boost in SIMPL is the Random number generators but this is now all available in the std::namespace by using C++11

ExtractComponentAsArray allows negative component ID

ExtractComponentAsArray filter does not throw errors if a negative component ID is specified and fills the initial values in the new array with preexisting data depending on the ID. Larger negative numbers offset the extracted array by larger amounts.

Add CMake option to disable NTFS file permissions checking on Windows

The Qt NTFS file permissions checking is notoriously slow on Windows (see http://doc.qt.io/qt-5/qfiledevice.html for more information). It also seems to sometimes make mistakes with whether the user actually has permissions, preventing writing to certain drive setups. Although it is mostly safe, adding a CMake variable that could turn off the permissions checking would give developers the option to disable the checking for more speed (this is particularly apparent whenever a preflight occurs with a DataContainerWriter filter in the pipeline.

Add Slack integration via a Filter

Slack.org messaging protocol is very easy to use. Create a filter that would allow a user to post a message to their own slack channel.

Deep copy functions for DataContainer, AttributeMatrix, and IGeometry should take a forceNoAllocate argument

DataArray objects currently accept a forceNoAllocate argument on deepCopy(), which gives the option to avoid actually performing an allocation; this is useful if only a "shallow" version of the array is needed, i.e. when only the descriptive information of the array is desired for something like preflight. DataContainers, AttributeMatrices, and IGeometry objects do not have this option, meaning that if one calls deepCopy() on a DataContainer, all DataArrays in that DataContainer end up being copied and allocated. For consistency, add similar "forceNoAllocate" arguments to all the different data structure objects to allow "shallow" copies (the argument can take a default false, just like for DataArray).

Implement a DataBrowser Floating Window that displays the data hierarchy

The idea of the widget is to give users a more direct connection between the various widgets that allow the user to select input/output data and the actual data hierarchy. This functionality would hopefully lessen some of the difficulties that users have when trying to understand what to select in those input widgets.

Add element size calculations to all geometry classes

Generic functions for computing the "size" of elements for a given geometry should be added for all IGeometry classes. This addition would make filters that compute feature/ensemble size information function on any geometry, not just images. The "size" value will be relevant to the geometry topology (e.g., lengths for the edge geometry, areas for the triangle geometry, volumes for the rectilinear grid geometry, etc.).

Saved Pipeline in HDF5 file does not represent to entire data processing history

Previously, when the pipeline was saved into the output HDF5 .dream3d file, the entire processing history for the data was "saved", since any future processing that used that .dream3d would just append those filters to HDF5 group.

The new way of storing the pipeline just stores the JSON information as one long string. While more compact, this string is overwritten whenever the .dream3d file is used in another pipeline. This is a critical problem, since all processing history for a given .dream3d is lost.

A possible solution is to create a new Pipeline HDF5 data string set within the Pipeline group whenever the .dream3d file is used in a pipeline. This would also require naming the Pipeline string data sets with some numerical counter ("Pipeline_0, Pipeline_1" etc.). Additionally, the functionality used to extract the saved pipelines out of the .dream3d file would have to allow for the option to choose which pipeline to extract, or to extract all of them appended to one another (which was the former behavior).

Crash in SVPipelineViewWidget when dragging/dropping single filters

To recreate: add exactly one filter to a pipeline, click and hold to drag the filter, the drop it in some other location in the pipeline. This elicits a crash in SVPipelineViewWidget (I think on line 680?). The issue is most likely related to the fact that only one filter is in the pipeline when the drag/drop is taking place, so something is probably null.

Implement shallowCopy() functions for DataContainer, AttributeMatrix, IDataArray, and IGeometry

Currently, all these objects implement a deepCopy() function that (should) explicitly copy all contents into a new shared pointer instance (the IGeometry versions are bugged at the moment). The IDataArray implementation allows the developer to avoid an allocation with a Boolean argument (a "shallow" copy), but the other objects do not. This is useful when the descriptive information of the object is desired, but the developer wants to avoid allocating until later.

For clarity, implement shallowCopy() functions for all these objects and remove the deepCopy() argument in IDataArray.

WriteASCIIData crashes DREAM3D when a DataArrayPath becomes invalid

Changing the DataArrayPath on a DataArray accessed by WriteASCIIData causes a crash. This can most easily be performed by creating the DataArray with a different name or deleting the filter that creates the Data Container / Attribute Matrix / Data Array.

This causes a null pointer in dataCheck() that is never handled.

Add new overload for RayIntersectsPlane function in GeometryMath

The current implementation of RayIntersectsPlane takes the plane as defined by the coordinates of three points. Sometimes it is more convenient to have the plane defined by the parameters of the plane equation (point-normal form); the actual algorithm is fundamentally similar. An overload for RayIntersectsPlane should be added that takes this formulation for a plane.

ScalarTypeWidget and NumericTypeWidget should explicitly cast class enums passed to QVariant

Both ScalarTypeWidget and NumericTypeWidget make use of a C++11 strongly typed enum for their internal parameter representation. In the filterNeedsInputParameters() function, these widgets pull the index of the user selection from the GUI as an int then use the default constructor to construct a QVariant. This QVariant is then set as a property on the filter; the property is stored as an instance of the strongly typed enum.

In C++11, these scoped enums do not decay to integral types automatically, so QVariant(int i) is not equivalent to QVariant(SIMPL::ScalarTypes::Type i). Additionally, SIMPL::ScalarTypes::Type is a user declared QMetaType, and so creating a QVariant for it should use the from/set value approach.

To fix this, replace the QVariant v(i) line in ScalarTypeWidget's and NumericTypeWidget's filterNeedsInputParameters() function with the following:

SIMPL::ScalarTypes::Type type = static_cast<SIMPL::ScalarTypes::Type>(i);
QVariant v;
v.setValue(type);

Prebuilt Pipelines should be found in the local directory

Prebuilt Pipelines and examples are saved in preferences, which stores an absolute path to the pipelines. Moving the application, leaves the paths to search in the original location of the application rather than using the directory relative to the new application path.

Fix coordinate calculations for grid-type geometries

The ImageGeom getCoords functions return plane-centered coordinates, while the RectGridGeom getCoords functions return cell-centered coordiates. The ImageGeom getCoords functions should be updated to properly return cell-centered coordinates. Additionally, a new set of coordinate functions that return plane-centered (i.e., actual nodal coordinates for each voxel) coordinates should be added to the IGeometryGrid interface.

Add a LinkedDataContainerSelectionFilterParameter and associated widget

A LinkedDataContainerSelectionFilterParameter/Widget would show/hide other filter parameter widgets based on the geometry type of the selected DataContainer, analogous to how the LinkedChoicesFilterParameter currently works.

The current filter parameter new functions expect an integer for the "group index" used to switch hiding/showing. This naturally works well for the LinkedChoicesFilterParameter; without changing any code, this same logic can be used by static casting the geometry type enum desired to an integer and using that value. The widget then just needs to parse the current geometry selection and emit the integer version of the geometry type enum. This avoids refactoring any filter parameter new functions, but is somewhat messy.

More generically, it may be beneficial in the future to have all object selection widgets (array selection, etc.) be capable of linking to hide/show other widgets based on the objects requirement type (primitive type, component dimensions, etc.). The data container version of this is the simplest, since only the geometry type can be composed into the requirement type.

Show the filtering criteria for any of the *Selection widgets

Show the selection/filtering criteria for a specific data selection widget, i.e., why are only certain arrays, attribute matrix or data containers allowed. This will need some interesting diagnostics to be used so we can tell the user why a selection failed.

Incorrect matrix inversion !!!

The function MatrixMath::Invert3x3 behaves incorrectly as it always returns transposition of the correct result. For example, matrix (1,0,1,0,1,0,0,0,1) should be inverted as (1,0,-1,0,1,0,0,0,1), but the function returns (1,0,0,0,1,0,-1,0,1) (regardless whether the numbers are placed by rows or by columns).

IGeometry type enum is not unique

The current scoped enum for IGeometry types maps the geometry to an unsigned int that is representative of the Vtk cell type; this means that Image and RectGrid share the same enum value (11, for the voxel Vtk cell type). This is a problem when expecting the types to be unique, as would be expected of such an enum declaration.

This can be addressed by renaming the current type enum to IGeometry::VtkCellType, and making a new IGeometry::Type enum with distinct values.

Parallel implementations of findDerivatives for grid geometries fail when the structure is 2D in the XY plane

The findDerivatives algorithm is correctly coded for all the different 2D cases in ImageGeom and RectGridGeom (and executes properly in serial) but will crash when the structure is 2D in the XY plane when tbb attempts to partition jobs to threads. The exception occurs because the grain size for the z step is set to the z dimension divided by the default number of threads to obtain optimal striding, but this could lead to a grain size of zero if the number of threads is more than 2.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.