├── .circleci └── config.yml ├── .gitignore ├── LICENSE.txt ├── README.md ├── WDL ├── infercnv │ ├── infercnv.wdl │ ├── infercnv_test.wdl │ ├── infercnv_wdl_inputs_template.json │ └── test_data │ │ ├── gencode_v19_gene_pos_devel.txt │ │ ├── infercnv_wdl_test_inputs.json │ │ ├── oligodendroglioma_expression_downsampled.counts.matrix.txt │ │ ├── oligodendroglioma_metadata.test.txt │ │ ├── oligodendroglioma_observation_clusters.test.txt │ │ ├── oligodendroglioma_reference_clusters.test.txt │ │ └── options.json └── regev3prime │ ├── regev.scrtools.1.wdl │ ├── scp.count.27.wdl │ ├── scp.mkfastq.30.wdl │ └── single-cell-portal.cellranger_orchestra.2.wdl ├── config └── regev3prime.json ├── demo_data ├── cluster_assignments_example.txt ├── cluster_coordinates_example.txt ├── cluster_example.txt ├── coordinate_labels_example.txt ├── expression_example.txt ├── expression_matrix_example.txt ├── marker_gene_list_example.txt ├── mc_compliant_metadata_example.tsv ├── metadata_example.txt ├── spatial_example.txt └── subcluster_coordinates_example.txt ├── docker_files ├── .Rhistory ├── README.md ├── for_cell-ranger-count-2.0.2 │ └── dockerfile ├── for_scRNAseq_orchestra │ └── dockerfile ├── for_scripts │ └── dockerfile └── infercnv.dockerfile ├── requirements.txt ├── scripts ├── .coveragerc ├── Commandline.py ├── PortalFiles.py ├── PortalFilesTester.py ├── Tester.py ├── __init__.py ├── authenticate.py ├── benchmarks │ ├── README.md │ └── cellranger_orchestra_pipeline.ipynb ├── cell_ranger_to_scp.py ├── cli_parser.py ├── ideogram │ ├── __init__.py │ ├── cluster_groups.py │ ├── matrix_to_ideogram_annots.py │ └── tests │ │ ├── data │ │ ├── gencode_v19_gene_pos_truncated_sorted.txt │ │ ├── oligodendroglioma_annotations_downsampled.cluster.txt │ │ └── oligodendroglioma_expression_truncated.counts.matrix.txt │ │ └── test_matrix_to_ideogram_annots.py ├── manage_study.py ├── monitoring │ ├── README.md │ └── monitor_script.sh ├── object_conversion │ └── seurat │ │ ├── SCP2Seurat.Rmd │ │ ├── SCP2Seurat.nb.html │ │ ├── generate_SCP_files.Rmd │ │ ├── generate_SCP_files.nb.html │ │ └── seurat_scp_convenience.R ├── orchestra_methods.py ├── scp_api.py ├── scp_to_infercnv.py ├── swap_column_values.py ├── test_files │ ├── coordinates.txt │ ├── coordinates_bad_body.txt │ ├── coordinates_bad_body_2.txt │ ├── coordinates_bad_header.txt │ ├── coordinates_bad_header_duplicates.txt │ ├── coordinates_deidentifed_correct.txt │ ├── coordinates_deidentifed_precreated_correct.txt │ ├── coordinates_duplicates.txt │ ├── coordinates_mapping_correct.txt │ ├── coordinates_mapping_precreated_correct.txt │ ├── coordinates_subset_1_correct.txt │ ├── coordinates_subset_3_correct.txt │ ├── expression.txt │ ├── expression_bad_body_1.txt │ ├── expression_bad_body_2.txt │ ├── expression_bad_header.txt │ ├── expression_bad_header_2.txt │ ├── expression_deidentifed_correct.txt │ ├── expression_deidentifed_precreated_correct.txt │ ├── expression_mapping_correct.txt │ ├── expression_mapping_precreated_correct.txt │ ├── expression_n.txt │ ├── expression_subset_1_correct.txt │ ├── expression_subset_4_correct.txt │ ├── gene_list.txt │ ├── gene_list_additional_label.txt │ ├── gene_list_bad_empty_value.txt │ ├── gene_list_bad_header.txt │ ├── gene_list_bad_row_length.txt │ ├── gene_list_bad_type.txt │ ├── gene_list_minus_one.txt │ ├── gene_list_plus_one.txt │ ├── gene_sorted-test_sparse_matrix.mtx │ ├── metadata.txt │ ├── metadata_bad_body_1.txt │ ├── metadata_bad_body_2.txt │ ├── metadata_bad_header.txt │ ├── metadata_bad_header_2.txt │ ├── metadata_bad_header_dup.txt │ ├── metadata_bad_no_data.txt │ ├── metadata_bad_type.txt │ ├── metadata_bad_type_id.txt │ ├── metadata_bad_type_row_length.txt │ ├── metadata_deidentifed_correct.txt │ ├── metadata_deidentifed_precreated_correct.txt │ ├── metadata_duplicates.txt │ ├── metadata_mapping_correct.txt │ ├── metadata_mapping_precreated_correct.txt │ ├── metadata_subset_1_correct.txt │ ├── metadata_subset_2_correct.txt │ └── test_sparse_matrix.mtx ├── tests │ ├── data │ │ ├── AMC_v1.1.3.json │ │ ├── alexandria_convention_schema_2.1.0.json │ │ ├── invalid_array_v1.1.3.tsv │ │ ├── studies.json │ │ ├── study_files_post.json │ │ ├── toy_cluster.txt │ │ ├── toy_metadata.txt │ │ └── valid_array_v2.1.2.txt │ ├── gcp_mocks.py │ ├── test_manage_study.py │ ├── test_scp_api.py │ └── test_scp_to_infercnv.py └── verify_portal_file.py ├── setup.py └── site_figures ├── annotate ├── 01_Single_cell_portal_welcome.png ├── 02_Summary_page.png ├── 03_Explore_tab_menu.png ├── 04_Create_annotations.png ├── 05_Select_cells.png ├── 06_Annotations_group_name.png ├── 07_lasso.png ├── 08-label.png ├── 09_Create_annotations_button.png ├── 10_view_options.png ├── 11_select_annotation.png ├── 12_view_annotation.png ├── 13-expression-annotations.png ├── 14_profile_dropdown.png ├── 15_My_annotations.png ├── 16_My_annotations_page.png └── 17_share_study.png ├── billing-projects ├── billing-projects-add-users.png ├── billing-projects-select-create.png ├── create-billing-project.png └── select-billing-projects.png ├── cellranger_scCloud ├── cellranger_scCloud_countonly_settings.png ├── running_workflow.png ├── scCloud3Dnuclei900.png ├── settings.png ├── submission_history_actions.png ├── upload_data.png ├── upload_sampleSheet.png └── workflow_sync.png ├── create_account ├── 01_home.png ├── 02_select_account.png ├── 03_confirm_permissions.png ├── 04_profile_menu.png ├── account_creation_enter_info.png ├── account_creation_finished.png ├── account_creation_select_my_studies.png ├── account_creation_select_sign_up.png └── old │ ├── 00_home.png │ ├── 01_google_login.png │ └── 02_profile_menu.png ├── create_study ├── 00_home.png ├── 01_google_login.png ├── 01_home.png ├── 02_accept_terms_of_service.png ├── 03_add_study_name.png ├── 04_add_study_embargo.png ├── 05_add_study_embargo.png ├── 06_add_study_public.png ├── 06_add_study_workspace.png ├── 07_add_study_description.png └── 08_add_study_save.png ├── download_download_files.png ├── download_select_download.png ├── download_select_study.png ├── downloading_data ├── 00_select_study.png ├── 01_select_download_tab.png ├── 03_download_data.png ├── 04_click_for_download_command.png ├── 05_copy_download_command.png ├── download_download.png ├── download_scroll.png ├── download_select_data.png └── download_select_study.png ├── gsutil └── 02_study_details.png ├── infercnv ├── infercnv_image1.png ├── infercnv_image2.png ├── infercnv_image3.png ├── infercnv_image4.png ├── infercnv_image5.png ├── infercnv_image6.png ├── infercnv_image7.png └── infercnv_image8.png ├── managing_notifications ├── firecloud_notifications.png ├── notification_choices.png ├── portal_notifications.png └── portal_profile.png ├── metadata_convention └── upload_with_metadata_convention.png ├── metadata_file ├── mc_compliant_metadata_image_crop.jpg ├── mc_compliant_metadata_image_full.jpg ├── mc_compliant_metadata_image_full.png ├── mc_compliant_metadata_image_full.psd └── mc_compliant_metadata_image_full.sketch ├── publication_best_practices ├── create_publication_link.png └── publication_link.png ├── running_workflows ├── monitor_runs_v1.png ├── select_samples_v1.png ├── select_workflows_v1.png ├── select_workflows_v2.png ├── submit_workflow_v1.png ├── submit_workflow_v2.png └── workflows_tab_v1.png ├── search_studies ├── faceted-search.png ├── inferred-search.png ├── keyword-search.png └── search-logic.png ├── sharing_private_studies ├── 00_my_studies_btn.png ├── 01_edit_study_btn.png ├── 02_share_btn.png ├── 03_share_details.png ├── 04_show_details.png └── 05_study_details.png ├── sync_data ├── 00_add_study_btn.png ├── 01_sync_from_workspace.png ├── 01_synch_from_workspace.png ├── 02_add_study_save.png ├── 02_add_study_save_btn.png ├── 03_sync_study_btn.png ├── 03a_sync_modal.png ├── 04_sync_overview.png ├── 05_sync_cluster_info.png ├── 06_sync_cluster_completed.png ├── 07_sync_expression_info.png ├── 08_sync_gene_list_info.png ├── 09_sync_metadata_info.png ├── 10_sync_misc_info.png ├── 11_sync_data_directory.png ├── 12_sync_completed.png ├── 13_orphaned_file_info.png ├── 14_orphaned_file_update.png └── 15_orphaned_file_compelted.png ├── uploading_after_created ├── 00_exp_matrix_info.png ├── 01_exp_matrix_file.png ├── 02_exp_matrix_completed.png ├── 03_metadata_info.png ├── 04_metadata_file.png ├── 05_metadata_completed.png ├── 06_cluster_info.png ├── 07_cluster_file.png ├── 08_cluster_completed.png ├── 09_fastq_nonh_info.png ├── 10_fastq_nonh_file.png ├── 11_fastq_nonh_completed.png ├── 12_fastq_human_info.png ├── 13_gene_list_info.png ├── 14_gene_list_file.png ├── 15_gene_list_completed.png ├── 16_misc_info.png ├── 17_misc_file.png ├── 18_misc_completed.png ├── 19_study_finish.png ├── 20_study_details.png ├── 21_upload_data.png └── 22_exp_matrix_info.png ├── viewing_dotplots ├── collapse_tool_options.png ├── dot_plot_shape.png ├── dot_plot_view.png ├── dotplot_annotations.png ├── dotplot_options.png ├── dotplot_show_text.png ├── search_for_multiple_genes.png └── select_collapse_tool.png ├── visualization ├── 2-d-scatter-plot.png ├── 3-d-scatter-plot.png ├── dot-plot.png ├── genome-browser.png ├── heat-map.png ├── ideogram-example.png └── violin-plot.png └── wizard_overview └── wizard_overview.png /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | # Python CircleCI 2.1 configuration file 2 | 3 | version: 2.1 4 | 5 | orbs: 6 | codecov: codecov/codecov@1.0.5 7 | 8 | jobs: 9 | build: 10 | docker: 11 | # specify the version you desire here 12 | # use `-browsers` prefix for selenium tests, e.g. `3.6.1-browsers` 13 | - image: circleci/python:3.7.5-stretch 14 | 15 | # Specify service dependencies here if necessary 16 | # CircleCI maintains a library of pre-built images 17 | # documented at https://circleci.com/docs/2.0/circleci-images/ 18 | # - image: circleci/postgres:9.4 19 | 20 | working_directory: ~/single_cell_portal 21 | 22 | steps: 23 | - checkout 24 | 25 | # Download and cache dependencies 26 | - restore_cache: 27 | keys: 28 | - v6-dependencies-{{ checksum "requirements.txt" }} 29 | # fallback to using the latest cache if no exact match is found 30 | - v6-dependencies- 31 | 32 | - run: 33 | name: install dependencies 34 | command: | 35 | python3 -m venv venv 36 | . venv/bin/activate 37 | pip install -r requirements.txt 38 | 39 | - save_cache: 40 | paths: 41 | - ./venv 42 | key: v6-dependencies-{{ checksum "requirements.txt" }} 43 | 44 | - run: 45 | name: run tests 46 | command: | 47 | . venv/bin/activate 48 | cd scripts 49 | pytest --cov-report=xml --cov=./ 50 | 51 | - codecov/upload: 52 | file: scripts/coverage.xml 53 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | issues.json 2 | scp_validation_errors.txt 3 | scp_validation_warnings.txt 4 | scripts/genomes/output/ 5 | output_infercnv_example/ 6 | test_output/ 7 | 8 | 9 | # Ignore Python runtime assets 10 | env/ 11 | venv/ 12 | __pycache__/ 13 | scripts/__pycache__ 14 | *.pyc 15 | dist 16 | build 17 | *egg-info* 18 | 19 | # Ignore editor configuration 20 | .idea/ 21 | .vscode/ 22 | *.sublime-project 23 | *.sublime-workspace 24 | *.code-workspace 25 | 26 | # Ignore other detritus 27 | *.log 28 | .DS_Store 29 | .coverage 30 | coverage.xml 31 | htmlcov/ 32 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2019, Broad Institute, Inc. 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | * Neither the name Broad Institute, Inc. nor the names of its 15 | contributors may be used to endorse or promote products derived from 16 | this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Single-Cell Portal 2 | [![Build status](https://img.shields.io/circleci/build/github/broadinstitute/single_cell_portal.svg)](https://circleci.com/gh/broadinstitute/single_cell_portal) 3 | 4 | Hello and thank you for using the Single-Cell Portal. We hope the portal will contribute to open science by enabling visualizing and sharing scientific insight and data surrounding single-cell RNA-Seq. 5 | 6 | Thank you for being a part of this open science effort! 7 | 8 | ## Site URL 9 | To visit the portal please go to: https://portals.broadinstitute.org/single_cell 10 | 11 | ## Tutorials 12 | For tutorials and descriptions of files please go to: https://github.com/broadinstitute/single_cell_portal/wiki 13 | 14 | ## Convenience Scripts 15 | Scripts to help when working with data files for the portal are made available in this repo and require Python 3. Using these scripts to verify the format of input files can be found at https://github.com/broadinstitute/single_cell_portal/wiki/File-Definitions. 16 | 17 | To get set up to use these scripts: 18 | ``` 19 | git clone https://github.com/broadinstitute/single_cell_portal.git 20 | cd single_cell_portal 21 | python3 -m venv env --copies 22 | source env/bin/activate 23 | pip install -r requirements.txt 24 | ``` 25 | 26 | Then [install and initialize Google Cloud SDK](https://cloud.google.com/sdk/docs/quickstarts) on your machine; many scripts here require it. 27 | 28 | ## Reporting Bugs and Improvements 29 | To report a bug or suggest an improvement please create a new issue at: https://github.com/broadinstitute/single_cell_portal/issues 30 | 31 | ## Need Help? 32 | 33 | Email us at scp-support@broadinstitute.zendesk.com 34 | 35 | Happy Science!!! 36 | 37 | The Single-Cell Portal Team 38 | -------------------------------------------------------------------------------- /WDL/infercnv/infercnv.wdl: -------------------------------------------------------------------------------- 1 | workflow infercnv { 2 | File matrix_file 3 | File gene_pos_file 4 | File metadata_file 5 | String output_dir 6 | String diskSpace 7 | String delimiter 8 | # String cluster_names 9 | String ref_cluster_name 10 | String ref_group_name 11 | File ref_cluster_file # Path to cluster file containing reference (normal) cells 12 | String obs_cluster_name 13 | File obs_cluster_file # Path to cluster file containing observation (tumor) cells 14 | String reference_cell_annotation 15 | String observation_cell_annotation 16 | Int num_threads = 1 # Number of threads (also cores) to use in inferCNV 17 | Boolean? is_10x = false # if true, cutoff = 0.1, setting for 10x data 18 | Int? max_cells_per_group # user provide max_cells_per_group (25% of largest grouping) 19 | 20 | 21 | call run_infercnv { 22 | input: 23 | matrix_file = matrix_file, 24 | gene_pos_file = gene_pos_file, 25 | output_dir = output_dir, 26 | diskSpace = diskSpace, 27 | delimiter = delimiter, 28 | # cluster_path = cluster_path 29 | ref_cluster_name = ref_cluster_name, 30 | ref_cluster_file = ref_cluster_file, 31 | obs_cluster_name = obs_cluster_name, 32 | obs_cluster_file = obs_cluster_file, 33 | metadata_file = metadata_file, 34 | reference_cell_annotation = reference_cell_annotation, 35 | observation_cell_annotation = observation_cell_annotation, 36 | num_threads = num_threads, 37 | is_10x = is_10x, 38 | max_cells_per_group = max_cells_per_group 39 | } 40 | 41 | call run_matrix_to_ideogram_annots { 42 | input: 43 | matrix_file = run_infercnv.observations_matrix_file, 44 | ref_group_names_file = run_infercnv.ref_group_names_file, 45 | heatmap_thresholds_file = run_infercnv.heatmap_thresholds_file, 46 | gene_pos_file = gene_pos_file, 47 | # cluster_names = cluster_names, 48 | # cluster_path = cluster_path, 49 | ref_cluster_name = ref_cluster_name, 50 | ref_cluster_file = ref_cluster_file, 51 | obs_cluster_name = obs_cluster_name, 52 | obs_cluster_file = obs_cluster_file, 53 | ref_group_name = ref_group_name, 54 | metadata_file = metadata_file, 55 | diskSpace = diskSpace, 56 | output_dir = output_dir 57 | } 58 | } 59 | 60 | task run_infercnv { 61 | File matrix_file 62 | File gene_pos_file 63 | String output_dir 64 | String diskSpace 65 | String delimiter 66 | String ref_cluster_name 67 | File ref_cluster_file 68 | String obs_cluster_name 69 | File obs_cluster_file 70 | File metadata_file 71 | String reference_cell_annotation 72 | String observation_cell_annotation 73 | Int num_threads 74 | Boolean? is_10x 75 | Int? max_cells_per_group 76 | 77 | command <<< 78 | if [ ! -d ${output_dir} ]; then 79 | mkdir -p ${output_dir} 80 | fi 81 | 82 | # Convert SCP files into inferCNV annotations file 83 | python3 /single_cell_portal/scripts/scp_to_infercnv.py \ 84 | --metadata-path ${metadata_file} \ 85 | --reference-cluster-path ${ref_cluster_file} \ 86 | --reference-group-name ${reference_cell_annotation} \ 87 | --observation-group-name ${observation_cell_annotation} \ 88 | --output-dir ${output_dir} 89 | # Outputs: 90 | # infercnv_reference_cell_labels_from_scp.tsv 91 | # infercnv_annots_from_scp.tsv 92 | 93 | # Convert matrix as needed 94 | python3 /inferCNV/scripts/check_matrix_format.py \ 95 | --input_matrix ${matrix_file} \ 96 | --delimiter $'${delimiter}' \ 97 | --output_name "${output_dir}/expression.r_format.txt" 98 | 99 | # Convert dense matrix into sparse matrix, for likely memory savings 100 | prepare_sparsematrix.R \ 101 | --input "${output_dir}/expression.r_format.txt" \ 102 | --output "${output_dir}/test_sparse_scripted" 103 | 104 | # Run inferCNV 105 | inferCNV.R \ 106 | --raw_counts_matrix "${output_dir}/test_sparse_scripted.rds" \ 107 | --annotations_file "${output_dir}/infercnv_annots_from_scp.tsv" \ 108 | --gene_order_file ${gene_pos_file} \ 109 | --ref_group_names "`cat ${output_dir}/infercnv_reference_cell_labels_from_scp.tsv`" \ 110 | ${true="--cutoff 0.1" false="--cutoff 1" is_10x} \ 111 | --delim $'${delimiter}' \ 112 | --out_dir ${output_dir} \ 113 | --cluster_by_groups \ 114 | --denoise \ 115 | --HMM \ 116 | ${"--max_cells_per_group " + max_cells_per_group} \ 117 | --num_threads ${num_threads} 118 | >>> 119 | output { 120 | File figure = "${output_dir}/infercnv.png" 121 | File observations_matrix_file = "${output_dir}/infercnv.12_HMM_predHMMi6.hmm_mode-samples.observations.txt" 122 | File heatmap_thresholds_file = "${output_dir}/infercnv.12_HMM_predHMMi6.hmm_mode-samples.heatmap_thresholds.txt" 123 | File ref_group_names_file = "${output_dir}/infercnv_reference_cell_labels_from_scp.tsv" 124 | File hmm_figure = "${output_dir}/infercnv.12_HMM_predHMMi6.hmm_mode-samples.png" 125 | File dendrogram = "${output_dir}/infercnv.observations_dendrogram.txt" 126 | File groupings = "${output_dir}/infercnv.observation_groupings.txt" 127 | File r_object = "${output_dir}/run.final.infercnv_obj" 128 | } 129 | 130 | runtime { 131 | # https://hub.docker.com/r/singlecellportal/infercnv/tags 132 | docker: "singlecellportal/infercnv:0.99.7-60c7edc-rc1" 133 | memory: "52 GB" 134 | bootDiskSizeGb: 12 135 | disks: "local-disk ${diskSpace} HDD" 136 | cpu: 1 137 | preemptible: 2 138 | } 139 | } 140 | 141 | task run_matrix_to_ideogram_annots { 142 | File matrix_file 143 | File ref_group_names_file 144 | File gene_pos_file 145 | # String cluster_names 146 | # File cluster_paths 147 | String ref_cluster_name 148 | File ref_cluster_file 149 | String obs_cluster_name 150 | File obs_cluster_file 151 | File metadata_file 152 | File heatmap_thresholds_file 153 | String output_dir 154 | String diskSpace 155 | String ref_group_name 156 | 157 | command <<< 158 | if [ ! -d ${output_dir} ]; then 159 | mkdir -p ${output_dir} 160 | fi 161 | 162 | # Convert processed matrix output from inferCNV to summary Ideogram.js annotations 163 | python3 /single_cell_portal/scripts/ideogram/matrix_to_ideogram_annots.py \ 164 | --matrix-path ${matrix_file} \ 165 | --matrix-delimiter $' ' \ 166 | --gen-pos-file ${gene_pos_file} \ 167 | --cluster-names "${obs_cluster_name}" \ 168 | --ref-cluster-names "`cat ${ref_group_names_file}`" \ 169 | --cluster-paths "${obs_cluster_file}" \ 170 | --metadata-path ${metadata_file} \ 171 | --heatmap-thresholds-path ${heatmap_thresholds_file} \ 172 | --output-dir ${output_dir} \ 173 | --reference-group-name "${ref_group_name}" 174 | >>> 175 | 176 | output { 177 | # Array[File] ideogram_annotations = glob("${output_dir}/ideogram_exp_means/*.json") # Fails, cause unknown 178 | 179 | # TODO: Fix above glob expression, discard the less flexible expression below 180 | File ideogram_annotations = "${output_dir}/ideogram_exp_means/ideogram_exp_means__${obs_cluster_name}--${ref_group_name}--group--cluster.json" 181 | } 182 | 183 | runtime { 184 | # https://hub.docker.com/r/singlecellportal/infercnv/tags 185 | docker: "singlecellportal/infercnv:0.99.7-60c7edc-rc1" 186 | memory: "8 GB" 187 | bootDiskSizeGb: 12 188 | disks: "local-disk ${diskSpace} HDD" 189 | cpu: 1 190 | preemptible: 2 191 | } 192 | } 193 | -------------------------------------------------------------------------------- /WDL/infercnv/infercnv_test.wdl: -------------------------------------------------------------------------------- 1 | workflow infercnv { 2 | File matrix_file 3 | File gene_pos_file 4 | File metadata_file 5 | String output_dir 6 | String diskSpace 7 | String delimiter 8 | # String cluster_names 9 | String ref_cluster_name 10 | String ref_group_name 11 | File ref_cluster_file # Path to cluster file containing reference (normal) cells 12 | String obs_cluster_name 13 | File obs_cluster_file # Path to cluster file containing observation (tumor) cells 14 | String reference_cell_annotation 15 | String observation_cell_annotation 16 | Int num_threads = 1 # Number of threads (also cores) to use in inferCNV 17 | Boolean? is_10x = false # if true, cutoff = 0.1, setting for 10x data 18 | Int? max_cells_per_group # user provide max_cells_per_group (25% of largest grouping) 19 | 20 | 21 | call run_infercnv { 22 | input: 23 | matrix_file = matrix_file, 24 | gene_pos_file = gene_pos_file, 25 | output_dir = output_dir, 26 | diskSpace = diskSpace, 27 | delimiter = delimiter, 28 | # cluster_path = cluster_path 29 | ref_cluster_name = ref_cluster_name, 30 | ref_cluster_file = ref_cluster_file, 31 | obs_cluster_name = obs_cluster_name, 32 | obs_cluster_file = obs_cluster_file, 33 | metadata_file = metadata_file, 34 | reference_cell_annotation = reference_cell_annotation, 35 | observation_cell_annotation = observation_cell_annotation, 36 | num_threads = num_threads, 37 | is_10x = is_10x, 38 | max_cells_per_group = max_cells_per_group 39 | } 40 | 41 | call run_matrix_to_ideogram_annots { 42 | input: 43 | matrix_file = run_infercnv.observations_matrix_file, 44 | ref_group_names_file = run_infercnv.ref_group_names_file, 45 | heatmap_thresholds_file = run_infercnv.heatmap_thresholds_file, 46 | gene_pos_file = gene_pos_file, 47 | # cluster_names = cluster_names, 48 | # cluster_path = cluster_path, 49 | ref_cluster_name = ref_cluster_name, 50 | ref_cluster_file = ref_cluster_file, 51 | obs_cluster_name = obs_cluster_name, 52 | obs_cluster_file = obs_cluster_file, 53 | ref_group_name = ref_group_name, 54 | metadata_file = metadata_file, 55 | diskSpace = diskSpace, 56 | output_dir = output_dir 57 | } 58 | } 59 | 60 | task run_infercnv { 61 | File matrix_file 62 | File gene_pos_file 63 | String output_dir 64 | String diskSpace 65 | String delimiter 66 | String ref_cluster_name 67 | File ref_cluster_file 68 | String obs_cluster_name 69 | File obs_cluster_file 70 | File metadata_file 71 | String reference_cell_annotation 72 | String observation_cell_annotation 73 | Int num_threads 74 | Boolean? is_10x 75 | Int? max_cells_per_group 76 | 77 | command <<< 78 | if [ ! -d ${output_dir} ]; then 79 | mkdir -p ${output_dir} 80 | fi 81 | 82 | # Convert SCP files into inferCNV annotations file 83 | python3 /single_cell_portal/scripts/scp_to_infercnv.py \ 84 | --metadata-path ${metadata_file} \ 85 | --reference-cluster-path ${ref_cluster_file} \ 86 | --reference-group-name ${reference_cell_annotation} \ 87 | --observation-group-name ${observation_cell_annotation} \ 88 | --output-dir ${output_dir} 89 | # Outputs: 90 | # infercnv_reference_cell_labels_from_scp.tsv 91 | # infercnv_annots_from_scp.tsv 92 | 93 | # Convert matrix as needed 94 | python3 /inferCNV/scripts/check_matrix_format.py \ 95 | --input_matrix ${matrix_file} \ 96 | --delimiter $'${delimiter}' \ 97 | --output_name "${output_dir}/expression.r_format.txt" 98 | 99 | # Convert dense matrix into sparse matrix, for likely memory savings 100 | prepare_sparsematrix.R \ 101 | --input "${output_dir}/expression.r_format.txt" \ 102 | --output "${output_dir}/test_sparse_scripted" 103 | 104 | # Run inferCNV 105 | inferCNV.R \ 106 | --raw_counts_matrix "${output_dir}/test_sparse_scripted.rds" \ 107 | --annotations_file "${output_dir}/infercnv_annots_from_scp.tsv" \ 108 | --gene_order_file ${gene_pos_file} \ 109 | --ref_group_names "`cat ${output_dir}/infercnv_reference_cell_labels_from_scp.tsv`" \ 110 | ${true="--cutoff 0.1" false="--cutoff 1" is_10x} \ 111 | --delim $'${delimiter}' \ 112 | --out_dir ${output_dir} \ 113 | --cluster_by_groups \ 114 | --denoise \ 115 | --HMM \ 116 | ${"--max_cells_per_group " + max_cells_per_group} \ 117 | --num_threads ${num_threads} 118 | >>> 119 | output { 120 | File figure = "${output_dir}/infercnv.png" 121 | File observations_matrix_file = "${output_dir}/infercnv.12_HMM_predHMMi6.hmm_mode-samples.observations.txt" 122 | File heatmap_thresholds_file = "${output_dir}/infercnv.12_HMM_predHMMi6.hmm_mode-samples.heatmap_thresholds.txt" 123 | File ref_group_names_file = "${output_dir}/infercnv_reference_cell_labels_from_scp.tsv" 124 | File hmm_figure = "${output_dir}/infercnv.12_HMM_predHMMi6.hmm_mode-samples.png" 125 | File dendrogram = "${output_dir}/infercnv.observations_dendrogram.txt" 126 | File groupings = "${output_dir}/infercnv.observation_groupings.txt" 127 | File r_object = "${output_dir}/run.final.infercnv_obj" 128 | } 129 | 130 | runtime { 131 | # https://hub.docker.com/r/singlecellportal/infercnv/tags 132 | docker: "singlecellportal/infercnv:0.99.7-60c7edc-rc1" 133 | # memory: "52 GB" 134 | # bootDiskSizeGb: 12 135 | # disks: "local-disk ${diskSpace} HDD" 136 | # cpu: 1 137 | # preemptible: 2 138 | } 139 | } 140 | 141 | task run_matrix_to_ideogram_annots { 142 | File matrix_file 143 | File ref_group_names_file 144 | File gene_pos_file 145 | # String cluster_names 146 | # File cluster_paths 147 | String ref_cluster_name 148 | File ref_cluster_file 149 | String obs_cluster_name 150 | File obs_cluster_file 151 | File metadata_file 152 | File heatmap_thresholds_file 153 | String output_dir 154 | String diskSpace 155 | String ref_group_name 156 | 157 | command <<< 158 | if [ ! -d ${output_dir} ]; then 159 | mkdir -p ${output_dir} 160 | fi 161 | 162 | # Convert processed matrix output from inferCNV to summary Ideogram.js annotations 163 | python3 /single_cell_portal/scripts/ideogram/matrix_to_ideogram_annots.py \ 164 | --matrix-path ${matrix_file} \ 165 | --matrix-delimiter $' ' \ 166 | --gen-pos-file ${gene_pos_file} \ 167 | --cluster-names "${obs_cluster_name}" \ 168 | --ref-cluster-names "`cat ${ref_group_names_file}`" \ 169 | --cluster-paths "${obs_cluster_file}" \ 170 | --metadata-path ${metadata_file} \ 171 | --heatmap-thresholds-path ${heatmap_thresholds_file} \ 172 | --output-dir ${output_dir} \ 173 | --reference-group-name "${ref_group_name}" 174 | >>> 175 | 176 | output { 177 | # Array[File] ideogram_annotations = glob("${output_dir}/ideogram_exp_means/*.json") # Fails, cause unknown 178 | 179 | # TODO: Fix above glob expression, discard the less flexible expression below 180 | File ideogram_annotations = "${output_dir}/ideogram_exp_means/ideogram_exp_means__${obs_cluster_name}--${ref_group_name}--group--cluster.json" 181 | } 182 | 183 | runtime { 184 | # https://hub.docker.com/r/singlecellportal/infercnv/tags 185 | docker: "singlecellportal/infercnv:0.99.7-60c7edc-rc1" 186 | # memory: "8 GB" 187 | # bootDiskSizeGb: 12 188 | # disks: "local-disk ${diskSpace} HDD" 189 | # cpu: 1 190 | # preemptible: 2 191 | } 192 | } 193 | -------------------------------------------------------------------------------- /WDL/infercnv/infercnv_wdl_inputs_template.json: -------------------------------------------------------------------------------- 1 | { 2 | "infercnv.diskSpace": "String", 3 | "infercnv.gene_pos_path": "File", 4 | "infercnv.cluster_paths": "File", 5 | "infercnv.delimiter": "String", 6 | "infercnv.reference_cell_annotation": "String", 7 | "infercnv.matrix_path": "File", 8 | "infercnv.cluster_names": "String", 9 | "infercnv.observation_cell_annotation": "String", 10 | "infercnv.metadata_path": "File", 11 | "infercnv.output_dir": "String" 12 | } 13 | 14 | -------------------------------------------------------------------------------- /WDL/infercnv/test_data/infercnv_wdl_test_inputs.json: -------------------------------------------------------------------------------- 1 | { 2 | "infercnv.ref_group_name":"Sample", 3 | "infercnv.observation_cell_annotation":"Sample", 4 | "infercnv.output_dir":"infercnv_wdl_output", 5 | "infercnv.reference_cell_annotation":"Sample", 6 | "infercnv.gene_pos_file":"/workflow/test_data/gencode_v19_gene_pos_devel.txt", 7 | "infercnv.ref_cluster_name":"reference", 8 | "infercnv.ref_cluster_file":"/workflow/test_data/oligodendroglioma_reference_clusters.test.txt", 9 | "infercnv.obs_cluster_name":"observation", 10 | "infercnv.obs_cluster_file":"/workflow/test_data/oligodendroglioma_observation_clusters.test.txt", 11 | "infercnv.diskSpace":"10", 12 | "infercnv.matrix_file":"/workflow/test_data/oligodendroglioma_expression_downsampled.counts.matrix.txt", 13 | "infercnv.delimiter":"\t", 14 | "infercnv.metadata_file":"/workflow/test_data/oligodendroglioma_metadata.test.txt", 15 | "infercnv.num_threads": 1 16 | } 17 | -------------------------------------------------------------------------------- /WDL/infercnv/test_data/oligodendroglioma_metadata.test.txt: -------------------------------------------------------------------------------- 1 | NAME Sample 2 | TYPE group 3 | MGH54_P2_C12 Microglia/Macrophage 4 | MGH36_P6_F03 Microglia/Macrophage 5 | MGH53_P4_H08 Microglia/Macrophage 6 | MGH53_P2_E09 Microglia/Macrophage 7 | MGH36_P5_E12 Microglia/Macrophage 8 | MGH54_P2_H07 Microglia/Macrophage 9 | MGH36_P4_H06 Microglia/Macrophage 10 | MGH53_P1_C01 Microglia/Macrophage 11 | MGH36_P4_A10 Microglia/Macrophage 12 | MGH36_P3_D10 Microglia/Macrophage 13 | MGH54_P2_F09 Microglia/Macrophage 14 | MGH36_P7_H06 Microglia/Macrophage 15 | MGH54_P2_H03 Microglia/Macrophage 16 | MGH36_P8_A02 Microglia/Macrophage 17 | MGH53_P2_C08 Microglia/Macrophage 18 | MGH53_P2_A07 Microglia/Macrophage 19 | MGH53_P1_F10 Microglia/Macrophage 20 | MGH36_P3_H06 Microglia/Macrophage 21 | MGH54_P2_F03 Microglia/Macrophage 22 | MGH54_P16_F12 Oligodendrocytes (non-malignant) 23 | MGH54_P12_C10 Oligodendrocytes (non-malignant) 24 | MGH54_P11_C11 Oligodendrocytes (non-malignant) 25 | MGH54_P15_D06 Oligodendrocytes (non-malignant) 26 | MGH54_P16_A03 Oligodendrocytes (non-malignant) 27 | MGH53_P7_B09 Oligodendrocytes (non-malignant) 28 | MGH54_P10_G04 Oligodendrocytes (non-malignant) 29 | MGH53_P2_A02 Oligodendrocytes (non-malignant) 30 | MGH53_P7_F07 Oligodendrocytes (non-malignant) 31 | MGH53_P5_G02 Oligodendrocytes (non-malignant) 32 | MGH53_P11_H03 Oligodendrocytes (non-malignant) 33 | MGH53_P1_A10 Oligodendrocytes (non-malignant) 34 | MGH53_P5_H09 Oligodendrocytes (non-malignant) 35 | MGH53_P11_E03 Oligodendrocytes (non-malignant) 36 | MGH53_P10_F11 Oligodendrocytes (non-malignant) 37 | MGH53_P1_D07 Oligodendrocytes (non-malignant) 38 | MGH53_P2_G04 Oligodendrocytes (non-malignant) 39 | MGH53_P2_G09 Oligodendrocytes (non-malignant) 40 | MGH53_P5_F04 Oligodendrocytes (non-malignant) 41 | MGH53_P11_F08 Oligodendrocytes (non-malignant) 42 | MGH53_P8_F03 Oligodendrocytes (non-malignant) 43 | MGH53_P6_B11 Oligodendrocytes (non-malignant) 44 | MGH53_P6_H06 Oligodendrocytes (non-malignant) 45 | MGH36_P1_B02 malignant_MGH36 46 | MGH36_P1_H10 malignant_MGH36 47 | MGH36_P3_A09 malignant_MGH36 48 | MGH36_P3_B02 malignant_MGH36 49 | MGH36_P3_C04 malignant_MGH36 50 | MGH36_P3_E06 malignant_MGH36 51 | MGH36_P4_B09 malignant_MGH36 52 | MGH36_P4_D11 malignant_MGH36 53 | MGH36_P4_G03 malignant_MGH36 54 | MGH36_P6_C04 malignant_MGH36 55 | MGH36_P6_G08 malignant_MGH36 56 | MGH36_P7_B04 malignant_MGH36 57 | MGH36_P7_D03 malignant_MGH36 58 | MGH36_P7_F04 malignant_MGH36 59 | MGH36_P7_G04 malignant_MGH36 60 | MGH36_P5_B08 malignant_MGH36 61 | MGH36_P5_F05 malignant_MGH36 62 | MGH36_P5_F11 malignant_MGH36 63 | MGH36_P5_H05 malignant_MGH36 64 | MGH36_P10_B08 malignant_MGH36 65 | MGH36_P10_C10 malignant_MGH36 66 | MGH36_P10_E07 malignant_MGH36 67 | MGH36_P10_F09 malignant_MGH36 68 | MGH36_P8_E05 malignant_MGH36 69 | MGH36_P8_H09 malignant_MGH36 70 | MGH36_P9_B01 malignant_MGH36 71 | MGH36_P9_B11 malignant_MGH36 72 | MGH36_P9_H03 malignant_MGH36 73 | MGH36_P2_A08 malignant_MGH36 74 | MGH36_P2_C02 malignant_MGH36 75 | MGH36_P2_G01 malignant_MGH36 76 | MGH36_P2_G02 malignant_MGH36 77 | MGH36_P2_H06 malignant_MGH36 78 | MGH53_P5_A08 malignant_MGH53 79 | MGH53_P5_D02 malignant_MGH53 80 | MGH53_P6_F03 malignant_MGH53 81 | MGH53_P6_H04 malignant_MGH53 82 | MGH53_P7_B10 malignant_MGH53 83 | MGH53_P7_C03 malignant_MGH53 84 | MGH53_P7_E02 malignant_MGH53 85 | MGH53_P7_G11 malignant_MGH53 86 | MGH53_P7_H03 malignant_MGH53 87 | MGH53_P8_A07 malignant_MGH53 88 | MGH53_P8_C11 malignant_MGH53 89 | MGH53_P8_E05 malignant_MGH53 90 | MGH53_P8_E10 malignant_MGH53 91 | MGH53_P8_H04 malignant_MGH53 92 | MGH53_P1_B04 malignant_MGH53 93 | MGH53_P12_A01 malignant_MGH53 94 | MGH53_P12_B09 malignant_MGH53 95 | MGH53_P12_C02 malignant_MGH53 96 | MGH53_P12_C09 malignant_MGH53 97 | MGH53_P12_D12 malignant_MGH53 98 | MGH53_P12_E03 malignant_MGH53 99 | MGH53_P10_B02 malignant_MGH53 100 | MGH53_P10_C09 malignant_MGH53 101 | MGH53_P10_E09 malignant_MGH53 102 | MGH53_P10_H08 malignant_MGH53 103 | MGH53_P11_A03 malignant_MGH53 104 | MGH53_P11_B02 malignant_MGH53 105 | MGH53_P11_B11 malignant_MGH53 106 | MGH53_P11_F12 malignant_MGH53 107 | MGH53_P11_H12 malignant_MGH53 108 | MGH53_P9_A09 malignant_MGH53 109 | MGH53_P9_C12 malignant_MGH53 110 | MGH53_P4_C03 malignant_MGH53 111 | MGH53_P4_F01 malignant_MGH53 112 | 97_P3_G07 malignant_97 113 | 97_P3_E04 malignant_97 114 | 97_P3_D10 malignant_97 115 | 97_P3_E01 malignant_97 116 | 97_P3_E03 malignant_97 117 | 97_P3_B10 malignant_97 118 | 97_P3_B04 malignant_97 119 | 97_P3_B01 malignant_97 120 | 97_P3_B03 malignant_97 121 | 97_P3_D01 malignant_97 122 | 97_P3_D04 malignant_97 123 | 97_P3_D12 malignant_97 124 | 97_P3_F12 malignant_97 125 | 97_P3_E12 malignant_97 126 | 97_P5_D09 malignant_97 127 | 97_P6_H01 malignant_97 128 | 97_P5_C10 malignant_97 129 | 97_P6_E07 malignant_97 130 | 97_P5_D02 malignant_97 131 | 97_P6_G10 malignant_97 132 | 97_P5_G05 malignant_97 133 | 97_P6_B09 malignant_97 134 | 97_P5_H08 malignant_97 135 | 97_P5_F04 malignant_97 136 | 97_P5_D01 malignant_97 137 | 97_P6_F05 malignant_97 138 | 97_P6_A06 malignant_97 139 | 97_P5_A07 malignant_97 140 | 97_P6_E01 malignant_97 141 | 97_P6_D09 malignant_97 142 | 97_P5_G06 malignant_97 143 | 97_P5_E12 malignant_97 144 | 97_P6_A07 malignant_97 145 | 97_P6_G12 malignant_97 146 | 97_P6_H06 malignant_97 147 | 93_P3_B02 malignant_93 148 | 93_P3_G05 malignant_93 149 | 93_P3_H04 malignant_93 150 | 93_P3_A10 malignant_93 151 | 93_P3_C04 malignant_93 152 | 93_P3_D07 malignant_93 153 | 93_P3_G07 malignant_93 154 | 93_P3_E09 malignant_93 155 | 93_P3_G11 malignant_93 156 | 93_P3_A11 malignant_93 157 | 93_P6_H11 malignant_93 158 | 93_P5_H06 malignant_93 159 | 93_P5_C12 malignant_93 160 | 93_P6_A02 malignant_93 161 | 93_P5_D07 malignant_93 162 | 93_P6_C07 malignant_93 163 | 93_P9_C04 malignant_93 164 | 93_P9_E04 malignant_93 165 | 93_P9_H01 malignant_93 166 | 93_P8_B06 malignant_93 167 | 93_P10_E05 malignant_93 168 | 93_P9_B10 malignant_93 169 | 93_P8_G11 malignant_93 170 | 93_P9_F02 malignant_93 171 | 93_P10_F03 malignant_93 172 | 93_P9_G11 malignant_93 173 | 93_P8_E09 malignant_93 174 | 93_P8_C11 malignant_93 175 | 93_P9_A03 malignant_93 176 | 93_P10_G11 malignant_93 177 | 93_P9_B11 malignant_93 178 | 93_P9_D06 malignant_93 179 | 93_P8_B02 malignant_93 180 | 93_P8_C09 malignant_93 181 | 93_P9_H03 malignant_93 182 | 93_P10_D04 malignant_93 183 | 93_P8_G09 malignant_93 184 | 93_P10_B10 malignant_93 185 | 93_P9_C07 malignant_93 186 | 93_P8_A12 malignant_93 187 | -------------------------------------------------------------------------------- /WDL/infercnv/test_data/oligodendroglioma_observation_clusters.test.txt: -------------------------------------------------------------------------------- 1 | NAME X Y Z Sample 2 | TYPE numeric numeric numeric group 3 | MGH36_P1_B02 1 1 1 malignant_MGH36 4 | MGH36_P1_H10 1 1 1 malignant_MGH36 5 | MGH36_P3_A09 1 1 1 malignant_MGH36 6 | MGH36_P3_B02 1 1 1 malignant_MGH36 7 | MGH36_P3_C04 1 1 1 malignant_MGH36 8 | MGH36_P3_E06 1 1 1 malignant_MGH36 9 | MGH36_P4_B09 1 1 1 malignant_MGH36 10 | MGH36_P4_D11 1 1 1 malignant_MGH36 11 | MGH36_P4_G03 1 1 1 malignant_MGH36 12 | MGH36_P6_C04 1 1 1 malignant_MGH36 13 | MGH36_P6_G08 1 1 1 malignant_MGH36 14 | MGH36_P7_B04 1 1 1 malignant_MGH36 15 | MGH36_P7_D03 1 1 1 malignant_MGH36 16 | MGH36_P7_F04 1 1 1 malignant_MGH36 17 | MGH36_P7_G04 1 1 1 malignant_MGH36 18 | MGH36_P5_B08 1 1 1 malignant_MGH36 19 | MGH36_P5_F05 1 1 1 malignant_MGH36 20 | MGH36_P5_F11 1 1 1 malignant_MGH36 21 | MGH36_P5_H05 1 1 1 malignant_MGH36 22 | MGH36_P10_B08 1 1 1 malignant_MGH36 23 | MGH36_P10_C10 1 1 1 malignant_MGH36 24 | MGH36_P10_E07 1 1 1 malignant_MGH36 25 | MGH36_P10_F09 1 1 1 malignant_MGH36 26 | MGH36_P8_E05 1 1 1 malignant_MGH36 27 | MGH36_P8_H09 1 1 1 malignant_MGH36 28 | MGH36_P9_B01 1 1 1 malignant_MGH36 29 | MGH36_P9_B11 1 1 1 malignant_MGH36 30 | MGH36_P9_H03 1 1 1 malignant_MGH36 31 | MGH36_P2_A08 1 1 1 malignant_MGH36 32 | MGH36_P2_C02 1 1 1 malignant_MGH36 33 | MGH36_P2_G01 1 1 1 malignant_MGH36 34 | MGH36_P2_G02 1 1 1 malignant_MGH36 35 | MGH36_P2_H06 1 1 1 malignant_MGH36 36 | MGH53_P5_A08 1 1 1 malignant_MGH53 37 | MGH53_P5_D02 1 1 1 malignant_MGH53 38 | MGH53_P6_F03 1 1 1 malignant_MGH53 39 | MGH53_P6_H04 1 1 1 malignant_MGH53 40 | MGH53_P7_B10 1 1 1 malignant_MGH53 41 | MGH53_P7_C03 1 1 1 malignant_MGH53 42 | MGH53_P7_E02 1 1 1 malignant_MGH53 43 | MGH53_P7_G11 1 1 1 malignant_MGH53 44 | MGH53_P7_H03 1 1 1 malignant_MGH53 45 | MGH53_P8_A07 1 1 1 malignant_MGH53 46 | MGH53_P8_C11 1 1 1 malignant_MGH53 47 | MGH53_P8_E05 1 1 1 malignant_MGH53 48 | MGH53_P8_E10 1 1 1 malignant_MGH53 49 | MGH53_P8_H04 1 1 1 malignant_MGH53 50 | MGH53_P1_B04 1 1 1 malignant_MGH53 51 | MGH53_P12_A01 1 1 1 malignant_MGH53 52 | MGH53_P12_B09 1 1 1 malignant_MGH53 53 | MGH53_P12_C02 1 1 1 malignant_MGH53 54 | MGH53_P12_C09 1 1 1 malignant_MGH53 55 | MGH53_P12_D12 1 1 1 malignant_MGH53 56 | MGH53_P12_E03 1 1 1 malignant_MGH53 57 | MGH53_P10_B02 1 1 1 malignant_MGH53 58 | MGH53_P10_C09 1 1 1 malignant_MGH53 59 | MGH53_P10_E09 1 1 1 malignant_MGH53 60 | MGH53_P10_H08 1 1 1 malignant_MGH53 61 | MGH53_P11_A03 1 1 1 malignant_MGH53 62 | MGH53_P11_B02 1 1 1 malignant_MGH53 63 | MGH53_P11_B11 1 1 1 malignant_MGH53 64 | MGH53_P11_F12 1 1 1 malignant_MGH53 65 | MGH53_P11_H12 1 1 1 malignant_MGH53 66 | MGH53_P9_A09 1 1 1 malignant_MGH53 67 | MGH53_P9_C12 1 1 1 malignant_MGH53 68 | MGH53_P4_C03 1 1 1 malignant_MGH53 69 | MGH53_P4_F01 1 1 1 malignant_MGH53 70 | 97_P3_G07 1 1 1 malignant_97 71 | 97_P3_E04 1 1 1 malignant_97 72 | 97_P3_D10 1 1 1 malignant_97 73 | 97_P3_E01 1 1 1 malignant_97 74 | 97_P3_E03 1 1 1 malignant_97 75 | 97_P3_B10 1 1 1 malignant_97 76 | 97_P3_B04 1 1 1 malignant_97 77 | 97_P3_B01 1 1 1 malignant_97 78 | 97_P3_B03 1 1 1 malignant_97 79 | 97_P3_D01 1 1 1 malignant_97 80 | 97_P3_D04 1 1 1 malignant_97 81 | 97_P3_D12 1 1 1 malignant_97 82 | 97_P3_F12 1 1 1 malignant_97 83 | 97_P3_E12 1 1 1 malignant_97 84 | 97_P5_D09 1 1 1 malignant_97 85 | 97_P6_H01 1 1 1 malignant_97 86 | 97_P5_C10 1 1 1 malignant_97 87 | 97_P6_E07 1 1 1 malignant_97 88 | 97_P5_D02 1 1 1 malignant_97 89 | 97_P6_G10 1 1 1 malignant_97 90 | 97_P5_G05 1 1 1 malignant_97 91 | 97_P6_B09 1 1 1 malignant_97 92 | 97_P5_H08 1 1 1 malignant_97 93 | 97_P5_F04 1 1 1 malignant_97 94 | 97_P5_D01 1 1 1 malignant_97 95 | 97_P6_F05 1 1 1 malignant_97 96 | 97_P6_A06 1 1 1 malignant_97 97 | 97_P5_A07 1 1 1 malignant_97 98 | 97_P6_E01 1 1 1 malignant_97 99 | 97_P6_D09 1 1 1 malignant_97 100 | 97_P5_G06 1 1 1 malignant_97 101 | 97_P5_E12 1 1 1 malignant_97 102 | 97_P6_A07 1 1 1 malignant_97 103 | 97_P6_G12 1 1 1 malignant_97 104 | 97_P6_H06 1 1 1 malignant_97 105 | 93_P3_B02 1 1 1 malignant_93 106 | 93_P3_G05 1 1 1 malignant_93 107 | 93_P3_H04 1 1 1 malignant_93 108 | 93_P3_A10 1 1 1 malignant_93 109 | 93_P3_C04 1 1 1 malignant_93 110 | 93_P3_D07 1 1 1 malignant_93 111 | 93_P3_G07 1 1 1 malignant_93 112 | 93_P3_E09 1 1 1 malignant_93 113 | 93_P3_G11 1 1 1 malignant_93 114 | 93_P3_A11 1 1 1 malignant_93 115 | 93_P6_H11 1 1 1 malignant_93 116 | 93_P5_H06 1 1 1 malignant_93 117 | 93_P5_C12 1 1 1 malignant_93 118 | 93_P6_A02 1 1 1 malignant_93 119 | 93_P5_D07 1 1 1 malignant_93 120 | 93_P6_C07 1 1 1 malignant_93 121 | 93_P9_C04 1 1 1 malignant_93 122 | 93_P9_E04 1 1 1 malignant_93 123 | 93_P9_H01 1 1 1 malignant_93 124 | 93_P8_B06 1 1 1 malignant_93 125 | 93_P10_E05 1 1 1 malignant_93 126 | 93_P9_B10 1 1 1 malignant_93 127 | 93_P8_G11 1 1 1 malignant_93 128 | 93_P9_F02 1 1 1 malignant_93 129 | 93_P10_F03 1 1 1 malignant_93 130 | 93_P9_G11 1 1 1 malignant_93 131 | 93_P8_E09 1 1 1 malignant_93 132 | 93_P8_C11 1 1 1 malignant_93 133 | 93_P9_A03 1 1 1 malignant_93 134 | 93_P10_G11 1 1 1 malignant_93 135 | 93_P9_B11 1 1 1 malignant_93 136 | 93_P9_D06 1 1 1 malignant_93 137 | 93_P8_B02 1 1 1 malignant_93 138 | 93_P8_C09 1 1 1 malignant_93 139 | 93_P9_H03 1 1 1 malignant_93 140 | 93_P10_D04 1 1 1 malignant_93 141 | 93_P8_G09 1 1 1 malignant_93 142 | 93_P10_B10 1 1 1 malignant_93 143 | 93_P9_C07 1 1 1 malignant_93 144 | 93_P8_A12 1 1 1 malignant_93 -------------------------------------------------------------------------------- /WDL/infercnv/test_data/oligodendroglioma_reference_clusters.test.txt: -------------------------------------------------------------------------------- 1 | NAME X Y Z Sample 2 | TYPE numeric numeric numeric group 3 | MGH54_P2_C12 1 1 1 Microglia/Macrophage 4 | MGH36_P6_F03 1 1 1 Microglia/Macrophage 5 | MGH53_P4_H08 1 1 1 Microglia/Macrophage 6 | MGH53_P2_E09 1 1 1 Microglia/Macrophage 7 | MGH36_P5_E12 1 1 1 Microglia/Macrophage 8 | MGH54_P2_H07 1 1 1 Microglia/Macrophage 9 | MGH36_P4_H06 1 1 1 Microglia/Macrophage 10 | MGH53_P1_C01 1 1 1 Microglia/Macrophage 11 | MGH36_P4_A10 1 1 1 Microglia/Macrophage 12 | MGH36_P3_D10 1 1 1 Microglia/Macrophage 13 | MGH54_P2_F09 1 1 1 Microglia/Macrophage 14 | MGH36_P7_H06 1 1 1 Microglia/Macrophage 15 | MGH54_P2_H03 1 1 1 Microglia/Macrophage 16 | MGH36_P8_A02 1 1 1 Microglia/Macrophage 17 | MGH53_P2_C08 1 1 1 Microglia/Macrophage 18 | MGH53_P2_A07 1 1 1 Microglia/Macrophage 19 | MGH53_P1_F10 1 1 1 Microglia/Macrophage 20 | MGH36_P3_H06 1 1 1 Microglia/Macrophage 21 | MGH54_P2_F03 1 1 1 Microglia/Macrophage 22 | MGH54_P16_F12 1 1 1 Oligodendrocytes (non-malignant) 23 | MGH54_P12_C10 1 1 1 Oligodendrocytes (non-malignant) 24 | MGH54_P11_C11 1 1 1 Oligodendrocytes (non-malignant) 25 | MGH54_P15_D06 1 1 1 Oligodendrocytes (non-malignant) 26 | MGH54_P16_A03 1 1 1 Oligodendrocytes (non-malignant) 27 | MGH53_P7_B09 1 1 1 Oligodendrocytes (non-malignant) 28 | MGH54_P10_G04 1 1 1 Oligodendrocytes (non-malignant) 29 | MGH53_P2_A02 1 1 1 Oligodendrocytes (non-malignant) 30 | MGH53_P7_F07 1 1 1 Oligodendrocytes (non-malignant) 31 | MGH53_P5_G02 1 1 1 Oligodendrocytes (non-malignant) 32 | MGH53_P11_H03 1 1 1 Oligodendrocytes (non-malignant) 33 | MGH53_P1_A10 1 1 1 Oligodendrocytes (non-malignant) 34 | MGH53_P5_H09 1 1 1 Oligodendrocytes (non-malignant) 35 | MGH53_P11_E03 1 1 1 Oligodendrocytes (non-malignant) 36 | MGH53_P10_F11 1 1 1 Oligodendrocytes (non-malignant) 37 | MGH53_P1_D07 1 1 1 Oligodendrocytes (non-malignant) 38 | MGH53_P2_G04 1 1 1 Oligodendrocytes (non-malignant) 39 | MGH53_P2_G09 1 1 1 Oligodendrocytes (non-malignant) 40 | MGH53_P5_F04 1 1 1 Oligodendrocytes (non-malignant) 41 | MGH53_P11_F08 1 1 1 Oligodendrocytes (non-malignant) 42 | MGH53_P8_F03 1 1 1 Oligodendrocytes (non-malignant) 43 | MGH53_P6_B11 1 1 1 Oligodendrocytes (non-malignant) 44 | MGH53_P6_H06 1 1 1 Oligodendrocytes (non-malignant) -------------------------------------------------------------------------------- /WDL/infercnv/test_data/options.json: -------------------------------------------------------------------------------- 1 | { 2 | "final_workflow_outputs_dir": "/workflow/outputs/", 3 | "final_workflow_log_dir": "/workflow/workflow_logs/", 4 | "final_call_logs_dir": "/workflow/call_logs/" 5 | } 6 | -------------------------------------------------------------------------------- /WDL/regev3prime/scp.count.27.wdl: -------------------------------------------------------------------------------- 1 | workflow cellranger { 2 | # Name of Sample to run CellRanger Count on 3 | String sampleId 4 | # Array of Fastq Directories for running decoupled 5 | Array[String]? fastqs 6 | # Comma Seperated String of Fastq Directories for Running in orchestration 7 | String? commaFastqs 8 | # Reference Name for Count 9 | String reference 10 | # Reference File for Count 11 | File transcriptome_file 12 | # Run CellRanger built in secondary analysis? Default to false because we have Bo's pipeline 13 | Boolean secondary = false 14 | # CellRanger count input 15 | Int? expectCells 16 | # CellRanger count input 17 | Int? forceCells 18 | # CellRanger count input 19 | Boolean? do_force_cells 20 | # CellRanger count input 21 | String? chemistry 22 | # Runtime Arguments 23 | Int? diskSpace = 500 24 | Int? memory = 120 25 | Int? cores = 32 26 | Int? preemptible = 2 27 | 28 | call CellRanger { 29 | input: 30 | sampleId = sampleId, 31 | fastqs = fastqs, 32 | commaFastqs = commaFastqs, 33 | transcriptome_file = transcriptome_file, 34 | reference = reference, 35 | secondary = secondary, 36 | expectCells = expectCells, 37 | diskSpace = diskSpace, 38 | forceCells = forceCells, 39 | do_force_cells = do_force_cells, 40 | chemistry = chemistry, 41 | memory = memory, 42 | cores = cores, 43 | preemptible = preemptible 44 | } 45 | 46 | output { 47 | File barcodes = CellRanger.barcodes 48 | File genes = CellRanger.genes 49 | File matrix = CellRanger.matrix 50 | File qc = CellRanger.qc 51 | File report = CellRanger.report 52 | File sorted_bam = CellRanger.sorted_bam 53 | File sorted_bam_index = CellRanger.sorted_bam_index 54 | File filtered_gene_h5 = CellRanger.filtered_gene_h5 55 | File raw_gene_h5 = CellRanger.raw_gene_h5 56 | File raw_barcodes = CellRanger.raw_barcodes 57 | File raw_genes = CellRanger.raw_genes 58 | File raw_matrix = CellRanger.raw_matrix 59 | File mol_info_h5 = CellRanger.mol_info_h5 60 | File monitoringLog = CellRanger.monitoringLog 61 | } 62 | } 63 | 64 | task CellRanger { 65 | String sampleId 66 | Array[String]? fastqs 67 | String? commaFastqs 68 | String reference 69 | File transcriptome_file 70 | Int? expectCells 71 | Boolean? secondary 72 | Int? forceCells 73 | Boolean? do_force_cells 74 | String? chemistry 75 | Int diskSpace 76 | Int memory 77 | Int cores 78 | Int preemptible 79 | 80 | command { 81 | monitor_script.sh > monitoring.log & 82 | 83 | orchestra_methods.py -c=count \ 84 | -id=${sampleId} \ 85 | -cf=${commaFastqs} \ 86 | -fs "${sep='" "' fastqs}" \ 87 | -E=${expectCells} \ 88 | -F=${forceCells} \ 89 | -C=${chemistry} \ 90 | -S=${secondary} \ 91 | -tf=${transcriptome_file} \ 92 | -dfc=${do_force_cells} 93 | } 94 | output { 95 | File barcodes = "results_${sampleId}/outs/filtered_gene_bc_matrices/${reference}/barcodes.tsv" 96 | File genes = "results_${sampleId}/outs/filtered_gene_bc_matrices/${reference}/genes.tsv" 97 | File matrix = "results_${sampleId}/outs/filtered_gene_bc_matrices/${reference}/matrix.mtx" 98 | File qc = "results_${sampleId}/outs/metrics_summary.csv" 99 | File report = "results_${sampleId}/outs/web_summary.html" 100 | File sorted_bam = "results_${sampleId}/outs/possorted_genome_bam.bam" 101 | File sorted_bam_index = "results_${sampleId}/outs/possorted_genome_bam.bam.bai" 102 | File filtered_gene_h5 = "results_${sampleId}/outs/filtered_gene_bc_matrices_h5.h5" 103 | File raw_gene_h5 = "results_${sampleId}/outs/raw_gene_bc_matrices_h5.h5" 104 | File raw_barcodes = "results_${sampleId}/outs/raw_gene_bc_matrices/${reference}/barcodes.tsv" 105 | File raw_genes = "results_${sampleId}/outs/raw_gene_bc_matrices/${reference}/genes.tsv" 106 | File raw_matrix = "results_${sampleId}/outs/raw_gene_bc_matrices/${reference}/matrix.mtx" 107 | File mol_info_h5 = "results_${sampleId}/outs/molecule_info.h5" 108 | File monitoringLog = "monitoring.log" 109 | } 110 | 111 | runtime { 112 | docker: "singlecellportal/scrna-seq_orchestra" 113 | memory: "${memory} GB" 114 | bootDiskSizeGb: 12 115 | disks: "local-disk ${diskSpace} HDD" 116 | cpu: cores 117 | preemptible: preemptible 118 | } 119 | } -------------------------------------------------------------------------------- /WDL/regev3prime/scp.mkfastq.30.wdl: -------------------------------------------------------------------------------- 1 | workflow cellranger { 2 | # gsurl of BCL to run CellRanger mkfastq on 3 | String bcl 4 | # Csv File mapping samples, lanes and indices to bcl 5 | File masterCsv 6 | # Output directory of Fastqs 7 | String output_directory 8 | # Runtime Arguments 9 | Int? diskSpace = 500 10 | Int? memory = 120 11 | Int? cores = 32 12 | Int? preemptible = 2 13 | 14 | call mkfastq { 15 | input: 16 | diskSpace = diskSpace, 17 | bcl = bcl, 18 | output_directory = output_directory, 19 | masterCsv = masterCsv, 20 | memory = memory, 21 | cores = cores, 22 | preemptible = preemptible 23 | } 24 | 25 | output { 26 | String path = mkfastq.path 27 | String undetermined_path = mkfastq.undetermined_path 28 | File monitoringLog = mkfastq.monitoringLog 29 | } 30 | } 31 | 32 | task mkfastq { 33 | String bcl 34 | String output_directory 35 | File masterCsv 36 | Int diskSpace 37 | Int memory 38 | Int cores 39 | Int preemptible 40 | 41 | command { 42 | monitor_script.sh > monitoring.log & 43 | 44 | orchestra_methods.py -c=mkfastq \ 45 | -b=${bcl} \ 46 | -M=${masterCsv} \ 47 | -O=${output_directory} 48 | } 49 | 50 | output { 51 | String path = read_string("path.txt") 52 | String undetermined_path = read_string("undetermined.txt") 53 | File monitoringLog = "monitoring.log" 54 | } 55 | 56 | runtime { 57 | docker: "singlecellportal/scrna-seq_orchestra" 58 | memory: "${memory} GB" 59 | bootDiskSizeGb: 12 60 | disks: "local-disk ${diskSpace} HDD" 61 | cpu: cores 62 | preemptible: preemptible 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /config/regev3prime.json: -------------------------------------------------------------------------------- 1 | {"orchestra.output_filtration_results":"false","orchestra.fastqOutputDirectory":"gs://fc-80257aab-59e9-4921-89e5-ffda7decdb7b/mouse1/2cell/fastq/","orchestra.generate_scp_outputs":"true","orchestra.genome":"mm10","orchestra.output_name":"gs://fc-80257aab-59e9-4921-89e5-ffda7decdb7b/mouse1/2cell/","orchestra.run_fitsne":"false","orchestra.masterCsv":"gs://fc-80257aab-59e9-4921-89e5-ffda7decdb7b/mouse1/inputs/mouse1_2cell_sample_sheet.csv","orchestra.preemptible":2,"orchestra.umap_on_diffmap":"false","orchestra.run_fle":"false","orchestra.scrtools.output_seurat_compatible":"false","orchestra.run_louvain":"true","orchestra.run_umap":"false","orchestra.memory":60,"orchestra.output_dense":"false","orchestra.cores":64,"orchestra.annotate_cluster":"false","orchestra.diskSpace":240,"orchestra.run_tsne":"true","orchestra.transMap":"gs://fc-80257aab-59e9-4921-89e5-ffda7decdb7b/inputs/transMap.csv","orchestra.run_kmeans":"false","orchestra.run_hdbscan":"false","orchestra.run_approximated_louvain":"false"} -------------------------------------------------------------------------------- /demo_data/cluster_assignments_example.txt: -------------------------------------------------------------------------------- 1 | CELL_NAME CLUSTER SUB-CLUSTER 2 | CELL_0001 CLST_A CLST_A_1 3 | CELL_0002 CLST_A CLST_A_1 4 | CELL_0003 CLST_A CLST_A_1 5 | CELL_0004 CLST_A CLST_A_2 6 | CELL_0005 CLST_A CLST_A_2 7 | CELL_0006 CLST_B CLST_B_1 8 | CELL_0007 CLST_B CLST_B_1 9 | CELL_0008 CLST_B CLST_B_2 10 | CELL_0009 CLST_B CLST_B_2 11 | CELL_00010 CLST_B CLST_B_2 12 | CELL_00011 CLST_C CLST_C_1 13 | CELL_00012 CLST_C CLST_C_1 14 | CELL_00013 CLST_C CLST_C_1 15 | CELL_00014 CLST_C CLST_C_2 16 | CELL_00015 CLST_C CLST_C_2 -------------------------------------------------------------------------------- /demo_data/cluster_coordinates_example.txt: -------------------------------------------------------------------------------- 1 | CELL_NAME X Y 2 | CELL_0001 34.472 32.211 3 | CELL_0002 15.975 10.043 4 | CELL_0003 -11.688 -53.645 5 | CELL_0004 30.04 31.138 6 | CELL_0005 23.862 33.092 7 | CELL_0006 -39.07 -14.64 8 | CELL_0007 40.039 27.206 9 | CELL_0008 28.755 27.187 10 | CELL_0009 -48.601 -13.512 11 | CELL_00010 14.653 27.832 12 | CELL_00011 20.603 32.071 13 | CELL_00012 -10.333 -51.733 14 | CELL_00013 -52.966 -12.484 15 | CELL_00014 38.513 26.969 16 | CELL_00015 12.838 13.047 -------------------------------------------------------------------------------- /demo_data/cluster_example.txt: -------------------------------------------------------------------------------- 1 | NAME X Y Z Category Intensity 2 | TYPE numeric numeric numeric group numeric 3 | CELL_0001 34.472 32.211 60.035 C 0.719 4 | CELL_0002 15.975 10.043 21.424 B 0.904 5 | CELL_0003 -11.688 -53.645 -58.374 A 2.195 6 | CELL_0004 30.04 31.138 33.597 B -1.084 7 | CELL_0005 23.862 33.092 26.904 B 4.256 8 | CELL_0006 -39.07 -14.64 -44.643 A 1.317 9 | CELL_0007 40.039 27.206 55.211 C -4.917 10 | CELL_0008 28.755 27.187 34.686 B -3.777 11 | CELL_0009 -48.601 -13.512 -51.659 A 0.778 12 | CELL_00010 14.653 27.832 28.586 B 4.62 13 | CELL_00011 20.603 32.071 45.484 C -3.019 14 | CELL_00012 -10.333 -51.733 -26.631 A -4.989 15 | CELL_00013 -52.966 -12.484 -60.369 A 3.137 16 | CELL_00014 38.513 26.969 63.654 C -1.74 17 | CELL_00015 12.838 13.047 17.685 B -2.443 18 | -------------------------------------------------------------------------------- /demo_data/coordinate_labels_example.txt: -------------------------------------------------------------------------------- 1 | X Y Z LABELS 2 | 35.472 33.211 61.035 Region 1 3 | -10.688 -52.645 -57.374 Region 2 4 | 31.04 32.138 34.597 Region 3 5 | 24.862 34.092 27.904 Region 4 6 | -47.601 -12.512 -50.659 Region 5 7 | 15.653 28.832 29.586 Region 6 8 | 21.603 33.071 46.484 Region 7 9 | -9.333 -50.733 -25.631 Region 8 -------------------------------------------------------------------------------- /demo_data/expression_example.txt: -------------------------------------------------------------------------------- 1 | GENE CELL_0001 CELL_0002 CELL_0003 CELL_0004 CELL_0005 CELL_0006 CELL_0007 CELL_0008 CELL_0009 CELL_00010 CELL_00011 CELL_00012 CELL_00013 CELL_00014 CELL_00015 2 | Itm2a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 | Sergef 0 7.092 0 7.511 6.803 0 0 0 6.783 7.562 0 7.073 6.697 0 5.61 4 | Chil5 0 0 0 0 0 5.466 0 0 0 0 0 0 0 0 0 5 | Fam109a 0 0 4.205 0 0 0 0 7.305 0 0 0 0 0 0 7.221 6 | Dhx9 0 3.096 4.599 0 4.118 0 3.833 7.607 4.329 5.468 0 0 5.705 0 4.641 7 | Ssu72 5.043 0 6.439 0 0 0 0 0 7.106 7.162 7.85 6.016 0 0 0 8 | Olfr1018 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 | Fam71e2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | Eif2b2 0 0 0 0 0 6.549 0 0 7.117 0 0 0 0 6.487 0 11 | 1700061E18Rik 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | Mks1 0 0 0 0 0 6.062 4.59 0 0 0 0 0 0 4.463 0 13 | Gm12000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | Hebp2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | Gm14444 0 4.909 0 0 0 0 0 0 0 0 0 0 0 0 0 16 | Vps28 0 7.707 0 0 0 6.076 0 0 5.808 8.836 7.794 0 7.248 0 6.966 17 | Setd6 0 5.907 0 0 0 0 0 0 7.36 0 0 0 0 0 0 18 | Gstm2 0 0 0 0 0 0 0 0 4.524 0 0 0 0 0 0 19 | Spn-ps 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | Psma4 0 0 8.257 8.272 0 6.995 5.666 6.898 0 0 7.498 7.028 5.221 0 7.03 -------------------------------------------------------------------------------- /demo_data/expression_matrix_example.txt: -------------------------------------------------------------------------------- 1 | GENE CELL_0001 CELL_0002 CELL_0003 CELL_0004 CELL_0005 CELL_0006 CELL_0007 CELL_0008 CELL_0009 CELL_00010 CELL_00011 CELL_00012 CELL_00013 CELL_00014 CELL_00015 2 | Itm2a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 | Sergef 0 7.092 0 7.511 6.803 0 0 0 6.783 7.562 0 7.073 6.697 0 5.61 4 | Chil5 0 0 0 0 0 5.466 0 0 0 0 0 0 0 0 0 5 | Fam109a 0 0 4.205 0 0 0 0 7.305 0 0 0 0 0 0 7.221 6 | Dhx9 0 3.096 4.599 0 4.118 0 3.833 7.607 4.329 5.468 0 0 5.705 0 4.641 7 | Ssu72 5.043 0 6.439 0 0 0 0 0 7.106 7.162 7.85 6.016 0 0 0 8 | Olfr1018 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 | Fam71e2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | Eif2b2 0 0 0 0 0 6.549 0 0 7.117 0 0 0 0 6.487 0 11 | 1700061E18Rik 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | Mks1 0 0 0 0 0 6.062 4.59 0 0 0 0 0 0 4.463 0 13 | Gm12000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | Hebp2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | Gm14444 0 4.909 0 0 0 0 0 0 0 0 0 0 0 0 0 16 | Vps28 0 7.707 0 0 0 6.076 0 0 5.808 8.836 7.794 0 7.248 0 6.966 17 | Setd6 0 5.907 0 0 0 0 0 0 7.36 0 0 0 0 0 0 18 | Gstm2 0 0 0 0 0 0 0 0 4.524 0 0 0 0 0 0 19 | Spn-ps 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | Psma4 0 0 8.257 8.272 0 6.995 5.666 6.898 0 0 7.498 7.028 5.221 0 7.03 -------------------------------------------------------------------------------- /demo_data/marker_gene_list_example.txt: -------------------------------------------------------------------------------- 1 | GENE NAMES CLST_A CLST_B CLST_C 2 | Grm2 6.39 1.96 0.18 3 | St3gal1 2.98 0.81 0.18 4 | C1ql3 6.66 2.05 0 5 | Kcnc4 6.14 3.03 0.39 6 | Cebpd 3.54 1.11 0.08 7 | C1ql2 7.66 0.82 0 8 | Trpc6 5.95 0.53 0.08 9 | Pter 5.77 1.18 0.29 10 | Kif26b 4.88 1.04 0.12 11 | Gsg1l 4.08 1.99 1.28 12 | Igfbp5 5.49 0.83 0 13 | Fam84a 6.56 4.1 0.7 14 | Lrtm2 5.86 1.31 0.65 15 | Ehd1 6.24 2.47 0.99 16 | Gfra1 4.59 1.31 0.14 17 | Calb1 6.6 2.3 0.84 18 | Doc2b 4.44 2.55 0 19 | Lct 5.3 0.57 0.27 20 | Pde1b 6.32 2.32 1.11 21 | Dock10 5.77 1.16 0.44 22 | Rasl10a 6.75 3.76 0 23 | St18 5.27 1.44 0.41 24 | Jun 6.44 2.88 0.87 25 | Dbpht2 6.05 3.07 2.81 26 | Pcdh8 5.02 1.39 1.59 27 | Slc30a3 7.32 3.41 2.4 28 | Mapk3 6.16 1.6 1.01 29 | Bhlhe22 3.65 0.98 0.78 30 | Sipa1l2 5.55 1.92 0.89 31 | Gabrd 4.69 1.03 0 32 | Syt17 6.03 3.97 0.23 33 | Stxbp6 6.24 0.91 1.38 34 | Lingo2 6 3.91 0.88 35 | Pde7b 4.38 0.61 0 36 | Anp32a 5.85 2.74 2.3 37 | Gprin1 4.54 2.37 1.49 38 | Cacng3 4.98 3.07 0.8 39 | Slc39a6 5.89 2.16 2.51 40 | Limd2 6.97 4.14 3.61 41 | Plekha2 5.72 0.41 2.89 42 | Marcks 5.35 2.06 0.83 43 | Rab40b 5.06 2.42 1.86 44 | Npnt 5.01 0.39 2.14 45 | Ppp1r1a 6.67 2.99 3.97 46 | B4galt5 3.72 1 1.32 47 | Chst15 5.69 3.09 2.7 48 | Crlf1 4.69 0.74 0 49 | Dsp 4.41 0.21 0.05 50 | Dgkh 6.28 2.61 3.64 -------------------------------------------------------------------------------- /demo_data/mc_compliant_metadata_example.tsv: -------------------------------------------------------------------------------- 1 | NAME biosample_id donor_id species species__ontology_label sex cell_type cell_type__ontology_label average_intensity disease disease__ontology_label organ organ__ontology_label library_preparation_protocol library_preparation_protocol__ontology_label 2 | TYPE group group group group group group group numeric group group group group group group 3 | CELL_0001 mm1_lymph mouse1 NCBITaxon_10090 Mus musculus male CL_0000084 T cell 7.742 MONDO_0005062 lymphoma UBERON_0000029 lymph node EFO_0009899 10x 3' v2 4 | CELL_0002 mm1_lymph mouse1 NCBITaxon_10090 Mus musculus male CL_0000625 CD8-positive, alpha-beta T cell -13.745 MONDO_0005062 lymphoma UBERON_0000029 lymph node EFO_0009899 10x 3' v2 5 | CELL_0003 hu1_blood human1 NCBITaxon_9606 Homo sapiens female CL_0000235 macrophage -2.116 PATO_0000461 normal UBERON_0000178 blood EFO_0009899 10x 3' v2 6 | CELL_0004 hu1_blood human1 NCBITaxon_9606 Homo sapiens female CL_0000084 T cell 0.638 PATO_0000461 normal UBERON_0000178 blood EFO_0009899 10x 3' v2 7 | CELL_0005 mm1_blood mouse1 NCBITaxon_10090 Mus musculus male CL_0000084 T cell 9.188 MONDO_0005062 lymphoma UBERON_0000178 blood EFO_0009899 10x 3' v2 8 | CELL_0006 mm1_blood mouse1 NCBITaxon_10090 Mus musculus male CL_0000786 plasma cell -4.125 MONDO_0005062 lymphoma UBERON_0000178 blood EFO_0009899 10x 3' v2 9 | CELL_0007 mm2_blood mouse2 NCBITaxon_10090 Mus musculus male CL_0000094 granulocyte -12.606 PATO_0000461 normal UBERON_0000178 blood EFO_0009899 10x 3' v2 10 | CELL_0008 mm2_blood mouse2 NCBITaxon_10090 Mus musculus male CL_0000576 monocyte 3.675 PATO_0000461 normal UBERON_0000178 blood EFO_0009899 10x 3' v2 11 | CELL_0009 hu2_blood human2 NCBITaxon_9606 Homo sapiens male CL_0000576 monocyte -2.27 PATO_0000461 normal UBERON_0000178 blood EFO_0009899 10x 3' v2 12 | CELL_0010 hu2_blood human2 NCBITaxon_9606 Homo sapiens male CL_0000084 T cell -2.606 PATO_0000461 normal UBERON_0000178 blood EFO_0009899 10x 3' v2 13 | -------------------------------------------------------------------------------- /demo_data/metadata_example.txt: -------------------------------------------------------------------------------- 1 | NAME Cluster Sub-Cluster Average Intensity 2 | TYPE group group numeric 3 | CELL_0001 CLST_A CLST_A_1 7.742 4 | CELL_0002 CLST_A CLST_A_1 -13.745 5 | CELL_0003 CLST_A CLST_A_1 -0.375 6 | CELL_0004 CLST_A CLST_A_2 9.188 7 | CELL_0005 CLST_A CLST_A_2 9.652 8 | CELL_0006 CLST_B CLST_B_1 -4.125 9 | CELL_0007 CLST_B CLST_B_1 -2.275 10 | CELL_0008 CLST_B CLST_B_2 -12.606 11 | CELL_0009 CLST_B CLST_B_2 3.675 12 | CELL_00010 CLST_B CLST_B_2 -2.116 13 | CELL_00011 CLST_C CLST_C_1 0.638 14 | CELL_00012 CLST_C CLST_C_1 8.888 15 | CELL_00013 CLST_C CLST_C_1 -2.27 16 | CELL_00014 CLST_C CLST_C_2 -2.606 17 | CELL_00015 CLST_C CLST_C_2 -9.089 -------------------------------------------------------------------------------- /demo_data/spatial_example.txt: -------------------------------------------------------------------------------- 1 | NAME X Y Z Category Intensity 2 | TYPE numeric numeric numeric group numeric 3 | CELL_0001 34.472 32.211 60.035 C 0.719 4 | CELL_0002 15.975 10.043 21.424 B 0.904 5 | CELL_0003 -11.688 -53.645 -58.374 A 2.195 6 | CELL_0004 30.04 31.138 33.597 B -1.084 7 | CELL_0005 23.862 33.092 26.904 B 4.256 8 | CELL_0006 -39.07 -14.64 -44.643 A 1.317 9 | CELL_0007 40.039 27.206 55.211 C -4.917 10 | CELL_0008 28.755 27.187 34.686 B -3.777 11 | CELL_0009 -48.601 -13.512 -51.659 A 0.778 12 | CELL_00010 14.653 27.832 28.586 B 4.62 13 | CELL_00011 20.603 32.071 45.484 C -3.019 14 | CELL_00012 -10.333 -51.733 -26.631 A -4.989 15 | CELL_00013 -52.966 -12.484 -60.369 A 3.137 16 | CELL_00014 38.513 26.969 63.654 C -1.74 17 | CELL_00015 12.838 13.047 17.685 B -2.443 18 | -------------------------------------------------------------------------------- /demo_data/subcluster_coordinates_example.txt: -------------------------------------------------------------------------------- 1 | CELL_NAME X Y 2 | CELL_0001 34.472 32.211 3 | CELL_0002 15.975 10.043 4 | CELL_0003 -11.688 -53.645 5 | CELL_0004 30.04 31.138 6 | CELL_0005 23.862 33.092 7 | CELL_0006 -39.07 -14.64 8 | CELL_0007 40.039 27.206 9 | CELL_0008 28.755 27.187 10 | CELL_0009 -48.601 -13.512 11 | CELL_00010 14.653 27.832 12 | CELL_00011 20.603 32.071 13 | CELL_00012 -10.333 -51.733 14 | CELL_00013 -52.966 -12.484 15 | CELL_00014 38.513 26.969 16 | CELL_00015 12.838 13.047 -------------------------------------------------------------------------------- /docker_files/.Rhistory: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/docker_files/.Rhistory -------------------------------------------------------------------------------- /docker_files/README.md: -------------------------------------------------------------------------------- 1 | # Docker Files 2 | 3 | Various Docker Files 4 | 5 | ## File Mappings 6 | 7 | File Name | Use | Docker Hub Link | Relevant Files 8 | ------------------- | --------------------------- | ---------------------------------------------------------------------------- | ---------------------------- 9 | scRNAseq_orchestra | Orchestra WDL Docker Image | [Docker Hub](https://hub.docker.com/r/singlecellportal/scrna-seq_orchestra/) | [orchestra_methods.py](https://github.com/broadinstitute/single_cell_portal/blob/master/scripts/orchestra_methods.py) 10 | cell-ranger-count-2.0.2 | Cellranger Count Docker Image | [Docker Hub](https://hub.docker.com/r/singlecellportal/cell-ranger-count-2.0.2/) | [SortSparseMatrix.py](https://github.com/broadinstitute/single_cell_portal/blob/master/scripts/SortSparseMatrix.py), [cell_ranger_to_scp.py](https://github.com/broadinstitute/single_cell_portal/blob/master/scripts/cell_ranger_to_scp.py) 11 | infercnv.dockerfile | inferCNV (0.8.2) Docker Image | [Docker Hub](https://hub.docker.com/r/singlecellportal/infercnv/) | [cluster_groups.py](https://github.com/broadinstitute/single_cell_portal/blob/master/scripts/ideogram/cluster_groups.py), [matrix_to_ideogram_annots.py](https://github.com/broadinstitute/single_cell_portal/blob/master/scripts/ideogram/matrix_to_ideogram_annots.py) 12 | 13 | -------------------------------------------------------------------------------- /docker_files/for_cell-ranger-count-2.0.2/dockerfile: -------------------------------------------------------------------------------- 1 | # Single Cell Portal Cell Ranger Count (2.0.2) 2 | FROM regevlab/cellranger-2.0.2 3 | 4 | RUN mkdir /software/scripts 5 | ADD https://raw.githubusercontent.com/broadinstitute/single_cell_portal/master/scripts/cell_ranger_to_scp.py /software/scripts/cell_ranger_to_scp.py 6 | ADD https://raw.githubusercontent.com/broadinstitute/single_cell_portal/master/scripts/SortSparseMatrix.py /software/scripts/SortSparseMatrix.py 7 | 8 | RUN pip install pandas 9 | 10 | ENV PATH "$PATH:/software/scripts" 11 | 12 | RUN chmod -R a+x /software/scripts -------------------------------------------------------------------------------- /docker_files/for_scRNAseq_orchestra/dockerfile: -------------------------------------------------------------------------------- 1 | # Single Cell Portal scRNA-Seq Orchestra 2 | FROM regevlab/cellranger-2.1.1 3 | 4 | RUN mkdir -p /software/scripts 5 | ADD https://raw.githubusercontent.com/broadinstitute/single_cell_portal/master/scripts/orchestra_methods.py /software/scripts/orchestra_methods.py 6 | ADD https://raw.githubusercontent.com/broadinstitute/single_cell_portal/master/scripts/monitoring/monitor_script.sh /software/scripts/monitor_script.sh 7 | 8 | RUN chmod a+x /software/scripts/orchestra_methods.py 9 | RUN chmod u+x /software/scripts/monitor_script.sh 10 | 11 | ENV PATH "$PATH:/software/scripts" 12 | 13 | RUN apt-get -y update && apt-get -y install procps -------------------------------------------------------------------------------- /docker_files/for_scripts/dockerfile: -------------------------------------------------------------------------------- 1 | # This docker file is used for the Single Cell Portal Scripts. 2 | FROM ubuntu:16.04 3 | 4 | RUN apt-get -y update && apt-get install -y python3.6 && apt-get install -y python3-pip && pip3 install --upgrade google-api-python-client oauthlib google-auth 5 | -------------------------------------------------------------------------------- /docker_files/infercnv.dockerfile: -------------------------------------------------------------------------------- 1 | # Docker file for inferCNV 2 | FROM bioconductor/devel_base2 3 | 4 | LABEL org.label-schema.license="BSD-3-Clause" \ 5 | org.label-schema.vendor="Broad Institute" \ 6 | maintainer="Eric Weitz " 7 | 8 | RUN apt-get update && apt-get -y install curl libssl-dev libcurl4-openssl-dev \ 9 | libxml2-dev git python3 jags \ 10 | r-cran-rjags && \ 11 | apt-get clean && rm -rf /var/tmp/* \ 12 | /tmp/* /var/lib/apt/lists/* 13 | 14 | # Install R and Bioconductor packages 15 | RUN echo "options(repos = c(CRAN = 'https://cran.rstudio.com'))" >.Rprofile 16 | RUN R -e "install.packages(c('devtools','KernSmooth', 'lattice', 'Matrix', \ 17 | 'survival', 'MASS', 'TH.data', 'nlme', 'ape', \ 18 | 'fitdistrplus', 'multcomp', 'coin', 'binhf', \ 19 | 'caTools', 'coda', 'dplyr', 'doparallel', \ 20 | 'fastcluster', 'foreach', 'futile.logger', \ 21 | 'future', 'gplots', 'ggplot2', 'HiddenMarkov', \ 22 | 'reshape', 'rjags', 'RColorBrew', 'doParallel', \ 23 | 'tidyr', 'gridExtra', 'argparse', 'knitr', \ 24 | 'rmarkdown', 'testthat', 'optparse', 'logging', \ 25 | 'data.table'), repos = 'http://cran.us.r-project.org')" 26 | RUN R -e "BiocManager::install(c('BiocGenerics', 'edgeR', 'SingleCellExperiment', \ 27 | 'SummarizedExperiment', 'BiocStyle', 'BiocCheck'), version = \"3.9\")" 28 | 29 | 30 | # Checkout and install inferCNV 31 | # update to 2019-04-26 commit (Fix observations heatmap chromosome labels) 32 | RUN git clone https://github.com/broadinstitute/inferCNV && cd inferCNV && \ 33 | git checkout master && git checkout 60c7edc5590ad74b4f8354b4426cff496fc74c99 && \ 34 | R CMD INSTALL . && rm -rf example/full_precision __simulations .git 35 | # Delete extraneous inferCNV directories 36 | 37 | 38 | # update single_cell_portal checkout to 2019-05-01 commit 39 | # Get scripts to pre-process SCP files content to inferCNV input formal 40 | # and post-process to convert inferCNV outputs to Ideogram.js annotations, then clean up 41 | WORKDIR / 42 | RUN git clone https://github.com/broadinstitute/single_cell_portal scp && cd scp && \ 43 | git checkout jlc_infercnv && git checkout 2950174e71b281417b07181a8a4af9251207fc5d 44 | RUN mkdir -p single_cell_portal/scripts && mv scp/scripts/ideogram single_cell_portal/scripts/ && \ 45 | mv scp/scripts/scp_to_infercnv.py single_cell_portal/scripts/ && rm -rf scp 46 | 47 | # set path 48 | ENV PATH=${PATH}:/inferCNV/scripts:/single_cell_portal/scripts 49 | 50 | WORKDIR / 51 | CMD inferCNV.R --help -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | pandas>=0.16.2 2 | requests>=2.21.0 3 | scp-ingest-pipeline==1.12.2 4 | numpy==1.19.2 5 | numba==0.51.2 6 | llvmlite==0.34 7 | 8 | # For faster development iterations. 9 | # ../../scp-ingest-pipeline 10 | 11 | # Dev dependencies 12 | pytest==5.0.1 13 | coverage==4.5.3 14 | pytest-xdist==1.29.0 15 | pytest-cov==2.8.1 16 | -------------------------------------------------------------------------------- /scripts/.coveragerc: -------------------------------------------------------------------------------- 1 | [run] 2 | omit = tests/* 3 | -------------------------------------------------------------------------------- /scripts/Commandline.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | """ 4 | Functions involving sending commands to the commandline. 5 | """ 6 | import logging 7 | import os 8 | import subprocess as sp 9 | 10 | 11 | class Commandline: 12 | """ 13 | This class wraps calls to the command line in a simple interface. 14 | """ 15 | 16 | def __init__(self, name=None, logr_cur=None): 17 | """ 18 | Initializer that allows one to set the logger. 19 | 20 | * logr_cur : Logger 21 | Optional parameter for logging. 22 | If supplied this logger will be used, 23 | otherwise the root logger will be used. 24 | """ 25 | 26 | self.logr_cur = logr_cur if logr_cur else logging.getLogger(name) 27 | 28 | # Tested 29 | def func_CMD(self, command, use_bash=False, test=False, stdout=False, mute=False): 30 | """ 31 | Runs the given command. 32 | * command : Command to run on the commandline 33 | : String 34 | * use_bash : Boolean 35 | : If true, sends the command through using 36 | BASH not SH (Bourne) or default shell (windows) 37 | : Although the False is _I believe_ is not specific 38 | to an OS, True is. 39 | * test : Boolean 40 | If true, the commands will not run but will be logged. 41 | * stdout : Boolean 42 | : If true, stdout will be given instead of True. 43 | On a fail False (boolean) will still be given. 44 | * mute : Boolean 45 | : If true, mute stdout even on fail False. 46 | * Return : Boolean 47 | True indicates success 48 | """ 49 | 50 | return_code = None 51 | 52 | # Update command for bash shell 53 | if use_bash: 54 | command = "".join([os.sep, "bin", os.sep, "bash -c '", command, "'"]) 55 | 56 | # Do not do anything when testing 57 | if test: 58 | return True 59 | 60 | try: 61 | # Perform command and wait for completion 62 | if stdout: 63 | subp_cur = sp.Popen( 64 | command, shell=True, cwd=os.getcwd(), stdout=sp.PIPE 65 | ) 66 | else: 67 | subp_cur = sp.Popen(command, shell=True, cwd=os.getcwd()) 68 | pid = str(subp_cur.pid) 69 | 70 | out, err = subp_cur.communicate() 71 | return_code = subp_cur.returncode 72 | 73 | # 0 indicates success 74 | # On Stdout == true return a true string (stdout or 1 blank space) 75 | if return_code == 0: 76 | if stdout: 77 | return out 78 | return True 79 | elif mute: 80 | return False 81 | else: 82 | self.logr_cur.error( 83 | "".join( 84 | [ 85 | self.__class__.__name__, 86 | "::Error::Received return code = ", 87 | str(return_code), 88 | ] 89 | ) 90 | ) 91 | self.logr_cur.error( 92 | "".join([self.__class__.__name__, "::Error::Command = ", command]) 93 | ) 94 | self.logr_cur.error( 95 | "".join([self.__class__.__name__, "::Error::Error out= ", str(out)]) 96 | ) 97 | self.logr_cur.error( 98 | "".join([self.__class__.__name__, "::Error::Error= ", str(err)]) 99 | ) 100 | return False 101 | 102 | # Inform on errors:w 103 | except (OSError, TypeError) as e: 104 | self.logr_cur.error( 105 | "".join([self.__class__.__name__, "::Error::Fatal error."]) 106 | ) 107 | self.logr_cur.error( 108 | "".join([self.__class__.__name__, "::Error::Command = ", command]) 109 | ) 110 | self.logr_cur.error( 111 | "".join([self.__class__.__name__, "::Error:: Error = ", str(e)]) 112 | ) 113 | return False 114 | return False 115 | -------------------------------------------------------------------------------- /scripts/Tester.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from __future__ import absolute_import 4 | from __future__ import division 5 | from __future__ import print_function 6 | from __future__ import unicode_literals 7 | 8 | import PortalFilesTester 9 | import unittest 10 | 11 | """ 12 | Runs the tests suites. 13 | Test suites should be turned on here to run. 14 | """ 15 | 16 | __author__ = "Timothy Tickle" 17 | __copyright__ = "Copyright 2016" 18 | __credits__ = ["Timothy Tickle", "Brian Haas"] 19 | __license__ = "MIT" 20 | __maintainer__ = "Timothy Tickle" 21 | __email__ = "ttickle@broadinstitute.org" 22 | __status__ = "Development" 23 | 24 | 25 | # Calls all unit tests as a regression suite. 26 | suite = unittest.TestSuite() 27 | suite.addTest(PortalFilesTester.suite()) 28 | runner = unittest.TextTestRunner() 29 | runner.run(suite) 30 | -------------------------------------------------------------------------------- /scripts/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/scripts/__init__.py -------------------------------------------------------------------------------- /scripts/authenticate.py: -------------------------------------------------------------------------------- 1 | import google.auth 2 | 3 | def login(): 4 | credentials, project = google.auth.default() 5 | print(credentials) 6 | print(project) 7 | print("ok") 8 | 9 | login() 10 | 11 | -------------------------------------------------------------------------------- /scripts/benchmarks/README.md: -------------------------------------------------------------------------------- 1 | # Monitoring Scripts 2 | 3 | Benchmarking Scripts/Notebooks 4 | 5 | ## Usage 6 | 7 | File | Usage | Code | Output 8 | --------------------------------------------- | ----------------------------------------------------| ---------------------------------------- | ------------------- 9 | cellranger_orchestra_pipeline.ipynb | benchmark cellranger pipelines (orchestra pipeline) | `parse_logs([["monitroig_log.log","corresponding_std_out.txt"], ["monitroig_log2.log","corresponding_std_out2.txt"]], hours = 2)` | Plotly graphs of cpu, mem and disk usage, with cellranger event mapping -------------------------------------------------------------------------------- /scripts/ideogram/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/scripts/ideogram/__init__.py -------------------------------------------------------------------------------- /scripts/ideogram/cluster_groups.py: -------------------------------------------------------------------------------- 1 | """Parse cell cluster and cell annotation metadata for downstream use in Ideogram.js 2 | 3 | This module is a helper for matrix_to_ideogram_annots.py. 4 | """ 5 | 6 | def get_clusters_from_file(path, ref_cluster_names=[]): 7 | """Get cluster names, labels, and cells from cluster file or metadata file 8 | """ 9 | clusters = {} 10 | 11 | with open(path) as f: 12 | lines = f.readlines() 13 | 14 | headers = [line.strip().split('\t') for line in lines[:2]] 15 | names = headers[0] 16 | types = headers[1] 17 | 18 | got_all_cells = False 19 | all_cells = [] 20 | 21 | for cluster_index, type in enumerate(types): 22 | if type != 'group': 23 | continue 24 | 25 | name = names[cluster_index] 26 | 27 | clusters[name] = {} 28 | 29 | for line in lines[3:]: 30 | columns = line.strip().split('\t') 31 | cluster_label = columns[cluster_index].strip() 32 | if cluster_label in ref_cluster_names: 33 | continue 34 | cell = columns[0] 35 | if got_all_cells is False: 36 | all_cells.append(cell) 37 | if cluster_label in clusters[name]: 38 | clusters[name][cluster_label].append(cell) 39 | else: 40 | clusters[name][cluster_label] = [cell] 41 | 42 | got_all_cells = True 43 | 44 | return [clusters, all_cells] 45 | 46 | def order_labels(cluster_groups, group_name, source, ordered_labels): 47 | """Sort cluster labels, print summary information about cluster 48 | """ 49 | clusters = cluster_groups[group_name][source] 50 | for cluster_name in clusters: 51 | cluster = clusters[cluster_name] 52 | ordered_cluster = {} 53 | if len(ordered_labels) == 0: 54 | ordered_cluster = cluster 55 | else: 56 | for label in ordered_labels: 57 | ordered_cluster[label] = cluster[label] 58 | cluster_groups[group_name][source][cluster_name] = ordered_cluster 59 | for label in cluster: 60 | num_cells = str(len(cluster[label])) 61 | print(' Cells in ' + cluster_name + '/' + label + ': ' + num_cells) 62 | 63 | return cluster_groups 64 | 65 | def get_cluster_groups(group_names, paths, metadata_path, ref_cluster_names=[], ordered_labels=[]): 66 | """Get cluster groups dictionary that will be transformed to Ideogram annotations 67 | """ 68 | cluster_groups = {} 69 | 70 | for i, path in enumerate(paths): 71 | group_name = group_names[i] 72 | clusters, cells = get_clusters_from_file(path, ref_cluster_names=ref_cluster_names) 73 | cluster_groups[group_name] = { 74 | 'cells': cells, 75 | 'cluster_file': clusters 76 | } 77 | 78 | metadata_clusters, cells = get_clusters_from_file(metadata_path, ref_cluster_names=ref_cluster_names) 79 | 80 | for group_name in cluster_groups: 81 | cluster_groups[group_name]['metadata_file'] = metadata_clusters 82 | 83 | # Print summaries and order cluster labels 84 | for group_name in cluster_groups: 85 | print('Cluster group: ' + group_name) 86 | metadata_clusters = cluster_groups[group_name]['metadata_file'] 87 | print('From metadata file:') 88 | source = 'metadata_file' 89 | cluster_groups = order_labels(cluster_groups, group_name, source, ordered_labels) 90 | print('From cluster file:') 91 | source = 'cluster_file' 92 | cluster_groups = order_labels(cluster_groups, group_name, source, ordered_labels) 93 | 94 | return cluster_groups -------------------------------------------------------------------------------- /scripts/ideogram/tests/data/oligodendroglioma_annotations_downsampled.cluster.txt: -------------------------------------------------------------------------------- 1 | NAME X Y Z Sample 2 | TYPE numeric numeric numeric group 3 | MGH54_P2_C12 1 1 1 Microglia/Macrophage 4 | MGH36_P6_F03 1 1 1 Microglia/Macrophage 5 | MGH53_P4_H08 1 1 1 Microglia/Macrophage 6 | MGH53_P2_E09 1 1 1 Microglia/Macrophage 7 | MGH36_P5_E12 1 1 1 Microglia/Macrophage 8 | MGH54_P2_H07 1 1 1 Microglia/Macrophage 9 | MGH36_P4_H06 1 1 1 Microglia/Macrophage 10 | MGH53_P1_C01 1 1 1 Microglia/Macrophage 11 | MGH36_P4_A10 1 1 1 Microglia/Macrophage 12 | MGH36_P3_D10 1 1 1 Microglia/Macrophage 13 | MGH54_P2_F09 1 1 1 Microglia/Macrophage 14 | MGH36_P7_H06 1 1 1 Microglia/Macrophage 15 | MGH54_P2_H03 1 1 1 Microglia/Macrophage 16 | MGH36_P8_A02 1 1 1 Microglia/Macrophage 17 | MGH53_P2_C08 1 1 1 Microglia/Macrophage 18 | MGH53_P2_A07 1 1 1 Microglia/Macrophage 19 | MGH53_P1_F10 1 1 1 Microglia/Macrophage 20 | MGH36_P3_H06 1 1 1 Microglia/Macrophage 21 | MGH54_P2_F03 1 1 1 Microglia/Macrophage 22 | MGH54_P16_F12 1 1 1 Oligodendrocytes (non-malignant) 23 | MGH54_P12_C10 1 1 1 Oligodendrocytes (non-malignant) 24 | MGH54_P11_C11 1 1 1 Oligodendrocytes (non-malignant) 25 | MGH54_P15_D06 1 1 1 Oligodendrocytes (non-malignant) 26 | MGH54_P16_A03 1 1 1 Oligodendrocytes (non-malignant) 27 | MGH53_P7_B09 1 1 1 Oligodendrocytes (non-malignant) 28 | MGH54_P10_G04 1 1 1 Oligodendrocytes (non-malignant) 29 | MGH53_P2_A02 1 1 1 Oligodendrocytes (non-malignant) 30 | MGH53_P7_F07 1 1 1 Oligodendrocytes (non-malignant) 31 | MGH53_P5_G02 1 1 1 Oligodendrocytes (non-malignant) 32 | MGH53_P11_H03 1 1 1 Oligodendrocytes (non-malignant) 33 | MGH53_P1_A10 1 1 1 Oligodendrocytes (non-malignant) 34 | MGH53_P5_H09 1 1 1 Oligodendrocytes (non-malignant) 35 | MGH53_P11_E03 1 1 1 Oligodendrocytes (non-malignant) 36 | MGH53_P10_F11 1 1 1 Oligodendrocytes (non-malignant) 37 | MGH53_P1_D07 1 1 1 Oligodendrocytes (non-malignant) 38 | MGH53_P2_G04 1 1 1 Oligodendrocytes (non-malignant) 39 | MGH53_P2_G09 1 1 1 Oligodendrocytes (non-malignant) 40 | MGH53_P5_F04 1 1 1 Oligodendrocytes (non-malignant) 41 | MGH53_P11_F08 1 1 1 Oligodendrocytes (non-malignant) 42 | MGH53_P8_F03 1 1 1 Oligodendrocytes (non-malignant) 43 | MGH53_P6_B11 1 1 1 Oligodendrocytes (non-malignant) 44 | MGH53_P6_H06 1 1 1 Oligodendrocytes (non-malignant) 45 | MGH36_P1_B02 1 1 1 malignant_MGH36 46 | MGH36_P1_H10 1 1 1 malignant_MGH36 47 | MGH36_P3_A09 1 1 1 malignant_MGH36 48 | MGH36_P3_B02 1 1 1 malignant_MGH36 49 | MGH36_P3_C04 1 1 1 malignant_MGH36 50 | MGH36_P3_E06 1 1 1 malignant_MGH36 51 | MGH36_P4_B09 1 1 1 malignant_MGH36 52 | MGH36_P4_D11 1 1 1 malignant_MGH36 53 | MGH36_P4_G03 1 1 1 malignant_MGH36 54 | MGH36_P6_C04 1 1 1 malignant_MGH36 55 | MGH36_P6_G08 1 1 1 malignant_MGH36 56 | MGH36_P7_B04 1 1 1 malignant_MGH36 57 | MGH36_P7_D03 1 1 1 malignant_MGH36 58 | MGH36_P7_F04 1 1 1 malignant_MGH36 59 | MGH36_P7_G04 1 1 1 malignant_MGH36 60 | MGH36_P5_B08 1 1 1 malignant_MGH36 61 | MGH36_P5_F05 1 1 1 malignant_MGH36 62 | MGH36_P5_F11 1 1 1 malignant_MGH36 63 | MGH36_P5_H05 1 1 1 malignant_MGH36 64 | MGH36_P10_B08 1 1 1 malignant_MGH36 65 | MGH36_P10_C10 1 1 1 malignant_MGH36 66 | MGH36_P10_E07 1 1 1 malignant_MGH36 67 | MGH36_P10_F09 1 1 1 malignant_MGH36 68 | MGH36_P8_E05 1 1 1 malignant_MGH36 69 | MGH36_P8_H09 1 1 1 malignant_MGH36 70 | MGH36_P9_B01 1 1 1 malignant_MGH36 71 | MGH36_P9_B11 1 1 1 malignant_MGH36 72 | MGH36_P9_H03 1 1 1 malignant_MGH36 73 | MGH36_P2_A08 1 1 1 malignant_MGH36 74 | MGH36_P2_C02 1 1 1 malignant_MGH36 75 | MGH36_P2_G01 1 1 1 malignant_MGH36 76 | MGH36_P2_G02 1 1 1 malignant_MGH36 77 | MGH36_P2_H06 1 1 1 malignant_MGH36 78 | MGH53_P5_A08 1 1 1 malignant_MGH53 79 | MGH53_P5_D02 1 1 1 malignant_MGH53 80 | MGH53_P6_F03 1 1 1 malignant_MGH53 81 | MGH53_P6_H04 1 1 1 malignant_MGH53 82 | MGH53_P7_B10 1 1 1 malignant_MGH53 83 | MGH53_P7_C03 1 1 1 malignant_MGH53 84 | MGH53_P7_E02 1 1 1 malignant_MGH53 85 | MGH53_P7_G11 1 1 1 malignant_MGH53 86 | MGH53_P7_H03 1 1 1 malignant_MGH53 87 | MGH53_P8_A07 1 1 1 malignant_MGH53 88 | MGH53_P8_C11 1 1 1 malignant_MGH53 89 | MGH53_P8_E05 1 1 1 malignant_MGH53 90 | MGH53_P8_E10 1 1 1 malignant_MGH53 91 | MGH53_P8_H04 1 1 1 malignant_MGH53 92 | MGH53_P1_B04 1 1 1 malignant_MGH53 93 | MGH53_P12_A01 1 1 1 malignant_MGH53 94 | MGH53_P12_B09 1 1 1 malignant_MGH53 95 | MGH53_P12_C02 1 1 1 malignant_MGH53 96 | MGH53_P12_C09 1 1 1 malignant_MGH53 97 | MGH53_P12_D12 1 1 1 malignant_MGH53 98 | MGH53_P12_E03 1 1 1 malignant_MGH53 99 | MGH53_P10_B02 1 1 1 malignant_MGH53 100 | MGH53_P10_C09 1 1 1 malignant_MGH53 101 | MGH53_P10_E09 1 1 1 malignant_MGH53 102 | MGH53_P10_H08 1 1 1 malignant_MGH53 103 | MGH53_P11_A03 1 1 1 malignant_MGH53 104 | MGH53_P11_B02 1 1 1 malignant_MGH53 105 | MGH53_P11_B11 1 1 1 malignant_MGH53 106 | MGH53_P11_F12 1 1 1 malignant_MGH53 107 | MGH53_P11_H12 1 1 1 malignant_MGH53 108 | MGH53_P9_A09 1 1 1 malignant_MGH53 109 | MGH53_P9_C12 1 1 1 malignant_MGH53 110 | MGH53_P4_C03 1 1 1 malignant_MGH53 111 | MGH53_P4_F01 1 1 1 malignant_MGH53 112 | 97_P3_G07 1 1 1 malignant_97 113 | 97_P3_E04 1 1 1 malignant_97 114 | 97_P3_D10 1 1 1 malignant_97 115 | 97_P3_E01 1 1 1 malignant_97 116 | 97_P3_E03 1 1 1 malignant_97 117 | 97_P3_B10 1 1 1 malignant_97 118 | 97_P3_B04 1 1 1 malignant_97 119 | 97_P3_B01 1 1 1 malignant_97 120 | 97_P3_B03 1 1 1 malignant_97 121 | 97_P3_D01 1 1 1 malignant_97 122 | 97_P3_D04 1 1 1 malignant_97 123 | 97_P3_D12 1 1 1 malignant_97 124 | 97_P3_F12 1 1 1 malignant_97 125 | 97_P3_E12 1 1 1 malignant_97 126 | 97_P5_D09 1 1 1 malignant_97 127 | 97_P6_H01 1 1 1 malignant_97 128 | 97_P5_C10 1 1 1 malignant_97 129 | 97_P6_E07 1 1 1 malignant_97 130 | 97_P5_D02 1 1 1 malignant_97 131 | 97_P6_G10 1 1 1 malignant_97 132 | 97_P5_G05 1 1 1 malignant_97 133 | 97_P6_B09 1 1 1 malignant_97 134 | 97_P5_H08 1 1 1 malignant_97 135 | 97_P5_F04 1 1 1 malignant_97 136 | 97_P5_D01 1 1 1 malignant_97 137 | 97_P6_F05 1 1 1 malignant_97 138 | 97_P6_A06 1 1 1 malignant_97 139 | 97_P5_A07 1 1 1 malignant_97 140 | 97_P6_E01 1 1 1 malignant_97 141 | 97_P6_D09 1 1 1 malignant_97 142 | 97_P5_G06 1 1 1 malignant_97 143 | 97_P5_E12 1 1 1 malignant_97 144 | 97_P6_A07 1 1 1 malignant_97 145 | 97_P6_G12 1 1 1 malignant_97 146 | 97_P6_H06 1 1 1 malignant_97 147 | 93_P3_B02 1 1 1 malignant_93 148 | 93_P3_G05 1 1 1 malignant_93 149 | 93_P3_H04 1 1 1 malignant_93 150 | 93_P3_A10 1 1 1 malignant_93 151 | 93_P3_C04 1 1 1 malignant_93 152 | 93_P3_D07 1 1 1 malignant_93 153 | 93_P3_G07 1 1 1 malignant_93 154 | 93_P3_E09 1 1 1 malignant_93 155 | 93_P3_G11 1 1 1 malignant_93 156 | 93_P3_A11 1 1 1 malignant_93 157 | 93_P6_H11 1 1 1 malignant_93 158 | 93_P5_H06 1 1 1 malignant_93 159 | 93_P5_C12 1 1 1 malignant_93 160 | 93_P6_A02 1 1 1 malignant_93 161 | 93_P5_D07 1 1 1 malignant_93 162 | 93_P6_C07 1 1 1 malignant_93 163 | 93_P9_C04 1 1 1 malignant_93 164 | 93_P9_E04 1 1 1 malignant_93 165 | 93_P9_H01 1 1 1 malignant_93 166 | 93_P8_B06 1 1 1 malignant_93 167 | 93_P10_E05 1 1 1 malignant_93 168 | 93_P9_B10 1 1 1 malignant_93 169 | 93_P8_G11 1 1 1 malignant_93 170 | 93_P9_F02 1 1 1 malignant_93 171 | 93_P10_F03 1 1 1 malignant_93 172 | 93_P9_G11 1 1 1 malignant_93 173 | 93_P8_E09 1 1 1 malignant_93 174 | 93_P8_C11 1 1 1 malignant_93 175 | 93_P9_A03 1 1 1 malignant_93 176 | 93_P10_G11 1 1 1 malignant_93 177 | 93_P9_B11 1 1 1 malignant_93 178 | 93_P9_D06 1 1 1 malignant_93 179 | 93_P8_B02 1 1 1 malignant_93 180 | 93_P8_C09 1 1 1 malignant_93 181 | 93_P9_H03 1 1 1 malignant_93 182 | 93_P10_D04 1 1 1 malignant_93 183 | 93_P8_G09 1 1 1 malignant_93 184 | 93_P10_B10 1 1 1 malignant_93 185 | 93_P9_C07 1 1 1 malignant_93 186 | 93_P8_A12 1 1 1 malignant_93 -------------------------------------------------------------------------------- /scripts/ideogram/tests/test_matrix_to_ideogram_annots.py: -------------------------------------------------------------------------------- 1 | """Unit tests for matrix_to_ideogram_annots.py 2 | 3 | To run, set up scripts per README, then: 4 | 5 | cd scripts 6 | python3 ideogram/tests/test_matrix_to_ideogram_annots.py 7 | 8 | """ 9 | 10 | import unittest 11 | from glob import glob 12 | import json 13 | 14 | import sys 15 | sys.path.append('ideogram') 16 | 17 | from matrix_to_ideogram_annots import create_parser, convert_matrix_and_write 18 | 19 | class MatrixToIdeogramAnnotsTestCase(unittest.TestCase): 20 | 21 | def test_conversion_with_references(self): 22 | """Converter should handle default case with reference clusters 23 | """ 24 | output_dir = 'output_infercnv_example/' 25 | args = [ 26 | '--matrix-path', 'ideogram/tests/data/oligodendroglioma_expression_truncated.counts.matrix.txt', 27 | '--gen-pos-file', 'ideogram/tests/data/gencode_v19_gene_pos_truncated_sorted.txt', 28 | '--cluster-names', 'Observations', 29 | '--ref-cluster-names', 'Microglia/Macrophage', 'Oligodendrocytes (non-malignant)', 30 | '--cluster-paths', 'ideogram/tests/data/oligodendroglioma_annotations_downsampled.cluster.txt', 31 | '--metadata-path', 'ideogram/tests/data/oligodendroglioma_annotations_downsampled.cluster.txt', 32 | '--output-dir', output_dir 33 | ] 34 | 35 | args = create_parser().parse_args(args) 36 | convert_matrix_and_write(args) 37 | 38 | end_output_dir = output_dir + 'ideogram_exp_means/' 39 | 40 | # Verify output file names. 41 | # `glob` results are unordered, so sort them to make tests deterministic. 42 | files = sorted(glob(end_output_dir + '*')) 43 | expected_files = sorted([ 44 | end_output_dir + 'ideogram_exp_means__Observations--Sample--group--study.json', 45 | end_output_dir + 'ideogram_exp_means__Observations--Sample--group--cluster.json' 46 | ]) 47 | self.assertEqual(files, expected_files) 48 | 49 | cluster_annots_file = end_output_dir + 'ideogram_exp_means__Observations--Sample--group--cluster.json' 50 | with open(cluster_annots_file) as f: 51 | annots = json.loads(f.read()) 52 | 53 | # Verify keys in Ideogram annotation data 54 | keys = annots['keys'] 55 | expected_keys = [ 56 | 'name', 'start', 'length', 57 | 'malignant_MGH36', 'malignant_MGH53', 'malignant_97', 'malignant_93' 58 | ] 59 | self.assertEqual(keys, expected_keys) 60 | 61 | # Test a particular Ideogram annotation 62 | annot = annots['annots'][0]['annots'][0] 63 | # gene name, genomic start, genomic length, expression value averages 64 | expected_annot = ['ACOX3', 8368009, 74441, 3.308, 2.154, 1.967, 2.687] 65 | self.assertEqual(annot, expected_annot) 66 | 67 | def test_conversion_without_references(self): 68 | """Converter should handle default case without reference clusters 69 | I.e., without values for --ref-cluster-names 70 | """ 71 | output_dir = 'output_infercnv_example/' 72 | args = [ 73 | '--matrix-path', 'ideogram/tests/data/oligodendroglioma_expression_truncated.counts.matrix.txt', 74 | '--gen-pos-file', 'ideogram/tests/data/gencode_v19_gene_pos_truncated_sorted.txt', 75 | '--cluster-names', 'Observations', 76 | '--cluster-paths', 'ideogram/tests/data/oligodendroglioma_annotations_downsampled.cluster.txt', 77 | '--metadata-path', 'ideogram/tests/data/oligodendroglioma_annotations_downsampled.cluster.txt', 78 | '--output-dir', output_dir 79 | ] 80 | 81 | args = create_parser().parse_args(args) 82 | convert_matrix_and_write(args) 83 | 84 | end_output_dir = output_dir + 'ideogram_exp_means/' 85 | 86 | cluster_annots_file = end_output_dir + 'ideogram_exp_means__Observations--Sample--group--cluster.json' 87 | with open(cluster_annots_file) as f: 88 | annots = json.loads(f.read()) 89 | 90 | # Verify keys in Ideogram annotation data 91 | # Note additional elements for microglia and oligodendrocyte clusters 92 | keys = annots['keys'] 93 | expected_keys = [ 94 | 'name', 'start', 'length', 95 | 'Microglia/Macrophage', 'Oligodendrocytes (non-malignant)', 96 | 'malignant_MGH36', 'malignant_MGH53', 'malignant_97', 'malignant_93' 97 | ] 98 | self.assertEqual(keys, expected_keys) 99 | 100 | # Test a particular Ideogram annotation 101 | annot = annots['annots'][0]['annots'][0] 102 | # gene name, genomic start, genomic length, expression value averages 103 | expected_annot = ['ACOX3', 8368009, 74441, 0.726, 0.448, 3.308, 2.154, 1.967, 2.687] 104 | self.assertEqual(annot, expected_annot) 105 | 106 | if __name__ == '__main__': 107 | unittest.main() -------------------------------------------------------------------------------- /scripts/monitoring/README.md: -------------------------------------------------------------------------------- 1 | # Monitoring Scripts 2 | 3 | Scripts to run in WDL tasks to output runtime performance. 4 | 5 | ## Usage 6 | ~~~~ 7 | task TaskName { 8 | File monitoringScript 9 | command { 10 | chmod u+x ${monitoringScript} 11 | ${monitoringScript} > monitoring.log & 12 | 13 | original task commands... 14 | } 15 | 16 | output { 17 | original task outputs... 18 | File monitoringLog = "monitoring.log" 19 | } 20 | ~~~~ -------------------------------------------------------------------------------- /scripts/monitoring/monitor_script.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo ================================== 3 | echo =========== MONITORING =========== 4 | echo ================================== 5 | echo --- General Information --- 6 | echo \#CPU: $(nproc) 7 | echo Total Memory: $(free -h | grep Mem | awk '{ print $2 }') 8 | echo Total Disk space: $(df -h | grep cromwell_root | awk '{ print $2}') 9 | echo 10 | echo --- Runtime Information --- 11 | 12 | function runtimeInfo() { 13 | echo [$(date)] 14 | echo \* CPU usage: $(top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | awk '{print $2}')% 15 | echo \* Memory usage: $(free -m | grep Mem | awk '{ OFMT="%.0f"; print ($3/$2)*100; }')% 16 | echo \* Disk usage: $(df | grep cromwell_root | awk '{ print $5 }') 17 | } 18 | 19 | while true; do runtimeInfo; sleep 30; done -------------------------------------------------------------------------------- /scripts/object_conversion/seurat/SCP2Seurat.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Seurat object from SCP files" 3 | output: html_notebook 4 | --- 5 | 6 | Seurat's Read10X function expects the three files that comprise a feature-barcode matrix to have specific names and format, all located in one directory. For compatibility with this example, these files would be put in a directory called "10x_naming" that is located in the current working directory. 7 | 8 | To create files with the expected name and format, the following file transformations were performed for [SCP1219](https://singlecell.broadinstitute.org/single_cell/study/SCP1219/columbia-university-nyp-covid-19-lung-atlas) study files: 9 | 10 | ## Expression Matrix 11 | rename mtx file to expected name 12 | `mv gene_sorted-lung_expression_data.mtx.gz matrix.mtx.gz` 13 | 14 | 15 |

16 | ## Barcodes file 17 | • Check that barcodes file are not actually comma-delimited and has a single column of barcode names. 18 | 19 | rename the file to the expected name 20 | `mv lung_cellNames.csv barcodes.tsv` 21 | 22 | Read10X function expects compressed barcode file if the matrix file is compressed 23 | `gzip barcodes.tsv` 24 | 25 | 26 |

27 | ## Features/genes file 28 |

29 | • Check if genes file has comma-delimited data (if the genes file did have multiple columns separated by commas, conversion to tab delimited format would be needed) 30 | 31 | rename the file to the expected name 32 | `mv lung_geneNames_upload.csv features.tsv` 33 | 34 | Read10X function expects compressed feature file if the matrix file is compressed 35 | `gzip features.tsv` 36 | 37 |

38 | ## CAUTION 39 | Things to remember about the Seurat Object created by following this example: The expression data in the "counts" slot will only be raw counts if the matrix inputted via Read10X was a raw count matrix. Many studies in SCP only have processed count matrix where the counts have been normalized, scaled, batch-corrected or otherwise processed. ***Please read the relevant publication to understand the nature of the matrix you are working with*** 40 | 41 | Try executing this chunk by clicking the *Run* button within the chunk or by placing your cursor inside it and pressing *Cmd+Shift+Enter*. 42 | 43 | ```{r} 44 | # some commands below use syntax specific to Seurat v3 45 | library(Seurat) 46 | SCP1219.data <- Read10X(data.dir = "10x_naming", gene.column = 1) 47 | # set gene.column = 1 option because SCP1219's genes file was a single column of gene names 48 | # if the genes file is a two column file 49 | # make sure the file is tab delimited 50 | # and the gene.column option can be omitted. 51 | str(SCP1219.data) 52 | ``` 53 | 54 | SCP metadata files have TYPE specification as the second row of the metadata file - this row complicates dataframe creation. Edit the metadata file to remove the TYPE row before running the following command. 55 | 56 | 57 | ```{r} 58 | SCP1219.meta <- read.table("lung_metaData_sansTYPE.txt", sep = "\t", quote = "", row.names = 1, header = TRUE) 59 | str(SCP1219.meta) 60 | ``` 61 | 62 | ```{r} 63 | scp1219 <- CreateSeuratObject(counts = SCP1219.data, meta.data = SCP1219.meta) 64 | str(scp1219) 65 | ``` 66 | ### CAUTION 67 | notice in the above output that metadata like "species" and "sex" seem to have an NA value in addition to the expected levels. The NA values are not expected because every cell should have a valid "species" and "sex" annotation (these are metadata required by SCP). I'm not sure if the NA are indications of an issue with the appended metadata. Please proceed carefully in case this is an indication that the data object was not reconsititute correctly. 68 | 69 | reference for code below https://satijalab.org/seurat/archive/v3.1/interaction_vignette.html 70 | 71 | ```{r} 72 | table(scp1219$cell_type_main) 73 | ``` 74 | 75 | 76 | ```{r} 77 | Idents(scp1219) <- "cell_type_main" 78 | 79 | # How can I extract expression matrix for all Epithelial cells (perhaps, to load into another package) 80 | epi.data <- as.matrix(GetAssayData(scp1219, slot = "counts")[, WhichCells(scp1219, ident = "Epithelial cells")]) 81 | ``` 82 | 83 | ```{r} 84 | str(epi.data) 85 | ``` 86 | ```{r} 87 | # Can I create a Seurat object of just the Epithelial cells? 88 | epi.obj <- subset(scp1219, idents = "Epithelial cells") 89 | ``` 90 | 91 | 92 | ```{r} 93 | str(epi.obj) 94 | ``` 95 | Interestingly, the object above does not seem to have NA values for any of the SCP required metadata 96 | 97 | Sizes of resulting objects 98 | 99 | | Object | Size | Type | 100 | |:----:|:----:|:----:| 101 | | SCP1219.data | 1.2G | dgRMatrix 102 | | scp1219 | 2.5G | Seurat object 103 | | epi.obj | 763M | Seurat object 104 | | epi.data | 7.7G | matrix 105 | 106 | 107 | ```{r, collapse = TRUE} 108 | sessionInfo() 109 | ``` 110 | -------------------------------------------------------------------------------- /scripts/scp_to_infercnv.py: -------------------------------------------------------------------------------- 1 | """Convert SCP metadata and cluster files to inferCNV annotation file 2 | 3 | inferCNV runs require specifying the names of reference (i.e. normal, control) 4 | cell groups, which are headers in an annotation file passed into inferCNV. SCP 5 | has files that contain annotations including cell groups, but not quite in the 6 | format needed for inferCNV annotation files. This script does the needed 7 | transformation. 8 | """ 9 | 10 | import argparse 11 | import os 12 | 13 | def write_infercnv_inputs(infercnv_annots, ref_labels, output_dir): 14 | """Write inferCNV annotations and reference labels to files 15 | """ 16 | if output_dir[-1] != '/': 17 | output_dir += '/' 18 | 19 | if os.path.exists(output_dir) == False: 20 | os.mkdir(output_dir) 21 | 22 | output_path = output_dir + 'infercnv_annots_from_scp.tsv' 23 | with open(output_path, 'w') as f: 24 | f.write(infercnv_annots) 25 | print('Wrote inferCNV annotations file to: ' + output_path) 26 | 27 | output_path = output_dir + 'infercnv_reference_cell_labels_from_scp.tsv' 28 | with open(output_path, 'w') as f: 29 | f.write(ref_labels) 30 | print('Wrote inferCNV reference cell labels to: ' + output_path) 31 | 32 | def get_references(cluster_path, ref_group_name, delimiter): 33 | """Parse SCP cluster file, return inferCNV reference cells and labels 34 | """ 35 | # Reference (normal) cell annotations, i.e. cell name and group label 36 | ref_annots = {} 37 | 38 | with open(cluster_path) as f: 39 | cluster_rows = f.readlines() 40 | 41 | groups = cluster_rows[0].strip().split(delimiter) 42 | group_index = groups.index(ref_group_name) 43 | 44 | # Reference cell labels 45 | ref_labels = [] 46 | 47 | for row in cluster_rows[2:]: # Skip header rows 48 | columns = row.strip().split(delimiter) 49 | cell = columns[0] 50 | label = columns[group_index] 51 | if label not in ref_labels: 52 | ref_labels.append(label) 53 | ref_annots[cell] = label 54 | 55 | ref_labels = ','.join(ref_labels) 56 | 57 | return [ref_annots, ref_labels] 58 | 59 | def get_infercnv_annots(metadata_path, obs_group_name, delimiter, ref_annots): 60 | """Parse SCP metadata file, return inferCNV annotations list 61 | 62 | The SCP metadata file categorizes all cells in the expression matrix 63 | provided to inferCNV. However, it does not specify which cells to use as 64 | reference (normal) nor how to label those reference cells in inferCNV. 65 | That information is in ref_annots. 66 | """ 67 | 68 | infercnv_annots = [] 69 | 70 | with open(metadata_path) as f: 71 | metadata_rows = f.readlines() 72 | 73 | groups = metadata_rows[0].strip().split(delimiter) 74 | group_index = groups.index(obs_group_name) 75 | 76 | # For all cells, get their label from the metadata file, unless 77 | # the cell is a reference cell, in which case use its label from 78 | # the previously-parsed SCP cluster file. 79 | for row in metadata_rows[2:]: # Skip header rows 80 | columns = row.strip().split(delimiter) 81 | cell = columns[0] 82 | if cell in ref_annots: 83 | label = ref_annots[cell] 84 | else: 85 | label = columns[group_index] 86 | infercnv_annots.append(cell + '\t' + label) 87 | infercnv_annots = '\n'.join(infercnv_annots) 88 | 89 | return infercnv_annots 90 | 91 | def create_parser(): 92 | """Set up parsing for command-line arguments 93 | """ 94 | parser = argparse.ArgumentParser(description=__doc__, # Use text from file summary up top 95 | formatter_class=argparse.RawDescriptionHelpFormatter) 96 | parser.add_argument('--reference-cluster-path', 97 | dest='ref_cluster_path', 98 | help='Path to SCP cluster file to use as reference ' + 99 | '(i.e. normal, control) cells') 100 | parser.add_argument('--reference-group-name', 101 | dest='ref_group_name', 102 | help='Name of cell group in SCP cluster file to use as ' + 103 | 'label for inferCNV references') 104 | parser.add_argument('--metadata-path', 105 | help='Path to SCP metadata file that contains all cells') 106 | parser.add_argument('--observation-group-name', 107 | dest='obs_group_name', 108 | help='Name of the cell group in SCP metadata file to ' + 109 | 'use as label for observations') 110 | parser.add_argument('--delimiter', 111 | help='Delimiter in SCP cluster file', 112 | default="\t") 113 | parser.add_argument('--output-dir', 114 | help='Path to write output') 115 | return parser 116 | 117 | if __name__ == '__main__': 118 | args = create_parser().parse_args() 119 | ref_list = get_references(args.ref_cluster_path, 120 | args.ref_group_name, args.delimiter) 121 | infercnv_annots = get_infercnv_annots(args.metadata_path, 122 | args.obs_group_name, args.delimiter, ref_list[0]) 123 | write_infercnv_inputs(infercnv_annots, ref_list[1], args.output_dir) -------------------------------------------------------------------------------- /scripts/swap_column_values.py: -------------------------------------------------------------------------------- 1 | """ 2 | Swap column values, but not column headers, of a TSV file 3 | 4 | Example: 5 | 6 | # Swap values in first and last columns of a TSV that has two header lines 7 | python3 swap_column_values.py --num_header_rows 2 --swap_columns 0,-1 --input_file scp_coordinates.tsv 8 | 9 | """ 10 | 11 | import argparse 12 | 13 | args = argparse.ArgumentParser( 14 | prog='swap_column_values.py', 15 | description=__doc__, 16 | formatter_class=argparse.RawDescriptionHelpFormatter 17 | ) 18 | args.add_argument( 19 | '--input_file', dest='input_file', 20 | help='Path to input TSV file' 21 | ) 22 | args.add_argument( 23 | '--output_file', dest='output_file', 24 | help='Path to use for output TSV file. Defaults to e.g. input_file.swapped.tsv' 25 | ) 26 | args.add_argument( 27 | '--num_header_rows', default=1, type=int, dest='num_header_rows', 28 | help='Number of rows occupied by headers' 29 | ) 30 | args.add_argument( 31 | '--swap_columns', dest='swap_columns', default='0,-1', 32 | help='Indexes of two columns to swap. Defaults to first (1) and last (-1) columns.' 33 | ) 34 | 35 | parsed_args = args.parse_args() 36 | input_file = parsed_args.input_file 37 | output_file = parsed_args.output_file 38 | num_header_rows = parsed_args.num_header_rows 39 | swap_columns = parsed_args.swap_columns 40 | 41 | swap_indexes = [int(index) for index in swap_columns.split(',')] 42 | 43 | with open(input_file) as f: 44 | lines = f.readlines() 45 | 46 | headers = ''.join(lines[:num_header_rows]) 47 | 48 | value_lines = lines[num_header_rows:] 49 | 50 | swapped_lines = [] 51 | 52 | for line in value_lines: 53 | split_line = line.strip().split('\t') 54 | column_1 = split_line[swap_indexes[0]] 55 | column_2 = split_line[swap_indexes[1]] 56 | swapped_line = split_line 57 | 58 | # Swap the two specified columns 59 | swapped_line[swap_indexes[0]] = column_2 60 | swapped_line[swap_indexes[1]] = column_1 61 | 62 | # Cast array to TSV string 63 | swapped_line = '\t'.join(swapped_line) 64 | 65 | swapped_lines.append(swapped_line) 66 | 67 | swapped_lines = headers + '\n'.join(swapped_lines) 68 | 69 | if output_file is None: 70 | split_input_path = input_file.split('.') 71 | output_path = split_input_path[:-1] + ['swapped', split_input_path[-1]] 72 | output_file = '.'.join(output_path) 73 | 74 | with open(output_file, 'w') as f: 75 | f.write(swapped_lines) -------------------------------------------------------------------------------- /scripts/test_files/coordinates.txt: -------------------------------------------------------------------------------- 1 | NAME X Y Z Category Intensity 2 | TYPE numeric numeric numeric group numeric 3 | CELL_0001 34.472 32.211 60.035 C 0.719 4 | CELL_0002 15.975 10.043 21.424 B 0.904 5 | CELL_0003 -11.688 -53.645 -58.374 A 2.195 6 | CELL_0004 30.04 31.138 33.597 B -1.084 7 | CELL_0005 23.862 33.092 26.904 B 4.256 8 | CELL_0006 -39.07 -14.64 -44.643 A 1.317 9 | CELL_0007 40.039 27.206 55.211 C -4.917 10 | CELL_0008 28.755 27.187 34.686 B -3.777 11 | CELL_0009 -48.601 -13.512 -51.659 A 0.778 12 | CELL_00010 14.653 27.832 28.586 B 4.62 13 | CELL_00011 20.603 32.071 45.484 C -3.019 14 | CELL_00012 -10.333 -51.733 -26.631 A -4.989 15 | CELL_00013 -52.966 -12.484 -60.369 A 3.137 16 | CELL_00014 38.513 26.969 63.654 C -1.74 17 | CELL_00015 12.838 13.047 17.685 B -2.443 18 | -------------------------------------------------------------------------------- /scripts/test_files/coordinates_bad_body.txt: -------------------------------------------------------------------------------- 1 | NAME X Y 2 | TYPE numeric numeric 3 | Cell_A 1.2 0.8 4 | Cell_B 0.6 0.5 5 | Cell_C 0.8 0.5 6 | Cell_D 1.1 0.7 7 | Cell_E A 2.9 8 | Cell_F 3.0 1.0 9 | Cell_G 0.4 0.4 10 | Cell_H 0.9 0.3 11 | Cell_I 1.3 0.4 12 | Cell_J 1.0 0.2 13 | -------------------------------------------------------------------------------- /scripts/test_files/coordinates_bad_body_2.txt: -------------------------------------------------------------------------------- 1 | NAME X Y 2 | TYPE numeric numeric 3 | Cell_A 1.2 4 | Cell_B 0.6 0.5 5 | Cell_C 0.8 0.5 6 | Cell_D 1.1 0.7 7 | Cell_E 1.8 2.9 8 | Cell_F 3.0 1.0 9 | Cell_G 0.4 0.4 10 | Cell_H 0.9 0.3 11 | Cell_I 1.3 0.4 12 | Cell_J 1.0 0.2 13 | -------------------------------------------------------------------------------- /scripts/test_files/coordinates_bad_header.txt: -------------------------------------------------------------------------------- 1 | NAMES X Y 2 | TYPE numeric numeric 3 | Cell_A 1.2 0.8 4 | Cell_B 0.6 0.5 5 | Cell_C 0.8 0.5 6 | Cell_D 1.1 0.7 7 | Cell_E 1.8 2.9 8 | Cell_F 3.0 1.0 9 | Cell_G 0.4 0.4 10 | Cell_H 0.9 0.3 11 | Cell_I 1.3 0.4 12 | Cell_J 1.0 0.2 13 | -------------------------------------------------------------------------------- /scripts/test_files/coordinates_bad_header_duplicates.txt: -------------------------------------------------------------------------------- 1 | NAME X Y Z Category Y 2 | TYPE numeric numeric numeric group numeric 3 | CELL_0001 34.472 32.211 60.035 C 0.719 4 | CELL_0002 15.975 10.043 21.424 B 0.904 5 | CELL_0003 -11.688 -53.645 -58.374 A 2.195 6 | CELL_0004 30.04 31.138 33.597 B -1.084 7 | CELL_0005 23.862 33.092 26.904 B 4.256 8 | CELL_0006 -39.07 -14.64 -44.643 A 1.317 9 | CELL_0007 40.039 27.206 55.211 C -4.917 10 | CELL_0008 28.755 27.187 34.686 B -3.777 11 | CELL_0009 -48.601 -13.512 -51.659 A 0.778 12 | CELL_00010 14.653 27.832 28.586 B 4.62 13 | CELL_00011 20.603 32.071 45.484 C -3.019 14 | CELL_00012 -10.333 -51.733 -26.631 A -4.989 15 | CELL_00013 -52.966 -12.484 -60.369 A 3.137 16 | CELL_00014 38.513 26.969 63.654 C -1.74 17 | CELL_00015 12.838 13.047 17.685 B -2.443 18 | -------------------------------------------------------------------------------- /scripts/test_files/coordinates_deidentifed_correct.txt: -------------------------------------------------------------------------------- 1 | NAME X Y Z Category Intensity 2 | TYPE numeric numeric numeric group numeric 3 | cell_0 34.472 32.211 60.035 C 0.719 4 | cell_1 15.975 10.043 21.424 B 0.904 5 | cell_2 -11.688 -53.645 -58.374 A 2.195 6 | cell_3 30.04 31.138 33.597 B -1.084 7 | cell_4 23.862 33.092 26.904 B 4.256 8 | cell_5 -39.07 -14.64 -44.643 A 1.317 9 | cell_6 40.039 27.206 55.211 C -4.917 10 | cell_7 28.755 27.187 34.686 B -3.777 11 | cell_8 -48.601 -13.512 -51.659 A 0.778 12 | cell_9 14.653 27.832 28.586 B 4.62 13 | cell_10 20.603 32.071 45.484 C -3.019 14 | cell_11 -10.333 -51.733 -26.631 A -4.989 15 | cell_12 -52.966 -12.484 -60.369 A 3.137 16 | cell_13 38.513 26.969 63.654 C -1.74 17 | cell_14 12.838 13.047 17.685 B -2.443 -------------------------------------------------------------------------------- /scripts/test_files/coordinates_deidentifed_precreated_correct.txt: -------------------------------------------------------------------------------- 1 | NAME X Y Z Category Intensity 2 | TYPE numeric numeric numeric group numeric 3 | 0 34.472 32.211 60.035 C 0.719 4 | 1 15.975 10.043 21.424 B 0.904 5 | 2 -11.688 -53.645 -58.374 A 2.195 6 | 3 30.04 31.138 33.597 B -1.084 7 | 4 23.862 33.092 26.904 B 4.256 8 | 5 -39.07 -14.64 -44.643 A 1.317 9 | 6 40.039 27.206 55.211 C -4.917 10 | 7 28.755 27.187 34.686 B -3.777 11 | 8 -48.601 -13.512 -51.659 A 0.778 12 | 9 14.653 27.832 28.586 B 4.62 13 | 10 20.603 32.071 45.484 C -3.019 14 | 11 -10.333 -51.733 -26.631 A -4.989 15 | 12 -52.966 -12.484 -60.369 A 3.137 16 | 13 38.513 26.969 63.654 C -1.74 17 | 14 12.838 13.047 17.685 B -2.443 -------------------------------------------------------------------------------- /scripts/test_files/coordinates_duplicates.txt: -------------------------------------------------------------------------------- 1 | NAME X Y 2 | TYPE nuemric numeric 3 | Cell_A 1.2 0.8 4 | Cell_B 0.6 0.5 5 | Cell_B 0.6 0.5 6 | Cell_C 0.8 0.5 7 | Cell_D 1.1 0.7 8 | Cell_E 1.8 2.9 9 | Cell_F 3.0 1.0 10 | Cell_G 0.4 0.4 11 | Cell_H 0.9 0.3 12 | Cell_H 0.9 0.3 13 | Cell_I 1.3 0.4 14 | Cell_J 1.0 0.2 15 | -------------------------------------------------------------------------------- /scripts/test_files/coordinates_mapping_correct.txt: -------------------------------------------------------------------------------- 1 | CELL_0001 -> cell_0 2 | CELL_00010 -> cell_9 3 | CELL_00011 -> cell_10 4 | CELL_00012 -> cell_11 5 | CELL_00013 -> cell_12 6 | CELL_00014 -> cell_13 7 | CELL_00015 -> cell_14 8 | CELL_0002 -> cell_1 9 | CELL_0003 -> cell_2 10 | CELL_0004 -> cell_3 11 | CELL_0005 -> cell_4 12 | CELL_0006 -> cell_5 13 | CELL_0007 -> cell_6 14 | CELL_0008 -> cell_7 15 | CELL_0009 -> cell_8 16 | NAME -> NAME 17 | TYPE -> TYPE -------------------------------------------------------------------------------- /scripts/test_files/coordinates_mapping_precreated_correct.txt: -------------------------------------------------------------------------------- 1 | CELL_0001 -> 0 2 | CELL_00010 -> 9 3 | CELL_00011 -> 10 4 | CELL_00012 -> 11 5 | CELL_00013 -> 12 6 | CELL_00014 -> 13 7 | CELL_00015 -> 14 8 | CELL_0002 -> 1 9 | CELL_0003 -> 2 10 | CELL_0004 -> 3 11 | CELL_0005 -> 4 12 | CELL_0006 -> 5 13 | CELL_0007 -> 6 14 | CELL_0008 -> 7 15 | CELL_0009 -> 8 16 | NAME -> NAME 17 | TYPE -> TYPE -------------------------------------------------------------------------------- /scripts/test_files/coordinates_subset_1_correct.txt: -------------------------------------------------------------------------------- 1 | NAME X Y Z Category Intensity 2 | TYPE numeric numeric numeric group numeric 3 | CELL_0009 -48.601 -13.512 -51.659 A 0.778 4 | -------------------------------------------------------------------------------- /scripts/test_files/coordinates_subset_3_correct.txt: -------------------------------------------------------------------------------- 1 | NAME X Y Z Category Intensity 2 | TYPE numeric numeric numeric group numeric 3 | CELL_0002 15.975 10.043 21.424 B 0.904 4 | CELL_0005 23.862 33.092 26.904 B 4.256 5 | CELL_0009 -48.601 -13.512 -51.659 A 0.778 6 | -------------------------------------------------------------------------------- /scripts/test_files/expression.txt: -------------------------------------------------------------------------------- 1 | GENE CELL_0001 CELL_0002 CELL_0003 CELL_0004 CELL_0005 CELL_0006 CELL_0007 CELL_0008 CELL_0009 CELL_00010 CELL_00011 CELL_00012 CELL_00013 CELL_00014 CELL_00015 2 | Itm2a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 | Sergef 0 7.092 0 7.511 6.803 0 0 0 6.783 7.562 0 7.073 6.697 0 5.61 4 | Chil5 0 0 0 0 0 5.466 0 0 0 0 0 0 0 0 0 5 | Fam109a 0 0 4.205 0 0 0 0 7.305 0 0 0 0 0 0 7.221 6 | Dhx9 0 3.096 4.599 0 4.118 0 3.833 7.607 4.329 5.468 0 0 5.705 0 4.641 7 | Ssu72 5.043 0 6.439 0 0 0 0 0 7.106 7.162 7.85 6.016 0 0 0 8 | Olfr1018 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 | Fam71e2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | Eif2b2 0 0 0 0 0 6.549 0 0 7.117 0 0 0 0 6.487 0 11 | 1700061E18Rik 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | Mks1 0 0 0 0 0 6.062 4.59 0 0 0 0 0 0 4.463 0 13 | Gm12000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | Hebp2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | Gm14444 0 4.909 0 0 0 0 0 0 0 0 0 0 0 0 0 16 | Vps28 0 7.707 0 0 0 6.076 0 0 5.808 8.836 7.794 0 7.248 0 6.966 17 | Setd6 0 5.907 0 0 0 0 0 0 7.36 0 0 0 0 0 0 18 | Gstm2 0 0 0 0 0 0 0 0 4.524 0 0 0 0 0 0 19 | Spn-ps 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | Psma4 0 0 8.257 8.272 0 6.995 5.666 6.898 0 0 7.498 7.028 5.221 0 7.03 -------------------------------------------------------------------------------- /scripts/test_files/expression_bad_body_1.txt: -------------------------------------------------------------------------------- 1 | GENE Cell_A Cell_B Cell_C Cell_D Cell_E Cell_F Cell_G Cell_H Cell_I Cell_J 2 | LOXL4 0 0 0 0 0 0 0 0 0 0 3 | PYROXD2 0 0 0 1 0 0 0 0 0 0 4 | HPS1 10 5 6 6 7 2 0 6 2 5 5 | CNNM1 0 0 0 0 0 0 0 0 0 0 6 | GOT1 4 3 3 9 4 8 0 2 7 | RP11-441O15.3 1 0 0 0 0 0 0 0 0 0 8 | NKX2-3 0 0 1 0 0 0 0 0 0 0 9 | SLC25A28 3 1 1 4 0 2 0 0 1 3 10 | RP11-85A1.3 0 0 0 0 0 0 0 0 0 0 11 | RP11-483F11.7 0 0 0 0 0 0 0 0 1 0 12 | ENTPD7 1 1 0 0 5 0 0 0 1 0 13 | CUTC 1 0 6 5 2 4 0 2 1 2 14 | COX15 12 4 7 12 12 8 0 5 6 4 15 | ABCC2 0 0 0 0 0 0 0 0 0 0 16 | -------------------------------------------------------------------------------- /scripts/test_files/expression_bad_body_2.txt: -------------------------------------------------------------------------------- 1 | GENE Cell_A Cell_B Cell_C Cell_D Cell_E Cell_F Cell_G Cell_H Cell_I Cell_J 2 | LOXL4 0 0 0 0 0 0 0 0 0 0 3 | PYROXD2 0 0 0 1 0 0 0 0 0 0 4 | HPS1 10 5 6 6 7 2 0 6 2 5 5 | CNNM1 0 0 0 0 0 0 0 0 0 0 6 | GOT1 4 3 3 9 4 8 0 2 3 6 7 | RP11-441O15.3 1 0 0 0 0 0 0 0 0 0 8 | NKX2-3 0 0 1 0 0 0 0 0 0 0 9 | SLC25A28 3 1 1 4 0 2 0 0 1 3 10 | RP11-85A1.3 0 0 0 0 0 0 0 0 0 0 11 | RP11-483F11.7 0 0 A 0 0 0 0 0 1 0 12 | ENTPD7 1 1 0 0 5 0 0 0 1 0 13 | CUTC 1 0 6 5 2 4 0 2 1 2 14 | COX15 12 4 7 12 12 8 0 5 6 4 15 | ABCC2 0 0 0 0 0 0 0 0 0 0 16 | -------------------------------------------------------------------------------- /scripts/test_files/expression_bad_header.txt: -------------------------------------------------------------------------------- 1 | NOPE Cell_A Cell_B Cell_C Cell_D Cell_E Cell_F Cell_G Cell_H Cell_I Cell_J 2 | LOXL4 0 0 0 0 0 0 0 0 0 0 3 | PYROXD2 0 0 0 1 0 0 0 0 0 0 4 | HPS1 10 5 6 6 7 2 0 6 2 5 5 | CNNM1 0 0 0 0 0 0 0 0 0 0 6 | GOT1 4 3 3 9 4 8 0 2 3 6 7 | RP11-441O15.3 1 0 0 0 0 0 0 0 0 0 8 | NKX2-3 0 0 1 0 0 0 0 0 0 0 9 | SLC25A28 3 1 1 4 0 2 0 0 1 3 10 | RP11-85A1.3 0 0 0 0 0 0 0 0 0 0 11 | RP11-483F11.7 0 0 0 0 0 0 0 0 1 0 12 | ENTPD7 1 1 0 0 5 0 0 0 1 0 13 | CUTC 1 0 6 5 2 4 0 2 1 2 14 | COX15 12 4 7 12 12 8 0 5 6 4 15 | ABCC2 0 0 0 0 0 0 0 0 0 0 16 | -------------------------------------------------------------------------------- /scripts/test_files/expression_bad_header_2.txt: -------------------------------------------------------------------------------- 1 | Cell_A Cell_B Cell_C Cell_D Cell_E Cell_F Cell_G Cell_H Cell_I Cell_J 2 | LOXL4 0 0 0 0 0 0 0 0 0 0 3 | PYROXD2 0 0 0 1 0 0 0 0 0 0 4 | HPS1 10 5 6 6 7 2 0 6 2 5 5 | CNNM1 0 0 0 0 0 0 0 0 0 0 6 | GOT1 4 3 3 9 4 8 0 2 3 6 7 | RP11-441O15.3 1 0 0 0 0 0 0 0 0 0 8 | NKX2-3 0 0 1 0 0 0 0 0 0 0 9 | SLC25A28 3 1 1 4 0 2 0 0 1 3 10 | RP11-85A1.3 0 0 0 0 0 0 0 0 0 0 11 | RP11-483F11.7 0 0 0 0 0 0 0 0 1 0 12 | ENTPD7 1 1 0 0 5 0 0 0 1 0 13 | CUTC 1 0 6 5 2 4 0 2 1 2 14 | COX15 12 4 7 12 12 8 0 5 6 4 15 | ABCC2 0 0 0 0 0 0 0 0 0 0 16 | -------------------------------------------------------------------------------- /scripts/test_files/expression_deidentifed_correct.txt: -------------------------------------------------------------------------------- 1 | GENE cell_0 cell_1 cell_2 cell_3 cell_4 cell_5 cell_6 cell_7 cell_8 cell_9 cell_10 cell_11 cell_12 cell_13 cell_14 2 | Itm2a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 | Sergef 0 7.092 0 7.511 6.803 0 0 0 6.783 7.562 0 7.073 6.697 0 5.61 4 | Chil5 0 0 0 0 0 5.466 0 0 0 0 0 0 0 0 0 5 | Fam109a 0 0 4.205 0 0 0 0 7.305 0 0 0 0 0 0 7.221 6 | Dhx9 0 3.096 4.599 0 4.118 0 3.833 7.607 4.329 5.468 0 0 5.705 0 4.641 7 | Ssu72 5.043 0 6.439 0 0 0 0 0 7.106 7.162 7.85 6.016 0 0 0 8 | Olfr1018 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 | Fam71e2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | Eif2b2 0 0 0 0 0 6.549 0 0 7.117 0 0 0 0 6.487 0 11 | 1700061E18Rik 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | Mks1 0 0 0 0 0 6.062 4.59 0 0 0 0 0 0 4.463 0 13 | Gm12000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | Hebp2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | Gm14444 0 4.909 0 0 0 0 0 0 0 0 0 0 0 0 0 16 | Vps28 0 7.707 0 0 0 6.076 0 0 5.808 8.836 7.794 0 7.248 0 6.966 17 | Setd6 0 5.907 0 0 0 0 0 0 7.36 0 0 0 0 0 0 18 | Gstm2 0 0 0 0 0 0 0 0 4.524 0 0 0 0 0 0 19 | Spn-ps 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | Psma4 0 0 8.257 8.272 0 6.995 5.666 6.898 0 0 7.498 7.028 5.221 0 7.03 -------------------------------------------------------------------------------- /scripts/test_files/expression_deidentifed_precreated_correct.txt: -------------------------------------------------------------------------------- 1 | GENE 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 2 | Itm2a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 | Sergef 0 7.092 0 7.511 6.803 0 0 0 6.783 7.562 0 7.073 6.697 0 5.61 4 | Chil5 0 0 0 0 0 5.466 0 0 0 0 0 0 0 0 0 5 | Fam109a 0 0 4.205 0 0 0 0 7.305 0 0 0 0 0 0 7.221 6 | Dhx9 0 3.096 4.599 0 4.118 0 3.833 7.607 4.329 5.468 0 0 5.705 0 4.641 7 | Ssu72 5.043 0 6.439 0 0 0 0 0 7.106 7.162 7.85 6.016 0 0 0 8 | Olfr1018 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 | Fam71e2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | Eif2b2 0 0 0 0 0 6.549 0 0 7.117 0 0 0 0 6.487 0 11 | 1700061E18Rik 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | Mks1 0 0 0 0 0 6.062 4.59 0 0 0 0 0 0 4.463 0 13 | Gm12000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | Hebp2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | Gm14444 0 4.909 0 0 0 0 0 0 0 0 0 0 0 0 0 16 | Vps28 0 7.707 0 0 0 6.076 0 0 5.808 8.836 7.794 0 7.248 0 6.966 17 | Setd6 0 5.907 0 0 0 0 0 0 7.36 0 0 0 0 0 0 18 | Gstm2 0 0 0 0 0 0 0 0 4.524 0 0 0 0 0 0 19 | Spn-ps 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | Psma4 0 0 8.257 8.272 0 6.995 5.666 6.898 0 0 7.498 7.028 5.221 0 7.03 -------------------------------------------------------------------------------- /scripts/test_files/expression_mapping_correct.txt: -------------------------------------------------------------------------------- 1 | CELL_0001 -> cell_0 2 | CELL_00010 -> cell_9 3 | CELL_00011 -> cell_10 4 | CELL_00012 -> cell_11 5 | CELL_00013 -> cell_12 6 | CELL_00014 -> cell_13 7 | CELL_00015 -> cell_14 8 | CELL_0002 -> cell_1 9 | CELL_0003 -> cell_2 10 | CELL_0004 -> cell_3 11 | CELL_0005 -> cell_4 12 | CELL_0006 -> cell_5 13 | CELL_0007 -> cell_6 14 | CELL_0008 -> cell_7 15 | CELL_0009 -> cell_8 16 | GENE -> GENE -------------------------------------------------------------------------------- /scripts/test_files/expression_mapping_precreated_correct.txt: -------------------------------------------------------------------------------- 1 | CELL_0001 -> 0 2 | CELL_00010 -> 9 3 | CELL_00011 -> 10 4 | CELL_00012 -> 11 5 | CELL_00013 -> 12 6 | CELL_00014 -> 13 7 | CELL_00015 -> 14 8 | CELL_0002 -> 1 9 | CELL_0003 -> 2 10 | CELL_0004 -> 3 11 | CELL_0005 -> 4 12 | CELL_0006 -> 5 13 | CELL_0007 -> 6 14 | CELL_0008 -> 7 15 | CELL_0009 -> 8 16 | GENE -> GENE -------------------------------------------------------------------------------- /scripts/test_files/expression_subset_1_correct.txt: -------------------------------------------------------------------------------- 1 | GENE CELL_0002 2 | Itm2a 0 3 | Sergef 7.092 4 | Chil5 0 5 | Fam109a 0 6 | Dhx9 3.096 7 | Ssu72 0 8 | Olfr1018 0 9 | Fam71e2 0 10 | Eif2b2 0 11 | 1700061E18Rik 0 12 | Mks1 0 13 | Gm12000 0 14 | Hebp2 0 15 | Gm14444 4.909 16 | Vps28 7.707 17 | Setd6 5.907 18 | Gstm2 0 19 | Spn-ps 0 20 | Psma4 0 21 | -------------------------------------------------------------------------------- /scripts/test_files/expression_subset_4_correct.txt: -------------------------------------------------------------------------------- 1 | GENE CELL_0002 CELL_0004 CELL_0006 CELL_0008 2 | Itm2a 0 0 0 0 3 | Sergef 7.092 7.511 0 0 4 | Chil5 0 0 5.466 0 5 | Fam109a 0 0 0 7.305 6 | Dhx9 3.096 0 0 7.607 7 | Ssu72 0 0 0 0 8 | Olfr1018 0 0 0 0 9 | Fam71e2 0 0 0 0 10 | Eif2b2 0 0 6.549 0 11 | 1700061E18Rik 0 0 0 0 12 | Mks1 0 0 6.062 0 13 | Gm12000 0 0 0 0 14 | Hebp2 0 0 0 0 15 | Gm14444 4.909 0 0 0 16 | Vps28 7.707 0 6.076 0 17 | Setd6 5.907 0 0 0 18 | Gstm2 0 0 0 0 19 | Spn-ps 0 0 0 0 20 | Psma4 0 8.272 6.995 6.898 21 | -------------------------------------------------------------------------------- /scripts/test_files/gene_list.txt: -------------------------------------------------------------------------------- 1 | GENE NAMES CLST_A CLST_B CLST_C 2 | Dhx9 6.39 1.96 0.18 3 | Ssu72 2.98 0.81 0.18 4 | Olfr1018 6.66 2.05 0 5 | Fam71e2 6.14 3.03 0.39 6 | Fam109a 3.54 1.11 0.08 7 | Chil5 7.66 0.82 0 8 | Sergef 5.95 0.53 0.08 9 | Itm2a 5.77 1.18 0.29 10 | Mks1 4.88 1.04 0.12 11 | 1700061E18Rik 4.08 1.99 1.28 12 | Eif2b2 5.49 0.83 0 13 | Gm12000 6.56 4.1 0.7 14 | Hebp2 5.86 1.31 0.65 15 | Gm14444 6.24 2.47 0.99 16 | Vps28 4.59 1.31 0.14 17 | Gstm2 6.6 2.3 0.84 18 | Setd6 4.44 2.55 0 19 | Psma4 5.3 0.57 0.27 20 | Spn-ps 6.32 2.32 1.11 21 | -------------------------------------------------------------------------------- /scripts/test_files/gene_list_additional_label.txt: -------------------------------------------------------------------------------- 1 | GENE NAMES CLST_A CLST_B CLST_DDDDDC 2 | Dhx9 6.39 1.96 0.18 3 | Ssu72 2.98 0.81 0.18 4 | Olfr1018 6.66 2.05 0 5 | Fam71e2 6.14 3.03 0.39 6 | Fam109a 3.54 1.11 0.08 7 | Chil5 7.66 0.82 0 8 | Sergef 5.95 0.53 0.08 9 | Itm2a 5.77 1.18 0.29 10 | Mks1 4.88 1.04 0.12 11 | 1700061E18Rik 4.08 1.99 1.28 12 | Eif2b2 5.49 0.83 0 13 | Gm12000 6.56 4.1 0.7 14 | Hebp2 5.86 1.31 0.65 15 | Gm14444 6.24 2.47 0.99 16 | Vps28 4.59 1.31 0.14 17 | Gstm2 6.6 2.3 0.84 18 | Setd6 4.44 2.55 0 19 | Psma4 5.3 0.57 0.27 20 | Spn-ps 6.32 2.32 1.11 21 | -------------------------------------------------------------------------------- /scripts/test_files/gene_list_bad_empty_value.txt: -------------------------------------------------------------------------------- 1 | GENE NAMES CLST_A CLST_B CLST_C 2 | Dhx9 6.39 1.96 0.18 3 | Ssu72 2.98 0.81 0.18 4 | Olfr1018 6.66 2.05 0 5 | Fam71e2 6.14 3.03 0.39 6 | Fam109a 3.54 1.11 7 | Chil5 7.66 0.82 0 8 | Sergef 5.95 0.53 0.08 9 | Itm2a 5.77 1.18 0.29 10 | Mks1 4.88 1.04 0.12 11 | 1700061E18Rik 4.08 1.99 1.28 12 | Eif2b2 5.49 0.83 0 13 | Gm12000 6.56 4.1 0.7 14 | Hebp2 5.86 1.31 0.65 15 | Gm14444 6.24 2.47 0.99 16 | Vps28 4.59 1.31 0.14 17 | Gstm2 6.6 2.3 0.84 18 | Setd6 4.44 2.55 0 19 | Psma4 5.3 0.57 0.27 20 | Spn-ps 6.32 2.32 1.11 21 | -------------------------------------------------------------------------------- /scripts/test_files/gene_list_bad_header.txt: -------------------------------------------------------------------------------- 1 | GENE=NAMES CLST_A CLST_B CLST_C 2 | Dhx9 6.39 1.96 0.18 3 | Ssu72 2.98 0.81 0.18 4 | Olfr1018 6.66 2.05 0 5 | Fam71e2 6.14 3.03 0.39 6 | Fam109a 3.54 1.11 0.08 7 | Chil5 7.66 0.82 0 8 | Sergef 5.95 0.53 0.08 9 | Itm2a 5.77 1.18 0.29 10 | Mks1 4.88 1.04 0.12 11 | 1700061E18Rik 4.08 1.99 1.28 12 | Eif2b2 5.49 0.83 0 13 | Gm12000 6.56 4.1 0.7 14 | Hebp2 5.86 1.31 0.65 15 | Gm14444 6.24 2.47 0.99 16 | Vps28 4.59 1.31 0.14 17 | Gstm2 6.6 2.3 0.84 18 | Setd6 4.44 2.55 0 19 | Psma4 5.3 0.57 0.27 20 | Spn-ps 6.32 2.32 1.11 21 | -------------------------------------------------------------------------------- /scripts/test_files/gene_list_bad_row_length.txt: -------------------------------------------------------------------------------- 1 | GENE NAMES CLST_A CLST_B CLST_C 2 | Dhx9 6.39 1.96 0.18 3 | Ssu72 2.98 0.81 0.18 4 | Olfr1018 6.66 2.05 0 5 | Fam71e2 6.14 3.03 0.39 6 | Fam109a 3.54 1.11 0.08 7 | Chil5 7.66 0.82 0 8 | Sergef 5.95 0.53 0.08 0.0 9 | Itm2a 5.77 1.18 0.29 10 | Mks1 4.88 1.04 0.12 11 | 1700061E18Rik 4.08 1.99 1.28 12 | Eif2b2 5.49 0.83 0 13 | Gm12000 6.56 4.1 0.7 14 | Hebp2 5.86 1.31 0.65 15 | Gm14444 6.24 2.47 0.99 16 | Vps28 4.59 1.31 0.14 17 | Gstm2 6.6 2.3 0.84 18 | Setd6 4.44 2.55 0 19 | Psma4 5.3 0.57 0.27 20 | Spn-ps 6.32 2.32 1.11 21 | -------------------------------------------------------------------------------- /scripts/test_files/gene_list_bad_type.txt: -------------------------------------------------------------------------------- 1 | GENE NAMES CLST_A CLST_B CLST_C 2 | Dhx9 6.39 1.96 0.18 3 | Ssu72 2.98 0.81 0.18 4 | Olfr1018 6.66 2.05 0 5 | Fam71e2 6.14 3.03 0.39 6 | Fam109a 3.54 1.11 0.08 7 | Chil5 7.66 0.82 0 8 | Sergef 5.95 0.53 0.08 9 | Itm2a 5.77 1.18 0.29 10 | Mks1 4.88 1.04 0.12 11 | 1700061E18Rik 4.08 1.99 1.28 12 | Eif2b2 5.49 0.83 0 13 | Gm12000 6.56 A 0.7 14 | Hebp2 5.86 1.31 0.65 15 | Gm14444 6.24 2.47 0.99 16 | Vps28 4.59 1.31 0.14 17 | Gstm2 6.6 2.3 0.84 18 | Setd6 4.44 2.55 0 19 | Psma4 5.3 0.57 0.27 20 | Spn-ps 6.32 2.32 1.11 21 | -------------------------------------------------------------------------------- /scripts/test_files/gene_list_minus_one.txt: -------------------------------------------------------------------------------- 1 | GENE NAMES CLST_A CLST_B CLST_C 2 | Dhx9 6.39 1.96 0.18 3 | Ssu72 2.98 0.81 0.18 4 | Olfr1018 6.66 2.05 0 5 | Fam71e2 6.14 3.03 0.39 6 | Chil5 7.66 0.82 0 7 | Sergef 5.95 0.53 0.08 8 | Itm2a 5.77 1.18 0.29 9 | Mks1 4.88 1.04 0.12 10 | 1700061E18Rik 4.08 1.99 1.28 11 | Eif2b2 5.49 0.83 0 12 | Gm12000 6.56 4.1 0.7 13 | Hebp2 5.86 1.31 0.65 14 | Gm14444 6.24 2.47 0.99 15 | Vps28 4.59 1.31 0.14 16 | Gstm2 6.6 2.3 0.84 17 | Setd6 4.44 2.55 0 18 | Psma4 5.3 0.57 0.27 19 | Spn-ps 6.32 2.32 1.11 20 | -------------------------------------------------------------------------------- /scripts/test_files/gene_list_plus_one.txt: -------------------------------------------------------------------------------- 1 | GENE NAMES CLST_A CLST_B CLST_C 2 | Dhx9 6.39 1.96 0.18 3 | Ssu72 2.98 0.81 0.18 4 | Olfr1018 6.66 2.05 0 5 | Fam71e2 6.14 3.03 0.39 6 | Fam109a 3.54 1.11 0.08 7 | Chil5 7.66 0.82 0 8 | Sergef 5.95 0.53 0.08 9 | Itm2a 5.77 1.18 0.29 10 | Mks1 4.88 1.04 0.12 11 | 1700061E18Rik 4.08 1.99 1.28 12 | Eif2b2 5.49 0.83 0 13 | plus 5.449 04.83 40 14 | Gm12000 6.56 4.1 0.7 15 | Hebp2 5.86 1.31 0.65 16 | Gm14444 6.24 2.47 0.99 17 | Vps28 4.59 1.31 0.14 18 | Gstm2 6.6 2.3 0.84 19 | Setd6 4.44 2.55 0 20 | Psma4 5.3 0.57 0.27 21 | Spn-ps 6.32 2.32 1.11 22 | -------------------------------------------------------------------------------- /scripts/test_files/gene_sorted-test_sparse_matrix.mtx: -------------------------------------------------------------------------------- 1 | %%MatrixMarket matrix coordinate real general 2 | % 3 | % This is an example line 4 | % 5 | 20 2 42 6 | 9 2 1.69 7 | 11 1 1.79 8 | 14 1 1.79 9 | 14 2 3.14 10 | 21 1 1.79 11 | 25 1 2.4 12 | 25 2 1.69 13 | 28 1 1.79 14 | 30 1 2.77 15 | 30 2 2.28 16 | 39 1 3.04 17 | 39 2 2.28 18 | 46 1 5.9 19 | 46 2 5.61 20 | 47 2 1.69 21 | 48 1 1.79 22 | 50 1 2.4 23 | 50 2 2.92 24 | 53 2 1.69 25 | 62 2 1.69 26 | 69 1 2.77 27 | 69 2 2.28 28 | 74 2 2.65 29 | 85 1 2.4 30 | 85 2 2.92 31 | 87 1 1.79 32 | 87 2 2.28 33 | 88 2 2.28 34 | 89 1 1.79 35 | 91 2 2.65 36 | 95 2 2.28 37 | 96 1 2.77 38 | 96 2 1.69 39 | 105 2 2.28 40 | 110 2 1.69 41 | 113 2 2.28 42 | 116 2 1.69 43 | 118 2 2.28 44 | 119 2 1.69 45 | 124 2 2.28 46 | 128 2 1.69 47 | 134 2 2.28 48 | 136 2 1.69 49 | -------------------------------------------------------------------------------- /scripts/test_files/metadata.txt: -------------------------------------------------------------------------------- 1 | NAME Cluster Sub-Cluster Average Intensity 2 | TYPE group group numeric 3 | CELL_0001 CLST_A CLST_A_1 7.742 4 | CELL_0002 CLST_A CLST_A_1 -13.745 5 | CELL_0003 CLST_A CLST_A_1 -0.375 6 | CELL_0004 CLST_A CLST_A_2 9.188 7 | CELL_0005 CLST_A CLST_A_2 9.652 8 | CELL_0006 CLST_B CLST_B_1 -4.125 9 | CELL_0007 CLST_B CLST_B_1 -2.275 10 | CELL_0008 CLST_B CLST_B_2 -12.606 11 | CELL_0009 CLST_B CLST_B_2 3.675 12 | CELL_00010 CLST_B CLST_B_2 -2.116 13 | CELL_00011 CLST_C CLST_C_1 0.638 14 | CELL_00012 CLST_C CLST_C_1 8.888 15 | CELL_00013 CLST_C CLST_C_1 -2.27 16 | CELL_00014 CLST_C CLST_C_2 -2.606 17 | CELL_00015 CLST_C CLST_C_2 -9.089 18 | -------------------------------------------------------------------------------- /scripts/test_files/metadata_bad_body_1.txt: -------------------------------------------------------------------------------- 1 | NAME Cluster Sub-Cluster Average Intensity 2 | TYPE group group numeric 3 | CELL_0001 CLST_A CLST_A_1 7.742 4 | CELL_0002 CLST_A CLST_A_1 -13.745 5 | CELL_0003 CLST_A CLST_A_1 -0.375 6 | CELL_0004 CLST_A CLST_A_2 9.188 7 | CELL_0005 CLST_A CLST_A_2 9.652 8 | CELL_0006 CLST_B CLST_B_1 -4.125 9 | CELL_0007 CLST_B_1 -2.275 10 | CELL_0008 CLST_B CLST_B_2 -12.606 11 | CELL_0009 CLST_B CLST_B_2 3.675 12 | CELL_00010 CLST_B CLST_B_2 -2.116 13 | CELL_00011 CLST_C CLST_C_1 0.638 14 | CELL_00012 CLST_C CLST_C_1 8.888 15 | CELL_00013 CLST_C CLST_C_1 -2.27 16 | CELL_00014 CLST_C CLST_C_2 -2.606 17 | CELL_00015 CLST_C CLST_C_2 -9.089 18 | -------------------------------------------------------------------------------- /scripts/test_files/metadata_bad_body_2.txt: -------------------------------------------------------------------------------- 1 | NAME Cluster Sub-Cluster Average Intensity 2 | TYPE group numeric numeric 3 | CELL_0001 CLST_A CLST_A_1 7.742 4 | CELL_0002 CLST_A CLST_A_1 -13.745 5 | CELL_0003 CLST_A CLST_A_1 -0.375 6 | CELL_0004 CLST_A CLST_A_2 9.188 7 | CELL_0005 CLST_A CLST_A_2 9.652 8 | CELL_0006 CLST_B CLST_B_1 -4.125 9 | CELL_0007 CLST_B CLST_B_1 -2.275 10 | CELL_0008 CLST_B CLST_B_2 -12.606 11 | CELL_0009 CLST_B CLST_B_2 3.675 12 | CELL_00010 CLST_B CLST_B_2 -2.116 13 | CELL_00011 CLST_C CLST_C_1 0.638 14 | CELL_00012 CLST_C CLST_C_1 8.888 15 | CELL_00013 CLST_C CLST_C_1 -2.27 16 | CELL_00014 CLST_C CLST_C_2 -2.606 17 | CELL_00015 CLST_C CLST_C_2 -9.089 18 | -------------------------------------------------------------------------------- /scripts/test_files/metadata_bad_header.txt: -------------------------------------------------------------------------------- 1 | NONAME Cluster Sub-Cluster Average Intensity 2 | TYPE group group numeric 3 | CELL_0001 CLST_A CLST_A_1 7.742 4 | CELL_0002 CLST_A CLST_A_1 -13.745 5 | CELL_0003 CLST_A CLST_A_1 -0.375 6 | CELL_0004 CLST_A CLST_A_2 9.188 7 | CELL_0005 CLST_A CLST_A_2 9.652 8 | CELL_0006 CLST_B CLST_B_1 -4.125 9 | CELL_0007 CLST_B CLST_B_1 -2.275 10 | CELL_0008 CLST_B CLST_B_2 -12.606 11 | CELL_0009 CLST_B CLST_B_2 3.675 12 | CELL_00010 CLST_B CLST_B_2 -2.116 13 | CELL_00011 CLST_C CLST_C_1 0.638 14 | CELL_00012 CLST_C CLST_C_1 8.888 15 | CELL_00013 CLST_C CLST_C_1 -2.27 16 | CELL_00014 CLST_C CLST_C_2 -2.606 17 | CELL_00015 CLST_C CLST_C_2 -9.089 18 | -------------------------------------------------------------------------------- /scripts/test_files/metadata_bad_header_2.txt: -------------------------------------------------------------------------------- 1 | Cluster Sub-Cluster Average Intensity 2 | TYPE group group numeric 3 | CELL_0001 CLST_A CLST_A_1 7.742 4 | CELL_0002 CLST_A CLST_A_1 -13.745 5 | CELL_0003 CLST_A CLST_A_1 -0.375 6 | CELL_0004 CLST_A CLST_A_2 9.188 7 | CELL_0005 CLST_A CLST_A_2 9.652 8 | CELL_0006 CLST_B CLST_B_1 -4.125 9 | CELL_0007 CLST_B CLST_B_1 -2.275 10 | CELL_0008 CLST_B CLST_B_2 -12.606 11 | CELL_0009 CLST_B CLST_B_2 3.675 12 | CELL_00010 CLST_B CLST_B_2 -2.116 13 | CELL_00011 CLST_C CLST_C_1 0.638 14 | CELL_00012 CLST_C CLST_C_1 8.888 15 | CELL_00013 CLST_C CLST_C_1 -2.27 16 | CELL_00014 CLST_C CLST_C_2 -2.606 17 | CELL_00015 CLST_C CLST_C_2 -9.089 18 | -------------------------------------------------------------------------------- /scripts/test_files/metadata_bad_header_dup.txt: -------------------------------------------------------------------------------- 1 | NAME Cluster Cluster Average Intensity 2 | TYPE group group numeric 3 | CELL_0001 CLST_A CLST_A_1 7.742 4 | CELL_0002 CLST_A CLST_A_1 -13.745 5 | CELL_0003 CLST_A CLST_A_1 -0.375 6 | CELL_0004 CLST_A CLST_A_2 9.188 7 | CELL_0005 CLST_A CLST_A_2 9.652 8 | CELL_0006 CLST_B CLST_B_1 -4.125 9 | CELL_0007 CLST_B CLST_B_1 -2.275 10 | CELL_0008 CLST_B CLST_B_2 -12.606 11 | CELL_0009 CLST_B CLST_B_2 3.675 12 | CELL_00010 CLST_B CLST_B_2 -2.116 13 | CELL_00011 CLST_C CLST_C_1 0.638 14 | CELL_00012 CLST_C CLST_C_1 8.888 15 | CELL_00013 CLST_C CLST_C_1 -2.27 16 | CELL_00014 CLST_C CLST_C_2 -2.606 17 | CELL_00015 CLST_C CLST_C_2 -9.089 18 | -------------------------------------------------------------------------------- /scripts/test_files/metadata_bad_no_data.txt: -------------------------------------------------------------------------------- 1 | NAME 2 | TYPE 3 | CELL_0001 4 | CELL_0002 5 | CELL_0003 6 | CELL_0004 7 | CELL_0005 8 | CELL_0006 9 | CELL_0007 10 | CELL_0008 11 | CELL_0009 12 | CELL_00010 13 | CELL_00011 14 | CELL_00012 15 | CELL_00013 16 | CELL_00014 17 | CELL_00015 18 | -------------------------------------------------------------------------------- /scripts/test_files/metadata_bad_type.txt: -------------------------------------------------------------------------------- 1 | NAME Cluster Sub-Cluster Average Intensity 2 | TYPE groupish group numeric 3 | CELL_0001 CLST_A CLST_A_1 7.742 4 | CELL_0002 CLST_A CLST_A_1 -13.745 5 | CELL_0003 CLST_A CLST_A_1 -0.375 6 | CELL_0004 CLST_A CLST_A_2 9.188 7 | CELL_0005 CLST_A CLST_A_2 9.652 8 | CELL_0006 CLST_B CLST_B_1 -4.125 9 | CELL_0007 CLST_B CLST_B_1 -2.275 10 | CELL_0008 CLST_B CLST_B_2 -12.606 11 | CELL_0009 CLST_B CLST_B_2 3.675 12 | CELL_00010 CLST_B CLST_B_2 -2.116 13 | CELL_00011 CLST_C CLST_C_1 0.638 14 | CELL_00012 CLST_C CLST_C_1 8.888 15 | CELL_00013 CLST_C CLST_C_1 -2.27 16 | CELL_00014 CLST_C CLST_C_2 -2.606 17 | CELL_00015 CLST_C CLST_C_2 -9.089 18 | -------------------------------------------------------------------------------- /scripts/test_files/metadata_bad_type_id.txt: -------------------------------------------------------------------------------- 1 | NAME Cluster Sub-Cluster Average Intensity 2 | PYPE group group numeric 3 | CELL_0001 CLST_A CLST_A_1 7.742 4 | CELL_0002 CLST_A CLST_A_1 -13.745 5 | CELL_0003 CLST_A CLST_A_1 -0.375 6 | CELL_0004 CLST_A CLST_A_2 9.188 7 | CELL_0005 CLST_A CLST_A_2 9.652 8 | CELL_0006 CLST_B CLST_B_1 -4.125 9 | CELL_0007 CLST_B CLST_B_1 -2.275 10 | CELL_0008 CLST_B CLST_B_2 -12.606 11 | CELL_0009 CLST_B CLST_B_2 3.675 12 | CELL_00010 CLST_B CLST_B_2 -2.116 13 | CELL_00011 CLST_C CLST_C_1 0.638 14 | CELL_00012 CLST_C CLST_C_1 8.888 15 | CELL_00013 CLST_C CLST_C_1 -2.27 16 | CELL_00014 CLST_C CLST_C_2 -2.606 17 | CELL_00015 CLST_C CLST_C_2 -9.089 18 | -------------------------------------------------------------------------------- /scripts/test_files/metadata_bad_type_row_length.txt: -------------------------------------------------------------------------------- 1 | NAME Cluster Sub-Cluster Average Intensity 2 | TYPE group group numeric numeric 3 | CELL_0001 CLST_A CLST_A_1 7.742 4 | CELL_0002 CLST_A CLST_A_1 -13.745 5 | CELL_0003 CLST_A CLST_A_1 -0.375 6 | CELL_0004 CLST_A CLST_A_2 9.188 7 | CELL_0005 CLST_A CLST_A_2 9.652 8 | CELL_0006 CLST_B CLST_B_1 -4.125 9 | CELL_0007 CLST_B CLST_B_1 -2.275 10 | CELL_0008 CLST_B CLST_B_2 -12.606 11 | CELL_0009 CLST_B CLST_B_2 3.675 12 | CELL_00010 CLST_B CLST_B_2 -2.116 13 | CELL_00011 CLST_C CLST_C_1 0.638 14 | CELL_00012 CLST_C CLST_C_1 8.888 15 | CELL_00013 CLST_C CLST_C_1 -2.27 16 | CELL_00014 CLST_C CLST_C_2 -2.606 17 | CELL_00015 CLST_C CLST_C_2 -9.089 18 | -------------------------------------------------------------------------------- /scripts/test_files/metadata_deidentifed_correct.txt: -------------------------------------------------------------------------------- 1 | NAME Cluster Sub-Cluster Average Intensity 2 | TYPE group group numeric 3 | cell_0 CLST_A CLST_A_1 7.742 4 | cell_1 CLST_A CLST_A_1 -13.745 5 | cell_2 CLST_A CLST_A_1 -0.375 6 | cell_3 CLST_A CLST_A_2 9.188 7 | cell_4 CLST_A CLST_A_2 9.652 8 | cell_5 CLST_B CLST_B_1 -4.125 9 | cell_6 CLST_B CLST_B_1 -2.275 10 | cell_7 CLST_B CLST_B_2 -12.606 11 | cell_8 CLST_B CLST_B_2 3.675 12 | cell_9 CLST_B CLST_B_2 -2.116 13 | cell_10 CLST_C CLST_C_1 0.638 14 | cell_11 CLST_C CLST_C_1 8.888 15 | cell_12 CLST_C CLST_C_1 -2.27 16 | cell_13 CLST_C CLST_C_2 -2.606 17 | cell_14 CLST_C CLST_C_2 -9.089 -------------------------------------------------------------------------------- /scripts/test_files/metadata_deidentifed_precreated_correct.txt: -------------------------------------------------------------------------------- 1 | NAME Cluster Sub-Cluster Average Intensity 2 | TYPE group group numeric 3 | 0 CLST_A CLST_A_1 7.742 4 | 1 CLST_A CLST_A_1 -13.745 5 | 2 CLST_A CLST_A_1 -0.375 6 | 3 CLST_A CLST_A_2 9.188 7 | 4 CLST_A CLST_A_2 9.652 8 | 5 CLST_B CLST_B_1 -4.125 9 | 6 CLST_B CLST_B_1 -2.275 10 | 7 CLST_B CLST_B_2 -12.606 11 | 8 CLST_B CLST_B_2 3.675 12 | 9 CLST_B CLST_B_2 -2.116 13 | 10 CLST_C CLST_C_1 0.638 14 | 11 CLST_C CLST_C_1 8.888 15 | 12 CLST_C CLST_C_1 -2.27 16 | 13 CLST_C CLST_C_2 -2.606 17 | 14 CLST_C CLST_C_2 -9.089 -------------------------------------------------------------------------------- /scripts/test_files/metadata_duplicates.txt: -------------------------------------------------------------------------------- 1 | NAME Cluster Sub-Cluster Average Intensity 2 | TYPE group group numeric 3 | CELL_0001 CLST_A CLST_A_1 7.742 4 | CELL_0002 CLST_A CLST_A_1 -13.745 5 | CELL_0003 CLST_A CLST_A_1 -0.375 6 | CELL_0004 CLST_A CLST_A_2 9.188 7 | CELL_0005 CLST_A CLST_A_2 9.652 8 | CELL_0006 CLST_B CLST_B_1 -4.125 9 | CELL_0007 CLST_B CLST_B_1 -2.275 10 | CELL_0008 CLST_B CLST_B_2 -12.606 11 | CELL_0009 CLST_B CLST_B_2 3.675 12 | CELL_0001 CLST_B CLST_B_2 3.6 13 | CELL_00010 CLST_B CLST_B_2 -2.116 14 | CELL_00011 CLST_C CLST_C_1 0.638 15 | CELL_00012 CLST_C CLST_C_1 8.888 16 | CELL_00013 CLST_C CLST_C_1 -2.27 17 | CELL_00014 CLST_C CLST_C_2 -2.606 18 | CELL_00015 CLST_C CLST_C_2 -9.089 19 | -------------------------------------------------------------------------------- /scripts/test_files/metadata_mapping_correct.txt: -------------------------------------------------------------------------------- 1 | CELL_0001 -> cell_0 2 | CELL_00010 -> cell_9 3 | CELL_00011 -> cell_10 4 | CELL_00012 -> cell_11 5 | CELL_00013 -> cell_12 6 | CELL_00014 -> cell_13 7 | CELL_00015 -> cell_14 8 | CELL_0002 -> cell_1 9 | CELL_0003 -> cell_2 10 | CELL_0004 -> cell_3 11 | CELL_0005 -> cell_4 12 | CELL_0006 -> cell_5 13 | CELL_0007 -> cell_6 14 | CELL_0008 -> cell_7 15 | CELL_0009 -> cell_8 16 | NAME -> NAME 17 | TYPE -> TYPE -------------------------------------------------------------------------------- /scripts/test_files/metadata_mapping_precreated_correct.txt: -------------------------------------------------------------------------------- 1 | CELL_0001 -> 0 2 | CELL_00010 -> 9 3 | CELL_00011 -> 10 4 | CELL_00012 -> 11 5 | CELL_00013 -> 12 6 | CELL_00014 -> 13 7 | CELL_00015 -> 14 8 | CELL_0002 -> 1 9 | CELL_0003 -> 2 10 | CELL_0004 -> 3 11 | CELL_0005 -> 4 12 | CELL_0006 -> 5 13 | CELL_0007 -> 6 14 | CELL_0008 -> 7 15 | CELL_0009 -> 8 16 | NAME -> NAME 17 | TYPE -> TYPE -------------------------------------------------------------------------------- /scripts/test_files/metadata_subset_1_correct.txt: -------------------------------------------------------------------------------- 1 | NAME Cluster Sub-Cluster Average Intensity 2 | TYPE group group numeric 3 | CELL_0001 CLST_A CLST_A_1 7.742 4 | -------------------------------------------------------------------------------- /scripts/test_files/metadata_subset_2_correct.txt: -------------------------------------------------------------------------------- 1 | NAME Cluster Sub-Cluster Average Intensity 2 | TYPE group group numeric 3 | CELL_0001 CLST_A CLST_A_1 7.742 4 | CELL_00015 CLST_C CLST_C_2 -9.089 5 | -------------------------------------------------------------------------------- /scripts/test_files/test_sparse_matrix.mtx: -------------------------------------------------------------------------------- 1 | %%MatrixMarket matrix coordinate real general 2 | % 3 | % This is an example line 4 | % 5 | 20 2 42 6 | 9 2 1.69 7 | 14 2 3.14 8 | 25 2 1.69 9 | 30 2 2.28 10 | 39 2 2.28 11 | 46 2 5.61 12 | 47 2 1.69 13 | 50 2 2.92 14 | 53 2 1.69 15 | 62 2 1.69 16 | 69 2 2.28 17 | 74 2 2.65 18 | 85 2 2.92 19 | 87 2 2.28 20 | 88 2 2.28 21 | 91 2 2.65 22 | 95 2 2.28 23 | 96 2 1.69 24 | 105 2 2.28 25 | 110 2 1.69 26 | 113 2 2.28 27 | 116 2 1.69 28 | 118 2 2.28 29 | 119 2 1.69 30 | 124 2 2.28 31 | 128 2 1.69 32 | 134 2 2.28 33 | 136 2 1.69 34 | 11 1 1.79 35 | 14 1 1.79 36 | 21 1 1.79 37 | 25 1 2.40 38 | 28 1 1.79 39 | 30 1 2.77 40 | 39 1 3.04 41 | 46 1 5.90 42 | 48 1 1.79 43 | 50 1 2.40 44 | 69 1 2.77 45 | 85 1 2.40 46 | 87 1 1.79 47 | 89 1 1.79 48 | 96 1 2.77 49 | 50 | -------------------------------------------------------------------------------- /scripts/tests/data/invalid_array_v1.1.3.tsv: -------------------------------------------------------------------------------- 1 | NAME disease__time_since_onset disease__time_since_onset__unit donor disease__treated species species__ontology_label geographical_region geographical_region__ontology_label library_preparation_protocol library_preparation_protocol__ontology_label organ organ__ontology_label sex is_living organism_age__unit organism_age__unit_label ethnicity__ontology_label ethnicity sample_type organism_age disease disease__ontology_label cell_type cell_type__ontology_label donor_id biosample_id 2 | TYPE numeric group group group group group group group group group group group group group group group group group numeric group group group group group group group 3 | BM01_16dpp_AAGCAGTGGTAT 12|2 UO_0000035 BM01 False|False NCBITaxon_9606 Homo sapiens GAZ_00003181 Boston EFO_0008919 Seq-Well UBERON_0001913 milk female yes UO_0000036 year European HANCESTRO_0005 direct from donor - fresh 31 MONDO_0005015|MONDO_0006849 diabetes mellitus (disease)|mastitis CL_0000066 epithelial cell BM01 BM01_16dpp_r3 4 | BM01_16dpp_TAAGCAGTGGTA 1 UO_0000035 BM01 F NCBITaxon_9606 Homo sapiens GAZ_00003181 Boston EFO_0008919 Seq-Well UBERON_0001913 milk female yes UO_0000036 year HANCESTRO_0005 direct from donor - fresh 31 MONDO_0005709 common cold CL_0000066 epithelial cell BM01 BM01_16dpp_r3 5 | BM01_16dpp_CTAAGCAGTGGT 24|2 UO_0000035 BM01 T|F NCBITaxon_9606 Homo sapiens GAZ_00003181 Boston EFO_0008919 Seq-Well UBERON_0001913 milk female yes UO_0000036 year European HANCESTRO_0005 direct from donor - fresh 31 MONDO_0005015|MONDO_0005709 diabetes mellitus (disease)|common cold CL_0000066 epithelial cell BM01 BM01_16dpp_r3 6 | BM01_16dpp_CGGTAAACCATT 36|three|1 UO_0000035 BM01 True|False|False NCBITaxon_9606 Homo sapiens GAZ_00003181 Boston EFO_0008919 Seq-Well UBERON_0001913 milk female yes UO_0000036 year European HANCESTRO_0005 direct from donor - fresh 31 MONDO_0005015|MONDO_0006849|MONDO_0005709 diabetes mellitus (disease)|mastitis|common cold CL_0000066 epithelial cell BM01 BM01_16dpp_r3 7 | BM01_16dpp_CCGAATTCACCG zero UO_0000033 BM01 False NCBITaxon_9606 Homo sapiens GAZ_00003181 Boston EFO_0008919 Seq-Well UBERON_0001913 milk female yes UO_0000036 year European direct from donor - fresh 31 MONDO_0000001 disease or disorder CL_0000066 epithelial cell BM01 BM01_16dpp_r3 8 | -------------------------------------------------------------------------------- /scripts/tests/data/studies.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "embargo": null, 4 | "view_count": 11864, 5 | "use_existing_workspace": false, 6 | "user_id": { 7 | "$oid": "57602728833b3b018173fcc4" 8 | }, 9 | "description": "

Single nucleus RNA-seq of cell diversity in the adult mouse hippocampus.

\r\n\r\n

Habib N, Li Y, Heidenreich M, Swiech L, Avraham-Davidi I, Trombetta J, Hession C, Zhang F, Regev A. Div-Seq: Single-nucleus RNA-Seq reveals dynam 11 | ics of rare adult newborn neurons. Science  28 Jul 2016 DOI: 10.1126/science.aad7038
\r\nContact: naomi@broadinstitute.org

\r\n\r\n

Single cell RNA-Seq provides rich information about cell types and states. However, it is difficult to capture rare dynamic proc 13 | esses, such as adult neurogenesis, because isolation of rare neurons from adult tissue is challenging and markers for each phase are limited. Here, we develop Div-Seq, which combines scalable single-nucleus RNA-Seq (sNuc-Seq) with pulse l 14 | abeling of proliferating cells by EdU to profile individual dividing cells. sNuc-Seq and Div-Seq can sensitively identify closely related hippocampal cell types and track transcriptional dynamics of newborn neurons within the adult hippoc 15 | ampal neurogenic niche, respectively. This study contains the sNuc-Seq analysis performed as a part of the Div-Seq method development.

\r\n\r\n

Using sNuc-Seq, we analyzed 1,367 single nuclei from hippocampal anatomical sub-regions (DG, CA1, CA2, and CA3) from adult mice, including enrichment of genetically-tagged lowly abundant GABAergic neurons (9). sNuc-Seq robustly generated high quality data across animal age groups (including 2 years old mice), detecting 5,100 expressed g 18 | enes per nucleus on average, with comparable complexity to single neuron RNA-Seq from young mice (1, 23). Analysis of sNuc-Seq data revealed distinct nuclei clusters (Fig. 1B-D shown below) corresponding to known cell types and anatomical distinctions in the hippocampus.

\r\n\r\n

\"\"

\r\n\r\n

Fig. 1 sNuc-Seq identifies cell types in adult mouse brain.(A) Representative images of isolated nuclei are more uniform than of dissociated neurons from adult brain. Scale = 10μm. sNuc-Se 23 | q method (right): nuclei are isolated, FACS sorted and profiled using modified Smart-SEq. 2 (21). (B) Major cell types identified from sNuc 24 | -Seq data reflected by clusters, shown as 2-D embedding of 1,188 nuclei from adult mouse hippocampus. (C) Cluster-specific genes across single nuclei. Color bar matches cluster color in B. (D) Identification of DG granule cell, CA1, CA2, 25 | and CA3 pyramidal cell clusters, by marker genes, shown as: 1, ISH image in hippocampus section (10) (arrowhead: high expression; Scale = 4 26 | 00μm.); 2, histogram quantifying expression in relevant cluster; and 3, 2-D embedding of nuclei (as in B) colored by relative expression.

\r\n", 27 | "created_at": "2016-07-06T18:13:09.991Z", 28 | "default_options": { 29 | "expression_label": "log(TPM) expression", 30 | "cluster": "Coordinates_Major_cell_types", 31 | "cluster_point_size": "6", 32 | "annotation": "CLUSTER--group--study", 33 | "cluster_point_border": "true", 34 | "cluster_point_alpha": "1.0" 35 | }, 36 | "view_order": 2.0, 37 | "updated_at": "2019-01-23T22:08:20.565Z", 38 | "queued_for_deletion": false, 39 | "gene_count": 25392, 40 | "cell_count": 1402, 41 | "data_dir": "5c0212978fe2731b00d283e9937d18017580e913732ac0193e597a8a4167b4d0", 42 | "bucket_id": "fc-36f39ea7-439e-4a49-ad10-6a5a4614300e", 43 | "firecloud_workspace": "-single-nucleus-rna-seq-of-cell-diversity-in-the-adult-mouse-hippocampus-snuc-seq", 44 | "initialized": true, 45 | "url_safe_name": "-single-nucleus-rna-seq-of-cell-diversity-in-the-adult-mouse-hippocampus-snuc-seq", 46 | "_id": { 47 | "$oid": "577d4a35421aa904f7922101" 48 | }, 49 | "firecloud_project": "single-cell-portal", 50 | "public": true, 51 | "name": " Single nucleus RNA-seq of cell diversity in the adult mouse hippocampus (sNuc-Seq)" 52 | }, 53 | { 54 | "embargo": null, 55 | "view_count": 42, 56 | "use_existing_workspace": false, 57 | "user_id": { 58 | "$oid": "11112728833b3b018173fcc4" 59 | }, 60 | "description": "Just for unit tests, does not exist in FireCloud", 61 | "created_at": "2017-01-01T00:00:05.000Z", 62 | "default_options": { 63 | "expression_label": "log(TPM) expression", 64 | "cluster": "Coordinates_Major_cell_types", 65 | "cluster_point_size": "6", 66 | "annotation": "CLUSTER--group--study", 67 | "cluster_point_border": "true", 68 | "cluster_point_alpha": "1.0" 69 | }, 70 | "view_order": 1.0, 71 | "updated_at": "2018-01-01T00:00:05.000Z", 72 | "queued_for_deletion": false, 73 | "gene_count": 25000, 74 | "cell_count": 1000, 75 | "data_dir": "111112978fe2731b00d283e9937d18017580e913732ac0193e597a8a4167b4d0", 76 | "bucket_id": "fc-36f39ea7-1111-4a49-ad10-6a5a4614300e", 77 | "firecloud_workspace": "-study-only-for-unit-test", 78 | "initialized": true, 79 | "url_safe_name": "-study-only-for-unit-test", 80 | "_id": { 81 | "$oid": "11114a35421aa904f7922101" 82 | }, 83 | "firecloud_project": "single-cell-portal", 84 | "public": false, 85 | "name": "Study only for unit test" 86 | } 87 | ] -------------------------------------------------------------------------------- /scripts/tests/data/study_files_post.json: -------------------------------------------------------------------------------- 1 | { 2 | "_id": { 3 | "$oid": "5d8b6e16421aa90eca8ad4ee" 4 | }, 5 | "parse_status": "unparsed", 6 | "x_axis_label": "", 7 | "y_axis_label": "", 8 | "z_axis_label": "", 9 | "remote_location": "cluster_example.txt", 10 | "options": {}, 11 | "name": "cluster_example.txt", 12 | "upload_file_name": "cluster_example.txt", 13 | "upload_content_type": "text/plain", 14 | "upload_file_size": 681, 15 | "file_type": "Cluster", 16 | "generation": "1569418775318853", 17 | "human_data": false, 18 | "queued_for_deletion": false, 19 | "study_id": { 20 | "$oid": "5d8a8458421aa90eca8ad4d7" 21 | }, 22 | "data_dir": "aff9fefe552d252a7e805240f3733c69586b79350379f0a4f223d61f2b6c0749", 23 | "updated_at": "2019-09-25T13:39:34.185Z", 24 | "created_at": "2019-09-25T13:39:34.181Z", 25 | "status": "uploaded" 26 | } -------------------------------------------------------------------------------- /scripts/tests/data/toy_cluster.txt: -------------------------------------------------------------------------------- 1 | NAME X Y LABELS clusters toy-cell-types toy-category 2 | TYPE numeric numeric group group group group 3 | A 1 2 sample_1 D1 ref_1 foo_1 4 | B 2 3 sample_1 D2 ref_2 foo_1 5 | C 3 4 sample_1 D2 ref_2 foo_2 6 | D 4 5 sample_1 D1 ref_1 foo_1 7 | E 5 6 sample_1 D1 ref_1 foo_1 8 | F 6 7 sample_2 D3 ref_3 foo_2 9 | G 7 8 sample_1 D2 ref_2 foo_2 10 | H 8 9 sample_1 D2 ref_2 foo_1 11 | I 9 10 sample_2 D4 ref_4 foo_2 12 | J 10 11 sample_1 D3 ref_3 foo_2 13 | K 11 12 sample_3 D3 ref_3 foo_2 14 | L 12 13 sample_1 D2 ref_2 foo_2 15 | M 13 14 sample_3 D5 ref_3 foo_2 16 | N 14 15 sample_1 D2 ref_2 foo_1 17 | O 15 16 sample_1 D5 ref_3 foo_2 18 | P 16 17 sample_1 D1 ref_1 foo_1 19 | Q 17 18 sample_3 D5 ref_3 foo_2 20 | R 18 19 sample_1 D2 ref_2 foo_1 21 | S 19 20 sample_3 D3 ref_3 foo_2 22 | T 20 21 sample_1 D1 ref_1 foo_2 23 | U 21 22 sample_1 D1 ref_1 foo_2 24 | V 22 23 sample_1 D3 ref_3 foo_2 25 | W 23 24 sample_3 D8 ref_5 foo_2 26 | X 24 25 sample_2 D6 ref_6 foo_2 27 | Y 25 26 sample_2 D4 ref_4 foo_2 28 | Z 26 27 sample_1 D5 ref_3 foo_2 29 | AA 27 28 sample_2 D3 ref_3 foo_2 30 | AB 28 29 sample_1 D1 ref_1 foo_1 31 | AC 29 30 sample_1 D3 ref_3 foo_2 32 | AD 30 31 sample_1 D2 ref_2 foo_2 33 | AE 31 32 sample_2 D3 ref_3 foo_2 34 | AF 32 33 sample_2 D6 ref_6 foo_2 35 | AG 33 34 sample_1 D7 ref_6 foo_1 36 | AH 34 35 sample_1 D3 ref_3 foo_2 37 | AI 35 36 sample_2 D4 ref_4 foo_2 38 | AJ 36 37 sample_2 D5 ref_3 foo_2 39 | AK 37 38 sample_3 D3 ref_3 foo_2 40 | AL 38 39 sample_1 D3 ref_3 foo_2 41 | AM 39 40 sample_1 D3 ref_3 foo_2 42 | AN 40 41 sample_3 D3 ref_3 foo_2 43 | AO 41 42 sample_1 D6 ref_6 foo_1 44 | AP 42 43 sample_3 D6 ref_6 foo_2 45 | AQ 43 44 sample_1 D6 ref_6 foo_1 46 | AR 44 45 sample_1 D7 ref_6 foo_1 47 | AS 45 46 sample_3 D5 ref_3 foo_2 48 | AT 46 47 sample_3 D8 ref_5 foo_2 49 | AU 47 48 sample_3 D8 ref_5 foo_2 50 | AV 48 49 sample_1 D2 ref_2 foo_1 51 | AW 49 50 sample_1 D2 ref_2 foo_1 52 | AX 50 51 sample_1 D3 ref_3 foo_2 53 | AY 51 52 sample_2 D4 ref_4 foo_2 54 | AZ 52 53 sample_1 D7 ref_6 foo_1 55 | BA 53 54 sample_1 D7 ref_6 foo_1 56 | BB 54 55 sample_3 D8 ref_5 foo_2 57 | BC 55 56 sample_3 D5 ref_3 foo_2 58 | BD 56 57 sample_1 D7 ref_6 foo_1 59 | BE 57 58 sample_1 D5 ref_3 foo_2 60 | BF 58 59 sample_3 D8 ref_5 foo_2 61 | BG 59 60 sample_2 D6 ref_6 foo_2 62 | BH 60 61 sample_3 D8 ref_5 foo_2 63 | BI 61 62 sample_1 D5 ref_3 foo_2 64 | BJ 62 63 sample_1 D4 ref_4 foo_1 65 | BK 63 64 sample_2 D3 ref_3 foo_2 66 | BL 64 65 sample_3 D5 ref_3 foo_2 67 | BM 65 66 sample_3 D3 ref_3 foo_2 68 | BN 66 67 sample_2 D3 ref_3 foo_2 69 | BO 67 68 sample_1 D7 ref_6 foo_1 70 | BP 68 69 sample_1 D7 ref_6 foo_1 71 | BQ 69 70 sample_3 D8 ref_5 foo_2 72 | BR 70 71 sample_2 D5 ref_3 foo_2 73 | BS 71 72 sample_1 D4 ref_4 foo_1 74 | BT 72 73 sample_1 D1 ref_1 foo_1 75 | BU 73 74 sample_1 D2 ref_2 foo_2 76 | BV 74 75 sample_3 D8 ref_5 foo_2 77 | BW 75 76 sample_3 D3 ref_3 foo_2 78 | BX 76 77 sample_1 D7 ref_6 foo_1 79 | BY 77 78 sample_3 D8 ref_5 foo_2 80 | BZ 78 79 sample_3 D3 ref_3 foo_2 81 | CA 79 80 sample_1 D2 ref_2 foo_1 82 | CB 80 81 sample_2 D2 ref_2 foo_2 83 | CC 81 82 sample_3 D3 ref_3 foo_2 84 | CD 82 83 sample_1 D7 ref_6 foo_1 85 | CE 83 84 sample_1 D4 ref_4 foo_1 86 | CF 84 85 sample_2 D4 ref_4 foo_2 87 | CG 85 86 sample_3 D8 ref_5 foo_2 88 | CH 86 87 sample_1 D7 ref_6 foo_1 89 | CI 87 88 sample_2 D1 ref_1 foo_2 90 | CJ 88 89 sample_2 D5 ref_3 foo_2 91 | CK 89 90 sample_3 D3 ref_3 foo_2 92 | CL 90 91 sample_3 D5 ref_3 foo_2 93 | CM 91 92 sample_2 D4 ref_4 foo_2 94 | CN 92 93 sample_2 D6 ref_6 foo_2 95 | CO 93 94 sample_1 D4 ref_4 foo_2 96 | CP 94 95 sample_3 D7 ref_6 foo_2 97 | CQ 95 96 sample_1 D7 ref_6 foo_1 98 | CR 96 97 sample_1 D2 ref_2 foo_1 99 | CS 97 98 sample_1 D1 ref_1 foo_1 100 | CT 98 99 sample_1 D7 ref_6 foo_1 -------------------------------------------------------------------------------- /scripts/tests/data/toy_metadata.txt: -------------------------------------------------------------------------------- 1 | NAME samples num_bar num_baz cluster.labels FACS 2 | TYPE group numeric numeric group group 3 | A sample_1 1 2 quux foo_1 4 | B sample_1 2 3 quux foo_1 5 | C sample_1 3 4 quux foo_2 6 | D sample_1 4 5 quux foo_1 7 | E sample_1 5 6 quux foo_1 8 | F sample_2 6 7 quux foo_2 9 | G sample_1 7 8 quux foo_2 10 | H sample_1 8 9 quux foo_1 11 | I sample_2 9 10 quux foo_2 12 | J sample_1 10 11 quux foo_2 13 | K sample_3 11 12 quux foo_2 14 | L sample_1 12 13 quux foo_2 15 | M sample_3 13 14 quux foo_2 16 | N sample_1 14 15 quux foo_1 17 | O sample_1 15 16 quux foo_2 18 | P sample_1 16 17 quux foo_1 19 | Q sample_3 17 18 quux foo_2 20 | R sample_1 18 19 quux foo_1 21 | S sample_3 19 20 quux foo_2 22 | T sample_1 20 21 quux foo_2 23 | U sample_1 21 22 quux foo_2 24 | V sample_1 22 23 quux foo_2 25 | W sample_3 23 24 quux foo_2 26 | X sample_2 24 25 quux foo_2 27 | Y sample_2 25 26 quux foo_2 28 | Z sample_1 26 27 quux foo_2 29 | AA sample_2 27 28 quux foo_2 30 | AB sample_1 28 29 quux foo_1 31 | AC sample_1 29 30 quux foo_2 32 | AD sample_1 30 31 quux foo_2 33 | AE sample_2 31 32 quux foo_2 34 | AF sample_2 32 33 quux foo_2 35 | AG sample_1 33 34 quux foo_1 36 | AH sample_1 34 35 quux foo_2 37 | AI sample_2 35 36 quux foo_2 38 | AJ sample_2 36 37 quux foo_2 39 | AK sample_3 37 38 quux foo_2 40 | AL sample_1 38 39 quux foo_2 41 | AM sample_1 39 40 quux foo_2 42 | AN sample_3 40 41 quux foo_2 43 | AO sample_1 41 42 quux foo_1 44 | AP sample_3 42 43 quux foo_2 45 | AQ sample_1 43 44 quux foo_1 46 | AR sample_1 44 45 quux foo_1 47 | AS sample_3 45 46 quux foo_2 48 | AT sample_3 46 47 quux foo_2 49 | AU sample_3 47 48 quux foo_2 50 | AV sample_1 48 49 quux foo_1 51 | AW sample_1 49 50 quux foo_1 52 | AX sample_1 50 51 quux foo_2 53 | AY sample_2 51 52 quux foo_2 54 | AZ sample_1 52 53 quux foo_1 55 | BA sample_1 53 54 quux foo_1 56 | BB sample_3 54 55 quux foo_2 57 | BC sample_3 55 56 quux foo_2 58 | BD sample_1 56 57 quux foo_1 59 | BE sample_1 57 58 quux foo_2 60 | BF sample_3 58 59 quux foo_2 61 | BG sample_2 59 60 quux foo_2 62 | BH sample_3 60 61 quux foo_2 63 | BI sample_1 61 62 quux foo_2 64 | BJ sample_1 62 63 quux foo_1 65 | BK sample_2 63 64 quux foo_2 66 | BL sample_3 64 65 quux foo_2 67 | BM sample_3 65 66 quux foo_2 68 | BN sample_2 66 67 quux foo_2 69 | BO sample_1 67 68 quux foo_1 70 | BP sample_1 68 69 quux foo_1 71 | BQ sample_3 69 70 quux foo_2 72 | BR sample_2 70 71 quux foo_2 73 | BS sample_1 71 72 quux foo_1 74 | BT sample_1 72 73 quux foo_1 75 | BU sample_1 73 74 quux foo_2 76 | BV sample_3 74 75 quux foo_2 77 | BW sample_3 75 76 quux foo_2 78 | BX sample_1 76 77 quux foo_1 79 | BY sample_3 77 78 quux foo_2 80 | BZ sample_3 78 79 quux foo_2 81 | CA sample_1 79 80 quux foo_1 82 | CB sample_2 80 81 quux foo_2 83 | CC sample_3 81 82 quux foo_2 84 | CD sample_1 82 83 quux foo_1 85 | CE sample_1 83 84 quux foo_1 86 | CF sample_2 84 85 quux foo_2 87 | CG sample_3 85 86 quux foo_2 88 | CH sample_1 86 87 quux foo_1 89 | CI sample_2 87 88 quux foo_2 90 | CJ sample_2 88 89 quux foo_2 91 | CK sample_3 89 90 quux foo_2 92 | CL sample_3 90 91 quux foo_2 93 | CM sample_2 91 92 quux foo_2 94 | CN sample_2 92 93 quux foo_2 95 | CO sample_1 93 94 quux foo_2 96 | CP sample_3 94 95 quux foo_2 97 | CQ sample_1 95 96 quux foo_1 98 | CR sample_1 96 97 quux foo_1 99 | CS sample_1 97 98 quux foo_2 100 | CT sample_1 98 99 quux foo_1 101 | A_2 sample_1 99 100 quux foo_1 102 | B_2 sample_1 100 101 quux foo_1 103 | C_2 sample_2 101 102 quux foo_2 104 | D_2 sample_3 102 103 quux foo_2 105 | E_2 sample_3 103 104 quux foo_2 106 | F_2 sample_1 104 105 quux foo_1 107 | G_2 sample_1 105 106 quux foo_1 108 | H_2 sample_3 106 107 quux foo_2 109 | I_2 sample_3 107 108 quux foo_2 110 | J_2 sample_1 108 109 quux foo_1 111 | K_2 sample_1 109 110 quux foo_1 112 | L_2 sample_2 110 111 quux foo_2 113 | M_2 sample_2 111 112 quux foo_2 114 | N_2 sample_2 112 113 quux foo_2 115 | O_2 sample_3 113 114 quux foo_2 116 | P_2 sample_1 114 115 quux foo_2 117 | Q_2 sample_2 115 116 quux foo_2 118 | R_2 sample_1 116 117 quux foo_1 119 | S_2 sample_3 117 118 quux foo_2 120 | T_2 sample_2 118 119 quux foo_2 121 | U_2 sample_3 119 120 quux foo_2 122 | V_2 sample_2 120 121 quux foo_2 123 | W_2 sample_1 121 122 quux foo_1 124 | X_2 sample_2 122 123 quux foo_2 125 | Y_2 sample_2 123 124 quux foo_2 126 | Z_2 sample_1 124 125 quux foo_1 127 | AA_2 sample_3 125 126 quux foo_2 128 | AB_2 sample_1 126 127 quux foo_1 129 | AC_2 sample_2 127 128 quux foo_2 130 | AD_2 sample_2 128 129 quux foo_2 131 | AE_2 sample_1 129 130 quux foo_1 132 | AF_2 sample_3 130 131 quux foo_2 133 | AG_2 sample_2 131 132 quux foo_2 134 | AH_2 sample_2 132 133 quux foo_2 135 | AI_2 sample_3 133 134 quux foo_2 136 | AJ_2 sample_3 134 135 quux foo_2 137 | AK_2 sample_1 135 136 quux foo_1 138 | AL_2 sample_1 136 137 quux foo_2 139 | AM_2 sample_1 137 138 quux foo_1 140 | AN_2 sample_3 138 139 quux foo_2 141 | AO_2 sample_1 139 140 quux foo_2 142 | AP_2 sample_1 140 141 quux foo_1 143 | AQ_2 sample_2 141 142 quux foo_2 144 | AR_2 sample_2 142 143 quux foo_2 145 | AS_2 sample_1 143 144 quux foo_1 146 | AT_2 sample_2 144 145 quux foo_2 147 | AU_2 sample_2 145 146 quux foo_2 148 | AV_2 sample_3 146 147 quux foo_2 149 | AW_2 sample_3 147 148 quux foo_2 150 | AX_2 sample_2 148 149 quux foo_2 151 | AY_2 sample_1 149 150 quux foo_1 152 | AZ_2 sample_1 150 151 quux foo_1 153 | BA_2 sample_1 151 152 quux foo_1 154 | BB_2 sample_2 152 153 quux foo_2 155 | BC_2 sample_1 153 154 quux foo_2 156 | BD_2 sample_1 154 155 quux foo_2 157 | BE_2 sample_2 155 156 quux foo_2 158 | BF_2 sample_3 156 157 quux foo_2 159 | BG_2 sample_2 157 158 quux foo_2 160 | BH_2 sample_1 158 159 quux foo_2 161 | BI_2 sample_1 159 160 quux foo_1 162 | BJ_2 sample_1 160 161 quux foo_1 163 | BK_2 sample_3 161 162 quux foo_2 164 | BL_2 sample_2 162 163 quux foo_2 165 | BM_2 sample_3 163 164 quux foo_2 166 | BN_2 sample_1 164 165 quux foo_2 167 | BO_2 sample_2 165 166 quux foo_2 168 | BP_2 sample_1 166 167 quux foo_2 169 | BQ_2 sample_1 167 168 quux foo_1 170 | BR_2 sample_1 168 169 quux foo_1 171 | BS_2 sample_3 169 170 quux foo_2 172 | BT_2 sample_1 170 171 quux foo_1 173 | BU_2 sample_1 171 172 quux foo_1 174 | BV_2 sample_1 172 173 quux foo_1 175 | BW_2 sample_3 173 174 quux foo_2 176 | BX_2 sample_1 174 175 quux foo_1 177 | BY_2 sample_1 175 176 quux foo_1 178 | BZ_2 sample_1 176 177 quux foo_1 179 | CA_2 sample_1 177 178 quux foo_1 180 | CB_2 sample_1 178 179 quux foo_1 181 | CC_2 sample_2 179 180 quux foo_2 182 | CD_2 sample_3 180 181 quux foo_2 183 | CE_2 sample_3 181 182 quux foo_2 184 | CF_2 sample_1 182 183 quux foo_1 185 | CG_2 sample_1 183 184 quux foo_2 186 | CH_2 sample_3 184 185 quux foo_2 187 | CI_2 sample_3 185 186 quux foo_2 188 | CJ_2 sample_3 186 187 quux foo_2 189 | CK_2 sample_1 187 188 quux foo_2 190 | CL_2 sample_3 188 189 quux foo_2 191 | CM_2 sample_1 189 190 quux foo_1 192 | CN_2 sample_3 190 191 quux foo_2 193 | CO_2 sample_1 191 192 quux foo_1 194 | CP_2 sample_3 192 193 quux foo_2 195 | CQ_2 sample_2 193 194 quux foo_2 196 | CR_2 sample_2 194 195 quux foo_2 197 | CS_2 sample_1 195 196 quux foo_1 198 | CT_2 sample_3 196 197 quux foo_2 199 | CU_2 sample_1 197 198 quux foo_1 200 | CV_2 sample_2 198 199 quux foo_2 -------------------------------------------------------------------------------- /scripts/tests/data/valid_array_v2.1.2.txt: -------------------------------------------------------------------------------- 1 | NAME disease__time_since_onset disease__time_since_onset__unit organ_region organ_region__ontology_label donor disease__treated species species__ontology_label geographical_region geographical_region__ontology_label library_preparation_protocol library_preparation_protocol__ontology_label organ organ__ontology_label sex is_living organism_age__unit organism_age__unit_label ethnicity__ontology_label ethnicity organism_age disease disease__ontology_label cell_type cell_type__ontology_label donor_id biosample_id biosample_type preservation_method 2 | TYPE numeric group group group group group group group group group group group group group group group group group group group numeric group group group group group group group group 3 | BM01_16dpp_AAGCAGTGGTAT 12|2 UO_0000035 MBA:000000944 Folium-tuber vermis (VII) BM01 False|False NCBITaxon_9606 Homo sapiens GAZ_00003181 Boston EFO_0008919 Seq-Well UBERON_0001913 milk female yes UO_0000036 year European HANCESTRO_0005 31 MONDO_0005015|MONDO_0006849 diabetes mellitus (disease)|mastitis CL_0000066 epithelial cell BM01 BM01_16dpp_r3 PrimaryBioSample_BodyFluid Fresh 4 | BM01_16dpp_TAAGCAGTGGTA 1 UO_0000035 MBA:000000302|MBA:000000294|MBA:000000795 Superior colliculus, sensory related|Superior colliculus, motor related|Periaqueductal gray BM01 FALSE NCBITaxon_9606 Homo sapiens GAZ_00003181 Boston EFO_0008919 Seq-Well UBERON_0001913 milk female yes UO_0000036 year European HANCESTRO_0005 31 MONDO_0005709 common cold CL_0000066 epithelial cell BM01 BM01_16dpp_r3 PrimaryBioSample_BodyFluid Fresh 5 | BM01_16dpp_CTAAGCAGTGGT 24|2 UO_0000035 MBA:000000714|MBA:000000972 BM01 True|False NCBITaxon_9606 Homo sapiens GAZ_00003181 Boston EFO_0008919 Seq-Well UBERON_0001913 milk female yes UO_0000036 year European|British HANCESTRO_0005|HANCESTRO_0462 31 MONDO_0005015|MONDO_0005709 diabetes mellitus (disease)|common cold CL_0000066 epithelial cell BM01 BM01_16dpp_r3 PrimaryBioSample_BodyFluid Fresh 6 | BM01_16dpp_CGGTAAACCATT 36|3|1 UO_0000035 MBA:000001041 Paraflocculus BM01 True|False|False NCBITaxon_9606 Homo sapiens GAZ_00003181 Boston EFO_0008919 Seq-Well UBERON_0001913 milk female yes UO_0000036 year HANCESTRO_0005|HANCESTRO_0462 31 MONDO_0005015|MONDO_0006849|MONDO_0005709 diabetes mellitus (disease)|mastitis|common cold CL_0000066 epithelial cell BM01 BM01_16dpp_r3 PrimaryBioSample_BodyFluid Fresh 7 | BM01_16dpp_CCGAATTCACCG 0 UO_0000035 MBA:000000909|MBA:000000502 Entorhinal area|Subiculum BM01 FALSE NCBITaxon_9606 Homo sapiens GAZ_00003181 Boston EFO_0008919 Seq-Well UBERON_0001913 milk female yes UO_0000036 year European HANCESTRO_0005 31 MONDO_0000001 disease or disorder CL_0000066 epithelial cell BM01 BM01_16dpp_r3 PrimaryBioSample_BodyFluid Fresh 8 | -------------------------------------------------------------------------------- /scripts/tests/gcp_mocks.py: -------------------------------------------------------------------------------- 1 | """Mocks for Google Cloud Platform (GCP) services 2 | 3 | These mocks enable tests to run in a manner that is fast and isolated. 4 | GCP aspires to provide "emulators" for these services; see 5 | https://github.com/googleapis/google-cloud-python/issues/4840. 6 | Until those are available, custom mocks like these are the best available 7 | alternative to enable integration tests to run quickly. 8 | """ 9 | 10 | import os 11 | from shutil import copyfile 12 | 13 | 14 | def mock_storage_client(): 15 | class MockStorageBucket: 16 | def __init__(self, name): 17 | self.name = name 18 | return 19 | 20 | def blob(self, blob_name): 21 | return mock_storage_blob(bucket=self.name, name=blob_name) 22 | 23 | class MockStorageClient: 24 | def __init__(self): 25 | return 26 | 27 | def get_bucket(bucket_name): 28 | return MockStorageBucket(bucket_name) 29 | 30 | return MockStorageClient 31 | 32 | 33 | def mock_storage_blob(*args, **kwargs): 34 | """Mocks Google Cloud Storage library 35 | 36 | TODO: Watch progress on official Storage emulator for integration tests: 37 | - https://github.com/googleapis/google-cloud-python/issues/8728 38 | - https://github.com/googleapis/google-cloud-python/issues/4840 39 | 40 | When such an emulator is released, use it and remove this custom mock. 41 | """ 42 | 43 | class MockStorageBlob: 44 | def __init__(self, bucket=None, name=None): 45 | self.bucket = bucket 46 | self.name = 'tests/data/' + name 47 | print(f'Bucket is {self.bucket} and name is {self.name}') 48 | 49 | def exists(self, storage_client): 50 | return os.path.exists(self.name) 51 | 52 | def download_to_filename(self, filename): 53 | """Mock; doesn't actually download. Makes local copy instead.""" 54 | copyfile(self.name, filename) 55 | 56 | return MockStorageBlob(*args, **kwargs) 57 | -------------------------------------------------------------------------------- /scripts/tests/test_manage_study.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | from unittest.mock import patch, Mock 3 | import sys 4 | import pytest 5 | import json 6 | import requests 7 | from ingest.cell_metadata import CellMetadata 8 | from ingest.validation.validate_metadata import ( 9 | report_issues, 10 | serialize_issues, 11 | exit_if_errors, 12 | validate_input_metadata, 13 | ) 14 | 15 | sys.path.append(".") 16 | 17 | from manage_study import validate_metadata_file 18 | from gcp_mocks import mock_storage_client, mock_storage_blob 19 | from scp_api import SCPAPIManager 20 | from cli_parser import create_parser 21 | 22 | # This method will be used by the mock to replace requests.post 23 | def mocked_requests_get(*args, **kwargs): 24 | class MockResponse: 25 | def __init__(self, json_data, status_code, reason=None): 26 | self.json_data = json_data 27 | self.status_code = status_code 28 | self.reason = reason 29 | 30 | def json(self): 31 | return self.json_data 32 | 33 | url = args[0] 34 | convention_file_path = "tests/data/alexandria_convention_schema_2.1.0.json" 35 | if url == "metadata_schemas/alexandria_convention/latest/json": 36 | with open(convention_file_path) as f: 37 | return MockResponse(json.load(f), 200, reason="OK") 38 | return MockResponse(None, 404) 39 | 40 | 41 | def mock_get_connection(*args, **kwargs): 42 | class MockResponse: 43 | def get_study_attribute(study_name, attribute, dry_run): 44 | return {"success": True, "study_attribute": "SCP599"} 45 | 46 | def do_get(command=None, dry_run=None): 47 | return {"response": mocked_requests_get(command)} 48 | 49 | return MockResponse 50 | 51 | 52 | def mock_get_api_base(parsed_args): 53 | return "" 54 | 55 | 56 | class ManageStudyTestCase(unittest.TestCase): 57 | def set_up_manage_study(self, *args): 58 | return create_parser().parse_args(args) 59 | 60 | @patch("manage_study.succeeded", return_value=True) 61 | @patch("manage_study.get_api_base", side_effect=mock_get_api_base) 62 | def test_validate_metadata_file_invalid_ontology( 63 | self, 64 | mock_succeeded, 65 | mock_get_api_base, 66 | ): 67 | """Unconventional metadata file should fail validation 68 | 69 | This basic test ensures that the external dependency 70 | `scp-ingest-pipeline` in our public CLI works as expected. 71 | """ 72 | invalid_metadata_path = "tests/data/invalid_array_v1.1.3.tsv" 73 | parsed_args = self.set_up_manage_study( 74 | "upload-metadata", 75 | "--study-name", 76 | "CLI test", 77 | "--file", 78 | invalid_metadata_path, 79 | "--use-convention", 80 | ) 81 | print(parsed_args) 82 | SCPAPIManager = Mock() 83 | SCPAPIManager.get_study_attribute.return_value = "SCP555" 84 | 85 | self.assertFalse( 86 | validate_metadata_file(parsed_args, mock_get_connection()), 87 | "Unconventional metadata file should fail validation", 88 | ) 89 | 90 | @patch("manage_study.succeeded", return_value=True) 91 | @patch("manage_study.get_api_base", side_effect=mock_get_api_base) 92 | def test_validate_metadata_file_valid_ontology( 93 | self, 94 | mock_succeeded, 95 | mock_get_api_base, 96 | ): 97 | """Conventional metadata file should pass validation 98 | 99 | This basic test ensures that the external dependency 100 | `scp-ingest-pipeline` in our public CLI works as expected. 101 | """ 102 | valid_metadata_path = "tests/data/valid_array_v2.1.2.txt" 103 | parsed_args = self.set_up_manage_study( 104 | "upload-metadata", 105 | "--study-name", 106 | "CLI test", 107 | "--file", 108 | valid_metadata_path, 109 | "--use-convention", 110 | ) 111 | SCPAPIManager = Mock() 112 | SCPAPIManager.get_study_attribute.return_value = "SCP555" 113 | 114 | self.assertTrue( 115 | validate_metadata_file(parsed_args, mock_get_connection()), 116 | "Conventional metadata file should pass validation", 117 | ) 118 | 119 | 120 | if __name__ == "__main__": 121 | unittest.main() 122 | -------------------------------------------------------------------------------- /scripts/tests/test_scp_to_infercnv.py: -------------------------------------------------------------------------------- 1 | """Unit tests for scp_to_infercnv.py 2 | 3 | To run, set up scripts per README, then: 4 | 5 | cd scripts 6 | python3 tests/test_scp_to_infercnv.py 7 | 8 | """ 9 | 10 | import unittest 11 | from glob import glob 12 | import json 13 | 14 | import sys 15 | sys.path.append('.') 16 | 17 | from scp_to_infercnv import * 18 | 19 | class ScpToInfercnvTestCase(unittest.TestCase): 20 | 21 | def test_conversion_with_references(self): 22 | """Converter should handle default case with reference clusters 23 | """ 24 | output_dir = 'test_output/' 25 | 26 | args = [ 27 | '--reference-cluster-path', 'tests/data/toy_cluster.txt', 28 | '--reference-group-name', 'toy-cell-types', 29 | '--metadata-path', 'tests/data/toy_metadata.txt', 30 | '--observation-group-name', 'samples', 31 | '--output-dir', output_dir 32 | ] 33 | 34 | args = create_parser().parse_args(args) 35 | 36 | ref_list = get_references(args.ref_cluster_path, 37 | args.ref_group_name, args.delimiter) 38 | infercnv_annots = get_infercnv_annots(args.metadata_path, 39 | args.obs_group_name, args.delimiter, ref_list[0]) 40 | write_infercnv_inputs(infercnv_annots, ref_list[1], args.output_dir) 41 | 42 | # Validate reference cells labels 43 | with open(output_dir + 'infercnv_reference_cell_labels_from_scp.tsv') as f: 44 | ref_labels = f.read() 45 | expected_ref_labels = 'ref_1,ref_2,ref_3,ref_4,ref_5,ref_6' 46 | self.assertEqual(ref_labels, expected_ref_labels) 47 | 48 | # Validate inferCNV annotations for reference cells 49 | with open(output_dir + 'infercnv_annots_from_scp.tsv') as f: 50 | infercnv_annots = [row.strip().split() for row in f.readlines()] 51 | expected_infercnv_annots_ref = [ 52 | ['A', 'ref_1'], 53 | ['B', 'ref_2'], 54 | ['C', 'ref_2'] 55 | ] 56 | infercnv_annots_ref = infercnv_annots[:3] # Reference cells include the first three 57 | self.assertEqual(infercnv_annots_ref, expected_infercnv_annots_ref) 58 | 59 | # Validate inferCNV annotations for observation cells 60 | infercnv_annots_obs = infercnv_annots[-3:] # Observations cells include the last three 61 | expected_infercnv_annots_obs = [ 62 | ['CT_2', 'sample_3'], 63 | ['CU_2', 'sample_1'], 64 | ['CV_2', 'sample_2'] 65 | ] 66 | self.assertEqual(infercnv_annots_obs, expected_infercnv_annots_obs) 67 | 68 | if __name__ == '__main__': 69 | unittest.main() -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup, find_packages 2 | 3 | with open("README.md", "r") as fh: 4 | long_description = fh.read() 5 | 6 | setup( 7 | name="single-cell-portal", 8 | version="0.2.2", 9 | description="Convenience scripts for Single Cell Portal", 10 | long_description=long_description, 11 | long_description_content_type="text/markdown", 12 | url="https://github.com/broadinstitute/single_cell_portal", 13 | author="Single Cell Portal team", 14 | author_email="scp-support@broadinstitute.zendesk.com", 15 | install_requires=["pandas", "requests", "scp-ingest-pipeline==1.7.0"], 16 | packages=find_packages(), 17 | entry_points={ 18 | "console_scripts": ["manage-study=scripts.manage_study:main"], 19 | }, 20 | classifiers=[ 21 | "Development Status :: 4 - Beta", 22 | "License :: OSI Approved :: BSD License", 23 | "Topic :: Scientific/Engineering :: Bio-Informatics", 24 | "Programming Language :: Python :: 3.7", 25 | ], 26 | python_requires=">=3.7", 27 | ) 28 | -------------------------------------------------------------------------------- /site_figures/annotate/01_Single_cell_portal_welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/01_Single_cell_portal_welcome.png -------------------------------------------------------------------------------- /site_figures/annotate/02_Summary_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/02_Summary_page.png -------------------------------------------------------------------------------- /site_figures/annotate/03_Explore_tab_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/03_Explore_tab_menu.png -------------------------------------------------------------------------------- /site_figures/annotate/04_Create_annotations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/04_Create_annotations.png -------------------------------------------------------------------------------- /site_figures/annotate/05_Select_cells.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/05_Select_cells.png -------------------------------------------------------------------------------- /site_figures/annotate/06_Annotations_group_name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/06_Annotations_group_name.png -------------------------------------------------------------------------------- /site_figures/annotate/07_lasso.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/07_lasso.png -------------------------------------------------------------------------------- /site_figures/annotate/08-label.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/08-label.png -------------------------------------------------------------------------------- /site_figures/annotate/09_Create_annotations_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/09_Create_annotations_button.png -------------------------------------------------------------------------------- /site_figures/annotate/10_view_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/10_view_options.png -------------------------------------------------------------------------------- /site_figures/annotate/11_select_annotation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/11_select_annotation.png -------------------------------------------------------------------------------- /site_figures/annotate/12_view_annotation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/12_view_annotation.png -------------------------------------------------------------------------------- /site_figures/annotate/13-expression-annotations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/13-expression-annotations.png -------------------------------------------------------------------------------- /site_figures/annotate/14_profile_dropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/14_profile_dropdown.png -------------------------------------------------------------------------------- /site_figures/annotate/15_My_annotations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/15_My_annotations.png -------------------------------------------------------------------------------- /site_figures/annotate/16_My_annotations_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/16_My_annotations_page.png -------------------------------------------------------------------------------- /site_figures/annotate/17_share_study.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/annotate/17_share_study.png -------------------------------------------------------------------------------- /site_figures/billing-projects/billing-projects-add-users.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/billing-projects/billing-projects-add-users.png -------------------------------------------------------------------------------- /site_figures/billing-projects/billing-projects-select-create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/billing-projects/billing-projects-select-create.png -------------------------------------------------------------------------------- /site_figures/billing-projects/create-billing-project.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/billing-projects/create-billing-project.png -------------------------------------------------------------------------------- /site_figures/billing-projects/select-billing-projects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/billing-projects/select-billing-projects.png -------------------------------------------------------------------------------- /site_figures/cellranger_scCloud/cellranger_scCloud_countonly_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/cellranger_scCloud/cellranger_scCloud_countonly_settings.png -------------------------------------------------------------------------------- /site_figures/cellranger_scCloud/running_workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/cellranger_scCloud/running_workflow.png -------------------------------------------------------------------------------- /site_figures/cellranger_scCloud/scCloud3Dnuclei900.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/cellranger_scCloud/scCloud3Dnuclei900.png -------------------------------------------------------------------------------- /site_figures/cellranger_scCloud/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/cellranger_scCloud/settings.png -------------------------------------------------------------------------------- /site_figures/cellranger_scCloud/submission_history_actions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/cellranger_scCloud/submission_history_actions.png -------------------------------------------------------------------------------- /site_figures/cellranger_scCloud/upload_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/cellranger_scCloud/upload_data.png -------------------------------------------------------------------------------- /site_figures/cellranger_scCloud/upload_sampleSheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/cellranger_scCloud/upload_sampleSheet.png -------------------------------------------------------------------------------- /site_figures/cellranger_scCloud/workflow_sync.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/cellranger_scCloud/workflow_sync.png -------------------------------------------------------------------------------- /site_figures/create_account/01_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_account/01_home.png -------------------------------------------------------------------------------- /site_figures/create_account/02_select_account.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_account/02_select_account.png -------------------------------------------------------------------------------- /site_figures/create_account/03_confirm_permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_account/03_confirm_permissions.png -------------------------------------------------------------------------------- /site_figures/create_account/04_profile_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_account/04_profile_menu.png -------------------------------------------------------------------------------- /site_figures/create_account/account_creation_enter_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_account/account_creation_enter_info.png -------------------------------------------------------------------------------- /site_figures/create_account/account_creation_finished.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_account/account_creation_finished.png -------------------------------------------------------------------------------- /site_figures/create_account/account_creation_select_my_studies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_account/account_creation_select_my_studies.png -------------------------------------------------------------------------------- /site_figures/create_account/account_creation_select_sign_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_account/account_creation_select_sign_up.png -------------------------------------------------------------------------------- /site_figures/create_account/old/00_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_account/old/00_home.png -------------------------------------------------------------------------------- /site_figures/create_account/old/01_google_login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_account/old/01_google_login.png -------------------------------------------------------------------------------- /site_figures/create_account/old/02_profile_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_account/old/02_profile_menu.png -------------------------------------------------------------------------------- /site_figures/create_study/00_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_study/00_home.png -------------------------------------------------------------------------------- /site_figures/create_study/01_google_login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_study/01_google_login.png -------------------------------------------------------------------------------- /site_figures/create_study/01_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_study/01_home.png -------------------------------------------------------------------------------- /site_figures/create_study/02_accept_terms_of_service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_study/02_accept_terms_of_service.png -------------------------------------------------------------------------------- /site_figures/create_study/03_add_study_name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_study/03_add_study_name.png -------------------------------------------------------------------------------- /site_figures/create_study/04_add_study_embargo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_study/04_add_study_embargo.png -------------------------------------------------------------------------------- /site_figures/create_study/05_add_study_embargo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_study/05_add_study_embargo.png -------------------------------------------------------------------------------- /site_figures/create_study/06_add_study_public.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_study/06_add_study_public.png -------------------------------------------------------------------------------- /site_figures/create_study/06_add_study_workspace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_study/06_add_study_workspace.png -------------------------------------------------------------------------------- /site_figures/create_study/07_add_study_description.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_study/07_add_study_description.png -------------------------------------------------------------------------------- /site_figures/create_study/08_add_study_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/create_study/08_add_study_save.png -------------------------------------------------------------------------------- /site_figures/download_download_files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/download_download_files.png -------------------------------------------------------------------------------- /site_figures/download_select_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/download_select_download.png -------------------------------------------------------------------------------- /site_figures/download_select_study.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/download_select_study.png -------------------------------------------------------------------------------- /site_figures/downloading_data/00_select_study.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/downloading_data/00_select_study.png -------------------------------------------------------------------------------- /site_figures/downloading_data/01_select_download_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/downloading_data/01_select_download_tab.png -------------------------------------------------------------------------------- /site_figures/downloading_data/03_download_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/downloading_data/03_download_data.png -------------------------------------------------------------------------------- /site_figures/downloading_data/04_click_for_download_command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/downloading_data/04_click_for_download_command.png -------------------------------------------------------------------------------- /site_figures/downloading_data/05_copy_download_command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/downloading_data/05_copy_download_command.png -------------------------------------------------------------------------------- /site_figures/downloading_data/download_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/downloading_data/download_download.png -------------------------------------------------------------------------------- /site_figures/downloading_data/download_scroll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/downloading_data/download_scroll.png -------------------------------------------------------------------------------- /site_figures/downloading_data/download_select_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/downloading_data/download_select_data.png -------------------------------------------------------------------------------- /site_figures/downloading_data/download_select_study.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/downloading_data/download_select_study.png -------------------------------------------------------------------------------- /site_figures/gsutil/02_study_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/gsutil/02_study_details.png -------------------------------------------------------------------------------- /site_figures/infercnv/infercnv_image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/infercnv/infercnv_image1.png -------------------------------------------------------------------------------- /site_figures/infercnv/infercnv_image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/infercnv/infercnv_image2.png -------------------------------------------------------------------------------- /site_figures/infercnv/infercnv_image3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/infercnv/infercnv_image3.png -------------------------------------------------------------------------------- /site_figures/infercnv/infercnv_image4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/infercnv/infercnv_image4.png -------------------------------------------------------------------------------- /site_figures/infercnv/infercnv_image5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/infercnv/infercnv_image5.png -------------------------------------------------------------------------------- /site_figures/infercnv/infercnv_image6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/infercnv/infercnv_image6.png -------------------------------------------------------------------------------- /site_figures/infercnv/infercnv_image7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/infercnv/infercnv_image7.png -------------------------------------------------------------------------------- /site_figures/infercnv/infercnv_image8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/infercnv/infercnv_image8.png -------------------------------------------------------------------------------- /site_figures/managing_notifications/firecloud_notifications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/managing_notifications/firecloud_notifications.png -------------------------------------------------------------------------------- /site_figures/managing_notifications/notification_choices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/managing_notifications/notification_choices.png -------------------------------------------------------------------------------- /site_figures/managing_notifications/portal_notifications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/managing_notifications/portal_notifications.png -------------------------------------------------------------------------------- /site_figures/managing_notifications/portal_profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/managing_notifications/portal_profile.png -------------------------------------------------------------------------------- /site_figures/metadata_convention/upload_with_metadata_convention.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/metadata_convention/upload_with_metadata_convention.png -------------------------------------------------------------------------------- /site_figures/metadata_file/mc_compliant_metadata_image_crop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/metadata_file/mc_compliant_metadata_image_crop.jpg -------------------------------------------------------------------------------- /site_figures/metadata_file/mc_compliant_metadata_image_full.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/metadata_file/mc_compliant_metadata_image_full.jpg -------------------------------------------------------------------------------- /site_figures/metadata_file/mc_compliant_metadata_image_full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/metadata_file/mc_compliant_metadata_image_full.png -------------------------------------------------------------------------------- /site_figures/metadata_file/mc_compliant_metadata_image_full.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/metadata_file/mc_compliant_metadata_image_full.psd -------------------------------------------------------------------------------- /site_figures/metadata_file/mc_compliant_metadata_image_full.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/metadata_file/mc_compliant_metadata_image_full.sketch -------------------------------------------------------------------------------- /site_figures/publication_best_practices/create_publication_link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/publication_best_practices/create_publication_link.png -------------------------------------------------------------------------------- /site_figures/publication_best_practices/publication_link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/publication_best_practices/publication_link.png -------------------------------------------------------------------------------- /site_figures/running_workflows/monitor_runs_v1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/running_workflows/monitor_runs_v1.png -------------------------------------------------------------------------------- /site_figures/running_workflows/select_samples_v1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/running_workflows/select_samples_v1.png -------------------------------------------------------------------------------- /site_figures/running_workflows/select_workflows_v1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/running_workflows/select_workflows_v1.png -------------------------------------------------------------------------------- /site_figures/running_workflows/select_workflows_v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/running_workflows/select_workflows_v2.png -------------------------------------------------------------------------------- /site_figures/running_workflows/submit_workflow_v1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/running_workflows/submit_workflow_v1.png -------------------------------------------------------------------------------- /site_figures/running_workflows/submit_workflow_v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/running_workflows/submit_workflow_v2.png -------------------------------------------------------------------------------- /site_figures/running_workflows/workflows_tab_v1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/running_workflows/workflows_tab_v1.png -------------------------------------------------------------------------------- /site_figures/search_studies/faceted-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/search_studies/faceted-search.png -------------------------------------------------------------------------------- /site_figures/search_studies/inferred-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/search_studies/inferred-search.png -------------------------------------------------------------------------------- /site_figures/search_studies/keyword-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/search_studies/keyword-search.png -------------------------------------------------------------------------------- /site_figures/search_studies/search-logic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/search_studies/search-logic.png -------------------------------------------------------------------------------- /site_figures/sharing_private_studies/00_my_studies_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sharing_private_studies/00_my_studies_btn.png -------------------------------------------------------------------------------- /site_figures/sharing_private_studies/01_edit_study_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sharing_private_studies/01_edit_study_btn.png -------------------------------------------------------------------------------- /site_figures/sharing_private_studies/02_share_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sharing_private_studies/02_share_btn.png -------------------------------------------------------------------------------- /site_figures/sharing_private_studies/03_share_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sharing_private_studies/03_share_details.png -------------------------------------------------------------------------------- /site_figures/sharing_private_studies/04_show_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sharing_private_studies/04_show_details.png -------------------------------------------------------------------------------- /site_figures/sharing_private_studies/05_study_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sharing_private_studies/05_study_details.png -------------------------------------------------------------------------------- /site_figures/sync_data/00_add_study_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/00_add_study_btn.png -------------------------------------------------------------------------------- /site_figures/sync_data/01_sync_from_workspace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/01_sync_from_workspace.png -------------------------------------------------------------------------------- /site_figures/sync_data/01_synch_from_workspace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/01_synch_from_workspace.png -------------------------------------------------------------------------------- /site_figures/sync_data/02_add_study_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/02_add_study_save.png -------------------------------------------------------------------------------- /site_figures/sync_data/02_add_study_save_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/02_add_study_save_btn.png -------------------------------------------------------------------------------- /site_figures/sync_data/03_sync_study_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/03_sync_study_btn.png -------------------------------------------------------------------------------- /site_figures/sync_data/03a_sync_modal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/03a_sync_modal.png -------------------------------------------------------------------------------- /site_figures/sync_data/04_sync_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/04_sync_overview.png -------------------------------------------------------------------------------- /site_figures/sync_data/05_sync_cluster_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/05_sync_cluster_info.png -------------------------------------------------------------------------------- /site_figures/sync_data/06_sync_cluster_completed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/06_sync_cluster_completed.png -------------------------------------------------------------------------------- /site_figures/sync_data/07_sync_expression_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/07_sync_expression_info.png -------------------------------------------------------------------------------- /site_figures/sync_data/08_sync_gene_list_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/08_sync_gene_list_info.png -------------------------------------------------------------------------------- /site_figures/sync_data/09_sync_metadata_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/09_sync_metadata_info.png -------------------------------------------------------------------------------- /site_figures/sync_data/10_sync_misc_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/10_sync_misc_info.png -------------------------------------------------------------------------------- /site_figures/sync_data/11_sync_data_directory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/11_sync_data_directory.png -------------------------------------------------------------------------------- /site_figures/sync_data/12_sync_completed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/12_sync_completed.png -------------------------------------------------------------------------------- /site_figures/sync_data/13_orphaned_file_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/13_orphaned_file_info.png -------------------------------------------------------------------------------- /site_figures/sync_data/14_orphaned_file_update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/14_orphaned_file_update.png -------------------------------------------------------------------------------- /site_figures/sync_data/15_orphaned_file_compelted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/sync_data/15_orphaned_file_compelted.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/00_exp_matrix_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/00_exp_matrix_info.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/01_exp_matrix_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/01_exp_matrix_file.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/02_exp_matrix_completed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/02_exp_matrix_completed.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/03_metadata_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/03_metadata_info.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/04_metadata_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/04_metadata_file.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/05_metadata_completed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/05_metadata_completed.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/06_cluster_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/06_cluster_info.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/07_cluster_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/07_cluster_file.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/08_cluster_completed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/08_cluster_completed.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/09_fastq_nonh_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/09_fastq_nonh_info.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/10_fastq_nonh_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/10_fastq_nonh_file.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/11_fastq_nonh_completed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/11_fastq_nonh_completed.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/12_fastq_human_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/12_fastq_human_info.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/13_gene_list_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/13_gene_list_info.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/14_gene_list_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/14_gene_list_file.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/15_gene_list_completed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/15_gene_list_completed.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/16_misc_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/16_misc_info.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/17_misc_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/17_misc_file.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/18_misc_completed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/18_misc_completed.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/19_study_finish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/19_study_finish.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/20_study_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/20_study_details.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/21_upload_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/21_upload_data.png -------------------------------------------------------------------------------- /site_figures/uploading_after_created/22_exp_matrix_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/uploading_after_created/22_exp_matrix_info.png -------------------------------------------------------------------------------- /site_figures/viewing_dotplots/collapse_tool_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/viewing_dotplots/collapse_tool_options.png -------------------------------------------------------------------------------- /site_figures/viewing_dotplots/dot_plot_shape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/viewing_dotplots/dot_plot_shape.png -------------------------------------------------------------------------------- /site_figures/viewing_dotplots/dot_plot_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/viewing_dotplots/dot_plot_view.png -------------------------------------------------------------------------------- /site_figures/viewing_dotplots/dotplot_annotations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/viewing_dotplots/dotplot_annotations.png -------------------------------------------------------------------------------- /site_figures/viewing_dotplots/dotplot_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/viewing_dotplots/dotplot_options.png -------------------------------------------------------------------------------- /site_figures/viewing_dotplots/dotplot_show_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/viewing_dotplots/dotplot_show_text.png -------------------------------------------------------------------------------- /site_figures/viewing_dotplots/search_for_multiple_genes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/viewing_dotplots/search_for_multiple_genes.png -------------------------------------------------------------------------------- /site_figures/viewing_dotplots/select_collapse_tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/viewing_dotplots/select_collapse_tool.png -------------------------------------------------------------------------------- /site_figures/visualization/2-d-scatter-plot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/visualization/2-d-scatter-plot.png -------------------------------------------------------------------------------- /site_figures/visualization/3-d-scatter-plot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/visualization/3-d-scatter-plot.png -------------------------------------------------------------------------------- /site_figures/visualization/dot-plot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/visualization/dot-plot.png -------------------------------------------------------------------------------- /site_figures/visualization/genome-browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/visualization/genome-browser.png -------------------------------------------------------------------------------- /site_figures/visualization/heat-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/visualization/heat-map.png -------------------------------------------------------------------------------- /site_figures/visualization/ideogram-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/visualization/ideogram-example.png -------------------------------------------------------------------------------- /site_figures/visualization/violin-plot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/visualization/violin-plot.png -------------------------------------------------------------------------------- /site_figures/wizard_overview/wizard_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broadinstitute/single_cell_portal/eea1917586f0598eb81c24b8318383a3521fae2b/site_figures/wizard_overview/wizard_overview.png --------------------------------------------------------------------------------