From 9a85ad752194846f26f2555d1f059f76ed31c43d Mon Sep 17 00:00:00 2001 From: Lan Hui Date: Wed, 29 Oct 2025 18:00:27 +0800 Subject: Also look for a run's library strategy/source in EXPERIMENT_LIBRARY_INFO_FILE --- Code/download_and_map.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'Code/download_and_map.py') diff --git a/Code/download_and_map.py b/Code/download_and_map.py index e60b150..e9fb14b 100644 --- a/Code/download_and_map.py +++ b/Code/download_and_map.py @@ -23,7 +23,7 @@ import json from datetime import datetime ########################################################################################## -from configure import DAILY_MAP_NUMBER, MIN_FASTQ_FILE_SIZE, RNA_SEQ_INFO_FILE, DOWNLOADED_SRA_ID_LOG_FILE, IGNORED_SRA_ID_LOG_FILE, UPDATE_NETWORK_LOG_FILE, MAPPED_RDATA_DIR, RAW_RDATA_DIR, SALMON_MAP_RESULT_DIR +from configure import DAILY_MAP_NUMBER, MIN_FASTQ_FILE_SIZE, RNA_SEQ_INFO_FILE, EXPERIMENT_LIBRARY_INFO_FILE, DOWNLOADED_SRA_ID_LOG_FILE, IGNORED_SRA_ID_LOG_FILE, UPDATE_NETWORK_LOG_FILE, MAPPED_RDATA_DIR, RAW_RDATA_DIR, SALMON_MAP_RESULT_DIR ########################################################################################## def glob_files(directory, pattern): @@ -74,7 +74,7 @@ def get_list(fname): return result # only return unique elements -def make_download_list(mapped_dir, rna_data_info_dict): +def make_download_list(mapped_dir, rna_data_info_dict, experiment_library_info_dict={}): ''' Make next n sample IDs. These samples must have not been downloaded yet. @@ -89,6 +89,10 @@ def make_download_list(mapped_dir, rna_data_info_dict): small_ids = get_list(IGNORED_SRA_ID_LOG_FILE) # these data files are too small for run_id in sorted(rna_data_info_dict.keys(), reverse=True): # SRR first, then ERR, then DRR include_me_because_i_am_rnaseq = True if rna_data_info_dict[run_id]['library_strategy'].lower() == 'rna-seq' and rna_data_info_dict[run_id]['library_source'].lower() == 'transcriptomic' else False + associated_experiment_id = rna_data_info_dict[run_id]['experiment_id'] + if associated_experiment_id in experiment_library_info_dict: + is_rnaseq = 'rna-seq' in experiment_library_info_dict[associated_experiment_id]['library_strategy'].lower() and 'transcriptomic' in experiment_library_info_dict[associated_experiment_id]['library_source'] + include_me_because_i_am_rnaseq = include_me_because_i_am_rnaseq or is_rnaseq if not (run_id + '_quant.txt') in mapped_files and (not run_id in result) and (not run_id in small_ids) and (not run_id in mapped_run_ids) and include_me_because_i_am_rnaseq: # not mapped yet and is RNA-seq result.append(run_id) return result @@ -352,6 +356,17 @@ def read_ena_data_info_json(fname): return json_dict +def read_experiment_library_information(fname): + result = {} + with open(fname) as f: + for line in f: + line = line.strip() + lst = line.split('\t') + k = lst[0] + result[k] = {'library_strategy':lst[1], 'library_source':lst[2]} + return result + + def read_run_ids_from_file(fname): f = open(fname) lst = [] @@ -411,6 +426,7 @@ if not last_session_finished(DOWNLOADED_SRA_ID_LOG_FILE): # last session not fin sys.exit() rna_data_info_dict = read_ena_data_info_json(RNA_SEQ_INFO_FILE) # rna_data_info_dict contains only RNA-seq IDs. +experiment_library_info_dict = read_experiment_library_information(EXPERIMENT_LIBRARY_INFO_FILE) # Generate DRR/ERR/SRR ids to download if len(sys.argv) > 1: # user has provided a list of IDs in a file @@ -418,7 +434,7 @@ if len(sys.argv) > 1: # user has provided a list of IDs in a file DAILY_MAP_NUMBER = len(download_list) else: print('[download_and_map.py] Prepare download list ...') - download_list = make_download_list(MAPPED_RDATA_DIR, rna_data_info_dict) + download_list = make_download_list(MAPPED_RDATA_DIR, rna_data_info_dict, experiment_library_info_dict) print('[download_and_map.py] There are %d run IDs from which you could select %d of them.' % (len(download_list), DAILY_MAP_NUMBER)) # Make a record in log.txt -- cgit v1.2.1