From 9f20052962161149ccfbb69513a33e2dbb01881f Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Mon, 20 Jul 2020 12:14:37 -0300 Subject: [PATCH 01/26] Delete main.js --- javascripts/main.js | 1 - 1 file changed, 1 deletion(-) delete mode 100644 javascripts/main.js diff --git a/javascripts/main.js b/javascripts/main.js deleted file mode 100644 index d8135d3..0000000 --- a/javascripts/main.js +++ /dev/null @@ -1 +0,0 @@ -console.log('This would be the main JS file.'); From 0a3cdb3ec9dc037dc49d245103ff08e686ffcd88 Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Mon, 20 Jul 2020 12:14:48 -0300 Subject: [PATCH 02/26] Delete scale.fix.js --- javascripts/scale.fix.js | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 javascripts/scale.fix.js diff --git a/javascripts/scale.fix.js b/javascripts/scale.fix.js deleted file mode 100644 index 08716c0..0000000 --- a/javascripts/scale.fix.js +++ /dev/null @@ -1,20 +0,0 @@ -fixScale = function(doc) { - - var addEvent = 'addEventListener', - type = 'gesturestart', - qsa = 'querySelectorAll', - scales = [1, 1], - meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : []; - - function fix() { - meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1]; - doc.removeEventListener(type, fix, true); - } - - if ((meta = meta[meta.length - 1]) && addEvent in doc) { - fix(); - scales = [.25, 1.6]; - doc[addEvent](type, fix, true); - } - -}; \ No newline at end of file From 9972f474d71393e65509fa7e9798214dabf83bde Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Mon, 20 Jul 2020 12:15:06 -0300 Subject: [PATCH 03/26] Delete github-light.css --- stylesheets/github-light.css | 130 ----------------------------------- 1 file changed, 130 deletions(-) delete mode 100644 stylesheets/github-light.css diff --git a/stylesheets/github-light.css b/stylesheets/github-light.css deleted file mode 100644 index 68b86c1..0000000 --- a/stylesheets/github-light.css +++ /dev/null @@ -1,130 +0,0 @@ -/*! - * GitHub Light v0.4.1 - * Copyright (c) 2012 - 2017 GitHub, Inc. - * Licensed under MIT (https://github.com/primer/github-syntax-theme-generator/blob/master/LICENSE) - */ - -.pl-c /* comment, punctuation.definition.comment, string.comment */ { - color: #6a737d; -} - -.pl-c1 /* constant, entity.name.constant, variable.other.constant, variable.language, support, meta.property-name, support.constant, support.variable, meta.module-reference, markup.raw, meta.diff.header, meta.output */, -.pl-s .pl-v /* string variable */ { - color: #005cc5; -} - -.pl-e /* entity */, -.pl-en /* entity.name */ { - color: #6f42c1; -} - -.pl-smi /* variable.parameter.function, storage.modifier.package, storage.modifier.import, storage.type.java, variable.other */, -.pl-s .pl-s1 /* string source */ { - color: #24292e; -} - -.pl-ent /* entity.name.tag, markup.quote */ { - color: #22863a; -} - -.pl-k /* keyword, storage, storage.type */ { - color: #d73a49; -} - -.pl-s /* string */, -.pl-pds /* punctuation.definition.string, source.regexp, string.regexp.character-class */, -.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */, -.pl-sr /* string.regexp */, -.pl-sr .pl-cce /* string.regexp constant.character.escape */, -.pl-sr .pl-sre /* string.regexp source.ruby.embedded */, -.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */ { - color: #032f62; -} - -.pl-v /* variable */, -.pl-smw /* sublimelinter.mark.warning */ { - color: #e36209; -} - -.pl-bu /* invalid.broken, invalid.deprecated, invalid.unimplemented, message.error, brackethighlighter.unmatched, sublimelinter.mark.error */ { - color: #b31d28; -} - -.pl-ii /* invalid.illegal */ { - color: #fafbfc; - background-color: #b31d28; -} - -.pl-c2 /* carriage-return */ { - color: #fafbfc; - background-color: #d73a49; -} - -.pl-c2::before /* carriage-return */ { - content: "^M"; -} - -.pl-sr .pl-cce /* string.regexp constant.character.escape */ { - font-weight: bold; - color: #22863a; -} - -.pl-ml /* markup.list */ { - color: #735c0f; -} - -.pl-mh /* markup.heading */, -.pl-mh .pl-en /* markup.heading entity.name */, -.pl-ms /* meta.separator */ { - font-weight: bold; - color: #005cc5; -} - -.pl-mi /* markup.italic */ { - font-style: italic; - color: #24292e; -} - -.pl-mb /* markup.bold */ { - font-weight: bold; - color: #24292e; -} - -.pl-md /* markup.deleted, meta.diff.header.from-file, punctuation.definition.deleted */ { - color: #b31d28; - background-color: #ffeef0; -} - -.pl-mi1 /* markup.inserted, meta.diff.header.to-file, punctuation.definition.inserted */ { - color: #22863a; - background-color: #f0fff4; -} - -.pl-mc /* markup.changed, punctuation.definition.changed */ { - color: #e36209; - background-color: #ffebda; -} - -.pl-mi2 /* markup.ignored, markup.untracked */ { - color: #f6f8fa; - background-color: #005cc5; -} - -.pl-mdr /* meta.diff.range */ { - font-weight: bold; - color: #6f42c1; -} - -.pl-ba /* brackethighlighter.tag, brackethighlighter.curly, brackethighlighter.round, brackethighlighter.square, brackethighlighter.angle, brackethighlighter.quote */ { - color: #586069; -} - -.pl-sg /* sublimelinter.gutter-mark */ { - color: #959da5; -} - -.pl-corl /* constant.other.reference.link, string.other.link */ { - text-decoration: underline; - color: #032f62; -} - From 9419d1fe57a949a53a9dd8cab7fad06c0443eee1 Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Mon, 20 Jul 2020 12:15:15 -0300 Subject: [PATCH 04/26] Delete styles.css --- stylesheets/styles.css | 423 ----------------------------------------- 1 file changed, 423 deletions(-) delete mode 100644 stylesheets/styles.css diff --git a/stylesheets/styles.css b/stylesheets/styles.css deleted file mode 100644 index 647f08d..0000000 --- a/stylesheets/styles.css +++ /dev/null @@ -1,423 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Arvo:400,700,400italic); - -/* MeyerWeb Reset */ - -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font: inherit; - vertical-align: baseline; -} - - -/* Base text styles */ - -body { - padding:10px 50px 0 0; - font-family:"Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - color: #232323; - background-color: #FBFAF7; - margin: 0; - line-height: 1.8em; - -webkit-font-smoothing: antialiased; - -} - -h1, h2, h3, h4, h5, h6 { - color:#232323; - margin:36px 0 10px; -} - -p, ul, ol, table, dl { - margin:0 0 22px; -} - -h1, h2, h3 { - font-family: Arvo, Monaco, serif; - line-height:1.3; - font-weight: normal; -} - -h1,h2, h3 { - display: block; - border-bottom: 1px solid #ccc; - padding-bottom: 5px; -} - -h1 { - font-size: 30px; -} - -h2 { - font-size: 24px; -} - -h3 { - font-size: 18px; -} - -h4, h5, h6 { - font-family: Arvo, Monaco, serif; - font-weight: 700; -} - -a { - color:#C30000; - font-weight:200; - text-decoration:none; -} - -a:hover { - text-decoration: underline; -} - -a small { - font-size: 12px; -} - -em { - font-style: italic; -} - -strong { - font-weight:700; -} - -ul { - list-style-position: inside; - list-style: disc; - padding-left: 25px; -} - -ol { - list-style-position: inside; - list-style: decimal; - padding-left: 25px; -} - -blockquote { - margin: 0; - padding: 0 0 0 20px; - font-style: italic; -} - -dl, dt, dd, dl p { - font-color: #444; -} - -dl dt { - font-weight: bold; -} - -dl dd { - padding-left: 20px; - font-style: italic; -} - -dl p { - padding-left: 20px; - font-style: italic; -} - -hr { - border:0; - background:#ccc; - height:1px; - margin:0 0 24px; -} - -/* Images */ - -img { - position: relative; - margin: 0 auto; - max-width: 650px; - padding: 5px; - margin: 10px 0 32px 0; - border: 1px solid #ccc; -} - -p img { - display: inline; - margin: 0; - padding: 0; - vertical-align: middle; - text-align: center; - border: none; -} - -/* Code blocks */ - -code, pre { - font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; - color:#000; - font-size:14px; -} - -pre { - padding: 4px 12px; - background: #FDFEFB; - border-radius:4px; - border:1px solid #D7D8C8; - overflow: auto; - overflow-y: hidden; - margin-bottom: 32px; -} - - -/* Tables */ - -table { - width:100%; -} - -table { - border: 1px solid #ccc; - margin-bottom: 32px; - text-align: left; - } - -th { - font-family: 'Arvo', Helvetica, Arial, sans-serif; - font-size: 18px; - font-weight: normal; - padding: 10px; - background: #232323; - color: #FDFEFB; - } - -td { - padding: 10px; - background: #ccc; - } - - -/* Wrapper */ -.wrapper { - width:960px; -} - - -/* Header */ - -header { - background-color: #171717; - color: #FDFDFB; - width:170px; - float:left; - position:fixed; - border: 1px solid #000; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-bottomright: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; - padding: 34px 25px 22px 50px; - margin: 30px 25px 0 0; - -webkit-font-smoothing: antialiased; -} - -p.header { - font-size: 16px; -} - -h1.header { - font-family: Arvo, sans-serif; - font-size: 30px; - font-weight: 300; - line-height: 1.3em; - border-bottom: none; - margin-top: 0; -} - - -h1.header, a.header, a.name, header a{ - color: #fff; -} - -a.header { - text-decoration: underline; -} - -a.name { - white-space: nowrap; -} - -header ul { - list-style:none; - padding:0; -} - -header li { - list-style-type: none; - width:132px; - height:15px; - margin-bottom: 12px; - line-height: 1em; - padding: 6px 6px 6px 7px; - - background: #AF0011; - background: -moz-linear-gradient(top, #AF0011 0%, #820011 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd)); - background: -webkit-linear-gradient(top, #AF0011 0%,#820011 100%); - background: -o-linear-gradient(top, #AF0011 0%,#820011 100%); - background: -ms-linear-gradient(top, #AF0011 0%,#820011 100%); - background: linear-gradient(top, #AF0011 0%,#820011 100%); - - border-radius:4px; - border:1px solid #0D0D0D; - - -webkit-box-shadow: inset 0px 1px 1px 0 rgba(233,2,38, 1); - box-shadow: inset 0px 1px 1px 0 rgba(233,2,38, 1); - -} - -header li:hover { - background: #C3001D; - background: -moz-linear-gradient(top, #C3001D 0%, #950119 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd)); - background: -webkit-linear-gradient(top, #C3001D 0%,#950119 100%); - background: -o-linear-gradient(top, #C3001D 0%,#950119 100%); - background: -ms-linear-gradient(top, #C3001D 0%,#950119 100%); - background: linear-gradient(top, #C3001D 0%,#950119 100%); -} - -a.buttons { - -webkit-font-smoothing: antialiased; - background: url(../images/arrow-down.png) no-repeat; - font-weight: normal; - text-shadow: rgba(0, 0, 0, 0.4) 0 -1px 0; - padding: 2px 2px 2px 22px; - height: 30px; -} - -a.github { - background: url(../images/octocat-small.png) no-repeat 1px; -} - -a.buttons:hover { - color: #fff; - text-decoration: none; -} - - -/* Section - for main page content */ - -section { - width:650px; - float:right; - padding-bottom:50px; -} - - -/* Footer */ - -footer { - width:170px; - float:left; - position:fixed; - bottom:10px; - padding-left: 50px; -} - -@media print, screen and (max-width: 960px) { - - div.wrapper { - width:auto; - margin:0; - } - - header, section, footer { - float:none; - position:static; - width:auto; - } - - footer { - border-top: 1px solid #ccc; - margin:0 84px 0 50px; - padding:0; - } - - header { - padding-right:320px; - } - - section { - padding:20px 84px 20px 50px; - margin:0 0 20px; - } - - header a small { - display:inline; - } - - header ul { - position:absolute; - right:130px; - top:84px; - } -} - -@media print, screen and (max-width: 720px) { - body { - word-wrap:break-word; - } - - header { - padding:10px 20px 0; - margin-right: 0; - } - - section { - padding:10px 0 10px 20px; - margin:0 0 30px; - } - - footer { - margin: 0 0 0 30px; - } - - header ul, header p.view { - position:static; - } -} - -@media print, screen and (max-width: 480px) { - - header ul li.download { - display:none; - } - - footer { - margin: 0 0 0 20px; - } - - footer a{ - display:block; - } - -} - -@media print { - body { - padding:0.4in; - font-size:12pt; - color:#444; - } -} \ No newline at end of file From cdd74d2e71e4d074af65019fffd4b14025c18997 Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Mon, 20 Jul 2020 12:15:23 -0300 Subject: [PATCH 05/26] Delete stylesheet.css --- stylesheets/stylesheet.css | 425 ------------------------------------- 1 file changed, 425 deletions(-) delete mode 100644 stylesheets/stylesheet.css diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css deleted file mode 100644 index 3da3485..0000000 --- a/stylesheets/stylesheet.css +++ /dev/null @@ -1,425 +0,0 @@ -/******************************************************************************* -Slate Theme for GitHub Pages -by Jason Costello, @jsncostello -*******************************************************************************/ - -@import url(github-light.css); - -/******************************************************************************* -MeyerWeb Reset -*******************************************************************************/ - -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font: inherit; - vertical-align: baseline; -} - -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} - -ol, ul { - list-style: none; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -/******************************************************************************* -Theme Styles -*******************************************************************************/ - -body { - box-sizing: border-box; - color:#373737; - background: #212121; - font-size: 16px; - font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif; - line-height: 1.5; - -webkit-font-smoothing: antialiased; -} - -h1, h2, h3, h4, h5, h6 { - margin: 10px 0; - font-weight: 700; - color:#222222; - font-family: 'Lucida Grande', 'Calibri', Helvetica, Arial, sans-serif; - letter-spacing: -1px; -} - -h1 { - font-size: 36px; - font-weight: 700; -} - -h2 { - padding-bottom: 10px; - font-size: 32px; - background: url('../images/bg_hr.png') repeat-x bottom; -} - -h3 { - font-size: 24px; -} - -h4 { - font-size: 21px; -} - -h5 { - font-size: 18px; -} - -h6 { - font-size: 16px; -} - -p { - margin: 10px 0 15px 0; -} - -footer p { - color: #f2f2f2; -} - -a { - text-decoration: none; - color: #007edf; - text-shadow: none; - - transition: color 0.5s ease; - transition: text-shadow 0.5s ease; - -webkit-transition: color 0.5s ease; - -webkit-transition: text-shadow 0.5s ease; - -moz-transition: color 0.5s ease; - -moz-transition: text-shadow 0.5s ease; - -o-transition: color 0.5s ease; - -o-transition: text-shadow 0.5s ease; - -ms-transition: color 0.5s ease; - -ms-transition: text-shadow 0.5s ease; -} - -a:hover, a:focus {text-decoration: underline;} - -footer a { - color: #F2F2F2; - text-decoration: underline; -} - -em { - font-style: italic; -} - -strong { - font-weight: bold; -} - -img { - position: relative; - margin: 0 auto; - max-width: 739px; - padding: 5px; - margin: 10px 0 10px 0; - border: 1px solid #ebebeb; - - box-shadow: 0 0 5px #ebebeb; - -webkit-box-shadow: 0 0 5px #ebebeb; - -moz-box-shadow: 0 0 5px #ebebeb; - -o-box-shadow: 0 0 5px #ebebeb; - -ms-box-shadow: 0 0 5px #ebebeb; -} - -p img { - display: inline; - margin: 0; - padding: 0; - vertical-align: middle; - text-align: center; - border: none; -} - -pre, code { - width: 100%; - color: #222; - background-color: #fff; - - font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; - font-size: 14px; - - border-radius: 2px; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; -} - -pre { - width: 100%; - padding: 10px; - box-shadow: 0 0 10px rgba(0,0,0,.1); - overflow: auto; -} - -code { - padding: 3px; - margin: 0 3px; - box-shadow: 0 0 10px rgba(0,0,0,.1); -} - -pre code { - display: block; - box-shadow: none; -} - -blockquote { - color: #666; - margin-bottom: 20px; - padding: 0 0 0 20px; - border-left: 3px solid #bbb; -} - - -ul, ol, dl { - margin-bottom: 15px -} - -ul { - list-style-position: inside; - list-style: disc; - padding-left: 20px; -} - -ol { - list-style-position: inside; - list-style: decimal; - padding-left: 20px; -} - -dl dt { - font-weight: bold; -} - -dl dd { - padding-left: 20px; - font-style: italic; -} - -dl p { - padding-left: 20px; - font-style: italic; -} - -hr { - height: 1px; - margin-bottom: 5px; - border: none; - background: url('../images/bg_hr.png') repeat-x center; -} - -table { - border: 1px solid #373737; - margin-bottom: 20px; - text-align: left; - } - -th { - font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif; - padding: 10px; - background: #373737; - color: #fff; - } - -td { - padding: 10px; - border: 1px solid #373737; - } - -form { - background: #f2f2f2; - padding: 20px; -} - -/******************************************************************************* -Full-Width Styles -*******************************************************************************/ - -.outer { - width: 100%; -} - -.inner { - position: relative; - max-width: 640px; - padding: 20px 10px; - margin: 0 auto; -} - -#forkme_banner { - display: block; - position: absolute; - top:0; - right: 10px; - z-index: 10; - padding: 10px 50px 10px 10px; - color: #fff; - background: url('../images/blacktocat.png') #0090ff no-repeat 95% 50%; - font-weight: 700; - box-shadow: 0 0 10px rgba(0,0,0,.5); - border-bottom-left-radius: 2px; - border-bottom-right-radius: 2px; -} - -#header_wrap { - background: #212121; - background: -moz-linear-gradient(top, #373737, #212121); - background: -webkit-linear-gradient(top, #373737, #212121); - background: -ms-linear-gradient(top, #373737, #212121); - background: -o-linear-gradient(top, #373737, #212121); - background: linear-gradient(top, #373737, #212121); -} - -#header_wrap .inner { - padding: 50px 10px 30px 10px; -} - -#project_title { - margin: 0; - color: #fff; - font-size: 42px; - font-weight: 700; - text-shadow: #111 0px 0px 10px; -} - -#project_tagline { - color: #fff; - font-size: 24px; - font-weight: 300; - background: none; - text-shadow: #111 0px 0px 10px; -} - -#downloads { - position: absolute; - width: 210px; - z-index: 10; - bottom: -40px; - right: 0; - height: 70px; - background: url('../images/icon_download.png') no-repeat 0% 90%; -} - -.zip_download_link { - display: block; - float: right; - width: 90px; - height:70px; - text-indent: -5000px; - overflow: hidden; - background: url(../images/sprite_download.png) no-repeat bottom left; -} - -.tar_download_link { - display: block; - float: right; - width: 90px; - height:70px; - text-indent: -5000px; - overflow: hidden; - background: url(../images/sprite_download.png) no-repeat bottom right; - margin-left: 10px; -} - -.zip_download_link:hover { - background: url(../images/sprite_download.png) no-repeat top left; -} - -.tar_download_link:hover { - background: url(../images/sprite_download.png) no-repeat top right; -} - -#main_content_wrap { - background: #f2f2f2; - border-top: 1px solid #111; - border-bottom: 1px solid #111; -} - -#main_content { - padding-top: 40px; -} - -#footer_wrap { - background: #212121; -} - - - -/******************************************************************************* -Small Device Styles -*******************************************************************************/ - -@media screen and (max-width: 480px) { - body { - font-size:14px; - } - - #downloads { - display: none; - } - - .inner { - min-width: 320px; - max-width: 480px; - } - - #project_title { - font-size: 32px; - } - - h1 { - font-size: 28px; - } - - h2 { - font-size: 24px; - } - - h3 { - font-size: 21px; - } - - h4 { - font-size: 18px; - } - - h5 { - font-size: 14px; - } - - h6 { - font-size: 12px; - } - - code, pre { - min-width: 320px; - max-width: 480px; - font-size: 11px; - } - -} From 7ee4ca1241bca3318964ed0a47816e37ff3e999f Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Mon, 20 Jul 2020 12:15:40 -0300 Subject: [PATCH 06/26] Delete arrow-down.png --- images/arrow-down.png | Bin 216 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/arrow-down.png diff --git a/images/arrow-down.png b/images/arrow-down.png deleted file mode 100644 index 5c55c6a8c9edfaa47379862d770304c36c3ac7ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eW!3HFke0{SLNX_?jaSYLzn4I9i%II*Xp^aIh zpz+6!8``B?P5)0c^x#?E7OdXC_y6D5zw1+Ygru)Ji1RWzykR(WyifLD&pJjGw#n?P zLqkH=Y}vm3H~*pZ^K<_6Lqu1mGH{74&_2}6eISp?=$Y`s3cD`%ef7U Date: Mon, 20 Jul 2020 12:15:50 -0300 Subject: [PATCH 07/26] Delete bg_hr.png --- images/bg_hr.png | Bin 78 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/bg_hr.png diff --git a/images/bg_hr.png b/images/bg_hr.png deleted file mode 100644 index 514aee5056a320b059a4b92fc31385b01f3fd707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&E!3HD~tNk5798VX=5Q)pl2@*yR?(8i7?>Hmz b1S7-U!)%xJ1CQbP0l+XkKg_jic From 43e2116ff40a46d20eba9f40ff1abda3285afd03 Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Mon, 20 Jul 2020 12:15:58 -0300 Subject: [PATCH 08/26] Delete blacktocat.png --- images/blacktocat.png | Bin 463 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/blacktocat.png diff --git a/images/blacktocat.png b/images/blacktocat.png deleted file mode 100644 index e160053a5bfc1f1891c5df1a04244b46132ed91c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX3?zBp#Z3TGW&u7Su0Z-f>EL7Xu|Ghaf+azI z!3+%h6VAUEXmGf1FkfMPe?Wo5`wP+x42q#I?$ zCZCHu*mLc{mj@jVb0qJie|tLrXx$RV*xy|DA2&%h)(GsqVy%>MraS!Shm183{#@F! zV^vm_@$^Y{GUuI-cUN0({K+A*SMX|j#GmyK98SEwQl?dz*($XqK|j>0;H2RlD{}=; zx7!XPy5}bEXEt-@-@Ngc#+nIgOgm!u=S(u>E&hLN(cd}Wb8P2o&P?9><1zE8l8pz9 zg==?S&3yIdUhdL~<_mg1Y!?@vTUiymeaGcy&vRcbOG}I6uI`9fxn}VP_6h8=I%b0Z Rq=4be;OXk;vd$@?2>`O9@hboT From bf1e6d3f1184cc077967ef6c9600b93ba33c993e Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Mon, 20 Jul 2020 12:16:08 -0300 Subject: [PATCH 09/26] Delete icon_download.png --- images/icon_download.png | Bin 216 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/icon_download.png diff --git a/images/icon_download.png b/images/icon_download.png deleted file mode 100644 index 5a793f17688b22d0c98f8b32855f69daff65afaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3^F3W0Lp+WrCrGd^PB3WLTm5|# z<3>ZVHGbLMPaA&Ni`7(Ic@)^~t}9m~#>{KX@F?FxM~Q7di>SquC^@HPOZ^)nnu6w= zPs-5Ln9{RS^v!FJ4Hk1|eLTx~WO~PjEv;gjQBoc84>y)53m9M4vW{f>=&v)a$*Fn% zwMt9Ivq1qGD=w^dyuiIx3lB69mQJ=Ex6cJ85q6@e`QPvJEsD4 ODubu1pUXO@geCwMBTRk( From 98cc264797420457d25f8229e19b26169f3b5ea7 Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Mon, 20 Jul 2020 12:16:16 -0300 Subject: [PATCH 10/26] Delete octocat-small.png --- images/octocat-small.png | Bin 357 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/octocat-small.png diff --git a/images/octocat-small.png b/images/octocat-small.png deleted file mode 100644 index 57c1e44f9b67d2dcbbdd1a7e0f2c24549c043799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmV-r0h<1aP)|_uU`DGt*!YlC@Am|DD>an&JK*_ z<>mi__UCKux;y>4Pqor7j|)IU*M9Gw z-IGbu2m_ZdUGO1GBT$h55cdP|c_4ld#Or}LA6*>)0_L))J+G2e00000NkvXXu0mjf DP-vTT From ad0f4eaaafc1bf628d7fec1b3c534aa99a0debbe Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Mon, 20 Jul 2020 12:16:26 -0300 Subject: [PATCH 11/26] Delete sprite_download.png --- images/sprite_download.png | Bin 14832 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/sprite_download.png diff --git a/images/sprite_download.png b/images/sprite_download.png deleted file mode 100644 index f9f8de24c1c49ce421a44ce2a24ac22d045a39fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14832 zcmVT7`_9bS zGy9om)?RBR!dAHWW*_tXQwl(6h1e+?gcKD^-i|3EJ{A>98ln+WM4G`Q(TpQ08lg@2W*dNu z`wYPkQ--~aVh%`9umIwmOAssxCj(K#qJbKu1jKBGuJcgoT)`Z%KUv(qL&Y z3y1_T0eMM+&Nn~;i3=0ykkF%{Lz_tHu>lwNX+rFb8u>t-ytpedYYWnXjSvk$02B~T z7G^GFkqC68e!k$ipY|MkCZ5fLZa5L#JG+=IIiVICEVZOKSQ=x4K?~Mkl1VSZ43Vwa ztwf#hwg@suwF71(6p?hVG3tDtBt#Ne4|Kp3(J5xfuQsf~&gSr=*)r6~VipyM!M$;8v9!#)AH0>_ z2R@Ck4hX4-eg>k@E)@hSSn@0Qec7IR&|)b*)_^HT{`(N$|IinR^P|8FOM*zhxSAOV zkPHBAjZ=VXZ3g(7^L-fxu|h5E7b%Q@*$82o+rNGr>u>%H8g_xb%=`uebAG?~{`;99 z0SyVT!h}~2jIDueDdyPea8=9#an=&M5vgBdyt&~}W-GAlcG4E%n6;P>`Z&hM|jc^`lL!Cy)72-uVqJ2V()3b9LMR7vYr;%+vK zn{yJFs~P>wJ+q}2TZ9=)?AX79(Ci`gnIO={iOzr51ZU*_lH?k>FSM)d*tZX}C$S{N z&f`5SW)mwQB*p-(>N0dV;m_VY9MjoD7}!xwb?XoPQB8Mh1hx0m--fq zV^UmN*m(!vIFP%C8rcKXxe__Ht3R7%n{Qs=oQvMcf%iPjKY#l;+C(&TASsvmz$n5F11t3hQsh!r49h@3 zB==QgYb|1AYnF`v{QWS~!&A&=h$xokxbS*BWU~dY9(vSaMj_^~1S})6#@-wDuF`~5;{av=AoFc;wAS5yx*!rwnbf_7wezoIym~d3>V%}eFNv%Z ztgU0e{H)Q+Zr<{d`?>PYKa=x7)Q~(+kKZef1StYQoO=Q#*|Q}8@0Uz?gU{LHsGg&t ztacaxVPuFZ^XCr@iPdlT`PY8T;eQ=2-rI;Bo-D4gVd$ZaBHDO0Lza2#r>7l_J5Bxs(5YImGG^PpBR8(VZb3teC+#M4@5phAMG~&9CUcnW&e}#5=FLCaR3L~)O zqG={j6J8SBPctd`WjFr}x?udd*^`9PI@>Q?U$m7ZiTb#H>TB4HobqodiTB@!QTYxV zZM2kjNzAu6u=QYyLA{#&{W9RIhH3$$$F<`L)8*%a5 z@1vRQ#S)an)d>hdeP0q}sV2RS3-cz{pUKV1g1n}Zth%lC9&SFjw`D8IuIJUptxmqS zoqG=l?%t235k`Y7_*3Fs39aA>qL358*a;#5qy;8ieA5SLmrlg*Yy2L(cORl7j8Obn z0HHv$sdpwRxOc_|8$3sO>a&%Lc2p$gF?C!0obp6YpM`!7<86Mb%a{+G!0X8Sa9@PXSVy8eXpH66fQK~I4qFuh| z1pL0nuV};T_g?}$iqK+oY+H|2Igf@K8uI_w2v`bWPPoN>usLRuU!*|kO@vI|>~OA^ zZd_7w)Th=4gRrT`abm$qwnUBUlUtA3xTICDtE~O{oNjq@A#b)@>}JfL4?v5h5wY*l z5J@NyJ<(nPuwf$v2);2kMr1!bDZBX$P@@bs4E@~ zrQ3E-qF_pjE@n$DtLLupNXQ@z5!`zp>RrVlxta~dcW6&~&EIo_ghf$vM#5LaHdBwfY>j{;Q z+j-f|TyV{|`RM~cZ?((4d+;ZZ5W3@xD$Ic zj_HqPQP?29ZK#b40Bv4X2IJW)BZwmTUONF+4?XSlohvbYCc_!i8~bDs$~sb1AUsE< z24TS5KpKzc*sDkQ4u@}a4mZKCt4y|>)0~r-!WjPO*CqWFN~DTO3S-cVb0P-5@0I&= z3G}V^S;T83>y_&>QS9?_fB71HHdO}5{0nvk1k8Y9J9g}I4-BcMg&g#c`S(eX;d3O$1AnAN_fAt>GgNK>5uN*EtpQLrH!-mSBq=DbJvzYAOn} zKA$){+-iM9X}ieT2b@xcGn4w-xL-SfL*qNb7a`I*t94#nv$qV`+sMe&t3E0C2 zP9Iz=%X6B)A(ST#pg_t1fB@X!h`8ZG%_laUY}uVNpWSw`0gg~)B=<8YKs-FYBYg9` z3jiC3zTvb8g8T}kqm|$TDcC-kQt3efd4H>U{rfb(;c6o`UpFkvSf>bpCyD#DyA%L? zyF=kS!WXF%d};jXlG7%8)(aQo+z+|<9=UzXm`?%JuGZ#JCxl67nrS2G^#Zcoo5?nS zmYp6&(!5|+#A<1B3=on=*&X3~T=xwKB)l#yKi;pFyl( zaTg;)<2%B)0KWXPC7vr)p-cT#Ul_V)fptN(;OJZBHAurZaUAM|$Ru=vsDRmPcpk?B zdIRgI)8X5rI*iQw$c(Wx4SBaiBnZ4zvc$Q1&dPB3j_~b8e7hjqVb|s0jk?y3@w*2D zGLwdan3`r{>E}UGp4fF>oO9t$j5fL|3C}C=szjP6lqteWLww^nG`=HzGko%}umb<1XtbgIH7JUXb{&=t6l9(4rQWbQ3;LF; zC(knU^C47TXP~jtp64!g@_+Y~hR@KeJ#Wi4I&_SLs1Th(l0$3kSj8?gvtM+F!gqvk z8uNGRI6l^7!MBB_%!jVUf=)`$vsB0S<*lb7zwpM;%B$#{1#X+lut~)qDO2F(dBw?^ zTBY5hPMc(7r=fdf4&#K43nm8O8@I#aJHofupDr+uG$K-UnOV<1Oe~D^Y_)q};@1ZX zstxxr2^i8P@|@R*+FjCd;q_Xk#}@vqF?CD^e+SpIm?U|~<~k@H$y>(O#GsD{-x0pO z8egz<-XlBrWlRyMWC=RKhG zSu~FgBPsLPA>o#7)I2iu;hx5w=aZrF9pRfrEV>oh4jbh_x0!Xi*2BilwTmQM@Sz#f z@w`^rVAu{V4rpfU?Kj(Qe&aW2L!yZl8QGvrumzOm8mpZ zhpdB%=4m+cKLk9C@IB%9X5sMOxlr;U7HmT^Y?pUq_g0YpEt|N(dTgzohkVOcnfbi} zobIdm-COhg1c=&+-lTVp#WqjmL270<)N%ENSvYzS6|bB=-zfyHpU zjO%kPX<=xxhAK5!8iNF_c1EyuDxe#KRPn)W9yCzq@x5(6hu+6`V4P4b}ok-`Y!q@>!jG~WD-01TkJ3e-0K!?qxoSU ze_}aB8A9zfyOyzU>rtG!#9|N5&p!S%%B*Hz$0w1GWRWNBrg1yMcNly_Nqh$@w2r=D z7#G8h{(>aU%fG5Yud}w0v}<$OKr5yVW1qi6@X3~}B#akX|+g&t06TbVa z)#2-J3t`9X*7?6@^Fg3BCcNtGs*@g&`#3+gl2Jq0E20smglCw~CX8FZb;;oEUsLS7s1Hi}Vg>p-2l|Nr%U} z3Z(_#Is*!}uAAmpP!z1ePP4Pkv^!OBt?byfKQi;_)&5WRXrnX_Oz3L&MOK8~(aiti zTTD8}qI*YDT(<=HQcfnmirxPm-?WqJ7vBTo(BtsDv4apEz6R*RF*I+uvH^kPxkhI} zoEBaqK#4SrJh`5?d5*VSJriztX>jHJUyoTLE;qfQI{xi%oE1Vii_8^1|9A)=d0hyX ztPWw@!4Tf|#SjkuWY%`$^1>xWDD!TkGTV?-(hlL!u88kk#COG_;rreW50voP zcg*zb`Y#V|4I5rD6K;Ba2(Mlj`ht3Y`umkxf^t6lt_sZC9t+{pHKCt(-OXaA#YG$c z=&ftR+g}#KfevsD{Wc(`_dOlLC$9~zeBp@@?s;%_ete6pqgKRVhECuVW@Y7tcQB#4 z4C7|u4|P6#@6>i3YMVJjxPCBQ>_*@7W+StF<3y~Q3}N#{!Id>N5%Txnmt!<4^FXP; z^2;Gy^QmA(zlJU_AyfxeM2?L`W8O#Fjm)!n_`=*keJH5!SGUKVGiJh_zk)OIct^~$ z3i&GKdtlcL{0qg#ZKL0PGnAPa!?a;u+z0z^oA7tVSFkG?MXKk-v<5{vL;(22RL>3k zTVTCU;3+oHud}fHIHZ@)cSLj^gOqv45A(jW#{|ZJV7ue#z2Xj6$%4D?mK}YDp;BLT z@wD%xAr&bYgllpX4NOw?fW&uvGF?o3-+kMT@WF2eN?7-?*=R>U8LqEc`(xjYdH!xT zT=N;?Qz7MlYw4koT;w@_g=xvFwjN89w%%K%r?D-uU++yyDv zwbmcN36(P6`sK&_FM^FmOixb-%I6-hoz5rJ5q>Vr&d!Fd+h&jLA@2=nrvdopSyMQ4 zOefIDhz^-2s~toe0#fIr@iTh)pL@+tgXU9~mSJ8QVR9YIQ_j7Nc3Yo0zW1M7g9=$`S@cnjB+Uc42_YhGUJ(OhM08y8)qt0fu_dM11uk)tJz^0 z+iwitIpw-*YU4H7(X_Rb?vmgu^1iDolMHNm%_kq{fD0A6dM0~p?=3GA^WZ#~*eW^l z%}if}2og;Vm>(>o0pB8z_#V3^hdA1TlJFF#kS49v0?N;YT*FtfN>Zyf~ldvQ&hQQw;S!r?XB>dS4;=W_Gg1e60oHbM!dAtV~$~d|6j}?ZvC=?*Ew@SFV-87ky%-vTqgk`?ZJq1%sBvH%x|Z%@ z<7?&1zc~~B^m`#Zu^-q~39)KyRe{Yh7r#M1Mul(>IE+x{7`lt;rs+OzR;JH6ou)>A zyX%8EK&s4~JO2H#`S8s{?`W4{yQmKXqa3<=QXS>!^=xccBMb9J8)T4!3CCnt{W!E~ z@ofHQB#xx(8GN=;85jm5|aLS69C?f=JCry5a?Ar@)`NF@fY78~E& zAFtSvk()E7s`^s-U=CmagdsJux7ySwTiO5CZ$8_1yve|C|7VM@5{H9-6TW$x)gKr0 z$ANP>PUtPag;gRvs&jOqFmC{Kojq13p3=M!7Px|=4*RxxCk zMO)CBEMwmMb+yr@i+TknnMB6)1x^(>qgWjuM#b{-=lbH=PFbWIMGI>gso zbbR;E#z7*9n#3r}%RhN$xahofeZ_wEsmJ(2^b@XM_d8qcQo8-bkwTU|v+lJ1%W>n~ z2SEU}>2exh1lY?lJ}vXIb#l~v_;wD?4QFz2hFFqS4h#QNlVwkW#Y8~KFshh3+U2hm ztRrDMQ%eUJY~$Nw++UZ_Qg3|T|N7L+g)L&kZ`~g>45+Jh@_t3=9_m$bQYf=XdZe63 zr(Zbub`LWaOpJ!c7xpnsiHCNtj!eC}Z+cK}|3TMII$}8s#kY*lmvW|^CoOecXm%hG zp;%xK6GL=TxD00atIpeQi2y1CX}r~&@urJ%lc||U{;wYx+x{0+Y>{|BK9_A+b(V;L ztzYBU(;b|J(MF?N}bz zDViWMsKe{jB+z@Nb456`r^|30Ob+0wVNrhhO_L6DqF+q-!lZcl$9v(zOJ3TKjyw|) z+5g|OI-%_N@zqt62AUkLR%GR}Y7{Im-5%>!ll;rJ%K~}N2N37AyCkq+1MPC0`3#nQ z2%uF=CbLL4^V!g!&j5BE4DGgcv}(`?2}Y-b-5M)EMxkA1g+L*{ ztsu9wuk3v+2x=d?L%JEG;~RHV(@QHVjGuA{l;(mD&?;ki`NgS$XZkEZ_u54Sd9o^}j4> zSr8pOalzC1&wi9ZXQfd|*yw&FK^-YRn|{uuBV|Q?u)-{ffQQ=LXjg2k!?nv#$1o+# z5`^q_F96>WzIl4ES~;oI&}aigx5v>C2^1P{L}cqU{NRiCg|l9^CE7~sW5F%0tOotv zZ_Kz=+sK|L8+b$85bXjn>E)EOtiz%WXqkl#JpZH~D_TE)ReEEtlt;pWtzV9rdNmOM zzXClTmMjn{>#tV8=DqOfKi(JCUixrU$SZ*_@R$3`^9q(aDU18|JlR^;)lhtS4e?zW z@tt(=Wxa`SdjjSApHaz*N{TO!#kS^ipzIR(#+j2}!AL;dPobMpSFvc1#G$#0&+3ct zbxK0B0}f41@oCuo$bqoy2Y(*cUiR}Ll*{7pN!;>(SX+fnj`gN-d1BvOeF>PaR*two zF=ZN{3ws_fnKBdR5l18KJ0YC2KA;XL!$?)uSiCMvSw`K6CA?$*Ga{c!?EbNXPMrSP z9xLK~c7}WZ@+-0IP9L*mERXw@Qp21;4+xBrX1@X4U}t9$#$I@O%igf(@lVGI_P_8v zzC}#pL}|35j48AR<69z?6(-{b->k;B<=~q}e4o0H_@WHKH?J_wQg!f7bXPEhuFv&*_ni)qguEY4Bc} z?nK>d#6WhoGQ9~bT~y3h1V)p?8_=+T6ki^Dlg))z+tW#Dgb6G2LSte9y zbmJ5@#!$j8{e>*L8WN82%t@%6Xec&Fz$$Z;sJQOD1DGE1w^qytyjxJ_SYBmAkHjuj zP*f44yy_7l6+4%M6&hldI-P@ET$>&_z^0c}Z7o9=C#WG>!zi{4*)N7rp&7F;3iM_G zz8V!Aq|Bn!bv`>cJrM`>(<8F=x`_6DOscUWhUTmV*FlsZvWCi^iu!-b4vx6Yll`82k2C`1b-=%xmci* zA1~V_Mv2GkG+~swbs|_=@XccCVq2$N>hx13V?zS1U{BU*+_JTHpF=QSDGJ@I6}elN zlVK|+NV$lt+@43l6M4ZBxpr7(Cbr9BnyQt0`~)j>R%6?#@7WRjS*I6;LMM{i+!|J1 zzG>5@pF8u+Gd~db&n(L_!I$M(mi7I_@$vEgmVP6CYqcs}$36td2o&Ubj(z55-ZDxj z$~|}8b=M!na*sNST`qy?Q3_6C_emD^%@E%5?}1&nfmzN zefQlrr)g?U5vJtDU_&R8l$inc)UsvEPP^{9>pr@2<;q_ofY{c+go%j>fMz3I8Wgd= zV~fN_;BRQaJzKVHdH2?>TQTc=u4a`?!Cz!Bd0cSo*`Px_A8{V5nR)rt)YO{In>XJY z@%_b!4xn_oLj%+A11MsO;t5&Uvpj-fu2@t>n z&^#unDi%g?e;10Uib`iSN$wKW9t=5#LT6dN9@Lhv0c+c@fN~Z28BNDwA0Rv zxSW3y@#Sx)#(P~HPyH88*Uyr^K%7H91M$t}{9u#Abpl11k)o+F6T7_&f(RKvz_YBu zg!4>ZK5i%1tXcD#xce}QuX~7|!+u3r98qOXjWQ?3(Q1h;%B@PvnsIen8S%YzY;5ep zlZY?Nn~3;gg^VqNZxNPA1YcrIo4--1lO|I`%#39O{G4;nIdA>?_3u69lv6fa+e{h4 zfT($_EoYA{qhQN!ardK-K6>-6UAul9^XKt=itM!=Sk~8IKk%5+z))^C-Nbef-V-Ul z(B**x2cGM8yPev;PuYXGW|7$6qRb$Q6)~N9?z!h)aOIU(zAxhYmPNo9HummE9(m-W zyLa#25zloEzIs2!j=v!di!bx2@R}mN(7^Xu;>%l|S!~#_;Z+geP0N=re{Fo` z#ljbLIs28beB~{dUV7#Gvq3j4}2Kz{?EE|E9B+vwbpz#`PaW7k8mV@&9&%pcfTIMyj zr~;2N(WtmySTY4@8+)Y>0BnC6|0EKEnuK zAK%YJd_NvSI8IcIlJ{1oKqI+qrsfOkVi^wG$f`HQ7ycifeDcYy3v^l&>j<8I{`v0$S&Z=Y z@r_ZR8!o^6^3OjJr6!9OFc#lL6k0-cRAwZAZ6A=yKAhTb763hGE6Or>9J`o)aT}Kfi?DIEd@_y~+5%WXMcIrEqHJVjeD&(ph!*Trb|&}@_A~H($p~K; zU*;c+(XLCdykL!4Dx}d6>#gy0Fld@~b1V6WF>H$?!n>$6>BKN%;F z`Pe-YJOHcgp!TG_r#dJE5J{O$^Ru34SlpM5%LcG)+Ku%!PBdBCFo_*(krBaoeLe_Z zJ};j$I!lVLuPkB%|CHj}tMQ%W=q8dzJjOIs=M8bMh_Y|rzW<0f+8zt;{}vw#DT&94 zFcq~D!%+Qg9E8y>OYK38kCp_Ni9*2Pl<6C)_R^on{qDD+&fdiVfyQ&ct^zDtCuTV(QRcV85v3%?cd-Q0}t2;b9B zKYb(cec*uyz7Un0BbseX7;P~#bi`_M@RS)g?=N6XY61kZp(R$;lTVo39K5wC4eJ@wRfYv;+_ z2;#dk;`@j3nuXyz!uK?Uj3d6YJ9qBf#vahd_*)J`w`_DHnhRIsVQq*9i4SgLh&1LY z%wrlwyC7bpjsP3PeZ#d|!yBxQigtfw5PLoE$z;K1vU4b$a2m_BjXfEedLuA&rhTf( zF&@o~SC8-=4&Ue;ZmRv1F~QY$3QcOqLdJO`TN&%s8qf$b_Zzz!YmX5CdmcdQY%(?! z8^i+1-zCOrLu>jhEU$4yP1%LNS=&|aIVBVGk=#M6c+JEJ-=XkDS|%Ts44w~7R*Cjg zCl@d{rxQLbl;hnbR@1v}>p>{y$nASOlAjMwUk# z&t-`3D_T zIWx*EW$uO4SB{4k%$z6r`gW>ezLRg9FTRh}cDI$^cD=0{On47oh%i0OuvEr;FDsMD zvZY)d?ge~?Oo;w=d!GoL;g=5qD-d24&{zZJ~ z&_NZKhdF}R-+9xD|N3BfKCj_m9!o1(*2*mFgS8_MCg5bshgqz)VZM{^nq$p#Jld`j zicA350RdJCDI1W#ZP|hcOFr&3I0@m6WAUF}j+FxDnhLvoz}R-=xp8=Z!r9D>4ArEr( z%660QKk{WAIs=Vk&5GdcNL*Ax>?|M3*6OR04<|WXmEwe_x4Ok8UvGmqgI-VG1O3oL z!3RhldI#6ihWSpuXXE?2%5ld8#~YQP+y^ah;j`-ip5#BCgFXKE2)zh_66}+YoiNlo zOomA}>VTsS9l_z}=jUi!?$^XQ(C$}!C*Qq&pF?~fS2=tcGJvy2$ed3X<%*7%gM33L zJx7^`bymM36qO!`pb4L$E?doF{g;9s?saSr^YQt79Qfq>yL`{sTd0&{B!`w~*_t=F z-(B$MpXKRTjZP(p3#dy&g^SD7F&Og%#;wPf3@>3UAcYx4%Py~^{&7~6N^&iHf{ zJad^xw>Fo_cZl!4HXEH3-d5$<+J#QvUc>Mp@1egbBnrMvZBSrC%>aw@f&-z9Pn=4T zOdR+*T{){hXvh^TgnISG(}bhhmvfPdZ>%g%zC(OZ@a@;3spV)5MBMpL1N5)%P`}FX z;-EPbW(aiS(kpen%(YnD=XtW82uQgf&(9`EypGD82D@ih=sqUj_k8OQ&E$puyEPPQ zu#@=~H%&U2Y)}G7m<(CW@p!|sP}TV|XZf~se;eA#%2R3k5XK+9G{aW8g6}^0zUMpa zp`+#(VKD$_t3<`O$_Sb8)AQZvRrr>(P2PBemBJ@H|DBrxXYw89 zdp%7#ZbFZmU)26=z@>njaH=I+yLkjqP8tYK#=MUqj9vz1B=$A$4{}dxFYqud4!fu2 zh$_eAJIq&BKhQL!9EU5WwD!*LGt)y*JkAM-8+5V;uvTi-GjZgAX5J3fXO%G=GUtSq zGjQg868JYBlkXVcdw5|*b-o5RU|;?g`FF@1Dy57JH{J$;@C~IGVR%Iei8mXwAY&HexcDsUj+RQV=-A8Om zH+9S*LN1^Fo4@cK`qlg+aB{E1RXJcr2wo+|>H_tV_n zIA|93m;_f6F?W4eiV>eRb|)lr>zecZR~0aOpwNc|03`HJ@QcBm&*uf0&1O&Im-{+? z8^3{-LWFC*e?Fj%(Maz~o?h0gz>r5hB($EfXi?8$C6f#~>SOl@4c|A0+VOalUau#> ze!tf;s?`&yG|_fL=eYlkWHw(pZa>AZ;+gz1?*510M_wiLKP@>BWg3>ko5l*Z(;ZVX z++zg*c3z&HzN`YoO{D&oC#HGZX*-+EN;;huhS6x`)z9T}0*uFF0SbkJ0PFSID+`4} zaz3ABI2_99bh0LB_k{!J@0@VX^YwatIlpM1<)qPQcx_!Q7Wmz3b1W7U;BvX(cPvZ1 z=d@Za0amM(L?RKdZlzMOgWn62!RF)M>)--Q_(p< zI2@L0wJPm)+x{PrrnU`e+&zF{1-yda&sXw`~=dZk9v3k4u=DN zqujX1#Fa`V9l)rAzsFsli!|*MEe8m{%H7=x-Jl*T0>U5CsWzceDN+V`=D{H*abT zRfJfDYm)dt>V^}_FAj~f|n6xsyX$FDhRN0 z+}c01%H6wn5$2mcS7yp89J<7SMoPb0bkWVnL7DUqg60<Q6s%YB*Qd-DdadVkRP)`~nr zqGZyR*REYtKg?=Xd!^>L_TooNq)%G5hy)s{A^PFi2fkp^WloO7_lqGMPr*q!wY%{6 zbXdva(>(LTkMi>3vA`Lmld%MVNp))R;K2jjaByN#ji4lTe=OWioK90PMbmQlVBJ9N z(oZ@>VH^g&NwqL~`H#XELF7B+2FV-f%9ShNyRbL7L4=PF1Uj;8>++o+Xra(y|&u z1|$CeTeohd4I(_{5?tIw@<938z{7_RTlkV@ZMfTxMwtx7Q%Pm=69Qz?^MIxRe1Gkn zkMCsYVR|>1z67L?&xX-f_V-p{j1X$KgOTu$P7jkCeI z(db8Rr3u(oajlpC3ci|w@CAd}%J|9^Cn_N&AWiMd?B&>Kj!jPcUC}>Q)VI-+9+p(v^3ur2m+q4$qY(ISdyzZ4`pv` z5={-$l{3EG51m-HvL}5~_)0TN14~n@Vttr~xf@!Q@oI^~DV~lt z&&{S}_@%d3iD@&l&F=$vi*6*Ho1Yo->l)vs`0Dk(@B-hV8hWaJp&RPp)vH%eOXSth zvPvax`TQ0{} z$5E{Q{{H@!XsrH9a_9!#P`k;?moJ~5IB{aT{Ex4MZ|QUFc;&&G=@CeL!O>R?!K}ue z9bcZStvo!(j~`Eb^&1l3#r2~Y?{$2WcI3^&=g0|k@WUM6pOnS`p$5l34L#<$3v>~j zz2dt1p*YvSDFben!N+Q=5-y=J&(ocg1fN1Xz61Aj|Earp)ECB&c8{Dqd2)2@*s+}M zXqz`rb@@1^z;+44PT|knno*$WgzAoSfrmF7(-=>DH zY3VMWtCI}?=fZr(K&x~i)Ll}JCWofjY$$9~QGBk#3^suehIf`a`=TNgag{$7gE|k{mg}?%i7$7{`0-61Xi*;PW?P WAV6(21mh6^0000 Date: Mon, 20 Jul 2020 12:16:41 -0300 Subject: [PATCH 12/26] Delete _config.yml --- _config.yml | 1 - 1 file changed, 1 deletion(-) delete mode 100644 _config.yml diff --git a/_config.yml b/_config.yml deleted file mode 100644 index 2f7efbe..0000000 --- a/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-minimal \ No newline at end of file From bbeff3f54db2b5549f46cc121ff90936acc3683e Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Mon, 20 Jul 2020 12:16:51 -0300 Subject: [PATCH 13/26] Delete params.json --- params.json | 1 - 1 file changed, 1 deletion(-) delete mode 100644 params.json diff --git a/params.json b/params.json deleted file mode 100644 index e0396a4..0000000 --- a/params.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BiCrystal","tagline":"BiCrystal is a Python program that builds commensurate and incommensurate crystal structures of layered materials. ","body":"# BiCrystal\r\n``BiCrystal`` is a Python program that builds commensurate and incommensurate crystal structures of layered materials. The current version reads CIF files and writes the new structure to a QUANTUM ESPRESSO input file. The program also provides additional information such as the bond distance between atoms, lattice vectors in Bohr and Angstrom, and a simple 3D plot of each layer.\r\n\r\nContents\r\n==========\r\n**Overview** \\\r\n**Download** \\\r\n**Packages** \\\r\n**Files** \\\r\n**Installation** \\\r\n**Usage** \\\r\n**Examples** \\\r\n**Summary Table** \\\r\n**References** \\\r\n**License** \r\n\r\n# Overview\r\nBuilding unit cells of arbitrary size is often an inevitable task when studying the physical and mechanical properties of layered materials such as graphene, hexagonal Boron Nitride, transition metal dichalcogenides. Although most visualzation software such as Xcrysden, VESTA or Avogadro provide very powerful tools for analysing and manipulating periodic crystal structures, constructing large unit cells in bilayers with one of the layers perturbed can be very daunting. ``BiCrystal`` provides a convinient and easy way of creating new crystal structures of arbitrary size from CIF files.\r\n\r\n# Download\r\nThe latest version of ``BiCrystal`` can be found on github:\r\n\r\nhttps://github.com/tilaskabengele/BiCrystal\r\n\r\n**Contact**: Tilas Kabengele tilas.kabengele@dal.ca\r\n\r\n# Packages\r\n`BiCrystal` is a python-based program that uses Scipy and Shapely libraries. Additionally, the Crystal package, which is not part of the standard Python packages, should be installed. i.e Install via pip or conda:\r\n\r\n pip install crystals\r\nor\r\n\r\n conda install -c conda-forge crystals\r\nand\r\n\r\n pip install shapely\r\n \r\nFor more information on crystals and shapely, visit: https://pypi.org/project/crystals/ and https://pypi.org/project/Shapely/ respectively.\r\n \r\n # Files\r\n\r\n**bicrystal** - Bash script which runs the python program \\\r\n**cifs/** - Directory with sample cif files \\\r\n**examples/** - Directory with 33 examples of QUANTUM ESPRESSO input files generated by BiCrystal \\\r\n**periodic_table.csv** - Periodic table of elements \\\r\n**program.py** - Python program to be called from bicrystal script\r\n\r\n# Installation\r\nAfter downloading the files from the github repository to the directory of your choice (_recommended: /usr/bin/_), make `bicrystal` and `program.py` into executables:\r\n\r\n chmod u+x bicrystal program.py\r\n\r\nNext, add this directory to your $PATH variable. In Bash, adding the following lines to your `.bashrc file`:\r\n\r\n vi ~/.bashrc\r\n\r\nAdd:\r\n\r\n export PATH=\"$/path/to/your/directory/with/bicrysal/:$PATH\"\r\n export PYTHONPATH=\"${PYTHONPATH}:/path/to/your/directory/with/bicrysal/\"\r\n\r\nSave, close then source your `.bashrc` file to activate the changes:\r\n \r\n source ~/.bashrc\r\n\r\nRestart your terminal window to start using `bicrystal`.\r\n\r\n# Usage\r\nBiCrystal is an interactive program that instructs the user every step of the way. To start BiCrystal, in the terminal type:\r\n\r\n bicrystal\r\n \r\nThe first thing you will be required to do is input your cif file, e.g. graphite.cif:\r\n\r\n ***Input cif file***\r\n graphite.cif\r\n\r\nNext, enter input parameters m and n, and rotation angle in degrees (_zero if you want both layers unperturbed_).\r\nParameter m and n correspond to the scale of the lattice vectors along the x and y directions, respectively. As an example, let's take m = 2, n = 1 and rotation angle 21.79 degrees.\r\n \r\n ***Rotation parameters***\r\n Enter m 2\r\n Enter n 1\r\n Enter rotation_angle 0\r\n\r\nAfter that, you will be required to pick a zeroeth atom from the top and bottom layer. If we were picking the atoms by hand using a visualization software such as Xcrysden, this would be the atom we start from when creating the new cell vectors. \r\n\r\n Intializing atoms...\r\n\r\n\r\n Initial TOP atoms..\r\n Atom No. 1 c [0. 0. 0.5]\r\n Atom No. 2 c [0.66667 0.33334 0.505 ]\r\n\r\n Initial BOTTOM atoms..\r\n Atom No. 3 c [0. 0. 0.]\r\n Atom No. 4 c [0.33333 0.66667 0.005 ]\r\n \r\n For a good symmetrical structure, always pick atoms such that the zeroeth TOP and BOTTOM atoms align. In this example, that would be Atom No. 1 and Atom No. 3. After picking your zeroeth atoms, a window with a simple 3D will then open.\r\n \r\n Select zeroeth TOP atom\r\n Enter Atom No. 1\r\n\r\n Select zeroeth BOTTOM atom\r\n Enter Atom No. 3\r\n\r\n \r\n ![cc28](https://user-images.githubusercontent.com/62076249/87927879-48795500-ca5a-11ea-98c1-b2949bb672e3.PNG)\r\n \r\n Finally, you can save your output as a QUANTUM ESPRESSO file and visualize with Xcrysden for a more sophisticated look.\r\n \r\n ********************* SUMMARY REPORT ***********************\r\n\r\n Top atoms(rotated) = 14\r\n Bottom atoms = 14\r\n\r\n Total atoms\r\n = 28\r\n\r\n *************************** Done! **************************\r\n\r\n Would you like to write Espresso file?[Y/n]\r\n\r\n # Examples\r\n \r\n Let's say we saved our output in the example given above as graphite28.scf.in, we can visualize this with Xcrysden.\r\n \r\n xcrysden --pwi graphite28.scf.in\r\n \r\n ![ccmoire28](https://user-images.githubusercontent.com/62076249/87929694-377e1300-ca5d-11ea-80e3-76417f34a5e4.PNG)\r\n \r\nLooking from the top view, we can see that for this rotation, a Moire pattern was created. Really neat! This was not apparent from the simple 3D plot because BiCrystal plots cartesian coordinates of the atoms where the top and bottom layer do not necessarily align. Before writing the QUANTUM ESPRESSO file, `BiCrystal` removes symmetrically equivalent atoms and maps back those atoms that fell outside the unit cell due to rotation. \r\n\r\nThe **examples/** folder has over 30 examples of Moire patterns graphite, Molebdenum Disulfide and blue Phosphorene generated from `bicrystal`. Below are some examples.\r\n\r\n# Graphite 364-atom unit cell\r\nThe unit cell of graphite with 364 atoms can be generated by using parameters: m = 6, n = 5, and rotation angle of 6.01 degrees. Shown below is the top view.\r\n\r\n![cc364](https://user-images.githubusercontent.com/62076249/87933970-98f5b000-ca64-11ea-906b-15a1036989a1.PNG)\r\n\r\n# Blue phosphorene 172-atom unit cell\r\nThe unit cell of blue phosphorene with 172 atoms can be generated by using parameters: m = 6, n = 1, and rotation angle of 44.82 degrees. Shown below is the top view.\r\n\r\n![bluep172](https://user-images.githubusercontent.com/62076249/87934152-e245ff80-ca64-11ea-8f36-b69b5799e3fa.PNG)\r\n\r\n# Molybdenun Disulfide 546-atom unit cell\r\nThe unit cell of MoS2 with 546 atoms atoms can be generated by using parameters: m = 6, n = 5, and rotation angle of 6.01 degrees. Shown below is the top view.\r\n\r\n![mos546](https://user-images.githubusercontent.com/62076249/87934312-2fc26c80-ca65-11ea-97a2-c9cdb3068a9d.PNG)\r\n\r\n# Summary Table\r\nAll the examples in the examples folder can be summarized in the table below:\r\n\r\n![example_table](https://user-images.githubusercontent.com/62076249/87934662-dc045300-ca65-11ea-8f54-818b7183d6e1.PNG)\r\n \r\n # References\r\n For a detailed analysis of Moire patterns and angles:\r\n \r\n **Density functional calculations on the intricacies of Moiré patterns on graphite**, J. M. Campanera, G. Savini, I. Suarez-Martinez, and M. I. Heggie, _Phys. Rev. B 75, 235449 – Published 28 June 2007_\r\n \r\n Crystals package authors:\r\n \r\n L. P. René de Cotret, M. R. Otto, M. J. Stern. and B. J. Siwick, An open-source software ecosystem for the interactive exploration of ultrafast electron scattering data, Advanced Structural and Chemical Imaging 4:11 (2018) DOI:10.1186/s40679-018-0060-y.\r\n \r\n For further reading and related projects, visit **Johnson Group wiki**: http://schooner.chem.dal.ca/wiki/Johnson_Group_Wiki \r\n \r\n # License\r\n Copyright (c) 2020 Tilas Kabengele, Johnson Chemistry Group, Dalhousie University.\r\n\r\nBiCrystal is a free program: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\r\n\r\nBiCrystal is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\r\n\r\n\r\n\r\n","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file From c00a8b0a03482a9dc97953b57d367fc149debc21 Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Mon, 20 Jul 2020 12:17:00 -0300 Subject: [PATCH 14/26] Delete index.html --- index.html | 192 ----------------------------------------------------- 1 file changed, 192 deletions(-) delete mode 100644 index.html diff --git a/index.html b/index.html deleted file mode 100644 index 45f7cba..0000000 --- a/index.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - BiCrystal - - - - - -
-
- View on GitHub - -

BiCrystal

-

BiCrystal is a Python program that builds commensurate and incommensurate crystal structures of layered materials.

- -
- Download this project as a .zip file - Download this project as a tar.gz file -
-
-
- - -
-
-

-BiCrystal

-

BiCrystal is a Python program that builds commensurate and incommensurate crystal structures of layered materials. The current version reads CIF files and writes the new structure to a QUANTUM ESPRESSO input file. The program also provides additional information such as the bond distance between atoms, lattice vectors in Bohr and Angstrom, and a simple 3D plot of each layer.

-

-Contents

-

Overview
-Download
-Packages
-Files
-Installation
-Usage
-Examples
-Summary Table
-References
-License

-

-Overview

-

Building unit cells of arbitrary size is often an inevitable task when studying the physical and mechanical properties of layered materials such as graphene, hexagonal Boron Nitride, transition metal dichalcogenides. Although most visualzation software such as Xcrysden, VESTA or Avogadro provide very powerful tools for analysing and manipulating periodic crystal structures, constructing large unit cells in bilayers with one of the layers perturbed can be very daunting. BiCrystal provides a convinient and easy way of creating new crystal structures of arbitrary size from CIF files.

-

-Download

-

The latest version of BiCrystal can be found on github:

-

https://github.com/tilaskabengele/BiCrystal

-

Contact: Tilas Kabengele tilas.kabengele@dal.ca

-

-Packages

-

BiCrystal is a python-based program that uses Scipy and Shapely libraries. Additionally, the Crystal package, which is not part of the standard Python packages, should be installed. i.e Install via pip or conda:

-
 pip install crystals
-
-

or

-
conda install -c conda-forge crystals
-
-

and

-
pip install shapely
-
-

For more information on crystals and shapely, visit: https://pypi.org/project/crystals/ and https://pypi.org/project/Shapely/ respectively.

-

-Files

-

bicrystal - Bash script which runs the python program
-cifs/ - Directory with sample cif files
-examples/ - Directory with 33 examples of QUANTUM ESPRESSO input files generated by BiCrystal
-periodic_table.csv - Periodic table of elements
-program.py - Python program to be called from bicrystal script

-

-Installation

-

After downloading the files from the github repository to the directory of your choice (recommended: /usr/bin/), make bicrystal and program.py into executables:

-
chmod u+x bicrystal program.py
-
-

Next, add this directory to your $PATH variable. In Bash, adding the following lines to your .bashrc file:

-
vi ~/.bashrc
-
-

Add:

-
export PATH="$/path/to/your/directory/with/bicrysal/:$PATH"
-export PYTHONPATH="${PYTHONPATH}:/path/to/your/directory/with/bicrysal/"
-
-

Save, close then source your .bashrc file to activate the changes:

-
source ~/.bashrc
-
-

Restart your terminal window to start using bicrystal.

-

-Usage

-

BiCrystal is an interactive program that instructs the user every step of the way. To start BiCrystal, in the terminal type:

-
bicrystal
-
-

The first thing you will be required to do is input your cif file, e.g. graphite.cif:

-
***Input cif file***
-graphite.cif
-
-

Next, enter input parameters m and n, and rotation angle in degrees (zero if you want both layers unperturbed). -Parameter m and n correspond to the scale of the lattice vectors along the x and y directions, respectively. As an example, let's take m = 2, n = 1 and rotation angle 21.79 degrees.

-
***Rotation parameters***
-Enter m 2
-Enter n 1
-Enter rotation_angle 0
-
-

After that, you will be required to pick a zeroeth atom from the top and bottom layer. If we were picking the atoms by hand using a visualization software such as Xcrysden, this would be the atom we start from when creating the new cell vectors.

-
Intializing atoms...
-
-
-Initial TOP atoms..
-Atom No. 1   c   [0.  0.  0.5]
-Atom No. 2   c   [0.66667 0.33334 0.505  ]
-
-Initial BOTTOM atoms..
-Atom No. 3   c   [0. 0. 0.]
-Atom No. 4   c   [0.33333 0.66667 0.005  ]
-
-

For a good symmetrical structure, always pick atoms such that the zeroeth TOP and BOTTOM atoms align. In this example, that would be Atom No. 1 and Atom No. 3. After picking your zeroeth atoms, a window with a simple 3D will then open.

-
Select zeroeth TOP atom
-Enter Atom No. 1
-
-Select zeroeth BOTTOM atom
-Enter Atom No. 3
-
-

cc28

-

Finally, you can save your output as a QUANTUM ESPRESSO file and visualize with Xcrysden for a more sophisticated look.

-
 ********************* SUMMARY REPORT ***********************
-
-Top atoms(rotated) =  14
-Bottom atoms  =  14
-
-Total atoms
-= 28
-
-*************************** Done! **************************
-
-Would you like to write Espresso file?[Y/n]
-
-

-Examples

-

Let's say we saved our output in the example given above as graphite28.scf.in, we can visualize this with Xcrysden.

-
   xcrysden --pwi graphite28.scf.in
-
-

ccmoire28

-

Looking from the top view, we can see that for this rotation, a Moire pattern was created. Really neat! This was not apparent from the simple 3D plot because BiCrystal plots cartesian coordinates of the atoms where the top and bottom layer do not necessarily align. Before writing the QUANTUM ESPRESSO file, BiCrystal removes symmetrically equivalent atoms and maps back those atoms that fell outside the unit cell due to rotation.

-

The examples/ folder has over 30 examples of Moire patterns graphite, Molebdenum Disulfide and blue Phosphorene generated from bicrystal. Below are some examples.

-

-Graphite 364-atom unit cell

-

The unit cell of graphite with 364 atoms can be generated by using parameters: m = 6, n = 5, and rotation angle of 6.01 degrees. Shown below is the top view.

-

cc364

-

-Blue phosphorene 172-atom unit cell

-

The unit cell of blue phosphorene with 172 atoms can be generated by using parameters: m = 6, n = 1, and rotation angle of 44.82 degrees. Shown below is the top view.

-

bluep172

-

-Molybdenun Disulfide 546-atom unit cell

-

The unit cell of MoS2 with 546 atoms atoms can be generated by using parameters: m = 6, n = 5, and rotation angle of 6.01 degrees. Shown below is the top view.

-

mos546

-

-Summary Table

-

All the examples in the examples folder can be summarized in the table below:

-

example_table

-

-References

-

For a detailed analysis of Moire patterns and angles:

-

Density functional calculations on the intricacies of Moiré patterns on graphite, J. M. Campanera, G. Savini, I. Suarez-Martinez, and M. I. Heggie, Phys. Rev. B 75, 235449 – Published 28 June 2007

-

Crystals package authors:

-

L. P. René de Cotret, M. R. Otto, M. J. Stern. and B. J. Siwick, An open-source software ecosystem for the interactive exploration of ultrafast electron scattering data, Advanced Structural and Chemical Imaging 4:11 (2018) DOI:10.1186/s40679-018-0060-y.

-

For further reading and related projects, visit Johnson Group wiki: http://schooner.chem.dal.ca/wiki/Johnson_Group_Wiki

-

-License

-

Copyright (c) 2020 Tilas Kabengele, Johnson Chemistry Group, Dalhousie University.

-

BiCrystal is a free program: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

-

BiCrystal is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

-

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

-
-
- - - - - - - - From eddcbd1283cc2fddfdff845410219986101f8293 Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Mon, 20 Jul 2020 12:23:43 -0300 Subject: [PATCH 15/26] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0de7906..29fda9e 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Building unit cells of arbitrary size is often an inevitable task when studying # Download The latest version of ``BiCrystal`` can be found on github: -https://github.com/tilaskabengele/BiCrystal +https://github.com/tilaskabengele/BiCrystal/tree/stable **Contact**: Tilas Kabengele tilas.kabengele@dal.ca From 99cdb7c3bdb6383c5674a6fccce8039e176beb4f Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Sun, 26 Jul 2020 14:01:57 -0300 Subject: [PATCH 16/26] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 29fda9e..b1205dc 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ https://github.com/tilaskabengele/BiCrystal/tree/stable **Contact**: Tilas Kabengele tilas.kabengele@dal.ca # Packages -`BiCrystal` is a python-based program that uses Scipy and Shapely libraries. Additionally, the Crystal package, which is not part of the standard Python packages, should be installed. i.e Install via pip or conda: +`BiCrystal` is a **python 3** program that uses Scipy and Shapely libraries. Additionally, the Crystal and shapely packages, which are not part of the standard Python packages, should be installed as well. i.e Install via pip or conda: pip install crystals or @@ -50,7 +50,7 @@ After downloading the files from the github repository to the directory of your chmod u+x bicrystal program.py -Next, add this directory to your $PATH variable. In Bash, adding the following lines to your `.bashrc file`: +Next, add this directory to your $PATH variable. In Bash, this is done by adding the following lines to your `.bashrc file`: vi ~/.bashrc From e5bb4b9c98a2f080d79ed986115f5b675e2e915a Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Sun, 26 Jul 2020 14:02:56 -0300 Subject: [PATCH 17/26] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b1205dc..bfab461 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ https://github.com/tilaskabengele/BiCrystal/tree/stable **Contact**: Tilas Kabengele tilas.kabengele@dal.ca # Packages -`BiCrystal` is a **python 3** program that uses Scipy and Shapely libraries. Additionally, the Crystal and shapely packages, which are not part of the standard Python packages, should be installed as well. i.e Install via pip or conda: +`BiCrystal` is a **python 3** program that uses Scipy and Shapely libraries. Additionally, the Crystal and shapely packages, which are not part of the standard Python packages, should be installed. i.e Install via pip or conda: pip install crystals or From 8e0e8f0e4214e15005df770ab004aea07eb327e9 Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Sun, 26 Jul 2020 14:07:26 -0300 Subject: [PATCH 18/26] Update program.py --- bicrystal/program.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/bicrystal/program.py b/bicrystal/program.py index 2b5a463..3976693 100644 --- a/bicrystal/program.py +++ b/bicrystal/program.py @@ -1,4 +1,4 @@ -#!/bin/python +#!/bin/python3 # PROGRAM: BiCRYSTAL @@ -31,7 +31,6 @@ from sklearn.neighbors import KNeighborsRegressor import numpy as np import decimal -from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt from matplotlib import colors as mcolors from matplotlib.collections import PolyCollection @@ -316,8 +315,7 @@ def bulk(my_crystal): print ('\n***Rotation parameters*** ') m = int(input('Enter m ')) n = int(input('Enter n ')) -rotation_angle = float(input('Enter rotation_angle ')) -#rotation_angle = -180 + rotation_angle +rotation_angle = float(input('Enter rotation angle ')) #### Initializing top and bottom layers #### tt_top,tt_bot,elt_top,elt_bot = bulk(my_crystal) From 06f94e8faef9a43d9d53132afff3941b5f675fc0 Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Sun, 26 Jul 2020 15:23:50 -0300 Subject: [PATCH 19/26] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bfab461..224f01c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # BiCrystal -``BiCrystal`` is a Python program that builds commensurate and incommensurate crystal structures of layered materials. The current version reads CIF files and writes the new structure to a QUANTUM ESPRESSO input file. The program also provides additional information such as the bond distance between atoms, lattice vectors in Bohr and Angstrom, and a simple 3D plot of each layer. +``BiCrystal`` is a **Python 3** program that builds commensurate and incommensurate crystal structures of layered materials. The current version reads CIF files and writes the new structure to a QUANTUM ESPRESSO input file. The program also provides additional information such as the bond distance between atoms, lattice vectors in Bohr and Angstrom, and a simple 3D plot of each layer. Contents ========== From 50bda1d681c965e0c413c08e9cdf1e6a78e1b573 Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Thu, 6 Aug 2020 14:15:52 -0300 Subject: [PATCH 20/26] Update program.py --- bicrystal/program.py | 211 +++++++++++++++++++++---------------------- 1 file changed, 105 insertions(+), 106 deletions(-) diff --git a/bicrystal/program.py b/bicrystal/program.py index 3976693..a2044c4 100644 --- a/bicrystal/program.py +++ b/bicrystal/program.py @@ -2,7 +2,7 @@ # PROGRAM: BiCRYSTAL -# VERSION: 1.0.6 +# VERSION: 1.0.7 # DESCRIPTION: This program buildscommensurate and incommensurate crystal structures of layered materials. Current version reads CIF files and writes the new structure to a QUANTUM ESPRESSO input file. @@ -46,21 +46,21 @@ # Description: Isolates the z-coordinates (fractional) from CRYSTAL and stores them in an array # Inputs: Python CRYSTAL structure. i.e. don't use a supercell in SEPERATE # Output: Array with z-coordinates of bottom layer atoms - + def seperate(my_crystal): - nat = 0 - z_frac = [] + nat = 0 + z_frac = [] + + for atm in my_crystal: + nat = nat + 1 + z_frac.append(atm.coords_fractional[2]) - for atm in my_crystal: - nat = nat + 1 - z_frac.append(atm.coords_fractional[2]) + z_sorted = sorted(z_frac) + bottom_z = round(nat/2) + answer = z_sorted[0:bottom_z] - z_sorted = sorted(z_frac) - bottom_z = round(nat/2) - answer = z_sorted[0:bottom_z] - - return answer + return answer # *********************************** @@ -108,21 +108,21 @@ def highest(my_crystal): # Output: True if atom is from bottom layer; false if it isn't def locate(test_atm,z_bot): - - z = [] - - test_atm = round(test_atm,2) - for atm in z_bot: - z.append(round(atm,2)) + z = [] + + test_atm = round(test_atm,2) + + for atm in z_bot: + z.append(round(atm,2)) + + if test_atm in z: + answer = True + else: + answer = False - if test_atm in z: - answer = True - else: - answer = False + return answer - return answer - #*********************************** # Function name: NEWCELL(MY_CRYSTAL,M,N) # Description: This function creates lattice vectors of a rotated layer @@ -130,19 +130,19 @@ def locate(test_atm,z_bot): # Outputs: supercell lattice vectors new_a; new_b .i.e the c-vector remains unchanged def newcell(my_crystal,atoms,m,n): - - a, b, c = my_crystal.lattice_vectors - v1 = atoms[0] + (m+n)*a + (m+n)*b - v2 = np.add(np.add(v1,(m+n)*a),n*b) - v3 = np.add(np.add(v2,(m+n)*b),m*a) - v4 = np.subtract(np.subtract(v3,(m+n)*a),n*b) - - new_a = v2 - v1 - new_b = v3 - v2 - + + a, b, c = my_crystal.lattice_vectors + v1 = atoms[0] + (m+n)*a + (m+n)*b + v2 = np.add(np.add(v1,(m+n)*a),n*b) + v3 = np.add(np.add(v2,(m+n)*b),m*a) + v4 = np.subtract(np.subtract(v3,(m+n)*a),n*b) + + new_a = v2 - v1 + new_b = v3 - v2 + # ang to bohr mytiply by 1.8897259886 - return new_a, new_b, v1, v2, v3, v4 + return new_a, new_b, v1, v2, v3, v4 @@ -182,7 +182,7 @@ def poly(v1,v2,v3,v4): coords = [(p1), (p2), (p3), (p4)] ply = Polygon(coords) - + return ply, p1, p2, p3, p4 @@ -213,9 +213,9 @@ def inpoly(atz,ply): def central(ply): - center = ply.centroid + center = ply.centroid - return center + return center #*************************************** @@ -225,17 +225,17 @@ def central(ply): # Output: True if the rotation is correct, False if it isn't def swaped(layer): - pos_count = 0 - neg_count = 0 - for atm in layer: - if atm >= 0: - pos_count += 1 - else: - neg_count += 1 - if pos_count > neg_count: - return True - else: - return False + pos_count = 0 + neg_count = 0 + for atm in layer: + if atm >= 0: + pos_count += 1 + else: + neg_count += 1 + if pos_count > neg_count: + return True + else: + return False #*************************************** @@ -245,10 +245,10 @@ def swaped(layer): # Output: Number of atoms ---> Integer def ntype(my_crystal): - nat = 0 - for atm in my_crystal.chemical_composition: - nat+=1 - return nat + nat = 0 + for atm in my_crystal.chemical_composition: + nat+=1 + return nat @@ -259,26 +259,26 @@ def ntype(my_crystal): # Output: top and bottom atoms ---> np arrays; chemical symbols for top and bottom atoms ---> lists def bulk(my_crystal): - - atoms_bot = [] - atoms_top = [] - atmxyz = [] - ele_bot = [] - ele_top = [] - z_bot = seperate(my_crystal) - for atm in my_crystal: - atm_frac = atm.coords_fractional - atm_cart = atm.coords_cartesian - atmxyz = atm_cart[0], atm_cart[1], atm_cart[2] - if locate(atm_frac[2],z_bot) == True: - atoms_bot.append(atmxyz) - ELE = str(atm).lower() - ele_bot.append(ELE) - else: - atoms_top.append(atmxyz) - ELE = str(atm).lower() - ele_top.append(ELE) - return np.array(atoms_top), np.array(atoms_bot), ele_top, ele_bot + + atoms_bot = [] + atoms_top = [] + atmxyz = [] + ele_bot = [] + ele_top = [] + z_bot = seperate(my_crystal) + for atm in my_crystal: + atm_frac = atm.coords_fractional + atm_cart = atm.coords_cartesian + atmxyz = atm_cart[0], atm_cart[1], atm_cart[2] + if locate(atm_frac[2],z_bot) == True: + atoms_bot.append(atmxyz) + ELE = str(atm).lower() + ele_bot.append(ELE) + else: + atoms_top.append(atmxyz) + ELE = str(atm).lower() + ele_top.append(ELE) + return np.array(atoms_top), np.array(atoms_bot), ele_top, ele_bot @@ -296,7 +296,7 @@ def bulk(my_crystal): print ('* BiCRYSTAL--', now,'\n\n') print ('**************************************************************************\n \n') -# reading csv with elements from workspace +# reading csv with elements from workspace # i.e. directory where you installed bicrystal with open('workspace') as f: line = f.readline() @@ -315,18 +315,21 @@ def bulk(my_crystal): print ('\n***Rotation parameters*** ') m = int(input('Enter m ')) n = int(input('Enter n ')) -rotation_angle = float(input('Enter rotation angle ')) +#rotation_angle = float(input('Enter rotation angle ')) + +# lattice parameters +a, b, c, alpha, beta, gamma = my_crystal.lattice_parameters #### Initializing top and bottom layers #### tt_top,tt_bot,elt_top,elt_bot = bulk(my_crystal) -print ('\n\nIntializing atoms...\n\n') - # lattice vectors a1, a2, a3 = my_crystal.lattice_vectors uc = a1,a2,a3 uc = np.array(uc) +print ('\n\nIntializing atoms...\n\n') + print ('Initial TOP atoms..') for i in range(0,len(elt_top)): s = np.array(tt_top[i]) @@ -348,33 +351,14 @@ def bulk(my_crystal): # correct array indices for zeroeth atoms idx1 = zeroeth1-1 idx2 = (zeroeth2-1)-len(elt_top) -print ('\nZeroeth TOP (angstrom)', elt_top[idx1], tt_top[idx1]) +print ('\nZeroeth TOP (angstrom)', elt_top[idx1], tt_top[idx1]) print ('\nZeroeth BOTTOM (angstrom)', elt_bot[idx2], tt_bot[idx2]) -#idx1 = min(tt_top, key=lambda x: (x[0], -x[1])) -#idx2 = min(tt_bot, key=lambda x: (x[0], -x[1])) -#print ('\nZeroeth TOP (angstrom)', elt_top[idx1], tt_top[idx1]) -#print ('\nZeroeth BOTTOM (angstrom)', elt_bot[idx2], tt_bot[idx2]) - - # finding the bond length lengths = pdist(tt_bot, 'euclidean') bond_distance = round(min(lengths),3) print ('\nBond distance = ', bond_distance) -# Rotation matrix -phi = np.deg2rad(rotation_angle) -print ('\nRotation angle (radians) = ', phi) -print ('\nRotation matrix') -R = np.array([[np.cos(phi), -np.sin(phi), 0], [np.sin(phi), np.cos(phi), 0], [0, 0, 1]]) -#print (' ','{:12.6f}'.format(R[0])) -#print (' ','{:12.6f}'.format(R[1])) -#print (' ','{:12.6f}'.format(R[2])) -print(R[0]) -print(R[1]) -print(R[2]) - - # lattice parameters print ('\nLattice Vectors (Angstrom)') print (' ','{:12.6f} {:12.6f} {:12.6f}'.format(a1[0],a1[1],a1[2])) @@ -386,11 +370,24 @@ def bulk(my_crystal): print (' ','{:12.6f} {:12.6f} {:12.6f}'.format(a2[0]*a2b,a2[1]*a2b,a2[2]*a2b)) print (' ','{:12.6f} {:12.6f} {:12.6f}'.format(a3[0]*a2b,a3[1]*a2b,a3[2]*a2b)) +# rotation angle +A = np.array([1,0,0]) +B = np.array([np.cos(np.deg2rad(60)),np.sin(np.deg2rad(60)),0]) +V = m*A + n*B +rotation_angle = np.arccos((np.dot(A,V.T))/(np.linalg.norm(A)*np.linalg.norm(V))) +rotation_angle = np.rad2deg(rotation_angle) + +# Rotation matrix +theta = np.deg2rad(rotation_angle) +phi = np.deg2rad(60) - 2*theta +R = np.array([[np.cos(phi), -np.sin(phi), 0], [np.sin(phi), np.cos(phi), 0], [0, 0, 1]]) +print ('\nRotation angle theta (degrees) = ', rotation_angle) +print ('\nMoire angle gamma (degrees) = ',np.rad2deg(phi)) print ("\n\nCALCULATING ATOMIC POSITIONS...") for i in range(1,2): - print ('\n\nPlease wait...\n\n') - sys.stdout.flush() + print ('\n\nPlease wait...\n\n') + sys.stdout.flush() print ("&control") print ( " title='crystal',") @@ -441,12 +438,12 @@ def bulk(my_crystal): k = 0 for atm in tt1: u = symb1[k] - k = k + 1 + k = k + 1 for i in range(1,(n+m)*15): tty = atm + i*a2 tt2.append(tty) symb2.append(u) -symb_bot = symb1 + symb2 +symb_bot = symb1 + symb2 atoms_bot = list(tt1) + list (tt2) #atoms_bot = np.array(atoms_bot) @@ -536,7 +533,7 @@ def bulk(my_crystal): i = 0 nat_bot=0 for atm in bot_frac: - print ('{} {:12.6f} {:12.6f} {:12.6f}'.format(symbot[i], atm[0], atm[1], atm[2])) + print ('{:2} {:12.6f} {:12.6f} {:12.6f}'.format(symbot[i], atm[0], atm[1], atm[2])) i+=1 nat_bot+=1 @@ -561,12 +558,12 @@ def bulk(my_crystal): k = 0 for atm in tt1: u = symb1[k] - k = k + 1 + k = k + 1 for i in range(1,(n+m)*15): tty = atm + i*a2 tt2.append(tty) symb2.append(u) -symb_top = symb1 + symb2 +symb_top = symb1 + symb2 atoms_top = list(tt1) + list (tt2) #atoms_top = np.array(atoms_top) @@ -657,7 +654,7 @@ def bulk(my_crystal): i = 0 nat_top=0 for atm in top_frac: - print ('{} {:12.6f} {:12.6f} {:12.6f}'.format(symtop[i], atm[0], atm[1], atm[2])) + print ('{:2} {:12.6f} {:12.6f} {:12.6f}'.format(symtop[i], atm[0], atm[1], atm[2])) i+=1 nat_top+=1 @@ -765,8 +762,10 @@ def bulk(my_crystal): ########################## SUMMARY REPORT ############################### print ("\n********************* SUMMARY REPORT ***********************") +print ('\nRotation angle (deg) = ', np.round(rotation_angle,3)) +print ('Relative Rotation (deg) = ',np.round(np.rad2deg(phi),3)) print ('\nTop atoms(rotated) = ',len(top_frac)) -print ('Bottom atoms = ',len(bot_frac)) +print ('Bottom atoms = ',len(bot_frac)) print ('\nTotal atoms \n=', len(bot_frac)+len(top_frac)) print ('\n*************************** Done! **************************\n') From 3d3966aea28ce72c76e0f1dd7aac1fd0130149f1 Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Thu, 6 Aug 2020 14:30:36 -0300 Subject: [PATCH 21/26] Update README.md --- bicrystal/README.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/bicrystal/README.md b/bicrystal/README.md index c70093a..423a959 100644 --- a/bicrystal/README.md +++ b/bicrystal/README.md @@ -1,5 +1,5 @@ # BiCrystal -``BiCrystal`` is a Python program that builds commensurate and incommensurate crystal structures of layered materials. The current version reads CIF files and writes the new structure to a QUANTUM ESPRESSO input file. The program also provides additional information such as the bond distance between atoms, lattice vectors in Bohr and Angstrom, and a simple 3D plot of each layer. +``BiCrystal`` is a Python program that builds incommensurate crystal structures of layered materials. The current version reads CIF files and writes the new structure to a QUANTUM ESPRESSO input file. The program also provides additional information such as the bond distance between atoms, lattice vectors in Bohr and Angstrom, and a simple 3D plot of each layer. Contents ========== @@ -26,7 +26,7 @@ https://github.com/tilaskabengele/BiCrystal/ **Contact**: Tilas Kabengele tilas.kabengele@dal.ca # Packages -`BiCrystal` is a python-based program that uses Scipy and Shapely libraries. Additionally, the Crystal package, which is not part of the standard Python packages, should be installed. i.e Install via pip or conda: +`BiCrystal` is a python-based program that uses Scipy and Shapely libraries. Additionally, the Crystal and shapely packages, which is not part of the standard Python packages, should be installed. i.e Install via pip or conda: pip install crystals or @@ -39,7 +39,6 @@ and For more information on crystals and shapely, visit: https://pypi.org/project/crystals/ and https://pypi.org/project/Shapely/ respectively. # Files - **bicrystal** - Bash script which runs the python program \ **cifs/** - Directory with sample cif files \ **examples/** - Directory with 33 examples of QUANTUM ESPRESSO input files generated by BiCrystal \ @@ -49,7 +48,7 @@ For more information on crystals and shapely, visit: https://pypi.org/project/cr # Installation After downloading the files from the github repository to the directory of your choice (_recommended: /usr/bin/_), make `bicrystal` and `program.py` into executables: - chmod u+x bicrystal program.py + chmod r+x bicrystal program.py Next, add this directory to your $PATH variable. In Bash, adding the following lines to your `.bashrc file`: @@ -76,13 +75,11 @@ The first thing you will be required to do is input your cif file, e.g. graphite ***Input cif file*** graphite.cif -Next, enter input parameters m and n, and rotation angle in degrees (_zero if you want both layers unperturbed_). -Parameter m and n correspond to the scale of the lattice vectors along the x and y directions, respectively. As an example, let's take m = 2, n = 1 and rotation angle 21.79 degrees. +Next, input scaling parameters m and n, which correspond to the scale of the lattice vectors along the x and y directions, respectively. As an example, let's take m = 2, n = 1. Bicrystal caculates the relative rotation angle for the given m and n. In this case, the rotation angle will be 21.79 degrees. ***Rotation parameters*** Enter m 2 Enter n 1 - Enter rotation_angle 0 After that, you will be required to pick a zeroeth atom from the top and bottom layer. If we were picking the atoms by hand using a visualization software such as Xcrysden, this would be the atom we start from when creating the new cell vectors. @@ -111,7 +108,10 @@ After that, you will be required to pick a zeroeth atom from the top and bottom Finally, you can save your output as a QUANTUM ESPRESSO file and visualize with Xcrysden for a more sophisticated look. ********************* SUMMARY REPORT *********************** - + + Rotation angle (deg) = 19.107 + Relative Rotation (deg) = 21.787 + Top atoms(rotated) = 14 Bottom atoms = 14 @@ -123,7 +123,6 @@ After that, you will be required to pick a zeroeth atom from the top and bottom Would you like to write Espresso file?[Y/n] # Examples - Let's say we saved our output in the example given above as graphite28.scf.in, we can visualize this with Xcrysden. xcrysden --pwi graphite28.scf.in From b9941739f8d394db61972a74cfe4450d8cf970fb Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Thu, 6 Aug 2020 14:33:10 -0300 Subject: [PATCH 22/26] Update README.md --- bicrystal/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bicrystal/README.md b/bicrystal/README.md index 423a959..1b9e68c 100644 --- a/bicrystal/README.md +++ b/bicrystal/README.md @@ -134,17 +134,17 @@ Looking from the top view, we can see that for this rotation, a Moire pattern wa The **examples/** folder has over 30 examples of Moire patterns graphite, Molebdenum Disulfide and blue Phosphorene generated from `bicrystal`. Below are some examples. # Graphite 364-atom unit cell -The unit cell of graphite with 364 atoms can be generated by using parameters: m = 6, n = 5, and rotation angle of 6.01 degrees. Shown below is the top view. +The unit cell of graphite with 364 atoms can be generated by using parameters: m = 6, n = 5. Shown below is the top view. ![cc364](https://user-images.githubusercontent.com/62076249/87933970-98f5b000-ca64-11ea-906b-15a1036989a1.PNG) # Blue phosphorene 172-atom unit cell -The unit cell of blue phosphorene with 172 atoms can be generated by using parameters: m = 6, n = 1, and rotation angle of 44.82 degrees. Shown below is the top view. +The unit cell of blue phosphorene with 172 atoms can be generated by using parameters: m = 6, n = 1. Shown below is the top view. ![bluep172](https://user-images.githubusercontent.com/62076249/87934152-e245ff80-ca64-11ea-8f36-b69b5799e3fa.PNG) # Molybdenun Disulfide 546-atom unit cell -The unit cell of MoS2 with 546 atoms atoms can be generated by using parameters: m = 6, n = 5, and rotation angle of 6.01 degrees. Shown below is the top view. +The unit cell of MoS2 with 546 atoms atoms can be generated by using parameters: m = 6, n = 5. Shown below is the top view. ![mos546](https://user-images.githubusercontent.com/62076249/87934312-2fc26c80-ca65-11ea-97a2-c9cdb3068a9d.PNG) From 79a52fa01ac80704c3b8689a9d88daadc8cabc42 Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Thu, 6 Aug 2020 14:44:22 -0300 Subject: [PATCH 23/26] Update README.md --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 224f01c..1b9e68c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # BiCrystal -``BiCrystal`` is a **Python 3** program that builds commensurate and incommensurate crystal structures of layered materials. The current version reads CIF files and writes the new structure to a QUANTUM ESPRESSO input file. The program also provides additional information such as the bond distance between atoms, lattice vectors in Bohr and Angstrom, and a simple 3D plot of each layer. +``BiCrystal`` is a Python program that builds incommensurate crystal structures of layered materials. The current version reads CIF files and writes the new structure to a QUANTUM ESPRESSO input file. The program also provides additional information such as the bond distance between atoms, lattice vectors in Bohr and Angstrom, and a simple 3D plot of each layer. Contents ========== @@ -20,12 +20,13 @@ Building unit cells of arbitrary size is often an inevitable task when studying # Download The latest version of ``BiCrystal`` can be found on github: -https://github.com/tilaskabengele/BiCrystal/tree/stable +https://github.com/tilaskabengele/BiCrystal/ + **Contact**: Tilas Kabengele tilas.kabengele@dal.ca # Packages -`BiCrystal` is a **python 3** program that uses Scipy and Shapely libraries. Additionally, the Crystal and shapely packages, which are not part of the standard Python packages, should be installed. i.e Install via pip or conda: +`BiCrystal` is a python-based program that uses Scipy and Shapely libraries. Additionally, the Crystal and shapely packages, which is not part of the standard Python packages, should be installed. i.e Install via pip or conda: pip install crystals or @@ -38,7 +39,6 @@ and For more information on crystals and shapely, visit: https://pypi.org/project/crystals/ and https://pypi.org/project/Shapely/ respectively. # Files - **bicrystal** - Bash script which runs the python program \ **cifs/** - Directory with sample cif files \ **examples/** - Directory with 33 examples of QUANTUM ESPRESSO input files generated by BiCrystal \ @@ -48,9 +48,9 @@ For more information on crystals and shapely, visit: https://pypi.org/project/cr # Installation After downloading the files from the github repository to the directory of your choice (_recommended: /usr/bin/_), make `bicrystal` and `program.py` into executables: - chmod u+x bicrystal program.py + chmod r+x bicrystal program.py -Next, add this directory to your $PATH variable. In Bash, this is done by adding the following lines to your `.bashrc file`: +Next, add this directory to your $PATH variable. In Bash, adding the following lines to your `.bashrc file`: vi ~/.bashrc @@ -75,13 +75,11 @@ The first thing you will be required to do is input your cif file, e.g. graphite ***Input cif file*** graphite.cif -Next, enter input parameters m and n, and rotation angle in degrees (_zero if you want both layers unperturbed_). -Parameter m and n correspond to the scale of the lattice vectors along the x and y directions, respectively. As an example, let's take m = 2, n = 1 and rotation angle 21.79 degrees. +Next, input scaling parameters m and n, which correspond to the scale of the lattice vectors along the x and y directions, respectively. As an example, let's take m = 2, n = 1. Bicrystal caculates the relative rotation angle for the given m and n. In this case, the rotation angle will be 21.79 degrees. ***Rotation parameters*** Enter m 2 Enter n 1 - Enter rotation_angle 0 After that, you will be required to pick a zeroeth atom from the top and bottom layer. If we were picking the atoms by hand using a visualization software such as Xcrysden, this would be the atom we start from when creating the new cell vectors. @@ -110,7 +108,10 @@ After that, you will be required to pick a zeroeth atom from the top and bottom Finally, you can save your output as a QUANTUM ESPRESSO file and visualize with Xcrysden for a more sophisticated look. ********************* SUMMARY REPORT *********************** - + + Rotation angle (deg) = 19.107 + Relative Rotation (deg) = 21.787 + Top atoms(rotated) = 14 Bottom atoms = 14 @@ -122,7 +123,6 @@ After that, you will be required to pick a zeroeth atom from the top and bottom Would you like to write Espresso file?[Y/n] # Examples - Let's say we saved our output in the example given above as graphite28.scf.in, we can visualize this with Xcrysden. xcrysden --pwi graphite28.scf.in @@ -134,17 +134,17 @@ Looking from the top view, we can see that for this rotation, a Moire pattern wa The **examples/** folder has over 30 examples of Moire patterns graphite, Molebdenum Disulfide and blue Phosphorene generated from `bicrystal`. Below are some examples. # Graphite 364-atom unit cell -The unit cell of graphite with 364 atoms can be generated by using parameters: m = 6, n = 5, and rotation angle of 6.01 degrees. Shown below is the top view. +The unit cell of graphite with 364 atoms can be generated by using parameters: m = 6, n = 5. Shown below is the top view. ![cc364](https://user-images.githubusercontent.com/62076249/87933970-98f5b000-ca64-11ea-906b-15a1036989a1.PNG) # Blue phosphorene 172-atom unit cell -The unit cell of blue phosphorene with 172 atoms can be generated by using parameters: m = 6, n = 1, and rotation angle of 44.82 degrees. Shown below is the top view. +The unit cell of blue phosphorene with 172 atoms can be generated by using parameters: m = 6, n = 1. Shown below is the top view. ![bluep172](https://user-images.githubusercontent.com/62076249/87934152-e245ff80-ca64-11ea-8f36-b69b5799e3fa.PNG) # Molybdenun Disulfide 546-atom unit cell -The unit cell of MoS2 with 546 atoms atoms can be generated by using parameters: m = 6, n = 5, and rotation angle of 6.01 degrees. Shown below is the top view. +The unit cell of MoS2 with 546 atoms atoms can be generated by using parameters: m = 6, n = 5. Shown below is the top view. ![mos546](https://user-images.githubusercontent.com/62076249/87934312-2fc26c80-ca65-11ea-97a2-c9cdb3068a9d.PNG) From 675319a8e98e5a92489c6deeee41999e2f9c1e1e Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Thu, 6 Aug 2020 14:57:43 -0300 Subject: [PATCH 24/26] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1b9e68c..46f1d27 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Building unit cells of arbitrary size is often an inevitable task when studying # Download The latest version of ``BiCrystal`` can be found on github: -https://github.com/tilaskabengele/BiCrystal/ +https://github.com/tilaskabengele/BiCrystal/tree/stable **Contact**: Tilas Kabengele tilas.kabengele@dal.ca From e42c19bd63a4a21bdf16e7891bbd68c019e036f5 Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Wed, 17 Feb 2021 17:51:53 -0400 Subject: [PATCH 25/26] Update program.py --- bicrystal/program.py | 159 ++++++++++++++++++++++++++++++++----------- 1 file changed, 118 insertions(+), 41 deletions(-) diff --git a/bicrystal/program.py b/bicrystal/program.py index a2044c4..2f11478 100644 --- a/bicrystal/program.py +++ b/bicrystal/program.py @@ -37,6 +37,7 @@ from mpl_toolkits.mplot3d.art3d import Poly3DCollection from matplotlib import path from datetime import date, datetime +import time # FUNCTIONS: @@ -100,7 +101,6 @@ def highest(my_crystal): return max(z_cart) - #************************************** # Function name: LOCATE(TEST_ATM,Z_BOT) # Description: Checks if a given atom is from the bottom or top layer @@ -123,6 +123,28 @@ def locate(test_atm,z_bot): return answer + +# *********************************** +# Function Name: INTERLAYER(atm_top,atm_bottom) +# Description: Finds the interlayer seperation bettwen the layers +# Inputs: Python crystal +# Output: Interlayer seperation in bohr + +def interlayer(my_crystal): + + atmz = [] + for atm in my_crystal: + atmz.append(atm.coords_cartesian[2]) + + z = sorted(atmz) + z_bot = z[:len(z)//2] + z_top = z[len(z)//2:] + seperation = min(z_top) - max(z_bot) + + return seperation*0.529177249 + + + #*********************************** # Function name: NEWCELL(MY_CRYSTAL,M,N) # Description: This function creates lattice vectors of a rotated layer @@ -131,14 +153,30 @@ def locate(test_atm,z_bot): def newcell(my_crystal,atoms,m,n): - a, b, c = my_crystal.lattice_vectors - v1 = atoms[0] + (m+n)*a + (m+n)*b - v2 = np.add(np.add(v1,(m+n)*a),n*b) - v3 = np.add(np.add(v2,(m+n)*b),m*a) - v4 = np.subtract(np.subtract(v3,(m+n)*a),n*b) +# a, b, c = my_crystal.lattice_vectors + a1, a2, a3, alpha, beta, gamma = my_crystal.lattice_parameters +# v1 = atoms[0] + (m+n)*a + (m+n)*b +# v2 = np.add(np.add(v1,(m+n)*a),n*b) +# v3 = np.add(np.add(v2,(m+n)*b),m*a) +# v4 = np.subtract(np.subtract(v3,(m+n)*a),n*b) + + old_a = np.array([0.5*a1*np.sqrt(3), -0.5*a2, 0]) + old_b = np.array([0, a2, 0]) + + v1 = atoms[0] + (m+n)*old_a + (m+n)*old_b + v2 = np.add(np.add(v1,(m+n)*old_a),n*old_b) + v3 = np.add(np.add(v2,(m+n)*old_b),m*old_a) + v4 = np.subtract(np.subtract(v3,(m+n)*old_a),n*old_b) + +# old_a = np.array([a1*0.5*np.sqrt(3), -0.5*a2, 0]) +# old_b = np.array([0, a2, 0]) +# old_c = np.array([0, 0, a3]) + +# new_a = n*old_b - m*old_a +# new_b = m*old_b - n*old_a - new_a = v2 - v1 - new_b = v3 - v2 + new_a = v3 - v2 + new_b = v2 - v1 # ang to bohr mytiply by 1.8897259886 @@ -320,9 +358,17 @@ def bulk(my_crystal): # lattice parameters a, b, c, alpha, beta, gamma = my_crystal.lattice_parameters +# specify vacuum size in bohr +#print('\n***Specify z-coordinate in cell parameter***') +#print ('(Default = ', c*1.8897259886,' Bohr)') +#vacuum = float(input('Enter z value [Bohr] ')) + #### Initializing top and bottom layers #### tt_top,tt_bot,elt_top,elt_bot = bulk(my_crystal) +# Interlayer seperation # +#d = interlayer(my_crystal) + # lattice vectors a1, a2, a3 = my_crystal.lattice_vectors uc = a1,a2,a3 @@ -422,6 +468,10 @@ def bulk(my_crystal): ################### loops for bottom layer ################## ############################################################# +bt0 = time.time() +bt1 = time.time() + + tt1 = [] tt2 = [] atoms_bot = [] @@ -447,6 +497,7 @@ def bulk(my_crystal): atoms_bot = list(tt1) + list (tt2) #atoms_bot = np.array(atoms_bot) +elbt1 = time.time() - bt1 ### Initializing new unit cell ### @@ -537,10 +588,13 @@ def bulk(my_crystal): i+=1 nat_bot+=1 +elbt = time.time() - bt0 +#0.5-(atm[2]*c*1.8897259886)/vacuum ####################### loops for top layer ################## ############################################################## +tp0 = time.time() tt1 = [] tt2 = [] @@ -658,7 +712,8 @@ def bulk(my_crystal): i+=1 nat_top+=1 - +#0.5+(atm[2]*c*1.8897259886)/vacuum +eltp = time.time() - tp0 ######################################################## ############## closing part of scf.in file ############# @@ -667,46 +722,62 @@ def bulk(my_crystal): print ('\nK_POINTS automatic') print ('8 8 1 1 1 1') +#new_a = np.linalg.norm(newa1b) +old_a = np.array([a*0.5*np.sqrt(3), -0.5*b, 0]) +old_b = np.array([0, b, 0]) +old_c = np.array([0, 0, c]) + +newa1 = -m*old_a + n*old_b +newa2 = -m*old_b + n*old_a + # cell parameters in bohr -uc1 = np.around(newa1b*1.8897259886, decimals=8) -uc2 = np.around(newa2b*1.8897259886, decimals=8) -uc3 = np.around(a3*1.8897259886, decimals=8) +uc1 = np.around(newa1b*1.8897259886, decimals=12) +uc2 = np.around(newa2b*1.8897259886, decimals=12) +uc3 = np.around(a3*1.8897259886, decimals=12) uc1 = list(uc1) uc2 = list(uc2) uc3 = list(uc3) #unit_cell = ' '.join([str(elem) for elem in uc]) print ('\nCELL_PARAMETERS bohr') -print (' ','{:12.6f} {:12.6f} {:12.6f}'.format(uc1[0],uc1[1],uc1[2])) -print (' ','{:12.6f} {:12.6f} {:12.6f}'.format(uc2[0],uc2[1],uc2[2])) -print (' ','{:12.6f} {:12.6f} {:12.6f}'.format(uc3[0],uc3[1],uc3[2])) - +print (' ','{:17.12f} {:17.12f} {:17.12f}'.format(uc1[0],uc1[1],uc1[2])) +print (' ','{:17.12f} {:17.12f} {:17.12f}'.format(uc2[0],uc2[1],uc2[2])) +print (' ','{:17.12f} {:17.12f} {:17.12f}'.format(uc3[0],uc3[1],uc3[2])) ############################################################# ##################### PLOTTING RESULTS ###################### +pt1 = time.time() ## figure settings ## fig = plt.figure(figsize = (8, 8)) ax = fig.add_subplot(111, projection='3d') -fig.set_facecolor('black') -ax.set_facecolor('black') +fig.set_facecolor('white') +ax.set_facecolor('white') ax.grid(False) -ax.w_xaxis.set_pane_color((0.0, 0.0, 0.0, 0.0)) -ax.w_yaxis.set_pane_color((0.0, 0.0, 0.0, 0.0)) -ax.w_zaxis.set_pane_color((0.0, 0.0, 0.0, 0.0)) +ax.set_xticks([]) +ax.set_yticks([]) +ax.set_zticks([]) +plt.axis('off') +plt.grid(b=None) +#ax.w_xaxis.set_pane_color((0.0, 0.0, 0.0, 0.0)) +#ax.w_yaxis.set_pane_color((0.0, 0.0, 0.0, 0.0)) +#ax.w_zaxis.set_pane_color((0.0, 0.0, 0.0, 0.0)) # Initializing bottom coordinates for new unitcell plotting coord = [p1b, p2b, p3b, p4b] coord.append(coord[0]) xb, yb = zip(*coord) -plt.plot(xb,yb) + +# plotting boundary at lowest z position +zb = lowest(my_crystal) +plt.plot(xb,yb,zb) # plotting bottom layer atoms bot = bot.T supx,supy,supz = list(bot) -ax.scatter(supx, supy, supz, s=10*num, c='tab:green', alpha=0.4) +ax.scatter(supx, supy, supz, s=5*num, c='tab:green', alpha=0.4) ax.scatter(supx, supy, supz, c='tab:blue') # Adding bonds to bottom layer @@ -727,15 +798,18 @@ def bulk(my_crystal): # Initializing TOP coordinates for new unitcell plotting -#coord = [p1t, p2t, p3t, p4t] -#coord.append(coord[0]) -#xt, yt = zip(*coord) -#plt.plot(xt,yt) +coord = [p1t, p2t, p3t, p4t] +coord.append(coord[0]) +xt, yt = zip(*coord) + +# plotting the boundary at hiest z position +zt = highest(my_crystal) +plt.plot(xt,yt,zt) # plotting TOP layer atoms top = top.T supx,supy,supz = list(top) -ax.scatter(supx, supy, supz, s=10*num, c='tab:red', alpha=0.4) +ax.scatter(supx, supy, supz, s=5*num, c='tab:red', alpha=0.4) ax.scatter(supx, supy, supz, c='tab:blue') # Adding bonds to TOP layer @@ -758,23 +832,26 @@ def bulk(my_crystal): plt.show() +elplt = time.time() - pt1 + +j2 = 90 + np.rad2deg(phi/2) +mk = 1/(2*(np.abs(np.sin((phi/2))))) ########################## SUMMARY REPORT ############################### print ("\n********************* SUMMARY REPORT ***********************") -print ('\nRotation angle (deg) = ', np.round(rotation_angle,3)) -print ('Relative Rotation (deg) = ',np.round(np.rad2deg(phi),3)) +#print ('\nRotation angle (deg) = ', np.round(rotation_angle,3)) +#print ('Relative Rotation (deg) = ',np.round(np.rad2deg(phi),3)) +print ('\nHermann moire rotation = ', j2) +print ('Hermann moire constant = ', mk) print ('\nTop atoms(rotated) = ',len(top_frac)) print ('Bottom atoms = ',len(bot_frac)) print ('\nTotal atoms \n=', len(bot_frac)+len(top_frac)) -print ('\n*************************** Done! **************************\n') - - - - - - - - - - +#print ('\n Gamma = ', j2 + np.round(rotation_angle,3)) +#print ( '\n lattice vectors = ',1.8897259886*a, 1.8897259886*b, 1.8897259886*c) +#print ('\n Erin method lattice vectors = ',1.8897259886*old_a,1.8897259886*old_b) +#print ('time for replication', elbt1) +#print ('time for plotting', elplt) +#print ('\ntotal time top layer',eltp) +#print ('total time bottom layer',elbt) +print ('\n*************************** Done!! **************************\n') From e10debd420f15e053d0f0755597df2f691468c19 Mon Sep 17 00:00:00 2001 From: Tilas Kabengele <62076249+tilaskabengele@users.noreply.github.com> Date: Wed, 17 Feb 2021 17:52:19 -0400 Subject: [PATCH 26/26] Update program.py --- bicrystal/program.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bicrystal/program.py b/bicrystal/program.py index 2f11478..b5ced85 100644 --- a/bicrystal/program.py +++ b/bicrystal/program.py @@ -2,7 +2,7 @@ # PROGRAM: BiCRYSTAL -# VERSION: 1.0.7 +# VERSION: 1.0.8 # DESCRIPTION: This program buildscommensurate and incommensurate crystal structures of layered materials. Current version reads CIF files and writes the new structure to a QUANTUM ESPRESSO input file.