MaterialNet

MaterialNet: A web-based graph explorer for materials science data - Published in JOSS (2020)

https://github.com/TRI-AMDD/materialnet

Science Score: 59.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 9 DOI reference(s) in README
  • Academic publication links
    Links to: joss.theoj.org
  • Committers with academic emails
    1 of 9 committers (11.1%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.2%) to scientific vocabulary

Keywords from Contributors

benchmarking pde standardization turing-machine genetic-algorithm energy-system plasma hydrology distribution simulations
Last synced: 7 months ago · JSON representation

Repository

Visualization for TRI materials network data

Basic Info
  • Host: GitHub
  • Owner: TRI-AMDD
  • License: apache-2.0
  • Language: JavaScript
  • Default Branch: master
  • Homepage: https://maps.matr.io
  • Size: 107 MB
Statistics
  • Stars: 17
  • Watchers: 5
  • Forks: 8
  • Open Issues: 31
  • Releases: 1
Created over 7 years ago · Last pushed over 2 years ago
Metadata Files
Readme Contributing License

README.md

MaterialNet

DOI

Try it live: https://maps.matr.io

Read the paper: https://doi.org/10.21105/joss.02105

MaterialNet is a visual exploration tool to explore large networks in the context of material science.

In the past five years, materials databases have become very popular because they enable their users to do rapid prototyping by searching near globally for figures of merit for their target application. However, both scientists and engineers have little in the way of visualization of aggregates from these databases, i.e. intuitive layouts that help understand which materials are related and how they are related. The need for a tool that does this is particularly crucial in materials science because properties like phase stability and crystal structure similarity are themselves functions of a material dataset, rather than of individual materials.

MaterialNet provides for this by enabling a simple layout of a given network of materials. The examples in the current implementation are for the aforementioned cases (i.e. visualization of the "complete" phase diagram of the OQMD and similarity metrics from crystal structure), but the tool may be applied to any case in which a materials network can be constructed.

The most obvious extensions of this that we envision are users with their own database of formation energies which may differ from the OQMD. Similarly, any vector representing material properties can be used to construct a similarity network, a user might want to understand how the network of materials with similar optical properties differs from that of materials with similar mechanical properties.

Setup

  1. Install the project dependencies:

    yarn install

  2. Move into the public assets directory:

    cd public

  3. Download the public sample data:

    curl -O -J https://data.kitware.com/api/v1/item/5e5696b4af2e2eed35da2e42/download

    (Alternatively, you can visit the cloud folder where this file is stored at https://data.kitware.com/#collection/5e569610af2e2eed35da2e0b/folder/5e5696acaf2e2eed35da2e33 and download the file manually.)

  4. Unpackage the sample data:

    tar xzvf sample-data.tar.gz

    After this step, there will be a public/sample-data directory with contents like this:

    stability.json similarity.json control.json structures/

  5. Build and serve the application:

    BROWSER=none yarn start

  6. Launch the application: visit http://localhost:3000 in your browser, and wait a few moments for the initial dataset to load (the data is pretty big, so this could take up to 10 seconds).

Interactions

  • Use the mouse wheel to zoom into the map
  • Use ctrl + mouse wheel to change the node spacing factor
  • Clicking on a node will select it, clicking on the same node again will deselect it
  • ctrl + click on a node to select and pin it

Example Usage

We expect researchers to use MaterialNet both as an exploratory tool to traverse the present materials networks, and as a targeted analysis tool when they can leverage the underlying relational information for a scientific goal directly. Below we provide example use cases for each.

Similarity Network

Since the similarity network relates materials on the basis of their structural and chemical resemblance (which may not always be obvious), it is interesting to explore for a curious materials scientist, traversing the nodes as one neighboring material inspires another. For instance, take the famous superconductor, YBCO, a version of which can be located by searching for Ba2Y(CuO2)4. We can pin this material using the "pin" icon and choose to restrict our view to its immediate neighborhood by clicking on the "show neighbors" icon. Optimizing the layout with “Live Layout” moves the remaining nodes closer and provides a compact view of this local environment. We can explore the first degree neighborhood of YBCO - and keep pinning more materials to venture out to second or third degree similarity neighborhoods. We find other interesting cuprates, and may stumble on other potential superconductors that we may not be aware of. We can do similar explorations starting off of thousands of other materials, e.g. the well-known magnetocaloric compound Gd5(SiGe)2.

Stability Network

The Materials Stability Network is temporal, and is constructed on the basis of a thermodynamic measure explained in an application on synthesis likelihood prediction (https://doi.org/10.1038/s41467-019-10030-5). A researcher interested in finding a new, cost-effective hypothetical (quite likely synthesizable!) candidate for a Li-ion battery material can start by filtering the network down to materials containing relevant elements of their choice (say Li, Fe, Ni and O) using the Filtering option. They can adjust the synthesis probability to focus on hypothetical materials with, for instance, greater than roughly 60% chance of being made. Using the LineUp Table, they can sort the results based on this probability. If they choose a material from the list to inspect further, such as Li4FeNiO6, they can select it by clicking on its row in the table or node in the network. They can focus attention to the local network environment of this selected material by using the three icons that appear in the material details to “pin”, “show neighbors” and “restrict subspace” to the relevant chemistry. The element filters can be cleared, and synthesis probability slider can be set back to its original position to visualize this relevant sub-network for Li4FeNiO6, and further optimizing the layout with “Live Layout” option can provide a more organized, compact view. This material’s connectivity to hub-like materials (like O, Fe, Li, Fe2O3, Li2O, etc.), less common known materials or other hypothetical materials can be inspected to provide guidance for a synthesis attempt, potential competing phases or decomposition products (https://doi.org/10.1038/s41467-019-10030-5).

Graph Format

The graph format used by MaterialNet is a simple JSON structure to encode the nodes (or materials), their attributes, and the links between them. The entire graph is a single JSON object with two keys, nodes and edges; nodes is an object, while edges is a list of lists:

JSON { "nodes": {...}, "edges": [ [...], [...], ...] }

The nodes object contains keys corresponding to material names (e.g., "Gd5(SiGe)2"), and values corresponding to attribute tables. For example:

JSON { "Gd5(SiGe)2": { "formation_energy": ..., "x": ..., "y": ..., "degree": ..., . . . } }

The keys x and y specify a geometric location on-screen to display the material node within the network; degree is used by the system to calculate, e.g., display size based on node degree. Other values (such as formation_energy) can be used to encode quantitative or qualitative attributes about the material.

The edges list encodes links between nodes using a particularly simple format: each link is a 2-element array of strings naming entries from the nodes object when a link between those two materials exists in the network:

JSON { "edges": [ ["CO2", "O"], ["CO2", "C"], . . . ] }

Internal Notes

How to add a managed property to the mobx state?

Every property of the ApplicationState class (see ./src/store/index.js) annotated with the @observable annotation will be automatically tracked. This can be a primitive value, array or object.

In addition, the components itself has to observe the injected store using the @observer annotation.

Example component with proper store injection:

```js import React from 'react'; import Store from '../../store'; import { observer } from 'mobx-react';

// marks that the component should be rerendered as soon as an used observable property of the store has changed @observer class Template extends React.Component { // see https://reactjs.org/docs/context.html to inject the store into this component static contextType = Store;

render() { // access the context as defined by the contextType const store = this.context;

// just access or change the value
return <div onClick={() => { store.year = 2005; }}>
  Hello {store.year}
</div>;

} }

export default Template; ```

Besides regular properties, derived/computed properties are used. Just define a property with a getter function that uses other obserable properties. Annotate with @computed and mobx will cache and reevaluate the property when needed.

What is autorun?

autorun is similar to registering an observer. The given function will be observed for changes and reevaluated when needed.

e.g. js autorun(() => { console.log(store.year); });

each time the store.year changes, a log statement will be created.

Owner

  • Name: Toyota Research Institute - Accelerated Materials Design & Discovery (AMDD)
  • Login: TRI-AMDD
  • Kind: organization

GitHub Events

Total
Last Year

Committers

Last synced: 8 months ago

All Time
  • Total Commits: 507
  • Total Committers: 9
  • Avg Commits per committer: 56.333
  • Development Distribution Score (DDS): 0.44
Past Year
  • Commits: 0
  • Committers: 0
  • Avg Commits per committer: 0.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Roni Choudhury r****y@k****m 284
Samuel Gratzl s****m@s****m 160
Alessandro Genova a****a@k****m 39
dependabot[bot] 4****] 15
Chris Harris c****s@k****m 4
Jacob Nesbitt j****2@g****m 2
Robrecht Cannoodt r****d@g****m 1
Joseph Montoya j****a@t****l 1
Daniel S. Katz d****z@i****g 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 7 months ago

All Time
  • Total issues: 27
  • Total pull requests: 73
  • Average time to close issues: 14 days
  • Average time to close pull requests: 17 days
  • Total issue authors: 3
  • Total pull request authors: 8
  • Average comments per issue: 0.96
  • Average comments per pull request: 0.25
  • Merged pull requests: 48
  • Bot issues: 0
  • Bot pull requests: 38
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • waxlamp (20)
  • Luthaf (4)
  • rcannood (3)
Pull Request Authors
  • dependabot[bot] (38)
  • waxlamp (29)
  • cjh1 (1)
  • AlmightyYakob (1)
  • rcannood (1)
  • JosephMontoya-TRI (1)
  • alesgenova (1)
  • danielskatz (1)
Top Labels
Issue Labels
enhancement (2) bug (1)
Pull Request Labels
dependencies (38)

Dependencies

legacy/package.json npm
  • @babel/core ^7.0.0-beta.54 development
  • @babel/node ^7.0.0-beta.54 development
  • @babel/preset-env ^7.0.0-beta.54 development
  • @babel/register ^7.0.0-beta.54 development
  • @openchemistry/molecule 0.4.5 development
  • babel-loader ^8.0.0-beta.4 development
  • d3-force ^1.1.0 development
  • d3-scale ^2.1.0 development
  • d3-selection ^1.3.0 development
  • html-webpack-plugin ^3.2.0 development
  • http-server ^0.11.1 development
  • pug ^2.0.3 development
  • pug-loader ^2.4.0 development
  • raw-loader ^0.5.1 development
  • semistandard ^12.0.1 development
  • snazzy ^7.1.1 development
  • three ^0.94.0 development
  • webcola ^3.3.8 development
  • webpack ^4.16.1 development
  • webpack-cli ^3.1.0 development
package.json npm
  • babel-eslint ^10.1.0 development
  • babel-loader ^8.1.0 development
  • babel-plugin-named-asset-import ^0.3.6 development
  • babel-preset-mobx ^2.0.0 development
  • babel-preset-react-app ^9.1.2 development
  • bfj ^7.0.2 development
  • case-sensitive-paths-webpack-plugin ^2.3.0 development
  • chalk ^4.1.0 development
  • css-loader ^3.6.0 development
  • eslint ^7.2.0 development
  • eslint-config-react-app ^5.2.1 development
  • eslint-loader ^4.0.2 development
  • eslint-plugin-flowtype ^5.1.3 development
  • eslint-plugin-import ^2.21.2 development
  • eslint-plugin-jsx-a11y ^6.3.0 development
  • eslint-plugin-react ^7.20.0 development
  • eslint-plugin-react-hooks ^4.0.4 development
  • file-loader ^6.0.0 development
  • html-webpack-plugin ^4.3.0 development
  • husky ^4.2.5 development
  • mini-css-extract-plugin ^0.9.0 development
  • optimize-css-assets-webpack-plugin ^5.0.3 development
  • pnp-webpack-plugin ^1.6.4 development
  • postcss-flexbugs-fixes ^4.2.1 development
  • postcss-loader ^3.0.0 development
  • postcss-preset-env ^6.7.0 development
  • postcss-safe-parser ^4.0.2 development
  • prettier ^2.0.5 development
  • pretty-quick ^2.0.1 development
  • react-dev-utils ^11.0.4 development
  • sass-loader ^8.0.2 development
  • style-loader ^1.2.1 development
  • url-loader ^4.1.0 development
  • webpack ^4.43.0 development
  • webpack-dev-server ^3.11.0 development
  • webpack-manifest-plugin ^2.2.0 development
  • workbox-webpack-plugin ^5.1.3 development
  • worker-loader ^2.0.0 development
  • @fortawesome/fontawesome-svg-core ^1.2.28
  • @fortawesome/free-solid-svg-icons ^5.13.0
  • @fortawesome/react-fontawesome ^0.1.11
  • @material-ui/core ^4.10.2
  • @material-ui/icons ^4.9.1
  • @openchemistry/molecule ^0.4.36
  • geojs ^0.20.0
  • lineupjsx ^4.0.0
  • mobx ^5.15.4
  • mobx-react ^6.2.2
  • react-select ^3.1.0
yarn.lock npm
  • 1434 dependencies
.github/workflows/main.yml actions
  • actions/cache v2 composite
  • actions/checkout v2 composite
  • actions/setup-node v1 composite
  • peaceiris/actions-gh-pages v3 composite