├── Matlab ├── sirmodel.mlapp └── SIR Model.prj ├── shouldistayinside ├── Mathematics.pdf ├── images │ ├── flags.png │ ├── icons.png │ ├── reload.png │ ├── virus.png │ ├── bg-border.gif │ ├── british_flag.png │ ├── german_flag.png │ ├── italian_flag.png │ ├── bg-transparent.png │ ├── brazilian_flag.png │ └── mobile │ │ ├── mobile-close.png │ │ ├── mobile-menu.png │ │ ├── mobile-collapse.png │ │ └── mobile-expand.png ├── fonts │ ├── lato-bold-webfont.eot │ ├── lato-bold-webfont.ttf │ ├── lato-bold-webfont.woff │ ├── magra-bold-webfont.eot │ ├── magra-bold-webfont.ttf │ ├── lato-regular-webfont.eot │ ├── lato-regular-webfont.ttf │ ├── magra-bold-webfont.woff │ ├── lato-regular-webfont.woff │ ├── quicksand-bold-webfont.eot │ ├── quicksand-bold-webfont.ttf │ ├── quicksand-bold-webfont.woff │ ├── roboto-regular-webfont.eot │ ├── roboto-regular-webfont.ttf │ ├── roboto-regular-webfont.woff │ ├── magra-bold-webfont.svg │ └── roboto-regular-webfont.svg ├── js │ └── mobile.js ├── datenschutz.html ├── impressum.html ├── css │ ├── mobile.css │ └── style.css ├── backbone.html ├── de.html ├── index.html └── main.js └── LICENSE /Matlab/sirmodel.mlapp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/Matlab/sirmodel.mlapp -------------------------------------------------------------------------------- /shouldistayinside/Mathematics.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/Mathematics.pdf -------------------------------------------------------------------------------- /shouldistayinside/images/flags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/images/flags.png -------------------------------------------------------------------------------- /shouldistayinside/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/images/icons.png -------------------------------------------------------------------------------- /shouldistayinside/images/reload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/images/reload.png -------------------------------------------------------------------------------- /shouldistayinside/images/virus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/images/virus.png -------------------------------------------------------------------------------- /shouldistayinside/images/bg-border.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/images/bg-border.gif -------------------------------------------------------------------------------- /shouldistayinside/images/british_flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/images/british_flag.png -------------------------------------------------------------------------------- /shouldistayinside/images/german_flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/images/german_flag.png -------------------------------------------------------------------------------- /shouldistayinside/images/italian_flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/images/italian_flag.png -------------------------------------------------------------------------------- /shouldistayinside/images/bg-transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/images/bg-transparent.png -------------------------------------------------------------------------------- /shouldistayinside/images/brazilian_flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/images/brazilian_flag.png -------------------------------------------------------------------------------- /shouldistayinside/fonts/lato-bold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/fonts/lato-bold-webfont.eot -------------------------------------------------------------------------------- /shouldistayinside/fonts/lato-bold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/fonts/lato-bold-webfont.ttf -------------------------------------------------------------------------------- /shouldistayinside/fonts/lato-bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/fonts/lato-bold-webfont.woff -------------------------------------------------------------------------------- /shouldistayinside/fonts/magra-bold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/fonts/magra-bold-webfont.eot -------------------------------------------------------------------------------- /shouldistayinside/fonts/magra-bold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/fonts/magra-bold-webfont.ttf -------------------------------------------------------------------------------- /shouldistayinside/fonts/lato-regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/fonts/lato-regular-webfont.eot -------------------------------------------------------------------------------- /shouldistayinside/fonts/lato-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/fonts/lato-regular-webfont.ttf -------------------------------------------------------------------------------- /shouldistayinside/fonts/magra-bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/fonts/magra-bold-webfont.woff -------------------------------------------------------------------------------- /shouldistayinside/images/mobile/mobile-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/images/mobile/mobile-close.png -------------------------------------------------------------------------------- /shouldistayinside/images/mobile/mobile-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/images/mobile/mobile-menu.png -------------------------------------------------------------------------------- /shouldistayinside/fonts/lato-regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/fonts/lato-regular-webfont.woff -------------------------------------------------------------------------------- /shouldistayinside/fonts/quicksand-bold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/fonts/quicksand-bold-webfont.eot -------------------------------------------------------------------------------- /shouldistayinside/fonts/quicksand-bold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/fonts/quicksand-bold-webfont.ttf -------------------------------------------------------------------------------- /shouldistayinside/fonts/quicksand-bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/fonts/quicksand-bold-webfont.woff -------------------------------------------------------------------------------- /shouldistayinside/fonts/roboto-regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/fonts/roboto-regular-webfont.eot -------------------------------------------------------------------------------- /shouldistayinside/fonts/roboto-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/fonts/roboto-regular-webfont.ttf -------------------------------------------------------------------------------- /shouldistayinside/fonts/roboto-regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/fonts/roboto-regular-webfont.woff -------------------------------------------------------------------------------- /shouldistayinside/images/mobile/mobile-collapse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/images/mobile/mobile-collapse.png -------------------------------------------------------------------------------- /shouldistayinside/images/mobile/mobile-expand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielpetri1/covid19/HEAD/shouldistayinside/images/mobile/mobile-expand.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Daniel Petri Rocha, Kevin Scibilia, Raphael Schmid 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /shouldistayinside/js/mobile.js: -------------------------------------------------------------------------------- 1 | window.onload = function(){ 2 | var getNavi = document.getElementById('navigation'); 3 | 4 | var mobile = document.createElement("span"); 5 | mobile.setAttribute("id","mobile-navigation"); 6 | getNavi.parentNode.insertBefore(mobile,getNavi); 7 | 8 | document.getElementById('mobile-navigation').onclick = function(){ 9 | var a = getNavi.getAttribute('style'); 10 | if(a){ 11 | getNavi.removeAttribute('style'); 12 | document.getElementById('mobile-navigation').style.backgroundImage='url(images/mobile/mobile-menu.png)'; 13 | } else { 14 | getNavi.style.display='block'; 15 | document.getElementById('mobile-navigation').style.backgroundImage='url(images/mobile/mobile-close.png)'; 16 | } 17 | }; 18 | var getElm = getNavi.getElementsByTagName("LI"); 19 | for(var i=0;i1){ 21 | var smenu = document.createElement("span"); 22 | smenu.setAttribute("class","mobile-submenu"); 23 | smenu.setAttribute("OnClick","submenu("+i+")"); 24 | getElm[i].appendChild(smenu); 25 | }; 26 | }; 27 | submenu = function (i){ 28 | var sub = getElm[i].children[1]; 29 | var b = sub.getAttribute('style'); 30 | if(b){ 31 | sub.removeAttribute('style'); 32 | getElm[i].lastChild.style.backgroundImage='url(images/mobile/mobile-expand.png)'; 33 | getElm[i].lastChild.style.backgroundColor='rgba(121, 101, 102, 0.91)'; 34 | } else { 35 | sub.style.display='block'; 36 | getElm[i].lastChild.style.backgroundImage='url(images/mobile/mobile-collapse.png)'; 37 | getElm[i].lastChild.style.backgroundColor='rgba(204, 60, 104, 0.91)'; 38 | } 39 | }; 40 | }; 41 | -------------------------------------------------------------------------------- /Matlab/SIR Model.prj: -------------------------------------------------------------------------------- 1 | 2 | 3 | SIR Model 4 | 5 | 6 | 7 | 8 | 9 | 10 | A simple SIR model to simulate the spread of a disease given the following starting values as input: 11 | 12 | - % infected 13 | - Contact rate 14 | - Recovery rate 15 | - Max. time 16 | - % removed 17 | 18 | R_eff is also calculated. 19 | C:\Users\Daniel\AppData\Local\Temp\tpeb00a037_249c_451c_a9e0_45e3dbe7c142.png 20 | 1.0 21 | 22 | 23 | 24 | 25 | ${PROJECT_ROOT} 26 | 29edb3f5-b5c7-49c3-a0b1-b1226d478453 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | ${PROJECT_ROOT}\sirmodel.mlapp 43 | 44 | 45 | 46 | 47 | 48 | C:\Users\Daniel\Documents\covid19 49 | 50 | 51 | 52 | C:\Program Files\MATLAB\R2020a 53 | 54 | 55 | 56 | false 57 | false 58 | true 59 | false 60 | false 61 | false 62 | false 63 | false 64 | 10.0 65 | false 66 | true 67 | win64 68 | true 69 | 70 | 71 | -------------------------------------------------------------------------------- /shouldistayinside/datenschutz.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 |

Datenschutzerklärung

7 |
8 | 9 |

§ 1 Information über die Erhebung personenbezogener Daten

10 | 11 |

12 |

    (1) Im Folgenden informieren wir über die Erhebung personenbezogener Daten bei Nutzung unserer Website. Personenbezogene Daten sind alle Daten, die auf Sie persönlich beziehbar sind, z. B. Name, Adresse, E-Mail-Adressen, Nutzerverhalten.
13 | 14 |
    (2) Verantwortlicher gem. Art. 4 Abs. 7 EU-Datenschutz-Grundverordnung (DS-GVO) ist Raphael Schmid, Lindenschmitstr 36 81471 München, raphael.schmid(a)tum.de (siehe unser Impressum).
15 | 16 |
    (3) Bei Ihrer Kontaktaufnahme mit uns per E-Mail oder über ein Kontaktformular werden die von Ihnen mitgeteilten Daten (Ihre E-Mail-Adresse, ggf. Ihr Name und Ihre Telefonnummer) von uns gespeichert, um Ihre Fragen zu beantworten. Die in diesem Zusammenhang anfallenden Daten löschen wir, nachdem die Speicherung nicht mehr erforderlich ist, oder schränken die Verarbeitung ein, falls gesetzliche Aufbewahrungspflichten bestehen.
17 |

18 | 19 | 20 |

§ 2 Ihre Rechte

21 | 22 |

23 |

    (1) Sie haben gegenüber uns folgende Rechte hinsichtlich der Sie betreffenden personenbezogenen Daten:
24 | 37 |
    (2) Wenn Sie glauben, dass die Verarbeitung Ihrer Daten gegen das Datenschutzrecht verstößt oder Ihre datenschutzrechtlichen Ansprüche sonst in einer Weise verletzt worden sind, können 38 | Sie sich bei dem Bayrischen Landesamt für Datenschutzaufsicht oder bei jeder anderen Datenschutzaufsichtsbehörde über uns beschweren. 39 |
40 |

41 | 42 | 43 |

§ 3 Automatische Datenspeicherung

44 | 45 |

46 |

50 | 60 |
70 | -------------------------------------------------------------------------------- /shouldistayinside/impressum.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 |

Impressum

7 | 8 |

Angaben gemäß § 5 TMG

9 | 10 |

Raphael Schmid
11 | Lindenschmitstraße 36
12 | 81371 München
13 |

14 | 15 |

16 | 17 | Kontakt:
18 | E-Mail: raphael.schmid(a)tum.de
19 | Telefon: 017647697809 20 |

21 | 22 |

23 | Haftungsausschluss: 24 |

25 | Haftung für Inhalte 26 |

27 | Die Inhalte unserer Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte können wir jedoch keine Gewähr übernehmen. 28 | Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter 29 | jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. 30 | Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst 31 | ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen. 32 |

33 | Haftung für Links

35 | Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. 36 | Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche 37 | Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar. Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete 38 | Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen. 39 |

40 | Urheberrecht 41 |

42 | Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art 43 | der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind nur 44 | für den privaten, nicht kommerziellen Gebrauch gestattet. Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. 45 | Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. 46 | Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen. 47 |

48 | Weitere Hinweise 49 |

50 | Die Nutzung unserer Webseite ist in der Regel ohne Angabe personenbezogener Daten möglich. Soweit auf unseren Seiten personenbezogene Daten (beispielsweise Name, Anschrift oder eMail-Adressen) 51 | erhoben werden, erfolgt dies, soweit möglich, stets auf freiwilliger Basis. Diese Daten werden ohne Ihre ausdrückliche Zustimmung nicht an Dritte weitergegeben. 52 |

53 | Datenschutz 54 |

55 | Wir weisen darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen kann. Ein lückenloser Schutz der Daten vor dem Zugriff durch 56 | Dritte ist nicht möglich. 57 |
58 | Der Nutzung von im Rahmen der Impressumspflicht veröffentlichten Kontaktdaten durch Dritte zur Übersendung von nicht ausdrücklich angeforderter Werbung und Informationsmaterialien wird hiermit 59 | ausdrücklich widersprochen. Die Betreiber der Seiten behalten sich ausdrücklich rechtliche Schritte im Falle der unverlangten Zusendung von Werbeinformationen, etwa durch Spam-Mails, vor.
60 | 61 | 62 |


63 | 64 | Website Impressum erstellt durch impressum-generator.de von der Kanzlei Hasselbach 65 |

66 | -------------------------------------------------------------------------------- /shouldistayinside/css/mobile.css: -------------------------------------------------------------------------------- 1 | /* Website template by freewebsitetemplates.com */ 2 | @media only screen and (min-width : 320px) and (max-width : 568px) { 3 | html { 4 | -webkit-text-size-adjust: none; 5 | } 6 | img { 7 | max-width: 100%; 8 | } 9 | body #page { 10 | margin: 0; 11 | overflow: hidden; 12 | padding: 0; 13 | width: auto; 14 | } 15 | #header { 16 | width: 100%; 17 | } 18 | #header div { 19 | max-width: none; 20 | overflow: hidden; 21 | padding: 15% 0 15%; 22 | width: 100%; 23 | } 24 | 25 | #header div .language{ 26 | display: block; 27 | margin: 0 ; 28 | padding: 0 0 0 0; 29 | position: absolute; 30 | right: 6%; 31 | top: 5px; 32 | width: 80px; 33 | z-index: 999; 34 | } 35 | 36 | 37 | 38 | 39 | #header span#mobile-navigation { 40 | background: transparent url(../images/mobile/mobile-menu.png) no-repeat; 41 | display: block; 42 | height: 50px; 43 | margin: 0; 44 | padding: 0 0 0 0; 45 | position: absolute; 46 | left: 6%; 47 | top: 20px; 48 | width: 50px; 49 | z-index: 999; 50 | } 51 | #header div > ul#navigation { 52 | background-image: none; 53 | background: rgba(121, 101, 102, 0.91); 54 | border: 1px solid #f8f8f8; 55 | border-radius: 0; 56 | display: none; 57 | height: auto; 58 | padding: 0; 59 | position: absolute; 60 | right: 6%; 61 | top: 70px; 62 | width: 88%; 63 | z-index: 1000; 64 | } 65 | #header div > ul#navigation > li { 66 | border-left: 0; 67 | border-top: 1px solid #f8f8f8; 68 | margin: 0; 69 | padding: 0; 70 | position: relative; 71 | text-align: left; 72 | width: 100%; 73 | } 74 | #header div > ul#navigation > li:first-child { 75 | border-top: 0; 76 | } 77 | #header div > ul#navigation > li:hover { 78 | background-color: transparent; 79 | } 80 | #header div ul#navigation li a { 81 | color: #f8f8f8; 82 | display: block; 83 | font-family: Arial; 84 | font-size: 1.125em; 85 | font-weight: normal; 86 | height: 3em; 87 | line-height: 3.125em; 88 | padding: 0 10px; 89 | text-align: left; 90 | text-shadow: none; 91 | width: auto; 92 | } 93 | #header .mobile-submenu { 94 | background: rgba(121, 101, 102, 0.91) url(../images/mobile/mobile-expand.png) no-repeat center; 95 | border-left: 1px solid #f8f8f8; 96 | display: inline-block; 97 | height: 3.4em; 98 | position: absolute; 99 | right: 0; 100 | top: 0; 101 | width: 50px; 102 | z-index: 0; 103 | } 104 | #header div ul#navigation li ul { 105 | background: none; 106 | border-top: 1px solid #f8f8f8; 107 | padding: 0; 108 | position: static; 109 | right: 0; 110 | text-align: left; 111 | width: 100%; 112 | z-index: 999; 113 | } 114 | #header div ul#navigation li ul, #header div ul#navigation li:hover ul { 115 | display: none; 116 | } 117 | #header div ul#navigation li { 118 | width: 100%; 119 | z-index: 40; 120 | } 121 | #header div ul#navigation li ul li { 122 | background: rgba(121, 101, 102, 0.91); 123 | border-top: 1px solid #f8f8f8; 124 | display: block; 125 | margin: 0; 126 | padding: 0; 127 | text-align: left; 128 | width: 100%; 129 | } 130 | #header div ul#navigation li ul li:first-child { 131 | border: none; 132 | } 133 | #header div ul#navigation li ul li a { 134 | background: rgba(121, 101, 103, 0.91); 135 | color: #f8f8f8; 136 | padding-left: 20px; 137 | text-align: left; 138 | width: auto; 139 | } 140 | #header div ul#navigation li:hover a, #header div ul#navigation li.selected a, #header div ul#navigation li:hover ul li a, #header div ul#navigation li:hover ul li a:hover, #header div ul#navigation li ul li.selected a { 141 | display: block; 142 | } 143 | #header div ul#navigation li.selected > a { 144 | background: rgba(204, 60, 104, 0.91); 145 | color: #f8f8f8; 146 | } 147 | #body { 148 | margin: 0; 149 | padding: 0; 150 | width: 100%; 151 | } 152 | #body.home { 153 | margin: 0; 154 | padding: 0; 155 | width: 100%; 156 | } 157 | } 158 | @media only screen and (max-width : 568px) and (orientation : landscape) { 159 | 160 | } 161 | @media only screen and (max-width : 918px) { 162 | #body{ 163 | } 164 | #body.home { 165 | 166 | } 167 | #body div.blog, #body div.singlepost { 168 | margin: 0; 169 | max-width: none; 170 | overflow: hidden; 171 | padding: 10% 0; 172 | width: 100%; 173 | } 174 | #body.home div.header div { 175 | margin: 0 auto; 176 | max-width: 960px; 177 | min-height: auto; 178 | padding: 0; 179 | position: relative; 180 | } 181 | 182 | #body.home div.header div h2 { 183 | font-size: 30px; 184 | } 185 | #body.home div.body div, #body.home div.footer div { 186 | margin: 0 auto; 187 | max-width: none; 188 | width: 90%; 189 | } 190 | #body.home div.body div div { 191 | float: none; 192 | margin: 0 auto; 193 | padding: 0; 194 | width: 90%; 195 | } 196 | #body.home div.body div div h1, #body.home div.body div div h2, #body.home div.body div div p { 197 | width: 100%; 198 | } 199 | 200 | /*Controls image for the reload button*/ 201 | #body.home div.body div img { 202 | display: block; 203 | float: none; 204 | margin: 0 auto; 205 | padding-right: 8px; 206 | position: inherit; 207 | width: 100%; 208 | } 209 | #body.home div.footer div ul li { 210 | float: none; 211 | margin: 0; 212 | padding: 0 0 8%; 213 | width: 100%; 214 | } 215 | #body.home div.footer div ul li a.contact { 216 | float: none; 217 | } 218 | #body div.body { 219 | 220 | min-height: 60px; 221 | 222 | } 223 | #body div.footer { 224 | margin: 0; 225 | max-width: none; 226 | overflow: hidden; 227 | padding: 0 0 0; 228 | width: 100%; 229 | } 230 | #body div.footer div.sidebar { 231 | float: none; 232 | margin: 10% auto 0; 233 | padding: 36px 0 34px; 234 | width: 90%; 235 | } 236 | #body div.footer div.article { 237 | float: none; 238 | margin: 0 auto; 239 | padding: 8% 0 0 0; 240 | width: 90%; 241 | } 242 | #body div ul { 243 | padding: 10% 0; 244 | width: 100%; 245 | } 246 | #body div ul li { 247 | float: none; 248 | margin: 0 auto; 249 | padding: 0; 250 | width: 90%; 251 | } 252 | #body div ul li h1, #body div ul li p { 253 | margin: 0; 254 | padding: 0; 255 | width: 100%; 256 | } 257 | #body div.blog .featured { 258 | float: none; 259 | margin: 0; 260 | padding: 0; 261 | width: 100%; 262 | } 263 | #body div.blog .sidebar { 264 | background-color: #EFEDEE; 265 | float: none; 266 | margin: 0; 267 | padding: 0 0 71px; 268 | width: 100%; 269 | } 270 | #body div.blog .featured ul li:first-child { 271 | margin: 10% auto; 272 | } 273 | #body div.blog .featured ul li { 274 | background: none; 275 | margin: 10% auto; 276 | width: 90%; 277 | } 278 | #body div.blog .featured ul li div { 279 | float: none; 280 | margin: 0; 281 | padding: 0; 282 | width: 100%; 283 | } 284 | 285 | #body div.blog .featured a.load, #body div.singlepost .featured a.load { 286 | display: none; 287 | } 288 | #body div.blog .sidebar, #body div.singlepost .featured, #body div.singlepost .sidebar { 289 | float: none; 290 | margin: 0 auto; 291 | padding: 0 0 35px; 292 | width: 90%; 293 | } 294 | #body.contact div.body div{ 295 | padding: 4% 0; 296 | max-width: none; 297 | width: 100%; 298 | } 299 | #body.contact div.body div div{ 300 | padding: 5% 0; 301 | width: 90%; 302 | } 303 | 304 | #body.contact div.body div div h1, #body.contact div.body div div p{ 305 | padding: 0 0 0 4%; 306 | width: 96%; 307 | } 308 | #footer div { 309 | margin: 0 auto; 310 | width: 90%; 311 | } 312 | 313 | #footer div { 314 | margin: 0 auto; 315 | width: 90%; 316 | padding: 0 0 20 0; 317 | } 318 | 319 | #footer div ul{ 320 | padding: 0 0 0 0; 321 | } 322 | #footer div ul .connect{ 323 | padding: 0 0 0 0; 324 | } 325 | 326 | #footer .love{ 327 | padding: 10 0 0 0; 328 | } 329 | #footer .love p{ 330 | 331 | } 332 | 333 | 334 | 335 | #body div.footer .contact { 336 | float: none; 337 | margin: 0 auto; 338 | max-width: none; 339 | padding: 4% 0; 340 | width: 90%; 341 | } 342 | #body div.footer .contact form { 343 | margin: 0; 344 | overflow: hidden; 345 | padding: 0; 346 | width: 100%; 347 | } 348 | #body div.footer .contact form input, #body div.footer .contact form textarea { 349 | -webkit-appearance: none; 350 | border-radius: 0; 351 | margin: 0 auto 8px; 352 | width: 90%; 353 | } 354 | #body div.footer .contact form input#submit { 355 | -webkit-appearance: none; 356 | margin: 0 0 0 2%; 357 | } 358 | #body div.footer .section { 359 | background-color: #EFEDEE; 360 | float: none; 361 | margin: 0 auto 5%; 362 | max-width: none; 363 | padding: 0 0 35px; 364 | width: 90%; 365 | } 366 | 367 | 368 | 369 | /*Stuff for the Slider and the input box*/ 370 | #body div.block{ 371 | margin: 0 auto; 372 | padding: 0 0 0 0; 373 | width: 100%; 374 | } 375 | 376 | #body .slideContainer{ 377 | margin: 0 auto; 378 | width: 90% 379 | } 380 | 381 | #body .slider{ 382 | width: 100%; 383 | } 384 | 385 | #body.home div.number h1{ 386 | font-size: 100px; 387 | } 388 | 389 | #body.home div.body { 390 | padding: 0 0 0 0; 391 | min-width: 350px; 392 | } 393 | 394 | 395 | } 396 | -------------------------------------------------------------------------------- /shouldistayinside/backbone.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | backbone code 6 | 7 | 8 | 9 | 10 | 15 | 16 | 17 |

Covid19

18 |

19 | Backbone code. No GUI here for you :( 20 |

21 | 22 | 23 | 24 | 253 | 254 | 255 | 256 | 257 | 258 | 278 | 279 | 280 | 281 | 282 | -------------------------------------------------------------------------------- /shouldistayinside/css/style.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | body { 6 | margin: 0; 7 | padding: 0; 8 | position: relative; 9 | width: auto; 10 | } 11 | body #page { 12 | margin: 0; 13 | overflow: hidden; 14 | padding: 0; 15 | width: auto; 16 | } 17 | a { 18 | text-decoration: none; 19 | outline: none; 20 | } 21 | a:active { 22 | background: none; 23 | } 24 | img { 25 | border: none; 26 | } 27 | /*-------------------------------------------FONTS---------------------------------------------*/ 28 | @font-face { 29 | font-family: 'roboto-regular-webfont'; 30 | src: url('../fonts/roboto-regular-webfont.eot'); 31 | src: url('../fonts/roboto-regular-webfont.woff') format('woff'), url('../fonts/roboto-regular-webfont.ttf') format('truetype'), url('../fonts/roboto-regular-webfont.svg') format('svg'); 32 | } 33 | @font-face { 34 | font-family: 'quicksand-bold-webfont'; 35 | src: url('../fonts/quicksand-bold-webfont.eot'); 36 | src: url('../fonts/quicksand-bold-webfont.woff') format('woff'), url('../fonts/quicksand-bold-webfont.ttf') format('truetype'), url('../fonts/quicksand-bold-webfont.svg') format('svg'); 37 | } 38 | @font-face { 39 | font-family: 'magra-bold-webfont'; 40 | src: url('../fonts/magra-bold-webfont.eot'); 41 | src: url('../fonts/magra-bold-webfont.woff') format('woff'), url('../fonts/magra-bold-webfont.ttf') format('truetype'), url('../fonts/magra-bold-webfont.svg') format('svg'); 42 | } 43 | @font-face { 44 | font-family: 'lato-regular-webfont'; 45 | src: url('../fonts/lato-regular-webfont.eot'); 46 | src: url('../fonts/lato-regular-webfont.woff') format('woff'), url('../fonts/lato-regular-webfont.ttf') format('truetype'), url('../fonts/lato-regular-webfont.svg') format('svg'); 47 | } 48 | @font-face { 49 | font-family: 'lato-bold-webfont'; 50 | src: url('../fonts/lato-bold-webfont.eot'); 51 | src: url('../fonts/lato-bold-webfont.woff') format('woff'), url('../fonts/lato-bold-webfont.ttf') format('truetype'), url('../fonts/lato-bold-webfont.svg') format('svg'); 52 | } 53 | /*----------------------------------------header-styles---------------------------------------*/ 54 | #header { 55 | background-color: #DAD7CB; 56 | margin: 0; 57 | padding: 0; 58 | position: relative; 59 | width: 100%; 60 | } 61 | 62 | 63 | 64 | 65 | /*scales the header div*/ 66 | #header div { 67 | margin: 0 auto; 68 | max-width: 1160px; 69 | overflow: hidden; 70 | padding: 0px 0px 0px; 71 | } 72 | 73 | 74 | /*says where the block inside header div is */ 75 | #header div ul { 76 | display: inline-block; 77 | float: left; 78 | list-style: none outside none; 79 | margin: 0 auto; 80 | padding: 17px 0 0; 81 | width: auto; 82 | text-align: center; 83 | } 84 | #header div ul li { 85 | display: inline-block; 86 | *float: left; /* Needed for IE7 and old versions */ 87 | margin: 0 35px; 88 | padding: 0; 89 | position: relative; 90 | width: auto; 91 | } 92 | #header div ul li a { 93 | color: #ffffff; 94 | font-family: lato-regular-webfont; 95 | font-size: 20px; 96 | font-weight: normal; 97 | line-height: 15px; 98 | margin: 0; 99 | padding: 0; 100 | text-align: center; 101 | text-transform: uppercase; 102 | } 103 | 104 | 105 | 106 | /*language selection*/ 107 | 108 | #header div.language { 109 | padding-right: 35px; 110 | display: block; 111 | float: right; 112 | } 113 | 114 | /*Languages represented by flags*/ 115 | 116 | 117 | #header div.language a { 118 | background: url(../images/flags.png) no-repeat; 119 | display: block; 120 | height: 30px; 121 | padding-right: 20px; 122 | text-indent: -99999px; 123 | margin: 0 5px 10px; 124 | width: 30px; 125 | } 126 | 127 | 128 | #header .language a.german { 129 | background-position: 0 -3px; 130 | } 131 | 132 | #header .language a.english{ 133 | background-position: 0 -39px; 134 | } 135 | 136 | /*here is the positionind for the brazilian and italien flag 137 | #header .language a.portuges { 138 | background-position: 0 -80px; 139 | } 140 | 141 | #header .language a.italian{ 142 | background-position: 0 -121px; 143 | } 144 | */ 145 | 146 | 147 | #header div.language ul li{ 148 | margin: 0 2px 0 2px; 149 | } 150 | 151 | /*colour of the selected link*/ 152 | #header div ul li.selected a, #header div ul li.selected a:hover { 153 | color: #ffffff; 154 | } 155 | 156 | #header div ul li.menu { 157 | min-height: 35px; 158 | z-index: 80; 159 | } 160 | 161 | 162 | 163 | 164 | /*----------------------------------------body-home-styles---------------------------------------*/ 165 | #body.home { 166 | margin: 0; 167 | overflow: hidden; 168 | padding: 0; 169 | position: relative; 170 | width: 100%; 171 | } 172 | 173 | /*werte für den header des bodies*/ 174 | #body.home div.header { 175 | margin: 0; 176 | max-width: none; 177 | overflow: hidden; 178 | padding: 0; 179 | width: 100%; 180 | } 181 | 182 | #body.home div.header div { 183 | margin: 0 auto; 184 | max-width: 1160px; 185 | text-align: center; 186 | } 187 | 188 | 189 | #body.home div.header div h2 { 190 | color:black; 191 | text-align: center; 192 | font-family: Arial, Sans-Serif, Helvetica; 193 | font-size: 37px; 194 | } 195 | 196 | 197 | #body.home div.body { 198 | margin: 0 auto; 199 | max-width: 350px; 200 | padding: 0 0 35px; 201 | } 202 | 203 | /*---------------------------------------------------*/ 204 | #body.home div.body div { 205 | width: 280px; 206 | margin: 0 auto; 207 | padding: 0 0 30px 0; 208 | 209 | } 210 | 211 | #body.home div.number { 212 | margin: 0 auto; 213 | max-width: 960px; 214 | padding: 20px 0 20px 0; 215 | } 216 | 217 | #body.home div.number h1{ 218 | color: #333333; 219 | margin: 0 auto; 220 | padding-bottom: 25px; 221 | float: initial; 222 | font-size: 170px; 223 | text-align: center; 224 | font-family: Arial, Sans-Serif, Helvetica; 225 | } 226 | 227 | /*Text: how many people live in munich*/ 228 | 229 | 230 | 231 | #body.home div.body div div.block { 232 | width: auto; 233 | display:grid; 234 | grid-template-columns: max-content max-content max-content; 235 | grid-gap:8px; 236 | 237 | } 238 | 239 | #body.home div.body div p { 240 | color: black; 241 | font-family: roboto-regular-webfont; 242 | font-size: 25px; 243 | font-weight: normal; 244 | text-align: justify; 245 | text-transform: none; 246 | display: inline-block; 247 | margin: 0 auto; 248 | }​ 249 | 250 | #body.home div.body div p:after{ 251 | content: ":"; 252 | } 253 | 254 | /*-----------TextBox--------------*/ 255 | #body.home div.body div input{ 256 | font-size: 20px; 257 | } 258 | 259 | /*-----------Button---------------*/ 260 | 261 | #body.home div.body div button { 262 | display: inline-block; 263 | background-color:transparent; 264 | padding: 0; 265 | margin: 0; 266 | vertical-align: top; 267 | height: 35px; 268 | width: 37px; 269 | border-radius: 50%; 270 | border: transparent; 271 | opacity: 100%; 272 | } 273 | 274 | #close-image img { 275 | display: block; 276 | float: center; 277 | padding-right: 5px; 278 | height: 35px; 279 | width: 35px; 280 | } 281 | 282 | 283 | /*---------------------------------------------------*/ 284 | 285 | 286 | #body.home div.body div div { 287 | float: left; 288 | margin: 0; 289 | padding: 0 0 0 0; 290 | width: 100%; 291 | } 292 | 293 | 294 | 295 | 296 | #body.home div.footer { 297 | margin: 0; 298 | max-width: none; 299 | padding: 0 0 0; 300 | width: 100%; 301 | } 302 | 303 | #body.home div.footer div{ 304 | margin: 150px auto; 305 | max-width: 960px; 306 | text-align: center; 307 | } 308 | 309 | #body.home div.footer div p{ 310 | color: black; 311 | display: block; 312 | font-family: roboto-regular-webfont; 313 | font-size: 17px; 314 | font-weight: normal; 315 | line-height: 150%; 316 | margin: 0 20px; 317 | padding: 10px 0 10px; 318 | text-align: justify; 319 | text-transform: none; 320 | } 321 | 322 | 323 | #body.home div.footer div h1{ 324 | color: black; 325 | display: block; 326 | font-family: roboto-regular-webfont; 327 | font-size: 30px; 328 | text-align: left; 329 | } 330 | 331 | 332 | 333 | /*----------------------------------------body-styles---------------------------------------*/ 334 | 335 | #body div.footer .section p a { 336 | } 337 | #body div.footer .section p a:hover { 338 | } 339 | /*----------------------------------------footer-styles---------------------------------------*/ 340 | #footer { 341 | background-color: #DAD7CB; 342 | overflow: hidden; 343 | min-height: 150px; 344 | margin: 0; 345 | padding: 0; 346 | width: 100%; 347 | } 348 | #footer div { 349 | margin: 0 auto; 350 | overflow: hidden; 351 | padding: 15px 0 0; /* 59 0 13 */ 352 | max-width: 960px; 353 | } 354 | #footer div a { 355 | color: black; 356 | display: block; 357 | font-family: roboto-regular-webfont; 358 | font-size: 15px; 359 | font-weight: normal; 360 | float: right; 361 | text-transform: none; 362 | } 363 | 364 | 365 | #footer div.love p { 366 | color: black; 367 | display: block; 368 | font-family: roboto-regular-webfont; 369 | font-size: 15px; 370 | font-weight: normal; 371 | line-height: 15px; 372 | margin: 0; 373 | padding: 0 0 0; 374 | text-align: center; 375 | text-transform: none; 376 | } 377 | 378 | /*so that everything is alligned in the impressum*/ 379 | #footer ul{ 380 | 381 | list-style: none outside none; 382 | } 383 | 384 | #footer a.test{ 385 | padding-left: 20px; 386 | } 387 | 388 | /*Github icon stuff -----------------------*/ 389 | 390 | #footer div .connect { 391 | float: left; 392 | height: 30px; 393 | padding-top: 12px; 394 | width: auto; 395 | } 396 | 397 | #footer div .connect a { 398 | background: url(../images/icons.png) no-repeat; 399 | display: block; 400 | height: 50px; 401 | padding-right: 10px; 402 | text-indent: -99999px; 403 | width: 50px; 404 | } 405 | #footer div .connect a.github { 406 | background-position: 0 0; 407 | } 408 | 409 | 410 | 411 | 412 | 413 | /* SLIDER CSS START */ 414 | 415 | .slidecontainer { 416 | margin: 0; 417 | max-width: none; 418 | width: 100%; 419 | } 420 | 421 | .slidecontainer div{ 422 | max-width: 960px; 423 | display: block; 424 | margin: 0 auto; 425 | } 426 | 427 | /*-----------These are the details for nerds----------------*/ 428 | details{ 429 | color: black; 430 | font-family: Arial, Helvetica, sans-serif; 431 | font-size: 15px; 432 | display: block; 433 | width: 960px; 434 | margin: 0 auto; 435 | text-align: left; 436 | } 437 | 438 | p{ 439 | color: black; 440 | font-family: Arial, Helvetica, sans-serif; 441 | font-size: 12px; 442 | margin-left: 20px; 443 | } 444 | 445 | /*This tells the social distancing percentage.*/ 446 | #body.home div.percent{ 447 | max-width: 960px; 448 | display: block; 449 | margin: 0 auto; 450 | } 451 | 452 | #body.home div.percent p{ 453 | color: black; 454 | font-family: roboto-regular-webfont; 455 | font-size: 15px; 456 | font-weight: normal; 457 | line-height: 15px; 458 | margin: 0; 459 | padding: 10px 0 10px; 460 | text-align: left; 461 | text-transform: none; 462 | } 463 | 464 | 465 | 466 | /* The slider itself */ 467 | .slider { 468 | display: block; 469 | margin: 0 auto 25px; 470 | -webkit-appearance: none; /* Override default CSS styles */ 471 | appearance: none; 472 | width: 960px; /* Full-width */ 473 | height: 25px; /* Specified height */ 474 | background: #d3d3d3; /* Grey background */ 475 | outline: none; /* Remove outline */ 476 | opacity: 0.7; /* Set transparency (for mouse-over effects on hover) */ 477 | -webkit-transition: .2s; /* 0.2 seconds transition on hover */ 478 | transition: opacity .2s; 479 | } 480 | 481 | /* Mouse-over effects */ 482 | .slider:hover { 483 | opacity: 1; /* Fully shown on mouse-over */ 484 | } 485 | 486 | /* The slider handle (use -webkit- (Chrome, Opera, Safari, Edge) and -moz- (Firefox) to override default look) */ 487 | .slider::-webkit-slider-thumb { 488 | -webkit-appearance: none; /* Override default look */ 489 | appearance: none; 490 | width: 25px; /* Set a specific slider handle width */ 491 | height: 25px; /* Slider handle height */ 492 | background: #333333; /* Green background */ 493 | cursor: pointer; /* Cursor on hover */ 494 | } 495 | 496 | .slider::-moz-range-thumb { 497 | width: 25px; /* Set a specific slider handle width */ 498 | height: 25px; /* Slider handle height */ 499 | background: #333333; /* Green background */ 500 | cursor: pointer; /* Cursor on hover */ 501 | } 502 | 503 | /* SLIDER CSS END */ 504 | -------------------------------------------------------------------------------- /shouldistayinside/de.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | Should I stay home? 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 56 | 57 |
58 |
59 |
60 |

Wie viele Leben können mit Social Distancing in meiner Stadt / Landkreis gerettet werden?

61 |
62 |
63 | 64 | 65 |
66 |

0

67 |
68 | 69 |
70 |
71 | 72 |
73 |

in

74 | 75 | 76 | 77 | 78 | 458 | 459 |
460 | 461 |
462 |
463 | 464 |
465 |

🧑‍🤝‍🧑 Social-Distancing-Faktor: 0%

466 |
467 | 468 |
469 |
470 | 471 |
472 |
473 | 🤓 Details für Nerds 474 |

475 | R_eff = 476 |

477 |

478 | Fälle: (bezüglich Stadt und Landkreis!) 479 |

480 |

481 | Einwohnerzahl: (bezüglich Stadt und Landkreis!) 482 |

483 |

484 | Kontaktrate (0% Social Distancing): 485 |

486 |

487 | Kontaktrate (0% Social Distancing): 488 |

489 |

490 | Kontaktrate (100% Social Distancing): 491 |

492 |

493 | Prozentzahl infizierter Personen in der ausgewählten Sadt mit 0% Social Distancing zum Ende der Pandemie: 494 |

495 |

496 | Percentage infected in chosen city with 0% social distancing after end of pandemic: 497 |

498 |

499 | Genutzte Daten von Fusionbase wurden als letztes geupdatet am: 500 |

501 |

502 | Probiert unser MATLAB applet aus und spielt selbst mit den Parametern. 503 | Wenn euch Fehler auffallen, weißt uns gerne auf GitHub unter "Issues" darauf hin! 504 |

505 |

506 | Downloade die detaillierte mathematische Erklärung was diese Parameter bedeuten und wie die Simulation funktioniert. 507 |

508 |
509 |
510 | 511 | 546 | 547 | 571 | 572 |
573 | 574 | 575 | 576 | 577 | 578 | -------------------------------------------------------------------------------- /shouldistayinside/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | Should I stay home? 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 58 | 59 |
60 |
61 |
62 |

How many lives can be saved by social distancing in my city?

63 |
64 |
65 | 66 | 67 |
68 |

0

69 |
70 | 71 |
72 |
73 |
74 |

in

75 | 76 | 77 | 78 | 79 | 459 | 460 |
461 |
462 |
463 | 464 |
465 |

🧑‍🤝‍🧑 Social distancing factor: 0% (Move the slider below 👇)

466 |
467 | 468 |
469 |
470 | 471 |
472 |
473 | 🤓 Details for nerds 474 |

475 | R_eff = 476 |

477 |

478 | Cases: (considering city and Landkreis!) 479 |

480 |

481 | Population: (considering city and Landkreis!) 482 |

483 |

484 | Contact rate (0% social distancing): 485 |

486 |

487 | Contact rate (0% social distancing): 488 |

489 |

490 | Contact rate (100% social distancing): 491 |

492 |

493 | Percentage infected in chosen city with 0% social distancing after end of pandemic: 494 |

495 |

496 | Percentage infected in chosen city with 0% social distancing after end of pandemic: 497 |

498 |

499 | Data used from Fusionbase updated on: 500 |

501 |

502 | Try our MATLAB applet to play around with the parameters. 503 | You can report any errors on our "Issues" tab on GitHub! 504 |

505 |

506 | Download the in-depth mathematical explanation on what these parameters mean and how this simulation works. 507 |

508 |
509 |
510 | 511 | 544 | 545 | 569 | 570 |
571 | 572 | 573 | 574 | 575 | 576 | -------------------------------------------------------------------------------- /shouldistayinside/main.js: -------------------------------------------------------------------------------- 1 | var slider = document.getElementById("myRange"); 2 | var sd_factor = document.getElementById("sd_factor"); 3 | var result = document.getElementById("result_header"); 4 | 5 | //sd_factor.innerHTML = slider.value; 6 | //result_header.innerHTML = sd_factor.innerHTML; 7 | 8 | function getDatabase(){ 9 | return fetch(fusionbase,otherParam).then(function(value){ 10 | return value.json(); 11 | }); 12 | } 13 | 14 | var fusionbase = "https://cors-anywhere.herokuapp.com/https://api.public.fusionbase.io/cases/latest" 15 | 16 | const otherParam={ 17 | method:"GET", 18 | "headers":{ 19 | "X-API-Key":"58f3bf99-3ecc-4c89-a31e-7fa332b19f77" 20 | } 21 | //"Content-Type":"application/json" 22 | } 23 | 24 | var city = "München" 25 | 26 | document.getElementById("city_input").onkeypress = function(event){ 27 | if (event.keyCode == 13 || event.which == 13){ 28 | city = document.getElementById("city_input").value; 29 | slider.oninput(); //refreshes numbers 30 | } 31 | }; 32 | 33 | function refreshCity(){ 34 | city = document.getElementById("city_input").value; 35 | slider.oninput() //refreshes numbers 36 | } 37 | 38 | getDatabase().then(function(db){ 39 | 40 | console.log("fresh database loaded successfully"); 41 | 42 | slider.oninput = function () { 43 | //var city = decodeURIComponent(window.location.search.substring(6)); 44 | //console.log("received city: " + city) 45 | // Default fallback 46 | if(city === "" || !(city == "Stormarn" || 47 | city == "Plön" || 48 | city == "Kiel" || 49 | city == "Lübeck" || 50 | city == "Segeberg" || 51 | city == "Steinburg" || 52 | city == "Ostholstein" || 53 | city == "Schleswig-Flensburg" || 54 | city == "Rendsburg-Eckernförde" || 55 | city == "Pinneberg" || 56 | city == "Nordfriesland" || 57 | city == "Flensburg" || 58 | city == "Dithmarschen" || 59 | city == "Herzogtum Lauenburg" || 60 | city == "Neumünster" || 61 | city == "Hamburg" || 62 | city == "Leer" || 63 | city == "Goslar" || 64 | city == "Stade" || 65 | city == "Ammerland" || 66 | city == "Wittmund" || 67 | city == "Hildesheim" || 68 | city == "Friesland" || 69 | city == "Holzminden" || 70 | city == "Delmenhorst" || 71 | city == "Wolfsburg" || 72 | city == "Schaumburg" || 73 | city == "Göttingen" || 74 | city == "Wesermarsch" || 75 | city == "Osterholz" || 76 | city == "Diepholz" || 77 | city == "Helmstedt" || 78 | city == "Northeim" || 79 | city == "Vechta" || 80 | city == "Emden" || 81 | city == "Rotenburg (Wümme)" || 82 | city == "Celle" || 83 | city == "Region Hannover" || 84 | city == "Grafschaft Bentheim" || 85 | city == "Osnabrück" || 86 | city == "Cuxhaven" || 87 | city == "Uelzen" || 88 | city == "Lüchow-Dannenberg" || 89 | city == "Gifhorn" || 90 | city == "Oldenburg (Oldb)" || 91 | city == "Wolfenbüttel" || 92 | city == "Hameln-Pyrmont" || 93 | city == "Heidekreis" || 94 | city == "Aurich" || 95 | city == "Nienburg (Weser)" || 96 | city == "Peine" || 97 | city == "Oldenburg" || 98 | city == "Lüneburg" || 99 | city == "Verden" || 100 | city == "Braunschweig" || 101 | city == "Wilhelmshaven" || 102 | city == "Emsland" || 103 | city == "Harburg" || 104 | city == "Salzgitter" || 105 | city == "Cloppenburg" || 106 | city == "Bremerhaven" || 107 | city == "Bremen" || 108 | city == "Dortmund" || 109 | city == "Bottrop" || 110 | city == "Mülheim an der Ruhr" || 111 | city == "Hochsauerlandkreis" || 112 | city == "Bonn" || 113 | city == "Münster" || 114 | city == "Steinfurt" || 115 | city == "Recklinghausen" || 116 | city == "Remscheid" || 117 | city == "Paderborn" || 118 | city == "Mettmann" || 119 | city == "Hamm" || 120 | city == "Gütersloh" || 121 | city == "Solingen" || 122 | city == "Rheinisch-Bergischer Kreis" || 123 | city == "Wuppertal" || 124 | city == "Rhein-Sieg-Kreis" || 125 | city == "Städteregion Aachen" || 126 | city == "Borken" || 127 | city == "Rhein-Kreis Neuss" || 128 | city == "Wesel" || 129 | city == "Soest" || 130 | city == "Rhein-Erft-Kreis" || 131 | city == "Olpe" || 132 | city == "Viersen" || 133 | city == "Krefeld" || 134 | city == "Essen" || 135 | city == "Herne" || 136 | city == "Coesfeld" || 137 | city == "Oberbergischer Kreis" || 138 | city == "Düsseldorf" || 139 | city == "Kleve" || 140 | city == "Bochum" || 141 | city == "Köln" || 142 | city == "Gelsenkirchen" || 143 | city == "Leverkusen" || 144 | city == "Heinsberg" || 145 | city == "Warendorf" || 146 | city == "Oberhausen" || 147 | city == "Bielefeld" || 148 | city == "Hagen" || 149 | city == "Minden-Lübbecke" || 150 | city == "Höxter" || 151 | city == "Euskirchen" || 152 | city == "Düren" || 153 | city == "Unna" || 154 | city == "Ennepe-Ruhr-Kreis" || 155 | city == "Mönchengladbach" || 156 | city == "Lippe" || 157 | city == "Märkischer Kreis" || 158 | city == "Siegen-Wittgenstein" || 159 | city == "Herford" || 160 | city == "Duisburg" || 161 | city == "Darmstadt" || 162 | city == "Fulda" || 163 | city == "Limburg-Weilburg" || 164 | city == "Gießen" || 165 | city == "Vogelsbergkreis" || 166 | city == "Wetteraukreis" || 167 | city == "Kassel" || 168 | city == "Rheingau-Taunus-Kreis" || 169 | city == "Waldeck-Frankenberg" || 170 | city == "Odenwaldkreis" || 171 | city == "Hersfeld-Rotenburg" || 172 | city == "Groß-Gerau" || 173 | city == "Frankfurt am Main" || 174 | city == "Marburg-Biedenkopf" || 175 | city == "Main-Kinzig-Kreis" || 176 | city == "Werra-Meißner-Kreis" || 177 | city == "Bergstraße" || 178 | city == "Schwalm-Eder-Kreis" || 179 | city == "Hochtaunuskreis" || 180 | city == "Wiesbaden" || 181 | city == "Lahn-Dill-Kreis" || 182 | city == "Main-Taunus-Kreis" || 183 | city == "Darmstadt-Dieburg" || 184 | city == "Offenbach" || 185 | city == "Offenbach am Main" || 186 | city == "Bernkastel-Wittlich" || 187 | city == "Landau in der Pfalz" || 188 | city == "Westerwaldkreis" || 189 | city == "Vulkaneifel" || 190 | city == "Birkenfeld" || 191 | city == "Trier-Saarburg" || 192 | city == "Südwestpfalz" || 193 | city == "Alzey-Worms" || 194 | city == "Pirmasens" || 195 | city == "Frankenthal (Pfalz)" || 196 | city == "Mayen-Koblenz" || 197 | city == "Speyer" || 198 | city == "Altenkirchen (Westerwald)" || 199 | city == "Kaiserslautern" || 200 | city == "Donnersbergkreis" || 201 | city == "Zweibrücken" || 202 | city == "Worms" || 203 | city == "Eifelkreis Bitburg-Prüm" || 204 | city == "Koblenz" || 205 | city == "Bad Kreuznach" || 206 | city == "Mainz" || 207 | city == "Bad Dürkheim" || 208 | city == "Cochem-Zell" || 209 | city == "Trier" || 210 | city == "Neuwied" || 211 | city == "Rhein-Hunsrück-Kreis" || 212 | city == "Ludwigshafen am Rhein" || 213 | city == "Germersheim" || 214 | city == "Kusel" || 215 | city == "Rhein-Pfalz-Kreis" || 216 | city == "Südliche Weinstraße" || 217 | city == "Rhein-Lahn-Kreis" || 218 | city == "Mainz-Bingen" || 219 | city == "Ahrweiler" || 220 | city == "Neustadt an der Weinstraße" || 221 | city == "Esslingen" || 222 | city == "Rottweil" || 223 | city == "Neckar-Odenwald-Kreis" || 224 | city == "Ravensburg" || 225 | city == "Heilbronn" || 226 | city == "Tübingen" || 227 | city == "Ludwigsburg" || 228 | city == "Breisgau-Hochschwarzwald" || 229 | city == "Göppingen" || 230 | city == "Rhein-Neckar-Kreis" || 231 | city == "Tuttlingen" || 232 | city == "Biberach" || 233 | city == "Waldshut" || 234 | city == "Mannheim" || 235 | city == "Rastatt" || 236 | city == "Zollernalbkreis" || 237 | city == "Schwäbisch Hall" || 238 | city == "Böblingen" || 239 | city == "Konstanz" || 240 | city == "Karlsruhe" || 241 | city == "Ulm" || 242 | city == "Hohenlohekreis" || 243 | city == "Lörrach" || 244 | city == "Rems-Murr-Kreis" || 245 | city == "Schwarzwald-Baar-Kreis" || 246 | city == "Emmendingen" || 247 | city == "Sigmaringen" || 248 | city == "Bodenseekreis" || 249 | city == "Freudenstadt" || 250 | city == "Heidenheim" || 251 | city == "Ostalbkreis" || 252 | city == "Alb-Donau-Kreis" || 253 | city == "Freiburg im Breisgau" || 254 | city == "Main-Tauber-Kreis" || 255 | city == "Pforzheim" || 256 | city == "Calw" || 257 | city == "Stuttgart" || 258 | city == "Enzkreis" || 259 | city == "Reutlingen" || 260 | city == "Ortenaukreis" || 261 | city == "Heidelberg" || 262 | city == "Baden-Baden" || 263 | city == "Freyung-Grafenau" || 264 | city == "Kelheim" || 265 | city == "Augsburg" || 266 | city == "Erding" || 267 | city == "Coburg" || 268 | city == "Starnberg" || 269 | city == "Lichtenfels" || 270 | city == "Dachau" || 271 | city == "Neustadt a.d. Waldnaab" || 272 | city == "Bayreuth" || 273 | city == "Bamberg" || 274 | city == "Dillingen a.d. Donau" || 275 | city == "Miesbach" || 276 | city == "Weißenburg-Gunzenhausen" || 277 | city == "Altötting" || 278 | city == "Straubing" || 279 | city == "Schwandorf" || 280 | city == "Rhön-Grabfeld" || 281 | city == "Landshut" || 282 | city == "Donau-Ries" || 283 | city == "Unterallgäu" || 284 | city == "Nürnberg" || 285 | city == "Lindau (Bodensee)" || 286 | city == "Memmingen" || 287 | city == "Neustadt a.d. Aisch-Bad Windsheim" || 288 | city == "Kaufbeuren" || 289 | city == "Ingolstadt" || 290 | city == "Aschaffenburg" || 291 | city == "Cham" || 292 | city == "Neu-Ulm" || 293 | city == "Garmisch-Partenkirchen" || 294 | city == "Kempten (Allgäu)" || 295 | city == "Eichstätt" || 296 | city == "Rottal-Inn" || 297 | city == "Schweinfurt" || 298 | city == "Aichach-Friedberg" || 299 | city == "Straubing-Bogen" || 300 | city == "Forchheim" || 301 | city == "Würzburg" || 302 | city == "Traunstein" || 303 | city == "Bad Tölz-Wolfratshausen" || 304 | city == "Weiden i.d. OPf." || 305 | city == "Erlangen-Höchstadt" || 306 | city == "Haßberge" || 307 | city == "Neumarkt i.d. OPf." || 308 | city == "Rosenheim" || 309 | city == "Erlangen" || 310 | city == "Mühldorf a. Inn" || 311 | city == "Ansbach" || 312 | city == "Neuburg-Schrobenhausen" || 313 | city == "Roth" || 314 | city == "Schwabach" || 315 | city == "Passau" || 316 | city == "Fürstenfeldbruck" || 317 | city == "Fürth" || 318 | city == "Hof" || 319 | city == "München" || 320 | city == "Deggendorf" || 321 | city == "Amberg" || 322 | city == "Regensburg" || 323 | city == "Ebersberg" || 324 | city == "Nürnberger Land" || 325 | city == "Landsberg am Lech" || 326 | city == "Tirschenreuth" || 327 | city == "Regen" || 328 | city == "Bad Kissingen" || 329 | city == "Freising" || 330 | city == "Main-Spessart" || 331 | city == "Miltenberg" || 332 | city == "Weilheim-Schongau" || 333 | city == "Kronach" || 334 | city == "Pfaffenhofen a.d. Ilm" || 335 | city == "Berchtesgadener Land" || 336 | city == "Kulmbach" || 337 | city == "Wunsiedel i. Fichtelgebirge" || 338 | city == "Günzburg" || 339 | city == "Amberg-Sulzbach" || 340 | city == "Oberallgäu" || 341 | city == "Dingolfing-Landau" || 342 | city == "Kitzingen" || 343 | city == "Ostallgäu" || 344 | city == "Saarpfalz-Kreis" || 345 | city == "Merzig-Wadern" || 346 | city == "Saarlouis" || 347 | city == "Regionalverband Saarbrücken" || 348 | city == "Neunkirchen" || 349 | city == "St. Wendel" || 350 | city == "Berlin" || 351 | city == "Elbe-Elster" || 352 | city == "Teltow-Fläming" || 353 | city == "Dahme-Spreewald" || 354 | city == "Havelland" || 355 | city == "Potsdam" || 356 | city == "Oberspreewald-Lausitz" || 357 | city == "Brandenburg an der Havel" || 358 | city == "Spree-Neiße" || 359 | city == "Prignitz" || 360 | city == "Uckermark" || 361 | city == "Cottbus" || 362 | city == "Ostprignitz-Ruppin" || 363 | city == "Oberhavel" || 364 | city == "Frankfurt (Oder)" || 365 | city == "Potsdam-Mittelmark" || 366 | city == "Barnim" || 367 | city == "Märkisch-Oderland" || 368 | city == "Oder-Spree" || 369 | city == "Nordwestmecklenburg" || 370 | city == "Schwerin" || 371 | city == "Ludwigslust-Parchim" || 372 | city == "Mecklenburgische Seenplatte" || 373 | city == "Vorpommern-Greifswald" || 374 | city == "Vorpommern-Rügen" || 375 | city == "Rostock" || 376 | city == "Vogtlandkreis" || 377 | city == "Meißen" || 378 | city == "Erzgebirgskreis" || 379 | city == "Mittelsachsen" || 380 | city == "Sächsische Schweiz-Osterzgebirge" || 381 | city == "Chemnitz" || 382 | city == "Dresden" || 383 | city == "Bautzen" || 384 | city == "Nordsachsen" || 385 | city == "Leipzig" || 386 | city == "Görlitz" || 387 | city == "Zwickau" || 388 | city == "Börde" || 389 | city == "Harz" || 390 | city == "Wittenberg" || 391 | city == "Dessau-Roßlau" || 392 | city == "Altmarkkreis Salzwedel" || 393 | city == "Saalekreis" || 394 | city == "Jerichower Land" || 395 | city == "Burgenlandkreis" || 396 | city == "Salzlandkreis" || 397 | city == "Stendal" || 398 | city == "Anhalt-Bitterfeld" || 399 | city == "Magdeburg" || 400 | city == "Halle (Saale)" || 401 | city == "Mansfeld-Südharz" || 402 | city == "Sonneberg" || 403 | city == "Schmalkalden-Meiningen" || 404 | city == "Gera" || 405 | city == "Hildburghausen" || 406 | city == "Weimar" || 407 | city == "Eichsfeld" || 408 | city == "Weimarer Land" || 409 | city == "Saale-Holzland-Kreis" || 410 | city == "Saale-Orla-Kreis" || 411 | city == "Erfurt" || 412 | city == "Unstrut-Hainich-Kreis" || 413 | city == "Kyffhäuserkreis" || 414 | city == "Sömmerda" || 415 | city == "Wartburgkreis" || 416 | city == "Saalfeld-Rudolstadt" || 417 | city == "Eisenach" || 418 | city == "Gotha" || 419 | city == "Suhl" || 420 | city == "Nordhausen" || 421 | city == "Jena" || 422 | city == "Ilm-Kreis" || 423 | city == "Greiz" || 424 | city == "Altenburger Land")){ 425 | city = "München"; 426 | window.location.reload(true); 427 | } 428 | 429 | //console.log(city); 430 | if (document.getElementById("city_input").value == "") { 431 | document.getElementById("city_input").value = "München" 432 | } 433 | 434 | if (this.value == 0){ 435 | sd_factor.innerHTML = this.value + "%" + " (life as usual 🌍 / move the slider below 👇)"; 436 | } else if (this.value <= 20){ 437 | sd_factor.innerHTML = this.value + "%" + " (e.g. increasing hygiene 🧼🖐, decreasing parties 🥳)"; 438 | } else if (this.value <= 30){ 439 | sd_factor.innerHTML = this.value + "%" + " (e.g. increasing home office 💼)"; 440 | } else if (this.value <= 50){ 441 | sd_factor.innerHTML = this.value + "%" + " (e.g. closing schools 🏫)"; 442 | } else if (this.value <= 65){ 443 | sd_factor.innerHTML = this.value + "%" + " (e.g. lockdown 🏠 for a few weeks)"; 444 | } else if (this.value <= 80){ 445 | sd_factor.innerHTML = this.value + "%" + " (e.g. strict lockdown 🏠 for a few months)"; 446 | } else if (this.value > 80){ 447 | sd_factor.innerHTML = this.value + "%" + " (e.g. very long and strict lockdown 🚫)"; 448 | } 449 | 450 | var dbInfo = getData(city, db); 451 | 452 | //console.log(dbInfo[0]) 453 | //console.log(dbInfo[1]) 454 | //console.log(dbInfo[2]) 455 | //console.log(dbInfo[3]) 456 | //console.log(dbInfo[4]) 457 | 458 | var calcResult = calcLivesSaved(dbInfo[0], dbInfo[1].toString(), dbInfo[2].toString(), dbInfo[3], this.value / 100); 459 | result_header.innerHTML = calcResult[0]; 460 | 461 | 462 | document.getElementById("R_eff").innerHTML = "R_eff = " + calcResult[1]; 463 | document.getElementById("casesnerd").innerHTML = "Cases: " + calcResult[2] + " (considering city and Landkreis!)"; 464 | document.getElementById("popnerd").innerHTML = "Population: " + calcResult[3] + " (considering city and Landkreis!)"; 465 | document.getElementById("contact_chosen").innerHTML = "Contact rate (" + this.value +"% social distancing): " + calcResult[6]; 466 | document.getElementById("contact_max").innerHTML = "Contact rate (0% social distancing): " + calcResult[4]; 467 | document.getElementById("contact_min").innerHTML = "Contact rate (100% social distancing): " + calcResult[5]; 468 | document.getElementById("percentage0sd_nerd").innerHTML = "Percentage infected in chosen city with 0% social distancing after end of pandemic: " + calcResult[7]; 469 | document.getElementById("percentagesd_nerd").innerHTML = "Percentage infected in chosen city with " + this.value + "% social distancing after end of pandemic: " + calcResult[8] 470 | document.getElementById("dataset_update").innerHTML = "Data used from Fusionbase updated on: " + dbInfo[4]; 471 | //7 8 472 | 473 | } 474 | //-------------------------- BACKBONE ------------------------------ 475 | 476 | function getData(name, db) { 477 | var data = db; 478 | //console.log(data) 479 | var results = [] 480 | 481 | for (item of data) { 482 | if (item.location_label.includes(name)){ 483 | results.push(item) 484 | } 485 | } 486 | 487 | if (results.length == 0){ 488 | throw "City does not exist" 489 | } 490 | //console.log(data) 491 | //console.log(results) 492 | 493 | var cases = 0; 494 | var population = 0; 495 | var region = results[0].bundesland_name; 496 | 497 | for (item of results){ 498 | //console.log(item.cases) 499 | cases += item.cases; 500 | //console.log(item.population) 501 | population += item.population; 502 | /* 503 | if (item.bundesland_name != region){ 504 | throw "Internal error 3: Inconsistent dataset detected, " + item.bundesland_name + ", " + region 505 | } 506 | */ 507 | } 508 | 509 | //console.log(name) 510 | //console.log(cases) 511 | //console.log(population) 512 | //console.log(region) 513 | 514 | 515 | return [name, cases, population, region, results[0].publication_datetime] 516 | } 517 | 518 | // ---------- RECOVERY RATES (Genesen / Covid19Faelle) -------------- 519 | 520 | var bayern = "0.90834732446" 521 | var nordrheinWestfalen = "0.9056764604" 522 | var badenWuerttemberg = "0.91304347826" 523 | var niedersachsen = "0.89056345264" 524 | var hessen = "0.88235294117" 525 | var rheinlandPfalz = "0.93783088791" 526 | var berlin = "0.92911733852" 527 | var sachsen = "0.89574995235" 528 | var hamburg = "0.92665615142" 529 | var schleswigHolstein = "0.91205211726" 530 | var saarland = "0.91575091575" 531 | var brandenburg = "0.92421441774" 532 | var thueringen = "0.86266390614" 533 | var sachenAnhalt = "0.94228504122" 534 | var mecklenburg = "0.92105263157" 535 | var bremen = "0.83207261724" 536 | // ---------- RECOVERY RATES -------------- 537 | 538 | 539 | function ndsolve(f, x0, dt, tmax) { //code for ndsolve from https://mathjs.org/examples/browser/rocket_trajectory_optimization.html.html 540 | const n = f.size()[0] // Number of variables 541 | const x = x0.clone() // Current values of variables 542 | const dxdt = [] // Temporary variable to hold time-derivatives 543 | const result = [] // Contains entire solution 544 | 545 | const nsteps = math.divide(tmax, dt) // Number of time steps 546 | for(let i=0; i 0.98 607 | || parseFloat(sdvalue) < 0 || parseFloat(sdvalue) > 1){ 608 | throw "Internal error 1: invalid input parameters." 609 | } 610 | 611 | const sim = math.parser() 612 | var tfinal = "700" //how long the simulation keeps going... Always input an integer in string representation here!! 613 | 614 | sim.evaluate("estimatedRecovered = " + recoveryRateInRegion + " * " + numOfCases) 615 | sim.evaluate("estimatedDead = 0.02 * " + numOfCases) 616 | 617 | sim.evaluate("estimatedRemoved = estimatedRecovered + estimatedDead") 618 | sim.evaluate("infectedPercentage = 1 - 0.02 - " + recoveryRateInRegion) 619 | sim.evaluate("estimatedInfected = infectedPercentage * " + numOfCases) 620 | 621 | sim.evaluate("i0 = estimatedInfected / " + numOfPopulation) 622 | sim.evaluate("r0 = estimatedRemoved / " + numOfPopulation) 623 | sim.evaluate("s0 = 1 - i0 - r0") 624 | 625 | sim.evaluate("dt = 1.0") // Simulation timestep 626 | sim.evaluate("tfinal = " + tfinal + ".0") // Simulation duration 627 | 628 | //Calculate deaths in 0% social distancing case 629 | sim.evaluate("b = 0.0714286") //approx. 1/14 630 | sim.evaluate("a = 2.7 * b / s0") //Always input the number as string here so Math.js can handle it with its own representation of the numbers! 631 | sim.evaluate("dsdt(s,i,r) = - a * s * i") 632 | sim.evaluate("didt(s,i,r) = a * s * i - (b * i)") 633 | sim.evaluate("drdt(s,i,r) = b * i") 634 | 635 | const matrix0sd = sim.evaluate("resultmatrix = ndsolve([dsdt, didt, drdt], [s0, i0, r0], dt, tfinal)").toString() 636 | sim.evaluate("percentage0sd = resultmatrix.subset(index(" + tfinal + ", 3))").toString() 637 | 638 | 639 | //Calculate contact rate for 100% social distancing value (needed for interpolation) 640 | sim.evaluate("a_min = 0.3 * b / s0").toString() 641 | 642 | //Find the contact rate corresponding to the given sd value 643 | sim.evaluate("a_sd = (a_min - a) * " + sdvalue + " + a").toString() 644 | 645 | sim.evaluate("dsdt_sd(s,i,r) = - a_sd * s * i") 646 | sim.evaluate("didt_sd(s,i,r) = a_sd * s * i - (b * i)") 647 | sim.evaluate("drdt_sd(s,i,r) = b * i") 648 | 649 | const matrix_sd = sim.evaluate("sd_matrix = ndsolve([dsdt_sd, didt_sd, drdt_sd], [s0, i0, r0], dt, tfinal)").toString() 650 | sim.evaluate("percentage_sd = sd_matrix.subset(index(" + tfinal + ", 3))").toString() 651 | 652 | //check that percentage_sd <= percentage0sd (otherwise makes no sense!) 653 | if (parseFloat(sim.evaluate("percentage_sd").toString()) > parseFloat(sim.evaluate("percentage0sd"))){ 654 | throw "Internal error 2: invalid percentages in calculation" 655 | } 656 | 657 | 658 | const result = sim.evaluate("result = round((percentage0sd - percentage_sd) * 0.02 * " + numOfPopulation + ")").toString() 659 | const r_eff = sim.evaluate("r_eff = (a_sd / b) * s0").toString() 660 | return [result, r_eff, numOfCases, numOfPopulation, sim.evaluate("a").toString(), sim.evaluate("a_min").toString(), sim.evaluate("a_sd").toString(), 661 | sim.evaluate("percentage0sd").toString(), sim.evaluate("percentage_sd").toString()] 662 | } 663 | 664 | //-------------------------- BACKBONE ------------------------------ 665 | }) 666 | 667 | -------------------------------------------------------------------------------- /shouldistayinside/fonts/magra-bold-webfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | -------------------------------------------------------------------------------- /shouldistayinside/fonts/roboto-regular-webfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | --------------------------------------------------------------------------------