From 9254c4961123ad15879e2bf46e42eea9e70aca2d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 5 Aug 2024 23:23:14 +0000 Subject: [PATCH] Render bookdown --- docs/01-BioDIGS_project_overview.md | 39 ++ docs/02-research_team.md | 50 ++ docs/03-data_tour.md | 26 + docs/04-billing_modules.md | 337 ++++++++++ docs/05-anvil_onboarding.md | 52 ++ docs/07-instructor_guide.md | 573 ++++++++++++++++++ docs/08-student_using_rstudio.md | 175 ++++++ docs/09-soil_exploration_module.md | 306 ++++++++++ docs/404.html | 304 ++++++++++ docs/About.md | 129 ++++ docs/References.md | 2 + docs/about-the-authors.html | 458 ++++++++++++++ docs/anvil-workspace.html | 329 ++++++++++ docs/assets/AnVIL_style/anvil_favicon.ico | Bin 15406 -> 0 bytes docs/assets/GDSCN_style/gdscn_favicon.ico | Bin 0 -> 15406 bytes docs/assets/style.css | 1 - docs/background.html | 330 ++++++++++ docs/billing.html | 526 ++++++++++++++++ ...klist-for-running-activities-on-anvil.html | 361 +++++++++++ docs/data-1.html | 323 ++++++++++ docs/exploring-soil-testing-data-with-r.html | 476 +++++++++++++++ ...g-credit-for-professional-development.html | 307 ++++++++++ docs/index.html | 329 ++++++++++ docs/index.md | 34 ++ .../anchor-sections-1.0.1/anchor-sections.js | 33 - .../anchor-sections-hash.css | 2 + .../anchor-sections.css | 1 - .../anchor-sections-1.1.0/anchor-sections.js | 11 + .../gitbook-2.6.7/css/plugin-highlight.css | 2 +- docs/libs/gitbook-2.6.7/css/style.css | 10 +- .../libs/gitbook-2.6.7/js/plugin-clipboard.js | 6 +- docs/libs/header-attrs-2.10/header-attrs.js | 12 - docs/notes-for-instructors.html | 305 ++++++++++ docs/reference-keys.txt | 108 ++-- docs/references.html | 302 +++++++++ docs/research-team.html | 327 ++++++++++ ...gR8P6iDX4DfFD65W_gdQ_gcc4fbee202_0_141.png | Bin 17318 -> 0 bytes .../figure-html/unnamed-chunk-4-1.png | Bin 19921 -> 0 bytes .../figure-html/unnamed-chunk-13-1.png | Bin 0 -> 18382 bytes .../figure-html/unnamed-chunk-14-1.png | Bin 0 -> 23408 bytes docs/search_index.json | 2 +- docs/setting-up-billing-on-anvil.html | 388 ++++++++++++ docs/setting-up-the-class-activity.html | 551 +++++++++++++++++ docs/support.html | 317 ++++++++++ docs/using-rstudio-on-anvil.html | 403 ++++++++++++ 45 files changed, 8128 insertions(+), 119 deletions(-) create mode 100644 docs/01-BioDIGS_project_overview.md create mode 100644 docs/02-research_team.md create mode 100644 docs/03-data_tour.md create mode 100644 docs/04-billing_modules.md create mode 100644 docs/05-anvil_onboarding.md create mode 100644 docs/07-instructor_guide.md create mode 100644 docs/08-student_using_rstudio.md create mode 100644 docs/09-soil_exploration_module.md create mode 100644 docs/404.html create mode 100644 docs/About.md create mode 100644 docs/References.md create mode 100644 docs/about-the-authors.html create mode 100644 docs/anvil-workspace.html delete mode 100755 docs/assets/AnVIL_style/anvil_favicon.ico create mode 100644 docs/assets/GDSCN_style/gdscn_favicon.ico create mode 100644 docs/background.html create mode 100644 docs/billing.html create mode 100644 docs/checklist-for-running-activities-on-anvil.html create mode 100644 docs/data-1.html create mode 100644 docs/exploring-soil-testing-data-with-r.html create mode 100644 docs/getting-credit-for-professional-development.html create mode 100644 docs/index.html create mode 100644 docs/index.md delete mode 100644 docs/libs/anchor-sections-1.0.1/anchor-sections.js create mode 100644 docs/libs/anchor-sections-1.1.0/anchor-sections-hash.css rename docs/libs/{anchor-sections-1.0.1 => anchor-sections-1.1.0}/anchor-sections.css (83%) create mode 100644 docs/libs/anchor-sections-1.1.0/anchor-sections.js delete mode 100644 docs/libs/header-attrs-2.10/header-attrs.js create mode 100644 docs/notes-for-instructors.html create mode 100644 docs/references.html create mode 100644 docs/research-team.html delete mode 100644 docs/resources/images/02-chapter_of_course_files/figure-html/1YmwKdIy9BeQ3EShgZhvtb3MgR8P6iDX4DfFD65W_gdQ_gcc4fbee202_0_141.png delete mode 100644 docs/resources/images/02-chapter_of_course_files/figure-html/unnamed-chunk-4-1.png create mode 100644 docs/resources/images/09-soil_exploration_module_files/figure-html/unnamed-chunk-13-1.png create mode 100644 docs/resources/images/09-soil_exploration_module_files/figure-html/unnamed-chunk-14-1.png create mode 100644 docs/setting-up-billing-on-anvil.html create mode 100644 docs/setting-up-the-class-activity.html create mode 100644 docs/support.html create mode 100644 docs/using-rstudio-on-anvil.html diff --git a/docs/01-BioDIGS_project_overview.md b/docs/01-BioDIGS_project_overview.md new file mode 100644 index 0000000..3b86b4b --- /dev/null +++ b/docs/01-BioDIGS_project_overview.md @@ -0,0 +1,39 @@ +:::: {.borrowed_chunk} + +# (PART\*) BioDIGS Overview {-} + +# Background + +One critical aspect of an undergraduate STEM education is hands-on research. Undergraduate research experiences enhance what students learn in the classroom as well as increase a student's interest in pursuing STEM careers [@Russell2007]. It can also lead to improved scientific reasoning and increased academic performance overall [@Buffalari2020]. However, many students at underresourced institutions like community colleges, Historically Black Colleges and Universities (HBCUs), tribal colleges and universities, and Hispanic-serving institutions have limited access to research opportunities compared to their cohorts at larger four-year colleges and R1 institutions. These students are also more likely to belong to groups that are already under-represented in STEM disciplines, particularly genomics and data science [@Canner2017; @GDSCN2022]. + +The BioDIGS Project aims to be at the intersection of genomics, data science, cloud computing, and education. + + +## What is genomics? + +Genomics broadly refers to the study of genomes, which are an organism's complete set of DNA. This includes both genes and non-coding regions of DNA. Traditional genomics involves sequencing and analyzing the genome of individual species. + +Metagenomics expands genomics to look at the collective genomes of entire communities of organisms in an environmental sample, like soil. It allows researchers to study not just the genes of culturable or isolated organisms, but the entirety of genetic material present in a given environment. By using genomic techniques to survey the soil microbes, we can identify everything in the soil, including microbes that no one has identified before. + +We are doing both traditional genomics and metagenomics as part of BioDIGS. + +## What is data science? + +Data science is an interdisciplinary field that uses scientific methods, processes, algorithms and systems to extract knowledge and insights from structured and unstructured data. It includes collecting, cleaning, and combining data from multiple databases, exploring data and developing statistical and machine learning models to identify patterns in complex datasets, and creating tools to efficiently store, process, and access large amounts of data. + +## What is cloud computing? + +Cloud computing just means using the internet to get access to powerful computer resources like storage, servers, databases, networking tools, and specialized software programs. Instead of having to buy and maintain their own powerful computers, storage servers, and other systems, users can pay to use them through an internet connection as needed. Users only pay for what they need, when they actually use it, and professionals update and maintain the systems in large data centers. It is a particularly useful tool for researchers and students at smaller institutions with limited computational services, especially when working with complex databases. + +The genome assembly and analyses for BioDIGS have been done using the NHGRI [AnVIL](https://anvilproject.org/) cloud computing platform, as well as [Galaxy](usegalaxy.org). + +## Why soil microbes? + +It can be challenging to include undergraduates in human genomic and health research, especially in a classroom context. Both human genetic data and human health data are protected data, which limits the sort of information students can access without undergoing specialized ethics training. However, the same sorts of data cleaning and analysis methods used for human genomic data are also used for microbial genomic data, which does not have the same sort of legal protections as human genetic data. This makes it ideal for training undergraduate students at the beginning of their careers and can be used to prepare students for future research in human genomics and health [@Jurkowski2017]. Additionally, the microbes in the soil can have big impacts on our health [@BrevikBurgess2014]. + +## Heavy metals and human health + +Human activities that change the landscape can also change what sorts of inorganic and abiotic compounds we find in the soil, particularly increasing the amount of heavy metals [@Yan2020]. When cars drive on roads, compounds from the exhaust, oil, and other fluids might settle onto the roads and be washed into the soil. When we put salt on roads, parking lots, and sidewalks, the salts themselves will eventually be washed away and enter the ecosystem through both water and soil. Chemicals from factories and other businesses also leech into our environment. Previous research has demonstrated that in areas with more human activity, like cities, soils include greater concentrations of heavy metals than found in rural areas with limited human populations [@Khan2023; @Wang2022]. Increased heavy metal concentrations also disproportionately affect lower-income and predominantly minority areas [@Jones2022]. + +Research suggests that increased heavy metal concentration in soils has major impacts on the soil microbial community. In particular, increased heavy metal concentration is associated with an increase in soil bacteria that have antibiotic resistance markers [@Gorovtsov2018; @Nguyen2019; @Sun2021]. +:::: diff --git a/docs/02-research_team.md b/docs/02-research_team.md new file mode 100644 index 0000000..a7c1469 --- /dev/null +++ b/docs/02-research_team.md @@ -0,0 +1,50 @@ +:::: {.borrowed_chunk} + +# Research Team + +This project is coordinated by the Genomics Data Science Community Network (GDSCN). You can read more about the GDSCN and its mission at the network [website](https://www.gdscn.org/home). + +## Soil sampling + +This map shows the current sampling locations for the BioDIGS project. The extensive network of the GDSCN has made this data collection possible. + + + +Soil sampling for this project was done by both faculty and student volunteers from schools that aren't traditional R1 research institutions. Many of the faculty are also members of the GDSCN. This list of locations reflects GDSCN institutions and friends of GDSCN who have collected soil samples. + +- **Annandale, VA**: Northern Virginia Community College +- **Atlanta, GA**: Spelman College +- **Baltimore, MD**: College of Southern Maryland, Notre Dame College of Maryland, Towson University +- **Bismark, ND**: United Tribes Technical College +- **El Paso, TX**: El Paso Community College, The University of Texas at El Paso +- **Fresno, CA**: Clovis Community College +- **Greensboro, NC**: North Carolina A&T State University +- **Harrisonburg, VA**: James Madison University +- **Honolulu, Hawai'i**: University of Hawai'i at Mānoa +- **Las Cruces, NM**: Doña Ana Community College +- **Montgomery County, MD**: Montgomery College, Towson University +- **Nashville, TN**: Meharry Medical College +- **New York, NY**: Guttman Community College CUNY +- **Petersburg, VA**: Virginia State University +- **Seattle, WA**: North Seattle College, Pierce College +- **Tsaile, AZ**: Diné College + + +# Support + +This project would not be possible without financial and technical support from many organizations and people. + +## Funding + +Funding for this project has been provided by the [National Human Genome Research Institute](https://www.genome.gov/) (Contract # 75N92022P00232 awarded to Johns Hopkins University). + +## Sponsors + +[PacBio](https://www.pacb.com/) and [CosmosID](https://www.cosmosid.com/) have graciously donated supplies. + +[Advances in Genome Biology and Technology](https://www.agbt.org/) provided funding support for several team members to attend AGBT 2024. + +## Analytical and Computational Support + +Computational support has been provided by NHGRI's [AnVIL](https://anvilproject.org/) cloud computing platform and [Galaxy](usegalaxy.org). +:::: diff --git a/docs/03-data_tour.md b/docs/03-data_tour.md new file mode 100644 index 0000000..70ec847 --- /dev/null +++ b/docs/03-data_tour.md @@ -0,0 +1,26 @@ +:::: {.borrowed_chunk} + +# Data + +There are currently three major kinds of data available from BioDIGS: sample metadata, soil testing data, and genomics and metagenomics data. All of these are available for use in your classroom. + +## Sample Metadata + +This dataset contains information about the samples themselves, including GPS coordinates for the sample location, date the sample was taken, and the site name. This dataset is also available from the [BioDIGS website](https://biodigs.org/#site_data) + +You can also see images of each sampling site and soil characteristics at the [sample map](https://biodigs.org/#sample_map). + +## Soil Testing Data + +This dataset includes basic information about the soil itself like pH, percentage of organic matter, variety of soil metal concentrations. The complete data dictionary is available [here](https://docs.google.com/spreadsheets/d/109xYUM48rjj33B76hZ3bNlrm8u-_S6uyoE_3wSCp0r0/edit#gid=188448677). The dataset is available at the [BioDIGS website](https://biodigs.org/#soil_data). + +This dataset was generated by the [Delaware Soil Testing Program](https://www.udel.edu/canr/cooperative-extension/environmental-stewardship/soil-testing/) at the University of Delaware. + +## Genomics and Metagenomics Data + +You can access this data in both raw and processed forms. + +The Illumina and Nanopore sequences were generated at the [Johns Hopkins University Genetic Resources Core Facility](https://grcf.jhmi.edu/). PacBio sequencing was done by [PacBio](https://www.pacb.com/) directly. + +More information coming soon! +:::: diff --git a/docs/04-billing_modules.md b/docs/04-billing_modules.md new file mode 100644 index 0000000..1e74a2e --- /dev/null +++ b/docs/04-billing_modules.md @@ -0,0 +1,337 @@ +:::: {.borrowed_chunk} + +# (PART\*) AnVIL Overview {-} + +# Billing + +In order to use AnVIL, you will need to set up a billing account and add members to it. These sections guide you through that process. + +
+ +## Create Google Billing Account + +:::: {.borrowed_chunk} + +1. Log in to the [Google Cloud Platform](https://console.cloud.google.com/) console using your Google ID. **Make sure to use the same Google account ID you use to log into Terra.** + +1. If you are a first time user, don’t forget to claim your free credits! If you haven't been to the console before, once you accept the Terms of Service you will be greeted with an invitation to "Try for Free." + + Screenshot of the Google Cloud Console with the "Try for Free" button highlighted. + +1. Follow the instructions to sign up for a Billing Account and get your credits. + +1. Choose “Individual Account”. This “billing account” is just for managing billing, so you don’t need to be able to add your team members. You will need to give either a credit card or bank account for security. Don't worry! **You won't be billed until you explicitly turn on automatic billing**. + + Screenshot of the Google Cloud Billing Account Setup, with "Individual Account" highlighted.  Also highlighted is text stating "You won't be charged unless you manually upgrade to a paid account." + +1. You can view and edit your new Billing Account, by selecting “Billing” from the left-hand menu, or going directly to the billing console [console.cloud.google.com/billing](https://console.cloud.google.com/billing) + + Screenshot of the Google Cloud Console dropdown menu, with "Billing" highlighted. + +1. Clicking on the Billing Account name will allow you to manage the account, including accessing reports, setting alerts, and managing payments and billing. + + Screenshot of the Google Cloud Console Billing Page, with the name of the new billing account highlighted. + +At any point, you can create additional Billing Accounts using the **Create Account** button. We generally recommend creating a new Billing Account for each funding source. +:::: + +## Add Terra to Google Billing Account + +:::: {.borrowed_chunk} + +This gives Terra permission to create projects and send charges to the Google Billing Account, and must be done by an administrator of the Google Billing Account. + +Terra needs to be added as a "Billing Account User": + +1. Log in to the [Google Cloud Platform](https://console.cloud.google.com/) console using your Google ID. +1. Navigate to [Billing](https://console.cloud.google.com/billing) + + Screenshot of the Google Cloud Console drop-down menu, with "Billing" highlighted. + +1. You may be automatically directed to view a specific Billing Account. If you see information about a single account rather than a list of your Billing Accounts, you can get back to the list by clicking "Manage Billing Accounts" from the drop-down menu. + + Screenshot of an individual Google Cloud Billing Account with the drop-down menu item "Manage Billing Accounts" highlighted. + +1. Check the box next to the Billing Account you wish to add Terra to, click "ADD MEMBER". + + Screenshot of Google Cloud Billing Accounts Overview. The checkbox next to the name of a Billing Account is checked and highlighted, and the "Add Member" button is highlighted. + +1. Enter `terra-billing@terra.bio` in the text box. In the drop-down menu, mouse over Billing, then choose "**Billing Account User**". + + Screenshot of the dialogue box for adding a member to a Google Cloud Billing Accounts. The text box is highlighted and has been filled in with "terra-billing@terra.bio".  In the drop-down menu labeled "Select a Role", the item "Billing" and the submenu item "Billing Account User" are highlighted. + +1. Click "SAVE". + + Screenshot of the dialogue box for adding a member to a Google Cloud Billing Accounts. The Save button is highlighted. +:::: + +## Add Members to Google Billing Account + +:::: {.borrowed_chunk} + +Anyone you wish to add to the Billing Account will need their own Google ID. + +To add a member to a Billing Project: + +1. Log in to the [Google Cloud Platform](https://console.cloud.google.com/) console using your Google ID. +1. Navigate to [Billing](https://console.cloud.google.com/billing) + + Screenshot of the Google Cloud Console drop-down menu, with "Billing" highlighted. + +1. You may be automatically directed to view a specific Billing Account. If you see information about a single account rather than a list of your Billing Accounts, you can get back to the list by clicking "Manage Billing Accounts" from the drop-down menu. + + Screenshot of an individual Google Cloud Billing Account with the drop-down menu item "Manage Billing Accounts" highlighted. + +1. Check the box next to the Billing Account you wish to add a member to, click "ADD MEMBER". + + Screenshot of Google Cloud Billing Accounts Overview. The checkbox next to the name of a Billing Account is checked and highlighted, and the "Add Member" button is highlighted. + +1. Enter their Google ID in the text box. In the drop-down menu, mouse over Billing, then choose the appropriate role. + + Screenshot of the dialogue box for adding a member to a Google Cloud Billing Accounts. In the drop-down menu labeled "Select a Role", the item "Billing" and the submenu item "Billing Account Viewer" are highlighted. + +1. Click "SAVE". + + Screenshot of the dialogue box for adding a member to a Google Cloud Billing Accounts. The Save button is highlighted. +:::: + +## Set Alerts for Google Billing + +:::: {.borrowed_chunk} + +1. Log in to the [Google Cloud Platform](https://console.cloud.google.com/) console using the Google ID associated with your Google Cloud projects. + +1. Open the dropdown menu on the top left and click on [Billing](https://console.cloud.google.com/billing). + + Screenshot of the Google Cloud Console drop-down menu, with "Billing" highlighted. + +1. You may be automatically directed to view a specific Billing Account. If you see information about a single account (and it’s not the one you’re interested in), you can get back to the list of all your Billing Accounts by clicking "Manage Billing Accounts" from the drop-down menu. + + Screenshot of an individual Google Cloud Billing Account with the drop-down menu item "Manage Billing Accounts" highlighted. + +1. Click on the name of the Billing Account you want to set alerts for. + + Screenshot of Google Cloud Billing Accounts Overview. A Billing Account name is highlighted. + +1. In the left-hand menu, click "Budgets & alerts". + + Screenshot of an individual Google Cloud Billing Account with the left-hand menu item "Budgets & alerts" highlighted. + +1. Click the "Create Budget" tab. + + Screenshot of the budgets and alerts page for a Google Cloud Billing Account. The "Create Budget" button highlighted. + +1. Enter a name for your budget, and then choose which projects you want to monitor. Then click "Next". + + Screenshot of the form for setting budget scope for a Google Cloud Billing Account. Three things are highlighted:  1) the box for entering a "Name" for the budget, 2) the dropdown menu labeled "Projects" for selecting which Billing Projects are part of the budget, and 3) the "Next" button. + +1. For Budget Type, select "Specified amount". Enter the total budget amount for the month (you will set alerts at different thresholds in the next step). Click "**Next**" (do not click "Finish"). + + Screenshot of the form for setting budget amount for a Google Cloud Billing Account.  The drop-down menu labeled "Budget type" is highlighted and "Specified amount" is selected.  Also highlighted are the text box labeled "Target amount" and the "Next" button. + +1. Enter the threshold amounts where you want to receive an alert. We recommend starting with 50% and 90%. You can set other alerts if you prefer. + + Screenshot of the form for setting budget actions for a Google Cloud Billing Account.  The boxes for entering "Percent of budget" or "Amount" are highlighted.  The drop-down menu labeled "Trigger on" is highlighted and "Actual" is selected. + +1. Check the box for "Email alerts to billing admins and users", then click "**Finish**". Now you (as the owner and admin), along with anyone you added with admin or user privileges (e.g. lab managers) will receive alerts when your lab members reach the specified spending thresholds. These emails will be sent to the Gmail accounts associated with the Billing Account. + + Screenshot of the form for setting budget alerts for a Google Cloud Billing Account.  The checkbox labeled "Email alerts to billing admins and users" is highligheted and checked.  The "Finish" button is highlighted. + +1. You can edit your budgets at any time by going to Billing > Budgets & alerts, and clicking on the name of the budget you want to edit. + + Screenshot of the Google Cloud Billing Account Budgets and alerts overview.  Four items are highlighted illustrating how to view and edit an existing budget: 1) The top-left "hamburger" button for extending the drop-down menu, 2) the drop-down menu item "Billing", 3) the submenu item "Budgets & alerts, 4) the name of a budget. +:::: + +## View Spend for Google Billing + +:::: {.borrowed_chunk} + +You can always check your current spend through the Google Billing console, but remember + +- There is a reporting delay (~1 day), so you cannot immediately see what an analysis cost +- Costs are reported at the level of Workspaces, so if there are multiple people using a Workspace, you will not be able to determine which of them was responsible for the charges. + +The Google Billing console displays information by Billing Account. To view spending: + +1. Log in to the [Google Cloud Platform](https://console.cloud.google.com/) console using the Google ID associated with your Google Cloud projects. + +1. Open the dropdown menu on the top left and click on [Billing](https://console.cloud.google.com/billing). + + Screenshot of the Google Cloud Console drop-down menu, with "Billing" highlighted. + +1. You may be automatically directed to view a specific Billing Account. If you see information about a single account (and it’s not the one you’re interested in), you can get back to the list of all your Billing Accounts by clicking "Manage Billing Accounts" from the drop-down menu. + + Screenshot of an individual Google Cloud Billing Account with the drop-down menu item "Manage Billing Accounts" highlighted. + +1. Click on the name of the Billing Account for the project you want to view. + + Screenshot of Google Cloud Billing Accounts Overview. A Billing Account name is highlighted. + +1. Look at the top of the **Overview** tab to see your month-to-date spending. + + Screenshot of a Google Cloud Billing Account Overview. + +1. Scroll further down the **Overview** tab to show your top projects. + + Screenshot of a Google Cloud Billing Account top projects. + +1. Click on the **Reports** tab to see more detailed information about each of your projects. This is probably the most useful tab for exploring costs of individual projects over time. + + Screenshot of a Google Cloud Billing Account Reports tab. + +1. Click on the **Cost table** tab to obtain a convenient table of spending per project. + + Screenshot of a Google Cloud Billing Account Cost table tab. +:::: + +## Create Terra Billing Project + +:::: {.borrowed_chunk} + +1. [Launch Terra](https://anvil.terra.bio/#workspaces) and sign in with your Google account. If this is your first time logging in to Terra, you will need to accept the Terms of Service. + +1. In the drop-down menu on the left, navigate to "Billing". Click the triple bar in the top left corner to access the menu. Click the arrow next to your name to expand the menu, then click "Billing". You can also navigate there directly with this link: https://anvil.terra.bio/#billing + + Screenshot of the Terra drop-down menu.  Three items are highlighted: 1) the "hamburger" button for extending the drop-down menu, 2) the arrow next to your username, for extending the drop-down submenu, and 3) the submenu item "Billing". + +1. On the Billing page, click the "+ CREATE" button to create a new Billing Project. If prompted, select the Google account to use. If prompted, give Terra permission to manage Google Cloud Platform billing accounts. + + Screenshot of the Terra Billing Page.  The "plus" button next to "Billing Projects" is highlighted. + +1. Enter a **unique** name for your Terra Billing Project and select the appropriate Google Billing Account. The name of the Terra Billing Project must: + + Only contain lowercase letters, numbers and hyphens + + Start with a lowercase letter + + Not end with a hyphen + + Be between 6 and 30 characters + + Screenshot of the Terra Add Billing Project dialog box. + +1. Select the Google Billing Account to use. All activities conducted under your new Terra Billing Project will charge to this Google Billing Account. If prompted, give Terra permission to manage Google Cloud Platform billing accounts. + + Screenshot of the Terra Add Billing Project dialog box.  The dropdown menu labeled "Select billing account" is highlighted. + +1. Click "CREATE BILLING PROJECT". + + Screenshot of the Terra Add Billing Project dialog box.  The button labeled "CREATE BILLING PROJECT" is highlighted. + + +1. Your new Billing Project should now show up in the list of Billing Projects Owned by You. You can add additional members or can modify or deactivate the Billing Project at any time by clicking on its name in this list. + + Screenshot of the Terra Billing Projects menu.  The submenu "Owned by you" is highlighted and has been expanded, showing a list of Billing Projects below.  One of the Billing Project names is highlighted. + +The page doesn't always update as soon as the Billing Project is created. If it's been a couple of minutes and you don't see a change, try refreshing the page. +:::: + +## Add Member to Terra Billing Project + +:::: {.borrowed_chunk} + +1. [Launch Terra](https://anvil.terra.bio/#workspaces) and sign in with your Google account. + +1. In the drop-down menu on the left, navigate to "Billing". Click the triple bar in the top left corner to access the menu. Click the arrow next to your name to expand the menu, then click "Billing". You can also navigate there directly with this link: https://anvil.terra.bio/#billing + + Screenshot of the Terra drop-down menu.  Three items are highlighted: 1) the "hamburger" button for extending the drop-down menu, 2) the arrow next to your username, for extending the drop-down submenu, and 3) the submenu item "Billing". + +1. Click “Owned by You” and find the Billing Project. If you do not see the Billing Project in this list, then you are not an Owner and do not have permission to add members. + + Screenshot of the Terra Billing Projects menu.  The submenu "Owned by you" is highlighted and has been expanded, showing a list of Billing Projects below. + +1. Click on the name of the Billing Project. + + Screenshot of the Terra Billing Projects menu.  The submenu has been expanded, and the name of one of the Billing Projects is highlighted. + +1. Click on the “Members” tab to view and manage members. Then click the “Add User” button. + + Screenshot of a Terra Billing Project management page.  The tab labeled "Members" is highlighed and has been selected, and the button labeled "Add User" is highlighted. + +1. Enter the email address of the user or group you’d like to add the the Billing Project. + - If adding an individual, make sure to enter the account that they use to access AnVIL. + - If adding a Terra Group, use the Group email address, which can be found on the Terra Group management page. + + Screenshot of the dialog box for adding users to a Terra Billing Project.  The textbox labeled "User email" is highlighed and has been filled in. + +1. If this user or group will need to add and remove other users of the Billing Project, check the Owner box. Otherwise leave it unchecked. + - It’s often a good idea to have at least one other Owner of a Billing Project in order to avoid getting locked out, in case the original owner leaves or loses access to their account. + + Screenshot of the dialog box for adding users to a Terra Billing Project.  The checkbox labeled "Can manage users (Owner)" is highlighed. + +1. Click “ADD USER”. + + Screenshot of the dialog box for adding users to a Terra Billing Project.  The button labeled "ADD USER" is highlighed. + +1. You should now see the user or group listed in the Billing Project members, along with the appropriate role. They should now be able to use the Billing Project to fund work on AnVIL. + + Screenshot of a Terra Billing Project member management page.  A user email and role are highlighted. + +If you need to remove members or modify their roles, you can do so at any time by clicking the teardrop button next to their name. + +Screenshot of a Terra Billing Project member management page.  The teardrop button for one user is highlighted. +:::: + +## Disable Terra Billing Project + +By default this module includes a warning to make sure people understand they will lose access to their Workspace buckets. You can remove the warning from this module by setting `AnVIL_module_settings$warning` to `FALSE` before running `cow::borrow_chapter`: + +``` +AnVIL_module_settings <- list( + warning = FALSE +) +cow::borrow_chapter( + doc_path = "child/_child_terra_billing_project_disable.Rmd", + repo_name = "jhudsl/AnVIL_Template" +) +``` + +:::: {.borrowed_chunk} + +:::{.warning} +**Disabling a Billing Project makes Workspace contents inaccessible!** + +Disabling a Billing Project disables funding to all Workspaces funded by the Billing Project. You will be unable to compute in these Workspaces, and **you will lose access to any data stored in the Workspace buckets**. It is sometimes possible to restore access by reactivating billing, but Google makes no promises about whether or how long the data will be recoverable. + +**Make sure everyone with Workspaces funded by the Billing Project has saved anything they want to keep in another location** before disabling the Billing Project. +::: + +To disable a Terra Billing Project (i.e. remove the Google Billing Account that funds the Terra Billing Project): + + + +1. [Launch Terra](https://anvil.terra.bio/#workspaces) and sign in with your Google account. + +1. In the drop-down menu on the left, navigate to "Billing". Click the triple bar in the top left corner to access the menu. Click the arrow next to your name to expand the menu, then click "Billing". You can also navigate there directly with this link: https://anvil.terra.bio/#billing + + Screenshot of the Terra drop-down menu.  Three items are highlighted: 1) the "hamburger" button for extending the drop-down menu, 2) the arrow next to your username, for extending the drop-down submenu, and 3) the submenu item "Billing". + +1. Click "Owned by You" and find the Billing Project. If you do not see the Billing Project in this list, then you are not an Owner and do not have permission to add members. + + Screenshot of the Terra Billing Projects menu.  The submenu "Owned by you" is highlighted and has been expanded, showing a list of Billing Projects below. + +1. Click on the name of the Billing Project. + + Screenshot of the Terra Billing Projects menu.  The submenu has been expanded, and the name of one of the Billing Projects is highlighted. + +1. If you don't see information about the Billing Account, click on “View billing account” to expand the Billing Account information. You may be prompted to enter your login information again. + + Screenshot of a Terra Billing Project management page.  The button labeled "view billing account" is highlighted. + +1. You should see the name of the Google Billing Account that is funding this Terra Billing Project. Click on the teardrop icon next to the name of the Billing Account. + + Screenshot of a Terra Billing Project management page.  The teardrop button next to the name of the Billing Account is highlighted. + +1. Click "Remove Billing Account". + + Screenshot of a Terra Billing Project management page.  The teardrop button next to the name of the Billing Account is highlighted. + +1. Click OK to confirm that you want to disable funding for this Billing Project. + + Screenshot of the dialoge box confirming removal of the Billing Account from a Terra Billing Project.  The button labeled "OK" is highlighted. + +1. The page should now indicate that there is no linked billing account. + + Screenshot of a Terra Billing Project management page.  The Billing Account information which says "No linked billing account" is highlighted. + +If necessary, you can restore funding to the Billing Project and associated Workspaces by clicking the teardrop icon and selecting "Change Billing Account". However, Google makes no promises about how long the Workspace contents will remain available after you disable funding, so it is best not to rely on them. + +Screenshot of a Terra Billing Project management page.  The teardrop button next to the Billing Account information is highlighted. +:::: +:::: diff --git a/docs/05-anvil_onboarding.md b/docs/05-anvil_onboarding.md new file mode 100644 index 0000000..82a892a --- /dev/null +++ b/docs/05-anvil_onboarding.md @@ -0,0 +1,52 @@ +# (PART\*) Student Guide to AnVIL {-} + +:::: {.borrowed_chunk} + +# AnVIL Workspace + + + +You can easily access the data on AnVIL by cloning the dedicated workspace. These sections guide you through creating an AnVIL account and accessing the workspace. + + +## Create Google Account + + +If you do not already have a Google account that you would like to use for accessing Terra, [create one now](https://accounts.google.com/SignUp). + +If you would like to create a Google account that is associated with your non-Gmail, institutional email address, follow [these instructions](https://support.terra.bio/hc/en-us/articles/360029186611). + +## Clone the Workspace + + +1. [Launch Terra](https://anvil.terra.bio/#workspaces) + +1. Locate the Workspace you want to clone. If a Workspace has been shared with you ahead of time, it will appear in "MY WORKSPACES". You can clone a Workspace that was shared with you to perform your own analyses. In the screenshot below, no Workspaces have been shared. + + Screenshot of Terra "MY WORKSPACES" menu. The "MY WORKSPACES" tab is highlighted. No Workspaces are visible because none have been shared with the user. There is an option to create a new Workspace. + +1. If a Workspace hasn't been shared with you, navigate to the "FEATURED" or "PUBLIC" Workspace tabs. + + Screenshot of Terra "My Workspaces" menu. The "FEATURED" tab is highlighted. + +1. Use the search box to find the Workspace you want to clone. + + Screenshot of Terra "My Workspaces" menu. The search bar is highlighted and the user has typed in the term "COVID-19". A Workspace related to COVID-19 appears in the results. + +1. Click the teardrop button on the far right next to the Workspace you want to clone. Click "Clone". You can also clone the Workspace from the Workspace Dashboard instead of the search results. + + Screenshot of Terra "My Workspaces" menu with the Workspace that we want to clone. The teardrop button has been clicked to bring up the options. The "Clone" option from the list is highlighted. + Screenshot of the Dashboard for the Workspace that we want to clone. The teardrop button has been clicked to bring up the options. The "Clone" option from the list is highlighted. + +1. You will see a popup box appear. Name your Workspace and select the appropriate Terra Billing Project. **All activity in the Workspace will be charged to this Billing Project** (regardless of who conducted it). Remember that each Workspace should have its own Billing Project. + + Screenshot of the "clone workspace" Terra popup dialog box. The Workspace name and Billing Project dropdown are highlighted. Text has been filled in for the Workspace name as "Lab-member-1-workspace-2". + +1. If you are working with protected data, you can set the **Authorization Domain** to limit who can be added to your Workspace. Note that the Authorization Domain cannot be changed after the Workspace is created (i.e. there is no way to make this Workspace shareable with a larger audience in the future). Workspaces by default are only visible to people you specifically share them with. Authorization domains add an extra layer of enforcement over privacy, but by nature make sharing more complicated. We recommend using Authorization Domains in cases where it is extremely important and/or legally required that the data be kept private (e.g. protected patient data, industry data). For data you would merely prefer not be shared with the world, we recommend relying on standard Workspace sharing permissions rather than Authorization Domains, as Authorization Domains can make future collaborations, publications, or other sharing complicated. + + Screenshot of Terra popup dialog box for creating a new Workspace. The drop-down menu labeled "Authorization domain" is highlighted. + +1. Click "CLONE WORKSPACE". The new Workspace should now show up under your Workspaces. + + Screenshot of Terra popup dialog box for creating a new Workspace. The "Clone Workspace" button is highlighted. +:::: diff --git a/docs/07-instructor_guide.md b/docs/07-instructor_guide.md new file mode 100644 index 0000000..afee92a --- /dev/null +++ b/docs/07-instructor_guide.md @@ -0,0 +1,573 @@ +# (PART\*) Instructor Checklist for AnVIL {-} + +:::: {.borrowed_chunk} + +# (PART\*) Instructor Guide to AnVIL {-} + +# Notes for Instructors + +Although AnVIL is the preferred computational platform for the GDSCN, all activities can be run on different platforms. + +R-based activities can be run on your own personal installation of [R](https://www.r-project.org/) or [Posit](https://posit.co/)(formerly called RStudio), depending on your needs. + +Galaxy-based activities can be run on both Galaxy on AnVIL and on the [Galaxy web portal](https://usegalaxy.org/). + +You may also adapt these activities for other languages and platforms. + +# Checklist for Running Activities on AnVIL + +If you choose to run these activities on AnVIL with your class, there are several things that you can do to make the experience easier. + +## Before the class begins {-} + +This checklist can serve as a reminder of the overall suggested steps to run an activity on AnVIL. You might find yourself changing these steps slightly as you become more familiar with AnVIL. + +**Billing** + +- Obtain funding through the [STRIDES](https://datascience.nih.gov/strides) program (optional) +- Request students make AnVIL IDs (Google IDs) +- Collect AnVIL IDs (Google IDs) from students +- Create Google Billing Account for your class + +**Resources** + +- Create a Workspace for your class (optional) +- Notify Terra of your course dates and times +- Direct students to the Workspace + +**Permissions** + +- Set up Groups to manage permissions + +| AnVIL Group | Class Workspace | Terra Billing Projects*| +|:--------------------|:----------------|:-----------------------| +| Instructor | Owner | Owner | +| Teaching assistants | Writer | Owner | +| Students | Reader | User | + + +## After the class ends {-} + +**Resources** + +- Remind students to download any files they might need +- Tell students to delete their environments and persistent disks + +**Billing** + +- Deactivate billing project + + +# Setting up Billing on AnVIL + +The following will help you set up billing for your class. You will: +* Set up a billing project for tracking costs +* Add yourself and students to the billing project to grant permission to AnVIL resources +* Learn about different sources of costs in AnVIL +* Estimate costs for your class +* Learn about how to track costs during your class + +## Creating a billing project {#billing-project} + +First, create the Billing Project. Billing Project names must be globally unique and cannot exceed 30 characters. We suggest the name of the Billing Project should be a combination of institution-class- (e.g., "jhu-bmr2021-bill-1"). To create a Billing Project: + +1. Go to https://anvil.terra.bio/#billing + +1. Click “+CREATE” + + Screenshot of the Terra Billing page. The "+CREATE" button is highlighted. + +1. Type in your Billing Project name + + Screenshot of the Terra Billing page with Create Billing Project pop out box. The new billing project name, jhu-bmr2021-instructors-bill-1, is highlighted. + +1. Select the appropriate Billing Account + + Screenshot of the Terra Billing page with Create Billing Project pop out box. The appropriate billing account name, My Billing Account, is highlighted. + +1. Click “CREATE BILLING PROJECT” + + Screenshot of the Terra Billing page with Create Billing Project pop out box. The "CREATE BILLING PROJECT" button is highlighted. + +You now have a unique **Billing Project**. + +## Adding Instructors as “Owner” + +Next, you want to give instructors permission to use the Billing Project to compute. To set instructor permissions: + +1. Go to https://anvil.terra.bio/#billing + +1. Select the “Owned by You” Billing Project sub-list + + Screenshot of the AnVIL Billing page. The "Owned by You" billing list is highlighted. + +1. Select the Billing Project you made in [Instructor Billing Project](#billing-project) + + Screenshot of the AnVIL Billing page. The "Owned by You" billing list has been expanded. The instructor Billing project, in this case jhu-bmr2021-instructors, is highlighted. + +1. Select the “Users” tab + + Screenshot of the AnVIL Billing page. The instructor Billing project, in this case jhu-bmr2021-instructors, has been selected and the Users Tab is highlighted. + +1. Click “+ Add User”. You will be prompted to add a “User email *”. + + Screenshot of the AnVIL Billing page. The instructor Billing project, in this case jhu-bmr2021-instructors, has been selected and the "+Add User" button is highlighted. + +1. Begin typing the instructor Group name set up in [Instructor Group](#instructor-group). You should see an email in the form @firecloud.org (e.g., jhu-bmr2021-instructors@firecloud.org). + +1. Ensure “Can manage users (Owner)” is **selected** + + Screenshot of the AnVIL Billing page with the "Add User" pop out box. The instructor Group email, in this case jhu-bmr2021-instructors@firecloud.org, has been filled in and the Owner role checkbox has been ticked. + +1. Click “ADD USER” + + Screenshot of the AnVIL Billing page with the "Add User" pop out box. The instructor Group email, in this case jhu-bmr2021-instructors@firecloud.org, has been filled in and the Owner role checkbox has been ticked. The "ADD USER" button is highlighted. + + +::: {.notice} +This step makes it so that co-instructors can edit permissions and administer the Billing Project as needed. While this means you and co-instructors can compute using the student Billing Project, this makes spending difficult to track. Instructors should always use the **instructor Workspace** to compute. This makes it much easier to track costs associated with instructors versus students. +::: + +## Adding Students as “User” + +Next, you will add your student Group to the Billing Project so that they can compute. To set student permissions: + +1. Go to https://anvil.terra.bio/#billing + +1. Select the “Owned by You” Billing Project sub-list + + Screenshot of the AnVIL Billing page. The "Owned by You" billing list is highlighted. + +1. Select the Billing Project you made in [Billing Project](#billing-project) + + Screenshot of the AnVIL Billing page. The "Owned by You" billing list has been expanded. The student Billing project, in this case jhu-bmr2021-students, is highlighted. + +1. Select the “Users” tab + + Screenshot of the AnVIL Billing page. The student Billing project, in this case jhu-bmr2021-students, has been selected and the Users Tab is highlighted. + +1. Click “+ Add User”. You will be prompted to add a “User email *”. + + Screenshot of the AnVIL Billing page. The student Billing project, in this case jhu-bmr2021-students, has been selected and the "+Add User" button is highlighted. + +1. Begin typing the student Group name set up in [Student Group](#student-group). You should see an email in the form @firecloud.org (e.g., jhu-bmr2021-students@firecloud.org). + +1. Keep “Can manage users (Owner)” **deselected**. + + Screenshot of the AnVIL Billing page with the "Add User" pop out box. The student Group email, in this case jhu-bmr2021-students@firecloud.org, has been filled in and the Owner role checkbox has NOT been ticked. + +1. Click “ADD USER” + + Screenshot of the AnVIL Billing page with the "Add User" pop out box. The student Group email, in this case jhu-bmr2021-students@firecloud.org, has been filled in and the Owner role checkbox has NOT been ticked. The "ADD USER" button is highlighted. + +## Understanding the various billing costs + +Costs in AnVIL fall into one of three categories: compute costs, storage costs, and network usage (egress) costs. **Compute costs** are those that students accrue when actively using an AnVIL Workspace. Students can clone a Workspace for no cost, but they will begin to accrue costs as soon as they set up a cloud environment. Compute costs are based on how many CPUs you need, as well as how much memory and storage space you choose. You can also pause the Workspace and pay a lower cost per hour than if you were to keep the Workspace running. Current prices can be found [here](https://cloud.google.com/compute/all-pricing#top_of_page). + +**Storage costs** are driven by the persistent disk. The persistent disk allows you to store data and installed programs/libraries for a low cost. Students can delete their Workspaces but maintain their persistent disk so they still have access to previous programs they have installed and previous files they've created. Current prices can be found [here](https://cloud.google.com/storage/pricing#storage-pricing%20and%20https://cloud.google.com/compute/all-pricing#localssdpricing). + +Finally, **network usage** costs are those involved with transferring data between networks or downloading data from the cloud to your local computer. Current prices can be found [here](https://cloud.google.com/storage/pricing#network-egress). + +## Estimating costs before the class begins + +AnVIL has a free [AnVIL_Cost_Estimator](https://docs.google.com/spreadsheets/d/1GUN93HDRqDbZ0uktaZjoP-y8Ril1T_VIJnQrjRD6tV4) that allows you estimate compute, storage, and network usage costs for your class. This is a Google sheet that you can tailor to fit your needs. Before you use it, make sure the prices are up to date by following the links at the bottom of the sheet. + +If you need to create a Budget Justification for your class, you can also use the free [AnVIL_Budget_Justification](https://docs.google.com/document/d/145JFLn2hviLmaYF-mO06gbCkG0i4HRaWvkUBKORo85Y/edit) template. + +## How much does a class cost? + +One of the advantages of billing projects in Terra is that you can keep track of the costs during real time. You can see how much each Workspace is costing while your course is happening, so there are no unexpected surprises at the end! + +Full details about billing in Terra can be found [here](https://support.terra.bio/hc/en-us/articles/4405325218075). These instructions are adapted from Terra Support. + +To view the costs being accrued by each billing project, you can go to [https://console.cloud.google.com/billing](https://console.cloud.google.com/billing). At the top of the page, there is a dropdown menu. Choose the billing project name you'd like to view. + + +Locating dropdown menu + + +Once you are in proper billing project, you click on "View detailed charges" in the Billing section on the far right. + + +Locating detailed charges + + +This takes you to a report of the detailed charges accrued by the billing account. Here, you will be able to see the total cost over a time range, as well as costs broken down by services. + + +Locating dropdown menu + + +# Setting up the Class Activity + +## Overview of Class Setup + +This section will show you how to organize your class to make it easier to administer access to your content. You will need to have a list of who will be taking your class, such as a course roster or sign-up list, as well as a list of additional instructors or teaching assistants. You can make changes later, so the list of students need not be final. + +## Collect Google IDs + +AnVIL IDs are based on [Google accounts](account-setup.html#google-account). + +Students -- Contact students/participants to get their AnVIL IDs. These should be Gmail addresses or emails with GSuite capabilities. You can link students to [Student Account Setup](student-account-setup.html) for instructions on what they should do. + +Co-instructors -- If you will be working with other instructors, such as co-instructors or teaching assistants, you will need to collect their IDs as well. + +## Set Up Groups +Reminder: + +- Google **Billing Accounts** are managed on Google Cloud Platform and are used for organizing *funding sources* (e.g. credit cards, cloud credits). +- Terra **Billing Projects** are managed through Terra, and allow you to associate your Terra activity with the correct Google Billing Account. + +For a more detailed explanation, please see the chapter on Account Setup. + +We suggest creating two different Terra Billing Projects under the appropriate Billing Account that you created on `cloud.google.com`: one for students and one for co-instructors. The instructions below will walk you through how to set this up. + +Groups enable you to share your class Workspace and manage permissions for many people at once. We recommend starting with one Group for instructors and one Group for students. + +### Instructor Group {#instructor-group} {-} + +Create an informative, unique Group name for any co-instructors and teaching assistants. We suggest a combination of institution-class-role (e.g., “jhu-bmr2021-instructors”). Only letters, numbers, underscores, and dashes are allowed in Group names. To create a Group for instructors: + +1. Go to https://anvil.terra.bio/#groups + +1. Click “+ Create a New Group” + + Screenshot of the Terra Group page. The "Create a New Group" button is highlighted. + +1. Type in your instructor Group name + +1. Click “CREATE GROUP” + + Screenshot of the Terra Group page with Create New Group pop out box. The Group name, jhu-bmr2021-instructors, has been entered and the "CREATE GROUP" button is highlighted. + +You now have a unique **instructor Group**. + +#### Add Instructors as "Admin" (Instructor Group) {-} + +Now that your instructor Group has been created, you should add any additional instructors. You should also ensure that they have the correct permissions. + +1. Go to https://anvil.terra.bio/#groups/ and click on the instructor Group name. This page should also be visible at `https://anvil.terra.bio/#groups/`. + + Screenshot of the Terra Group, and the specific Group that was just created. The Group Name is highlighted. + +1. Click on “+Add User”. You will be prompted to add the instructor’s AnVIL ID. + + Screenshot of the Terra Group page for the specific Group that was just created. The "+Add User" button is highlighted. + +1. Type in the instructor’s AnVIL ID + + Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The instructor`s AnVIL ID, instructor-1@gmail.com, has been entered and the AnVIL ID (email) is highlighted. + +1. Make sure “Can manage users (admin)” is **selected** + + Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The instructor`s AnVIL ID, instructor-1@gmail.com, has been entered and the checkbox "Can manage users (admin)" has been selected and is highlighted. + +1. Click ADD USER. This will take you back to the Group administration page. + + Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The instructor`s AnVIL ID, instructor-1@gmail.com, has been entered and the "ADD USER" button is highlighted. + +Make sure the newly added instructor displays “Admin” under “Roles” beside their AnVIL ID. Repeat this process for any additional co-instructors and teaching assistants. + +Screenshot of the Terra Group for the instructor Group that was just created, where the newly added instructor is visible in the user list. The instructor`s AnVIL ID, instructor-1@gmail.com is visible next to the role "Admin", which is highlighted. + +### Student Group {#student-group} {-} + +Next, you will create a Group for your students. Create an informative, unique Group name. We suggest a combination of institution-class-role (e.g., “jhu-bmr2021-students”). Only letters, numbers, underscores, and dashes are allowed in Group names. To create a Group for students: + +1. Go to https://anvil.terra.bio/#groups + +1. Click “+ Create a New Group” + + Screenshot of the Terra Group page. The "Create a New Group" button is highlighted. + +1. Type in your student Group name + +1. Click “CREATE GROUP” + + Screenshot of the Terra Group page with Create New Group pop out box. The Group name, jhu-bmr2021-students, has been entered and the "CREATE GROUP" button is highlighted. + +You now have a unique **student Group**. + +#### Add Instructors as "Admin" (Student Group) {-} + +The next steps ensure any additional co-instructors and teaching assistants are able to administer the student Group in case you are unavailable. Follow the steps below to add each co-instructor in the student Group: + +1. Go to https://anvil.terra.bio/#groups/ and click on the student Group name. This page should be visible at `https://anvil.terra.bio/#groups/`. + + Screenshot of the Terra Group, and the specific Group that was just created. The student Group name is highlighted. + +1. Click on “+Add User”. You will be prompted to add the instructor’s AnVIL ID. + + Screenshot of the Terra Group page for the specific Group that was just created. The "+Add User" button is highlighted. + +1. Type in the instructor’s AnVIL ID + + Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The instructor`s AnVIL ID, instructor-1@gmail.com, has been entered and the AnVIL ID (email) is highlighted. + +1. Make sure “Can manage users (admin)” is **selected** + + Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The instructor`s AnVIL ID, instructor-1@gmail.com, has been entered and the checkbox "Can manage users (admin)" has been selected and is highlighted. + +1. Click ADD USER. This will take you back to the Group administration page. + + Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The instructor`s AnVIL ID, instructor-1@gmail.com, has been entered and the "ADD USER" button is highlighted. + +Make sure the newly added instructor displays “Admin” under “Roles” beside their AnVIL ID. Repeat this process for any additional co-instructors and teaching assistants. + +Screenshot of the Terra Group for the student Group that was just created, where the newly added instructor is visible in the user list. The instructor`s AnVIL ID, instructor-1@gmail.com is visible next to the role "Admin", which is highlighted. + +#### Add Students as "Member" {-} + +Follow the steps below to add individual students to the student Group: + +1. Go to https://anvil.terra.bio/#groups/ and click on the student Group name. This page should be visible at `https://anvil.terra.bio/#groups/`. + + Screenshot of the Terra Group, and the specific Group that was just created. The student Group name is highlighted. + +1. Click on “+Add User”. You will be prompted to add an AnVIL ID. + + Screenshot of the Terra Group page for the specific Group that was just created. The "+Add User" button is highlighted. + +1. Type in the student’s AnVIL ID + + Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The student`s AnVIL ID, student-1@gmail.com, has been entered and the AnVIL ID (email) is highlighted. + +1. Click ADD USER + + Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The student`s AnVIL ID, student-1@gmail.com, has been entered and the "ADD USER" button is highlighted. + +Make sure the newly added student displays “Member” under “Roles” beside their AnVIL ID. At present, each student’s AnVIL ID must be added separately. + +Screenshot of the Terra Group for the student Group that was just created, where the newly added student is visible in the user list. The student`s AnVIL ID, student-1@gmail.com is visible next to the role "Member", which is highlighted. + +Your instructor and student Groups are now set up. + +### Group Email Lists {-} + +Note that your newly created Groups have Group emails associated with them. Take note of these Group emails. You will use them for granting access to your class Billing Projects and Workspaces in the next steps. + +Screenshot of the Terra Group page. Emails associated with newly formed Groups have been highlighted. + +## Set Up Billing Projects + +Billing Projects in Terra help organize your compute costs. Like Groups, we suggest creating two different billing projects under the appropriate Billing Account that you created on `cloud.google.com`: one for students and one for co-instructors. + +Billing Project names must be globally unique and cannot exceed 30 characters. + +### Instructor Billing Project {#instructor-billing-project} {-} + +First, create the Billing Project for instructors. We suggest the name of the Billing Project should be a combination of institution-class-role (e.g., "jhu-bmr2021-instructors-bill-1"). To create a Billing Project for instructors: + +1. Go to https://anvil.terra.bio/#billing + +1. Click “+CREATE” + + Screenshot of the Terra Billing page. The "+CREATE" button is highlighted. + +1. Type in your instructor Billing Project name + + Screenshot of the Terra Billing page with Create Billing Project pop out box. The new billing project name, jhu-bmr2021-instructors-bill-1, is highlighted. + +1. Select the appropriate Billing Account + + Screenshot of the Terra Billing page with Create Billing Project pop out box. The appropriate billing account name, My Billing Account, is highlighted. + +1. Click “CREATE BILLING PROJECT” + + Screenshot of the Terra Billing page with Create Billing Project pop out box. The "CREATE BILLING PROJECT" button is highlighted. + +You now have a unique **instructor Billing Project**. + +#### Add Instructors as “Owner” (Instructor Project) {-} + +Next, you want to give instructors permission to use the Billing Project to compute. To set instructor permissions: + +1. Go to https://anvil.terra.bio/#billing + +1. Select the “Owned by You” Billing Project sub-list + + Screenshot of the AnVIL Billing page. The "Owned by You" billing list is highlighted. + +1. Select the Billing Project you made for instructors in [Instructor Billing Project](#instructor-billing-project) + + Screenshot of the AnVIL Billing page. The "Owned by You" billing list has been expanded. The instructor Billing project, in this case jhu-bmr2021-instructors, is highlighted. + +1. Select the “Users” tab + + Screenshot of the AnVIL Billing page. The instructor Billing project, in this case jhu-bmr2021-instructors, has been selected and the Users Tab is highlighted. + +1. Click “+ Add User”. You will be prompted to add a “User email *”. + + Screenshot of the AnVIL Billing page. The instructor Billing project, in this case jhu-bmr2021-instructors, has been selected and the "+Add User" button is highlighted. + +1. Begin typing the instructor Group name set up in [Instructor Group](#instructor-group). You should see an email in the form @firecloud.org (e.g., jhu-bmr2021-instructors@firecloud.org). + +1. Ensure “Can manage users (Owner)” is **selected** + + Screenshot of the AnVIL Billing page with the "Add User" pop out box. The instructor Group email, in this case jhu-bmr2021-instructors@firecloud.org, has been filled in and the Owner role checkbox has been ticked. + +1. Click “ADD USER” + + Screenshot of the AnVIL Billing page with the "Add User" pop out box. The instructor Group email, in this case jhu-bmr2021-instructors@firecloud.org, has been filled in and the Owner role checkbox has been ticked. The "ADD USER" button is highlighted. + +Your **instructor Billing Project** is now set up. + +### Student Billing Project {#student-billing-project} {-} + +Next, create a student Billing Project. Again, we suggest a combination of institution-class-role (e.g., “jhu-bmr2021-students-bill-1”). To create a Billing Project for students: + +1. Go to https://anvil.terra.bio/#billing + +1. Click “+CREATE” + + Screenshot of the Terra Billing page. The "+CREATE" button is highlighted. + +1. Type in your student Billing Project name + + Screenshot of the Terra Billing page with Create Billing Project pop out box. The new billing project name, jhu-bmr2021-students-bill-1, is highlighted. + +1. Select the appropriate Billing Account (same as above) + + Screenshot of the Terra Billing page with Create Billing Project pop out box. The appropriate billing account name, My Billing Account, is highlighted. + +1. Click “CREATE BILLING PROJECT” + + Screenshot of the Terra Billing page with Create Billing Project pop out box. The "CREATE BILLING PROJECT" button is highlighted. + +You now have a unique **student Billing Project**. + +#### Add Instructors as “Owner” (Student Project) {-} + +You want to ensure any additional co-instructors and teaching assistants are able to administer the student Billing Project in case you are unavailable. To set instructor permissions: + +1. Go to https://anvil.terra.bio/#billing + +1. Select the “Owned by You” Billing Project sub-list + + Screenshot of the AnVIL Billing page. The "Owned by You" billing list is highlighted. + +1. Select the Billing Project you made for students in [Student Billing Project](#student-billing-project) + + Screenshot of the AnVIL Billing page. The "Owned by You" billing list has been expanded. The student Billing project, in this case jhu-bmr2021-students, is highlighted. + +1. Select the “Users” tab + + Screenshot of the AnVIL Billing page. The student Billing project, in this case jhu-bmr2021-students, has been selected and the Users Tab is highlighted. + +1. Click “+ Add User”. You will be prompted to add a “User email *”. + + Screenshot of the AnVIL Billing page. The student Billing project, in this case jhu-bmr2021-students, has been selected and the "+Add User" button is highlighted. + +1. Begin typing the instructor Group name set up in [### Set Up Groups]. You should see an email in the form @firecloud.org (e.g., jhu-bmr2021-instructors@firecloud.org). + +1. Ensure “Can manage users (Owner)” is **selected** + + Screenshot of the AnVIL Billing page with the "Add User" pop out box. The instructor Group email, in this case jhu-bmr2021-instructors@firecloud.org, has been filled in and the Owner role checkbox has been ticked. + +1. Click “ADD USER” + + Screenshot of the AnVIL Billing page with the "Add User" pop out box. The instructor Group email, in this case jhu-bmr2021-instructors@firecloud.org, has been filled in and the Owner role checkbox has been ticked. The "ADD USER" button is highlighted. + +::: {.notice} +This step makes it so that co-instructors can edit permissions and administer the student Billing Project as needed. While this means you and co-instructors can compute using the student Billing Project, this makes spending difficult to track. Instructors should always use the **instructor Billing Project** to compute. This makes it much easier to track costs associated with instructors versus students. +::: + +#### Add Students as “User” {-} + +Next, you will add your student Group to the student Billing Project so that they can compute. To set student permissions: + +1. Go to https://anvil.terra.bio/#billing + +1. Select the “Owned by You” Billing Project sub-list + + Screenshot of the AnVIL Billing page. The "Owned by You" billing list is highlighted. + +1. Select the Billing Project you made for students in [Student Billing Project](#student-billing-project) + + Screenshot of the AnVIL Billing page. The "Owned by You" billing list has been expanded. The student Billing project, in this case jhu-bmr2021-students, is highlighted. + +1. Select the “Users” tab + + Screenshot of the AnVIL Billing page. The student Billing project, in this case jhu-bmr2021-students, has been selected and the Users Tab is highlighted. + +1. Click “+ Add User”. You will be prompted to add a “User email *”. + + Screenshot of the AnVIL Billing page. The student Billing project, in this case jhu-bmr2021-students, has been selected and the "+Add User" button is highlighted. + +1. Begin typing the student Group name set up in [Student Group](#student-group). You should see an email in the form @firecloud.org (e.g., jhu-bmr2021-students@firecloud.org). + +1. Keep “Can manage users (Owner)” **deselected**. + + Screenshot of the AnVIL Billing page with the "Add User" pop out box. The student Group email, in this case jhu-bmr2021-students@firecloud.org, has been filled in and the Owner role checkbox has NOT been ticked. + +1. Click “ADD USER” + + Screenshot of the AnVIL Billing page with the "Add User" pop out box. The student Group email, in this case jhu-bmr2021-students@firecloud.org, has been filled in and the Owner role checkbox has NOT been ticked. The "ADD USER" button is highlighted. + +Your **student Billing Project** is now set up. + +## Set Permissions on the Workspace + +Finally, you will want to set up permissions for co-instructors and students to see the class Workspace you created with the development Billing Project in [Developing Content](developing-content.html). AnVIL users can take on the "Owner", "Writer", or "Reader" role for a Workspace. + +### Add Instructors as “Owner” {-} + +You should add your co-instructors and teaching assistants as “Owners” to the class Workspace. This is useful if they need to edit the course content or share the space with students on your behalf. To share and change permissions: + +1. Go to https://anvil.terra.bio/#workspaces and find your class Workspace you set up in [Developing Content](developing-content.html) + +1. Click the teardrop button for your class Workspace + +1. Click “Share”. This will open a dialog box. + + Screenshot of the class Workspace listed in the Workspaces tab. The teardrop button and the option to "Share" the Workspace are highlighted. + +1. Enter the name of the instructor Group (e.g., jhu-bmr2021-instructors). This will create a dropdown for the Group permissions in the box. Select this Group. + + Screenshot of the share Workspace pop out box. The text "jhu-bmr" has been entered in the User email box and the dropdown below has been automatically filtered to reveal the instructor, student, and dev Groups. The instructor Group, in this case jhu-bmr2021-instructors@firecloud.org, has been highlighted. + +1. Change permissions to “Owner” using the dropdown menu under the instructor Group + + Screenshot of the share Workspace pop out box. The instructor Group, in this case jhu-bmr2021-instructors@firecloud.org, has been added as a collaborator. The permissions are highlighted and show that role has been set to "Owner". + +1. Click “SAVE” + + Screenshot of the share Workspace pop out box. The instructor Group email has been added with permissions correctly set. The "SAVE" button is highlighted. + +::: {.notice} +This step makes it so that co-instructors can edit the original content of the Workspace as needed. While this means you and co-instructors can compute using the development Billing Project, this makes spending difficult to track. Instructors should instead clone the Workspace using the **instructor Billing Project**. This makes it much easier to track costs associated with this iteration of your class versus further iterations (e.g., the following semester or year). +::: + +### Add Students as “Reader” {-} + +Next, add your students as “Readers” to the class Workspace. This means they will be able to view and clone the Workspace, but not make edits or perform computations. To share the Workspace: + +1. Click the teardrop button for your class Workspace + +1. Click “Share”. This will open a dialog box. + + Screenshot of the class Workspace listed in the Workspaces tab. The teardrop button and the option to "Share" the Workspace are highlighted. + +1. Enter the name of the student Group. This will create a dropdown for the Group permissions in the box. Select this Group. + + Screenshot of the share Workspace pop out box. The text "jhu-bmr" has been entered in the User email box and the dropdown below has been automatically filtered to reveal the student and dev Groups. The student Group, in this case jhu-bmr2021-students@firecloud.org, has been highlighted. + +1. Ensure permissions are set to “Reader” (default) + + Screenshot of the share Workspace pop out box. The student Group, in this case jhu-bmr2021-students@firecloud.org, has been added as a collaborator. The permissions are highlighted and show that role is "Reader". + +1. Click “SAVE” + + Screenshot of the share Workspace pop out box. The student Group email has been added with permissions correctly set. The "SAVE" button is highlighted. + +You have now correctly set up your class permissions! + +## Notify Terra + +Contacting Terra ahead of your class time helps the Terra team avoid any major disruptions to your class. Contact Terra by [submitting a request](https://support.terra.bio/hc/en-us/requests/new) for a hold on scheduled maintenance and downtime. It’s also a good idea to ask about major changes planned for the time prior to your class. + + +# Getting Credit for Professional Development + +We are happy to provide a letter to your supervisor, department head, or dean to indicate you've worked through this content and intend to use it in your class. +:::: diff --git a/docs/08-student_using_rstudio.md b/docs/08-student_using_rstudio.md new file mode 100644 index 0000000..0853540 --- /dev/null +++ b/docs/08-student_using_rstudio.md @@ -0,0 +1,175 @@ +:::: {.borrowed_chunk} + +# Using RStudio on AnVIL + +In the next few steps, you will walk through how to get set up to use RStudio on the AnVIL platform. AnVIL is centered around different “Workspaces”. Each Workspace functions almost like a mini code laboratory - it is a place where data can be examined, stored, and analyzed. The first thing we want to do is to copy or “clone” a Workspace to create a space for you to experiment. + +Use a web browser to go to the AnVIL website. In the browser type: + +``` +anvil.terra.bio +``` + +:::{.notice} +**Tip** +At this point, it might make things easier to open up a new window in your browser and split your screen. That way, you can follow along with this guide on one side and execute the steps on the other. +::: + +Your instructor will give you information on which workspace you should clone. + +## Video overview of RStudio on AnVIL + + +Here is a video tutorial that describes the basics of using RStudio on AnVIL. + + + +### Objectives + +- Start compute for your RStudio environment +- Tour RStudio on AnVIL +- Stop compute to minimize expenses + +### Slides + +The slides for this tutorial are are located [here](https://docs.google.com/presentation/d/1eypYLLqD11-NwHLs4adGpcuSB07dYEJfAaALSMvgzqw). + +## Launching RStudio + + +:::{.warning} +AnVIL is very versatile and can scale up to use very powerful cloud computers. It's very important that you select a cloud computing environment appropriate to your needs to avoid runaway costs. If you are uncertain, start with the default settings; it is fairly easy to increase your compute resources later, if needed, but harder to scale down. +::: + +Note that, in order to use RStudio, you must have access to a Terra Workspace with permission to compute (i.e. you must be a "Writer" or "Owner" of the Workspace). + +1. Open Terra - use a web browser to go to [`anvil.terra.bio`](https://anvil.terra.bio/) + +1. In the drop-down menu on the left, navigate to "Workspaces". Click the triple bar in the top left corner to access the menu. Click "Workspaces". + + Screenshot of Terra drop-down menu.  The "hamburger" button to extend the drop-down menu is highlighted, and the menu item "Workspaces" is highlighted. + +1. Click on the name of your Workspace. You should be routed to a link that looks like: `https://anvil.terra.bio/#workspaces//`. + +1. Click on the cloud icon on the far right to access your Cloud Environment options. + + Screenshot of a Terra Workspace. The cloud icon to create a new cloud environment is highlighted. + +1. In the dialogue box, click the "Settings" button under RStudio. + + Screenshot of the Cloud Environment Details dialogue box. The Settings button under RStudio is highlighted. + +1. You will see some details about the default RStudio cloud environment, and a list of costs because it costs a small amount of money to use cloud computing. + + Screenshot of the RStudio Cloud Environment dialogue box. The cost to run the environment is highlighted. + + + +1. If you are uncertain about what you need, the default configuration is a reasonable, cost-conservative choice. It is fairly easy to increase your compute resources later, if needed, but harder to scale down. Click the “Create” button. + + Screenshot of the RStudio Cloud Environment dialogue box. The "CREATE" button is highlighted. + + + +1. Otherwise, click “CUSTOMIZE” to modify the environment for your needs. + + Screenshot of the RStudio Cloud Environment dialogue box. The "CUSTOMIZE" button is highlighted. + + + + + + + + + + + +1. The dialogue box will close and you will be returned to your Workspace. You can see the status of your cloud environment by hovering over the RStudio logo. It will take a few minutes for Terra to request computers and install software. + + Screenshot of a Terra Workspace. The hovertext for the RStudio icon is highlighted, and indicates that the status of the environment is "Creating". + +1. When your environment is ready, its status will change to “Running”. Click on the RStudio logo to open a new dialogue box that will let you launch RStudio. + + Screenshot of a Terra Workspace. The hovertext for the RStudio icon is highlighted, and indicates that the status of the environment is "Running". + +1. Click the launch icon to open RStudio. This is also where you can pause, modify, or delete your environment when needed. + + Screenshot of the RStudio Environment Details dialogue box. The "Open" button is highlighted. + +1. You should now see the RStudio interface with information about the version printed to the console. + + Screenshot of the RStudio environment interface. + +## Touring RStudio + + +Next, we will be using RStudio and the package `Glimma` to create interactive plots. See [this vignette](https://bioconductor.org/packages/release/bioc/vignettes/Glimma/inst/doc/limma_edger.html) for more information. + +1. The Bioconductor team has created a very useful package to programmatically interact with Terra and Google Cloud. Install the `AnVIL` package. It will make some steps easier as we go along. + + + + Screenshot of the RStudio environment interface. Code has been typed in the console and is highlighted. + +1. You can now quickly install precompiled binaries using the AnVIL package’s `install()` function. We will use it to install the `Glimma` package and the `airway` package. The `airway` package contains a `SummarizedExperiment` data class. This data describes an RNA-Seq experiment on four human airway smooth muscle cell lines treated with dexamethasone. + +{Note: for some of the packages, you will have to install packaged from the CRAN repository, using the install.packages() function. The examples will show you which install method to use.} + + + + Screenshot of the RStudio environment interface. Code has been typed in the console and is highlighted. + +1. Load the example data. + + + + Screenshot of the RStudio environment interface. Code has been typed in the console and is highlighted. + +1. The multidimensional scaling (MDS) plot is frequently used to explore differences in samples. When this data is MDS transformed, the first two dimensions explain the greatest variance between samples, and the amount of variance decreases monotonically with increasing dimension. The following code will launch a new window where you can interact with the MDS plot. + + + + Screenshot of the Glimma popout showing the data in an MDS plot. All data points are blue. + +1. Change the `colour_by` setting to "groups" so you can easily distinguish between groups. In this data, the "group" is the treatment. + + Screenshot of the Glimma popout showing the data in an MDS plot. Data points are colored blue and orange by group. The colour by dropdown menu on the interactive plot is hightlighted. + +1. You can download the interactive html file by clicking on "Save As". + + Screenshot of the Glimma popout showing the data in an MDS plot. The Save As menu is highlighted. + +1. You can also download plots and other files created directly in RStudio. To download the following plot, click on "Export" and save in your preferred format to the default directory. This saves the file in your cloud environment. + + + + Screenshot of the RStudio interface. A plot has been created. The Export menu has been highlighted. + +1. You should see the plot in the "Files" pane. + + Screenshot of the RStudio interface. A plot has been created. The saved pdf file is now visible under the "Files" pane. + +1. Select this file and click "More" > "Export" + + Screenshot of the RStudio interface. A plot has been created. The saved pdf file is now visible under the "Files" pane. The "More" and "Export" menus have been highlighted. + +1. Select "Download" to save the file to your local machine. + + Screenshot of the RStudio interface. The popup to download the selected file has been highlighted, + +## Pausing RStudio + + +1. The right-hand side icon reminds you that you are accruing cloud computing costs. If you don’t see this icon, you may need to scroll to the right. + + Screenshot of the RStudio interface. The icon on the right showing that the cloud environment is running is highlighted. + +1. You should minimize charges when you are not performing an analysis. You can do this by clicking on the RStudio icon and selecting “Pause”. This will release the CPU and memory resources for other people to use. Note that your work will be saved in the environment and continue to accrue a very small cost. This work will be lost if the cloud environment gets deleted. If there is anything you would like to save permanently, it's a good idea to copy it from your compute environment to another location, such as the Workspace bucket, GitHub, or your local machine, depending on your needs. + + Screenshot of the RStudio menu. The pause button which stops the cloud environment is highlighted. + +:::{.notice} +You can also pause your cloud environment(s) at https://anvil.terra.bio/#clusters. +::: +:::: diff --git a/docs/09-soil_exploration_module.md b/docs/09-soil_exploration_module.md new file mode 100644 index 0000000..566d7f2 --- /dev/null +++ b/docs/09-soil_exploration_module.md @@ -0,0 +1,306 @@ +# (PART\*) Data Exploration {-} + + + + +# Exploring Soil Testing Data With R + +In this activity, you'll have a chance to become familiar with the BioDIGS soil testing data. This dataset includes information on the inorganic components of each soil sample, particularly metal concentrations. Human activity can increase the concentration of inorganic compounds in the soil. When cars drive on roads, compounds from the exhaust, oil, and other fluids might settle onto the roads and be washed into the soil. When we put salt on roads, parking lots, and sidewalks, the salts themselves will eventually be washed away and enter the ecosystem through both water and soil. Chemicals from factories and other businesses also leech into our environment. All of this means the concentration of heavy metals and other chemicals will vary among the soil samples collected for the BioDIGS project. + +## Before You Start + + +If you do not already have a Google account that you would like to use for accessing Terra, [create one now](https://accounts.google.com/SignUp). + +If you would like to create a Google account that is associated with your non-Gmail, institutional email address, follow [these instructions](https://support.terra.bio/hc/en-us/articles/360029186611). + +## Objectives + +This activity will teach you how to use the AnVIL platform to: + +1. Import data into RStudio +1. Examine a csv file that contains the soil testing data from the BioDIGS project +1. Calculate summary statistics for variables in the soil testing data +1. Create and interpret histograms and boxplots for variables in the soil testing data + + +## Part 1. Data Import + +We will use the `BioDIGS` package to retrieve the data. We first need to install the package from where it is stored on GitHub. + + + + + +``` r +devtools::install_github("fhdsl/BioDIGSData") +``` + +Once you've installed the package, we can load the library and assign the soil testing data to an _object_. This command follows the code structure: + +dataset_object_name <- stored_BioDIGS_dataset + + +``` r +library(BioDIGSData) + +soil.values <- BioDIGS_soil_data() +``` + +It _seems_ like the dataset loaded, but it's always a good idea to verify. There are many ways to check, but the easiest approach (if you're using RStudio) is to look at the Environment tab on the upper right-hand side of the screen. You should now have an object called `soil.values` that includes some number of observations for 28 variables. The _observations_ refer to the number of rows in the dataset, while the _variables_ tell you the number of columns. As long as neither the observations or variables are 0, you can be confident that your dataset loaded. + +Let's take a quick look at the dataset. We can do this by clicking on soil.values object in the Environment tab. (Note: this is equivalent to typing `View(soil.values)` in the R console.) + +If the dataset loaded, you will see an object with non-zero observations and variables in the Environment tab + + +This will open a new window for us to scroll through the dataset. + +You can click on the object in the Environment tab to open a new window that allows you to scroll through the loaded dataset + +Well, the data definitely loaded, but those column names aren't immediately understandable. What could **As_EPA3051** possibly mean? In addition to the dataset, we need to load the _data dictionary_ as well. + +:::{.dictionary} + +**Data dictionary:** a file containing the names, definitions, and attributes about data in a database or dataset. + +::: + +In this case, the data dictionary can help us make sense of what sort of values each column represents. The data dictionary for the BioDIGS soil testing data is available in the R package (see code below), but we have also reproduced it here. + + +``` r +?BioDIGS_soil_data() +``` + +:::{.dictionary} + +- **site_id** Unique letter and number site name +- **full_name** Full site name +- **As_EPA3051** Arsenic (mg/kg), EPA Method 3051A. Quantities < 3.0 are not detectable. +- **Cd_EPA3051** Cadmium (mg/kg), EPA Method 3051A. Quantities < 0.2 are not detectable. +- **Cr_EPA3051** Chromium (mg/kg), EPA Method 3051A +- **Cu_EPA3051** Copper (mg/kg), EPA Method 3051A +- **Ni_EPA3051** Nickel (mg/kg), EPA Method 3051A +- **Pb_EPA3051** Lead (mg/kg), EPA Method 3051A +- **Zn_EPA3051** Zinc (mg/kg), EPA Method 3051A +- **water_pH** +- **A-E_Buffer_pH** +- **OM_by_LOI_pct** Organic Matter by Loss on Ignition +- **P_Mehlich3** Phosphorus (mg/kg), using the Mehlich 3 soil test extractant +- **K_Mehlich3 Potassium** (mg/kg), using the Mehlich 3 soil test extractant +- **Ca_Mehlich3** Calcium (mg/kg), using the Mehlich 3 soil test extractant +- **Mg_Mehlich3** Magnesium (mg/kg), using the Mehlich 3 soil test extractant +- **Mn_Mehlich3** Manganese (mg/kg), using the Mehlich 3 soil test extractant +- **Zn_Mehlich3** Zinc (mg/kg), using the Mehlich 3 soil test extractant +- **Cu_Mehlich3** Copper (mg/kg), using the Mehlich 3 soil test extractant +- **Fe_Mehlich3** Iron (mg/kg), using the Mehlich 3 soil test extractant +- **B_Mehlich3** Boron (mg/kg), using the Mehlich 3 soil test extractant +- **S_Mehlich3** Sulfur (mg/kg), using the Mehlich 3 soil test extractant +- **Na_Mehlich3** Sodium (mg/kg), using the Mehlich 3 soil test extractant +- **Al_Mehlich3** Aluminum (mg/kg), using the Mehlich 3 soil test extractant +- **Est_CEC** Cation Exchange Capacity (meq/100g) at pH 7.0 (CEC) +- **Base_Sat_pct** Base saturation (BS). This represents the percentage of CEC occupied by bases (Ca2+, Mg2+, K+, and Na+). The %BS increases with increasing soil pH. The availability of Ca2+, Mg2+, and K+ increases with increasing %BS. +- **P_Sat_ratio** Phosphorus saturation ratio. This is the ratio between the amount of phosphorus present in the soil and the total capacity of that soil to retain phosphorus. The ability of phosphorus to be bound in the soil is primary a function of iron (Fe) and aluminum (Al) content in that soil. + +::: + +Using the data dictionary, we find that the values in column `As_EPA3051` give us the arsenic concentration in mg/kg of each soil sample, as determined by EPA Method 3051A. While arsenic can occur naturally in soils, higher levels suggest the soil may have been contaminated by mining, hazardous waste, or pesticide application. Arsenic is toxic to humans. + +We can also look at just the names of all the columns using the R console using the `colnames()` command. + + +``` r +colnames(soil.values) +``` + +``` +## [1] "site_id" "site_name" "type" "As_EPA3051" +## [5] "Cd_EPA3051" "Cr_EPA3051" "Cu_EPA3051" "Ni_EPA3051" +## [9] "Pb_EPA3051" "Zn_EPA3051" "water_pH" "OM_by_LOI_pct" +## [13] "P_Mehlich3" "K_Mehlich3" "Ca_Mehlich3" "Mg_Mehlich3" +## [17] "Mn_Mehlich3" "Zn_Mehlich3" "Cu_Mehlich3" "Fe_Mehlich3" +## [21] "B_Mehlich3" "S_Mehlich3" "Na_Mehlich3" "Al_Mehlich3" +## [25] "Est_CEC" "Base_Sat_pct" "P_Sat_ratio" "region" +``` + +Most of the column names are found in the data dictionary, but the very last column ("region") isn't. How peculiar! Let's look at what sort of values this particular column contains. The tab with the table of the `soil.views` object should still be open in the upper left pane of the RStudio window. If not, you can open it again by clicking on `soils.view` in the Environment pane, or by using the `View()` command. + + +``` r +View(soil.values) +``` + +Switch to the soil.values tab to look at what values are in the region column + + +If you scroll to the end of the table, we can see that "region" seems to refer to the city or area where the samples were collected. For example, the first 24 samples all come from Baltimore City. + +We can see the first samples in the dataset were collected in Baltimore City + + +You may notice that some cells in the `soil.values` table contain _NA_. This just means that the soil testing data for that sample isn't available yet. We'll take care of those values in the next part. + +::: {.reflection} +QUESTIONS: + +1. How many observations are in the soil testing values dataset that you loaded? What do each of these observations refer to? + +2. What data is found in the column labeled "Fe_Mehlich3"? Why would we be interested how much of this is in the soil? (You may have to search the internet for this answer.) + +::: + +## Part 2. Data Summarization + +Now that we have the dataset loaded, let's explore the data in more depth. + +First, we should remove those samples that don't have soil testing data yet. We _could_ keep them in the dataset, but removing them at this stage will make the analysis a little cleaner. In this case, as we know the reason the data are missing (and that reason will not skew our analysis), we can safely remove these samples. This will not be the case for every data analysis. + +We can remove the unanalyzed samples using the `drop_na()` function from the `tidyr` package. This function removes any rows from a table that contains _NA_ for a particular column. This command follows the code structure: + +dataset_new_name <- dataset %>% drop_na(column_name) + +The `%>% is called a pipe and it tells R that the commands after it should all be applied to the object in front of it. (In this case, we can filter out all samples missing a value for "As_EPA3051" as a proxy for samples without soil testing data.) + + +``` r +library(tidyr) + +soil.values.clean <- soil.values %>% drop_na(As_EPA3051) +``` + +Great! Now let's calculate some basic statistics. For example, we might want to know what the mean (average) lead concentration is for each soil sample. According to the data dictionary, the values for lead concentration are in the column labeled "Pb_EPA3051". We can use a combination of two functions: `pull()` and `mean()`.`pull()` lets you extract a column from your table for statistical analysis, while `mean()` calculates the average value for the extracted column. + +This command follows the code structure: + +OBJECT %>% pull(column_name) %>% mean() + +`pull()` is a command from the `tidyverse` package, so we'll need to load that library before our command. + + +``` r +library(tidyverse) + +soil.values.clean %>% pull(As_EPA3051) %>% mean() +``` + +``` +## [1] 5.10875 +``` + +We can run similar commands to calculate the standard deviation, minimum, and maximum for the soil arsenic values. + + +``` r +soil.values.clean %>% pull(As_EPA3051) %>% sd() +``` + +``` +## [1] 5.606926 +``` + +``` r +soil.values.clean %>% pull(As_EPA3051) %>% min() +``` + +``` +## [1] 0 +``` + +``` r +soil.values.clean %>% pull(As_EPA3051) %>% max() +``` + +``` +## [1] 27.3 +``` +As you can see, the standard deviation of the arsenic concentrations is listed first, then the minimum concentration, and finally the maximum concentration. + +The soil testing dataset contains samples from multiple geographic regions, so maybe it's more meaningful to find out what the average arsenic values are for each region. We have to do a little bit of clever coding trickery for this using the `group_by` and `summarize` functions. First, we tell R to split our dataset up by a particular column (in this case, region) using the `group_by` function, then we tell R to summarize the mean arsenic concentration for each group. Because there are several different functions with the name `summarize` in R, we have to specify that we want to use `summarize` from the `dplyr` package. This command follows the code structure: + +dataset %>% + group_by(column_name) %>% + dplyr::summarize(Mean = mean(column_name)) + + +``` r +soil.values.clean %>% + group_by(region) %>% + dplyr::summarize(Mean = mean(As_EPA3051)) +``` + +``` +## # A tibble: 2 × 2 +## region Mean +## +## 1 Baltimore City 5.56 +## 2 Montgomery County 4.66 +``` + +Now we know that the mean arsenic concentration might be different for each region, and appears higher for the Baltimore City samples than the Montgomery County samples. + +::: {.reflection} +QUESTIONS: + +3. What is the mean iron concentration for samples in this dataset? What about the standard deviation, minimum value, and maximum value? + +2. Calculate the mean iron concentration by region. Which region has the highest mean iron concentration? What about the lowest? + +::: + +## Part 3. Data Visualization + +Often, it can be easier to immediately interpret data displayed as a plot than as a list of values. For example, we can more easily understand how the arsenic concentration of the soil samples are distributed if we create histograms compared to looking at point values like mean, standard deviation, minimum, and maximum. + +One way to make histograms in R is to use the `hist()` function. We can again use the `pull()` command and pipes (`%>%`) to choose the column we want from the `soil.values.clean` dataset and make a histogram of them. Remember, this command follows the code structure: + +dataset %>% + pull(column_name) %>% + hist(main = chart_title, xlab = x_axis_title) + +In this case, we do _not_ have to use the `dplyr::summarize` command before `hist()` because there's only one function called `hist()` in the packages we're using. + + +``` r +soil.values.clean %>% + pull(As_EPA3051) %>% + hist(main = 'Histogram of Arsenic Concentration', + xlab ='Concentration in mg/kg' ) +``` + + + +We can see that almost all the soil samples had very low concentrations of arsenic (which is good news for the soil health!). In fact, many of them had arsenic concentrations close to 0, and only one sampling location appears to have high levels of arsenic. + +We might also want to graphically compare arsenic concentrations among the geographic regions in our dataset. We can do this by creating boxplots. Boxplots are particularly useful when comparing the mean, variation, and distributions among multiple groups. In R, one way to create a boxplot is using the `boxplot()` function. We don't need to use pipes for this command, but instead will specify what columns we want to use from the dataset inside the `boxplot()` function itself. + +This command follows the code structure: + +boxplot(arsenic_concentration ~ grouping_variable, + data = dataset, + main = "Title of Graph", + xlab = "x_axis_title", + ylab = "y_axis_title") + + +``` r +boxplot(As_EPA3051 ~ region, data = soil.values.clean, + main = "Arsenic Concentration by Geographic Region", + xlab = "Region", + ylab = "Arsenic Concentration in mg/kg") +``` + + + +By using a boxplot, we can quickly see that, while one sampling site within Baltimore City has a very high concentration of arsenic in the soil, in general there isn't a difference in arsenic content between Baltimore City and Montgomery County. + +::: {.reflection} +QUESTIONS: + +5. Create a histogram for _iron_ concentration, as well as a boxplot comparing iron concentration by region. Is the iron concentration similar among regions? Are there any outlier sites with unusually high or low iron concentrations? + +6. Create a histogram for _lead_ concentration, as well as a boxplot comparing lead concentration by region. Is the lead concentration similar among regions? Are there any outlier sites with unusually high or low lead concentrations? + +7. Look at the maps for [iron](https://biodigs.org/#iron_map) and [lead](https://biodigs.org/#lead_map) on the BioDIGS website. Do the boxplots you created make sense, given what you see on these maps? Why or why not? + +::: diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 0000000..2fa16c1 --- /dev/null +++ b/docs/404.html @@ -0,0 +1,304 @@ + + + + + + + Page not found | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+
+

Page not found

+

The page you requested cannot be found (perhaps it was moved or renamed).

+

You may want to try searching to find the page's new location, or use +the table of contents to find the page you are looking for.

+
+
+
+ +
+
+ +
+
+
+ + +
+
+ + + + + + + + + + + + + diff --git a/docs/About.md b/docs/About.md new file mode 100644 index 0000000..00fbad9 --- /dev/null +++ b/docs/About.md @@ -0,0 +1,129 @@ +# About the Authors {-} + +These credits are based on our [course contributors table guidelines](https://github.com/jhudsl/OTTR_Template/wiki/How-to-give-credits). + +  +  + +|Credits|Names| +|-------|-----| +|**Pedagogy**|| +|Content Developer|Elizabeth Humphries| +|Content Editors|[Ava Hoffman], [Kate Isaac]| +|Project Directors|[Ava Hoffman], [Michael Schatz], [Jeff Leek], [Frederick Tan]| +|**Production**|| +|Content Publisher|[Ira Gooding]| +|**Technical**|| +|Template Publishing Engineers|[Candace Savonen], [Carrie Wright], [Ava Hoffman]| +|Publishing Maintenance Engineer|[Candace Savonen]| +|Technical Publishing Stylists|[Carrie Wright], [Candace Savonen]| +|Package Developers ([ottrpal])|[John Muschelli], [Candace Savonen], [Carrie Wright]| +|Package Developer ([BioDIGSData])| [Ava Hoffman]| +|**Funding**|| +|Funder| [National Human Genome Research Institute (NHGRI)] | +|Funding Staff| Fallon Bachman, Jennifer Vessio, Emily Voeglein| + +  + + + + + + + + +``` +## ─ Session info ─────────────────────────────────────────────────────────────── +## setting value +## version R version 4.3.2 (2023-10-31) +## os Ubuntu 22.04.4 LTS +## system x86_64, linux-gnu +## ui X11 +## language (EN) +## collate en_US.UTF-8 +## ctype en_US.UTF-8 +## tz Etc/UTC +## date 2024-08-05 +## pandoc 3.1.1 @ /usr/local/bin/ (via rmarkdown) +## +## ─ Packages ─────────────────────────────────────────────────────────────────── +## package * version date (UTC) lib source +## bookdown 0.39.1 2024-06-11 [1] Github (rstudio/bookdown@f244cf1) +## bslib 0.6.1 2023-11-28 [1] RSPM (R 4.3.0) +## cachem 1.0.8 2023-05-01 [1] RSPM (R 4.3.0) +## cli 3.6.2 2023-12-11 [1] RSPM (R 4.3.0) +## devtools 2.4.5 2022-10-11 [1] RSPM (R 4.3.0) +## digest 0.6.34 2024-01-11 [1] RSPM (R 4.3.0) +## ellipsis 0.3.2 2021-04-29 [1] RSPM (R 4.3.0) +## evaluate 0.23 2023-11-01 [1] RSPM (R 4.3.0) +## fastmap 1.1.1 2023-02-24 [1] RSPM (R 4.3.0) +## fs 1.6.3 2023-07-20 [1] RSPM (R 4.3.0) +## glue 1.7.0 2024-01-09 [1] RSPM (R 4.3.0) +## htmltools 0.5.7 2023-11-03 [1] RSPM (R 4.3.0) +## htmlwidgets 1.6.4 2023-12-06 [1] RSPM (R 4.3.0) +## httpuv 1.6.14 2024-01-26 [1] RSPM (R 4.3.0) +## jquerylib 0.1.4 2021-04-26 [1] RSPM (R 4.3.0) +## jsonlite 1.8.8 2023-12-04 [1] RSPM (R 4.3.0) +## knitr 1.47.3 2024-06-11 [1] Github (yihui/knitr@e1edd34) +## later 1.3.2 2023-12-06 [1] RSPM (R 4.3.0) +## lifecycle 1.0.4 2023-11-07 [1] RSPM (R 4.3.0) +## magrittr 2.0.3 2022-03-30 [1] RSPM (R 4.3.0) +## memoise 2.0.1 2021-11-26 [1] RSPM (R 4.3.0) +## mime 0.12 2021-09-28 [1] RSPM (R 4.3.0) +## miniUI 0.1.1.1 2018-05-18 [1] RSPM (R 4.3.0) +## pkgbuild 1.4.3 2023-12-10 [1] RSPM (R 4.3.0) +## pkgload 1.3.4 2024-01-16 [1] RSPM (R 4.3.0) +## profvis 0.3.8 2023-05-02 [1] RSPM (R 4.3.0) +## promises 1.2.1 2023-08-10 [1] RSPM (R 4.3.0) +## purrr 1.0.2 2023-08-10 [1] RSPM (R 4.3.0) +## R6 2.5.1 2021-08-19 [1] RSPM (R 4.3.0) +## Rcpp 1.0.12 2024-01-09 [1] RSPM (R 4.3.0) +## remotes 2.4.2.1 2023-07-18 [1] RSPM (R 4.3.0) +## rlang 1.1.4 2024-06-04 [1] CRAN (R 4.3.2) +## rmarkdown 2.27.1 2024-06-11 [1] Github (rstudio/rmarkdown@e1c93a9) +## sass 0.4.8 2023-12-06 [1] RSPM (R 4.3.0) +## sessioninfo 1.2.2 2021-12-06 [1] RSPM (R 4.3.0) +## shiny 1.8.0 2023-11-17 [1] RSPM (R 4.3.0) +## stringi 1.8.3 2023-12-11 [1] RSPM (R 4.3.0) +## stringr 1.5.1 2023-11-14 [1] RSPM (R 4.3.0) +## urlchecker 1.0.1 2021-11-30 [1] RSPM (R 4.3.0) +## usethis 2.2.3 2024-02-19 [1] RSPM (R 4.3.0) +## vctrs 0.6.5 2023-12-01 [1] RSPM (R 4.3.0) +## xfun 0.44.4 2024-06-11 [1] Github (yihui/xfun@9da62cc) +## xtable 1.8-4 2019-04-21 [1] RSPM (R 4.3.0) +## yaml 2.3.8 2023-12-11 [1] RSPM (R 4.3.0) +## +## [1] /usr/local/lib/R/site-library +## [2] /usr/local/lib/R/library +## +## ────────────────────────────────────────────────────────────────────────────── +``` + + + + +[Katherine Cox]: https://publichealth.jhu.edu/faculty/4170/katherine-cox +[Ira Gooding]: https://publichealth.jhu.edu/faculty/4130/ira-gooding +[Ava Hoffman]: https://www.avahoffman.com/ +[Kate Isaac]: https://kweav.github.io/ +[Jeff Leek]: https://jtleek.com/ +[John Muschelli]: https://johnmuschelli.com/ +[National Human Genome Research Institute (NHGRI)]: https://www.genome.gov/ +[Candace Savonen]: https://www.cansavvy.com/ +[Michael Schatz]: http://schatz-lab.org/ +[Frederick Tan]: https://carnegiescience.edu/frederick-tan +[Carrie Wright]: https://carriewright11.github.io/ + + + +[Ottrpal]: https://github.com/jhudsl/ottrpal +[BioDIGSData]: https://github.com/fhdsl/BioDIGSData + + diff --git a/docs/References.md b/docs/References.md new file mode 100644 index 0000000..98d65dc --- /dev/null +++ b/docs/References.md @@ -0,0 +1,2 @@ + +# References diff --git a/docs/about-the-authors.html b/docs/about-the-authors.html new file mode 100644 index 0000000..d35d505 --- /dev/null +++ b/docs/about-the-authors.html @@ -0,0 +1,458 @@ + + + + + + + About the Authors | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+
+

About the Authors

+

These credits are based on our course contributors table guidelines.

+

  + 

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CreditsNames
Pedagogy
Content DeveloperElizabeth Humphries
Content EditorsAva Hoffman, Kate Isaac
Project DirectorsAva Hoffman, Michael Schatz, Jeff Leek, Frederick Tan
Production
Content PublisherIra Gooding
Technical
Template Publishing EngineersCandace Savonen, Carrie Wright, Ava Hoffman
Publishing Maintenance EngineerCandace Savonen
Technical Publishing StylistsCarrie Wright, Candace Savonen
Package Developers (ottrpal)John Muschelli, Candace Savonen, Carrie Wright
Package Developer (BioDIGSData)Ava Hoffman
Funding
FunderNational Human Genome Research Institute (NHGRI)
Funding StaffFallon Bachman, Jennifer Vessio, Emily Voeglein
+

 

+ + + + +
## ─ Session info ───────────────────────────────────────────────────────────────
+##  setting  value
+##  version  R version 4.3.2 (2023-10-31)
+##  os       Ubuntu 22.04.4 LTS
+##  system   x86_64, linux-gnu
+##  ui       X11
+##  language (EN)
+##  collate  en_US.UTF-8
+##  ctype    en_US.UTF-8
+##  tz       Etc/UTC
+##  date     2024-08-05
+##  pandoc   3.1.1 @ /usr/local/bin/ (via rmarkdown)
+## 
+## ─ Packages ───────────────────────────────────────────────────────────────────
+##  package     * version date (UTC) lib source
+##  bookdown      0.39.1  2024-06-11 [1] Github (rstudio/bookdown@f244cf1)
+##  bslib         0.6.1   2023-11-28 [1] RSPM (R 4.3.0)
+##  cachem        1.0.8   2023-05-01 [1] RSPM (R 4.3.0)
+##  cli           3.6.2   2023-12-11 [1] RSPM (R 4.3.0)
+##  devtools      2.4.5   2022-10-11 [1] RSPM (R 4.3.0)
+##  digest        0.6.34  2024-01-11 [1] RSPM (R 4.3.0)
+##  ellipsis      0.3.2   2021-04-29 [1] RSPM (R 4.3.0)
+##  evaluate      0.23    2023-11-01 [1] RSPM (R 4.3.0)
+##  fastmap       1.1.1   2023-02-24 [1] RSPM (R 4.3.0)
+##  fs            1.6.3   2023-07-20 [1] RSPM (R 4.3.0)
+##  glue          1.7.0   2024-01-09 [1] RSPM (R 4.3.0)
+##  htmltools     0.5.7   2023-11-03 [1] RSPM (R 4.3.0)
+##  htmlwidgets   1.6.4   2023-12-06 [1] RSPM (R 4.3.0)
+##  httpuv        1.6.14  2024-01-26 [1] RSPM (R 4.3.0)
+##  jquerylib     0.1.4   2021-04-26 [1] RSPM (R 4.3.0)
+##  jsonlite      1.8.8   2023-12-04 [1] RSPM (R 4.3.0)
+##  knitr         1.47.3  2024-06-11 [1] Github (yihui/knitr@e1edd34)
+##  later         1.3.2   2023-12-06 [1] RSPM (R 4.3.0)
+##  lifecycle     1.0.4   2023-11-07 [1] RSPM (R 4.3.0)
+##  magrittr      2.0.3   2022-03-30 [1] RSPM (R 4.3.0)
+##  memoise       2.0.1   2021-11-26 [1] RSPM (R 4.3.0)
+##  mime          0.12    2021-09-28 [1] RSPM (R 4.3.0)
+##  miniUI        0.1.1.1 2018-05-18 [1] RSPM (R 4.3.0)
+##  pkgbuild      1.4.3   2023-12-10 [1] RSPM (R 4.3.0)
+##  pkgload       1.3.4   2024-01-16 [1] RSPM (R 4.3.0)
+##  profvis       0.3.8   2023-05-02 [1] RSPM (R 4.3.0)
+##  promises      1.2.1   2023-08-10 [1] RSPM (R 4.3.0)
+##  purrr         1.0.2   2023-08-10 [1] RSPM (R 4.3.0)
+##  R6            2.5.1   2021-08-19 [1] RSPM (R 4.3.0)
+##  Rcpp          1.0.12  2024-01-09 [1] RSPM (R 4.3.0)
+##  remotes       2.4.2.1 2023-07-18 [1] RSPM (R 4.3.0)
+##  rlang         1.1.4   2024-06-04 [1] CRAN (R 4.3.2)
+##  rmarkdown     2.27.1  2024-06-11 [1] Github (rstudio/rmarkdown@e1c93a9)
+##  sass          0.4.8   2023-12-06 [1] RSPM (R 4.3.0)
+##  sessioninfo   1.2.2   2021-12-06 [1] RSPM (R 4.3.0)
+##  shiny         1.8.0   2023-11-17 [1] RSPM (R 4.3.0)
+##  stringi       1.8.3   2023-12-11 [1] RSPM (R 4.3.0)
+##  stringr       1.5.1   2023-11-14 [1] RSPM (R 4.3.0)
+##  urlchecker    1.0.1   2021-11-30 [1] RSPM (R 4.3.0)
+##  usethis       2.2.3   2024-02-19 [1] RSPM (R 4.3.0)
+##  vctrs         0.6.5   2023-12-01 [1] RSPM (R 4.3.0)
+##  xfun          0.44.4  2024-06-11 [1] Github (yihui/xfun@9da62cc)
+##  xtable        1.8-4   2019-04-21 [1] RSPM (R 4.3.0)
+##  yaml          2.3.8   2023-12-11 [1] RSPM (R 4.3.0)
+## 
+##  [1] /usr/local/lib/R/site-library
+##  [2] /usr/local/lib/R/library
+## 
+## ──────────────────────────────────────────────────────────────────────────────
+ + + + +
+
+
+ +
+
+ +
+
+
+ + +
+
+ + + + + + + + + + + + + diff --git a/docs/anvil-workspace.html b/docs/anvil-workspace.html new file mode 100644 index 0000000..8ac128e --- /dev/null +++ b/docs/anvil-workspace.html @@ -0,0 +1,329 @@ + + + + + + + Chapter 11 AnVIL Workspace | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+
+

Chapter 11 AnVIL Workspace

+

You can easily access the data on AnVIL by cloning the dedicated workspace. These sections guide you through creating an AnVIL account and accessing the workspace.

+
+

11.1 Create Google Account

+

If you do not already have a Google account that you would like to use for accessing Terra, create one now.

+

If you would like to create a Google account that is associated with your non-Gmail, institutional email address, follow these instructions.

+
+
+

11.2 Clone the Workspace

+
    +
  1. Launch Terra

  2. +
  3. Locate the Workspace you want to clone. If a Workspace has been shared with you ahead of time, it will appear in “MY WORKSPACES”. You can clone a Workspace that was shared with you to perform your own analyses. In the screenshot below, no Workspaces have been shared.

    +

    Screenshot of Terra "MY WORKSPACES" menu. The "MY WORKSPACES" tab is highlighted. No Workspaces are visible because none have been shared with the user. There is an option to create a new Workspace.

  4. +
  5. If a Workspace hasn’t been shared with you, navigate to the “FEATURED” or “PUBLIC” Workspace tabs.

    +

    Screenshot of Terra "My Workspaces" menu. The "FEATURED" tab is highlighted.

  6. +
  7. Use the search box to find the Workspace you want to clone.

    +

    Screenshot of Terra "My Workspaces" menu. The search bar is highlighted and the user has typed in the term "COVID-19". A Workspace related to COVID-19 appears in the results.

  8. +
  9. Click the teardrop button on the far right next to the Workspace you want to clone. Click “Clone”. You can also clone the Workspace from the Workspace Dashboard instead of the search results.

    +

    Screenshot of Terra "My Workspaces" menu with the Workspace that we want to clone. The teardrop button has been clicked to bring up the options. The "Clone" option from the list is highlighted. +Screenshot of the Dashboard for the Workspace that we want to clone. The teardrop button has been clicked to bring up the options. The "Clone" option from the list is highlighted.

  10. +
  11. You will see a popup box appear. Name your Workspace and select the appropriate Terra Billing Project. All activity in the Workspace will be charged to this Billing Project (regardless of who conducted it). Remember that each Workspace should have its own Billing Project.

    +

    Screenshot of the "clone workspace" Terra popup dialog box. The Workspace name and Billing Project dropdown are highlighted. Text has been filled in for the Workspace name as "Lab-member-1-workspace-2".

  12. +
  13. If you are working with protected data, you can set the Authorization Domain to limit who can be added to your Workspace. Note that the Authorization Domain cannot be changed after the Workspace is created (i.e. there is no way to make this Workspace shareable with a larger audience in the future). Workspaces by default are only visible to people you specifically share them with. Authorization domains add an extra layer of enforcement over privacy, but by nature make sharing more complicated. We recommend using Authorization Domains in cases where it is extremely important and/or legally required that the data be kept private (e.g. protected patient data, industry data). For data you would merely prefer not be shared with the world, we recommend relying on standard Workspace sharing permissions rather than Authorization Domains, as Authorization Domains can make future collaborations, publications, or other sharing complicated.

    +

    Screenshot of Terra popup dialog box for creating a new Workspace. The drop-down menu labeled "Authorization domain" is highlighted.

  14. +
  15. Click “CLONE WORKSPACE”. The new Workspace should now show up under your Workspaces.

    +

    Screenshot of Terra popup dialog box for creating a new Workspace. The "Clone Workspace" button is highlighted.

  16. +
+
+
+ +
+
+ +
+
+ +
+
+
+ + +
+
+ + + + + + + + + + + + + diff --git a/docs/assets/AnVIL_style/anvil_favicon.ico b/docs/assets/AnVIL_style/anvil_favicon.ico deleted file mode 100755 index f1eb1c499fc25ce97c645eae9dd0a7e4339220eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 zcmeHOdsviJ8b6rbw%n}NZtlg}YRz5Sva+_eCo6Z$dTg!4f?*I%3@uID%xg)xnpf0; znE?dx0*HVJ-av&^KtvQpFa>Xjm=_=mwNJSzp7WgVJLf&` z`+Lv#o^#&wo-;!DiEBj1jskfX5!POaoluefcUc>lc-?vAm|#+MnBq?GLBZy z>LZiV7I~sxTctcINQ`0nR>-2NnJ{M2-M&!!;p>e@MdDeH?DXyt#N zqvF(w1f9N}?k{f9YonCM3>CkEtn!$_H&R8eMPe^Z`cUGJGKl@)^ACkqo6ijq9nm%y zNzyL^_B}cC$U3mSd{@dXL82@wP>i*{EzLr*F$ajg`1aKb4d)xJMq2UNGnD$t;|}dr zG?#&AE!sVSvVH25{LzEQwJ!B6u2Z}cwQjmCAt4pMfF2our zdP2sBR-<@9OXKPtm_pfB(001XAfCc|e^>O{I;IESV3Vz1;w^#VF)fX&cT*p6eWXDI zLVgeEJk%AfULB7!OR(r|HHc^QXqqdB9^;y$@kTw*GhL8+A@Tg=?hpMl1pVw_UwiW$ z#(Yy9j|VNS@(z18HYYPYT(r~DU`)NP@KEyn#Up4(<`gPS97P37MpFKw_h`%F_o)nH zNukl^u-DhLyxo1rH!`dFSqENAUsvW+&ipqi3-b`qp>@@zlCL;jCy3~5+u>4m=~8ZP^g!66Z4FTH zfwnxnm%xhey&t~gZ<#-@J>Q)?KxNqxvH@6=pee?h&kLgOw#&*Lx{4nj?vQWy$oN+4EAI^}Me~^7Y%dae0jJ5wssc-5h zk5THRM``)QN9bVja>(~1*vUFCiC>U zNt0|f9iDeY28x$l@pn}h9Vi}vZ1#^F`Qtn9+Z-py!I7Pr6!-3}j`dplAW;E5MqB+w zXIJvnbrz#|4sz?RkZtG9HgM^`jS_<%jg#`ru;W6MzaJAIexsJBJhN{EUwjH^esI!W z>S+zR4&xw|mW}I9hf30j*CRbz7v&exw~0tS6xpz|H(@siT(psLc<#;k{O|HPKJ0d2 zNQWPNttS`=bLCHvx5_k7{INN?T+e%sQwO)f_A{GOO?eI#EdAh0`3A8bZ4%u{QARNd zbQ#U1&GGM^SoHqgOt%v0l-)ivFc;O}JzL#AGC*!ImF{hIJ}*Gr33*kFHNs!q$UZ#! zZz{^7;p4r6XODbocY#G3g}*siJP#ZBC(rZHRqjpj`~>Ve3u9)9ySzN1!?*~GHi&NA zHr!ua2ffpQVIHsbJXb*fJWu$#+eYroV5>YQa+_I3aTDZM0Y?`5iNF`-E-z2$OoK!x z$V*0l$0E&U`MhsO*-Dm;Ji-&cEolR}R&$8Bi`O{ly%v5^Hw&DE@WJ>?mJ_akjvDRwkxO&I8j>LGpm*t}W6I{{y zq7HiBg+7?Wei`PTfB8a2b39@5OCaB;bB-$vu)Udx>D}&%=9fD6dw}C4ykQMNYDt^~ zIa61_*sIS>gwR>}^wqgU- z?8%{{yVp{6=_+DBz7G4CO#N7j15fxsqg-L}w9fALA9bd~f}yw2H^(aIAoidf`{GoX zIGT!Vj8I&^N zVH-~DrPiAUAf~oO#u1#gQObb*CycK`Ye)-%m>wv=@e9oB;}yB;+!EZLHpPX?{*E8k ziL$2mriNqXl=>;+@V5QGtNyR&{b*aP)jSq}J70}mdA0;!BV$LrZ$G|o6Rn>4vMbEC zI)nHDKG#GKy3?a3+(-D{LxK6cf?J)ZPU=CIzW)y6c%!S>tHdtt#vqb-Z|e~l4;w|k zE$)H69#Z4xXWlQLJhY8)1|#FQ6&s>l_CN4f@czO>7_Djs*$dS8V~2E*XI~{5lO<-3 zL-2gM9r3W}kn5f4aRKc=XbYQnrl^c5sMZ5MZ>-vyNQ*{vma$Zhp(o)ivv%)B8N=eS zq1G4AJ7a>x-OhNoMHzp01y90=d+0)A9bGtEPv4%XMA}bhzUH)#E}lOl&mk6pMxp0C z+9=*>3!Hi~*iV;uFgNmfXT?UdjNS0rE1#dN!u+`!zR{XluOg-vPg`)Fqr%^i5F&2S zyIij;TLo&woS45qWH!ZKxqWpSOR5$*y>}MIG<)7)#a{FUoU{(}zo_?#NE6 zuiho&&h<5Aa{c8s_zcFx50@?wuhHBFZD+OxMm-t!HMoMYq)hlL9sep<-M2P>0e#K= z&GQbQV`%*Ua^BzT@%ME(e4v5oL%II)xf9z@2JFag8=BmYHZKgL(yVFf^2=C1=5TDv z*I2dudCrFHJT+E6t33ZrEqu)aIo}_vSdTqGHr14^lWSPRu|0@s|3!_TZRiq`WiIYx zv{j5p##D^r3-rH34Bm?MmCv8pf9A2v<2D=T(7f+Dd0;E;UNcLsX=MSl-xvFr zP2r+F-&KIjZ#8mNxcn%4-W!;MN{R3A@cDm3&7Pn4Gfs5Y;Z*^<8WMwZhxoywLu+jd zHq##cG90pw>&R=;f#*k_>)HRWDa(fc->0drxwa1V2ArK3MK$zThJG7~yIno8chZe7 z=viG1&XzG&E#U2R&*&i2-oNbs|L?*%IrlI9@IKG*JASK+z;FVxwql3ct(&wzUZ zY^K^h+%~>^-nJic2EK>G=gzT1ZkA`#RfS7&4(eSUfbS>Z`x-VDk9f-~F@0@%pez)a z%Ta%+CD@s^C}phlLu22$sj0tX@XYrLIG*Cf|8JsesVohB1KtzuK7mI(*={bJZJ_gK zj?=j_wREoG7@e)FmVQwqa`ugy84C>G22dvGcJX@-%_({d|uF@vreMO>veqOo096Bj<6yhWTYod1fYj>oXX4^PTb!5D#m{VVk`2JOzxOW8Cb;`Dy=%cf@VH z-k3&+>w$j=>h|GGDI#*PxCc7T!h1w(*CTH##%COu17cx&BcVeIo>PFgAM3?(_+B&g zn1hsV;`^&XqEzpGgEw)x%L{AcAArfsddPdgw)?B4C|j(=7Wh0Jb~70LUxxAu6V_69 z`TLrV??wQdNxddwUwkXD^18Q;?*S|E9sAsT0_%=j_qlzIo%!=QCGaP)9%^~>jNc>~}XxfbB)L5w?Bku>f|y znsq?`TcOh+loenO?cHjDK45@v&=-BYJqFmBy}W}IB*KAv6Z9Gn9X|GfSZ}gqTb~4+ z^Lfw5jM+EG`#9*vbI_ElY29_EcpQ8O*!W_k0Ht2~5tv_D52fsC&an>v4fsp>9uec@ zSOWS#9(LsQd(*z?2VQG2Zl_?ZTKJjw-RS!wtOa-YLY^;p@}3{~cVKOP9N!`rDcBcs ze904iJ{yVshZM;1^QA0b@J9dhfBANK`<|#TusY+3^*4matm1n*qxq%mmmav<3nPC;%w)+10u3^DRVF+%gsgG5jSWM%{jO<|y?w!_uc%JRul+jP^C z3cE~>K`PhQ>Tx%-gRI@OZBsie(^7M-EU|U>^EGf;6BuL+w&nXgAO8RM_`mZWzxVeZ z7z{23lfmELz%$fvovXnx&|olxhW;3i2rwAd5f>d@ogQv5Y!5LQBFMuheDPyEkGfPA z5ElHH$=z)w8B}yb>Pdz>`Q{Oxh0wcm|F9jYMLDCwM@5wrPKLS^@7LM?!Re3Z%<2}` za|fA*S7(gy?-IDiQeI$*7~5wjakSfAoE^RpSH`3aX#9rQM-v9)s;-He%ik_O~w z6z48<^>TfTG|yV;E&-PWRU{Q=rN`eeZh>nX_xZKbYQNq$;oj60W0xeaAaW_VDADL@ zytThME;nIidR9>PkQazDDgHe2Gi7 zM>b4_1egu#t26cC`Trna8fk%9(5;aT_8|W)&<50JR*>B~s!3#Qe@<%cYYR6(&3I4by+1TYoyeR6*MTGRx-n&+%_~0>3h^NSRF4u#TLw=<5oiv|&Yi7x z6qpW+U@=?|`kim!Fk}wQjQ@bSxQX`zuo=Rjsq&!!`HkaH5t-2M8;`agOL+eTPJ`@0 z{&HvX!&&c|OY?`M7G+O~N*wSRai7CbxKL@V-)Y;?@Abr0=ItuPT%5bdJILpGUf+b; zwzD8GEadd~ds9bIhtV_33+$xJzSK8YKx3tL?FzUg@Uirg++No5g1-7~7R~h?dq>hq;toNV z2Fi$Z^>jOt_<;F6<+IugHcwnW<62(TZyAbfK#?YQ*Ap?>@iWckw&|8~TcK~~&Vk+` zZGYf9`5#AQ^XnY&B^kYF|1)NL-lWjjOEX-IF2{)LR!;#Qq`lQQHTF}!n` zB(4xNw;h#{jIz!7NLO?J9Fg-b=)lzy@G<^c;AH`CX|UC8`V;qpIw{kjA`F?nT1EVd-uRUd2qJPYz^?r^uekH?|J)fUY$gQX-l zr(gO|?UyunM=P!g3g+95t{$#O!$ zzgq}(?JG!fnx;{bd~dH>CCb;$tB&`n74PiVODIr&SLdhmX$Fz^pD)2lako>B&b{?X z>w|B78Jdu`#euSQmTAhKy}s&c-0Rx=)O>d*FT-jAPJU{=ZK!QJH+69G@75GIkQd!0 zX@7q{4IQ|2l7YV;pdXtul^nZ z@(ZoHfF962Ni>+DfqRl)k);nz295uXkO`XWJ)kW#mrVR{2!w;?K`g{TZwLjQy|iu| z0i7Y==Zw0~E5Q4di^-*mu+9)gkOV(xJ2aP~;8u{|(w$3{i;IiS>L=hU(3#>%_z+H4 zKjTLKHeu4#byvHJMwu15rO}4CL2jQd)Z_hUu=N;`nJYq3H+0$-NUX8IcB|BdW-@@uq3lp+tmggV0*z=P0BT1_*&xZ{S zui~!c2tnDE@}DdD%a^18gjPm@e^+8Pb@L~^N zPuX5EIAc$$ag={JcInlT-&;!a_9Sgc^2#X9jplCg1b1yV(pJC;_zh@&)F+iU12kvX zC$7%OqW;IQqw)GEeZ!o>erd5)Mpx4*f_H)Xt|=PA$DhKMq_s0&<##^f|6Ku=jd|TH zrM9Yp*0?{BCYvdOKyXARGTjW{^|~gyxV9bAmKAA_&#r6};Qc1)^0}#Sq3XzoI_n&S zLHLaI)PH|!abCytlJuad4`-eB>l7d#^BVXGI23KN`9_CCg7FJGjMYGM?-f7qL;P<}%wV?&uDr*$cuhONt2$y)s;D(3!R=y^)d~ z$>u-rI;i`J$*U~#$*TXassB#hJrkUU7t&g?3>xcG)&5U<48QF3jE(aucsE$e^Y5bm z2dA%}6Gbo=z5~tc3$;<%(R}9p51s*SG>6<7-yG_{JH32f*TL6~Y)9MPrVZbdragzF zlJDEY9q8_)-&>DZ%4~nuhvrSTn`hedzlglHzkIjmgzP2=nj($!b8rYoatE41AMHuA zUmuoUGAC%_y{X&%y9CKbHO`ug8n^l+JAMX^xp}x{QTIyjUn}_!g3(%-&cD`#+*06>2|Nb<)t;h6=oB-~!w+_u6^9pII|BF!Hp4*-D8$oON z(vXl4AIjQBf9&e_;4HT(Yb}bjs49-_Y-~y-p5{)M`7(DE{4reY@L$7(RjZP z@)t)z^*#)$(@xNQ(0Isy)uijGxl#%9!O?vIS)DEuC5A#gOa{#n*~|d&16Pp$8VOTC z>B<)aP4(>*(W=%SXzhX49%$`>)*fi>fnQh;=uE8hoA!MFONyYfX3#!#8EB6-4Z1>0 zmiF%VfcBz)gCbD7u}bRWzCofBG`f~kSvYBDf&|FoW)8GK;4A9(?f7t?0LPK@0sjKp7tnPs3 z9)s@GK{h=C8Y9gSJ7~@~rv~%mpFv~m5ydyJLI-G0#q#5-e`EcL)(G9h=nlO(r8~-x zK>gVmjVH6_O>^EosJ`;^m2kTPjnJdyT?Lx|&8?fLfc}rHx$KDgl1cYL^1CfTy2p75 zwEp@xP$9MPWzfCXxob30&8BdE`3)$A_I1=kb47k%cHdAt>nP%)M$0Z#KiSfKpuK|p ztM1(jL4N9KsH=S>HM>+d3#@?`;1zftR)X5m68oKM{X`zb=>AjtPOWV%!Ou{QR<-uP He|q5G0m=Jp literal 0 HcmV?d00001 diff --git a/docs/assets/style.css b/docs/assets/style.css index 1648b46..748acad 100755 --- a/docs/assets/style.css +++ b/docs/assets/style.css @@ -313,7 +313,6 @@ div.wip{ background-image: url("../assets/box_images/under_construction.png"); } - /* .book .book-body .page-wrapper .page-inner section.normal is needed to override the styles produced by gitbook, which are ridiculously overspecified. Goal of the selectors is to ensure internal "margins" diff --git a/docs/background.html b/docs/background.html new file mode 100644 index 0000000..da95591 --- /dev/null +++ b/docs/background.html @@ -0,0 +1,330 @@ + + + + + + + Chapter 1 Background | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+
+

Chapter 1 Background

+

One critical aspect of an undergraduate STEM education is hands-on research. Undergraduate research experiences enhance what students learn in the classroom as well as increase a student’s interest in pursuing STEM careers (Russell2007?). It can also lead to improved scientific reasoning and increased academic performance overall (Buffalari2020?). However, many students at underresourced institutions like community colleges, Historically Black Colleges and Universities (HBCUs), tribal colleges and universities, and Hispanic-serving institutions have limited access to research opportunities compared to their cohorts at larger four-year colleges and R1 institutions. These students are also more likely to belong to groups that are already under-represented in STEM disciplines, particularly genomics and data science (Canner2017?; GDSCN2022?).

+

The BioDIGS Project aims to be at the intersection of genomics, data science, cloud computing, and education.

+
+

1.1 What is genomics?

+

Genomics broadly refers to the study of genomes, which are an organism’s complete set of DNA. This includes both genes and non-coding regions of DNA. Traditional genomics involves sequencing and analyzing the genome of individual species.

+

Metagenomics expands genomics to look at the collective genomes of entire communities of organisms in an environmental sample, like soil. It allows researchers to study not just the genes of culturable or isolated organisms, but the entirety of genetic material present in a given environment. By using genomic techniques to survey the soil microbes, we can identify everything in the soil, including microbes that no one has identified before.

+

We are doing both traditional genomics and metagenomics as part of BioDIGS.

+
+
+

1.2 What is data science?

+

Data science is an interdisciplinary field that uses scientific methods, processes, algorithms and systems to extract knowledge and insights from structured and unstructured data. It includes collecting, cleaning, and combining data from multiple databases, exploring data and developing statistical and machine learning models to identify patterns in complex datasets, and creating tools to efficiently store, process, and access large amounts of data.

+
+
+

1.3 What is cloud computing?

+

Cloud computing just means using the internet to get access to powerful computer resources like storage, servers, databases, networking tools, and specialized software programs. Instead of having to buy and maintain their own powerful computers, storage servers, and other systems, users can pay to use them through an internet connection as needed. Users only pay for what they need, when they actually use it, and professionals update and maintain the systems in large data centers. It is a particularly useful tool for researchers and students at smaller institutions with limited computational services, especially when working with complex databases.

+

The genome assembly and analyses for BioDIGS have been done using the NHGRI AnVIL cloud computing platform, as well as Galaxy.

+
+
+

1.4 Why soil microbes?

+

It can be challenging to include undergraduates in human genomic and health research, especially in a classroom context. Both human genetic data and human health data are protected data, which limits the sort of information students can access without undergoing specialized ethics training. However, the same sorts of data cleaning and analysis methods used for human genomic data are also used for microbial genomic data, which does not have the same sort of legal protections as human genetic data. This makes it ideal for training undergraduate students at the beginning of their careers and can be used to prepare students for future research in human genomics and health (Jurkowski2017?). Additionally, the microbes in the soil can have big impacts on our health (BrevikBurgess2014?).

+
+
+

1.5 Heavy metals and human health

+

Human activities that change the landscape can also change what sorts of inorganic and abiotic compounds we find in the soil, particularly increasing the amount of heavy metals (Yan2020?). When cars drive on roads, compounds from the exhaust, oil, and other fluids might settle onto the roads and be washed into the soil. When we put salt on roads, parking lots, and sidewalks, the salts themselves will eventually be washed away and enter the ecosystem through both water and soil. Chemicals from factories and other businesses also leech into our environment. Previous research has demonstrated that in areas with more human activity, like cities, soils include greater concentrations of heavy metals than found in rural areas with limited human populations (Khan2023?; Wang2022?). Increased heavy metal concentrations also disproportionately affect lower-income and predominantly minority areas (Jones2022?).

+

Research suggests that increased heavy metal concentration in soils has major impacts on the soil microbial community. In particular, increased heavy metal concentration is associated with an increase in soil bacteria that have antibiotic resistance markers (Gorovtsov2018?; Nguyen2019?; Sun2021?).

+
+
+
+ +
+
+
+ +
+ + +
+
+
+ + +
+
+ + + + + + + + + + + + + diff --git a/docs/billing.html b/docs/billing.html new file mode 100644 index 0000000..12a8846 --- /dev/null +++ b/docs/billing.html @@ -0,0 +1,526 @@ + + + + + + + Chapter 5 Billing | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+
+

Chapter 5 Billing

+

In order to use AnVIL, you will need to set up a billing account and add members to it. These sections guide you through that process.

+


+
+

5.1 Create Google Billing Account

+
+
    +
  1. Log in to the Google Cloud Platform console using your Google ID. Make sure to use the same Google account ID you use to log into Terra.

  2. +
  3. If you are a first time user, don’t forget to claim your free credits! If you haven’t been to the console before, once you accept the Terms of Service you will be greeted with an invitation to “Try for Free.”

    +

    Screenshot of the Google Cloud Console with the "Try for Free" button highlighted.

  4. +
  5. Follow the instructions to sign up for a Billing Account and get your credits.

  6. +
  7. Choose “Individual Account”. This “billing account” is just for managing billing, so you don’t need to be able to add your team members. You will need to give either a credit card or bank account for security. Don’t worry! You won’t be billed until you explicitly turn on automatic billing.

    +

    Screenshot of the Google Cloud Billing Account Setup, with "Individual Account" highlighted.  Also highlighted is text stating "You won't be charged unless you manually upgrade to a paid account."

  8. +
  9. You can view and edit your new Billing Account, by selecting “Billing” from the left-hand menu, or going directly to the billing console console.cloud.google.com/billing

    +

    Screenshot of the Google Cloud Console dropdown menu, with "Billing" highlighted.

  10. +
  11. Clicking on the Billing Account name will allow you to manage the account, including accessing reports, setting alerts, and managing payments and billing.

    +

    Screenshot of the Google Cloud Console Billing Page, with the name of the new billing account highlighted.

  12. +
+

At any point, you can create additional Billing Accounts using the Create Account button. We generally recommend creating a new Billing Account for each funding source.

+
+
+
+

5.2 Add Terra to Google Billing Account

+
+

This gives Terra permission to create projects and send charges to the Google Billing Account, and must be done by an administrator of the Google Billing Account.

+

Terra needs to be added as a “Billing Account User”:

+
    +
  1. Log in to the Google Cloud Platform console using your Google ID.

  2. +
  3. Navigate to Billing

    +

    Screenshot of the Google Cloud Console drop-down menu, with "Billing" highlighted.

  4. +
  5. You may be automatically directed to view a specific Billing Account. If you see information about a single account rather than a list of your Billing Accounts, you can get back to the list by clicking “Manage Billing Accounts” from the drop-down menu.

    +

    Screenshot of an individual Google Cloud Billing Account with the drop-down menu item "Manage Billing Accounts" highlighted.

  6. +
  7. Check the box next to the Billing Account you wish to add Terra to, click “ADD MEMBER”.

    +

    Screenshot of Google Cloud Billing Accounts Overview. The checkbox next to the name of a Billing Account is checked and highlighted, and the "Add Member" button is highlighted.

  8. +
  9. Enter terra-billing@terra.bio in the text box. In the drop-down menu, mouse over Billing, then choose “Billing Account User”.

    +

    Screenshot of the dialogue box for adding a member to a Google Cloud Billing Accounts. The text box is highlighted and has been filled in with "terra-billing@terra.bio".  In the drop-down menu labeled "Select a Role", the item "Billing" and the submenu item "Billing Account User" are highlighted.

  10. +
  11. Click “SAVE”.

    +

    Screenshot of the dialogue box for adding a member to a Google Cloud Billing Accounts. The Save button is highlighted.

  12. +
+
+
+
+

5.3 Add Members to Google Billing Account

+
+

Anyone you wish to add to the Billing Account will need their own Google ID.

+

To add a member to a Billing Project:

+
    +
  1. Log in to the Google Cloud Platform console using your Google ID.

  2. +
  3. Navigate to Billing

    +

    Screenshot of the Google Cloud Console drop-down menu, with "Billing" highlighted.

  4. +
  5. You may be automatically directed to view a specific Billing Account. If you see information about a single account rather than a list of your Billing Accounts, you can get back to the list by clicking “Manage Billing Accounts” from the drop-down menu.

    +

    Screenshot of an individual Google Cloud Billing Account with the drop-down menu item "Manage Billing Accounts" highlighted.

  6. +
  7. Check the box next to the Billing Account you wish to add a member to, click “ADD MEMBER”.

    +

    Screenshot of Google Cloud Billing Accounts Overview. The checkbox next to the name of a Billing Account is checked and highlighted, and the "Add Member" button is highlighted.

  8. +
  9. Enter their Google ID in the text box. In the drop-down menu, mouse over Billing, then choose the appropriate role.

    +

    Screenshot of the dialogue box for adding a member to a Google Cloud Billing Accounts. In the drop-down menu labeled "Select a Role", the item "Billing" and the submenu item "Billing Account Viewer" are highlighted.

  10. +
  11. Click “SAVE”.

    +

    Screenshot of the dialogue box for adding a member to a Google Cloud Billing Accounts. The Save button is highlighted.

  12. +
+
+
+
+

5.4 Set Alerts for Google Billing

+
+
    +
  1. Log in to the Google Cloud Platform console using the Google ID associated with your Google Cloud projects.

  2. +
  3. Open the dropdown menu on the top left and click on Billing.

    +

    Screenshot of the Google Cloud Console drop-down menu, with "Billing" highlighted.

  4. +
  5. You may be automatically directed to view a specific Billing Account. If you see information about a single account (and it’s not the one you’re interested in), you can get back to the list of all your Billing Accounts by clicking “Manage Billing Accounts” from the drop-down menu.

    +

    Screenshot of an individual Google Cloud Billing Account with the drop-down menu item "Manage Billing Accounts" highlighted.

  6. +
  7. Click on the name of the Billing Account you want to set alerts for.

    +

    Screenshot of Google Cloud Billing Accounts Overview. A Billing Account name is highlighted.

  8. +
  9. In the left-hand menu, click “Budgets & alerts”.

    +

    Screenshot of an individual Google Cloud Billing Account with the left-hand menu item "Budgets & alerts" highlighted.

  10. +
  11. Click the “Create Budget” tab.

    +

    Screenshot of the budgets and alerts page for a Google Cloud Billing Account. The "Create Budget" button highlighted.

  12. +
  13. Enter a name for your budget, and then choose which projects you want to monitor. Then click “Next”.

    +

    Screenshot of the form for setting budget scope for a Google Cloud Billing Account. Three things are highlighted:  1) the box for entering a "Name" for the budget, 2) the dropdown menu labeled "Projects" for selecting which Billing Projects are part of the budget, and 3) the "Next" button.

  14. +
  15. For Budget Type, select “Specified amount”. Enter the total budget amount for the month (you will set alerts at different thresholds in the next step). Click “Next” (do not click “Finish”).

    +

    Screenshot of the form for setting budget amount for a Google Cloud Billing Account.  The drop-down menu labeled "Budget type" is highlighted and "Specified amount" is selected.  Also highlighted are the text box labeled "Target amount" and the "Next" button.

  16. +
  17. Enter the threshold amounts where you want to receive an alert. We recommend starting with 50% and 90%. You can set other alerts if you prefer.

    +

    Screenshot of the form for setting budget actions for a Google Cloud Billing Account.  The boxes for entering "Percent of budget" or "Amount" are highlighted.  The drop-down menu labeled "Trigger on" is highlighted and "Actual" is selected.

  18. +
  19. Check the box for “Email alerts to billing admins and users”, then click “Finish”. Now you (as the owner and admin), along with anyone you added with admin or user privileges (e.g. lab managers) will receive alerts when your lab members reach the specified spending thresholds. These emails will be sent to the Gmail accounts associated with the Billing Account.

    +

    Screenshot of the form for setting budget alerts for a Google Cloud Billing Account.  The checkbox labeled "Email alerts to billing admins and users" is highligheted and checked.  The "Finish" button is highlighted.

  20. +
  21. You can edit your budgets at any time by going to Billing > Budgets & alerts, and clicking on the name of the budget you want to edit.

    +

    Screenshot of the Google Cloud Billing Account Budgets and alerts overview.  Four items are highlighted illustrating how to view and edit an existing budget: 1) The top-left "hamburger" button for extending the drop-down menu, 2) the drop-down menu item "Billing", 3) the submenu item "Budgets & alerts, 4) the name of a budget.

  22. +
+
+
+
+

5.5 View Spend for Google Billing

+
+

You can always check your current spend through the Google Billing console, but remember

+
    +
  • There is a reporting delay (~1 day), so you cannot immediately see what an analysis cost
  • +
  • Costs are reported at the level of Workspaces, so if there are multiple people using a Workspace, you will not be able to determine which of them was responsible for the charges.
  • +
+

The Google Billing console displays information by Billing Account. To view spending:

+
    +
  1. Log in to the Google Cloud Platform console using the Google ID associated with your Google Cloud projects.

  2. +
  3. Open the dropdown menu on the top left and click on Billing.

    +

    Screenshot of the Google Cloud Console drop-down menu, with "Billing" highlighted.

  4. +
  5. You may be automatically directed to view a specific Billing Account. If you see information about a single account (and it’s not the one you’re interested in), you can get back to the list of all your Billing Accounts by clicking “Manage Billing Accounts” from the drop-down menu.

    +

    Screenshot of an individual Google Cloud Billing Account with the drop-down menu item "Manage Billing Accounts" highlighted.

  6. +
  7. Click on the name of the Billing Account for the project you want to view.

    +

    Screenshot of Google Cloud Billing Accounts Overview. A Billing Account name is highlighted.

  8. +
  9. Look at the top of the Overview tab to see your month-to-date spending.

    +

    Screenshot of a Google Cloud Billing Account Overview.

  10. +
  11. Scroll further down the Overview tab to show your top projects.

    +

    Screenshot of a Google Cloud Billing Account top projects.

  12. +
  13. Click on the Reports tab to see more detailed information about each of your projects. This is probably the most useful tab for exploring costs of individual projects over time.

    +

    Screenshot of a Google Cloud Billing Account Reports tab.

  14. +
  15. Click on the Cost table tab to obtain a convenient table of spending per project.

    +

    Screenshot of a Google Cloud Billing Account Cost table tab.

  16. +
+
+
+
+

5.6 Create Terra Billing Project

+
+
    +
  1. Launch Terra and sign in with your Google account. If this is your first time logging in to Terra, you will need to accept the Terms of Service.

  2. +
  3. In the drop-down menu on the left, navigate to “Billing”. Click the triple bar in the top left corner to access the menu. Click the arrow next to your name to expand the menu, then click “Billing”. You can also navigate there directly with this link: https://anvil.terra.bio/#billing

    +

    Screenshot of the Terra drop-down menu.  Three items are highlighted: 1) the "hamburger" button for extending the drop-down menu, 2) the arrow next to your username, for extending the drop-down submenu, and 3) the submenu item "Billing".

  4. +
  5. On the Billing page, click the “+ CREATE” button to create a new Billing Project. If prompted, select the Google account to use. If prompted, give Terra permission to manage Google Cloud Platform billing accounts.

    +

    Screenshot of the Terra Billing Page.  The "plus" button next to "Billing Projects" is highlighted.

  6. +
  7. Enter a unique name for your Terra Billing Project and select the appropriate Google Billing Account. The name of the Terra Billing Project must:

    +
      +
    • Only contain lowercase letters, numbers and hyphens
    • +
    • Start with a lowercase letter
    • +
    • Not end with a hyphen
    • +
    • Be between 6 and 30 characters
    • +
    +

    Screenshot of the Terra Add Billing Project dialog box.

  8. +
  9. Select the Google Billing Account to use. All activities conducted under your new Terra Billing Project will charge to this Google Billing Account. If prompted, give Terra permission to manage Google Cloud Platform billing accounts.

    +

    Screenshot of the Terra Add Billing Project dialog box.  The dropdown menu labeled "Select billing account" is highlighted.

  10. +
  11. Click “CREATE BILLING PROJECT”.

    +

    Screenshot of the Terra Add Billing Project dialog box.  The button labeled "CREATE BILLING PROJECT" is highlighted.

  12. +
  13. Your new Billing Project should now show up in the list of Billing Projects Owned by You. You can add additional members or can modify or deactivate the Billing Project at any time by clicking on its name in this list.

    +

    Screenshot of the Terra Billing Projects menu.  The submenu "Owned by you" is highlighted and has been expanded, showing a list of Billing Projects below.  One of the Billing Project names is highlighted.

  14. +
+

The page doesn’t always update as soon as the Billing Project is created. If it’s been a couple of minutes and you don’t see a change, try refreshing the page.

+
+
+
+

5.7 Add Member to Terra Billing Project

+
+
    +
  1. Launch Terra and sign in with your Google account.

  2. +
  3. In the drop-down menu on the left, navigate to “Billing”. Click the triple bar in the top left corner to access the menu. Click the arrow next to your name to expand the menu, then click “Billing”. You can also navigate there directly with this link: https://anvil.terra.bio/#billing

    +

    Screenshot of the Terra drop-down menu.  Three items are highlighted: 1) the "hamburger" button for extending the drop-down menu, 2) the arrow next to your username, for extending the drop-down submenu, and 3) the submenu item "Billing".

  4. +
  5. Click “Owned by You” and find the Billing Project. If you do not see the Billing Project in this list, then you are not an Owner and do not have permission to add members.

    +

    Screenshot of the Terra Billing Projects menu.  The submenu "Owned by you" is highlighted and has been expanded, showing a list of Billing Projects below.

  6. +
  7. Click on the name of the Billing Project.

    +

    Screenshot of the Terra Billing Projects menu.  The submenu has been expanded, and the name of one of the Billing Projects is highlighted.

  8. +
  9. Click on the “Members” tab to view and manage members. Then click the “Add User” button.

    +

    Screenshot of a Terra Billing Project management page.  The tab labeled "Members" is highlighed and has been selected, and the button labeled "Add User" is highlighted.

  10. +
  11. Enter the email address of the user or group you’d like to add the the Billing Project.

    +
      +
    • If adding an individual, make sure to enter the account that they use to access AnVIL.
    • +
    • If adding a Terra Group, use the Group email address, which can be found on the Terra Group management page.
    • +
    +

    Screenshot of the dialog box for adding users to a Terra Billing Project.  The textbox labeled "User email" is highlighed and has been filled in.

  12. +
  13. If this user or group will need to add and remove other users of the Billing Project, check the Owner box. Otherwise leave it unchecked.

    +
      +
    • It’s often a good idea to have at least one other Owner of a Billing Project in order to avoid getting locked out, in case the original owner leaves or loses access to their account.
    • +
    +

    Screenshot of the dialog box for adding users to a Terra Billing Project.  The checkbox labeled "Can manage users (Owner)" is highlighed.

  14. +
  15. Click “ADD USER”.

    +

    Screenshot of the dialog box for adding users to a Terra Billing Project.  The button labeled "ADD USER" is highlighed.

  16. +
  17. You should now see the user or group listed in the Billing Project members, along with the appropriate role. They should now be able to use the Billing Project to fund work on AnVIL.

    +

    Screenshot of a Terra Billing Project member management page.  A user email and role are highlighted.

  18. +
+

If you need to remove members or modify their roles, you can do so at any time by clicking the teardrop button next to their name.

+

Screenshot of a Terra Billing Project member management page.  The teardrop button for one user is highlighted.

+
+
+
+

5.8 Disable Terra Billing Project

+

By default this module includes a warning to make sure people understand they will lose access to their Workspace buckets. You can remove the warning from this module by setting AnVIL_module_settings$warning to FALSE before running cow::borrow_chapter:

+
AnVIL_module_settings <- list(
+  warning = FALSE
+)
+cow::borrow_chapter(
+  doc_path = "child/_child_terra_billing_project_disable.Rmd",
+  repo_name = "jhudsl/AnVIL_Template"
+)
+
+
+

Disabling a Billing Project makes Workspace contents inaccessible!

+

Disabling a Billing Project disables funding to all Workspaces funded by the Billing Project. You will be unable to compute in these Workspaces, and you will lose access to any data stored in the Workspace buckets. It is sometimes possible to restore access by reactivating billing, but Google makes no promises about whether or how long the data will be recoverable.

+

Make sure everyone with Workspaces funded by the Billing Project has saved anything they want to keep in another location before disabling the Billing Project.

+
+

To disable a Terra Billing Project (i.e. remove the Google Billing Account that funds the Terra Billing Project):

+
    +
  1. Launch Terra and sign in with your Google account.

  2. +
  3. In the drop-down menu on the left, navigate to “Billing”. Click the triple bar in the top left corner to access the menu. Click the arrow next to your name to expand the menu, then click “Billing”. You can also navigate there directly with this link: https://anvil.terra.bio/#billing

    +

    Screenshot of the Terra drop-down menu.  Three items are highlighted: 1) the "hamburger" button for extending the drop-down menu, 2) the arrow next to your username, for extending the drop-down submenu, and 3) the submenu item "Billing".

  4. +
  5. Click “Owned by You” and find the Billing Project. If you do not see the Billing Project in this list, then you are not an Owner and do not have permission to add members.

    +

    Screenshot of the Terra Billing Projects menu.  The submenu "Owned by you" is highlighted and has been expanded, showing a list of Billing Projects below.

  6. +
  7. Click on the name of the Billing Project.

    +

    Screenshot of the Terra Billing Projects menu.  The submenu has been expanded, and the name of one of the Billing Projects is highlighted.

  8. +
  9. If you don’t see information about the Billing Account, click on “View billing account” to expand the Billing Account information. You may be prompted to enter your login information again.

    +

    Screenshot of a Terra Billing Project management page.  The button labeled "view billing account" is highlighted.

  10. +
  11. You should see the name of the Google Billing Account that is funding this Terra Billing Project. Click on the teardrop icon next to the name of the Billing Account.

    +

    Screenshot of a Terra Billing Project management page.  The teardrop button next to the name of the Billing Account is highlighted.

  12. +
  13. Click “Remove Billing Account”.

    +

    Screenshot of a Terra Billing Project management page.  The teardrop button next to the name of the Billing Account is highlighted.

  14. +
  15. Click OK to confirm that you want to disable funding for this Billing Project.

    +

    Screenshot of the dialoge box confirming removal of the Billing Account from a Terra Billing Project.  The button labeled "OK" is highlighted.

  16. +
  17. The page should now indicate that there is no linked billing account.

    +

    Screenshot of a Terra Billing Project management page.  The Billing Account information which says "No linked billing account" is highlighted.

  18. +
+

If necessary, you can restore funding to the Billing Project and associated Workspaces by clicking the teardrop icon and selecting “Change Billing Account”. However, Google makes no promises about how long the Workspace contents will remain available after you disable funding, so it is best not to rely on them.

+

Screenshot of a Terra Billing Project management page.  The teardrop button next to the Billing Account information is highlighted.

+
+
+
+
+ + + + +
+ + + +
+
+ +
+ + +
+
+
+ + +
+
+ + + + + + + + + + + + + diff --git a/docs/checklist-for-running-activities-on-anvil.html b/docs/checklist-for-running-activities-on-anvil.html new file mode 100644 index 0000000..06936b6 --- /dev/null +++ b/docs/checklist-for-running-activities-on-anvil.html @@ -0,0 +1,361 @@ + + + + + + + Chapter 7 Checklist for Running Activities on AnVIL | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+
+

Chapter 7 Checklist for Running Activities on AnVIL

+

If you choose to run these activities on AnVIL with your class, there are several things that you can do to make the experience easier.

+
+

Before the class begins

+

This checklist can serve as a reminder of the overall suggested steps to run an activity on AnVIL. You might find yourself changing these steps slightly as you become more familiar with AnVIL.

+

Billing

+
    +
  • Obtain funding through the STRIDES program (optional)
  • +
  • Request students make AnVIL IDs (Google IDs)
  • +
  • Collect AnVIL IDs (Google IDs) from students
  • +
  • Create Google Billing Account for your class
  • +
+

Resources

+
    +
  • Create a Workspace for your class (optional)
  • +
  • Notify Terra of your course dates and times
  • +
  • Direct students to the Workspace
  • +
+

Permissions

+
    +
  • Set up Groups to manage permissions
  • +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
AnVIL GroupClass WorkspaceTerra Billing Projects*
InstructorOwnerOwner
Teaching assistantsWriterOwner
StudentsReaderUser
+
+
+

After the class ends

+

Resources

+
    +
  • Remind students to download any files they might need
  • +
  • Tell students to delete their environments and persistent disks
  • +
+

Billing

+
    +
  • Deactivate billing project
  • +
+
+
+
+
+ +
+
+ +
+
+
+ + +
+
+ + + + + + + + + + + + + diff --git a/docs/data-1.html b/docs/data-1.html new file mode 100644 index 0000000..9faaff9 --- /dev/null +++ b/docs/data-1.html @@ -0,0 +1,323 @@ + + + + + + + Chapter 4 Data | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+
+

Chapter 4 Data

+

There are currently three major kinds of data available from BioDIGS: sample metadata, soil testing data, and genomics and metagenomics data. All of these are available for use in your classroom.

+
+

4.1 Sample Metadata

+

This dataset contains information about the samples themselves, including GPS coordinates for the sample location, date the sample was taken, and the site name. This dataset is also available from the BioDIGS website

+

You can also see images of each sampling site and soil characteristics at the sample map.

+
+
+

4.2 Soil Testing Data

+

This dataset includes basic information about the soil itself like pH, percentage of organic matter, variety of soil metal concentrations. The complete data dictionary is available here. The dataset is available at the BioDIGS website.

+

This dataset was generated by the Delaware Soil Testing Program at the University of Delaware.

+
+
+

4.3 Genomics and Metagenomics Data

+

You can access this data in both raw and processed forms.

+

The Illumina and Nanopore sequences were generated at the Johns Hopkins University Genetic Resources Core Facility. PacBio sequencing was done by PacBio directly.

+

More information coming soon!

+
+
+ +
+ + + +
+
+ +
+
+ +
+
+
+ + +
+
+ + + + + + + + + + + + + diff --git a/docs/exploring-soil-testing-data-with-r.html b/docs/exploring-soil-testing-data-with-r.html new file mode 100644 index 0000000..d381fd8 --- /dev/null +++ b/docs/exploring-soil-testing-data-with-r.html @@ -0,0 +1,476 @@ + + + + + + + Chapter 13 Exploring Soil Testing Data With R | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+
+

Chapter 13 Exploring Soil Testing Data With R

+

In this activity, you’ll have a chance to become familiar with the BioDIGS soil testing data. This dataset includes information on the inorganic components of each soil sample, particularly metal concentrations. Human activity can increase the concentration of inorganic compounds in the soil. When cars drive on roads, compounds from the exhaust, oil, and other fluids might settle onto the roads and be washed into the soil. When we put salt on roads, parking lots, and sidewalks, the salts themselves will eventually be washed away and enter the ecosystem through both water and soil. Chemicals from factories and other businesses also leech into our environment. All of this means the concentration of heavy metals and other chemicals will vary among the soil samples collected for the BioDIGS project.

+
+

13.1 Before You Start

+

If you do not already have a Google account that you would like to use for accessing Terra, create one now.

+

If you would like to create a Google account that is associated with your non-Gmail, institutional email address, follow these instructions.

+
+
+

13.2 Objectives

+

This activity will teach you how to use the AnVIL platform to:

+
    +
  1. Import data into RStudio
  2. +
  3. Examine a csv file that contains the soil testing data from the BioDIGS project
  4. +
  5. Calculate summary statistics for variables in the soil testing data
  6. +
  7. Create and interpret histograms and boxplots for variables in the soil testing data
  8. +
+
+
+

13.3 Part 1. Data Import

+

We will use the BioDIGS package to retrieve the data. We first need to install the package from where it is stored on GitHub.

+
devtools::install_github("fhdsl/BioDIGSData")
+

Once you’ve installed the package, we can load the library and assign the soil testing data to an object. This command follows the code structure:

+

dataset_object_name <- stored_BioDIGS_dataset

+
library(BioDIGSData)
+
+soil.values <- BioDIGS_soil_data()
+

It seems like the dataset loaded, but it’s always a good idea to verify. There are many ways to check, but the easiest approach (if you’re using RStudio) is to look at the Environment tab on the upper right-hand side of the screen. You should now have an object called soil.values that includes some number of observations for 28 variables. The observations refer to the number of rows in the dataset, while the variables tell you the number of columns. As long as neither the observations or variables are 0, you can be confident that your dataset loaded.

+

Let’s take a quick look at the dataset. We can do this by clicking on soil.values object in the Environment tab. (Note: this is equivalent to typing View(soil.values) in the R console.)

+

If the dataset loaded, you will see an object with non-zero observations and variables in the Environment tab

+

This will open a new window for us to scroll through the dataset.

+

You can click on the object in the Environment tab to open a new window that allows you to scroll through the loaded dataset

+

Well, the data definitely loaded, but those column names aren’t immediately understandable. What could As_EPA3051 possibly mean? In addition to the dataset, we need to load the data dictionary as well.

+
+

Data dictionary: a file containing the names, definitions, and attributes about data in a database or dataset.

+
+

In this case, the data dictionary can help us make sense of what sort of values each column represents. The data dictionary for the BioDIGS soil testing data is available in the R package (see code below), but we have also reproduced it here.

+
?BioDIGS_soil_data()
+
+
    +
  • site_id Unique letter and number site name
  • +
  • full_name Full site name
  • +
  • As_EPA3051 Arsenic (mg/kg), EPA Method 3051A. Quantities < 3.0 are not detectable.
  • +
  • Cd_EPA3051 Cadmium (mg/kg), EPA Method 3051A. Quantities < 0.2 are not detectable.
  • +
  • Cr_EPA3051 Chromium (mg/kg), EPA Method 3051A
  • +
  • Cu_EPA3051 Copper (mg/kg), EPA Method 3051A
  • +
  • Ni_EPA3051 Nickel (mg/kg), EPA Method 3051A
  • +
  • Pb_EPA3051 Lead (mg/kg), EPA Method 3051A
  • +
  • Zn_EPA3051 Zinc (mg/kg), EPA Method 3051A
  • +
  • water_pH
  • +
  • A-E_Buffer_pH
  • +
  • OM_by_LOI_pct Organic Matter by Loss on Ignition
  • +
  • P_Mehlich3 Phosphorus (mg/kg), using the Mehlich 3 soil test extractant
  • +
  • K_Mehlich3 Potassium (mg/kg), using the Mehlich 3 soil test extractant
  • +
  • Ca_Mehlich3 Calcium (mg/kg), using the Mehlich 3 soil test extractant
  • +
  • Mg_Mehlich3 Magnesium (mg/kg), using the Mehlich 3 soil test extractant
  • +
  • Mn_Mehlich3 Manganese (mg/kg), using the Mehlich 3 soil test extractant
  • +
  • Zn_Mehlich3 Zinc (mg/kg), using the Mehlich 3 soil test extractant
  • +
  • Cu_Mehlich3 Copper (mg/kg), using the Mehlich 3 soil test extractant
  • +
  • Fe_Mehlich3 Iron (mg/kg), using the Mehlich 3 soil test extractant
  • +
  • B_Mehlich3 Boron (mg/kg), using the Mehlich 3 soil test extractant
  • +
  • S_Mehlich3 Sulfur (mg/kg), using the Mehlich 3 soil test extractant
  • +
  • Na_Mehlich3 Sodium (mg/kg), using the Mehlich 3 soil test extractant
  • +
  • Al_Mehlich3 Aluminum (mg/kg), using the Mehlich 3 soil test extractant
  • +
  • Est_CEC Cation Exchange Capacity (meq/100g) at pH 7.0 (CEC)
  • +
  • Base_Sat_pct Base saturation (BS). This represents the percentage of CEC occupied by bases (Ca2+, Mg2+, K+, and Na+). The %BS increases with increasing soil pH. The availability of Ca2+, Mg2+, and K+ increases with increasing %BS.
  • +
  • P_Sat_ratio Phosphorus saturation ratio. This is the ratio between the amount of phosphorus present in the soil and the total capacity of that soil to retain phosphorus. The ability of phosphorus to be bound in the soil is primary a function of iron (Fe) and aluminum (Al) content in that soil.
  • +
+
+

Using the data dictionary, we find that the values in column As_EPA3051 give us the arsenic concentration in mg/kg of each soil sample, as determined by EPA Method 3051A. While arsenic can occur naturally in soils, higher levels suggest the soil may have been contaminated by mining, hazardous waste, or pesticide application. Arsenic is toxic to humans.

+

We can also look at just the names of all the columns using the R console using the colnames() command.

+
colnames(soil.values)
+
##  [1] "site_id"       "site_name"     "type"          "As_EPA3051"   
+##  [5] "Cd_EPA3051"    "Cr_EPA3051"    "Cu_EPA3051"    "Ni_EPA3051"   
+##  [9] "Pb_EPA3051"    "Zn_EPA3051"    "water_pH"      "OM_by_LOI_pct"
+## [13] "P_Mehlich3"    "K_Mehlich3"    "Ca_Mehlich3"   "Mg_Mehlich3"  
+## [17] "Mn_Mehlich3"   "Zn_Mehlich3"   "Cu_Mehlich3"   "Fe_Mehlich3"  
+## [21] "B_Mehlich3"    "S_Mehlich3"    "Na_Mehlich3"   "Al_Mehlich3"  
+## [25] "Est_CEC"       "Base_Sat_pct"  "P_Sat_ratio"   "region"
+

Most of the column names are found in the data dictionary, but the very last column (“region”) isn’t. How peculiar! Let’s look at what sort of values this particular column contains. The tab with the table of the soil.views object should still be open in the upper left pane of the RStudio window. If not, you can open it again by clicking on soils.view in the Environment pane, or by using the View() command.

+
View(soil.values)
+

Switch to the soil.values tab to look at what values are in the region column

+

If you scroll to the end of the table, we can see that “region” seems to refer to the city or area where the samples were collected. For example, the first 24 samples all come from Baltimore City.

+

We can see the first samples in the dataset were collected in Baltimore City

+

You may notice that some cells in the soil.values table contain NA. This just means that the soil testing data for that sample isn’t available yet. We’ll take care of those values in the next part.

+
+

QUESTIONS:

+
    +
  1. How many observations are in the soil testing values dataset that you loaded? What do each of these observations refer to?

  2. +
  3. What data is found in the column labeled “Fe_Mehlich3”? Why would we be interested how much of this is in the soil? (You may have to search the internet for this answer.)

  4. +
+
+
+
+

13.4 Part 2. Data Summarization

+

Now that we have the dataset loaded, let’s explore the data in more depth.

+

First, we should remove those samples that don’t have soil testing data yet. We could keep them in the dataset, but removing them at this stage will make the analysis a little cleaner. In this case, as we know the reason the data are missing (and that reason will not skew our analysis), we can safely remove these samples. This will not be the case for every data analysis.

+

We can remove the unanalyzed samples using the drop_na() function from the tidyr package. This function removes any rows from a table that contains NA for a particular column. This command follows the code structure:

+

dataset_new_name <- dataset %>% drop_na(column_name)

+

The `%>% is called a pipe and it tells R that the commands after it should all be applied to the object in front of it. (In this case, we can filter out all samples missing a value for “As_EPA3051” as a proxy for samples without soil testing data.)

+
library(tidyr)
+
+soil.values.clean <- soil.values %>% drop_na(As_EPA3051)
+

Great! Now let’s calculate some basic statistics. For example, we might want to know what the mean (average) lead concentration is for each soil sample. According to the data dictionary, the values for lead concentration are in the column labeled “Pb_EPA3051”. We can use a combination of two functions: pull() and mean().pull() lets you extract a column from your table for statistical analysis, while mean() calculates the average value for the extracted column.

+

This command follows the code structure:

+

OBJECT %>% pull(column_name) %>% mean()

+

pull() is a command from the tidyverse package, so we’ll need to load that library before our command.

+
library(tidyverse)
+
+soil.values.clean %>% pull(As_EPA3051) %>% mean()
+
## [1] 5.10875
+

We can run similar commands to calculate the standard deviation, minimum, and maximum for the soil arsenic values.

+
soil.values.clean %>% pull(As_EPA3051) %>% sd()
+
## [1] 5.606926
+
soil.values.clean %>% pull(As_EPA3051) %>% min()
+
## [1] 0
+
soil.values.clean %>% pull(As_EPA3051) %>% max()
+
## [1] 27.3
+

As you can see, the standard deviation of the arsenic concentrations is listed first, then the minimum concentration, and finally the maximum concentration.

+

The soil testing dataset contains samples from multiple geographic regions, so maybe it’s more meaningful to find out what the average arsenic values are for each region. We have to do a little bit of clever coding trickery for this using the group_by and summarize functions. First, we tell R to split our dataset up by a particular column (in this case, region) using the group_by function, then we tell R to summarize the mean arsenic concentration for each group. Because there are several different functions with the name summarize in R, we have to specify that we want to use summarize from the dplyr package. This command follows the code structure:

+

dataset %>% +group_by(column_name) %>% +dplyr::summarize(Mean = mean(column_name))

+
soil.values.clean %>%
+    group_by(region) %>%
+    dplyr::summarize(Mean = mean(As_EPA3051))
+
## # A tibble: 2 × 2
+##   region             Mean
+##   <chr>             <dbl>
+## 1 Baltimore City     5.56
+## 2 Montgomery County  4.66
+

Now we know that the mean arsenic concentration might be different for each region, and appears higher for the Baltimore City samples than the Montgomery County samples.

+
+

QUESTIONS:

+
    +
  1. What is the mean iron concentration for samples in this dataset? What about the standard deviation, minimum value, and maximum value?

  2. +
  3. Calculate the mean iron concentration by region. Which region has the highest mean iron concentration? What about the lowest?

  4. +
+
+
+
+

13.5 Part 3. Data Visualization

+

Often, it can be easier to immediately interpret data displayed as a plot than as a list of values. For example, we can more easily understand how the arsenic concentration of the soil samples are distributed if we create histograms compared to looking at point values like mean, standard deviation, minimum, and maximum.

+

One way to make histograms in R is to use the hist() function. We can again use the pull() command and pipes (%>%) to choose the column we want from the soil.values.clean dataset and make a histogram of them. Remember, this command follows the code structure:

+

dataset %>% +pull(column_name) %>% +hist(main = chart_title, xlab = x_axis_title)

+

In this case, we do not have to use the dplyr::summarize command before hist() because there’s only one function called hist() in the packages we’re using.

+
soil.values.clean %>% 
+    pull(As_EPA3051) %>% 
+    hist(main = 'Histogram of Arsenic Concentration', 
+         xlab ='Concentration in mg/kg' )
+

+

We can see that almost all the soil samples had very low concentrations of arsenic (which is good news for the soil health!). In fact, many of them had arsenic concentrations close to 0, and only one sampling location appears to have high levels of arsenic.

+

We might also want to graphically compare arsenic concentrations among the geographic regions in our dataset. We can do this by creating boxplots. Boxplots are particularly useful when comparing the mean, variation, and distributions among multiple groups. In R, one way to create a boxplot is using the boxplot() function. We don’t need to use pipes for this command, but instead will specify what columns we want to use from the dataset inside the boxplot() function itself.

+

This command follows the code structure:

+

boxplot(arsenic_concentration ~ grouping_variable, +data = dataset, +main = “Title of Graph”, +xlab = “x_axis_title”, +ylab = “y_axis_title”)

+
boxplot(As_EPA3051 ~ region, data = soil.values.clean,
+        main = "Arsenic Concentration by Geographic Region",
+        xlab = "Region",
+        ylab = "Arsenic Concentration in mg/kg")
+

+

By using a boxplot, we can quickly see that, while one sampling site within Baltimore City has a very high concentration of arsenic in the soil, in general there isn’t a difference in arsenic content between Baltimore City and Montgomery County.

+
+

QUESTIONS:

+
    +
  1. Create a histogram for iron concentration, as well as a boxplot comparing iron concentration by region. Is the iron concentration similar among regions? Are there any outlier sites with unusually high or low iron concentrations?

  2. +
  3. Create a histogram for lead concentration, as well as a boxplot comparing lead concentration by region. Is the lead concentration similar among regions? Are there any outlier sites with unusually high or low lead concentrations?

  4. +
  5. Look at the maps for iron and lead on the BioDIGS website. Do the boxplots you created make sense, given what you see on these maps? Why or why not?

  6. +
+
+ +
+
+
+
+ +
+
+ +
+
+
+ + +
+
+ + + + + + + + + + + + + diff --git a/docs/getting-credit-for-professional-development.html b/docs/getting-credit-for-professional-development.html new file mode 100644 index 0000000..0982d2a --- /dev/null +++ b/docs/getting-credit-for-professional-development.html @@ -0,0 +1,307 @@ + + + + + + + Chapter 10 Getting Credit for Professional Development | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+
+

Chapter 10 Getting Credit for Professional Development

+

We are happy to provide a letter to your supervisor, department head, or dean to indicate you’ve worked through this content and intend to use it in your class.

+
+
+ + + + +
+
+ +
+ + +
+
+
+ + +
+ + + + + + + + + + + + + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..1fbfc4c --- /dev/null +++ b/docs/index.html @@ -0,0 +1,329 @@ + + + + + + + BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+ +
+

About this Book

+

This is a companion training guide for BioDIGS, a GDSCN project that brings a research experience into the classroom. This activity guides students through exploration of the BioDIGS soil data using the tidyverse in R. Students will learn basic data summarization, visualization, and mapping skills. Visit the BioDIGS (BioDiversity and Informatics for Genomics Scholars) website here for more information about this collaborative, distributed research project, including how you can get involved!

+

The GDSCN (Genomics Data Science Community Network) is a consortium of educators who aim to create a world where researchers, educators, and students from diverse backgrounds are able to fully participate in genomic data science research. You can find more information about its mission and initiatives here.

+
+BioDIGS logo +
BioDIGS logo
+
+
+

0.1 Target Audience

+

The activities in this guide are written for undergraduate students and beginning graduate students. Some sections require basic understanding of the R programming language, which is indicated at the beginning of the chapter.

+
+
+

0.2 Platform

+

The activities in this guide are demonstrated on NHGRI’s AnVIL cloud computing platform. AnVIL is the preferred computing platform for the GDSCN. However, all of these activities can be done using your personal installation of R or using the online Galaxy portal.

+
+
+

0.3 Data

+

The data generated by the BioDIGS project is available through the BioDIGS website, as well as through an AnVIL workspace.

+

Data about the soil itself as well as soil metal content was generated by the Delaware Soil Testing Program at the University of Delaware. Sequences were generated by the Johns Hopkins University Genetic Resources Core Facility and by PacBio.

+ +
+
+
+ + + +
+
+ +
+
+ +
+
+
+ + +
+
+ + + + + + + + + + + + + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..11ef5dc --- /dev/null +++ b/docs/index.md @@ -0,0 +1,34 @@ +--- +title: "BioDIGS in the Classroom: Exploring Soil Data" +date: "August 05, 2024" +site: bookdown::bookdown_site +documentclass: book +bibliography: book.bib +biblio-style: apalike +link-citations: yes +description: "This activity guides students through exploration of the BioDIGS soil data using the tidyverse in R." +favicon: assets/GDSCN_style/gdscn_favicon.ico +--- + + +# About this Book {-} + +This is a companion training guide for BioDIGS, a GDSCN project that brings a research experience into the classroom. This activity guides students through exploration of the BioDIGS soil data using the tidyverse in R. Students will learn basic data summarization, visualization, and mapping skills. Visit the BioDIGS (BioDiversity and Informatics for Genomics Scholars) website [here](https://biodigs.org/) for more information about this collaborative, distributed research project, including how you can get involved! + +The GDSCN (Genomics Data Science Community Network) is a consortium of educators who aim to create a world where researchers, educators, and students from diverse backgrounds are able to fully participate in genomic data science research. You can find more information about its mission and initiatives [here](https://www.gdscn.org/home). + +![BioDIGS logo](https://raw.githubusercontent.com/fhdsl/AnVIL_BioDIGS_Book/main/assets/GDSCN_style/logo_BioDIGS_final.png){width=300px} + +## Target Audience + +The activities in this guide are written for undergraduate students and beginning graduate students. Some sections require basic understanding of the R programming language, which is indicated at the beginning of the chapter. + +## Platform + +The activities in this guide are demonstrated on NHGRI's [AnVIL](https://anvilproject.org/) cloud computing platform. AnVIL is the preferred computing platform for the GDSCN. However, all of these activities can be done using your personal installation of R or using the online [Galaxy](usegalaxy.org) portal. + +## Data + +The data generated by the BioDIGS project is available through the [BioDIGS website](biodigs.org), as well as through an [AnVIL workspace](https://anvilproject.org). + +Data about the soil itself as well as soil metal content was generated by the [Delaware Soil Testing Program](https://www.udel.edu/canr/cooperative-extension/environmental-stewardship/soil-testing/) at the University of Delaware. Sequences were generated by the [Johns Hopkins University Genetic Resources Core Facility](https://grcf.jhmi.edu/) and by [PacBio](https://www.pacb.com/). diff --git a/docs/libs/anchor-sections-1.0.1/anchor-sections.js b/docs/libs/anchor-sections-1.0.1/anchor-sections.js deleted file mode 100644 index fed2191..0000000 --- a/docs/libs/anchor-sections-1.0.1/anchor-sections.js +++ /dev/null @@ -1,33 +0,0 @@ -// Anchor sections v1.0 written by Atsushi Yasumoto on Oct 3rd, 2020. -document.addEventListener('DOMContentLoaded', function() { - // Do nothing if AnchorJS is used - if (typeof window.anchors === 'object' && anchors.hasOwnProperty('hasAnchorJSLink')) { - return; - } - - const h = document.querySelectorAll('h1, h2, h3, h4, h5, h6'); - - // Do nothing if sections are already anchored - if (Array.from(h).some(x => x.classList.contains('hasAnchor'))) { - return null; - } - - // Use section id when pandoc runs with --section-divs - const section_id = function(x) { - return ((x.classList.contains('section') || (x.tagName === 'SECTION')) - ? x.id : ''); - }; - - // Add anchors - h.forEach(function(x) { - const id = x.id || section_id(x.parentElement); - if (id === '' || x.matches(':empty')) { - return null; - } - let anchor = document.createElement('a'); - anchor.href = '#' + id; - anchor.classList = ['anchor-section']; - x.classList.add('hasAnchor'); - x.appendChild(anchor); - }); -}); diff --git a/docs/libs/anchor-sections-1.1.0/anchor-sections-hash.css b/docs/libs/anchor-sections-1.1.0/anchor-sections-hash.css new file mode 100644 index 0000000..b563ec9 --- /dev/null +++ b/docs/libs/anchor-sections-1.1.0/anchor-sections-hash.css @@ -0,0 +1,2 @@ +/* Styles for section anchors */ +a.anchor-section::before {content: '#';font-size: 80%;} diff --git a/docs/libs/anchor-sections-1.0.1/anchor-sections.css b/docs/libs/anchor-sections-1.1.0/anchor-sections.css similarity index 83% rename from docs/libs/anchor-sections-1.0.1/anchor-sections.css rename to docs/libs/anchor-sections-1.1.0/anchor-sections.css index 4bf387c..041905f 100644 --- a/docs/libs/anchor-sections-1.0.1/anchor-sections.css +++ b/docs/libs/anchor-sections-1.1.0/anchor-sections.css @@ -1,5 +1,4 @@ /* Styles for section anchors */ a.anchor-section {margin-left: 10px; visibility: hidden; color: inherit;} -a.anchor-section::before {content: '#';} .hasAnchor:hover a.anchor-section {visibility: visible;} ul > li > .anchor-section {display: none;} diff --git a/docs/libs/anchor-sections-1.1.0/anchor-sections.js b/docs/libs/anchor-sections-1.1.0/anchor-sections.js new file mode 100644 index 0000000..fee005d --- /dev/null +++ b/docs/libs/anchor-sections-1.1.0/anchor-sections.js @@ -0,0 +1,11 @@ +document.addEventListener('DOMContentLoaded', function () { + // If section divs is used, we need to put the anchor in the child header + const headers = document.querySelectorAll("div.hasAnchor.section[class*='level'] > :first-child") + + headers.forEach(function (x) { + // Add to the header node + if (!x.classList.contains('hasAnchor')) x.classList.add('hasAnchor') + // Remove from the section or div created by Pandoc + x.parentElement.classList.remove('hasAnchor') + }) +}) diff --git a/docs/libs/gitbook-2.6.7/css/plugin-highlight.css b/docs/libs/gitbook-2.6.7/css/plugin-highlight.css index 2aabd3d..02c0189 100644 --- a/docs/libs/gitbook-2.6.7/css/plugin-highlight.css +++ b/docs/libs/gitbook-2.6.7/css/plugin-highlight.css @@ -133,7 +133,7 @@ .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code { /* -Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull +Original Style from ethanschoonover.com/solarized (c) Jeremy Hull */ /* Solarized Green */ diff --git a/docs/libs/gitbook-2.6.7/css/style.css b/docs/libs/gitbook-2.6.7/css/style.css index 1b0c622..cba69b2 100644 --- a/docs/libs/gitbook-2.6.7/css/style.css +++ b/docs/libs/gitbook-2.6.7/css/style.css @@ -1,15 +1,13 @@ -/*! normalize.css v2.1.0 | MIT License | git.io/normalize */img,legend{border:0}*,.fa{-webkit-font-smoothing:antialiased}.fa-ul>li,sub,sup{position:relative}.book .book-body .page-wrapper .page-inner section.normal hr:after,.book-langs-index .inner .languages:after,.buttons:after,.dropdown-menu .buttons:after{clear:both}body,html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}.hidden,[hidden]{display:none}audio:not([controls]){display:none;height:0}html{font-family:sans-serif}body,figure{margin:0}a:focus{outline:dotted thin}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button{margin-right:10px;}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}/*! +/*! normalize.css v2.1.0 | MIT License | git.io/normalize */img,legend{border:0}*{-webkit-font-smoothing:antialiased}sub,sup{position:relative}.book .book-body .page-wrapper .page-inner section.normal hr:after,.book-langs-index .inner .languages:after,.buttons:after,.dropdown-menu .buttons:after{clear:both}body,html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}.hidden,[hidden]{display:none}audio:not([controls]){display:none;height:0}html{font-family:sans-serif}body,figure{margin:0}a:focus{outline:dotted thin}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button{margin-right:10px;}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}/*! * Preboot v2 * * Open sourced under MIT license by @mdo. * Some variables and mixins from Bootstrap (Apache 2 license). - */.link-inherit,.link-inherit:focus,.link-inherit:hover{color:inherit}.fa,.fa-stack{display:inline-block}/*! + */.link-inherit,.link-inherit:focus,.link-inherit:hover{color:inherit}/*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(./fontawesome/fontawesome-webfont.ttf?v=4.7.0) format('truetype');font-weight:400;font-style:normal}.fa{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale}.book .book-header,.book .book-summary{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-square:before,.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.book-langs-index{width:100%;height:100%;padding:40px 0;margin:0;overflow:auto}@media (max-width:600px){.book-langs-index{padding:0}}.book-langs-index .inner{max-width:600px;width:100%;margin:0 auto;padding:30px;background:#fff;border-radius:3px}.book-langs-index .inner h3{margin:0}.book-langs-index .inner .languages{list-style:none;padding:20px 30px;margin-top:20px;border-top:1px solid #eee}.book-langs-index .inner .languages:after,.book-langs-index .inner .languages:before{content:" ";display:table;line-height:0}.book-langs-index .inner .languages li{width:50%;float:left;padding:10px 5px;font-size:16px}@media (max-width:600px){.book-langs-index .inner .languages li{width:100%;max-width:100%}}.book .book-header{overflow:visible;height:50px;padding:0 8px;z-index:2;font-size:.85em;color:#7e888b;background:0 0}.book .book-header .btn{display:block;height:50px;padding:0 15px;border-bottom:none;color:#ccc;text-transform:uppercase;line-height:50px;-webkit-box-shadow:none!important;box-shadow:none!important;position:relative;font-size:14px}.book .book-header .btn:hover{position:relative;text-decoration:none;color:#444;background:0 0}.book .book-header h1{margin:0;font-size:20px;font-weight:200;text-align:center;line-height:50px;opacity:0;padding-left:200px;padding-right:200px;-webkit-transition:opacity .2s ease;-moz-transition:opacity .2s ease;-o-transition:opacity .2s ease;transition:opacity .2s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.book .book-header h1 a,.book .book-header h1 a:hover{color:inherit;text-decoration:none}@media (max-width:1000px){.book .book-header h1{display:none}}.book .book-header h1 i{display:none}.book .book-header:hover h1{opacity:1}.book.is-loading .book-header h1 i{display:inline-block}.book.is-loading .book-header h1 a{display:none}.dropdown{position:relative}.dropdown-menu{position:absolute;top:100%;left:0;z-index:100;display:none;float:left;min-width:160px;padding:0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fafafa;border:1px solid rgba(0,0,0,.07);border-radius:1px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.open{display:block}.dropdown-menu.dropdown-left{left:auto;right:4%}.dropdown-menu.dropdown-left .dropdown-caret{right:14px;left:auto}.dropdown-menu .dropdown-caret{position:absolute;top:-8px;left:14px;width:18px;height:10px;float:left;overflow:hidden}.dropdown-menu .dropdown-caret .caret-inner,.dropdown-menu .dropdown-caret .caret-outer{display:inline-block;top:0;border-left:9px solid transparent;border-right:9px solid transparent;position:absolute}.dropdown-menu .dropdown-caret .caret-outer{border-bottom:9px solid rgba(0,0,0,.1);height:auto;left:0;width:auto;margin-left:-1px}.dropdown-menu .dropdown-caret .caret-inner{margin-top:-1px;top:1px;border-bottom:9px solid #fafafa}.dropdown-menu .buttons{border-bottom:1px solid rgba(0,0,0,.07)}.dropdown-menu .buttons:after,.dropdown-menu .buttons:before{content:" ";display:table;line-height:0}.dropdown-menu .buttons:last-child{border-bottom:none}.dropdown-menu .buttons .button{border:0;background-color:transparent;color:#a6a6a6;width:100%;text-align:center;float:left;line-height:1.42857143;padding:8px 4px}.alert,.dropdown-menu .buttons .button:hover{color:#444}.dropdown-menu .buttons .button:focus,.dropdown-menu .buttons .button:hover{outline:0}.dropdown-menu .buttons .button.size-2{width:50%}.dropdown-menu .buttons .button.size-3{width:33%}.alert{padding:15px;margin-bottom:20px;background:#eee;border-bottom:5px solid #ddd}.alert-success{background:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-info{background:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-danger{background:#f2dede;border-color:#ebccd1;color:#a94442}.alert-warning{background:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.book .book-summary{position:absolute;top:0;left:-300px;bottom:0;z-index:1;width:300px;color:#364149;background:#fafafa;border-right:1px solid rgba(0,0,0,.07);-webkit-transition:left 250ms ease;-moz-transition:left 250ms ease;-o-transition:left 250ms ease;transition:left 250ms ease}.book .book-summary ul.summary{position:absolute;top:0;left:0;right:0;bottom:0;overflow-y:auto;list-style:none;margin:0;padding:0;-webkit-transition:top .5s ease;-moz-transition:top .5s ease;-o-transition:top .5s ease;transition:top .5s ease}.book .book-summary ul.summary li{list-style:none}.book .book-summary ul.summary li.divider{height:1px;margin:7px 0;overflow:hidden;background:rgba(0,0,0,.07)}.book .book-summary ul.summary li i.fa-check{display:none;position:absolute;right:9px;top:16px;font-size:9px;color:#3c3}.book .book-summary ul.summary li.done>a{color:#364149;font-weight:400}.book .book-summary ul.summary li.done>a i{display:inline}.book .book-summary ul.summary li a,.book .book-summary ul.summary li span{display:block;padding:10px 15px;border-bottom:none;color:#364149;background:0 0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;position:relative}.book .book-summary ul.summary li span{cursor:not-allowed;opacity:.3;filter:alpha(opacity=30)}.book .book-summary ul.summary li a:hover,.book .book-summary ul.summary li.active>a{color:#008cff;background:0 0;text-decoration:none}.book .book-summary ul.summary li ul{padding-left:20px}@media (max-width:600px){.book .book-summary{width:calc(100% - 60px);bottom:0;left:-100%}}.book.with-summary .book-summary{left:0}.book.without-animation .book-summary{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.book{position:relative;width:100%;height:100%}.book .book-body,.book .book-body .body-inner{position:absolute;top:0;left:0;overflow-y:auto;bottom:0;right:0}.book .book-body{color:#000;background:#fff;-webkit-transition:left 250ms ease;-moz-transition:left 250ms ease;-o-transition:left 250ms ease;transition:left 250ms ease}.book .book-body .page-wrapper{position:relative;outline:0}.book .book-body .page-wrapper .page-inner{max-width:800px;margin:0 auto;padding:20px 0 40px}.book .book-body .page-wrapper .page-inner section{margin:0;padding:5px 15px;background:#fff;border-radius:2px;line-height:1.7;font-size:1.6rem}.book .book-body .page-wrapper .page-inner .btn-group .btn{border-radius:0;background:#eee;border:0}@media (max-width:1240px){.book .book-body{-webkit-transition:-webkit-transform 250ms ease;-moz-transition:-moz-transform 250ms ease;-o-transition:-o-transform 250ms ease;transition:transform 250ms ease;padding-bottom:20px}.book .book-body .body-inner{position:static;min-height:calc(100% - 50px)}}@media (min-width:600px){.book.with-summary .book-body{left:300px}}@media (max-width:600px){.book.with-summary{overflow:hidden}.book.with-summary .book-body{-webkit-transform:translate(calc(100% - 60px),0);-moz-transform:translate(calc(100% - 60px),0);-ms-transform:translate(calc(100% - 60px),0);-o-transform:translate(calc(100% - 60px),0);transform:translate(calc(100% - 60px),0)}}.book.without-animation .book-body{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.buttons:after,.buttons:before{content:" ";display:table;line-height:0}.button{border:0;background:#eee;color:#666;width:100%;text-align:center;float:left;line-height:1.42857143;padding:8px 4px}.button:hover{color:#444}.button:focus,.button:hover{outline:0}.button.size-2{width:50%}.button.size-3{width:33%}.book .book-body .page-wrapper .page-inner section{display:none}.book .book-body .page-wrapper .page-inner section.normal{display:block;word-wrap:break-word;overflow:hidden;color:#333;line-height:1.7;text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%}.book .book-body .page-wrapper .page-inner section.normal *{box-sizing:border-box;-webkit-box-sizing:border-box;}.book .book-body .page-wrapper .page-inner section.normal>:first-child{margin-top:0!important}.book .book-body .page-wrapper .page-inner section.normal>:last-child{margin-bottom:0!important}.book .book-body .page-wrapper .page-inner section.normal blockquote,.book .book-body .page-wrapper .page-inner section.normal code,.book .book-body .page-wrapper .page-inner section.normal figure,.book .book-body .page-wrapper .page-inner section.normal img,.book .book-body .page-wrapper .page-inner section.normal pre,.book .book-body .page-wrapper .page-inner section.normal table,.book .book-body .page-wrapper .page-inner section.normal tr{page-break-inside:avoid}.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5,.book .book-body .page-wrapper .page-inner section.normal p{orphans:3;widows:3}.book .book-body .page-wrapper .page-inner section.normal h1,.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5{page-break-after:avoid}.book .book-body .page-wrapper .page-inner section.normal b,.book .book-body .page-wrapper .page-inner section.normal strong{font-weight:700}.book .book-body .page-wrapper .page-inner section.normal em{font-style:italic}.book .book-body .page-wrapper .page-inner section.normal blockquote,.book .book-body .page-wrapper .page-inner section.normal dl,.book .book-body .page-wrapper .page-inner section.normal ol,.book .book-body .page-wrapper .page-inner section.normal p,.book .book-body .page-wrapper .page-inner section.normal table,.book .book-body .page-wrapper .page-inner section.normal ul{margin-top:0;margin-bottom:.85em}.book .book-body .page-wrapper .page-inner section.normal a{color:#4183c4;text-decoration:none;background:0 0}.book .book-body .page-wrapper .page-inner section.normal a:active,.book .book-body .page-wrapper .page-inner section.normal a:focus,.book .book-body .page-wrapper .page-inner section.normal a:hover{outline:0;text-decoration:underline}.book .book-body .page-wrapper .page-inner section.normal img{border:0;max-width:100%}.book .book-body .page-wrapper .page-inner section.normal hr{height:4px;padding:0;margin:1.7em 0;overflow:hidden;background-color:#e7e7e7;border:none}.book .book-body .page-wrapper .page-inner section.normal hr:after,.book .book-body .page-wrapper .page-inner section.normal hr:before{display:table;content:" "}.book .book-body .page-wrapper .page-inner section.normal h1,.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5,.book .book-body .page-wrapper .page-inner section.normal h6{margin-top:1.275em;margin-bottom:.85em;}.book .book-body .page-wrapper .page-inner section.normal h1{font-size:2em}.book .book-body .page-wrapper .page-inner section.normal h2{font-size:1.75em}.book .book-body .page-wrapper .page-inner section.normal h3{font-size:1.5em}.book .book-body .page-wrapper .page-inner section.normal h4{font-size:1.25em}.book .book-body .page-wrapper .page-inner section.normal h5{font-size:1em}.book .book-body .page-wrapper .page-inner section.normal h6{font-size:1em;color:#777}.book .book-body .page-wrapper .page-inner section.normal code,.book .book-body .page-wrapper .page-inner section.normal pre{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;direction:ltr;border:none;color:inherit}.book .book-body .page-wrapper .page-inner section.normal pre{overflow:auto;word-wrap:normal;margin:0 0 1.275em;padding:.85em 1em;background:#f7f7f7}.book .book-body .page-wrapper .page-inner section.normal pre>code{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;font-size:.85em;white-space:pre;background:0 0}.book .book-body .page-wrapper .page-inner section.normal pre>code:after,.book .book-body .page-wrapper .page-inner section.normal pre>code:before{content:normal}.book .book-body .page-wrapper .page-inner section.normal code{padding:.2em;margin:0;font-size:.85em;background-color:#f7f7f7}.book .book-body .page-wrapper .page-inner section.normal code:after,.book .book-body .page-wrapper .page-inner section.normal code:before{letter-spacing:-.2em;content:"\00a0"}.book .book-body .page-wrapper .page-inner section.normal ol,.book .book-body .page-wrapper .page-inner section.normal ul{padding:0 0 0 2em;margin:0 0 .85em}.book .book-body .page-wrapper .page-inner section.normal ol ol,.book .book-body .page-wrapper .page-inner section.normal ol ul,.book .book-body .page-wrapper .page-inner section.normal ul ol,.book .book-body .page-wrapper .page-inner section.normal ul ul{margin-top:0;margin-bottom:0}.book .book-body .page-wrapper .page-inner section.normal ol ol{list-style-type:lower-roman}.book .book-body .page-wrapper .page-inner section.normal blockquote{margin:0 0 .85em;padding:0 15px;opacity:0.75;border-left:4px solid #dcdcdc}.book .book-body .page-wrapper .page-inner section.normal blockquote:first-child{margin-top:0}.book .book-body .page-wrapper .page-inner section.normal blockquote:last-child{margin-bottom:0}.book .book-body .page-wrapper .page-inner section.normal dl{padding:0}.book .book-body .page-wrapper .page-inner section.normal dl dt{padding:0;margin-top:.85em;font-style:italic;font-weight:700}.book .book-body .page-wrapper .page-inner section.normal dl dd{padding:0 .85em;margin-bottom:.85em}.book .book-body .page-wrapper .page-inner section.normal dd{margin-left:0}.book .book-body .page-wrapper .page-inner section.normal .glossary-term{cursor:help;text-decoration:underline}.book .book-body .navigation{position:absolute;top:50px;bottom:0;margin:0;max-width:150px;min-width:90px;display:flex;justify-content:center;align-content:center;flex-direction:column;font-size:40px;color:#ccc;text-align:center;-webkit-transition:all 350ms ease;-moz-transition:all 350ms ease;-o-transition:all 350ms ease;transition:all 350ms ease}.book .book-body .navigation:hover{text-decoration:none;color:#444}.book .book-body .navigation.navigation-next{right:0}.book .book-body .navigation.navigation-prev{left:0}@media (max-width:1240px){.book .book-body .navigation{position:static;top:auto;max-width:50%;width:50%;display:inline-block;float:left}.book .book-body .navigation.navigation-unique{max-width:100%;width:100%}}.book .book-body .page-wrapper .page-inner section.glossary{margin-bottom:40px}.book .book-body .page-wrapper .page-inner section.glossary h2 a,.book .book-body .page-wrapper .page-inner section.glossary h2 a:hover{color:inherit;text-decoration:none}.book .book-body .page-wrapper .page-inner section.glossary .glossary-index{list-style:none;margin:0;padding:0}.book .book-body .page-wrapper .page-inner section.glossary .glossary-index li{display:inline;margin:0 8px;white-space:nowrap}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:none;-webkit-touch-callout:none}a{text-decoration:none}body,html{height:100%}html{font-size:62.5%}body{text-rendering:optimizeLegibility;font-smoothing:antialiased;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;letter-spacing:.2px;text-size-adjust:100%} + */@font-face{font-family:'FontAwesome';src:url('./fontawesome/fontawesome-webfont.ttf?v=4.7.0') format('truetype');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} +.book .book-header,.book .book-summary{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.book-langs-index{width:100%;height:100%;padding:40px 0;margin:0;overflow:auto}@media (max-width:600px){.book-langs-index{padding:0}}.book-langs-index .inner{max-width:600px;width:100%;margin:0 auto;padding:30px;background:#fff;border-radius:3px}.book-langs-index .inner h3{margin:0}.book-langs-index .inner .languages{list-style:none;padding:20px 30px;margin-top:20px;border-top:1px solid #eee}.book-langs-index .inner .languages:after,.book-langs-index .inner .languages:before{content:" ";display:table;line-height:0}.book-langs-index .inner .languages li{width:50%;float:left;padding:10px 5px;font-size:16px}@media (max-width:600px){.book-langs-index .inner .languages li{width:100%;max-width:100%}}.book .book-header{overflow:visible;height:50px;padding:0 8px;z-index:2;font-size:.85em;color:#7e888b;background:0 0}.book .book-header .btn{display:block;height:50px;padding:0 15px;border-bottom:none;color:#ccc;text-transform:uppercase;line-height:50px;-webkit-box-shadow:none!important;box-shadow:none!important;position:relative;font-size:14px}.book .book-header .btn:hover{position:relative;text-decoration:none;color:#444;background:0 0}.book .book-header h1{margin:0;font-size:20px;font-weight:200;text-align:center;line-height:50px;opacity:0;padding-left:200px;padding-right:200px;-webkit-transition:opacity .2s ease;-moz-transition:opacity .2s ease;-o-transition:opacity .2s ease;transition:opacity .2s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.book .book-header h1 a,.book .book-header h1 a:hover{color:inherit;text-decoration:none}@media (max-width:1000px){.book .book-header h1{display:none}}.book .book-header h1 i{display:none}.book .book-header:hover h1{opacity:1}.book.is-loading .book-header h1 i{display:inline-block}.book.is-loading .book-header h1 a{display:none}.dropdown{position:relative}.dropdown-menu{position:absolute;top:100%;left:0;z-index:100;display:none;float:left;min-width:160px;padding:0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fafafa;border:1px solid rgba(0,0,0,.07);border-radius:1px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.open{display:block}.dropdown-menu.dropdown-left{left:auto;right:4%}.dropdown-menu.dropdown-left .dropdown-caret{right:14px;left:auto}.dropdown-menu .dropdown-caret{position:absolute;top:-8px;left:14px;width:18px;height:10px;float:left;overflow:hidden}.dropdown-menu .dropdown-caret .caret-inner,.dropdown-menu .dropdown-caret .caret-outer{display:inline-block;top:0;border-left:9px solid transparent;border-right:9px solid transparent;position:absolute}.dropdown-menu .dropdown-caret .caret-outer{border-bottom:9px solid rgba(0,0,0,.1);height:auto;left:0;width:auto;margin-left:-1px}.dropdown-menu .dropdown-caret .caret-inner{margin-top:-1px;top:1px;border-bottom:9px solid #fafafa}.dropdown-menu .buttons{border-bottom:1px solid rgba(0,0,0,.07)}.dropdown-menu .buttons:after,.dropdown-menu .buttons:before{content:" ";display:table;line-height:0}.dropdown-menu .buttons:last-child{border-bottom:none}.dropdown-menu .buttons .button{border:0;background-color:transparent;color:#a6a6a6;width:100%;text-align:center;float:left;line-height:1.42857143;padding:8px 4px}.alert,.dropdown-menu .buttons .button:hover{color:#444}.dropdown-menu .buttons .button:focus,.dropdown-menu .buttons .button:hover{outline:0}.dropdown-menu .buttons .button.size-2{width:50%}.dropdown-menu .buttons .button.size-3{width:33%}.alert{padding:15px;margin-bottom:20px;background:#eee;border-bottom:5px solid #ddd}.alert-success{background:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-info{background:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-danger{background:#f2dede;border-color:#ebccd1;color:#a94442}.alert-warning{background:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.book .book-summary{position:absolute;top:0;left:-300px;bottom:0;z-index:1;width:300px;color:#364149;background:#fafafa;border-right:1px solid rgba(0,0,0,.07);-webkit-transition:left 250ms ease;-moz-transition:left 250ms ease;-o-transition:left 250ms ease;transition:left 250ms ease}.book .book-summary ul.summary{position:absolute;top:0;left:0;right:0;bottom:0;overflow-y:auto;list-style:none;margin:0;padding:0;-webkit-transition:top .5s ease;-moz-transition:top .5s ease;-o-transition:top .5s ease;transition:top .5s ease}.book .book-summary ul.summary li{list-style:none}.book .book-summary ul.summary li.divider{height:1px;margin:7px 0;overflow:hidden;background:rgba(0,0,0,.07)}.book .book-summary ul.summary li i.fa-check{display:none;position:absolute;right:9px;top:16px;font-size:9px;color:#3c3}.book .book-summary ul.summary li.done>a{color:#364149;font-weight:400}.book .book-summary ul.summary li.done>a i{display:inline}.book .book-summary ul.summary li a,.book .book-summary ul.summary li span{display:block;padding:10px 15px;border-bottom:none;color:#364149;background:0 0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;position:relative}.book .book-summary ul.summary li span{cursor:not-allowed;opacity:.3;filter:alpha(opacity=30)}.book .book-summary ul.summary li a:hover,.book .book-summary ul.summary li.active>a{color:#008cff;background:0 0;text-decoration:none}.book .book-summary ul.summary li ul{padding-left:20px}@media (max-width:600px){.book .book-summary{width:calc(100% - 60px);bottom:0;left:-100%}}.book.with-summary .book-summary{left:0}.book.without-animation .book-summary{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.book{position:relative;width:100%;height:100%}.book .book-body,.book .book-body .body-inner{position:absolute;top:0;left:0;overflow-y:auto;bottom:0;right:0}.book .book-body{color:#000;background:#fff;-webkit-transition:left 250ms ease;-moz-transition:left 250ms ease;-o-transition:left 250ms ease;transition:left 250ms ease}.book .book-body .page-wrapper{position:relative;outline:0}.book .book-body .page-wrapper .page-inner{max-width:800px;margin:0 auto;padding:20px 0 40px}.book .book-body .page-wrapper .page-inner section{margin:0;padding:5px 15px;background:#fff;border-radius:2px;line-height:1.7;font-size:1.6rem}.book .book-body .page-wrapper .page-inner .btn-group .btn{border-radius:0;background:#eee;border:0}@media (max-width:1240px){.book .book-body{-webkit-transition:-webkit-transform 250ms ease;-moz-transition:-moz-transform 250ms ease;-o-transition:-o-transform 250ms ease;transition:transform 250ms ease;padding-bottom:20px}.book .book-body .body-inner{position:static;min-height:calc(100% - 50px)}}@media (min-width:600px){.book.with-summary .book-body{left:300px}}@media (max-width:600px){.book.with-summary{overflow:hidden}.book.with-summary .book-body{-webkit-transform:translate(calc(100% - 60px),0);-moz-transform:translate(calc(100% - 60px),0);-ms-transform:translate(calc(100% - 60px),0);-o-transform:translate(calc(100% - 60px),0);transform:translate(calc(100% - 60px),0)}}.book.without-animation .book-body{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.buttons:after,.buttons:before{content:" ";display:table;line-height:0}.button{border:0;background:#eee;color:#666;width:100%;text-align:center;float:left;line-height:1.42857143;padding:8px 4px}.button:hover{color:#444}.button:focus,.button:hover{outline:0}.button.size-2{width:50%}.button.size-3{width:33%}.book .book-body .page-wrapper .page-inner section{display:none}.book .book-body .page-wrapper .page-inner section.normal{display:block;word-wrap:break-word;overflow:hidden;color:#333;line-height:1.7;text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%}.book .book-body .page-wrapper .page-inner section.normal *{box-sizing:border-box;-webkit-box-sizing:border-box;}.book .book-body .page-wrapper .page-inner section.normal>:first-child{margin-top:0!important}.book .book-body .page-wrapper .page-inner section.normal>:last-child{margin-bottom:0!important}.book .book-body .page-wrapper .page-inner section.normal blockquote,.book .book-body .page-wrapper .page-inner section.normal code,.book .book-body .page-wrapper .page-inner section.normal figure,.book .book-body .page-wrapper .page-inner section.normal img,.book .book-body .page-wrapper .page-inner section.normal pre,.book .book-body .page-wrapper .page-inner section.normal table,.book .book-body .page-wrapper .page-inner section.normal tr{page-break-inside:avoid}.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5,.book .book-body .page-wrapper .page-inner section.normal p{orphans:3;widows:3}.book .book-body .page-wrapper .page-inner section.normal h1,.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5{page-break-after:avoid}.book .book-body .page-wrapper .page-inner section.normal b,.book .book-body .page-wrapper .page-inner section.normal strong{font-weight:700}.book .book-body .page-wrapper .page-inner section.normal em{font-style:italic}.book .book-body .page-wrapper .page-inner section.normal blockquote,.book .book-body .page-wrapper .page-inner section.normal dl,.book .book-body .page-wrapper .page-inner section.normal ol,.book .book-body .page-wrapper .page-inner section.normal p,.book .book-body .page-wrapper .page-inner section.normal table,.book .book-body .page-wrapper .page-inner section.normal ul{margin-top:0;margin-bottom:.85em}.book .book-body .page-wrapper .page-inner section.normal a{color:#4183c4;text-decoration:none;background:0 0}.book .book-body .page-wrapper .page-inner section.normal a:active,.book .book-body .page-wrapper .page-inner section.normal a:focus,.book .book-body .page-wrapper .page-inner section.normal a:hover{outline:0;text-decoration:underline}.book .book-body .page-wrapper .page-inner section.normal img{border:0;max-width:100%}.book .book-body .page-wrapper .page-inner section.normal hr{height:4px;padding:0;margin:1.7em 0;overflow:hidden;background-color:#e7e7e7;border:none}.book .book-body .page-wrapper .page-inner section.normal hr:after,.book .book-body .page-wrapper .page-inner section.normal hr:before{display:table;content:" "}.book .book-body .page-wrapper .page-inner section.normal h1,.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5,.book .book-body .page-wrapper .page-inner section.normal h6{margin-top:1.275em;margin-bottom:.85em;}.book .book-body .page-wrapper .page-inner section.normal h1{font-size:2em}.book .book-body .page-wrapper .page-inner section.normal h2{font-size:1.75em}.book .book-body .page-wrapper .page-inner section.normal h3{font-size:1.5em}.book .book-body .page-wrapper .page-inner section.normal h4{font-size:1.25em}.book .book-body .page-wrapper .page-inner section.normal h5{font-size:1em}.book .book-body .page-wrapper .page-inner section.normal h6{font-size:1em;color:#777}.book .book-body .page-wrapper .page-inner section.normal code,.book .book-body .page-wrapper .page-inner section.normal pre{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;direction:ltr;border:none;color:inherit}.book .book-body .page-wrapper .page-inner section.normal pre{overflow:auto;word-wrap:normal;margin:0 0 1.275em;padding:.85em 1em;background:#f7f7f7}.book .book-body .page-wrapper .page-inner section.normal pre>code{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;font-size:.85em;white-space:pre;background:0 0}.book .book-body .page-wrapper .page-inner section.normal pre>code:after,.book .book-body .page-wrapper .page-inner section.normal pre>code:before{content:normal}.book .book-body .page-wrapper .page-inner section.normal code{padding:.2em;margin:0;font-size:.85em;background-color:#f7f7f7}.book .book-body .page-wrapper .page-inner section.normal code:after,.book .book-body .page-wrapper .page-inner section.normal code:before{letter-spacing:-.2em;content:"\00a0"}.book .book-body .page-wrapper .page-inner section.normal ol,.book .book-body .page-wrapper .page-inner section.normal ul{padding:0 0 0 2em;margin:0 0 .85em}.book .book-body .page-wrapper .page-inner section.normal ol ol,.book .book-body .page-wrapper .page-inner section.normal ol ul,.book .book-body .page-wrapper .page-inner section.normal ul ol,.book .book-body .page-wrapper .page-inner section.normal ul ul{margin-top:0;margin-bottom:0}.book .book-body .page-wrapper .page-inner section.normal ol ol{list-style-type:lower-roman}.book .book-body .page-wrapper .page-inner section.normal blockquote{margin:0 0 .85em;padding:0 15px;opacity:0.75;border-left:4px solid #dcdcdc}.book .book-body .page-wrapper .page-inner section.normal blockquote:first-child{margin-top:0}.book .book-body .page-wrapper .page-inner section.normal blockquote:last-child{margin-bottom:0}.book .book-body .page-wrapper .page-inner section.normal dl{padding:0}.book .book-body .page-wrapper .page-inner section.normal dl dt{padding:0;margin-top:.85em;font-style:italic;font-weight:700}.book .book-body .page-wrapper .page-inner section.normal dl dd{padding:0 .85em;margin-bottom:.85em}.book .book-body .page-wrapper .page-inner section.normal dd{margin-left:0}.book .book-body .page-wrapper .page-inner section.normal .glossary-term{cursor:help;text-decoration:underline}.book .book-body .navigation{position:absolute;top:50px;bottom:0;margin:0;max-width:150px;min-width:90px;display:flex;justify-content:center;align-content:center;flex-direction:column;font-size:40px;color:#ccc;text-align:center;-webkit-transition:all 350ms ease;-moz-transition:all 350ms ease;-o-transition:all 350ms ease;transition:all 350ms ease}.book .book-body .navigation:hover{text-decoration:none;color:#444}.book .book-body .navigation.navigation-next{right:0}.book .book-body .navigation.navigation-prev{left:0}@media (max-width:1240px){.book .book-body .navigation{position:static;top:auto;max-width:50%;width:50%;display:inline-block;float:left}.book .book-body .navigation.navigation-unique{max-width:100%;width:100%}}.book .book-body .page-wrapper .page-inner section.glossary{margin-bottom:40px}.book .book-body .page-wrapper .page-inner section.glossary h2 a,.book .book-body .page-wrapper .page-inner section.glossary h2 a:hover{color:inherit;text-decoration:none}.book .book-body .page-wrapper .page-inner section.glossary .glossary-index{list-style:none;margin:0;padding:0}.book .book-body .page-wrapper .page-inner section.glossary .glossary-index li{display:inline;margin:0 8px;white-space:nowrap}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-overflow-scrolling:auto;-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:none;-webkit-touch-callout:none}a{text-decoration:none}body,html{height:100%}html{font-size:62.5%}body{text-rendering:optimizeLegibility;font-smoothing:antialiased;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;letter-spacing:.2px;text-size-adjust:100%} .book .book-summary ul.summary li a span {display:inline;padding:initial;overflow:visible;cursor:auto;opacity:1;} /* show arrow before summary tag as in bootstrap */ details > summary {display:list-item;cursor:pointer;} -/*add whatsapp icon from FA 5.1.1 -TODO: remove when updating fontawesome*/ -.fa-whatsapp:before{content:"\f232"} diff --git a/docs/libs/gitbook-2.6.7/js/plugin-clipboard.js b/docs/libs/gitbook-2.6.7/js/plugin-clipboard.js index 9a7d2e7..f0880be 100644 --- a/docs/libs/gitbook-2.6.7/js/plugin-clipboard.js +++ b/docs/libs/gitbook-2.6.7/js/plugin-clipboard.js @@ -9,7 +9,9 @@ gitbook.require(["gitbook", "jQuery"], function(gitbook, $) { // the page.change event is thrown twice: before and after the page changes if (clipboard) { - // clipboard is already defined + // clipboard is already defined but we are on the same page + if (clipboard._prevPage === window.location.pathname) return; + // clipboard is already defined and url path change // we can deduct that we are before page changes clipboard.destroy(); // destroy the previous events listeners clipboard = undefined; // reset the clipboard object @@ -24,6 +26,8 @@ gitbook.require(["gitbook", "jQuery"], function(gitbook, $) { } }); + clipboard._prevPage = window.location.pathname + }); }); diff --git a/docs/libs/header-attrs-2.10/header-attrs.js b/docs/libs/header-attrs-2.10/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/libs/header-attrs-2.10/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/notes-for-instructors.html b/docs/notes-for-instructors.html new file mode 100644 index 0000000..34d1e8e --- /dev/null +++ b/docs/notes-for-instructors.html @@ -0,0 +1,305 @@ + + + + + + + Chapter 6 Notes for Instructors | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+
+

Chapter 6 Notes for Instructors

+

Although AnVIL is the preferred computational platform for the GDSCN, all activities can be run on different platforms.

+

R-based activities can be run on your own personal installation of R or Posit(formerly called RStudio), depending on your needs.

+

Galaxy-based activities can be run on both Galaxy on AnVIL and on the Galaxy web portal.

+

You may also adapt these activities for other languages and platforms.

+
+
+
+ +
+
+ +
+
+
+ + +
+
+ + + + + + + + + + + + + diff --git a/docs/reference-keys.txt b/docs/reference-keys.txt index 208c1d7..d03c534 100644 --- a/docs/reference-keys.txt +++ b/docs/reference-keys.txt @@ -1,28 +1,22 @@ -introduction -motivation target-audience -curriculum -a-new-chapter -learning-objectives-1 -libraries -subtopic -code-examples -image-example -video-examples -links-to-files -links-to-websites -citation-examples -callout-boxes -dropdown-summaries -print-out-session-info -anvil-module-library -include-using-cowborrow_chapter -background-highlighting-for-borrowed-chapters -workspaces -clone-a-workspace -create-a-workspace -open-a-workspace -share-a-workspace +platform +data +background +what-is-genomics +what-is-data-science +what-is-cloud-computing +why-soil-microbes +heavy-metals-and-human-health +research-team +soil-sampling +support +funding +sponsors +analytical-and-computational-support +data-1 +sample-metadata +soil-testing-data +genomics-and-metagenomics-data billing create-google-billing-account add-terra-to-google-billing-account @@ -32,49 +26,37 @@ view-spend-for-google-billing create-terra-billing-project add-member-to-terra-billing-project disable-terra-billing-project -onboarding +notes-for-instructors +checklist-for-running-activities-on-anvil +setting-up-billing-on-anvil +billing-project +adding-instructors-as-owner +adding-students-as-user +understanding-the-various-billing-costs +estimating-costs-before-the-class-begins +how-much-does-a-class-cost +setting-up-the-class-activity +overview-of-class-setup +collect-google-ids +set-up-groups +set-up-billing-projects +set-permissions-on-the-workspace +notify-terra +getting-credit-for-professional-development +anvil-workspace create-google-account -using-programming-platforms-on-anvil -video-overview-on-using-jupyter-notebooks +clone-the-workspace +using-rstudio-on-anvil +video-overview-of-rstudio-on-anvil objectives slides -launching-jupyter -video-overview-on-using-galaxy -objectives-1 -slides-1 -starting-galaxy -navigating-galaxy -deleting-galaxy -video-overview-on-using-rstudio -objectives-2 -slides-2 launching-rstudio touring-rstudio pausing-rstudio -deleting-rstudio -student-instructions -student-account-setup -create-google-account-1 -log-in-to-terra -share-username -student-instructions-for-cloning-a-workspace -with-no-variables-set -with-variables-set -student-instructions-for-launching-jupyter -using-default-jupyter-environment -using-custom-jupyter-environment -student-instructions-for-launching-rstudio -using-default-rstudio-environment -using-custom-rstudio-environment -user-management -create-terra-group -add-member-to-terra-group -find-group-email -why-anvil -why-anvil-for-instructors -instructor-modules -why-anvil-for-instructors-1 -checklist-link -checklist-timeline-premade-content -recommendation-to-use-strides +exploring-soil-testing-data-with-r +before-you-start +objectives-1 +part-1.-data-import +part-2.-data-summarization +part-3.-data-visualization references diff --git a/docs/references.html b/docs/references.html new file mode 100644 index 0000000..1be01cd --- /dev/null +++ b/docs/references.html @@ -0,0 +1,302 @@ + + + + + + + Chapter 14 References | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/research-team.html b/docs/research-team.html new file mode 100644 index 0000000..a736554 --- /dev/null +++ b/docs/research-team.html @@ -0,0 +1,327 @@ + + + + + + + Chapter 2 Research Team | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+
+

Chapter 2 Research Team

+

This project is coordinated by the Genomics Data Science Community Network (GDSCN). You can read more about the GDSCN and its mission at the network website.

+
+

2.1 Soil sampling

+

This map shows the current sampling locations for the BioDIGS project. The extensive network of the GDSCN has made this data collection possible.

+ +

Soil sampling for this project was done by both faculty and student volunteers from schools that aren’t traditional R1 research institutions. Many of the faculty are also members of the GDSCN. This list of locations reflects GDSCN institutions and friends of GDSCN who have collected soil samples.

+
    +
  • Annandale, VA: Northern Virginia Community College
  • +
  • Atlanta, GA: Spelman College
  • +
  • Baltimore, MD: College of Southern Maryland, Notre Dame College of Maryland, Towson University
  • +
  • Bismark, ND: United Tribes Technical College
  • +
  • El Paso, TX: El Paso Community College, The University of Texas at El Paso
  • +
  • Fresno, CA: Clovis Community College
  • +
  • Greensboro, NC: North Carolina A&T State University
  • +
  • Harrisonburg, VA: James Madison University
  • +
  • Honolulu, Hawai’i: University of Hawai’i at Mānoa
  • +
  • Las Cruces, NM: Doña Ana Community College
  • +
  • Montgomery County, MD: Montgomery College, Towson University
  • +
  • Nashville, TN: Meharry Medical College
  • +
  • New York, NY: Guttman Community College CUNY
  • +
  • Petersburg, VA: Virginia State University
  • +
  • Seattle, WA: North Seattle College, Pierce College
  • +
  • Tsaile, AZ: Diné College
  • +
+
+
+
+
+ +
+
+ +
+
+
+ + +
+
+ + + + + + + + + + + + + diff --git a/docs/resources/images/02-chapter_of_course_files/figure-html/1YmwKdIy9BeQ3EShgZhvtb3MgR8P6iDX4DfFD65W_gdQ_gcc4fbee202_0_141.png b/docs/resources/images/02-chapter_of_course_files/figure-html/1YmwKdIy9BeQ3EShgZhvtb3MgR8P6iDX4DfFD65W_gdQ_gcc4fbee202_0_141.png deleted file mode 100644 index b865852d5ade5fdde09681f2d60e0c8ef89fd21b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17318 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%0DI=vK=$We^?T?q5WV0~g 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 yL diff --git a/docs/resources/images/09-soil_exploration_module_files/figure-html/unnamed-chunk-13-1.png b/docs/resources/images/09-soil_exploration_module_files/figure-html/unnamed-chunk-13-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fcc830fdf8f834ed327e05a355c4d989e61c0b11 GIT binary patch literal 18382 zcmeHv2T+q+*Dj$8(gZ}Q3L+>1(gg&ffS_~%k*|4xpT|Ro%!c}XU3V6^=9wA_OsV|R@rX|(bZO?qhY5ZAt9l= ztFCgNgoFZ2LPGX8H5njjtm0b%K9J~Y8mIyvK_Cz*DJdBl896yQ1qB5qB_$OV6*V>W zsZ*zDXlQ6@X-}U%O-DyZPfyRlz`)4J$i&2S=FAypW@Z)^7FJf)vuDq;v9X;yckcZ8 z^X%;G92^{+oSa--T-@B;JUl!XE?l^H@ggrTFCQP@rAwFi`S~wjzAPXhASft!<;s<- zSFZ{Q30=E(O;}i1L_|bXRP_4w>tbSJ;^N{G5)zVn)(m6MZ` zmzTeJ^QMA=f}*0Ll9Cb_48C>i*6rK3m6erMR8&+|Rqx!nqo$^&uC9Lf?%jL$?rCUf zXliO|X=!O|YwPIf=<4d~>FM3Se_vl;-@w4Y(9rO~g9k=NMh_o8G&VLiF)=YUH8nFc zGdDN4u&}VSw0!jF(c{ODpFDYDWo2b;ZTh#%iG)A$H&Ll*VoU_&)?raARqt&fdmEy zLZMI?4EEy1iK_O$H#y8@F5`~Au%!WJ#$U0q#$eSJei0|J5g`|rQMe*OCG z+qcHX#_!+1H#IdiH#fJmw6wOiwzajjx3_n6baZxhc6D_jk;v}u?w+2W-rnB6zP|qc z{(*skA3uH!4h{|t4gLK2b9i`oWMpJ?baZTNY&4Gc&WZ zvvYHE^Yily3k!>ji%UyO%gf6vD=Vw3t7~g(C=?2fMz620Z)|LAZfLkvA%Q@c{$dUReBhLey0JS630E-jA1HEe<0%Qr z1(Lfew+wue*2cYIEOYq1jqa}?Z;uFe(w7(Pc+av#30}4X>lsKg8C<_A7%KeIoa~LT z;O={8O-Z}(bN=D{XD%usn(eN?fAi#&-q#}Yi!j0DTKrnf_^7zQ{MN6n&aoNXPB382 zbHfR%^8TamSV+Jj-xWwm?DDAvNd$S}B=9#dQW!5O4N2(#&jR*J`6gFqe0bQ{dD`SQ z|M9j0SGu*84XhZMiL^s0bp362HAc5^Ko+*Bwt=_gDs~vMk-`TCjJuh?>gx<8%t=y` zOFC6hc{pYG3s90z`h~LfBzs0&Sk?yIN)>9ihXXh1zbc;tIT0zEY=G z;k#pTZnPw0kCs$mcAOpO?e8DP1~uKvt1M=E*w5^b%@=~fbQj^Sr8nWwcdtpY4=?L0 z_22l*POKVC)75jMf|9YP83t?a+Jqs!(BIGx0?+uYe9%nCKI6Qd{^3Awv}6PAS>3N^HKstUP}dC*0U+rw!eW(wj^c2}E4AI6XD z4e~pVJD4K|WUBfAZS_zR6(G=CQ)Q5FUKDxRcX{=k+9Zy=(HjJXmc{IQ>?;cUX1^>U zm8Jgph#Rj%vG!(bTedB36Pd&f1 zlB7L2-X_`W=5BII>%-6eyTuOwv<1j^^)mE{e0WSbq^9crwFA(q^l_FiWXwNo;xWxPovIfam?9kGr{pb=^G#jpTEAq+m z31)|BF+$)_Q79kpk8sZWshuBkshPn zG-$ORR0p|-j_u)|!LrIiNq=1D>dRt^u`Pq;#>6^b{E)5D^H_=6rcnyD;zLJhH+qw* zY#2hDGhk}*m8$ByHW`K`aNq^VanVDHvBz%a&LzNtz3;)l!RXyD3+X_uzm7%cCbg}N zDbcu3$UL0I3s*FrN7T4{sSJ^oE%iT~o#ny{4^fqsTXRRD91R7=0=nN))s#lK$8C^} zEC&mqV$U0{ObMWtv{(bnvc97@{Fs*}QBNYX?(5Vt>)6h-g$u8z@XSy6ZPxKeqR`sO zAI-%Ix}#>OeDoJsIGcj&4LAdLLhYr;dYoX@u=&hgZx9CEnbgu5IaWQBEFk4+RHK3Mwy2hG_V1MI zCOBvIWMiEG<`u_RW}v(HJmqY5#m!ChLh_)|8k1? z2~h@lS~A%ouEdV?^(M$&lu&{`e}OsB!VIqqqdM;*tvh}UvzktOk-KxYsk3FOYk*UPe=5mhSU7k3b%mWJ%0X zmbK-f#u|_w{X^qR7Rc>W`CUe2kkH%9JbuKQ%Y@DG(-hQXu*YVMIsj#M!*0c2PO z3!Fth_dlfF7v&#RvZ*W5JZwuvjIGTZ=EPv=F_v}JE93D-?xfiFh&`j!%mOz7nJTE+ zuFK_dSm2Q9H@v>95ukI{T-AZU-V+Q!mT1(~t)w;zl=Zyfi-Tf{i7mA3mbfM1pxAxx zO=qa^!O(qCuR?=4o~B7TeJ#c9vmY!I2Bpz&_k2+eG^u7X0SvFa*{ibD)99(~8ng0L zz-ezen3#I1g8bP69jKJ@*PsC{xSb9_Rht|7U8OvkoQr07y{kJC3nk_@DC2#QV}jCq zVdtAS90C~H7#2TGIPys_U}6YMT`ysA#1mKOug*xrQBRCCC2+4yzEi4z`&$f+CAhA$ zbWb2-3lmuJ?O9Hzs263C1_bz59}6#U54T^A8K}qW+OKw590!^}!tVb8zt%{xuJ?YE z3GeseT6nAZ?E|%Z+`&99XW%Y!4wX<{IZGv3=}=_8|7w26Kbv7uZ=%Zy9J!JCiqr%^ zi`*lOqf6iYLD4Qk%=mf*%)h}T)G?n>RlQR2oOwBN`qVIvrxVxcukt@p;Ai)XiJ!cf z7Z@^hQ6sjc(-k$gdM9w%Y@9zn8j|;iio6~f^Z-xlEaXW%k+LkiG!c5cgnmO_ zIN+IY0MEP)WnPLl_Mg3JQv*eH3hkdBz-wa^a|Vi$bC}ItR>qzhv_FSqA9QuKqa?D` z(T6f|7(xc(vNU5R%)R^uJ3G0>Kze`M=?$y~Hzu=qZSQrp+QkK__XB*&Tt#sW!C&R+ zM)b?{WEgvX^|PYR+a=<;g~u zaGp_-_a+;EB~z|l8Oi3Lwp(AK!La{cR1llxK6aDFdKak$Xfq^Dd#;A>o~)8^eHwUkj4^R-*g#=EmqbgQ1| zf>*G$5VTEATw@*w^|8`+olbHRjH->@ipHZmUuw{n$QS zK=>f}(rzgog5%+MOO5ka?zK)YCC#djIEvW#dKnwA*zIpeM7_0u-f80L(PU%hzA6oMyC_}w1?dta#)Y~;Vbd^;Lu{(8lZ&^}zSC6b zEs)kY$|--kMP^KPSompJMi5zTlhVDu9Lv$p*&w>{#xq1420%<1)g^+MbOhq-BM^sn z-v_Xw(6$loS+%Rv2MRK!k4~Xw#H8s2KX9@13UUW=9MsFc`^g40TF{5t2w;a8U z0EGrHFJ&B9-rhnm`Q$;n@CrQ#!H16zyWxmoDfzs%TSzDwX-z{zi4>|5`+dK7(hekC zjQa)i;|bwRm0xkO)o$`vwGwjeM(1}Xd)wzOYEw{3?ku6I^R(#XE)KC6IDN~cL_f}9 zq(EKymc4~^{Lmj;d3yr=;tu;!MnsDfIgqbb>K<+)xV|m$A5yZppX0xhn(tXBg4^Bf z`4kUtbjy z1rYQ0BE{-G=ceR6>;^yga|I$ zmd8Jj7xq6$zeg!qJ_o(C?bPd#ztz2z1PPx(^pdex0VoBwK>nV`Tg9hVqn%f|uLFma zGJ@?nC12s(>rJ>j3_X2G6Wre&2o3z(OE}M;JJ26VOHDD+u=ESFI%# zQ9rd7EzlL=tpZb}&K@7EN~O_&j?}dDM?sCaOI+aYE zB|F%ToP~siNtZ-d1q=c+fhb5+|1J1G!Nd4Wk5nG}TP;@}ArebAc~ZYpN$yd{5S$%o zFYzZ+kA8ZtBcI;IylF)fl7`DzvYO50rm(oc&)z&)tr;5ZAr<5-UtUkZ8oY)ZxayS5 zMpqT^QV`rlILQ;Z1l*Y?g|Ixy)Zwuf0waC%q8ZlkaK@n2CXy*ljps&osl>Q%RHiv_ zhGIQzJ%;0|*zrV2-~N=jf5^5;o~158xj=~}HQ{GtL1GIGR)*O?6pUmL&>9~fjjdK}gWs+y81x-% z2^LUqsymQ%u80cxBVv<|%5`v4tSEEURv|g5NT6-vduvrW@G7U2Z&;AQtn#bIklTUM}XJaPIQSYSf{WIHyq zoo?#vB_ga+aEH{|jS8dwc#h1WHCS;Ty@|=0*m$)7 zJ^*-i@wcG*uTZY7*YYYR^xOki6?{$0gc)^7?q-U@Q_GoTeRlKFcUv0Vnwt%BcjE^8 z9zRXjI(f_%`Vpa}tV-$Y9w@L`s{Zi;aUn~vS}RO$VN-@z23P78RnO=6lDG4tZ;^=Dmf%=hn1ZI&aDkNZt5k| z^&&T?H32HM5pod4J8LYdoat;`fv@?K2@D_mQ`z6}N*NVKg+R$t6o+~RYVP&{$ zeV3^PVVC;%w9@yH-jS5ng$DAL_iFe@&K`;P&G+W0eo$=}dnh7y)W6dmZ4a}ss^~j! z0bSm(pfX3uEiV(N=3k(SB_lq*1E%AH!xX5q9|I;%1(FJfk?vlAzh=_?o11*#Iw{T1 zS1|TFV30qfZX>lIk;Be`C{}O%d(i&{5RWgx%fq;Ay$}bj#7)m@ zkpDibJu}fv>=_nyWo6}8e3sb$2!8Zgl`7dQ7A>8&TM?5$`9FQ?oq+1D23vcb ztS1343_Z(>ksD%*WL-Ki{Nru3=0jKaR~nFmM^Soi=2Z%S`HHC{8Lmdgk<5H6&;a=E zf-DF!|3NGW8;nQYBobmh$eeIsRpgY7z@|2Z@f9E)jwz(lVniHo zKZ(L=RVq^BtHq71f3lO-`~@SG?gc2km{)u~y`@elTE!1J5du4-`!_E;8FqtY!9PjO z*JxRLt6}iGJ?#;>9Ee2~6)q>x*SRz#p!W>LV>*KX)jhwu%1646NR^e`}6} zID+Zl6!8Cy3zeZ@qlQwS-aeg}2mD0ibOu}2KA)tYepZUv9^x(1COQTZ)&QxRm3?A- z!t`Qr(ZL%(@`tUyFZNQ=FRyBPTd+7DA2#h`E{YfL)TOv|uwGcN;#ctYPbm5)^WZvh zXxhb;K6m%8`H#hKobUo$54&uE%b;+d*dM{wYPidwbB5d>fui_lmqCLijz5!-=X{7) zTIiA%|7TE;R{C;cQlzkBQomke9m@%)99+OR@%CZgopMf_^>FTByW{}9jLTLC`W zL97eFB$(ucSg(e~~K$WyG7;J_`KA)3GzPt4vIv zY{5rFaj66!yCN>}TD@$1gPj;}MOB%H~vMfGQp_zXd7irElVF!<{aQTZhR6 z6CLj|mK6IWXxpu!djHUZcgP2za3ZIO!n5u*(W1VO1m4G|$g2{EN5eit_I958X0M`k z>UF0GG|WdtKpHwY8|$NlcffDrW#R~_f^L1FLzL?5J~70y9h z!)b;3glb3A2{rmQ?Nq*!3#wo)fNs=ud*ixCn(znn-nR7!I#b14SJ|Fs4tc~iOQo#&ct#$TCDZOAWKiln+B#4~4}Bj1HHu}we9$p&3|Efj0} zRwj@LqdkS$|4c+z%*#d=vYszAyUSzddWt_9N+Y&IY)ku1QA+OC2z3W$Aai-Z3pYKR zG}x85APX(Z!*x{I@RoMbcisYQ##k3DqaanBX4LJ@hAo}Qj^omz?*LBpk}(+EQt7!e zEM%(Fa;tCT=Z6wvT%|p{nzb#5&NxU2Zf~%mj0ppbtOO3*70I_93EPT0cTNjLv?Wqf zEW=is;0xl@`#e^;?u1(5$shtdF^xKVu1B~sd>L)#6dTCqEGeIIlgOA96x**LDmAjq zrpeBwq7pYha~?^_%beb+&)In|$2jrg61eXx9M3LiWSz=zu;e+T!hKy1Zg%|DZC(3H zUjL_7I_Di+ZtNdvOT8H37Jw}8w`Q|?bp@ykiMz_P_CuC;q>uc3L<3~=ch55Rh`4DY z%U%1L{*mD4MpsIWq@T0Rj1trJ_Y~yY(C;{-F>_{>LWvtm0mm|retOJowu6;E3EaQAh>x&d7FR-UdvU@$R<L7axWm!NJ*MODRt%+?XEVO5>Kfd15k@+mh%RjWGSnuq3XTQXu01peOaq zQEz%{4Gf<=#F> z3({kT6j#VhiUQVd1Nz1Fv;HVyC$PR+TcC|v4B-3fB{0~aPq!={rX5}QTLgzP-$lAR zZ;<-EF!;!&M}K@CBSv>>Dt$m){G_bE-uLKUUd1$$rfo3#iG`ES)w(_PY| zG`kj;x69xagK{`7@k&ZS1^IOz#gs9)+2yq(&T{DU8zPUW)J7gnj zSX+W&hPk!+aVGp=UMs!QE4tsXa+RXYB%%w64e_%zw21syo%&-XY&{~fMV~Bq z4NoQ=jug{+&j+YV;gJozOygPiyQXZX+&1ddC+blY$Ndp6%i-Vp=D3i}e-3sI-?R0` z$7Sq%IFG3>DXG=OESOyomp=~OLL5D08Aa1^3ar8^D9=JsZlS*Yypy4tKmZhRdovQ3 z6|roTu%&n4-5+lld1s7Rcsv4uxGbFQwB-DCt~dv5^$9qA2mnXY2*A;AJS@+-LWsz= zLu1_!q|sL6q1(_24qQtYok;o4I4?60vdL+w?Xoy0xqX9kqBI2$=o@CzT~^KjDgE`$ zSM8t1MzYl9Wktto0N*?Pp1FsljuM#eU#e7U>P6TiwvRlVMBBL-7&YNtx&QUV?7~Fs z=EzHPbsQExJItS76kw`6u!kS->Dr=HkEv>nIp(o>%?kvIKRGQBB3L^I{(Wk_aSuA+ zosoghu?-&knvNaGr|cMkw4V=dXM6W!WT}y&gJ>w4`v-DVmaB7IZT_UBCnc>(-*62DUhcViN*2C!mL>>ctp_oK#$Y}pqE{0YP;GxOA-Y$69703R**12 z;{N319&nF`(e<0E0>gJ9EB=fNv)o zv840!fiB?I&3CJxB@a){5-B5p)?27Dux6V!n(WkVfacCCWj`kt{d!m7dGp=)u66_S z5L4h46M#Z*z`IX7@$!c0dx!gtt@~`AM8f_$?_X?LPHeLB&9(40J zR&Er#w?uHd@8TW0A~IobK?U!ct*R#aX(j!dfHl9qjC^uVol%|)`>X$LWA`aR-8-&e zXO?Q&*DuJ6CE%jp75;jMx&Q~CZvxfpJUQ5Z7eFqlP0k{ibpxI!e-FJQ7Ji8Y^p+V! z(SFK@d1>ja>){(W5mI&mQkod%ZIJ^@|F&D*g<^^^PmYHPT!6Q5&IG<|n5*>PJKF4w z3iyQ^DXGb}D|jnyld0zhlP)|7CPy!99SB6@&71+mJC{qvEZ)Wld;?DbcclgIp|iQx;MkJk?VzbK|y$jipHQ?NN@Rn2$6R;qx? zG^Ff;g~d!g4*`8SkMoNtqZZ7|CMjuBb|GNumg>kU)j5bpSvU|ojmA{VavrFfIs_Mul)GWbyvoF6HBVw0{)OU0~Ske)-J1oe=tC0UNa`9g( zwcl%qJm)nWnhkhvKa&*EH=FTi3U(!RXz`meMeF9ImIYCt%@m;s55))2yFjz`1Odyr zq#xG^c}ZP1s$(bC*o(E|?YQh+&}|#9pBBiP0&51^%5!#yvb7^k?zY+rPx}TE+%0q7 zHb@^^?_Hp;L)iMp>)&QbEY*M<8=f>vzO8%8#RI70vMB+R7XX?)E6cpfbIZiIK}WPk zH&S-k5ctT1|0PtMG&F&N>^KUXK*7G9b19@k{@AM1MByh?uWSi+SXfJO-3l}EHBVV-43MpU?4RC-jLkw;pkav zOc{;)aq0+C`bib>e|J~^d$*a-ow8f|Ooj4WE?rzX=0;8k$h^uWM9I@q=5F4(L$3j? z6Z3$8SkKQ|1bSxg#OQw{q+>BefFsuU&7 z1p%R;mm8=CkJ`G1e*69Wf9FgAw?k4u6pQ6tN4l z5LS@Jxl8Z9V~Udg>TpaRa%3ZZo#8kO<6-kmoVy5P0x6Ipfp# zYru=B#JIF~>*>F5A^w-IW291Ghxhy}e?IIyxQ!;9L4;J8F=LGBL>snrz;q5bK?;`a zQL=u7_&u#{v#|xq(4R;pkW~H#`8MaU(=)!}ys<(IG-Og`OO|jExcy<*2L}V$$CqZt zo}$SBB$S$XJp`E74;bwA(R~oW(R9>y=l(7JubBLEpoGi0i^@e25u(~}RQ>I?hU1Gy9eq+BD9eUUjt&6BqL^1s( zRlku$xF}8e`%d~={XyiVzjeN?Ik@%IkThIG>2?iN^s)7v^oeV>HzOmjxIIb@n%XU2 zT%3+&ein&tR(Sa(aKIK(70fueJ`vmmnAZ)094DdpS!P9S18g^nDX28_o~2_g8A(5& z=u3mnj?^t1j)ZJSZ<0rez_r=Gq$vDH-;)e{cld;9nhz`H%MtFKCe~>u2O0;ZOb8GjI9;y2jqW?~K

+b-ckOyd;q+Zu{C=L?E3-w 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 literal 0 HcmV?d00001 diff --git a/docs/search_index.json b/docs/search_index.json index a6c6f17..b5c6e55 100644 --- a/docs/search_index.json +++ b/docs/search_index.json @@ -1 +1 @@ -[["index.html", "AnVIL Book Name About this Book Skills Level AnVIL Collection", " AnVIL Book Name November 22, 2023 About this Book This book is part of a series of books for the Genomic Data Science Analysis, Visualization, and Informatics Lab-space (AnVIL) of the National Human Genome Research Institute (NHGRI). Learn more about AnVIL by visiting https://anvilproject.org or reading the article in Cell Genomics. Skills Level Genetics Programming skills AnVIL Collection Please check out our full collection of AnVIL and related resources: https://hutchdatascience.org/AnVIL_Collection/ "],["learning-objectives.html", "Learning Objectives", " Learning Objectives "],["introduction.html", "Chapter 1 Introduction 1.1 Motivation 1.2 Target Audience 1.3 Curriculum", " Chapter 1 Introduction 1.1 Motivation 1.2 Target Audience The course is intended for … 1.3 Curriculum The course covers… "],["a-new-chapter.html", "Chapter 2 A new chapter 2.1 Learning Objectives 2.2 Libraries 2.3 Subtopic 2.4 Print out session info", " Chapter 2 A new chapter *If you haven’t yet read the getting started Wiki pages; start there Every chapter needs to start out with this chunk of code: 2.1 Learning Objectives *Every chapter also needs Learning objectives that will look like this: This chapter will cover: {You can use https://tips.uark.edu/using-blooms-taxonomy/ to define some learning objectives here} {Another learning objective} 2.2 Libraries For this chapter, we’ll need the following packages attached: *Remember to add any additional packages you need to your course’s own docker image. library(magrittr) 2.3 Subtopic Here’s a subheading and some text in this subsection! 2.3.1 Code examples You can demonstrate code like this: output_dir <- file.path("resources", "code_output") if (!dir.exists(output_dir)) { dir.create(output_dir) } And make plots too: hist_plot <- hist(iris$Sepal.Length) You can also save these plots to file: png(file.path(output_dir, "test_plot.png")) hist_plot ## $breaks ## [1] 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 ## ## $counts ## [1] 5 27 27 30 31 18 6 6 ## ## $density ## [1] 0.06666667 0.36000000 0.36000000 0.40000000 0.41333333 0.24000000 0.08000000 ## [8] 0.08000000 ## ## $mids ## [1] 4.25 4.75 5.25 5.75 6.25 6.75 7.25 7.75 ## ## $xname ## [1] "iris$Sepal.Length" ## ## $equidist ## [1] TRUE ## ## attr(,"class") ## [1] "histogram" dev.off() ## png ## 2 2.3.2 Image example How to include a Google slide. It’s simplest to use the ottrpal package: But if you have the slide or some other image locally downloaded you can also use html like this: 2.3.3 Video examples To show videos in your course, you can use markdown syntax like this: A video we want to show Alternatively, you can use knitr::include_url() like this: Note that we are using echo=FALSE in the code chunk because we don’t want the code part of this to show up. If you are unfamiliar with how R Markdown code chunks work, read this. OR this works: 2.3.4 Links to files This works: Or this: This works. Or this: 2.3.5 Links to websites Examples of including a website link. This works: OR this: Another link OR this: 2.3.6 Citation examples We can put citations at the end of a sentence like this (Allaire et al. 2021). Or multiple citations Xie, Allaire, and Grolemund (2018). but they need a ; separator (Allaire et al. 2021; Xie, Allaire, and Grolemund 2018). In text, we can put citations like this Allaire et al. (2021). 2.3.7 Callout boxes There are some preset callout boxes available, which can be used like so: notice: Here’s something interesting. warning: Look out! dictionary: Here’s a definition. reflection: Consider this! github: Here’s how you use GitHub. wip: This section is a Work in Progress. 2.3.8 Dropdown summaries You can hide additional information in a dropdown menu Here’s more words that are hidden. 2.4 Print out session info You should print out session info when you have code for reproducibility purposes. devtools::session_info() ## ─ Session info ─────────────────────────────────────────────────────────────── ## setting value ## version R version 4.0.2 (2020-06-22) ## os Ubuntu 20.04.5 LTS ## system x86_64, linux-gnu ## ui X11 ## language (EN) ## collate en_US.UTF-8 ## ctype en_US.UTF-8 ## tz Etc/UTC ## date 2023-11-22 ## ## ─ Packages ─────────────────────────────────────────────────────────────────── ## package * version date lib source ## assertthat 0.2.1 2019-03-21 [1] RSPM (R 4.0.5) ## bookdown 0.24 2023-03-28 [1] Github (rstudio/bookdown@88bc4ea) ## bslib 0.4.2 2022-12-16 [1] CRAN (R 4.0.2) ## cachem 1.0.7 2023-02-24 [1] CRAN (R 4.0.2) ## callr 3.5.0 2020-10-08 [1] RSPM (R 4.0.2) ## cli 3.6.1 2023-03-23 [1] CRAN (R 4.0.2) ## crayon 1.3.4 2017-09-16 [1] RSPM (R 4.0.0) ## curl 4.3 2019-12-02 [1] RSPM (R 4.0.3) ## desc 1.2.0 2018-05-01 [1] RSPM (R 4.0.3) ## devtools 2.3.2 2020-09-18 [1] RSPM (R 4.0.3) ## digest 0.6.25 2020-02-23 [1] RSPM (R 4.0.0) ## ellipsis 0.3.1 2020-05-15 [1] RSPM (R 4.0.3) ## evaluate 0.20 2023-01-17 [1] CRAN (R 4.0.2) ## fansi 0.4.1 2020-01-08 [1] RSPM (R 4.0.0) ## fastmap 1.1.1 2023-02-24 [1] CRAN (R 4.0.2) ## fs 1.5.0 2020-07-31 [1] RSPM (R 4.0.3) ## glue 1.4.2 2020-08-27 [1] RSPM (R 4.0.5) ## highr 0.8 2019-03-20 [1] RSPM (R 4.0.3) ## hms 0.5.3 2020-01-08 [1] RSPM (R 4.0.0) ## htmltools 0.5.5 2023-03-23 [1] CRAN (R 4.0.2) ## httr 1.4.2 2020-07-20 [1] RSPM (R 4.0.3) ## jquerylib 0.1.4 2021-04-26 [1] CRAN (R 4.0.2) ## jsonlite 1.7.1 2020-09-07 [1] RSPM (R 4.0.2) ## knitr 1.33 2023-03-28 [1] Github (yihui/knitr@a1052d1) ## lifecycle 1.0.3 2022-10-07 [1] CRAN (R 4.0.2) ## magrittr * 2.0.3 2022-03-30 [1] CRAN (R 4.0.2) ## memoise 2.0.1 2021-11-26 [1] CRAN (R 4.0.2) ## ottrpal 1.0.1 2023-03-28 [1] Github (jhudsl/ottrpal@151e412) ## pillar 1.9.0 2023-03-22 [1] CRAN (R 4.0.2) ## pkgbuild 1.1.0 2020-07-13 [1] RSPM (R 4.0.2) ## pkgconfig 2.0.3 2019-09-22 [1] RSPM (R 4.0.3) ## pkgload 1.1.0 2020-05-29 [1] RSPM (R 4.0.3) ## png 0.1-8 2022-11-29 [1] CRAN (R 4.0.2) ## prettyunits 1.1.1 2020-01-24 [1] RSPM (R 4.0.3) ## processx 3.4.4 2020-09-03 [1] RSPM (R 4.0.2) ## ps 1.4.0 2020-10-07 [1] RSPM (R 4.0.2) ## R6 2.4.1 2019-11-12 [1] RSPM (R 4.0.0) ## readr 1.4.0 2020-10-05 [1] RSPM (R 4.0.2) ## remotes 2.2.0 2020-07-21 [1] RSPM (R 4.0.3) ## rlang 1.1.0 2023-03-14 [1] CRAN (R 4.0.2) ## rmarkdown 2.10 2023-03-28 [1] Github (rstudio/rmarkdown@02d3c25) ## rprojroot 2.0.3 2022-04-02 [1] CRAN (R 4.0.2) ## sass 0.4.5 2023-01-24 [1] CRAN (R 4.0.2) ## sessioninfo 1.1.1 2018-11-05 [1] RSPM (R 4.0.3) ## stringi 1.5.3 2020-09-09 [1] RSPM (R 4.0.3) ## stringr 1.4.0 2019-02-10 [1] RSPM (R 4.0.3) ## testthat 3.0.1 2023-03-28 [1] Github (R-lib/testthat@e99155a) ## tibble 3.2.1 2023-03-20 [1] CRAN (R 4.0.2) ## usethis 1.6.3 2020-09-17 [1] RSPM (R 4.0.2) ## utf8 1.1.4 2018-05-24 [1] RSPM (R 4.0.3) ## vctrs 0.6.1 2023-03-22 [1] CRAN (R 4.0.2) ## withr 2.3.0 2020-09-22 [1] RSPM (R 4.0.2) ## xfun 0.26 2023-03-28 [1] Github (yihui/xfun@74c2a66) ## yaml 2.2.1 2020-02-01 [1] RSPM (R 4.0.3) ## ## [1] /usr/local/lib/R/site-library ## [2] /usr/local/lib/R/library References "],["anvil-module-library.html", "Chapter 3 AnVIL Module Library 3.1 Include using cow::borrow_chapter() 3.2 Background Highlighting for Borrowed Chapters", " Chapter 3 AnVIL Module Library There are several pieces of content that are useful across multiple books, such as “How to Create a Workspace”. To reduce maintenance burden, the AnVIL_Template repository has a collection of _child R Markdown documents that can be included in your books. You can see all the available AnVIL modules in the AnVIL_Template book 3.1 Include using cow::borrow_chapter() To add a module to your book, include a code chunk with the cow::borrow_chapter() function, specifying the file for the module you want to borrow and the repository you want to borrow it from (the AnVIL_Template repository). See the OTTR_Template wiki page for the most recent instructions and additional details. Here is an example of including the _child_workspace_create.Rmd with cow::borrow_chapter() Launch Terra In the drop-down menu on the left, navigate to “Workspaces”. Click the triple bar in the top left corner to access the menu. Click “Workspaces”. Click on the plus icon near the top of left of the page. Name your Workspace and select the appropriate Billing Project. All activity in the Workspace will be charged to this Billing Project (regardless of who conducted it). If you are working with protected data, you can set the Authorization Domain to limit who can be added to your Workspace. Note that the Authorization Domain cannot be changed after the Workspace is created (i.e. there is no way to make this Workspace shareable with a larger audience in the future). Workspaces by default are only visible to people you specifically share them with. Authorization domains add an extra layer of enforcement over privacy, but by nature make sharing more complicated. We recommend using Authorization Domains in cases where it is extremely important and/or legally required that the data be kept private (e.g. protected patient data, industry data). For data you would merely prefer not be shared with the world, we recommend relying on standard Workspace sharing permissions rather than Authorization Domains, as Authorization Domains can make future collaborations, publications, or other sharing complicated. Click “CREATE WORKSPACE”. The new Workspace should now show up under your Workspaces. 3.2 Background Highlighting for Borrowed Chapters You can use the borrowed_chunk custom div block to highlight borrowed content or any other content you choose. Basic format: :::: {.borrowed_chunk} Code/Content here :::: Rendered with highlighting: If you do not already have a Google account that you would like to use for accessing Terra, create one now. If you would like to create a Google account that is associated with your non-Gmail, institutional email address, follow these instructions. Rendered without highlighting: If you do not already have a Google account that you would like to use for accessing Terra, create one now. If you would like to create a Google account that is associated with your non-Gmail, institutional email address, follow these instructions. "],["workspaces.html", "Chapter 4 Workspaces 4.1 Clone a Workspace 4.2 Create a Workspace 4.3 Open a Workspace 4.4 Share a Workspace", " Chapter 4 Workspaces Modules about Terra Workspaces 4.1 Clone a Workspace Launch Terra Locate the Workspace you want to clone. If a Workspace has been shared with you ahead of time, it will appear in “MY WORKSPACES”. You can clone a Workspace that was shared with you to perform your own analyses. In the screenshot below, no Workspaces have been shared. If a Workspace hasn’t been shared with you, navigate to the “FEATURED” or “PUBLIC” Workspace tabs. Use the search box to find the Workspace you want to clone. Click the teardrop button on the far right next to the Workspace you want to clone. Click “Clone”. You can also clone the Workspace from the Workspace Dashboard instead of the search results. You will see a popup box appear. Name your Workspace and select the appropriate Terra Billing Project. All activity in the Workspace will be charged to this Billing Project (regardless of who conducted it). Remember that each Workspace should have its own Billing Project. If you are working with protected data, you can set the Authorization Domain to limit who can be added to your Workspace. Note that the Authorization Domain cannot be changed after the Workspace is created (i.e. there is no way to make this Workspace shareable with a larger audience in the future). Workspaces by default are only visible to people you specifically share them with. Authorization domains add an extra layer of enforcement over privacy, but by nature make sharing more complicated. We recommend using Authorization Domains in cases where it is extremely important and/or legally required that the data be kept private (e.g. protected patient data, industry data). For data you would merely prefer not be shared with the world, we recommend relying on standard Workspace sharing permissions rather than Authorization Domains, as Authorization Domains can make future collaborations, publications, or other sharing complicated. Click “CLONE WORKSPACE”. The new Workspace should now show up under your Workspaces. 4.2 Create a Workspace Launch Terra In the drop-down menu on the left, navigate to “Workspaces”. Click the triple bar in the top left corner to access the menu. Click “Workspaces”. Click on the plus icon near the top of left of the page. Name your Workspace and select the appropriate Billing Project. All activity in the Workspace will be charged to this Billing Project (regardless of who conducted it). If you are working with protected data, you can set the Authorization Domain to limit who can be added to your Workspace. Note that the Authorization Domain cannot be changed after the Workspace is created (i.e. there is no way to make this Workspace shareable with a larger audience in the future). Workspaces by default are only visible to people you specifically share them with. Authorization domains add an extra layer of enforcement over privacy, but by nature make sharing more complicated. We recommend using Authorization Domains in cases where it is extremely important and/or legally required that the data be kept private (e.g. protected patient data, industry data). For data you would merely prefer not be shared with the world, we recommend relying on standard Workspace sharing permissions rather than Authorization Domains, as Authorization Domains can make future collaborations, publications, or other sharing complicated. Click “CREATE WORKSPACE”. The new Workspace should now show up under your Workspaces. 4.3 Open a Workspace Launch Terra In the drop-down menu on the left, navigate to “Workspaces”. Click the triple bar in the top left corner to access the menu. Click “Workspaces”. You are automatically directed to the “My Workspaces” tab. Here you can see any Workspaces that have been shared with you, along with your permission level. Reader means you can open the Workspace and see everything, but can’t do any computations or make any edits. Writer means you can run computations, which will charge costs to the Workspace’s Billing Project. Writers can also make edits to the Workspace. Owner is similar to Writer, but also allows you to control who can access the Workspace. Click on the name of a Workspace to open it. Opening and viewing a Workspace does not cost anything. When you open a Workspace, you are directed to the Workspace Dashboard. This generally has a description of the Workspace contents, as well as some useful details about the Workspace itself. From here you can navigate through the different tabs of the Workspace, and if you have sufficient permission, you can start running analyses. If you are only a Reader, you may need to “clone” (make your own copy) of the Workspace before you can start working. 4.4 Share a Workspace Launch Terra In the drop-down menu on the left, navigate to “Workspaces”. Click the triple bar in the top left corner to access the menu. Click “Workspaces”. Click on the name of the Workspace to open the Workspace. Opening a Workspace does not cost anything. Certain activities in the Workspace (such as running an analysis) will charge to the Workspace’s Billing Project. Workspace management (e.g. adding and removing members, editing the description) does not cost money. Click the teardrop button () on the right hand side to open the Workspace management menu. Click “Share” Enter the email address of the user or Group you’d like to share the Workspace with. If adding an individual, make sure to enter the account that they use to access AnVIL. If adding a Terra Group, use the Group email address, which can be found on the Terra Group management page. Choose their permission level. Remember that all activity in the Workspace will be charged to the Workspace’s Billing Project, regardless of who conducts it, so only add members as “Writers” or “Owners” if they should be charging to the Workspace’s Billing Project. “Readers” can view all parts of the Workspace but cannot make edits or run analyses (i.e. they cannot spend money). They can also clone their own copy of the Workspace where they can conduct activity on their own Billing Project. Click “Save”. The user should now be able to see the Workspace when logged in to Terra. "],["billing.html", "Chapter 5 Billing 5.1 Create Google Billing Account 5.2 Add Terra to Google Billing Account 5.3 Add Members to Google Billing Account 5.4 Set Alerts for Google Billing 5.5 View Spend for Google Billing 5.6 Create Terra Billing Project 5.7 Add Member to Terra Billing Project 5.8 Disable Terra Billing Project", " Chapter 5 Billing Modules about billing and Billing Projects on Google Cloud Platform and Terra. 5.1 Create Google Billing Account Log in to the Google Cloud Platform console using your Google ID. Make sure to use the same Google account ID you use to log into Terra. If you are a first time user, don’t forget to claim your free credits! If you haven’t been to the console before, once you accept the Terms of Service you will be greeted with an invitation to “Try for Free.” Follow the instructions to sign up for a Billing Account and get your credits. Choose “Individual Account”. This “billing account” is just for managing billing, so you don’t need to be able to add your team members. You will need to give either a credit card or bank account for security. Don’t worry! You won’t be billed until you explicitly turn on automatic billing. You can view and edit your new Billing Account, by selecting “Billing” from the left-hand menu, or going directly to the billing console console.cloud.google.com/billing Clicking on the Billing Account name will allow you to manage the account, including accessing reports, setting alerts, and managing payments and billing. At any point, you can create additional Billing Accounts using the Create Account button. We generally recommend creating a new Billing Account for each funding source. 5.2 Add Terra to Google Billing Account This gives Terra permission to create projects and send charges to the Google Billing Account, and must be done by an administrator of the Google Billing Account. Terra needs to be added as a “Billing Account User”: Log in to the Google Cloud Platform console using your Google ID. Navigate to Billing You may be automatically directed to view a specific Billing Account. If you see information about a single account rather than a list of your Billing Accounts, you can get back to the list by clicking “Manage Billing Accounts” from the drop-down menu. Check the box next to the Billing Account you wish to add Terra to, click “ADD MEMBER”. Enter terra-billing@terra.bio in the text box. In the drop-down menu, mouse over Billing, then choose “Billing Account User”. Click “SAVE”. 5.3 Add Members to Google Billing Account Anyone you wish to add to the Billing Account will need their own Google ID. To add a member to a Billing Project: Log in to the Google Cloud Platform console using your Google ID. Navigate to Billing You may be automatically directed to view a specific Billing Account. If you see information about a single account rather than a list of your Billing Accounts, you can get back to the list by clicking “Manage Billing Accounts” from the drop-down menu. Check the box next to the Billing Account you wish to add a member to, click “ADD MEMBER”. Enter their Google ID in the text box. In the drop-down menu, mouse over Billing, then choose the appropriate role. Click “SAVE”. 5.4 Set Alerts for Google Billing Log in to the Google Cloud Platform console using the Google ID associated with your Google Cloud projects. Open the dropdown menu on the top left and click on Billing. You may be automatically directed to view a specific Billing Account. If you see information about a single account (and it’s not the one you’re interested in), you can get back to the list of all your Billing Accounts by clicking “Manage Billing Accounts” from the drop-down menu. Click on the name of the Billing Account you want to set alerts for. In the left-hand menu, click “Budgets & alerts”. Click the “Create Budget” tab. Enter a name for your budget, and then choose which projects you want to monitor. Then click “Next”. For Budget Type, select “Specified amount”. Enter the total budget amount for the month (you will set alerts at different thresholds in the next step). Click “Next” (do not click “Finish”). Enter the threshold amounts where you want to receive an alert. We recommend starting with 50% and 90%. You can set other alerts if you prefer. Check the box for “Email alerts to billing admins and users”, then click “Finish”. Now you (as the owner and admin), along with anyone you added with admin or user privileges (e.g. lab managers) will receive alerts when your lab members reach the specified spending thresholds. These emails will be sent to the Gmail accounts associated with the Billing Account. You can edit your budgets at any time by going to Billing > Budgets & alerts, and clicking on the name of the budget you want to edit. 5.5 View Spend for Google Billing You can always check your current spend through the Google Billing console, but remember There is a reporting delay (~1 day), so you cannot immediately see what an analysis cost Costs are reported at the level of Workspaces, so if there are multiple people using a Workspace, you will not be able to determine which of them was responsible for the charges. The Google Billing console displays information by Billing Account. To view spending: Log in to the Google Cloud Platform console using the Google ID associated with your Google Cloud projects. Open the dropdown menu on the top left and click on Billing. You may be automatically directed to view a specific Billing Account. If you see information about a single account (and it’s not the one you’re interested in), you can get back to the list of all your Billing Accounts by clicking “Manage Billing Accounts” from the drop-down menu. Click on the name of the Billing Account for the project you want to view. Look at the top of the Overview tab to see your month-to-date spending. Scroll further down the Overview tab to show your top projects. Click on the Reports tab to see more detailed information about each of your projects. This is probably the most useful tab for exploring costs of individual projects over time. Click on the Cost table tab to obtain a convenient table of spending per project. 5.6 Create Terra Billing Project Launch Terra and sign in with your Google account. If this is your first time logging in to Terra, you will need to accept the Terms of Service. In the drop-down menu on the left, navigate to “Billing”. Click the triple bar in the top left corner to access the menu. Click the arrow next to your name to expand the menu, then click “Billing”. You can also navigate there directly with this link: https://anvil.terra.bio/#billing On the Billing page, click the “+ CREATE” button to create a new Billing Project. If prompted, select the Google account to use. If prompted, give Terra permission to manage Google Cloud Platform billing accounts. Enter a unique name for your Terra Billing Project and select the appropriate Google Billing Account. The name of the Terra Billing Project must: Only contain lowercase letters, numbers and hyphens Start with a lowercase letter Not end with a hyphen Be between 6 and 30 characters Select the Google Billing Account to use. All activities conducted under your new Terra Billing Project will charge to this Google Billing Account. If prompted, give Terra permission to manage Google Cloud Platform billing accounts. Click “CREATE BILLING PROJECT”. Your new Billing Project should now show up in the list of Billing Projects Owned by You. You can add additional members or can modify or deactivate the Billing Project at any time by clicking on its name in this list. The page doesn’t always update as soon as the Billing Project is created. If it’s been a couple of minutes and you don’t see a change, try refreshing the page. 5.7 Add Member to Terra Billing Project Launch Terra and sign in with your Google account. In the drop-down menu on the left, navigate to “Billing”. Click the triple bar in the top left corner to access the menu. Click the arrow next to your name to expand the menu, then click “Billing”. You can also navigate there directly with this link: https://anvil.terra.bio/#billing Click “Owned by You” and find the Billing Project. If you do not see the Billing Project in this list, then you are not an Owner and do not have permission to add members. Click on the name of the Billing Project. Click on the “Members” tab to view and manage members. Then click the “Add User” button. Enter the email address of the user or group you’d like to add the the Billing Project. If adding an individual, make sure to enter the account that they use to access AnVIL. If adding a Terra Group, use the Group email address, which can be found on the Terra Group management page. If this user or group will need to add and remove other users of the Billing Project, check the Owner box. Otherwise leave it unchecked. It’s often a good idea to have at least one other Owner of a Billing Project in order to avoid getting locked out, in case the original owner leaves or loses access to their account. Click “ADD USER”. You should now see the user or group listed in the Billing Project members, along with the appropriate role. They should now be able to use the Billing Project to fund work on AnVIL. If you need to remove members or modify their roles, you can do so at any time by clicking the teardrop button next to their name. 5.8 Disable Terra Billing Project By default this module includes a warning to make sure people understand they will lose access to their Workspace buckets. You can remove the warning from this module by setting AnVIL_module_settings$warning to FALSE before running cow::borrow_chapter: AnVIL_module_settings <- list( warning = FALSE ) cow::borrow_chapter( doc_path = "child/_child_terra_billing_project_disable.Rmd", repo_name = "jhudsl/AnVIL_Template" ) Disabling a Billing Project makes Workspace contents inaccessible! Disabling a Billing Project disables funding to all Workspaces funded by the Billing Project. You will be unable to compute in these Workspaces, and you will lose access to any data stored in the Workspace buckets. It is sometimes possible to restore access by reactivating billing, but Google makes no promises about whether or how long the data will be recoverable. Make sure everyone with Workspaces funded by the Billing Project has saved anything they want to keep in another location before disabling the Billing Project. To disable a Terra Billing Project (i.e. remove the Google Billing Account that funds the Terra Billing Project): Launch Terra and sign in with your Google account. In the drop-down menu on the left, navigate to “Billing”. Click the triple bar in the top left corner to access the menu. Click the arrow next to your name to expand the menu, then click “Billing”. You can also navigate there directly with this link: https://anvil.terra.bio/#billing Click “Owned by You” and find the Billing Project. If you do not see the Billing Project in this list, then you are not an Owner and do not have permission to add members. Click on the name of the Billing Project. If you don’t see information about the Billing Account, click on “View billing account” to expand the Billing Account information. You may be prompted to enter your login information again. You should see the name of the Google Billing Account that is funding this Terra Billing Project. Click on the teardrop icon next to the name of the Billing Account. Click “Remove Billing Account”. Click OK to confirm that you want to disable funding for this Billing Project. The page should now indicate that there is no linked billing account. If necessary, you can restore funding to the Billing Project and associated Workspaces by clicking the teardrop icon and selecting “Change Billing Account”. However, Google makes no promises about how long the Workspace contents will remain available after you disable funding, so it is best not to rely on them. "],["onboarding.html", "Chapter 6 Onboarding 6.1 Create Google Account", " Chapter 6 Onboarding Joining a team on AnVIL. 6.1 Create Google Account If you do not already have a Google account that you would like to use for accessing Terra, create one now. If you would like to create a Google account that is associated with your non-Gmail, institutional email address, follow these instructions. "],["using-programming-platforms-on-anvil.html", "Chapter 7 Using programming platforms on AnVIL 7.1 Video overview on using Jupyter Notebooks 7.2 Launching Jupyter 7.3 Video overview on using Galaxy 7.4 Starting Galaxy 7.5 Navigating Galaxy 7.6 Deleting Galaxy 7.7 Video overview on using RStudio 7.8 Launching RStudio 7.9 Touring RStudio 7.10 Pausing RStudio 7.11 Deleting RStudio", " Chapter 7 Using programming platforms on AnVIL Modules about opening, touring, and closing AnVIL platforms 7.1 Video overview on using Jupyter Notebooks Here is a video tutorial that describes the basics of using Jupyter Notebook on AnVIL. 7.1.1 Objectives Start compute for your Jupyter environment Create notebook to perform analysis Stop compute to minimize expenses 7.1.2 Slides The slides for this tutorial are are located here. 7.2 Launching Jupyter AnVIL is very versatile and can scale up to use very powerful cloud computers. It’s very important that you select a cloud computing environment appropriate to your needs to avoid runaway costs. If you are uncertain, start with the default settings; it is fairly easy to increase your compute resources later, if needed, but harder to scale down. Note that, in order to use Jupyter, you must have access to a Terra Workspace with permission to compute (i.e. you must be a “Writer” or “Owner” of the Workspace). Open Terra - use a web browser to go to anvil.terra.bio In the drop-down menu on the left, navigate to “Workspaces”. Click the triple bar in the top left corner to access the menu. Click “Workspaces”. Click on the name of your Workspace. You should be routed to a link that looks like: https://anvil.terra.bio/#workspaces/<billing-project>/<workspace-name>. Click on the cloud icon on the far right to access your Cloud Environment options. In the dialogue box, click the “Settings” button under Jupyter. You will see some configuration options for the Jupyter cloud environment, and a list of costs because it costs a small amount of money to use cloud computing. Configure any settings you need for your cloud environment. If you are uncertain about what you need, the default configuration is a reasonable, cost-conservative choice. It is fairly easy to increase your compute resources later, if needed, but harder to scale down. Scroll down and click the “CREATE” button when you are satisfied with your setup. The dialogue box will close and you will be returned to your Workspace. You can see the status of your cloud environment by hovering over the Jupyter icon. It will take a few minutes for Terra to request computers and install software. When your environment is ready, its status will change to “Running”. Click on the “ANALYSES” tab to create or open a Jupyter Notebook. From the ANALYSES tab, you can click on the name of an existing Jupyter Notebook to view and launch it, or click the “START” button to create a new Notebook. Clicking on a Notebook name will open a static preview of the Notebook. To edit and run the Notebook, click the “OPEN” button. 7.3 Video overview on using Galaxy Here is a video tutorial that describes the basics of using Galaxy on AnVIL. 7.3.1 Objectives Start compute for your Galaxy on AnVIL Run tool to quality control sequencing reads Stop compute to minimize expenses 7.3.2 Slides The slides for this tutorial are are located here. 7.4 Starting Galaxy Note that, in order to use Galaxy, you must have access to a Terra Workspace with permission to compute (i.e. you must be a “Writer” or “Owner” of the Workspace). Open your Workspace, and click on the “NOTEBOOKS” tab. Next, click on “Create a Cloud Environment for Galaxy”. You should see a popup window on the right side of the screen. Click on “NEXT” and “CREATE” to keep all settings as-is. This will take 8-10 minutes. When it is done, click “LAUNCH GALAXY”. 7.5 Navigating Galaxy Notice the three main sections. Tools - These are all of the bioinformatics tool packages available for you to use. The Main Dashboard - This contains flash messages and posts when you first open Galaxy, but when we are using data this is the main interface area. History - When you start a project you will be able to see all of the documents in the project in the history. Now be aware, this can become very busy. Also the naming that Galaxy uses is not very intuitive, so you must make sure that you label your files with something that makes sense to you. On the welcome page, there are links to tutorials. You may try these out on your own. If you want to try a new analysis this is a good place to start. 7.6 Deleting Galaxy Once you are done with your activity, you’ll need to shut down your Galaxy cloud environment. This frees up the cloud resources for others and minimizes computing cost. The following steps will delete your work, so make sure you are completely finished at this point. Otherwise, you will have to repeat your work from the previous steps. Return to AnVIL, and find the Galaxy logo that shows your cloud environment is running. Click on this logo: Next, click on “DELETE ENVIRONMENT OPTIONS”: Finally, select “Delete everything, including persistent disk”. Make sure you are done with the activity and then click “DELETE”. 7.7 Video overview on using RStudio Here is a video tutorial that describes the basics of using RStudio on AnVIL. 7.7.1 Objectives Start compute for your RStudio environment Tour RStudio on AnVIL Stop compute to minimize expenses 7.7.2 Slides The slides for this tutorial are are located here. 7.8 Launching RStudio AnVIL is very versatile and can scale up to use very powerful cloud computers. It’s very important that you select a cloud computing environment appropriate to your needs to avoid runaway costs. If you are uncertain, start with the default settings; it is fairly easy to increase your compute resources later, if needed, but harder to scale down. Note that, in order to use RStudio, you must have access to a Terra Workspace with permission to compute (i.e. you must be a “Writer” or “Owner” of the Workspace). Open Terra - use a web browser to go to anvil.terra.bio In the drop-down menu on the left, navigate to “Workspaces”. Click the triple bar in the top left corner to access the menu. Click “Workspaces”. Click on the name of your Workspace. You should be routed to a link that looks like: https://anvil.terra.bio/#workspaces/<billing-project>/<workspace-name>. Click on the cloud icon on the far right to access your Cloud Environment options. In the dialogue box, click the “Settings” button under RStudio. You will see some details about the default RStudio cloud environment, and a list of costs because it costs a small amount of money to use cloud computing. If you are uncertain about what you need, the default configuration is a reasonable, cost-conservative choice. It is fairly easy to increase your compute resources later, if needed, but harder to scale down. Click the “Create” button. Otherwise, click “CUSTOMIZE” to modify the environment for your needs. The dialogue box will close and you will be returned to your Workspace. You can see the status of your cloud environment by hovering over the RStudio logo. It will take a few minutes for Terra to request computers and install software. When your environment is ready, its status will change to “Running”. Click on the RStudio logo to open a new dialogue box that will let you launch RStudio. Click the launch icon to open RStudio. This is also where you can pause, modify, or delete your environment when needed. You should now see the RStudio interface with information about the version printed to the console. 7.9 Touring RStudio Next, we will be using RStudio and the package Glimma to create interactive plots. See this vignette for more information. The Bioconductor team has created a very useful package to programmatically interact with Terra and Google Cloud. Install the AnVIL package. It will make some steps easier as we go along. You can now quickly install precompiled binaries using the AnVIL package’s install() function. We will use it to install the Glimma package and the airway package. The airway package contains a SummarizedExperiment data class. This data describes an RNA-Seq experiment on four human airway smooth muscle cell lines treated with dexamethasone. {Note: for some of the packages, you will have to install packaged from the CRAN repository, using the install.packages() function. The examples will show you which install method to use.} <img src="07-using_platforms_modules_files/figure-html//1BLTCaogA04bbeSD1tR1Wt-mVceQA6FHXa8FmFzIARrg_g11f12bc99af_0_56.png" title="Screenshot of the RStudio environment interface. Code has been typed in the console and is highlighted." alt="Screenshot of the RStudio environment interface. Code has been typed in the console and is highlighted." width="100%" /> Load the example data. The multidimensional scaling (MDS) plot is frequently used to explore differences in samples. When this data is MDS transformed, the first two dimensions explain the greatest variance between samples, and the amount of variance decreases monotonically with increasing dimension. The following code will launch a new window where you can interact with the MDS plot. Change the colour_by setting to “groups” so you can easily distinguish between groups. In this data, the “group” is the treatment. You can download the interactive html file by clicking on “Save As”. You can also download plots and other files created directly in RStudio. To download the following plot, click on “Export” and save in your preferred format to the default directory. This saves the file in your cloud environment. You should see the plot in the “Files” pane. Select this file and click “More” > “Export” Select “Download” to save the file to your local machine. 7.10 Pausing RStudio The right-hand side icon reminds you that you are accruing cloud computing costs. If you don’t see this icon, you may need to scroll to the right. You should minimize charges when you are not performing an analysis. You can do this by clicking on the RStudio icon and selecting “Pause”. This will release the CPU and memory resources for other people to use. Note that your work will be saved in the environment and continue to accrue a very small cost. This work will be lost if the cloud environment gets deleted. If there is anything you would like to save permanently, it’s a good idea to copy it from your compute environment to another location, such as the Workspace bucket, GitHub, or your local machine, depending on your needs. You can also pause your cloud environment(s) at https://anvil.terra.bio/#clusters. 7.11 Deleting RStudio Pausing your cloud environment only temporarily stops your work. When you are ready to delete the cloud environment, click on the RStudio icon on the right-hand side and select “Settings”. If you don’t see this icon, you may need to scroll to the right. Click on “Delete Environment”. If you are certain that you do not need the data and configuration on your disk, you should select “Delete everything, including persistent disk”. If there is anything you would like to save, open the compute environment and copy the file(s) from your compute environment to another location, such as the Workspace bucket, GitHub, or your local machine, depending on your needs. Select “DELETE”. You can also delete your cloud environment(s) and disk storage at https://anvil.terra.bio/#clusters. "],["student-instructions.html", "Chapter 8 Student instructions 8.1 Student Account Setup 8.2 Student instructions for cloning a Workspace 8.3 Student instructions for launching Jupyter 8.4 Student instructions for launching RStudio", " Chapter 8 Student instructions Modules aimed at students in a course or workshop. 8.1 Student Account Setup In order to run your analyses, you will use the AnVIL cloud computing platform, so that you do not need to install everything on your own computer. The AnVIL (Analysis Visualization and Informatics Lab-space) platform is specially designed for analyzing biological data, and is used by scientists doing all sorts of biological research. AnVIL in a nutshell Behind the scenes, AnVIL relies on Google Cloud Platform to provide computing infrastructure. Basically, AnVIL lets you “rent” computers from Google (remotely). Whenever you run an analyses on AnVIL, it actually runs on one of Google’s computers, and AnVIL lets you see the results in your browser. AnVIL uses Terra to provide many computational tools useful for biological data analysis, such as RStudio, Galaxy, and Jupyter Notebooks. Terra takes care of installing these tools on Google’s computers, so that you can just start using them. 8.1.1 Create Google Account First, you will need to set up a (free) Google account. If you do not already have a Google account that you would like to use for accessing AnVIL, create one now. Alternatively, if you would like to create a Google account that is associated with an existing non-Gmail email address, you can follow these instructions. 8.1.2 Log In to Terra Next, make sure you can log in to Terra – you will use Terra to perform computations on AnVIL. You can access Terra by going to anvil.terra.bio, or by clicking the link on the AnVIL home page. Open Terra, and you should be prompted to sign in with your Google account. 8.1.3 Share Username Finally, make sure your instructor has your Google account username (e.g. myname@gmail.com), so they can give you access to everything you need. Make sure there are no typos! If you have multiple Google accounts, make sure you give them the username that you will be using to access AnVIL It is very important that you share the Google account you will be using to access AnVIL with with your instructor! Otherwise, the instructor cannot add you to Billing Projects or Workspaces, and you will be unable to proceed with your assignments. 8.2 Student instructions for cloning a Workspace These instructions can be customized to a specific workspace by setting certain variables before running cow::borrow_chapter(). If these variables have not been set, reasonable defaults are provided (e.g. “ask your instructor”). 8.2.1 With no variables set: This will not work until your instructor has given you permission to spend money to “rent” the computers that will power your analyses (by adding you to a “Billing Project”). On AnVIL, you access files and computers through Workspaces. Each Workspace functions almost like a mini code laboratory - it is a place where data can be examined, stored, and analyzed. The first thing we want to do is to copy or “clone” a Workspace to create a space for you to experiment. This will give you access to the files you will need (data, code) the computing environment you will use Tip At this point, it might make things easier to open up a new window in your browser and split your screen. That way, you can follow along with this guide on one side and execute the steps on the other. To clone an AnVIL Workspace: Open Terra - use a web browser to go to anvil.terra.bio In the drop-down menu on the left, navigate to “Workspaces”. Click the triple bar in the top left corner to access the menu. Click “Workspaces”. You are automatically directed to the “MY WORKSPACES” tab. Here you can see any Workspaces that have been shared with you, along with your permission level. Depending on how your instructor has set things up, you may or may not see any Workspaces in this tab. Locate the Workspace specified by your instructor. (The images below show the SARS-CoV-2-Genome Workspace as an example, but you should look for the Workspace specified by your instructor.) If it has been shared with you ahead of time, it will appear in “MY WORKSPACES”. Otherwise, select the “PUBLIC” tab. In the top search bar, type the Workspace name specified by your instructor. You can also go directly to the Workspace by clicking this link: ask your instructor. Clone the workspace by clicking the teardrop button (). Select “Clone”. Or, if you have opened the Workspace, you can find the teardrop button on the top right of the Workspace. You will see a popup box appear, asking you to configure your Workspace Give your Workspace clone a name by adding an underscore (“_“) and your name. For example, \"ExampleWorkspace_Firstname_Lastname\". Select the Billing Project provided by your instructor. Leave the bottom two boxes as-is. Click “CLONE WORKSPACE”. The new Workspace should now show up under “MY WORKSPACES”. You now have your own copy of the Workspace to work in. 8.2.2 With variables set: This will not work until your instructor has given you permission to spend money to “rent” the computers that will power your analyses (by adding you to a “Billing Project”). On AnVIL, you access files and computers through Workspaces. Each Workspace functions almost like a mini code laboratory - it is a place where data can be examined, stored, and analyzed. The first thing we want to do is to copy or “clone” a Workspace to create a space for you to experiment. This will give you access to the files you will need (data, code) the computing environment you will use Tip At this point, it might make things easier to open up a new window in your browser and split your screen. That way, you can follow along with this guide on one side and execute the steps on the other. To clone an AnVIL Workspace: Open Terra - use a web browser to go to anvil.terra.bio In the drop-down menu on the left, navigate to “Workspaces”. Click the triple bar in the top left corner to access the menu. Click “Workspaces”. You are automatically directed to the “MY WORKSPACES” tab. Here you can see any Workspaces that have been shared with you, along with your permission level. Depending on how your instructor has set things up, you may or may not see any Workspaces in this tab. Locate the Workspace Example_Workspace. (The images below show the SARS-CoV-2-Genome Workspace as an example, but you should look for the Workspace Example_Workspace.) If it has been shared with you ahead of time, it will appear in “MY WORKSPACES”. Otherwise, select the “PUBLIC” tab. In the top search bar, type the Workspace name Example_Workspace. You can also go directly to the Workspace by clicking this link: http://example.com/. Clone the workspace by clicking the teardrop button (). Select “Clone”. Or, if you have opened the Workspace, you can find the teardrop button on the top right of the Workspace. You will see a popup box appear, asking you to configure your Workspace Give your Workspace clone a name by adding an underscore (“_“) and your name. For example, \"Example_Workspace_Firstname_Lastname\". Select the Billing Project Example Billing Project. Leave the bottom two boxes as-is. Click “CLONE WORKSPACE”. The new Workspace should now show up under “MY WORKSPACES”. You now have your own copy of the Workspace to work in. 8.3 Student instructions for launching Jupyter The module below is specially customized for students, allowing you to give more specific instructions on the settings for their Jupyter environment. There are several other general purpose modules that may also be useful for students (e.g. Pausing Jupyter, Deleting Jupyter) that can be found in other chapters of this book. The following instructions can be customized by setting certain variables before running cow::borrow_chapter(). Developers should create these variables as a list AnVIL_module_settings. The following variables can be provided: audience = Defaults to general, telling them to use the default Jupyter settings. If audience is set to student, it gives more specific instructions. docker_image = Optional, it will tell them how to set the image. startup_script = Optional, it will tell them how to set the script. 8.3.1 Using default Jupyter environment: AnVIL is very versatile and can scale up to use very powerful cloud computers. It’s very important that you select the cloud computing environment described here to avoid runaway costs. Open Terra - use a web browser to go to anvil.terra.bio In the drop-down menu on the left, navigate to “Workspaces”. Click the triple bar in the top left corner to access the menu. Click “Workspaces”. Click on the name of your Workspace. You should be routed to a link that looks like: https://anvil.terra.bio/#workspaces/<billing-project>/<workspace-name>. Click on the cloud icon on the far right to access your Cloud Environment options. In the dialogue box, click the “Settings” button under Jupyter. You will see some configuration options for the Jupyter cloud environment, and a list of costs because it costs a small amount of money to use cloud computing. Leave everything else as-is. To create your Jupyter Cloud Environment, scroll down and click the “CREATE” button. The dialogue box will close and you will be returned to your Workspace. You can see the status of your cloud environment by hovering over the Jupyter icon. It will take a few minutes for Terra to request computers and install software. When your environment is ready, its status will change to “Running”. Click on the “ANALYSES” tab to create or open a Jupyter Notebook. From the ANALYSES tab, you can click on the name of an existing Jupyter Notebook to view and launch it, or click the “START” button to create a new Notebook. 8.3.2 Using custom Jupyter environment: AnVIL is very versatile and can scale up to use very powerful cloud computers. It’s very important that you select the cloud computing environment described here to avoid runaway costs. Open Terra - use a web browser to go to anvil.terra.bio In the drop-down menu on the left, navigate to “Workspaces”. Click the triple bar in the top left corner to access the menu. Click “Workspaces”. Click on the name of your Workspace. You should be routed to a link that looks like: https://anvil.terra.bio/#workspaces/<billing-project>/<workspace-name>. Click on the cloud icon on the far right to access your Cloud Environment options. In the dialogue box, click the “Settings” button under Jupyter. You will see some configuration options for the Jupyter cloud environment, and a list of costs because it costs a small amount of money to use cloud computing. Under “Application configuration” you will see a dropdown menu. Choose “Custom Environment”. Then copy the following link into “Container image” textbox: example docker Under “Startup script” you will see textbox. Copy the following link into the box: example startup script Leave everything else as-is. To create your Jupyter Cloud Environment, scroll down and click the “CREATE” button. The dialogue box will close and you will be returned to your Workspace. You can see the status of your cloud environment by hovering over the Jupyter icon. It will take a few minutes for Terra to request computers and install software. When your environment is ready, its status will change to “Running”. Click on the “ANALYSES” tab to create or open a Jupyter Notebook. From the ANALYSES tab, you can click on the name of an existing Jupyter Notebook to view and launch it, or click the “START” button to create a new Notebook. 8.4 Student instructions for launching RStudio The module below is specially customized for students, allowing you to give more specific instructions on the settings for their RStudio environment. There are several other general purpose modules that may also be useful for students (e.g. Pausing RStudio, Deleting RStudio) that can be found in other chapters of this book. The following instructions can be customized by setting certain variables before running cow::borrow_chapter(). Developers should create these variables as a list AnVIL_module_settings. The following variables can be provided: audience = Defaults to general, telling them to use the default RStudio settings. If audience is set to student, it gives more specific instructions. docker_image = Optional, it will tell them to open the customization dialogue and direct them on how to set the image. startup_script = Optional, it will tell them to open the customization dialogue and direct them on how to set the script. 8.4.1 Using default RStudio environment: AnVIL is very versatile and can scale up to use very powerful cloud computers. It’s very important that you select the cloud computing environment described here to avoid runaway costs. Open Terra - use a web browser to go to anvil.terra.bio In the drop-down menu on the left, navigate to “Workspaces”. Click the triple bar in the top left corner to access the menu. Click “Workspaces”. Click on the name of your Workspace. You should be routed to a link that looks like: https://anvil.terra.bio/#workspaces/<billing-project>/<workspace-name>. Click on the cloud icon on the far right to access your Cloud Environment options. In the dialogue box, click the “Settings” button under RStudio. You will see some details about the default RStudio cloud environment, and a list of costs because it costs a small amount of money to use cloud computing. Click the “CREATE” button. The dialogue box will close and you will be returned to your Workspace. You can see the status of your cloud environment by hovering over the RStudio logo. It will take a few minutes for Terra to request computers and install software. When your environment is ready, its status will change to “Running”. Click on the RStudio logo to open a new dialogue box that will let you launch RStudio. Click the launch icon to open RStudio. This is also where you can pause, modify, or delete your environment when needed. You should now see the RStudio interface with information about the version printed to the console. 8.4.2 Using custom RStudio environment: AnVIL is very versatile and can scale up to use very powerful cloud computers. It’s very important that you select the cloud computing environment described here to avoid runaway costs. Open Terra - use a web browser to go to anvil.terra.bio In the drop-down menu on the left, navigate to “Workspaces”. Click the triple bar in the top left corner to access the menu. Click “Workspaces”. Click on the name of your Workspace. You should be routed to a link that looks like: https://anvil.terra.bio/#workspaces/<billing-project>/<workspace-name>. Click on the cloud icon on the far right to access your Cloud Environment options. In the dialogue box, click the “Settings” button under RStudio. You will see some details about the default RStudio cloud environment, and a list of costs because it costs a small amount of money to use cloud computing. Click “CUSTOMIZE” to adjust the settings for your environment. Under “Application configuration” you will see a dropdown menu. You can also enter text here. Copy the following link into the box: example docker Under “Startup script” you will see textbox. Copy the following link into the box: example startup script Leave everything else as-is. To create your RStudio Cloud Environment, click on the “CREATE” button. The dialogue box will close and you will be returned to your Workspace. You can see the status of your cloud environment by hovering over the RStudio logo. It will take a few minutes for Terra to request computers and install software. When your environment is ready, its status will change to “Running”. Click on the RStudio logo to open a new dialogue box that will let you launch RStudio. Click the launch icon to open RStudio. This is also where you can pause, modify, or delete your environment when needed. You should now see the RStudio interface with information about the version printed to the console. "],["user-management.html", "Chapter 9 User Management 9.1 Create Terra Group 9.2 Add Member to Terra Group 9.3 Find Group Email", " Chapter 9 User Management Modules about Groups and user management 9.1 Create Terra Group Launch Terra and sign in with your Google account. In the drop-down menu on the left, navigate to “Groups”. Click the triple bar in the top left corner to access the menu. Click the arrow next to your name to expand the menu, then click “Groups”. You can also navigate there directly with this link: https://anvil.terra.bio/#groups Click “+ Create a New Group” Enter a name for your group. Names must be unique, so it’s often helpful to include your team’s name, the purpose of the group, and optionally the timeframe, if you will have similar groups in the future. Click “CREATE GROUP” Your new Group should now show up on the Group Management screen. Take note of the email address associated with your group. You will use this email to grant the group access to Billing Projects and Workspaces. 9.2 Add Member to Terra Group Launch Terra and sign in with your Google account. In the drop-down menu on the left, navigate to “Groups”. Click the triple bar in the top left corner to access the menu. Click the arrow next to your name to expand the menu, then click “Groups”. You can also navigate there directly with this link: https://anvil.terra.bio/#groups Find the name of the Group you want to add someone to, and confirm that you have Admin privileges for the Group (you can only add and remove members to a Group if you are an Admin). Click on the name of the Group to view and manage members. Click on “+ Add User”. You will be prompted to enter the user’s AnVIL ID. Type in the user’s email address. Make sure this is the account that they will be using to access AnVIL. If this member will need to add and remove other members of the Group, check the box for “Can manage members (admin)”. This will add them as an “Admin” for the Group. Otherwise leave it unchecked, and they will be added as a “Member”. Admins and Members have equal access to any resources shared with the Group. Admins can manage Group membership - they can add, remove, or change the role of other Group members. Click ADD USER. This will take you back to the Group administration page. The new Group member will now be shown in the list of group members, along with their role. They should now have access to anything that the Group has been given access to. If you need to remove members or modify their roles, you can do so at any time by clicking the teardrop button next to their name. 9.3 Find Group Email Launch Terra and sign in with your Google account. In the drop-down menu on the left, navigate to “Groups”. Click the triple bar in the top left corner to access the menu. Click the arrow next to your name to expand the menu, then click “Groups”. You can also navigate there directly with this link: https://anvil.terra.bio/#groups Find the name of the Group, then look in the “Group Email” column to find the email address associated with the Group. Copy this email address and paste it in as the username when adding people to Billing Projects and Workspaces. This will grant everyone in the Group access to the Billing Project or Workspace. "],["why-anvil.html", "Chapter 10 Why AnVIL 10.1 Why AnVIL for Instructors?", " Chapter 10 Why AnVIL Modules describing why AnVIL is useful for different personas. 10.1 Why AnVIL for Instructors? You may be wondering if AnVIL is a good choice for your class. We feel the answer is an unequivocal YES! AnVIL provides all the advantages of a cloud computing environment: Version control: All students will be using the exact same versions of programs, running on the exact same operating system, and the majority of setup can be handled for the students ahead of time. This greatly reduces time spent on setup and prevents unexpected run errors during the activities, limiting the amount of troubleshooting you have to do. As a result, classes and activities will run more smoothly and predictably. Inclusivity: Cloud-computing enables all students to participate in the activity without needing to provide computers with certain specifications. Experience: Cloud-computing is becoming common in today’s bioinformatics workplaces, and the classroom is a low-stress and low-stakes opportunity for students to gain experience. AnVIL is purpose-built for genomic data science: Tools: Through AnVIL, students can access a wide range of tools (Galaxy, RStudio/Bioconductor, Jupyter, as well as scripted workflows) all in one place, and can easily transition between them. Datasets: AnVIL provides a large and growing collection of relevant datasets with standardized organization, for easier importing and processing. Authenticity: On AnVIL, students will be working in the same environment as scientists carrying out cutting edge research. "],["instructor-modules.html", "Chapter 11 Instructor modules 11.1 Why AnVIL for Instructors? 11.2 Checklist Link 11.3 Checklist Timeline (premade content) 11.4 Recommendation to use STRIDES", " Chapter 11 Instructor modules Modules aimed at instructors. 11.1 Why AnVIL for Instructors? You may be wondering if AnVIL is a good choice for your class. We feel the answer is an unequivocal YES! AnVIL provides all the advantages of a cloud computing environment: Version control: All students will be using the exact same versions of programs, running on the exact same operating system, and the majority of setup can be handled for the students ahead of time. This greatly reduces time spent on setup and prevents unexpected run errors during the activities, limiting the amount of troubleshooting you have to do. As a result, classes and activities will run more smoothly and predictably. Inclusivity: Cloud-computing enables all students to participate in the activity without needing to provide computers with certain specifications. Experience: Cloud-computing is becoming common in today’s bioinformatics workplaces, and the classroom is a low-stress and low-stakes opportunity for students to gain experience. AnVIL is purpose-built for genomic data science: Tools: Through AnVIL, students can access a wide range of tools (Galaxy, RStudio/Bioconductor, Jupyter, as well as scripted workflows) all in one place, and can easily transition between them. Datasets: AnVIL provides a large and growing collection of relevant datasets with standardized organization, for easier importing and processing. Authenticity: On AnVIL, students will be working in the same environment as scientists carrying out cutting edge research. 11.2 Checklist Link Here is a checklist to help you keep track of the steps for setting up and teaching on AnVIL. Details about each of these steps can be found in the AnVIL Instructor Guide. Note that this checklist is written for workshop instructors as well as classroom instructors, so some of the “Event Setup” steps may not be applicable to you, depending on your teaching context. 11.3 Checklist Timeline (premade content) 1+ month before: Figure out how you will fund the class/workshop. Start working through INSTRUCTOR SETUP. It’s a good idea to get billing figured out with plenty of time to spare. Take some time to familiarize yourself with the content and make any desired updates or customizations. Do any necessary EVENT SETUP steps. ~1 week before: Start working through RUNNING THE CLASS. If possible, have students log in to AnVIL and send you their usernames, so you can add them to the Student Group ahead of time. This saves time on the day of the class. Do not add students to your Billing Project ahead of time. This prevents them from accruing costs. Day of (or shortly before): Add students to Billing Project. Have students clone the Workspace (They cannot do this until you have added them to the Billing Project. As soon as they do this, they can start computing.). After: Collect feedback, if you didn’t do it during the class/workshop. Work though EVENT WRAP-UP - until you shut things down, you will continue to accrue costs. 11.4 Recommendation to use STRIDES If you are new to AnVIL, we strongly recommend seeking funding through NHGRI / STRIDES for teaching your course. In order to prevent abuse, Google sets certain limits on cloud resources available to new users that can complicate teaching (e.g. project quotas). As you or your institution builds a payment history with Google, the limits on your accounts will be relaxed. In the meantime, STRIDES funding can help ensure your initial classes run smoothly. What is STRIDES? NHGRI’s strategic vision highlights the importance of training the next generation of genomic scientists. In collaboration with the NIH Office of Data Science Strategy, NHGRI makes funding available to AnVIL users through the STRIDES program, which aims to promote biological research in cloud environments. To inquire about funding your class on AnVIL, please contact help@lists.anvilproject.org. "],["about-the-authors.html", "About the Authors", " About the Authors These credits are based on our course contributors table guidelines.     Credits Names Pedagogy Lead Content Instructor(s) FirstName LastName Lecturer(s) (include chapter name/link in parentheses if only for specific chapters) - make new line if more than one chapter involved Delivered the course in some way - video or audio Content Author(s) (include chapter name/link in parentheses if only for specific chapters) - make new line if more than one chapter involved If any other authors besides lead instructor Content Contributor(s) (include section name/link in parentheses) - make new line if more than one section involved Wrote less than a chapter AnVIL instructions: Katherine Cox, Ava Hoffman, Elizabeth Humphries Content Editor(s)/Reviewer(s) Checked your content Content Director(s) Helped guide the content direction Content Consultants (include chapter name/link in parentheses or word “General”) - make new line if more than one chapter involved Gave high level advice on content AnVIL instructions: Allie Cliffe Acknowledgments Gave small assistance to content but not to the level of consulting Production Content Publisher(s) Helped with publishing platform Content Publishing Reviewer(s) Reviewed overall content and aesthetics on publishing platform Technical Course Publishing Engineer(s) Helped with the code for the technical aspects related to the specific course generation Template Publishing Engineers Candace Savonen, Carrie Wright Publishing Maintenance Engineer Candace Savonen Technical Publishing Stylists Carrie Wright, Candace Savonen Package Developers (ottrpal) John Muschelli, Candace Savonen, Carrie Wright Art and Design Illustrator(s) Created graphics for the course Figure Artist(s) Created figures/plots for course Videographer(s) Filmed videos Videography Editor(s) Edited film Audiographer(s) Recorded audio Audiography Editor(s) Edited audio recordings Funding Funder(s) Institution/individual who funded course including grant number Funding Staff Staff members who help with funding   ## ─ Session info ─────────────────────────────────────────────────────────────── ## setting value ## version R version 4.0.2 (2020-06-22) ## os Ubuntu 20.04.5 LTS ## system x86_64, linux-gnu ## ui X11 ## language (EN) ## collate en_US.UTF-8 ## ctype en_US.UTF-8 ## tz Etc/UTC ## date 2023-11-22 ## ## ─ Packages ─────────────────────────────────────────────────────────────────── ## package * version date lib source ## assertthat 0.2.1 2019-03-21 [1] RSPM (R 4.0.5) ## bookdown 0.24 2023-03-28 [1] Github (rstudio/bookdown@88bc4ea) ## bslib 0.4.2 2022-12-16 [1] CRAN (R 4.0.2) ## cachem 1.0.7 2023-02-24 [1] CRAN (R 4.0.2) ## callr 3.5.0 2020-10-08 [1] RSPM (R 4.0.2) ## cli 3.6.1 2023-03-23 [1] CRAN (R 4.0.2) ## crayon 1.3.4 2017-09-16 [1] RSPM (R 4.0.0) ## desc 1.2.0 2018-05-01 [1] RSPM (R 4.0.3) ## devtools 2.3.2 2020-09-18 [1] RSPM (R 4.0.3) ## digest 0.6.25 2020-02-23 [1] RSPM (R 4.0.0) ## ellipsis 0.3.1 2020-05-15 [1] RSPM (R 4.0.3) ## evaluate 0.20 2023-01-17 [1] CRAN (R 4.0.2) ## fastmap 1.1.1 2023-02-24 [1] CRAN (R 4.0.2) ## fs 1.5.0 2020-07-31 [1] RSPM (R 4.0.3) ## glue 1.4.2 2020-08-27 [1] RSPM (R 4.0.5) ## htmltools 0.5.5 2023-03-23 [1] CRAN (R 4.0.2) ## jquerylib 0.1.4 2021-04-26 [1] CRAN (R 4.0.2) ## jsonlite 1.7.1 2020-09-07 [1] RSPM (R 4.0.2) ## knitr 1.33 2023-03-28 [1] Github (yihui/knitr@a1052d1) ## magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.0.2) ## memoise 2.0.1 2021-11-26 [1] CRAN (R 4.0.2) ## pkgbuild 1.1.0 2020-07-13 [1] RSPM (R 4.0.2) ## pkgload 1.1.0 2020-05-29 [1] RSPM (R 4.0.3) ## prettyunits 1.1.1 2020-01-24 [1] RSPM (R 4.0.3) ## processx 3.4.4 2020-09-03 [1] RSPM (R 4.0.2) ## ps 1.4.0 2020-10-07 [1] RSPM (R 4.0.2) ## R6 2.4.1 2019-11-12 [1] RSPM (R 4.0.0) ## remotes 2.2.0 2020-07-21 [1] RSPM (R 4.0.3) ## rlang 1.1.0 2023-03-14 [1] CRAN (R 4.0.2) ## rmarkdown 2.10 2023-03-28 [1] Github (rstudio/rmarkdown@02d3c25) ## rprojroot 2.0.3 2022-04-02 [1] CRAN (R 4.0.2) ## sass 0.4.5 2023-01-24 [1] CRAN (R 4.0.2) ## sessioninfo 1.1.1 2018-11-05 [1] RSPM (R 4.0.3) ## stringi 1.5.3 2020-09-09 [1] RSPM (R 4.0.3) ## stringr 1.4.0 2019-02-10 [1] RSPM (R 4.0.3) ## testthat 3.0.1 2023-03-28 [1] Github (R-lib/testthat@e99155a) ## usethis 1.6.3 2020-09-17 [1] RSPM (R 4.0.2) ## withr 2.3.0 2020-09-22 [1] RSPM (R 4.0.2) ## xfun 0.26 2023-03-28 [1] Github (yihui/xfun@74c2a66) ## yaml 2.2.1 2020-02-01 [1] RSPM (R 4.0.3) ## ## [1] /usr/local/lib/R/site-library ## [2] /usr/local/lib/R/library "],["references.html", "Chapter 12 References", " Chapter 12 References "],["404.html", "Page not found", " Page not found The page you requested cannot be found (perhaps it was moved or renamed). You may want to try searching to find the page's new location, or use the table of contents to find the page you are looking for. "]] +[["index.html", "BioDIGS in the Classroom: Exploring Soil Data About this Book 0.1 Target Audience 0.2 Platform 0.3 Data", " BioDIGS in the Classroom: Exploring Soil Data August 05, 2024 About this Book This is a companion training guide for BioDIGS, a GDSCN project that brings a research experience into the classroom. This activity guides students through exploration of the BioDIGS soil data using the tidyverse in R. Students will learn basic data summarization, visualization, and mapping skills. Visit the BioDIGS (BioDiversity and Informatics for Genomics Scholars) website here for more information about this collaborative, distributed research project, including how you can get involved! The GDSCN (Genomics Data Science Community Network) is a consortium of educators who aim to create a world where researchers, educators, and students from diverse backgrounds are able to fully participate in genomic data science research. You can find more information about its mission and initiatives here. BioDIGS logo 0.1 Target Audience The activities in this guide are written for undergraduate students and beginning graduate students. Some sections require basic understanding of the R programming language, which is indicated at the beginning of the chapter. 0.2 Platform The activities in this guide are demonstrated on NHGRI’s AnVIL cloud computing platform. AnVIL is the preferred computing platform for the GDSCN. However, all of these activities can be done using your personal installation of R or using the online Galaxy portal. 0.3 Data The data generated by the BioDIGS project is available through the BioDIGS website, as well as through an AnVIL workspace. Data about the soil itself as well as soil metal content was generated by the Delaware Soil Testing Program at the University of Delaware. Sequences were generated by the Johns Hopkins University Genetic Resources Core Facility and by PacBio. "],["background.html", "Chapter 1 Background 1.1 What is genomics? 1.2 What is data science? 1.3 What is cloud computing? 1.4 Why soil microbes? 1.5 Heavy metals and human health", " Chapter 1 Background One critical aspect of an undergraduate STEM education is hands-on research. Undergraduate research experiences enhance what students learn in the classroom as well as increase a student’s interest in pursuing STEM careers (Russell2007?). It can also lead to improved scientific reasoning and increased academic performance overall (Buffalari2020?). However, many students at underresourced institutions like community colleges, Historically Black Colleges and Universities (HBCUs), tribal colleges and universities, and Hispanic-serving institutions have limited access to research opportunities compared to their cohorts at larger four-year colleges and R1 institutions. These students are also more likely to belong to groups that are already under-represented in STEM disciplines, particularly genomics and data science (Canner2017?; GDSCN2022?). The BioDIGS Project aims to be at the intersection of genomics, data science, cloud computing, and education. 1.1 What is genomics? Genomics broadly refers to the study of genomes, which are an organism’s complete set of DNA. This includes both genes and non-coding regions of DNA. Traditional genomics involves sequencing and analyzing the genome of individual species. Metagenomics expands genomics to look at the collective genomes of entire communities of organisms in an environmental sample, like soil. It allows researchers to study not just the genes of culturable or isolated organisms, but the entirety of genetic material present in a given environment. By using genomic techniques to survey the soil microbes, we can identify everything in the soil, including microbes that no one has identified before. We are doing both traditional genomics and metagenomics as part of BioDIGS. 1.2 What is data science? Data science is an interdisciplinary field that uses scientific methods, processes, algorithms and systems to extract knowledge and insights from structured and unstructured data. It includes collecting, cleaning, and combining data from multiple databases, exploring data and developing statistical and machine learning models to identify patterns in complex datasets, and creating tools to efficiently store, process, and access large amounts of data. 1.3 What is cloud computing? Cloud computing just means using the internet to get access to powerful computer resources like storage, servers, databases, networking tools, and specialized software programs. Instead of having to buy and maintain their own powerful computers, storage servers, and other systems, users can pay to use them through an internet connection as needed. Users only pay for what they need, when they actually use it, and professionals update and maintain the systems in large data centers. It is a particularly useful tool for researchers and students at smaller institutions with limited computational services, especially when working with complex databases. The genome assembly and analyses for BioDIGS have been done using the NHGRI AnVIL cloud computing platform, as well as Galaxy. 1.4 Why soil microbes? It can be challenging to include undergraduates in human genomic and health research, especially in a classroom context. Both human genetic data and human health data are protected data, which limits the sort of information students can access without undergoing specialized ethics training. However, the same sorts of data cleaning and analysis methods used for human genomic data are also used for microbial genomic data, which does not have the same sort of legal protections as human genetic data. This makes it ideal for training undergraduate students at the beginning of their careers and can be used to prepare students for future research in human genomics and health (Jurkowski2017?). Additionally, the microbes in the soil can have big impacts on our health (BrevikBurgess2014?). 1.5 Heavy metals and human health Human activities that change the landscape can also change what sorts of inorganic and abiotic compounds we find in the soil, particularly increasing the amount of heavy metals (Yan2020?). When cars drive on roads, compounds from the exhaust, oil, and other fluids might settle onto the roads and be washed into the soil. When we put salt on roads, parking lots, and sidewalks, the salts themselves will eventually be washed away and enter the ecosystem through both water and soil. Chemicals from factories and other businesses also leech into our environment. Previous research has demonstrated that in areas with more human activity, like cities, soils include greater concentrations of heavy metals than found in rural areas with limited human populations (Khan2023?; Wang2022?). Increased heavy metal concentrations also disproportionately affect lower-income and predominantly minority areas (Jones2022?). Research suggests that increased heavy metal concentration in soils has major impacts on the soil microbial community. In particular, increased heavy metal concentration is associated with an increase in soil bacteria that have antibiotic resistance markers (Gorovtsov2018?; Nguyen2019?; Sun2021?). "],["research-team.html", "Chapter 2 Research Team 2.1 Soil sampling", " Chapter 2 Research Team This project is coordinated by the Genomics Data Science Community Network (GDSCN). You can read more about the GDSCN and its mission at the network website. 2.1 Soil sampling This map shows the current sampling locations for the BioDIGS project. The extensive network of the GDSCN has made this data collection possible. Soil sampling for this project was done by both faculty and student volunteers from schools that aren’t traditional R1 research institutions. Many of the faculty are also members of the GDSCN. This list of locations reflects GDSCN institutions and friends of GDSCN who have collected soil samples. Annandale, VA: Northern Virginia Community College Atlanta, GA: Spelman College Baltimore, MD: College of Southern Maryland, Notre Dame College of Maryland, Towson University Bismark, ND: United Tribes Technical College El Paso, TX: El Paso Community College, The University of Texas at El Paso Fresno, CA: Clovis Community College Greensboro, NC: North Carolina A&T State University Harrisonburg, VA: James Madison University Honolulu, Hawai’i: University of Hawai’i at Mānoa Las Cruces, NM: Doña Ana Community College Montgomery County, MD: Montgomery College, Towson University Nashville, TN: Meharry Medical College New York, NY: Guttman Community College CUNY Petersburg, VA: Virginia State University Seattle, WA: North Seattle College, Pierce College Tsaile, AZ: Diné College "],["support.html", "Chapter 3 Support 3.1 Funding 3.2 Sponsors 3.3 Analytical and Computational Support", " Chapter 3 Support This project would not be possible without financial and technical support from many organizations and people. 3.1 Funding Funding for this project has been provided by the National Human Genome Research Institute (Contract # 75N92022P00232 awarded to Johns Hopkins University). 3.2 Sponsors PacBio and CosmosID have graciously donated supplies. Advances in Genome Biology and Technology provided funding support for several team members to attend AGBT 2024. 3.3 Analytical and Computational Support Computational support has been provided by NHGRI’s AnVIL cloud computing platform and Galaxy. "],["data-1.html", "Chapter 4 Data 4.1 Sample Metadata 4.2 Soil Testing Data 4.3 Genomics and Metagenomics Data", " Chapter 4 Data There are currently three major kinds of data available from BioDIGS: sample metadata, soil testing data, and genomics and metagenomics data. All of these are available for use in your classroom. 4.1 Sample Metadata This dataset contains information about the samples themselves, including GPS coordinates for the sample location, date the sample was taken, and the site name. This dataset is also available from the BioDIGS website You can also see images of each sampling site and soil characteristics at the sample map. 4.2 Soil Testing Data This dataset includes basic information about the soil itself like pH, percentage of organic matter, variety of soil metal concentrations. The complete data dictionary is available here. The dataset is available at the BioDIGS website. This dataset was generated by the Delaware Soil Testing Program at the University of Delaware. 4.3 Genomics and Metagenomics Data You can access this data in both raw and processed forms. The Illumina and Nanopore sequences were generated at the Johns Hopkins University Genetic Resources Core Facility. PacBio sequencing was done by PacBio directly. More information coming soon! "],["billing.html", "Chapter 5 Billing 5.1 Create Google Billing Account 5.2 Add Terra to Google Billing Account 5.3 Add Members to Google Billing Account 5.4 Set Alerts for Google Billing 5.5 View Spend for Google Billing 5.6 Create Terra Billing Project 5.7 Add Member to Terra Billing Project 5.8 Disable Terra Billing Project", " Chapter 5 Billing In order to use AnVIL, you will need to set up a billing account and add members to it. These sections guide you through that process. 5.1 Create Google Billing Account Log in to the Google Cloud Platform console using your Google ID. Make sure to use the same Google account ID you use to log into Terra. If you are a first time user, don’t forget to claim your free credits! If you haven’t been to the console before, once you accept the Terms of Service you will be greeted with an invitation to “Try for Free.” Follow the instructions to sign up for a Billing Account and get your credits. Choose “Individual Account”. This “billing account” is just for managing billing, so you don’t need to be able to add your team members. You will need to give either a credit card or bank account for security. Don’t worry! You won’t be billed until you explicitly turn on automatic billing. You can view and edit your new Billing Account, by selecting “Billing” from the left-hand menu, or going directly to the billing console console.cloud.google.com/billing Clicking on the Billing Account name will allow you to manage the account, including accessing reports, setting alerts, and managing payments and billing. At any point, you can create additional Billing Accounts using the Create Account button. We generally recommend creating a new Billing Account for each funding source. 5.2 Add Terra to Google Billing Account This gives Terra permission to create projects and send charges to the Google Billing Account, and must be done by an administrator of the Google Billing Account. Terra needs to be added as a “Billing Account User”: Log in to the Google Cloud Platform console using your Google ID. Navigate to Billing You may be automatically directed to view a specific Billing Account. If you see information about a single account rather than a list of your Billing Accounts, you can get back to the list by clicking “Manage Billing Accounts” from the drop-down menu. Check the box next to the Billing Account you wish to add Terra to, click “ADD MEMBER”. Enter terra-billing@terra.bio in the text box. In the drop-down menu, mouse over Billing, then choose “Billing Account User”. Click “SAVE”. 5.3 Add Members to Google Billing Account Anyone you wish to add to the Billing Account will need their own Google ID. To add a member to a Billing Project: Log in to the Google Cloud Platform console using your Google ID. Navigate to Billing You may be automatically directed to view a specific Billing Account. If you see information about a single account rather than a list of your Billing Accounts, you can get back to the list by clicking “Manage Billing Accounts” from the drop-down menu. Check the box next to the Billing Account you wish to add a member to, click “ADD MEMBER”. Enter their Google ID in the text box. In the drop-down menu, mouse over Billing, then choose the appropriate role. Click “SAVE”. 5.4 Set Alerts for Google Billing Log in to the Google Cloud Platform console using the Google ID associated with your Google Cloud projects. Open the dropdown menu on the top left and click on Billing. You may be automatically directed to view a specific Billing Account. If you see information about a single account (and it’s not the one you’re interested in), you can get back to the list of all your Billing Accounts by clicking “Manage Billing Accounts” from the drop-down menu. Click on the name of the Billing Account you want to set alerts for. In the left-hand menu, click “Budgets & alerts”. Click the “Create Budget” tab. Enter a name for your budget, and then choose which projects you want to monitor. Then click “Next”. For Budget Type, select “Specified amount”. Enter the total budget amount for the month (you will set alerts at different thresholds in the next step). Click “Next” (do not click “Finish”). Enter the threshold amounts where you want to receive an alert. We recommend starting with 50% and 90%. You can set other alerts if you prefer. Check the box for “Email alerts to billing admins and users”, then click “Finish”. Now you (as the owner and admin), along with anyone you added with admin or user privileges (e.g. lab managers) will receive alerts when your lab members reach the specified spending thresholds. These emails will be sent to the Gmail accounts associated with the Billing Account. You can edit your budgets at any time by going to Billing > Budgets & alerts, and clicking on the name of the budget you want to edit. 5.5 View Spend for Google Billing You can always check your current spend through the Google Billing console, but remember There is a reporting delay (~1 day), so you cannot immediately see what an analysis cost Costs are reported at the level of Workspaces, so if there are multiple people using a Workspace, you will not be able to determine which of them was responsible for the charges. The Google Billing console displays information by Billing Account. To view spending: Log in to the Google Cloud Platform console using the Google ID associated with your Google Cloud projects. Open the dropdown menu on the top left and click on Billing. You may be automatically directed to view a specific Billing Account. If you see information about a single account (and it’s not the one you’re interested in), you can get back to the list of all your Billing Accounts by clicking “Manage Billing Accounts” from the drop-down menu. Click on the name of the Billing Account for the project you want to view. Look at the top of the Overview tab to see your month-to-date spending. Scroll further down the Overview tab to show your top projects. Click on the Reports tab to see more detailed information about each of your projects. This is probably the most useful tab for exploring costs of individual projects over time. Click on the Cost table tab to obtain a convenient table of spending per project. 5.6 Create Terra Billing Project Launch Terra and sign in with your Google account. If this is your first time logging in to Terra, you will need to accept the Terms of Service. In the drop-down menu on the left, navigate to “Billing”. Click the triple bar in the top left corner to access the menu. Click the arrow next to your name to expand the menu, then click “Billing”. You can also navigate there directly with this link: https://anvil.terra.bio/#billing On the Billing page, click the “+ CREATE” button to create a new Billing Project. If prompted, select the Google account to use. If prompted, give Terra permission to manage Google Cloud Platform billing accounts. Enter a unique name for your Terra Billing Project and select the appropriate Google Billing Account. The name of the Terra Billing Project must: Only contain lowercase letters, numbers and hyphens Start with a lowercase letter Not end with a hyphen Be between 6 and 30 characters Select the Google Billing Account to use. All activities conducted under your new Terra Billing Project will charge to this Google Billing Account. If prompted, give Terra permission to manage Google Cloud Platform billing accounts. Click “CREATE BILLING PROJECT”. Your new Billing Project should now show up in the list of Billing Projects Owned by You. You can add additional members or can modify or deactivate the Billing Project at any time by clicking on its name in this list. The page doesn’t always update as soon as the Billing Project is created. If it’s been a couple of minutes and you don’t see a change, try refreshing the page. 5.7 Add Member to Terra Billing Project Launch Terra and sign in with your Google account. In the drop-down menu on the left, navigate to “Billing”. Click the triple bar in the top left corner to access the menu. Click the arrow next to your name to expand the menu, then click “Billing”. You can also navigate there directly with this link: https://anvil.terra.bio/#billing Click “Owned by You” and find the Billing Project. If you do not see the Billing Project in this list, then you are not an Owner and do not have permission to add members. Click on the name of the Billing Project. Click on the “Members” tab to view and manage members. Then click the “Add User” button. Enter the email address of the user or group you’d like to add the the Billing Project. If adding an individual, make sure to enter the account that they use to access AnVIL. If adding a Terra Group, use the Group email address, which can be found on the Terra Group management page. If this user or group will need to add and remove other users of the Billing Project, check the Owner box. Otherwise leave it unchecked. It’s often a good idea to have at least one other Owner of a Billing Project in order to avoid getting locked out, in case the original owner leaves or loses access to their account. Click “ADD USER”. You should now see the user or group listed in the Billing Project members, along with the appropriate role. They should now be able to use the Billing Project to fund work on AnVIL. If you need to remove members or modify their roles, you can do so at any time by clicking the teardrop button next to their name. 5.8 Disable Terra Billing Project By default this module includes a warning to make sure people understand they will lose access to their Workspace buckets. You can remove the warning from this module by setting AnVIL_module_settings$warning to FALSE before running cow::borrow_chapter: AnVIL_module_settings <- list( warning = FALSE ) cow::borrow_chapter( doc_path = "child/_child_terra_billing_project_disable.Rmd", repo_name = "jhudsl/AnVIL_Template" ) Disabling a Billing Project makes Workspace contents inaccessible! Disabling a Billing Project disables funding to all Workspaces funded by the Billing Project. You will be unable to compute in these Workspaces, and you will lose access to any data stored in the Workspace buckets. It is sometimes possible to restore access by reactivating billing, but Google makes no promises about whether or how long the data will be recoverable. Make sure everyone with Workspaces funded by the Billing Project has saved anything they want to keep in another location before disabling the Billing Project. To disable a Terra Billing Project (i.e. remove the Google Billing Account that funds the Terra Billing Project): Launch Terra and sign in with your Google account. In the drop-down menu on the left, navigate to “Billing”. Click the triple bar in the top left corner to access the menu. Click the arrow next to your name to expand the menu, then click “Billing”. You can also navigate there directly with this link: https://anvil.terra.bio/#billing Click “Owned by You” and find the Billing Project. If you do not see the Billing Project in this list, then you are not an Owner and do not have permission to add members. Click on the name of the Billing Project. If you don’t see information about the Billing Account, click on “View billing account” to expand the Billing Account information. You may be prompted to enter your login information again. You should see the name of the Google Billing Account that is funding this Terra Billing Project. Click on the teardrop icon next to the name of the Billing Account. Click “Remove Billing Account”. Click OK to confirm that you want to disable funding for this Billing Project. The page should now indicate that there is no linked billing account. If necessary, you can restore funding to the Billing Project and associated Workspaces by clicking the teardrop icon and selecting “Change Billing Account”. However, Google makes no promises about how long the Workspace contents will remain available after you disable funding, so it is best not to rely on them. "],["notes-for-instructors.html", "Chapter 6 Notes for Instructors", " Chapter 6 Notes for Instructors Although AnVIL is the preferred computational platform for the GDSCN, all activities can be run on different platforms. R-based activities can be run on your own personal installation of R or Posit(formerly called RStudio), depending on your needs. Galaxy-based activities can be run on both Galaxy on AnVIL and on the Galaxy web portal. You may also adapt these activities for other languages and platforms. "],["checklist-for-running-activities-on-anvil.html", "Chapter 7 Checklist for Running Activities on AnVIL Before the class begins After the class ends", " Chapter 7 Checklist for Running Activities on AnVIL If you choose to run these activities on AnVIL with your class, there are several things that you can do to make the experience easier. Before the class begins This checklist can serve as a reminder of the overall suggested steps to run an activity on AnVIL. You might find yourself changing these steps slightly as you become more familiar with AnVIL. Billing Obtain funding through the STRIDES program (optional) Request students make AnVIL IDs (Google IDs) Collect AnVIL IDs (Google IDs) from students Create Google Billing Account for your class Resources Create a Workspace for your class (optional) Notify Terra of your course dates and times Direct students to the Workspace Permissions Set up Groups to manage permissions AnVIL Group Class Workspace Terra Billing Projects* Instructor Owner Owner Teaching assistants Writer Owner Students Reader User After the class ends Resources Remind students to download any files they might need Tell students to delete their environments and persistent disks Billing Deactivate billing project "],["setting-up-billing-on-anvil.html", "Chapter 8 Setting up Billing on AnVIL 8.1 Creating a billing project 8.2 Adding Instructors as “Owner” 8.3 Adding Students as “User” 8.4 Understanding the various billing costs 8.5 Estimating costs before the class begins 8.6 How much does a class cost?", " Chapter 8 Setting up Billing on AnVIL The following will help you set up billing for your class. You will: * Set up a billing project for tracking costs * Add yourself and students to the billing project to grant permission to AnVIL resources * Learn about different sources of costs in AnVIL * Estimate costs for your class * Learn about how to track costs during your class 8.1 Creating a billing project First, create the Billing Project. Billing Project names must be globally unique and cannot exceed 30 characters. We suggest the name of the Billing Project should be a combination of institution-class- (e.g., “jhu-bmr2021-bill-1”). To create a Billing Project: Go to https://anvil.terra.bio/#billing Click “+CREATE” Type in your Billing Project name Select the appropriate Billing Account Click “CREATE BILLING PROJECT” You now have a unique Billing Project. 8.2 Adding Instructors as “Owner” Next, you want to give instructors permission to use the Billing Project to compute. To set instructor permissions: Go to https://anvil.terra.bio/#billing Select the “Owned by You” Billing Project sub-list Select the Billing Project you made in Instructor Billing Project Select the “Users” tab Click “+ Add User”. You will be prompted to add a “User email *”. Begin typing the instructor Group name set up in Instructor Group. You should see an email in the form (firecloud.org?) (e.g., jhu-bmr2021-instructors@firecloud.org). Ensure “Can manage users (Owner)” is selected Click “ADD USER” This step makes it so that co-instructors can edit permissions and administer the Billing Project as needed. While this means you and co-instructors can compute using the student Billing Project, this makes spending difficult to track. Instructors should always use the instructor Workspace to compute. This makes it much easier to track costs associated with instructors versus students. 8.3 Adding Students as “User” Next, you will add your student Group to the Billing Project so that they can compute. To set student permissions: Go to https://anvil.terra.bio/#billing Select the “Owned by You” Billing Project sub-list Select the Billing Project you made in Billing Project Select the “Users” tab Click “+ Add User”. You will be prompted to add a “User email *”. Begin typing the student Group name set up in Student Group. You should see an email in the form (firecloud.org?) (e.g., jhu-bmr2021-students@firecloud.org). Keep “Can manage users (Owner)” deselected. Click “ADD USER” 8.4 Understanding the various billing costs Costs in AnVIL fall into one of three categories: compute costs, storage costs, and network usage (egress) costs. Compute costs are those that students accrue when actively using an AnVIL Workspace. Students can clone a Workspace for no cost, but they will begin to accrue costs as soon as they set up a cloud environment. Compute costs are based on how many CPUs you need, as well as how much memory and storage space you choose. You can also pause the Workspace and pay a lower cost per hour than if you were to keep the Workspace running. Current prices can be found here. Storage costs are driven by the persistent disk. The persistent disk allows you to store data and installed programs/libraries for a low cost. Students can delete their Workspaces but maintain their persistent disk so they still have access to previous programs they have installed and previous files they’ve created. Current prices can be found here. Finally, network usage costs are those involved with transferring data between networks or downloading data from the cloud to your local computer. Current prices can be found here. 8.5 Estimating costs before the class begins AnVIL has a free AnVIL_Cost_Estimator that allows you estimate compute, storage, and network usage costs for your class. This is a Google sheet that you can tailor to fit your needs. Before you use it, make sure the prices are up to date by following the links at the bottom of the sheet. If you need to create a Budget Justification for your class, you can also use the free AnVIL_Budget_Justification template. 8.6 How much does a class cost? One of the advantages of billing projects in Terra is that you can keep track of the costs during real time. You can see how much each Workspace is costing while your course is happening, so there are no unexpected surprises at the end! Full details about billing in Terra can be found here. These instructions are adapted from Terra Support. To view the costs being accrued by each billing project, you can go to https://console.cloud.google.com/billing. At the top of the page, there is a dropdown menu. Choose the billing project name you’d like to view. Once you are in proper billing project, you click on “View detailed charges” in the Billing section on the far right. This takes you to a report of the detailed charges accrued by the billing account. Here, you will be able to see the total cost over a time range, as well as costs broken down by services. "],["setting-up-the-class-activity.html", "Chapter 9 Setting up the Class Activity 9.1 Overview of Class Setup 9.2 Collect Google IDs 9.3 Set Up Groups 9.4 Set Up Billing Projects 9.5 Set Permissions on the Workspace 9.6 Notify Terra", " Chapter 9 Setting up the Class Activity 9.1 Overview of Class Setup This section will show you how to organize your class to make it easier to administer access to your content. You will need to have a list of who will be taking your class, such as a course roster or sign-up list, as well as a list of additional instructors or teaching assistants. You can make changes later, so the list of students need not be final. 9.2 Collect Google IDs AnVIL IDs are based on Google accounts. Students – Contact students/participants to get their AnVIL IDs. These should be Gmail addresses or emails with GSuite capabilities. You can link students to Student Account Setup for instructions on what they should do. Co-instructors – If you will be working with other instructors, such as co-instructors or teaching assistants, you will need to collect their IDs as well. 9.3 Set Up Groups Reminder: Google Billing Accounts are managed on Google Cloud Platform and are used for organizing funding sources (e.g. credit cards, cloud credits). Terra Billing Projects are managed through Terra, and allow you to associate your Terra activity with the correct Google Billing Account. For a more detailed explanation, please see the chapter on Account Setup. We suggest creating two different Terra Billing Projects under the appropriate Billing Account that you created on cloud.google.com: one for students and one for co-instructors. The instructions below will walk you through how to set this up. Groups enable you to share your class Workspace and manage permissions for many people at once. We recommend starting with one Group for instructors and one Group for students. Instructor Group {#instructor-group} Create an informative, unique Group name for any co-instructors and teaching assistants. We suggest a combination of institution-class-role (e.g., “jhu-bmr2021-instructors”). Only letters, numbers, underscores, and dashes are allowed in Group names. To create a Group for instructors: Go to https://anvil.terra.bio/#groups Click “+ Create a New Group” Type in your instructor Group name Click “CREATE GROUP” You now have a unique instructor Group. Add Instructors as “Admin” (Instructor Group) Now that your instructor Group has been created, you should add any additional instructors. You should also ensure that they have the correct permissions. Go to https://anvil.terra.bio/#groups/ and click on the instructor Group name. This page should also be visible at https://anvil.terra.bio/#groups/<group-name>. Click on “+Add User”. You will be prompted to add the instructor’s AnVIL ID. Type in the instructor’s AnVIL ID Make sure “Can manage users (admin)” is selected Click ADD USER. This will take you back to the Group administration page. Make sure the newly added instructor displays “Admin” under “Roles” beside their AnVIL ID. Repeat this process for any additional co-instructors and teaching assistants. Student Group {#student-group} Next, you will create a Group for your students. Create an informative, unique Group name. We suggest a combination of institution-class-role (e.g., “jhu-bmr2021-students”). Only letters, numbers, underscores, and dashes are allowed in Group names. To create a Group for students: Go to https://anvil.terra.bio/#groups Click “+ Create a New Group” Type in your student Group name Click “CREATE GROUP” You now have a unique student Group. Add Instructors as “Admin” (Student Group) The next steps ensure any additional co-instructors and teaching assistants are able to administer the student Group in case you are unavailable. Follow the steps below to add each co-instructor in the student Group: Go to https://anvil.terra.bio/#groups/ and click on the student Group name. This page should be visible at https://anvil.terra.bio/#groups/<group-name>. Click on “+Add User”. You will be prompted to add the instructor’s AnVIL ID. Type in the instructor’s AnVIL ID Make sure “Can manage users (admin)” is selected Click ADD USER. This will take you back to the Group administration page. Make sure the newly added instructor displays “Admin” under “Roles” beside their AnVIL ID. Repeat this process for any additional co-instructors and teaching assistants. Add Students as “Member” Follow the steps below to add individual students to the student Group: Go to https://anvil.terra.bio/#groups/ and click on the student Group name. This page should be visible at https://anvil.terra.bio/#groups/<group-name>. Click on “+Add User”. You will be prompted to add an AnVIL ID. Type in the student’s AnVIL ID Click ADD USER Make sure the newly added student displays “Member” under “Roles” beside their AnVIL ID. At present, each student’s AnVIL ID must be added separately. Your instructor and student Groups are now set up. Group Email Lists Note that your newly created Groups have Group emails associated with them. Take note of these Group emails. You will use them for granting access to your class Billing Projects and Workspaces in the next steps. 9.4 Set Up Billing Projects Billing Projects in Terra help organize your compute costs. Like Groups, we suggest creating two different billing projects under the appropriate Billing Account that you created on cloud.google.com: one for students and one for co-instructors. Billing Project names must be globally unique and cannot exceed 30 characters. Instructor Billing Project {#instructor-billing-project} First, create the Billing Project for instructors. We suggest the name of the Billing Project should be a combination of institution-class-role (e.g., “jhu-bmr2021-instructors-bill-1”). To create a Billing Project for instructors: Go to https://anvil.terra.bio/#billing Click “+CREATE” Type in your instructor Billing Project name Select the appropriate Billing Account Click “CREATE BILLING PROJECT” You now have a unique instructor Billing Project. Add Instructors as “Owner” (Instructor Project) Next, you want to give instructors permission to use the Billing Project to compute. To set instructor permissions: Go to https://anvil.terra.bio/#billing Select the “Owned by You” Billing Project sub-list Select the Billing Project you made for instructors in Instructor Billing Project Select the “Users” tab Click “+ Add User”. You will be prompted to add a “User email *”. Begin typing the instructor Group name set up in Instructor Group. You should see an email in the form (firecloud.org?) (e.g., jhu-bmr2021-instructors@firecloud.org). Ensure “Can manage users (Owner)” is selected Click “ADD USER” Your instructor Billing Project is now set up. Student Billing Project {#student-billing-project} Next, create a student Billing Project. Again, we suggest a combination of institution-class-role (e.g., “jhu-bmr2021-students-bill-1”). To create a Billing Project for students: Go to https://anvil.terra.bio/#billing Click “+CREATE” Type in your student Billing Project name Select the appropriate Billing Account (same as above) Click “CREATE BILLING PROJECT” You now have a unique student Billing Project. Add Instructors as “Owner” (Student Project) You want to ensure any additional co-instructors and teaching assistants are able to administer the student Billing Project in case you are unavailable. To set instructor permissions: Go to https://anvil.terra.bio/#billing Select the “Owned by You” Billing Project sub-list Select the Billing Project you made for students in Student Billing Project Select the “Users” tab Click “+ Add User”. You will be prompted to add a “User email *”. Begin typing the instructor Group name set up in [### Set Up Groups]. You should see an email in the form (firecloud.org?) (e.g., jhu-bmr2021-instructors@firecloud.org). Ensure “Can manage users (Owner)” is selected Click “ADD USER” This step makes it so that co-instructors can edit permissions and administer the student Billing Project as needed. While this means you and co-instructors can compute using the student Billing Project, this makes spending difficult to track. Instructors should always use the instructor Billing Project to compute. This makes it much easier to track costs associated with instructors versus students. Add Students as “User” Next, you will add your student Group to the student Billing Project so that they can compute. To set student permissions: Go to https://anvil.terra.bio/#billing Select the “Owned by You” Billing Project sub-list Select the Billing Project you made for students in Student Billing Project Select the “Users” tab Click “+ Add User”. You will be prompted to add a “User email *”. Begin typing the student Group name set up in Student Group. You should see an email in the form (firecloud.org?) (e.g., jhu-bmr2021-students@firecloud.org). Keep “Can manage users (Owner)” deselected. Click “ADD USER” Your student Billing Project is now set up. 9.5 Set Permissions on the Workspace Finally, you will want to set up permissions for co-instructors and students to see the class Workspace you created with the development Billing Project in Developing Content. AnVIL users can take on the “Owner”, “Writer”, or “Reader” role for a Workspace. Add Instructors as “Owner” You should add your co-instructors and teaching assistants as “Owners” to the class Workspace. This is useful if they need to edit the course content or share the space with students on your behalf. To share and change permissions: Go to https://anvil.terra.bio/#workspaces and find your class Workspace you set up in Developing Content Click the teardrop button for your class Workspace Click “Share”. This will open a dialog box. Enter the name of the instructor Group (e.g., jhu-bmr2021-instructors). This will create a dropdown for the Group permissions in the box. Select this Group. Change permissions to “Owner” using the dropdown menu under the instructor Group Click “SAVE” This step makes it so that co-instructors can edit the original content of the Workspace as needed. While this means you and co-instructors can compute using the development Billing Project, this makes spending difficult to track. Instructors should instead clone the Workspace using the instructor Billing Project. This makes it much easier to track costs associated with this iteration of your class versus further iterations (e.g., the following semester or year). Add Students as “Reader” Next, add your students as “Readers” to the class Workspace. This means they will be able to view and clone the Workspace, but not make edits or perform computations. To share the Workspace: Click the teardrop button for your class Workspace Click “Share”. This will open a dialog box. Enter the name of the student Group. This will create a dropdown for the Group permissions in the box. Select this Group. Ensure permissions are set to “Reader” (default) Click “SAVE” You have now correctly set up your class permissions! 9.6 Notify Terra Contacting Terra ahead of your class time helps the Terra team avoid any major disruptions to your class. Contact Terra by submitting a request for a hold on scheduled maintenance and downtime. It’s also a good idea to ask about major changes planned for the time prior to your class. "],["getting-credit-for-professional-development.html", "Chapter 10 Getting Credit for Professional Development", " Chapter 10 Getting Credit for Professional Development We are happy to provide a letter to your supervisor, department head, or dean to indicate you’ve worked through this content and intend to use it in your class. "],["anvil-workspace.html", "Chapter 11 AnVIL Workspace 11.1 Create Google Account 11.2 Clone the Workspace", " Chapter 11 AnVIL Workspace You can easily access the data on AnVIL by cloning the dedicated workspace. These sections guide you through creating an AnVIL account and accessing the workspace. 11.1 Create Google Account If you do not already have a Google account that you would like to use for accessing Terra, create one now. If you would like to create a Google account that is associated with your non-Gmail, institutional email address, follow these instructions. 11.2 Clone the Workspace Launch Terra Locate the Workspace you want to clone. If a Workspace has been shared with you ahead of time, it will appear in “MY WORKSPACES”. You can clone a Workspace that was shared with you to perform your own analyses. In the screenshot below, no Workspaces have been shared. If a Workspace hasn’t been shared with you, navigate to the “FEATURED” or “PUBLIC” Workspace tabs. Use the search box to find the Workspace you want to clone. Click the teardrop button on the far right next to the Workspace you want to clone. Click “Clone”. You can also clone the Workspace from the Workspace Dashboard instead of the search results. You will see a popup box appear. Name your Workspace and select the appropriate Terra Billing Project. All activity in the Workspace will be charged to this Billing Project (regardless of who conducted it). Remember that each Workspace should have its own Billing Project. If you are working with protected data, you can set the Authorization Domain to limit who can be added to your Workspace. Note that the Authorization Domain cannot be changed after the Workspace is created (i.e. there is no way to make this Workspace shareable with a larger audience in the future). Workspaces by default are only visible to people you specifically share them with. Authorization domains add an extra layer of enforcement over privacy, but by nature make sharing more complicated. We recommend using Authorization Domains in cases where it is extremely important and/or legally required that the data be kept private (e.g. protected patient data, industry data). For data you would merely prefer not be shared with the world, we recommend relying on standard Workspace sharing permissions rather than Authorization Domains, as Authorization Domains can make future collaborations, publications, or other sharing complicated. Click “CLONE WORKSPACE”. The new Workspace should now show up under your Workspaces. "],["using-rstudio-on-anvil.html", "Chapter 12 Using RStudio on AnVIL 12.1 Video overview of RStudio on AnVIL 12.2 Launching RStudio 12.3 Touring RStudio 12.4 Pausing RStudio", " Chapter 12 Using RStudio on AnVIL In the next few steps, you will walk through how to get set up to use RStudio on the AnVIL platform. AnVIL is centered around different “Workspaces”. Each Workspace functions almost like a mini code laboratory - it is a place where data can be examined, stored, and analyzed. The first thing we want to do is to copy or “clone” a Workspace to create a space for you to experiment. Use a web browser to go to the AnVIL website. In the browser type: anvil.terra.bio Tip At this point, it might make things easier to open up a new window in your browser and split your screen. That way, you can follow along with this guide on one side and execute the steps on the other. Your instructor will give you information on which workspace you should clone. 12.1 Video overview of RStudio on AnVIL Here is a video tutorial that describes the basics of using RStudio on AnVIL. 12.1.1 Objectives Start compute for your RStudio environment Tour RStudio on AnVIL Stop compute to minimize expenses 12.1.2 Slides The slides for this tutorial are are located here. 12.2 Launching RStudio AnVIL is very versatile and can scale up to use very powerful cloud computers. It’s very important that you select a cloud computing environment appropriate to your needs to avoid runaway costs. If you are uncertain, start with the default settings; it is fairly easy to increase your compute resources later, if needed, but harder to scale down. Note that, in order to use RStudio, you must have access to a Terra Workspace with permission to compute (i.e. you must be a “Writer” or “Owner” of the Workspace). Open Terra - use a web browser to go to anvil.terra.bio In the drop-down menu on the left, navigate to “Workspaces”. Click the triple bar in the top left corner to access the menu. Click “Workspaces”. Click on the name of your Workspace. You should be routed to a link that looks like: https://anvil.terra.bio/#workspaces/<billing-project>/<workspace-name>. Click on the cloud icon on the far right to access your Cloud Environment options. In the dialogue box, click the “Settings” button under RStudio. You will see some details about the default RStudio cloud environment, and a list of costs because it costs a small amount of money to use cloud computing. If you are uncertain about what you need, the default configuration is a reasonable, cost-conservative choice. It is fairly easy to increase your compute resources later, if needed, but harder to scale down. Click the “Create” button. Otherwise, click “CUSTOMIZE” to modify the environment for your needs. The dialogue box will close and you will be returned to your Workspace. You can see the status of your cloud environment by hovering over the RStudio logo. It will take a few minutes for Terra to request computers and install software. When your environment is ready, its status will change to “Running”. Click on the RStudio logo to open a new dialogue box that will let you launch RStudio. Click the launch icon to open RStudio. This is also where you can pause, modify, or delete your environment when needed. You should now see the RStudio interface with information about the version printed to the console. 12.3 Touring RStudio Next, we will be using RStudio and the package Glimma to create interactive plots. See this vignette for more information. The Bioconductor team has created a very useful package to programmatically interact with Terra and Google Cloud. Install the AnVIL package. It will make some steps easier as we go along. You can now quickly install precompiled binaries using the AnVIL package’s install() function. We will use it to install the Glimma package and the airway package. The airway package contains a SummarizedExperiment data class. This data describes an RNA-Seq experiment on four human airway smooth muscle cell lines treated with dexamethasone. {Note: for some of the packages, you will have to install packaged from the CRAN repository, using the install.packages() function. The examples will show you which install method to use.} <img src="resources/images/08-student_using_rstudio_files/figure-html//1BLTCaogA04bbeSD1tR1Wt-mVceQA6FHXa8FmFzIARrg_g11f12bc99af_0_56.png" title="Screenshot of the RStudio environment interface. Code has been typed in the console and is highlighted." alt="Screenshot of the RStudio environment interface. Code has been typed in the console and is highlighted." width="480" /> Load the example data. The multidimensional scaling (MDS) plot is frequently used to explore differences in samples. When this data is MDS transformed, the first two dimensions explain the greatest variance between samples, and the amount of variance decreases monotonically with increasing dimension. The following code will launch a new window where you can interact with the MDS plot. Change the colour_by setting to “groups” so you can easily distinguish between groups. In this data, the “group” is the treatment. You can download the interactive html file by clicking on “Save As”. You can also download plots and other files created directly in RStudio. To download the following plot, click on “Export” and save in your preferred format to the default directory. This saves the file in your cloud environment. You should see the plot in the “Files” pane. Select this file and click “More” > “Export” Select “Download” to save the file to your local machine. 12.4 Pausing RStudio The right-hand side icon reminds you that you are accruing cloud computing costs. If you don’t see this icon, you may need to scroll to the right. You should minimize charges when you are not performing an analysis. You can do this by clicking on the RStudio icon and selecting “Pause”. This will release the CPU and memory resources for other people to use. Note that your work will be saved in the environment and continue to accrue a very small cost. This work will be lost if the cloud environment gets deleted. If there is anything you would like to save permanently, it’s a good idea to copy it from your compute environment to another location, such as the Workspace bucket, GitHub, or your local machine, depending on your needs. You can also pause your cloud environment(s) at https://anvil.terra.bio/#clusters. "],["exploring-soil-testing-data-with-r.html", "Chapter 13 Exploring Soil Testing Data With R 13.1 Before You Start 13.2 Objectives 13.3 Part 1. Data Import 13.4 Part 2. Data Summarization 13.5 Part 3. Data Visualization", " Chapter 13 Exploring Soil Testing Data With R In this activity, you’ll have a chance to become familiar with the BioDIGS soil testing data. This dataset includes information on the inorganic components of each soil sample, particularly metal concentrations. Human activity can increase the concentration of inorganic compounds in the soil. When cars drive on roads, compounds from the exhaust, oil, and other fluids might settle onto the roads and be washed into the soil. When we put salt on roads, parking lots, and sidewalks, the salts themselves will eventually be washed away and enter the ecosystem through both water and soil. Chemicals from factories and other businesses also leech into our environment. All of this means the concentration of heavy metals and other chemicals will vary among the soil samples collected for the BioDIGS project. 13.1 Before You Start If you do not already have a Google account that you would like to use for accessing Terra, create one now. If you would like to create a Google account that is associated with your non-Gmail, institutional email address, follow these instructions. 13.2 Objectives This activity will teach you how to use the AnVIL platform to: Import data into RStudio Examine a csv file that contains the soil testing data from the BioDIGS project Calculate summary statistics for variables in the soil testing data Create and interpret histograms and boxplots for variables in the soil testing data 13.3 Part 1. Data Import We will use the BioDIGS package to retrieve the data. We first need to install the package from where it is stored on GitHub. devtools::install_github("fhdsl/BioDIGSData") Once you’ve installed the package, we can load the library and assign the soil testing data to an object. This command follows the code structure: dataset_object_name <- stored_BioDIGS_dataset library(BioDIGSData) soil.values <- BioDIGS_soil_data() It seems like the dataset loaded, but it’s always a good idea to verify. There are many ways to check, but the easiest approach (if you’re using RStudio) is to look at the Environment tab on the upper right-hand side of the screen. You should now have an object called soil.values that includes some number of observations for 28 variables. The observations refer to the number of rows in the dataset, while the variables tell you the number of columns. As long as neither the observations or variables are 0, you can be confident that your dataset loaded. Let’s take a quick look at the dataset. We can do this by clicking on soil.values object in the Environment tab. (Note: this is equivalent to typing View(soil.values) in the R console.) This will open a new window for us to scroll through the dataset. Well, the data definitely loaded, but those column names aren’t immediately understandable. What could As_EPA3051 possibly mean? In addition to the dataset, we need to load the data dictionary as well. Data dictionary: a file containing the names, definitions, and attributes about data in a database or dataset. In this case, the data dictionary can help us make sense of what sort of values each column represents. The data dictionary for the BioDIGS soil testing data is available in the R package (see code below), but we have also reproduced it here. ?BioDIGS_soil_data() site_id Unique letter and number site name full_name Full site name As_EPA3051 Arsenic (mg/kg), EPA Method 3051A. Quantities < 3.0 are not detectable. Cd_EPA3051 Cadmium (mg/kg), EPA Method 3051A. Quantities < 0.2 are not detectable. Cr_EPA3051 Chromium (mg/kg), EPA Method 3051A Cu_EPA3051 Copper (mg/kg), EPA Method 3051A Ni_EPA3051 Nickel (mg/kg), EPA Method 3051A Pb_EPA3051 Lead (mg/kg), EPA Method 3051A Zn_EPA3051 Zinc (mg/kg), EPA Method 3051A water_pH A-E_Buffer_pH OM_by_LOI_pct Organic Matter by Loss on Ignition P_Mehlich3 Phosphorus (mg/kg), using the Mehlich 3 soil test extractant K_Mehlich3 Potassium (mg/kg), using the Mehlich 3 soil test extractant Ca_Mehlich3 Calcium (mg/kg), using the Mehlich 3 soil test extractant Mg_Mehlich3 Magnesium (mg/kg), using the Mehlich 3 soil test extractant Mn_Mehlich3 Manganese (mg/kg), using the Mehlich 3 soil test extractant Zn_Mehlich3 Zinc (mg/kg), using the Mehlich 3 soil test extractant Cu_Mehlich3 Copper (mg/kg), using the Mehlich 3 soil test extractant Fe_Mehlich3 Iron (mg/kg), using the Mehlich 3 soil test extractant B_Mehlich3 Boron (mg/kg), using the Mehlich 3 soil test extractant S_Mehlich3 Sulfur (mg/kg), using the Mehlich 3 soil test extractant Na_Mehlich3 Sodium (mg/kg), using the Mehlich 3 soil test extractant Al_Mehlich3 Aluminum (mg/kg), using the Mehlich 3 soil test extractant Est_CEC Cation Exchange Capacity (meq/100g) at pH 7.0 (CEC) Base_Sat_pct Base saturation (BS). This represents the percentage of CEC occupied by bases (Ca2+, Mg2+, K+, and Na+). The %BS increases with increasing soil pH. The availability of Ca2+, Mg2+, and K+ increases with increasing %BS. P_Sat_ratio Phosphorus saturation ratio. This is the ratio between the amount of phosphorus present in the soil and the total capacity of that soil to retain phosphorus. The ability of phosphorus to be bound in the soil is primary a function of iron (Fe) and aluminum (Al) content in that soil. Using the data dictionary, we find that the values in column As_EPA3051 give us the arsenic concentration in mg/kg of each soil sample, as determined by EPA Method 3051A. While arsenic can occur naturally in soils, higher levels suggest the soil may have been contaminated by mining, hazardous waste, or pesticide application. Arsenic is toxic to humans. We can also look at just the names of all the columns using the R console using the colnames() command. colnames(soil.values) ## [1] "site_id" "site_name" "type" "As_EPA3051" ## [5] "Cd_EPA3051" "Cr_EPA3051" "Cu_EPA3051" "Ni_EPA3051" ## [9] "Pb_EPA3051" "Zn_EPA3051" "water_pH" "OM_by_LOI_pct" ## [13] "P_Mehlich3" "K_Mehlich3" "Ca_Mehlich3" "Mg_Mehlich3" ## [17] "Mn_Mehlich3" "Zn_Mehlich3" "Cu_Mehlich3" "Fe_Mehlich3" ## [21] "B_Mehlich3" "S_Mehlich3" "Na_Mehlich3" "Al_Mehlich3" ## [25] "Est_CEC" "Base_Sat_pct" "P_Sat_ratio" "region" Most of the column names are found in the data dictionary, but the very last column (“region”) isn’t. How peculiar! Let’s look at what sort of values this particular column contains. The tab with the table of the soil.views object should still be open in the upper left pane of the RStudio window. If not, you can open it again by clicking on soils.view in the Environment pane, or by using the View() command. View(soil.values) If you scroll to the end of the table, we can see that “region” seems to refer to the city or area where the samples were collected. For example, the first 24 samples all come from Baltimore City. You may notice that some cells in the soil.values table contain NA. This just means that the soil testing data for that sample isn’t available yet. We’ll take care of those values in the next part. QUESTIONS: How many observations are in the soil testing values dataset that you loaded? What do each of these observations refer to? What data is found in the column labeled “Fe_Mehlich3”? Why would we be interested how much of this is in the soil? (You may have to search the internet for this answer.) 13.4 Part 2. Data Summarization Now that we have the dataset loaded, let’s explore the data in more depth. First, we should remove those samples that don’t have soil testing data yet. We could keep them in the dataset, but removing them at this stage will make the analysis a little cleaner. In this case, as we know the reason the data are missing (and that reason will not skew our analysis), we can safely remove these samples. This will not be the case for every data analysis. We can remove the unanalyzed samples using the drop_na() function from the tidyr package. This function removes any rows from a table that contains NA for a particular column. This command follows the code structure: dataset_new_name <- dataset %>% drop_na(column_name) The `%>% is called a pipe and it tells R that the commands after it should all be applied to the object in front of it. (In this case, we can filter out all samples missing a value for “As_EPA3051” as a proxy for samples without soil testing data.) library(tidyr) soil.values.clean <- soil.values %>% drop_na(As_EPA3051) Great! Now let’s calculate some basic statistics. For example, we might want to know what the mean (average) lead concentration is for each soil sample. According to the data dictionary, the values for lead concentration are in the column labeled “Pb_EPA3051”. We can use a combination of two functions: pull() and mean().pull() lets you extract a column from your table for statistical analysis, while mean() calculates the average value for the extracted column. This command follows the code structure: OBJECT %>% pull(column_name) %>% mean() pull() is a command from the tidyverse package, so we’ll need to load that library before our command. library(tidyverse) soil.values.clean %>% pull(As_EPA3051) %>% mean() ## [1] 5.10875 We can run similar commands to calculate the standard deviation, minimum, and maximum for the soil arsenic values. soil.values.clean %>% pull(As_EPA3051) %>% sd() ## [1] 5.606926 soil.values.clean %>% pull(As_EPA3051) %>% min() ## [1] 0 soil.values.clean %>% pull(As_EPA3051) %>% max() ## [1] 27.3 As you can see, the standard deviation of the arsenic concentrations is listed first, then the minimum concentration, and finally the maximum concentration. The soil testing dataset contains samples from multiple geographic regions, so maybe it’s more meaningful to find out what the average arsenic values are for each region. We have to do a little bit of clever coding trickery for this using the group_by and summarize functions. First, we tell R to split our dataset up by a particular column (in this case, region) using the group_by function, then we tell R to summarize the mean arsenic concentration for each group. Because there are several different functions with the name summarize in R, we have to specify that we want to use summarize from the dplyr package. This command follows the code structure: dataset %>% group_by(column_name) %>% dplyr::summarize(Mean = mean(column_name)) soil.values.clean %>% group_by(region) %>% dplyr::summarize(Mean = mean(As_EPA3051)) ## # A tibble: 2 × 2 ## region Mean ## <chr> <dbl> ## 1 Baltimore City 5.56 ## 2 Montgomery County 4.66 Now we know that the mean arsenic concentration might be different for each region, and appears higher for the Baltimore City samples than the Montgomery County samples. QUESTIONS: What is the mean iron concentration for samples in this dataset? What about the standard deviation, minimum value, and maximum value? Calculate the mean iron concentration by region. Which region has the highest mean iron concentration? What about the lowest? 13.5 Part 3. Data Visualization Often, it can be easier to immediately interpret data displayed as a plot than as a list of values. For example, we can more easily understand how the arsenic concentration of the soil samples are distributed if we create histograms compared to looking at point values like mean, standard deviation, minimum, and maximum. One way to make histograms in R is to use the hist() function. We can again use the pull() command and pipes (%>%) to choose the column we want from the soil.values.clean dataset and make a histogram of them. Remember, this command follows the code structure: dataset %>% pull(column_name) %>% hist(main = chart_title, xlab = x_axis_title) In this case, we do not have to use the dplyr::summarize command before hist() because there’s only one function called hist() in the packages we’re using. soil.values.clean %>% pull(As_EPA3051) %>% hist(main = 'Histogram of Arsenic Concentration', xlab ='Concentration in mg/kg' ) We can see that almost all the soil samples had very low concentrations of arsenic (which is good news for the soil health!). In fact, many of them had arsenic concentrations close to 0, and only one sampling location appears to have high levels of arsenic. We might also want to graphically compare arsenic concentrations among the geographic regions in our dataset. We can do this by creating boxplots. Boxplots are particularly useful when comparing the mean, variation, and distributions among multiple groups. In R, one way to create a boxplot is using the boxplot() function. We don’t need to use pipes for this command, but instead will specify what columns we want to use from the dataset inside the boxplot() function itself. This command follows the code structure: boxplot(arsenic_concentration ~ grouping_variable, data = dataset, main = “Title of Graph”, xlab = “x_axis_title”, ylab = “y_axis_title”) boxplot(As_EPA3051 ~ region, data = soil.values.clean, main = "Arsenic Concentration by Geographic Region", xlab = "Region", ylab = "Arsenic Concentration in mg/kg") By using a boxplot, we can quickly see that, while one sampling site within Baltimore City has a very high concentration of arsenic in the soil, in general there isn’t a difference in arsenic content between Baltimore City and Montgomery County. QUESTIONS: Create a histogram for iron concentration, as well as a boxplot comparing iron concentration by region. Is the iron concentration similar among regions? Are there any outlier sites with unusually high or low iron concentrations? Create a histogram for lead concentration, as well as a boxplot comparing lead concentration by region. Is the lead concentration similar among regions? Are there any outlier sites with unusually high or low lead concentrations? Look at the maps for iron and lead on the BioDIGS website. Do the boxplots you created make sense, given what you see on these maps? Why or why not? "],["about-the-authors.html", "About the Authors", " About the Authors These credits are based on our course contributors table guidelines.     Credits Names Pedagogy Content Developer Elizabeth Humphries Content Editors Ava Hoffman, Kate Isaac Project Directors Ava Hoffman, Michael Schatz, Jeff Leek, Frederick Tan Production Content Publisher Ira Gooding Technical Template Publishing Engineers Candace Savonen, Carrie Wright, Ava Hoffman Publishing Maintenance Engineer Candace Savonen Technical Publishing Stylists Carrie Wright, Candace Savonen Package Developers (ottrpal) John Muschelli, Candace Savonen, Carrie Wright Package Developer (BioDIGSData) Ava Hoffman Funding Funder National Human Genome Research Institute (NHGRI) Funding Staff Fallon Bachman, Jennifer Vessio, Emily Voeglein   ## ─ Session info ─────────────────────────────────────────────────────────────── ## setting value ## version R version 4.3.2 (2023-10-31) ## os Ubuntu 22.04.4 LTS ## system x86_64, linux-gnu ## ui X11 ## language (EN) ## collate en_US.UTF-8 ## ctype en_US.UTF-8 ## tz Etc/UTC ## date 2024-08-05 ## pandoc 3.1.1 @ /usr/local/bin/ (via rmarkdown) ## ## ─ Packages ─────────────────────────────────────────────────────────────────── ## package * version date (UTC) lib source ## bookdown 0.39.1 2024-06-11 [1] Github (rstudio/bookdown@f244cf1) ## bslib 0.6.1 2023-11-28 [1] RSPM (R 4.3.0) ## cachem 1.0.8 2023-05-01 [1] RSPM (R 4.3.0) ## cli 3.6.2 2023-12-11 [1] RSPM (R 4.3.0) ## devtools 2.4.5 2022-10-11 [1] RSPM (R 4.3.0) ## digest 0.6.34 2024-01-11 [1] RSPM (R 4.3.0) ## ellipsis 0.3.2 2021-04-29 [1] RSPM (R 4.3.0) ## evaluate 0.23 2023-11-01 [1] RSPM (R 4.3.0) ## fastmap 1.1.1 2023-02-24 [1] RSPM (R 4.3.0) ## fs 1.6.3 2023-07-20 [1] RSPM (R 4.3.0) ## glue 1.7.0 2024-01-09 [1] RSPM (R 4.3.0) ## htmltools 0.5.7 2023-11-03 [1] RSPM (R 4.3.0) ## htmlwidgets 1.6.4 2023-12-06 [1] RSPM (R 4.3.0) ## httpuv 1.6.14 2024-01-26 [1] RSPM (R 4.3.0) ## jquerylib 0.1.4 2021-04-26 [1] RSPM (R 4.3.0) ## jsonlite 1.8.8 2023-12-04 [1] RSPM (R 4.3.0) ## knitr 1.47.3 2024-06-11 [1] Github (yihui/knitr@e1edd34) ## later 1.3.2 2023-12-06 [1] RSPM (R 4.3.0) ## lifecycle 1.0.4 2023-11-07 [1] RSPM (R 4.3.0) ## magrittr 2.0.3 2022-03-30 [1] RSPM (R 4.3.0) ## memoise 2.0.1 2021-11-26 [1] RSPM (R 4.3.0) ## mime 0.12 2021-09-28 [1] RSPM (R 4.3.0) ## miniUI 0.1.1.1 2018-05-18 [1] RSPM (R 4.3.0) ## pkgbuild 1.4.3 2023-12-10 [1] RSPM (R 4.3.0) ## pkgload 1.3.4 2024-01-16 [1] RSPM (R 4.3.0) ## profvis 0.3.8 2023-05-02 [1] RSPM (R 4.3.0) ## promises 1.2.1 2023-08-10 [1] RSPM (R 4.3.0) ## purrr 1.0.2 2023-08-10 [1] RSPM (R 4.3.0) ## R6 2.5.1 2021-08-19 [1] RSPM (R 4.3.0) ## Rcpp 1.0.12 2024-01-09 [1] RSPM (R 4.3.0) ## remotes 2.4.2.1 2023-07-18 [1] RSPM (R 4.3.0) ## rlang 1.1.4 2024-06-04 [1] CRAN (R 4.3.2) ## rmarkdown 2.27.1 2024-06-11 [1] Github (rstudio/rmarkdown@e1c93a9) ## sass 0.4.8 2023-12-06 [1] RSPM (R 4.3.0) ## sessioninfo 1.2.2 2021-12-06 [1] RSPM (R 4.3.0) ## shiny 1.8.0 2023-11-17 [1] RSPM (R 4.3.0) ## stringi 1.8.3 2023-12-11 [1] RSPM (R 4.3.0) ## stringr 1.5.1 2023-11-14 [1] RSPM (R 4.3.0) ## urlchecker 1.0.1 2021-11-30 [1] RSPM (R 4.3.0) ## usethis 2.2.3 2024-02-19 [1] RSPM (R 4.3.0) ## vctrs 0.6.5 2023-12-01 [1] RSPM (R 4.3.0) ## xfun 0.44.4 2024-06-11 [1] Github (yihui/xfun@9da62cc) ## xtable 1.8-4 2019-04-21 [1] RSPM (R 4.3.0) ## yaml 2.3.8 2023-12-11 [1] RSPM (R 4.3.0) ## ## [1] /usr/local/lib/R/site-library ## [2] /usr/local/lib/R/library ## ## ────────────────────────────────────────────────────────────────────────────── "],["references.html", "Chapter 14 References", " Chapter 14 References "],["404.html", "Page not found", " Page not found The page you requested cannot be found (perhaps it was moved or renamed). You may want to try searching to find the page's new location, or use the table of contents to find the page you are looking for. "]] diff --git a/docs/setting-up-billing-on-anvil.html b/docs/setting-up-billing-on-anvil.html new file mode 100644 index 0000000..63b38d5 --- /dev/null +++ b/docs/setting-up-billing-on-anvil.html @@ -0,0 +1,388 @@ + + + + + + + Chapter 8 Setting up Billing on AnVIL | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+
+

Chapter 8 Setting up Billing on AnVIL

+

The following will help you set up billing for your class. You will:
+* Set up a billing project for tracking costs +* Add yourself and students to the billing project to grant permission to AnVIL resources +* Learn about different sources of costs in AnVIL +* Estimate costs for your class +* Learn about how to track costs during your class

+
+

8.1 Creating a billing project

+

First, create the Billing Project. Billing Project names must be globally unique and cannot exceed 30 characters. We suggest the name of the Billing Project should be a combination of institution-class- (e.g., “jhu-bmr2021-bill-1”). To create a Billing Project:

+
    +
  1. Go to https://anvil.terra.bio/#billing

  2. +
  3. Click “+CREATE”

    +

    Screenshot of the Terra Billing page. The "+CREATE" button is highlighted.

  4. +
  5. Type in your Billing Project name

    +

    Screenshot of the Terra Billing page with Create Billing Project pop out box. The new billing project name, jhu-bmr2021-instructors-bill-1, is highlighted.

  6. +
  7. Select the appropriate Billing Account

    +

    Screenshot of the Terra Billing page with Create Billing Project pop out box. The appropriate billing account name, My Billing Account, is highlighted.

  8. +
  9. Click “CREATE BILLING PROJECT”

    +

    Screenshot of the Terra Billing page with Create Billing Project pop out box. The "CREATE BILLING PROJECT" button is highlighted.

  10. +
+

You now have a unique Billing Project.

+
+
+

8.2 Adding Instructors as “Owner”

+

Next, you want to give instructors permission to use the Billing Project to compute. To set instructor permissions:

+
    +
  1. Go to https://anvil.terra.bio/#billing

  2. +
  3. Select the “Owned by You” Billing Project sub-list

    +

    Screenshot of the AnVIL Billing page. The "Owned by You" billing list is highlighted.

  4. +
  5. Select the Billing Project you made in Instructor Billing Project

    +

    Screenshot of the AnVIL Billing page. The "Owned by You" billing list has been expanded. The instructor Billing project, in this case jhu-bmr2021-instructors, is highlighted.

  6. +
  7. Select the “Users” tab

    +

    Screenshot of the AnVIL Billing page. The instructor Billing project, in this case jhu-bmr2021-instructors, has been selected and the Users Tab is highlighted.

  8. +
  9. Click “+ Add User”. You will be prompted to add a “User email *”.

    +

    Screenshot of the AnVIL Billing page. The instructor Billing project, in this case jhu-bmr2021-instructors, has been selected and the "+Add User" button is highlighted.

  10. +
  11. Begin typing the instructor Group name set up in Instructor Group. You should see an email in the form (firecloud.org?) (e.g., ).

  12. +
  13. Ensure “Can manage users (Owner)” is selected

    +

    Screenshot of the AnVIL Billing page with the "Add User" pop out box. The instructor Group email, in this case jhu-bmr2021-instructors@firecloud.org, has been filled in and the Owner role checkbox has been ticked.

  14. +
  15. Click “ADD USER”

    +

    Screenshot of the AnVIL Billing page with the "Add User" pop out box. The instructor Group email, in this case jhu-bmr2021-instructors@firecloud.org, has been filled in and the Owner role checkbox has been ticked. The "ADD USER" button is highlighted.

  16. +
+
+

This step makes it so that co-instructors can edit permissions and administer the Billing Project as needed. While this means you and co-instructors can compute using the student Billing Project, this makes spending difficult to track. Instructors should always use the instructor Workspace to compute. This makes it much easier to track costs associated with instructors versus students.

+
+
+
+

8.3 Adding Students as “User”

+

Next, you will add your student Group to the Billing Project so that they can compute. To set student permissions:

+
    +
  1. Go to https://anvil.terra.bio/#billing

  2. +
  3. Select the “Owned by You” Billing Project sub-list

    +

    Screenshot of the AnVIL Billing page. The "Owned by You" billing list is highlighted.

  4. +
  5. Select the Billing Project you made in Billing Project

    +

    Screenshot of the AnVIL Billing page. The "Owned by You" billing list has been expanded. The student Billing project, in this case jhu-bmr2021-students, is highlighted.

  6. +
  7. Select the “Users” tab

    +

    Screenshot of the AnVIL Billing page. The student Billing project, in this case jhu-bmr2021-students, has been selected and the Users Tab is highlighted.

  8. +
  9. Click “+ Add User”. You will be prompted to add a “User email *”.

    +

    Screenshot of the AnVIL Billing page. The student Billing project, in this case jhu-bmr2021-students, has been selected and the "+Add User" button is highlighted.

  10. +
  11. Begin typing the student Group name set up in Student Group. You should see an email in the form (firecloud.org?) (e.g., ).

  12. +
  13. Keep “Can manage users (Owner)” deselected.

    +

    Screenshot of the AnVIL Billing page with the "Add User" pop out box. The student Group email, in this case jhu-bmr2021-students@firecloud.org, has been filled in and the Owner role checkbox has NOT been ticked.

  14. +
  15. Click “ADD USER”

    +

    Screenshot of the AnVIL Billing page with the "Add User" pop out box. The student Group email, in this case jhu-bmr2021-students@firecloud.org, has been filled in and the Owner role checkbox has NOT been ticked. The "ADD USER" button is highlighted.

  16. +
+
+
+

8.4 Understanding the various billing costs

+

Costs in AnVIL fall into one of three categories: compute costs, storage costs, and network usage (egress) costs. Compute costs are those that students accrue when actively using an AnVIL Workspace. Students can clone a Workspace for no cost, but they will begin to accrue costs as soon as they set up a cloud environment. Compute costs are based on how many CPUs you need, as well as how much memory and storage space you choose. You can also pause the Workspace and pay a lower cost per hour than if you were to keep the Workspace running. Current prices can be found here.

+

Storage costs are driven by the persistent disk. The persistent disk allows you to store data and installed programs/libraries for a low cost. Students can delete their Workspaces but maintain their persistent disk so they still have access to previous programs they have installed and previous files they’ve created. Current prices can be found here.

+

Finally, network usage costs are those involved with transferring data between networks or downloading data from the cloud to your local computer. Current prices can be found here.

+
+
+

8.5 Estimating costs before the class begins

+

AnVIL has a free AnVIL_Cost_Estimator that allows you estimate compute, storage, and network usage costs for your class. This is a Google sheet that you can tailor to fit your needs. Before you use it, make sure the prices are up to date by following the links at the bottom of the sheet.

+

If you need to create a Budget Justification for your class, you can also use the free AnVIL_Budget_Justification template.

+
+
+

8.6 How much does a class cost?

+

One of the advantages of billing projects in Terra is that you can keep track of the costs during real time. You can see how much each Workspace is costing while your course is happening, so there are no unexpected surprises at the end!

+

Full details about billing in Terra can be found here. These instructions are adapted from Terra Support.

+

To view the costs being accrued by each billing project, you can go to https://console.cloud.google.com/billing. At the top of the page, there is a dropdown menu. Choose the billing project name you’d like to view.

+

Locating dropdown menu

+

Once you are in proper billing project, you click on “View detailed charges” in the Billing section on the far right.

+

Locating detailed charges

+

This takes you to a report of the detailed charges accrued by the billing account. Here, you will be able to see the total cost over a time range, as well as costs broken down by services.

+

Locating dropdown menu

+
+
+
+
+ +
+
+ +
+
+
+ + +
+
+ + + + + + + + + + + + + diff --git a/docs/setting-up-the-class-activity.html b/docs/setting-up-the-class-activity.html new file mode 100644 index 0000000..b208056 --- /dev/null +++ b/docs/setting-up-the-class-activity.html @@ -0,0 +1,551 @@ + + + + + + + Chapter 9 Setting up the Class Activity | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+
+

Chapter 9 Setting up the Class Activity

+
+

9.1 Overview of Class Setup

+

This section will show you how to organize your class to make it easier to administer access to your content. You will need to have a list of who will be taking your class, such as a course roster or sign-up list, as well as a list of additional instructors or teaching assistants. You can make changes later, so the list of students need not be final.

+
+
+

9.2 Collect Google IDs

+

AnVIL IDs are based on Google accounts.

+

Students – Contact students/participants to get their AnVIL IDs. These should be Gmail addresses or emails with GSuite capabilities. You can link students to Student Account Setup for instructions on what they should do.

+

Co-instructors – If you will be working with other instructors, such as co-instructors or teaching assistants, you will need to collect their IDs as well.

+
+
+

9.3 Set Up Groups

+

Reminder:

+
    +
  • Google Billing Accounts are managed on Google Cloud Platform and are used for organizing funding sources (e.g. credit cards, cloud credits).
  • +
  • Terra Billing Projects are managed through Terra, and allow you to associate your Terra activity with the correct Google Billing Account.
  • +
+

For a more detailed explanation, please see the chapter on Account Setup.

+

We suggest creating two different Terra Billing Projects under the appropriate Billing Account that you created on cloud.google.com: one for students and one for co-instructors. The instructions below will walk you through how to set this up.

+

Groups enable you to share your class Workspace and manage permissions for many people at once. We recommend starting with one Group for instructors and one Group for students.

+
+

Instructor Group {#instructor-group}

+

Create an informative, unique Group name for any co-instructors and teaching assistants. We suggest a combination of institution-class-role (e.g., “jhu-bmr2021-instructors”). Only letters, numbers, underscores, and dashes are allowed in Group names. To create a Group for instructors:

+
    +
  1. Go to https://anvil.terra.bio/#groups

  2. +
  3. Click “+ Create a New Group”

    +

    Screenshot of the Terra Group page. The "Create a New Group" button is highlighted.

  4. +
  5. Type in your instructor Group name

  6. +
  7. Click “CREATE GROUP”

    +

    Screenshot of the Terra Group page with Create New Group pop out box. The Group name, jhu-bmr2021-instructors, has been entered and the "CREATE GROUP" button is highlighted.

  8. +
+

You now have a unique instructor Group.

+
+

Add Instructors as “Admin” (Instructor Group)

+

Now that your instructor Group has been created, you should add any additional instructors. You should also ensure that they have the correct permissions.

+
    +
  1. Go to https://anvil.terra.bio/#groups/ and click on the instructor Group name. This page should also be visible at https://anvil.terra.bio/#groups/<group-name>.

    +

    Screenshot of the Terra Group, and the specific Group that was just created. The Group Name is highlighted.

  2. +
  3. Click on “+Add User”. You will be prompted to add the instructor’s AnVIL ID.

    +

    Screenshot of the Terra Group page for the specific Group that was just created. The "+Add User" button is highlighted.

  4. +
  5. Type in the instructor’s AnVIL ID

    +

    Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The instructor`s AnVIL ID, instructor-1@gmail.com, has been entered and the AnVIL ID (email) is highlighted.

  6. +
  7. Make sure “Can manage users (admin)” is selected

    +

    Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The instructor`s AnVIL ID, instructor-1@gmail.com, has been entered and the checkbox "Can manage users (admin)" has been selected and is highlighted.

  8. +
  9. Click ADD USER. This will take you back to the Group administration page.

    +

    Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The instructor`s AnVIL ID, instructor-1@gmail.com, has been entered and the "ADD USER" button is highlighted.

  10. +
+

Make sure the newly added instructor displays “Admin” under “Roles” beside their AnVIL ID. Repeat this process for any additional co-instructors and teaching assistants.

+

Screenshot of the Terra Group for the instructor Group that was just created, where the newly added instructor is visible in the user list. The instructor`s AnVIL ID, instructor-1@gmail.com is visible next to the role "Admin", which is highlighted.

+
+
+
+

Student Group {#student-group}

+

Next, you will create a Group for your students. Create an informative, unique Group name. We suggest a combination of institution-class-role (e.g., “jhu-bmr2021-students”). Only letters, numbers, underscores, and dashes are allowed in Group names. To create a Group for students:

+
    +
  1. Go to https://anvil.terra.bio/#groups

  2. +
  3. Click “+ Create a New Group”

    +

    Screenshot of the Terra Group page. The "Create a New Group" button is highlighted.

  4. +
  5. Type in your student Group name

  6. +
  7. Click “CREATE GROUP”

    +

    Screenshot of the Terra Group page with Create New Group pop out box. The Group name, jhu-bmr2021-students, has been entered and the "CREATE GROUP" button is highlighted.

  8. +
+

You now have a unique student Group.

+
+

Add Instructors as “Admin” (Student Group)

+

The next steps ensure any additional co-instructors and teaching assistants are able to administer the student Group in case you are unavailable. Follow the steps below to add each co-instructor in the student Group:

+
    +
  1. Go to https://anvil.terra.bio/#groups/ and click on the student Group name. This page should be visible at https://anvil.terra.bio/#groups/<group-name>.

    +

    Screenshot of the Terra Group, and the specific Group that was just created. The student Group name is highlighted.

  2. +
  3. Click on “+Add User”. You will be prompted to add the instructor’s AnVIL ID.

    +

    Screenshot of the Terra Group page for the specific Group that was just created. The "+Add User" button is highlighted.

  4. +
  5. Type in the instructor’s AnVIL ID

    +

    Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The instructor`s AnVIL ID, instructor-1@gmail.com, has been entered and the AnVIL ID (email) is highlighted.

  6. +
  7. Make sure “Can manage users (admin)” is selected

    +

    Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The instructor`s AnVIL ID, instructor-1@gmail.com, has been entered and the checkbox "Can manage users (admin)" has been selected and is highlighted.

  8. +
  9. Click ADD USER. This will take you back to the Group administration page.

    +

    Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The instructor`s AnVIL ID, instructor-1@gmail.com, has been entered and the "ADD USER" button is highlighted.

  10. +
+

Make sure the newly added instructor displays “Admin” under “Roles” beside their AnVIL ID. Repeat this process for any additional co-instructors and teaching assistants.

+

Screenshot of the Terra Group for the student Group that was just created, where the newly added instructor is visible in the user list. The instructor`s AnVIL ID, instructor-1@gmail.com is visible next to the role "Admin", which is highlighted.

+
+
+

Add Students as “Member”

+

Follow the steps below to add individual students to the student Group:

+
    +
  1. Go to https://anvil.terra.bio/#groups/ and click on the student Group name. This page should be visible at https://anvil.terra.bio/#groups/<group-name>.

    +

    Screenshot of the Terra Group, and the specific Group that was just created. The student Group name is highlighted.

  2. +
  3. Click on “+Add User”. You will be prompted to add an AnVIL ID.

    +

    Screenshot of the Terra Group page for the specific Group that was just created. The "+Add User" button is highlighted.

  4. +
  5. Type in the student’s AnVIL ID

    +

    Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The student`s AnVIL ID, student-1@gmail.com, has been entered and the AnVIL ID (email) is highlighted.

  6. +
  7. Click ADD USER

    +

    Screenshot of the Terra Group for the specific Group that was just created, with "Add user to Terra Group" pop out box. The student`s AnVIL ID, student-1@gmail.com, has been entered and the "ADD USER" button is highlighted.

  8. +
+

Make sure the newly added student displays “Member” under “Roles” beside their AnVIL ID. At present, each student’s AnVIL ID must be added separately.

+

Screenshot of the Terra Group for the student Group that was just created, where the newly added student is visible in the user list. The student`s AnVIL ID, student-1@gmail.com is visible next to the role "Member", which is highlighted.

+

Your instructor and student Groups are now set up.

+
+
+
+

Group Email Lists

+

Note that your newly created Groups have Group emails associated with them. Take note of these Group emails. You will use them for granting access to your class Billing Projects and Workspaces in the next steps.

+

Screenshot of the Terra Group page. Emails associated with newly formed Groups have been highlighted.

+
+
+
+

9.4 Set Up Billing Projects

+

Billing Projects in Terra help organize your compute costs. Like Groups, we suggest creating two different billing projects under the appropriate Billing Account that you created on cloud.google.com: one for students and one for co-instructors.

+

Billing Project names must be globally unique and cannot exceed 30 characters.

+
+

Instructor Billing Project {#instructor-billing-project}

+

First, create the Billing Project for instructors. We suggest the name of the Billing Project should be a combination of institution-class-role (e.g., “jhu-bmr2021-instructors-bill-1”). To create a Billing Project for instructors:

+
    +
  1. Go to https://anvil.terra.bio/#billing

  2. +
  3. Click “+CREATE”

    +

    Screenshot of the Terra Billing page. The "+CREATE" button is highlighted.

  4. +
  5. Type in your instructor Billing Project name

    +

    Screenshot of the Terra Billing page with Create Billing Project pop out box. The new billing project name, jhu-bmr2021-instructors-bill-1, is highlighted.

  6. +
  7. Select the appropriate Billing Account

    +

    Screenshot of the Terra Billing page with Create Billing Project pop out box. The appropriate billing account name, My Billing Account, is highlighted.

  8. +
  9. Click “CREATE BILLING PROJECT”

    +

    Screenshot of the Terra Billing page with Create Billing Project pop out box. The "CREATE BILLING PROJECT" button is highlighted.

  10. +
+

You now have a unique instructor Billing Project.

+
+

Add Instructors as “Owner” (Instructor Project)

+

Next, you want to give instructors permission to use the Billing Project to compute. To set instructor permissions:

+
    +
  1. Go to https://anvil.terra.bio/#billing

  2. +
  3. Select the “Owned by You” Billing Project sub-list

    +

    Screenshot of the AnVIL Billing page. The "Owned by You" billing list is highlighted.

  4. +
  5. Select the Billing Project you made for instructors in Instructor Billing Project

    +

    Screenshot of the AnVIL Billing page. The "Owned by You" billing list has been expanded. The instructor Billing project, in this case jhu-bmr2021-instructors, is highlighted.

  6. +
  7. Select the “Users” tab

    +

    Screenshot of the AnVIL Billing page. The instructor Billing project, in this case jhu-bmr2021-instructors, has been selected and the Users Tab is highlighted.

  8. +
  9. Click “+ Add User”. You will be prompted to add a “User email *”.

    +

    Screenshot of the AnVIL Billing page. The instructor Billing project, in this case jhu-bmr2021-instructors, has been selected and the "+Add User" button is highlighted.

  10. +
  11. Begin typing the instructor Group name set up in Instructor Group. You should see an email in the form (firecloud.org?) (e.g., ).

  12. +
  13. Ensure “Can manage users (Owner)” is selected

    +

    Screenshot of the AnVIL Billing page with the "Add User" pop out box. The instructor Group email, in this case jhu-bmr2021-instructors@firecloud.org, has been filled in and the Owner role checkbox has been ticked.

  14. +
  15. Click “ADD USER”

    +

    Screenshot of the AnVIL Billing page with the "Add User" pop out box. The instructor Group email, in this case jhu-bmr2021-instructors@firecloud.org, has been filled in and the Owner role checkbox has been ticked. The "ADD USER" button is highlighted.

  16. +
+

Your instructor Billing Project is now set up.

+
+
+
+

Student Billing Project {#student-billing-project}

+

Next, create a student Billing Project. Again, we suggest a combination of institution-class-role (e.g., “jhu-bmr2021-students-bill-1”). To create a Billing Project for students:

+
    +
  1. Go to https://anvil.terra.bio/#billing

  2. +
  3. Click “+CREATE”

    +

    Screenshot of the Terra Billing page. The "+CREATE" button is highlighted.

  4. +
  5. Type in your student Billing Project name

    +

    Screenshot of the Terra Billing page with Create Billing Project pop out box. The new billing project name, jhu-bmr2021-students-bill-1, is highlighted.

  6. +
  7. Select the appropriate Billing Account (same as above)

    +

    Screenshot of the Terra Billing page with Create Billing Project pop out box. The appropriate billing account name, My Billing Account, is highlighted.

  8. +
  9. Click “CREATE BILLING PROJECT”

    +

    Screenshot of the Terra Billing page with Create Billing Project pop out box. The "CREATE BILLING PROJECT" button is highlighted.

  10. +
+

You now have a unique student Billing Project.

+
+

Add Instructors as “Owner” (Student Project)

+

You want to ensure any additional co-instructors and teaching assistants are able to administer the student Billing Project in case you are unavailable. To set instructor permissions:

+
    +
  1. Go to https://anvil.terra.bio/#billing

  2. +
  3. Select the “Owned by You” Billing Project sub-list

    +

    Screenshot of the AnVIL Billing page. The "Owned by You" billing list is highlighted.

  4. +
  5. Select the Billing Project you made for students in Student Billing Project

    +

    Screenshot of the AnVIL Billing page. The "Owned by You" billing list has been expanded. The student Billing project, in this case jhu-bmr2021-students, is highlighted.

  6. +
  7. Select the “Users” tab

    +

    Screenshot of the AnVIL Billing page. The student Billing project, in this case jhu-bmr2021-students, has been selected and the Users Tab is highlighted.

  8. +
  9. Click “+ Add User”. You will be prompted to add a “User email *”.

    +

    Screenshot of the AnVIL Billing page. The student Billing project, in this case jhu-bmr2021-students, has been selected and the "+Add User" button is highlighted.

  10. +
  11. Begin typing the instructor Group name set up in [### Set Up Groups]. You should see an email in the form (firecloud.org?) (e.g., ).

  12. +
  13. Ensure “Can manage users (Owner)” is selected

    +

    Screenshot of the AnVIL Billing page with the "Add User" pop out box. The instructor Group email, in this case jhu-bmr2021-instructors@firecloud.org, has been filled in and the Owner role checkbox has been ticked.

  14. +
  15. Click “ADD USER”

    +

    Screenshot of the AnVIL Billing page with the "Add User" pop out box. The instructor Group email, in this case jhu-bmr2021-instructors@firecloud.org, has been filled in and the Owner role checkbox has been ticked. The "ADD USER" button is highlighted.

  16. +
+
+

This step makes it so that co-instructors can edit permissions and administer the student Billing Project as needed. While this means you and co-instructors can compute using the student Billing Project, this makes spending difficult to track. Instructors should always use the instructor Billing Project to compute. This makes it much easier to track costs associated with instructors versus students.

+
+
+
+

Add Students as “User”

+

Next, you will add your student Group to the student Billing Project so that they can compute. To set student permissions:

+
    +
  1. Go to https://anvil.terra.bio/#billing

  2. +
  3. Select the “Owned by You” Billing Project sub-list

    +

    Screenshot of the AnVIL Billing page. The "Owned by You" billing list is highlighted.

  4. +
  5. Select the Billing Project you made for students in Student Billing Project

    +

    Screenshot of the AnVIL Billing page. The "Owned by You" billing list has been expanded. The student Billing project, in this case jhu-bmr2021-students, is highlighted.

  6. +
  7. Select the “Users” tab

    +

    Screenshot of the AnVIL Billing page. The student Billing project, in this case jhu-bmr2021-students, has been selected and the Users Tab is highlighted.

  8. +
  9. Click “+ Add User”. You will be prompted to add a “User email *”.

    +

    Screenshot of the AnVIL Billing page. The student Billing project, in this case jhu-bmr2021-students, has been selected and the "+Add User" button is highlighted.

  10. +
  11. Begin typing the student Group name set up in Student Group. You should see an email in the form (firecloud.org?) (e.g., ).

  12. +
  13. Keep “Can manage users (Owner)” deselected.

    +

    Screenshot of the AnVIL Billing page with the "Add User" pop out box. The student Group email, in this case jhu-bmr2021-students@firecloud.org, has been filled in and the Owner role checkbox has NOT been ticked.

  14. +
  15. Click “ADD USER”

    +

    Screenshot of the AnVIL Billing page with the "Add User" pop out box. The student Group email, in this case jhu-bmr2021-students@firecloud.org, has been filled in and the Owner role checkbox has NOT been ticked. The "ADD USER" button is highlighted.

  16. +
+

Your student Billing Project is now set up.

+
+
+
+
+

9.5 Set Permissions on the Workspace

+

Finally, you will want to set up permissions for co-instructors and students to see the class Workspace you created with the development Billing Project in Developing Content. AnVIL users can take on the “Owner”, “Writer”, or “Reader” role for a Workspace.

+
+

Add Instructors as “Owner”

+

You should add your co-instructors and teaching assistants as “Owners” to the class Workspace. This is useful if they need to edit the course content or share the space with students on your behalf. To share and change permissions:

+
    +
  1. Go to https://anvil.terra.bio/#workspaces and find your class Workspace you set up in Developing Content

  2. +
  3. Click the teardrop button for your class Workspace

  4. +
  5. Click “Share”. This will open a dialog box.

    +

    Screenshot of the class Workspace listed in the Workspaces tab. The teardrop button and the option to "Share" the Workspace are highlighted.

  6. +
  7. Enter the name of the instructor Group (e.g., jhu-bmr2021-instructors). This will create a dropdown for the Group permissions in the box. Select this Group.

    +

    Screenshot of the share Workspace pop out box. The text "jhu-bmr" has been entered in the User email box and the dropdown below has been automatically filtered to reveal the instructor, student, and dev Groups. The instructor Group, in this case jhu-bmr2021-instructors@firecloud.org, has been highlighted.

  8. +
  9. Change permissions to “Owner” using the dropdown menu under the instructor Group

    +

    Screenshot of the share Workspace pop out box. The instructor Group, in this case jhu-bmr2021-instructors@firecloud.org, has been added as a collaborator. The permissions are highlighted and show that role has been set to "Owner".

  10. +
  11. Click “SAVE”

    +

    Screenshot of the share Workspace pop out box. The instructor Group email has been added with permissions correctly set. The "SAVE" button is highlighted.

  12. +
+
+

This step makes it so that co-instructors can edit the original content of the Workspace as needed. While this means you and co-instructors can compute using the development Billing Project, this makes spending difficult to track. Instructors should instead clone the Workspace using the instructor Billing Project. This makes it much easier to track costs associated with this iteration of your class versus further iterations (e.g., the following semester or year).

+
+
+
+

Add Students as “Reader”

+

Next, add your students as “Readers” to the class Workspace. This means they will be able to view and clone the Workspace, but not make edits or perform computations. To share the Workspace:

+
    +
  1. Click the teardrop button for your class Workspace

  2. +
  3. Click “Share”. This will open a dialog box.

    +

    Screenshot of the class Workspace listed in the Workspaces tab. The teardrop button and the option to "Share" the Workspace are highlighted.

  4. +
  5. Enter the name of the student Group. This will create a dropdown for the Group permissions in the box. Select this Group.

    +

    Screenshot of the share Workspace pop out box. The text "jhu-bmr" has been entered in the User email box and the dropdown below has been automatically filtered to reveal the student and dev Groups. The student Group, in this case jhu-bmr2021-students@firecloud.org, has been highlighted.

  6. +
  7. Ensure permissions are set to “Reader” (default)

    +

    Screenshot of the share Workspace pop out box. The student Group, in this case jhu-bmr2021-students@firecloud.org, has been added as a collaborator. The permissions are highlighted and show that role is "Reader".

  8. +
  9. Click “SAVE”

    +

    Screenshot of the share Workspace pop out box. The student Group email has been added with permissions correctly set. The "SAVE" button is highlighted.

  10. +
+

You have now correctly set up your class permissions!

+
+
+
+

9.6 Notify Terra

+

Contacting Terra ahead of your class time helps the Terra team avoid any major disruptions to your class. Contact Terra by submitting a request for a hold on scheduled maintenance and downtime. It’s also a good idea to ask about major changes planned for the time prior to your class.

+
+
+
+
+ +
+
+ +
+
+
+ + +
+
+ + + + + + + + + + + + + diff --git a/docs/support.html b/docs/support.html new file mode 100644 index 0000000..dc10a5b --- /dev/null +++ b/docs/support.html @@ -0,0 +1,317 @@ + + + + + + + Chapter 3 Support | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+
+

Chapter 3 Support

+

This project would not be possible without financial and technical support from many organizations and people.

+
+

3.1 Funding

+

Funding for this project has been provided by the National Human Genome Research Institute (Contract # 75N92022P00232 awarded to Johns Hopkins University).

+
+
+

3.2 Sponsors

+

PacBio and CosmosID have graciously donated supplies.

+

Advances in Genome Biology and Technology provided funding support for several team members to attend AGBT 2024.

+
+
+

3.3 Analytical and Computational Support

+

Computational support has been provided by NHGRI’s AnVIL cloud computing platform and Galaxy.

+
+
+
+ +
+
+ +
+ + +
+
+
+ + +
+ + + + + + + + + + + + + + diff --git a/docs/using-rstudio-on-anvil.html b/docs/using-rstudio-on-anvil.html new file mode 100644 index 0000000..ab09553 --- /dev/null +++ b/docs/using-rstudio-on-anvil.html @@ -0,0 +1,403 @@ + + + + + + + Chapter 12 Using RStudio on AnVIL | BioDIGS in the Classroom: Exploring Soil Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + +
+
+ +
+ + + + + + + + +
+ +
+
+

Chapter 12 Using RStudio on AnVIL

+

In the next few steps, you will walk through how to get set up to use RStudio on the AnVIL platform. AnVIL is centered around different “Workspaces”. Each Workspace functions almost like a mini code laboratory - it is a place where data can be examined, stored, and analyzed. The first thing we want to do is to copy or “clone” a Workspace to create a space for you to experiment.

+

Use a web browser to go to the AnVIL website. In the browser type:

+
anvil.terra.bio
+
+

Tip +At this point, it might make things easier to open up a new window in your browser and split your screen. That way, you can follow along with this guide on one side and execute the steps on the other.

+
+

Your instructor will give you information on which workspace you should clone.

+
+

12.1 Video overview of RStudio on AnVIL

+

Here is a video tutorial that describes the basics of using RStudio on AnVIL.

+ +
+

12.1.1 Objectives

+
    +
  • Start compute for your RStudio environment
  • +
  • Tour RStudio on AnVIL
  • +
  • Stop compute to minimize expenses
  • +
+
+
+

12.1.2 Slides

+

The slides for this tutorial are are located here.

+
+
+
+

12.2 Launching RStudio

+
+

AnVIL is very versatile and can scale up to use very powerful cloud computers. It’s very important that you select a cloud computing environment appropriate to your needs to avoid runaway costs. If you are uncertain, start with the default settings; it is fairly easy to increase your compute resources later, if needed, but harder to scale down.

+
+

Note that, in order to use RStudio, you must have access to a Terra Workspace with permission to compute (i.e. you must be a “Writer” or “Owner” of the Workspace).

+
    +
  1. Open Terra - use a web browser to go to anvil.terra.bio

  2. +
  3. In the drop-down menu on the left, navigate to “Workspaces”. Click the triple bar in the top left corner to access the menu. Click “Workspaces”.

    +

    Screenshot of Terra drop-down menu.  The "hamburger" button to extend the drop-down menu is highlighted, and the menu item "Workspaces" is highlighted.

  4. +
  5. Click on the name of your Workspace. You should be routed to a link that looks like: https://anvil.terra.bio/#workspaces/<billing-project>/<workspace-name>.

  6. +
  7. Click on the cloud icon on the far right to access your Cloud Environment options.

    +

    Screenshot of a Terra Workspace. The cloud icon to create a new cloud environment is highlighted.

  8. +
  9. In the dialogue box, click the “Settings” button under RStudio.

    +

    Screenshot of the Cloud Environment Details dialogue box. The Settings button under RStudio is highlighted.

  10. +
  11. You will see some details about the default RStudio cloud environment, and a list of costs because it costs a small amount of money to use cloud computing.

    +

    Screenshot of the RStudio Cloud Environment dialogue box. The cost to run the environment is highlighted.

  12. +
  13. If you are uncertain about what you need, the default configuration is a reasonable, cost-conservative choice. It is fairly easy to increase your compute resources later, if needed, but harder to scale down. Click the “Create” button.

    +

    Screenshot of the RStudio Cloud Environment dialogue box. The "CREATE" button is highlighted.

  14. +
  15. Otherwise, click “CUSTOMIZE” to modify the environment for your needs.

    +

    Screenshot of the RStudio Cloud Environment dialogue box. The "CUSTOMIZE" button is highlighted.

  16. +
  17. The dialogue box will close and you will be returned to your Workspace. You can see the status of your cloud environment by hovering over the RStudio logo. It will take a few minutes for Terra to request computers and install software.

    +

    Screenshot of a Terra Workspace. The hovertext for the RStudio icon is highlighted, and indicates that the status of the environment is "Creating".

  18. +
  19. When your environment is ready, its status will change to “Running”. Click on the RStudio logo to open a new dialogue box that will let you launch RStudio.

    +

    Screenshot of a Terra Workspace. The hovertext for the RStudio icon is highlighted, and indicates that the status of the environment is "Running".

  20. +
  21. Click the launch icon to open RStudio. This is also where you can pause, modify, or delete your environment when needed.

    +

    Screenshot of the RStudio Environment Details dialogue box. The "Open" button is highlighted.

  22. +
  23. You should now see the RStudio interface with information about the version printed to the console.

    +

    Screenshot of the RStudio environment interface.

  24. +
+
+
+

12.3 Touring RStudio

+

Next, we will be using RStudio and the package Glimma to create interactive plots. See this vignette for more information.

+
    +
  1. The Bioconductor team has created a very useful package to programmatically interact with Terra and Google Cloud. Install the AnVIL package. It will make some steps easier as we go along.

    +

    Screenshot of the RStudio environment interface. Code has been typed in the console and is highlighted.

  2. +
  3. You can now quickly install precompiled binaries using the AnVIL package’s install() function. We will use it to install the Glimma package and the airway package. The airway package contains a SummarizedExperiment data class. This data describes an RNA-Seq experiment on four human airway smooth muscle cell lines treated with dexamethasone.

  4. +
+

{Note: for some of the packages, you will have to install packaged from the CRAN repository, using the install.packages() function. The examples will show you which install method to use.}

+
<img src="resources/images/08-student_using_rstudio_files/figure-html//1BLTCaogA04bbeSD1tR1Wt-mVceQA6FHXa8FmFzIARrg_g11f12bc99af_0_56.png" title="Screenshot of the RStudio environment interface. Code has been typed in the console and is highlighted." alt="Screenshot of the RStudio environment interface. Code has been typed in the console and is highlighted." width="480" />
+
    +
  1. Load the example data.

    +

    Screenshot of the RStudio environment interface. Code has been typed in the console and is highlighted.

  2. +
  3. The multidimensional scaling (MDS) plot is frequently used to explore differences in samples. When this data is MDS transformed, the first two dimensions explain the greatest variance between samples, and the amount of variance decreases monotonically with increasing dimension. The following code will launch a new window where you can interact with the MDS plot.

    +

    Screenshot of the Glimma popout showing the data in an MDS plot. All data points are blue.

  4. +
  5. Change the colour_by setting to “groups” so you can easily distinguish between groups. In this data, the “group” is the treatment.

    +

    Screenshot of the Glimma popout showing the data in an MDS plot. Data points are colored blue and orange by group. The colour by dropdown menu on the interactive plot is hightlighted.

  6. +
  7. You can download the interactive html file by clicking on “Save As”.

    +

    Screenshot of the Glimma popout showing the data in an MDS plot. The Save As menu is highlighted.

  8. +
  9. You can also download plots and other files created directly in RStudio. To download the following plot, click on “Export” and save in your preferred format to the default directory. This saves the file in your cloud environment.

    +

    Screenshot of the RStudio interface. A plot has been created. The Export menu has been highlighted.

  10. +
  11. You should see the plot in the “Files” pane.

    +

    Screenshot of the RStudio interface. A plot has been created. The saved pdf file is now visible under the "Files" pane.

  12. +
  13. Select this file and click “More” > “Export”

    +

    Screenshot of the RStudio interface. A plot has been created. The saved pdf file is now visible under the "Files" pane. The "More" and "Export" menus have been highlighted.

  14. +
  15. Select “Download” to save the file to your local machine.

    +

    Screenshot of the RStudio interface. The popup to download the selected file has been highlighted,

  16. +
+
+
+

12.4 Pausing RStudio

+
    +
  1. The right-hand side icon reminds you that you are accruing cloud computing costs. If you don’t see this icon, you may need to scroll to the right.

    +

    Screenshot of the RStudio interface. The icon on the right showing that the cloud environment is running is highlighted.

  2. +
  3. You should minimize charges when you are not performing an analysis. You can do this by clicking on the RStudio icon and selecting “Pause”. This will release the CPU and memory resources for other people to use. Note that your work will be saved in the environment and continue to accrue a very small cost. This work will be lost if the cloud environment gets deleted. If there is anything you would like to save permanently, it’s a good idea to copy it from your compute environment to another location, such as the Workspace bucket, GitHub, or your local machine, depending on your needs.

    +

    Screenshot of the RStudio menu. The pause button which stops the cloud environment is highlighted.

  4. +
+
+

You can also pause your cloud environment(s) at https://anvil.terra.bio/#clusters.

+
+
+
+ + + + +
+
+ +
+
+ +
+
+
+ + +
+
+ + + + + + + + + + + + +