diff --git a/preview/pr-27/404.html b/preview/pr-27/404.html new file mode 100644 index 0000000..2fdfc17 --- /dev/null +++ b/preview/pr-27/404.html @@ -0,0 +1,515 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +404 | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

+ Page Not Found

+ +

Try searching the whole site for the content you want:

+ +
+ + +
+
+ + +
+ + + + + + + diff --git a/preview/pr-27/_scripts/anchors.js b/preview/pr-27/_scripts/anchors.js new file mode 100644 index 0000000..904edf9 --- /dev/null +++ b/preview/pr-27/_scripts/anchors.js @@ -0,0 +1,47 @@ +/* + creates link next to each heading that links to that section. +*/ + +{ + const onLoad = () => { + // for each heading + const headings = document.querySelectorAll( + "h1[id], h2[id], h3[id], h4[id]" + ); + for (const heading of headings) { + // create anchor link + const link = document.createElement("a"); + link.classList.add("icon", "fa-solid", "fa-link", "anchor"); + link.href = "#" + heading.id; + link.setAttribute("aria-label", "link to this section"); + heading.append(link); + + // if first heading in the section, move id to parent section + if (heading.matches("section > :first-child")) { + heading.parentElement.id = heading.id; + heading.removeAttribute("id"); + } + } + }; + + // scroll to target of url hash + const scrollToTarget = () => { + const id = window.location.hash.replace("#", ""); + const target = document.getElementById(id); + + if (!target) return; + const offset = document.querySelector("header").clientHeight || 0; + window.scrollTo({ + top: target.getBoundingClientRect().top + window.scrollY - offset, + behavior: "smooth", + }); + }; + + // after page loads + window.addEventListener("load", onLoad); + window.addEventListener("load", scrollToTarget); + window.addEventListener("tagsfetched", scrollToTarget); + + // when hash nav happens + window.addEventListener("hashchange", scrollToTarget); +} diff --git a/preview/pr-27/_scripts/dark-mode.js b/preview/pr-27/_scripts/dark-mode.js new file mode 100644 index 0000000..b0124d9 --- /dev/null +++ b/preview/pr-27/_scripts/dark-mode.js @@ -0,0 +1,28 @@ +/* + manages light/dark mode. +*/ + +{ + // save/load user's dark mode preference from local storage + const loadDark = () => window.localStorage.getItem("dark-mode") === "true"; + const saveDark = (value) => window.localStorage.setItem("dark-mode", value); + + // immediately load saved mode before page renders + document.documentElement.dataset.dark = loadDark(); + + const onLoad = () => { + // update toggle button to match loaded mode + document.querySelector(".dark-toggle").checked = + document.documentElement.dataset.dark === "true"; + }; + + // after page loads + window.addEventListener("load", onLoad); + + // when user toggles mode button + window.onDarkToggleChange = (event) => { + const value = event.target.checked; + document.documentElement.dataset.dark = value; + saveDark(value); + }; +} diff --git a/preview/pr-27/_scripts/fetch-tags.js b/preview/pr-27/_scripts/fetch-tags.js new file mode 100644 index 0000000..c843b67 --- /dev/null +++ b/preview/pr-27/_scripts/fetch-tags.js @@ -0,0 +1,67 @@ +/* + fetches tags (aka "topics") from a given GitHub repo and adds them to row of + tag buttons. specify repo in data-repo attribute on row. +*/ + +{ + const onLoad = async () => { + // get tag rows with specified repos + const rows = document.querySelectorAll("[data-repo]"); + + // for each repo + for (const row of rows) { + // get props from tag row + const repo = row.dataset.repo.trim(); + const link = row.dataset.link.trim(); + + // get tags from github + if (!repo) continue; + let tags = await fetchTags(repo); + + // filter out tags already present in row + let existing = [...row.querySelectorAll(".tag")].map((tag) => + window.normalizeTag(tag.innerText) + ); + tags = tags.filter((tag) => !existing.includes(normalizeTag(tag))); + + // add tags to row + for (const tag of tags) { + const a = document.createElement("a"); + a.classList.add("tag"); + a.innerHTML = tag; + a.href = `${link}?search="tag: ${tag}"`; + a.dataset.tooltip = `Show items with the tag "${tag}"`; + row.append(a); + } + + // delete tags container if empty + if (!row.innerText.trim()) row.remove(); + } + + // emit "tags done" event for other scripts to listen for + window.dispatchEvent(new Event("tagsfetched")); + }; + + // after page loads + window.addEventListener("load", onLoad); + + // GitHub topics endpoint + const api = "https://api.github.com/repos/REPO/topics"; + const headers = new Headers(); + headers.set("Accept", "application/vnd.github+json"); + + // get tags from GitHub based on repo name + const fetchTags = async (repo) => { + const url = api.replace("REPO", repo); + try { + const response = await (await fetch(url)).json(); + if (response.names) return response.names; + else throw new Error(JSON.stringify(response)); + } catch (error) { + console.groupCollapsed("GitHub fetch tags error"); + console.log(error); + console.groupEnd(); + return []; + } + }; +} diff --git a/preview/pr-27/_scripts/search.js b/preview/pr-27/_scripts/search.js new file mode 100644 index 0000000..fa23ca4 --- /dev/null +++ b/preview/pr-27/_scripts/search.js @@ -0,0 +1,215 @@ +/* + filters elements on page based on url or search box. + syntax: term1 term2 "full phrase 1" "full phrase 2" "tag: tag 1" + match if: all terms AND at least one phrase AND at least one tag +*/ +{ + // elements to filter + const elementSelector = ".card, .citation, .post-excerpt"; + // search box element + const searchBoxSelector = ".search-box"; + // results info box element + const infoBoxSelector = ".search-info"; + // tags element + const tagSelector = ".tag"; + + // split search query into terms, phrases, and tags + const splitQuery = (query) => { + // split into parts, preserve quotes + const parts = query.match(/"[^"]*"|\S+/g) || []; + + // bins + const terms = []; + const phrases = []; + const tags = []; + + // put parts into bins + for (let part of parts) { + if (part.startsWith('"')) { + part = part.replaceAll('"', "").trim(); + if (part.startsWith("tag:")) + tags.push(normalizeTag(part.replace(/tag:\s*/, ""))); + else phrases.push(part.toLowerCase()); + } else terms.push(part.toLowerCase()); + } + + return { terms, phrases, tags }; + }; + + // normalize tag string for comparison + window.normalizeTag = (tag) => + tag.trim().toLowerCase().replaceAll(/-|\s+/g, " "); + + // get data attribute contents of element and children + const getAttr = (element, attr) => + [element, ...element.querySelectorAll(`[data-${attr}]`)] + .map((element) => element.dataset[attr]) + .join(" "); + + // determine if element should show up in results based on query + const elementMatches = (element, { terms, phrases, tags }) => { + // tag elements within element + const tagElements = [...element.querySelectorAll(".tag")]; + + // check if text content exists in element + const hasText = (string) => + ( + element.innerText + + getAttr(element, "tooltip") + + getAttr(element, "search") + ) + .toLowerCase() + .includes(string); + // check if text matches a tag in element + const hasTag = (string) => + tagElements.some((tag) => normalizeTag(tag.innerText) === string); + + // match logic + return ( + (terms.every(hasText) || !terms.length) && + (phrases.some(hasText) || !phrases.length) && + (tags.some(hasTag) || !tags.length) + ); + }; + + // loop through elements, hide/show based on query, and return results info + const filterElements = (parts) => { + let elements = document.querySelectorAll(elementSelector); + + // results info + let x = 0; + let n = elements.length; + let tags = parts.tags; + + // filter elements + for (const element of elements) { + if (elementMatches(element, parts)) { + element.style.display = ""; + x++; + } else element.style.display = "none"; + } + + return [x, n, tags]; + }; + + // highlight search terms + const highlightMatches = async ({ terms, phrases }) => { + // make sure Mark library available + if (typeof Mark === "undefined") return; + + // reset + new Mark(document.body).unmark(); + + // limit number of highlights to avoid slowdown + let counter = 0; + const filter = () => counter++ < 100; + + // highlight terms and phrases + new Mark(elementSelector) + .mark(terms, { separateWordSearch: true, filter }) + .mark(phrases, { separateWordSearch: false, filter }); + }; + + // update search box based on query + const updateSearchBox = (query = "") => { + const boxes = document.querySelectorAll(searchBoxSelector); + + for (const box of boxes) { + const input = box.querySelector("input"); + const button = box.querySelector("button"); + const icon = box.querySelector("button i"); + input.value = query; + icon.className = input.value.length + ? "icon fa-solid fa-xmark" + : "icon fa-solid fa-magnifying-glass"; + button.disabled = input.value.length ? false : true; + } + }; + + // update info box based on query and results + const updateInfoBox = (query, x, n) => { + const boxes = document.querySelectorAll(infoBoxSelector); + + if (query.trim()) { + // show all info boxes + boxes.forEach((info) => (info.style.display = "")); + + // info template + let info = ""; + info += `Showing ${x.toLocaleString()} of ${n.toLocaleString()} results
`; + info += "Clear search"; + + // set info HTML string + boxes.forEach((el) => (el.innerHTML = info)); + } + // if nothing searched + else { + // hide all info boxes + boxes.forEach((info) => (info.style.display = "none")); + } + }; + + // update tags based on query + const updateTags = (query) => { + const { tags } = splitQuery(query); + document.querySelectorAll(tagSelector).forEach((tag) => { + // set active if tag is in query + if (tags.includes(normalizeTag(tag.innerText))) + tag.setAttribute("data-active", ""); + else tag.removeAttribute("data-active"); + }); + }; + + // run search with query + const runSearch = (query = "") => { + const parts = splitQuery(query); + const [x, n] = filterElements(parts); + updateSearchBox(query); + updateInfoBox(query, x, n); + updateTags(query); + highlightMatches(parts); + }; + + // update url based on query + const updateUrl = (query = "") => { + const url = new URL(window.location); + let params = new URLSearchParams(url.search); + params.set("search", query); + url.search = params.toString(); + window.history.replaceState(null, null, url); + }; + + // search based on url param + const searchFromUrl = () => { + const query = + new URLSearchParams(window.location.search).get("search") || ""; + runSearch(query); + }; + + // return func that runs after delay + const debounce = (callback, delay = 250) => { + let timeout; + return (...args) => { + window.clearTimeout(timeout); + timeout = window.setTimeout(() => callback(...args), delay); + }; + }; + + // when user types into search box + const debouncedRunSearch = debounce(runSearch, 1000); + window.onSearchInput = (target) => { + debouncedRunSearch(target.value); + updateUrl(target.value); + }; + + // when user clears search box with button + window.onSearchClear = () => { + runSearch(); + updateUrl(); + }; + + // after page loads + window.addEventListener("load", searchFromUrl); + // after tags load + window.addEventListener("tagsfetched", searchFromUrl); +} diff --git a/preview/pr-27/_scripts/site-search.js b/preview/pr-27/_scripts/site-search.js new file mode 100644 index 0000000..caff0a6 --- /dev/null +++ b/preview/pr-27/_scripts/site-search.js @@ -0,0 +1,14 @@ +/* + for site search component. searches site/domain via google. +*/ + +{ + // when user submits site search form/box + window.onSiteSearchSubmit = (event) => { + event.preventDefault(); + const google = "https://www.google.com/search?q=site:"; + const site = window.location.origin; + const query = event.target.elements.query.value; + window.location = google + site + " " + query; + }; +} diff --git a/preview/pr-27/_scripts/tooltip.js b/preview/pr-27/_scripts/tooltip.js new file mode 100644 index 0000000..49eccfc --- /dev/null +++ b/preview/pr-27/_scripts/tooltip.js @@ -0,0 +1,41 @@ +/* + shows a popup of text on hover/focus of any element with the data-tooltip + attribute. +*/ + +{ + const onLoad = () => { + // make sure Tippy library available + if (typeof tippy === "undefined") return; + + // get elements with non-empty tooltips + const elements = [...document.querySelectorAll("[data-tooltip]")].filter( + (element) => element.dataset.tooltip.trim() && !element._tippy + ); + + // add tooltip to elements + tippy(elements, { + content: (element) => element.dataset.tooltip.trim(), + delay: [200, 0], + offset: [0, 20], + allowHTML: true, + interactive: true, + appendTo: () => document.body, + aria: { + content: "describedby", + expanded: null, + }, + onShow: ({ reference, popper }) => { + const dark = reference.closest("[data-dark]")?.dataset.dark; + if (dark === "false") popper.dataset.dark = true; + if (dark === "true") popper.dataset.dark = false; + }, + // onHide: () => false, // debug + }); + }; + + // after page loads + window.addEventListener("load", onLoad); + // after tags load + window.addEventListener("tagsfetched", onLoad); +} diff --git a/preview/pr-27/_styles/-theme.css b/preview/pr-27/_styles/-theme.css new file mode 100644 index 0000000..5c69c26 --- /dev/null +++ b/preview/pr-27/_styles/-theme.css @@ -0,0 +1,41 @@ +[data-dark=false] { + --primary: #0ea5e9; + --secondary: #7dd3fc; + --text: #000000; + --background: #ffffff; + --background-alt: #fafafa; + --light-gray: #e0e0e0; + --gray: #808080; + --overlay: #00000020; +} + +[data-dark=true] { + --primary: #0ea5e9; + --secondary: #075985; + --text: #ffffff; + --background: #181818; + --background-alt: #1c1c1c; + --light-gray: #404040; + --gray: #808080; + --overlay: #ffffff10; +} + +:root { + --title: "Open Sans", sans-serif; + --heading: "Open Sans", sans-serif; + --body: "Rethink Sans", sans-serif; + --code: "Roboto Mono", monospace; + --medium: 2rem; + --large: 1.2rem; + --xl: 1.4rem; + --xxl: 1.6rem; + --thin: 200; + --regular: 400; + --semi-bold: 500; + --bold: 600; + --spacing: 2; + --rounded: 3px; + --shadow: 0 0 10px 0 var(--overlay); +} + +/*# sourceMappingURL=-theme.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/-theme.css.map b/preview/pr-27/_styles/-theme.css.map new file mode 100644 index 0000000..d9232dc --- /dev/null +++ b/preview/pr-27/_styles/-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["-theme.scss"],"names":[],"mappings":"AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EAEE;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAGA;EAGA;EACA","sourcesContent":["// colors\n[data-dark=\"false\"] {\n --primary: #0ea5e9;\n --secondary: #7dd3fc;\n --text: #000000;\n --background: #ffffff;\n --background-alt: #fafafa;\n --light-gray: #e0e0e0;\n --gray: #808080;\n --overlay: #00000020;\n}\n[data-dark=\"true\"] {\n --primary: #0ea5e9;\n --secondary: #075985;\n --text: #ffffff;\n --background: #181818;\n --background-alt: #1c1c1c;\n --light-gray: #404040;\n --gray: #808080;\n --overlay: #ffffff10;\n}\n\n:root {\n // font families\n --title: \"Open Sans\", sans-serif;\n --heading: \"Open Sans\", sans-serif;\n --body: \"Rethink Sans\", sans-serif;\n --code: \"Roboto Mono\", monospace;\n\n // font sizes\n --medium: 2rem;\n --large: 1.2rem;\n --xl: 1.4rem;\n --xxl: 1.6rem;\n\n // font weights\n --thin: 200;\n --regular: 400;\n --semi-bold: 500;\n --bold: 600;\n\n // text line spacing\n --spacing: 2;\n\n // effects\n --rounded: 3px;\n --shadow: 0 0 10px 0 var(--overlay);\n}\n"],"file":"-theme.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/alert.css b/preview/pr-27/_styles/alert.css new file mode 100644 index 0000000..a270c6f --- /dev/null +++ b/preview/pr-27/_styles/alert.css @@ -0,0 +1,36 @@ +.alert { + position: relative; + display: flex; + gap: 20px; + align-items: center; + margin: 20px 0; + padding: 20px; + border-radius: var(--rounded); + overflow: hidden; + text-align: left; + line-height: var(--spacing); +} + +.alert:before { + content: ""; + position: absolute; + inset: 0; + opacity: 0.1; + background: var(--color); + z-index: -1; +} + +.alert > .icon { + color: var(--color); + font-size: var(--large); +} + +.alert-content > *:first-child { + margin-top: 0; +} + +.alert-content > *:last-child { + margin-bottom: 0; +} + +/*# sourceMappingURL=alert.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/alert.css.map b/preview/pr-27/_styles/alert.css.map new file mode 100644 index 0000000..f34316b --- /dev/null +++ b/preview/pr-27/_styles/alert.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["alert.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":[".alert {\n position: relative;\n display: flex;\n gap: 20px;\n align-items: center;\n margin: 20px 0;\n padding: 20px;\n border-radius: var(--rounded);\n overflow: hidden;\n text-align: left;\n line-height: var(--spacing);\n}\n\n.alert:before {\n content: \"\";\n position: absolute;\n inset: 0;\n opacity: 0.1;\n background: var(--color);\n z-index: -1;\n}\n\n.alert > .icon {\n color: var(--color);\n font-size: var(--large);\n}\n\n.alert-content > *:first-child {\n margin-top: 0;\n}\n\n.alert-content > *:last-child {\n margin-bottom: 0;\n}\n"],"file":"alert.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/all.css b/preview/pr-27/_styles/all.css new file mode 100644 index 0000000..9b786fb --- /dev/null +++ b/preview/pr-27/_styles/all.css @@ -0,0 +1,6 @@ +* { + box-sizing: border-box; + transition: none 0.2s; +} + +/*# sourceMappingURL=all.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/all.css.map b/preview/pr-27/_styles/all.css.map new file mode 100644 index 0000000..f73c054 --- /dev/null +++ b/preview/pr-27/_styles/all.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["all.scss"],"names":[],"mappings":"AAAA;EACE;EACA","sourcesContent":["* {\n box-sizing: border-box;\n transition: none 0.2s;\n}\n"],"file":"all.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/anchor.css b/preview/pr-27/_styles/anchor.css new file mode 100644 index 0000000..a0c3402 --- /dev/null +++ b/preview/pr-27/_styles/anchor.css @@ -0,0 +1,23 @@ +.anchor { + display: inline-block; + position: relative; + width: 0; + margin: 0; + left: 0.5em; + color: var(--primary) !important; + opacity: 0; + font-size: 0.75em; + text-decoration: none; + transition-property: opacity, color; +} + +*:hover > .anchor, +.anchor:focus { + opacity: 1; +} + +.anchor:hover { + color: var(--text) !important; +} + +/*# sourceMappingURL=anchor.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/anchor.css.map b/preview/pr-27/_styles/anchor.css.map new file mode 100644 index 0000000..060a453 --- /dev/null +++ b/preview/pr-27/_styles/anchor.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["anchor.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAGF;EACE","sourcesContent":[".anchor {\n display: inline-block;\n position: relative;\n width: 0;\n margin: 0;\n left: 0.5em;\n color: var(--primary) !important;\n opacity: 0;\n font-size: 0.75em;\n text-decoration: none;\n transition-property: opacity, color;\n}\n\n*:hover > .anchor,\n.anchor:focus {\n opacity: 1;\n}\n\n.anchor:hover {\n color: var(--text) !important;\n}\n"],"file":"anchor.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/background.css b/preview/pr-27/_styles/background.css new file mode 100644 index 0000000..025e56a --- /dev/null +++ b/preview/pr-27/_styles/background.css @@ -0,0 +1,20 @@ +.background { + position: relative; + background: var(--background); + color: var(--text); + z-index: 1; +} + +.background:before { + content: ""; + position: absolute; + inset: 0; + background-image: var(--image); + background-size: cover; + background-repeat: no-repeat; + background-position: 50% 50%; + opacity: 0.25; + z-index: -1; +} + +/*# sourceMappingURL=background.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/background.css.map b/preview/pr-27/_styles/background.css.map new file mode 100644 index 0000000..b655d9e --- /dev/null +++ b/preview/pr-27/_styles/background.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["background.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA","sourcesContent":[".background {\n position: relative;\n background: var(--background);\n color: var(--text);\n z-index: 1;\n}\n\n.background:before {\n content: \"\";\n position: absolute;\n inset: 0;\n background-image: var(--image);\n background-size: cover;\n background-repeat: no-repeat;\n background-position: 50% 50%;\n opacity: 0.25;\n z-index: -1;\n}\n"],"file":"background.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/body.css b/preview/pr-27/_styles/body.css new file mode 100644 index 0000000..7287261 --- /dev/null +++ b/preview/pr-27/_styles/body.css @@ -0,0 +1,17 @@ +html, +body { + margin: 0; + padding: 0; + min-height: 100vh; + background: var(--background); + color: var(--text); + font-family: var(--body); +} + +body { + display: flex; + flex-direction: column; + text-align: center; +} + +/*# sourceMappingURL=body.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/body.css.map b/preview/pr-27/_styles/body.css.map new file mode 100644 index 0000000..5fc5586 --- /dev/null +++ b/preview/pr-27/_styles/body.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["body.scss"],"names":[],"mappings":"AAAA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA","sourcesContent":["html,\nbody {\n margin: 0;\n padding: 0;\n min-height: 100vh;\n background: var(--background);\n color: var(--text);\n font-family: var(--body);\n}\n\nbody {\n display: flex;\n flex-direction: column;\n text-align: center;\n}\n"],"file":"body.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/bold.css b/preview/pr-27/_styles/bold.css new file mode 100644 index 0000000..94a711f --- /dev/null +++ b/preview/pr-27/_styles/bold.css @@ -0,0 +1,6 @@ +b, +strong { + font-weight: var(--bold); +} + +/*# sourceMappingURL=bold.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/bold.css.map b/preview/pr-27/_styles/bold.css.map new file mode 100644 index 0000000..57012fd --- /dev/null +++ b/preview/pr-27/_styles/bold.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["bold.scss"],"names":[],"mappings":"AAAA;AAAA;EAEE","sourcesContent":["b,\nstrong {\n font-weight: var(--bold);\n}\n"],"file":"bold.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/button.css b/preview/pr-27/_styles/button.css new file mode 100644 index 0000000..505da8b --- /dev/null +++ b/preview/pr-27/_styles/button.css @@ -0,0 +1,50 @@ +button { + cursor: pointer; +} + +.button-wrapper { + display: contents; +} + +.button { + display: inline-flex; + justify-content: center; + align-items: center; + gap: 10px; + max-width: calc(100% - 5px - 5px); + margin: 5px; + padding: 10px 15px; + border: none; + border-radius: var(--rounded); + background: var(--primary); + color: var(--background); + text-align: center; + font-family: var(--heading); + font-weight: var(--semi-bold); + line-height: 1; + text-decoration: none; + vertical-align: middle; + -webkit-appearance: none; + appearance: none; + transition-property: background, color; +} + +.button:hover { + background: var(--text); + color: var(--background); +} + +.button[data-style=bare] { + padding: 5px; + background: none; + color: var(--primary); +} +.button[data-style=bare]:hover { + color: var(--text); +} + +.button[data-flip] { + flex-direction: row-reverse; +} + +/*# sourceMappingURL=button.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/button.css.map b/preview/pr-27/_styles/button.css.map new file mode 100644 index 0000000..351a5ae --- /dev/null +++ b/preview/pr-27/_styles/button.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["button.scss"],"names":[],"mappings":"AAAA;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE","sourcesContent":["button {\n cursor: pointer;\n}\n\n.button-wrapper {\n display: contents;\n}\n\n.button {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n gap: 10px;\n max-width: calc(100% - 5px - 5px);\n margin: 5px;\n padding: 10px 15px;\n border: none;\n border-radius: var(--rounded);\n background: var(--primary);\n color: var(--background);\n text-align: center;\n font-family: var(--heading);\n font-weight: var(--semi-bold);\n line-height: 1;\n text-decoration: none;\n vertical-align: middle;\n -webkit-appearance: none;\n appearance: none;\n transition-property: background, color;\n}\n\n.button:hover {\n background: var(--text);\n color: var(--background);\n}\n\n.button[data-style=\"bare\"] {\n padding: 5px;\n background: none;\n color: var(--primary);\n\n &:hover {\n color: var(--text);\n }\n}\n\n.button[data-flip] {\n flex-direction: row-reverse;\n}\n"],"file":"button.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/card.css b/preview/pr-27/_styles/card.css new file mode 100644 index 0000000..49e24a5 --- /dev/null +++ b/preview/pr-27/_styles/card.css @@ -0,0 +1,51 @@ +.card { + display: inline-flex; + justify-content: stretch; + align-items: center; + flex-direction: column; + width: 350px; + max-width: calc(100% - 20px - 20px); + margin: 20px; + background: var(--background); + border-radius: var(--rounded); + overflow: hidden; + box-shadow: var(--shadow); + vertical-align: top; +} + +.card[data-style=small] { + width: 250px; +} + +.card-image img { + aspect-ratio: 3/2; + object-fit: cover; + width: 100%; +} + +.card-text { + display: inline-flex; + justify-content: flex-start; + align-items: center; + flex-direction: column; + gap: 20px; + max-width: 100%; + padding: 20px; +} + +.card-text > *, +.card-text > .tags { + margin: 0; +} + +.card-title { + font-family: var(--heading); + font-weight: var(--semi-bold); +} + +.card-subtitle { + margin-top: -15px; + font-style: italic; +} + +/*# sourceMappingURL=card.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/card.css.map b/preview/pr-27/_styles/card.css.map new file mode 100644 index 0000000..da57e99 --- /dev/null +++ b/preview/pr-27/_styles/card.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["card.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA","sourcesContent":[".card {\n display: inline-flex;\n justify-content: stretch;\n align-items: center;\n flex-direction: column;\n width: 350px;\n max-width: calc(100% - 20px - 20px);\n margin: 20px;\n background: var(--background);\n border-radius: var(--rounded);\n overflow: hidden;\n box-shadow: var(--shadow);\n vertical-align: top;\n}\n\n.card[data-style=\"small\"] {\n width: 250px;\n}\n\n.card-image img {\n aspect-ratio: 3 / 2;\n object-fit: cover;\n width: 100%;\n // box-shadow: var(--shadow);\n}\n\n.card-text {\n display: inline-flex;\n justify-content: flex-start;\n align-items: center;\n flex-direction: column;\n gap: 20px;\n max-width: 100%;\n padding: 20px;\n}\n\n.card-text > *,\n.card-text > .tags {\n margin: 0;\n}\n\n.card-title {\n font-family: var(--heading);\n font-weight: var(--semi-bold);\n}\n\n.card-subtitle {\n margin-top: -15px;\n font-style: italic;\n}\n"],"file":"card.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/checkbox.css b/preview/pr-27/_styles/checkbox.css new file mode 100644 index 0000000..8c77dc5 --- /dev/null +++ b/preview/pr-27/_styles/checkbox.css @@ -0,0 +1,5 @@ +input[type=checkbox] { + cursor: pointer; +} + +/*# sourceMappingURL=checkbox.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/checkbox.css.map b/preview/pr-27/_styles/checkbox.css.map new file mode 100644 index 0000000..90fb493 --- /dev/null +++ b/preview/pr-27/_styles/checkbox.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["checkbox.scss"],"names":[],"mappings":"AAAA;EACE","sourcesContent":["input[type=\"checkbox\"] {\n cursor: pointer;\n}\n"],"file":"checkbox.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/citation.css b/preview/pr-27/_styles/citation.css new file mode 100644 index 0000000..e2303ac --- /dev/null +++ b/preview/pr-27/_styles/citation.css @@ -0,0 +1,90 @@ +.citation { + display: flex; + margin: 15px 0; + border-radius: var(--rounded); + background: var(--background); + overflow: hidden; + box-shadow: var(--shadow); +} + +.citation-image { + position: relative; + width: 180px; + flex-shrink: 0; +} + +.citation-image img { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + object-fit: contain; +} + +.citation-text { + position: relative; + display: inline-flex; + flex-wrap: wrap; + gap: 15px; + max-width: 100%; + height: min-content; + padding: 20px; + padding-left: 30px; + text-align: left; + overflow-wrap: break-word; + z-index: 0; +} + +.citation-title, +.citation-authors, +.citation-details, +.citation-description { + width: 100%; + line-height: calc(var(--spacing) - 0.4); +} + +.citation-title { + font-weight: var(--semi-bold); +} + +.citation-text > .icon { + position: absolute; + top: 20px; + right: 20px; + color: var(--light-gray); + opacity: 0.5; + font-size: 30px; + z-index: -1; +} + +.citation-description { + color: var(--gray); +} + +.citation-buttons { + display: flex; + flex-wrap: wrap; + gap: 10px; +} + +.citation-buttons .button { + margin: 0; +} + +.citation-text > .tags { + display: inline-flex; + justify-content: flex-start; + margin: 0; +} + +@media (max-width: 800px) { + .citation { + flex-direction: column; + } + .citation-image { + width: unset; + height: 180px; + } +} + +/*# sourceMappingURL=citation.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/citation.css.map b/preview/pr-27/_styles/citation.css.map new file mode 100644 index 0000000..af40c89 --- /dev/null +++ b/preview/pr-27/_styles/citation.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["citation.scss"],"names":[],"mappings":"AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA,OAdW;EAeX;;;AAIF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;IACE;;EAGF;IACE;IACA,QA1FS","sourcesContent":["$thumb-size: 180px;\n$wrap: 800px;\n\n.citation {\n display: flex;\n margin: 15px 0;\n border-radius: var(--rounded);\n background: var(--background);\n overflow: hidden;\n box-shadow: var(--shadow);\n}\n\n.citation-image {\n position: relative;\n width: $thumb-size;\n flex-shrink: 0;\n // box-shadow: var(--shadow);\n}\n\n.citation-image img {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n.citation-text {\n position: relative;\n display: inline-flex;\n flex-wrap: wrap;\n gap: 15px;\n max-width: 100%;\n height: min-content;\n padding: 20px;\n padding-left: 30px;\n text-align: left;\n overflow-wrap: break-word;\n z-index: 0;\n}\n\n.citation-title,\n.citation-authors,\n.citation-details,\n.citation-description {\n width: 100%;\n line-height: calc(var(--spacing) - 0.4);\n}\n\n.citation-title {\n font-weight: var(--semi-bold);\n}\n\n.citation-text > .icon {\n position: absolute;\n top: 20px;\n right: 20px;\n color: var(--light-gray);\n opacity: 0.5;\n font-size: 30px;\n z-index: -1;\n}\n\n.citation-description {\n color: var(--gray);\n}\n\n.citation-buttons {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.citation-buttons .button {\n margin: 0;\n}\n\n.citation-text > .tags {\n display: inline-flex;\n justify-content: flex-start;\n margin: 0;\n}\n\n@media (max-width: $wrap) {\n .citation {\n flex-direction: column;\n }\n\n .citation-image {\n width: unset;\n height: $thumb-size;\n }\n}\n"],"file":"citation.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/code.css b/preview/pr-27/_styles/code.css new file mode 100644 index 0000000..a8077f4 --- /dev/null +++ b/preview/pr-27/_styles/code.css @@ -0,0 +1,35 @@ +pre, +code, +pre *, +code * { + font-family: var(--code); +} + +code.highlighter-rouge { + padding: 2px 6px; + background: var(--light-gray); + border-radius: var(--rounded); + line-height: calc(var(--spacing) - 0.2); +} + +div.highlighter-rouge { + width: 100%; + margin: 40px 0; + border-radius: var(--rounded); + overflow-x: auto; + overflow-y: auto; + text-align: left; + line-height: calc(var(--spacing) - 0.4); +} +div.highlighter-rouge div.highlight { + display: contents; +} +div.highlighter-rouge div.highlight pre.highlight { + width: fit-content; + min-width: 100%; + margin: 0; + padding: 20px; + color: var(--white); +} + +/*# sourceMappingURL=code.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/code.css.map b/preview/pr-27/_styles/code.css.map new file mode 100644 index 0000000..048eb76 --- /dev/null +++ b/preview/pr-27/_styles/code.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["code.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;EAIE;;;AAIF;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA","sourcesContent":["pre,\ncode,\npre *,\ncode * {\n font-family: var(--code);\n}\n\n// inline code\ncode.highlighter-rouge {\n padding: 2px 6px;\n background: var(--light-gray);\n border-radius: var(--rounded);\n line-height: calc(var(--spacing) - 0.2);\n}\n\n// code block\ndiv.highlighter-rouge {\n width: 100%;\n margin: 40px 0;\n border-radius: var(--rounded);\n overflow-x: auto;\n overflow-y: auto;\n text-align: left;\n line-height: calc(var(--spacing) - 0.4);\n\n div.highlight {\n display: contents;\n\n pre.highlight {\n width: fit-content;\n min-width: 100%;\n margin: 0;\n padding: 20px;\n color: var(--white);\n }\n }\n}\n"],"file":"code.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/cols.css b/preview/pr-27/_styles/cols.css new file mode 100644 index 0000000..13dfb6e --- /dev/null +++ b/preview/pr-27/_styles/cols.css @@ -0,0 +1,34 @@ +.cols { + display: grid; + --repeat: min(3, var(--cols)); + grid-template-columns: repeat(var(--repeat), 1fr); + align-items: flex-start; + gap: 40px; + margin: 40px 0; +} + +.cols > * { + min-width: 0; + min-height: 0; +} + +.cols > div > *:first-child { + margin-top: 0 !important; +} + +.cols > div > *:last-child { + margin-bottom: 0 !important; +} + +@media (max-width: 750px) { + .cols { + --repeat: min(2, var(--cols)); + } +} +@media (max-width: 500px) { + .cols { + --repeat: min(1, var(--cols)); + } +} + +/*# sourceMappingURL=cols.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/cols.css.map b/preview/pr-27/_styles/cols.css.map new file mode 100644 index 0000000..488b827 --- /dev/null +++ b/preview/pr-27/_styles/cols.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["cols.scss"],"names":[],"mappings":"AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;IACE;;;AAIJ;EACE;IACE","sourcesContent":["$two: 750px;\n$one: 500px;\n\n.cols {\n display: grid;\n --repeat: min(3, var(--cols));\n grid-template-columns: repeat(var(--repeat), 1fr);\n align-items: flex-start;\n gap: 40px;\n margin: 40px 0;\n}\n\n.cols > * {\n min-width: 0;\n min-height: 0;\n}\n\n.cols > div > *:first-child {\n margin-top: 0 !important;\n}\n\n.cols > div > *:last-child {\n margin-bottom: 0 !important;\n}\n\n@media (max-width: $two) {\n .cols {\n --repeat: min(2, var(--cols));\n }\n}\n\n@media (max-width: $one) {\n .cols {\n --repeat: min(1, var(--cols));\n }\n}\n"],"file":"cols.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/dark-toggle.css b/preview/pr-27/_styles/dark-toggle.css new file mode 100644 index 0000000..daedc5d --- /dev/null +++ b/preview/pr-27/_styles/dark-toggle.css @@ -0,0 +1,31 @@ +.dark-toggle { + position: relative; + width: 40px; + height: 25px; + margin: 0; + border-radius: 999px; + background: var(--primary); + -webkit-appearance: none; + appearance: none; + transition-property: background; +} + +.dark-toggle:after { + content: "\f185"; + position: absolute; + left: 12px; + top: 50%; + color: var(--text); + font-size: 15px; + font-family: "Font Awesome 6 Free"; + font-weight: 900; + transform: translate(-50%, -50%); + transition: left 0.2s; +} + +.dark-toggle:checked:after { + content: "\f186"; + left: calc(100% - 12px); +} + +/*# sourceMappingURL=dark-toggle.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/dark-toggle.css.map b/preview/pr-27/_styles/dark-toggle.css.map new file mode 100644 index 0000000..88294f0 --- /dev/null +++ b/preview/pr-27/_styles/dark-toggle.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["dark-toggle.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA","sourcesContent":[".dark-toggle {\n position: relative;\n width: 40px;\n height: 25px;\n margin: 0;\n border-radius: 999px;\n background: var(--primary);\n -webkit-appearance: none;\n appearance: none;\n transition-property: background;\n}\n\n.dark-toggle:after {\n content: \"\\f185\";\n position: absolute;\n left: 12px;\n top: 50%;\n color: var(--text);\n font-size: 15px;\n font-family: \"Font Awesome 6 Free\";\n font-weight: 900;\n transform: translate(-50%, -50%);\n transition: left 0.2s;\n}\n\n.dark-toggle:checked:after {\n content: \"\\f186\";\n left: calc(100% - 12px);\n}\n"],"file":"dark-toggle.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/feature.css b/preview/pr-27/_styles/feature.css new file mode 100644 index 0000000..a2d72f6 --- /dev/null +++ b/preview/pr-27/_styles/feature.css @@ -0,0 +1,49 @@ +.feature { + display: flex; + justify-content: center; + align-items: center; + gap: 40px; + margin: 40px 0; +} + +.feature-image { + flex-shrink: 0; + width: 40%; + aspect-ratio: 3/2; + border-radius: var(--rounded); + overflow: hidden; + box-shadow: var(--shadow); +} + +.feature-image img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.feature-text { + flex-grow: 1; +} + +.feature-title { + font-size: var(--large); + text-align: center; + font-family: var(--heading); + font-weight: var(--semi-bold); +} + +.feature[data-flip] { + flex-direction: row-reverse; +} + +@media (max-width: 800px) { + .feature { + flex-direction: column !important; + } + .feature-image { + width: unset; + max-width: 400px; + } +} + +/*# sourceMappingURL=feature.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/feature.css.map b/preview/pr-27/_styles/feature.css.map new file mode 100644 index 0000000..60e3d53 --- /dev/null +++ b/preview/pr-27/_styles/feature.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["feature.scss"],"names":[],"mappings":"AAEA;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;IACE;;EAGF;IACE;IACA","sourcesContent":["$wrap: 800px;\n\n.feature {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 40px;\n margin: 40px 0;\n}\n\n.feature-image {\n flex-shrink: 0;\n width: 40%;\n aspect-ratio: 3 / 2;\n border-radius: var(--rounded);\n overflow: hidden;\n box-shadow: var(--shadow);\n}\n\n.feature-image img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.feature-text {\n flex-grow: 1;\n}\n\n.feature-title {\n font-size: var(--large);\n text-align: center;\n font-family: var(--heading);\n font-weight: var(--semi-bold);\n}\n\n.feature[data-flip] {\n flex-direction: row-reverse;\n}\n\n@media (max-width: $wrap) {\n .feature {\n flex-direction: column !important;\n }\n\n .feature-image {\n width: unset;\n max-width: calc($wrap / 2);\n }\n}\n"],"file":"feature.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/figure.css b/preview/pr-27/_styles/figure.css new file mode 100644 index 0000000..9558938 --- /dev/null +++ b/preview/pr-27/_styles/figure.css @@ -0,0 +1,25 @@ +.figure { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + gap: 10px; + margin: 40px 0; +} + +.figure-image { + display: contents; +} + +.figure-image img { + border-radius: var(--rounded); + overflow: hidden; + box-shadow: var(--shadow); +} + +.figure-caption { + font-style: italic; + text-align: center; +} + +/*# sourceMappingURL=figure.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/figure.css.map b/preview/pr-27/_styles/figure.css.map new file mode 100644 index 0000000..4d62fcf --- /dev/null +++ b/preview/pr-27/_styles/figure.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["figure.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA","sourcesContent":[".figure {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n gap: 10px;\n margin: 40px 0;\n}\n\n.figure-image {\n display: contents;\n}\n\n.figure-image img {\n border-radius: var(--rounded);\n overflow: hidden;\n box-shadow: var(--shadow);\n}\n\n.figure-caption {\n font-style: italic;\n text-align: center;\n}\n"],"file":"figure.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/float.css b/preview/pr-27/_styles/float.css new file mode 100644 index 0000000..c91b46e --- /dev/null +++ b/preview/pr-27/_styles/float.css @@ -0,0 +1,35 @@ +.float { + margin-bottom: 20px; + max-width: 50%; +} + +.float > * { + margin: 0 !important; +} + +.float:not([data-flip]) { + float: left; + margin-right: 40px; +} + +.float[data-flip] { + float: right; + margin-left: 40px; +} + +.float[data-clear] { + float: unset; + clear: both; + margin: 0; +} + +@media (max-width: 600px) { + .float { + float: unset !important; + clear: both !important; + margin: auto !important; + max-width: unset; + } +} + +/*# sourceMappingURL=float.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/float.css.map b/preview/pr-27/_styles/float.css.map new file mode 100644 index 0000000..42c53e0 --- /dev/null +++ b/preview/pr-27/_styles/float.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["float.scss"],"names":[],"mappings":"AAEA;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;IACE;IACA;IACA;IACA","sourcesContent":["$wrap: 600px;\n\n.float {\n margin-bottom: 20px;\n max-width: 50%;\n}\n\n.float > * {\n margin: 0 !important;\n}\n\n.float:not([data-flip]) {\n float: left;\n margin-right: 40px;\n}\n\n.float[data-flip] {\n float: right;\n margin-left: 40px;\n}\n\n.float[data-clear] {\n float: unset;\n clear: both;\n margin: 0;\n}\n\n@media (max-width: $wrap) {\n .float {\n float: unset !important;\n clear: both !important;\n margin: auto !important;\n max-width: unset;\n }\n}\n"],"file":"float.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/font.css b/preview/pr-27/_styles/font.css new file mode 100644 index 0000000..c40e155 --- /dev/null +++ b/preview/pr-27/_styles/font.css @@ -0,0 +1,3 @@ +@font-face {} + +/*# sourceMappingURL=font.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/font.css.map b/preview/pr-27/_styles/font.css.map new file mode 100644 index 0000000..e1d56c0 --- /dev/null +++ b/preview/pr-27/_styles/font.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["font.scss"],"names":[],"mappings":"AAAA","sourcesContent":["@font-face {\n}\n"],"file":"font.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/footer.css b/preview/pr-27/_styles/footer.css new file mode 100644 index 0000000..a85b907 --- /dev/null +++ b/preview/pr-27/_styles/footer.css @@ -0,0 +1,24 @@ +footer { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + gap: 20px; + padding: 40px; + line-height: var(--spacing); + box-shadow: var(--shadow); +} + +footer a { + color: var(--text) !important; +} + +footer a:hover { + color: var(--primary) !important; +} + +footer .icon { + font-size: var(--xl); +} + +/*# sourceMappingURL=footer.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/footer.css.map b/preview/pr-27/_styles/footer.css.map new file mode 100644 index 0000000..61ae117 --- /dev/null +++ b/preview/pr-27/_styles/footer.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["footer.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":["footer {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n gap: 20px;\n padding: 40px;\n line-height: var(--spacing);\n box-shadow: var(--shadow);\n}\n\nfooter a {\n color: var(--text) !important;\n}\n\nfooter a:hover {\n color: var(--primary) !important;\n}\n\nfooter .icon {\n font-size: var(--xl);\n}\n"],"file":"footer.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/form.css b/preview/pr-27/_styles/form.css new file mode 100644 index 0000000..7611459 --- /dev/null +++ b/preview/pr-27/_styles/form.css @@ -0,0 +1,8 @@ +form { + display: flex; + justify-content: center; + align-items: center; + gap: 10px; +} + +/*# sourceMappingURL=form.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/form.css.map b/preview/pr-27/_styles/form.css.map new file mode 100644 index 0000000..65939cb --- /dev/null +++ b/preview/pr-27/_styles/form.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["form.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA","sourcesContent":["form {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 10px;\n}\n"],"file":"form.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/grid.css b/preview/pr-27/_styles/grid.css new file mode 100644 index 0000000..3931eb2 --- /dev/null +++ b/preview/pr-27/_styles/grid.css @@ -0,0 +1,45 @@ +.grid { + display: grid; + --repeat: 3; + grid-template-columns: repeat(var(--repeat), 1fr); + justify-content: center; + align-items: flex-start; + gap: 40px; + margin: 40px 0; +} + +.grid > * { + min-width: 0; + min-height: 0; + width: 100%; + margin: 0 !important; +} + +@media (max-width: 750px) { + .grid { + --repeat: 2; + } +} +@media (max-width: 500px) { + .grid { + --repeat: 1; + } +} +.grid[data-style=square] { + align-items: center; +} +.grid[data-style=square] > * { + aspect-ratio: 1/1; +} +.grid[data-style=square] img { + aspect-ratio: 1/1; + object-fit: cover; + max-width: unset; + max-height: unset; +} + +.grid > *:where(h1, h2, h3, h4) { + display: none; +} + +/*# sourceMappingURL=grid.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/grid.css.map b/preview/pr-27/_styles/grid.css.map new file mode 100644 index 0000000..7baeedc --- /dev/null +++ b/preview/pr-27/_styles/grid.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["grid.scss"],"names":[],"mappings":"AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EAEA;;;AAGF;EACE;IACE;;;AAIJ;EACE;IACE;;;AAIJ;EACE;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;;AAIJ;EACE","sourcesContent":["$two: 750px;\n$one: 500px;\n\n.grid {\n display: grid;\n --repeat: 3;\n grid-template-columns: repeat(var(--repeat), 1fr);\n justify-content: center;\n align-items: flex-start;\n gap: 40px;\n margin: 40px 0;\n}\n\n.grid > * {\n min-width: 0;\n min-height: 0;\n width: 100%;\n // max-height: 50vh;\n margin: 0 !important;\n}\n\n@media (max-width: $two) {\n .grid {\n --repeat: 2;\n }\n}\n\n@media (max-width: $one) {\n .grid {\n --repeat: 1;\n }\n}\n\n.grid[data-style=\"square\"] {\n align-items: center;\n\n & > * {\n aspect-ratio: 1 / 1;\n }\n\n & img {\n aspect-ratio: 1 / 1;\n object-fit: cover;\n max-width: unset;\n max-height: unset;\n }\n}\n\n.grid > *:where(h1, h2, h3, h4) {\n display: none;\n}\n"],"file":"grid.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/header.css b/preview/pr-27/_styles/header.css new file mode 100644 index 0000000..5a33d4d --- /dev/null +++ b/preview/pr-27/_styles/header.css @@ -0,0 +1,146 @@ +header { + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + gap: 20px; + padding: 20px; + box-shadow: var(--shadow); + position: sticky !important; + top: 0; + z-index: 10 !important; +} + +header a { + color: var(--text); + text-decoration: none; +} + +.home { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 10px; + flex-basis: 0; + flex-grow: 1; + max-width: 100%; +} + +.logo { + height: 40px; +} + +.logo > * { + height: 100%; +} + +.title { + display: flex; + justify-content: flex-start; + align-items: baseline; + flex-wrap: wrap; + gap: 5px; + min-width: 0; + font-family: var(--title); + text-align: left; +} + +.title > *:first-child { + font-size: var(--large); +} + +.title > *:last-child { + opacity: 0.65; + font-weight: var(--thin); +} + +.nav-toggle { + display: none; + position: relative; + width: 30px; + height: 30px; + margin: 0; + color: var(--text); + -webkit-appearance: none; + appearance: none; + transition-property: background; +} + +.nav-toggle:after { + content: "\f0c9"; + position: absolute; + left: 50%; + top: 50%; + color: var(--text); + font-size: 15px; + font-family: "Font Awesome 6 Free"; + font-weight: 900; + transform: translate(-50%, -50%); +} + +.nav-toggle:checked:after { + content: "\f00d"; +} + +nav { + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; + gap: 10px; + font-family: var(--heading); + text-transform: uppercase; +} + +nav > a { + padding: 5px; +} + +nav > a:hover { + color: var(--primary); +} + +@media (max-width: 700px) { + header:not([data-big]) { + justify-content: flex-end; + } + header:not([data-big]) .nav-toggle { + display: flex; + } + header:not([data-big]) .nav-toggle:not(:checked) + nav { + display: none; + } + header:not([data-big]) nav { + align-items: flex-end; + flex-direction: column; + width: 100%; + } +} + +header[data-big] { + justify-content: center; + align-items: center; + flex-direction: column; + padding: 100px 20px; + top: unset; +} +header[data-big] .home { + flex-direction: column; + flex-grow: 0; +} +header[data-big] .logo { + height: 80px; +} +header[data-big] .title { + flex-direction: column; + align-items: center; + text-align: center; +} +header[data-big] .title > *:first-child { + font-size: var(--xxl); +} +header[data-big] .title > *:last-child { + font-size: var(--large); +} + +/*# sourceMappingURL=header.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/header.css.map b/preview/pr-27/_styles/header.css.map new file mode 100644 index 0000000..d919aa5 --- /dev/null +++ b/preview/pr-27/_styles/header.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["header.scss"],"names":[],"mappings":"AAMA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EAGE;EACA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE,QArCK;;;AAwCP;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;;;AAIF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAIA;EADF;IAEI;;EAEA;IACE;;EAGF;IACE;;EAGF;IACE;IACA;IACA;;;;AAKN;EACE;EACA;EACA;EACA;EAGE;;AAGF;EACE;EACA;;AAGF;EACE,QArJO;;AAwJT;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE","sourcesContent":["$logo-big: 80px;\n$logo: 40px;\n$big-padding: 100px;\n$collapse: 700px;\n$sticky: true;\n\nheader {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 20px;\n padding: 20px;\n box-shadow: var(--shadow);\n\n @if $sticky {\n position: sticky !important;\n top: 0;\n z-index: 10 !important;\n }\n}\n\nheader a {\n color: var(--text);\n text-decoration: none;\n}\n\n.home {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 10px;\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.logo {\n height: $logo;\n}\n\n.logo > * {\n height: 100%;\n}\n\n.title {\n display: flex;\n justify-content: flex-start;\n align-items: baseline;\n flex-wrap: wrap;\n gap: 5px;\n min-width: 0;\n font-family: var(--title);\n text-align: left;\n}\n\n// main title\n.title > *:first-child {\n font-size: var(--large);\n}\n\n// subtitle\n.title > *:last-child {\n opacity: 0.65;\n font-weight: var(--thin);\n}\n\n.nav-toggle {\n display: none;\n position: relative;\n width: 30px;\n height: 30px;\n margin: 0;\n color: var(--text);\n -webkit-appearance: none;\n appearance: none;\n transition-property: background;\n}\n\n.nav-toggle:after {\n content: \"\\f0c9\";\n position: absolute;\n left: 50%;\n top: 50%;\n color: var(--text);\n font-size: 15px;\n font-family: \"Font Awesome 6 Free\";\n font-weight: 900;\n transform: translate(-50%, -50%);\n}\n\n.nav-toggle:checked:after {\n content: \"\\f00d\";\n}\n\nnav {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-wrap: wrap;\n gap: 10px;\n font-family: var(--heading);\n text-transform: uppercase;\n}\n\nnav > a {\n padding: 5px;\n}\n\nnav > a:hover {\n color: var(--primary);\n}\n\nheader:not([data-big]) {\n @media (max-width: $collapse) {\n justify-content: flex-end;\n\n .nav-toggle {\n display: flex;\n }\n\n .nav-toggle:not(:checked) + nav {\n display: none;\n }\n\n nav {\n align-items: flex-end;\n flex-direction: column;\n width: 100%;\n }\n }\n}\n\nheader[data-big] {\n justify-content: center;\n align-items: center;\n flex-direction: column;\n padding: $big-padding 20px;\n\n @if $sticky {\n top: unset;\n }\n\n .home {\n flex-direction: column;\n flex-grow: 0;\n }\n\n .logo {\n height: $logo-big;\n }\n\n .title {\n flex-direction: column;\n align-items: center;\n text-align: center;\n }\n\n .title > *:first-child {\n font-size: var(--xxl);\n }\n\n .title > *:last-child {\n font-size: var(--large);\n }\n}\n"],"file":"header.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/heading.css b/preview/pr-27/_styles/heading.css new file mode 100644 index 0000000..41ce7c1 --- /dev/null +++ b/preview/pr-27/_styles/heading.css @@ -0,0 +1,47 @@ +h1, +h2, +h3, +h4 { + font-family: var(--heading); + line-height: calc(var(--spacing) - 0.2); +} + +h1 { + margin: 40px 0 20px 0; + font-size: var(--xxl); + font-weight: var(--regular); + letter-spacing: 1px; + text-transform: uppercase; + text-align: left; +} + +h2 { + margin: 40px 0 20px 0; + padding-bottom: 5px; + border-bottom: solid 1px var(--light-gray); + font-size: var(--xl); + font-weight: var(--regular); + letter-spacing: 1px; + text-align: left; +} + +h3 { + margin: 40px 0 20px 0; + font-size: var(--large); + font-weight: var(--semi-bold); + text-align: left; +} + +h4 { + margin: 40px 0 20px 0; + font-size: var(--medium); + font-weight: var(--semi-bold); + text-align: left; +} + +:where(h1, h2, h3, h4) > .icon { + margin-right: 1em; + color: var(--light-gray); +} + +/*# sourceMappingURL=heading.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/heading.css.map b/preview/pr-27/_styles/heading.css.map new file mode 100644 index 0000000..95d4210 --- /dev/null +++ b/preview/pr-27/_styles/heading.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["heading.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA","sourcesContent":["h1,\nh2,\nh3,\nh4 {\n font-family: var(--heading);\n line-height: calc(var(--spacing) - 0.2);\n}\n\nh1 {\n margin: 40px 0 20px 0;\n font-size: var(--xxl);\n font-weight: var(--regular);\n letter-spacing: 1px;\n text-transform: uppercase;\n text-align: left;\n}\n\nh2 {\n margin: 40px 0 20px 0;\n padding-bottom: 5px;\n border-bottom: solid 1px var(--light-gray);\n font-size: var(--xl);\n font-weight: var(--regular);\n letter-spacing: 1px;\n text-align: left;\n}\n\nh3 {\n margin: 40px 0 20px 0;\n font-size: var(--large);\n font-weight: var(--semi-bold);\n text-align: left;\n}\n\nh4 {\n margin: 40px 0 20px 0;\n font-size: var(--medium);\n font-weight: var(--semi-bold);\n text-align: left;\n}\n\n:where(h1, h2, h3, h4) > .icon {\n margin-right: 1em;\n color: var(--light-gray);\n}\n"],"file":"heading.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/highlight.css b/preview/pr-27/_styles/highlight.css new file mode 100644 index 0000000..a8cf7d3 --- /dev/null +++ b/preview/pr-27/_styles/highlight.css @@ -0,0 +1,6 @@ +mark { + background: #fef08a; + color: #000000; +} + +/*# sourceMappingURL=highlight.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/highlight.css.map b/preview/pr-27/_styles/highlight.css.map new file mode 100644 index 0000000..957ceb1 --- /dev/null +++ b/preview/pr-27/_styles/highlight.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["highlight.scss"],"names":[],"mappings":"AAAA;EACE;EACA","sourcesContent":["mark {\n background: #fef08a;\n color: #000000;\n}\n"],"file":"highlight.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/icon.css b/preview/pr-27/_styles/icon.css new file mode 100644 index 0000000..ab61327 --- /dev/null +++ b/preview/pr-27/_styles/icon.css @@ -0,0 +1,15 @@ +.icon { + font-size: 1em; +} + +span.icon { + line-height: 1; +} + +span.icon > svg { + position: relative; + top: 0.1em; + height: 1em; +} + +/*# sourceMappingURL=icon.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/icon.css.map b/preview/pr-27/_styles/icon.css.map new file mode 100644 index 0000000..2229868 --- /dev/null +++ b/preview/pr-27/_styles/icon.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["icon.scss"],"names":[],"mappings":"AAAA;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA","sourcesContent":[".icon {\n font-size: 1em;\n}\n\nspan.icon {\n line-height: 1;\n}\n\nspan.icon > svg {\n position: relative;\n top: 0.1em;\n height: 1em;\n}\n"],"file":"icon.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/image.css b/preview/pr-27/_styles/image.css new file mode 100644 index 0000000..70340d3 --- /dev/null +++ b/preview/pr-27/_styles/image.css @@ -0,0 +1,6 @@ +img { + max-width: 100%; + max-height: 100%; +} + +/*# sourceMappingURL=image.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/image.css.map b/preview/pr-27/_styles/image.css.map new file mode 100644 index 0000000..e88ec45 --- /dev/null +++ b/preview/pr-27/_styles/image.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["image.scss"],"names":[],"mappings":"AAAA;EACE;EACA","sourcesContent":["img {\n max-width: 100%;\n max-height: 100%;\n}\n"],"file":"image.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/link.css b/preview/pr-27/_styles/link.css new file mode 100644 index 0000000..a20e40b --- /dev/null +++ b/preview/pr-27/_styles/link.css @@ -0,0 +1,15 @@ +a { + color: var(--primary); + transition-property: color; + overflow-wrap: break-word; +} + +a:hover { + color: var(--text); +} + +a:not([href]) { + color: var(--text); +} + +/*# sourceMappingURL=link.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/link.css.map b/preview/pr-27/_styles/link.css.map new file mode 100644 index 0000000..976b37f --- /dev/null +++ b/preview/pr-27/_styles/link.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["link.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":["a {\n color: var(--primary);\n transition-property: color;\n overflow-wrap: break-word;\n}\n\na:hover {\n color: var(--text);\n}\n\na:not([href]) {\n color: var(--text);\n}\n"],"file":"link.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/list.css b/preview/pr-27/_styles/list.css new file mode 100644 index 0000000..02a7cf1 --- /dev/null +++ b/preview/pr-27/_styles/list.css @@ -0,0 +1,18 @@ +ul, +ol { + margin: 20px 0; + padding-left: 40px; +} + +ul { + list-style-type: square; +} + +li { + margin: 5px 0; + padding-left: 10px; + text-align: justify; + line-height: var(--spacing); +} + +/*# sourceMappingURL=list.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/list.css.map b/preview/pr-27/_styles/list.css.map new file mode 100644 index 0000000..38fb1e5 --- /dev/null +++ b/preview/pr-27/_styles/list.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["list.scss"],"names":[],"mappings":"AAAA;AAAA;EAEE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA","sourcesContent":["ul,\nol {\n margin: 20px 0;\n padding-left: 40px;\n}\n\nul {\n list-style-type: square;\n}\n\nli {\n margin: 5px 0;\n padding-left: 10px;\n text-align: justify;\n line-height: var(--spacing);\n}\n"],"file":"list.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/main.css b/preview/pr-27/_styles/main.css new file mode 100644 index 0000000..f72eb0d --- /dev/null +++ b/preview/pr-27/_styles/main.css @@ -0,0 +1,7 @@ +main { + display: flex; + flex-direction: column; + flex-grow: 1; +} + +/*# sourceMappingURL=main.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/main.css.map b/preview/pr-27/_styles/main.css.map new file mode 100644 index 0000000..a2a0fa8 --- /dev/null +++ b/preview/pr-27/_styles/main.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["main.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA","sourcesContent":["main {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n}\n"],"file":"main.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/paragraph.css b/preview/pr-27/_styles/paragraph.css new file mode 100644 index 0000000..7e46c39 --- /dev/null +++ b/preview/pr-27/_styles/paragraph.css @@ -0,0 +1,7 @@ +p { + margin: 20px 0; + text-align: justify; + line-height: var(--spacing); +} + +/*# sourceMappingURL=paragraph.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/paragraph.css.map b/preview/pr-27/_styles/paragraph.css.map new file mode 100644 index 0000000..7eb50a6 --- /dev/null +++ b/preview/pr-27/_styles/paragraph.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["paragraph.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA","sourcesContent":["p {\n margin: 20px 0;\n text-align: justify;\n line-height: var(--spacing);\n}\n"],"file":"paragraph.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/portrait.css b/preview/pr-27/_styles/portrait.css new file mode 100644 index 0000000..f9b31a1 --- /dev/null +++ b/preview/pr-27/_styles/portrait.css @@ -0,0 +1,76 @@ +.portrait-wrapper { + display: contents; +} + +.portrait { + position: relative; + display: inline-flex; + justify-content: center; + align-items: center; + flex-direction: column; + gap: 20px; + margin: 20px; + width: 175px; + max-width: calc(100% - 20px - 20px); + text-decoration: none; +} + +.portrait[data-style=small] { + width: 100px; +} + +.portrait[data-style=tiny] { + flex-direction: row; + gap: 15px; + width: unset; + text-align: left; +} + +.portrait-image { + width: 100%; + aspect-ratio: 1/1; + border-radius: 999px; + object-fit: cover; + box-shadow: var(--shadow); +} + +.portrait[data-style=tiny] .portrait-image { + width: 50px; +} + +.portrait[data-style=tiny] .portrait-role { + display: none; +} + +.portrait-text { + display: flex; + flex-direction: column; + line-height: calc(var(--spacing) - 0.4); +} + +.portrait-name { + font-family: var(--heading); + font-weight: var(--semi-bold); +} + +.portrait-role .icon { + position: absolute; + left: 0; + top: 0; + display: flex; + justify-content: center; + align-items: center; + width: 20%; + aspect-ratio: 1/1; + border-radius: 999px; + background: var(--background); + box-shadow: var(--shadow); + transform: translate(14%, 14%); +} + +.portrait[data-style=small] .portrait-role .icon { + left: -2px; + top: -2px; +} + +/*# sourceMappingURL=portrait.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/portrait.css.map b/preview/pr-27/_styles/portrait.css.map new file mode 100644 index 0000000..c3d5789 --- /dev/null +++ b/preview/pr-27/_styles/portrait.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["portrait.scss"],"names":[],"mappings":"AAAA;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA","sourcesContent":[".portrait-wrapper {\n display: contents;\n}\n\n.portrait {\n position: relative;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n gap: 20px;\n margin: 20px;\n width: 175px;\n max-width: calc(100% - 20px - 20px);\n text-decoration: none;\n}\n\n.portrait[data-style=\"small\"] {\n width: 100px;\n}\n\n.portrait[data-style=\"tiny\"] {\n flex-direction: row;\n gap: 15px;\n width: unset;\n text-align: left;\n}\n\n.portrait-image {\n width: 100%;\n aspect-ratio: 1 / 1;\n border-radius: 999px;\n object-fit: cover;\n box-shadow: var(--shadow);\n}\n\n.portrait[data-style=\"tiny\"] .portrait-image {\n width: 50px;\n}\n\n.portrait[data-style=\"tiny\"] .portrait-role {\n display: none;\n}\n\n.portrait-text {\n display: flex;\n flex-direction: column;\n line-height: calc(var(--spacing) - 0.4);\n}\n\n.portrait-name {\n font-family: var(--heading);\n font-weight: var(--semi-bold);\n}\n\n.portrait-role .icon {\n position: absolute;\n left: 0;\n top: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 20%;\n aspect-ratio: 1 / 1;\n border-radius: 999px;\n background: var(--background);\n box-shadow: var(--shadow);\n transform: translate(14%, 14%);\n}\n\n.portrait[data-style=\"small\"] .portrait-role .icon {\n left: -2px;\n top: -2px;\n}\n"],"file":"portrait.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/post-excerpt.css b/preview/pr-27/_styles/post-excerpt.css new file mode 100644 index 0000000..cfccd68 --- /dev/null +++ b/preview/pr-27/_styles/post-excerpt.css @@ -0,0 +1,30 @@ +.post-excerpt { + display: flex; + flex-wrap: wrap; + gap: 20px; + margin: 20px 0; + padding: 20px 30px; + border-radius: var(--rounded); + background: var(--background); + text-align: left; + box-shadow: var(--shadow); +} + +.post-excerpt > * { + margin: 0 !important; +} + +.post-excerpt > a:first-child { + width: 100%; + font-weight: var(--semi-bold); +} + +.post-excerpt > div { + justify-content: flex-start; +} + +.post-excerpt > p { + width: 100%; +} + +/*# sourceMappingURL=post-excerpt.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/post-excerpt.css.map b/preview/pr-27/_styles/post-excerpt.css.map new file mode 100644 index 0000000..e2041f2 --- /dev/null +++ b/preview/pr-27/_styles/post-excerpt.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["post-excerpt.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":[".post-excerpt {\n display: flex;\n flex-wrap: wrap;\n gap: 20px;\n margin: 20px 0;\n padding: 20px 30px;\n border-radius: var(--rounded);\n background: var(--background);\n text-align: left;\n box-shadow: var(--shadow);\n}\n\n.post-excerpt > * {\n margin: 0 !important;\n}\n\n.post-excerpt > a:first-child {\n width: 100%;\n font-weight: var(--semi-bold);\n}\n\n.post-excerpt > div {\n justify-content: flex-start;\n}\n\n.post-excerpt > p {\n width: 100%;\n}\n"],"file":"post-excerpt.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/post-info.css b/preview/pr-27/_styles/post-info.css new file mode 100644 index 0000000..abb6b51 --- /dev/null +++ b/preview/pr-27/_styles/post-info.css @@ -0,0 +1,32 @@ +.post-info { + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; + gap: 20px; + margin: 20px 0; + color: var(--gray); +} + +.post-info .portrait { + margin: 0; +} + +.post-info .icon { + margin-right: 0.5em; +} + +.post-info a { + color: inherit; +} + +.post-info a:hover { + color: var(--primary); +} + +.post-info > span { + text-align: center; + white-space: nowrap; +} + +/*# sourceMappingURL=post-info.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/post-info.css.map b/preview/pr-27/_styles/post-info.css.map new file mode 100644 index 0000000..74c149e --- /dev/null +++ b/preview/pr-27/_styles/post-info.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["post-info.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA","sourcesContent":[".post-info {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-wrap: wrap;\n gap: 20px;\n margin: 20px 0;\n color: var(--gray);\n}\n\n.post-info .portrait {\n margin: 0;\n}\n\n.post-info .icon {\n margin-right: 0.5em;\n}\n\n.post-info a {\n color: inherit;\n}\n\n.post-info a:hover {\n color: var(--primary);\n}\n\n.post-info > span {\n text-align: center;\n white-space: nowrap;\n}\n"],"file":"post-info.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/post-nav.css b/preview/pr-27/_styles/post-nav.css new file mode 100644 index 0000000..fe210bb --- /dev/null +++ b/preview/pr-27/_styles/post-nav.css @@ -0,0 +1,36 @@ +.post-nav { + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: 10px; + color: var(--gray); + line-height: calc(var(--spacing) - 0.4); +} + +.post-nav > *:first-child { + text-align: left; +} + +.post-nav > *:last-child { + text-align: right; +} + +.post-nav > *:first-child .icon { + margin-right: 0.5em; +} + +.post-nav > *:last-child .icon { + margin-left: 0.5em; +} + +@media (max-width: 600px) { + .post-nav { + align-items: center; + flex-direction: column; + } + .post-nav > * { + text-align: center !important; + } +} + +/*# sourceMappingURL=post-nav.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/post-nav.css.map b/preview/pr-27/_styles/post-nav.css.map new file mode 100644 index 0000000..2ba6fba --- /dev/null +++ b/preview/pr-27/_styles/post-nav.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["post-nav.scss"],"names":[],"mappings":"AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;IACE;IACA;;EAGF;IACE","sourcesContent":["$wrap: 600px;\n\n.post-nav {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 10px;\n color: var(--gray);\n line-height: calc(var(--spacing) - 0.4);\n}\n\n.post-nav > *:first-child {\n text-align: left;\n}\n\n.post-nav > *:last-child {\n text-align: right;\n}\n\n.post-nav > *:first-child .icon {\n margin-right: 0.5em;\n}\n\n.post-nav > *:last-child .icon {\n margin-left: 0.5em;\n}\n\n@media (max-width: $wrap) {\n .post-nav {\n align-items: center;\n flex-direction: column;\n }\n\n .post-nav > * {\n text-align: center !important;\n }\n}\n"],"file":"post-nav.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/quote.css b/preview/pr-27/_styles/quote.css new file mode 100644 index 0000000..456c767 --- /dev/null +++ b/preview/pr-27/_styles/quote.css @@ -0,0 +1,15 @@ +blockquote { + margin: 20px 0; + padding: 10px 20px; + border-left: solid 4px var(--light-gray); +} + +blockquote > *:first-child { + margin-top: 0; +} + +blockquote > *:last-child { + margin-bottom: 0; +} + +/*# sourceMappingURL=quote.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/quote.css.map b/preview/pr-27/_styles/quote.css.map new file mode 100644 index 0000000..2cc84a2 --- /dev/null +++ b/preview/pr-27/_styles/quote.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["quote.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":["blockquote {\n margin: 20px 0;\n padding: 10px 20px;\n border-left: solid 4px var(--light-gray);\n}\n\nblockquote > *:first-child {\n margin-top: 0;\n}\n\nblockquote > *:last-child {\n margin-bottom: 0;\n}\n"],"file":"quote.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/rule.css b/preview/pr-27/_styles/rule.css new file mode 100644 index 0000000..28ca080 --- /dev/null +++ b/preview/pr-27/_styles/rule.css @@ -0,0 +1,8 @@ +hr { + margin: 40px 0; + background: var(--light-gray); + border: none; + height: 1px; +} + +/*# sourceMappingURL=rule.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/rule.css.map b/preview/pr-27/_styles/rule.css.map new file mode 100644 index 0000000..a955dd9 --- /dev/null +++ b/preview/pr-27/_styles/rule.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["rule.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA","sourcesContent":["hr {\n margin: 40px 0;\n background: var(--light-gray);\n border: none;\n height: 1px;\n}\n"],"file":"rule.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/search-box.css b/preview/pr-27/_styles/search-box.css new file mode 100644 index 0000000..9766e92 --- /dev/null +++ b/preview/pr-27/_styles/search-box.css @@ -0,0 +1,25 @@ +.search-box { + position: relative; + height: 40px; +} + +.search-box .search-input { + width: 100%; + height: 100%; + padding-right: 40px; +} + +.search-box button { + position: absolute; + inset: 0 0 0 auto; + display: flex; + justify-content: center; + align-items: center; + padding: 0; + aspect-ratio: 1/1; + background: none; + color: var(--black); + border: none; +} + +/*# sourceMappingURL=search-box.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/search-box.css.map b/preview/pr-27/_styles/search-box.css.map new file mode 100644 index 0000000..7d45274 --- /dev/null +++ b/preview/pr-27/_styles/search-box.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["search-box.scss"],"names":[],"mappings":"AAAA;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA","sourcesContent":[".search-box {\n position: relative;\n height: 40px;\n}\n\n.search-box .search-input {\n width: 100%;\n height: 100%;\n padding-right: 40px;\n}\n\n.search-box button {\n position: absolute;\n inset: 0 0 0 auto;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 0;\n aspect-ratio: 1 / 1;\n background: none;\n color: var(--black);\n border: none;\n}\n"],"file":"search-box.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/search-info.css b/preview/pr-27/_styles/search-info.css new file mode 100644 index 0000000..e5c9a30 --- /dev/null +++ b/preview/pr-27/_styles/search-info.css @@ -0,0 +1,8 @@ +.search-info { + margin: 20px 0; + text-align: center; + font-style: italic; + line-height: var(--spacing); +} + +/*# sourceMappingURL=search-info.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/search-info.css.map b/preview/pr-27/_styles/search-info.css.map new file mode 100644 index 0000000..d825cee --- /dev/null +++ b/preview/pr-27/_styles/search-info.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["search-info.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA","sourcesContent":[".search-info {\n margin: 20px 0;\n text-align: center;\n font-style: italic;\n line-height: var(--spacing);\n}\n"],"file":"search-info.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/section.css b/preview/pr-27/_styles/section.css new file mode 100644 index 0000000..4b9c58b --- /dev/null +++ b/preview/pr-27/_styles/section.css @@ -0,0 +1,35 @@ +section { + padding: 40px max(40px, (100% - 1000px) / 2); + transition-property: background, color; +} + +section[data-size=wide] { + padding: 40px; +} + +section[data-size=full] { + padding: 0; +} + +section[data-size=full] > * { + margin: 0; + border-radius: 0; +} + +section[data-size=full] img { + border-radius: 0; +} + +main > section:last-of-type { + flex-grow: 1; +} + +main > section:nth-of-type(odd) { + background: var(--background); +} + +main > section:nth-of-type(even) { + background: var(--background-alt); +} + +/*# sourceMappingURL=section.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/section.css.map b/preview/pr-27/_styles/section.css.map new file mode 100644 index 0000000..f630467 --- /dev/null +++ b/preview/pr-27/_styles/section.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["section.scss"],"names":[],"mappings":"AAGA;EACE;EACA;;;AAGF;EACE,SARQ;;;AAWV;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":["$page: 1000px;\n$padding: 40px;\n\nsection {\n padding: $padding max($padding, calc((100% - $page) / 2));\n transition-property: background, color;\n}\n\nsection[data-size=\"wide\"] {\n padding: $padding;\n}\n\nsection[data-size=\"full\"] {\n padding: 0;\n}\n\nsection[data-size=\"full\"] > * {\n margin: 0;\n border-radius: 0;\n}\n\nsection[data-size=\"full\"] img {\n border-radius: 0;\n}\n\nmain > section:last-of-type {\n flex-grow: 1;\n}\n\nmain > section:nth-of-type(odd) {\n background: var(--background);\n}\n\nmain > section:nth-of-type(even) {\n background: var(--background-alt);\n}\n"],"file":"section.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/table.css b/preview/pr-27/_styles/table.css new file mode 100644 index 0000000..eb687cc --- /dev/null +++ b/preview/pr-27/_styles/table.css @@ -0,0 +1,21 @@ +.table-wrapper { + margin: 40px 0; + overflow-x: auto; +} + +table { + margin: 0 auto; + border-collapse: collapse; +} + +th { + font-weight: var(--semi-bold); +} + +th, +td { + padding: 10px 15px; + border: solid 1px var(--light-gray); +} + +/*# sourceMappingURL=table.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/table.css.map b/preview/pr-27/_styles/table.css.map new file mode 100644 index 0000000..25e08df --- /dev/null +++ b/preview/pr-27/_styles/table.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["table.scss"],"names":[],"mappings":"AAAA;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AAAA;EAEE;EACA","sourcesContent":[".table-wrapper {\n margin: 40px 0;\n overflow-x: auto;\n}\n\ntable {\n margin: 0 auto;\n border-collapse: collapse;\n}\n\nth {\n font-weight: var(--semi-bold);\n}\n\nth,\ntd {\n padding: 10px 15px;\n border: solid 1px var(--light-gray);\n}\n"],"file":"table.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/tags.css b/preview/pr-27/_styles/tags.css new file mode 100644 index 0000000..1225ba4 --- /dev/null +++ b/preview/pr-27/_styles/tags.css @@ -0,0 +1,33 @@ +.tags { + display: inline-flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; + gap: 10px; + max-width: 100%; + margin: 20px 0; +} + +.tag { + max-width: 100%; + margin: 0; + padding: 5px 10px; + border-radius: 999px; + background: var(--secondary); + color: var(--text); + text-decoration: none; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + transition-property: background, color; +} + +.tag:hover { + background: var(--light-gray); +} + +.tag[data-active] { + background: var(--light-gray); +} + +/*# sourceMappingURL=tags.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/tags.css.map b/preview/pr-27/_styles/tags.css.map new file mode 100644 index 0000000..82c3531 --- /dev/null +++ b/preview/pr-27/_styles/tags.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["tags.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":[".tags {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n flex-wrap: wrap;\n gap: 10px;\n max-width: 100%;\n margin: 20px 0;\n}\n\n.tag {\n max-width: 100%;\n margin: 0;\n padding: 5px 10px;\n border-radius: 999px;\n background: var(--secondary);\n color: var(--text);\n text-decoration: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-property: background, color;\n}\n\n.tag:hover {\n background: var(--light-gray);\n}\n\n.tag[data-active] {\n background: var(--light-gray);\n}\n"],"file":"tags.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/textbox.css b/preview/pr-27/_styles/textbox.css new file mode 100644 index 0000000..d35615b --- /dev/null +++ b/preview/pr-27/_styles/textbox.css @@ -0,0 +1,17 @@ +input[type=text] { + width: 100%; + height: 40px; + margin: 0; + padding: 5px 10px; + border: solid 1px var(--light-gray); + border-radius: var(--rounded); + background: var(--background); + color: var(--text); + font-family: inherit; + font-size: inherit; + -webkit-appearance: none; + appearance: none; + box-shadow: var(--shadow); +} + +/*# sourceMappingURL=textbox.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/textbox.css.map b/preview/pr-27/_styles/textbox.css.map new file mode 100644 index 0000000..9e46f91 --- /dev/null +++ b/preview/pr-27/_styles/textbox.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["textbox.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA","sourcesContent":["input[type=\"text\"] {\n width: 100%;\n height: 40px;\n margin: 0;\n padding: 5px 10px;\n border: solid 1px var(--light-gray);\n border-radius: var(--rounded);\n background: var(--background);\n color: var(--text);\n font-family: inherit;\n font-size: inherit;\n -webkit-appearance: none;\n appearance: none;\n box-shadow: var(--shadow);\n}\n"],"file":"textbox.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/tooltip.css b/preview/pr-27/_styles/tooltip.css new file mode 100644 index 0000000..28b590e --- /dev/null +++ b/preview/pr-27/_styles/tooltip.css @@ -0,0 +1,72 @@ +.tippy-box { + background: var(--background); + color: var(--text); + padding: 7.5px; + text-align: left; + box-shadow: var(--shadow); +} + +.tippy-arrow { + width: 30px; + height: 30px; +} + +.tippy-arrow:before { + width: 10px; + height: 10px; + background: var(--background); + box-shadow: var(--shadow); +} + +.tippy-arrow { + overflow: hidden; + pointer-events: none; +} + +.tippy-box[data-placement=top] .tippy-arrow { + inset: unset; + top: 100%; +} + +.tippy-box[data-placement=bottom] .tippy-arrow { + inset: unset; + bottom: 100%; +} + +.tippy-box[data-placement=left] .tippy-arrow { + inset: unset; + left: 100%; +} + +.tippy-box[data-placement=right] .tippy-arrow { + inset: unset; + right: 100%; +} + +.tippy-arrow:before { + border: unset !important; + transform-origin: center !important; + transform: translate(-50%, -50%) rotate(45deg) !important; +} + +.tippy-box[data-placement=top] .tippy-arrow:before { + left: 50% !important; + top: 0 !important; +} + +.tippy-box[data-placement=bottom] .tippy-arrow:before { + left: 50% !important; + top: 100% !important; +} + +.tippy-box[data-placement=left] .tippy-arrow:before { + left: 0 !important; + top: 50% !important; +} + +.tippy-box[data-placement=right] .tippy-arrow:before { + left: 100% !important; + top: 50% !important; +} + +/*# sourceMappingURL=tooltip.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/tooltip.css.map b/preview/pr-27/_styles/tooltip.css.map new file mode 100644 index 0000000..6b52e91 --- /dev/null +++ b/preview/pr-27/_styles/tooltip.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["tooltip.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA","sourcesContent":[".tippy-box {\n background: var(--background);\n color: var(--text);\n padding: 7.5px;\n text-align: left;\n box-shadow: var(--shadow);\n}\n\n.tippy-arrow {\n width: 30px;\n height: 30px;\n}\n\n.tippy-arrow:before {\n width: 10px;\n height: 10px;\n background: var(--background);\n box-shadow: var(--shadow);\n}\n\n// correct tippy arrow styles to support intuitive arrow styles above\n.tippy-arrow {\n overflow: hidden;\n pointer-events: none;\n}\n.tippy-box[data-placement=\"top\"] .tippy-arrow {\n inset: unset;\n top: 100%;\n}\n.tippy-box[data-placement=\"bottom\"] .tippy-arrow {\n inset: unset;\n bottom: 100%;\n}\n.tippy-box[data-placement=\"left\"] .tippy-arrow {\n inset: unset;\n left: 100%;\n}\n.tippy-box[data-placement=\"right\"] .tippy-arrow {\n inset: unset;\n right: 100%;\n}\n.tippy-arrow:before {\n border: unset !important;\n transform-origin: center !important;\n transform: translate(-50%, -50%) rotate(45deg) !important;\n}\n.tippy-box[data-placement=\"top\"] .tippy-arrow:before {\n left: 50% !important;\n top: 0 !important;\n}\n.tippy-box[data-placement=\"bottom\"] .tippy-arrow:before {\n left: 50% !important;\n top: 100% !important;\n}\n.tippy-box[data-placement=\"left\"] .tippy-arrow:before {\n left: 0 !important;\n top: 50% !important;\n}\n.tippy-box[data-placement=\"right\"] .tippy-arrow:before {\n left: 100% !important;\n top: 50% !important;\n}\n"],"file":"tooltip.css"} \ No newline at end of file diff --git a/preview/pr-27/_styles/util.css b/preview/pr-27/_styles/util.css new file mode 100644 index 0000000..995ea77 --- /dev/null +++ b/preview/pr-27/_styles/util.css @@ -0,0 +1,13 @@ +.left { + text-align: left; +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +/*# sourceMappingURL=util.css.map */ \ No newline at end of file diff --git a/preview/pr-27/_styles/util.css.map b/preview/pr-27/_styles/util.css.map new file mode 100644 index 0000000..c21a68d --- /dev/null +++ b/preview/pr-27/_styles/util.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["util.scss"],"names":[],"mappings":"AAAA;EACE;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":[".left {\n text-align: left;\n}\n\n.center {\n text-align: center;\n}\n\n.right {\n text-align: right;\n}\n"],"file":"util.css"} \ No newline at end of file diff --git a/preview/pr-27/alums.html b/preview/pr-27/alums.html new file mode 100644 index 0000000..1ac5ceb --- /dev/null +++ b/preview/pr-27/alums.html @@ -0,0 +1,16 @@ + + + + + + Redirecting… + + + + + + +

Redirecting…

+ Click here if you are not redirected. + + diff --git a/preview/pr-27/contact/index.html b/preview/pr-27/contact/index.html new file mode 100644 index 0000000..d9f8597 --- /dev/null +++ b/preview/pr-27/contact/index.html @@ -0,0 +1,635 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Contact | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

+Contact

+ +

Our lab is part of the Federal University of Rio Grande do Norte’s Bioinformatics Multidisciplinary Environment. Our team is headquartered on the 2nd Floor of the Brain Institute (ICe).

+ +
+ + figure image + + +
+ + + + +
+ + + + + +
+ + +
+ + +
+
+ + © Cícero Oliveira + + +
+ © Cícero Oliveira + +
+ +
+ +
+ + +
+
+ + figure image + + +
+ +
+ +
+
+ + +
+ + + + + + + diff --git a/preview/pr-27/feed.xml b/preview/pr-27/feed.xml new file mode 100644 index 0000000..3359761 --- /dev/null +++ b/preview/pr-27/feed.xml @@ -0,0 +1 @@ +Jekyll2023-12-23T20:44:24+00:00/preview/pr-27/feed.xmlDalmolin Systems Biology GroupAn engaging 1-3 sentence description of your lab. \ No newline at end of file diff --git a/preview/pr-27/images/background.jpg b/preview/pr-27/images/background.jpg new file mode 100644 index 0000000..5b7c146 Binary files /dev/null and b/preview/pr-27/images/background.jpg differ diff --git a/preview/pr-27/images/banner.jpg b/preview/pr-27/images/banner.jpg new file mode 100644 index 0000000..041e48e Binary files /dev/null and b/preview/pr-27/images/banner.jpg differ diff --git a/preview/pr-27/images/biome_logo_atual.png b/preview/pr-27/images/biome_logo_atual.png new file mode 100644 index 0000000..595cb6e Binary files /dev/null and b/preview/pr-27/images/biome_logo_atual.png differ diff --git a/preview/pr-27/images/fallback.svg b/preview/pr-27/images/fallback.svg new file mode 100644 index 0000000..ac12be2 --- /dev/null +++ b/preview/pr-27/images/fallback.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/preview/pr-27/images/group_foto.jpg b/preview/pr-27/images/group_foto.jpg new file mode 100755 index 0000000..ba5d473 Binary files /dev/null and b/preview/pr-27/images/group_foto.jpg differ diff --git a/preview/pr-27/images/grupo_foto2.jpg b/preview/pr-27/images/grupo_foto2.jpg new file mode 100644 index 0000000..0763195 Binary files /dev/null and b/preview/pr-27/images/grupo_foto2.jpg differ diff --git a/preview/pr-27/images/ice_foto.jpg b/preview/pr-27/images/ice_foto.jpg new file mode 100644 index 0000000..d6acd44 Binary files /dev/null and b/preview/pr-27/images/ice_foto.jpg differ diff --git a/preview/pr-27/images/ice_foto2.jpg b/preview/pr-27/images/ice_foto2.jpg new file mode 100644 index 0000000..59d18ec Binary files /dev/null and b/preview/pr-27/images/ice_foto2.jpg differ diff --git a/preview/pr-27/images/icon.png b/preview/pr-27/images/icon.png new file mode 100644 index 0000000..c296edf Binary files /dev/null and b/preview/pr-27/images/icon.png differ diff --git a/preview/pr-27/images/lines/dev.png b/preview/pr-27/images/lines/dev.png new file mode 100644 index 0000000..0ad7b86 Binary files /dev/null and b/preview/pr-27/images/lines/dev.png differ diff --git a/preview/pr-27/images/lines/evo1.png b/preview/pr-27/images/lines/evo1.png new file mode 100644 index 0000000..fd69e0b Binary files /dev/null and b/preview/pr-27/images/lines/evo1.png differ diff --git a/preview/pr-27/images/lines/evo2.jpeg b/preview/pr-27/images/lines/evo2.jpeg new file mode 100644 index 0000000..2184526 Binary files /dev/null and b/preview/pr-27/images/lines/evo2.jpeg differ diff --git a/preview/pr-27/images/lines/evo3.jpg b/preview/pr-27/images/lines/evo3.jpg new file mode 100644 index 0000000..8e91c35 Binary files /dev/null and b/preview/pr-27/images/lines/evo3.jpg differ diff --git a/preview/pr-27/images/lines/evolution.png b/preview/pr-27/images/lines/evolution.png new file mode 100644 index 0000000..99f2f72 Binary files /dev/null and b/preview/pr-27/images/lines/evolution.png differ diff --git a/preview/pr-27/images/lines/metagenomics_1.jpg b/preview/pr-27/images/lines/metagenomics_1.jpg new file mode 100644 index 0000000..9f1df66 Binary files /dev/null and b/preview/pr-27/images/lines/metagenomics_1.jpg differ diff --git a/preview/pr-27/images/lines/metagenomics_2.jpg b/preview/pr-27/images/lines/metagenomics_2.jpg new file mode 100644 index 0000000..25e7a24 Binary files /dev/null and b/preview/pr-27/images/lines/metagenomics_2.jpg differ diff --git a/preview/pr-27/images/lines/metagenomics_lines.jpg b/preview/pr-27/images/lines/metagenomics_lines.jpg new file mode 100644 index 0000000..25e7a24 Binary files /dev/null and b/preview/pr-27/images/lines/metagenomics_lines.jpg differ diff --git a/preview/pr-27/images/lines/metagenomics_lines.webp b/preview/pr-27/images/lines/metagenomics_lines.webp new file mode 100644 index 0000000..c6dc730 Binary files /dev/null and b/preview/pr-27/images/lines/metagenomics_lines.webp differ diff --git a/preview/pr-27/images/lines/networks.png b/preview/pr-27/images/lines/networks.png new file mode 100644 index 0000000..365138b Binary files /dev/null and b/preview/pr-27/images/lines/networks.png differ diff --git a/preview/pr-27/images/lines/networks.webp b/preview/pr-27/images/lines/networks.webp new file mode 100644 index 0000000..6330deb Binary files /dev/null and b/preview/pr-27/images/lines/networks.webp differ diff --git a/preview/pr-27/images/lines/transcriptomics_line.jpg b/preview/pr-27/images/lines/transcriptomics_line.jpg new file mode 100644 index 0000000..c7a103c Binary files /dev/null and b/preview/pr-27/images/lines/transcriptomics_line.jpg differ diff --git a/preview/pr-27/images/logo.svg b/preview/pr-27/images/logo.svg new file mode 100644 index 0000000..f8b18c6 --- /dev/null +++ b/preview/pr-27/images/logo.svg @@ -0,0 +1 @@ +dalmolin_group \ No newline at end of file diff --git a/preview/pr-27/images/our_research.png b/preview/pr-27/images/our_research.png new file mode 100644 index 0000000..1d34d3b Binary files /dev/null and b/preview/pr-27/images/our_research.png differ diff --git a/preview/pr-27/images/photo.jpg b/preview/pr-27/images/photo.jpg new file mode 100644 index 0000000..691a988 Binary files /dev/null and b/preview/pr-27/images/photo.jpg differ diff --git a/preview/pr-27/images/share.jpg b/preview/pr-27/images/share.jpg new file mode 100644 index 0000000..268a341 Binary files /dev/null and b/preview/pr-27/images/share.jpg differ diff --git a/preview/pr-27/images/teaching/intro_bio_sistemas.jpg b/preview/pr-27/images/teaching/intro_bio_sistemas.jpg new file mode 100644 index 0000000..ea5346d Binary files /dev/null and b/preview/pr-27/images/teaching/intro_bio_sistemas.jpg differ diff --git a/preview/pr-27/images/teaching/intro_r.jpg b/preview/pr-27/images/teaching/intro_r.jpg new file mode 100644 index 0000000..3b3c817 Binary files /dev/null and b/preview/pr-27/images/teaching/intro_r.jpg differ diff --git a/preview/pr-27/images/teaching/rnaseq.jpg b/preview/pr-27/images/teaching/rnaseq.jpg new file mode 100644 index 0000000..99c7357 Binary files /dev/null and b/preview/pr-27/images/teaching/rnaseq.jpg differ diff --git a/preview/pr-27/images/team/bianca_santiago.jpg b/preview/pr-27/images/team/bianca_santiago.jpg new file mode 100644 index 0000000..07ecb94 Binary files /dev/null and b/preview/pr-27/images/team/bianca_santiago.jpg differ diff --git a/preview/pr-27/images/team/bruno_william.jpg b/preview/pr-27/images/team/bruno_william.jpg new file mode 100644 index 0000000..b58e00e Binary files /dev/null and b/preview/pr-27/images/team/bruno_william.jpg differ diff --git a/preview/pr-27/images/team/clovis_reis.png b/preview/pr-27/images/team/clovis_reis.png new file mode 100644 index 0000000..3f3280d Binary files /dev/null and b/preview/pr-27/images/team/clovis_reis.png differ diff --git a/preview/pr-27/images/team/danilo_imparato.jpg b/preview/pr-27/images/team/danilo_imparato.jpg new file mode 100644 index 0000000..1dbe10d Binary files /dev/null and b/preview/pr-27/images/team/danilo_imparato.jpg differ diff --git a/preview/pr-27/images/team/dante_von_zuben.jpg b/preview/pr-27/images/team/dante_von_zuben.jpg new file mode 100644 index 0000000..750d8e5 Binary files /dev/null and b/preview/pr-27/images/team/dante_von_zuben.jpg differ diff --git a/preview/pr-27/images/team/diego_morais.png b/preview/pr-27/images/team/diego_morais.png new file mode 100644 index 0000000..a01e19f Binary files /dev/null and b/preview/pr-27/images/team/diego_morais.png differ diff --git a/preview/pr-27/images/team/epitacio_farias.jpg b/preview/pr-27/images/team/epitacio_farias.jpg new file mode 100644 index 0000000..fad1596 Binary files /dev/null and b/preview/pr-27/images/team/epitacio_farias.jpg differ diff --git a/preview/pr-27/images/team/fabio_silva.jpg b/preview/pr-27/images/team/fabio_silva.jpg new file mode 100644 index 0000000..849c21e Binary files /dev/null and b/preview/pr-27/images/team/fabio_silva.jpg differ diff --git a/preview/pr-27/images/team/gleison_medeiros.jpg b/preview/pr-27/images/team/gleison_medeiros.jpg new file mode 100644 index 0000000..a8d76e5 Binary files /dev/null and b/preview/pr-27/images/team/gleison_medeiros.jpg differ diff --git a/preview/pr-27/images/team/gustavo_michaelsen.jpg b/preview/pr-27/images/team/gustavo_michaelsen.jpg new file mode 100644 index 0000000..ca6cc22 Binary files /dev/null and b/preview/pr-27/images/team/gustavo_michaelsen.jpg differ diff --git a/preview/pr-27/images/team/iara_de_souza.jpg b/preview/pr-27/images/team/iara_de_souza.jpg new file mode 100755 index 0000000..9bea6e0 Binary files /dev/null and b/preview/pr-27/images/team/iara_de_souza.jpg differ diff --git a/preview/pr-27/images/team/igor_brandao.jpg b/preview/pr-27/images/team/igor_brandao.jpg new file mode 100644 index 0000000..adcfa36 Binary files /dev/null and b/preview/pr-27/images/team/igor_brandao.jpg differ diff --git a/preview/pr-27/images/team/joao_cavalcante.jpg b/preview/pr-27/images/team/joao_cavalcante.jpg new file mode 100644 index 0000000..992f437 Binary files /dev/null and b/preview/pr-27/images/team/joao_cavalcante.jpg differ diff --git a/preview/pr-27/images/team/joao_vitor_almeida.jpg b/preview/pr-27/images/team/joao_vitor_almeida.jpg new file mode 100644 index 0000000..adf6639 Binary files /dev/null and b/preview/pr-27/images/team/joao_vitor_almeida.jpg differ diff --git a/preview/pr-27/images/team/leonardo_campos.jpg b/preview/pr-27/images/team/leonardo_campos.jpg new file mode 100644 index 0000000..30fbb42 Binary files /dev/null and b/preview/pr-27/images/team/leonardo_campos.jpg differ diff --git a/preview/pr-27/images/team/marcel_ribeiro-dantas.jpg b/preview/pr-27/images/team/marcel_ribeiro-dantas.jpg new file mode 100644 index 0000000..731e23d Binary files /dev/null and b/preview/pr-27/images/team/marcel_ribeiro-dantas.jpg differ diff --git a/preview/pr-27/images/team/natalia_souza.jpg b/preview/pr-27/images/team/natalia_souza.jpg new file mode 100644 index 0000000..895e64c Binary files /dev/null and b/preview/pr-27/images/team/natalia_souza.jpg differ diff --git a/preview/pr-27/images/team/odilon_santos.jpg b/preview/pr-27/images/team/odilon_santos.jpg new file mode 100644 index 0000000..1781f97 Binary files /dev/null and b/preview/pr-27/images/team/odilon_santos.jpg differ diff --git a/preview/pr-27/images/team/rafaella_ferraz.jpg b/preview/pr-27/images/team/rafaella_ferraz.jpg new file mode 100644 index 0000000..ccf1a5e Binary files /dev/null and b/preview/pr-27/images/team/rafaella_ferraz.jpg differ diff --git a/preview/pr-27/images/team/raffael_oliveira.png b/preview/pr-27/images/team/raffael_oliveira.png new file mode 100644 index 0000000..6eb67c9 Binary files /dev/null and b/preview/pr-27/images/team/raffael_oliveira.png differ diff --git a/preview/pr-27/images/team/rodrigo_dalmolin.jpg b/preview/pr-27/images/team/rodrigo_dalmolin.jpg new file mode 100644 index 0000000..e735a9a Binary files /dev/null and b/preview/pr-27/images/team/rodrigo_dalmolin.jpg differ diff --git a/preview/pr-27/images/team/tayrone_monteiro.jpg b/preview/pr-27/images/team/tayrone_monteiro.jpg new file mode 100644 index 0000000..699b95d Binary files /dev/null and b/preview/pr-27/images/team/tayrone_monteiro.jpg differ diff --git a/preview/pr-27/images/team/tiberio_pereira.png b/preview/pr-27/images/team/tiberio_pereira.png new file mode 100644 index 0000000..0e6b5fa Binary files /dev/null and b/preview/pr-27/images/team/tiberio_pereira.png differ diff --git a/preview/pr-27/images/team/vitor_saldanha.jpg b/preview/pr-27/images/team/vitor_saldanha.jpg new file mode 100644 index 0000000..cc64c6e Binary files /dev/null and b/preview/pr-27/images/team/vitor_saldanha.jpg differ diff --git a/preview/pr-27/images/tools/LOGOTIPO_EURYALE-08.png b/preview/pr-27/images/tools/LOGOTIPO_EURYALE-08.png new file mode 100644 index 0000000..7263f82 Binary files /dev/null and b/preview/pr-27/images/tools/LOGOTIPO_EURYALE-08.png differ diff --git a/preview/pr-27/images/tools/geneplast.png b/preview/pr-27/images/tools/geneplast.png new file mode 100644 index 0000000..e43ea68 Binary files /dev/null and b/preview/pr-27/images/tools/geneplast.png differ diff --git a/preview/pr-27/images/tools/kpv_figure.jpg b/preview/pr-27/images/tools/kpv_figure.jpg new file mode 100644 index 0000000..b012cc1 Binary files /dev/null and b/preview/pr-27/images/tools/kpv_figure.jpg differ diff --git a/preview/pr-27/images/tools/transcriptogramer.png b/preview/pr-27/images/tools/transcriptogramer.png new file mode 100644 index 0000000..c24bcf5 Binary files /dev/null and b/preview/pr-27/images/tools/transcriptogramer.png differ diff --git a/preview/pr-27/index.html b/preview/pr-27/index.html new file mode 100644 index 0000000..06a93ed --- /dev/null +++ b/preview/pr-27/index.html @@ -0,0 +1,777 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

Looking at biology from a systemic perspective

+ +

The Dalmolin Systems Biology Group advances biomedical knowledge through Bioinformatics and Systems Biology. Our mission is to unravel the intricate complexities of biological systems through innovative approaches and advanced methodologies. Committed to excellence, our team is dedicated to addressing a diverse array of biological challenges using the powerful lens of Systems Biology. Our research group is led by professor Rodrigo Dalmolin, Ph.D., and it is associated with the Graduate Program in Bioinformatics from the Federal University of Rio Grande do Norte (UFRN).

+ +
+ + figure image + + +
+
+ + + + + +
+ + +

Highlights

+ +
+ + Our Research + +
+ +

Our Research

+ + +

Our research focuses on the evolution of biological systems, analysis of biological networks, transcriptional analysis, metagenomic analyses, and the development of novel bioinformatics tools.

+ + + + +
+
+ +
+ + Tools by researchers, for researchers + +
+ +

Tools by researchers, for researchers

+ + +

Streamline your investigation with our tools and pipelines. All open source and well documented. Don’t know how to use them? Get in touch with us! See the contact information.

+ + + + +
+
+ +
+ + Building excellence in bioinformatics + +
+ +

Building excellence in bioinformatics

+ + +

We are a team of interdisciplinary researchers working in the various fields of bioinformatics. We strive for excellence in research and diversity and inclusivity are our values.

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

Our lines of research

+ +
+ + Evolution of biological systems + + +
+ + + Evolution of biological systems + + + + + Systemic root inference for orthologous groups + + + + + +
+
+ +
+ + Analysis of biological networks + + +
+ + + Analysis of biological networks + + + + + Regulatory networks, PPI and coexpression + + + + + +
+
+ +
+ + Transcriptional analyses + + +
+ + + Transcriptional analyses + + + + + Microarray, Bulk RNA-seq and scRNA-seq + + + + + +
+
+ +
+ + Metagenomics analyses + + +
+ + + Metagenomics analyses + + + + + Diversity analysis, functional annotation and MAGs + + + + + +
+
+ +
+ + Development of bioinformatics tools + + +
+ + + Development of bioinformatics tools + + + + + Pipelines, R packages and Python libraries + + + + + +
+
+
+ + +
+ + + + + + + diff --git a/preview/pr-27/lab-members.html b/preview/pr-27/lab-members.html new file mode 100644 index 0000000..1ac5ceb --- /dev/null +++ b/preview/pr-27/lab-members.html @@ -0,0 +1,16 @@ + + + + + + Redirecting… + + + + + + +

Redirecting…

+ Click here if you are not redirected. + + diff --git a/preview/pr-27/lines/bio_nets.html b/preview/pr-27/lines/bio_nets.html new file mode 100644 index 0000000..763b0c8 --- /dev/null +++ b/preview/pr-27/lines/bio_nets.html @@ -0,0 +1,518 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Some name | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

Some name

+
+ + + + + +
+ + + +

Some Markdown content

+
+ + +
+ + + + + + + diff --git a/preview/pr-27/lines/metagenomics.html b/preview/pr-27/lines/metagenomics.html new file mode 100644 index 0000000..3ff1336 --- /dev/null +++ b/preview/pr-27/lines/metagenomics.html @@ -0,0 +1,558 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Metagenomics analyses | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

Metagenomics analyses

+
+ + + + + +
+ + + +

Where do we start?

+ +

Metagenomics data, or data containing the full genetic content of an environmental sample, constitutes one of our current research topics at the Dalmolin Group. Metagenomics data provides a great potential for studying the diversity and functional activity of complex microbial environments.

+ +

Our studies of metagenomics data began with the development of our in-house pipeline for processing these data, MEDUSA (Morais et al, 2022). With MEDUSA, we aimed to build a sensitive, flexible and reproducible pipeline that produces taxonomic classification and functional annotation of metagenomics reads. Below, you can see a diagram detailing the different steps of the original MEDUSA pipeline. We later reimplemented MEDUSA in another workflow orchestration language, Nextflow, this time being called EURYALE.

+ +
+ + From Morais et al, 2022. The MEDUSA analysis workflow. Squares highlight the protocol steps, and third-party tools are depicted as cyan capsules. The python icon represents the tool implemented for the functional annotation. + + +
+ From Morais et al, 2022. The MEDUSA analysis workflow. Squares highlight the protocol steps, and third-party tools are depicted as cyan capsules. The python icon represents the tool implemented for the functional annotation. + +
+ +
+ +

Current work and future directions

+ +

Some of our work exploring metagenomics data is highlighted by “Metagenomic Analyses Reveal the Influence of Depth Layers on Marine Biodiversity on Tropical and Subtropical Regions” (Santiago et al, 2023). In this work, using MEDUSA, we observed differences in diversity between three ocean layers in the Tropical and Subtropical regions and also noted different functional annotations between these layers.

+ +

And now, with MEDUSA/EURYALE and all of the software in the metagenomics ecosystem, we aim to keep exploring metagenomics data, with a focus on functional analysis.

+ +
+ + From Santiago et al, 2023. Diversity and abundance distribution by depth layer in the tropical and subtropical regions. + + +
+ From Santiago et al, 2023. Diversity and abundance distribution by depth layer in the tropical and subtropical regions. + +
+ +
+
+ + +
+ + + + + + + diff --git a/preview/pr-27/lines/systems_evolution.html b/preview/pr-27/lines/systems_evolution.html new file mode 100644 index 0000000..b372e49 --- /dev/null +++ b/preview/pr-27/lines/systems_evolution.html @@ -0,0 +1,573 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Evolution of biological systems | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

Evolution of biological systems

+
+ + + + + +
+ + + +

An algorithm to infer the evolutionary root of orthologous groups

+ +

The development of sequencing technologies in the past two decades allowed the study of the phylogenetic relationship of several model organisms. An interesting question relies on the mechanisms behind how new genes arise and how they interact and evolve together to build the intricate network of genes observed in the organism’s biochemical pathways. Gene duplication is highlighted as a crucial event in genome evolution, offering a prime source for genetic material and allowing evolutionary forces to generate novelty. In the Dalmolin et al, 2011 paper, the importance of duplication events in the evolutionary history of orthologous groups is assessed by the ratio of components to the number of organisms with items from the group. The study extends to analyze Eukaryotic Clusters of Orthologous Groups (KOG) in STRING, evaluating the evolutionary plasticity and conservation of groups based on component distribution across eukaryotic genomes, proposing an equation for plasticity, and identifying correlations between evolutionary distance and plasticity. The algorithm used in this paper to infer the evolutionary root of orthologous groups, based on a phylogenetic tree from eukaryotes, is implemented as an R/Bioconductor package called geneplast.

+ +
+ + From the geneplast vignette, we show the evolutionary rooting scenarios . Red circles indicate the evolutionary roots that best explain the observed orthologs in the species tree. + + +
+ From the geneplast vignette, we show the evolutionary rooting scenarios . Red circles indicate the evolutionary roots that best explain the observed orthologs in the species tree. + +
+ +
+ +

This approach was used to unravel the evolution of biochemical systems, such as human synapses

+ +

In the Viscardi et al. 2020 paper, we aimed to reconstruct the evolutionary history of the human neurotransmission gene network by analyzing genes in major neurotransmitter systems. The findings suggest that the emergence of receptor families, particularly ionotropic receptors, at the Human–Cnidaria Last Common Ancestor played a crucial role in the evolution of synapses, even before their establishment in Ctenophores.

+ +
+ + From Viscardi et al, 2020. Human neurotransmission protein-protein interaction network. Nodes represent proteins, whereas edges represent the interactions among them. Node size is proportional to the number of neuronal pathways it participates (i.e., GABAergic, cholinergic, serotonergic, glutamatergic, and dopaminergic). The UpSet diagram depicts how nodes are distributed among pathways (e.g., 31 genes take part in all five pathways). + + +
+ From Viscardi et al, 2020. Human neurotransmission protein-protein interaction network. Nodes represent proteins, whereas edges represent the interactions among them. Node size is proportional to the number of neuronal pathways it participates (i.e., GABAergic, cholinergic, serotonergic, glutamatergic, and dopaminergic). The UpSet diagram depicts how nodes are distributed among pathways (e.g., 31 genes take part in all five pathways). + +
+ +
+ +

And essential genes

+ +

In De Souza et al, 2021 paper, essential genes from five model eukaryotes were analyzed to determine if they differ in age from non-essential genes. The study compared network properties and investigated the biological functions of essential genes in each species, revealing that essential genes are rooted in different evolutionary periods. Despite varying origins, essential genes tend to be older and more connected than other genes across all evaluated model species.

+ +
+ + From De Souza, 2021. Ancestry distribution of essential and other genes. Values tending to 1 indicate the oldest genes and values tending to 0 indicate the youngest genes. Black dot is the mean ancestry value for each ancestry distribution. Wilcoxon test, ****p-value < 0.0001. + + +
+ From De Souza, 2021. Ancestry distribution of essential and other genes. Values tending to 1 indicate the oldest genes and values tending to 0 indicate the youngest genes. Black dot is the mean ancestry value for each ancestry distribution. Wilcoxon test, **p-value < 0.0001. + +
+ +
+
+ + +
+ + + + + + + diff --git a/preview/pr-27/lines/tools.html b/preview/pr-27/lines/tools.html new file mode 100644 index 0000000..763b0c8 --- /dev/null +++ b/preview/pr-27/lines/tools.html @@ -0,0 +1,518 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Some name | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

Some name

+
+ + + + + +
+ + + +

Some Markdown content

+
+ + +
+ + + + + + + diff --git a/preview/pr-27/lines/transcriptomics.html b/preview/pr-27/lines/transcriptomics.html new file mode 100644 index 0000000..763b0c8 --- /dev/null +++ b/preview/pr-27/lines/transcriptomics.html @@ -0,0 +1,518 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Some name | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

Some name

+
+ + + + + +
+ + + +

Some Markdown content

+
+ + +
+ + + + + + + diff --git a/preview/pr-27/mascots.html b/preview/pr-27/mascots.html new file mode 100644 index 0000000..1ac5ceb --- /dev/null +++ b/preview/pr-27/mascots.html @@ -0,0 +1,16 @@ + + + + + + Redirecting… + + + + + + +

Redirecting…

+ Click here if you are not redirected. + + diff --git a/preview/pr-27/members/bianca_santiago.html b/preview/pr-27/members/bianca_santiago.html new file mode 100644 index 0000000..ba4ee81 --- /dev/null +++ b/preview/pr-27/members/bianca_santiago.html @@ -0,0 +1,609 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Bianca Santiago | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ +
+ + +
+ + +

Graduated in Information Technology (Bachelor) with minor certification in Bioinformatics (2019) and Master in Bioinformatics from PPg-Bioinfo (2022), both from the Federal University of Rio Grande do Norte (UFRN). She is a Computer Technician at the Integrated Technical Course in Computer Science at the Federal Institute of Education, Science and Technology of Rio Grande do Norte (IFRN)-2015. Recently she contributed to the Fiocruz Genomic Network working on the development of pipelines for the analysis of viromas. She is currently a PhD student in Bioinformatics at PPg-Bioinfo at UFRN, where she is part of the Bioinformatics Multidisciplinary Environment (BioME-IMD, UFRN) working at the Dalmolin Systems Biology Group (DSBG) laboratory in the areas of Systems Biology and Metagenomics.

+ + + + + + +

+ + Search for Bianca Santiago's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/bruno_william.html b/preview/pr-27/members/bruno_william.html new file mode 100644 index 0000000..f2dce28 --- /dev/null +++ b/preview/pr-27/members/bruno_william.html @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Bruno Fernandes | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

Pursuing a master’s degree in the Postgraduate Program in Bioinformatics at IMD-UFRN. Bachelor in Biological Sciences from the Federal University of Rio Grande do Norte (2021). During the undergraduate period, I conducted research in the field of Physiology, with an emphasis on Animal Behavior in fish (Danio rerio). I hold a technical degree in Computer Science from the Federal Institute of Education, Science and Technology of Rio Grande do Norte (2015).

+ + + + + + +

+ + Search for Bruno Fernandes's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/clovis_reis.html b/preview/pr-27/members/clovis_reis.html new file mode 100644 index 0000000..47c4483 --- /dev/null +++ b/preview/pr-27/members/clovis_reis.html @@ -0,0 +1,609 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Clóvis Reis | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ +
+ + +
+ + +

Undergraduate at Infantaria from Academia Militar das Agulhas Negras (1985), Master’s at Programa de Pós-Graduação em Informática - PPGI from Universidade Federal da Paraíba (2015) and Doctorate in Bioinformatics from Universidade Federal do Rio Grande do Norte (2019). Has experience in Computer Science, acting on the following subjects: impulsive detection methods, partial discharge, synonymous mutation, beijerinckia and molecular evolution.

+ + + + + + +

+ + Search for Clóvis Reis's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/danilo_imparato.html b/preview/pr-27/members/danilo_imparato.html new file mode 100644 index 0000000..0051813 --- /dev/null +++ b/preview/pr-27/members/danilo_imparato.html @@ -0,0 +1,609 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Danilo Imparato | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ +
+ + +
+ + +

I am a Master’s student in Bioinformatics and BSc in Biomedicine at UFRN, where I carry out research in systems biology and deal with data integration, biological networks analysis, the evolution of biological systems and the development of computational tools. I also work as a bioinformatician at the genomics lab Mendelics, developing analysis pipelines for genomic data as well as developing LIMS for multiple sequencing platforms. I am an IT technician experienced in R, data visualization, full-stack development and databases.

+ + + + + + +

+ + Search for Danilo Imparato's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/dante_von_zuben.html b/preview/pr-27/members/dante_von_zuben.html new file mode 100644 index 0000000..5f57d05 --- /dev/null +++ b/preview/pr-27/members/dante_von_zuben.html @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Dante von Zuben | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

I am a computer science technician from the Federal Institute of Brasília (IFB). Currently, I am pursuing a bachelor’s degree in Biological Sciences at the Federal University of Rio Grande do Norte (UFRN). I am also a participant in the Institutional Program for Scientific Initiation Scholarships (PIBIC) funded by CNPq, working in the bioinformatics laboratory at the Institute Metrópole Digital (IMD).

+ + + + + + +

+ + Search for Dante von Zuben's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/diego_morais.html b/preview/pr-27/members/diego_morais.html new file mode 100644 index 0000000..cd80673 --- /dev/null +++ b/preview/pr-27/members/diego_morais.html @@ -0,0 +1,609 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Diego Morais | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ +
+ + +
+ + +

I have a degree in Computer Science from the State University of Rio Grande do Norte (2011), a specialization in Computer Forensics from the Universidade Potiguar (2016), and a master’s and a doctorate in Bioinformatics from the Federal University of Rio Grande do Norte (2018 and 2022). My experience lies in the fields of Computer Science and Bioinformatics, with a focus on Computer Networks and Systems Biology.

+ + + + + + +

+ + Search for Diego Morais's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/epitacio_farias.html b/preview/pr-27/members/epitacio_farias.html new file mode 100644 index 0000000..00114ec --- /dev/null +++ b/preview/pr-27/members/epitacio_farias.html @@ -0,0 +1,609 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Epitácio Farias | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ +
+ + +
+ + +

B.Sc. in Science and Technology (2021) and in Biomedical Engineering (2022), M.Sc, in Bioinformatics (2023), and is currently a Ph.D. student in Bioinformatics, all at the Federal University of Rio Grande do Norte (UFRN). His training in Bioinformatics focused on Systems Biology, working with transcriptomics and genomics analyses. He has experience in the analysis of biological networks through Systems Biology methodologies associated with machine learning techniques. He is currently developing a research project at the Multiuser Center of Bioinformatics (BioME - IMD/UFRN) in the areas of oncology, non-coding RNAs and machine learning.

+ + + + + + +

+ + Search for Epitácio Farias's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/fabio_silva.html b/preview/pr-27/members/fabio_silva.html new file mode 100644 index 0000000..2b91137 --- /dev/null +++ b/preview/pr-27/members/fabio_silva.html @@ -0,0 +1,575 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Fábio Ferreira Silva | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

I hold a degree in Information Systems from UNI-RN (2007) and a degree in Biomedicine from UFRN (2021). I worked at Petrobras S.A. in the IT and TCOM (Telecommunications) fields. In the development areas, I utilized the Pascal/Delphi programming language. I managed network infrastructure based on TCP/IP protocols with support for Linux servers and applications. I also managed TCOM infrastructure with support for routing protocols such as OSPF, RIP, and BGP, involving both local and wireless network protocols.

+ + + + + + +

+ + Search for Fábio Ferreira Silva's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/gleison_medeiros.html b/preview/pr-27/members/gleison_medeiros.html new file mode 100644 index 0000000..66438f7 --- /dev/null +++ b/preview/pr-27/members/gleison_medeiros.html @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Gleison Medeiros | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

Graduating in Biomedicine from the Federal University of Rio Grande do Norte since 2018.1, expected to be completed in 2024.2. My focus of interest is in the area of Bioinformatics, with an emphasis on RNA-seq data analysis and Metagenomics. I am currently part of the BioME team, where I work as a Scientific Initiation Fellow. My participation in BioME involves the application of Bioinformatics tools to analyze different types of data and biological processes. At the same time, I work in the area of Microbiology as a monitor in the Medical Bacteriology discipline. In this context, I collaborate in the development of the bacteria identification manual aimed at academic teaching, in addition to providing assistance in practical classes. This initiative has provided improvements in bacterial identification techniques and the opportunity to contribute to the teaching of microbiology. Previous experiences include monitoring the subjects of Biochemistry and organic chemistry, offering support to students and helping them learn fundamental concepts. Furthermore, I participated in another Scientific Initiation project also focused on the area of Bioinformatics, in which I discovered my interest in the area. My goal is to pursue a research career in Bioinformatics, I am open to research and collaboration opportunities in order to expand its applications in the biomedical field and contribute to scientific advances.

+ + + + + + +

+ + Search for Gleison Medeiros's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/gustavo_michaelsen.html b/preview/pr-27/members/gustavo_michaelsen.html new file mode 100644 index 0000000..7f1a21a --- /dev/null +++ b/preview/pr-27/members/gustavo_michaelsen.html @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Gustavo Michaelsen | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

I have a bachelor’s degree in Biotechnology - Bioinformatics from the Federal University of Rio Grande do Sul (2021) and a Master’s degree in Bioinformatics at the Federal University of Rio Grande do Norte. Currently, I am a PhD student in Bioinformatics at the Federal University of Rio Grande do Norte.

+ + + + + + +

+ + Search for Gustavo Michaelsen's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/iara_de_souza.html b/preview/pr-27/members/iara_de_souza.html new file mode 100644 index 0000000..caa7adb --- /dev/null +++ b/preview/pr-27/members/iara_de_souza.html @@ -0,0 +1,609 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Iara Dantas de Souza | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

B.Sc. in Biomedical Sciences (2016) and Statistics (2023), M.Sc. in Bioinformatics (2017), and Ph.D. in Bioinformatics (2022), all from the Federal University of Rio Grande do Norte (UFRN). His training in bioinformatics focused on Systems Biology, working with transcriptomics and genomics analyses. She has experience in the analysis of biological networks through systems biology methodologies and biochemical systems evolution. In addition, she is interested in data science and in the application of statistical methods in bioinformatics. She is the cofounder of the Lexanomics startup, a company focused on bioinformatics solutions. She is currently developing her research projects at the Bioinformatics Multidisciplinary Environment (BioME - IMD/UFRN) in the areas of toxicogenomics, neuropsychiatric, and molecular evolution.

+ + + + + + +

+ + Search for Iara Dantas de Souza's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/igor_brandao.html b/preview/pr-27/members/igor_brandao.html new file mode 100644 index 0000000..2fb3987 --- /dev/null +++ b/preview/pr-27/members/igor_brandao.html @@ -0,0 +1,626 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Igor Brandão | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ +
+ + +
+ + +

Master in Bioinformatics at the Federal University of Rio Grande do Norte (UFRN) / Biome (2019), he develops research within the scope of Systems Biology. Specialized in Information Technology Applied to the Legal Area from UFRN/Tribunal de Justiça do Rio Grande do Norte (TJRN), graduated in Information Technology from UFRN (2018), Systems Analysis and Development from Fatec Carapicuíba (2012) and Business Administration Companies by Universidade Presbiteriana Mackenzie (2013).

+ + + + + + +

+ + Search for Igor Brandão's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/joao_cavalcante.html b/preview/pr-27/members/joao_cavalcante.html new file mode 100644 index 0000000..af4381c --- /dev/null +++ b/preview/pr-27/members/joao_cavalcante.html @@ -0,0 +1,626 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +João Cavalcante | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ +
+ + +
+ + + + + + + + + +

+ + Search for João Cavalcante's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/joao_vitor_almeida.html b/preview/pr-27/members/joao_vitor_almeida.html new file mode 100644 index 0000000..b3239b9 --- /dev/null +++ b/preview/pr-27/members/joao_vitor_almeida.html @@ -0,0 +1,575 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +João Vitor Almeida | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

Pharmacy student at the Federal University of Rio Grande do Norte (UFRN).

+ + + + + + +

+ + Search for João Vitor Almeida's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/leonardo_campos.html b/preview/pr-27/members/leonardo_campos.html new file mode 100644 index 0000000..8628e9d --- /dev/null +++ b/preview/pr-27/members/leonardo_campos.html @@ -0,0 +1,609 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Leonardo Campos | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ +
+ + +
+ + +

I have a degree in Computational Engineering, with an emphasis in Systems and Computing, and a Master’s in Computational and Electric Engineering. As a researcher, I have started designing intelligent systems using a reinforcement learning technique for routing packets in simulated networks. I have also been working as a developer since 2004 in the Federal University of Rio Grande do Norte - UFRN, obtaining vast experience in Java programming language, web/mobile systems, relational and non-relational databases, project management, and agile processes. I worked on many projects which yielded software patents to the university. I’m currently a Ph.D. student at Bioinformatics Multidisciplinary Environment’s Graduate Program from the Federal University of Rio Grande do Norte - UFRN. I have experience in the areas of Artificial Intelligence and Machine Learning, Data Science, Computational Biology, and Systems Biology.

+ + + + + + +

+ + Search for Leonardo Campos's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/marcel_ribeiro_dantas.html b/preview/pr-27/members/marcel_ribeiro_dantas.html new file mode 100644 index 0000000..339df4c --- /dev/null +++ b/preview/pr-27/members/marcel_ribeiro_dantas.html @@ -0,0 +1,609 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Marcel Ribeiro-Dantas | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

Marcel holds a Computer Engineering degree from the Federal University of Rio Grande do Norte, a graduate degree in Big Data from the Instituto Metrópole Digital at UFRN, another graduate degree in Health Informatics from UFRN, a Master of Science in Bioinformatics from the Graduate Program in Bioinformatics at IMD/UFRN and a doctorate degree from the Sorbonne Université in Paris. During his PhD, he worked as a researcher at the Institut Curie, part of the Université de recherche Paris Sciences et Lettres (PSL Research University), in the UMR168 unit in the laboratory “Evolution of Biomolecular Networks, RNA Dynamics”, under the supervision and doctoral guidance of Prof. Dr. Hervé Isambert.Co-founder of the Laboratory of Technological Innovation in Health (LAIS) at Hospital Universitário Onofre Lopes (HUOL-UFRN), he participated in research activities there for more than 7 years in the areas of health informatics, medical devices, hospital networks, real time, patient telemonitoring, teleradiology, health human resources systems and artificial intelligence. He also participated in research activities resulting from international cooperation, such as with Harvard University and MIT, as well as management, internationalization and fundraising activities for research.He currently works as a Developer Advocate at Seqera, a multinational leader in the development of technology for orchestrating data pipelines, and as a graduate professor at Universidade Potiguar. He is interested in the following topics: causal inference, systems biology, biological networks, bioinformatics, data engineering, data science, machine learning and artificial intelligence.

+ + + + + + +

+ + Search for Marcel Ribeiro-Dantas's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/natalia_souza.html b/preview/pr-27/members/natalia_souza.html new file mode 100644 index 0000000..70b416a --- /dev/null +++ b/preview/pr-27/members/natalia_souza.html @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Natália Souza | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

PhD in Biochemistry and Molecular Biology from the Federal University of Rio Grande do Norte (UFRN), Specialist in Molecular Biology-Applied to Human Health-UFRN, Master in Biochemistry from UFRN (IMT), Graduate in Biological Sciences, Universidade Potiguar, Laureate International Universities - UnP, worked with bioactive principles of plant compounds, under the guidance of Matheus Augusto Bittencourt Pasquali-UFCG and co-supervision of Rodrigo J. S. Dalmolin-UFRN/BIOME. Currently a businesswoman in the field of Clinical Analysis and health (NatLab).

+ + + + + + +

+ + Search for Natália Souza's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/odilon_santos.html b/preview/pr-27/members/odilon_santos.html new file mode 100644 index 0000000..9c4e2aa --- /dev/null +++ b/preview/pr-27/members/odilon_santos.html @@ -0,0 +1,609 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Odilon Santos | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + +
+ +
+ + +
+ + +

He has a degree in Mathematics from the Federal University of Rio Grande do Norte (2007), a Bachelor’s degree in Information Technology from the Federal University of Rio Grande do Norte (2020) and a master’s degree in Mathematics - ProfMat/IMPA from the Federal University of Rio Grande do Norte (2014). He has experience in the areas of Mathematics, Bioinformatics and Information Technology, with main interest in the following topics: R Language, Graphs, Systems Biology, Transcriptomics and Forensic Genetics. He is a master’s student in the Postgraduate Program in Bioinformatics at UFRN.

+ + + + + + +

+ + Search for Odilon Santos's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/rafaella_ferraz.html b/preview/pr-27/members/rafaella_ferraz.html new file mode 100644 index 0000000..3534dfe --- /dev/null +++ b/preview/pr-27/members/rafaella_ferraz.html @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Rafaella Ferraz | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

I graduated in Biological Sciences (Bachelor’s degree) from the Federal University of Maranhão (2018). I obtained a master’s degree from the Graduate Program in Oncology and Medical Sciences at the Federal University of Pará (2021). I have experience in Oncogenetics, Immunogenetics, and Molecular Biology, where I conduct research in these areas. I am a member of the following research groups: Human Population Genomics Research Network and the Autoimmune Diseases group.

+ + + + + + +

+ + Search for Rafaella Ferraz's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/raffael_oliveira.html b/preview/pr-27/members/raffael_oliveira.html new file mode 100644 index 0000000..7709966 --- /dev/null +++ b/preview/pr-27/members/raffael_oliveira.html @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Raffael Oliveira | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

I hold a Bachelor’s degree in Biomedicine with a specialization in Clinical Analysis/Pathology from the Federal University of Rio Grande do Norte - UFRN (2014), where I conducted research with a focus on bioinformatics applied to nucleic acids. I used this approach to analyze economically significant viruses. I completed a Master’s degree in Biochemistry from the Graduate Program in Biochemistry at UFRN (2017), with a project also centered on bioinformatics, this time employing systems biology approaches to analyze the evolution of gene systems in Arabidopsis thaliana. I earned a Ph.D. in Bioinformatics from the Graduate Program in Bioinformatics at UFRN (2021), where I studied transcription factors as potential master regulators in the development of complex inflammatory diseases.

+ + + + + + +

+ + Search for Raffael Oliveira's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/rodrigo_dalmolin.html b/preview/pr-27/members/rodrigo_dalmolin.html new file mode 100644 index 0000000..f3b414b --- /dev/null +++ b/preview/pr-27/members/rodrigo_dalmolin.html @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Rodrigo J. S. Dalmolin | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

Prof. Dalmolin is a Ph.D. in Biochemistry (2012) by the Federal University of Rio Grande do Sul (UFRGS), with a master’s degree also in Biochemistry (2008) and a bachelor’s degree in Biological Sciences with an emphasis in Molecular, Cellular, and Functional Biology (2005) by the same institution. Currently, he is an Adjunct Professor and the head of the Biochemistry Department of the Federal University of Rio Grande do Norte (UFRN). He is a permanent faculty member of the graduate program in Biochemistry and the graduate program in Bioinformatics, developing his research activities in the Bioinformatics Multidisciplinary Environment at UFRN (BioME-IMD, UFRN). His research interests rely on the evaluation of biological networks, especially in the study of protein-protein interactions and regulatory networks, the evolution of biochemical systems, and the development of bioinformatics tools.

+ + + + + + +

+ + Search for Rodrigo J. S. Dalmolin's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/tayrone_monteiro.html b/preview/pr-27/members/tayrone_monteiro.html new file mode 100644 index 0000000..d480b5b --- /dev/null +++ b/preview/pr-27/members/tayrone_monteiro.html @@ -0,0 +1,575 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Tayrone Monteiro | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

Computer Engineer graduated from the Federal University of Paraíba, with a sandwich period at the Milwaukee School of Engineering (USA), funded by the Coordination for the Improvement of Higher Education Personnel (CAPES), through the Science Without Borders program. Master’s degree in Bioinformatics from the Federal University of Rio Grande do Norte.

+ + + + + + +

+ + Search for Tayrone Monteiro's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/tiberio_pereira.html b/preview/pr-27/members/tiberio_pereira.html new file mode 100644 index 0000000..822d6f3 --- /dev/null +++ b/preview/pr-27/members/tiberio_pereira.html @@ -0,0 +1,609 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Tibério Azevedo Pereira | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

I am a PhD in Physics from the Federal University of Rio Grande do Norte. During my bachelor’s degree, I conducted research in the areas of Classical Field Theory and Population Dynamics. I established collaborations with researchers at the Faculty of Sciences of the University of Amsterdam, where I developed numerical simulations of population biodynamics. In my master’s degree, I delved into the field of Gravitation; I studied the 3+1 Formalism of General Relativity and Numerical Relativity, and I conducted simulations of black hole collisions. In my doctoral research, I worked on gravitational waves in collaboration with LIGO (Laser Interferometer Gravitational Wave Observatory) and carried out a project involving machine learning and the quality of numerical gravitational waves. I enjoy theoretical work in the areas of Cosmology and Gravitation, numerical work using C/C++, Python, and Julia, and Machine Learning for any interdisciplinary project in the field of Exact Sciences.

+ + + + + + +

+ + Search for Tibério Azevedo Pereira's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/members/vitor_saldanha.html b/preview/pr-27/members/vitor_saldanha.html new file mode 100644 index 0000000..3c56366 --- /dev/null +++ b/preview/pr-27/members/vitor_saldanha.html @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Vítor Saldanha | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

BSc in Biomedical Science at the Federal University of Rio Grande do Norte (UFRN), with a scientific initiation scholarship from the Bioinformatics Multi-User Center (BioME/IMD). Possesses skills in molecular biology and bioinformatics. Engages in work in the field of bioinformatics, with a special interest in neuropsychiatric diseases. Specifically studies sex-specific differences in major depressive disorder from a systems biology perspective. Proficient in RNA-seq analysis, Microarray, differential gene expression, splicing variants, and biological networks. Has a strong affinity for the field of data science, primarily using R and Bash, but also has experience with Python and JavaScript. Also interested in machine learning, development of computational tools, and mobile applications.

+ + + + + + +

+ + Search for Vítor Saldanha's papers on the Research page + +

+ + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-27/publications/index.html b/preview/pr-27/publications/index.html new file mode 100644 index 0000000..ef28c74 --- /dev/null +++ b/preview/pr-27/publications/index.html @@ -0,0 +1,2297 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Publications | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

+Publications

+ +

Below you can find the papers published by our group. Found something interesting, want to collaborate with us or can’t access a paper? Get in contact with us. In case you want to know more about our lines of research, check out the research page.

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

2023

+ +
+ + + Bridging the Gaps in Meta-Omic Analysis: Workflows and Reproducibility + + + +
+ + + + + Bridging the Gaps in Meta-Omic Analysis: Workflows and Reproducibility + + +
+ João Vitor Ferreira Cavalcante, Iara Dantas de Souza, Diego Arthur de Azevedo Morais, Rodrigo Juliani Siqueira Dalmolin +
+ +
+ OMICS: A Journal of Integrative Biology +   ·   + 29 Nov 2023 +   ·   + doi:10.1089/omi.2023.0232 +
+ + + + + + + + +
+
+ +
+ + + Revealing metastatic castration‐resistant prostate cancer master regulator through <scp>lncRNAs</scp>‐centered regulatory network + + + +
+ + + + + Revealing metastatic castration‐resistant prostate cancer master regulator through lncRNAs‐centered regulatory network + + +
+ Rafaella Sousa Ferraz, João Vitor Ferreira Cavalcante, Leandro Magalhães, Ândrea Ribeiro‐dos‐Santos, Rodrigo Juliani Siqueira Dalmolin +
+ +
+ Cancer Medicine +   ·   + 29 Aug 2023 +   ·   + doi:10.1002/cam4.6481 +
+ + + + + + + + +
+
+ +
+ + + Metagenomic Analyses Reveal the Influence of Depth Layers on Marine Biodiversity on Tropical and Subtropical Regions + + + +
+ + + + + Metagenomic Analyses Reveal the Influence of Depth Layers on Marine Biodiversity on Tropical and Subtropical Regions + + +
+ Bianca C. F. Santiago, Iara D. de Souza, João Vitor F. Cavalcante, Diego A. A. Morais, Mikaelly B. da Silva, Matheus Augusto de B. Pasquali, Rodrigo J. S. Dalmolin +
+ +
+ Microorganisms +   ·   + 27 Jun 2023 +   ·   + doi:10.3390/microorganisms11071668 +
+ + + + + + + + +
+
+ +

2022

+ +
+ + + SARS-CoV-2 infection induces the production of autoantibodies in severe COVID-19 patients in an age-dependent manner + + + +
+ + + + + SARS-CoV-2 infection induces the production of autoantibodies in severe COVID-19 patients in an age-dependent manner + + +
+ Dennyson Leandro M Fonseca, Igor Salerno Filgueiras, Alexandre HC Marques, Elroy Vojdani, Gilad Halpert, ..., Israel Zyskind, Avi Z Rosenberg, Aristo Vojdani, Yehuda Shoenfeld, Otavio Cabral-Marques +
+ +
+ Cold Spring Harbor Laboratory +   ·   + 05 Dec 2022 +   ·   + doi:10.1101/2022.12.04.22282902 +
+ + + + + + + + +
+
+ +
+ + + Metagenomic analyses reveal the influence of depth layers on marine biodiversity in tropical and subtropical regions + + + +
+ + + + + Metagenomic analyses reveal the influence of depth layers on marine biodiversity in tropical and subtropical regions + + +
+ Bianca C. F. Santiago, Iara D. de Souza, João Vitor F. Cavalcante, Diego A. A. Morais, Rodrigo J. S. Dalmolin +
+ +
+ Cold Spring Harbor Laboratory +   ·   + 18 Oct 2022 +   ·   + doi:10.1101/2022.10.18.512769 +
+ + + + + + + + +
+
+ +
+ + + A survey of transcriptomic datasets identifies ABA-responsive factors as regulators of photomorphogenesis in<i>Arabidopsis</i> + + + +
+ + + + + A survey of transcriptomic datasets identifies ABA-responsive factors as regulators of photomorphogenesis inArabidopsis + + +
+ Cássia Fernanda Stafen, Iara Souza, Ben Hur de Oliveira, Luísa Abruzzi de Oliveira-Busatto, Rodrigo Juliani Siqueira Dalmolin, Oscar Lorenzo Sánchez, Felipe dos Santos Maraschin +
+ +
+ Cold Spring Harbor Laboratory +   ·   + 24 Jul 2022 +   ·   + doi:10.1101/2022.07.24.501316 +
+ + + + + + + + +
+
+ +
+ + + MEDUSA: A Pipeline for Sensitive Taxonomic Classification and Flexible Functional Annotation of Metagenomic Shotgun Sequences + + + +
+ + + + + MEDUSA: A Pipeline for Sensitive Taxonomic Classification and Flexible Functional Annotation of Metagenomic Shotgun Sequences + + +
+ Diego A. A. Morais, João V. F. Cavalcante, Shênia S. Monteiro, Matheus A. B. Pasquali, Rodrigo J. S. Dalmolin +
+ +
+ Frontiers in Genetics +   ·   + 07 Mar 2022 +   ·   + doi:10.3389/fgene.2022.814437 +
+ + + + + + + + +
+
+ +
+ + + The evolution of knowledge on genes associated with human diseases + + + +
+ + + + + The evolution of knowledge on genes associated with human diseases + + +
+ Thomaz Lüscher-Dias, Rodrigo Juliani Siqueira Dalmolin, Paulo de Paiva Amaral, Tiago Lubiana Alves, Viviane Schuch, Glória Regina Franco, Helder I. Nakaya +
+ +
+ iScience +   ·   + 01 Jan 2022 +   ·   + doi:10.1016/j.isci.2021.103610 +
+ + + + + + + + +
+
+ +

2021

+ +
+ + + <i>TreeAndLeaf</i>: an R/Bioconductor package for graphs and trees with focus on the leaves + + + +
+ + + + + TreeAndLeaf: an R/Bioconductor package for graphs and trees with focus on the leaves + + +
+ Milena A Cardoso, Luis E A Rizzardi, Leonardo W Kume, Clarice S Groeneveld, Sheyla Trefflich, Diego A A Morais, Rodrigo J S Dalmolin, Bruce A J Ponder, Kerstin B Meyer, Mauro A A Castro +
+ +
+ Bioinformatics +   ·   + 02 Dec 2021 +   ·   + doi:10.1093/bioinformatics/btab819 +
+ + + + + + + + +
+
+ +
+ + + Reverse Engineering of the Pediatric Sepsis Regulatory Network and Identification of Master Regulators + + + +
+ + + + + Reverse Engineering of the Pediatric Sepsis Regulatory Network and Identification of Master Regulators + + +
+ Raffael Azevedo de Carvalho Oliveira, Danilo Oliveira Imparato, Vítor Gabriel Saldanha Fernandes, João Vitor Ferreira Cavalcante, Ricardo D’Oliveira Albanus, Rodrigo Juliani Siqueira Dalmolin +
+ +
+ Biomedicines +   ·   + 23 Sep 2021 +   ·   + doi:10.3390/biomedicines9101297 +
+ + + + + + + + +
+
+ +
+ + + Ancestry analysis indicates two different sets of essential genes in eukaryotic model species + + + +
+ + + + + Ancestry analysis indicates two different sets of essential genes in eukaryotic model species + + +
+ Iara D. de Souza, Clovis F. Reis, Diego A. A. Morais, Vítor G. S. Fernandes, João Vitor F. Cavalcante, Rodrigo J. S. Dalmolin +
+ +
+ Functional & Integrative Genomics +   ·   + 01 Jul 2021 +   ·   + doi:10.1007/s10142-021-00794-9 +
+ + + + + + + + +
+
+ +
+ + + Reverse Engineering of Ewing Sarcoma Regulatory Network Uncovers PAX7 and RUNX3 as Master Regulators Associated with Good Prognosis + + + +
+ + + + + Reverse Engineering of Ewing Sarcoma Regulatory Network Uncovers PAX7 and RUNX3 as Master Regulators Associated with Good Prognosis + + +
+ Marcel da Câmara Ribeiro-Dantas, Danilo Oliveira Oliveira Imparato, Matheus Gibeke Siqueira Dalmolin, Caroline Brunetto de Farias, André Tesainer Brunetto, Mariane da Cunha Jaeger, Rafael Roesler, Marialva Sinigaglia, Rodrigo Juliani Siqueira Dalmolin +
+ +
+ Cancers +   ·   + 13 Apr 2021 +   ·   + doi:10.3390/cancers13081860 +
+ + + + + + + + +
+
+ +

2020

+ +
+ + + Ionotropic Receptors as a Driving Force behind Human Synapse Establishment + + + +
+ + + + + Ionotropic Receptors as a Driving Force behind Human Synapse Establishment + + +
+ Lucas Henriques Viscardi, Danilo Oliveira Imparato, Maria Cátira Bortolini, Rodrigo Juliani Siqueira Dalmolin +
+ +
+ Molecular Biology and Evolution +   ·   + 28 Sep 2020 +   ·   + doi:10.1093/molbev/msaa252 +
+ + + + + + + + +
+
+ +
+ + + Anti-inflammatory and antixidant properties of blend formulated with compounds of Malpighia emarginata D.C (acerola) and Camellia sinensis L. (green tea) in lipopolysaccharide-stimulated RAW 264.7 macrophages + + + +
+ + + + + Anti-inflammatory and antixidant properties of blend formulated with compounds of Malpighia emarginata D.C (acerola) and Camellia sinensis L. (green tea) in lipopolysaccharide-stimulated RAW 264.7 macrophages + + +
+ Natália Cabral Souza, Eduardo Natan de Oliveira Nascimento, Iara Bezerra de Oliveira, Hugo Miguel Lisboa Oliveira, Eudeson Gustavo Paiva Santos, Mário Eduardo Rangel Moreira Cavalcanti Mata, Daniel Pens Gelain, José Cláudio Fonseca Moreira, Rodrigo Juliani Siqueira Dalmolin, Matheus Augusto de Bittencourt Pasquali +
+ +
+ Biomedicine & Pharmacotherapy +   ·   + 01 Aug 2020 +   ·   + doi:10.1016/j.biopha.2020.110277 +
+ + + + + + + + +
+
+ +
+ + + CoRINs: A tool to compare residue interaction networks from homologous proteins and conformers + + + +
+ + + + + CoRINs: A tool to compare residue interaction networks from homologous proteins and conformers + + +
+ Felipe V. da Fonseca, Romildo O. Souza Júnior, Marília V. A. de Almeida, Thiago D. Soares, Diego A. A. Morais, Rodrigo J. S. Dalmolin, João Paulo M. S. Lima +
+ +
+ Cold Spring Harbor Laboratory +   ·   + 30 Jun 2020 +   ·   + doi:10.1101/2020.06.29.178541 +
+ + + + + + + + +
+
+ +
+ + + Which came first, the transcriptional regulator or its target genes? An evolutionary perspective into the construction of eukaryotic regulons + + + +
+ + + + + Which came first, the transcriptional regulator or its target genes? An evolutionary perspective into the construction of eukaryotic regulons + + +
+ Sheyla Trefflich, Rodrigo J.S. Dalmolin, José Miguel Ortega, Mauro A.A. Castro +
+ +
+ Biochimica et Biophysica Acta (BBA) - Gene Regulatory Mechanisms +   ·   + 01 Jun 2020 +   ·   + doi:10.1016/j.bbagrm.2019.194472 +
+ + + + + + + + +
+
+ +

2019

+ +
+ + + Analysis of Arabidopsis thaliana Redox Gene Network Indicates Evolutionary Expansion of Class III Peroxidase in Plants + + + +
+ + + + + Analysis of Arabidopsis thaliana Redox Gene Network Indicates Evolutionary Expansion of Class III Peroxidase in Plants + + +
+ Raffael Azevedo de Carvalho Oliveira, Abraão Silveira de Andrade, Danilo Oliveira Imparato, Juliana Gabriela Silva de Lima, Ricardo Victor Machado de Almeida, João Paulo Matos Santos Lima, Matheus Augusto de Bittencourt Pasquali, Rodrigo Juliani Siqueira Dalmolin +
+ +
+ Scientific Reports +   ·   + 31 Oct 2019 +   ·   + doi:10.1038/s41598-019-52299-y +
+ + + + + + + + +
+
+ +
+ + + Systems Biology-Based Analysis Indicates Global Transcriptional Impairment in Lead-Treated Human Neural Progenitor Cells + + + +
+ + + + + Systems Biology-Based Analysis Indicates Global Transcriptional Impairment in Lead-Treated Human Neural Progenitor Cells + + +
+ Clovis F. Reis, Iara D. de Souza, Diego A. A. Morais, Raffael A. C. Oliveira, Danilo O. Imparato, Rita M. C. de Almeida, Rodrigo J. S. Dalmolin +
+ +
+ Frontiers in Genetics +   ·   + 10 Sep 2019 +   ·   + doi:10.3389/fgene.2019.00791 +
+ + + + + + + + +
+
+ +
+ + + Transcriptogramer: an R/Bioconductor package for transcriptional analysis based on protein–protein interaction + + + +
+ + + + + Transcriptogramer: an R/Bioconductor package for transcriptional analysis based on protein–protein interaction + + +
+ Diego A A Morais, Rita M C Almeida, Rodrigo J S Dalmolin +
+ +
+ Bioinformatics +   ·   + 08 Jan 2019 +   ·   + doi:10.1093/bioinformatics/btz007 +
+ + + + + + + + +
+
+ +

2018

+ +
+ + + Sunlight Incidence, Vitamin D Deficiency, and Alzheimer's Disease + + + +
+ + + + + Sunlight Incidence, Vitamin D Deficiency, and Alzheimer's Disease + + +
+ Alice Barros Câmara, Iara Dantas de Souza, Rodrigo Juliani Siqueira Dalmolin +
+ +
+ Journal of Medicinal Food +   ·   + 01 Sep 2018 +   ·   + doi:10.1089/jmf.2017.0130 +
+ + + + + + + + +
+
+ +
+ + + Lead-interacting proteins and their implication in lead poisoning + + + +
+ + + + + Lead-interacting proteins and their implication in lead poisoning + + +
+ Iara Dantas de Souza, Abraão Silveira de Andrade, Rodrigo Juliani Siqueira Dalmolin +
+ +
+ Critical Reviews in Toxicology +   ·   + 12 Feb 2018 +   ·   + doi:10.1080/10408444.2018.1429387 +
+ + + + + + + + +
+
+ +

2017

+ +
+ + + Analysis of genome instability biomarkers in children with non-syndromic orofacial clefts + + + +
+ + + + + Analysis of genome instability biomarkers in children with non-syndromic orofacial clefts + + +
+ Luíza Araújo da Costa Xavier, João Felipe Bezerra, Adriana Augusto de Rezende, Raffael Azevedo de Carvalho Oliveira, Rodrigo Juliani Siqueira Dalmolin, Viviane Souza do Amaral +
+ +
+ Mutagenesis +   ·   + 16 Jan 2017 +   ·   + doi:10.1093/mutage/gew068 +
+ + + + + + + + +
+
+ +
+ + + Antioxidant and Anti-Inflammatory Properties of<i>Anacardium occidentale</i>Leaf Extract + + + +
+ + + + + Antioxidant and Anti-Inflammatory Properties ofAnacardium occidentaleLeaf Extract + + +
+ Natália Cabral Souza, Juliana Medeiros de Oliveira, Maurílio da Silva Morrone, Ricardo D’Oliveira Albanus, Maria do Socorro Medeiros Amarante, ..., Silvana Maria Zucolotto Langassner, Daniel Pens Gelain, José Cláudio Fonseca Moreira, Rodrigo Juliani Siqueira Dalmolin, Matheus Augusto de Bittencourt Pasquali +
+ +
+ Evidence-Based Complementary and Alternative Medicine +   ·   + 01 Jan 2017 +   ·   + doi:10.1155/2017/2787308 +
+ + + + + + + + +
+
+ +

2016

+ +
+ + + <i>Turnera subulata</i>Anti-Inflammatory Properties in Lipopolysaccharide-Stimulated RAW 264.7 Macrophages + + + +
+ + + + + Turnera subulataAnti-Inflammatory Properties in Lipopolysaccharide-Stimulated RAW 264.7 Macrophages + + +
+ Natália Cabral Souza, Juliana Medeiros de Oliveira, Maurílio da Silva Morrone, Ricardo D'Oliveira Albanus, Maria do Socorro Medeiros Amarante, ..., Silvana Maria Zucolotto Langassner, Daniel Pens Gelain, José Cláudio Fonseca Moreira, Rodrigo Juliani Siqueira Dalmolin, Matheus Augusto de Bittencourt Pasquali +
+ +
+ Journal of Medicinal Food +   ·   + 01 Oct 2016 +   ·   + doi:10.1089/jmf.2016.0047 +
+ + + + + + + + +
+
+ +
+ + + Genome instability biomarkers in children with non-syndromic orofacial clefts + + + +
+ + + + + Genome instability biomarkers in children with non-syndromic orofacial clefts + + +
+ V.S. Amaral, L.A. Xavier, J.F. Bezerra, A.A. Rezende, R. Azevedo, R.J. Dalmolin +
+ +
+ Toxicology Letters +   ·   + 01 Sep 2016 +   ·   + doi:http://dx.doi.org/10.1016/j.toxlet.2016.06.2026 +
+ + + + + + + + +
+
+ +

2015

+ +
+ + + Prediction of long noncoding RNA functions with co-expression network in esophageal squamous cell carcinoma + + + +
+ + + + + Prediction of long noncoding RNA functions with co-expression network in esophageal squamous cell carcinoma + + +
+ Yibin Hao, Wei Wu, Fachun Shi, Rodrigo JS Dalmolin, Ming Yan, Fu Tian, Xiaobing Chen, Guoyong Chen, Wei Cao +
+ +
+ BMC Cancer +   ·   + 24 Mar 2015 +   ·   + doi:10.1186/s12885-015-1179-z +
+ + + + + + + + +
+
+ +
+ + + Correction: Preferential Duplication of Intermodular Hub Genes: An Evolutionary Signature in Eukaryotes Genome Networks + + + +
+ + + + + Correction: Preferential Duplication of Intermodular Hub Genes: An Evolutionary Signature in Eukaryotes Genome Networks + + +
+ Ricardo M. Ferreira, José Luiz Rybarczyk-Filho, Rodrigo J. S. Dalmolin, Mauro A. A. Castro, José C. F. Moreira, Leonardo G. Brunnet, Rita M. C. de Almeida +
+ +
+ PLOS ONE +   ·   + 13 Mar 2015 +   ·   + doi:10.1371/journal.pone.0118425 +
+ + + + + + + + +
+
+ +

2014

+ +
+ + + Gene Expression Profile of NF-κB, Nrf2, Glycolytic, and p53 Pathways During the SH-SY5Y Neuronal Differentiation Mediated by Retinoic Acid + + + +
+ + + + + Gene Expression Profile of NF-κB, Nrf2, Glycolytic, and p53 Pathways During the SH-SY5Y Neuronal Differentiation Mediated by Retinoic Acid + + +
+ Matheus Augusto de Bittencourt Pasquali, Vitor Miranda de Ramos, Ricardo D′Oliveira Albanus, Alice Kunzler, Luis Henrinque Trentin de Souza, Rodrigo Juliani Siqueira Dalmolin, Daniel Pens Gelain, Leila Ribeiro, Luigi Carro, José Cláudio Fonseca Moreira +
+ +
+ Molecular Neurobiology +   ·   + 03 Dec 2014 +   ·   + doi:10.1007/s12035-014-8998-9 +
+ + + + + + + + +
+
+ +
+ + + Differential Evolutionary Constraints in the Evolution of Chemoreceptors: A Murine and Human Case Study + + + +
+ + + + + Differential Evolutionary Constraints in the Evolution of Chemoreceptors: A Murine and Human Case Study + + +
+ Ricardo D’Oliveira Albanus, Rodrigo Juliani Siqueira Dalmolin, José Luiz Rybarczyk-Filho, Mauro Antônio Alves Castro, José Cláudio Fonseca Moreira +
+ +
+ The Scientific World Journal +   ·   + 01 Jan 2014 +   ·   + doi:10.1155/2014/696485 +
+ + + + + + + + +
+
+ +
+ + + Computational analyses reveal a prognostic impact of TULP3 as a transcriptional master regulator in pancreatic ductal adenocarcinoma + + + +
+ + + + + Computational analyses reveal a prognostic impact of TULP3 as a transcriptional master regulator in pancreatic ductal adenocarcinoma + + +
+ I. T. S. Sartor, F. Zeidán-Chuliá, R. D. Albanus, R. J. S. Dalmolin, J. C. F. Moreira +
+ +
+ Mol. BioSyst. +   ·   + 01 Jan 2014 +   ·   + doi:10.1039/c3mb70590k +
+ + + + + + + + +
+
+ +

2013

+ +
+ + + Reverse Engineering the Neuroblastoma Regulatory Network Uncovers MAX as One of the Master Regulators of Tumor Progression + + + +
+ + + + + Reverse Engineering the Neuroblastoma Regulatory Network Uncovers MAX as One of the Master Regulators of Tumor Progression + + +
+ Ricardo D’Oliveira Albanus, Rodrigo Juliani Siqueira Dalmolin, Mauro Antônio Alves Castro, Matheus Augusto de Bittencourt Pasquali, Vitor de Miranda Ramos, Daniel Pens Gelain, José Cláudio Fonseca Moreira +
+ +
+ PLoS ONE +   ·   + 05 Dec 2013 +   ·   + doi:10.1371/journal.pone.0082457 +
+ + + + + + + + +
+
+ +
+ + + Preferential Duplication of Intermodular Hub Genes: An Evolutionary Signature in Eukaryotes Genome Networks + + + +
+ + + + + Preferential Duplication of Intermodular Hub Genes: An Evolutionary Signature in Eukaryotes Genome Networks + + +
+ Ricardo M. Ferreira, José Luiz Rybarczyk-Filho, Rodrigo J. S. Dalmolin, Mauro A. A. Castro, José C. F. Moreira, Leonardo G. Brunnet, Rita M. C. de Almeida +
+ +
+ PLoS ONE +   ·   + 26 Feb 2013 +   ·   + doi:10.1371/journal.pone.0056579 +
+ + + + + + + + +
+
+ +

2012

+ +
+ + + Transcriptomic analysis reveals pH-responsive antioxidant gene networks + + + +
+ + + + + Transcriptomic analysis reveals pH-responsive antioxidant gene networks + + +
+ Rodrigo Juliani Siqueira Dalmolin +
+ +
+ Frontiers in Bioscience +   ·   + 01 Jan 2012 +   ·   + doi:10.2741/s352 +
+ + + + + + + + +
+
+ +

2011

+ +
+ + + NFκB inhibitors induce cell death in glioblastomas + + + +
+ + + + + NFκB inhibitors induce cell death in glioblastomas + + +
+ Alfeu Zanotto-Filho, Elizandra Braganhol, Rafael Schröder, Luís Henrique T. de Souza, Rodrigo J.S. Dalmolin, Matheus A. Bittencourt Pasquali, Daniel Pens Gelain, Ana Maria Oliveira Battastini, José Cláudio Fonseca Moreira +
+ +
+ Biochemical Pharmacology +   ·   + 01 Feb 2011 +   ·   + doi:10.1016/j.bcp.2010.10.014 +
+ + + + + + + + +
+
+ +
+ + + Evolutionary plasticity determination by orthologous groups distribution + + + +
+ + + + + Evolutionary plasticity determination by orthologous groups distribution + + +
+ Rodrigo JS Dalmolin, Mauro AA Castro, José L Rybarczyk Filho, Luis HT Souza, Rita MC de Almeida, José CF Moreira +
+ +
+ Biology Direct +   ·   + 01 Jan 2011 +   ·   + doi:10.1186/1745-6150-6-22 +
+ + + + + + + + +
+
+ +

2010

+ +
+ + + Towards a genome-wide transcriptogram: the Saccharomyces cerevisiae case + + + +
+ + + + + Towards a genome-wide transcriptogram: the Saccharomyces cerevisiae case + + +
+ José Luiz Rybarczyk-Filho, Mauro A. A. Castro, Rodrigo J. S. Dalmolin, José C. F. Moreira, Leonardo G. Brunnet, Rita M. C. de Almeida +
+ +
+ Nucleic Acids Research +   ·   + 15 Dec 2010 +   ·   + doi:10.1093/nar/gkq1269 +
+ + + + + + + + +
+
+ +

2009

+ +
+ + + ViaComplex: software for landscape analysis of gene expression networks in genomic context + + + +
+ + + + + ViaComplex: software for landscape analysis of gene expression networks in genomic context + + +
+ Mauro A. A. Castro, José L. Rybarczyk Filho, Rodrigo J. S. Dalmolin, Marialva Sinigaglia, José C. F. Moreira, José C. M. Mombach, Rita M. C. de Almeida +
+ +
+ Bioinformatics +   ·   + 15 Apr 2009 +   ·   + doi:10.1093/bioinformatics/btp246 +
+ + + + + + + + +
+
+ +
+ + + A systematic review of human antioxidant genes + + + +
+ + + + + A systematic review of human antioxidant genes + + +
+ Daniel, P. Gelain +
+ +
+ Frontiers in Bioscience +   ·   + 01 Jan 2009 +   ·   + doi:10.2741/3541 +
+ + + + + + + + +
+
+ +

2008

+ +
+ + + Evolutionary origins of human apoptosis and genome-stability gene networks + + + +
+ + + + + Evolutionary origins of human apoptosis and genome-stability gene networks + + +
+ Mauro A. A. Castro, Rodrigo J. S. Dalmolin, José C. F. Moreira, José C. M. Mombach, Rita M. C. de Almeida +
+ +
+ Nucleic Acids Research +   ·   + 02 Oct 2008 +   ·   + doi:10.1093/nar/gkn636 +
+ + + + + + + + +
+
+ +
+ + + Retinoic acid induces apoptosis by a non-classical mechanism of ERK1/2 activation + + + +
+ + + + + Retinoic acid induces apoptosis by a non-classical mechanism of ERK1/2 activation + + +
+ Alfeu Zanotto-Filho, Martin Cammarota, Daniel P. Gelain, Ramatis B. Oliveira, Andres Delgado-Cañedo, Rodrigo J.S. Dalmolin, Matheus A.B. Pasquali, José Cláudio F. Moreira +
+ +
+ Toxicology in Vitro +   ·   + 01 Aug 2008 +   ·   + doi:10.1016/j.tiv.2008.04.001 +
+ + + + + + + + +
+
+ +
+ + + Vitamin A treatment induces apoptosis through an oxidant‐dependent activation of the mitochondrial pathway + + + +
+ + + + + Vitamin A treatment induces apoptosis through an oxidant‐dependent activation of the mitochondrial pathway + + +
+ Fábio Klamt, Felipe Dal‐Pizzol, Daniel Pens Gelain, Rodrigo Siqueira Dalmolin, Birnfeld Ramatis de Oliveira, Michele Bastiani, Fabiana Horn, José Cláudio Fonseca Moreira +
+ +
+ Cell Biology International +   ·   + 01 Jan 2008 +   ·   + doi:10.1016/j.cellbi.2007.08.018 +
+ + + + + + + + +
+
+ +

2007

+ +
+ + + Can electrons travel through actin microfilaments and generate oxidative stress in retinol treated Sertoli cell? + + + +
+ + + + + Can electrons travel through actin microfilaments and generate oxidative stress in retinol treated Sertoli cell? + + +
+ Ramatis Birnfeld de Oliveira, Matheus Augusto de Bittencourt Pasquali, Alfeu Zanotto Filho, Rodrigo Juliani Siqueira Dalmolin, Daniel Pens Gelain, Carmem Gottfried, José Luiz Rodrigues, Fábio Klamt, José Cláudio Fonseca Moreira +
+ +
+ Molecular and Cellular Biochemistry +   ·   + 03 Jan 2007 +   ·   + doi:10.1007/s11010-006-9394-1 +
+ + + + + + + + +
+
+ +
+ + + Retinol and retinoic acid increase MMP-2 activity by different pathways in cultured Sertoli cells + + + +
+ + + + + Retinol and retinoic acid increase MMP-2 activity by different pathways in cultured Sertoli cells + + +
+ Rodrigo J. S. Dalmolin, Alfeu Zanotto-filho, Ramatis B. De oliveira, Roxane F. Duarte, Matheus A. B. Pasquali, José C. F. Moreira +
+ +
+ Free Radical Research +   ·   + 01 Jan 2007 +   ·   + doi:10.1080/10715760701717427 +
+ + + + + + + + +
+
+ +

2003

+ +
+ + + Genotoxicity, recombinogenicity and cellular preneoplasic transformation induced by Vitamin a supplementation + + + +
+ + + + + Genotoxicity, recombinogenicity and cellular preneoplasic transformation induced by Vitamin a supplementation + + +
+ Fábio Klamt, Felipe Dal-Pizzol, Rafael Roehrs, Ramatis Birnfeld de Oliveira, Rodrigo Dalmolin, João A.P Henriques, Heloisa Helena Rodrigues de Andrades, Ana Lı́gia Lia de Paula Ramos, Jenifer Saffi, José Cláudio Fonseca Moreira +
+ +
+ Mutation Research/Genetic Toxicology and Environmental Mutagenesis +   ·   + 01 Aug 2003 +   ·   + doi:10.1016/S1383-5718(03)00155-4 +
+ + + + + + + + +
+
+ +

2001

+ +
+ + + Mitogenic signaling mediated by oxidants in retinol treated sertoli cells + + + +
+ + + + + Mitogenic signaling mediated by oxidants in retinol treated sertoli cells + + +
+ Felipe Dal-Pizzol, Fábio Klamt, Rodrigo J.S. Dalmolin, Elena A. Bernard, José Cláudio F. Moreira +
+ +
+ Free Radical Research +   ·   + 01 Jan 2001 +   ·   + doi:10.1080/10715760100301251 +
+ + + + + + + + +
+
+
+ + +
+ + + + + + + diff --git a/preview/pr-27/redirects.json b/preview/pr-27/redirects.json new file mode 100644 index 0000000..9d089a8 --- /dev/null +++ b/preview/pr-27/redirects.json @@ -0,0 +1 @@ +{"/lab-members":"/preview/pr-27/team/","/alums":"/preview/pr-27/team/","/mascots":"/preview/pr-27/team/","/staff":"/preview/pr-27/team/","/trainees":"/preview/pr-27/team/"} \ No newline at end of file diff --git a/preview/pr-27/research/index.html b/preview/pr-27/research/index.html new file mode 100644 index 0000000..68ca2b3 --- /dev/null +++ b/preview/pr-27/research/index.html @@ -0,0 +1,680 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Research | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

+Research

+ +

Here you can see the lines of research in bioinformatics and systems biology that we work with. Clicking on a card below will take you to a brief explanation of the research we do within this field and a few examples.

+
+ + + + + +
+ + +
+ + Evolution of biological systems + + +
+ + + Evolution of biological systems + + + + + Systemic root inference for orthologous groups + + + + + +
+
+ +
+ + Analysis of biological networks + + +
+ + + Analysis of biological networks + + + + + Regulatory networks, PPI and coexpression + + + + + +
+
+ +
+ + Transcriptional analyses + + +
+ + + Transcriptional analyses + + + + + Microarray, Bulk RNA-seq and scRNA-seq + + + + + +
+
+ +
+ + Metagenomics analyses + + +
+ + + Metagenomics analyses + + + + + Diversity analysis, functional annotation and MAGs + + + + + +
+
+ +
+ + Development of bioinformatics tools + + +
+ + + Development of bioinformatics tools + + + + + Pipelines, R packages and Python libraries + + + + + +
+
+
+ + +
+ + + + + + + diff --git a/preview/pr-27/robots.txt b/preview/pr-27/robots.txt new file mode 100644 index 0000000..52e757e --- /dev/null +++ b/preview/pr-27/robots.txt @@ -0,0 +1 @@ +Sitemap: /preview/pr-27/sitemap.xml diff --git a/preview/pr-27/sitemap.xml b/preview/pr-27/sitemap.xml new file mode 100644 index 0000000..1d6feba --- /dev/null +++ b/preview/pr-27/sitemap.xml @@ -0,0 +1,151 @@ + + + +/preview/pr-27/lines/bio_nets.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/lines/metagenomics.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/lines/systems_evolution.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/lines/tools.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/lines/transcriptomics.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/bianca_santiago.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/bruno_william.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/clovis_reis.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/danilo_imparato.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/dante_von_zuben.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/diego_morais.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/epitacio_farias.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/fabio_silva.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/gleison_medeiros.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/gustavo_michaelsen.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/iara_de_souza.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/igor_brandao.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/joao_cavalcante.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/joao_vitor_almeida.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/leonardo_campos.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/marcel_ribeiro_dantas.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/natalia_souza.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/odilon_santos.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/rafaella_ferraz.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/raffael_oliveira.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/rodrigo_dalmolin.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/tayrone_monteiro.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/tiberio_pereira.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/members/vitor_saldanha.html +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/research/ +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/teaching/ +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/publications/ +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/contact/ +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/tools/ +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/team/ +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/ +2023-12-23T20:45:02+00:00 + + +/preview/pr-27/teaching/rnaseq_curso.html +2023-12-23T20:44:19+00:00 + + diff --git a/preview/pr-27/staff.html b/preview/pr-27/staff.html new file mode 100644 index 0000000..1ac5ceb --- /dev/null +++ b/preview/pr-27/staff.html @@ -0,0 +1,16 @@ + + + + + + Redirecting… + + + + + + +

Redirecting…

+ Click here if you are not redirected. + + diff --git a/preview/pr-27/teaching/index.html b/preview/pr-27/teaching/index.html new file mode 100644 index 0000000..5b59e28 --- /dev/null +++ b/preview/pr-27/teaching/index.html @@ -0,0 +1,636 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Teaching | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

+Teaching

+ +

The Dalmolin Group routinely organizes courses in Bioinformatics as part of BioME. Below, you can find the teaching materials used in these courses, which encompass both the undergrad and the post-graduate levels. The courses are in Brazilian Portuguese.

+
+ + + + + +
+ + +
+ + Análise de dados de RNA-Seq e aplicações em Biologia de Sistemas + + +
+ + + Análise de dados de RNA-Seq e aplicações em Biologia de Sistemas + + + + + Introdução ao R, Sanidade de Dados, Expressão Diferencial e Análises funcionais + + + + + +
+
+ +
+ + Introdução à Biologia de Sistemas + + +
+ + + Introdução à Biologia de Sistemas + + + + + Aulas ministradas para a disciplina DBQ0044 da UFRN. + + + + + +
+
+ +
+ + Introdução ao R + + +
+ + + Introdução ao R + + + + + Aulas ministradas para a disciplina DBQ0052 da UFRN. + + + + + +
+
+
+ + +
+ + + + + + + diff --git a/preview/pr-27/teaching/rnaseq_curso.html b/preview/pr-27/teaching/rnaseq_curso.html new file mode 100644 index 0000000..7ede90f --- /dev/null +++ b/preview/pr-27/teaching/rnaseq_curso.html @@ -0,0 +1,6880 @@ + + + + + + + + + + + +Análise de dados de RNA-Seq e aplicações em Biologia de Sistemas + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +
+
+
+
  • Introdução ao R
    • Instalação do R
    • RStudio
    • Funcionamento básico
    • Objetos em R
      • Vetores
      • Hierarquia de classes
      • Valores não disponíveis ou impossíveis
      • Atributos de objetos
      • Fator
      • Matrizes
      • Arrays
      • Listas
      • Trabalhando com listas
      • Data.frames
      • Trabalhando com data.frames
    • Instalação de pacotes
  • Importação e sanidade de dados
  • Análise de expressão diferencial
    • Análise de expressão diferencial de genes (DGE)
      • Representações gráficas do resultado da expressão diferencial
    • Análise de expressão diferencial de transcritos (DTE)
    • Análise de uso diferencial e isoforma (DTU)
    • Correção para múltiplos testes em análises em nível de +transcrito
      • Correção para DTE
      • Correção para DTU
    • Resumo
  • Análise funcional
+
+ +
+ + + + + + + +
+

Introdução ao R

+
+

Instalação do R

+

O interpretador da linguagem R pode ser instalado em Linux, Mac e +Windows1, +e encontra-se disponível gratuitamente no Comprehensive R Archive Network +(CRAN).

+
+
+

RStudio

+

O RStudio é um ambiente de desenvolvimento integrado que inclui +console, editor ciente de sintaxe e diversas outras ferramentas, que +visam o aumento da produtividade do desenvolvedor. Possui edições +gratuitas e comerciais, que podem ser obtidas em RStudio.com.

+
+
+

Funcionamento básico

+
+

Operadores

+
    +
  • Aritméticos
  • +
+
# Adição
+2 + 5         
+
## [1] 7
+
# Subtração
+5 - 2         
+
## [1] 3
+
# Multiplicação
+2 * 5         
+
## [1] 10
+
# Divisão
+8 / 2         
+
## [1] 4
+
# Exponenciação
+2 ^ 5
+
## [1] 32
+
2 ** 5
+
## [1] 32
+
# Resto da divisão
+5 %% 2
+
## [1] 1
+
    +
  • Relacionais
  • +
+
# Igual
+3 == 5        
+
## [1] FALSE
+
# Diferente
+3 != 5        
+
## [1] TRUE
+
# Maior que
+3 > 5         
+
## [1] FALSE
+
# Menor que
+3 < 5         
+
## [1] TRUE
+
# Maior ou igual
+3 >= 5        
+
## [1] FALSE
+
# Menor ou igual
+3 <= 5        
+
## [1] TRUE
+

Operações podem ser concatenadas:

+
((2 + 5 - 3) * 10) ^ 4 / 7 ^ 4
+
## [1] 1066.222
+
+
+

Variáveis

+

Atribuição de valores:

+
x <- 1
+# Sobrescreve o conteúdo anterior da variável x
+x <- 5
+y <- "gol do Grêmio"
+

Exibindo conteúdo de variáveis:

+
x
+
## [1] 5
+
y
+
## [1] "gol do Grêmio"
+

Armazenando o resultado de operações:

+
x <- 2 + 5
+y = 5 - 2
+2 * 5 -> w
+z <- 8 / 2 
+
+resultado <- (((x - y) * w) ^ z)/(x ^ z)
+resultado
+
## [1] 1066.222
+
+
+

Funções

+

Chamando funções:

+
sum(1, 3, 5)
+
## [1] 9
+
a <- rep("Aluno", times = 3)
+a
+
## [1] "Aluno" "Aluno" "Aluno"
+
+
+

Acessando a documentação

+

Estas funções buscam e exibem a documentação de funções:

+
help(sum)
+?sd
+??plot
+
+
+

Diretório de trabalho

+

Estas funções manipulam o diretório de trabalho:

+
# Verifica o caminho para o diretório de trabalho
+getwd()
+
+# Define o diretório de trabalho
+setwd()
+
+# Lista os arquivos presentes no diretório de trabalho
+list.files()
+
+# Carrega um arquivo binário do diretório de trabalho para o ambiente
+load()
+
+# Salva o conteúdo de uma variável no diretório de trabalho
+save()
+
+
+

Salvando e carregando objetos

+
# O comando abaixo cria um objeto o qual iremos salvar.
+esportes <- data.frame(nomes = c("Carlos", "Roberto", "Olivio", "Jomar"),
+                       esportes = c("futebol", "remo", "sumo", "maratona"))
+
+# Aqui nós salvamos o objeto "esportes" no HD
+save(esportes, file = "./dados_curso/outputs/intro_r/esportes.RData") 
+
+# O comando "rm" remove o objeto do ambiente global
+rm(esportes)     
+
+# Aqui carregamos o objeto "esportes" para o ambiente global
+load("./dados_curso/outputs/intro_r/esportes.RData")
+
+# Aqui deletamos o arquivo do HD
+file.remove("./dados_curso/outputs/intro_r/esportes.RData")
+
## [1] TRUE
+
+
+
+

Objetos em R

+
+

Vetores

+

Função de concatenação c():

+
number <- c(1, 2, 3, 4, 5)
+letter <- c("x", "y", "z", "w", "j")
+logico <- c(TRUE, FALSE, FALSE, TRUE, FALSE)
+seq <- 1:10
+complexo <- 4i
+

A função class() pode ser usada para acessar a classe de +um determinado objeto:

+
class(number)
+
## [1] "numeric"
+
+
+

Hierarquia de classes

+

Vetores comportam apenas uma classe de elementos. Quando um vetor é +criado com valores pertecentes a classes distintas, é feita uma +conversão implícita. Um valor logical é convertido para +numeric, e um valor numeric é convertido para +character:

+
class(c(1, 2, 3))
+
## [1] "numeric"
+
class(c("1", "2", "3"))
+
## [1] "character"
+
class(c(TRUE, FALSE, FALSE))
+
## [1] "logical"
+
class(c("TRUE", "FALSE", "FALSE"))
+
## [1] "character"
+
class(c(1, "a", TRUE))
+
## [1] "character"
+
class(c(1, "a"))
+
## [1] "character"
+
class(c(1, T))
+
## [1] "numeric"
+
class(c("a", T))
+
## [1] "character"
+

Com esta hierarquia, é possível somar valores lógicos, sendo +TRUE equivalente a 12, e FALSE equivalente a 0:

+
logical <- c(TRUE, FALSE, FALSE, TRUE, FALSE)
+sum(logico)
+
## [1] 2
+

Uma conversão explícita pode ser feita com as funções +as.<nome da classe>:

+
x <- 0:10
+x
+
##  [1]  0  1  2  3  4  5  6  7  8  9 10
+
class(x)
+
## [1] "integer"
+
a <- as.numeric(x)
+a
+
##  [1]  0  1  2  3  4  5  6  7  8  9 10
+
class(a)
+
## [1] "numeric"
+
b <- as.character(x)
+b
+
##  [1] "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"
+
class(b)
+
## [1] "character"
+
c <- as.logical(x)
+c
+
##  [1] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
+
class(c)
+
## [1] "logical"
+
+
+

Valores não disponíveis ou impossíveis

+

Valores não disponíveis são representados por NA +(Not Available), e valores impossíveis, como o resultado de uma +divisão por 0, são representados por NaN (Not a +Number).

+
x <- c(1, 2, 3, NA)
+y <- c("a", "b", "c", NA)
+is.na(x)
+
## [1] FALSE FALSE FALSE  TRUE
+
w <- rep(NA, 10)
+w
+
##  [1] NA NA NA NA NA NA NA NA NA NA
+
class(w)
+
## [1] "logical"
+
z <- rep(NA_integer_, 10)
+z
+
##  [1] NA NA NA NA NA NA NA NA NA NA
+
class(z)
+
## [1] "integer"
+
a <- c(1, 3, NA, 7, 9)
+sum(a)
+
## [1] NA
+
sum(a, na.rm = TRUE)
+
## [1] 20
+
+
+

Atributos de objetos

+

Todos os objetos possuem atributos:

+
x <- 1:5
+x
+
## [1] 1 2 3 4 5
+
length(x)
+
## [1] 5
+
dim(x)
+
## NULL
+
attributes(x)
+
## NULL
+
names(x) <- c("a", "b", "c", "d", "e")
+x
+
## a b c d e 
+## 1 2 3 4 5
+
attributes(x)
+
## $names
+## [1] "a" "b" "c" "d" "e"
+
+
+

Fator

+

Um vetor da classe factor é um vetor categórico que +possui o atributo levels:

+
x <- factor(c("s", "n", "n", "s", "s"))
+z <- factor(c("alto", "baixo", "medio"))
+x
+
## [1] s n n s s
+## Levels: n s
+
z
+
## [1] alto  baixo medio
+## Levels: alto baixo medio
+

Usamos [] para acessar elementos de vetores:

+
letter <- c("x", "y", "z", "w", "j")
+
+# Acessa o segundo elemento do vetor
+letter[2]               
+
## [1] "y"
+
# Podemos usar sequências de valores
+letter[2:4]             
+
## [1] "y" "z" "w"
+
# Usamos a função c() para valores não contíguos
+letter[c(1, 4)]         
+
## [1] "x" "w"
+
# Usamos números negativos para excluir um ou mais valores
+letter[-2]              
+
## [1] "x" "z" "w" "j"
+
letter[c(-2, -5)]
+
## [1] "x" "z" "w"
+
# Podemos criar índices numéricos
+idx <- c(1, 4)            
+letter[idx]
+
## [1] "x" "w"
+
x <- 1:10
+
+# Podemos usar operadores relacionais como filtros
+x[x > 7]                  
+
## [1]  8  9 10
+
# Também funciona com caracteres, levando em consideração a ordem lexicográfica
+letter[letter > "k"]      
+
## [1] "x" "y" "z" "w"
+
letter[letter < "k"]
+
## [1] "j"
+
letter == "z"
+
## [1] FALSE FALSE  TRUE FALSE FALSE
+

Funções para identificar valores extremos:

+
# Definindo uma semente para a geração de valores aleatórios
+set.seed(1)
+s <- sample(-1000:1000, 200)
+
+# Procura a posição do maior valor
+which.max(s)            
+
## [1] 126
+
# Exibe o maior valor
+max(s)
+
## [1] 997
+
# Exibe o menor valor
+min(s)
+
## [1] -982
+
# Exibe o intervalo dos valores do vetor
+range(s)
+
## [1] -982  997
+
# Cria um vetor lógico
+s > 0                     
+
##   [1]  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE
+##  [13]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE
+##  [25] FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE
+##  [37] FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE
+##  [49] FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
+##  [61]  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE
+##  [73] FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE
+##  [85]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE
+##  [97] FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE
+## [109] FALSE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
+## [121] FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE
+## [133]  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE
+## [145]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE
+## [157] FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE
+## [169]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE
+## [181]  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
+## [193]  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE
+
# Cria um vetor com as posições que satisfazem o comando
+which(s > 0)              
+
##   [1]   1   2   6  10  11  13  14  15  16  18  19  20  21  23  27  28  31  32
+##  [19]  38  40  42  43  45  50  52  56  61  62  63  66  67  69  70  72  74  75
+##  [37]  77  78  79  80  81  85  86  87  88  89  90  91  93  94  95  99 100 102
+##  [55] 105 110 111 113 117 118 119 120 122 123 124 126 130 131 133 134 136 138
+##  [73] 142 143 145 146 147 148 149 151 153 154 156 161 163 166 168 169 170 177
+##  [91] 178 181 182 185 187 190 191 192 193 194 198
+

Funções de ordenamento:

+
x <- c(3, 8, 2, 1, 5, 9, 7, 7, 3)
+x
+
## [1] 3 8 2 1 5 9 7 7 3
+
# Ordena um vetor
+sort(x)        
+
## [1] 1 2 3 3 5 7 7 8 9
+
sort(x, decreasing = T)
+
## [1] 9 8 7 7 5 3 3 2 1
+
# Informa a ordem na qual cada elemento deve ser acessado para exibir o conteúdo do vetor em ordem crescente
+order(x)                
+
## [1] 4 3 1 9 5 7 8 2 6
+
# Exibe o conteúdo do vetor de forma aleatória, e uma única vez, cada posição
+sample(x)     
+
## [1] 2 5 3 3 8 1 7 7 9
+
# Elimina as replicatas
+unique(x)
+
## [1] 3 8 2 1 5 9 7
+
# Exibe um vetor lógico referente à posição das replicatas
+duplicated(x)           
+
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE
+
+
+

Matrizes

+

Matrizes são vetores bidimensionais que possuem o atributo dimensão. +Por serem vetores, comportam apenas uma classe de elementos:

+
x <- 1:20
+x
+
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
+
attributes(x)
+
## NULL
+
m <- matrix(x, 4, 5)
+m
+
##      [,1] [,2] [,3] [,4] [,5]
+## [1,]    1    5    9   13   17
+## [2,]    2    6   10   14   18
+## [3,]    3    7   11   15   19
+## [4,]    4    8   12   16   20
+
attributes(m)
+
## $dim
+## [1] 4 5
+
dim(x) <- c(4,5)
+x
+
##      [,1] [,2] [,3] [,4] [,5]
+## [1,]    1    5    9   13   17
+## [2,]    2    6   10   14   18
+## [3,]    3    7   11   15   19
+## [4,]    4    8   12   16   20
+
identical(x, m)
+
## [1] TRUE
+
a <- 1:5
+b <- -1:-5
+c <- c(3, 6, 4, 9, 1)
+
+# A função cbind() concatena colunas
+m <- cbind(a, b, c)       
+m
+
##      a  b c
+## [1,] 1 -1 3
+## [2,] 2 -2 6
+## [3,] 3 -3 4
+## [4,] 4 -4 9
+## [5,] 5 -5 1
+
# A função rbind() concatena linhas  
+m1 <- rbind(a, b, c)
+m1
+
##   [,1] [,2] [,3] [,4] [,5]
+## a    1    2    3    4    5
+## b   -1   -2   -3   -4   -5
+## c    3    6    4    9    1
+
# Elementos são acessados pelos índices das duas dimenções [linha, coluna]
+m[1,3]
+
## c 
+## 3
+
# Toda a linha
+m[1, ]
+
##  a  b  c 
+##  1 -1  3
+
m[2:3, ]
+
##      a  b c
+## [1,] 2 -2 6
+## [2,] 3 -3 4
+
# Atribuição
+m[1,] <- NA
+m
+
##       a  b  c
+## [1,] NA NA NA
+## [2,]  2 -2  6
+## [3,]  3 -3  4
+## [4,]  4 -4  9
+## [5,]  5 -5  1
+
+
+

Arrays

+

Um array é um vetor que possui mais de duas +dimensões:

+
# Criando um vetor multidimensional com 4 matrizes de 5 linhas e 10 colunas
+ar <- array(1:200, c(5, 10, 4))
+ar
+
## , , 1
+## 
+##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
+## [1,]    1    6   11   16   21   26   31   36   41    46
+## [2,]    2    7   12   17   22   27   32   37   42    47
+## [3,]    3    8   13   18   23   28   33   38   43    48
+## [4,]    4    9   14   19   24   29   34   39   44    49
+## [5,]    5   10   15   20   25   30   35   40   45    50
+## 
+## , , 2
+## 
+##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
+## [1,]   51   56   61   66   71   76   81   86   91    96
+## [2,]   52   57   62   67   72   77   82   87   92    97
+## [3,]   53   58   63   68   73   78   83   88   93    98
+## [4,]   54   59   64   69   74   79   84   89   94    99
+## [5,]   55   60   65   70   75   80   85   90   95   100
+## 
+## , , 3
+## 
+##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
+## [1,]  101  106  111  116  121  126  131  136  141   146
+## [2,]  102  107  112  117  122  127  132  137  142   147
+## [3,]  103  108  113  118  123  128  133  138  143   148
+## [4,]  104  109  114  119  124  129  134  139  144   149
+## [5,]  105  110  115  120  125  130  135  140  145   150
+## 
+## , , 4
+## 
+##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
+## [1,]  151  156  161  166  171  176  181  186  191   196
+## [2,]  152  157  162  167  172  177  182  187  192   197
+## [3,]  153  158  163  168  173  178  183  188  193   198
+## [4,]  154  159  164  169  174  179  184  189  194   199
+## [5,]  155  160  165  170  175  180  185  190  195   200
+
# Acessando a primeira matriz [linha, coluna, matriz]
+ar[,,1]                          
+
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
+## [1,]    1    6   11   16   21   26   31   36   41    46
+## [2,]    2    7   12   17   22   27   32   37   42    47
+## [3,]    3    8   13   18   23   28   33   38   43    48
+## [4,]    4    9   14   19   24   29   34   39   44    49
+## [5,]    5   10   15   20   25   30   35   40   45    50
+
+
+

Listas

+

Listas são tipos especiais de vetores que comportam elementos de +diferentes classes:

+
a <- c(1, 3, NA, 7, 9)
+b <- matrix(1:200, 20,10)
+c <- "Gol do Gremio"
+z <- factor(c("alto", "baixo", "medio"))
+ls <- list(a, b, c, z)
+
+# Cada elemento da lista aparece com [[]]
+ls     
+
## [[1]]
+## [1]  1  3 NA  7  9
+## 
+## [[2]]
+##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
+##  [1,]    1   21   41   61   81  101  121  141  161   181
+##  [2,]    2   22   42   62   82  102  122  142  162   182
+##  [3,]    3   23   43   63   83  103  123  143  163   183
+##  [4,]    4   24   44   64   84  104  124  144  164   184
+##  [5,]    5   25   45   65   85  105  125  145  165   185
+##  [6,]    6   26   46   66   86  106  126  146  166   186
+##  [7,]    7   27   47   67   87  107  127  147  167   187
+##  [8,]    8   28   48   68   88  108  128  148  168   188
+##  [9,]    9   29   49   69   89  109  129  149  169   189
+## [10,]   10   30   50   70   90  110  130  150  170   190
+## [11,]   11   31   51   71   91  111  131  151  171   191
+## [12,]   12   32   52   72   92  112  132  152  172   192
+## [13,]   13   33   53   73   93  113  133  153  173   193
+## [14,]   14   34   54   74   94  114  134  154  174   194
+## [15,]   15   35   55   75   95  115  135  155  175   195
+## [16,]   16   36   56   76   96  116  136  156  176   196
+## [17,]   17   37   57   77   97  117  137  157  177   197
+## [18,]   18   38   58   78   98  118  138  158  178   198
+## [19,]   19   39   59   79   99  119  139  159  179   199
+## [20,]   20   40   60   80  100  120  140  160  180   200
+## 
+## [[3]]
+## [1] "Gol do Gremio"
+## 
+## [[4]]
+## [1] alto  baixo medio
+## Levels: alto baixo medio
+
# A função vector() pode criar listas vazias
+ls1 <- vector("list", 5)   
+ls1
+
## [[1]]
+## NULL
+## 
+## [[2]]
+## NULL
+## 
+## [[3]]
+## NULL
+## 
+## [[4]]
+## NULL
+## 
+## [[5]]
+## NULL
+
+
+

Trabalhando com listas

+

Listas podem ser acessadas com os operadores [], +[[]] e $ (para listas nomeadas):

+
# [] extrai uma lista
+ls[1] 
+
## [[1]]
+## [1]  1  3 NA  7  9
+
# [[]] extrai o objeto interno
+ls[[1]]           
+
## [1]  1  3 NA  7  9
+
class(ls[1])
+
## [1] "list"
+
class(ls[[1]])
+
## [1] "numeric"
+
# Posição na lista e posição no elemento
+ls[[c(1,2)]]      
+
## [1] 3
+
ls[[2]][2,]
+
##  [1]   2  22  42  62  82 102 122 142 162 182
+
names(ls) <- c("Arilson", "Roger", "Paulo Nunes", "Jardel")
+ls$Roger
+
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
+##  [1,]    1   21   41   61   81  101  121  141  161   181
+##  [2,]    2   22   42   62   82  102  122  142  162   182
+##  [3,]    3   23   43   63   83  103  123  143  163   183
+##  [4,]    4   24   44   64   84  104  124  144  164   184
+##  [5,]    5   25   45   65   85  105  125  145  165   185
+##  [6,]    6   26   46   66   86  106  126  146  166   186
+##  [7,]    7   27   47   67   87  107  127  147  167   187
+##  [8,]    8   28   48   68   88  108  128  148  168   188
+##  [9,]    9   29   49   69   89  109  129  149  169   189
+## [10,]   10   30   50   70   90  110  130  150  170   190
+## [11,]   11   31   51   71   91  111  131  151  171   191
+## [12,]   12   32   52   72   92  112  132  152  172   192
+## [13,]   13   33   53   73   93  113  133  153  173   193
+## [14,]   14   34   54   74   94  114  134  154  174   194
+## [15,]   15   35   55   75   95  115  135  155  175   195
+## [16,]   16   36   56   76   96  116  136  156  176   196
+## [17,]   17   37   57   77   97  117  137  157  177   197
+## [18,]   18   38   58   78   98  118  138  158  178   198
+## [19,]   19   39   59   79   99  119  139  159  179   199
+## [20,]   20   40   60   80  100  120  140  160  180   200
+
+
+

Data.frames

+

Um data.frame é um tipo especial de lista, onde todos os +elementos devem possuir o mesmo length. Por ser uma lista, cada posição +comporta elementos de diferentes classes. Do ponto de vista prático, o +data.frame funciona como uma planilha bidimensional formado +por vetores de mesmo tamanho, sendo cada vetor uma coluna:

+
number <- c(1, 2, 3, 4, 5)
+letter <- c("x", "y", "z", "w", "j")
+logical <- c(TRUE, FALSE, FALSE, TRUE, FALSE)
+seq <- 1:10
+dt <- data.frame(number, letter, logical)
+class(dt)
+
## [1] "data.frame"
+
# Usamos $ para acessar as colunas de um data.frame
+dt$letter               
+
## [1] "x" "y" "z" "w" "j"
+
# Vetores de caracteres são interpretados como fatores
+class(dt$letter)          
+
## [1] "character"
+
# Argumento stringsAsFactors = F altera este comportamento padrão
+dt <- data.frame(number, letter, logical, stringsAsFactors = F)
+dt$letter
+
## [1] "x" "y" "z" "w" "j"
+
class(dt$letter)
+
## [1] "character"
+
# Data.frames possuem colnames e rownames como atributos
+attributes(dt)                
+
## $names
+## [1] "number"  "letter"  "logical"
+## 
+## $class
+## [1] "data.frame"
+## 
+## $row.names
+## [1] 1 2 3 4 5
+
colnames(dt)
+
## [1] "number"  "letter"  "logical"
+
row.names(dt)
+
## [1] "1" "2" "3" "4" "5"
+
# Acessamos data.frames da mesma forma que matrizes
+dt[5,2]
+
## [1] "j"
+
+
+

Trabalhando com data.frames

+

Para acessar data.frames podemos usar os operadores [], +[[]] e $:

+
dt <- data.frame(number=c(1, 2, 3, 4, 5),
+                 letter = c("x", "y", "z", "w", "j"),
+                 logical = c(TRUE, FALSE, FALSE, TRUE, FALSE))
+
+# [[ ]] acessa cada coluna por posição
+dt[[1]]              
+
## [1] 1 2 3 4 5
+
# [ ] acessa as coordenadas [linha, coluna]
+dt[,1]               
+
## [1] 1 2 3 4 5
+
# $ acessa a coluna pelo nome
+dt$number            
+
## [1] 1 2 3 4 5
+
# Carrega o data.frame mtcars
+cars<-mtcars        
+
+# Mostra as 6 primeiras linhas
+head(cars)          
+
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
+## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
+## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
+## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
+## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
+## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
+## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
+
# Mostra as 6 ultimas linhas
+tail(cars)
+
##                 mpg cyl  disp  hp drat    wt qsec vs am gear carb
+## Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.7  0  1    5    2
+## Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.9  1  1    5    2
+## Ford Pantera L 15.8   8 351.0 264 4.22 3.170 14.5  0  1    5    4
+## Ferrari Dino   19.7   6 145.0 175 3.62 2.770 15.5  0  1    5    6
+## Maserati Bora  15.0   8 301.0 335 3.54 3.570 14.6  0  1    5    8
+## Volvo 142E     21.4   4 121.0 109 4.11 2.780 18.6  1  1    4    2
+
# data.frames possuem colnames e rownames
+colnames(dt)
+
## [1] "number"  "letter"  "logical"
+
row.names(dt)
+
## [1] "1" "2" "3" "4" "5"
+
# Podemos alterar colnames e rownames
+row.names(dt) <- c("a", "b", "c", "d", "e")
+
+# Alterando apenas a posição 2
+colnames(dt)[2] <- "letras"     
+
+# Podemos alterar valores específicos de um data.frame
+dt[3,1] <- "10"
+dt$logical <- as.numeric(dt$logical)
+dt$letras <- NA
+

É possível verificar as ocorrencias de um data.frame em outro:

+
biometria <- data.frame(nomes = c("Carlos", "Roberto", "Olivio", "Joel"),
+                        altura = c(180, 187, 155, 168),
+                        peso = c(80, 90, 98, 64))
+biometria
+
##     nomes altura peso
+## 1  Carlos    180   80
+## 2 Roberto    187   90
+## 3  Olivio    155   98
+## 4    Joel    168   64
+
esportes <- data.frame(nomes = c("Carlos", "Roberto", "Olivio", "Jomar"),
+                       esportes = c("futebol", "remo", "sumo", "maratona"))
+esportes
+
##     nomes esportes
+## 1  Carlos  futebol
+## 2 Roberto     remo
+## 3  Olivio     sumo
+## 4   Jomar maratona
+
# Retorna um vetor lógico
+biometria$nomes %in% esportes$nomes
+
## [1]  TRUE  TRUE  TRUE FALSE
+
# Pode ser usado como índice
+idx <- biometria$nomes %in% esportes$nomes    
+x <- biometria[idx,]
+x
+
##     nomes altura peso
+## 1  Carlos    180   80
+## 2 Roberto    187   90
+## 3  Olivio    155   98
+
# Ordenando data.frames por uma coluna
+biometria <- biometria[with(biometria, order(altura)), ]
+biometria
+
##     nomes altura peso
+## 3  Olivio    155   98
+## 4    Joel    168   64
+## 1  Carlos    180   80
+## 2 Roberto    187   90
+

Unindo data.frames com a função merge():

+
# Independe da ordem dos data.frames, a busca é feita pelo nome, não pela ordem.
+# O resultado sempre virá em ordem alfabética
+unido <- merge(biometria, esportes, by = "nomes")
+unido
+
##     nomes altura peso esportes
+## 1  Carlos    180   80  futebol
+## 2  Olivio    155   98     sumo
+## 3 Roberto    187   90     remo
+
# As informações não disponíveis são preenchidas por NA
+# com todos os presentes no primeiro
+unido <- merge(biometria, esportes, by = "nomes", all.x = TRUE)
+unido
+
##     nomes altura peso esportes
+## 1  Carlos    180   80  futebol
+## 2    Joel    168   64     <NA>
+## 3  Olivio    155   98     sumo
+## 4 Roberto    187   90     remo
+
# Com todos os presentes no segundo
+unido <- merge(biometria, esportes, by = "nomes", all.y = TRUE)
+unido
+
##     nomes altura peso esportes
+## 1  Carlos    180   80  futebol
+## 2   Jomar     NA   NA maratona
+## 3  Olivio    155   98     sumo
+## 4 Roberto    187   90     remo
+
# Com todos presentes
+unido <- merge(biometria, esportes, by = "nomes", all = TRUE)
+unido
+
##     nomes altura peso esportes
+## 1  Carlos    180   80  futebol
+## 2    Joel    168   64     <NA>
+## 3   Jomar     NA   NA maratona
+## 4  Olivio    155   98     sumo
+## 5 Roberto    187   90     remo
+
+
+
+

Instalação de pacotes

+

Pacotes agrupam funções projetadas para atacar um problema +específico. Como exemplo é possível citar o pacote +data.table do CRAN, que possui funções para +manipulação de grandes quantidades de dados. Pacotes disponíveis em +repositórios (como o CRAN, Bioconductor e Github) podem ser instalados +por meio de poucas linhas de comando.

+

Verificando se um pacote já está instalado:

+
require(affy)
+

O CRAN é o principal +repositório de pacotes do R e possui pacotes com finalidades variadas: +importação e exportação de dados, manipulação de grafos, desenvolvimento +de pacotes, plotagem, paralelismo.

+

Instalando o pacote devtools do CRAN:

+
install.packages("devtools")
+

O Bioconductor é o principal +repositório de pacotes voltados para a bioinformática. Todo pacote do +Bioconductor é classificado em uma de três categorias: pacote de +anotação (bancos de dados e dicionários), pacote de dados de +experimentos (datasets relacionados a um experimento) ou pacote de +software (funcionalidades).

+

Instalando o pacote geneplast do Bioconductor:

+
if (!require("BiocManager", quietly = TRUE)) install.packages("BiocManager")
+BiocManager::install("geneplast")
+
+
+
+

Importação e sanidade de dados

+

O processo de alinhamento e/ou quantificação gera uma tabela de +contagens de features (genes, transcritos ou exons, por +exemplo) a qual será utilizada para a análise de expressão diferencial. +Nesta tabela, as features estão representadas nas linhas e as +amostras estão representadas nas colunas. Além disso, para a análise de +expressão diferencial, é necessário saber, pelo menos, a qual grupo +experimental cada amostra pertence.

+
+

Dataset a ser utilizado neste curso

+

Para este curso, analisaremos a expressão de genes e transcritos de +amostras de adenocarcinoma de pulmão de estadiamento precoce (da sigla +em inglês esLUAD, early-stage lung adenocarcinoma). +Nosso objetivo é comparar a expressão gênica de amostras de +tumores metastáticos (invasive) e tumores não-invasivos +(indolent) por meio de metologias de expressão +diferencial amplamente difundidas. Além das informações sobre os grupos +de comparação, alguns dados clínicos adicionais dos pacientes que +forneceram as amostras podem ser obtidos, como idade, sexo e +características histológicas dos tumores. Para mais informações sobre +este conjunto de dados, o artigo está disponível neste link.

+
+
+

Pacotes utilizados neste curso

+

Utilizaremos pacotes disponíveis no CRAN e no Bioconductor. A seguir, +listamos os pacotes de ambas as fontes e os passos para a +instalação.

+
# Lista de pacotes do CRAN
+packs_cran <- c("dplyr", "ggplot2", "pheatmap", "UpSetR", "igraph", "classInt")
+
+# Lista de pacotes do Bioconductor
+packs_bioc <- c("tximport", "GenomicFeatures", "PCAtools", "DESeq2", 
+                "DRIMSeq", "stageR", "biomaRt", "RedeR", "clusterProfiler", 
+                "TreeAndLeaf", "GOSemSim", "org.Hs.eg.db", "CEMiTool", 
+                "transcriptogramer", "edgeR")
+
+# Instalar pacotes CRAN
+lapply(packs_cran, function(i) {
+  if(!require(i, character.only = TRUE)) install.packages(i)
+})
+
+# Instalar pacotes Bioconductor
+if(!require("BiocManager")) install.packages("BiocManager")
+lapply(packs_bioc, function(i) {
+  if(!require(i, character.only = TRUE)) BiocManager::install(i)
+})
+
+
+

Importação

+

As reads foram quantificadas com o pseudoalinhador kallisto. +Para cada amostra, o programa gera um diretório com um arquivo +.tsv, um arquivo .h5 e um arquivo de log +run_info.json, com informações sobre o processo de +quantificação para aquela amostra. Utilizaremos apenas os arquivos +.tsv.

+

Cada arquivo .tsv contém a quantificação dos +transcritos. Este arquivo possui as seguintes informações para cada +transcrito:

+
    +
  • target_id: identificador do transcrito (ex.: +ENST00000631435.1);
  • +
  • length: tamanho do transcrito;
  • +
  • eff_length: tamanho efetivo dos transcritos (usado no +cálculo do TPM);
  • +
  • est_counts: valores de contagem estimados;
  • +
  • tpm (transcripts per million): abundância em +transcritos por milhão (TPM);
  • +
+

Utilizaremos o pacote tximport +para fazer a importação dos valores de contagem dos arquivos do +kallisto. O tximport contém métodos para a +sumarização dos valores de contagem de transcritos em genes, que serão +utilizados para a expressão diferencial de genes. Além disso, o pacote +dispõe de outros métodos de normalização para os dados de contagem, os +quais são necessários nas abordagens em nível de transcrito. Além do +kallisto, outros softwares de alinhamento/quantificação, como o Salmon, +Alevin, RSEM e StringTie, também fornecem os valores de contagem de +transcritos.

+
+

Importação de valores de contagens de genes

+

Para a sumarização das contagens de transcritos em genes, temos que +obter um dicionário relacionando cada um dos genes com seus respectivos +transcritos. É aconselhável que se use o mesmo arquivo de anotação +utilizado na etapa de alinhamento/quantificação. Aqui, será usado o +arquivo GTF do Ensembl/GENCODE (release 97) da etapa de quantificação do +kallisto. Neste exemplo, será criado um banco de dados do GTF e este +banco será usado para criarmos o dicionário.

+
# Importar metadado
+meta <- read.csv("./dados_curso/inputs/metadata/metadata.csv")
+
+# O metadado a ser usado pelo DESeq2 precisa ter os rownames idênticos às colunas 
+# da tabela de contagem
+rownames(meta) <- meta$run
+meta$run <- NULL
+
library(tximport)
+library(GenomicFeatures)
+
+# Caminho do diretório do GTF
+gtf <- "./dados_curso/inputs/annotation/Homo_sapiens.GRCh38.97.gtf.gz"
+
+# Caminho para o banco de dados a ser criado
+txdb.filename <- "./dados_curso/inputs/annotation/Homo_sapiens.GRCh38.97.gtf.sqlite"
+
+# Criar banco, caso não exista
+if(!("Homo_sapiens.GRCh38.97.gtf.sqlite" %in% list.files("./dados_curso/inputs/annotation/"))) {
+  txdb <- makeTxDbFromGFF(gtf, format = "gtf")
+  saveDb(txdb, txdb.filename)
+}
+
+# Carregar banco de dados
+txdb <- loadDb(txdb.filename)
+
+# Deste banco, selecionar os IDs de genes (GENEID) e transcritos (TXNAME)
+txdf <- AnnotationDbi::select(txdb, keys(txdb, "GENEID"), "TXNAME", "GENEID")
+tab <- table(txdf$GENEID)
+txdf$ntx <- tab[match(txdf$GENEID, names(tab))]
+
+# Criar dataframe com duas colunas: tx (transcritos) e gene (genes). Esta etapa é requerida 
+# pelo tximport para fazer a sumarização de transcritos em genes.
+tx2gene <- data.frame(tx = txdf$TXNAME, gene = txdf$GENEID, stringsAsFactors = F)
+
+# Salvar dataframe para consultas posteriores
+save(tx2gene, file = "./dados_curso/outputs/annotation/dict_gene_tx.RData")
+
+# Obter os caminhos dos arquivos
+files <- list.files(path = "./dados_curso/inputs/kallisto", pattern = "tsv", recursive = TRUE, full.names = TRUE)
+files <- files[base::match(rownames(meta), sapply(strsplit(files, "\\/"), "[[", 5))]
+names(files) <- rownames(meta)
+
# Importar dados de contagem
+txi_gene <- tximport(files = files, type = "kallisto", tx2gene = tx2gene, ignoreTxVersion = T)
+
+save(txi_gene, file = "./dados_curso/outputs/tximport/txi_gene.RData")
+

O objeto txi é uma lista contém três matrizes:

+
    +
  • abundance, matriz de abundâncias normalizadas (o +kallisto fornece valores de abundância em TPM);
  • +
  • counts, matriz de valores de contagem estimados (como o +kallisto estima as contagens, pode apresentar números +fracionários);
  • +
  • length, matriz com os tamanhos efetivos dos +transcritos.
  • +
+
+
+

Importação dos valores de contagens de transcritos

+

Para importar os valores de contagens de transcritos, para posterior +análise de expressão diferencial de transcritos (DTE), basta usar a +opção txOut = T na função tximport.

+
txi_tx <- tximport(files = files, type = "kallisto", txOut = T, ignoreTxVersion = T)
+save(txi_tx, file = "./dados_curso/outputs/tximport/txi_tx.RData")
+
+
+

Importação de valores de contagens de transcritos normalizados

+

Para a análise do uso diferencial de isoformas (DTU), os valores dos +transcritos precisam estar normalizados de acordo com o tamanho da +biblioteca. O tximport proporciona o argumento +countsFromAbundance = scaledTPM para a normalização das +bibliotecas em TPM.

+
txi_tx_dtu <- tximport(files = files, type = "kallisto", txOut = T, countsFromAbundance = "scaledTPM", ignoreTxVersion = T)
+
+save(txi_tx_dtu, file = "./dados_curso/outputs/tximport/txi_tx_dtu.RData")
+
+
+
+

Sanidade de dados

+

Antes de procedermos para a análise de expressão diferencial, é +necessário realizar uma análise exploratória do conjunto de dados. Aqui, +buscamos verificar a distribuição da expressão gênica nos grupos de +comparações (no nosso caso, o subtipo, se metastático ou não invasivo). +Para tal, precisamos de técnicas estatísticas robustas, as quais +consigam considerar a multidimensionalidade dos dados de expressão. De +uma forma simples, o caráter multidimensional dos dados de expressão é +decorrente do fato de que lidamos com milhares de genes ao mesmo tempo +e, portanto, precisamos “resumir” as informações destes genes. Por isso, +técnicas de redução de dimensionalidade, como a análise de componentes +principais (PCA) e técnicas de agrupamento, como a clusterização +hierárquica, são importantes para entendermos a estrutura do nosso dado +de expressão.

+
+

Análise de Componentes Principais (PCA)

+

A Análise de Componentes Principais (PCA) é uma técnica para análise +multivariada que visa sumarizar as informações provenientes de uma +amostra em novas características, ou componentes principais. Assim, para +nossos propósitos, a informação a ser captada é a variabilidade da +expressão dos genes de uma amostra. Por meio desta técnica, podemos +resumir uma amostra em um ponto do espaço com n dimensões.

+

A análise de componentes principais decompõe as informações dos genes +em espaços de variabilidade. Quanto mais variabilidade há na expressão +de um gene, mais este gene contribui para este espaço. Neste processo, +definimos componentes que indicam em quais direções do espaço há maior +variabilidade. A componente principal 1 (PC1) é direção onde há maior +variabilidade, a componente principal 2 é direção onde há a segunda +maior variabilidade, a componente principal 3 é direção onde há a +terceira maior variabilidade, e assim por diante. Em geral, plotamos as +componentes principais 1 e 2 e verificamos como as amostras se +relacionam. O pacote PCAtools +contém inúmeras funções customizadas para esta tarefa.

+

Antes de realizarmos análise, aplicaremos uma transformação dos dados +de expressão. Esta transformação é necessária para reduzir a dependência +da variância em relação à média, já que uma das principais +características de dados de expressão gênica é a heteroscedasticidade. +Ou seja, genes com expressão média pequena tem variância grande, +enquanto que genes com expressão média alta possuem menor variância. +Este passo de transformação dos dados não é necessário +para os testes de expressão diferencial, como veremos adiante. Alguns +algoritmos de transformação dos dados são o variance stabilizing +transformation (VST) e o regularized logarithm (rlog), +ambos implementados no DESeq2.

+
library(PCAtools)
+library(DESeq2)
+
+# Carregar dados de expressão de genes
+load("dados_curso/outputs/tximport/txi_gene.RData")
+
+# Criar objeto DESeq2
+dds <- DESeqDataSetFromTximport(txi_gene, colData = meta, design = ~ subtype)
+
+# Transformar os dados por meio do VST
+dds_vst <- vst(dds)
+
+# Obter counts transformados
+counts_genes_vst <- assay(dds_vst)
+
+# Computar PCA
+pca_lung <- pca(counts_genes_vst, metadata = meta)
+
+# Plotar PC1 e PC2
+biplot(pca_lung, colby = "histology", shape = "subtype", legendPosition = "left")
+

+
# Proporção de variabilidade de cada componente
+screeplot(pca_lung)
+

+

Em resumo, pela PCA, podemos ver que as amostras se agrupam pelo +subtipo do tumor (não-invasivo ou metastático) e, em geral, pelo tipo de +histologia apresentada.

+
+
+

Clusterização hierárquica

+

Clusterizar implica em agrupar amostras de acordo com a similaridade +de expressão gênica. Diferentes algoritmos realizam este tipo de tarefa, +que em geral consiste em calcular distâncias entre quaisquer par de +amostras. Amostras mais similares entre si são representadas com maior +proximidade no dendrograma, criando, assim, uma estrutura hierárquica. +Neste exemplo, calcularemos as distâncias euclidianas +(method = "euclidian", da função dist) entre +as amostras e o método de agrupamento será o de ligação completa +(method = "complete", da função hclust).

+
# Transpor matriz de counts transformados
+counts_genes_vst_t <- t(counts_genes_vst)
+
+# Setar nomes dos grupos
+rownames(counts_genes_vst_t) <- meta$subtype
+
+# Clusterização hierárquica
+d <- dist(as.matrix(counts_genes_vst_t), method = "euclidean")
+clusters <- hclust(d, method = "complete")
+
+# Plotar
+par(mar = c(1, 1, 1, 1))
+plot(clusters)
+

+

Pelo dendrograma, verificamos que as amostras, em geral, se separam +por subtipo.

+
+
+
+

Análise de covariáveis

+

A análise de expressão diferencial nada mais é que um modelo de +regressão, no qual a variável resposta é a expressão de cada um dos +genes e a variável explanatória é o grupo de comparação (no nosso caso, +os subtipos do tumor). Este modelo de expressão é aplicado a cada um dos +genes para verificarmos se há diferença na expressão quando consideramos +os diferentes níveis do grupo de comparação.

+

Entretanto, outras variáveis, além do grupo de comparação, podem ser +importantes para explicar a expressão gênica. Como vimos na PCA, as +características histológicas são um importante fator que influencia a +expressão gênica. Além disso, o pesquisador pode julgar, com base em +evidências prévias, que uma variável é relevante para o modelo. Estas +variáveis adicionais podem ser acrescentadas ao modelo de expressão +gênica a fim de melhorar a resolução dos resultados.

+

Uma forma de selecionar covariáveis é verificar quais se +correlacionam significativamente com as componentes principais. A +seguir, a função eigencorplot fornece uma maneira fácil de +visualizarmos as correlações significativas.

+
eigencorplot(pca_lung, metavars = c("subtype", "histology", "sex", "age"))
+

+

As escolha de covariáveis para o modelo é um processo subjetivo. +Entretanto, sugerimos selecionar as covariáveis que se correlacionam com +as primeiras componentes. Portanto, pelo gráfico de correlações acima, +podemos adicionar a covariável histology ao modelo de +expressão de genes e transcritos.

+
+
+
+

Análise de expressão diferencial

+

Nesta etapa, realizaremos análise de expressão diferencial de genes +(DGE) e transcritos (DTE) e a análise de uso de isoforma (DTU).

+

As análises DGE e DTE serão realizadas com o pacote DESeq2. +O DESeq2 implementa um modelo linear generalizado baseado na +distribuição Binomial Negativa para a expressão de genes e transcritos. +Esta metodologia é uma das mais utilizadas para análise de expressão +diferencial, entretanto, outras metodologias podem ser utilizadas, como +edgeR +e o limma.

+

A análise DTU será feita por meio do pacote DRIMSeq, +que implementa uma metodologia baseada na distribuição +Dirichlet-multinomial para modelar a contribuição da expressão dos +transcritos de cada gene. As três abordagens utilizadas aqui podem ser +exemplicadas na figura abaixo. Na análise de expressão diferencial de +genes (DGE), a expressão do gene é sumarizada na abundância coletiva dos +transcritos anotados para aquele gene. Portanto, inferimos se aquele +gene teve alteração ou não na sua expressão, dadas diferentes condições. +No exemplo, temos um aumento significativo da expressão do gene A nas +amostras do grupo tratado, mas não houve alteração do gene B.

+

A análise de expressão diferencial de transcritos (DTE) é similar à +de genes, porém compara-se a expressão de cada um dos transcritos de um +gene em diferentes condições. Na figura, podemos observar que houve +aumento da expressão dos transcritos A-2 e A-3 do gene A nas amostras do +grupo tratado. Ainda, houve diminuição da expressão do transcrito B-1 e +aumento da expressão do transcrito B-2 nas amostras TDM do gene B. A +diferença da expressão global do gene B não é significativa, mas esta +aparece quando consideramos a expressão individual de seus +transcritos.

+

A análise diferencial de uso de isoforma (DTU) é um tipo de análise +diferencial em nível de transcrito, a qual leva em consideração a +expressão relativa de cada transcrito em relação à expressão total do +gene. Deste modo, compara-se a proporção da expressão de cada transcrito +em diferentes condições e verifica-se, por meio de testes estatísticos, +se houve diferenças significativas nas comparações. Na figura, por +exemplo, verifica-se que, para o gene A, houve uma mudança nas +proporções dos transcritos A-1 e A-2, na comparação entre amostras +controle e amostras do grupo tratado.

+
+ +

Diferentes abordagens de análise de expressão +diferencial.

+
+
+

Análise de expressão diferencial de genes (DGE)

+

É importante frisar que, independente da metodologia utilizada no +alinhamento/quantificação das reads, o dado de entrada para o +DESeq2 precisa ser uma matriz de valores de contagens +brutos. Portanto, não utilize dados normalizados por +TPM, R/FPKM ou CPM, por exemplo.

+

Primeiramente, precisamos criar o objeto DESeqDataSet. +Este objeto irá armazenar a matriz de contagens, o dataframe de metadado +e o modelo da expressão diferencial.

+

O DESeq2 provém diferentes funções para criarmos este +objeto a partir de uma matriz de contagens. A função +DESeqDataSetFromMatrix cria este objeto a partir de uma +matriz de contagens. A função DESeqDataSetFromHTSeqCount +cria este objeto a partir da tabela de contagens proveniente da +quantificação do HTseq, quando alinhadores como o STAR e o HISAT2 são +utilizados. Já a função DESeqDataSetFromTximport cria o +objeto a partir do dado importado pelo tximport. Esta +função é bastante útil para o caso da quantificação é realizada por +pseudoalinhadores, como o Salmon e o kallisto, por exemplo.

+

Para verificar em detalhes os argumentos destas funções, ver +?DESeqDataSet. Aqui, utilizaremos a função +DESeqDataSetFromTximport para fazer a importação dos dados +de contagem.

+

Além disso, cada uma das funções de importação possui o argumento +design, o qual especifica o modelo de expressão a ser +utilizado. Na etapa de análise de covariáveis, verificamos que a +variável histology é importante para explicar a +variabilidade da expressão gênica e, portanto, esta variável será +adicionada ao modelo.

+

Outro detalhe importante quanto ao fluxograma do DESeq2 +é a necessidade de que haja correspondência entre os nomes das linhas do +dataframe do metadado (rownames(meta)) e as colunas de +contagem (colnames(txi_gene$counts)).

+
library(DESeq2)
+
+# Carregar dados de contagem
+load("./dados_curso/outputs/tximport/txi_gene.RData")
+
+# Importar metadado
+meta <- read.csv("./dados_curso/inputs/metadata/metadata.csv")
+rownames(meta) <- meta$run
+meta$run <- NULL
+
+# Checar se as linhas do metadado correspondem às colunas da tabela de contagens
+identical(rownames(meta), colnames(txi_gene$counts))
+
## [1] TRUE
+
# Adicionar as covariáveis ao modelo de expressão. O argumento 'design' especifica o modelo com 
+# as variáveis do metadado. Estas devem estar especificadas de acordo com os nomes das colunas 
+# do metadado. 
+dds <- DESeqDataSetFromTximport(txi_gene,
+                                colData = meta,
+                                design = ~ histology + subtype)
+

A função DESeq congrega diferentes funções. Ela estima +os fatores de escala de cada amostra, estima a dispersão por gene ou +transcrito, aplica o modelo e testa a significância dos parâmetros.

+
dds <- DESeq(dds)
+

Em seguida, precisamos extrair os resultados do teste. A função +resultNames retorna os resultados estimados para todos os +contrastes possíveis.

+

Definindo de forma coloquial, um contraste é uma comparação entre os +grupos de uma variável categórica. Para o nosso exemplo, queremos +verificar a diferença na expressão das amostras do tumor o metatático e +o não-invasivo. Assim, nosso contraste de interesse é +invasive-indolent. A ordem com a qual o contraste é +construído interfere na interpretação dos resultados. No caso descrito, +a referência da nossa comparação é o grupo das amostras de tumor +não-invasivo.

+

A função resultNames retorna todos os contrastes +(comparações) possíveis de acordo com as variáveis fornecidas no +modelo:

+
resultsNames(dds)
+
## [1] "Intercept"                    "histology_LPA_vs_AIS"        
+## [3] "histology_MP_vs_AIS"          "histology_SOL_vs_AIS"        
+## [5] "subtype_invasive_vs_indolent"
+

Perceba que o DESeq2 retorna o contraste na seguinte +estrutura: +<nome da variável>_tratamento_vs_referência. Para +extrair os resultados da comparação de interesse, use a função +results e passe o contraste de interesse com o argumento +name:

+
DESeq2::results(dds, name = "subtype_invasive_vs_indolent")
+
## log2 fold change (MLE): subtype invasive vs indolent 
+## Wald test p-value: subtype invasive vs indolent 
+## DataFrame with 35628 rows and 6 columns
+##                   baseMean log2FoldChange     lfcSE      stat    pvalue
+##                  <numeric>      <numeric> <numeric> <numeric> <numeric>
+## ENSG00000000003 842.331003       1.507696  0.592114  2.546296 0.0108873
+## ENSG00000000005   0.815306      -0.668878  2.466598 -0.271174 0.7862571
+## ENSG00000000419 427.530483      -0.338197  0.166686 -2.028950 0.0424634
+## ENSG00000000457 408.875269       0.317035  0.341831  0.927461 0.3536872
+## ENSG00000000460 115.161825       0.674323  0.312095  2.160630 0.0307239
+## ...                    ...            ...       ...       ...       ...
+## ENSG00000287988   0.093669      -2.018418  5.132544 -0.393259  0.694128
+## ENSG00000288000   0.339414      -0.713262  5.167800 -0.138020  0.890224
+## ENSG00000288014   0.000000             NA        NA        NA        NA
+## ENSG00000288031   9.571927       0.442393  0.679384  0.651167  0.514938
+## ENSG00000288053   0.383422       2.895889  5.089498  0.568993  0.569361
+##                      padj
+##                 <numeric>
+## ENSG00000000003 0.0941317
+## ENSG00000000005        NA
+## ENSG00000000419 0.2147291
+## ENSG00000000457 0.6509532
+## ENSG00000000460 0.1763767
+## ...                   ...
+## ENSG00000287988        NA
+## ENSG00000288000        NA
+## ENSG00000288014        NA
+## ENSG00000288031  0.769868
+## ENSG00000288053        NA
+

Uma outra forma de extrair os contrastes é usando o argumento +contrast. Há diferentes formas de usar este argumento (ver +descrição da função ?results). Uma delas é passar um vetor +de caracter de tamanho 3, onde o primeiro elemento é a variável de +comparação, o segundo elemento é grupo correspondente ao tratamento e o +terceiro elemento é o grupo correspondente à referência:

+
# Extrair resultados
+res_dge <- DESeq2::results(dds, contrast = c("subtype", "invasive", "indolent"))
+
# MA-plot
+plotMA(res_dge)
+

+
# Transformar em dataframe
+res_dge <- as.data.frame(res_dge)
+

O dataframe res_dge contém os resultados da comparação +de interesse. O dataframe contém as seguintes informações:

+
    +
  • baseMean: média dos valores de contagens normalizados +para todas as amostras;
  • +
  • log2FoldChange: métrica que indica o aumento ou +diminuição da expressão gênica na comparação de interesse;
  • +
  • lfcSE: desvio padrão do log2FC;
  • +
  • pvalue: p-valor do teste;
  • +
  • padj: p-valor do teste ajustado.
  • +
+

Uma observação importante do resultado acima é que o +DESeq2 coloca valores NA para genes valores de +contagens baixos. Pode-se considerar que o p-valor para estes genes é 1 +ou próximo de 1 e, por isso, estes não são significativos.

+

O fold change é uma medida que indica o quanto que um +determinado gene (ou transcrito) teve sua expressão alterada em uma +determinada comparação. Para entendermos esta medida, vamos considerar o +seguinte exemplo:

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
GeneExpressão média normalizada nas amostras metastáticasExpressão média normalizada nas amostras não-invasivasFold Change (comparação metastático VS não-invasivo)Log2FoldChange
A10200.5-1
B501052.32
+

Se o intuito da nossa análise é comparar a expressão gênica entre as +amostras metastáticas e as não-invasivas, o fold change é a +razão entre a expressão média das amostras metastáticas +e a das amostras não-invasivas. A expressão média do gene A nas amostras +metastáticas é a metade daquela das amostras não invasivas; enquanto que +a expressão média do gene B é 5 vezes maior nas amostras metastáticas. +Dizemos, portanto, que o gene A está downregulado e o gene B +está upregulado nas nas amostras metastáticas. A fim de se +obter uma escala simétrica para os valores de fold change, é +comum transformá-los para a escala logaritmica de base 2. Perceba que, +se a nossa comparação fosse indolent-invasive, a referência +para a comparação seriam as amostras metastáticas e nossa a +interpretação seria o contrário: o gene A estaria upregulado e +o gene B estaria downregulado nas amostras não-invasivas.

+

O critério de identificação para os genes significativos é variável. +Entretanto, é imprescindível que a seleção dos genes diferencialmente +expressos leve em consideração um teste estatístico, como o teste +realizado pelo DESeq2. Assim, é necessário considerar o +p-valor corrigido do teste realizado, uma vez que realizamos milhares +testes (um para cada gene testado). Aqui, utilizaremos o critério +p-valor ajustado <= 0,05 para +idenficação dos genes diferencialmente expressos.

+
+

Representações gráficas do resultado da expressão diferencial

+

Podemos visualizar este resultado a partir de um volcano +plot. O volcano plot é um gráfico que relaciona o p-valor com o +log2 Fold Change. Com este gráfico, é fácil ter uma ideia geral sobre a +quantidade de genes downregulados e upregulados na +nossa análise.

+
library(dplyr)
+library(ggplot2)
+
+# Tratar os NA's: se houver NA na coluna 'padj', colocar 1. Criar coluna signif, onde identificamos os genes significativos (upregulados ou downregulados) e os genes não significativos
+res_dge <- res_dge %>% 
+  mutate(
+    padj = ifelse(is.na(padj), 1, padj),
+    signif = 
+      case_when(
+        padj <= 0.05 & log2FoldChange < 0 ~ "Downregulated",
+        padj <= 0.05 & log2FoldChange > 0 ~ "Upregulated",
+        padj > 0.05 ~ "Not significant"
+      )
+  )
+
+ggplot(res_dge, aes(x = log2FoldChange, y = -log10(padj), color = signif)) +
+  geom_point() +
+  scale_color_manual(values = c("Downregulated" = "blue", "Not significant" = "grey", "Upregulated" = "red"))
+

+

Vamos plotar o resultado da expressão diferencial de genes em um +heatmap. De forma análoga, podemos utilizar este gráfico para +representarmos o resultados das outras análises de expressão. Iremos +utilizar o pacote pheatmap, que possui uma interface +simples para a criação do gráfico. A vantagem deste pacote é +proporcionar a clusterização das amostras e dos genes de acordo com a +expressão.

+
library(pheatmap)
+
+load("./dados_curso/outputs/exp_diff/dds.RData")
+
+# Filtrar os genes diferencialmente expressos (padj <= 0.05) 
+res_dge <- subset(res_dge, padj <= 0.05)
+
+# Selecionar os genes DGE
+dge <- rownames(res_dge)
+
+# Obter tabela de expressão 
+exp_genes <- DESeq2::counts(dds, normalized = TRUE)
+
+# Desta tabela, verificar quais genes são DGE
+idx <- rownames(exp_genes) %in% dge
+exp_dge <- exp_genes[idx,]
+
+# Transformar valores de expressão em z-score
+exp_dge_z_score <- t(apply(exp_dge, 1, scale, center = T, scale = T))
+colnames(exp_dge_z_score) <- rownames(meta)
+
+# Criar coluna de anotação
+ann_col <- as.data.frame(colData(dds)[, c("subtype", "histology")])
+
+# Plotar gráfico
+pheatmap(exp_dge_z_score, show_rownames = F, annotation_col = ann_col, cluster_cols = F)
+

+

Pelo heatmap, podemos ver os genes diferencialmente expressos +segregam perfeitamente as amostras pelo subtipo do tumor.

+

Podemos então selecionar apenas os genes diferencialmente expressos e +salvá-los em um dataframe para a análise funcional posterior.

+
# Salvar
+save(res_dge, file = "./dados_curso/outputs/exp_diff/res_dge.RData")
+
+ +

Em resumo, identificamos 1447 genes diferencialmente expressos na +análise DGE.

+
+
+
+

Análise de expressão diferencial de transcritos (DTE)

+

A análise de expressão de transcritos é similar à análise DGE. +Utilizaremos os valores de contagens de transcritos, os quais foram +importados pelo tximport.

+
# Carregar dados de contagens de transcritos
+load("./dados_curso/outputs/tximport/txi_tx.RData")
+
+# Criar objeto DESeqDataSet
+dds_tx <- DESeqDataSetFromTximport(txi_tx,
+                                   colData = meta,
+                                   design = ~ histology + subtype)
+
+# Calcular fatores de normalização, estimar dispersão e aplicar modelo
+dds_tx <- DESeq(dds_tx)
+
# Obter resultados
+res_dte <- DESeq2::results(dds_tx, name = "subtype_invasive_vs_indolent")
+
# MA-plot
+plotMA(res_dte)
+

+
# Organizar resultado
+res_dte <- as.data.frame(res_dte)
+rownames(res_dte) <- gsub("\\.\\d+", "", rownames(res_dte))
+
+res_dte <- res_dte[complete.cases(res_dte),]
+
+# Salvar
+save(res_dte, file = "./dados_curso/outputs/exp_diff/res_dte.RData")
+
+ +

Um passo adicional é requerido na análise em nível de transcrito. É +necessário fazer a correção do p-valor de cada transcrito agrupando-os +por gene. Este passo será feito adiante.

+
+
+

Análise de uso diferencial e isoforma (DTU)

+

Assim como na análise DTE, para a análise DTU o nosso foco também +será no transcrito. Utilizaremos o pacote DRIMSeq, o qual +implementa um modelo estatístico diferente daquele usado pelo +DESeq2. Além disso, assim como na análise DTE, precisaremos +dar uma atenção especial à correção para múltiplos testes, processo +importante para a identificação dos transcritos significativos quanto ao +seu uso diferencial.

+

O fluxo de análise do DRIMSeq é um pouco diferente +daquele do DESeq2. Primeiramente, precisamos organizar a +tabela de counts, o dicionário de genes e transcritos.

+
library(DRIMSeq)
+
+# Carregar dados dicionário gene/transcrito
+load("./dados_curso/outputs/annotation/dict_gene_tx.RData")
+
+# Carregar valores de contagens normalizados
+load("./dados_curso/outputs/tximport/txi_tx_dtu.RData")
+
+# Organizar dataframe de contagens
+counts <- txi_tx_dtu$counts
+rownames(counts) <- gsub("\\.\\d+", "", rownames(counts))
+
+# Verificar se todos os transcritos da tabela de contagens estão representados no dicionário
+all(rownames(counts) %in% tx2gene$tx)
+
## [1] FALSE
+
# Alguns não estão, filtrar a tabela de contagens 
+counts <- counts[rownames(counts) %in% tx2gene$tx,]
+tx2gene <- tx2gene[match(rownames(counts), tx2gene$tx),]
+
+# Criar a coluna 'sample_id' no metadado (requerido pelo pacote)
+meta$sample_id <- rownames(meta)
+

Vamos juntar as informações do dicionário de genes e transcritos e a +tabela de counts em um único dataframe:

+
# Preparar dataframe com os valores de contagens de transcritos
+counts_drimseq <- data.frame(gene_id = tx2gene$gene, feature_id = tx2gene$tx, counts, stringsAsFactors = F)
+

Em seguida, vamos construir o objeto do DRIMSeq:

+
# Criar objeto DRIMSeq
+d <- dmDSdata(counts = counts_drimseq, samples = meta)
+

Nesta etapa, removemos os transcritos pouco expressos:

+
# Filtrar transcritos
+d <- dmFilter(d, 
+              min_samps_gene_expr = 20, min_samps_feature_expr = 20,
+              min_gene_expr = 10, min_feature_expr = 10)
+

Agora criamos a matriz modelo, com as variáveis a serem utilizadas na +regressão:

+
# Matriz modelo
+design_full <- model.matrix(~ histology + subtype, data = DRIMSeq::samples(d))
+
+colnames(design_full)
+
## [1] "(Intercept)"     "histologyLPA"    "histologyMP"     "histologySOL"   
+## [5] "subtypeinvasive"
+

Os próximos passos consistem em estimar a precisão (um parâmetro +utilizado para estimar a variabilidade das proporções de diferentes +transcritos de um gene), ajustar o modelo e testar a significância do +parâmetro para cada transcrito:

+
# Calcular precisão
+d <- dmPrecision(d, design = design_full, verbose = 1)
+
+# Ajustar modelo 
+d <- dmFit(d, design = design_full, verbose = 1)
+
+# Testar parâmetros
+d <- dmTest(d, coef = "subtypeinvasive")
+
# Obter as proporções de cada transcrito (isoforma) em cada amostra
+head(DRIMSeq::proportions(d))
+
# Obter os resultados em nível de gene
+res_dtu_gene <- DRIMSeq::results(d)
+
+# Obter os resultados em nível de transcrito
+res_dtu_tx <- DRIMSeq::results(d, level = "feature")
+
+# Salvar
+save(res_dtu_gene, res_dtu_tx, file = "./dados_curso/outputs/exp_diff/res_dtu.RData")
+
+ +
+
+

Correção para múltiplos testes em análises em nível de +transcrito

+

A correção de múltiplos testes pelos métodos convencionais, como a +correção de Benjamini & Hochberg, pode ser utilizada para análises +em nível de transcrito. Entretanto, estas não consideram o fato de que +há uma quantidade bastante variável de transcritos por genes, o que faz +com que haja uma penalização maior para genes com poucos transcritos. +Por isso, a correção para múltiplos testes de transcritos deve ser +realizada gene a gene. Para esta tarefa, dispomos da metodologia +implementada no pacote stageR, +que realiza os seguintes passos:

+
    +
  • Screening: os genes são selecionados com base em um p-valor +que sumariza todas as hipóteses (transcritos) para aquele gene. Nesta +etapa, o p-valor agreagado é ajustado;
  • +
  • Confirmação: Apenas os genes que passam no nível de +significância anterior são escolhidos. Para estes genes, todas as +hipóteses são avaliadas separadamente.
  • +
+
+

Correção para DTE

+
library(stageR)
+
+# Verificar quantos transcritos não estão anotados para um gene
+sum(!(rownames(res_dte) %in% tx2gene$tx))
+
## [1] 4060
+
# Remover os transcritos que não estão anotados para nenhum gene
+res_dte <- res_dte[rownames(res_dte) %in% tx2gene$tx,]
+
+# Etapa de screening:
+pScreen <- res_dte$padj
+names(pScreen) <- tx2gene$gene[match(rownames(res_dte), tx2gene$tx)]
+
+# Etapa de confirmação
+pConfirmationTx <- matrix(res_dte$pvalue, ncol = 1)
+rownames(pConfirmationTx) <- rownames(res_dte)
+
+# Criar objeto stageR
+stageRObj <- stageRTx(pScreen = pScreen, 
+                      pConfirmation = pConfirmationTx, 
+                      tx2gene = data.frame(transcripts = rownames(res_dte), 
+                                           genes = tx2gene$gene[match(rownames(res_dte), tx2gene$tx)], 
+                                           stringsAsFactors = F), 
+                      pScreenAdjusted = T)
+
+# Corrigir p-valores para DTE
+stageRObj <- stageWiseAdjustment(object = stageRObj, method = "dte", alpha = 0.05)
+
+# Obter resultados
+padj <- getAdjustedPValues(stageRObj, order = TRUE, onlySignificantGenes = T)
+res_dte_ajustado <- padj[!padj$transcript == 0,]
+
+save(res_dte_ajustado, file = "./dados_curso/outputs/exp_diff/res_dte_ajustado.RData")
+
+ +
+
+

Correção para DTU

+
# Verificar quantos transcritos não estão anotados para um gene
+sum(!(res_dtu_tx$feature_id %in% tx2gene$tx))
+
## [1] 0
+
# Neste caso, todos estão anotados para um gene
+
+# Etapa de screening:
+pScreen <- res_dtu_tx$adj_pvalue
+names(pScreen) <- res_dtu_tx$gene_id
+
+# Etapa de confirmação
+pConfirmationTx <- matrix(res_dtu_tx$pvalue, ncol = 1)
+rownames(pConfirmationTx) <- res_dtu_tx$feature_id
+
+# Criar objeto stageR
+stageRObj <- stageRTx(pScreen = pScreen, 
+                      pConfirmation = pConfirmationTx, 
+                      tx2gene = data.frame(transcripts = res_dtu_tx$feature_id, 
+                                           genes = res_dtu_tx$gene_id, 
+                                           stringsAsFactors = F), 
+                      pScreenAdjusted = T)
+
+# Corrigir p-valores para DTE
+stageRObj <- stageWiseAdjustment(object = stageRObj, method = "dtu", alpha = 0.05)
+
+# Obter resultados
+padj <- getAdjustedPValues(stageRObj, order = TRUE, onlySignificantGenes = T)
+res_dtu_ajustado <- padj[!padj$transcript == 0,]
+
+save(res_dtu_ajustado, file = "./dados_curso/outputs/exp_diff/res_dtu_ajustado.RData")
+
+ +
+
+
+

Resumo

+

Em resumo, as três análises (DGE, DTE e DTU), separadamente, +proporcionaram a seguinte quantidade de genes significativos:

+
# DGE
+nrow(res_dge)
+
## [1] 1447
+
# DTE
+length(unique(res_dte_ajustado$geneID))
+
## [1] 564
+
# DTU
+length(unique(res_dtu_ajustado$geneID))
+
## [1] 28
+

Ao todo, temos a seguinte quantidade de genes alterados (em pelo +menos uma das abordagens):

+
length(unique(c(rownames(res_dge), res_dte_ajustado$geneID, res_dtu_ajustado$geneID)))
+
## [1] 1711
+

Em comum às três análises, temos a seguinte quantidade de genes +alterados:

+
library(UpSetR)
+
+genes_alterados <- list(DGE = unique(rownames(res_dge)), 
+                        DTE = unique(res_dte_ajustado$geneID),
+                        DTU = unique(res_dtu_ajustado$geneID))
+
+upset(fromList(genes_alterados), order.by = "freq")
+

+
+
+
+

Análise funcional

+

Em geral, a análise de expressão diferencial é seguida por outras +análises as quais têm o intuito de buscar interpretações funcionais para +o conjunto de genes alterados. Para simplificarmos nosso fluxograma, +iremos utilizar apenas os genes DGE (aqueles identificados como +significativos na análise de expressão diferencial de genes). +Entretanto, é possível obter uma lista de genes que combine os genes +alterados nas três abordagens utlizadas (DGE, DTE e DTU) e realizar as +análises funcionais abordadas neste tutorial.

+
+

Conversão de identificadores

+

Na bioinformática, é comum utilizarmos diferentes bancos de dados +para fazermos nossas análises. Com isto, frequentemente temos a +necessidade de relacionarmos genes, transcritos, proteinas, metabólitos +entre estas diferentes fontes. Vários pacotes no R tem a finalidade de +fazer a interconversão entre os diferentes identificadores de bancos de +dados. Neste exemplo, usaremos o pacote biomaRt +a fim de buscarmos outras informações sobre os genes diferencialmente +expressos.

+

Iremos buscar o HGNC Symbol para cada gene DGE:

+
library(biomaRt)
+
+# Importar lista de genes diferencialmente expressos
+load("./dados_curso/outputs/exp_diff/res_dge.RData")
+genes_ensembl <- rownames(res_dge)
+
+# Use a função listMart() para ver quais canais estão disponíveis (use 'ENSEMBL_MART_ENSEMBL');
+listMarts()
+
##                biomart                version
+## 1 ENSEMBL_MART_ENSEMBL      Ensembl Genes 107
+## 2   ENSEMBL_MART_MOUSE      Mouse strains 107
+## 3     ENSEMBL_MART_SNP  Ensembl Variation 107
+## 4 ENSEMBL_MART_FUNCGEN Ensembl Regulation 107
+
# Use a função useMart() para setar o canal em um objeto (este servirá como conexão aos servidores do ENSEMBL)
+ensembl <- useMart("ENSEMBL_MART_ENSEMBL")
+
+# Com a função listDatasets(), verifique o identificador para o dataset de humanos;
+datasets <- listDatasets(ensembl)
+
+# Com a função useDataset(), estabeleça o organismo para a busca
+ensembl <- useDataset(dataset = "hsapiens_gene_ensembl", mart = ensembl)
+
+# Obtenha o atributo de interesse, ou seja, para qual(is) identificador(es) se deseja fazer o mapeamento. Use a função listAttributes().
+atributos <- listAttributes(ensembl)
+
+# Obtenha os filtros, ou seja, qual identificador está sendo usado para fazer o mapeamento. Neste caso, é o ensembl_gene_id.
+filtros <- listFilters(ensembl)
+
+# Use a função getBM() para obter o mapeamento. Podemos escolher quantos atributos (identificadores) desejarmos
+ids <- getBM(attributes = c("hgnc_symbol", "ensembl_gene_id", "ensembl_peptide_id", "entrezgene_id"),
+             filters = "ensembl_gene_id",
+             values = genes_ensembl,
+             mart = ensembl)
+

Quando fazemos a conversão de um banco para outro, é comum perdermos +alguma informação. Por exemplo, veja que para o gene “ENSG00000272410”, +não há um identificador HGNC Symbol correspondente. Vamos obter uma +lista contendo apenas HGNC Symbols e os ENTREZ ids válidos.

+
# Selecionar hgnc symbol e remover observações faltantes
+ids$hgnc_symbol <- ifelse(ids$hgnc_symbol == "", NA, ids$hgnc_symbol)
+genes_hgnc <- unique(ids$hgnc_symbol)
+
+# Selecionar entrez ids e remover observações faltantes
+genes_entrez <- unique(ids$entrezgene_id)
+genes_entrez <- genes_entrez[!is.na(genes_entrez)]
+
+
+

Redes de interação proteína-proteína (PPI)

+

O processo de montar uma rede de interação proteína-proteína consiste +de, partindo de uma lista de genes, por exemplo os genes +diferencialmente expressos que encontramos, buscar suas proteínas +correspondentes no banco de dados STRINGdb. Este banco cataloga e +classifica interações proteicas de acordo com diferentes metodologias, +desde ensaios bioquímicas à análises de co-ocorrência na literatura.

+

Para obtermos as informações do STRING, iremos usar sua API. Esta +interface possui métodos para a obtenção dos dados disponíveis no banco +(Para saber mais sobre cada método, visite https://string-db.org/help/api/).

+

O primeiro método a ser usado é get_string_ids, que +irá mapear uma lista de genes para os identificadores próprios do STRING +(Para saber sobre os parâmetros deste método, visite https://string-db.org/cgi/help.pl?subpage=api%23mapping-identifiers).

+
# Para fazer este mapeamento, quando submetemos uma requisição à API do string programaticamente, 
+# temos que concatenar os identificadores e separá-los com o símbolo "%0d".
+genes_hgnc_concatenado <- paste0(genes_hgnc, collapse = "%0d") 
+
+# Fazer a solicitação a API do STRING
+req <- RCurl::postForm(
+  "https://string-db.org/api/tsv/get_string_ids",
+  identifiers = genes_hgnc_concatenado,
+  echo_query = "1",
+  species = "9606"
+)
+map_ids <- read.table(text = req, sep = "\t", header = T, quote = "")
+

Agora, de posse dos identificadores do STRINGdb, vamos usá-los para +obtermos a rede de interação entre estes genes. Usaremos o método network +para obter a rede de interação.

+
#Concatenar os identificadores do string para a requisição
+genes_string_concatenado <- paste0(unique(map_ids$stringId), collapse = "%0d") 
+
+# Requisição para o método 'network'
+req2 <- RCurl::postForm(
+  "https://string-db.org/api/tsv/network",
+  identifiers = genes_string_concatenado, # identificadores do stringID, obtidos na etapa anterior
+  required_core = "0", # score mínimo para cada interação
+  species     = "9606" # espécie (H. sapiens)
+)
+int_network <- read.table(text = req2, sep = "\t", header = T)
+int_network <- unique(int_network)
+

O dataframe int_network possui as informações sobre as +interações entre as proteínas buscadas. A inferência das interações +entre a proteína A e a proteína B é obtida de diferentes fontes. Da +coluna nscore à coluna tscore estão as fontes +e o escore para cada interação. Assim, temos:

+
    +
  • stringId_A: Identificador STRING para a proteína +A;
  • +
  • stringId_B: Identificador STRING para a proteína +B;
  • +
  • preferredName_A: Nome da proteína A;
  • +
  • preferredName_B: Nome da proteína B;
  • +
  • ncbiTaxonId: Identificador do NCBI para o taxon;
  • +
  • score: escore combinado;
  • +
  • nscore: escore para evidências de vizinhança +gênica;
  • +
  • fscore: escore para fusão gênica;
  • +
  • pscore: escore para perfil filogenético;
  • +
  • ascore: escore para coexpressão;
  • +
  • escore: escore para evidências experimentais;
  • +
  • dscore: escore para evidências contidas em bancos de +dados;
  • +
  • tscore: escore para evidências provenientes de +textmining.
  • +
+

A seguir temos uma função para selecionarmos as fontes de interação e +calcularmos o escore combinado entre elas:

+
# Função para combinar os scores de acordo com o algoritmo usado pelo STRING
+combinescores <- function(dat, evidences = "all", confLevel = 0.4) {
+  if(evidences[1] == "all"){
+    edat<-dat[,-c(1,2,ncol(dat))]
+  } else {
+    if(!all(evidences%in%colnames(dat))){
+      stop("NOTE: one or more 'evidences' not listed in 'dat' colnames!")
+    }
+    edat<-dat[,evidences]
+  }
+  if (any(edat > 1)) {
+    edat <- edat/1000
+  }
+  edat<-1-edat
+  sc<- apply(X = edat, MARGIN = 1, FUN = function(x) 1-prod(x))
+  dat <- cbind(dat[,c(1,2)],combined_score = sc)
+  idx <- dat$combined_score >= confLevel
+  dat <-dat[idx,]
+  return(dat)
+}
+

Nossa rede de interação será baseada nas seguintes fontes: evidências +de co-expressão, evidências experimentais e evidências de bancos de +dados. Iremos combinar os escores destas 3 fontes e escolher as +interações com escore combinado maior que 0,9.

+
# Escolher canais, combinar escore e filtrar escore combinado
+int_network <- combinescores(int_network, evidences = c("ascore", "escore", "dscore"), confLevel = 0.9)
+

A seguir, iremos preprocessar a rede criada e plotá-la com o pacote +RedeR:

+
library(igraph)
+library(RedeR)
+
+# Remover o identificador de espécie em cada ENSP
+int_network$stringId_A <- substring(int_network$stringId_A, 6, 1000)
+int_network$stringId_B <- substring(int_network$stringId_B, 6, 1000)
+
+# Filtrar a rede, mantendo apenas os ENSP que estão presentes no nosso dataframe inicial
+idx1 <- int_network$stringId_A %in% ids$ensembl_peptide_id
+idx2 <- int_network$stringId_B %in% ids$ensembl_peptide_id
+int_network <- int_network[idx1 & idx2,]
+
+# Manter somente os nomes dos genes na tabela de interação
+int_network$gene_name_A <- ids$hgnc_symbol[match(int_network$stringId_A, ids$ensembl_peptide_id)]
+int_network$gene_name_B <- ids$hgnc_symbol[match(int_network$stringId_B, ids$ensembl_peptide_id)]
+int_network <- int_network[, c("gene_name_A", "gene_name_B", "combined_score")]
+
+# Criar objeto igraph. Redes PPI são não direcionadas, portanto 'directed = FALSE'.
+g <- graph_from_data_frame(int_network, directed = FALSE)
+
+# Montar dataframe de anotação para colorir os nós
+ann <- data.frame(ensembl_gene_id = rownames(res_dge),
+                  log2FC = res_dge$log2FoldChange,
+                  hgnc_symbol = ids$hgnc_symbol[match(rownames(res_dge), ids$ensembl_gene_id)])
+
+# Obter a tabela apenas para os genes contidos na rede
+ann <- ann[ann$hgnc_symbol %in% V(g)$name,]
+
+# Mapear dataframe de anotação para a rede
+g <- att.mapv(g, dat = ann, refcol = 3)
+
+# Atribuir valores de log2FC para as cores dos nós
+g <- att.setv(g, from = "log2FC", to = "nodeColor", breaks = seq(-3,3,0.4), pal = 2) 
+
+# Definir outros atributos do grafo
+V(g)$nodeLineWidth <- 2
+V(g)$nodeFontSize <- 16
+
+# att.sete() imprime atributos validos do RedeR
+E(g)$edgeColor <- "grey50"
+E(g)$edgeWidth <- 2
+
# Abrir porta para o RedeR e adicionar o grafo
+rdp <- RedPort()
+calld(rdp)
+addGraph(rdp, g)
+
+# Adicionar legenda
+scl <- g$legNodeColor$scale
+leg <- g$legNodeColor$legend
+addLegend.color(rdp, colvec = scl, labvec = leg, title = "log2FC")
+
+ +

Rede de interação proteína-proteína criada a partir +dos genes diferencialmente expressos.

+
+
+
+

Análise de enriquecimento funcional

+

A análise de enriquecimento funcional tem como finalidade ajudar o +pesquisador a identificar vias biológicas chaves as quais podem estar +alteradas na condição de interesse. Tomando como base a nossa lista de +genes diferencialmente expressos nas amostras tumorais, a análise de +enriquecimento irá verificar se há um número muito maior de genes +alterados em uma determinada via biológica do que seria esperado ao +acaso.

+

Com isso, é necessário tomar por base algum banco de dados que +contenha informações sobre vias biológicas, como o KEGG Pathways e o Gene Ontology.

+

Para a análise de enriquecimento, iremos utilizar o pacote clusterProfiler.

+

Primeiramente, faremos o enriquecimento funcional com base no KEGG +Pathways. Utlizaremos a função enrichKEGG(). Esta função +requer como entrada uma lista de ENTREZ ids e o identificador do +organismo no KEGG (ver este link). +Escolheremos as vias significativas aquelas com qvalor < 0,05.

+
library(clusterProfiler)
+
+# Enriquecimento
+kegg_enrich <- enrichKEGG(
+  gene = genes_entrez,
+  organism = "hsa",
+  keyType = "ncbi-geneid",
+  pAdjustMethod = "BH",
+)
+
+# Obter dataframe com os resultados
+df_kegg <- kegg_enrich@result
+df_kegg <- df_kegg[df_kegg$qvalue < 0.05,]
+
+ +

Agora, façamos o enriquecimento funcional com base no Gene Ontology. +A ontologia utilizada para o enriquecimento será a de processos +biológicos (biological processes, argumento +ont = "BP").

+
go_enrich <- enrichGO(
+  gene = genes_ensembl,
+  OrgDb = "org.Hs.eg.db",
+  ont = "BP",
+  pAdjustMethod = "BH",
+  keyType = 'ENSEMBL'
+)
+
+df_go <- go_enrich@result
+df_go <- df_go[df_go$qvalue <= 0.05,]
+
+ +

Além disso, o clusterProfiler dispõe de alguns gráficos +para visualização do enriquecimento.

+
# Barplot - KEGG
+barplot(kegg_enrich,
+        drop = TRUE, 
+        showCategory = 10, 
+        title = "KEGG Pathways")
+

+
# Barplot - GO
+barplot(go_enrich,
+        drop = TRUE, 
+        showCategory = 10, 
+        title = "GO Biological Pathways")
+

+
# Dotplot - KEGG
+dotplot(kegg_enrich)
+

+
# Dotplot - GO
+dotplot(go_enrich, showCategory = 20)
+

+

A análise com o KEGG resultou em apenas 4 vias enriquecidas: Cell +cycle, ECM-receptor interaction, Protein digestion and +absorption e Focal adhesion. Este enriquecimento sugere +que o tumor metastático possui alterações na interação do tumor com a +matriz extracelular e no ciclo celular. O resultado do Gene Ontology +apresenta uma quantidade maior de processos biológicos enriquecidos, +muitos deles relacionados também ao ciclo celular e à matriz +extracelular.

+

É comum obtermos uma lista extensa de processos biológicos +enriquecidos. Para que possamos ter uma ideia mais precisa sobre quais +processos biológicos se sobressaem, agrupamos estes por similaridade +semântica no Gene Ontology e e verificamos quais tem uma proporção maior +de genes diferencialmente expressos.

+
library(dplyr)
+library(clusterProfiler)
+library(TreeAndLeaf)
+library(RedeR)
+library(igraph)
+library(RColorBrewer)
+library(GOSemSim)
+library(classInt)
+library(org.Hs.eg.db)
+
+# Obter a lista de processos enriquecidos
+terms <- df_go$ID
+
+# Criar objeto para análise de similaridade de ontologias
+semData <- godata(ont = "BP")
+
+# Proporção de genes diferencialmente expressos em relação ao total de genes da via
+df_go$path_length <- as.integer(sapply(strsplit(df_go$GeneRatio, "/"), "[", 2))
+df_go$ratio <- df_go$Count / df_go$path_length
+
+# Calcular similaridade semântica entre os termos
+mSim <- mgoSim(terms, terms, semData = semData, measure = "Wang", combine = NULL)
+
+# Organizando tamanho dos nós
+size <- df_go$Count
+aux <- sort(unique(size))
+names(aux) <- as.character(1:length(aux))
+sizeRanks <- as.factor(names(aux[match(size, aux)]))
+sizeIntervals <- 7
+sizeMultiplier <- 5
+sizeBase <- 50
+df_go$size <- (sizeBase + (as.numeric(sizeRanks) * sizeMultiplier))
+
+# Clusterização dos termos
+hc <- hclust(dist(mSim), "average")
+
+# Criar objeto TreeAndLeaf
+tal <- treeAndLeaf(hc)
+
+# Setar atributos do grafo
+tal <- att.mapv(g = tal, dat = df_go, refcol = 1)
+pal <- brewer.pal(9, "OrRd")
+tal <- att.setv(g = tal, from = "Description", to = "nodeAlias")
+tal <- att.setv(
+  g = tal,
+  from = "ratio",
+  to = "nodeColor",
+  cols = pal,
+  nquant = 5
+)
+tal <- att.setv(
+  g = tal,
+  from = "size",
+  to = "nodeSize",
+  xlim = c((sizeBase + sizeMultiplier),
+           (
+             sizeBase + (sizeMultiplier * sizeIntervals)
+           ),
+           sizeMultiplier),
+  nquant = sizeIntervals
+)
+tal <-
+  att.addv(tal,
+           "nodeFontSize",
+           value = 15,
+           index = V(tal)$isLeaf)
+tal <- att.adde(tal, "edgeWidth", value = 3)
+tal <- att.adde(tal, "edgeColor", value = "gray80")
+tal <- att.addv(tal, "nodeLineColor", value = "gray80")
+
# Inicializar o RedeR
+rdp <- RedPort()
+calld(rdp)
+addGraph(obj = rdp, g = tal)
+
+addLegend.color(obj = rdp, tal, title = "Proportion", 
+                position = "topright")
+addLegend.size(obj = rdp, tal, title = "Counts",
+               position = "bottomright")
+
+ +

Rede de termos enriquecidos, onde cada nó da rede +representa um termo enriquecido. Por meio desta visualização, podemos +verificar a relação de similaridade entre os processos biológicos, de +acordo com o número de genes em comum que eles compartilham. Ainda, +podemos elencar alguns processos biológicos que se sobressaem em relação +aos demais, em função do maior número e da maior proporção de genes +diferencialmente expressos mapeados. Quanto maior o nó e quanto mais +escuro, mais importante aquele termo será.

+
+
+
+

Redes de co-expressão

+

As redes de co-expressão são redes biológicas que representam a +correlação da expressão de pares de genes. Diversos algoritmos podem ser +utilizados para calcular a co-expressão de uma lista de genes.

+
+

CEMiTool

+

O pacote do Bioconductor CEMiTool +(Co-Expression Modules identification Tool) fornece aos seus usuários +uma maneira simples de realizar análises de co-expressão, encontrando +módulos gênicos que representam a correlação da expressão entre os +genes.

+

Além disso, o CEMiTool permite integrar outras informações, como vias +metabólicas do KEGG, para se realizar um enriquecimento funcional e +interações da rede proteína-proteína dos genes a serem analisados, +permitindo a construção de uma rede que ilustre os resultados da +co-expressão.

+
+
+

Ler dados de expressão

+

Primeiro, iremos ler o dado de expressão dos genes diferencialmente +expressos e as informações da tabela de metadados, que inclui os grupos +ou contrastes.

+
library(CEMiTool)
+library(DESeq2)
+library(dplyr)
+library(biomaRt)
+library(org.Hs.eg.db)
+
+# Carregar dado de expressão
+load("./dados_curso/outputs/exp_diff/dds.RData")
+
+# Carregar genes DGE
+load("./dados_curso/outputs/exp_diff/res_dge.RData")
+
+# Importar metadado
+meta <- read.csv("./dados_curso/inputs/metadata/metadata.csv")
+meta <- meta[, c("run", "subtype")]
+ 
+# Obter expressão normalizada e filtrar genes DGE
+vst <- vst(dds)
+counts <- assay(vst)
+counts <- as.data.frame(counts[rownames(counts) %in% rownames(res_dge),])
+
+
+

Traduzir identificadores

+
ensembl <- useMart("ENSEMBL_MART_ENSEMBL")
+ensembl <- useDataset(dataset = "hsapiens_gene_ensembl", mart = ensembl)
+ids <- getBM(attributes = c("hgnc_symbol", "ensembl_gene_id", "ensembl_peptide_id", "entrezgene_id"),
+             filters = "ensembl_gene_id",
+             values = rownames(counts),
+             mart = ensembl)
+
+
+

Adquirir vias do KEGG

+

Para isso, usaremos o org.Hs.db, especificamente o org.Hs.egPATH2EG, +que possui uma lista de vias do KEGG e os Entrez gene IDs associados a +cada, que podemos então cruzar com nosso dado de expressão.

+
kegg_to_entrez <- as.data.frame(org.Hs.egPATH2EG)
+
+ids$entrezgene_id <- as.character(ids$entrezgene_id)
+kegg_to_symbol <- merge(ids, kegg_to_entrez, by.x = "entrezgene_id", by.y = "gene_id")
+kegg_to_symbol <- unique(kegg_to_symbol)
+
+save(kegg_to_symbol, file="./dados_curso/outputs/cea/pathways_for_cea.RData")
+
+
+

Adquirir interações PPI

+
# Para fazer este mapeamento, quando submetemos uma requisição à API do string programaticamente, 
+# temos que concatenar os identificadores e separá-los com o símbolo "%0d".
+genes_hgnc_concatenado <- paste0(ids$hgnc_symbol, collapse = "%0d") 
+
+# Fazer a solicitação a API do STRING
+req <- RCurl::postForm(
+  "https://string-db.org/api/tsv/get_string_ids",
+  identifiers = genes_hgnc_concatenado,
+  echo_query = "1",
+  species = "9606"
+)
+map_ids <- read.table(text = req, sep = "\t", header = T, quote = "")
+
+# Função para combinar os scores de acordo com o algoritmo usado pelo STRING
+combinescores <- function(dat, evidences = "all", confLevel = 0.4) {
+  if(evidences[1] == "all"){
+    edat<-dat[,-c(1,2,ncol(dat))]
+  } else {
+    if(!all(evidences%in%colnames(dat))){
+      stop("NOTE: one or more 'evidences' not listed in 'dat' colnames!")
+    }
+    edat<-dat[,evidences]
+  }
+  if (any(edat > 1)) {
+    edat <- edat/1000
+  }
+  edat<-1-edat
+  sc<- apply(X = edat, MARGIN = 1, FUN = function(x) 1-prod(x))
+  dat <- cbind(dat[,c(1,2)],combined_score = sc)
+  idx <- dat$combined_score >= confLevel
+  dat <-dat[idx,]
+  return(dat)
+}
+
+# Concatenar os identificadores do string para a requisição
+genes_string_concatenado <- paste0(unique(map_ids$stringId), collapse = "%0d") 
+
+# Requisição para o método 'network'
+req2 <- RCurl::postForm(
+  "https://string-db.org/api/tsv/network",
+  identifiers = genes_string_concatenado, # identificadores do stringID, obtidos na etapa anterior
+  required_core = "0", # score mínimo para cada interação
+  species     = "9606" # espécie (H. sapiens)
+)
+int_network <- read.table(text = req2, sep = "\t", header = T)
+int_network <- unique(int_network)
+int_network <- combinescores(int_network, evidences = c("ascore", "escore", "dscore"), confLevel = 0.9)
+
+# Remover o identificador de espécie em cada ENSP
+int_network$stringId_A <- substring(int_network$stringId_A, 6, 1000)
+int_network$stringId_B <- substring(int_network$stringId_B, 6, 1000)
+
+# Filtrar a rede, mantendo apenas os ENSP que estão presentes no nosso dataframe inicial
+idx1 <- int_network$stringId_A %in% ids$ensembl_peptide_id
+idx2 <- int_network$stringId_B %in% ids$ensembl_peptide_id
+int_network <- int_network[idx1 & idx2,]
+
+# Manter somente os nomes dos genes na tabela de interação
+int_network$ENSG_A <- ids$ensembl_gene_id[match(int_network$stringId_A, ids$ensembl_peptide_id)]
+int_network$ENSG_B <- ids$ensembl_gene_id[match(int_network$stringId_B, ids$ensembl_peptide_id)]
+int_network <- int_network[, c("ENSG_A", "ENSG_B")]
+
+save(int_network, file="./dados_curso/outputs/cea/network_for_cea.RData")
+
+
+

Rodar o CEMiTool

+

A função cemitool() é a função mestra do pacote, é por +meio dela que iremos obter o objeto com os módulos de co-expressão e as +figuras. Para isso, adicionaremos, é claro, nosso dado de expressão, mas +também nossos contrastes - especificando em qual coluna está o nome de +cada amostra (Run) e o nome dos contrastes (subtype) -, nossas vias +metabólicas, e nossas interações.

+
load("./dados_curso/outputs/cea/network_for_cea.RData")
+load("./dados_curso/outputs/cea/pathways_for_cea.RData")
+paths <- unique(kegg_to_symbol[, c("path_id", "ensembl_gene_id")])
+paths <- setNames(paths, c("term", "gene"))
+
+cem <-
+  cemitool(
+    counts,
+    annot = meta,
+    sample_name_column = "run",
+    class_column = "subtype",
+    paths,
+    interactions = int_network,
+    filter = TRUE,
+    plot = TRUE,
+    verbose = TRUE
+  )
+
## pickSoftThreshold: will use block size 135.
+##  pickSoftThreshold: calculating connectivity for given powers...
+##    ..working on genes 1 through 135 of 135
+##    Power SFT.R.sq  slope truncated.R.sq mean.k. median.k. max.k. Density
+## 1      1    0.828  1.330          0.808  57.600    60.600  80.60 0.43000
+## 2      2    0.195  0.213          0.172  31.900    31.800  55.90 0.23800
+## 3      3    0.506 -0.257          0.721  20.000    18.300  42.30 0.14900
+## 4      4    0.602 -0.607          0.618  13.500    11.200  33.80 0.10100
+## 5      5    0.743 -0.814          0.771   9.620     7.240  28.00 0.07180
+## 6      6    0.818 -0.882          0.818   7.140     4.710  23.70 0.05330
+## 7      7    0.846 -0.972          0.816   5.480     3.250  20.50 0.04090
+## 8      8    0.898 -0.993          0.875   4.310     2.330  17.90 0.03220
+## 9      9    0.821 -1.070          0.777   3.470     1.660  15.90 0.02590
+## 10    10    0.841 -1.100          0.798   2.850     1.230  14.20 0.02120
+## 11    12    0.869 -1.100          0.832   2.000     0.694  11.50 0.01490
+## 12    14    0.860 -1.120          0.821   1.470     0.397   9.59 0.01100
+## 13    16    0.837 -1.100          0.791   1.120     0.258   8.09 0.00839
+## 14    18    0.885 -1.130          0.853   0.884     0.162   7.11 0.00660
+## 15    20    0.942 -1.090          0.927   0.711     0.108   6.32 0.00531
+##    Centralization Heterogeneity
+## 1          0.1750         0.261
+## 2          0.1820         0.423
+## 3          0.1690         0.552
+## 4          0.1540         0.665
+## 5          0.1390         0.769
+## 6          0.1260         0.865
+## 7          0.1140         0.955
+## 8          0.1030         1.040
+## 9          0.0938         1.120
+## 10         0.0857         1.200
+## 11         0.0722         1.340
+## 12         0.0615         1.470
+## 13         0.0528         1.600
+## 14         0.0472         1.710
+## 15         0.0425         1.820
+## ..connectivity..
+## ..matrix multiplication (system BLAS)..
+## ..normalization..
+## ..done.
+##  ..cutHeight not given, setting it to 0.991  ===>  99% of the (truncated) height range in dendro.
+##  ..done.
+##  mergeCloseModules: Merging modules whose distance is less than 0.2
+##  mergeCloseModules: less than two proper modules.
+##   ..color levels are 0, 1
+##   ..there is nothing to merge.
+##    Calculating new MEs...
+
+
+

Investigação inicial do resultado

+

Primeiro, podemos ver quantos módulos foram encontrados com a função +nmodules(), e também alguns dos genes que compoem cada +módulo através da função module_genes().

+
nmodules(cem)
+
## [1] 2
+
head(module_genes(cem))
+
##             genes modules
+## 1 ENSG00000198786      M1
+## 2 ENSG00000168542      M1
+## 3 ENSG00000164692      M1
+## 4 ENSG00000103811      M1
+## 5 ENSG00000198695      M1
+## 6 ENSG00000212907      M1
+

Podemos também ver quais genes possuem a maior conectividade.

+
n <- 10
+hubs <- get_hubs(cem, n)
+hubs
+
## $M1
+## ENSG00000148848 ENSG00000151388 ENSG00000204262 ENSG00000168542 ENSG00000099994 
+##        23.71241        21.85683        21.34914        20.49144        20.11550 
+## ENSG00000133110 ENSG00000171848 ENSG00000122861 ENSG00000137573 ENSG00000164692 
+##        20.09753        19.09620        18.87951        18.45229        18.09585 
+## 
+## $Not.Correlated
+## ENSG00000067048 ENSG00000129824 ENSG00000114374 ENSG00000275302 ENSG00000125538 
+##      1.65134593      1.61257353      1.57913458      0.28989405      0.28487654 
+## ENSG00000171346 ENSG00000215030 ENSG00000275385 ENSG00000184564 ENSG00000171557 
+##      0.10376992      0.09397441      0.07870171      0.04399561      0.01522507
+
+
+

Enriquecimento dos módulos

+

Como fornecemos as informações dos contrastes, a função cemitool +também realizou um gene set enrichment analysis, usando a +função do pacote fgsea. A figura associada a esse resultado +possui um círculo em cada módulo e em cada contraste, com a intensidade +e o tamanho de cada círculo correspondendo ao Score de enriquecimento +normalizado (NES), que é o score de enriquecimento para o módulo em cada +classe normalizado pelo número de genes do módulo.

+
# generate heatmap of gene set enrichment analysis
+show_plot(cem, "gsea")
+
## $enrichment_plot
+

+
+
+

Visualizar padrões de expressão nos módulos

+

Também podemos visualizar o padrão de expressão de cada gene em cada +módulo.

+
# plot gene expression within each module
+plots <- show_plot(cem, "profile")
+plots[1]
+
## $M1
+

+
+
+

Over-representation analysis

+

A função cemitool também determina se as vias metabólicas estão +associadas com os módulos através de uma over-representation +analysis.

+
plots <- show_plot(cem, "ora")
+plots[1]
+
## $M1
+## $M1$pl
+

+
## 
+## $M1$numsig
+## [1] 2
+
+
+

Interações

+

E, dado que fornecemos a informação das interações entre nossos +genes, também podemos gerar a imagem de uma rede que combina a +informação das interações junto aos resultados da análise de +co-expressão.

+
plots <- show_plot(cem, "interaction") 
+plots[1]
+
## $M1
+

+
+
+

Gerando relatório

+

Todos os resultados encontrados pelo pacote CEMiTool na nossa +análise, além de todos os parâmetros que utilizamos, podem ser +facilmente salvos e compartilhados através de um relatório HTML, que se +gera com a função generate_report(). Tente ir ao diretório escolhido +abaixo e abrir o arquivo HTML com seu navegador!

+
# Cria relatorio do CEMiTool em HTML no diretório abaixo
+# force = TRUE sobrescreve o reporte previamente criado
+generate_report(cem, directory = "./dados_curso/outputs/cea/cemitool_report/", force = TRUE)
+
+
+
+

Transcriptograma

+

o Transcriptograma é uma metodologia de Biologia de Sistemas que tem +como objetivo identificar grupos de genes alterados em conjunto. Nesta +metodologia, se projeta a expressão gênica sobre uma lista de proteínas +ordenadas de tal forma que a probabilidade de que duas delas participem +de uma mesma via biológica decresce com o quadrado da distância entre +elas.

+

Esta metodologia está implementada no pacote transcriptogramer. +O pacote fornece diferentes ordenamentos de proteínas de humanos com +base no interatoma do STRING.

+

Primeiramente, com o pacote biomaRt, vamos obter um +dicionário relacionando os Ensembl Gene ID com os STRING IDS.

+
library(biomaRt)
+library(DESeq2)
+library(edgeR)
+
+# Obter tabela de expressão normalizada
+load("./dados_curso/outputs/tximport/txi_gene.RData")
+
+# Filtrar genes com baixos valores de contagens
+counts <- txi_gene$counts
+cpm <- cpm(counts)
+keep <- rowSums(cpm > 5) >= 20
+counts <- counts[keep,]
+
+# LogCPM
+logCPM <- cpm(counts, log = T)
+
+# Obter dicionário
+ensembl <- useMart("ENSEMBL_MART_ENSEMBL", dataset = "hsapiens_gene_ensembl")
+dict <- getBM(attributes = c("ensembl_peptide_id", "ensembl_gene_id"), mart = ensembl)
+dict$ensembl_peptide_id <- ifelse(dict$ensembl_peptide_id == "", NA, dict$ensembl_peptide_id)
+dict <- dict[complete.cases(dict),]
+dict$ensembl_peptide_id  <- paste("9606.", dict$ensembl_peptide_id, sep = "")
+
+# Organizar dicionário para que a primeira coluna corresponda aos string ids e 
+# a segunda coluna corresponda aos ensembl gene ids
+names(dict) <- c("Protein", "Probe")
+
+# Selecionar ocorrências presentes na tabela de expressão
+logCPM <- logCPM[rownames(logCPM) %in% dict$Probe,]
+
library(transcriptogramer)
+
+# Obter metadado
+meta <- read.csv("./dados_curso/inputs/metadata/metadata.csv")
+
# Criar objeto do transcriptogramer com raio 80
+t <- transcriptogramPreprocess(association = association, ordering = Hs900, radius = 80)
+
+# Rodar o passo 1 do transcriptogramer
+t <- transcriptogramStep1(object = t, expression = logCPM, dictionary = dict, nCores = 2)
+
+# Rodar o passo 2 do transcriptogramer
+t <- transcriptogramStep2(object = t, nCores = 2)
+
+save(t, file = "./dados_curso/outputs/transcriptogramer/t.RData")
+
# Rodar a expressão diferencial entre os grupos com base ao raio = 80
+# TRUE = amostras controle (indolent, tumor não-invasivo)
+# FALSE = amostras tratamento (invasive, tumor metastático)
+levels <- ifelse(meta$subtype == "indolent", T, F)
+
+t <- differentiallyExpressed(object = t, levels = levels, pValue = 0.05,
+                             species = "Homo sapiens", title = "radius 80")
+

+
save(t, file = "./dados_curso/outputs/transcriptogramer/t_diff.RData")
+
# Enriquecimento dos clusters
+t <- clusterEnrichment(object = t, species = HsBPTerms,
+                       pValue = 0.05, nCores = 3)
+
+save(t, file = "./dados_curso/outputs/transcriptogramer/t_enrich.RData")
+
# Termos enriquecidos por cluster identificado
+termos <- Terms(t)
+
+ +
+
+
+
+
    +
  1. os passos necessários para a instalação podem ser +diferentes de acordo com o sistema operacional utilizado↩︎

  2. +
  3. na conversão de valores numéricos para lógicos, 0 é +convertido para FALSE e qualquer outro valor é convertido em TRUE↩︎

  4. +
+
+ + + +
+
+ +
+ + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/preview/pr-27/teaching/rnaseq_curso_files/MathJax.js b/preview/pr-27/teaching/rnaseq_curso_files/MathJax.js new file mode 100644 index 0000000..792f7e4 --- /dev/null +++ b/preview/pr-27/teaching/rnaseq_curso_files/MathJax.js @@ -0,0 +1,19 @@ +/* + * /MathJax.js + * + * Copyright (c) 2009-2017 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +if(document.getElementById&&document.childNodes&&document.createElement){if(!(window.MathJax&&MathJax.Hub)){if(window.MathJax){window.MathJax={AuthorConfig:window.MathJax}}else{window.MathJax={}}MathJax.isPacked=true;MathJax.version="2.7.2";MathJax.fileversion="2.7.2";MathJax.cdnVersion="2.7.2";MathJax.cdnFileVersions={};(function(d){var b=window[d];if(!b){b=window[d]={}}var e=[];var c=function(f){var g=f.constructor;if(!g){g=function(){}}for(var h in f){if(h!=="constructor"&&f.hasOwnProperty(h)){g[h]=f[h]}}return g};var a=function(){return function(){return arguments.callee.Init.call(this,arguments)}};b.Object=c({constructor:a(),Subclass:function(f,h){var g=a();g.SUPER=this;g.Init=this.Init;g.Subclass=this.Subclass;g.Augment=this.Augment;g.protoFunction=this.protoFunction;g.can=this.can;g.has=this.has;g.isa=this.isa;g.prototype=new this(e);g.prototype.constructor=g;g.Augment(f,h);return g},Init:function(f){var g=this;if(f.length===1&&f[0]===e){return g}if(!(g instanceof f.callee)){g=new f.callee(e)}return g.Init.apply(g,f)||g},Augment:function(f,g){var h;if(f!=null){for(h in f){if(f.hasOwnProperty(h)){this.protoFunction(h,f[h])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){this.protoFunction("toString",f.toString)}}if(g!=null){for(h in g){if(g.hasOwnProperty(h)){this[h]=g[h]}}}return this},protoFunction:function(g,f){this.prototype[g]=f;if(typeof f==="function"){f.SUPER=this.SUPER.prototype}},prototype:{Init:function(){},SUPER:function(f){return f.callee.SUPER},can:function(f){return typeof(this[f])==="function"},has:function(f){return typeof(this[f])!=="undefined"},isa:function(f){return(f instanceof Object)&&(this instanceof f)}},can:function(f){return this.prototype.can.call(this,f)},has:function(f){return this.prototype.has.call(this,f)},isa:function(g){var f=this;while(f){if(f===g){return true}else{f=f.SUPER}}return false},SimpleSUPER:c({constructor:function(f){return this.SimpleSUPER.define(f)},define:function(f){var h={};if(f!=null){for(var g in f){if(f.hasOwnProperty(g)){h[g]=this.wrap(g,f[g])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){h.toString=this.wrap("toString",f.toString)}}return h},wrap:function(i,h){if(typeof(h)!=="function"||!h.toString().match(/\.\s*SUPER\s*\(/)){return h}var g=function(){this.SUPER=g.SUPER[i];try{var f=h.apply(this,arguments)}catch(j){delete this.SUPER;throw j}delete this.SUPER;return f};g.toString=function(){return h.toString.apply(h,arguments)};return g}})});b.Object.isArray=Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"};b.Object.Array=Array})("MathJax");(function(BASENAME){var BASE=window[BASENAME];if(!BASE){BASE=window[BASENAME]={}}var isArray=BASE.Object.isArray;var CALLBACK=function(data){var cb=function(){return arguments.callee.execute.apply(arguments.callee,arguments)};for(var id in CALLBACK.prototype){if(CALLBACK.prototype.hasOwnProperty(id)){if(typeof(data[id])!=="undefined"){cb[id]=data[id]}else{cb[id]=CALLBACK.prototype[id]}}}cb.toString=CALLBACK.prototype.toString;return cb};CALLBACK.prototype={isCallback:true,hook:function(){},data:[],object:window,execute:function(){if(!this.called||this.autoReset){this.called=!this.autoReset;return this.hook.apply(this.object,this.data.concat([].slice.call(arguments,0)))}},reset:function(){delete this.called},toString:function(){return this.hook.toString.apply(this.hook,arguments)}};var ISCALLBACK=function(f){return(typeof(f)==="function"&&f.isCallback)};var EVAL=function(code){return eval.call(window,code)};var TESTEVAL=function(){EVAL("var __TeSt_VaR__ = 1");if(window.__TeSt_VaR__){try{delete window.__TeSt_VaR__}catch(error){window.__TeSt_VaR__=null}}else{if(window.execScript){EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";window.execScript(code);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}else{EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";var head=(document.getElementsByTagName("head"))[0];if(!head){head=document.body}var script=document.createElement("script");script.appendChild(document.createTextNode(code));head.appendChild(script);head.removeChild(script);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}}TESTEVAL=null};var USING=function(args,i){if(arguments.length>1){if(arguments.length===2&&!(typeof arguments[0]==="function")&&arguments[0] instanceof Object&&typeof arguments[1]==="number"){args=[].slice.call(args,i)}else{args=[].slice.call(arguments,0)}}if(isArray(args)&&args.length===1&&typeof(args[0])==="function"){args=args[0]}if(typeof args==="function"){if(args.execute===CALLBACK.prototype.execute){return args}return CALLBACK({hook:args})}else{if(isArray(args)){if(typeof(args[0])==="string"&&args[1] instanceof Object&&typeof args[1][args[0]]==="function"){return CALLBACK({hook:args[1][args[0]],object:args[1],data:args.slice(2)})}else{if(typeof args[0]==="function"){return CALLBACK({hook:args[0],data:args.slice(1)})}else{if(typeof args[1]==="function"){return CALLBACK({hook:args[1],object:args[0],data:args.slice(2)})}}}}else{if(typeof(args)==="string"){if(TESTEVAL){TESTEVAL()}return CALLBACK({hook:EVAL,data:[args]})}else{if(args instanceof Object){return CALLBACK(args)}else{if(typeof(args)==="undefined"){return CALLBACK({})}}}}}throw Error("Can't make callback from given data")};var DELAY=function(time,callback){callback=USING(callback);callback.timeout=setTimeout(callback,time);return callback};var WAITFOR=function(callback,signal){callback=USING(callback);if(!callback.called){WAITSIGNAL(callback,signal);signal.pending++}};var WAITEXECUTE=function(){var signals=this.signal;delete this.signal;this.execute=this.oldExecute;delete this.oldExecute;var result=this.execute.apply(this,arguments);if(ISCALLBACK(result)&&!result.called){WAITSIGNAL(result,signals)}else{for(var i=0,m=signals.length;i0&&priority=0;i--){this.hooks.splice(i,1)}this.remove=[]}});var EXECUTEHOOKS=function(hooks,data,reset){if(!hooks){return null}if(!isArray(hooks)){hooks=[hooks]}if(!isArray(data)){data=(data==null?[]:[data])}var handler=HOOKS(reset);for(var i=0,m=hooks.length;ig){g=document.styleSheets.length}if(!i){i=document.head||((document.getElementsByTagName("head"))[0]);if(!i){i=document.body}}return i};var f=[];var c=function(){for(var k=0,j=f.length;k=this.timeout){i(this.STATUS.ERROR);return 1}return 0},file:function(j,i){if(i<0){a.Ajax.loadTimeout(j)}else{a.Ajax.loadComplete(j)}},execute:function(){this.hook.call(this.object,this,this.data[0],this.data[1])},checkSafari2:function(i,j,k){if(i.time(k)){return}if(document.styleSheets.length>j&&document.styleSheets[j].cssRules&&document.styleSheets[j].cssRules.length){k(i.STATUS.OK)}else{setTimeout(i,i.delay)}},checkLength:function(i,l,n){if(i.time(n)){return}var m=0;var j=(l.sheet||l.styleSheet);try{if((j.cssRules||j.rules||[]).length>0){m=1}}catch(k){if(k.message.match(/protected variable|restricted URI/)){m=1}else{if(k.message.match(/Security error/)){m=1}}}if(m){setTimeout(a.Callback([n,i.STATUS.OK]),0)}else{setTimeout(i,i.delay)}}},loadComplete:function(i){i=this.fileURL(i);var j=this.loading[i];if(j&&!j.preloaded){a.Message.Clear(j.message);clearTimeout(j.timeout);if(j.script){if(f.length===0){setTimeout(c,0)}f.push(j.script)}this.loaded[i]=j.status;delete this.loading[i];this.addHook(i,j.callback)}else{if(j){delete this.loading[i]}this.loaded[i]=this.STATUS.OK;j={status:this.STATUS.OK}}if(!this.loadHooks[i]){return null}return this.loadHooks[i].Execute(j.status)},loadTimeout:function(i){if(this.loading[i].timeout){clearTimeout(this.loading[i].timeout)}this.loading[i].status=this.STATUS.ERROR;this.loadError(i);this.loadComplete(i)},loadError:function(i){a.Message.Set(["LoadFailed","File failed to load: %1",i],null,2000);a.Hub.signal.Post(["file load error",i])},Styles:function(k,l){var i=this.StyleString(k);if(i===""){l=a.Callback(l);l()}else{var j=document.createElement("style");j.type="text/css";this.head=h(this.head);this.head.appendChild(j);if(j.styleSheet&&typeof(j.styleSheet.cssText)!=="undefined"){j.styleSheet.cssText=i}else{j.appendChild(document.createTextNode(i))}l=this.timer.create.call(this,l,j)}return l},StyleString:function(n){if(typeof(n)==="string"){return n}var k="",o,m;for(o in n){if(n.hasOwnProperty(o)){if(typeof n[o]==="string"){k+=o+" {"+n[o]+"}\n"}else{if(a.Object.isArray(n[o])){for(var l=0;l="0"&&q<="9"){f[j]=p[f[j]-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{if(q==="{"){q=f[j].substr(1);if(q>="0"&&q<="9"){f[j]=p[f[j].substr(1,f[j].length-2)-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{var k=f[j].match(/^\{([a-z]+):%(\d+)\|(.*)\}$/);if(k){if(k[1]==="plural"){var d=p[k[2]-1];if(typeof d==="undefined"){f[j]="???"}else{d=this.plural(d)-1;var h=k[3].replace(/(^|[^%])(%%)*%\|/g,"$1$2%\uEFEF").split(/\|/);if(d>=0&&d=3){c.push([f[0],f[1],this.processSnippet(g,f[2])])}else{c.push(e[d])}}}}else{c.push(e[d])}}return c},markdownPattern:/(%.)|(\*{1,3})((?:%.|.)+?)\2|(`+)((?:%.|.)+?)\4|\[((?:%.|.)+?)\]\(([^\s\)]+)\)/,processMarkdown:function(b,h,d){var j=[],e;var c=b.split(this.markdownPattern);var g=c[0];for(var f=1,a=c.length;f1?d[1]:""));f=null}if(e&&(!b.preJax||d)){c.nodeValue=c.nodeValue.replace(b.postJax,(e.length>1?e[1]:""))}if(f&&!f.nodeValue.match(/\S/)){f=f.previousSibling}}if(b.preRemoveClass&&f&&f.className===b.preRemoveClass){a.MathJax.preview=f}a.MathJax.checked=1},processInput:function(a){var b,i=MathJax.ElementJax.STATE;var h,e,d=a.scripts.length;try{while(a.ithis.processUpdateTime&&a.i1){d.jax[a.outputJax].push(b)}b.MathJax.state=c.OUTPUT},prepareOutput:function(c,f){while(c.jthis.processUpdateTime&&h.i=0;q--){if((b[q].src||"").match(f)){s.script=b[q].innerHTML;if(RegExp.$2){var t=RegExp.$2.substr(1).split(/\&/);for(var p=0,l=t.length;p=parseInt(y[z])}}return true},Select:function(j){var i=j[d.Browser];if(i){return i(d.Browser)}return null}};var e=k.replace(/^Mozilla\/(\d+\.)+\d+ /,"").replace(/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,"").replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/,"");d.Browser=d.Insert(d.Insert(new String("Unknown"),{version:"0.0"}),a);for(var v in a){if(a.hasOwnProperty(v)){if(a[v]&&v.substr(0,2)==="is"){v=v.slice(2);if(v==="Mac"||v==="PC"){continue}d.Browser=d.Insert(new String(v),a);var r=new RegExp(".*(Version/| Trident/.*; rv:)((?:\\d+\\.)+\\d+)|.*("+v+")"+(v=="MSIE"?" ":"/")+"((?:\\d+\\.)*\\d+)|(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)");var u=r.exec(e)||["","","","unknown","0.0"];d.Browser.name=(u[1]!=""?v:(u[3]||u[5]));d.Browser.version=u[2]||u[4]||u[6];break}}}try{d.Browser.Select({Safari:function(j){var i=parseInt((String(j.version).split("."))[0]);if(i>85){j.webkit=j.version}if(i>=538){j.version="8.0"}else{if(i>=537){j.version="7.0"}else{if(i>=536){j.version="6.0"}else{if(i>=534){j.version="5.1"}else{if(i>=533){j.version="5.0"}else{if(i>=526){j.version="4.0"}else{if(i>=525){j.version="3.1"}else{if(i>500){j.version="3.0"}else{if(i>400){j.version="2.0"}else{if(i>85){j.version="1.0"}}}}}}}}}}j.webkit=(navigator.appVersion.match(/WebKit\/(\d+)\./))[1];j.isMobile=(navigator.appVersion.match(/Mobile/i)!=null);j.noContextMenu=j.isMobile},Firefox:function(j){if((j.version==="0.0"||k.match(/Firefox/)==null)&&navigator.product==="Gecko"){var m=k.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/);if(m){j.version=m[1]}else{var i=(navigator.buildID||navigator.productSub||"0").substr(0,8);if(i>="20111220"){j.version="9.0"}else{if(i>="20111120"){j.version="8.0"}else{if(i>="20110927"){j.version="7.0"}else{if(i>="20110816"){j.version="6.0"}else{if(i>="20110621"){j.version="5.0"}else{if(i>="20110320"){j.version="4.0"}else{if(i>="20100121"){j.version="3.6"}else{if(i>="20090630"){j.version="3.5"}else{if(i>="20080617"){j.version="3.0"}else{if(i>="20061024"){j.version="2.0"}}}}}}}}}}}}j.isMobile=(navigator.appVersion.match(/Android/i)!=null||k.match(/ Fennec\//)!=null||k.match(/Mobile/)!=null)},Chrome:function(i){i.noContextMenu=i.isMobile=!!navigator.userAgent.match(/ Mobile[ \/]/)},Opera:function(i){i.version=opera.version()},Edge:function(i){i.isMobile=!!navigator.userAgent.match(/ Phone/)},MSIE:function(j){j.isMobile=!!navigator.userAgent.match(/ Phone/);j.isIE9=!!(document.documentMode&&(window.performance||window.msPerformance));MathJax.HTML.setScriptBug=!j.isIE9||document.documentMode<9;MathJax.Hub.msieHTMLCollectionBug=(document.documentMode<9);if(document.documentMode<10&&!s.params.NoMathPlayer){try{new ActiveXObject("MathPlayer.Factory.1");j.hasMathPlayer=true}catch(m){}try{if(j.hasMathPlayer){var i=document.createElement("object");i.id="mathplayer";i.classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987";g.appendChild(i);document.namespaces.add("m","http://www.w3.org/1998/Math/MathML");j.mpNamespace=true;if(document.readyState&&(document.readyState==="loading"||document.readyState==="interactive")){document.write('');j.mpImported=true}}else{document.namespaces.add("mjx_IE_fix","http://www.w3.org/1999/xlink")}}catch(m){}}}})}catch(c){console.error(c.message)}d.Browser.Select(MathJax.Message.browsers);if(h.AuthorConfig&&typeof h.AuthorConfig.AuthorInit==="function"){h.AuthorConfig.AuthorInit()}d.queue=h.Callback.Queue();d.queue.Push(["Post",s.signal,"Begin"],["Config",s],["Cookie",s],["Styles",s],["Message",s],function(){var i=h.Callback.Queue(s.Jax(),s.Extensions());return i.Push({})},["Menu",s],s.onLoad(),function(){MathJax.isReady=true},["Typeset",s],["Hash",s],["MenuZoom",s],["Post",s.signal,"End"])})("MathJax")}}; diff --git a/preview/pr-27/team/index.html b/preview/pr-27/team/index.html new file mode 100644 index 0000000..260ce76 --- /dev/null +++ b/preview/pr-27/team/index.html @@ -0,0 +1,1196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Team | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

+Team

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

Prof. Dalmolin supervises in the post-graduate program in Bioinformatics at the Federal University of Rio Grande do Norte, which offers both Master and PhD courses. Come visit us or, better yet, join us!

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

Alumni

+ + + + + + + + + + + + + + + + +
+ + + + + +
+ + +
+ + Some of our team (plus a few friends!) at ICe + + +
+ Some of our team (plus a few friends!) at ICe + +
+ +
+
+ + +
+ + + + + + + diff --git a/preview/pr-27/tools/index.html b/preview/pr-27/tools/index.html new file mode 100644 index 0000000..31f6c86 --- /dev/null +++ b/preview/pr-27/tools/index.html @@ -0,0 +1,811 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Tools | Dalmolin Systems Biology Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

+Tools

+ +

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. +Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

+ +
+
+ + + + + +
+ + + + +
+ + KEGG Pathway Viewer + + +
+ + + KEGG Pathway Viewer + + + + + The online tool to visualize and interact with KEGG metabolic pathways + + + +

The network elaborated in our study contemplates protein classifications according to the AP detection algorithm,facilitating the visual identification of the most important proteins of a network.

+ + + + + + + + + + + +
+
+ +
+ + Transcriptogramer + + +
+ + + Transcriptogramer + + + + + R/Bioconductor package for transcriptional analysis based on transcriptograms + + + +

Transcriptograms are genome wide gene expression profiles that provide a global view for the cellular metabolism, while indicating gene sets whose expressions are altered.

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

More

+ +
+ + GenePlast + + +
+ + + GenePlast + + + + + Evolutionary and plasticity analysis of orthologous groups + + + +

Geneplast is designed for evolutionary and plasticity analysis based on orthologous groups distribution in a given species tree.

+ + + + + + + + + + + +
+
+ +
+ + MEDUSA/EURYALE + + +
+ + + MEDUSA/EURYALE + + + + + Analysis pipelines for Shotgun metagenomics data + + + +

A pipeline for sensitive taxonomic classification and flexible functional annotation of shotgun metagenomic data.

+ + + + + + + + + + + +
+
+ +
+ + BulkRNA + + +
+ + + BulkRNA + + + + + An analysis pipeline for pre-processing, alignment and quantification of bulk RNA-Seq data. + + + +

Dalmolin Group’s workflow for pre-processing, alignment and quantification of bulk RNA-seq data.

+ + + + + + + + + + + +
+
+
+ + +
+ + + + + + + diff --git a/preview/pr-27/trainees.html b/preview/pr-27/trainees.html new file mode 100644 index 0000000..1ac5ceb --- /dev/null +++ b/preview/pr-27/trainees.html @@ -0,0 +1,16 @@ + + + + + + Redirecting… + + + + + + +

Redirecting…

+ Click here if you are not redirected. + +