diff --git a/.gitignore b/.gitignore index 25384ba2bbc456d31f721e91bb67cae9fd0a689a..13204b6f816513d708cfecfb7f4ebce19873f22a 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,4 @@ setup.json parser.osio.log gui/src/metainfo.json gui/src/searchQuantities.json +gui/src/parserMetadata.json diff --git a/Dockerfile b/Dockerfile index afe60f2b0a5ca73dc63a6b646ab231a10a150b47..33526c4467ad3eb52d475766d22157afbdea0676 100644 --- a/Dockerfile +++ b/Dockerfile @@ -69,6 +69,8 @@ RUN python setup.py sdist RUN cp dist/nomad-lab-*.tar.gz dist/nomad-lab.tar.gz RUN python -m nomad.cli dev metainfo > gui/src/metainfo.json RUN python -m nomad.cli dev search-quantities > gui/src/searchQuantities.json +RUN python -m nomad.cli dev parser-metadata > gui/src/parserMetadata.json +RUN python -m nomad.cli dev toolkit-metadata > gui/src/toolkitMetadata.json WORKDIR /install/docs RUN make html RUN \ @@ -87,6 +89,8 @@ RUN yarn COPY gui /app COPY --from=build /install/gui/src/metainfo.json /app/src/metainfo.json COPY --from=build /install/gui/src/searchQuantities.json /app/src/searchQuantities.json +COPY --from=build /install/gui/src/parserMetadata.json /app/src/parserMetadata.json +COPY --from=build /install/gui/src/toolkitMetadata.json /app/src/toolkitMetadata.json RUN yarn run build # Build the Encyclopedia GUI in the gui build image diff --git a/dependencies/parsers/abinit b/dependencies/parsers/abinit index fe980c53e536f843b6e0ca85642892b8e2f75fed..342f391804c7fa7de28ddea5eb80ee9402758fab 160000 --- a/dependencies/parsers/abinit +++ b/dependencies/parsers/abinit @@ -1 +1 @@ -Subproject commit fe980c53e536f843b6e0ca85642892b8e2f75fed +Subproject commit 342f391804c7fa7de28ddea5eb80ee9402758fab diff --git a/dependencies/parsers/amber b/dependencies/parsers/amber index e7077c9a824e01b45b0e4989858ecd35f59f4cc7..f2cf15804d33a9f536407321ab768a8367426820 160000 --- a/dependencies/parsers/amber +++ b/dependencies/parsers/amber @@ -1 +1 @@ -Subproject commit e7077c9a824e01b45b0e4989858ecd35f59f4cc7 +Subproject commit f2cf15804d33a9f536407321ab768a8367426820 diff --git a/dependencies/parsers/aptfim b/dependencies/parsers/aptfim index b9b8f841709736cbfcb3676226a89c06498aa26f..b621df7c0d64d52fba09b610f5bcc8181433b16c 160000 --- a/dependencies/parsers/aptfim +++ b/dependencies/parsers/aptfim @@ -1 +1 @@ -Subproject commit b9b8f841709736cbfcb3676226a89c06498aa26f +Subproject commit b621df7c0d64d52fba09b610f5bcc8181433b16c diff --git a/dependencies/parsers/asap b/dependencies/parsers/asap index 21f8b2d1746685e9dce966c456cab98f044dc8ec..8c5326de349ba3d1dfe33327e6b045fdc70b689d 160000 --- a/dependencies/parsers/asap +++ b/dependencies/parsers/asap @@ -1 +1 @@ -Subproject commit 21f8b2d1746685e9dce966c456cab98f044dc8ec +Subproject commit 8c5326de349ba3d1dfe33327e6b045fdc70b689d diff --git a/dependencies/parsers/atk b/dependencies/parsers/atk index 10f066f30370d8b7826d7cc404da360e3b3d92f2..cf4d76ad7b1b51388936e227d52a868a97a5d1cc 160000 --- a/dependencies/parsers/atk +++ b/dependencies/parsers/atk @@ -1 +1 @@ -Subproject commit 10f066f30370d8b7826d7cc404da360e3b3d92f2 +Subproject commit cf4d76ad7b1b51388936e227d52a868a97a5d1cc diff --git a/dependencies/parsers/band b/dependencies/parsers/band index f98b920976d5507c9584676e8f77071bcf041cf9..a3bb039a1a2ee9672474f4be508b7a63a8320d4b 160000 --- a/dependencies/parsers/band +++ b/dependencies/parsers/band @@ -1 +1 @@ -Subproject commit f98b920976d5507c9584676e8f77071bcf041cf9 +Subproject commit a3bb039a1a2ee9672474f4be508b7a63a8320d4b diff --git a/dependencies/parsers/bigdft b/dependencies/parsers/bigdft index e1a03db77aa4acb3f7f55691e11f1277a2ca6726..5eb087b3ab79f2353a8412a8eecf188b31427298 160000 --- a/dependencies/parsers/bigdft +++ b/dependencies/parsers/bigdft @@ -1 +1 @@ -Subproject commit e1a03db77aa4acb3f7f55691e11f1277a2ca6726 +Subproject commit 5eb087b3ab79f2353a8412a8eecf188b31427298 diff --git a/dependencies/parsers/castep b/dependencies/parsers/castep index 1cdd522775fa3ad76294bc9a58dbfcaea000f0c5..10fce35ed127f3732437d595fb5cb9b28dcafecd 160000 --- a/dependencies/parsers/castep +++ b/dependencies/parsers/castep @@ -1 +1 @@ -Subproject commit 1cdd522775fa3ad76294bc9a58dbfcaea000f0c5 +Subproject commit 10fce35ed127f3732437d595fb5cb9b28dcafecd diff --git a/dependencies/parsers/charmm b/dependencies/parsers/charmm index cc6c9545300cf6ea3347357fedffc6798415a299..1dcadec2e970ba64888b1f6892560d4c62cb6e14 160000 --- a/dependencies/parsers/charmm +++ b/dependencies/parsers/charmm @@ -1 +1 @@ -Subproject commit cc6c9545300cf6ea3347357fedffc6798415a299 +Subproject commit 1dcadec2e970ba64888b1f6892560d4c62cb6e14 diff --git a/dependencies/parsers/cp2k b/dependencies/parsers/cp2k index 5742af2804e002b49bed42a0d5f38f8a79630697..e85232d762379860852c6c5d7b6b127e38ec5b7b 160000 --- a/dependencies/parsers/cp2k +++ b/dependencies/parsers/cp2k @@ -1 +1 @@ -Subproject commit 5742af2804e002b49bed42a0d5f38f8a79630697 +Subproject commit e85232d762379860852c6c5d7b6b127e38ec5b7b diff --git a/dependencies/parsers/cpmd b/dependencies/parsers/cpmd index 59a82b9b1218c74660ed570aaa4bdcaa4699c439..3a982a6906d74bc36ba4d969786ae8e14ccf4ab4 160000 --- a/dependencies/parsers/cpmd +++ b/dependencies/parsers/cpmd @@ -1 +1 @@ -Subproject commit 59a82b9b1218c74660ed570aaa4bdcaa4699c439 +Subproject commit 3a982a6906d74bc36ba4d969786ae8e14ccf4ab4 diff --git a/dependencies/parsers/crystal b/dependencies/parsers/crystal index a58cfed379d240e5241bb69689441d42a5fb5e0f..abe6657cfda6cbc881a0ab8cf5edcc00c2eb8361 160000 --- a/dependencies/parsers/crystal +++ b/dependencies/parsers/crystal @@ -1 +1 @@ -Subproject commit a58cfed379d240e5241bb69689441d42a5fb5e0f +Subproject commit abe6657cfda6cbc881a0ab8cf5edcc00c2eb8361 diff --git a/dependencies/parsers/dftbplus b/dependencies/parsers/dftbplus index 1211d4b79907d9a987422193b3f97efd69962a3c..43e2d2c0a2559a67ff02316bb958c09e8f9bfe6f 160000 --- a/dependencies/parsers/dftbplus +++ b/dependencies/parsers/dftbplus @@ -1 +1 @@ -Subproject commit 1211d4b79907d9a987422193b3f97efd69962a3c +Subproject commit 43e2d2c0a2559a67ff02316bb958c09e8f9bfe6f diff --git a/dependencies/parsers/dl-poly b/dependencies/parsers/dl-poly index fa54fe567a1250af3009ecc9692d14c64a399f29..cd095cff74405d335a0cb9cb6166da1f084188ab 160000 --- a/dependencies/parsers/dl-poly +++ b/dependencies/parsers/dl-poly @@ -1 +1 @@ -Subproject commit fa54fe567a1250af3009ecc9692d14c64a399f29 +Subproject commit cd095cff74405d335a0cb9cb6166da1f084188ab diff --git a/dependencies/parsers/dmol3 b/dependencies/parsers/dmol3 index 684dbf81e11c8dba24acfc5809494767059b3fcb..b840d9ec22e7333e771a14325dac266d4b04da04 160000 --- a/dependencies/parsers/dmol3 +++ b/dependencies/parsers/dmol3 @@ -1 +1 @@ -Subproject commit 684dbf81e11c8dba24acfc5809494767059b3fcb +Subproject commit b840d9ec22e7333e771a14325dac266d4b04da04 diff --git a/dependencies/parsers/eelsdb b/dependencies/parsers/eelsdb index c4c75068f91f83fb9262eb09576710d11984db44..c1417be5f6cff002f9b10a8d2ad29a4fdfc82f98 160000 --- a/dependencies/parsers/eelsdb +++ b/dependencies/parsers/eelsdb @@ -1 +1 @@ -Subproject commit c4c75068f91f83fb9262eb09576710d11984db44 +Subproject commit c1417be5f6cff002f9b10a8d2ad29a4fdfc82f98 diff --git a/dependencies/parsers/elastic b/dependencies/parsers/elastic index e29c10305a0b69d3235a069367f6a470c3cf055a..1c1dacfde7328e8ec9ca49419fae7d56157d9479 160000 --- a/dependencies/parsers/elastic +++ b/dependencies/parsers/elastic @@ -1 +1 @@ -Subproject commit e29c10305a0b69d3235a069367f6a470c3cf055a +Subproject commit 1c1dacfde7328e8ec9ca49419fae7d56157d9479 diff --git a/dependencies/parsers/elk b/dependencies/parsers/elk index 0a43285a0c71184d89065f1345f841b0c77a3739..0ae8b95f6b68a5eff2b8e60d9f03d6e5f8789ef5 160000 --- a/dependencies/parsers/elk +++ b/dependencies/parsers/elk @@ -1 +1 @@ -Subproject commit 0a43285a0c71184d89065f1345f841b0c77a3739 +Subproject commit 0ae8b95f6b68a5eff2b8e60d9f03d6e5f8789ef5 diff --git a/dependencies/parsers/exciting b/dependencies/parsers/exciting index 0edade50d6be30bc83dca35d382bb6d462ea6f91..4f08fd0ac2843c3a4763dfb567a3167fd118cb0a 160000 --- a/dependencies/parsers/exciting +++ b/dependencies/parsers/exciting @@ -1 +1 @@ -Subproject commit 0edade50d6be30bc83dca35d382bb6d462ea6f91 +Subproject commit 4f08fd0ac2843c3a4763dfb567a3167fd118cb0a diff --git a/dependencies/parsers/fhi-aims b/dependencies/parsers/fhi-aims index d342d8a14dc49d528fe7ca867c3f5891d8b73077..ac8bc86ac678b03c970519dcbfcbaab720e3b6f8 160000 --- a/dependencies/parsers/fhi-aims +++ b/dependencies/parsers/fhi-aims @@ -1 +1 @@ -Subproject commit d342d8a14dc49d528fe7ca867c3f5891d8b73077 +Subproject commit ac8bc86ac678b03c970519dcbfcbaab720e3b6f8 diff --git a/dependencies/parsers/fleur b/dependencies/parsers/fleur index 162f6741ebf4fe75d204a21d567bd386acf3aecd..f66fff2f6f3c375690993b253864f79cacd8ec59 160000 --- a/dependencies/parsers/fleur +++ b/dependencies/parsers/fleur @@ -1 +1 @@ -Subproject commit 162f6741ebf4fe75d204a21d567bd386acf3aecd +Subproject commit f66fff2f6f3c375690993b253864f79cacd8ec59 diff --git a/dependencies/parsers/fplo b/dependencies/parsers/fplo index bb3f0f0daf9714fa4fb861015eb7483fe6b4e750..3a75dd14bae7f9b5d29e2e232aeab298911ad354 160000 --- a/dependencies/parsers/fplo +++ b/dependencies/parsers/fplo @@ -1 +1 @@ -Subproject commit bb3f0f0daf9714fa4fb861015eb7483fe6b4e750 +Subproject commit 3a75dd14bae7f9b5d29e2e232aeab298911ad354 diff --git a/dependencies/parsers/gamess b/dependencies/parsers/gamess index b830cf96f325c521c232ce8ccba83073eb5f3bab..21f394328da8bcfc32439c097a820accc7e382a5 160000 --- a/dependencies/parsers/gamess +++ b/dependencies/parsers/gamess @@ -1 +1 @@ -Subproject commit b830cf96f325c521c232ce8ccba83073eb5f3bab +Subproject commit 21f394328da8bcfc32439c097a820accc7e382a5 diff --git a/dependencies/parsers/gaussian b/dependencies/parsers/gaussian index 3d51c6f61e2c8b8eaa026dd613c23e9524c9e9ea..fa88a70b7480d60822295e5b11af5bcf4e0918bf 160000 --- a/dependencies/parsers/gaussian +++ b/dependencies/parsers/gaussian @@ -1 +1 @@ -Subproject commit 3d51c6f61e2c8b8eaa026dd613c23e9524c9e9ea +Subproject commit fa88a70b7480d60822295e5b11af5bcf4e0918bf diff --git a/dependencies/parsers/gpaw b/dependencies/parsers/gpaw index 56354bd376ac8d97a0476be1c6dc396cd1e2c3c2..bfa042f0963a4d8efeaff42cc2244154a8493089 160000 --- a/dependencies/parsers/gpaw +++ b/dependencies/parsers/gpaw @@ -1 +1 @@ -Subproject commit 56354bd376ac8d97a0476be1c6dc396cd1e2c3c2 +Subproject commit bfa042f0963a4d8efeaff42cc2244154a8493089 diff --git a/dependencies/parsers/gromacs b/dependencies/parsers/gromacs index 2310b63ff3904ddd6f912c32789568787c6ab250..3f78e35b56714fe8c79b010ed52d97def19cb2dc 160000 --- a/dependencies/parsers/gromacs +++ b/dependencies/parsers/gromacs @@ -1 +1 @@ -Subproject commit 2310b63ff3904ddd6f912c32789568787c6ab250 +Subproject commit 3f78e35b56714fe8c79b010ed52d97def19cb2dc diff --git a/dependencies/parsers/gromos b/dependencies/parsers/gromos index b7d913f0d8f82a9bb564e346bb60f66008ac791b..42bfff012d2ee066a458caef62b43936564a60f5 160000 --- a/dependencies/parsers/gromos +++ b/dependencies/parsers/gromos @@ -1 +1 @@ -Subproject commit b7d913f0d8f82a9bb564e346bb60f66008ac791b +Subproject commit 42bfff012d2ee066a458caef62b43936564a60f5 diff --git a/dependencies/parsers/gulp b/dependencies/parsers/gulp index 6af56cf380323bfd39e838fab3150e67211772e7..ae87dc90f20b2eb9078e9af46c82471b5a1e7544 160000 --- a/dependencies/parsers/gulp +++ b/dependencies/parsers/gulp @@ -1 +1 @@ -Subproject commit 6af56cf380323bfd39e838fab3150e67211772e7 +Subproject commit ae87dc90f20b2eb9078e9af46c82471b5a1e7544 diff --git a/dependencies/parsers/lammps b/dependencies/parsers/lammps index 9963acbe59ab9e8b5b97898aa8f70d9d3ca204c8..3e4eb8aac2cf46882569e3823669f894c6890885 160000 --- a/dependencies/parsers/lammps +++ b/dependencies/parsers/lammps @@ -1 +1 @@ -Subproject commit 9963acbe59ab9e8b5b97898aa8f70d9d3ca204c8 +Subproject commit 3e4eb8aac2cf46882569e3823669f894c6890885 diff --git a/dependencies/parsers/lib-atoms b/dependencies/parsers/lib-atoms index a451b8acc0032f8c88a8b50b5204b5d472a8d8e3..f23a735d06585193cd9ebdeea07bab1dd2d3a6bb 160000 --- a/dependencies/parsers/lib-atoms +++ b/dependencies/parsers/lib-atoms @@ -1 +1 @@ -Subproject commit a451b8acc0032f8c88a8b50b5204b5d472a8d8e3 +Subproject commit f23a735d06585193cd9ebdeea07bab1dd2d3a6bb diff --git a/dependencies/parsers/molcas b/dependencies/parsers/molcas index a0abb86fe9d4707b599d12908cca0eda0bfa8e36..afdd0231addcc93555ac371ff7ae59b03b9ba6e2 160000 --- a/dependencies/parsers/molcas +++ b/dependencies/parsers/molcas @@ -1 +1 @@ -Subproject commit a0abb86fe9d4707b599d12908cca0eda0bfa8e36 +Subproject commit afdd0231addcc93555ac371ff7ae59b03b9ba6e2 diff --git a/dependencies/parsers/mopac b/dependencies/parsers/mopac index 2486ca871f6d8f8a189e550c7769e16a5722d697..a3b4c120bd5eff3d108eca891fe7ef6109f3a964 160000 --- a/dependencies/parsers/mopac +++ b/dependencies/parsers/mopac @@ -1 +1 @@ -Subproject commit 2486ca871f6d8f8a189e550c7769e16a5722d697 +Subproject commit a3b4c120bd5eff3d108eca891fe7ef6109f3a964 diff --git a/dependencies/parsers/mpes b/dependencies/parsers/mpes index aa7fbc09aa3bde6b654b764d21cd62eaf2badc9e..76c3ef2e319b704e6dd64b9ea670d6748b89d2c1 160000 --- a/dependencies/parsers/mpes +++ b/dependencies/parsers/mpes @@ -1 +1 @@ -Subproject commit aa7fbc09aa3bde6b654b764d21cd62eaf2badc9e +Subproject commit 76c3ef2e319b704e6dd64b9ea670d6748b89d2c1 diff --git a/dependencies/parsers/namd b/dependencies/parsers/namd index a741cfe607e9dfd1f2d65aeddbcc4bc5a15bbc13..86720f57c32a3bb36eb2896b56d7628745b18abb 160000 --- a/dependencies/parsers/namd +++ b/dependencies/parsers/namd @@ -1 +1 @@ -Subproject commit a741cfe607e9dfd1f2d65aeddbcc4bc5a15bbc13 +Subproject commit 86720f57c32a3bb36eb2896b56d7628745b18abb diff --git a/dependencies/parsers/nwchem b/dependencies/parsers/nwchem index 1d6b84386a07d30b214d16922db43ad1c3b08fe5..234b92ed8ef8b7e0a2e95d8255f841d4531c24ed 160000 --- a/dependencies/parsers/nwchem +++ b/dependencies/parsers/nwchem @@ -1 +1 @@ -Subproject commit 1d6b84386a07d30b214d16922db43ad1c3b08fe5 +Subproject commit 234b92ed8ef8b7e0a2e95d8255f841d4531c24ed diff --git a/dependencies/parsers/octopus b/dependencies/parsers/octopus index b2eaed00f3b74363c875826cb39ee4d24d27cd8d..f6efba081da47e47d4cfe057bcb96745f607c808 160000 --- a/dependencies/parsers/octopus +++ b/dependencies/parsers/octopus @@ -1 +1 @@ -Subproject commit b2eaed00f3b74363c875826cb39ee4d24d27cd8d +Subproject commit f6efba081da47e47d4cfe057bcb96745f607c808 diff --git a/dependencies/parsers/onetep b/dependencies/parsers/onetep index 2084276e8ace0dfa35de65a8a3fbd8dafdb6740e..a6f432f5356db5ea5f29b9a401f007dbb539ac8c 160000 --- a/dependencies/parsers/onetep +++ b/dependencies/parsers/onetep @@ -1 +1 @@ -Subproject commit 2084276e8ace0dfa35de65a8a3fbd8dafdb6740e +Subproject commit a6f432f5356db5ea5f29b9a401f007dbb539ac8c diff --git a/dependencies/parsers/openkim b/dependencies/parsers/openkim index ea31aedee7f89cddc3f0bf74dcd79cdbce600949..4c9ffd8c1d6bb99ffa263b279807d979040fbc50 160000 --- a/dependencies/parsers/openkim +++ b/dependencies/parsers/openkim @@ -1 +1 @@ -Subproject commit ea31aedee7f89cddc3f0bf74dcd79cdbce600949 +Subproject commit 4c9ffd8c1d6bb99ffa263b279807d979040fbc50 diff --git a/dependencies/parsers/orca b/dependencies/parsers/orca index cfc88f526cee932fa25fdc1fc6236383f843d025..fae4d10b3ee0513d269a00f965479b8aeae63de0 160000 --- a/dependencies/parsers/orca +++ b/dependencies/parsers/orca @@ -1 +1 @@ -Subproject commit cfc88f526cee932fa25fdc1fc6236383f843d025 +Subproject commit fae4d10b3ee0513d269a00f965479b8aeae63de0 diff --git a/dependencies/parsers/phonopy b/dependencies/parsers/phonopy index 6af93535078cb43d11b3d5b950525e76b78acb74..59ecd6cddb2bbf75000a1454fe40ceace2d2c207 160000 --- a/dependencies/parsers/phonopy +++ b/dependencies/parsers/phonopy @@ -1 +1 @@ -Subproject commit 6af93535078cb43d11b3d5b950525e76b78acb74 +Subproject commit 59ecd6cddb2bbf75000a1454fe40ceace2d2c207 diff --git a/dependencies/parsers/qbox b/dependencies/parsers/qbox index 90f4b1954d0058624cc8b864bd564cb4eaecd08c..163e232f3d24ead464bb8f8baf893087fe8c18da 160000 --- a/dependencies/parsers/qbox +++ b/dependencies/parsers/qbox @@ -1 +1 @@ -Subproject commit 90f4b1954d0058624cc8b864bd564cb4eaecd08c +Subproject commit 163e232f3d24ead464bb8f8baf893087fe8c18da diff --git a/dependencies/parsers/quantum-espresso b/dependencies/parsers/quantum-espresso index bc0e599c58252f791c3cb809b3c8cfbf652d3b73..08a51152d946dbbdba7a8b4bbeffcbe3907c1cee 160000 --- a/dependencies/parsers/quantum-espresso +++ b/dependencies/parsers/quantum-espresso @@ -1 +1 @@ -Subproject commit bc0e599c58252f791c3cb809b3c8cfbf652d3b73 +Subproject commit 08a51152d946dbbdba7a8b4bbeffcbe3907c1cee diff --git a/dependencies/parsers/siesta b/dependencies/parsers/siesta index 9965ca2f9c2d7815be3b1f9d8ad3e97862d48ef4..6b1c30d50162fca1707914774943a15691b9789a 160000 --- a/dependencies/parsers/siesta +++ b/dependencies/parsers/siesta @@ -1 +1 @@ -Subproject commit 9965ca2f9c2d7815be3b1f9d8ad3e97862d48ef4 +Subproject commit 6b1c30d50162fca1707914774943a15691b9789a diff --git a/dependencies/parsers/skeleton b/dependencies/parsers/skeleton index 715042d11d6beec998d33b4ea89f0d25fe5d7009..94dc1aa46ac7c5c0f1cbb6f1a00798331e0b5200 160000 --- a/dependencies/parsers/skeleton +++ b/dependencies/parsers/skeleton @@ -1 +1 @@ -Subproject commit 715042d11d6beec998d33b4ea89f0d25fe5d7009 +Subproject commit 94dc1aa46ac7c5c0f1cbb6f1a00798331e0b5200 diff --git a/dependencies/parsers/tinker b/dependencies/parsers/tinker index 7f5fc6a358dc7e40e716cc5205fa04e8cf9c6d6c..2775787b5b0c1a0d2f4bf21f5903cddb99aa81e0 160000 --- a/dependencies/parsers/tinker +++ b/dependencies/parsers/tinker @@ -1 +1 @@ -Subproject commit 7f5fc6a358dc7e40e716cc5205fa04e8cf9c6d6c +Subproject commit 2775787b5b0c1a0d2f4bf21f5903cddb99aa81e0 diff --git a/dependencies/parsers/turbomole b/dependencies/parsers/turbomole index 901bd3fcf50ce54e9b947c11476ee1a8371b3bae..6faaa3508f0db2d35f103cffd2c003459a93c82e 160000 --- a/dependencies/parsers/turbomole +++ b/dependencies/parsers/turbomole @@ -1 +1 @@ -Subproject commit 901bd3fcf50ce54e9b947c11476ee1a8371b3bae +Subproject commit 6faaa3508f0db2d35f103cffd2c003459a93c82e diff --git a/dependencies/parsers/vasp b/dependencies/parsers/vasp index bd9c04e281aa42010d3e57310f1106680a332763..394b45037a8a4a120a9c492785aa8f1ff96d0d4d 160000 --- a/dependencies/parsers/vasp +++ b/dependencies/parsers/vasp @@ -1 +1 @@ -Subproject commit bd9c04e281aa42010d3e57310f1106680a332763 +Subproject commit 394b45037a8a4a120a9c492785aa8f1ff96d0d4d diff --git a/dependencies/parsers/wien2k b/dependencies/parsers/wien2k index d58ac9b61ba2c9e82f50a30c2c234778743d51ad..6007fb8dc88b225e42baaf9725867c9ed0caf257 160000 --- a/dependencies/parsers/wien2k +++ b/dependencies/parsers/wien2k @@ -1 +1 @@ -Subproject commit d58ac9b61ba2c9e82f50a30c2c234778743d51ad +Subproject commit 6007fb8dc88b225e42baaf9725867c9ed0caf257 diff --git a/gui/src/components/About.js b/gui/src/components/About.js index 8411177b5de46dbd3f167b251ee7631a4da7fb12..4af36318d1e251809a8497f3d906ede9acb65f9c 100644 --- a/gui/src/components/About.js +++ b/gui/src/components/About.js @@ -1,4 +1,4 @@ -import React, { useContext, useLayoutEffect, useRef, useCallback, useEffect } from 'react' +import React, { useContext, useLayoutEffect, useRef, useCallback, useEffect, useState } from 'react' import {ReactComponent as AboutSvg} from './about.svg' import PropTypes from 'prop-types' import Markdown from './Markdown' @@ -6,28 +6,102 @@ import { appBase, optimadeBase, apiBase, debug, consent, aitoolkitEnabled, encyc import { apiContext } from './api' import packageJson from '../../package.json' import { domains } from './domains' -import { Grid, Card, CardContent, Typography, makeStyles, Link } from '@material-ui/core' +import { Grid, Card, CardContent, Typography, makeStyles, Link, Dialog, DialogTitle, DialogContent, DialogActions, Button } from '@material-ui/core' import { Link as RouterLink, useHistory } from 'react-router-dom' -import tutorials from './aitoolkit/tutorials' +import tutorials from '../toolkitMetadata' +import parserMetadata from '../parserMetadata' -export const CodeList = () => { - const {info} = useContext(apiContext) +function CodeInfo({code, ...props}) { + if (!code) { + return '' + } + + const metadata = parserMetadata[code] - if (!info) { - return '...' + let introduction = ` + For [${metadata.codeLabel || code}](${metadata.codeUrl}) please provide + all files that were used as input, were output by the code, or were produced you. + ` + if (metadata.tableOfFiles && metadata.tableOfFiles !== '') { + introduction = ` + For [${metadata.codeLabel || code}](${metadata.codeUrl}) please provide at least + the files from the following table (if applicable). Ideally, you upload + all files that were used as input, were output by the code, or were produced you. + ` } - return info.codes.reduce((result, code, index) => { - if (index !== 0) { - result.push(', ') + return <Dialog open={true} {...props}> + <DialogTitle>{metadata.codeLabel || code}</DialogTitle> + <DialogContent> + <Markdown>{` + ${introduction} NOMAD will present all files in the same directory for each + recognized calculation. This works best, if you put all files that belong to + individual code runs into individual directories or only combine files from a few + runs in the same directory. + + ${metadata.tableOfFiles} + + ${(metadata.parserSpecific && metadata.parserSpecific !== '' && + `Please note specifically for ${metadata.codeLabel || code}: ${metadata.parserSpecific}`) || ''} + + To create an upload with all calculations in a directory structure: + + \`\`\` + zip -r <upload-file>.zip <directory>/* + \`\`\` + + You can find further information on [the project page for NOMAD's ${metadata.codeLabel || code} parser](${metadata.parserGitUrl}). + `}</Markdown> + </DialogContent> + <DialogActions> + <Button onClick={() => props.onClose && props.onClose()} color="primary"> + close + </Button> + </DialogActions> + </Dialog> +} +CodeInfo.propTypes = { + code: PropTypes.string, + onClose: PropTypes.func +} + +export const CodeList = ({withUploadInstructions}) => { + const [selected, setSelected] = useState(null) + + const codes = Object.keys(parserMetadata).map(code => { + const metadata = parserMetadata[code] + if (!metadata) { + return code + } + + if (withUploadInstructions) { + return <Link + href="#" key={code} onClick={() => setSelected(code)} + >{code.codeLabel || code}</Link> } - if (code.code_homepage) { - result.push(<Link target="external" key={code.code_name} href={code.code_homepage}>{code.code_name}</Link>) - } else { - result.push(code.code_name) + + if (metadata.codeUrl) { + return <Link href={metadata.codeUrl} key={code} target="code">{code.codeLabel || code}</Link> } - return result + + return code + }) + + const toRender = codes.reduce((list, value, index) => { + if (index !== 0) { + list.push(', ') + } + list.push(value) + return list }, []) + + return <React.Fragment> + {toRender} + <CodeInfo code={selected} onClose={() => setSelected(null)} /> + </React.Fragment> +} +CodeList.propTypes = { + withUploadInstructions: PropTypes.bool } const useCardStyles = makeStyles(theme => ({ diff --git a/gui/src/components/aitoolkit/AIToolkitPage.js b/gui/src/components/aitoolkit/AIToolkitPage.js index 851b728d761c8e8e6355e1e7efcb70b07625d41a..62941a6681d16c5c26b90e11275d497a6e09e910 100644 --- a/gui/src/components/aitoolkit/AIToolkitPage.js +++ b/gui/src/components/aitoolkit/AIToolkitPage.js @@ -1,6 +1,6 @@ import React, { useMemo } from 'react' import { Typography, ExpansionPanel, ExpansionPanelSummary, ExpansionPanelDetails, makeStyles, Link, ExpansionPanelActions, Button, Grid, TextField } from '@material-ui/core' -import tutorials from './tutorials' +import tutorials from '../../toolkitMetadata' import ExpandMoreIcon from '@material-ui/icons/ExpandMore' import Markdown from '../Markdown' import { StringParam, useQueryParams, useQueryParam } from 'use-query-params' diff --git a/gui/src/components/aitoolkit/tutorials.json b/gui/src/components/aitoolkit/tutorials.json deleted file mode 100644 index 6bd8eb0f5364d26b033419eba71f9ada089804db..0000000000000000000000000000000000000000 --- a/gui/src/components/aitoolkit/tutorials.json +++ /dev/null @@ -1,428 +0,0 @@ -{ - "tutorials": [ - { - "authors": [ - "Ahmetcik, Emre", - "Ziletti, Angelo", - "Ouyang, Runhai", - "Scheffler, Matthias", - "Ghiringhelli, Luca M." - ], - "email": "ghiringhelli@fhi-berlin.mpg.de", - "title": "Symbolic regression via compressed sensing: a tutorial", - "description": "In this tutorial we will show how to find descriptive parameters to predict materials properties using symbolic regrression combined with compressed sensing tools. The relative stability of the zincblende (ZB) versus rocksalt (RS) structure of binary materials is predicted and compared against a model trained with kernel ridge regression.", - "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-compressed-sensing", - "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/compressed_sensing.ipynb", - "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/compressed_sensing.ipynb", - "updated": "2019-04-05", - "flags": { - "featured": true, - "top_of_list": false - }, - "labels": { - "application_keyword": [ - "Compressed sensing", - "Symbolic regression", - "Descriptors" - ], - "application_section": [ - "Tutorials for artificial-intelligence methods" - ], - "application_system": [ - "Octet binary materials" - ], - "category": [ - "Tutorial" - ], - "data_analytics_method": [ - "LASSO", - "SISSO", - "Kernel ridge regression" - ], - "platform": [ - "jupyter" - ] - } - }, - { - "authors": [ - "Ziletti, Angelo", - "Leitherer, Andreas", - "Ghiringhelli, Luca M." - ], - "email": "ghiringhelli@fhi-berlin.mpg.de", - "title": "Convolutional Neural network tutorial ", - "description": "In this tutorial, we briefly introduce the main ideas behind convolutional neural networks, build a neural network model with Keras, and explain the classification decision process using attentive response maps.", - "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-convolutional-nn", - "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/convolutional_nn.ipynb", - "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/convolutional_nn.ipynb", - "updated": "2019-04-01", - "flags": { - "featured": true, - "top_of_list": false - }, - "labels": { - "application_keyword": [ - "Classification", - "Neural Networks" - ], - "application_section": [ - "Tutorials for artificial-intelligence methods" - ], - "application_system": [ - "Images" - ], - "category": [ - "Tutorial" - ], - "data_analytics_method": [ - "Convolutional Neural networks", - "Attentive response map" - ], - "platform": [ - "jupyter" - ] - } - }, - { - "authors": [ - "Ziletti, Angelo", - "Ahmetcik, Emre", - "Arif, Mohammad-Yasin", - "Sbail\u00f2, Luigi", - "Ouyang, Runhai", - "Ghiringhelli, Luca M.", - "Scheffler, Matthias" - ], - "email": "ghiringhelli@fhi-berlin.mpg.de", - "title": "Predicting energy differences between crystal structures: (Meta-)stability of octet-binary compounds", - "description": "A tool for predicting the difference in the total energy between different polymorphs for 82 octet binary compounds, which gives an indication of the stability of the material. This is accomplished by identifying a set of descriptive parameters (a descriptor) from the free-atom data for the binary atomic species comprising the material using the Sure Independent Screening (SIS) + l0-norm minimization approach.", - "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-descriptor-role", - "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/descriptor_role.ipynb", - "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/descriptor_role.ipynb", - "updated": "2020-06-14", - "flags": { - "featured": true, - "top_of_list": false - }, - "labels": { - "application_keyword": [ - "Octet binaries" - ], - "application_section": [ - "Timely artificial-intelligence applications to Materials Science" - ], - "application_system": [ - "Rock salt", - "Zinc blende" - ], - "category": [ - "Tutorial" - ], - "data_analytics_method": [ - "SISSO" - ], - "platform": [ - "jupyter" - ] - } - }, - { - "authors": [ - "Bieniek, Bj\u00f6rn", - "Strange, Mikkel", - "Carbogno, Christian", - "Arif, Mohammad-Yasin", - "Sbail\u00f2, Luigi", - "Scheffler, Matthias" - ], - "email": "ghiringhelli@fhi-berlin.mpg.de", - "title": "Error estimates from high-accuracy electronic structure reference calculations", - "description": "A set of tools to analyze the error in electronic structure calculations due to the choice of numerical settings. We use the NOMAD infrastructure to systematically investigate the deviances in total and relative energies as function of typical settings for basis sets, k-grids, etc. for 71 elemental and 81 binary solids in three different electronic-structure codes.", - "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-error-estimates", - "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/error_estimates.ipynb", - "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/error_estimates.ipynb", - "updated": "2020-07-03", - "flags": { - "featured": true, - "top_of_list": false - }, - "labels": { - "application_keyword": [ - "Binaries", - "Elemental solids" - ], - "application_section": [ - "Timely artificial-intelligence applications to Materials Science" - ], - "category": [ - "Demo" - ], - "data_analytics_method": [ - "Linear Least-squares Regression" - ], - "platform": [ - "jupyter" - ] - } - }, - { - "authors": [ - "Fekete, \u00c1d\u00e1m", - "Stella, Martina", - "Lambert, Henry", - "De Vita, Alessandro", - "Cs\u00e1nyi, G\u00e1bor" - ], - "email": "adam.fekete@kcl.ac.uk", - "title": "The SOAP descriptor, Gaussian Approximation Potentials (GAP) and machine-learning of force fields", - "description": "In this tutorial we will be using a Gaussian Approximation Potentials to analyse results of TB DFT calculations of Si surface. Along the way we will learn about different descriptors (2b, 3b, soap) to describe local atomic environment in order to predict energies and forces of Si surface.", - "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-gap-si-surface", - "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/gap_si_surface.ipynb", - "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/gap_si_surface.ipynb", - "updated": "2019-06-01", - "flags": { - "featured": true, - "top_of_list": false - }, - "labels": { - "application_keyword": [ - "SOAP descriptor", - "Gaussian Approximation Potentials (GAP)" - ], - "application_section": [ - "Tutorials for artificial-intelligence methods" - ], - "application_system": [ - "Si" - ], - "category": [ - "Tutorial" - ], - "data_analytics_method": [ - "Gaussian-process regression", - "Kernel ridge regression" - ], - "platform": [ - "jupyter" - ] - } - }, - { - "authors": [ - "Fekete, \u00c1d\u00e1m", - "Stella, Martina", - "Lambert, Henry", - "De Vita, Alessandro", - "Cs\u00e1nyi, G\u00e1bor" - ], - "email": "adam.fekete@kcl.ac.uk", - "title": "Grain boundaries of alpha-Fe tutorial", - "description": "In this tutorial we will be using a machine learning method (clustering) to analyse results of Grain Boundary (GB) calculations of alpha-iron. Along the way we will learn about different methods to describe local atomic environment in order to calculate properties of GBs. We will use these properties to separate the different regions of the GB using clustering methods. Finally we will determine how the energy of the GB is changing according to the angle difference of the regions.", - "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-grain-boundaries", - "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/grain_boundaries.ipynb", - "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/grain_boundaries.ipynb", - "updated": "2019-06-01", - "flags": { - "featured": true, - "top_of_list": false - }, - "labels": { - "application_keyword": [ - "Grain boundaries" - ], - "application_section": [ - "Timely artificial-intelligence applications to Materials Science" - ], - "application_system": [ - "Iron" - ], - "category": [ - "Tutorial" - ], - "data_analytics_method": [ - "Clustering", - "K-means", - "Gaussian mixture" - ], - "platform": [ - "jupyter" - ] - } - }, - { - "authors": [ - "Liu, Xiangyue", - "Sutton, Christopher", - "Yamamoto, Takenori", - "Lysogorskiy, Yury", - "Blumenthal, Lars", - "Hammerschmidt, Thomas", - "Golebiowski, Jacek", - "Ziletti, Angelo", - "Scheffler, Matthias", - "Ghiringhelli, Luca M." - ], - "email": "ghiringhelli@fhi-berlin.mpg.de", - "title": "NOMAD 2018 Kaggle research competition", - "description": "In this tutorial, we will explore the best results of the NOMAD 2018 Kaggle research competition. The goal of this competition was to develop machine-learning models for the prediction of two target properties: the formation energy and the bandgap energy of transparent semiconducting oxides. The purpose of the modelling is to facilitate the discovery of new such materials and allow for advancements in (opto)electronic technologies", - "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-kaggle-competition", - "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/kaggle_competition.ipynb", - "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/kaggle_competition.ipynb", - "updated": "2020-02-06", - "flags": { - "featured": true, - "top_of_list": false - }, - "labels": { - "application_keyword": [ - "Formation energy prediction", - "Band gap energy prediction" - ], - "application_section": [ - "Timely artificial-intelligence applications to Materials Science" - ], - "application_system": [ - "Group-III oxidess" - ], - "category": [ - "Tutorial" - ], - "data_analytics_method": [ - "Kernel ridge regression", - "Neural networks", - "SOAP", - "n-gram" - ], - "platform": [ - "jupyter" - ] - } - }, - { - "authors": [ - "Sbail\u00f2, Luigi", - "Scheffler, Matthias", - "Ghiringhelli, Luca M." - ], - "email": "ghiringhelli@fhi-berlin.mpg.de", - "title": "Querying the Archive and performing Artificial Intelligence modeling", - "description": "In this tutorial, we demonstrate how to query the NOMAD Archive from the NOMAD Analytics toolkit. We then show examples of machine learning analysis performed on the retrieved data set.", - "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-query-nomad-repository", - "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/query_nomad_archive.ipynb", - "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/query_nomad_archive.ipynb", - "updated": "2020-05-03", - "flags": { - "featured": true, - "top_of_list": false - }, - "labels": { - "application_keyword": [ - "Materials properties prediction", - "Data visualization" - ], - "application_section": [ - "Analysing the content of the Archive" - ], - "application_system": [ - "Materials" - ], - "category": [ - "Tutorial" - ], - "data_analytics_method": [ - "Clustering", - "Dimension reduction", - "Random forest" - ], - "platform": [ - "jupyter" - ] - } - }, - { - "authors": [ - "Cs\u00e1nyi, G\u00e1bor", - "Kermode, James R." - ], - "email": "gc121@cam.ac.uk", - "title": "Learning atomic charges", - "description": "In this tutorial, we will use Gaussian process regression, GPR (or equivalently, Kernel Ridge Regression, KRR) to train and predict charges of atoms in small organic molecules.", - "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-soap-atomic-charges", - "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/soap_atomic_charges.ipynb", - "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/soap_atomic_charges.ipynb", - "updated": "2019-06-01", - "flags": { - "featured": true, - "top_of_list": false - }, - "labels": { - "application_keyword": [ - "GDB molecular database" - ], - "application_section": [ - "Tutorials for artificial-intelligence methods" - ], - "application_system": [ - "GDB7" - ], - "category": [ - "Tutorial" - ], - "data_analytics_method": [ - "Gaussian-process regression", - "Kernel ridge regression" - ], - "platform": [ - "jupyter" - ] - } - }, - { - "authors": [ - "Regler, Benjamin", - "Scheffler, Matthias", - "Ghiringhelli, Luca M." - ], - "email": "regler@fhi-berlin.mpg.de", - "title": "Total cumulative mutual information", - "description": "This interactive notebook includes the original implementation of total cumulative mutual information (TCMI) to reproduce the main results presented in the publication.", - "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-tcmi", - "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/tcmi.ipynb", - "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/tcmi.ipynb", - "updated": "2020-01-14", - "flags": { - "featured": true, - "top_of_list": false - }, - "labels": { - "application_keyword": [ - "information theory", - "mutual information", - "cumulative entropy", - "feature selection" - ], - "application_section": [ - "Timely artificial-intelligence applications to Materials Science" - ], - "application_system": [ - "System" - ], - "category": [ - "Tutorial" - ], - "data_analytics_method": [ - "Clustering", - "TCMI" - ], - "language": [ - "python", - "javascript" - ], - "platform": [ - "jupyter" - ] - } - } - ] -} \ No newline at end of file diff --git a/gui/src/components/uploads/Upload.js b/gui/src/components/uploads/Upload.js index f01ae2df04e8651ef7d3f8d37770bcbe7f05f9fe..271936fd4509acf25a1db04655813824747495aa 100644 --- a/gui/src/components/uploads/Upload.js +++ b/gui/src/components/uploads/Upload.js @@ -162,8 +162,7 @@ class Upload extends React.Component { textAlign: 'right' }, icon: { - marginLeft: -theme.spacing(1) * 0.5, - width: theme.spacing(13) - 2, + marginRight: theme.spacing(2), alignItems: 'center', display: 'flex' }, diff --git a/gui/src/components/uploads/UploadPage.js b/gui/src/components/uploads/UploadPage.js index fe15b8f35f16d2a8bf5b4b2714cf1582da9b2848..d878c693ee0be3706d8aba796cb17ae0d8919522 100644 --- a/gui/src/components/uploads/UploadPage.js +++ b/gui/src/components/uploads/UploadPage.js @@ -277,9 +277,8 @@ class UploadPage extends React.Component { uploads</b> simultaneously. Your uploaded data is not published right away. Find more details about uploading data in our <Link href={`${appBase}/docs/upload.html`}>documentation</Link> or visit our <Link href="https://nomad-lab.eu/repository-archive-faqs">FAQs</Link>. - </Typography> - <Typography> - The following codes are supported: <CodeList/>. + The following codes are supported: <CodeList withUploadInstructions />. Click + the code to get more specific information about how to prepare your files. </Typography> <Paper className={classes.dropzoneContainer}> <Dropzone diff --git a/gui/src/toolkitMetadata.json b/gui/src/toolkitMetadata.json new file mode 100644 index 0000000000000000000000000000000000000000..b25582e65c9e5afa52ca5ea8911d4c5a3e676044 --- /dev/null +++ b/gui/src/toolkitMetadata.json @@ -0,0 +1,426 @@ +{ + "tutorials": [ + { + "authors": [ + "Ahmetcik, Emre", + "Ziletti, Angelo", + "Ouyang, Runhai", + "Scheffler, Matthias", + "Ghiringhelli, Luca M." + ], + "email": "ghiringhelli@fhi-berlin.mpg.de", + "title": "Symbolic regression via compressed sensing: a tutorial", + "description": "In this tutorial we will show how to find descriptive parameters to predict materials properties using symbolic regrression combined with compressed sensing tools. The relative stability of the zincblende (ZB) versus rocksalt (RS) structure of binary materials is predicted and compared against a model trained with kernel ridge regression.", + "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-compressed-sensing", + "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/compressed_sensing.ipynb", + "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/compressed_sensing.ipynb", + "updated": "2019-04-05", + "flags": { + "featured": true, + "top_of_list": false + }, + "labels": { + "application_keyword": [ + "Compressed sensing", + "Symbolic regression", + "Descriptors" + ], + "application_section": [ + "Tutorials for artificial-intelligence methods" + ], + "application_system": [ + "Octet binary materials" + ], + "category": [ + "Tutorial" + ], + "data_analytics_method": [ + "LASSO", + "SISSO", + "Kernel ridge regression" + ], + "platform": [ + "jupyter" + ] + } + }, + { + "authors": [ + "Liu, Xiangyue", + "Sutton, Christopher", + "Yamamoto, Takenori", + "Lysogorskiy, Yury", + "Blumenthal, Lars", + "Hammerschmidt, Thomas", + "Golebiowski, Jacek", + "Ziletti, Angelo", + "Scheffler, Matthias", + "Ghiringhelli, Luca M." + ], + "email": "ghiringhelli@fhi-berlin.mpg.de", + "title": "NOMAD 2018 Kaggle research competition", + "description": "In this tutorial, we will explore the best results of the NOMAD 2018 Kaggle research competition. The goal of this competition was to develop machine-learning models for the prediction of two target properties: the formation energy and the bandgap energy of transparent semiconducting oxides. The purpose of the modelling is to facilitate the discovery of new such materials and allow for advancements in (opto)electronic technologies", + "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-kaggle-competition", + "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/kaggle_competition.ipynb", + "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/kaggle_competition.ipynb", + "updated": "2020-02-06", + "flags": { + "featured": true, + "top_of_list": false + }, + "labels": { + "application_keyword": [ + "Formation energy prediction", + "Band gap energy prediction" + ], + "application_section": [ + "Timely artificial-intelligence applications to Materials Science" + ], + "application_system": [ + "Group-III oxidess" + ], + "category": [ + "Tutorial" + ], + "data_analytics_method": [ + "Kernel ridge regression", + "Neural networks", + "SOAP", + "n-gram" + ], + "platform": [ + "jupyter" + ] + } + }, + { + "authors": [ + "Ziletti, Angelo", + "Leitherer, Andreas", + "Ghiringhelli, Luca M." + ], + "email": "ghiringhelli@fhi-berlin.mpg.de", + "title": "Convolutional Neural network tutorial ", + "description": "In this tutorial, we briefly introduce the main ideas behind convolutional neural networks, build a neural network model with Keras, and explain the classification decision process using attentive response maps.", + "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-convolutional-nn", + "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/convolutional_nn.ipynb", + "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/convolutional_nn.ipynb", + "updated": "2019-04-01", + "flags": { + "featured": true, + "top_of_list": false + }, + "labels": { + "application_keyword": [ + "Classification", + "Neural Networks" + ], + "application_section": [ + "Tutorials for artificial-intelligence methods" + ], + "application_system": [ + "Images" + ], + "category": [ + "Tutorial" + ], + "data_analytics_method": [ + "Convolutional Neural networks", + "Attentive response map" + ], + "platform": [ + "jupyter" + ] + } + }, + { + "authors": [ + "Fekete, \u00c1d\u00e1m", + "Stella, Martina", + "Lambert, Henry", + "De Vita, Alessandro", + "Cs\u00e1nyi, G\u00e1bor" + ], + "email": "adam.fekete@kcl.ac.uk", + "title": "The SOAP descriptor, Gaussian Approximation Potentials (GAP) and machine-learning of force fields", + "description": "In this tutorial we will be using a Gaussian Approximation Potentials to analyse results of TB DFT calculations of Si surface. Along the way we will learn about different descriptors (2b, 3b, soap) to describe local atomic environment in order to predict energies and forces of Si surface.", + "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-gap-si-surface", + "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/gap_si_surface.ipynb", + "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/gap_si_surface.ipynb", + "updated": "2019-06-01", + "flags": { + "featured": true, + "top_of_list": false + }, + "labels": { + "application_keyword": [ + "SOAP descriptor", + "Gaussian Approximation Potentials (GAP)" + ], + "application_section": [ + "Tutorials for artificial-intelligence methods" + ], + "application_system": [ + "Si" + ], + "category": [ + "Tutorial" + ], + "data_analytics_method": [ + "Gaussian-process regression", + "Kernel ridge regression" + ], + "platform": [ + "jupyter" + ] + } + }, + { + "authors": [ + "Cs\u00e1nyi, G\u00e1bor", + "Kermode, James R." + ], + "email": "gc121@cam.ac.uk", + "title": "Learning atomic charges", + "description": "In this tutorial, we will use Gaussian process regression, GPR (or equivalently, Kernel Ridge Regression, KRR) to train and predict charges of atoms in small organic molecules.", + "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-soap-atomic-charges", + "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/soap_atomic_charges.ipynb", + "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/soap_atomic_charges.ipynb", + "updated": "2019-06-01", + "flags": { + "featured": true, + "top_of_list": false + }, + "labels": { + "application_keyword": [ + "GDB molecular database" + ], + "application_section": [ + "Tutorials for artificial-intelligence methods" + ], + "application_system": [ + "GDB7" + ], + "category": [ + "Tutorial" + ], + "data_analytics_method": [ + "Gaussian-process regression", + "Kernel ridge regression" + ], + "platform": [ + "jupyter" + ] + } + }, + { + "authors": [ + "Fekete, \u00c1d\u00e1m", + "Stella, Martina", + "Lambert, Henry", + "De Vita, Alessandro", + "Cs\u00e1nyi, G\u00e1bor" + ], + "email": "adam.fekete@kcl.ac.uk", + "title": "Grain boundaries of alpha-Fe tutorial", + "description": "In this tutorial we will be using a machine learning method (clustering) to analyse results of Grain Boundary (GB) calculations of alpha-iron. Along the way we will learn about different methods to describe local atomic environment in order to calculate properties of GBs. We will use these properties to separate the different regions of the GB using clustering methods. Finally we will determine how the energy of the GB is changing according to the angle difference of the regions.", + "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-grain-boundaries", + "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/grain_boundaries.ipynb", + "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/grain_boundaries.ipynb", + "updated": "2019-06-01", + "flags": { + "featured": true, + "top_of_list": false + }, + "labels": { + "application_keyword": [ + "Grain boundaries" + ], + "application_section": [ + "Timely artificial-intelligence applications to Materials Science" + ], + "application_system": [ + "Iron" + ], + "category": [ + "Tutorial" + ], + "data_analytics_method": [ + "Clustering", + "K-means", + "Gaussian mixture" + ], + "platform": [ + "jupyter" + ] + } + }, + { + "authors": [ + "Regler, Benjamin", + "Scheffler, Matthias", + "Ghiringhelli, Luca M." + ], + "email": "regler@fhi-berlin.mpg.de", + "title": "Total cumulative mutual information", + "description": "This interactive notebook includes the original implementation of total cumulative mutual information (TCMI) to reproduce the main results presented in the publication.", + "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-tcmi", + "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/tcmi.ipynb", + "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/tcmi.ipynb", + "updated": "2020-01-14", + "flags": { + "featured": true, + "top_of_list": false + }, + "labels": { + "application_keyword": [ + "information theory", + "mutual information", + "cumulative entropy", + "feature selection" + ], + "application_section": [ + "Timely artificial-intelligence applications to Materials Science" + ], + "application_system": [ + "System" + ], + "category": [ + "Tutorial" + ], + "data_analytics_method": [ + "Clustering", + "TCMI" + ], + "language": [ + "python", + "javascript" + ], + "platform": [ + "jupyter" + ] + } + }, + { + "authors": [ + "Arif, Mohammad-Yasin", + "Sbail\u00f2, Luigi", + "Purcell, Thomas A. R.", + "Ghiringhelli, Luca M.", + "Scheffler, Matthias" + ], + "email": "ghiringhelli@fhi-berlin.mpg.de", + "title": "Predicting energy differences between crystal structures: (Meta-)stability of octet-binary compounds", + "description": "A tool for predicting the difference in the total energy between different polymorphs for 82 octet binary compounds, which gives an indication of the stability of the material. This is accomplished by identifying a set of descriptive parameters (a descriptor) from the free-atom data for the binary atomic species comprising the material using the Sure Independent Screening (SIS) + l0-norm minimization approach.", + "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-descriptor-role", + "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/descriptor_role.ipynb", + "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/descriptor_role.ipynb", + "updated": "2020-09-5", + "flags": { + "featured": true, + "top_of_list": false + }, + "labels": { + "application_keyword": [ + "Octet binaries" + ], + "application_section": [ + "Timely artificial-intelligence applications to Materials Science" + ], + "application_system": [ + "Rock salt", + "Zinc blende" + ], + "category": [ + "Tutorial" + ], + "data_analytics_method": [ + "SISSO" + ], + "platform": [ + "jupyter" + ] + } + }, + { + "authors": [ + "Bieniek, Bj\u00f6rn", + "Strange, Mikkel", + "Carbogno, Christian", + "Arif, Mohammad-Yasin", + "Sbail\u00f2, Luigi", + "Scheffler, Matthias" + ], + "email": "ghiringhelli@fhi-berlin.mpg.de", + "title": "Error estimates from high-accuracy electronic structure reference calculations", + "description": "A set of tools to analyze the error in electronic structure calculations due to the choice of numerical settings. We use the NOMAD infrastructure to systematically investigate the deviances in total and relative energies as function of typical settings for basis sets, k-grids, etc. for 71 elemental and 81 binary solids in three different electronic-structure codes.", + "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-error-estimates", + "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/error_estimates.ipynb", + "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/error_estimates.ipynb", + "updated": "2020-07-03", + "flags": { + "featured": true, + "top_of_list": false + }, + "labels": { + "application_keyword": [ + "Binaries", + "Elemental solids" + ], + "application_section": [ + "Timely artificial-intelligence applications to Materials Science" + ], + "category": [ + "Demo" + ], + "data_analytics_method": [ + "Linear Least-squares Regression" + ], + "platform": [ + "jupyter" + ] + } + }, + { + "authors": [ + "Sbail\u00f2, Luigi", + "Scheffler, Matthias", + "Ghiringhelli, Luca M." + ], + "email": "ghiringhelli@fhi-berlin.mpg.de", + "title": "Querying the Archive and performing Artificial Intelligence modeling", + "description": "In this tutorial, we demonstrate how to query the NOMAD Archive from the NOMAD Analytics toolkit. We then show examples of machine learning analysis performed on the retrieved data set.", + "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-query-nomad-archive", + "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/query_nomad_archive.ipynb", + "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/query_nomad_archive.ipynb", + "updated": "2020-05-03", + "flags": { + "featured": true, + "top_of_list": false + }, + "labels": { + "application_keyword": [ + "Materials properties prediction", + "Data visualization" + ], + "application_section": [ + "Analysing the content of the Archive" + ], + "application_system": [ + "Materials" + ], + "category": [ + "Tutorial" + ], + "data_analytics_method": [ + "Clustering", + "Dimension reduction", + "Random forest" + ], + "platform": [ + "jupyter" + ] + } + } + ] +} diff --git a/nomad/cli/dev.py b/nomad/cli/dev.py index a63ee4380934cd614b11c70c51115469b7f080ff..ebc2f1125c114a22a08929bedb99deba742106df 100644 --- a/nomad/cli/dev.py +++ b/nomad/cli/dev.py @@ -162,3 +162,64 @@ def legacy_metainfo(path): for element in path: env = convert(element) generate_metainfo_code(env) + + +@dev.command(help='Generates a JSON file that compiles all the parser metadata from each parser project.') +def parser_metadata(): + import inspect + import re + import json + import yaml + + from nomad.parsing import LegacyParser, FairdiParser + from nomad.parsing.parsers import parser_dict + + parsers_metadata = {} + for parser in parser_dict.values(): + if isinstance(parser, LegacyParser): + parser_class = parser.parser_class + elif isinstance(parser, FairdiParser): + parser_class = parser.__class__ + else: + continue + parser_code_file = inspect.getfile(parser_class) + + path_match = re.match(r'(.*/dependencies/parsers/[^/]+)/.*', parser_code_file) + if path_match: + parser_metadata_file = os.path.join(path_match.group(1), 'metadata.yaml') + if os.path.exists(parser_metadata_file): + with open(parser_metadata_file) as f: + parser_metadata = yaml.load(f, Loader=yaml.FullLoader) + parsers_metadata[parser.code_name] = parser_metadata + + parsers_metadata = { + key: parsers_metadata[key] + for _, key in sorted([(key.lower(), key) for key in parsers_metadata], key=lambda x: x[0])} + + print(json.dumps(parsers_metadata, indent=2)) + + +@dev.command(help='Generate toolkit tutorial metadata from anaytics submodules.') +def toolkit_metadata(): + import requests + import re + import json + modules = requests.get( + 'https://gitlab.mpcdf.mpg.de/api/v4/projects/3161/repository/files/.gitmodules/raw?ref=master').text + + tutorials = [] + lines = modules.split('\n') + for line in lines: + match = re.match(r'\s*url = (.*)$', line) + if match: + url = match.group(1).replace('.git', '') + '/-/raw/master/metainfo.json' + response = requests.get(url) + if response.status_code != 200: + print('Could not get metadata for %s' % match.group(1), file=sys.stderr) + continue + try: + tutorials.append(response.json()) + except Exception: + print('Could not get metadata for %s. Project is probably not public.' % match.group(1), file=sys.stderr) + + print(json.dumps(dict(tutorials=tutorials), indent=2)) diff --git a/nomad/config.py b/nomad/config.py index c647b920af77ca2842073a3c4787525377163c48..8aaac11c6dac7fc0bc0c14d6e982d6a1b0bd3293 100644 --- a/nomad/config.py +++ b/nomad/config.py @@ -50,8 +50,8 @@ except ImportError: from nomad import gitinfo -warnings.filterwarnings("ignore", message="numpy.dtype size changed") -warnings.filterwarnings("ignore", message="numpy.ufunc size changed") +warnings.filterwarnings('ignore', message='numpy.dtype size changed') +warnings.filterwarnings('ignore', message='numpy.ufunc size changed') class NomadConfig(dict): diff --git a/nomad/parsing/__init__.py b/nomad/parsing/__init__.py index 9ae227c6a0aec6331ad528fa438b658880c00fa3..2986e6f05e9c8717e0c5ff8023f03a1678aa0dd9 100644 --- a/nomad/parsing/__init__.py +++ b/nomad/parsing/__init__.py @@ -69,5 +69,5 @@ based on nomad@fairdi's metainfo: ''' from nomad.parsing.legacy import Backend, BackendError, LegacyParser -from nomad.parsing.parser import Parser, BrokenParser, MissingParser, MatchingParser +from nomad.parsing.parser import Parser, BrokenParser, MissingParser, MatchingParser, FairdiParser from nomad.parsing.artificial import TemplateParser, GenerateRandomParser, ChaosParser, EmptyParser