{"id":736,"date":"2023-04-12T12:37:15","date_gmt":"2023-04-12T12:37:15","guid":{"rendered":"https:\/\/blogs.aalto.fi\/catprofopen\/?p=736"},"modified":"2023-09-28T06:01:18","modified_gmt":"2023-09-28T06:01:18","slug":"catalysis-research-group-publishes-diffusion-reaction-model-code","status":"publish","type":"post","link":"https:\/\/blogs.aalto.fi\/catprofopen\/2023\/04\/12\/catalysis-research-group-publishes-diffusion-reaction-model-code\/","title":{"rendered":"Catalysis research group publishes diffusion\u2013reaction model code"},"content":{"rendered":"\n<p><em>Written by J\u00e4nis J\u00e4rvilehto (<\/em><a href=\"https:\/\/fi.linkedin.com\/in\/janisj\"><em>https:\/\/linkedin.com\/in\/janisj<\/em><\/a><em>)<\/em><\/p>\n\n\n\n<p>The Catalysis research group has published its first-ever open code! Coined <em>DReaM-ALD<\/em>, the recently published Matlab script provides an implementation of a diffusion\u2013reaction model developed by Ylilammi <em>et al.<\/em> (J. Appl. Phys. <strong>123<\/strong>, 205301 (2018), DOI:<a href=\"https:\/\/doi.org\/10.1063\/1.5028178\"> 10.1063\/1.5028178<\/a>). The model simulates atomic layer deposition in high-aspect-ratio structures and generates saturation profiles, which show how the film thickness evolves with penetration into the structure. This Matlab implementation was originally written by Emma Verkama in 2019 by request of Prof. Riikka Puurunen, and the code was later published by J\u00e4nis J\u00e4rvilehto. In addition to <a href=\"https:\/\/github.com\/Aalto-Puurunen\/dream-ald\">Github<\/a>, the code was also made available on <a href=\"https:\/\/zenodo.org\/record\/7759195#.ZDVPAPZBzsY\">Zenodo<\/a>.&nbsp;<\/p>\n\n\n\n<p>There was a significant delay (~3 years) between the creation and publication of the code. As there was no prior history of open code in the group, the barrier to publication was relatively high. Questions, such as\u2026<\/p>\n\n\n\n<p><em>Where should we publish the code? What kind of information would be useful for a potential user? How does the process work in general? Where do I click???<\/em><\/p>\n\n\n\n<p>\u2026may arise. While the best practices may seem obvious to a software engineer, generating research code can be a messy affair in other fields. Often, these researchers in other fields are less acquainted with the tools of the trade, such as a version control system like Github. <em>Someone <\/em>in the group<em> <\/em>would have to figure out how and where to publish the code so that it is easily accessible and citable. This causes useful and interesting projects to end up forgotten on university network drives, instead of being available for anyone to extend and experiment with. It is also difficult to replicate the results of a published work without access to the original code.&nbsp;<\/p>\n\n\n\n<p>As a starting point or inspiration for other groups that are unsure about open code, we\u2019ve summarized the steps we went through to get our code out there. We\u2019ve also linked some helpful resources we\u2019ve run into during the process!<\/p>\n\n\n\n<p><strong>Step 1: Set up an Organization on Github<\/strong><\/p>\n\n\n\n<p>If your research group has not published on Github yet, it is a good idea to think about how the repositories should be organized. We opted to create an <em>Organization <\/em>for the research group \u2014 this way the repository\u2019s association with the Catalysis research group is clear. Remember to assign a second <em>Organization Owner<\/em> for your <em>Organization<\/em>, just in case. The other research group members can be added as <em>Organization Members<\/em>.&nbsp;<\/p>\n\n\n\n<p><strong>Step 2: Decide on a license<\/strong><\/p>\n\n\n\n<p>Choose a license for the software you intend to publish, if you haven\u2019t already done so. Keep in mind that there may be restrictions on the type of license you can use, set by your organization or funding source. You can find an overview of common licenses at <a href=\"https:\/\/choosealicense.com\/\">https:\/\/choosealicense.com\/<\/a>, for example. In our case, we opted for the MIT license.&nbsp;<\/p>\n\n\n\n<p><strong>Step 3: Set up a repository<\/strong><\/p>\n\n\n\n<p>Next, it is time to set up a repository for the project. There are two paths to take here: either one directly creates the repository to be published later, or, a draft repository can be created first. On Github, all changes to a repository can be traced back, so a potential editing history of, for example, the README.md file will be publicly visible. We decided to forgo the draft repository, as we had already prepared the repository content elsewhere. However, we set the repository to <em>Private <\/em>at this stage. At this point, you can <em>push <\/em>your code and a LICENSE.txt file to the repository.&nbsp;<\/p>\n\n\n\n<p><strong>Step 4: Create a README.md file<\/strong><\/p>\n\n\n\n<p>The README.md file is displayed whenever someone visits the repository. You can use the README.md as an opportunity to give a brief description of the project, reference relevant literature, explain how to use the code, and how you would like others to cite it in their work. We also decided to include a <em>DOI badge<\/em>, among others, at the top of the README.md. We used <a href=\"https:\/\/shields.io\/\">https:\/\/shields.io\/<\/a> to generate the badges (<em>shields<\/em>) for our README.md file.&nbsp;<\/p>\n\n\n\n<p><strong>Step 5: Make the repository (easily) citable<\/strong><\/p>\n\n\n\n<p>Anyone can cite the repository as-is, however, there are some things you can do to make it more straightforward. For starters, we included a <em>Citing <\/em>section in our README.md to give an example on how to cite the repository. Furthermore, we created a CITATION.cff file in the root of the repository using <a href=\"https:\/\/citation-file-format.github.io\/cff-initializer-javascript\/#\/\">cffinit<\/a>. The CITATION.cff file causes Github to display a <em>Cite this repository<\/em> button in the <em>About <\/em>section of the repository, which provides a preformatted citation and BibTeX entry. The file contains citation information in a machine-readable format; you can find further information at <a href=\"https:\/\/citation-file-format.github.io\/\">https:\/\/citation-file-format.github.io\/<\/a>.&nbsp;<\/p>\n\n\n\n<p>At this point, we also created a .zenodo.json file for the Zenodo synchronization (enabled in Step 7). This json file is placed at the root of the repository and Zenodo uses it to generate the deposit metadata. There are various fields you can fill out using the .zenodo.json file, a complete list of which can be found at <a href=\"https:\/\/developers.zenodo.org\/#add-metadata-to-your-github-repository-release\">here<\/a>. We also validated our file before pushing it using a json validator, as it is easy to mess up the formatting.&nbsp;<\/p>\n\n\n\n<p><strong>Step 6: Publish!<\/strong><\/p>\n\n\n\n<p>Here, the procedure varies slightly depending whether a draft repository was created or not. If you created a draft repository, simply copy its contents to a new, public repository. As we were satisfied with our repository, we simply changed its visibility to <em>Public<\/em>. Now the code is publicly available on Github!<\/p>\n\n\n\n<p><strong>Step 7: Synchronize the repository with Zenodo<\/strong><\/p>\n\n\n\n<p>To obtain a DOI for our repository, we archived it as a Zenodo deposit. The most efficient way to achieve this is to connect your Github account to Zenodo, enable synchronization for the repository on Zenodo, and finally create a <em>Release <\/em>on Github. You can find more information on how to connect the accounts on <a href=\"https:\/\/help.zenodo.org\/\">https:\/\/help.zenodo.org\/<\/a>. After this, Zenodo will automatically issue a new <em>versioned DOI <\/em>whenever a new <em>Release <\/em>is created on Github. Notably, this only works if no prior <em>Releases <\/em>have been created before enabling synchronization. After obtaining our first DOI, we decided to update it in the README.md and CITATION.cff files as well.&nbsp;<\/p>\n\n\n\n<p>Hopefully this blog post has been helpful in condensing the most relevant learnings of the process we went through to get our project published. While the steps may seem convoluted, the whole process should only take a few minutes, provided that the files have been prepared in advance. For further reading on research code, you can check out:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/scicomp.aalto.fi\/scicomp\/git\/\">Git \u2014 Aalto Scientific Computing (ASC)<\/a><\/li><li><a href=\"https:\/\/scicomp.aalto.fi\/scicomp\/new-group-leaders\/\">Information for new group leaders \u2014 Aalto Scientific Computing (ASC)<\/a>\u00a0<\/li><li>P. J. Mineault &amp; The Good Research Code Handbook Community (2021). The Good Research Code Handbook. Zenodo. <a href=\"https:\/\/dx.doi.org\/10.5281\/zenodo.5796873\">doi:10.5281\/zenodo.5796873<\/a><\/li><li>G. Wilson, J. Bryan, K. Cranston, J. Kitzes, L. Nederbragt, T. K. Teal (2017). Good enough practices in scientific computing. PLoS Comput. Biol. 13 (6) e1005510. <a href=\"https:\/\/doi.org\/10.1371\/journal.pcbi.1005510\">https:\/\/doi.org\/10.1371\/journal.pcbi.1005510<\/a>\u00a0<\/li><\/ul>\n\n\n\n<p>&#8212;<\/p>\n\n\n\n<p><strong>Update 28.9.2023<\/strong> (Riikka Puurunen): A video is available in Youtube, where a code is published, using these instructions. Access it at: <a rel=\"noreferrer noopener\" href=\"https:\/\/youtu.be\/ksxAIaytv68?si=3eWQF9lG2zbQ7ftP\" target=\"_blank\">https:\/\/youtu.be\/ksxAIaytv68?si=3eWQF9lG2zbQ7ftP<\/a>.<\/p>\n<p><span class=\"author vcard\">Posted by Riikka Puurunen<\/span><\/p>","protected":false},"excerpt":{"rendered":"<p>Written by J\u00e4nis J\u00e4rvilehto (https:\/\/linkedin.com\/in\/janisj) The Catalysis research group has published its first-ever open code! Coined DReaM-ALD, the recently published Matlab script provides an implementation of a diffusion\u2013reaction model developed by Ylilammi et al. (J. Appl. Phys. 123, 205301 (2018), &hellip; <a href=\"https:\/\/blogs.aalto.fi\/catprofopen\/2023\/04\/12\/catalysis-research-group-publishes-diffusion-reaction-model-code\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3045,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[79,10],"tags":[38,93,91,82,92,59],"class_list":["post-736","post","type-post","status-publish","format-standard","hentry","category-atomic-layer-deposition","category-openness","tag-atomic-layer-deposition","tag-github","tag-open-code","tag-open-science","tag-open-source","tag-zenodo"],"_links":{"self":[{"href":"https:\/\/blogs.aalto.fi\/catprofopen\/wp-json\/wp\/v2\/posts\/736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.aalto.fi\/catprofopen\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.aalto.fi\/catprofopen\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.aalto.fi\/catprofopen\/wp-json\/wp\/v2\/users\/3045"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.aalto.fi\/catprofopen\/wp-json\/wp\/v2\/comments?post=736"}],"version-history":[{"count":3,"href":"https:\/\/blogs.aalto.fi\/catprofopen\/wp-json\/wp\/v2\/posts\/736\/revisions"}],"predecessor-version":[{"id":740,"href":"https:\/\/blogs.aalto.fi\/catprofopen\/wp-json\/wp\/v2\/posts\/736\/revisions\/740"}],"wp:attachment":[{"href":"https:\/\/blogs.aalto.fi\/catprofopen\/wp-json\/wp\/v2\/media?parent=736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.aalto.fi\/catprofopen\/wp-json\/wp\/v2\/categories?post=736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.aalto.fi\/catprofopen\/wp-json\/wp\/v2\/tags?post=736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}