504 lines
12 KiB
HTML
504 lines
12 KiB
HTML
|
<!DOCTYPE html>
|
|||
|
|
|||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|||
|
|
|||
|
<head>
|
|||
|
|
|||
|
<meta charset="utf-8" />
|
|||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|||
|
<meta name="generator" content="pandoc" />
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<title>Contribute</title>
|
|||
|
|
|||
|
<script src="site_libs/jquery-1.11.3/jquery.min.js"></script>
|
|||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|||
|
<link href="site_libs/bootstrap-3.3.5/css/cosmo.min.css" rel="stylesheet" />
|
|||
|
<script src="site_libs/bootstrap-3.3.5/js/bootstrap.min.js"></script>
|
|||
|
<script src="site_libs/bootstrap-3.3.5/shim/html5shiv.min.js"></script>
|
|||
|
<script src="site_libs/bootstrap-3.3.5/shim/respond.min.js"></script>
|
|||
|
<script src="site_libs/jqueryui-1.11.4/jquery-ui.min.js"></script>
|
|||
|
<link href="site_libs/tocify-1.9.1/jquery.tocify.css" rel="stylesheet" />
|
|||
|
<script src="site_libs/tocify-1.9.1/jquery.tocify.js"></script>
|
|||
|
<script src="site_libs/navigation-1.1/tabsets.js"></script>
|
|||
|
<link href="site_libs/highlightjs-9.12.0/default.css" rel="stylesheet" />
|
|||
|
<script src="site_libs/highlightjs-9.12.0/highlight.js"></script>
|
|||
|
<link href="site_libs/font-awesome-5.1.0/css/all.css" rel="stylesheet" />
|
|||
|
<link href="site_libs/font-awesome-5.1.0/css/v4-shims.css" rel="stylesheet" />
|
|||
|
<link rel='shortcut icon' type='image/x-icon' href='favicon.ico' />
|
|||
|
|
|||
|
<style type="text/css">code{white-space: pre;}</style>
|
|||
|
<style type="text/css">
|
|||
|
pre:not([class]) {
|
|||
|
background-color: white;
|
|||
|
}
|
|||
|
</style>
|
|||
|
<script type="text/javascript">
|
|||
|
if (window.hljs) {
|
|||
|
hljs.configure({languages: []});
|
|||
|
hljs.initHighlightingOnLoad();
|
|||
|
if (document.readyState && document.readyState === "complete") {
|
|||
|
window.setTimeout(function() { hljs.initHighlighting(); }, 0);
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<style type="text/css">
|
|||
|
h1 {
|
|||
|
font-size: 34px;
|
|||
|
}
|
|||
|
h1.title {
|
|||
|
font-size: 38px;
|
|||
|
}
|
|||
|
h2 {
|
|||
|
font-size: 30px;
|
|||
|
}
|
|||
|
h3 {
|
|||
|
font-size: 24px;
|
|||
|
}
|
|||
|
h4 {
|
|||
|
font-size: 18px;
|
|||
|
}
|
|||
|
h5 {
|
|||
|
font-size: 16px;
|
|||
|
}
|
|||
|
h6 {
|
|||
|
font-size: 12px;
|
|||
|
}
|
|||
|
.table th:not([align]) {
|
|||
|
text-align: left;
|
|||
|
}
|
|||
|
</style>
|
|||
|
|
|||
|
<link rel="stylesheet" href="style.css" type="text/css" />
|
|||
|
|
|||
|
</head>
|
|||
|
|
|||
|
<body>
|
|||
|
|
|||
|
<style type = "text/css">
|
|||
|
.main-container {
|
|||
|
max-width: 940px;
|
|||
|
margin-left: auto;
|
|||
|
margin-right: auto;
|
|||
|
}
|
|||
|
code {
|
|||
|
color: inherit;
|
|||
|
background-color: rgba(0, 0, 0, 0.04);
|
|||
|
}
|
|||
|
img {
|
|||
|
max-width:100%;
|
|||
|
height: auto;
|
|||
|
}
|
|||
|
.tabbed-pane {
|
|||
|
padding-top: 12px;
|
|||
|
}
|
|||
|
.html-widget {
|
|||
|
margin-bottom: 20px;
|
|||
|
}
|
|||
|
button.code-folding-btn:focus {
|
|||
|
outline: none;
|
|||
|
}
|
|||
|
summary {
|
|||
|
display: list-item;
|
|||
|
}
|
|||
|
</style>
|
|||
|
|
|||
|
|
|||
|
<style type="text/css">
|
|||
|
/* padding for bootstrap navbar */
|
|||
|
body {
|
|||
|
padding-top: 51px;
|
|||
|
padding-bottom: 40px;
|
|||
|
}
|
|||
|
/* offset scroll position for anchor links (for fixed navbar) */
|
|||
|
.section h1 {
|
|||
|
padding-top: 56px;
|
|||
|
margin-top: -56px;
|
|||
|
}
|
|||
|
.section h2 {
|
|||
|
padding-top: 56px;
|
|||
|
margin-top: -56px;
|
|||
|
}
|
|||
|
.section h3 {
|
|||
|
padding-top: 56px;
|
|||
|
margin-top: -56px;
|
|||
|
}
|
|||
|
.section h4 {
|
|||
|
padding-top: 56px;
|
|||
|
margin-top: -56px;
|
|||
|
}
|
|||
|
.section h5 {
|
|||
|
padding-top: 56px;
|
|||
|
margin-top: -56px;
|
|||
|
}
|
|||
|
.section h6 {
|
|||
|
padding-top: 56px;
|
|||
|
margin-top: -56px;
|
|||
|
}
|
|||
|
.dropdown-submenu {
|
|||
|
position: relative;
|
|||
|
}
|
|||
|
.dropdown-submenu>.dropdown-menu {
|
|||
|
top: 0;
|
|||
|
left: 100%;
|
|||
|
margin-top: -6px;
|
|||
|
margin-left: -1px;
|
|||
|
border-radius: 0 6px 6px 6px;
|
|||
|
}
|
|||
|
.dropdown-submenu:hover>.dropdown-menu {
|
|||
|
display: block;
|
|||
|
}
|
|||
|
.dropdown-submenu>a:after {
|
|||
|
display: block;
|
|||
|
content: " ";
|
|||
|
float: right;
|
|||
|
width: 0;
|
|||
|
height: 0;
|
|||
|
border-color: transparent;
|
|||
|
border-style: solid;
|
|||
|
border-width: 5px 0 5px 5px;
|
|||
|
border-left-color: #cccccc;
|
|||
|
margin-top: 5px;
|
|||
|
margin-right: -10px;
|
|||
|
}
|
|||
|
.dropdown-submenu:hover>a:after {
|
|||
|
border-left-color: #ffffff;
|
|||
|
}
|
|||
|
.dropdown-submenu.pull-left {
|
|||
|
float: none;
|
|||
|
}
|
|||
|
.dropdown-submenu.pull-left>.dropdown-menu {
|
|||
|
left: -100%;
|
|||
|
margin-left: 10px;
|
|||
|
border-radius: 6px 0 6px 6px;
|
|||
|
}
|
|||
|
</style>
|
|||
|
|
|||
|
<script>
|
|||
|
// manage active state of menu based on current page
|
|||
|
$(document).ready(function () {
|
|||
|
// active menu anchor
|
|||
|
href = window.location.pathname
|
|||
|
href = href.substr(href.lastIndexOf('/') + 1)
|
|||
|
if (href === "")
|
|||
|
href = "index.html";
|
|||
|
var menuAnchor = $('a[href="' + href + '"]');
|
|||
|
|
|||
|
// mark it active
|
|||
|
menuAnchor.parent().addClass('active');
|
|||
|
|
|||
|
// if it's got a parent navbar menu mark it active as well
|
|||
|
menuAnchor.closest('li.dropdown').addClass('active');
|
|||
|
});
|
|||
|
</script>
|
|||
|
|
|||
|
<div class="container-fluid main-container">
|
|||
|
|
|||
|
<!-- tabsets -->
|
|||
|
|
|||
|
<style type="text/css">
|
|||
|
.tabset-dropdown > .nav-tabs {
|
|||
|
display: inline-table;
|
|||
|
max-height: 500px;
|
|||
|
min-height: 44px;
|
|||
|
overflow-y: auto;
|
|||
|
background: white;
|
|||
|
border: 1px solid #ddd;
|
|||
|
border-radius: 4px;
|
|||
|
}
|
|||
|
|
|||
|
.tabset-dropdown > .nav-tabs > li.active:before {
|
|||
|
content: "";
|
|||
|
font-family: 'Glyphicons Halflings';
|
|||
|
display: inline-block;
|
|||
|
padding: 10px;
|
|||
|
border-right: 1px solid #ddd;
|
|||
|
}
|
|||
|
|
|||
|
.tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before {
|
|||
|
content: "";
|
|||
|
border: none;
|
|||
|
}
|
|||
|
|
|||
|
.tabset-dropdown > .nav-tabs.nav-tabs-open:before {
|
|||
|
content: "";
|
|||
|
font-family: 'Glyphicons Halflings';
|
|||
|
display: inline-block;
|
|||
|
padding: 10px;
|
|||
|
border-right: 1px solid #ddd;
|
|||
|
}
|
|||
|
|
|||
|
.tabset-dropdown > .nav-tabs > li.active {
|
|||
|
display: block;
|
|||
|
}
|
|||
|
|
|||
|
.tabset-dropdown > .nav-tabs > li > a,
|
|||
|
.tabset-dropdown > .nav-tabs > li > a:focus,
|
|||
|
.tabset-dropdown > .nav-tabs > li > a:hover {
|
|||
|
border: none;
|
|||
|
display: inline-block;
|
|||
|
border-radius: 4px;
|
|||
|
}
|
|||
|
|
|||
|
.tabset-dropdown > .nav-tabs.nav-tabs-open > li {
|
|||
|
display: block;
|
|||
|
float: none;
|
|||
|
}
|
|||
|
|
|||
|
.tabset-dropdown > .nav-tabs > li {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
</style>
|
|||
|
|
|||
|
<script>
|
|||
|
$(document).ready(function () {
|
|||
|
window.buildTabsets("TOC");
|
|||
|
});
|
|||
|
|
|||
|
$(document).ready(function () {
|
|||
|
$('.tabset-dropdown > .nav-tabs > li').click(function () {
|
|||
|
$(this).parent().toggleClass('nav-tabs-open')
|
|||
|
});
|
|||
|
});
|
|||
|
</script>
|
|||
|
|
|||
|
<!-- code folding -->
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script>
|
|||
|
$(document).ready(function () {
|
|||
|
|
|||
|
// move toc-ignore selectors from section div to header
|
|||
|
$('div.section.toc-ignore')
|
|||
|
.removeClass('toc-ignore')
|
|||
|
.children('h1,h2,h3,h4,h5').addClass('toc-ignore');
|
|||
|
|
|||
|
// establish options
|
|||
|
var options = {
|
|||
|
selectors: "h1,h2,h3",
|
|||
|
theme: "bootstrap3",
|
|||
|
context: '.toc-content',
|
|||
|
hashGenerator: function (text) {
|
|||
|
return text.replace(/[.\\/?&!#<>]/g, '').replace(/\s/g, '_').toLowerCase();
|
|||
|
},
|
|||
|
ignoreSelector: ".toc-ignore",
|
|||
|
scrollTo: 0
|
|||
|
};
|
|||
|
options.showAndHide = true;
|
|||
|
options.smoothScroll = true;
|
|||
|
|
|||
|
// tocify
|
|||
|
var toc = $("#TOC").tocify(options).data("toc-tocify");
|
|||
|
});
|
|||
|
</script>
|
|||
|
|
|||
|
<style type="text/css">
|
|||
|
|
|||
|
#TOC {
|
|||
|
margin: 25px 0px 20px 0px;
|
|||
|
}
|
|||
|
@media (max-width: 768px) {
|
|||
|
#TOC {
|
|||
|
position: relative;
|
|||
|
width: 100%;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
.toc-content {
|
|||
|
padding-left: 30px;
|
|||
|
padding-right: 40px;
|
|||
|
}
|
|||
|
|
|||
|
div.main-container {
|
|||
|
max-width: 1200px;
|
|||
|
}
|
|||
|
|
|||
|
div.tocify {
|
|||
|
width: 20%;
|
|||
|
max-width: 260px;
|
|||
|
max-height: 85%;
|
|||
|
}
|
|||
|
|
|||
|
@media (min-width: 768px) and (max-width: 991px) {
|
|||
|
div.tocify {
|
|||
|
width: 25%;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
@media (max-width: 767px) {
|
|||
|
div.tocify {
|
|||
|
width: 100%;
|
|||
|
max-width: none;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.tocify ul, .tocify li {
|
|||
|
line-height: 20px;
|
|||
|
}
|
|||
|
|
|||
|
.tocify-subheader .tocify-item {
|
|||
|
font-size: 0.90em;
|
|||
|
padding-left: 25px;
|
|||
|
text-indent: 0;
|
|||
|
}
|
|||
|
|
|||
|
.tocify .list-group-item {
|
|||
|
border-radius: 0px;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
</style>
|
|||
|
|
|||
|
<!-- setup 3col/9col grid for toc_float and main content -->
|
|||
|
<div class="row-fluid">
|
|||
|
<div class="col-xs-12 col-sm-4 col-md-3">
|
|||
|
<div id="TOC" class="tocify">
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
<div class="toc-content col-xs-12 col-sm-8 col-md-9">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
|
|||
|
<div class="container">
|
|||
|
<div class="navbar-header">
|
|||
|
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
|
|||
|
<span class="icon-bar"></span>
|
|||
|
<span class="icon-bar"></span>
|
|||
|
<span class="icon-bar"></span>
|
|||
|
</button>
|
|||
|
<a class="navbar-brand" href="index.html"><div><img src="ohdsi16x16.png"></img> OMOP Common Data Model </div></a>
|
|||
|
</div>
|
|||
|
<div id="navbar" class="navbar-collapse collapse">
|
|||
|
<ul class="nav navbar-nav">
|
|||
|
<li>
|
|||
|
<a href="index.html">
|
|||
|
<span class="fa fa-home"></span>
|
|||
|
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="dataModelConventions.html">
|
|||
|
<span class="fa fa-list-alt"></span>
|
|||
|
|
|||
|
Conventions
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li class="dropdown">
|
|||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
|
|||
|
<span class="fa fa-history"></span>
|
|||
|
|
|||
|
CDM Versions
|
|||
|
|
|||
|
<span class="caret"></span>
|
|||
|
</a>
|
|||
|
<ul class="dropdown-menu" role="menu">
|
|||
|
<li>
|
|||
|
<a href="cdm531.html">CDM v5.3.1</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="cdm60.html">CDM v6.0</a>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="faq.html">
|
|||
|
<span class="fa fa-question"></span>
|
|||
|
|
|||
|
FAQ
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="contribute.html">
|
|||
|
<span class="fa fa-wrench"></span>
|
|||
|
|
|||
|
Contribute
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
<ul class="nav navbar-nav navbar-right">
|
|||
|
|
|||
|
</ul>
|
|||
|
</div><!--/.nav-collapse -->
|
|||
|
</div><!--/.container -->
|
|||
|
</div><!--/.navbar -->
|
|||
|
|
|||
|
<div class="fluid-row" id="header">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<h1 class="title toc-ignore">Contribute</h1>
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
<p>##TODO for CDM # File bug reports</p>
|
|||
|
<p>If you’ve found a bug you can help out by filing a bug report. Each package has an issue tracker where you can create a new issue. Try and be as specific as possible. What error message occurs? Can you provide a simple example to reproduce the problem? What versions of the various packages are you running?</p>
|
|||
|
<div id="write-help-files" class="section level1">
|
|||
|
<h1>Write help files</h1>
|
|||
|
<p>If you’re a bit more experienced with the Methods Library and are looking to improve your open source development skills, the next step up is to contribute a pull request to a Methods Library package. The most important thing to know is that Methods Library packages use <a href="https://github.com/klutometis/roxygen">roxygen2</a>: this means that documentation is found in the R code close to the source of each function.</p>
|
|||
|
</div>
|
|||
|
<div id="write-unit-tests" class="section level1">
|
|||
|
<h1>Write unit tests</h1>
|
|||
|
<p>An important part of validating the methods in the library is unit testing. A unit test is a small program that tests a specific function in the library. For example, there are <a href="https://github.com/OHDSI/CohortMethod/blob/master/tests/testthat/test-psFunctions.R#L5">several unit tests</a> that make sure the propensity score matching works correctly. We can never have enough unit tests, and writing unit tests is an excellent way to learn how the Methods Library packages work under the hood.</p>
|
|||
|
</div>
|
|||
|
<div id="add-methods" class="section level1">
|
|||
|
<h1>Add methods</h1>
|
|||
|
<p>We are always looking for new methods and packages to add to the Methods Libary. However, in order to qualify for inclusion a package must meet the following requirements:</p>
|
|||
|
<ul>
|
|||
|
<li>Pass R check without warnings or notes.</li>
|
|||
|
<li>Adhere to <a href="https://ohdsi.github.io/MethodsLibrary/contribute.html#code_style_guidelines">OHDSI’s code style guidelines</a> and overall development practices.</li>
|
|||
|
<li>Have <a href="http://www.ohdsi.org/web/wiki/doku.php?id=development:unit_testing_in_r">unit tests</a> that test the package’s most important routines.</li>
|
|||
|
<li>For population-level estimation methods: be evaluated using the OHDSI Methods Benchmark.</li>
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
<div id="code-style-guidelines" class="section level1">
|
|||
|
<h1>Code style guidelines</h1>
|
|||
|
<ul>
|
|||
|
<li><a href="http://www.ohdsi.org/web/wiki/doku.php?id=development:ohdsi_code_style_for_r">Style guide for R code</a></li>
|
|||
|
<li><a href="http://www.ohdsi.org/web/wiki/doku.php?id=development:ohdsi_code_style_for_sql">Style guide for SQL code</a></li>
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
<script>
|
|||
|
|
|||
|
// add bootstrap table styles to pandoc tables
|
|||
|
function bootstrapStylePandocTables() {
|
|||
|
$('tr.header').parent('thead').parent('table').addClass('table table-condensed');
|
|||
|
}
|
|||
|
$(document).ready(function () {
|
|||
|
bootstrapStylePandocTables();
|
|||
|
});
|
|||
|
|
|||
|
|
|||
|
</script>
|
|||
|
|
|||
|
<!-- dynamically load mathjax for compatibility with self-contained -->
|
|||
|
<script>
|
|||
|
(function () {
|
|||
|
var script = document.createElement("script");
|
|||
|
script.type = "text/javascript";
|
|||
|
script.src = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
|
|||
|
document.getElementsByTagName("head")[0].appendChild(script);
|
|||
|
})();
|
|||
|
</script>
|
|||
|
|
|||
|
</body>
|
|||
|
</html>
|