From 342e04d9a4d2b61b0e1ba25eb616200a9563feb4 Mon Sep 17 00:00:00 2001 From: kopardev Date: Fri, 19 Jul 2024 16:29:53 -0400 Subject: [PATCH] refactor: add scripts --- assets/make_readme/Dockerfile | 13 ++ assets/make_readme/about_us.md | 9 ++ assets/make_readme/add_toc.py | 57 ++++++++ assets/make_readme/back_to_top.md | 5 + assets/make_readme/banner.md | 2 + .../ccbrpipeliner_release_history.md | 20 +++ assets/make_readme/citation.md | 4 + assets/make_readme/get_per_user_commits.py | 136 ++++++++++++++++++ .../make_readme/get_recent_releases_table.py | 91 ++++++++++++ assets/make_readme/get_releases_table.py | 70 +++++++++ assets/make_readme/make_readme.sh | 52 +++++++ assets/make_readme/new_releases.md | 0 assets/make_readme/our_model.md | 4 + assets/make_readme/output.md | 24 ++++ assets/make_readme/pipelines.md | 51 +++++++ assets/make_readme/repo_list.md | 0 assets/make_readme/toc.md | 0 assets/make_readme/tools.md | 8 ++ 18 files changed, 546 insertions(+) create mode 100644 assets/make_readme/Dockerfile create mode 100644 assets/make_readme/about_us.md create mode 100644 assets/make_readme/add_toc.py create mode 100644 assets/make_readme/back_to_top.md create mode 100644 assets/make_readme/banner.md create mode 100644 assets/make_readme/ccbrpipeliner_release_history.md create mode 100644 assets/make_readme/citation.md create mode 100644 assets/make_readme/get_per_user_commits.py create mode 100644 assets/make_readme/get_recent_releases_table.py create mode 100644 assets/make_readme/get_releases_table.py create mode 100644 assets/make_readme/make_readme.sh create mode 100644 assets/make_readme/new_releases.md create mode 100644 assets/make_readme/our_model.md create mode 100644 assets/make_readme/output.md create mode 100644 assets/make_readme/pipelines.md create mode 100644 assets/make_readme/repo_list.md create mode 100644 assets/make_readme/toc.md create mode 100644 assets/make_readme/tools.md diff --git a/assets/make_readme/Dockerfile b/assets/make_readme/Dockerfile new file mode 100644 index 0000000..b105df8 --- /dev/null +++ b/assets/make_readme/Dockerfile @@ -0,0 +1,13 @@ +# Use an official Python runtime as a parent image +FROM python:3.11-slim + +# Set the working directory in the container +WORKDIR /app + +# Update the package list and install bash +RUN apt-get update && \ + apt-get install -y bash && \ + apt-get clean + +# Install the required Python packages +RUN pip install --no-cache-dir pandas requests python-dateutil \ No newline at end of file diff --git a/assets/make_readme/about_us.md b/assets/make_readme/about_us.md new file mode 100644 index 0000000..5a37927 --- /dev/null +++ b/assets/make_readme/about_us.md @@ -0,0 +1,9 @@ + +## About Us + +- 👋 Hi, we're the [**@CCBR**](https://bioinformatics.ccr.cancer.gov/ccbr/), a group of bioinformatics analysts and engineers +- 📖 We build flexible, reproducible, workflows for next-generation sequencing data +- :bulb: We [collaborate](https://abcs-amp.nih.gov/project/request/CCBR/) with [CCR](https://ccr.cancer.gov/) PIs +- 📫 You can reach us at [ccbr_pipeliner@mail.nih.gov](mailto:ccbr_pipeliner@mail.nih.gov) +- 🏁 Check out our [release history](#release-history) +- :link: Our [Zenodo](https://zenodo.org/communities/ccbr) community \ No newline at end of file diff --git a/assets/make_readme/add_toc.py b/assets/make_readme/add_toc.py new file mode 100644 index 0000000..3bf7d3a --- /dev/null +++ b/assets/make_readme/add_toc.py @@ -0,0 +1,57 @@ +import re +import argparse + +def extract_headers(markdown_content): + """ + Extract headers from the markdown content. + """ + headers = re.findall(r'^(#{1,6})\s*(.*)', markdown_content, re.MULTILINE) + return headers + +def generate_toc(headers): + """ + Generate the Table of Contents (TOC) from the headers. + """ + toc_lines = ["## Table of Contents"] + for header in headers: + level = len(header[0]) + title = header[1].strip() + anchor = title.lower().replace(' ', '-').replace('.', '') + toc_lines.append(f"{' ' * (level - 1)}- [{title}](#{anchor})") + return '\n'.join(toc_lines) + +def insert_toc(markdown_content, toc): + """ + Insert TOC into the markdown content after the first header. + """ + toc_placeholder = "" + if toc_placeholder in markdown_content: + updated_content = markdown_content.replace(toc_placeholder, toc) + else: + first_header_pos = markdown_content.find('\n#') + if first_header_pos == -1: + first_header_pos = 0 + updated_content = markdown_content[:first_header_pos] + toc + '\n\n' + markdown_content[first_header_pos:] + return updated_content + +def main(): + parser = argparse.ArgumentParser(description='Add a Table of Contents (TOC) to a Markdown file.') + parser.add_argument('--input', '-i', required=True, help='Input Markdown file') + parser.add_argument('--output', '-o', required=True, help='Output Markdown file') + + args = parser.parse_args() + + with open(args.input, 'r') as f: + markdown_content = f.read() + + headers = extract_headers(markdown_content) + toc = generate_toc(headers) + updated_content = insert_toc(markdown_content, toc) + + with open(args.output, 'w') as f: + f.write(updated_content) + + print(f"TOC added to {args.output}") + +if __name__ == "__main__": + main() diff --git a/assets/make_readme/back_to_top.md b/assets/make_readme/back_to_top.md new file mode 100644 index 0000000..09030bb --- /dev/null +++ b/assets/make_readme/back_to_top.md @@ -0,0 +1,5 @@ + +
+

+ Back to Top +

diff --git a/assets/make_readme/banner.md b/assets/make_readme/banner.md new file mode 100644 index 0000000..1aa97d4 --- /dev/null +++ b/assets/make_readme/banner.md @@ -0,0 +1,2 @@ + +[](https://bioinformatics.ccr.cancer.gov/ccbr/) diff --git a/assets/make_readme/ccbrpipeliner_release_history.md b/assets/make_readme/ccbrpipeliner_release_history.md new file mode 100644 index 0000000..95366b9 --- /dev/null +++ b/assets/make_readme/ccbrpipeliner_release_history.md @@ -0,0 +1,20 @@ + +## Release History + +`module load ccbrpipeliner` loads default release of ccbrpipeliner. Each release comprises of a unique combination of the version numbers of the different pipelines offered as part of the ccbrpipeliner suite. + +| Release | Tool versions | Released on | Decommissioned on | +| --- | --- | --- | --- | +| 1 | RENEE v2.1 @# | July, 10th 2023 | July, 14th 2023 | +| 2 | RENEE v2.2 @# | July, 14th 2023 | September, 5th 2023 | +| 3 | RENEE v2.2 @#, XAVIER v2.0 @| July, 21st 2023 | - | +| 4 | RENEE v2.5 @#, XAVIER v3.0 @#| September, 5th 2023 | - | +| 5 | RENEE v2.5 @#, XAVIER v3.0 @#, CARLISLE v2.4 @, CHAMPAGNE v0.2 @, CRUISE v0.1 @, spacesavers2 v0.10 @, permfix v0.6 @ | October, 27th 2023 | - | +| 6* | RENEE v2.5 @#, XAVIER v3.0 @#, CARLISLE v2.4 @, CHAMPAGNE v0.3 @, CRUISE v0.1 @, ASPEN v1.0 @, spacesavers2 v0.12 @, permfix v0.6 @ | February, 29th 2024 | - | + +> +> * = Current DEFAULT version on BIOWULF +> +> @ = CLI available +> +> # = GUI available \ No newline at end of file diff --git a/assets/make_readme/citation.md b/assets/make_readme/citation.md new file mode 100644 index 0000000..82d9cff --- /dev/null +++ b/assets/make_readme/citation.md @@ -0,0 +1,4 @@ + +## Citation + +Most of our end-to-end pipelines which have been used in published research work have been made available to the entire bioinformatics community via a Zenodo DOI. Please feel free to visit our [Zenodo community page](https://zenodo.org/communities/ccbr). And if you use our pipelines, don't forget to cite us! \ No newline at end of file diff --git a/assets/make_readme/get_per_user_commits.py b/assets/make_readme/get_per_user_commits.py new file mode 100644 index 0000000..9ca4246 --- /dev/null +++ b/assets/make_readme/get_per_user_commits.py @@ -0,0 +1,136 @@ +import requests +import os +import pandas as pd +from collections import defaultdict +from datetime import datetime, timedelta + +# Replace these with your GitHub token and organization name +GITHUB_TOKEN = os.getenv('GITHUB_TOKEN') +ORG_NAME = 'CCBR' +# ORG_NAME = 'CCRGeneticsBranch' +# ORG_NAME = 'NIDAP-Community' +# ORG_NAME = 'NCI-VB' + +headers = { + 'Accept': 'application/vnd.github.v3+json', + 'Authorization': f'token {GITHUB_TOKEN}' +} + +def get_repos(org_name): + repos = [] + page = 1 + while True: + response = requests.get(f'https://api.github.com/orgs/{org_name}/repos?per_page=100&page={page}', headers=headers) + if response.status_code != 200: + break + repos.extend(response.json()) + if len(response.json()) < 100: + break + page += 1 + return repos + +def get_members(org_name): + members = set() + page = 1 + while True: + response = requests.get(f'https://api.github.com/orgs/{org_name}/members?per_page=100&page={page}', headers=headers) + if response.status_code != 200: + break + page_members = response.json() + if not page_members: + break + for member in page_members: + members.add(member['login']) + page += 1 + return members + +def get_outside_collaborators(repo_full_name): + collaborators = set() + page = 1 + while True: + response = requests.get(f'https://api.github.com/repos/{repo_full_name}/collaborators?affiliation=outside&per_page=100&page={page}', headers=headers) + if response.status_code != 200: + break + outside_collaborators = response.json() + if not outside_collaborators: + break + for collaborator in outside_collaborators: + collaborators.add(collaborator['login']) + page += 1 + return collaborators + +def get_commits_count(repo_full_name, members_and_collaborators): + commits_count_by_user = defaultdict(lambda: {'total': 0, 'last_month': 0, 'last_6_months': 0}) + page = 1 + today = datetime.utcnow() + one_month_ago = today - timedelta(days=30) + six_months_ago = today - timedelta(days=180) + + while True: + response = requests.get(f'https://api.github.com/repos/{repo_full_name}/commits?per_page=100&page={page}', headers=headers) + if response.status_code != 200: + break + commits = response.json() + if not commits: + break + + for commit in commits: + author_login = commit['author']['login'] if commit['author'] else 'unknown' + commit_date_str = commit['commit']['author']['date'] + commit_date = datetime.strptime(commit_date_str, '%Y-%m-%dT%H:%M:%SZ') + + if author_login != 'unknown' and author_login in members_and_collaborators: + commits_count_by_user[author_login]['total'] += 1 + if commit_date >= one_month_ago: + commits_count_by_user[author_login]['last_month'] += 1 + if commit_date >= six_months_ago: + commits_count_by_user[author_login]['last_6_months'] += 1 + + page += 1 + + return commits_count_by_user + +def main(): + members = get_members(ORG_NAME) + repos = get_repos(ORG_NAME) + + # Collect outside collaborators + outside_collaborators = set() + for repo in repos: + repo_full_name = repo['full_name'] + # print(f"Fetching outside collaborators for repository: {repo_full_name}") + outside_collaborators.update(get_outside_collaborators(repo_full_name)) + + members_and_collaborators = members.union(outside_collaborators) + + user_commits = defaultdict(lambda: {'total': 0, 'last_month': 0, 'last_6_months': 0}) + + for repo in repos: + repo_full_name = repo['full_name'] + # print(f"Processing repository: {repo_full_name}") + commits_count_by_user = get_commits_count(repo_full_name, members_and_collaborators) + for user, counts in commits_count_by_user.items(): + user_commits[user]['total'] += counts['total'] + user_commits[user]['last_month'] += counts['last_month'] + user_commits[user]['last_6_months'] += counts['last_6_months'] + + # Convert to a DataFrame + data = [] + for user, counts in user_commits.items(): + data.append([ + user, + counts['total'], + counts['last_month'], + counts['last_6_months'] + ]) + + df = pd.DataFrame(data, columns=['User', 'Total Commits', 'Commits in Last Month', 'Commits in Last 6 Months']) + df = df[df['User'] != 'unknown'] # Remove 'unknown' users + df = df.sort_values(by='Total Commits', ascending=False).head(10) # Top 10 users + + # Create a Markdown table + markdown_table = df.to_markdown(index=False, headers=['User', 'Total Commits', 'Commits in Last Month', 'Commits in Last 6 Months']) + print(markdown_table) + +if __name__ == "__main__": + main() diff --git a/assets/make_readme/get_recent_releases_table.py b/assets/make_readme/get_recent_releases_table.py new file mode 100644 index 0000000..d92defd --- /dev/null +++ b/assets/make_readme/get_recent_releases_table.py @@ -0,0 +1,91 @@ +import requests +import argparse +import pandas as pd +from datetime import datetime +from dateutil.relativedelta import relativedelta + +# Replace these with your GitHub token and organization name +GITHUB_TOKEN = os.getenv('GITHUB_TOKEN') +ORG_NAME = 'CCBR' + +headers = { + 'Accept': 'application/vnd.github.v3+json', + 'Authorization': f'token {GITHUB_TOKEN}' +} + +def get_date_n_months_ago(n_months): + today = datetime.now() + n_months_ago = today - relativedelta(months=n_months) + return n_months_ago.strftime('%Y-%m-%d') + +def get_repos(org_name): + repos = [] + page = 1 + while True: + response = requests.get(f'https://api.github.com/orgs/{org_name}/repos?per_page=100&page={page}', headers=headers) + if response.status_code != 200: + break + repos.extend(response.json()) + if len(response.json()) < 100: + break + page += 1 + return repos + +def format_date(date_str): + try: + # Parse the date string and format it as YYYY-MM-DD + date_obj = datetime.strptime(date_str, '%Y-%m-%dT%H:%M:%SZ') + return date_obj.strftime('%Y-%m-%d') + except ValueError: + return 'Unknown date' + +def get_latest_release(repo_full_name): + response = requests.get(f'https://api.github.com/repos/{repo_full_name}/releases/latest', headers=headers) + if response.status_code == 200: + return response.json() + return None + +def get_open_issues_count(repo_full_name): + response = requests.get(f'https://api.github.com/repos/{repo_full_name}/issues?state=open', headers=headers) + if response.status_code == 200: + return len(response.json()) + return 0 + +def main(): + parser = argparse.ArgumentParser(description='Fetch GitHub repository releases.') + parser.add_argument('--nmonths', type=int, default=0, help='Number of months to filter releases. If not provided, shows all releases.') + args = parser.parse_args() + + repos = get_repos(ORG_NAME) + releases = [] + cutoff_date = get_date_n_months_ago(args.nmonths) + + for repo in repos: + latest_release = get_latest_release(repo['full_name']) + open_issues_count = get_open_issues_count(repo['full_name']) + if latest_release: + repo_name = repo['name'] + release_name = latest_release['name'] + release_url = latest_release['html_url'] + release_date = latest_release['published_at'] + formatted_date = format_date(release_date) + if formatted_date != 'Unknown date' and (args.nmonths == 0 or formatted_date >= cutoff_date): + releases.append({ + 'Repo Name': f"[{repo_name}](https://github.com/{ORG_NAME}/{repo_name})", + 'Release Name': f"[{release_name}]({release_url})", + 'Release Date': formatted_date, + 'Open Issues': open_issues_count + }) + + # Sort releases by date in descending order + sorted_releases = sorted(releases, key=lambda x: x['Release Date'], reverse=True) + + # Create a DataFrame for Markdown table + df = pd.DataFrame(sorted_releases) + markdown_table = df.to_markdown(index=False, headers=['Repo Name', 'Release Name', 'Release Date', 'Open Issues']) + + # Print Markdown table + print(markdown_table) + +if __name__ == "__main__": + main() diff --git a/assets/make_readme/get_releases_table.py b/assets/make_readme/get_releases_table.py new file mode 100644 index 0000000..8f84dd9 --- /dev/null +++ b/assets/make_readme/get_releases_table.py @@ -0,0 +1,70 @@ +import requests +import pandas as pd +from datetime import datetime + +# Replace these with your GitHub token and organization name +GITHUB_TOKEN = os.getenv('GITHUB_TOKEN') +ORG_NAME = 'CCBR' + +headers = { + 'Accept': 'application/vnd.github.v3+json', + 'Authorization': f'token {GITHUB_TOKEN}' +} + +def get_repos(org_name): + repos = [] + page = 1 + while True: + response = requests.get(f'https://api.github.com/orgs/{org_name}/repos?per_page=100&page={page}', headers=headers) + if response.status_code != 200: + break + repos.extend(response.json()) + if len(response.json()) < 100: + break + page += 1 + return repos + +def format_date(date_str): + try: + # Parse the date string and format it as YYYY-MM-DD + date_obj = datetime.strptime(date_str, '%Y-%m-%dT%H:%M:%SZ') + return date_obj.strftime('%Y-%m-%d') + except ValueError: + return 'Unknown date' + +def get_latest_release(repo_full_name): + response = requests.get(f'https://api.github.com/repos/{repo_full_name}/releases/latest', headers=headers) + if response.status_code == 200: + return response.json() + return None + +def main(): + repos = get_repos(ORG_NAME) + releases = [] + + for repo in repos: + latest_release = get_latest_release(repo['full_name']) + if latest_release: + repo_name = repo['name'] + release_name = latest_release['name'] + release_url = latest_release['html_url'] + release_date = latest_release['published_at'] + formatted_date = format_date(release_date) + releases.append({ + 'Repo Name': f"[{repo_name}](https://github.com/{ORG_NAME}/{repo_name})", + 'Release Name': f"[{release_name}]({release_url})", + 'Release Date': formatted_date + }) + + # Sort releases by date in descending order + sorted_releases = sorted(releases, key=lambda x: x['Release Date'], reverse=True) + + # Create a DataFrame for Markdown table + df = pd.DataFrame(sorted_releases) + markdown_table = df.to_markdown(index=False, headers=['Repo Name', 'Release Name', 'Release Date']) + + # Print Markdown table + print(markdown_table) + +if __name__ == "__main__": + main() diff --git a/assets/make_readme/make_readme.sh b/assets/make_readme/make_readme.sh new file mode 100644 index 0000000..9ac7f67 --- /dev/null +++ b/assets/make_readme/make_readme.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# This will be run inside nciccbr/make_readme:latest docker + +MDPATH="assets/make_readme" + +# add banner +cat ${MDPATH}/banner.md > README_tmp.md + +# add toc +echo -ne " \n\n" >> README_tmp.md + +# add latest releses +echo -ne "## NEW Releases: :new: \n\n" >> README_tmp.md +python ${MDPATH}/get_recent_releases_table.py --nmonths 3 >> README_tmp.md + +# top contributors +echo -ne "## TOP contributors: :angel: \n\n" >> README_tmp.md +python ${MDPATH}/get_per_user_commits.py >> README_tmp.md + +# about us +cat ${MDPATH}/about_us.md >> README_tmp.md +cat ${MDPATH}/back_to_top.md >> README_tmp.md + +# our model +cat ${MDPATH}/our_model.md >> README_tmp.md +cat ${MDPATH}/back_to_top.md >> README_tmp.md + +# add pipelines +cat ${MDPATH}/pipelines.md >> README_tmp.md +cat ${MDPATH}/back_to_top.md >> README_tmp.md + +# add tools +cat ${MDPATH}/tools.md >> README_tmp.md +cat ${MDPATH}/back_to_top.md >> README_tmp.md + +# pipeliner release history +cat ${MDPATH}/ccbrpipeliner_release_history.md >> README_tmp.md +cat ${MDPATH}/back_to_top.md >> README_tmp.md + +# add list of all releases releses +echo -ne "## Latest Releases of pipelines/tools: \n\n" >> README_tmp.md +python ${MDPATH}/get_recent_releases_table.py >> README_tmp.md +cat ${MDPATH}/back_to_top.md >> README_tmp.md + +# add citation +cat ${MDPATH}/citation.md >> README_tmp.md +cat ${MDPATH}/back_to_top.md >> README_tmp.md + +# add toc +python ${MDPATH}/add_toc.py --input README_tmp.md --output profile/README.md + +rm -f README_tmp.md \ No newline at end of file diff --git a/assets/make_readme/new_releases.md b/assets/make_readme/new_releases.md new file mode 100644 index 0000000..e69de29 diff --git a/assets/make_readme/our_model.md b/assets/make_readme/our_model.md new file mode 100644 index 0000000..8e732d4 --- /dev/null +++ b/assets/make_readme/our_model.md @@ -0,0 +1,4 @@ + +## Our model + +[](https://bioinformatics.ccr.cancer.gov/ccbr/) diff --git a/assets/make_readme/output.md b/assets/make_readme/output.md new file mode 100644 index 0000000..6eea467 --- /dev/null +++ b/assets/make_readme/output.md @@ -0,0 +1,24 @@ +# Project Title + +## Table of Contents +- [Project Title](#project-title) + - [Introduction](#introduction) + - [Installation](#installation) + - [Usage](#usage) + - [License](#license) + +## Introduction + +Content here... + +## Installation + +Content here... + +## Usage + +Content here... + +## License + +Content here... diff --git a/assets/make_readme/pipelines.md b/assets/make_readme/pipelines.md new file mode 100644 index 0000000..61c03fd --- /dev/null +++ b/assets/make_readme/pipelines.md @@ -0,0 +1,51 @@ + +## Pipelines + +CCBR offers end-to-end analysis pipelines for NGS data analysis. + +> RHEL8 BIOWULF updates: +> +> In late 2023, [BIOWULF](https://hpc.nih.gov) migrated to a new operating system, [RHEL8](https://hpc.nih.gov/docs/rhel8.html). This migration rendered the Legacy functionality of CCBRPipeliner un-usable. We have been (and will continue to) work dilegently to bring `ccbrpipeliner` suite of pipelines back on-line for our Biowulf users. At the same time, we are also taking this opportunity to not only increase our repetoire of pipelines but also modernize and containerize our end-to-end analysis offerings. These changes will minimize, if not eliminate, the pipelines' dependencies on other Biowulf modules and make `ccbrpipeliner` "operating system and HPC" - agnostic, thereby making it shareable with collaborators, and runnable on other HPCs (like [FRCE](https://ncifrederick.cancer.gov/staff/frce/welcome)) and beyond. +> +Here is a list of our prominent pipelines and their release schedule on BIOWULF: + +| Data Type | Pipeline Name | CLI* availability date | GUI* availability date | +| --- | --- | --- |--- | +| RNASeq1 | [RENEE](https://github.com/CCBR/RENEE)![snakemake](https://raw.githubusercontent.com/CCBR/.github/main/img/snakemake-small-v2.svg) | July 3rd 2023 | July 14th 2023 | +| WESSeq2 | [XAVIER](https://github.com/CCBR/XAVIER)![snakemake](https://raw.githubusercontent.com/CCBR/.github/main/img/snakemake-small-v2.svg) | July 21th 2023 | Sep 1st 2023 | +| ATACSeq3 | [ASPEN](https://github.com/CCBR/ASPEN)![snakemake](https://raw.githubusercontent.com/CCBR/.github/main/img/snakemake-small-v2.svg) | November 30th 2023 | TBD | +| ChIPSeq4 | [CHAMPAGNE](https://github.com/CCBR/CHAMPAGNE)![nextflow](https://raw.githubusercontent.com/CCBR/.github/main/img/nextflow-small-v2.svg) | October 15th 2023 | TBD | +| CRISPRSeq5 | [CRISPIN](https://github.com/CCBR/CRISPIN)![nextflow](https://raw.githubusercontent.com/CCBR/.github/main/img/nextflow-small-v2.svg) | September 31st 2023 | TBD | +| CUT&RunSeq6 | [CARLISLE](https://github.com/CCBR/CARLISLE)![snakemake](https://raw.githubusercontent.com/CCBR/.github/main/img/snakemake-small-v2.svg) | October 31st 2023 | TBD | +| EV-Seq10 | [ESCAPE](https://github.com/CCBR/ESCAPE)![snakemake](https://raw.githubusercontent.com/CCBR/.github/main/img/snakemake-small-v2.svg) | March 26th, 2024 | TBD | +| circRNASeq7 | [CHARLIE](https://github.com/CCBR/CHARLIE)![snakemake](https://raw.githubusercontent.com/CCBR/.github/main/img/snakemake-small-v2.svg) | _Jul 31st 2024_ | TBD | +| scRNASeq8 | [SINCLAIR](https://github.com/CCBR/SINCLAIR)![nextflow](https://raw.githubusercontent.com/CCBR/.github/main/img/nextflow-small-v2.svg) | _Sep 30th 2024_ | TBD | +| WGSSeq9 | [LOGAN](https://github.com/CCBR/LOGAN)![nextflow](https://raw.githubusercontent.com/CCBR/.github/main/img/nextflow-small-v2.svg) | _Sep 30th 2024_ | TBD | +| spatialSeq11 | [SPENCER](https://github.com/CCBR/SPENCER)![nextflow](https://raw.githubusercontent.com/CCBR/.github/main/img/nextflow-small-v2.svg) | TBD | TBD | + +* CLI = Command Line Interface +* GUI = Graphical User Interface + + **1** RENEE=_Rna sEquencing aNalysis pipElinE_ starts with raw fastq files and ends with counts matrix. Downstream DEG support will be added at a later date. In the mean time you can use NIDAP or [iDEP](http://bioinformatics.sdstate.edu/idep96/) for DEG analysis. + + **2** XAVIER=_eXome Analysis and Variant explorER_ will be soon available on Biowulf. + + **3** ASPEN=_Atac Seq PipEliNe_ has limited support for differential ATACSeq signal analysis. CCBR has other pipelines for footprinting analysis like TOBIAS. Please reach out for details. + + **4** CHAMPAGNE=_CHromAtin iMmuno PrecipitAtion sequencinG aNalysis pipEline_. CCBR plans to completely revamp ChIPSeq and may not be available until Q4 of 2023. In the interim, we recommend using the [ENCODE pipeline](https://hpc.nih.gov/apps/chipseq_pipeline.html) on biowulf for ChIPSeq analsyis. + + **5** CRUISE=_Crispr scReen seqUencIng analySis pipEline_. CRISPRSeq analysis with MAGeCK, drugZ and BAGEL2. + + **6** CARLISLE=_Cut And Run anaLysIS pipeLinE_ supports human and mouse samples with (recommended) or without spike-ins. + + **7** CHARLIE=_Circrnas in Host And viRuses anaLysis pIpEline_ finds known and novel circRNAs in human/mouse + virus genomes. Differential circRNA analysis is planned for future. + + **8** SINCLAIR=_SINgle CelL AnalysIs Resource_ addresses various single cell modalities... eg. single-cell expression, CITESeq, TCR-Seq, etc. + + **9** LOGAN=_whoLe genOme-sequencinG Analysis pipeliNe_ will soon be CCBR's newest offering. + + **10** ESCAPE=_Extracellular veSiCles rnAseq PipelinE_. + + **11** SPENCER=_SPatial seqeENCing Resource_. + +For any other datatype or pipeline, please [email :mailbox:](mailto:ccbr_pipeliner@mail.nih.gov) us directly to get the conversation started! diff --git a/assets/make_readme/repo_list.md b/assets/make_readme/repo_list.md new file mode 100644 index 0000000..e69de29 diff --git a/assets/make_readme/toc.md b/assets/make_readme/toc.md new file mode 100644 index 0000000..e69de29 diff --git a/assets/make_readme/tools.md b/assets/make_readme/tools.md new file mode 100644 index 0000000..2f7cdb6 --- /dev/null +++ b/assets/make_readme/tools.md @@ -0,0 +1,8 @@ + +## Tools + +In additions to end-to-end analysis pipelines, the CCBR dev team also builds tools for data management, meta-data management, APIs, user management, etc. Here are some examples: + +- [spacesavers2](https://github.com/CCBR/spacesavers2) +- [permfix](https://github.com/CCBR/permfix/) +- [pyrkit](https://github.com/CCBR/pyrkit)