From 04475045842bdb113452772277ae2434d671d4ac Mon Sep 17 00:00:00 2001 From: kathryn1995 Date: Fri, 24 Oct 2025 09:33:50 -0700 Subject: [PATCH 01/31] Add functionality to build reads by stage table --- .../read_count_by_stage_table_to_pmo.py | 337 ++++++++++ .../test_read_count_by_stage_table_to_pmo.py | 625 ++++++++++++++++++ 2 files changed, 962 insertions(+) create mode 100644 src/pmotools/pmo_builder/read_count_by_stage_table_to_pmo.py create mode 100644 tests/test_pmo_builder/test_read_count_by_stage_table_to_pmo.py diff --git a/src/pmotools/pmo_builder/read_count_by_stage_table_to_pmo.py b/src/pmotools/pmo_builder/read_count_by_stage_table_to_pmo.py new file mode 100644 index 0000000..38e3709 --- /dev/null +++ b/src/pmotools/pmo_builder/read_count_by_stage_table_to_pmo.py @@ -0,0 +1,337 @@ +#!/usr/bin/env python3 +import pandas as pd + +from ..pmo_builder.json_convert_utils import check_additional_columns_exist + + +def read_count_by_stage_table_to_pmo( + bioinformatics_run_name: str, + total_raw_count_table: pd.DataFrame, + reads_by_stage_table: pd.DataFrame | None = None, + library_sample_name_col: str = "library_sample_name", + target_name_col: str = "target_name", + total_raw_count_col: str = "total_raw_count", + stage_col: str | list = "stage", + read_count_col: str = "read_count", + additional_library_sample_cols: list | None = None, + additional_target_cols: list | None = None, +) -> list[dict]: + """ + Convert tables of read counts by stage into PMO read_counts_by_stage format. + + :param bioinformatics_run_name (str): Name for the bioinformatics run (column name or individual run name) + :param total_raw_count_table (pd.DataFrame): Table with total raw counts per sample + :param reads_by_stage_table (Optional[pd.DataFrame]): Table of reads per sample, per locus, per stage. Can be long format (single stage column) or wide format (multiple stage columns) + :param library_sample_name_col (str): Column name for library sample names. Default: library_sample_name + :param target_name_col (str): Column name for target names. Default: target_name + :param total_raw_count_col (str): Column name for total raw counts. Default: total_raw_count + :param stage_col (str or list): Column name for pipeline stages (long format), or list of stage column names for wide format. Default: stage + :param read_count_col (str): Column name for read counts. Default: read_count + :param additional_library_sample_cols (Optional[List[str]]): Additional columns to include for library samples + :param additional_target_cols (Optional[List[str]]): Additional columns to include for targets + + :return: list of dicts formatted for PMO read_counts_by_stage section. Always returns a list, with one + entry for single runs or multiple entries when bioinformatics_run_name is a column in total_raw_count_table. + + Note: For wide format data, provide stage_col as a list of column names. The function will use pd.melt() + to convert wide format to long format before processing. + """ + + # Validate input + if not isinstance(total_raw_count_table, pd.DataFrame): + raise ValueError("total_raw_count_table must be a pandas DataFrame.") + + if reads_by_stage_table is not None and not isinstance( + reads_by_stage_table, pd.DataFrame + ): + raise ValueError("reads_by_stage_table must be a pandas DataFrame or None.") + + # Check additional columns if provided + if additional_library_sample_cols: + check_additional_columns_exist( + total_raw_count_table, additional_library_sample_cols + ) + + if reads_by_stage_table is not None and additional_target_cols: + check_additional_columns_exist(reads_by_stage_table, additional_target_cols) + + # Check if bioinformatics_run_name is a column in total_raw_count_table + if bioinformatics_run_name in total_raw_count_table.columns: + # Create separate entries for each unique run + output_data_list = [] + unique_runs = total_raw_count_table[bioinformatics_run_name].unique() + + for run_name in unique_runs: + # Filter data for this specific run + run_total_table = total_raw_count_table[ + total_raw_count_table[bioinformatics_run_name] == run_name + ].drop(columns=[bioinformatics_run_name]) + + run_reads_table = None + if reads_by_stage_table is not None: + if bioinformatics_run_name in reads_by_stage_table.columns: + run_reads_table = reads_by_stage_table[ + reads_by_stage_table[bioinformatics_run_name] == run_name + ].drop(columns=[bioinformatics_run_name]) + else: + # If reads_by_stage_table doesn't have bioinformatics_run_name column, + # use all data for all runs + run_reads_table = reads_by_stage_table + + # Process data for this run + library_sample_data = _process_total_raw_count_table( + run_total_table, + library_sample_name_col, + total_raw_count_col, + additional_library_sample_cols, + ) + + reads_by_stage_data = None + if run_reads_table is not None: + reads_by_stage_data = _process_reads_by_stage_table( + run_reads_table, + library_sample_name_col, + target_name_col, + stage_col, + read_count_col, + additional_target_cols, + ) + + # Build output for this run + run_output = _build_read_counts_by_stage_output( + library_sample_data, + reads_by_stage_data, + run_name, + ) + output_data_list.append(run_output) + + return output_data_list + else: + # Single run - still return as list for consistency + library_sample_data = _process_total_raw_count_table( + total_raw_count_table, + library_sample_name_col, + total_raw_count_col, + additional_library_sample_cols, + ) + + reads_by_stage_data = None + if reads_by_stage_table is not None: + reads_by_stage_data = _process_reads_by_stage_table( + reads_by_stage_table, + library_sample_name_col, + target_name_col, + stage_col, + read_count_col, + additional_target_cols, + ) + + output_data = _build_read_counts_by_stage_output( + library_sample_data, + reads_by_stage_data, + bioinformatics_run_name, + ) + + return [output_data] # Return as list for consistency + + +def _process_total_raw_count_table( + total_raw_count_table: pd.DataFrame, + library_sample_name_col: str, + total_raw_count_col: str, + additional_cols: list | None = None, +) -> dict: + """ + Process the total raw count table into a dictionary mapping library samples to their data. + + :param total_raw_count_table: DataFrame with total raw counts + :param library_sample_name_col: Column name for library sample names + :param total_raw_count_col: Column name for total raw counts + :param additional_cols: Additional columns to include + + :return: Dictionary mapping library_sample_name to sample data + """ + # Validate required columns exist + required_cols = [library_sample_name_col, total_raw_count_col] + missing_cols = [ + col for col in required_cols if col not in total_raw_count_table.columns + ] + if missing_cols: + raise ValueError( + f"Missing required columns in total_raw_count_table: {missing_cols}" + ) + + # Check for duplicates in library_sample_name_col + if total_raw_count_table[library_sample_name_col].duplicated().any(): + duplicates = total_raw_count_table[ + total_raw_count_table[library_sample_name_col].duplicated(keep=False) + ] + raise ValueError( + f"Duplicate library sample names found in total_raw_count_table:\n{duplicates}" + ) + + # Build the output dictionary + sample_data = {} + for _, row in total_raw_count_table.iterrows(): + sample_name = row[library_sample_name_col] + total_raw_count = int(row[total_raw_count_col]) + + sample_info = { + "total_raw_count": total_raw_count, + } + + # Add additional columns if specified + if additional_cols: + for col in additional_cols: + if col in row and pd.notna(row[col]): + sample_info[col] = row[col] + + sample_data[sample_name] = sample_info + + return sample_data + + +def _process_reads_by_stage_table( + reads_by_stage_table: pd.DataFrame, + library_sample_name_col: str, + target_name_col: str, + stage_col: str | list, + read_count_col: str, + additional_cols: list | None = None, +) -> dict: + """ + Process the reads by stage table into a nested dictionary structure. + + :param reads_by_stage_table: DataFrame with reads by stage information + :param library_sample_name_col: Column name for library sample names + :param target_name_col: Column name for target names + :param stage_col: Column name for pipeline stages, or list of stage column names for wide format + :param read_count_col: Column name for read counts + :param additional_cols: Additional columns to include + + :return: Nested dictionary: {library_sample_name: {target_name: {stage: read_count}}} + """ + # Handle wide format conversion if stage_col is a list + if isinstance(stage_col, list): + # Include additional columns in id_vars for wide format conversion + id_vars = [library_sample_name_col, target_name_col] + if additional_cols: + id_vars.extend(additional_cols) + + # Convert wide format to long format using pd.melt + processed_table = pd.melt( + reads_by_stage_table, + id_vars=id_vars, + value_vars=stage_col, + var_name="stage", + value_name=read_count_col, + ) + # Update stage_col to the new column name after melt + stage_col = "stage" + else: + # Use the table as-is for long format + processed_table = reads_by_stage_table.copy() + + # Validate required columns exist + required_cols = [ + library_sample_name_col, + target_name_col, + stage_col, + read_count_col, + ] + missing_cols = [col for col in required_cols if col not in processed_table.columns] + if missing_cols: + raise ValueError( + f"Missing required columns in reads_by_stage_table: {missing_cols}" + ) + + # Build the nested dictionary structure + reads_data = {} + + for _, row in processed_table.iterrows(): + sample_name = row[library_sample_name_col] + target_name = row[target_name_col] + stage = row[stage_col] + read_count = int(row[read_count_col]) + + # Initialize nested structure if needed + if sample_name not in reads_data: + reads_data[sample_name] = {} + if target_name not in reads_data[sample_name]: + reads_data[sample_name][target_name] = {} + + # Create stage data with read count and additional columns + stage_data = {"stage": stage, "read_count": read_count} + + # Add additional columns if present and not null + if additional_cols: + for col in additional_cols: + if col in row and pd.notna(row[col]): + stage_data[col] = row[col] + + # Store the stage data + reads_data[sample_name][target_name][stage] = stage_data + + return reads_data + + +def _build_read_counts_by_stage_output( + library_sample_data: dict, + reads_by_stage_data: dict | None, + bioinformatics_run_name: str, +) -> dict: + """ + Build the final output structure for read_counts_by_stage. + + :param library_sample_data: Dictionary with library sample data + :param reads_by_stage_data: Optional dictionary with reads by stage data + :param bioinformatics_run_name: Name for the bioinformatics run + + :return: Dictionary formatted for PMO read_counts_by_stage section + """ + read_counts_by_library_sample_by_stage = [] + + for sample_name, sample_info in library_sample_data.items(): + # Start building the library sample entry + library_sample_entry = { + "library_sample_name": sample_name, + "total_raw_count": sample_info["total_raw_count"], + } + + # Add additional fields from sample_info + for key, value in sample_info.items(): + if key != "total_raw_count": + library_sample_entry[key] = value + + # Process reads by stage data if available + read_counts_for_targets = [] + if reads_by_stage_data and sample_name in reads_by_stage_data: + target_data = reads_by_stage_data[sample_name] + + for target_name, stages_data in target_data.items(): + # Build stages list + stages = [] + for stage_name, stage_info in stages_data.items(): + # stage_info is now a dictionary with stage, read_count, and additional columns + stages.append(stage_info) + + # Create target entry + target_entry = { + "target_name": target_name, + "stages": stages, + } + read_counts_for_targets.append(target_entry) + + # Add read_counts_for_targets if we have data + if read_counts_for_targets: + library_sample_entry["read_counts_for_targets"] = read_counts_for_targets + + read_counts_by_library_sample_by_stage.append(library_sample_entry) + + # Build the final output structure + output_data = { + "bioinformatics_run_name": bioinformatics_run_name, + "read_counts_by_library_sample_by_stage": read_counts_by_library_sample_by_stage, + } + + return output_data diff --git a/tests/test_pmo_builder/test_read_count_by_stage_table_to_pmo.py b/tests/test_pmo_builder/test_read_count_by_stage_table_to_pmo.py new file mode 100644 index 0000000..92abf33 --- /dev/null +++ b/tests/test_pmo_builder/test_read_count_by_stage_table_to_pmo.py @@ -0,0 +1,625 @@ +import unittest +import pandas as pd +import numpy as np + +from pmotools.pmo_builder.read_count_by_stage_table_to_pmo import ( + read_count_by_stage_table_to_pmo, + _process_total_raw_count_table, + _process_reads_by_stage_table, + _build_read_counts_by_stage_output, +) + + +class TestReadCountByStageTableToPMO(unittest.TestCase): + def setUp(self): + self.maxDiff = None + + # Sample total raw count table + self.total_raw_count_table = pd.DataFrame( + { + "library_sample_name": ["sample1", "sample2", "sample3"], + "total_raw_count": [1000, 2000, 1500], + "additional_info": ["info1", "info2", "info3"], + } + ) + + # Sample reads by stage table (long format) + self.reads_by_stage_table_long = pd.DataFrame( + { + "library_sample_name": [ + "sample1", + "sample1", + "sample1", + "sample2", + "sample2", + "sample2", + ], + "target_name": [ + "target1", + "target1", + "target2", + "target1", + "target1", + "target2", + ], + "stage": [ + "demultiplexed", + "denoised", + "demultiplexed", + "demultiplexed", + "denoised", + "demultiplexed", + ], + "read_count": [100, 80, 50, 200, 150, 75], + } + ) + + # Sample reads by stage table (wide format) + self.reads_by_stage_table_wide = pd.DataFrame( + { + "library_sample_name": ["sample1", "sample2"], + "target_name": ["target1", "target1"], + "demultiplexed": [100, 200], + "denoised": [80, 150], + "filtered": [60, 120], + } + ) + + # Expected output structure + self.expected_output_structure = { + "bioinformatics_run_name": "test_run", + "read_counts_by_library_sample_by_stage": [ + { + "library_sample_name": "sample1", + "total_raw_count": 1000, + "read_counts_for_targets": [ + { + "target_name": "target1", + "stages": [ + {"stage": "demultiplexed", "read_count": 100}, + {"stage": "denoised", "read_count": 80}, + ], + } + ], + } + ], + } + + def test_basic_functionality_long_format(self): + """Test basic functionality with long format reads by stage table.""" + result = read_count_by_stage_table_to_pmo( + total_raw_count_table=self.total_raw_count_table, + bioinformatics_run_name="test_run", + reads_by_stage_table=self.reads_by_stage_table_long, + ) + + # Should return a list with one entry + self.assertIsInstance(result, list) + self.assertEqual(len(result), 1) + + run_data = result[0] + self.assertIn("bioinformatics_run_name", run_data) + self.assertIn("read_counts_by_library_sample_by_stage", run_data) + self.assertEqual(run_data["bioinformatics_run_name"], "test_run") + self.assertEqual(len(run_data["read_counts_by_library_sample_by_stage"]), 3) + + def test_basic_functionality_wide_format(self): + """Test basic functionality with wide format reads by stage table.""" + result = read_count_by_stage_table_to_pmo( + total_raw_count_table=self.total_raw_count_table, + bioinformatics_run_name="test_run", + reads_by_stage_table=self.reads_by_stage_table_wide, + stage_col=["demultiplexed", "denoised", "filtered"], + ) + + # Should return a list with one entry + self.assertIsInstance(result, list) + self.assertEqual(len(result), 1) + + run_data = result[0] + self.assertIn("bioinformatics_run_name", run_data) + self.assertIn("read_counts_by_library_sample_by_stage", run_data) + self.assertEqual(run_data["bioinformatics_run_name"], "test_run") + + def test_only_total_raw_count_table(self): + """Test functionality with only total raw count table (no reads by stage).""" + result = read_count_by_stage_table_to_pmo( + total_raw_count_table=self.total_raw_count_table, + bioinformatics_run_name="test_run", + ) + + # Should return a list with one entry + self.assertIsInstance(result, list) + self.assertEqual(len(result), 1) + + run_data = result[0] + self.assertEqual(run_data["bioinformatics_run_name"], "test_run") + self.assertEqual(len(run_data["read_counts_by_library_sample_by_stage"]), 3) + + # Check that each sample has total_raw_count but no read_counts_for_targets + for sample in run_data["read_counts_by_library_sample_by_stage"]: + self.assertIn("total_raw_count", sample) + self.assertNotIn("read_counts_for_targets", sample) + + def test_custom_column_names(self): + """Test with custom column names.""" + custom_total_table = pd.DataFrame( + {"sample_id": ["sample1", "sample2"], "raw_count": [1000, 2000]} + ) + + custom_reads_table = pd.DataFrame( + { + "sample_id": ["sample1", "sample1"], + "locus": ["target1", "target1"], + "pipeline_stage": ["demultiplexed", "denoised"], + "counts": [100, 80], + } + ) + + result = read_count_by_stage_table_to_pmo( + total_raw_count_table=custom_total_table, + bioinformatics_run_name="test_run", + reads_by_stage_table=custom_reads_table, + library_sample_name_col="sample_id", + target_name_col="locus", + total_raw_count_col="raw_count", + stage_col="pipeline_stage", + read_count_col="counts", + ) + + # Should return a list with one entry + self.assertIsInstance(result, list) + self.assertEqual(len(result), 1) + self.assertEqual(result[0]["bioinformatics_run_name"], "test_run") + + def test_additional_columns(self): + """Test with additional columns.""" + result = read_count_by_stage_table_to_pmo( + total_raw_count_table=self.total_raw_count_table, + bioinformatics_run_name="test_run", + additional_library_sample_cols=["additional_info"], + ) + + # Should return a list with one entry + self.assertIsInstance(result, list) + self.assertEqual(len(result), 1) + + run_data = result[0] + # Check that additional columns are included + for sample in run_data["read_counts_by_library_sample_by_stage"]: + if sample["library_sample_name"] == "sample1": + self.assertIn("additional_info", sample) + self.assertEqual(sample["additional_info"], "info1") + + def test_additional_target_columns(self): + """Test with additional target columns in reads by stage table.""" + # Create reads table with additional columns + reads_table_with_additional = pd.DataFrame( + { + "library_sample_name": ["sample1", "sample1", "sample2"], + "target_name": ["target1", "target1", "target1"], + "stage": ["demultiplexed", "denoised", "demultiplexed"], + "read_count": [100, 80, 200], + "quality_score": [0.95, 0.98, 0.92], + "coverage_depth": [50, 40, 100], + } + ) + + result = read_count_by_stage_table_to_pmo( + total_raw_count_table=self.total_raw_count_table, + bioinformatics_run_name="test_run", + reads_by_stage_table=reads_table_with_additional, + additional_target_cols=["quality_score", "coverage_depth"], + ) + + # Should return a list with one entry + self.assertIsInstance(result, list) + self.assertEqual(len(result), 1) + + run_data = result[0] + + # Check that additional columns are included in stages + sample1_data = next( + s + for s in run_data["read_counts_by_library_sample_by_stage"] + if s["library_sample_name"] == "sample1" + ) + + self.assertIn("read_counts_for_targets", sample1_data) + target1_data = sample1_data["read_counts_for_targets"][0] + self.assertEqual(target1_data["target_name"], "target1") + + # Check that stages contain additional columns + stages = target1_data["stages"] + demultiplexed_stage = next(s for s in stages if s["stage"] == "demultiplexed") + denoised_stage = next(s for s in stages if s["stage"] == "denoised") + + # Check demultiplexed stage has additional columns + self.assertIn("quality_score", demultiplexed_stage) + self.assertIn("coverage_depth", demultiplexed_stage) + self.assertEqual(demultiplexed_stage["quality_score"], 0.95) + self.assertEqual(demultiplexed_stage["coverage_depth"], 50) + + # Check denoised stage has additional columns + self.assertIn("quality_score", denoised_stage) + self.assertIn("coverage_depth", denoised_stage) + self.assertEqual(denoised_stage["quality_score"], 0.98) + self.assertEqual(denoised_stage["coverage_depth"], 40) + + def test_wide_format_melt_conversion(self): + """Test that wide format is properly converted using pd.melt.""" + result = read_count_by_stage_table_to_pmo( + total_raw_count_table=self.total_raw_count_table, + bioinformatics_run_name="test_run", + reads_by_stage_table=self.reads_by_stage_table_wide, + stage_col=["demultiplexed", "denoised", "filtered"], + ) + + # Should return a list with one entry + self.assertIsInstance(result, list) + self.assertEqual(len(result), 1) + + run_data = result[0] + # Check that the wide format was converted properly + sample1_data = next( + s + for s in run_data["read_counts_by_library_sample_by_stage"] + if s["library_sample_name"] == "sample1" + ) + + self.assertIn("read_counts_for_targets", sample1_data) + target1_data = sample1_data["read_counts_for_targets"][0] + self.assertEqual(target1_data["target_name"], "target1") + + # Check that all stages are present + stage_names = [stage["stage"] for stage in target1_data["stages"]] + self.assertIn("demultiplexed", stage_names) + self.assertIn("denoised", stage_names) + self.assertIn("filtered", stage_names) + + def test_input_validation(self): + """Test input validation.""" + # Test non-DataFrame input for total_raw_count_table + with self.assertRaises(ValueError): + read_count_by_stage_table_to_pmo( + total_raw_count_table="not_a_dataframe", + bioinformatics_run_name="test_run", + ) + + # Test non-DataFrame input for reads_by_stage_table + with self.assertRaises(ValueError): + read_count_by_stage_table_to_pmo( + total_raw_count_table=self.total_raw_count_table, + bioinformatics_run_name="test_run", + reads_by_stage_table="not_a_dataframe", + ) + + def test_missing_columns(self): + """Test error handling for missing columns.""" + # Test missing required columns in total_raw_count_table + bad_table = pd.DataFrame( + {"wrong_col": ["sample1", "sample2"], "total_raw_count": [1000, 2000]} + ) + + with self.assertRaises(ValueError): + read_count_by_stage_table_to_pmo( + total_raw_count_table=bad_table, bioinformatics_run_name="test_run" + ) + + # Test missing required columns in reads_by_stage_table + bad_reads_table = pd.DataFrame( + { + "library_sample_name": ["sample1"], + "wrong_col": ["target1"], + "stage": ["demultiplexed"], + "read_count": [100], + } + ) + + with self.assertRaises(ValueError): + read_count_by_stage_table_to_pmo( + total_raw_count_table=self.total_raw_count_table, + bioinformatics_run_name="test_run", + reads_by_stage_table=bad_reads_table, + ) + + def test_duplicate_library_samples(self): + """Test error handling for duplicate library sample names.""" + duplicate_table = pd.DataFrame( + { + "library_sample_name": ["sample1", "sample1"], + "total_raw_count": [1000, 2000], + } + ) + + with self.assertRaises(ValueError): + read_count_by_stage_table_to_pmo( + total_raw_count_table=duplicate_table, + bioinformatics_run_name="test_run", + ) + + def test_additional_columns_validation(self): + """Test validation of additional columns.""" + with self.assertRaises(ValueError): + read_count_by_stage_table_to_pmo( + total_raw_count_table=self.total_raw_count_table, + bioinformatics_run_name="test_run", + additional_library_sample_cols=["nonexistent_column"], + ) + + def test_process_total_raw_count_table(self): + """Test the _process_total_raw_count_table helper function.""" + result = _process_total_raw_count_table( + self.total_raw_count_table, + "library_sample_name", + "total_raw_count", + ["additional_info"], + ) + + self.assertIn("sample1", result) + self.assertEqual(result["sample1"]["total_raw_count"], 1000) + self.assertEqual(result["sample1"]["additional_info"], "info1") + + def test_process_reads_by_stage_table_long(self): + """Test the _process_reads_by_stage_table helper function with long format.""" + result = _process_reads_by_stage_table( + self.reads_by_stage_table_long, + "library_sample_name", + "target_name", + "stage", + "read_count", + ) + + self.assertIn("sample1", result) + self.assertIn("target1", result["sample1"]) + self.assertIn("demultiplexed", result["sample1"]["target1"]) + # Now stages are dictionaries with stage and read_count + demultiplexed_data = result["sample1"]["target1"]["demultiplexed"] + self.assertEqual(demultiplexed_data["stage"], "demultiplexed") + self.assertEqual(demultiplexed_data["read_count"], 100) + + def test_process_reads_by_stage_table_wide(self): + """Test the _process_reads_by_stage_table helper function with wide format.""" + result = _process_reads_by_stage_table( + self.reads_by_stage_table_wide, + "library_sample_name", + "target_name", + ["demultiplexed", "denoised", "filtered"], + "read_count", + ) + + self.assertIn("sample1", result) + self.assertIn("target1", result["sample1"]) + self.assertIn("demultiplexed", result["sample1"]["target1"]) + # Now stages are dictionaries with stage and read_count + demultiplexed_data = result["sample1"]["target1"]["demultiplexed"] + self.assertEqual(demultiplexed_data["stage"], "demultiplexed") + self.assertEqual(demultiplexed_data["read_count"], 100) + + def test_build_read_counts_by_stage_output(self): + """Test the _build_read_counts_by_stage_output helper function.""" + library_sample_data = { + "sample1": {"total_raw_count": 1000}, + "sample2": {"total_raw_count": 2000}, + } + + reads_by_stage_data = { + "sample1": {"target1": {"demultiplexed": 100, "denoised": 80}} + } + + result = _build_read_counts_by_stage_output( + library_sample_data, reads_by_stage_data, "test_run" + ) + + self.assertEqual(result["bioinformatics_run_name"], "test_run") + self.assertEqual(len(result["read_counts_by_library_sample_by_stage"]), 2) + + # Check sample1 has read_counts_for_targets + sample1 = next( + s + for s in result["read_counts_by_library_sample_by_stage"] + if s["library_sample_name"] == "sample1" + ) + self.assertIn("read_counts_for_targets", sample1) + + # Check sample2 does not have read_counts_for_targets + sample2 = next( + s + for s in result["read_counts_by_library_sample_by_stage"] + if s["library_sample_name"] == "sample2" + ) + self.assertNotIn("read_counts_for_targets", sample2) + + def test_empty_reads_by_stage_data(self): + """Test behavior when reads_by_stage_data is None.""" + library_sample_data = {"sample1": {"total_raw_count": 1000}} + + result = _build_read_counts_by_stage_output( + library_sample_data, None, "test_run" + ) + + sample1 = result["read_counts_by_library_sample_by_stage"][0] + self.assertNotIn("read_counts_for_targets", sample1) + + def test_numeric_read_counts(self): + """Test that read counts are properly converted to integers.""" + table_with_float_counts = pd.DataFrame( + { + "library_sample_name": ["sample1"], + "target_name": ["target1"], + "stage": ["demultiplexed"], + "read_count": [100.5], # Float value + } + ) + + result = _process_reads_by_stage_table( + table_with_float_counts, + "library_sample_name", + "target_name", + "stage", + "read_count", + ) + + # Should be converted to int + demultiplexed_data = result["sample1"]["target1"]["demultiplexed"] + self.assertEqual(demultiplexed_data["read_count"], 100) + + def test_missing_values_handling(self): + """Test handling of missing values in additional columns.""" + table_with_nan = pd.DataFrame( + { + "library_sample_name": ["sample1", "sample2"], + "total_raw_count": [1000, 2000], + "optional_info": ["info1", np.nan], + } + ) + + result = _process_total_raw_count_table( + table_with_nan, "library_sample_name", "total_raw_count", ["optional_info"] + ) + + # sample1 should have optional_info, sample2 should not + self.assertIn("optional_info", result["sample1"]) + self.assertNotIn("optional_info", result["sample2"]) + + def test_multiple_runs_from_column(self): + """Test functionality when bioinformatics_run_name is a column in total_raw_count_table.""" + # Create table with multiple runs + multi_run_table = pd.DataFrame( + { + "library_sample_name": ["sample1", "sample2", "sample1", "sample2"], + "total_raw_count": [1000, 2000, 1500, 2500], + "bioinformatics_run_name": ["run1", "run1", "run2", "run2"], + } + ) + + # Create reads table with multiple runs + multi_run_reads = pd.DataFrame( + { + "library_sample_name": ["sample1", "sample1", "sample2", "sample2"], + "target_name": ["target1", "target1", "target1", "target1"], + "stage": ["demultiplexed", "denoised", "demultiplexed", "denoised"], + "read_count": [100, 80, 200, 150], + "bioinformatics_run_name": ["run1", "run1", "run1", "run2"], + } + ) + + result = read_count_by_stage_table_to_pmo( + total_raw_count_table=multi_run_table, + bioinformatics_run_name="bioinformatics_run_name", + reads_by_stage_table=multi_run_reads, + ) + + # Should return a list of dictionaries + self.assertIsInstance(result, list) + self.assertEqual(len(result), 2) # Two runs + + # Check run1 + run1_data = next(r for r in result if r["bioinformatics_run_name"] == "run1") + self.assertEqual( + len(run1_data["read_counts_by_library_sample_by_stage"]), 2 + ) # sample1 and sample2 + + # Check run2 + run2_data = next(r for r in result if r["bioinformatics_run_name"] == "run2") + self.assertEqual( + len(run2_data["read_counts_by_library_sample_by_stage"]), 2 + ) # sample1 and sample2 + + # Verify that samples are filtered correctly for each run + run1_samples = [ + s["library_sample_name"] + for s in run1_data["read_counts_by_library_sample_by_stage"] + ] + run2_samples = [ + s["library_sample_name"] + for s in run2_data["read_counts_by_library_sample_by_stage"] + ] + + self.assertIn("sample1", run1_samples) + self.assertIn("sample2", run1_samples) + self.assertIn("sample1", run2_samples) + self.assertIn("sample2", run2_samples) + + def test_multiple_runs_without_reads_table(self): + """Test multiple runs functionality without reads by stage table.""" + multi_run_table = pd.DataFrame( + { + "library_sample_name": ["sample1", "sample2", "sample1", "sample2"], + "total_raw_count": [1000, 2000, 1500, 2500], + "bioinformatics_run_name": ["run1", "run1", "run2", "run2"], + } + ) + + result = read_count_by_stage_table_to_pmo( + total_raw_count_table=multi_run_table, + bioinformatics_run_name="bioinformatics_run_name", + ) + + # Should return a list of dictionaries + self.assertIsInstance(result, list) + self.assertEqual(len(result), 2) # Two runs + + # Check that each run has the correct samples + run1_data = next(r for r in result if r["bioinformatics_run_name"] == "run1") + run2_data = next(r for r in result if r["bioinformatics_run_name"] == "run2") + + self.assertEqual(len(run1_data["read_counts_by_library_sample_by_stage"]), 2) + self.assertEqual(len(run2_data["read_counts_by_library_sample_by_stage"]), 2) + + def test_multiple_runs_reads_table_without_run_column(self): + """Test multiple runs when reads table doesn't have bioinformatics_run_name column.""" + multi_run_table = pd.DataFrame( + { + "library_sample_name": ["sample1", "sample2", "sample1", "sample2"], + "total_raw_count": [1000, 2000, 1500, 2500], + "bioinformatics_run_name": ["run1", "run1", "run2", "run2"], + } + ) + + # Reads table without bioinformatics_run_name column + reads_table = pd.DataFrame( + { + "library_sample_name": ["sample1", "sample2"], + "target_name": ["target1", "target1"], + "stage": ["demultiplexed", "demultiplexed"], + "read_count": [100, 200], + } + ) + + result = read_count_by_stage_table_to_pmo( + total_raw_count_table=multi_run_table, + bioinformatics_run_name="bioinformatics_run_name", + reads_by_stage_table=reads_table, + ) + + # Should return a list of dictionaries + self.assertIsInstance(result, list) + self.assertEqual(len(result), 2) # Two runs + + # Both runs should have the same reads data (since reads table doesn't have run column) + run1_data = next(r for r in result if r["bioinformatics_run_name"] == "run1") + run2_data = next(r for r in result if r["bioinformatics_run_name"] == "run2") + + # Both should have read_counts_for_targets since reads table applies to all runs + for run_data in [run1_data, run2_data]: + for sample in run_data["read_counts_by_library_sample_by_stage"]: + if sample["library_sample_name"] in ["sample1", "sample2"]: + self.assertIn("read_counts_for_targets", sample) + + def test_single_run_behavior_unchanged(self): + """Test that single run behavior returns a list with one entry.""" + result = read_count_by_stage_table_to_pmo( + total_raw_count_table=self.total_raw_count_table, + bioinformatics_run_name="test_run", + reads_by_stage_table=self.reads_by_stage_table_long, + ) + + # Should return a list with one entry + self.assertIsInstance(result, list) + self.assertEqual(len(result), 1) + self.assertEqual(result[0]["bioinformatics_run_name"], "test_run") + + +if __name__ == "__main__": + unittest.main() From 55933aaf0ee3969a3b163fa8e95e2b1414841ab1 Mon Sep 17 00:00:00 2001 From: kathryn1995 Date: Fri, 24 Oct 2025 09:39:24 -0700 Subject: [PATCH 02/31] Add to merge function --- src/pmotools/pmo_builder/merge_to_pmo.py | 46 ++++++++++++ tests/test_pmo_builder/test_merge_to_pmo.py | 78 +++++++++++++++++++++ 2 files changed, 124 insertions(+) diff --git a/src/pmotools/pmo_builder/merge_to_pmo.py b/src/pmotools/pmo_builder/merge_to_pmo.py index 12e006d..aa3c31d 100644 --- a/src/pmotools/pmo_builder/merge_to_pmo.py +++ b/src/pmotools/pmo_builder/merge_to_pmo.py @@ -12,6 +12,7 @@ def merge_to_pmo( bioinfo_method_info: list, bioinfo_run_info: list, project_info: list, + read_counts_by_stage_info: list | None = None, ): """ Merge components into PMO, replacing names with indeces. @@ -24,6 +25,7 @@ def merge_to_pmo( :param bioinfo_method_info (list) : the bioinformatics pipeline/methods used to generated the amplicon analysis for this project :param bioinfo_run_info (list) : the runtime info for the bioinformatics pipeline used to generated the amplicon analysis for this project :param project_info (list) : the information about the projects stored in this PMO + :param read_counts_by_stage_info (Optional[list]) : the read counts by stage information for this project :return: a json formatted PMO string. """ @@ -37,6 +39,10 @@ def merge_to_pmo( panel_info = json.loads(json.dumps(panel_info)) mhap_info = json.loads(json.dumps(mhap_info)) + # Handle read_counts_by_stage_info if provided + if read_counts_by_stage_info is not None: + read_counts_by_stage_info = [dict(d) for d in read_counts_by_stage_info] + _replace_names_with_IDs( specimen_info, project_info, @@ -45,6 +51,7 @@ def merge_to_pmo( panel_info, mhap_info, bioinfo_run_info, + read_counts_by_stage_info, ) # Build PMO @@ -62,6 +69,11 @@ def merge_to_pmo( | panel_info | mhap_info ) + + # Add read_counts_by_stage_info if provided + if read_counts_by_stage_info is not None: + pmo["read_counts_by_stage"] = read_counts_by_stage_info + return pmo @@ -107,6 +119,8 @@ def _report_missing_IDs( missing_targets, missing_bioinfo_runs, missing_libs, + missing_read_counts_bioinfo_runs, + missing_read_counts_libs, ): if any( [ @@ -117,6 +131,8 @@ def _report_missing_IDs( missing_targets, missing_bioinfo_runs, missing_libs, + missing_read_counts_bioinfo_runs, + missing_read_counts_libs, ] ): error_message = ( @@ -136,6 +152,10 @@ def _report_missing_IDs( error_message += f"Bioinformatics run names in Detected Microhaplotypes not in Bioinformatic Run Info: {missing_bioinfo_runs}\n" if missing_libs: error_message += f"Library Sample names in Detected Microhaplotypes not in Library Sample Info: {missing_libs}\n" + if missing_read_counts_bioinfo_runs: + error_message += f"Bioinformatics run names in Read Counts by Stage not in Bioinformatic Run Info: {missing_read_counts_bioinfo_runs}\n" + if missing_read_counts_libs: + error_message += f"Library Sample names in Read Counts by Stage not in Library Sample Info: {missing_read_counts_libs}\n" raise ValueError(error_message) @@ -147,6 +167,7 @@ def _replace_names_with_IDs( panel_info, mhap_info, bioinfo_run_info, + read_counts_by_stage_info, ): # SPECIMEN INFO # replace name with project ID @@ -197,6 +218,29 @@ def _replace_names_with_IDs( lookup=lib_sample_lookup, ) + # READ COUNTS BY STAGE + # Replace bioinformatics_run_name and library_sample_name if provided + missing_read_counts_bioinfo_runs = [] + missing_read_counts_libs = [] + if read_counts_by_stage_info is not None: + # Replace bioinformatics_run_name with bioinformatics_run_id + missing_read_counts_bioinfo_runs = _replace_key_with_id( + read_counts_by_stage_info, + bioinfo_run_info, + "bioinformatics_run_name", + "bioinformatics_run_id", + ) + + # Replace library_sample_name with library_sample_id in each run + for read_counts_run in read_counts_by_stage_info: + missing_read_counts_libs += _replace_key_with_id( + read_counts_run["read_counts_by_library_sample_by_stage"], + library_sample_info, + "library_sample_name", + "library_sample_id", + lookup=lib_sample_lookup, + ) + # If any names were missing from reference tables error _report_missing_IDs( missing_projects, @@ -206,4 +250,6 @@ def _replace_names_with_IDs( missing_targets, missing_bioinfo_runs, missing_libs, + missing_read_counts_bioinfo_runs, + missing_read_counts_libs, ) diff --git a/tests/test_pmo_builder/test_merge_to_pmo.py b/tests/test_pmo_builder/test_merge_to_pmo.py index 776dc79..bafec6c 100644 --- a/tests/test_pmo_builder/test_merge_to_pmo.py +++ b/tests/test_pmo_builder/test_merge_to_pmo.py @@ -33,6 +33,8 @@ def test_report_missing_IDs_passes(self): [], [], [], + [], + [], ) def test_report_missing_IDs_fails_correctly(self): @@ -45,12 +47,88 @@ def test_report_missing_IDs_fails_correctly(self): ["something else", "something else2"], [], [], + [], + [], ) self.assertEqual( "The following fields were found in one table and not another:\nProject names in Specimen Info not in Project Info: ['something']\nTarget names in Representative Microhaplotypes not in Target Info: ['something else', 'something else2']\n", str(context.exception), ) + def test_merge_to_pmo_with_read_counts_by_stage(self): + """Test merge_to_pmo with read_counts_by_stage_info.""" + # Sample data + specimen_info = [{"specimen_name": "spec1", "project_name": "proj1"}] + library_sample_info = [ + { + "library_sample_name": "lib1", + "specimen_name": "spec1", + "sequencing_info_name": "seq1", + "panel_name": "panel1", + } + ] + sequencing_info = [{"sequencing_info_name": "seq1"}] + panel_info = { + "panel_info": [{"panel_name": "panel1"}], + "target_info": [{"target_name": "target1"}], + } + mhap_info = { + "representative_microhaplotypes": { + "targets": [{"target_name": "target1", "microhaplotypes": []}] + }, + "detected_microhaplotypes": [], + } + bioinfo_method_info = [] + bioinfo_run_info = [{"bioinformatics_run_name": "run1"}] + project_info = [{"project_name": "proj1"}] + + # Read counts by stage data + read_counts_by_stage_info = [ + { + "bioinformatics_run_name": "run1", + "read_counts_by_library_sample_by_stage": [ + { + "library_sample_name": "lib1", + "total_raw_count": 1000, + "read_counts_for_targets": [ + { + "target_name": "target1", + "stages": [ + {"stage": "demultiplexed", "read_count": 100} + ], + } + ], + } + ], + } + ] + + result = merge_to_pmo( + specimen_info=specimen_info, + library_sample_info=library_sample_info, + sequencing_info=sequencing_info, + panel_info=panel_info, + mhap_info=mhap_info, + bioinfo_method_info=bioinfo_method_info, + bioinfo_run_info=bioinfo_run_info, + project_info=project_info, + read_counts_by_stage_info=read_counts_by_stage_info, + ) + + # Check that read_counts_by_stage is included + self.assertIn("read_counts_by_stage", result) + self.assertEqual(len(result["read_counts_by_stage"]), 1) + + # Check that names have been replaced with IDs + read_counts_run = result["read_counts_by_stage"][0] + self.assertIn("bioinformatics_run_id", read_counts_run) + self.assertNotIn("bioinformatics_run_name", read_counts_run) + + # Check library sample names have been replaced + library_sample = read_counts_run["read_counts_by_library_sample_by_stage"][0] + self.assertIn("library_sample_id", library_sample) + self.assertNotIn("library_sample_name", library_sample) + @patch("pmotools.pmo_builder.merge_to_pmo.date") def test_generate_pmo_header(self, mock_date): mock_date.today.return_value = date(2025, 7, 22) From 872d00f157207527e5fd6d63c8a7be8fc112efde Mon Sep 17 00:00:00 2001 From: Nicholas Hathaway Date: Mon, 3 Nov 2025 12:37:09 -0800 Subject: [PATCH 03/31] update for version v1.0.0 of format; updated unit tests; --- pyproject.toml | 2 +- src/pmotools/pmo_engine/pmo_checker.py | 4 +- src/pmotools/pmo_engine/pmo_processor.py | 2 +- ..._microhaplotype_object_v1.0.0.schema.json} | 37 +- tests/data/combined_pmo_example.json | 11985 +++++++++++++++- tests/data/minimum_pmo_example.json | 611 +- tests/data/minimum_pmo_example.json.gz | Bin 27343 -> 27204 bytes tests/data/minimum_pmo_example_2.json | 64 +- tests/data/minimum_pmo_example_2.json.gz | Bin 24162 -> 24067 bytes tests/test_pmo_engine/test_pmo_checker.py | 2 +- tests/test_pmo_engine/test_pmo_processor.py | 66 +- tests/test_pmo_engine/test_pmo_reader.py | 2 +- tests/test_pmo_engine/test_pmo_writer.py | 4 +- uv.lock | 2 +- 14 files changed, 12377 insertions(+), 404 deletions(-) rename src/pmotools/schemas/{portable_microhaplotype_object_v0.1.0.schema.json => portable_microhaplotype_object_v1.0.0.schema.json} (98%) diff --git a/pyproject.toml b/pyproject.toml index 59be2ce..7d83145 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "pmotools" -version = "0.1.0" +version = "1.0.0" description = "Tools for building and analyzing PMO files" readme = "README.md" authors = [ diff --git a/src/pmotools/pmo_engine/pmo_checker.py b/src/pmotools/pmo_engine/pmo_checker.py index d2047f0..46186ba 100644 --- a/src/pmotools/pmo_engine/pmo_checker.py +++ b/src/pmotools/pmo_engine/pmo_checker.py @@ -14,10 +14,10 @@ def __init__(self, pmo_jsonschema: dict): Constructor for PMOChecker with the json read from the json schema file for example: - with open("portable_microhaplotype_object_v0.1.0.schema.json") as f: pmo_jsonschema_data = json.load(f) + with open("portable_microhaplotype_object_v1.0.0.schema.json") as f: pmo_jsonschema_data = json.load(f) PMOChecker checker(pmo_jsonschema_data) or use loader - PMOChecker checker(load_schema("portable_microhaplotype_object_v0.1.0.schema.json") + PMOChecker checker(load_schema("portable_microhaplotype_object_v1.0.0.schema.json") """ self.pmo_jsonschema = pmo_jsonschema self.pmo_validator = Draft7Validator(pmo_jsonschema) diff --git a/src/pmotools/pmo_engine/pmo_processor.py b/src/pmotools/pmo_engine/pmo_processor.py index d6b1daf..a2711e7 100644 --- a/src/pmotools/pmo_engine/pmo_processor.py +++ b/src/pmotools/pmo_engine/pmo_processor.py @@ -534,7 +534,7 @@ def extract_allele_counts_freq_from_pmo( :param collapse_across_runs: whether to collapse count/freqs across bioinformatics_run_id runs :return: DataFrame with columns: bioinformatics_run_id, target, mhap_id, count, freq, target_total """ - schema = load_schema("portable_microhaplotype_object_v0.1.0.schema.json") + schema = load_schema("portable_microhaplotype_object_v1.0.0.schema.json") checker = PMOChecker(schema) checker.check_for_required_base_fields(pmodata) diff --git a/src/pmotools/schemas/portable_microhaplotype_object_v0.1.0.schema.json b/src/pmotools/schemas/portable_microhaplotype_object_v1.0.0.schema.json similarity index 98% rename from src/pmotools/schemas/portable_microhaplotype_object_v0.1.0.schema.json rename to src/pmotools/schemas/portable_microhaplotype_object_v1.0.0.schema.json index f4a2b37..6aa78b2 100644 --- a/src/pmotools/schemas/portable_microhaplotype_object_v0.1.0.schema.json +++ b/src/pmotools/schemas/portable_microhaplotype_object_v1.0.0.schema.json @@ -51,38 +51,18 @@ }, "BioinformaticsMethodInfo": { "additionalProperties": true, - "description": "the targeted amplicon bioinformatics pipeline", + "description": "the targeted amplicon bioinformatics methods used to generate the amplicon data in this PMO", "properties": { - "additional_methods": { - "description": "any additional methods used to analyze the data", + "methods": { + "description": "methodology used to generate the amplicon data stored in this PMO, e.g. demultiplexing method, denosing method or just a pipeline method info", "items": { "$ref": "#/$defs/BioMethod" }, - "type": [ - "array", - "null" - ] - }, - "bioinformatics_method_name": { - "description": "name of the collection of methods is called, e.g. pipeline ", - "pattern": "^[A-z-._0-9 ]+$", - "type": [ - "string", - "null" - ] - }, - "demultiplexing_method": { - "$ref": "#/$defs/BioMethod", - "description": "the demultiplexing method used to separate raw reads from barcodes and primer targets" - }, - "denoising_method": { - "$ref": "#/$defs/BioMethod", - "description": "the method used to de-noise and/or cluster the raw reads" + "type": "array" } }, "required": [ - "demultiplexing_method", - "denoising_method" + "methods" ], "title": "BioinformaticsMethodInfo", "type": "object" @@ -1557,10 +1537,9 @@ "additionalProperties": true, "description": "Information on the reads counts at several stages", "properties": { - "read_count": { - "description": "the read counts", + "reads": { + "description": "the read counts for this stage", "minimum": 0, - "pattern": "^[0-9]+$", "type": "integer" }, "stage": { @@ -1570,7 +1549,7 @@ } }, "required": [ - "read_count", + "reads", "stage" ], "title": "StageReadCounts", diff --git a/tests/data/combined_pmo_example.json b/tests/data/combined_pmo_example.json index 36b543b..54ce7f7 100644 --- a/tests/data/combined_pmo_example.json +++ b/tests/data/combined_pmo_example.json @@ -1 +1,11984 @@ -{"pmo_header": {"pmo_version": "v1.0.0", "creation_date": "2025-07-22", "generation_method": {"program_name": "pmotools-python.PMOReader.combine_multiple_pmos", "program_version": "v1.0.0"}}, "targeted_genomes": [{"chromosomes": ["Pf3D7_01_v3", "Pf3D7_02_v3", "Pf3D7_03_v3", "Pf3D7_04_v3", "Pf3D7_05_v3", "Pf3D7_06_v3", "Pf3D7_07_v3", "Pf3D7_08_v3", "Pf3D7_09_v3", "Pf3D7_10_v3", "Pf3D7_11_v3", "Pf3D7_12_v3", "Pf3D7_13_v3", "Pf3D7_14_v3", "Pf3D7_API_v3", "Pf3D7_MIT_v3"], "genome_version": "2020-09-01", "gff_url": "https://plasmodb.org/common/downloads/release-65/Pfalciparum3D7/gff/data/PlasmoDB-65_Pfalciparum3D7.gff", "name": "3D7", "taxon_id": [5833], "url": "https://plasmodb.org/common/downloads/release-65/Pfalciparum3D7/fasta/data/PlasmoDB-65_Pfalciparum3D7_Genome.fasta"}], "target_info": [{"forward_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 1956129, "genome_id": 0, "start": 1956096, "strand": "+"}, "seq": "TTTTTCTCCACTTTGTAATTTTTATTGTTGAAT"}, "gene_name": "PF3D7_1447900", "insert_location": {"chrom": "Pf3D7_14_v3", "end": 1956286, "genome_id": 0, "ref_seq": "ATATATATAAAGTTAAACCTATAAATAATACACTACCTAATAAACTATTCTTATATTTAAAAATAAATATAATACATGTTATTAATCCTTCTATTGTTGCCGGAATAATATACATTAAAACAGAACTCATCAAATTATTAGCACTCTCGGTACCTCT", "start": 1956129, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 1956129, "genome_id": 0, "start": 1956096, "strand": "+"}, "seq": "CGGGTGGTATCATGAGAATAGTTGAT"}, "target_attributes": ["Included", "DrugResistance"], "target_name": "t96"}, {"forward_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 1038369, "genome_id": 0, "start": 1038340, "strand": "+"}, "seq": "ACACTTCAACTACACTTTTTAATTTAGCC"}, "gene_name": "PF3D7_1426700", "insert_location": {"chrom": "Pf3D7_14_v3", "end": 1038486, "genome_id": 0, "ref_seq": "CATACAATTAATAAAGCTCTACGATAAATTTCTTTTTTATTTGATTTAGAAAAAGGAGAAAACCATTGAAACTTTTTGGCTAGATATTTATGGTCTTTATCAAAAATATATTCTGAA", "start": 1038369, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 1038369, "genome_id": 0, "start": 1038340, "strand": "+"}, "seq": "AGATCTTATGTTAAACTTCTAGAAGATGAAGT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t95"}, {"forward_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 564208, "genome_id": 0, "start": 564177, "strand": "+"}, "seq": "AAAATCTTTTGGTATTGTATTTTGACTGCAC"}, "gene_name": "PF3D7_1414200", "insert_location": {"chrom": "Pf3D7_14_v3", "end": 564377, "genome_id": 0, "ref_seq": "TTATTAAAACTTTTTTTTCTTTCTGTAAAGTTTGTACATTATGTTTTGATGAGTTTTGATTATCTTCATAAAACTTTATATATTTATAAAAATTATTTTGTATAAAATCATTTAATAAAGGTAACATAATCTTTTTAGCTTGATTCAATTCACTACATGAATGTATATT", "start": 564208, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 564208, "genome_id": 0, "start": 564177, "strand": "+"}, "seq": "AAACGGAATCACTTATGGATACCATTTTATTT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t94"}, {"forward_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 933023, "genome_id": 0, "start": 932995, "strand": "+"}, "seq": "TGTAAAAGGAAAATGTCTTACGTGGATT"}, "gene_name": "PF3D7_0820700", "insert_location": {"chrom": "Pf3D7_08_v3", "end": 933143, "genome_id": 0, "ref_seq": "TTGGTTTTAATGAGGATGATTTAGATAAAGAGTTTTTTTTTGATTTGCCGTCGATTAGTGGTTTTTCAAGTAATGGTATGAAAAAATGTAATTTAAGAAATTTATTAAAAAGATTAGAAG", "start": 933023, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 933023, "genome_id": 0, "start": 932995, "strand": "+"}, "seq": "ATTCAAAACCAATAGTACCACAATATGTTT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t50"}, {"forward_primer": {"location": {"chrom": "Pf3D7_05_v3", "end": 1042162, "genome_id": 0, "start": 1042129, "strand": "+"}, "seq": "GGAATATTTGTGATTTAGGATGTAATGCATACA"}, "gene_name": "PF3D7_0525100", "insert_location": {"chrom": "Pf3D7_05_v3", "end": 1042281, "genome_id": 0, "ref_seq": "ATATTATTACGGTACCATTATATGATTCTTTAGGTCCTCAATCAAGTAGATTTATATTAGATCAAACACAGATGGAAACTATTGTATGTGACAAGACATGTGCTCGTAATTTATTTAAG", "start": 1042162, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_05_v3", "end": 1042162, "genome_id": 0, "start": 1042129, "strand": "+"}, "seq": "CAAATATATCTCTTCGCATGTTTCTAAGGA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t36"}, {"forward_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 2669135, "genome_id": 0, "start": 2669104, "strand": "+"}, "seq": "ATTTACATGATGTAACTGAATCTCAGCTTTT"}, "gene_name": "PF3D7_1366800", "insert_location": {"chrom": "Pf3D7_13_v3", "end": 2669307, "genome_id": 0, "ref_seq": "AAAAAAAATACATTTAAATCTATAATATTTGTAATAAATGATAAGAATATTAGTATTAATAGGGTACTACTATTTGTAAATACTTTTCTACATAATTTATCAATAGTAGGAAATATGATATTCTTTTTGTTTGGCTTTATTTTATCTGGGATTTTCCAATCATAAAGTTCGA", "start": 2669135, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 2669135, "genome_id": 0, "start": 2669104, "strand": "+"}, "seq": "AGCCAGTATTCTTTTTATGAAGTATTTTAACA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t88"}, {"forward_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 2479086, "genome_id": 0, "start": 2479055, "strand": "+"}, "seq": "CTTATAAAGAGAAATTTTCATGTTAGCGCTT"}, "gene_name": "PF3D7_1361800", "insert_location": {"chrom": "Pf3D7_13_v3", "end": 2479246, "genome_id": 0, "ref_seq": "TCTATGCTTTATCAAAACAAAGTAATCAAAATGTAATACATTATTCTTGTCGATCTATATGTGCTTTTACAAAAAACCCTAAGGGTTTAGAAGCGGTAAAGGATATCAAGGACTTTGCGAATATTATAAGTAAATCTGTTGGTGATTTGAGTAAAGAGAA", "start": 2479086, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 2479086, "genome_id": 0, "start": 2479055, "strand": "+"}, "seq": "AGTCTTCCTTGATTTCTTTATCCAAGGTA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t86"}, {"forward_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 2124634, "genome_id": 0, "start": 2124602, "strand": "+"}, "seq": "AATTTGGTTTCAATAAAATTATCAGCTTTCTT"}, "gene_name": "PF3D7_1353100", "insert_location": {"chrom": "Pf3D7_13_v3", "end": 2124847, "genome_id": 0, "ref_seq": "TAACATTTTTTTAACATCTTTACCTTTTTGACTTGGTTCTTTATCATAATTCTGTTGTTCTGCAGAATCAGCATTTACTTCAGTTTCTTCTTTATTTTGAAAAGTGTTTGATTCTACATGAGAATTGGAAGATGAACGTCTATGTTTTACTTCTGTATAACTAGTACGTTCTCCAGTATGATGAGCCTTATGGTTTACATCTTCAGTTTCTTC", "start": 2124634, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 2124634, "genome_id": 0, "start": 2124602, "strand": "+"}, "seq": "GAAGAATTTTAACACAAGGAGATCATCAC"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t85"}, {"forward_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 1419543, "genome_id": 0, "start": 1419519, "strand": "+"}, "seq": "GAAATGTCGATTCTCCTCCTTGTG"}, "gene_name": "PF3D7_1335100", "insert_location": {"chrom": "Pf3D7_13_v3", "end": 1419670, "genome_id": 0, "ref_seq": "CTGGTTTTTGTACTTCTTGTCCTTGTGTTGATATCTCTTGTTCATTTTTAGATTGAGTATCTGTTTCACTTTGTGCCTTTACCTTTGATAATACGTTTTTACCGAATAATCCTAAATTTTGGAATAA", "start": 1419543, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 1419543, "genome_id": 0, "start": 1419519, "strand": "+"}, "seq": "GAAAACAAGGAAAAATCAGAATCATTTCCA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t81"}, {"forward_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 1150303, "genome_id": 0, "start": 1150279, "strand": "+"}, "seq": "TAACAACCCCTCCATCAACATCTT"}, "gene_name": "PF3D7_1327300", "insert_location": {"chrom": "Pf3D7_13_v3", "end": 1150493, "genome_id": 0, "ref_seq": "CTAAAAAAAGCAAACAAAAAGAAAAGAGAATGGAAGATTTAAGTATTGAGGAAAATTTGAAAGAGAAATTAATAAACCTAAATATTCAGAAACAGTATAGTGGTTTCCATATGAAAGAAATGGAGGAACAAAATATTCCTGAATTAAATATTCCACAACTTTCAGCTATTCATAATAGAGAAGATATGAA", "start": 1150303, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 1150303, "genome_id": 0, "start": 1150279, "strand": "+"}, "seq": "ACACTTCTATATCTTCTTTCTTCATCATTCTTA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t80"}, {"forward_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 1725365, "genome_id": 0, "start": 1725337, "strand": "+"}, "seq": "TCGGTATAATAGAAGAGCCATCATATCC"}, "gene_name": "PF3D7_1343700", "insert_location": {"chrom": "Pf3D7_13_v3", "end": 1725570, "genome_id": 0, "ref_seq": "CCCAATACAATAAATTCTACCATTTGACGTAACACCACAATTATTTCTTCTAGGTATATTTAAATTACTTGAAACATACCATACATCTCTTAAACGATCATACACCTCAGTTTCAAATAAAGCCTTATAATCATAGTTATTACCACCAAAAACGTATAAGAAATTATTCAATACAGCACTTCCAAAATAAGCTTTTTTGGTAGAC", "start": 1725365, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 1725365, "genome_id": 0, "start": 1725337, "strand": "+"}, "seq": "GCTGGCGTATGTGTACACCTAT"}, "target_attributes": ["Included", "DrugResistance"], "target_name": "t82"}, {"forward_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 1876352, "genome_id": 0, "start": 1876325, "strand": "+"}, "seq": "CCAGGACAATTTAAACCTACCAAATGA"}, "gene_name": "PF3D7_1346700", "insert_location": {"chrom": "Pf3D7_13_v3", "end": 1876534, "genome_id": 0, "ref_seq": "TTATATTTTGGTTCAGACAAATGTACGTTACATGAAATATGTGCACTATCATCAACTAAAGAAATATCTAAACTATCTGTAAAAGTATGTTTAGAACTAACATTTGAAGAGAAGTTACATCCGTGTATGACTTTTTTTTCATATTTTGGTTTTAAAACTATTTTATAATTATTATTTTTAAA", "start": 1876352, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 1876352, "genome_id": 0, "start": 1876325, "strand": "+"}, "seq": "CAAAAGATGTTAATACAGAATGTACATGCAAA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t83"}, {"forward_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 2524962, "genome_id": 0, "start": 2524931, "strand": "+"}, "seq": "ATGATCTTCTCTGAAATTTACTTGAATTGTT"}, "gene_name": "PF3D7_1462300", "insert_location": {"chrom": "Pf3D7_14_v3", "end": 2525089, "genome_id": 0, "ref_seq": "AAATGAGGTATAATCATCCATTTCGTTGGGTCGATTTGATCTATTTTTAAGGTCCATATATTGAGATGAATCATTATGCATTTTATAATCATGAGGGATATTAGGTGCATGGTATTTAGGGTCTTTA", "start": 2524962, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 2524962, "genome_id": 0, "start": 2524931, "strand": "+"}, "seq": "ACCAAACTTTTGGAGATTTCAAGATTATGA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t98"}, {"forward_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 103659, "genome_id": 0, "start": 103631, "strand": "+"}, "seq": "GAAAAGAAGATCCAACTGACAGAGAAAA"}, "insert_location": {"chrom": "Pf3D7_13_v3", "end": 103879, "genome_id": 0, "ref_seq": "AACTGATGTTAATGAAGGCCAAAATGGAAAACGTTTAACACAAGAAAAAACCCTAAAACAAATTCCTTCGACATCACCAAATAATTTAGAACAAAAATTACAACAAACACATATTTCTTCTTCCCAACAAAAACATTTAATAAAAACTACTCCTACTTCAGATTCAACTACAACTTCATCAAGCTCTTCTGTTCCTCTTACAAAACAATCCCCTCATTCT", "start": 103659, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 103659, "genome_id": 0, "start": 103631, "strand": "+"}, "seq": "TGTGTACTAGATAATGCAGGAACTGA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t78"}, {"forward_primer": {"location": {"chrom": "Pf3D7_12_v3", "end": 684088, "genome_id": 0, "start": 684059, "strand": "+"}, "seq": "GTCTACCATTTTTAATCGACTAACTCGAA"}, "gene_name": "PF3D7_1217300", "insert_location": {"chrom": "Pf3D7_12_v3", "end": 684261, "genome_id": 0, "ref_seq": "AATATCAAGATGGTAGTATTGTTTTAGATGTTAGTAGTACGAGAGATAAACTTTATGGAGAAGTTGAGTGGGAAGGATATAAATTTGAACTTGTGGATACAGGAGGTTTAGTTTTTGAACAAGAAAAGTTTTCAAAAGAAATAAAGGATCAAATTCTTATGGCTCTAAAAGAA", "start": 684088, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_12_v3", "end": 684088, "genome_id": 0, "start": 684059, "strand": "+"}, "seq": "CATCAACGACAAAAATAACAACTGATGA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t74"}, {"forward_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 415653, "genome_id": 0, "start": 415623, "strand": "+"}, "seq": "ATGAATTAATAAAAGAACATGGTGGACCTT"}, "gene_name": "PF3D7_0408600", "insert_location": {"chrom": "Pf3D7_04_v3", "end": 415826, "genome_id": 0, "ref_seq": "ATGCTAGTTTTGCTGCTCATGAAAATAAAAGCTACTCATATGAAAGTCGTACATATAAAATGTATCCACCTGAATTTAATACATTAATGTTAAAAGCAGATTATTTTATAAGAGATATAAATACACGAGGATTTAGAGAAGTAAATATGGATTCATGTAAATCATATACAAAT", "start": 415653, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 415653, "genome_id": 0, "start": 415623, "strand": "+"}, "seq": "GACTTGAAAACATTTTAAATTTCTTGTATCCAT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t23"}, {"forward_primer": {"location": {"chrom": "Pf3D7_12_v3", "end": 659891, "genome_id": 0, "start": 659858, "strand": "+"}, "seq": "GTTAATACTGGTACTATTATACCATATGTTGCT"}, "gene_name": "PF3D7_1216600", "insert_location": {"chrom": "Pf3D7_12_v3", "end": 660010, "genome_id": 0, "ref_seq": "GGGTCGACTTTTGGTGGTTTAACATTTTCAGCTACGAGATTTTCGAATGATGGCAATCCTACTTTGATTAATTCCTTTAACATAGATTTTGCGTGTTTTTTTACTTCTGATTTGATATC", "start": 659891, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_12_v3", "end": 659891, "genome_id": 0, "start": 659858, "strand": "+"}, "seq": "TCACCAACCTTTTTAGAATCAAGCTTT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t73"}, {"forward_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 156566, "genome_id": 0, "start": 156535, "strand": "+"}, "seq": "AACTGAAAGTATATACAATAGTACACCTCCA"}, "gene_name": "PF3D7_1302900", "insert_location": {"chrom": "Pf3D7_13_v3", "end": 156722, "genome_id": 0, "ref_seq": "TATAGAGTTATTATGTTCGAATTAATGACCAGATTATTTCGATTTTATACAAAACCAATAGACCTTATTATTACTATGAATACACACAGATATGACACACCTATATTGTTAAAACATTCAAACAGCTTACAACTTATCTTATCAAATCAACAAAAT", "start": 156566, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 156566, "genome_id": 0, "start": 156535, "strand": "+"}, "seq": "AAAAGGATAAGTTAGAATTGCTCATTAATCT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t79"}, {"forward_primer": {"location": {"chrom": "Pf3D7_11_v3", "end": 1816211, "genome_id": 0, "start": 1816181, "strand": "+"}, "seq": "GGGTAGATATCGTTATAAGGGCTATAATGT"}, "gene_name": "PF3D7_1145800", "insert_location": {"chrom": "Pf3D7_11_v3", "end": 1816425, "genome_id": 0, "ref_seq": "ATTGACTTCTCCGGGTTGGTTACATTATCATTACAACCAATATTATTAAGGTTAATACTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCATATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACTT", "start": 1816211, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_11_v3", "end": 1816211, "genome_id": 0, "start": 1816181, "strand": "+"}, "seq": "GCCAAAAATACGATGTGATGAAGAATG"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t71"}, {"forward_primer": {"location": {"chrom": "Pf3D7_11_v3", "end": 1552430, "genome_id": 0, "start": 1552397, "strand": "+"}, "seq": "AAGGGAAAAATAATGGATAATATAGTTGTGAAT"}, "gene_name": "PF3D7_1139100", "insert_location": {"chrom": "Pf3D7_11_v3", "end": 1552640, "genome_id": 0, "ref_seq": "AATATCGACAATTATAAAGAAAAAATAGAAAATTTTAATGAAAGATATTATGAAGATGATTTAAGTTTCTTAAACTTTCCAGGAACCATAACAAGTTATGATAAAAACCATCAAAGAGATAAAAGAAAAAACTGTTTTGAAGAATATCTAGACAATAATAATTATTTTATTGATAGTAATCTAAAGGAAGTTATAGAAAATAATATATAT", "start": 1552430, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_11_v3", "end": 1552430, "genome_id": 0, "start": 1552397, "strand": "+"}, "seq": "GTCAATTTGCTCCTTATCCATATTCGA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t69"}, {"forward_primer": {"location": {"chrom": "Pf3D7_11_v3", "end": 1009856, "genome_id": 0, "start": 1009831, "strand": "+"}, "seq": "AAACTGTGAGCATATCTTGGTTCAG"}, "gene_name": "PF3D7_1125800", "insert_location": {"chrom": "Pf3D7_11_v3", "end": 1010038, "genome_id": 0, "ref_seq": "GAATTCTATCTATTTGTTTAATTGGTGTCCATGAATTTTTAGAGAAACACCACATATCAGCTAATAAGGAATTATTAACATCTAATCCTCCATGAATATATAAAAAATCATTAAAACTGAAAGAAGCATGCTTATATCTTGCACGTGGACAAATTTTATTTCCAATAAGTTCCCATTTCTTT", "start": 1009856, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_11_v3", "end": 1009856, "genome_id": 0, "start": 1009831, "strand": "+"}, "seq": "TGTTGATGAAACATATAAATTTGATTTCCAAGC"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t66"}, {"forward_primer": {"location": {"chrom": "Pf3D7_11_v3", "end": 1750865, "genome_id": 0, "start": 1750833, "strand": "+"}, "seq": "CATCAACATATAGTCGTTATAAAAGAGCACTT"}, "gene_name": "PF3D7_1143800", "insert_location": {"chrom": "Pf3D7_11_v3", "end": 1751055, "genome_id": 0, "ref_seq": "TTATTAAAAACAACAAATAAATTACCAAGGTCATGGAAAAAACTCTTGTTAAATCTATCCATTAGATTTCAAACAATACCTATAGGTGGTTCTATCGAAATCATATCAAAGGATGAGAAAAATATTTCTATGACACGATCCAGTGAATATAATGCAACAACATATGAGCATTACACATTTCCCAAATGGT", "start": 1750865, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_11_v3", "end": 1750865, "genome_id": 0, "start": 1750833, "strand": "+"}, "seq": "GGCGTTTCCTCATTTTCTTTACTATTGT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t70"}, {"forward_primer": {"location": {"chrom": "Pf3D7_11_v3", "end": 119486, "genome_id": 0, "start": 119456, "strand": "+"}, "seq": "GCTTCCATCTCCTTTATATTCATCAAGAAA"}, "gene_name": "PF3D7_1102500", "insert_location": {"chrom": "Pf3D7_11_v3", "end": 119693, "genome_id": 0, "ref_seq": "TTTCATCCAAGAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTTTTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTCAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCCC", "start": 119486, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_11_v3", "end": 119486, "genome_id": 0, "start": 119456, "strand": "+"}, "seq": "GGAATTTTTAATGAATGGATTAAAACTAGTGAA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t65"}, {"forward_primer": {"location": {"chrom": "Pf3D7_10_v3", "end": 1436479, "genome_id": 0, "start": 1436451, "strand": "+"}, "seq": "CTAGGAATCGAATAAATGAGGAAAAGCA"}, "gene_name": "PF3D7_1036400", "insert_location": {"chrom": "Pf3D7_10_v3", "end": 1436682, "genome_id": 0, "ref_seq": "CGAGAAGAAACACGTTTTATCTCATAATTCATATGAGAAAACTAAAAATAATGAAAATAATAAATTTTTCGATAAGGATAAAGAGTTAACGATGTCTAATGTAAAAAATGTGTCACAAACAAATTTCAAAAGTCTTTTAAGAAATCTTGGTGTTTCAGAGAATATATTCCTTAAAGAAAATAAATTAAATAAGGAAGGGAAAT", "start": 1436479, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_10_v3", "end": 1436479, "genome_id": 0, "start": 1436451, "strand": "+"}, "seq": "ATCGTCATCATCATTTATTATGTGTTCAATTA"}, "target_attributes": ["Excluded", "Microhaplotype"], "target_name": "t64"}, {"forward_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 531682, "genome_id": 0, "start": 531656, "strand": "+"}, "seq": "CTTTTTGGGCTTATTGTTTGGAAGAA"}, "gene_name": "PF3D7_0113800", "insert_location": {"chrom": "Pf3D7_01_v3", "end": 531900, "genome_id": 0, "ref_seq": "AAAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATTCCTACAAATAATTATAGCATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGTAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATAGTATCCGAA", "start": 531682, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 531682, "genome_id": 0, "start": 531656, "strand": "+"}, "seq": "ACTGGATTCTTCTAATATTCTTTGCTCTCT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t6"}, {"forward_primer": {"location": {"chrom": "Pf3D7_09_v3", "end": 596133, "genome_id": 0, "start": 596101, "strand": "+"}, "seq": "ATTTGTTTTTGTTCTACATCAATAATTGGTTT"}, "gene_name": "PF3D7_0913900", "insert_location": {"chrom": "Pf3D7_09_v3", "end": 596334, "genome_id": 0, "ref_seq": "ATTATTTTCGTTTTTTTTTATATTATCATTATAATTATATGTATTTACAAAGAATTTATTATTATTTGTTTCTTTATAATTATATTCATTTTCTTTATTACTTAAGGAATTTATATTTGATAAAACTTGTTGTCCTCTTTCTTCTTTGTTGATGTGAATATTTGAGAAAATAATAATAAATGTAATGACTAGGGCTATGTT", "start": 596133, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_09_v3", "end": 596133, "genome_id": 0, "start": 596101, "strand": "+"}, "seq": "AAATAGAAGTCATATAGGTGACTGGAATCTT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t55"}, {"forward_primer": {"location": {"chrom": "Pf3D7_09_v3", "end": 516928, "genome_id": 0, "start": 516904, "strand": "+"}, "seq": "TGTGGGCGCAAAAACTATAAATGA"}, "gene_name": "PF3D7_0911300", "insert_location": {"chrom": "Pf3D7_09_v3", "end": 517092, "genome_id": 0, "ref_seq": "ATGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTGAAGAATGTCCCATAGGTTTTTATTGTCCAAAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCAA", "start": 516928, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_09_v3", "end": 516928, "genome_id": 0, "start": 516904, "strand": "+"}, "seq": "ATTTTGTATATCCAAAATTACATTGACAATTGT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t54"}, {"forward_primer": {"location": {"chrom": "Pf3D7_05_v3", "end": 1309609, "genome_id": 0, "start": 1309581, "strand": "+"}, "seq": "ACGACGAAGAAAACGAAAGTATTGATAA"}, "gene_name": "PF3D7_0532300", "insert_location": {"chrom": "Pf3D7_05_v3", "end": 1309744, "genome_id": 0, "ref_seq": "TAATGAAGAAAATATGTCTGACAGACCAAACAGTTTATCTCATGATAAGGATCAACACCTCGATGAAACACATAATGAACAATATGGATTATACGTAAAAGAAATGGAATCTAAAGTTGAAAAATTAGCTGAAAA", "start": 1309609, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_05_v3", "end": 1309609, "genome_id": 0, "start": 1309581, "strand": "+"}, "seq": "ACCTCTTGAAATTCCTTTTCAACTTGA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t37"}, {"forward_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 1362891, "genome_id": 0, "start": 1362863, "strand": "+"}, "seq": "CGACTTCTTTAAGAGAACAAACAGAACA"}, "gene_name": "PF3D7_0831600", "insert_location": {"chrom": "Pf3D7_08_v3", "end": 1363087, "genome_id": 0, "ref_seq": "CGTAAAAAAAAAGGGTTTTCCTAAAAAACCATCGGTTCATGGTTTTACACAGATGGTGTTTTTGCAGCTTACTAATATAGTCATGTATGCCCTTTGTTTTATGAGCCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAAT", "start": 1362891, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 1362891, "genome_id": 0, "start": 1362863, "strand": "+"}, "seq": "AAGTTTTCTTCTGAATAGTTCTACAAAGTATTT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t53"}, {"forward_primer": {"location": {"chrom": "Pf3D7_07_v3", "end": 165235, "genome_id": 0, "start": 165202, "strand": "+"}, "seq": "GGATCCTCTTACAATCTCGAAATAATTATAATT"}, "gene_name": "PF3D7_0703900", "insert_location": {"chrom": "Pf3D7_07_v3", "end": 165422, "genome_id": 0, "ref_seq": "ATCATTATTATTATTATTATAATTATCATTGTTATTATTATTGTTGTTGTTGTTATTATTATTTCCTTTATTATTTAATATGCATTTTTTAATATCCATTTTATTATTTATCATATCAGTACTTTTATTTTTCTCCTTTTCGTTTATAGCTTTTTCCCTATGCACCCTGAATTTCCCATTTTTTTTT", "start": 165235, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_07_v3", "end": 165235, "genome_id": 0, "start": 165202, "strand": "+"}, "seq": "ATGGTTTGGTAAGCGAGTTTATGTTATT"}, "target_attributes": ["Excluded", "Microhaplotype"], "target_name": "t40"}, {"forward_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 1344686, "genome_id": 0, "start": 1344653, "strand": "+"}, "seq": "TCTTTTCCATATATAATAACGCATGAATTCTTT"}, "gene_name": "PF3D7_0831400", "insert_location": {"chrom": "Pf3D7_08_v3", "end": 1344819, "genome_id": 0, "ref_seq": "AAATATATCTTTTACTTTATCTGTAAGTTTCATGGAATCTATTATTTCATGTGCATATTTTATTTTTGCCTCGTTTATATATTTACCTGCTTTTAATTTACATAAACATTTTTCTATTAAGTTTTGATCATTT", "start": 1344686, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 1344686, "genome_id": 0, "start": 1344653, "strand": "+"}, "seq": "TGAGAACAGATGAAGTAACTACTCGATT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t52"}, {"forward_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 3124642, "genome_id": 0, "start": 3124614, "strand": "+"}, "seq": "CAGATTATTTGGTAATGAACAACCAGGA"}, "gene_name": "PF3D7_1475900", "insert_location": {"chrom": "Pf3D7_14_v3", "end": 3124842, "genome_id": 0, "ref_seq": "TATGGAAAAATGGAATATGAAGTATTAAGTGATGATAACATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGATGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATAATATGTGGTCTACTTCTGGACTAGGGTTCTATGAATT", "start": 3124642, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 3124642, "genome_id": 0, "start": 3124614, "strand": "+"}, "seq": "AGGTCTTCCTAATCTTGAACCATCATAT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t99"}, {"forward_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 1269320, "genome_id": 0, "start": 1269294, "strand": "+"}, "seq": "CTCTTATATCAGGAGCAGCTATAGGA"}, "gene_name": "PF3D7_0829600", "insert_location": {"chrom": "Pf3D7_08_v3", "end": 1269456, "genome_id": 0, "ref_seq": "GCCTTAGCATTAATAACACTTATAGGAGGTATTTATATGACTAAAGGAAGAAAAAGTTCCATATGGCATAATTCAGAAATAAATGATACACTTTATGATGTTGTTCTTGAAACAGTGAATCAAGGAAATACAGATG", "start": 1269320, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 1269320, "genome_id": 0, "start": 1269294, "strand": "+"}, "seq": "TTTTACTCCTCTTTGAAAAGCCAACTTTA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t51"}, {"forward_primer": {"location": {"chrom": "Pf3D7_05_v3", "end": 329378, "genome_id": 0, "start": 329351, "strand": "+"}, "seq": "GTGTTAAAACAACAGGAGGAACACTAA"}, "gene_name": "PF3D7_0508000", "insert_location": {"chrom": "Pf3D7_05_v3", "end": 329550, "genome_id": 0, "ref_seq": "ATTGTGATGTATATAAATTCCCTTCTTCTTTATGTACCACATTATAAGAACCACGAACATATTCTTTTAAAAATGTTAACTTACTTCCAACAAATATATAATCAAAACAAAATTTTTTATTGTCGAAATGTTCTCGTTCAACCCCATTCATATTTCGGATATCATTATTTAA", "start": 329378, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_05_v3", "end": 329378, "genome_id": 0, "start": 329351, "strand": "+"}, "seq": "TGTTGTAGAATATTCGTGTCCGTATAGT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t33"}, {"forward_primer": {"location": {"chrom": "Pf3D7_10_v3", "end": 1386700, "genome_id": 0, "start": 1386672, "strand": "+"}, "seq": "TGCTACAGTTATATAGGACGATTTTGGT"}, "gene_name": "PF3D7_1035000", "insert_location": {"chrom": "Pf3D7_10_v3", "end": 1386869, "genome_id": 0, "ref_seq": "AGGGAACAGGTTAAATATATTGAAGACGTGGTTTGATAATCAGGTATTTCTTTAATTAAATATTCATGATATTGTTCGTTAGATACATAAATTAATTCGTCCTCCACATTTTGCTGTTCTGTTATAATTTGTGAAGAAGCTTGGTTTGTCTTATTTGGTAATTGCTCTT", "start": 1386700, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_10_v3", "end": 1386700, "genome_id": 0, "start": 1386672, "strand": "+"}, "seq": "AAAATGAGGACAAGGAAAATAATACATTCATAA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t62"}, {"forward_primer": {"location": {"chrom": "Pf3D7_07_v3", "end": 1358694, "genome_id": 0, "start": 1358666, "strand": "+"}, "seq": "AAGGATCATTTCATTGAAGCCTCTAAAA"}, "gene_name": "PF3D7_0731500", "insert_location": {"chrom": "Pf3D7_07_v3", "end": 1358911, "genome_id": 0, "ref_seq": "AAGAATCTCAACTTTTGCTTAAAAAAAATGATAACAAATATAATTCTAAATTTTGTAATGATTTGAAGAATAGTTTTTTAGATTATGGACATCTTGCTATGGGAAATGATATGGATTTTGGAGGTTATTCAACTAAGGCAGAAAACAAAATTCAAGAAGTTTTTAAAGGGGCTCATGGGGAAATAAGTGAACATAAAATTAAAAATTTTAGAAAAAA", "start": 1358694, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_07_v3", "end": 1358694, "genome_id": 0, "start": 1358666, "strand": "+"}, "seq": "CAAAGTTTCTCTCTAAATTCATTCCACCAT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t45"}, {"forward_primer": {"location": {"chrom": "Pf3D7_12_v3", "end": 2050130, "genome_id": 0, "start": 2050103, "strand": "+"}, "seq": "TTGGTTTTGATTATCTCCCATTTTCGT"}, "gene_name": "PF3D7_1250100", "insert_location": {"chrom": "Pf3D7_12_v3", "end": 2050314, "genome_id": 0, "ref_seq": "TTTTAAACTTTGAATCTGTTCAATTAATAACACTTCATCATTGTCTTCGCCTTTTATAATATCTCCATGATTATGTGCTCCTCTAATTAAGGTATCACTAACCTGTTGTTCATCTGTCGCATGAGAACTAGTAGATATATCTGGTTTATTTTTTTTCTTTCTTTTTGTTATTTCTAATTTTTTT", "start": 2050130, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_12_v3", "end": 2050130, "genome_id": 0, "start": 2050103, "strand": "+"}, "seq": "AAAAACATACCTAGACATTTGAATGTCTTAGA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t77"}, {"forward_primer": {"location": {"chrom": "Pf3D7_03_v3", "end": 141963, "genome_id": 0, "start": 141936, "strand": "+"}, "seq": "AAAGCGAATAATGCCAATATGTTGTTC"}, "gene_name": "PF3D7_0302600", "insert_location": {"chrom": "Pf3D7_03_v3", "end": 142181, "genome_id": 0, "ref_seq": "AGCATTTATAACAAAATATCAGAAGATGGAAAAACCAAAAATAGCCTACTTAGCGATATATCTAAATTATTTAAAATTGTAAAAGAAAGCAAATTAATATTTGTAACTGGATTTTTATTAACAACCTTGTCAGCAATTGTCGATTCATACATTCCAATTTTTCTATCCAAAACGGTATCTTTTGTAATGGAAAGAAAAAAATTTACATTTCTTAAAAT", "start": 141963, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_03_v3", "end": 141963, "genome_id": 0, "start": 141936, "strand": "+"}, "seq": "TTTTTACAACTGACAAATTTGTTTTGTGT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t15"}, {"forward_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 512199, "genome_id": 0, "start": 512168, "strand": "+"}, "seq": "CGAATCAAAGGTAGAAAATGATCTTGAAGAA"}, "insert_location": {"chrom": "Pf3D7_01_v3", "end": 512388, "genome_id": 0, "ref_seq": "TTAAATAAATTAAGTGAAGATGATTATGAAAAAAATTGTAGACATTTAAATTATTTAATAGATAATATAAGAGAATTATTTTTTAGTTCTAAAAATATTAGAATTCCTGATGTAGCTCGTAAATATTTGTGGGATAATCAAATTGAAGGAAATCTCAAAAAATTAATATCTTCAGAAACAAAATATAAA", "start": 512199, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 512199, "genome_id": 0, "start": 512168, "strand": "+"}, "seq": "CTGTGGATTATTTATACGATTCCTTTGACA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t5"}, {"forward_primer": {"location": {"chrom": "Pf3D7_06_v3", "end": 532195, "genome_id": 0, "start": 532167, "strand": "+"}, "seq": "ATCAAGCTGAATCTATCCTATTGGATCA"}, "gene_name": "PF3D7_0612900", "insert_location": {"chrom": "Pf3D7_06_v3", "end": 532378, "genome_id": 0, "ref_seq": "AGAACAATTGCTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACCCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCTCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACGTCCCCATGTGATCCAACGAATGCCAC", "start": 532195, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_06_v3", "end": 532195, "genome_id": 0, "start": 532167, "strand": "+"}, "seq": "GTATATTGTTTATTGGGATCCCCTTCC"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t39"}, {"forward_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 532690, "genome_id": 0, "start": 532660, "strand": "+"}, "seq": "GGGAAGAATGGTTTAATCGTAAAAATGAAG"}, "gene_name": "PF3D7_0113800", "insert_location": {"chrom": "Pf3D7_01_v3", "end": 532844, "genome_id": 0, "ref_seq": "ACTTTCTTAATTCTATGAATGAAGAATATACGCATATTAATTTAAATAACTTTATACATAATAATAACCATGATAATGACGAAAATTATACATTAGATCAGGTGGAAGGATATCCTATGACTAGTTATCAAAATAATATATACAAGGATTTTTT", "start": 532690, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 532690, "genome_id": 0, "start": 532660, "strand": "+"}, "seq": "GTCTTCGAAATAATGAACTCCCTTTTCT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t7"}, {"forward_primer": {"location": {"chrom": "Pf3D7_07_v3", "end": 298886, "genome_id": 0, "start": 298857, "strand": "+"}, "seq": "TAGATATATCATTCACAGTCGTCTCATGG"}, "gene_name": "PF3D7_0706100", "insert_location": {"chrom": "Pf3D7_07_v3", "end": 299005, "genome_id": 0, "ref_seq": "ACATTCAATATGGTTCTGAGCTTAAAGATGTTATCCTTATACATGTTTCTATTCTCATTCGTTATAACATCAATGACATATAAAACATATCGCTCAAATATTTTGTGAACAATATTATA", "start": 298886, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_07_v3", "end": 298886, "genome_id": 0, "start": 298857, "strand": "+"}, "seq": "TGTTAAGTTTTCTCTTGTGGAATCGAAT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t42"}, {"forward_primer": {"location": {"chrom": "Pf3D7_02_v3", "end": 278165, "genome_id": 0, "start": 278144, "strand": "+"}, "seq": "CTTACCATTCGCGCTTTCTTG"}, "gene_name": "PF3D7_0207000", "insert_location": {"chrom": "Pf3D7_02_v3", "end": 278336, "genome_id": 0, "ref_seq": "GGAATTTTCTTTTTTATGACTTTCTTCTCCTTGTTCAGAAGCTTCTTTTTCATCCTTTTTTTCTGCTGCGTCAGATAAATTGGGGGAAGCACTTGAAGATTCATTTCCTCCAGGAGTATTACTAGTACTTACTCCGTCCACATTTGGTTTTTCTTCCCCTAGAATTCTCAT", "start": 278165, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_02_v3", "end": 278165, "genome_id": 0, "start": 278144, "strand": "+"}, "seq": "AATATAGTACCAGAAAATGGAAGAATGTTAAAT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t11"}, {"forward_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 133491, "genome_id": 0, "start": 133463, "strand": "+"}, "seq": "TTTTGGTTCAGTACTATCTCTTGCATTT"}, "insert_location": {"chrom": "Pf3D7_04_v3", "end": 133701, "genome_id": 0, "ref_seq": "TTAGATTTTTTCCCTCCAGCAGGTGCACTAACTTTAGGTGTTTTAAATCTAGATGTATGTGGAACCCCATCTTTATTTGGTTTACCTCTATTTAATCTTTTACCAGCAGTAGAAACTACATTCTCTCGATTATCATTACCTACTTCAGTCTTTACAATTGTAGGAGGTGTTTTAACATGATTATCCCCTCCATGAGGAGTAACCCTTAAA", "start": 133491, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 133491, "genome_id": 0, "start": 133463, "strand": "+"}, "seq": "CGACACCAAATATTCAAGAAGAACC"}, "target_attributes": ["Excluded", "Microhaplotype"], "target_name": "t21"}, {"forward_primer": {"location": {"chrom": "Pf3D7_06_v3", "end": 145343, "genome_id": 0, "start": 145315, "strand": "+"}, "seq": "CAATCAACAAAAGCTGATGAATCATCAT"}, "gene_name": "PF3D7_0603600", "insert_location": {"chrom": "Pf3D7_06_v3", "end": 145501, "genome_id": 0, "ref_seq": "AATTTGAATAAAATTTATCATTCACAATATTATATTTTTGTTTCTTCTTTTTTCCCATAATATTATTATTTTGTTCACAATATATGTTCATGTGTCCCCTCTTTTTCTGTAAAATATTAAAATGTTTCTTACTATGCTTCTCTTCATTTTTAATAACA", "start": 145343, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_06_v3", "end": 145343, "genome_id": 0, "start": 145315, "strand": "+"}, "seq": "AAGGAAGGTAGAATATCAAATACAAGGGA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t38"}, {"forward_primer": {"location": {"chrom": "Pf3D7_07_v3", "end": 1149415, "genome_id": 0, "start": 1149387, "strand": "+"}, "seq": "TGGACATGTAGATATTTGACTAGTCGAA"}, "gene_name": "PF3D7_0727000", "insert_location": {"chrom": "Pf3D7_07_v3", "end": 1149585, "genome_id": 0, "ref_seq": "TAATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCCATTGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTATA", "start": 1149415, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_07_v3", "end": 1149415, "genome_id": 0, "start": 1149387, "strand": "+"}, "seq": "TGTATACTCTCACATATTCCCTTCAGTG"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t44"}, {"forward_primer": {"location": {"chrom": "Pf3D7_05_v3", "end": 958389, "genome_id": 0, "start": 958362, "strand": "+"}, "seq": "TTTAGAACAAGTGAGTTCAGGAATTGG"}, "gene_name": "PF3D7_0523000", "insert_location": {"chrom": "Pf3D7_05_v3", "end": 958506, "genome_id": 0, "ref_seq": "TACGAAATTTATAACAATTTTTACATATGCCAGTTCCTTTTTAGGTTTATATATTTGGTCATTAATAAAAAATGCACGTTTGACTTTATGTATTACTTGCGTTTTTCCGTTAATTTA", "start": 958389, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_05_v3", "end": 958389, "genome_id": 0, "start": 958362, "strand": "+"}, "seq": "TTTACTTTCTTATTACATATGACACCACAAACA"}, "target_attributes": ["Included", "DrugResistance"], "target_name": "t35"}, {"forward_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 2481106, "genome_id": 0, "start": 2481079, "strand": "+"}, "seq": "AGAAGATAAGCAATTATGGCAAAAGGT"}, "gene_name": "PF3D7_1361800", "insert_location": {"chrom": "Pf3D7_13_v3", "end": 2481288, "genome_id": 0, "ref_seq": "GCAACTTACTTTAGAAGCCATGAATTCGGCCGATGATCCATTGGAAGCATTTAAAAATACTTTATTAATATTTGATTTTAATTTATCTGAATTTGATAAGGATCCATATATAAATGGTGTGCATGATTTAGCATCTAATATAAAGGATTGTTTAAGAAAAGGAGGTCACAGTAAAATATATT", "start": 2481106, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 2481106, "genome_id": 0, "start": 2481079, "strand": "+"}, "seq": "TCCATTTAAATAATAACCTTTGATCACTTTGAT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t87"}, {"forward_primer": {"location": {"chrom": "Pf3D7_03_v3", "end": 850816, "genome_id": 0, "start": 850788, "strand": "+"}, "seq": "CCATTTTTATCTACACGTACTACATGCA"}, "gene_name": "PF3D7_0320400", "insert_location": {"chrom": "Pf3D7_03_v3", "end": 850989, "genome_id": 0, "ref_seq": "TCATATTCGTTTCAGCGTTTATAGAGCGAATATTATCGATTATGTCTATATTCCCTAAAATATGTACATAATAATCTCCATTTAATAATGTTACTTTCTTAAGAATATTTTTGTATATGACATCAAAGATATTACGAGTTAACAATACATCTACATTTCCGTCTATTATATAT", "start": 850816, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_03_v3", "end": 850816, "genome_id": 0, "start": 850788, "strand": "+"}, "seq": "AAATGTCTCTAAGAGTTACAGGAACAGA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t19"}, {"forward_primer": {"location": {"chrom": "Pf3D7_05_v3", "end": 958059, "genome_id": 0, "start": 958027, "strand": "+"}, "seq": "AAATGTTTACCTGCACAACATAGAAAATTATT"}, "gene_name": "PF3D7_0523000", "insert_location": {"chrom": "Pf3D7_05_v3", "end": 958221, "genome_id": 0, "ref_seq": "ATTTATATCATTTGTATGTGCTGTATTATCAGGAGGAACATTACCTTTTTTTATATCTGTGTTTGGTGTAATATTAAAGAACATGAATTTAGGTGATGATATTAATCCTATAATATTATCATTAGTATCTATAGGTTTAGTACAATTTATATTATCAATGAT", "start": 958059, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_05_v3", "end": 958059, "genome_id": 0, "start": 958027, "strand": "+"}, "seq": "TTTGATGTAATTACATCCATACAATAACTTGAT"}, "target_attributes": ["Included", "DrugResistance"], "target_name": "t34"}, {"forward_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 1992289, "genome_id": 0, "start": 1992261, "strand": "+"}, "seq": "TTTTACTTTTGCTACCATCAGGCATAAT"}, "gene_name": "PF3D7_1448500", "insert_location": {"chrom": "Pf3D7_14_v3", "end": 1992426, "genome_id": 0, "ref_seq": "ATAAACACCAGTACCATTTTTTTCTGATAAATTAATATTTTTTTGTATAACATCATATTTATCCCTTTTCGTGGTAAGTGCAGTATCCTGTTTTATTATTATATTATCGAATTCATCATGGTGTATATTTCTTTCAT", "start": 1992289, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 1992289, "genome_id": 0, "start": 1992261, "strand": "+"}, "seq": "ATCTTATTATGAAAGCTGTACATCCGATTTTA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t97"}, {"forward_primer": {"location": {"chrom": "Pf3D7_09_v3", "end": 1406405, "genome_id": 0, "start": 1406375, "strand": "+"}, "seq": "CAGATTATCATAGTGTTGTGGATGAAGATT"}, "gene_name": "PF3D7_0935600", "insert_location": {"chrom": "Pf3D7_09_v3", "end": 1406541, "genome_id": 0, "ref_seq": "TAATTAATTTTAATGATGATGTTACTTTAGAAACACAATCCATGATAGCACACGGAGGGTCTTTGTCAGAAATAGAAGAAACTGGAGATTTATCTTCAGATGTTGATAGATTACATTCATCAATCGAAACTACTCC", "start": 1406405, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_09_v3", "end": 1406405, "genome_id": 0, "start": 1406375, "strand": "+"}, "seq": "ATCACCTCGTATATATACAACATCATCTCTT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t58"}, {"forward_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 1037634, "genome_id": 0, "start": 1037602, "strand": "+"}, "seq": "ATTGAAGTACAATATGAAATCGATCTTGATAA"}, "gene_name": "PF3D7_0422500", "insert_location": {"chrom": "Pf3D7_04_v3", "end": 1037844, "genome_id": 0, "ref_seq": "ATCTTATAAAGTTAATGAAATAGCTCAACTTAATTTAACCATAGAAAGAGATTTAACAGATGATGCTGTGATTTTTGCACACTCACTTTATTTACCATTTGAAAAAGAAGAAATGTGGTGGATCGTTATCGGAATTAAAAAAATGAACTTACTTTTATCTATCAAAAAATTATCTTTATTGAAAAGTGTCAATAATATAAAAATTAATTT", "start": 1037634, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 1037634, "genome_id": 0, "start": 1037602, "strand": "+"}, "seq": "GTATTTGGTTTGTCAGGCAATTCG"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t28"}, {"forward_primer": {"location": {"chrom": "Pf3D7_12_v3", "end": 1237431, "genome_id": 0, "start": 1237407, "strand": "+"}, "seq": "CGAATGCTTGTGTGATCAATGAAA"}, "gene_name": "PF3D7_1230000", "insert_location": {"chrom": "Pf3D7_12_v3", "end": 1237603, "genome_id": 0, "ref_seq": "AGTATGAACACAAAACCGAAAGAGAGTTTAAAAAAAGATTCGATTTTAATGAAGGAAGAAATAACATAATAAATGTGTCAAATGTAAAGAAAACATGTAATATAGTTAAAAATGATTTAAAGGAATCTAACGAGATAAAAACTAATATAAACACAAGTTCTTATAATTTATA", "start": 1237431, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_12_v3", "end": 1237431, "genome_id": 0, "start": 1237407, "strand": "+"}, "seq": "ACCTCTTTCAAAACATTCTCTTTTATTAATACA"}, "target_attributes": ["Excluded", "Microhaplotype"], "target_name": "t76"}, {"forward_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 1128489, "genome_id": 0, "start": 1128461, "strand": "+"}, "seq": "CTGTCGCAAAAGAAGGTTTTGATAATAT"}, "gene_name": "PF3D7_0424900", "insert_location": {"chrom": "Pf3D7_04_v3", "end": 1128673, "genome_id": 0, "ref_seq": "ATTGAAAGAGTTAAAGGGAAAAATACAAAATTATTTAGATAATGATATTCAATTGAAAAATGGAAAACTCCTATATAAGGATACATGGGATAGAATTGTTTTGAAATTTTGTAGAACTGTAGCAATAGAAGAGGCAGAATACACTAGAAAATTTTATAGCTTAATTAATGATAAACATACAATT", "start": 1128489, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 1128489, "genome_id": 0, "start": 1128461, "strand": "+"}, "seq": "ATGAATGAATAAATCAATTTTACCACGTCATT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t32"}, {"forward_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 39953, "genome_id": 0, "start": 39920, "strand": "+"}, "seq": "CCAACTATATCTGTTCCATAAATGGTTATATTT"}, "gene_name": "PF3D7_1401100", "insert_location": {"chrom": "Pf3D7_14_v3", "end": 40137, "genome_id": 0, "ref_seq": "ACATAGAAATATGTGCGAAAATTGGGAAAAAAATAAATAACAGGAATTGTTATATAAATTGAATCAAGAATGGCACAAAGAAAATAATACTGGTGACTTTCACACTAGTGATATCACACACAATAGTGGTATTACATACAGTAGTGGTAACATACCTAGTGAAAGTAATAGTAGTTATATCCAA", "start": 39953, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 39953, "genome_id": 0, "start": 39920, "strand": "+"}, "seq": "ATTTATTTGGATTGAGATCTTAATGTTCAAAGT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t89"}, {"forward_primer": {"location": {"chrom": "Pf3D7_11_v3", "end": 1018953, "genome_id": 0, "start": 1018920, "strand": "+"}, "seq": "GCTATACTACTACTTATGTTACTTATACCACAT"}, "gene_name": "PF3D7_1126100", "insert_location": {"chrom": "Pf3D7_11_v3", "end": 1019085, "genome_id": 0, "ref_seq": "CTAGTGACTGTACATTTTTCATCTAATGTTCTATAGGATAAAGAATCTGAAGGACAATGCATATCATTACAAAAATAGCATGCACCTTTAAAATATAAATAAGAATGTCTTAACACAACAAAGGAATCAAAA", "start": 1018953, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_11_v3", "end": 1018953, "genome_id": 0, "start": 1018920, "strand": "+"}, "seq": "CTCCTTTAGGTATTACGGTAGCAATAAG"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t67"}, {"forward_primer": {"location": {"chrom": "Pf3D7_03_v3", "end": 221363, "genome_id": 0, "start": 221330, "strand": "+"}, "seq": "GGAACAAGAAGGATAATACCATTATTAATCCTA"}, "gene_name": "PF3D7_0304600", "insert_location": {"chrom": "Pf3D7_03_v3", "end": 221495, "genome_id": 0, "ref_seq": "TTGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTGCATAATCTAATTCGTCTTTAGGTTTATTAGCAGAGCCAGGCTTTATTCTAACTTGAATAC", "start": 221363, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_03_v3", "end": 221363, "genome_id": 0, "start": 221330, "strand": "+"}, "seq": "CCCATGTAGTGTAACTTGTGGAAATG"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t16"}, {"forward_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 748533, "genome_id": 0, "start": 748500, "strand": "+"}, "seq": "AGATGTTTATATCATTAACAAAGTTGAAGATCT"}, "gene_name": "PF3D7_0417200", "insert_location": {"chrom": "Pf3D7_04_v3", "end": 748696, "genome_id": 0, "ref_seq": "AATAGTTTTACTTGGGAAATTAAATTACTATAAATGTTTTATTATAGGAGGTTCCGTTGTTTATCAAGAATTTTTAGAAAAGAAATTAATAAAAAAAATATATTTTACTAGAATAAATAGTACATATGAATGTGATGTATTTTTTCCAGAAATAAATGAAAAT", "start": 748533, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 748533, "genome_id": 0, "start": 748500, "strand": "+"}, "seq": "ACATCGCTAACAGAAATAATTTGATACTC"}, "target_attributes": ["Included", "DrugResistance"], "target_name": "t26"}, {"forward_primer": {"location": {"chrom": "Pf3D7_07_v3", "end": 166035, "genome_id": 0, "start": 166002, "strand": "+"}, "seq": "AGGATATGTTCTTTTTAAAGTTCTCTTCATTTT"}, "gene_name": "PF3D7_0703900", "insert_location": {"chrom": "Pf3D7_07_v3", "end": 166167, "genome_id": 0, "ref_seq": "CTTTTATTTGAACTTTTTTATTTTCTTCATTATCAATATAAAAACAACAATCTTTAAATTTATGAAATAACACCCAACTTAATGTATAAAATATAATTTCTATAAAATCAAAATTAATGTAATAACCTAATT", "start": 166035, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_07_v3", "end": 166035, "genome_id": 0, "start": 166002, "strand": "+"}, "seq": "CGTTAAATGTAGAAAAGACGAAATCATCCA"}, "target_attributes": ["Excluded", "Microhaplotype"], "target_name": "t41"}, {"forward_primer": {"location": {"chrom": "Pf3D7_11_v3", "end": 1376185, "genome_id": 0, "start": 1376159, "strand": "+"}, "seq": "CTGCAAATTGAGCCATAGAAAAATGA"}, "gene_name": "PF3D7_1135100", "insert_location": {"chrom": "Pf3D7_11_v3", "end": 1376372, "genome_id": 0, "ref_seq": "TTCTCATTCCTTTGAAAATATGAACTATTCAACTCATCAAGTTTTTCATATGTTATTTCATAACTGCCATCATCTGAATCCTCTTCATCACTACTACTTAAAGAATGCTCTTCTACAGTTATATCTTCATAATGATTATTTTTAGGAAAATATTCTTCAGATCTTTCTATAAATTCTGTTCCACTAC", "start": 1376185, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_11_v3", "end": 1376185, "genome_id": 0, "start": 1376159, "strand": "+"}, "seq": "CGATAACACTAGATGTAAGATATGCATCAT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t68"}, {"forward_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 1113450, "genome_id": 0, "start": 1113422, "strand": "+"}, "seq": "GATTCTGCATGCAGTAATGAATCTATTG"}, "gene_name": "PF3D7_0424600", "insert_location": {"chrom": "Pf3D7_04_v3", "end": 1113604, "genome_id": 0, "ref_seq": "AAATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACAACTATTCAATTTGTTTGTATAAGTTTTAGGTCTTATTATTCTTTTACGTTTTA", "start": 1113450, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 1113450, "genome_id": 0, "start": 1113422, "strand": "+"}, "seq": "CGTAGCATGCTCAGATATTATGATGATT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t31"}, {"forward_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 495971, "genome_id": 0, "start": 495941, "strand": "+"}, "seq": "GCCACCAAAATATTATATACCACAAGACAA"}, "gene_name": "PF3D7_0113100", "insert_location": {"chrom": "Pf3D7_01_v3", "end": 496143, "genome_id": 0, "ref_seq": "TGAAAGTAGCGAATACCCTGTAGAAATTGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTGACTAAGCCTGATGTTACTGCACTACCTGAAGAATTACCATTAACGAGCTATAAAGTAACACCTACTTCTATTAATGTATTGCATAAAGAGGGCCCCACTTTAAAA", "start": 495971, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 495971, "genome_id": 0, "start": 495941, "strand": "+"}, "seq": "AAGGAAAATCTTTGGTGGGAAAAATAGA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t4"}, {"forward_primer": {"location": {"chrom": "Pf3D7_10_v3", "end": 377095, "genome_id": 0, "start": 377062, "strand": "+"}, "seq": "AAACAAATAGCATTCGATAAATTTGAAAATTTC"}, "gene_name": "PF3D7_1009200", "insert_location": {"chrom": "Pf3D7_10_v3", "end": 377209, "genome_id": 0, "ref_seq": "AACCAAAAAATGATACCTGTACGTTTTTCTCCAGGAGAAACAAAAAAATTAGAAAGGATTCTCAAAAAAGTAGACGACTTTTTCTGTGCCAATATTAAAGCTCAATATACTTGC", "start": 377095, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_10_v3", "end": 377095, "genome_id": 0, "start": 377062, "strand": "+"}, "seq": "CTTCATCTATATAGTCCCCGATGAATGA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t60"}, {"forward_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 181557, "genome_id": 0, "start": 181524, "strand": "+"}, "seq": "TCTATTAGCTTTTTCAAACCTTTCATTATTGTT"}, "gene_name": "PF3D7_0104100", "insert_location": {"chrom": "Pf3D7_01_v3", "end": 181673, "genome_id": 0, "ref_seq": "TTCATTCTTTTTTTAACGAAAACTATTCATCTCAAAAATATAAGATATTTTATATGACGAATGCCATTGTATTTTTTGTTACGTAAAACCTGACTTCTTCAAGGAAAACACATGCG", "start": 181557, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 181557, "genome_id": 0, "start": 181524, "strand": "+"}, "seq": "AGCTTAGGCAAAAATTGGTGAAAATG"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t3"}, {"forward_primer": {"location": {"chrom": "Pf3D7_10_v3", "end": 992371, "genome_id": 0, "start": 992338, "strand": "+"}, "seq": "TGCCTATCATTAATGGAAAATATCCTCATTATA"}, "gene_name": "PF3D7_1023700", "insert_location": {"chrom": "Pf3D7_10_v3", "end": 992544, "genome_id": 0, "ref_seq": "TTTTTAAAAAAAAAAATTATGATATAAAATCTTCAATTAATAAAAGATCTATCCAGTTCTTTAAAGACACTAATATAGATCATTATATAGCATATGAATATTATAAGGAGGACCGTACGGAATTTATATTAACTATTATGAATGAAAAAAATATTACTCATCAAGAAACTCAA", "start": 992371, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_10_v3", "end": 992371, "genome_id": 0, "start": 992338, "strand": "+"}, "seq": "TCCCTTTCAACTTTTTCATTTCAAGACT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t61"}, {"forward_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 407379, "genome_id": 0, "start": 407346, "strand": "+"}, "seq": "TCGTCTTTCTGTTCATTATCCATATAATCTTTT"}, "gene_name": "PF3D7_1410300", "insert_location": {"chrom": "Pf3D7_14_v3", "end": 407571, "genome_id": 0, "ref_seq": "TCTCCTTCCTTTTCATTCTTTACTTTATTTCTATTAATACACAACTCTCCTTGAGTTAAGAGATTTACGATATTATCAATATTGTTTTCTTTCATATACTTCAACTTTTTACTATTCATTTTTAAAAGATAATTAACCAAGTTACTCATGTTTGTATTAGATGGTATGTTCCCAATTTTTTCGTCTTTTCTT", "start": 407379, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 407379, "genome_id": 0, "start": 407346, "strand": "+"}, "seq": "TGAACTCTTTAAATTATCCTTTTTGAATATCCA"}, "target_attributes": ["Excluded", "Microhaplotype"], "target_name": "t93"}, {"forward_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 1102389, "genome_id": 0, "start": 1102362, "strand": "+"}, "seq": "CGTAGAGGTGTTGATGTTAATATGGAG"}, "gene_name": "PF3D7_0424400", "insert_location": {"chrom": "Pf3D7_04_v3", "end": 1102578, "genome_id": 0, "ref_seq": "GAAGAAATAAATAAAATAATTTATACAAACGAATTTAATAATTATGAAGATAAAATATATGAAGATGTCAAATATATTAAAGAACAGGAAAATGAAATGTACTTGAGAGATGGAATTGAAGAGTTACATATGGATGAACCAAGTGGGGATGTATATTTTGATGATCAAGATGATTATATATTTTTAGAT", "start": 1102389, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 1102389, "genome_id": 0, "start": 1102362, "strand": "+"}, "seq": "CATCCAAACATACATCCTCTTTTTGTTC"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t30"}, {"forward_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 2114975, "genome_id": 0, "start": 2114942, "strand": "+"}, "seq": "TGTATCTATAGTCGATTTTGTTATTCTAAGCAT"}, "gene_name": "PF3D7_1352900", "insert_location": {"chrom": "Pf3D7_13_v3", "end": 2115142, "genome_id": 0, "ref_seq": "ATCATTAAGTAAAAAATTTACGGTATCGACATTAACAGTGTAATAATTTCTTCCTAAATTTAAATGTTCTATATAATTCAAATTTAATACGGTATTTAACCTTTCTTCAAGTATTATCATTGCATTAATTTGAAACATAAGTAAAAAATTATTAGCACTTCTAAAAT", "start": 2114975, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_13_v3", "end": 2114975, "genome_id": 0, "start": 2114942, "strand": "+"}, "seq": "ACATTTTATTGTTGTTAGAATACCTCTAGTTT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t84"}, {"forward_primer": {"location": {"chrom": "Pf3D7_12_v3", "end": 63166, "genome_id": 0, "start": 63135, "strand": "+"}, "seq": "ACATTCTATTAAAAACTTTGGGTACTCCTAA"}, "gene_name": "PF3D7_1200700", "insert_location": {"chrom": "Pf3D7_12_v3", "end": 63280, "genome_id": 0, "ref_seq": "TATAATTTCACCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGCAATGAAAAAAACAACCCTTTCATA", "start": 63166, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_12_v3", "end": 63166, "genome_id": 0, "start": 63135, "strand": "+"}, "seq": "ACACATTTATCTTATTTACCCGTATCTCATATA"}, "target_attributes": ["Excluded", "Microhaplotype"], "target_name": "t72"}, {"forward_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 141778, "genome_id": 0, "start": 141751, "strand": "+"}, "seq": "GATACACGTGATGAATACCATATAGCC"}, "gene_name": "PF3D7_0402300", "insert_location": {"chrom": "Pf3D7_04_v3", "end": 141945, "genome_id": 0, "ref_seq": "CTTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCAAATCTGCACACAAAGAAATTAAAAAAGAATCAGAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAATT", "start": 141778, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 141778, "genome_id": 0, "start": 141751, "strand": "+"}, "seq": "AGATCAAGCATTTGTCTGTCTATATCTCTT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t22"}, {"forward_primer": {"location": {"chrom": "Pf3D7_10_v3", "end": 1399544, "genome_id": 0, "start": 1399515, "strand": "+"}, "seq": "GGTCAAACTCATTCTGAATTAAATCCTGA"}, "gene_name": "PF3D7_1035300", "insert_location": {"chrom": "Pf3D7_10_v3", "end": 1399711, "genome_id": 0, "ref_seq": "AACATCAGAACATAGTAAAGATTTAAATAATAATGATTCAAAAAATGAATCTAGTGATATTATTTCAGTAAATAATAAATCAAATAAAGTACAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACAA", "start": 1399544, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_10_v3", "end": 1399544, "genome_id": 0, "start": 1399515, "strand": "+"}, "seq": "GTTTTTGATTAGGAAAAGGTTCTGTTGAAA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t63"}, {"forward_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 748230, "genome_id": 0, "start": 748200, "strand": "+"}, "seq": "AGGTCTAGGAAATAAAGGAGTATTACCATG"}, "gene_name": "PF3D7_0417200", "insert_location": {"chrom": "Pf3D7_04_v3", "end": 748436, "genome_id": 0, "ref_seq": "GAAATGTAATTCCCTAGATATGAAATATTTTTGTGCAGTTACAACATATGTGAATGAATCAAAATATGAAAAATTGAAATATAAGAGATGTAAATATTTAAACAAAGAAACTGTGGATAATGTAAATGATATGCCTAATTCTAAAAAATTACAAAATGTTGTAGTTATGGGAAGAACAAGCTGGGAAAGCATTCCAAAAAAATTTA", "start": 748230, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 748230, "genome_id": 0, "start": 748200, "strand": "+"}, "seq": "ACAATATAACATTTATCCTATTGCTTAAAGGTT"}, "target_attributes": ["Included", "DrugResistance"], "target_name": "t25"}, {"forward_primer": {"location": {"chrom": "Pf3D7_03_v3", "end": 85440, "genome_id": 0, "start": 85407, "strand": "+"}, "seq": "ACCCATAGAAATGTTAAATGATATTTTTCTTCT"}, "gene_name": "PF3D7_0301400", "insert_location": {"chrom": "Pf3D7_03_v3", "end": 85646, "genome_id": 0, "ref_seq": "AACTTTTTAACACTATCATTATAATTATGTCTTTTATTTTCATATTTTTCTTTATAATAATTTATATCCTTTAATTTTTCTTTCATCAAATTTAACCATTTATCATTTAAATTCTCTTTTTCCACAGCTCCAGCATTTTTATTTATATCATCTACAACTACATCTTCCTTCACATAATTATTTATATAAAAATTATTATCATCTAA", "start": 85440, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_03_v3", "end": 85440, "genome_id": 0, "start": 85407, "strand": "+"}, "seq": "GAAGAAGTATTAAATGAAGAATTTTCAGATGCT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t14"}, {"forward_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 109912, "genome_id": 0, "start": 109879, "strand": "+"}, "seq": "TTTTAAAACTGGCAAATTATTTATTTCTGTCAT"}, "gene_name": "PF3D7_0401900", "insert_location": {"chrom": "Pf3D7_04_v3", "end": 110087, "genome_id": 0, "ref_seq": "AATATTTGTATATATTCTAGTAAACACTTTAGGTACACCTGCAAGTACCTCAACATCTGAATTATATAAATCTTTAGAAAAACAACTAATATCCTTACTCGATATATTTATTTTTATACCAAGAATAACAGCCATATAAACCAAAACTCTCTCAAATACATGTGATACAGGTAAA", "start": 109912, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 109912, "genome_id": 0, "start": 109879, "strand": "+"}, "seq": "CATGAAACCGAAAACCCATTTTTCTTA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t20"}, {"forward_primer": {"location": {"chrom": "Pf3D7_07_v3", "end": 729975, "genome_id": 0, "start": 729943, "strand": "+"}, "seq": "AATAAGAAATATGTCTTACAAGGAGATGTTTT"}, "gene_name": "PF3D7_0716700", "insert_location": {"chrom": "Pf3D7_07_v3", "end": 730088, "genome_id": 0, "ref_seq": "TTTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATGTTACGATATAAAAAAATATAGATGTTCATTATTGAAG", "start": 729975, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_07_v3", "end": 729975, "genome_id": 0, "start": 729943, "strand": "+"}, "seq": "AAACATTATGTAGTCAACATATGAAGGAAA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t43"}, {"forward_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 534941, "genome_id": 0, "start": 534908, "strand": "+"}, "seq": "TGTATGTGTGTTGATTGTAATTATAAGAATTGT"}, "gene_name": "PF3D7_0113800", "insert_location": {"chrom": "Pf3D7_01_v3", "end": 535110, "genome_id": 0, "ref_seq": "AATACTCCGTCAGATATTCAAAATGAATGTATTTGTTCAAAAATAAATGAAGATAGAAATAATGATATGATAAACATATCTGAAATATATTATCGTTTCATTAAATTTATAACAATGATTGAAATATATTTGTGTGTAATAGAGGAAATTAAAAGGGAAGAATGGGAAA", "start": 534941, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 534941, "genome_id": 0, "start": 534908, "strand": "+"}, "seq": "CTACAAAAATTATGAAAAAGTTTGGTTCCTTTT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t9"}, {"forward_primer": {"location": {"chrom": "Pf3D7_09_v3", "end": 685601, "genome_id": 0, "start": 685583, "strand": "+"}, "seq": "CACGCGAACCAAACAACG"}, "gene_name": "PF3D7_0916400", "insert_location": {"chrom": "Pf3D7_09_v3", "end": 685792, "genome_id": 0, "ref_seq": "ACAAAGGAACAAGATAATTTTTTCCATTTTTATAAAAGTAATATATATGATATGGAAAATAGAACCTGTAATAATAATATATTACAATATTGTGTTATGAATAATAAATCATATTTATTTCATAATATATCATCCAAAAAAAATATATATATAAAAAAAAAGAATCATCAGTTTTCTTTATTCATATATTC", "start": 685601, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_09_v3", "end": 685601, "genome_id": 0, "start": 685583, "strand": "+"}, "seq": "GGGCGAAATTCTATGAATGTATTATTAATAGAA"}, "target_attributes": ["Excluded", "Microhaplotype"], "target_name": "t56"}, {"forward_primer": {"location": {"chrom": "Pf3D7_02_v3", "end": 470492, "genome_id": 0, "start": 470459, "strand": "+"}, "seq": "TGAACATGAAGAATATTGACATGAAACATTATA"}, "gene_name": "PF3D7_0211700", "insert_location": {"chrom": "Pf3D7_02_v3", "end": 470676, "genome_id": 0, "ref_seq": "ATACACATAAGAAAAAAAAAATTTATTTATTCTTACAAAAAGAATATAAAAACAAAATTTTGGGATTTATAAATTTTTATAAACATATAACACACAAAATAAAAAAGAAACAAGAAAATGTTCATGATAAAATCACTTTTTTAAAATGTCTAAAGGAACTCTTTTTTGTCACACATACAAATAA", "start": 470492, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_02_v3", "end": 470492, "genome_id": 0, "start": 470459, "strand": "+"}, "seq": "GTATGTATTATACCCTCCATTTGATTATTCTCT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t12"}, {"forward_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 145449, "genome_id": 0, "start": 145416, "strand": "+"}, "seq": "TGTTCGATATGTTTAAATATATGATTCTCGAAA"}, "gene_name": "PF3D7_0103300", "insert_location": {"chrom": "Pf3D7_01_v3", "end": 145622, "genome_id": 0, "ref_seq": "AAACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGTATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATAAGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTAA", "start": 145449, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 145449, "genome_id": 0, "start": 145416, "strand": "+"}, "seq": "CCAATATGTCAAGGTATATTAAAGTATGGTATC"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t1"}, {"forward_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 339168, "genome_id": 0, "start": 339139, "strand": "+"}, "seq": "TGAGATAATCCTCCTGGAATATTTGTCAT"}, "gene_name": "PF3D7_0806300", "insert_location": {"chrom": "Pf3D7_08_v3", "end": 339357, "genome_id": 0, "ref_seq": "ATCATTACTATTCTTTATCCATATATATGTTGTTATATCAGTTGCACCTGAGGGTGGATTCAAACCTCTTGCTTGTATAATATATGCACGTACTACTAAATTACGTGTTAATCTATATTCTCTTACTAAATCATCACATTTCTTTATCATTTCTTTTTTTAAATACATTGTCTTTTCATCATACACATT", "start": 339168, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 339168, "genome_id": 0, "start": 339139, "strand": "+"}, "seq": "CTGAAGCGGTTGGATATTTGAAATATATATGT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t48"}, {"forward_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 1100656, "genome_id": 0, "start": 1100629, "strand": "+"}, "seq": "CCCAAAACGGTTAATACTGAAGTTAGA"}, "gene_name": "PF3D7_0424400", "insert_location": {"chrom": "Pf3D7_04_v3", "end": 1100831, "genome_id": 0, "ref_seq": "AATGTTCTAAGATCTGATGGAAAAATATCTGATCAAGGTTCTCAGAAAAGTCCTCCTAAGGAACTTTCTAATAAACAAATGACTCCTGCTCAACGTAAGAATGTGCCACATTTTGTTGAAAGAAGAGGCTATGGAAATAGTCATGTTAGGGGTAACGCACTTAAAAAAATTAGTA", "start": 1100656, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 1100656, "genome_id": 0, "start": 1100629, "strand": "+"}, "seq": "AGAAGAAGGACTTTTATAATTATCATCACCAT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t29"}, {"forward_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 179903, "genome_id": 0, "start": 179874, "strand": "+"}, "seq": "AACAACAAGCTTTGTCGCTAAAATTAATT"}, "gene_name": "PF3D7_0104100", "insert_location": {"chrom": "Pf3D7_01_v3", "end": 180115, "genome_id": 0, "ref_seq": "CTTTCGATACAGGACATATAGATCATAATATAAACGAATATGAAAAACATTTTACAATTTTAAAAGAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGAAAATAATACATTTTTAAATAGAATAAGAACTGAACAAGTCAAAAAATCGTTATTAATAACAGGTATTATAAACGAAAATATT", "start": 179903, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 179903, "genome_id": 0, "start": 179874, "strand": "+"}, "seq": "TCTGATACCTATAGCTTCCATATTTTCATATTT"}, "target_attributes": ["Excluded", "Microhaplotype"], "target_name": "t2"}, {"forward_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 120215, "genome_id": 0, "start": 120188, "strand": "+"}, "seq": "GTCCTTATCACATCCTCCATTGTTTAC"}, "gene_name": "PF3D7_1403200", "insert_location": {"chrom": "Pf3D7_14_v3", "end": 120351, "genome_id": 0, "ref_seq": "CTTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTCTGGACAATTACAATATTCATATCCATGAGTATTCTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAAA", "start": 120215, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 120215, "genome_id": 0, "start": 120188, "strand": "+"}, "seq": "ACAGAAAGAATGGTTTAGAAATGTACGAAT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t90"}, {"forward_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 534215, "genome_id": 0, "start": 534182, "strand": "+"}, "seq": "TTCAGATGTGATAAATATATGTGACATTTGTAA"}, "gene_name": "PF3D7_0113800", "insert_location": {"chrom": "Pf3D7_01_v3", "end": 534368, "genome_id": 0, "ref_seq": "TGATAAAAAAAGAAAATGTAACAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAAAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTGT", "start": 534215, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_01_v3", "end": 534215, "genome_id": 0, "start": 534182, "strand": "+"}, "seq": "AAAAATATAAGAGATTCAAAGGGTCAGAC"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t8"}, {"forward_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 336468, "genome_id": 0, "start": 336438, "strand": "+"}, "seq": "AATACATGAATATGATTAACAACGAACCCA"}, "gene_name": "PF3D7_0806200", "insert_location": {"chrom": "Pf3D7_08_v3", "end": 336647, "genome_id": 0, "ref_seq": "TAAATTTACAGAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCCACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCACAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTAT", "start": 336468, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 336468, "genome_id": 0, "start": 336438, "strand": "+"}, "seq": "ACTAAAAGGAAGACAAGCTGAAAACAT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t47"}, {"forward_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 102326, "genome_id": 0, "start": 102298, "strand": "+"}, "seq": "ACTTGTCGCTATACCTTCATCTATTGAA"}, "gene_name": "PF3D7_0801300", "insert_location": {"chrom": "Pf3D7_08_v3", "end": 102500, "genome_id": 0, "ref_seq": "TTAATTTTCTCAAGTAACATATTTTTGTCTTGACTACTTTCATCTGTAAATGGAACGACTACTCTTTGCTTACCTGCAAAAAGGACAACTGACATATGAGCCTTATCCTTACTTACATTCGAATTAAAGACCATAGATTCTAAAAATGGTATAGTTCCTTTTAACCAATAATCC", "start": 102326, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 102326, "genome_id": 0, "start": 102298, "strand": "+"}, "seq": "TGTTGAAGAGTCAAGTTTTGTTCAGAA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t46"}, {"forward_primer": {"location": {"chrom": "Pf3D7_09_v3", "end": 1437114, "genome_id": 0, "start": 1437081, "strand": "+"}, "seq": "CATCATAATCATCTAATGATGTTAATCCTTGTA"}, "gene_name": "PF3D7_0936300", "insert_location": {"chrom": "Pf3D7_09_v3", "end": 1437303, "genome_id": 0, "ref_seq": "CTAAAACCTGACAGCTTTGTACAGTTATATTTACCCAATTAGAATGTTCAAACATATTTAAGTGTTGCCATTCTTCAAATAATTTTTTTTCATATTCAGTTTTTGGTTGGTTTTTAAATTCTTTTGATACTGTACCTTCTGCGGATGGTATAGGGAAGTTAAAAATTTTATTACGTACTTTGTTTGATT", "start": 1437114, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_09_v3", "end": 1437114, "genome_id": 0, "start": 1437081, "strand": "+"}, "seq": "GCACCATCATTAAATTTAGAAGAAACCC"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t59"}, {"forward_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 279663, "genome_id": 0, "start": 279635, "strand": "+"}, "seq": "CGGATAAATGTTTAGTTATTAGCCAGGT"}, "gene_name": "PF3D7_1407700", "insert_location": {"chrom": "Pf3D7_14_v3", "end": 279786, "genome_id": 0, "ref_seq": "GAGTAATAGTGATTCATATAAGGTAAATTGTATTAATTTCTCTGAAGGATTTTGTTGCTGTCATCCAATAAATAATTTAGCACTATTATATGGAGAGTATCAACAAAATCAAGAATCAAAAAT", "start": 279663, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 279663, "genome_id": 0, "start": 279635, "strand": "+"}, "seq": "CATTACTTATGGGAAGTTTCGGTAATTTCATA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t92"}, {"forward_primer": {"location": {"chrom": "Pf3D7_09_v3", "end": 1178894, "genome_id": 0, "start": 1178862, "strand": "+"}, "seq": "GAACGTTGAGAAATTACCTTTAGAAGATTACT"}, "gene_name": "PF3D7_0929400", "insert_location": {"chrom": "Pf3D7_09_v3", "end": 1179078, "genome_id": 0, "ref_seq": "ACAAATTATCCTTAGCCCCAGATATGGTAAAGACATATCACTGTTATAAATTAGGAAAGCAAGCAGCTGAATTATTAGAATCTATCATTTTAAAGAAAAAGTTCGTAAGATTTAGAGTTACTGATGCTATTGATGTATATGATTTCTTTTATATAAAGAAAGTTTTATCCAGTCGTATTAAGAA", "start": 1178894, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_09_v3", "end": 1178894, "genome_id": 0, "start": 1178862, "strand": "+"}, "seq": "GCTCTTTTGTCTTGTAAAAATTCATTATATTCT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t57"}, {"forward_primer": {"location": {"chrom": "Pf3D7_03_v3", "end": 654002, "genome_id": 0, "start": 653972, "strand": "+"}, "seq": "TCACCTAACGGTATATTTTTATCTCGTACA"}, "gene_name": "PF3D7_0316200", "insert_location": {"chrom": "Pf3D7_03_v3", "end": 654175, "genome_id": 0, "ref_seq": "ATATTTTTATAATTTCCTTTCATCTTATTTTTTTCTTTATATTTTTTTTTTTCATATGTAAGATTTATATAATCACTTTCGCTTTTTCTAACCCTTTTGAACTTTTTAAATGTACTTCGTTCATTATTTCTAATTCTCGTAAACACAAGAATAAATATTTTGATATATCTTAT", "start": 654002, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_03_v3", "end": 654002, "genome_id": 0, "start": 653972, "strand": "+"}, "seq": "TTATGTATTTTTCAAAAATCGGCACGTTT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t18"}, {"forward_primer": {"location": {"chrom": "Pf3D7_12_v3", "end": 943258, "genome_id": 0, "start": 943227, "strand": "+"}, "seq": "ACCCTACTTATACAAAGAGATAAAGAAGTAG"}, "gene_name": "PF3D7_1223400", "insert_location": {"chrom": "Pf3D7_12_v3", "end": 943428, "genome_id": 0, "ref_seq": "AATCAACTATAATTAAAAATAGTGGAATTATTGAAAACTTTGGAGATATTGATTATATCTTTACGGATAAAACAGGAACACTAACAGAAAATGTCATGGTGCTTAAAGTTATACATATAGGTTTTGATGTTATACATGCAGAAAATGAAAAAAATTCCATACAAGGTAAT", "start": 943258, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_12_v3", "end": 943258, "genome_id": 0, "start": 943227, "strand": "+"}, "seq": "AATTCCCTTTTTGTTTGGTTTCCATATT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t75"}, {"forward_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 802525, "genome_id": 0, "start": 802494, "strand": "+"}, "seq": "AAGCATCTGAACATTAAAGTTCAAACAAATA"}, "gene_name": "PF3D7_0418000", "insert_location": {"chrom": "Pf3D7_04_v3", "end": 802713, "genome_id": 0, "ref_seq": "TAAATTATTATAGAAAGATAGAAGTTATTTTATATGAATGGTTATATTTTCATTATAATAATGTATATAACACCAAAGTAAAAAAACAAAAATTTATATTTACCCAACAAAAAAAAGACATATCAAAACATAACAAGTTATATCTTCAGTATGATCAAAATAAAAGAAACTCTGAAATAGAACATACA", "start": 802525, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 802525, "genome_id": 0, "start": 802494, "strand": "+"}, "seq": "GCACATCGAATAATCTTCTTTGTGATT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t27"}, {"forward_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 549993, "genome_id": 0, "start": 549962, "strand": "+"}, "seq": "CATAAAAGAGGAAATCCACATACAATGGATA"}, "gene_name": "PF3D7_0810800", "insert_location": {"chrom": "Pf3D7_08_v3", "end": 550218, "genome_id": 0, "ref_seq": "AACTAACAAATTATGATAATCTAGTTTATGATATAAAAAATTATTTAGAACAAAGATTAAATTTTCTTGTATTAAATGGAATACCTCGTTATAGGATACTATTTGATATTGGATTAGGATTTGCGAAGAAACATGATCAATCTATTAAACTCTTACAAAATATACATGTATATGATGAGTATCCACTTTTTATTGGATATTCAAGAAAAAGATTTATTGCCCATT", "start": 549993, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_08_v3", "end": 549993, "genome_id": 0, "start": 549962, "strand": "+"}, "seq": "GTGTATTTATTACAACATTTTGATCATTCATGC"}, "target_attributes": ["Included", "DrugResistance"], "target_name": "t49"}, {"forward_primer": {"location": {"chrom": "Pf3D7_03_v3", "end": 618396, "genome_id": 0, "start": 618367, "strand": "+"}, "seq": "GGGACACTACAGACAAAAATAAATGATCT"}, "gene_name": "PF3D7_0315200", "insert_location": {"chrom": "Pf3D7_03_v3", "end": 618581, "genome_id": 0, "ref_seq": "AAAAAGAGATTATAGAAGTGGAAAGAAGACATATATAATACAAGCTCTACAATATGCATTAACATATTATAGCAAACTTTCAAATAGAAAGGAAGCACCTAAAGTAACCATGTTATTTACAGATGGAAATGATTCCTATGAATCAGAAAAGGGATTACAGGATATTGCATTATTATATAGAAAAG", "start": 618396, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_03_v3", "end": 618396, "genome_id": 0, "start": 618367, "strand": "+"}, "seq": "AGAAACTCCTACTACCAATAATTTGACATTTT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t17"}, {"forward_primer": {"location": {"chrom": "Pf3D7_02_v3", "end": 805822, "genome_id": 0, "start": 805795, "strand": "+"}, "seq": "TTGGAAAATTTGAGAATCCTATGTGCT"}, "gene_name": "PF3D7_0220100", "insert_location": {"chrom": "Pf3D7_02_v3", "end": 805942, "genome_id": 0, "ref_seq": "TTAATTATGAAGACAGTCTCACGACTTCATGTTATATTGATGAAAACAAATCCGATTCATCCTATGAAACTGAAGAAAATGTAAACTATAATAATAAAATGGGTAAACGCAAAAATTTAG", "start": 805822, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_02_v3", "end": 805822, "genome_id": 0, "start": 805795, "strand": "+"}, "seq": "TTCGATTTGCCTACAATTTGTGATTCTA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t13"}, {"forward_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 544718, "genome_id": 0, "start": 544686, "strand": "+"}, "seq": "AACCCAGATAATCATTTATTAAATACAGACAC"}, "gene_name": "PF3D7_0412300", "insert_location": {"chrom": "Pf3D7_04_v3", "end": 544861, "genome_id": 0, "ref_seq": "ATATATTTTACATAATAACAATCCTTCATGTAATGATTATAATTTAAATAATCTTTCATTTAATATAAATAAATATATTAATGAAGAAAAAGGCAAAAATAAAAAAACAAATCAACATATATCAGAACAATTTTTATTTCCTA", "start": 544718, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_04_v3", "end": 544718, "genome_id": 0, "start": 544686, "strand": "+"}, "seq": "CTGCAGCACACATTATAACTAAATGTG"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t24"}, {"forward_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 150105, "genome_id": 0, "start": 150075, "strand": "+"}, "seq": "CCGAAAATAGAACTCCATATGTTCATTACC"}, "gene_name": "PF3D7_1404300", "insert_location": {"chrom": "Pf3D7_14_v3", "end": 150294, "genome_id": 0, "ref_seq": "ATAATAATAGTAATATAAAGAATTATTCAGCTGTAGATATATTCTCACCCAAAAAAACTGGAAAGGAATGTATTAAATGTCTCCCAGATAATTTTTGTGAATGCGAATGTAGTTGTAAAAATAAAACAGGTTTTTCAATGAAATATAGACATGCCAGTAAGGGATCTAAAGGATATAGTAAAAAAATGA", "start": 150105, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 150105, "genome_id": 0, "start": 150075, "strand": "+"}, "seq": "GTCTGGAACGAGAAGATGTCTTTG"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t91"}, {"forward_primer": {"location": {"chrom": "Pf3D7_02_v3", "end": 109807, "genome_id": 0, "start": 109776, "strand": "+"}, "seq": "CCACCATTTCTTCATTTTAATTTTGAATGGT"}, "gene_name": "PF3D7_0202100", "insert_location": {"chrom": "Pf3D7_02_v3", "end": 109982, "genome_id": 0, "ref_seq": "AACTTATGTTCATGAGCTAATTTCCCACAAATACTCCATAACGAACTTTTCATTTTATTAAATTTATCTCTCAAAAGAGAATGACTATAATGCCATATTAAATACATATCTTTCCTTTCTAATTTTCCTGGTAATTCTATTATCATTCTTTCTAAATCTTCTTCTGTAACTTTTC", "start": 109807, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_02_v3", "end": 109807, "genome_id": 0, "start": 109776, "strand": "+"}, "seq": "ACCATTTGGATTAAAACCTTCAGATTTAAATA"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t10"}, {"forward_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 3214351, "genome_id": 0, "start": 3214318, "strand": "+"}, "seq": "TGTTAAAATATTTTCCAAAGAATTCAATTAGCG"}, "gene_name": "PF3D7_1478000", "insert_location": {"chrom": "Pf3D7_14_v3", "end": 3214478, "genome_id": 0, "ref_seq": "ATCGTTTTGAATTGTTAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGAGTGATTTTGGAATAGCTACAATGAATGAAACCGAACATACTAGATCTTTTTATGGATT", "start": 3214351, "strand": "+"}, "reverse_primer": {"location": {"chrom": "Pf3D7_14_v3", "end": 3214351, "genome_id": 0, "start": 3214318, "strand": "+"}, "seq": "TCAATTGATGGTTGCCTTTCGATT"}, "target_attributes": ["Included", "Microhaplotype"], "target_name": "t100"}], "panel_info": [{"panel_name": "heomev1", "reactions": [{"panel_targets": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "reaction_name": "full"}]}], "sequencing_info": [{"library_kit": "TruSeq i5/i7 barcode primers", "library_layout": "paired-end", "library_screen": "40 uL reaction containing 10 uL of bead purified digested product, 18uL of nuclease-free water, 8uL of 5X secondary PCR master mix, and 5 uL of 10 uM TruSeq i5/i7 barcode primers", "library_selection": "RANDOM", "library_source": "GENOMIC", "library_strategy": "WGS", "nucl_acid_amp": "https://www.paragongenomics.com/targeted-sequencing/amplicon-sequencing/cleanplex-ngs-amplicon-sequencing/", "nucl_acid_amp_date": "2019-07-15", "nucl_acid_ext": "https://www.paragongenomics.com/targeted-sequencing/amplicon-sequencing/cleanplex-ngs-amplicon-sequencing/", "nucl_acid_ext_date": "2019-07-15", "pcr_cond": "10 min at 95C, 13 cycles for high density samples (or 15 cycles for low density samples) of 15 sec at 98C and 75 sec at 60C", "seq_center": "UCSF", "seq_date": "2019-07-15", "seq_instrument_model": "NextSeq 550 instrument", "seq_platform": "ILLUMINA", "sequencing_info_name": "Mozambique2018"}, {"library_layout": "paired-end", "library_selection": "RANDOM", "library_source": "GENOMIC", "library_strategy": "WGS", "seq_date": "2020-01-01", "seq_instrument_model": "Multiple", "seq_platform": "ILLUMINA", "sequencing_info_name": "Pf7Plus"}], "project_info": [{"project_collector_chief_scientist": "Greenhouse, Bryan", "project_description": "Heome1 targeted amplicon sequencing in 2018 from patients from several health clinics in provinces Inhassoro, Mandlakazi, and Namaacha", "project_name": "MOZ2018"}, {"project_description": "PathWeaver assemblies of Heome1 from large collection of global samples", "project_name": "PathWeaverHeome1"}], "specimen_info": [{"collection_country": "Mozambique", "collection_date": "2018-06-07", "geo_admin3": "Inhassoro", "host_taxon_id": 9606, "lat_lon": "-21.5535,35.1819", "parasite_density_info": [{"parasite_density": 477719.34375, "parasite_density_method": "qpcr"}], "project_id": 0, "specimen_collect_device": "dried blood spot", "specimen_name": "8025874217", "specimen_store_loc": "UCSF Greenhouse Lab", "specimen_taxon_id": [5833], "storage_plate_info": {"plate_col": 12, "plate_name": "8", "plate_row": "C"}}, {"collection_country": "Mozambique", "collection_date": "2018-04-30", "geo_admin3": "Namaacha", "host_taxon_id": 9606, "lat_lon": "-25.9871,32.0326", "parasite_density_info": [{"parasite_density": 875.130981445312, "parasite_density_method": "qpcr"}], "project_id": 0, "specimen_collect_device": "dried blood spot", "specimen_name": "8025874266", "specimen_store_loc": "UCSF Greenhouse Lab", "specimen_taxon_id": [5833], "storage_plate_info": {"plate_col": 7, "plate_name": "8", "plate_row": "B"}}, {"collection_country": "India", "collection_date": "2012-08-01", "geo_admin3": "NA", "host_taxon_id": 9606, "project_id": 1, "specimen_collect_device": "Dried Blood spot", "specimen_name": "5tbx", "specimen_store_loc": "Multiple", "specimen_taxon_id": [5833]}, {"collection_country": "Papua New Guinea", "collection_date": "NA", "geo_admin3": "NA", "host_taxon_id": 9606, "project_id": 1, "specimen_collect_device": "Dried Blood spot", "specimen_name": "XUC009", "specimen_store_loc": "Multiple", "specimen_taxon_id": [5833]}], "library_sample_info": [{"library_prep_plate_info": {"plate_col": 12, "plate_name": "8", "plate_row": "C"}, "library_sample_name": "8025874217", "panel_id": 0, "sequencing_info_id": 0, "specimen_id": 0}, {"library_prep_plate_info": {"plate_col": 7, "plate_name": "8", "plate_row": "B"}, "library_sample_name": "8025874266", "panel_id": 0, "sequencing_info_id": 0, "specimen_id": 1}, {"library_sample_name": "5tbx", "panel_id": 0, "sequencing_info_id": 1, "specimen_id": 2}, {"library_sample_name": "XUC009", "panel_id": 0, "sequencing_info_id": 1, "specimen_id": 3}], "bioinformatics_methods_info": [{"additional_methods": [{"additional_argument": ["--strictErrors", "--illumina", "--removeOneSampOnlyOneOffHaps", "--excludeCommonlyLowFreqHaplotypes", "--excludeLowFreqOneOffs", "--rescueExcludedOneOffLowFreqHaplotypes"], "program": "SeekDeep processClusters", "program_description": "Compare across samples for each target to create population level identifiers and do post artifact cleanup", "program_version": "v2.6.5"}], "bioinformatics_method_name": "SeekDeep", "demultiplexing_method": {"program": "SeekDeep extractorPairedEnd", "program_description": "Takes raw paired-end reads and demultiplexes on primers and does QC filtering", "program_version": "v2.6.5"}, "denoising_method": {"additional_argument": ["--illumina", "--qualThres 25,20", "--trimFront 1", "--trimBack 1"], "program": "SeekDeep qluster", "program_description": "Takes sequences per sample per target and clusters them", "program_version": "v2.6.5"}}, {"additional_methods": [{"additional_argument": ["--overWriteDir", "--fracCutOff 0.005", "--dout popClusteringTrimmedParagon", "--replicateMinTotalReadCutOff 10", "--clusterCutOff 5", "--pat _heome1", "--numThreads 10", "--groupingsFile /tank/data/plasmodium/falciparum/pfdata/metadata/meta.tab.txt", "--genome2bit /tank/data/genomes/plasmodium/genomes/pf/genomes/Pf3D7.2bit", "--trimBedFnp /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_inserts_trimmed1.bed"], "program": "PathWeaver runProcessClustersOnRecon", "program_description": "Compare across samples for each target to create population level identifiers and do post artifact cleanup", "program_version": "1.0.0-dev"}], "demultiplexing_method": {"additional_argument": ["--bamExtractTrimToRegion", "--bed /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_withPrimers.bed", "--genomeDir /tank/data/genomes/plasmodium/genomes/pf/genomes/", "--primaryGenome Pf3D7", "--bam bams/{SAMPLE}.sorted.bam"], "program": "PathWeaver BamExtractPathwaysFromRegion", "program_description": "Extract reads from a bam file for a specific genomic locatioon and then assembles local haplotypes for that region", "program_version": "1.0.0-dev"}, "denoising_method": {"additional_argument": ["--bamExtractTrimToRegion", "--bed /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_withPrimers.bed", "--genomeDir /tank/data/genomes/plasmodium/genomes/pf/genomes/", "--primaryGenome Pf3D7", "--bam bams/{SAMPLE}.sorted.bam"], "program": "PathWeaver BamExtractPathwaysFromRegion", "program_description": "Extract reads from a bam file for a specific genomic locatioon and then assembles local haplotypes for that region", "program_version": "1.0.0-dev"}}], "bioinformatics_run_info": [{"bioinformatics_methods_id": 0, "bioinformatics_run_name": "Mozambique2018-SeekDeep", "run_date": "2022-04-01"}, {"bioinformatics_methods_id": 1, "bioinformatics_run_name": "PathWeaver-Heome1", "run_date": "2024-09-03"}], "representative_microhaplotypes": {"targets": [{"mhap_location": {"chrom": "Pf3D7_01_v3", "end": 145621, "genome_id": 0, "start": 145448, "strand": "+"}, "microhaplotypes": [{"seq": "AACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGTATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATATGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTA"}, {"seq": "AACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGTATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATAAGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTA"}, {"seq": "AACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGAATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATATGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTA"}, {"seq": "AACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGAATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATAAGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTA"}], "target_id": 79}, {"mhap_location": {"chrom": "Pf3D7_02_v3", "end": 109981, "genome_id": 0, "start": 109806, "strand": "+"}, "microhaplotypes": [{"seq": "ACTTATGTTCATGAGCTAATTTCCCACAAATACTCCATAACGAACTTTTCATTTTATTAAATTTATCTCTCAAAAGAGAATGACTATAATGCCATATTAAATACATATCTTTCCTTTCTAATTTTCCTGGTAATTCTATTATCATTCTTTCTAAATCTTCTTCTGTAACTTTT"}, {"seq": "ACTCATGTTCATGAGCTAATTTCCCACAAATACTCCATAACGAACTTTTCATTTTATTAAATTTATCTCTCAAAAGAGAATGACTATAATGCCATATTAAATACATATCTTTCCTTTCTAATGTTCCTGGTAATTCTATTATCATTCTTTCTAAATCTTCTTCTGTAAGTTTT"}, {"seq": "ACTTATGTTCATGAGCTAATTTCCCACAAATACTCCATAACGAACTTTTCATTTTATTAAATTTATCTCTCAAAAGAGAATGACTATAATGCCATATTAAATACATATCTTTCCTTTCTAATTTTCCTGGTAATTCTATTATCATTCTTTCTAAATCTTCTTCTGTAAGTTTT"}], "target_id": 98}, {"mhap_location": {"chrom": "Pf3D7_14_v3", "end": 3214477, "genome_id": 0, "start": 3214350, "strand": "+"}, "microhaplotypes": [{"seq": "TCGTTTTGAATTGTTAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGATTGATTTTGGAATAGCTACAATGAATGAAAACGAACATACTAGATCTTTTTATGGCT"}, {"seq": "TCGTTTTGAATTGTTAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGAGTGATTTTGGAATAGCTACAATGAATGAAACCGAACATACTAGATCTTTTTATGGCT"}, {"seq": "TCGTTTTGAATTGTCAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGAGTGATTTTGGAATAGCTACAATGAATGAAACCGAACATACTAGATCTTTTTATGGCT"}, {"seq": "TCGTTTTGCATTGTCAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGAGTGATTTTGGAATAGCTACAATGAATGAAAGCGAACATACTAGATCTTTTTATGGCT"}], "target_id": 99}, {"mhap_location": {"chrom": "Pf3D7_02_v3", "end": 278335, "genome_id": 0, "start": 278164, "strand": "+"}, "microhaplotypes": [{"seq": "GAATTTTCTTTTTTATGACTTTCTTCTCCTTGTTCAGAAGCTTCTTTTTCATCCTTTTTTTCTGCTGCGTCAGATAAATTGGGGGAAGCACTTGAAGATTCATTTCCTCCAGGAGTATTACTAGTACTTACTCCTTCCACATTTGGTTTTTCTTCCCCTAGAATTCTCA"}, {"seq": "GAATTTTCTTTTTTATGACTTTCTTCTCCTTGTTCAGAAGCTTCTTTTTCATCCTTTTTTTCTGCTGCGTCAGATAAATTGGGGGAAGCACTTGAAGATTCATTTCCTCCAGGAGTATTACTAGTACTTACTCCGTCCACATTTGGTTTTTCTTCCCCTAGAATTCTCA"}, {"seq": "GAATTTTCTTTTTTATGACTTTCTTCTCCTTGTTCAGAAGCTTCTTTTTCATCCTTTTTTTCTGCTGCGTCAGATAAATTGGGGGAAGCACTTGAAGATTCATTTCCTCCAGGAGTATCACTAGTACTTACTCCGTCCATATTTGGTTTTTCTTCCCTTAGAATTCTCA"}], "target_id": 42}, {"mhap_location": {"chrom": "Pf3D7_02_v3", "end": 470675, "genome_id": 0, "start": 470491, "strand": "+"}, "microhaplotypes": [{"seq": "TACACATAAGAAAAAAAAAATTTATTTATTCTTACAAAAAGAATATAAAAACAAAATTTTGGGATTTATAAATTTTTATAAACATATAACACACAAAATAAAAAAGAAACAAGAAAATGTTCATGATAAAATCACTTTTTTAAAATGTCTAAAGGAACTCTTTTTTGTCACACATACAAATG"}, {"seq": "TACACATAAGAAAAAAAAAATTTATTTATTCTTACAAAAAGAATATAAAAACAAAATTTTGGGATTTATAAATTTTTATAAACATATAACACACAAAATAAAAAAGAAACAAGAAAATGTTCATGATAAAATCACTTTTTTAAAATGTCTAAAGGAACTCTTTTTTGTCACACATACAAATA"}, {"seq": "TACACATAAGAAAAAAAAAATTTATTTATTCTTACAAAAAGAATATAAAAACAAAATTTTGGGATTTATAAATTTTTATAAACGTATAACACACAAAATAAAAAAGAAACAAGAAAATGTTCATGATAAAATCACTTTTTTAAAATGTCTAAAGGAACTCTTTTTTGTCACACATACAAATA"}], "target_id": 78}, {"mhap_location": {"chrom": "Pf3D7_02_v3", "end": 805941, "genome_id": 0, "start": 805821, "strand": "+"}, "microhaplotypes": [{"seq": "TAATTATGAAGACAGTCTCACGACTGCATGTTATATTGATGAAAACAAATCCGATTCATCCTATAAAACTGAAGAAGAAAATGTAAACTATAATAATAAAATGGGTAAACGCAAAAATTTA"}, {"seq": "TAATTATGAAGACAGTCTCACGACTTCATGTTATATTGATGAAAACAAATCCGATTCATCCTATGAAACTGAAGAAAATGTAAACTATAATAATAAAATGGGTAAACGCAAAAATTTA"}], "target_id": 95}, {"mhap_location": {"chrom": "Pf3D7_03_v3", "end": 85645, "genome_id": 0, "start": 85439, "strand": "+"}, "microhaplotypes": [{"seq": "ACTTTTTAACACTATCATTATAATTATGTCTTTTATTTTCATATTTTTCTTTATAATAATTTATATCCTTTAATTTTTCTTTCATCAAATTTAACCATTTATCATTTAAATTCTCTTTTTCCACAGCTCCAGCATTTTTATTTATATCATCTACAACTACATCTTCCTTCACATAATTATTTATATAAAAATTATTATCATCTA"}, {"seq": "ACTTTTTAACACTATCATTATAATTATGTCTTTTATTTTCATATTTTTCTTTATAATAATTTATATCCTTTAATTTTTCTTTCATCAAATTTAACCATTTATCATTTAAATTCTCTTTTTCCACAGCTCCAGCATTTTTATTTATATCATCTACAACTACATCTTCCTTCACATAATTATTTATATAAAAACTATTATCATCTA"}], "target_id": 73}, {"mhap_location": {"chrom": "Pf3D7_03_v3", "end": 142180, "genome_id": 0, "start": 141962, "strand": "+"}, "microhaplotypes": [{"seq": "GCATTTATAACAAAATATCAGAAGATGGAAAAACCAAAAATAGCCTACTTAGCGATATATCAAAATTATTTAAAATTGTAAAAGAAAGCAAATTAATATTTGTAACTGGATTTTTATTAACAACCTTGTCAGCAATTGTAGATTCATACATTCCAATTTTTCTATCCAAAACGGTATCTTTTGTAATGGAAAGAAAAAAATTTACATTTCTTAAAA"}, {"seq": "GCATTTATAACAAAATATCAGAAGATGGAAAAACCAAAAATAGCCTACTTAGCGATATATCAAAATTATTTAAAATTGTAAAAGAAAGCAAATTAATATTTGTAACTGGATTTTTATTAACAACCTTGTCAGCAATTGTCGATTCATACATTCCAATTTTTTTATCCAAAACGGTATCTTTTGTAATGGAAAGAAAAAGTTTTACATTTCTTAAAA"}], "target_id": 37}, {"mhap_location": {"chrom": "Pf3D7_03_v3", "end": 221494, "genome_id": 0, "start": 221362, "strand": "+"}, "microhaplotypes": [{"seq": "TGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTGCATAATCTAATTGGTCTTTAGGTTTATTAGCAGAGCCAGGCTTTATTCTAACTTGAATA"}, {"seq": "TGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTTCATAATTTAATTCGTCTTTAGGTTTATTAGCAGAGCCAGGCTTTATTCTAACTTGAATA"}, {"seq": "TGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTTCATAATCTAATTCGTCTTTAGGTTTATTAGCAGAGCCAGGCTTTATTCTAACTTGAATA"}, {"seq": "TGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTTCATAATCTAATTGGTCTTTAGGTTTATCAGCAGAGCCAGGCTTTATTCTAACTTGAATA"}], "target_id": 57}, {"mhap_location": {"chrom": "Pf3D7_03_v3", "end": 618580, "genome_id": 0, "start": 618395, "strand": "+"}, "microhaplotypes": [{"seq": "AAAAGAGATTATAGAAGTGGAAAGAAGACATATATAATACAAGCTCTACAATATGCATTAACATATTATAGCAAACTTTCAAATAGAAAGGAAGCACCTAAAGTAACCATGTTATTTACAGATGGAAATGATTCCTATGAATCAGAAAAGGGATTACAGGATATTGCATTATTATATAGAAAA"}, {"seq": "AAAAGAGATTATAGAAGTGGAAAGAAGACATATATAATACAAGCTCTACGATATGCATTAACATATTATAGCAAACTTTCAAATAGAAAGGAAGCACCTAAAGTAACCATGTTATTTACAGATGGAAATGATTCCTATGAATCAGAAAAGGGATTACAGGATATTGCATTATTATATAGAAAA"}, {"seq": "AAAAGAGATTATAGAAGTGGAAAGAAGACATATATAATACAAGCTCTACGATATGCATTAACATATTATAGCAAACTTTCAAATAGAAAGGAAGCACCTAAAGTAACCATGTTATTTACAGATGGAAATGATCCCTATGAATCAGAAAAGGGATTACAGGATATTGCATTATTATATAGAAAA"}], "target_id": 94}, {"mhap_location": {"chrom": "Pf3D7_03_v3", "end": 654174, "genome_id": 0, "start": 654001, "strand": "+"}, "microhaplotypes": [{"seq": "TATTTTTATAATTTCCTTTCATCTTATTTTTTTCTTTATATTTTTTTTTTTCATATGTAAGATTTATATAATCACTTTCGCTTTTTCTAACGCTTTTGAACTTTTTAAATGTACTTCGTTCATTATTTCTAATTCTCGTAAACACAAGAATAAATATTTTGATATATCTTA"}, {"seq": "TATTTTTATAATTTCCTTTCATCTTATTTTTTTCTTTATATTTTTTTTTTTCATATGTAAGATTTATATAATCACTTTCGCTTTTTCTAACCCTTTTGAACTTTTTAAATGTACTTCGTTCATTATTTCTAATTCTCGTAAACACAAGAATAAATATTTTGATATATCTTA"}, {"seq": "TATTTTTATAATTTCCTTTCATCTTATTTTTTTCTTTATATTTTTTTTTTTCATATGTAAGATTTATATAATCACTTTCGCTTTTTCTAACGCTTTTGAACTTTTTAAATGTACTTCCTTCATTATTTCTAATTCTCGTAAACACAAGAATAAATATTTTGATATATCTTA"}], "target_id": 90}, {"mhap_location": {"chrom": "Pf3D7_03_v3", "end": 850988, "genome_id": 0, "start": 850815, "strand": "+"}, "microhaplotypes": [{"seq": "CATATTCGTTTCAGCGTTTATAGAGCGAATATTATCGATTATGTCTATATTCCCTAAAATATGTACATAATAATCTCCATTTAATAATGTTACTTTCTTAAGAATATTTTTGTATATGACATCAAAGATATTACGAGTTAACAATACATCTACATTTCCGTCTATTATATA"}, {"seq": "CATATTCGTTTCAGCGTTTATAGAGCGAATATTATCGATTATGTCTATATTCCCTAAAATATGTACATAATAATCTCCATTTAATAATGTTACTTTCTTAAGAATATTTTTGTATATGACATCAAAGATATTACGAGTTAACAATACATCTACATTTCGGTCTATTATATA"}, {"seq": "CATATTCGTTTCAGCGTTTATAGAGCGAAAATTATCGATTATGTCTATATTCCCTAAAATATGTACATAATAATCTCCATTTAATAATGTTACTTTCTTAAGAATATTTTTGTATATGACATCAAAGATATTACGAGTTAACAATACATCTACATTTCGGTCTATTATATA"}], "target_id": 48}, {"mhap_location": {"chrom": "Pf3D7_01_v3", "end": 180114, "genome_id": 0, "start": 179902, "strand": "+"}, "microhaplotypes": [{"seq": "TTTCGATACAGGACATATAGATCATAATATAAACGAATATGAAAAACATTTTACAATTTTAAAAAAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGATAATAATACATTTTTAAATAAAATAAGAAATGAACAAGTGAGGGCATCGTTATTAATAACAGGTATTATAAACGAAAATAT"}, {"seq": "TTTCGATACAGGACATATAGATCATAATATAAACGAATATGAAAAACATTTTACAATTTTAAAAAAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGATAATAATACATTTTTAAATAGAATAAGCCATGAAGGAATCAAAAAATCGTTATTAATAACAGGTATTATAAACGAAAATAT"}, {"seq": "TTTCGATATAGGACATATAGATCATAATATAAACGAATATGAAAAACGTTTTACAATTTTAAAAGAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGAAAATAATACATTTTTAAATAGATTAAGAAATGAACAAGTGAGGGCATCGTTATTAATAACAGGTATTATAAACGAAAATAT"}, {"seq": "TTTCGATACAGGACATATAGATCATAATATAAACGAATATGAAAAACATTTTACAATTTTAAAAAAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGATAATAATACATTTTTAAATAGATTAAGAAATGAACAAGTGAGGGCATCGTTATTAATAACAGGTATTATAAACGAAAATAT"}], "target_id": 82}, {"mhap_location": {"chrom": "Pf3D7_04_v3", "end": 110086, "genome_id": 0, "start": 109911, "strand": "+"}, "microhaplotypes": [{"seq": "ATATTTGTATATATTCTAGTAAACACTTTAGGTACACCTGCAAGTACCTCAACATCTGAATTATATAAATCTTTAGAAAAACAACTAATATCCTTACTCCATATATTTATTTTTATACCAAGAATAACAGCCATATAAACCAAAACTCTCTCAAATACATGTGATACAGGTAA"}, {"seq": "ATATTTGTATATATTCTAGTAAACACTTTAGGTACACCTGCAAGTACCTCAACATCTGAATTATATAAATCTTTAGAAAAACAACTAATATCCTTACTACATATATTTATTTTTATACCAAGAATAACAGCCATATAAACCAAAACTCTCTCAAATGCATGTGATACAGGTAA"}, {"seq": "ATATTTGTATATATTCTAGTAAACACTTTAGGTACACCTGCAAGTACCTCAACATCTGAATTATATAAATCTTTAGAAAAACAACTAATATCCTTACTCCATATATTTATTTTTATACCAAGAATAACAGCCATATAAACCAAAACTCTCTCAAATGCATGTGATACAGGTAA"}], "target_id": 74}, {"mhap_location": {"chrom": "Pf3D7_04_v3", "end": 133700, "genome_id": 0, "start": 133490, "strand": "+"}, "microhaplotypes": [{"seq": "TAGATTTTTTCCCTTCAGCAGGTGCCCTCACTTTAGGTGTTTTAAACTTAGTTGTATGTGGAACCCCATCTTTATTTGGTTTACCTCTATTTAATCTTTTACCAGCAGTAGAAACTACATTCTCTCGATTATCATTACCTACTTCAGTCTTTACAATTGTAGGAGGTGTTTTAACATGATTATCCCCTCCATGAGGAGTAACCCTTAA"}, {"seq": "TAGATTTTTTCCCTTCAGCAGGTGCCCTCACTTTAGGTGTTTTAAACTTAGTTGTATGTGGAACCCCATCTTTATTTGCTTTACCTCTATTTAATCTTTTACCAGCAGTAGAAACTACATTCTCTCGATTATCATTACCTACTTCAGTCTTTACAATTGTAGGAGGTGTTTTAACATGATTATCCCCTCCATGAGGAGTAACCCTTAA"}, {"seq": "TAGATTTTTTCCCTCCAACAGATGCACTCACTTTAGGTGTTTTAAACTTAGTTGTATGTTGACCCCCCTCATTATTTAGTTTACCTTTATTTAATCTTTTACCAGCAGTAGAAACTACATTCTCTCGATTATCATTACCTACTTCAGTCTTTACAATTGTAGGAGGTGTTTTAACATGATCATCCCCTCCATGAGGAGTAACCCTTAA"}], "target_id": 43}, {"mhap_location": {"chrom": "Pf3D7_04_v3", "end": 141944, "genome_id": 0, "start": 141777, "strand": "+"}, "microhaplotypes": [{"seq": "TTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCGAATCTGCACACAAAGAAATTAAAAAAGAATCAAAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAAT"}, {"seq": "TTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCAAATCTGCACACAAAGAAATTAAAAAAGAATCAGAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAAT"}, {"seq": "TTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCAAATCTGCACACAAAGAAATTAAAAAAGAATCAAAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAAT"}, {"seq": "TTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCGAATCTGCACACAAAGAAATTAAAAAAGAATCAGAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAAT"}], "target_id": 70}, {"mhap_location": {"chrom": "Pf3D7_04_v3", "end": 415825, "genome_id": 0, "start": 415652, "strand": "+"}, "microhaplotypes": [{"seq": "TGCTAGTTTTGCTGCTCATGAAAATAAAAGCTACTCATATGAAGGTCGTACATATAAAATGTATCCACCTGAATTTAATACATTAATGTTAAAAGCAGATTATTTTATAAGAGATATAAATACACGAGGATTTAGAGAAGTAAATATGGATTCATGTAAATCATATACAAA"}, {"seq": "TGCTAGTTTTGCTGCTCATGAAAATAAAAGCTACTCATATGAAGGTCGTACATATAAAATGTATCCACCTGAATTTAATGCATTAATGTTAAAAGCAGATTATTTTATAAGAGATATAAATACACGAGGATTTAGAGAAGTAAATATGGATTCATGTAAATCATATACAAA"}, {"seq": "TGCTAGTTTTGCTGCTCATGAAAATAAAAGCTACTCATATGAAAGTCGTACATATAAAATGTATCCACCTGAATTTAATACATTAATGTTAAAAGCAGATTATTTTATAAGAGATATAAATACACGAGGATTTAGAGAAGTAAATATGGATTCATGTAAATCATATACAAA"}], "target_id": 15}, {"mhap_location": {"chrom": "Pf3D7_04_v3", "end": 544860, "genome_id": 0, "start": 544717, "strand": "+"}, "microhaplotypes": [{"seq": "TATATTTTACATAATAACAATCTTTCATGTAATGATTATAATTTAAATAATCTTTCATTTAATATAAATAAATATATTAATGAAGAAAAAGGCAAAAATAAAAAAACAAATCAACATATATCAGAACAATTTTTATTTCCT"}, {"seq": "TATATTTTACATAATAACAATCTTTCATGTAATGATTATAATTTAAATAATCTTTCATTTAATATAAATAAATATATAAATGAAGAAAAAGGCAAAAATAAAAAAACAAATCAACATATATCAGAACAATTTTTATTTCCT"}, {"seq": "TATATTTTACATAATAACAATCCTTCATGTAATGATTATAATTTAAATAATCTTTCATTTAATATAAATAAATATATAAATGAAGAAAAAGGCAAAAATAAAAAAACAAATCAACATATATCAGAACAATTTTTATTTCCT"}], "target_id": 96}, {"mhap_location": {"chrom": "Pf3D7_04_v3", "end": 748435, "genome_id": 0, "start": 748229, "strand": "+"}, "microhaplotypes": [{"seq": "AAATGTAATTCCCTAGATATGAAATATTTTCGTGCAGTTACAACATATGTGAATGAATCAAAATATGAAAAATTGAAATATAAGAGATGTAAATATTTAAACAAAGAAACTGTGGATAATGTAAATGATATGCCTAATTCTAAAAAATTACAAAATGTTGTAGTTATGGGAAGAACAAACTGGGAAAGCATTCCAAAAAAATTT"}], "target_id": 72}, {"mhap_location": {"chrom": "Pf3D7_04_v3", "end": 748695, "genome_id": 0, "start": 748532, "strand": "+"}, "microhaplotypes": [{"seq": "ATAGTTTTACTTGGGAAATTAAATTACTATAAATGTTTTATTATAGGAGGTTCCGTTGTTTATCAAGAATTTTTAGAAAAGAAATTAATAAAAAAAATATATTTTACTAGAATAAATAGTACATATGAATGTGATGTATTTTTTCCAGAAATAAATGAAAA"}], "target_id": 58}, {"mhap_location": {"chrom": "Pf3D7_04_v3", "end": 802712, "genome_id": 0, "start": 802524, "strand": "+"}, "microhaplotypes": [{"seq": "AAATTATTATAGAAAGATAGAAGTTATTTTATATGAATGGTTATATTTTCATTATAATAATGTATATAACACCAAAGTAAAAAAACAAAAATTTATATTTACCCAACAAAAAAAAGACATATCAAAACATAACAAGTTATATCTTCAGTATGATCAAAATAAAAGAAATTCTGAAATAAAACATAC"}, {"seq": "AAATTATTATAGAAAGATAGAAGTTATTTTATATGAATGGTTATATTTTCATTATAATAATGTATATAACACCAAAGTAAAAAAACAAAAATTTATATTTACCCAACAAAAAAAAGACATATCAAAACATAACAAGTTATATCTTCAGTATGATCAAAATAAAAGAAATTCTGAAATAGAACATAC"}, {"seq": "AAATTATTATAGAAAGATAGAAGTTATTTTATATGAATGGTTATATTTTCATTATAATAATGTATATAACACCAAAGTAAAAAAACAAAAATTTATATTTACCCAACAAAAAAAAGACATATCAAAACATAACAAGTTATATCTTCAGTATGATCAAAATAAAAGAAATTCTGAAATAGAACGTAC"}], "target_id": 92}, {"mhap_location": {"chrom": "Pf3D7_04_v3", "end": 1037843, "genome_id": 0, "start": 1037633, "strand": "+"}, "microhaplotypes": [{"seq": "TCTTATAAAGTTAATGAAATAGCTCAACTTAATTTAACCATAGAAAGAGATTTAACAGATGATGCTGTGATTTTTGCACACTCACTTTATTTACCATTTGAAAAAGAAGAAATGTGGTGGATCGTTATCGGAATTAAAAAAATGAACTTACTTTTATCTATCAAAAAATTATCTTTATTGAAAAGTATCAATAATATAAAAATTAATT"}, {"seq": "TCTTATAAAGTTAATGAAATAGCTCAACTTAATTTAACCATAGAAAGAGATTTAACAGATGATGCTGTGATTTTTGCACACTCACTTTATTTACCATTTGAAAAAGAAGAAATGTGGTGGATCGTTATCGGAATTAAAAAAATGAACTTACTTTTATCTATCAAAAAATTATCTTTATTGAAAAGTGTCAATAATATAAAAATTAATT"}, {"seq": "TCTTATAAAGTTAATGAAATTGCTCAACTTAATTTAACCATAGAAAGAGATTTAACAGATGATGCTGTGATTTTTGCACACTCACTTTATTTACCATTTGAAAAAGAAGAAATGTGGTGGATCGTTATCGGAATTAAAAAAATGAACTTACTTTTATCTATCAAAAAATTATCTTTATTGAAAAGTATCAATAATATAAAAATTAATT"}], "target_id": 52}, {"mhap_location": {"chrom": "Pf3D7_04_v3", "end": 1100830, "genome_id": 0, "start": 1100655, "strand": "+"}, "microhaplotypes": [{"seq": "ATGTTCTAAGATCTGGTGGAAAAATATCTGATCAAGGTTCTGAGATAAGTCCTCCTAAGGCACTTTCTAATAAACAAATGACTCCTGCTCAACGTAAGAATGTGCCACATTTTGTTGAAAGAAGAGGCTATGGAAATAGTCATGTTAGGGGTAACGCACTTAAAAAAATTAGT"}, {"seq": "ATGTTCTAAGATCTGATGGAAAAATATCTGATCAAGGTTCTCAGAAAAGTCCTCCTAAGGAACTTTCTAATAAACAAATGACTCCTGCTCAACGTAAGAATGTGCCACATTTTGTTGAAAGAAGAGGCTATGGAAATAGTCATGTTAGGGGTAACGCACTTAAAAAAATTAGT"}, {"seq": "ATGTTCTAAGATCTGGTGGAAAAATATCTGATCAAGGTTCTCAGAAAAGTCCTCCTAAGGAACTTTCTAATAAACAAATGACTCCTGCTCAACGTAAGAATGTGCCACATTTTGTTGAAAGAAGAGGCTATGGAAATAGTCATGTTAGGGGTAACTCACTTAAAAAAATTAGT"}], "target_id": 81}, {"mhap_location": {"chrom": "Pf3D7_01_v3", "end": 181672, "genome_id": 0, "start": 181556, "strand": "+"}, "microhaplotypes": [{"seq": "TCATTCTTTTTTTAACGAAAACTATTCATCTCAAAAATATAAGATATTTTATATGACGAATGCCATTGTATTTTTTGTTACGTAAAACCTGACTTCTTCAAGGAAAACACATGC"}, {"seq": "TCATTCTTTTTTTAACTAAAACTATTCATCTCAAAAATATAAGATATTTTATATGACGAATGCCATTGTATTTTTTGTTACGTAAAACCTGACTTCTTCAAGGAAAACACATGC"}], "target_id": 64}, {"mhap_location": {"chrom": "Pf3D7_04_v3", "end": 1102577, "genome_id": 0, "start": 1102388, "strand": "+"}, "microhaplotypes": [{"seq": "AAGAAATAAATAAAATAATTTATACAAACGAATTTAATAATTATGAAGATAAAATATATGAAGATGTCAAATATATTAAAGAACAGGAAAATGAAATGTACTTGAGAGATGGAATTGAAGAGTTACATATGGATGAACCAAGTGGGGATGTATATTTTGATGATCAAGATGATTATATATTTTTAGA"}, {"seq": "AAGAAATAAATAAAATAATTTATACAAACGAATTTAATAATTATGAAGATAAAATATATGAAGATGTCAAATATATTAAAGAACAGGAAAATGAAATATACTTGAGAGATGGAATTGAAGAGTTACATATGGATGAACCAAGTCGGGATGTATATTTTGATGATGAAAATGATTATATATTTTTAGA"}, {"seq": "AAGAAATAAATAAAATAATTTATACAAACGAATTTAATAATTATGAAGATAAAATATATGAAGATGTCAAATATATTAAAGAACAGGAAAATGAAATATACTTGAGAGATGGAATTGAAGAGTTACATATGGATGAACCAAGTCGGGATGTATATGTTGATGATGAAAATGATTATATATTTTTAGA"}], "target_id": 67}, {"mhap_location": {"chrom": "Pf3D7_04_v3", "end": 1113603, "genome_id": 0, "start": 1113449, "strand": "+"}, "microhaplotypes": [{"seq": "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACATCTATTCAATTTGTTTGTATAAGTTTTAGGTGTTATTATTCTTTTACGTTTT"}, {"seq": "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACAACTATTCAATTTGTTTGTATAAGTTTTAGGTCTTATTATTCTTTTACGTTTT"}, {"seq": "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACATCTATTCAATTTGTTTGTATAAGTATTAGGTCTTATTATTCTTTTACGTTTT"}, {"seq": "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGATTTCCATAATTTGATTACATCTATTCAATTTGTTTGTATAATTATTAGGTCTTATTATTCTTTTACGTTTT"}, {"seq": "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACATCTATTCAATTTGTTTGTATAATTATTAGGTCTTATTATTCTTTTACGTTTT"}], "target_id": 61}, {"mhap_location": {"chrom": "Pf3D7_04_v3", "end": 1128672, "genome_id": 0, "start": 1128488, "strand": "+"}, "microhaplotypes": [{"seq": "TTGAAAGAGTTAAAGGGAAAAATACAAAATTATTTAGATAATGATATTCAATTGAGTAATGGAAAACTCCTATATAAGGATACATGGGATAGAATTGATTTGAAGTTTTGTAGAACGGTAGCAATAGAAGAGGCAGTATACACTAGAAAATTTTATAGCTTAATTAATGATAAACATACAAT"}, {"seq": "TTGAAAGAGTTAAAGGGAAAAATACAAAATTATTTAGATAATGATATTCAATTGAGTAATGGAAAACTCCTATATAAGGATACATGGGATAGAATTGATTTGAAGTTTTGTAGAACGGTAGCAATAGAAGAGGCAGAATACACTAGAAAATTTTATAGCTTAATTAATGATAAACATACAAT"}, {"seq": "TTGAAAGAATTAAAGGGAAAAATACAAAATTATTTAGATAATGATATTCAATTGAGTAATGGAAAACTCCTATATAAGGATACATGGGATAGAATTGATTTGAAGTTTTGTAGAACGATAGCAATAGAAGAGGCAGAATACACTAGAAAATTTTATAGCTTAATTAATGATAAACATACAAT"}], "target_id": 54}, {"mhap_location": {"chrom": "Pf3D7_05_v3", "end": 329549, "genome_id": 0, "start": 329377, "strand": "+"}, "microhaplotypes": [{"seq": "TTGTGATGTATATAAATTCCCTTCTTCTTTATGTACCACATTATAAGAACCACGAACATATTCTTTTAAAAATGTTAACTTACTTCCAACAAATATATAATCAAAACAAAATTTTTTATTGTCGAAATGTTCTCGTTCAACCCCATTCATATTTCGGATATCATTATTTA"}, {"seq": "TTGTGATGTATATAAATTCCCTTCTTCTTTATGTACCACATTATAAGAACCACGAACATATTCTTTTAAAAATGTTAACTTACTTCCAACAAATATATAATCAAAACAAAATTGTTTATTGTCGAAATGTTTTCGTTCAACCCCATTCATATTTCGGATATCATTATTTA"}], "target_id": 33}, {"mhap_location": {"chrom": "Pf3D7_05_v3", "end": 958220, "genome_id": 0, "start": 958058, "strand": "+"}, "microhaplotypes": [{"seq": "TTTATATCATTTGTATGTGCTGTATTATCAGGAGGAACATTACCTTTTTTTATATCTGTGTTTGGTGTAATATTAAAGAACATGAATTTAGGTGATGATATTAATCCTATAATATTATCATTAGTATCTATAGGTTTAGTACAATTTATATTATCAATGA"}, {"seq": "TTTATATCATTTGTATGTGCTGTATTATCAGGAGGAACATTACCTTTTTTTATATCTGTGTTTGGTGTAATATTAAAGAACATGTATTTAGGTGATGATATTAATCCTATAATATTATCATTAGTATCTATAGGTTTAGTACAATTTATATTATCAATGA"}], "target_id": 49}, {"mhap_location": {"chrom": "Pf3D7_05_v3", "end": 958505, "genome_id": 0, "start": 958388, "strand": "+"}, "microhaplotypes": [{"seq": "ACGAAATTTATAACAATTTTTACATATGCCAGTTCCTTTTTAGGTTTATTTATTTGGTCATTAATAAAAAATGCACGTTTGACTTTATGTATTACTTGCGTTTTTCCGTTAATTT"}, {"seq": "ACGAAATTTATAACAATTTTTACATATGCCAGTTCCTTTTTAGGTTTATATATTTGGTCATTAATAAAAAATGCACGTTTGACTTTATGTATTACTTGCGTTTTTCCGTTAATTT"}, {"seq": "ACGAAATTTATAACAATTTTTACATATGCCAGTTCCTTTTTAGGGTTATTTATTTGGTCATTAATAAAAAATGCACGTTTGACTTTATGTATTACTTGCGTTTTTCCGTTAATTT"}], "target_id": 46}, {"mhap_location": {"chrom": "Pf3D7_05_v3", "end": 1042280, "genome_id": 0, "start": 1042161, "strand": "+"}, "microhaplotypes": [{"seq": "TATTATTACGGTACCATTATATGATTCTTTAGGTCCTCAATCAAGTAGATTTATATTAGATCAAACACAGATGGAAACTATTGTATGTGACAAGACATGTGCTCGTAATTTATTTAA"}, {"seq": "TATTATTACGGTACCATTATATGATTCTTTAGGTCCTCAATCAAGTAGATTTATATTAGATCAAACACAGATGGAAACTATTGTATGTAACAAGACATGTGCTCGTAATTTATTTAA"}], "target_id": 4}, {"mhap_location": {"chrom": "Pf3D7_05_v3", "end": 1309743, "genome_id": 0, "start": 1309608, "strand": "+"}, "microhaplotypes": [{"seq": "AATGAAGAAAATATGTCTGACAGACCAAACAGTTTATCTCATGATAAGGATCAACACCTCGATGAAACATGTAATGAACAATATGGATTATACGTAAAAGAAATGGAATCTAAAGTTGAAAAATTAGCTGAAA"}, {"seq": "AATGAAGAAAATATGTCTGACAGACCAAACAGTTTATCTCATGATAAGGATCAACACCACGATGAAACACATAATGAACAATATGGATTATACGTAAAAGAAATGGAATCTAAAGTTGAAAAATTAGCTGAAA"}], "target_id": 27}, {"mhap_location": {"chrom": "Pf3D7_06_v3", "end": 145500, "genome_id": 0, "start": 145342, "strand": "+"}, "microhaplotypes": [{"seq": "ATTTGAATAAAATTTATCATTCACAATATTATATTTTTGTTTCTTCTTTTTTCCCATAATATTATTATTTTGTTCACAATATATGTTCATGTGTCCCCTCTTTTTCTGTAAAATATTAAAATGTTTCTTACTATGCTTTTCTTCATTTTTAATAAC"}, {"seq": "ATTTGAATAAAATTTATCATTCACAATATTATATTTTTGTTTCTTCTTTTTTCCCATAATATTATTATTTTGTTCACAATATATGTTCATGTGTCCCCTCTTTTTCTGTAAAATATTAAAATGTTTCTTAGTATGCTTCTCTTCATTTTTAATAAC"}], "target_id": 44}, {"mhap_location": {"chrom": "Pf3D7_06_v3", "end": 532377, "genome_id": 0, "start": 532194, "strand": "+"}, "microhaplotypes": [{"seq": "GAACAATTGTTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACTCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCGCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACTTCCCCATGTGATCCAACGAATGCCA"}, {"seq": "GAACAATTGCTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACTCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCTCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACTTCCCCATGTGATCCAACGAATGCCA"}, {"seq": "GAACAATTGTTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACCCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCGCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACTTCCCCATGTGATCCAACGAATGCCA"}, {"seq": "GAACAATTGCTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACCCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCGCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACTTCCCCATGTGATCCAACGAATGCCA"}], "target_id": 39}, {"mhap_location": {"chrom": "Pf3D7_01_v3", "end": 496142, "genome_id": 0, "start": 495970, "strand": "+"}, "microhaplotypes": [{"seq": "GAAAGTAGCGAATACCCTGTACAAATCGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTTACTACGCCTGATGTTACTGCACTACCTGAAGAATTACCATTAACGAGCTATAAAGTAACACCTACTTCTATTAATGTATTGCATAAAGAGGGCCCCACTTTAAA"}, {"seq": "GAAAGTAGCGAATACCCTGTAGAAATTGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTTACTACGCCTGATGTTACTGCACTACCTGAAGAATTACCATTAACGAGCTATAAAGTAACACCTACTTCTATTAATGTATTGCATAAAGAGGGCCCCACTTTAAA"}, {"seq": "GAAAGTAGCGAATACCCTGTACAAATCGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTGACTAAGCCTGATGTTACTGCACTACCTGAACAATTGCCATTAACAAATTATAAAGTAACACCTACTTCTATTAATGTATTGAATAAAGAGGGCCCCACTTTAAA"}, {"seq": "GAAAGTAGCGAATACCCTGTAGAAATTGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTTACTACGCCTGGTGTTACTGCACTACCTGAAGAATTACCATTAACGAGCTATAAAGTAACACCTACTTCTATTAATGTATTGCATAAAGAGGGCCCCACTTTAAA"}], "target_id": 62}, {"mhap_location": {"chrom": "Pf3D7_07_v3", "end": 165421, "genome_id": 0, "start": 165234, "strand": "+"}, "microhaplotypes": [{"seq": "TCATTATTATTATTATTATAATTATCATTGTTATTATTATTGTTGTTGTTGTTATTATTATTTCCTTTATTATTTAATATGCATTTTTTAATATCCATTTTATTATTTATCATATCAGTACTTTTATTTTTCTCCTTTTCGTTTATAGCTTTTTCCCTATGCACCCTGAATTTCCCATTTTTTTT"}, {"seq": "TAATTATCATTATTATTATAATTATCATTGTTATTATTATTGTTGTTGTTGTTATTATTATTTCCTTTATTATTTAATATGCATTTTTTAATATCCATTTTATTATTTATCATATCAGTACTTTTATTTTTCTCCTTTTCGTTTATAGCTTTTTCCCTATGCACCCTGAATTTCCCATTTTTTTT"}, {"seq": "TCATTATTATTATTATTATAATTATCATTTTTATTATTATTGTTGTTATTATTATTTCCTTTATTATTTAATATGCATTTTTTAATATCCATTTTATTATTTATCATATCAGTACTTTTATTTTTCTCCTTTTCGTTTATAGCTTTTTCCCTATGCACCCTGAATTTCCCATTTTTTTT"}], "target_id": 29}, {"mhap_location": {"chrom": "Pf3D7_07_v3", "end": 166166, "genome_id": 0, "start": 166034, "strand": "+"}, "microhaplotypes": [{"seq": "TTTTATTTGAACTTTTTTATTTTCTTCATTATCAATATAAAAACAACAATCTTTAAATTTATGAAATAACACCCAACTTAATGTATAAAATATAATTTCTATAAAATCAAAATTAATGTAATAACCTAAT"}], "target_id": 59}, {"mhap_location": {"chrom": "Pf3D7_07_v3", "end": 299004, "genome_id": 0, "start": 298885, "strand": "+"}, "microhaplotypes": [{"seq": "CATTCAATATGGTTCTGAGCTTAAAGATGTTATCCTTATACATGTTTCTATTCTCATTCGTTATAACATCAATGACATATAAAACATATCTCTCAAATATTTTGTGAACAATATTAT"}], "target_id": 41}, {"mhap_location": {"chrom": "Pf3D7_07_v3", "end": 730087, "genome_id": 0, "start": 729974, "strand": "+"}, "microhaplotypes": [{"seq": "TTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATATTACGATATAGAAAAATATAGATGTTCATTATTGAA"}, {"seq": "TTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATATTACGATATAGAAAAATATAGATGTTCATTATTGAG"}, {"seq": "TTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATGTTACGATATAAAAAAATATAGATGTTCATTATTGAA"}, {"seq": "TTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATGTTACGATATAGAAAAATATAGATGTTCATTATTGAA"}], "target_id": 75}, {"mhap_location": {"chrom": "Pf3D7_07_v3", "end": 1149584, "genome_id": 0, "start": 1149414, "strand": "+"}, "microhaplotypes": [{"seq": "AATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCTATAGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTAT"}, {"seq": "AATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCCATTGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTAT"}, {"seq": "AATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCTATTGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTAT"}], "target_id": 45}, {"mhap_location": {"chrom": "Pf3D7_07_v3", "end": 1358910, "genome_id": 0, "start": 1358693, "strand": "+"}, "microhaplotypes": [{"seq": "AGAATCTCAACTTTTGCTTAAAAAAAATGATAACAAATATAATTCTAAATTTTGTAATGATTTGAAGAATAGTTTTTTAGATTATGGACATCTTGCTATGGGAAATGATATGGATTTTGGAGGTTATTCAACTAAGGCAGAAAACAAAATTCAAGAAGTTTTTAAAGGGGCTCATGGGGAAATAAGTGAACATAAAATTAAAAATTTTAGAAAAG"}, {"seq": "AGAATCTCAACTTTTGCTTAAAAAAAATGATAACAAATATAATTCTAAATTTTGTAATGATTTGAAGAATAGTTTTTTAGATTATGGACATCTTGCTATGGGAAATGATATGGATTTTGGAGGTTATTCAACTAAGGCAGAAAACAAAATTCAAGAAGTTTTTAAAGGGGCTCATGGGAAAATAAGTGAACATGAAATTAAAAATTTTAGAAAAA"}, {"seq": "AGAATCTCAACTTTTGCTTAAAAAAAATGATAACAAATATAATTCTAAATTTTGTAATGATTTGAAGAATAGTTTTTTAGATTATGGACATCTTGCTATGGGAAATGATATGGATTTTGGAGGTTATTCAACTAAGGCAGAAAACAAAATTCAAGAAGTTTTTAAAGGGGCTCATGGGAAAATAAGTGAACATGAAATTAAAAATTTTAGAAAAG"}], "target_id": 35}, {"mhap_location": {"chrom": "Pf3D7_08_v3", "end": 102499, "genome_id": 0, "start": 102325, "strand": "+"}, "microhaplotypes": [{"seq": "TAATTTTCTCAAGTAACATATTTTTGTCTTGACTACTTTCATCTGTAAATGGAACGAATACTCTTTGCTTACCTGCAAAAAGGACAACTGACATATGAGCCTTATCCTTACTTACATTCGAATTAAAGACCATAGATTCTAAAAATGGTATAGTTCCTTTTAACCAATAATC"}, {"seq": "TAATTTTCTCAAGTAACATATTTTTGTCTTGACTACTTTCATCTGTAAATGGAACCAATACTCTTTGCTTACCTGCAAAAAGGACAACTGACATATGAGCCTTATCCTTACTTACATTCGAATTAAAGACCATAGATTCTAAAAATGGTATAGTTCCTTTTAACCAATAATC"}, {"seq": "TAATTTTCTCAAGTAACATATTTTTGTCTTGACTACTTTCATCTGTAAATGGAACGACTACTCTTTGCTTACCTGCAAAAAGGACAACTGACATATGAGCCTTATCCTTACTTACATTCGAATTAAAGACCATAGATTCTAAAAATGGTATAGTTCCTTTTAACCAATAATC"}, {"seq": "TAATTTTCTCAAGTAACATATTTTTGTCTTGACTACTTTCATCTGTAAATGGAACGAATACTCTTTGCTTACCTGCAAAAAGGACAACTGACATATGAGCCTTATCCTTACTTACATTCGAATTAAGGACCATAGATTCTAAAAATGGTATAGTTCCTTTTAACCAATAATC"}], "target_id": 86}, {"mhap_location": {"chrom": "Pf3D7_08_v3", "end": 336646, "genome_id": 0, "start": 336467, "strand": "+"}, "microhaplotypes": [{"seq": "AAATTTACAGAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCCACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCACAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTA"}, {"seq": "AAATTTACAAAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCTACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCACAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTA"}, {"seq": "AAATTTACAGAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCCACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCCCAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTA"}, {"seq": "AAATTTACAAAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCTACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCCCAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTA"}, {"seq": "AAATTTACAGAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCTACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCCCAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTA"}], "target_id": 85}, {"mhap_location": {"chrom": "Pf3D7_08_v3", "end": 339356, "genome_id": 0, "start": 339167, "strand": "+"}, "microhaplotypes": [{"seq": "TCATTACTATTCTTTATCCATATATATGTTGTTATATCAGTTGCACCTGAGGGTGGATTCAAACCTCTTGCTTGTATAATATATGCACGTACTACTAAATTACGTGTTAATCTATATTCTCTTACTAAATCATCACATTTCTTTATCATTTCTTTTTTTAAATACATTGTCTTTTCATCATACACAT"}, {"seq": "TCATTACTATTCTTTATCCATATATATGTTGTTATATCAGTTGCACCGGATGGTGGATTCAAACCTCTTGCTTGTATAATATATGCACGTACTACTAAATTACGTGTTAATCTATATTCTCTTACTAAATCATCACATTTCTTTATCATTTCTTTTTTTAAATACATTGTCTTTTCATCATACACAT"}, {"seq": "TCATTACTATTCTTTATCCATATATATGTTGTTATATCAGTTGCACCGGATGGTGGATTCAAACCTCTTGCTTGTATAATATATGCACGTACTACTAAATTACGTGTTAATCTATATTCTCTTACTAAATCACCACATTTCTTTATCATTTCTTTTTTTAAATACATTGTCTTTTCATCATACACAT"}], "target_id": 80}, {"mhap_location": {"chrom": "Pf3D7_08_v3", "end": 550217, "genome_id": 0, "start": 549992, "strand": "+"}, "microhaplotypes": [{"seq": "ACTAACAAATTATGATAATCTAGTTTATGATATAAAAAATTATTTAGAACAAAGATTAAATTTTCTTGTATTAAATGGAATACCTCGTTATAGGATACTATTTGATATTGGATTAGGATTTGCGAAGAAACATGATCAATCTATTAAACTCTTACAAAATATACATGTATATGATGAGTATCCACTTTTTATTGGATATTCAAGAAAAAGATTTATTGCCCAT"}], "target_id": 93}, {"mhap_location": {"chrom": "Pf3D7_01_v3", "end": 512387, "genome_id": 0, "start": 512198, "strand": "+"}, "microhaplotypes": [{"seq": "TAAAGAAATTAAGTGAAGATGATTATGAAAAAAATTGTAGACATTTAAATTATTTAATAGATAATATAAGAGAATTATTTTTTAGTTCTAAAAATATTAGAATTCCTGATGTAGCTCGTAAATATTTGTGGGATAATCAAATTGAAGGAAATCTCAAAAAATTAATATCTTCAGAAACAAAATATAA"}, {"seq": "TAAAGAAATTAAGTGAAGATGATTATGAAAAAAATTGTAGACATTTAAATTATTTAATAGATAATATAAGAGAATTATTTTTTAGTTCTAAAAATATTAGAATTCCTGATTTAGCTCGTAAATATTTGTGGGATAATCAAATTGAAGGAAATCTCAAAAAATTAATATCTTCAGCAACAAAATATAA"}, {"seq": "TAAAGAAATTAAGTGAAGATGATTATGAAAAAAATTGTAGACATTTAAATTATTTAATAGATAATATAAGAGAATTATTTTTTAGTTCTAAAAATATTAGAATTCTTGATGTAGCTCGTAAATATTTGTGGGATAATCAAATTGAAGGAAATCTCAAAAAATTAATATCTTCAGAAACAAAAAATAA"}], "target_id": 38}, {"mhap_location": {"chrom": "Pf3D7_08_v3", "end": 933142, "genome_id": 0, "start": 933022, "strand": "+"}, "microhaplotypes": [{"seq": "TGGTTTTAATGAGGATGATTTAGATAAAGAGTTTTCTTTTGATTTGCCGTCGATTAGTGGTTTTTCAAGTAATGGTATGAAAAAATGTAATTTAAGAAATTTATTAAAAAGATTAGAA"}, {"seq": "TGGTTTTAATGAGGATGATTTAGATAAAGAGTTTTTTTTTGATTTGCCGTCGATTAGTGGTTTTTCAAGTAATGGTATGAAAAAATGTAATTTAAGAAATTTATTAAAAAGATTAGAA"}], "target_id": 3}, {"mhap_location": {"chrom": "Pf3D7_08_v3", "end": 1269455, "genome_id": 0, "start": 1269319, "strand": "+"}, "microhaplotypes": [{"seq": "CCTTAGCATTAATAACACTTATAGGAGGTATTTATATGACTAAAGGAAGAAAAAGTTCCATATGGCATAATTCAGAAATAAATGATACACTTTATGATGTTGTTCTTGAAGCAGTGAATCAAGGAAATACAGAT"}, {"seq": "CCTTAGCATTAATAACACTTATAGGAGGTATTTATATGACTAAAGGAAGAAAAAGTTCCATATGGCATAATTCAGAAATAAATGATACACTTTATGATGTTGTTCTTGAAACAGTGAATCAAGGAAATACAGAT"}, {"seq": "CCTTAGCATTAATAACACTTATAGGAGGTATTTATATGACTAAAGGAAGAAAAAGTTCCATATGGCATAATTCAGAAATAAATGATACACTTTATGATATTGTTCTTGAAACAGTGAATCAAGGAAATACAGAT"}], "target_id": 32}, {"mhap_location": {"chrom": "Pf3D7_08_v3", "end": 1344818, "genome_id": 0, "start": 1344685, "strand": "+"}, "microhaplotypes": [{"seq": "AATATATCTTTTACTTTATCTGTAAGTTTCATGGAATCTATTATTTCTTCTGCATATTTTATTTTTGCCTCGTTTATATATTTACCTGCTTCTAATTTACATAAACATTTTTCTATTAAGTTTTGATCATT"}, {"seq": "AATATATCTTTTACTTTATCTGTAAGTTTCATGGAATCTATTATTTCATGTGCATATTTTATTTTTGCCTCGTTTATATATTTACCTGCTTTTAATTTACATAAACATTTTTCTATTAAGTTTTGATCATT"}, {"seq": "AATATATCTTTTACTTTATCTGTAAGTTTCATGGAATCTATTATTTCATCTGCATATTTTATTTTTGCCTCGTTTATATATTTACCTGCTTTTAATTTACATAAACATTTTTCTATTAAGTTTTGATCATT"}], "target_id": 30}, {"mhap_location": {"chrom": "Pf3D7_08_v3", "end": 1363086, "genome_id": 0, "start": 1362890, "strand": "+"}, "microhaplotypes": [{"seq": "GTAAAAAAAAAGGGTTTTCCTAAAAAACCATCGGTTCATGGTTTTACACAGATGGTGTTTTTGCAGCTTACTAATATAGTCATGTATGCCCTTTGTTTTATGAGCCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAA"}, {"seq": "GTAAAAAAAAAGGGTTTTCCTAAAAAACCATCGGTTCATGGTTTTACACAGATGATGTTTTTGCAGCTTACTAATATAGTCATGTATGCCCTTTGTTTTATGAACCTTTCACAATTATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAA"}, {"seq": "GTAAAAAAAAAGGGTTTTCCTAAAAAACCATCGGTTCATGGTTTTACACAGATGGTGTTTTTGAAGATTACTAATATAGTCATGTATGCCCTTTGTTTTATGAGCCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAA"}, {"seq": "GTAAACAAAAAGGGTTTTCCTAAAAAACCATTGGTTCATGGTTTTACACAGATGGTGTTTTTGCAGCTTACTAATATAGTCATGTATGCCCTTTGTTTTATGGACCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAA"}], "target_id": 28}, {"mhap_location": {"chrom": "Pf3D7_09_v3", "end": 517091, "genome_id": 0, "start": 516927, "strand": "+"}, "microhaplotypes": [{"seq": "TGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTAAAGAATGTCCCATAGGTTTTTATTGTCCAGAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCA"}, {"seq": "TGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTGAAGAATGTCCCATAGGTTTTTATTGTCCAGAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCA"}, {"seq": "TGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTAAAGAATGTCCCATAGGTTTTTATTGTCCAAAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCA"}], "target_id": 26}, {"mhap_location": {"chrom": "Pf3D7_09_v3", "end": 596333, "genome_id": 0, "start": 596132, "strand": "+"}, "microhaplotypes": [{"seq": "TTATTTTCGTTTTTTTTTATATTATCATTATAATTATATGTATTTACAAAGAATTTATTATTATTTGTTTCTTTATAATTATATTCATTTTCTTTATTACTTAAGGAATTTATATTTGATAAAACTTGTTGTCCTCTTTCTTCTTTGTTGATGTGAATATTTGAGAAAATAATAATAAATGTAATGACTAGGGCTATAT"}, {"seq": "TTATTTTCGTTTTTTTTTATATTATCATTATAATTATATGTATTTACAAAGAATTTATTATTATTTGTTTCTTTATAATTATATTCATTTTCTTTATTACTTAAGGAATTTATATTTGATAAAACTTGTTGTCCTCTTTCTTCTTTGTTGATGTGAATATTTGAGAAAATAATAATAAATGTAATGACTAGGGCTATGT"}, {"seq": "TTATTTTCGTTTTTTTTTATATTATCATTATAATTATATGTATTTACAAAGAATTTATTATTATTTGTTTCTTTATAATTATATTCATTTTCTTTATTACTTAAGGAATTTATATTTGATAAAACTTGTTGTACTCTTTCTTCTTTGTTGATGTGAATATTTGAGAAAATAATAATAAATGTAATGACTAGGGCTATGT"}], "target_id": 25}, {"mhap_location": {"chrom": "Pf3D7_09_v3", "end": 685791, "genome_id": 0, "start": 685600, "strand": "+"}, "microhaplotypes": [{"seq": "CAAAGGAACAAGATAATTTTTTCCATTTTTATAAAAGTAATATATATGATATGGAAAATAGAACATGTAATAATAATATATTACAATATTGTGTTATGAATAATAAATCATATTTATTTCATAATATATCATCCAAAAAAAATATATATATAAAAAAAAAGAATCATCAGTTTTCTTTATTCATATATT"}, {"seq": "CAAAGGAACAAGATAATTTTTTCAATTTTTATAAAAGTAATATATATGATATGGAAAATAGAACATGTAATAATAATATATTACAATATTGTGTTATGAATAATAAATCATATTTATTTCATAATATATCATCCAAAAAAAATATATATATAAAAAAAAAGAATCATCAGTTTTCTTTATTCATATATT"}], "target_id": 77}, {"mhap_location": {"chrom": "Pf3D7_09_v3", "end": 1179077, "genome_id": 0, "start": 1178893, "strand": "+"}, "microhaplotypes": [{"seq": "CAAATTATCCTTAGCCCCAGATATGGTAAAGACATATCACTGTTATAAATTAGGAAAGCAAGCAGCTGAATTATTAGAATCTATCATTTTAAAGAAAAAGTTCGTAAGATTTAGAGTTACTGATGCTATTGATGTATATGATTTCTTTTATATAAAGAAAGTTTTATCCAGTCGTATTAAGA"}, {"seq": "CAAATTACCCTTAGCCCCAGATATGGTAAAGACATATCACTGTTATAAATTAGGAAAGCAAGCAGCTAAATTATTAGAATCTATCATTTTAAAGAAAAAGTTCGTAAGATTTAGAGTTACTGATGCTATTGATGTATATGATTTCTTTTATATAAAGAAAGTTTTATCCAGTCGTATTAAGA"}], "target_id": 89}, {"mhap_location": {"chrom": "Pf3D7_09_v3", "end": 1406540, "genome_id": 0, "start": 1406404, "strand": "+"}, "microhaplotypes": [{"seq": "AATTAATTTTAATGATGATGTTACTTTAGAAACACAATCCATGATAGCACACGGAGGGTCTTTGTCAGAAATAGAAGAAACTGGAGATTTATCTTCAGATGTTGATAGATTACTTTCATCAATCGAAACTACTC"}, {"seq": "AATTAATTTTAATGATGATGTTACTTTAGAAACACAATCCATGATAGCACACGGAGGGTCTTTGTCAGAAATAGAAGAAACTGAAGATTTATCTTCAGATGTTGATAGATTACTTTCATCAATCGAAACTACTC"}], "target_id": 51}, {"mhap_location": {"chrom": "Pf3D7_09_v3", "end": 1437302, "genome_id": 0, "start": 1437113, "strand": "+"}, "microhaplotypes": [{"seq": "TAAAACCTGACAGCTTTGTACAGTTATATTTACCCAATTAGAATGTTCAAACATATTTAAGTGTTGCCATTCTTCAAATAATTTTTTTTCATATTCAGTTTTTGGTTGGTTTTTAAATTCTTTTGATAATGTACCTTCTGCGGATGGTATAGGGAAGTTAAAAATTTTATTACTTACTTTGTTTGAT"}, {"seq": "TAAAACCTGACAGCTTTGTACAGTTATATTTACCCAATTAGAATGTTCAAACATATTTAAGTGTTGCCATTCTTCAAATAATTTTTTTTCATATTCAGTTTTTGGTTGGTTTTTAAATTCTTTTGATACTGTACCTTCTGCGGATGGTATAGGGAAGTTAAAAATTTTATTACGTACTTTGTTTGAT"}], "target_id": 87}, {"mhap_location": {"chrom": "Pf3D7_01_v3", "end": 531899, "genome_id": 0, "start": 531681, "strand": "+"}, "microhaplotypes": [{"seq": "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATACCTACAAATAATTATAGCATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGGAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATATTATCCGA"}, {"seq": "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATTCCTACAAATAATTATAGCATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGTAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATAGTATCCGA"}, {"seq": "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATTCCTACAAATAATTATAGCATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGGAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATATTATCCGA"}, {"seq": "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATACCTACAAATAATTATAACATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGTAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATATTATCCGA"}, {"seq": "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATACCTACAAATAATTATAACATGCCAAATAAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGTAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATATTATCCGA"}], "target_id": 24}, {"mhap_location": {"chrom": "Pf3D7_10_v3", "end": 377208, "genome_id": 0, "start": 377094, "strand": "+"}, "microhaplotypes": [{"seq": "ACCAAAAAATGATACCTGTACGTTTTTCTCCAGGAGAAACAAAAAAATTAGAAAGGATTCTCAAAAAAGTAGACGACTTTTTCTGTGCCAATATTAAAGCGCATTATACCTG"}, {"seq": "ACCAAAAAATGATACCTGTACGTTTTTCTCCAGGAGAAACAAAAAAATTAGAAAGGATTCTCAAAAAAGTAGACGACTTTTTCTGTGCCAATATTAAAGCGCAATATACCTG"}], "target_id": 63}, {"mhap_location": {"chrom": "Pf3D7_10_v3", "end": 992543, "genome_id": 0, "start": 992370, "strand": "+"}, "microhaplotypes": [{"seq": "TTTTAAAAAAAAAAATTATGATATAAAATCTTCAATTAATAAAAGATCTATCCAGTTCTTTAGAGACACTAATATAGATCATTATATAGCATATGAATATTATAAGGAGGACCGTACAGAATTTATATTAACTATTATGAATGAAAAAAATATTACTCATCAAGAAACTCA"}, {"seq": "TTTTAAAAAAAAAAATTATGATATAAAATCTTCAATTAATAAAAGATCTATCCAGTTCTTTAAAGACACTAATATAGATCATTATATAGCATATGAATATTATAAGGAGGACCGTACAGAATTTATATTAACTATTATGAATGAAAAAAATATTACTCATCAAGAAACTCA"}, {"seq": "TTTTAAAAAAAAAAATTATGATATAAAATCTTCAATTAATAAAAGATCTATCCAGTTCTTTACAGACACTAATATAGATCATTATATAGCATATGAATATTATAAGGAGGACCGTACAGAATTTATATTAACTATTATGAATGAAAAAAATATTACTCATCAAGAAACTCA"}], "target_id": 65}, {"mhap_location": {"chrom": "Pf3D7_10_v3", "end": 1386868, "genome_id": 0, "start": 1386699, "strand": "+"}, "microhaplotypes": [{"seq": "GAGAACAGGTTAAATATATTGAAGACGTGGTTTGATAATCAGGTATTTCTTTAATTAAATATTCATGATATTGTTCGTTAGATACATAAATTAATTCATCCTCCACATTTTGCTGTTCTGTTATAATTTGTGAAGAAGCTTGGTTTGTTTTATTTGGTAATTGCTCT"}, {"seq": "GGGAACAGGTTAAATATATTGAAGACGTGGTTTGATAATCAGGTATTTCTTTAATTAAATATTCATGATATTGTTCGTTAGATACATAAATTAATTCGTCCTCCACATTTTGCTGTTCTGTTATAATTTGTGAAGAAGCTTGGTTTGTCTTATTTGGTAATTGCTCT"}, {"seq": "GAGAACAGGTTAAATATATTGAAGACGTGGTTTGATAATCAGGTATTTCTTTAATTAAATATTCATGATATTGTTCGTTAGATACATAAATTAATTCGTCCTCCACATTTTGCTGTTCTGTTATAATTTGTGAAGAAGCTTGGTTTGTCTTATTTGGTAATTGCTCT"}], "target_id": 34}, {"mhap_location": {"chrom": "Pf3D7_10_v3", "end": 1399710, "genome_id": 0, "start": 1399543, "strand": "+"}, "microhaplotypes": [{"seq": "ACATCAGAACATAGTAAAGATTTAAATAATAATGATTCAAAAAATGAATCTAGTGATATTATTTCAGTAAATAATAAATCAAATAAAGTACAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACA"}, {"seq": "ACATCAGAACATAGTAAAGATTTAAATAATAATGATTCAAAAAATGAATCTAGTGATATTATTTCAGAAAATAATAAATCAAATAAAGTACAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACA"}, {"seq": "ACATCAGAACATAGTAAAGATTTAAATAATAATGGTTCAAAAAATGAATCTAGTGATATTATTTCAGAAAATAATAAATCAAATAAAGTACAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACA"}, {"seq": "ACATCAGAACATAGTAAAGATTTAAATAATAATGATTCAAAAAATGAATCTAGTGATATTATTTCAGAAAATAATAAATCAAATAAAGTAGAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACA"}], "target_id": 71}, {"mhap_location": {"chrom": "Pf3D7_10_v3", "end": 1436681, "genome_id": 0, "start": 1436478, "strand": "+"}, "microhaplotypes": [{"seq": "GAGAAGAAACACGTTTTATCTCATAATTCATATGAGAAAACTAAAAATAATGAAAATAATAAATTTTTCGATAAGGATAAAGAGTTAACGATGTCTAATGTAAAAAATGTGTCACAAACAAATTTCAAAAGTCTTTTAAGAAATCTTGGTGTTTCAGAGAATATATTCCTTAAAGAAAATAAATTAAATAAGGAAGGGAAA"}, {"seq": "GAGGAGAAACACGTTTTATCTCATAATTCATATGAGAAAACTAAAAATAATGAAAATAATAAATTTTTCGATAAGGATAAAGAGTTATCGATGTCTAATGTAAAAAATGTGTCACAAACAAATTTCAAAAGTCTTTTAAGAAATCTTGGTGTTTCAGAGAATATATTCCTTAAAGAAAATAAATTAAATAAGGAAGGGAAA"}], "target_id": 23}, {"mhap_location": {"chrom": "Pf3D7_11_v3", "end": 119692, "genome_id": 0, "start": 119485, "strand": "+"}, "microhaplotypes": [{"seq": "TTCATCCAAAAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTATTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTGAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCC"}, {"seq": "TTCATCCAAAAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTATTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTCAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCC"}, {"seq": "TTCATCCAAGAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTATTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTGAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCC"}], "target_id": 22}, {"mhap_location": {"chrom": "Pf3D7_11_v3", "end": 1010037, "genome_id": 0, "start": 1009855, "strand": "+"}, "microhaplotypes": [{"seq": "AGTTCTATCTATTTGTTTAATTGGTGTCCATGAATTTTTAGAGAAACACCACATATCAGCTAATAAGGAATTATTAACATCTAATCCTCCATGAATATATAAAAAATCATTAAAACTGAAAGAAGCATGCTTATATCTTGCACGTGGACAAATTTTATTTCCAATAAGTTCCCATTTCTT"}, {"seq": "AATTCTATCTATTTGTTTAATTGGTGTCCATGAATTTTTAGAGAAACACCACATATCAGCTAATAAGGAATTATTAACATCTAATCCTCCATGAATATATAAAAAATCATTAAAACTGAAAGAAGCATGCTTATATCTTGCACGTGGACAAATTTTATTTCCAATAAGTTCCCATTTCTT"}], "target_id": 20}, {"mhap_location": {"chrom": "Pf3D7_11_v3", "end": 1019084, "genome_id": 0, "start": 1018952, "strand": "+"}, "microhaplotypes": [{"seq": "TAGTGACTGTACATTTTTCATCTAATGTTCTATAGGATAAAGAATCTGAAGGACAATGCATATCATTACAAAAATAGCATGCACCTTTAAAATATAAATAAGAATGTCTTAACACAACAAAGGAATCAAA"}], "target_id": 56}, {"mhap_location": {"chrom": "Pf3D7_11_v3", "end": 1376371, "genome_id": 0, "start": 1376184, "strand": "+"}, "microhaplotypes": [{"seq": "TCTCATTCCTTTGAAAATATGAACTATTCAACTCATCAAGGTTTTCATATGTTATTTCATAACTGCCATCATCTGAATCCTCTTCATCACTACTACTTAAAGAATGCTCTTCTACAGTTATATCTTCATAATGATTATTTTTAGGAAAATATTCTTCAGATCTTTCTATAAATTCTGTTCCATTA"}, {"seq": "TCTCATTCCTTTGAAAATATGAACTATTCAACTCATCAAGGTTTTCATATGTTATTTCATAAGTGCCATCATCTGAATCCTCTTCATCACTACTACTTAAAGAATGCTCTTCTACAGTTATATCTTCATAATGATTATTTTTAGGAAAATATTCTTCAGATCTTTCTATAAATTCTGTTCCATTA"}], "target_id": 60}, {"mhap_location": {"chrom": "Pf3D7_11_v3", "end": 1552639, "genome_id": 0, "start": 1552429, "strand": "+"}, "microhaplotypes": [{"seq": "ATATCGACAATTATAAAGAAAAAATAGAAAATTTTAATGAAAGATATTATGAAGATGATTTAAGTTTCTTAAACTTTCCAGGAACCATAACAAGTTATGATAAAAACCATCAAAGAGATAAAAGAAAAAACTGTTTTGAAGAATATCTAGACAATAATAATTATTTTATTGATAGTAATCTAAAGGAAGTTATAGAAAATAATATATA"}], "target_id": 19}, {"mhap_location": {"chrom": "Pf3D7_01_v3", "end": 532843, "genome_id": 0, "start": 532689, "strand": "+"}, "microhaplotypes": [{"seq": "CTTTCTTAATTCTATGAATGAAGAATATACGCATATTAATTTAAATAACTTTATACATAATGATAACAATGATAAAGACGAAAATTATACATTAGATCAGGTGGAAGAATATCCTATGACTAGTTATCAAAATAATATATACAAGGATTTTT"}, {"seq": "CTTTCTTAATTCTATGAATGAAGAATATACGCATATTAATTTAAATAACTTTATACATAATAATAACCATGATAATGACGAAAATTATACATTAGATCAGGTGGAAGGATATCCTATGACTAGTTATCAAAATAATATATACAAGGATTTTT"}], "target_id": 40}, {"mhap_location": {"chrom": "Pf3D7_11_v3", "end": 1751054, "genome_id": 0, "start": 1750864, "strand": "+"}, "microhaplotypes": [{"seq": "TATTAAAAACAACAAATAAATTACCAAGGTCATGGAAAAAACTCTTGTTAAATCTATCCATTAGATTTCAAACAATACCTATAGGTGGTTCTATCGAAATCATATCAAAGGATGAGAAAAATATTTCTGTGACACGATCCAGTGAATATAATGCAACAACATATGAGCATTACACATTTCCCAAATGG"}, {"seq": "TATTAAAAACAACAAATAAATTACCAAGGTCATGGAAAAAACTCTTGTTAAATCTATCCATTAGATTTCAAACAATACCTATAGGTGGTTCTATCGAAATCATATCAAAGGATGAGAAAAATATTTCTATGACACGATCCAGTGAATATAATGCAACAACATATGAGCATTACACATTTCCCAAATGG"}, {"seq": "TATTAAAAACAACAGATAAATTACCAAGGTCATGGAAAAAACTCTTGTTAAATCTATCCATTAGATTTCAAACAATACCTATAGGTGGTTCTATCGAAATCATATCAAAGGATGAGAAAAATATTTCTATGACACGATCCAGTGAATATAATGCAACAACATATGAGCATTACACATTTCCCAAATGG"}], "target_id": 21}, {"mhap_location": {"chrom": "Pf3D7_11_v3", "end": 1816424, "genome_id": 0, "start": 1816210, "strand": "+"}, "microhaplotypes": [{"seq": "TTGACTTCTCCGGGTTGGTTACATTATCATTACAACCAATATTATTAAGGTTAATATTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCATATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACT"}, {"seq": "TTGACTTCTCCGGGTTTGTTACATTATCATTACAACCAATATTATTAAGGTTAATACTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCATATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACT"}, {"seq": "TTGACTTCTCCGGGTTTGTTACATTATCATTACAACCAATATTATTAAGGTTAATATTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCATATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACT"}, {"seq": "TTGACTTCTCCGGGTTTGTTACATTATCATTACAACCAATATTATTAAGGTTAATATTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCCTATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACT"}], "target_id": 18}, {"mhap_location": {"chrom": "Pf3D7_12_v3", "end": 63279, "genome_id": 0, "start": 63165, "strand": "+"}, "microhaplotypes": [{"seq": "ATAATTTCAGCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGTAATGAAAAAAATAACCCTTTCAT"}, {"seq": "ATAATTTCACCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGCAATGAAAAAAATAACCCTTTCAT"}, {"seq": "ATAATTTCACCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGCAATGAAAAAAACAACCCTTTCAT"}, {"seq": "ATAATTTCACCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGTAATGAAAAAAATAACCCTTTCAT"}], "target_id": 69}, {"mhap_location": {"chrom": "Pf3D7_12_v3", "end": 660009, "genome_id": 0, "start": 659890, "strand": "+"}, "microhaplotypes": [{"seq": "GGTCGACTTTTGGTGGTTTAACATTTTGAGCTACGAGATTTTCGACTGATGGCAATCCTACTTTGATTAATTCCTTTAACATAGATTTTGCGTGTCTTTTTACTTCTGATTTGATAT"}, {"seq": "GGTCGACTTTTGGTGGTTTAACATTTTGAGCTACGAGTTTTTCGAATGATGGCAATCCTACTTTGATTAATTCCTTTAACATAAGTTTTGCGTGGTTTTTTACTTCTGATTTGATAT"}, {"seq": "GGTCGACTTTTGGTGGTTTAACATTTTCAGCTATGAGTTTTTCGACTGATGGCAATCCTACTTTGATTAATTCCTTTAACATAAGTTTTGCGTGTTTTTTTACTTCTGATTTGATAT"}, {"seq": "GGTCGACTTTTGGTGGTTTAACATTTTCAGCTACGAGTTTTTCGACTGATGGCAATCCTACTTTGATTAATTCCTTTAACATAAGTTTTGCGTGTCTTTTTACTTCTGATTTGATAT"}], "target_id": 16}, {"mhap_location": {"chrom": "Pf3D7_12_v3", "end": 684260, "genome_id": 0, "start": 684087, "strand": "+"}, "microhaplotypes": [{"seq": "ATATCAAGATGGTAGTATTGTTTTAGAGGTTAGTAGTACGAGAGATAAACTTTATGGAGAAGTTGAGTGGGAAGGATATAAATTTGAACTTGTGGATACAGGAGGTTTAGTTTTTGAACAAGAAAAGTTTTCAAAAGAAATAAAGGATCAAATTCTTATGGCTCTAAAAGA"}, {"seq": "ATATCAAGATGGTAGTATTGTTTTAGATGTTAGTAGTACGAGAGATAAACTTTATGGAGAAGTTGAGTGGGAAGGATATAAATTTGAACTTGTGGATACAGGAGGTTTAGTTTTTGAACAAGAAAAGTTTTCAAAAGAAATAAAGGATCAAATTCTTATGGCTCTAAAAGA"}, {"seq": "ATATCAAGATGGTAGTATTGTTTTAGATGTTAGTAGTACGAGAGATAAACTTTATGGAGAAGTTGAGTGGGAAGGATATAAATTTGAACTTGTGGATACAGGAGGTTTAGTTTTTGAACAAGAAAAGTTTTCAAAAGAAATAAAGGATCAAATTTTTATGGCTCTAAAAGA"}], "target_id": 14}, {"mhap_location": {"chrom": "Pf3D7_12_v3", "end": 943427, "genome_id": 0, "start": 943257, "strand": "+"}, "microhaplotypes": [{"seq": "ATCAACTATAATTAAAAATAGTGGAATTATTGAAAACTTTGGAGATATTGATTATATCTTTACGGATAAAACAGGAACACTAACAGAAAATGTTATGGTGCTTAAAGTTATACATATAGGTTTTGATGTTATACATGCAGAAAATGAAAAAAATTCCATACAAGGTAA"}, {"seq": "ATCAACTATAATTAAAAATAGTGGAATTATTGAAAACTTTGGAGATATTGATTATATCTTTACGGATAAAACAGGAACATTAACAGAAAATGTTATGGTGCTTAAAGTTATACATATAGGTTTTGATGTTATACATGCAGAAAATGAAAAAAATTCCATACAAGGTAA"}], "target_id": 91}, {"mhap_location": {"chrom": "Pf3D7_12_v3", "end": 2050313, "genome_id": 0, "start": 2050129, "strand": "+"}, "microhaplotypes": [{"seq": "TTTAAACTTTGAATCTGTTCAATTAATAACACTTCATCATTGTCTTCGCCTTTTATAATATCTCCATGATTATGTGCTCCTCTAATTAAGGTATCACTAACCTGTTGTTCATCTGTCGCATGAGAACTAGTAGATATATCTGGTTTATTTTTTTTCTTTCTTTTTGTTATTTCTAATTTTTT"}, {"seq": "TTTAAACTTTGAATCTGTTCAATTAATAACACTTCATCATTGTCTTCTCCTTTTATAATATCTCCATGATTATGTGCTCCTCTAATTAAGGTATCACTAACCTGTTGTTCATCTGTCGCATGAGAACTAGTAGATATATCTGGTTTATTTTTTTTCTTTCTTTTTGTTATTTCTAATTTTTT"}, {"seq": "TTTAAACTTTGAATCTGTTCAATTAATAACACTTCATCATTGTCTTCTCCTTTTATAATATCCCCATGATTATGTGCTCCTCTAATTAAGGTATCACTAACCTGTTGTTCATCTGTCGCATGAGAACTAGTAGATATATCTGGTTTATTTTTTTTCTTTCTTTTTGTTATTTCTAATTTTTT"}], "target_id": 36}, {"mhap_location": {"chrom": "Pf3D7_13_v3", "end": 103878, "genome_id": 0, "start": 103658, "strand": "+"}, "microhaplotypes": [{"seq": "ACTGATGTTAATGAAGGCCAAAATGGAAAACGTTTAACACAAGAAAAAACCCTAAAACAAATTCCTTCGACATCACCAAATAATTTAGAACAAAAATTACAACAAACACATATTTCTTCTTCCCAACAAAAACATTTAATAAAAACTACTCCTACTTCAGATTCAACTACAACTTCATCAAGCTCTTCTGTTCCTCTTACAAAACAATCCCTTCATTC"}, {"seq": "ACTGATGTTAATGAAGGCCAAAATGGAAAAAGTTTAACACAAGAAAAAACCCTAAAACAAATTCCTTCGACATCACCAAATAATTTAGAACAAAAATTACAACAAACACATATTTCTTCTTCCCAACAAAAACATTTAATAAAAACTACTCCTACTTCAGATTCAACTACAACTTCATCAAGCTCTTCTGTTCCTCTTACAAAACAATCCCTTCATTC"}], "target_id": 13}, {"mhap_location": {"chrom": "Pf3D7_13_v3", "end": 156721, "genome_id": 0, "start": 156565, "strand": "+"}, "microhaplotypes": [{"seq": "ATAGAGTTATTATGTTCGAATTAATGACCAGATTGTTTCGATTTTATACAAAACCAATAGACCTTATTATTACTATGAATACACACAGATATGACACACCTATATTGTTAAAACATTCAAACAGCTTACAACTTATCTTATCAAATCAACAAAA"}, {"seq": "ATAGAGTTATTATGTTCGAATTAATGACCAGATTATTTCGATTTTATACAAAACCAATAGACCTTATTATTACTATGAATACACACAGATATGACACACCTATATTGTTAAAACATTCAAACAGCTTACAACTTATCTTATCAAATCAACAAAA"}], "target_id": 17}, {"mhap_location": {"chrom": "Pf3D7_01_v3", "end": 534367, "genome_id": 0, "start": 534214, "strand": "+"}, "microhaplotypes": [{"seq": "GATAAAAAAAGAAAATGTACTAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAGAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTG"}, {"seq": "GATAAAAAAAGAAAATGTAACAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAAAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCTATTAGTG"}, {"seq": "GATAAAAAAAGAAAATGTAATAATCTACTTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAGAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTG"}, {"seq": "GATAAAAAAAGAAAATGTAACAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAAAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTG"}, {"seq": "GATAAAAAAAGAAAATGTAATAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAAAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTG"}], "target_id": 84}, {"mhap_location": {"chrom": "Pf3D7_13_v3", "end": 1150492, "genome_id": 0, "start": 1150302, "strand": "+"}, "microhaplotypes": [{"seq": "TAAAAAAAGCAAACAAAAAGAAAAGAGAATGGAAGATTTAAGTATTGAGGAAAATTTGAAAGAGAAATTAATAAACCTAAATATTCAGAAACAGTATAGTGGTTTCCATATGAAAGAAATGGAGGAACAAAATATTCCTGAATTAAATATTCCACAACTTTCAGCTATTCATAATAGAGAAGATATGA"}, {"seq": "TAAAAAAAGCAAACAAAAAGAAAAGAGAATGGAAGATTTAAGTATTGAGGAAAATTTGAAAGAGAAATTAATAAACCTAAATATTCAGAAACAGTATAGTGGTTTCCATATGAAAGAAATGGAGGAACAAAATATTCCTGAATTAAATATTCCACAACTTTCAGCTACTCATAATAGAGAAGATATGA"}], "target_id": 9}, {"mhap_location": {"chrom": "Pf3D7_13_v3", "end": 1419669, "genome_id": 0, "start": 1419542, "strand": "+"}, "microhaplotypes": [{"seq": "TGGTTTTTGTACTTCTTTTCCTTGTGTTGATATCTCTTGTTCATTTTTAGATTGAGTATCTGTTTCACTTTGTGCCTTTACCTTTGATAATACGTTTTTACCGAATAATCCTAAATTTTGGAATA"}, {"seq": "TGGTTTTTGTACTTTTTGTCCTTGTGTTGATATCTCTTGTTCATTTTTAGATTGAGTATCTGTTTCACTTTGTGCCTTTACCTTTGATAATACGTTTTTACCGAATAATCCTAAATTTTGGAATA"}], "target_id": 8}, {"mhap_location": {"chrom": "Pf3D7_13_v3", "end": 1725569, "genome_id": 0, "start": 1725364, "strand": "+"}, "microhaplotypes": [{"seq": "CCAATACAATAAATTCTACCATTTGACGTAACACCACAATTATTTCTTCTAGGTATATTTAAATTACTTGAAACATACCATACATCTCTTAAACGATCATACACCTCAGTTTCAAATAAAGCCTTATAATCATAGTTATTACCACCAAAAACGTATAAGAAATTATTCAATACAGCACTTCCAAAATAAGCTTTTTTGGTAGA"}], "target_id": 10}, {"mhap_location": {"chrom": "Pf3D7_13_v3", "end": 1876533, "genome_id": 0, "start": 1876351, "strand": "+"}, "microhaplotypes": [{"seq": "TATATTTTGGTTCAGACAAATGTACGTTACATGAAATATGTGCACTATCATCAACTAAAGAAATATCTAAACTATCTGTAAAAGTATGTTTAGAACTAACATTTGAAGAGAAGTTACATCCGTGTATGACTTTTTTTTCATATTTTGGTTTTAAAACTATTTTATAATTATTATTTTTAA"}, {"seq": "TATATTTTGGTTCAGACAAATGTACGTTACATGAAATATGTGCATTATCATCAACTAAAGAAATATCTAAACTATCTGTAAAAGTATGTTTAGAACTATCATTTGAAGAGAAGTTACATCCGTGTATGACTTTTTTTTCATATTTTGGTTTTAAAACTATTTTATAATTATTATTTTTAA"}], "target_id": 11}, {"mhap_location": {"chrom": "Pf3D7_13_v3", "end": 2115141, "genome_id": 0, "start": 2114974, "strand": "+"}, "microhaplotypes": [{"seq": "TCATTAAGTAAAAAATTTACGGTATCGACATTAACAGTGTAATAATTTCTTCCTAAATTTAAATGTTCTATATAATTCAAATTTAATACGGTATTTAACCTTTCTTCAAGTATTATCATTGCATTAATTTGAAACATAAGTGAAAAATTATTAGCACTTCTAAAA"}, {"seq": "TCATTAAGTAAAAAATTTACGGTATCGACATTAACAGTGTAATAATTTCTTCCTAAATTTAAATGTTCTAAATAATTCAAATTTAATACGGTATTTAACCTTTCTTCAAGTATTATCATTGCATTAATTTGAAACATAAGTAAAAAATTATTAGCACTTCTAAAA"}, {"seq": "TCATTAAGTAAAAAATTTACGGTATCGACATTAACAGTGTAATAATGTCTTCCTAAATTTAAATGTTCTAAATAATTCAAATTTAATACGGTATTTAACCTTTCTTCAAGTATTATCATTGCATTAATTTGAAACATAAGTAAAAAATTATTAGCACTTCTAAAA"}], "target_id": 68}, {"mhap_location": {"chrom": "Pf3D7_13_v3", "end": 2124846, "genome_id": 0, "start": 2124633, "strand": "+"}, "microhaplotypes": [{"seq": "AACATTTTTTTAACATCTTTACCTTTTTGACTTGGTTCTTCATCATAATTCTGTTGTTCTGCAGAATCAGCATTTACTTCAGTTTCTTCTTTATTTTGAAAAGTGTTTGATTCTACATGAGAATTGGAAGATGAACGTCTATGTTTTACTTCTGTATAACTAGTACGTTCTCCAGTATGATGAGCCTTAAGGTTTACATCTTCAGTTTCTT"}], "target_id": 7}, {"mhap_location": {"chrom": "Pf3D7_13_v3", "end": 2479245, "genome_id": 0, "start": 2479085, "strand": "+"}, "microhaplotypes": [{"seq": "CTATGCTTTATCAAAACAAAGTAATGAAAATGTAATACATTATTCTTGTCGATCTATATGTGCTTTTACAAAAAACCCTAAGGGTTTAGAAGCGGTAAAGGATATCAAGGACTTTGCGAATATTATAAGTAAATCTGTTGGTGATTTGAGTAAAGAGA"}, {"seq": "CCATGCTTTATCAAAACAAAGTAATGAAAATGTAATACATTATTCTTGTCGATCTATATGTGCTTTTACAAAAAACCCTAAGGGTTTAGAAGCGGTAAAGGATATCAAGGACTTTGCGAATATTATAAGTAAATCTGTTGGTGATTTGAGTAAAGAGA"}], "target_id": 6}, {"mhap_location": {"chrom": "Pf3D7_13_v3", "end": 2481287, "genome_id": 0, "start": 2481105, "strand": "+"}, "microhaplotypes": [{"seq": "GAACTTACTTTAGAAGCCATGAATTCGGCCGATGATCCATTGGAAGCATTTAAAAATACTTTATTAATATTTGATTTTAATTTATCTGAATTTGATAAGGATCCATATATAAATGGTGTGCATGATTTAGCATCTAATATAAAGGATTGTTTAAGAAAAGGAGGTCAGAGTAAAATATAT"}, {"seq": "GAACTTACTTTAGAAGCCATGAATTCGGCCGATGATCCATTGGAAGCATTTAAAAATACTTTATTAATATTTGATTTTAATTTATCTGAATTTGATAAGGATCCATATGTAAATGGTGTGCATGATTTAGCATCTAATATAAAGGATTGTTTAAGAAAAGGAGGTCACAGTAAAATATAT"}], "target_id": 47}, {"mhap_location": {"chrom": "Pf3D7_13_v3", "end": 2669306, "genome_id": 0, "start": 2669134, "strand": "+"}, "microhaplotypes": [{"seq": "AAAAAAATACATTTAAATCTATAATATTTGTAATAAATGATAAGAATATTAGTAATAATAGGGTACTACTATTTGTAAATACTTTTCTACATAATTTATCAATAGTAGGAAATATGATATTCTTTTTGTTTGGCTTTATTTTATCTGGGATTTTCCAATCATAAAGTTCG"}], "target_id": 5}, {"mhap_location": {"chrom": "Pf3D7_14_v3", "end": 40136, "genome_id": 0, "start": 39952, "strand": "+"}, "microhaplotypes": [{"seq": "CATAGAAATATGTGCGAAAATTGGGAAAAAAATAAATAACAGGAATTGTTATATAAATTGAATCAAGAATGGCACAAAGAAAATAATACTGGTGACTTTCACACTAGTGATATCACACACAATAGTGGTATTACATACACTAGTGGTAACATACCTAGTGAAAGTAATAGTAGTTATATCCA"}, {"seq": "CATAGAAATGTGTGCGAAAATTGGGAAAAAAATAAATAACAGGAATTGTTAGATAAATTGAATGAAGAATGGCACAAAGAAAATAATACTGGTGACTTTCACACTAGTGATATCACACACAATAGTGGTATTACATACACTAGTGGTAACATACCTAGTGAAAGTAATAGTAGTTATATCTA"}, {"seq": "CATAGAAATATGTGCGAAAATTGGGAAAAAAATAAATAACAGGAATTGTTATATAAATTGAATCAAGAATGGCACAAAGAAAATAATACTGGTGACTTTCACACTAGTGATATCACACACAATAGTGGTATTACATACAGTAGTGGTAACATACCTAGTGAAAGTAATAGTAGTTATATCCA"}], "target_id": 55}, {"mhap_location": {"chrom": "Pf3D7_01_v3", "end": 535109, "genome_id": 0, "start": 534940, "strand": "+"}, "microhaplotypes": [{"seq": "ATATTCCGTCAGATATTCAAAATGAATGTATTTGTTCAAAAATAAATGAAGATAGAAATAATGATATGATAAACATATCTGAAATATTTTATCGTTTCATTAAATTTATAACAATGATTGAAATATATTTGTGTGTAATAGAGGAAATTAAAAGGGAAGAATGGGAA"}, {"seq": "ATATTCCGTCAGATATTCAAAATGAATGTATTTGTTCAAAAATAAATGAAGATAGAAATAATGATATGATAAACATATCTGAAATATATTATCGTTTCATTAAATTTATAACAATGATTGAAATATATTTGTGTGTAATAGAGGAAATTAAAAGGGAAGAATGGGAA"}, {"seq": "ATACTCCGTCAGATATTCAAAATGAATGTATTTGTTCAAAAATAAATGAAGATAGAAATAATGATATGATAAACATATCTGAAATATATTATCGTTTCATTAAATTTATAACAATGATTGAAATATATTTGTGTGTAATAGAGGAAATTAAAAGGGAAGAATGGGAA"}], "target_id": 76}, {"mhap_location": {"chrom": "Pf3D7_14_v3", "end": 120350, "genome_id": 0, "start": 120214, "strand": "+"}, "microhaplotypes": [{"seq": "TTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTCTGGACAATTACAATATTCATATCCATGAGCATTCTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAA"}, {"seq": "TTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTCTGGACAATTACAATATTCATATCCATGAACATTCTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAA"}, {"seq": "TTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTCTGGACAATTACAATATTCATATCCATGAGCATTGTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAA"}, {"seq": "TTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTGTGGACAATTACAATATTCATATCCATGAGCATTCTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAA"}], "target_id": 83}, {"mhap_location": {"chrom": "Pf3D7_14_v3", "end": 150293, "genome_id": 0, "start": 150104, "strand": "+"}, "microhaplotypes": [{"seq": "TAATAATAGTAATATAAAGAATTATTCAGCTGTAGATATATTCTCACCCAAAAAAACTGGAAAGGAATGTATTAAATGTCTCCCAGATAATTTTTGTGAATGCGAATGTAGTTGTAAAAATAAAACAGGTTTTTCAATGAAATATAGACATGCCAGTAAGGGATCTAAAAGATATAGTAAAAAAATG"}, {"seq": "TAATAATAGTAATATAAAGAATTATTCAGCTGTAGATATATTCTCACCCAAAAAAACTGGAAAGGAATGTATTAAATGTCTCCCAGATAATTTTTGTGAATGCGAATGTAGTTGTAAAAATAAAACAGGTTTTTCAATGAAATATAGACATGCCAGTAAGGGATCTAAAAGATATCGTAAAAAAATG"}], "target_id": 97}, {"mhap_location": {"chrom": "Pf3D7_14_v3", "end": 279785, "genome_id": 0, "start": 279662, "strand": "+"}, "microhaplotypes": [{"seq": "AGTTATAGTGATTCATATAAGGTAAATTGTATTAATTTCTCTGAAGGATTTTGTTGCTGTCATCCAATAAATAATTTAGCACTATTATATGGAGAGTATCAACAAAATCAAGAATCAAAAA"}, {"seq": "AGTAATAGTGATTCATATAAGGTAAATTGTATTAATTTCTCTGAAGGATTTTGTTGCTGTCATCCAATAAATAATTTAGCACTATTATATGGAGAGTATCAACAAAATCAAGAATCAAAAA"}], "target_id": 88}, {"mhap_location": {"chrom": "Pf3D7_14_v3", "end": 407570, "genome_id": 0, "start": 407378, "strand": "+"}, "microhaplotypes": [{"seq": "CTCCTTCCTTTTCATTCTTTACTTTATTTCTATTAATACACAACTCTCCTTGAGTTAAGAGATTTACGATATTATCAATATTGTTTTCTTTCATATACTTCAACTTTTTACTATTCATTTTTAAAAGATAATTAACCAAGTTACTCATGTTTGTATTAGATGGTATGTTCCCAATTTTTTCGTCTTTTCT"}, {"seq": "CTACTACCTTTTCATTCTTTACTTTATTTCTATTAATACACAACTCTCCTTGAGTTAAGAGATTTACGATATTATCAATATTGTTTTCTTTCATATACTTCAACTTTTTACTATTCATTTTTAAAAGATAATTAACCAAGTTACTCATGTTTGTATTAGATGGTATGTTCCCAATTTTTTCGTCTTTTCT"}], "target_id": 66}, {"mhap_location": {"chrom": "Pf3D7_14_v3", "end": 564376, "genome_id": 0, "start": 564207, "strand": "+"}, "microhaplotypes": [{"seq": "TATTAAAACTTTTTTTTCTTTCTGTAAAGTTTGTACATTATGTTTTGATGAGTTTTTATTATCTTCATAAAACTTTATATATTTATAAAAATTATTTTGTATAAAATCATTTAATAAAGGTAACATAATTTTTTTAGCTTGATTCAATTCACTACATGAATGTATAT"}, {"seq": "TATTAAAACTTTTTTTTCTTTCTGTAAAGTTTGTACATTATGTTTTGATGAGTTTTGATTATCTTCATAAAACTTTATATATTTATAAAAATTATTTTGTATAAAATCATTTAATAAAGGTAACATAATTTTTTTAGCTTGATTCAATTCACTACATGAATGTATAT"}], "target_id": 2}, {"mhap_location": {"chrom": "Pf3D7_14_v3", "end": 1038485, "genome_id": 0, "start": 1038368, "strand": "+"}, "microhaplotypes": [{"seq": "ATACAACTAATAAAGCTCTACGATAAATTTCTTTTTTATTTGATTTAGAAAAAGGAGAAAACCATTGAAACTTTTTGGCTAGATATTTATGGTCTTTATCAAAAATATATTCTGA"}, {"seq": "ATACAACTAATAAAGCTCTACGATAAATTTCTTTTTTATTTGATTTAGAAAAAGGAGAAAACCATTGAAACTTTTTGGCTAGATATTTATGGTCTTTATCAAAAATATAATCTGA"}], "target_id": 1}, {"mhap_location": {"chrom": "Pf3D7_14_v3", "end": 1956285, "genome_id": 0, "start": 1956128, "strand": "+"}, "microhaplotypes": [{"seq": "TATATATAAAGTTAAACCTATAAATAATACACTACCTAATAAACTATTCTTATATTTAAAAATAAATATAATACATGTTATTAATCCTTCTATTGTTGCCGGAATAATATACATTAAAACAGAACTCATCAAATTATTAGCACTCTCGGTACCTC"}, {"seq": "TATATAAAGTTAAACCTATAAATAATACACTACCTAATAAACTATTCTTATATTTAAAAATAAATATAATACATGTTATTAATCCTTCTATTGTTGCCGGAATAATATACATTAAAACAGAACTCATCAAATTATTAGCACTCTCGGTACCTC"}, {"seq": "TATATATAAAGTTAAACCTATAAATAATACACTACCTAATAAACTATTCTTATATTTAAAAATAAATATAACACATGTTATTAATCCTTCTATTGTTGCCGGAATAATATACATTAAAACAGAACTCATCAAATTATTAGCACTCTCGGTACCTC"}], "target_id": 0}, {"mhap_location": {"chrom": "Pf3D7_14_v3", "end": 1992425, "genome_id": 0, "start": 1992288, "strand": "+"}, "microhaplotypes": [{"seq": "TAATCACCAGTACCATTTTTTTCTGATAAATTAATATTTTTTTGTATAACATCATATTTATCCCTTTTCGTGGTAAGTGCAGTATCCTGTTTTATTATTATATTATCGAATTCATCATGGTGTATATTTCTTTCT"}, {"seq": "TAAACACCAGTACCATTTTTTTCTGATAAATTAATATTTTTTTGTATAACATCATATTTATCCCTTTTCGTGGTAAGTGCAGTATCCTGTTTTATTATTATATTATCGAATTCATCATGGTGTATATTTCTTTCA"}, {"seq": "TAAACACCAGTACCATTTTTTTCTGATAAATTAATATTTTTTTGTATAACATCATATTTATCCCTTTTCGTGGTAAGTGCAGTATCCTGTTTTATTATTATATTATCGAATTCATCATGGTGTATATTTCTTTCT"}], "target_id": 50}, {"mhap_location": {"chrom": "Pf3D7_14_v3", "end": 2525088, "genome_id": 0, "start": 2524961, "strand": "+"}, "microhaplotypes": [{"seq": "AATGAGGTATAATCATTCATTTCGTTGGGTCGATTTGATCTATTTTTAAGGTCCATATATTGAGATGAATCATTATGCATTTTATAATCATGAGGGATATTAGGTGCATGGTATTTAGGGTCTTT"}, {"seq": "AATGAGGTATAATCATCCATTTCGTTGGGTCGATTTGATCTATTTTTAAGGTCCATATATTGAGATGAATCATTATGCATTTTATAATCATGAGGGATATTAGGTGCATGGTATTTAGGGTCTTT"}, {"seq": "AAAGAGGTATAATCATCCATTTTGTTGGGTCGATTTGATCTATTTTTAAGGTCCATATATTGAGATGAATCATTATGCATTTTATAATCATGAGGGATATTAGGTGCATGGTATTTAGGGTCTTT"}], "target_id": 12}, {"mhap_location": {"chrom": "Pf3D7_14_v3", "end": 3124841, "genome_id": 0, "start": 3124641, "strand": "+"}, "microhaplotypes": [{"seq": "ATGGAAAAATGGAATATGAAGTATTAAGTGATGATAATATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGGTGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATAATATGTGGTCTACTTCTGGACTAGGGTTCTATGAAT"}, {"seq": "ATGGAAAAATGGAATATGAAGTATTAAGTGATGATAAAATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGATGACGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATAATATGTGGTCTACTTCTGGACTAGGGTTCTATGAAT"}, {"seq": "ATGGAAAAATGGAATATGAAGTATTAAGTGATGATAAAATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGATGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATAATATGTGGTCTACTTCTGGACTAGGGTTCTATGAAT"}, {"seq": "ATGGAAAAATGGAATATGAAGTATTAAGTGATGATAAAATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGGTGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATGATATGTGGTCTACTTCTGGACTAGGGTTCTATGAAT"}, {"seq": "ATGGAAAAATGGAATATGAAGTATTAAGTGATGATAAAATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGATGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATGATATGTGGTCTACTTCTGGACTAGGGTTCTATGAAT"}], "target_id": 31}, {"mhap_location": {"chrom": "Pf3D7_12_v3", "end": 1237602, "genome_id": 0, "start": 1237430, "strand": "+"}, "microhaplotypes": [{"seq": "GTATGAACACAAAACCGAAAGAGAGTTTAAAAAAAGATCCGATTTTAATGAAGGAAGAAATAACATAATAAATGTGTCAAATGTAAAGAAAACATGTAATATAGTTAAAAATGATTTAAAGGAATCTAACGAGATAAAAACTAATATAAACACAAGTTCTTATAATTTAT"}], "target_id": 53}]}, "detected_microhaplotypes": [{"bioinformatics_run_id": 0, "library_samples": [{"library_sample_id": 1, "target_results": [{"mhaps": [{"mhap_id": 1, "reads": 2227}, {"mhap_id": 2, "reads": 51}], "mhaps_target_id": 98}, {"mhaps": [{"mhap_id": 0, "reads": 19391}], "mhaps_target_id": 97}, {"mhaps": [{"mhap_id": 2, "reads": 16586}], "mhaps_target_id": 96}, {"mhaps": [{"mhap_id": 2, "reads": 836}, {"mhap_id": 0, "reads": 33}], "mhaps_target_id": 95}, {"mhaps": [{"mhap_id": 0, "reads": 6967}], "mhaps_target_id": 94}, {"mhaps": [{"mhap_id": 1, "reads": 1010}], "mhaps_target_id": 93}, {"mhaps": [{"mhap_id": 0, "reads": 300}], "mhaps_target_id": 86}, {"mhaps": [{"mhap_id": 0, "reads": 4256}], "mhaps_target_id": 84}, {"mhaps": [{"mhap_id": 0, "reads": 958}], "mhaps_target_id": 83}, {"mhaps": [{"mhap_id": 0, "reads": 31313}], "mhaps_target_id": 79}, {"mhaps": [{"mhap_id": 0, "reads": 2554}], "mhaps_target_id": 78}, {"mhaps": [{"mhap_id": 0, "reads": 1379}], "mhaps_target_id": 81}, {"mhaps": [{"mhap_id": 0, "reads": 1089}], "mhaps_target_id": 75}, {"mhaps": [{"mhap_id": 0, "reads": 2310}], "mhaps_target_id": 72}, {"mhaps": [{"mhap_id": 1, "reads": 44681}], "mhaps_target_id": 71}, {"mhaps": [{"mhap_id": 0, "reads": 365}, {"mhap_id": 2, "reads": 19}], "mhaps_target_id": 69}, {"mhaps": [{"mhap_id": 0, "reads": 282}], "mhaps_target_id": 67}, {"mhaps": [{"mhap_id": 1, "reads": 3831}, {"mhap_id": 0, "reads": 64}], "mhaps_target_id": 63}, {"mhaps": [{"mhap_id": 1, "reads": 507}], "mhaps_target_id": 56}, {"mhaps": [{"mhap_id": 1, "reads": 2790}, {"mhap_id": 0, "reads": 67}], "mhaps_target_id": 10}, {"mhaps": [{"mhap_id": 0, "reads": 1186}, {"mhap_id": 1, "reads": 20}], "mhaps_target_id": 55}, {"mhaps": [{"mhap_id": 2, "reads": 5344}], "mhaps_target_id": 41}, {"mhaps": [{"mhap_id": 0, "reads": 10595}], "mhaps_target_id": 54}, {"mhaps": [{"mhap_id": 1, "reads": 1420}, {"mhap_id": 0, "reads": 30}], "mhaps_target_id": 50}, {"mhaps": [{"mhap_id": 0, "reads": 11091}], "mhaps_target_id": 48}, {"mhaps": [{"mhap_id": 1, "reads": 3576}], "mhaps_target_id": 59}, {"mhaps": [{"mhap_id": 0, "reads": 377}, {"mhap_id": 1, "reads": 15}], "mhaps_target_id": 7}, {"mhaps": [{"mhap_id": 0, "reads": 710}], "mhaps_target_id": 45}, {"mhaps": [{"mhap_id": 0, "reads": 259}, {"mhap_id": 1, "reads": 15}], "mhaps_target_id": 40}, {"mhaps": [{"mhap_id": 1, "reads": 1009}], "mhaps_target_id": 43}, {"mhaps": [{"mhap_id": 0, "reads": 3485}, {"mhap_id": 2, "reads": 31}], "mhaps_target_id": 74}, {"mhaps": [{"mhap_id": 1, "reads": 16766}, {"mhap_id": 0, "reads": 93}], "mhaps_target_id": 38}, {"mhaps": [{"mhap_id": 0, "reads": 13601}], "mhaps_target_id": 33}, {"mhaps": [{"mhap_id": 0, "reads": 33117}], "mhaps_target_id": 37}, {"mhaps": [{"mhap_id": 1, "reads": 1980}, {"mhap_id": 0, "reads": 15}], "mhaps_target_id": 14}, {"mhaps": [{"mhap_id": 1, "reads": 957}, {"mhap_id": 0, "reads": 25}], "mhaps_target_id": 32}, {"mhaps": [{"mhap_id": 0, "reads": 6197}], "mhaps_target_id": 39}, {"mhaps": [{"mhap_id": 0, "reads": 19559}], "mhaps_target_id": 29}, {"mhaps": [{"mhap_id": 0, "reads": 1167}], "mhaps_target_id": 85}, {"mhaps": [{"mhap_id": 0, "reads": 5895}], "mhaps_target_id": 11}, {"mhaps": [{"mhap_id": 0, "reads": 733}], "mhaps_target_id": 28}, {"mhaps": [{"mhap_id": 0, "reads": 860}], "mhaps_target_id": 26}, {"mhaps": [{"mhap_id": 0, "reads": 4213}], "mhaps_target_id": 27}, {"mhaps": [{"mhap_id": 1, "reads": 560}, {"mhap_id": 0, "reads": 19}], "mhaps_target_id": 58}, {"mhaps": [{"mhap_id": 0, "reads": 361}, {"mhap_id": 2, "reads": 17}], "mhaps_target_id": 21}, {"mhaps": [{"mhap_id": 0, "reads": 23438}], "mhaps_target_id": 31}, {"mhaps": [{"mhap_id": 1, "reads": 511}, {"mhap_id": 0, "reads": 16}], "mhaps_target_id": 92}, {"mhaps": [{"mhap_id": 0, "reads": 2230}, {"mhap_id": 1, "reads": 17}], "mhaps_target_id": 24}, {"mhaps": [{"mhap_id": 1, "reads": 419}], "mhaps_target_id": 82}, {"mhaps": [{"mhap_id": 1, "reads": 14122}], "mhaps_target_id": 70}, {"mhaps": [{"mhap_id": 0, "reads": 25203}], "mhaps_target_id": 57}, {"mhaps": [{"mhap_id": 0, "reads": 516}], "mhaps_target_id": 19}, {"mhaps": [{"mhap_id": 1, "reads": 2249}, {"mhap_id": 0, "reads": 48}, {"mhap_id": 2, "reads": 20}], "mhaps_target_id": 88}, {"mhaps": [{"mhap_id": 0, "reads": 371}], "mhaps_target_id": 4}, {"mhaps": [{"mhap_id": 1, "reads": 515}, {"mhap_id": 0, "reads": 22}], "mhaps_target_id": 0}, {"mhaps": [{"mhap_id": 1, "reads": 7336}], "mhaps_target_id": 3}, {"mhaps": [{"mhap_id": 1, "reads": 486}, {"mhap_id": 0, "reads": 20}], "mhaps_target_id": 87}, {"mhaps": [{"mhap_id": 0, "reads": 1564}, {"mhap_id": 1, "reads": 15}], "mhaps_target_id": 68}, {"mhaps": [{"mhap_id": 0, "reads": 17721}], "mhaps_target_id": 64}, {"mhaps": [{"mhap_id": 0, "reads": 784}], "mhaps_target_id": 25}, {"mhaps": [{"mhap_id": 0, "reads": 283}], "mhaps_target_id": 36}, {"mhaps": [{"mhap_id": 1, "reads": 7629}], "mhaps_target_id": 8}, {"mhaps": [{"mhap_id": 2, "reads": 1964}, {"mhap_id": 0, "reads": 50}], "mhaps_target_id": 16}, {"mhaps": [{"mhap_id": 0, "reads": 1213}], "mhaps_target_id": 80}, {"mhaps": [{"mhap_id": 1, "reads": 11070}, {"mhap_id": 0, "reads": 106}], "mhaps_target_id": 15}, {"mhaps": [{"mhap_id": 1, "reads": 2500}, {"mhap_id": 2, "reads": 39}], "mhaps_target_id": 60}, {"mhaps": [{"mhap_id": 0, "reads": 24537}], "mhaps_target_id": 30}, {"mhaps": [{"mhap_id": 0, "reads": 1868}, {"mhap_id": 2, "reads": 18}, {"mhap_id": 1, "reads": 15}], "mhaps_target_id": 13}, {"mhaps": [{"mhap_id": 1, "reads": 22789}], "mhaps_target_id": 89}, {"mhaps": [{"mhap_id": 2, "reads": 3602}, {"mhap_id": 0, "reads": 20}], "mhaps_target_id": 77}, {"mhaps": [{"mhap_id": 2, "reads": 2155}, {"mhap_id": 0, "reads": 16}, {"mhap_id": 3, "reads": 11}], "mhaps_target_id": 42}, {"mhaps": [{"mhap_id": 1, "reads": 16298}], "mhaps_target_id": 91}, {"mhaps": [{"mhap_id": 1, "reads": 2079}, {"mhap_id": 0, "reads": 38}], "mhaps_target_id": 65}, {"mhaps": [{"mhap_id": 0, "reads": 4739}], "mhaps_target_id": 22}, {"mhaps": [{"mhap_id": 0, "reads": 775}], "mhaps_target_id": 73}, {"mhaps": [{"mhap_id": 0, "reads": 618}], "mhaps_target_id": 20}, {"mhaps": [{"mhap_id": 1, "reads": 20051}], "mhaps_target_id": 46}, {"mhaps": [{"mhap_id": 1, "reads": 1533}, {"mhap_id": 0, "reads": 12}], "mhaps_target_id": 9}, {"mhaps": [{"mhap_id": 1, "reads": 34752}], "mhaps_target_id": 5}, {"mhaps": [{"mhap_id": 2, "reads": 6522}], "mhaps_target_id": 34}, {"mhaps": [{"mhap_id": 0, "reads": 26863}], "mhaps_target_id": 23}, {"mhaps": [{"mhap_id": 2, "reads": 15285}], "mhaps_target_id": 47}, {"mhaps": [{"mhap_id": 0, "reads": 1324}], "mhaps_target_id": 90}, {"mhaps": [{"mhap_id": 0, "reads": 1590}], "mhaps_target_id": 1}, {"mhaps": [{"mhap_id": 1, "reads": 46824}], "mhaps_target_id": 2}]}, {"library_sample_id": 0, "target_results": [{"mhaps": [{"mhap_id": 1, "reads": 23292}, {"mhap_id": 0, "reads": 8192}], "mhaps_target_id": 54}, {"mhaps": [{"mhap_id": 0, "reads": 17655}, {"mhap_id": 1, "reads": 6421}], "mhaps_target_id": 21}, {"mhaps": [{"mhap_id": 0, "reads": 29456}, {"mhap_id": 1, "reads": 6163}], "mhaps_target_id": 96}, {"mhaps": [{"mhap_id": 0, "reads": 33182}, {"mhap_id": 1, "reads": 283}], "mhaps_target_id": 95}, {"mhaps": [{"mhap_id": 0, "reads": 32066}], "mhaps_target_id": 94}, {"mhaps": [{"mhap_id": 0, "reads": 38609}], "mhaps_target_id": 93}, {"mhaps": [{"mhap_id": 0, "reads": 48414}], "mhaps_target_id": 46}, {"mhaps": [{"mhap_id": 1, "reads": 30508}, {"mhap_id": 0, "reads": 6187}], "mhaps_target_id": 30}, {"mhaps": [{"mhap_id": 0, "reads": 25447}], "mhaps_target_id": 86}, {"mhaps": [{"mhap_id": 0, "reads": 21610}], "mhaps_target_id": 84}, {"mhaps": [{"mhap_id": 0, "reads": 42576}], "mhaps_target_id": 83}, {"mhaps": [{"mhap_id": 0, "reads": 49627}], "mhaps_target_id": 79}, {"mhaps": [{"mhap_id": 0, "reads": 45595}], "mhaps_target_id": 78}, {"mhaps": [{"mhap_id": 0, "reads": 17913}], "mhaps_target_id": 80}, {"mhaps": [{"mhap_id": 0, "reads": 42252}], "mhaps_target_id": 81}, {"mhaps": [{"mhap_id": 0, "reads": 37051}, {"mhap_id": 1, "reads": 12590}], "mhaps_target_id": 97}, {"mhaps": [{"mhap_id": 0, "reads": 49953}], "mhaps_target_id": 75}, {"mhaps": [{"mhap_id": 0, "reads": 33844}], "mhaps_target_id": 72}, {"mhaps": [{"mhap_id": 1, "reads": 19299}, {"mhap_id": 0, "reads": 6398}], "mhaps_target_id": 16}, {"mhaps": [{"mhap_id": 0, "reads": 46915}], "mhaps_target_id": 71}, {"mhaps": [{"mhap_id": 0, "reads": 41720}, {"mhap_id": 1, "reads": 8246}], "mhaps_target_id": 76}, {"mhaps": [{"mhap_id": 0, "reads": 28472}, {"mhap_id": 1, "reads": 10008}], "mhaps_target_id": 69}, {"mhaps": [{"mhap_id": 0, "reads": 18960}], "mhaps_target_id": 66}, {"mhaps": [{"mhap_id": 0, "reads": 33183}], "mhaps_target_id": 63}, {"mhaps": [{"mhap_id": 0, "reads": 31147}], "mhaps_target_id": 68}, {"mhaps": [{"mhap_id": 0, "reads": 35366}], "mhaps_target_id": 62}, {"mhaps": [{"mhap_id": 0, "reads": 29611}], "mhaps_target_id": 61}, {"mhaps": [{"mhap_id": 0, "reads": 27075}], "mhaps_target_id": 56}, {"mhaps": [{"mhap_id": 0, "reads": 26668}, {"mhap_id": 1, "reads": 9510}], "mhaps_target_id": 51}, {"mhaps": [{"mhap_id": 0, "reads": 28161}], "mhaps_target_id": 50}, {"mhaps": [{"mhap_id": 0, "reads": 48791}], "mhaps_target_id": 31}, {"mhaps": [{"mhap_id": 0, "reads": 11363}, {"mhap_id": 1, "reads": 4463}], "mhaps_target_id": 49}, {"mhaps": [{"mhap_id": 0, "reads": 43173}], "mhaps_target_id": 35}, {"mhaps": [{"mhap_id": 1, "reads": 35561}, {"mhap_id": 0, "reads": 14385}], "mhaps_target_id": 48}, {"mhaps": [{"mhap_id": 0, "reads": 45402}], "mhaps_target_id": 98}, {"mhaps": [{"mhap_id": 0, "reads": 21661}, {"mhap_id": 1, "reads": 7975}], "mhaps_target_id": 47}, {"mhaps": [{"mhap_id": 1, "reads": 34294}, {"mhap_id": 0, "reads": 12740}], "mhaps_target_id": 27}, {"mhaps": [{"mhap_id": 0, "reads": 49955}], "mhaps_target_id": 59}, {"mhaps": [{"mhap_id": 0, "reads": 16463}], "mhaps_target_id": 40}, {"mhaps": [{"mhap_id": 1, "reads": 37292}, {"mhap_id": 0, "reads": 12510}], "mhaps_target_id": 74}, {"mhaps": [{"mhap_id": 0, "reads": 24539}], "mhaps_target_id": 7}, {"mhaps": [{"mhap_id": 0, "reads": 41530}], "mhaps_target_id": 45}, {"mhaps": [{"mhap_id": 0, "reads": 29642}, {"mhap_id": 1, "reads": 12542}], "mhaps_target_id": 33}, {"mhaps": [{"mhap_id": 1, "reads": 20519}, {"mhap_id": 0, "reads": 7538}], "mhaps_target_id": 67}, {"mhaps": [{"mhap_id": 0, "reads": 27730}], "mhaps_target_id": 37}, {"mhaps": [{"mhap_id": 0, "reads": 49338}], "mhaps_target_id": 3}, {"mhaps": [{"mhap_id": 0, "reads": 32341}, {"mhap_id": 1, "reads": 12140}], "mhaps_target_id": 14}, {"mhaps": [{"mhap_id": 0, "reads": 49365}], "mhaps_target_id": 32}, {"mhaps": [{"mhap_id": 0, "reads": 39009}], "mhaps_target_id": 39}, {"mhaps": [{"mhap_id": 1, "reads": 27621}, {"mhap_id": 0, "reads": 9786}], "mhaps_target_id": 29}, {"mhaps": [{"mhap_id": 0, "reads": 29934}], "mhaps_target_id": 85}, {"mhaps": [{"mhap_id": 0, "reads": 49971}], "mhaps_target_id": 11}, {"mhaps": [{"mhap_id": 0, "reads": 23924}], "mhaps_target_id": 28}, {"mhaps": [{"mhap_id": 0, "reads": 29713}], "mhaps_target_id": 26}, {"mhaps": [{"mhap_id": 0, "reads": 38625}], "mhaps_target_id": 87}, {"mhaps": [{"mhap_id": 0, "reads": 49969}], "mhaps_target_id": 64}, {"mhaps": [{"mhap_id": 0, "reads": 45069}], "mhaps_target_id": 8}, {"mhaps": [{"mhap_id": 0, "reads": 24050}], "mhaps_target_id": 19}, {"mhaps": [{"mhap_id": 0, "reads": 41999}], "mhaps_target_id": 36}, {"mhaps": [{"mhap_id": 0, "reads": 48335}], "mhaps_target_id": 65}, {"mhaps": [{"mhap_id": 1, "reads": 22586}, {"mhap_id": 0, "reads": 18757}], "mhaps_target_id": 25}, {"mhaps": [{"mhap_id": 0, "reads": 37449}, {"mhap_id": 1, "reads": 12495}], "mhaps_target_id": 34}, {"mhaps": [{"mhap_id": 0, "reads": 31005}, {"mhap_id": 1, "reads": 6377}], "mhaps_target_id": 57}, {"mhaps": [{"mhap_id": 0, "reads": 44271}], "mhaps_target_id": 23}, {"mhaps": [{"mhap_id": 0, "reads": 24451}], "mhaps_target_id": 58}, {"mhaps": [{"mhap_id": 0, "reads": 49746}], "mhaps_target_id": 92}, {"mhaps": [{"mhap_id": 0, "reads": 28724}, {"mhap_id": 1, "reads": 21186}], "mhaps_target_id": 24}, {"mhaps": [{"mhap_id": 0, "reads": 25672}], "mhaps_target_id": 82}, {"mhaps": [{"mhap_id": 0, "reads": 35612}], "mhaps_target_id": 70}, {"mhaps": [{"mhap_id": 0, "reads": 49786}], "mhaps_target_id": 15}, {"mhaps": [{"mhap_id": 0, "reads": 29564}], "mhaps_target_id": 60}, {"mhaps": [{"mhap_id": 0, "reads": 21816}], "mhaps_target_id": 18}, {"mhaps": [{"mhap_id": 0, "reads": 36326}], "mhaps_target_id": 6}, {"mhaps": [{"mhap_id": 0, "reads": 21602}, {"mhap_id": 1, "reads": 7824}], "mhaps_target_id": 13}, {"mhaps": [{"mhap_id": 0, "reads": 31697}], "mhaps_target_id": 38}, {"mhaps": [{"mhap_id": 0, "reads": 33113}, {"mhap_id": 1, "reads": 11252}], "mhaps_target_id": 88}, {"mhaps": [{"mhap_id": 0, "reads": 3203}, {"mhap_id": 1, "reads": 2781}], "mhaps_target_id": 52}, {"mhaps": [{"mhap_id": 0, "reads": 28266}, {"mhap_id": 1, "reads": 9483}], "mhaps_target_id": 4}, {"mhaps": [{"mhap_id": 0, "reads": 34463}, {"mhap_id": 1, "reads": 11600}], "mhaps_target_id": 0}, {"mhaps": [{"mhap_id": 0, "reads": 37213}], "mhaps_target_id": 43}, {"mhaps": [{"mhap_id": 0, "reads": 24157}, {"mhap_id": 1, "reads": 18874}], "mhaps_target_id": 22}, {"mhaps": [{"mhap_id": 0, "reads": 10520}, {"mhap_id": 1, "reads": 3622}], "mhaps_target_id": 12}, {"mhaps": [{"mhap_id": 0, "reads": 49745}], "mhaps_target_id": 89}, {"mhaps": [{"mhap_id": 0, "reads": 24530}, {"mhap_id": 1, "reads": 9730}], "mhaps_target_id": 77}, {"mhaps": [{"mhap_id": 1, "reads": 22427}, {"mhap_id": 0, "reads": 8239}], "mhaps_target_id": 42}, {"mhaps": [{"mhap_id": 0, "reads": 35294}, {"mhap_id": 1, "reads": 12195}], "mhaps_target_id": 41}, {"mhaps": [{"mhap_id": 0, "reads": 49972}], "mhaps_target_id": 55}, {"mhaps": [{"mhap_id": 0, "reads": 37605}], "mhaps_target_id": 91}, {"mhaps": [{"mhap_id": 0, "reads": 19230}], "mhaps_target_id": 53}, {"mhaps": [{"mhap_id": 0, "reads": 49701}], "mhaps_target_id": 10}, {"mhaps": [{"mhap_id": 1, "reads": 30585}, {"mhap_id": 0, "reads": 10686}], "mhaps_target_id": 73}, {"mhaps": [{"mhap_id": 0, "reads": 32967}], "mhaps_target_id": 20}, {"mhaps": [{"mhap_id": 0, "reads": 3634}], "mhaps_target_id": 44}, {"mhaps": [{"mhap_id": 0, "reads": 28109}], "mhaps_target_id": 9}, {"mhaps": [{"mhap_id": 0, "reads": 37013}], "mhaps_target_id": 5}, {"mhaps": [{"mhap_id": 0, "reads": 21764}, {"mhap_id": 1, "reads": 7383}], "mhaps_target_id": 17}, {"mhaps": [{"mhap_id": 0, "reads": 34162}], "mhaps_target_id": 90}, {"mhaps": [{"mhap_id": 0, "reads": 49728}], "mhaps_target_id": 1}, {"mhaps": [{"mhap_id": 0, "reads": 49740}], "mhaps_target_id": 2}]}]}, {"bioinformatics_run_id": 1, "library_samples": [{"library_sample_id": 3, "target_results": [{"mhaps": [{"mhap_id": 3, "reads": 289}], "mhaps_target_id": 2}, {"mhaps": [{"mhap_id": 1, "reads": 333}], "mhaps_target_id": 47}, {"mhaps": [{"mhap_id": 4, "reads": 480}], "mhaps_target_id": 98}, {"mhaps": [{"mhap_id": 0, "reads": 427}], "mhaps_target_id": 75}, {"mhaps": [{"mhap_id": 2, "reads": 181}], "mhaps_target_id": 97}, {"mhaps": [{"mhap_id": 2, "reads": 352}], "mhaps_target_id": 21}, {"mhaps": [{"mhap_id": 0, "reads": 333}], "mhaps_target_id": 99}, {"mhaps": [{"mhap_id": 2, "reads": 302}], "mhaps_target_id": 96}, {"mhaps": [{"mhap_id": 0, "reads": 299}], "mhaps_target_id": 95}, {"mhaps": [{"mhap_id": 1, "reads": 230}], "mhaps_target_id": 94}, {"mhaps": [{"mhap_id": 1, "reads": 268}], "mhaps_target_id": 93}, {"mhaps": [{"mhap_id": 1, "reads": 301}], "mhaps_target_id": 30}, {"mhaps": [{"mhap_id": 1, "reads": 271}], "mhaps_target_id": 46}, {"mhaps": [{"mhap_id": 0, "reads": 260}], "mhaps_target_id": 86}, {"mhaps": [{"mhap_id": 1, "reads": 358}], "mhaps_target_id": 84}, {"mhaps": [{"mhap_id": 0, "reads": 329}], "mhaps_target_id": 83}, {"mhaps": [{"mhap_id": 0, "reads": 305}], "mhaps_target_id": 79}, {"mhaps": [{"mhap_id": 1, "reads": 208}], "mhaps_target_id": 78}, {"mhaps": [{"mhap_id": 0, "reads": 360}], "mhaps_target_id": 80}, {"mhaps": [{"mhap_id": 1, "reads": 311}], "mhaps_target_id": 81}, {"mhaps": [{"mhap_id": 2, "reads": 377}], "mhaps_target_id": 72}, {"mhaps": [{"mhap_id": 0, "reads": 446}], "mhaps_target_id": 16}, {"mhaps": [{"mhap_id": 3, "reads": 361}], "mhaps_target_id": 71}, {"mhaps": [{"mhap_id": 0, "reads": 324}], "mhaps_target_id": 76}, {"mhaps": [{"mhap_id": 2, "reads": 282}], "mhaps_target_id": 69}, {"mhaps": [{"mhap_id": 0, "reads": 208}], "mhaps_target_id": 66}, {"mhaps": [{"mhap_id": 1, "reads": 408}], "mhaps_target_id": 63}, {"mhaps": [{"mhap_id": 2, "reads": 286}], "mhaps_target_id": 68}, {"mhaps": [{"mhap_id": 0, "reads": 363}], "mhaps_target_id": 62}, {"mhaps": [{"mhap_id": 0, "reads": 387}], "mhaps_target_id": 61}, {"mhaps": [{"mhap_id": 2, "reads": 362}], "mhaps_target_id": 51}, {"mhaps": [{"mhap_id": 2, "reads": 316}], "mhaps_target_id": 50}, {"mhaps": [{"mhap_id": 1, "reads": 356}], "mhaps_target_id": 31}, {"mhaps": [{"mhap_id": 3, "reads": 374}], "mhaps_target_id": 49}, {"mhaps": [{"mhap_id": 2, "reads": 317}], "mhaps_target_id": 35}, {"mhaps": [{"mhap_id": 2, "reads": 288}], "mhaps_target_id": 48}, {"mhaps": [{"mhap_id": 2, "reads": 354}], "mhaps_target_id": 43}, {"mhaps": [{"mhap_id": 3, "reads": 441}], "mhaps_target_id": 33}, {"mhaps": [{"mhap_id": 0, "reads": 385}], "mhaps_target_id": 67}, {"mhaps": [{"mhap_id": 0, "reads": 156}], "mhaps_target_id": 37}, {"mhaps": [{"mhap_id": 1, "reads": 391}], "mhaps_target_id": 3}, {"mhaps": [{"mhap_id": 1, "reads": 469}], "mhaps_target_id": 14}, {"mhaps": [{"mhap_id": 0, "reads": 276}], "mhaps_target_id": 32}, {"mhaps": [{"mhap_id": 1, "reads": 441}], "mhaps_target_id": 85}, {"mhaps": [{"mhap_id": 1, "reads": 395}], "mhaps_target_id": 11}, {"mhaps": [{"mhap_id": 1, "reads": 305}], "mhaps_target_id": 28}, {"mhaps": [{"mhap_id": 1, "reads": 346}], "mhaps_target_id": 26}, {"mhaps": [{"mhap_id": 1, "reads": 326}], "mhaps_target_id": 59}, {"mhaps": [{"mhap_id": 0, "reads": 382}], "mhaps_target_id": 27}, {"mhaps": [{"mhap_id": 0, "reads": 433}], "mhaps_target_id": 87}, {"mhaps": [{"mhap_id": 0, "reads": 310}], "mhaps_target_id": 64}, {"mhaps": [{"mhap_id": 3, "reads": 333}], "mhaps_target_id": 8}, {"mhaps": [{"mhap_id": 0, "reads": 350}], "mhaps_target_id": 19}, {"mhaps": [{"mhap_id": 0, "reads": 257}], "mhaps_target_id": 36}, {"mhaps": [{"mhap_id": 0, "reads": 235}], "mhaps_target_id": 65}, {"mhaps": [{"mhap_id": 4, "reads": 348}], "mhaps_target_id": 25}, {"mhaps": [{"mhap_id": 2, "reads": 335}], "mhaps_target_id": 58}, {"mhaps": [{"mhap_id": 0, "reads": 262}], "mhaps_target_id": 73}, {"mhaps": [{"mhap_id": 1, "reads": 385}], "mhaps_target_id": 20}, {"mhaps": [{"mhap_id": 0, "reads": 289}], "mhaps_target_id": 92}, {"mhaps": [{"mhap_id": 0, "reads": 366}], "mhaps_target_id": 24}, {"mhaps": [{"mhap_id": 2, "reads": 270}], "mhaps_target_id": 82}, {"mhaps": [{"mhap_id": 3, "reads": 346}], "mhaps_target_id": 70}, {"mhaps": [{"mhap_id": 0, "reads": 293}], "mhaps_target_id": 23}, {"mhaps": [{"mhap_id": 1, "reads": 356}], "mhaps_target_id": 57}, {"mhaps": [{"mhap_id": 1, "reads": 316}], "mhaps_target_id": 17}, {"mhaps": [{"mhap_id": 3, "reads": 358}], "mhaps_target_id": 15}, {"mhaps": [{"mhap_id": 1, "reads": 366}], "mhaps_target_id": 60}, {"mhaps": [{"mhap_id": 0, "reads": 420}], "mhaps_target_id": 18}, {"mhaps": [{"mhap_id": 0, "reads": 341}], "mhaps_target_id": 6}, {"mhaps": [{"mhap_id": 2, "reads": 392}], "mhaps_target_id": 13}, {"mhaps": [{"mhap_id": 1, "reads": 327}], "mhaps_target_id": 9}, {"mhaps": [{"mhap_id": 1, "reads": 351}], "mhaps_target_id": 53}, {"mhaps": [{"mhap_id": 0, "reads": 287}], "mhaps_target_id": 91}, {"mhaps": [{"mhap_id": 3, "reads": 420}], "mhaps_target_id": 12}, {"mhaps": [{"mhap_id": 2, "reads": 405}], "mhaps_target_id": 22}, {"mhaps": [{"mhap_id": 2, "reads": 399}], "mhaps_target_id": 45}, {"mhaps": [{"mhap_id": 2, "reads": 395}], "mhaps_target_id": 74}, {"mhaps": [{"mhap_id": 0, "reads": 370}], "mhaps_target_id": 7}, {"mhaps": [{"mhap_id": 2, "reads": 418}], "mhaps_target_id": 40}, {"mhaps": [{"mhap_id": 1, "reads": 261}], "mhaps_target_id": 5}, {"mhaps": [{"mhap_id": 3, "reads": 439}], "mhaps_target_id": 41}, {"mhaps": [{"mhap_id": 1, "reads": 251}], "mhaps_target_id": 52}, {"mhaps": [{"mhap_id": 2, "reads": 308}], "mhaps_target_id": 38}, {"mhaps": [{"mhap_id": 2, "reads": 398}], "mhaps_target_id": 88}, {"mhaps": [{"mhap_id": 0, "reads": 300}], "mhaps_target_id": 4}, {"mhaps": [{"mhap_id": 1, "reads": 329}], "mhaps_target_id": 0}, {"mhaps": [{"mhap_id": 0, "reads": 250}], "mhaps_target_id": 89}, {"mhaps": [{"mhap_id": 4, "reads": 340}], "mhaps_target_id": 77}, {"mhaps": [{"mhap_id": 4, "reads": 303}], "mhaps_target_id": 42}, {"mhaps": [{"mhap_id": 1, "reads": 389}], "mhaps_target_id": 34}, {"mhaps": [{"mhap_id": 0, "reads": 302}], "mhaps_target_id": 90}, {"mhaps": [{"mhap_id": 2, "reads": 338}], "mhaps_target_id": 1}, {"mhaps": [{"mhap_id": 2, "reads": 357}], "mhaps_target_id": 39}, {"mhaps": [{"mhap_id": 1, "reads": 300}], "mhaps_target_id": 29}, {"mhaps": [{"mhap_id": 0, "reads": 293}], "mhaps_target_id": 44}, {"mhaps": [{"mhap_id": 4, "reads": 358}], "mhaps_target_id": 56}, {"mhaps": [{"mhap_id": 0, "reads": 290}], "mhaps_target_id": 10}]}, {"library_sample_id": 2, "target_results": [{"mhaps": [{"mhap_id": 2, "reads": 1191}], "mhaps_target_id": 2}, {"mhaps": [{"mhap_id": 0, "reads": 1129}], "mhaps_target_id": 54}, {"mhaps": [{"mhap_id": 1, "reads": 920}, {"mhap_id": 2, "reads": 291}], "mhaps_target_id": 21}, {"mhaps": [{"mhap_id": 0, "reads": 1039}], "mhaps_target_id": 99}, {"mhaps": [{"mhap_id": 2, "reads": 1151}], "mhaps_target_id": 96}, {"mhaps": [{"mhap_id": 0, "reads": 1177}], "mhaps_target_id": 95}, {"mhaps": [{"mhap_id": 0, "reads": 1221}], "mhaps_target_id": 94}, {"mhaps": [{"mhap_id": 1, "reads": 1076}], "mhaps_target_id": 93}, {"mhaps": [{"mhap_id": 1, "reads": 1090}], "mhaps_target_id": 30}, {"mhaps": [{"mhap_id": 1, "reads": 1137}], "mhaps_target_id": 46}, {"mhaps": [{"mhap_id": 0, "reads": 884}], "mhaps_target_id": 86}, {"mhaps": [{"mhap_id": 1, "reads": 1417}], "mhaps_target_id": 84}, {"mhaps": [{"mhap_id": 0, "reads": 1282}], "mhaps_target_id": 83}, {"mhaps": [{"mhap_id": 1, "reads": 1295}], "mhaps_target_id": 79}, {"mhaps": [{"mhap_id": 0, "reads": 1488}], "mhaps_target_id": 78}, {"mhaps": [{"mhap_id": 0, "reads": 1455}], "mhaps_target_id": 80}, {"mhaps": [{"mhap_id": 1, "reads": 1375}], "mhaps_target_id": 81}, {"mhaps": [{"mhap_id": 0, "reads": 928}], "mhaps_target_id": 97}, {"mhaps": [{"mhap_id": 1, "reads": 1439}], "mhaps_target_id": 75}, {"mhaps": [{"mhap_id": 1, "reads": 1315}], "mhaps_target_id": 72}, {"mhaps": [{"mhap_id": 0, "reads": 1434}], "mhaps_target_id": 16}, {"mhaps": [{"mhap_id": 2, "reads": 997}], "mhaps_target_id": 71}, {"mhaps": [{"mhap_id": 0, "reads": 1208}], "mhaps_target_id": 76}, {"mhaps": [{"mhap_id": 3, "reads": 788}, {"mhap_id": 2, "reads": 321}], "mhaps_target_id": 69}, {"mhaps": [{"mhap_id": 0, "reads": 1354}], "mhaps_target_id": 66}, {"mhaps": [{"mhap_id": 0, "reads": 1234}], "mhaps_target_id": 63}, {"mhaps": [{"mhap_id": 0, "reads": 1117}], "mhaps_target_id": 68}, {"mhaps": [{"mhap_id": 1, "reads": 833}, {"mhap_id": 2, "reads": 336}], "mhaps_target_id": 62}, {"mhaps": [{"mhap_id": 1, "reads": 1451}], "mhaps_target_id": 61}, {"mhaps": [{"mhap_id": 2, "reads": 1283}], "mhaps_target_id": 51}, {"mhaps": [{"mhap_id": 1, "reads": 915}, {"mhap_id": 0, "reads": 267}], "mhaps_target_id": 50}, {"mhaps": [{"mhap_id": 1, "reads": 1209}], "mhaps_target_id": 31}, {"mhaps": [{"mhap_id": 0, "reads": 2063}, {"mhap_id": 2, "reads": 450}], "mhaps_target_id": 49}, {"mhaps": [{"mhap_id": 1, "reads": 1319}], "mhaps_target_id": 35}, {"mhaps": [{"mhap_id": 2, "reads": 1196}], "mhaps_target_id": 48}, {"mhaps": [{"mhap_id": 3, "reads": 1507}], "mhaps_target_id": 98}, {"mhaps": [{"mhap_id": 1, "reads": 843}, {"mhap_id": 2, "reads": 269}], "mhaps_target_id": 47}, {"mhaps": [{"mhap_id": 0, "reads": 1411}], "mhaps_target_id": 43}, {"mhaps": [{"mhap_id": 2, "reads": 1334}], "mhaps_target_id": 33}, {"mhaps": [{"mhap_id": 0, "reads": 937}, {"mhap_id": 1, "reads": 318}], "mhaps_target_id": 67}, {"mhaps": [{"mhap_id": 0, "reads": 1066}], "mhaps_target_id": 37}, {"mhaps": [{"mhap_id": 2, "reads": 1128}], "mhaps_target_id": 3}, {"mhaps": [{"mhap_id": 2, "reads": 1500}], "mhaps_target_id": 14}, {"mhaps": [{"mhap_id": 0, "reads": 1276}], "mhaps_target_id": 32}, {"mhaps": [{"mhap_id": 1, "reads": 1370}], "mhaps_target_id": 85}, {"mhaps": [{"mhap_id": 2, "reads": 1011}, {"mhap_id": 1, "reads": 347}], "mhaps_target_id": 11}, {"mhaps": [{"mhap_id": 0, "reads": 1288}], "mhaps_target_id": 28}, {"mhaps": [{"mhap_id": 2, "reads": 955}, {"mhap_id": 1, "reads": 313}], "mhaps_target_id": 26}, {"mhaps": [{"mhap_id": 2, "reads": 1171}], "mhaps_target_id": 59}, {"mhaps": [{"mhap_id": 0, "reads": 1197}], "mhaps_target_id": 27}, {"mhaps": [{"mhap_id": 2, "reads": 952}, {"mhap_id": 0, "reads": 403}], "mhaps_target_id": 87}, {"mhaps": [{"mhap_id": 0, "reads": 1100}], "mhaps_target_id": 64}, {"mhaps": [{"mhap_id": 2, "reads": 1133}], "mhaps_target_id": 8}, {"mhaps": [{"mhap_id": 0, "reads": 1293}], "mhaps_target_id": 19}, {"mhaps": [{"mhap_id": 0, "reads": 1257}], "mhaps_target_id": 36}, {"mhaps": [{"mhap_id": 0, "reads": 1338}], "mhaps_target_id": 65}, {"mhaps": [{"mhap_id": 2, "reads": 934}, {"mhap_id": 3, "reads": 318}], "mhaps_target_id": 25}, {"mhaps": [{"mhap_id": 2, "reads": 1371}], "mhaps_target_id": 58}, {"mhaps": [{"mhap_id": 0, "reads": 933}, {"mhap_id": 1, "reads": 338}], "mhaps_target_id": 73}, {"mhaps": [{"mhap_id": 2, "reads": 712}, {"mhap_id": 1, "reads": 289}], "mhaps_target_id": 20}, {"mhaps": [{"mhap_id": 0, "reads": 1413}], "mhaps_target_id": 92}, {"mhaps": [{"mhap_id": 2, "reads": 1196}], "mhaps_target_id": 24}, {"mhaps": [{"mhap_id": 1, "reads": 1348}], "mhaps_target_id": 82}, {"mhaps": [{"mhap_id": 2, "reads": 1207}], "mhaps_target_id": 70}, {"mhaps": [{"mhap_id": 1, "reads": 909}], "mhaps_target_id": 23}, {"mhaps": [{"mhap_id": 1, "reads": 1135}], "mhaps_target_id": 57}, {"mhaps": [{"mhap_id": 2, "reads": 951}, {"mhap_id": 1, "reads": 318}], "mhaps_target_id": 17}, {"mhaps": [{"mhap_id": 2, "reads": 964}, {"mhap_id": 0, "reads": 294}], "mhaps_target_id": 15}, {"mhaps": [{"mhap_id": 3, "reads": 1397}], "mhaps_target_id": 60}, {"mhaps": [{"mhap_id": 0, "reads": 1251}], "mhaps_target_id": 18}, {"mhaps": [{"mhap_id": 1, "reads": 910}, {"mhap_id": 0, "reads": 337}], "mhaps_target_id": 6}, {"mhaps": [{"mhap_id": 2, "reads": 1039}, {"mhap_id": 0, "reads": 325}], "mhaps_target_id": 13}, {"mhaps": [{"mhap_id": 2, "reads": 1489}], "mhaps_target_id": 9}, {"mhaps": [{"mhap_id": 0, "reads": 814}, {"mhap_id": 1, "reads": 267}], "mhaps_target_id": 53}, {"mhaps": [{"mhap_id": 0, "reads": 1186}], "mhaps_target_id": 91}, {"mhaps": [{"mhap_id": 2, "reads": 1496}], "mhaps_target_id": 12}, {"mhaps": [{"mhap_id": 1, "reads": 1454}], "mhaps_target_id": 22}, {"mhaps": [{"mhap_id": 1, "reads": 1224}], "mhaps_target_id": 45}, {"mhaps": [{"mhap_id": 0, "reads": 1429}], "mhaps_target_id": 74}, {"mhaps": [{"mhap_id": 0, "reads": 1097}, {"mhap_id": 1, "reads": 350}], "mhaps_target_id": 7}, {"mhaps": [{"mhap_id": 2, "reads": 1493}], "mhaps_target_id": 40}, {"mhaps": [{"mhap_id": 1, "reads": 1024}], "mhaps_target_id": 5}, {"mhaps": [{"mhap_id": 3, "reads": 1365}], "mhaps_target_id": 41}, {"mhaps": [{"mhap_id": 1, "reads": 1097}], "mhaps_target_id": 52}, {"mhaps": [{"mhap_id": 3, "reads": 819}, {"mhap_id": 2, "reads": 273}], "mhaps_target_id": 38}, {"mhaps": [{"mhap_id": 2, "reads": 1121}], "mhaps_target_id": 88}, {"mhaps": [{"mhap_id": 2, "reads": 1227}], "mhaps_target_id": 4}, {"mhaps": [{"mhap_id": 2, "reads": 1058}, {"mhap_id": 3, "reads": 245}], "mhaps_target_id": 0}, {"mhaps": [{"mhap_id": 2, "reads": 732}, {"mhap_id": 3, "reads": 253}], "mhaps_target_id": 89}, {"mhaps": [{"mhap_id": 3, "reads": 883}, {"mhap_id": 2, "reads": 299}], "mhaps_target_id": 77}, {"mhaps": [{"mhap_id": 0, "reads": 1076}], "mhaps_target_id": 42}, {"mhaps": [{"mhap_id": 3, "reads": 991}], "mhaps_target_id": 34}, {"mhaps": [{"mhap_id": 1, "reads": 1158}], "mhaps_target_id": 90}, {"mhaps": [{"mhap_id": 1, "reads": 1341}], "mhaps_target_id": 1}, {"mhaps": [{"mhap_id": 1, "reads": 992}, {"mhap_id": 0, "reads": 302}], "mhaps_target_id": 39}, {"mhaps": [{"mhap_id": 2, "reads": 1184}], "mhaps_target_id": 29}, {"mhaps": [{"mhap_id": 0, "reads": 1304}], "mhaps_target_id": 44}, {"mhaps": [{"mhap_id": 2, "reads": 810}, {"mhap_id": 3, "reads": 364}], "mhaps_target_id": 56}, {"mhaps": [{"mhap_id": 0, "reads": 1356}], "mhaps_target_id": 55}, {"mhaps": [{"mhap_id": 2, "reads": 1109}], "mhaps_target_id": 10}]}]}], "read_counts_by_stage": [{"bioinformatics_run_id": 0, "read_counts_by_library_sample_by_stage": [{"library_sample_id": 1, "read_counts_for_targets": [{"stages": [{"read_count": 15285, "stage": "final"}, {"read_count": 16686, "stage": "demultiplexed"}], "target_id": 32}, {"stages": [{"read_count": 2278, "stage": "final"}, {"read_count": 2448, "stage": "demultiplexed"}], "target_id": 31}, {"stages": [{"read_count": 1089, "stage": "final"}, {"read_count": 1172, "stage": "demultiplexed"}], "target_id": 13}, {"stages": [{"read_count": 19391, "stage": "final"}, {"read_count": 20615, "stage": "demultiplexed"}], "target_id": 12}, {"stages": [{"read_count": 10595, "stage": "final"}, {"read_count": 11645, "stage": "demultiplexed"}], "target_id": 51}, {"stages": [{"read_count": 378, "stage": "final"}, {"read_count": 408, "stage": "demultiplexed"}], "target_id": 52}, {"stages": [{"read_count": 16586, "stage": "final"}, {"read_count": 17719, "stage": "demultiplexed"}], "target_id": 50}, {"stages": [{"read_count": 869, "stage": "final"}, {"read_count": 936, "stage": "demultiplexed"}], "target_id": 0}, {"stages": [{"read_count": 6967, "stage": "final"}, {"read_count": 7810, "stage": "demultiplexed"}], "target_id": 1}, {"stages": [{"read_count": 1010, "stage": "final"}, {"read_count": 1080, "stage": "demultiplexed"}], "target_id": 2}, {"stages": [{"read_count": 20051, "stage": "final"}, {"read_count": 21658, "stage": "demultiplexed"}], "target_id": 3}, {"stages": [{"read_count": 24537, "stage": "final"}, {"read_count": 26316, "stage": "demultiplexed"}], "target_id": 4}, {"stages": [{"read_count": 300, "stage": "final"}, {"read_count": 327, "stage": "demultiplexed"}], "target_id": 5}, {"stages": [{"read_count": 4256, "stage": "final"}, {"read_count": 4550, "stage": "demultiplexed"}], "target_id": 6}, {"stages": [{"read_count": 958, "stage": "final"}, {"read_count": 1028, "stage": "demultiplexed"}], "target_id": 7}, {"stages": [{"read_count": 31313, "stage": "final"}, {"read_count": 34255, "stage": "demultiplexed"}], "target_id": 8}, {"stages": [{"read_count": 2554, "stage": "final"}, {"read_count": 2798, "stage": "demultiplexed"}], "target_id": 9}, {"stages": [{"read_count": 1213, "stage": "final"}, {"read_count": 1271, "stage": "demultiplexed"}], "target_id": 10}, {"stages": [{"read_count": 1379, "stage": "final"}, {"read_count": 1462, "stage": "demultiplexed"}], "target_id": 11}, {"stages": [{"read_count": 2310, "stage": "final"}, {"read_count": 2421, "stage": "demultiplexed"}], "target_id": 14}, {"stages": [{"read_count": 2014, "stage": "final"}, {"read_count": 2126, "stage": "demultiplexed"}], "target_id": 15}, {"stages": [{"read_count": 44681, "stage": "final"}, {"read_count": 47559, "stage": "demultiplexed"}], "target_id": 16}, {"stages": [{"read_count": 273, "stage": "demultiplexed"}], "target_id": 17}, {"stages": [{"read_count": 384, "stage": "final"}, {"read_count": 410, "stage": "demultiplexed"}], "target_id": 18}, {"stages": [{"read_count": 507, "stage": "final"}, {"read_count": 594, "stage": "demultiplexed"}], "target_id": 24}, {"stages": [{"read_count": 226, "stage": "demultiplexed"}], "target_id": 19}, {"stages": [{"read_count": 3895, "stage": "final"}, {"read_count": 4189, "stage": "demultiplexed"}], "target_id": 20}, {"stages": [{"read_count": 1579, "stage": "final"}, {"read_count": 1650, "stage": "demultiplexed"}], "target_id": 21}, {"stages": [{"read_count": 222, "stage": "demultiplexed"}], "target_id": 22}, {"stages": [{"read_count": 170, "stage": "demultiplexed"}], "target_id": 23}, {"stages": [{"read_count": 150, "stage": "demultiplexed"}], "target_id": 25}, {"stages": [{"read_count": 1450, "stage": "final"}, {"read_count": 1537, "stage": "demultiplexed"}], "target_id": 26}, {"stages": [{"read_count": 23438, "stage": "final"}, {"read_count": 25268, "stage": "demultiplexed"}], "target_id": 27}, {"stages": [{"read_count": 128, "stage": "demultiplexed"}], "target_id": 28}, {"stages": [{"read_count": 269, "stage": "demultiplexed"}], "target_id": 29}, {"stages": [{"read_count": 11091, "stage": "final"}, {"read_count": 11848, "stage": "demultiplexed"}], "target_id": 30}, {"stages": [{"read_count": 6522, "stage": "final"}, {"read_count": 7079, "stage": "demultiplexed"}], "target_id": 62}, {"stages": [{"read_count": 25203, "stage": "final"}, {"read_count": 27285, "stage": "demultiplexed"}], "target_id": 63}, {"stages": [{"read_count": 26863, "stage": "final"}, {"read_count": 29317, "stage": "demultiplexed"}], "target_id": 64}, {"stages": [{"read_count": 13601, "stage": "final"}, {"read_count": 14870, "stage": "demultiplexed"}], "target_id": 39}, {"stages": [{"read_count": 282, "stage": "final"}, {"read_count": 298, "stage": "demultiplexed"}], "target_id": 40}, {"stages": [{"read_count": 33117, "stage": "final"}, {"read_count": 35774, "stage": "demultiplexed"}], "target_id": 41}, {"stages": [{"read_count": 7336, "stage": "final"}, {"read_count": 8382, "stage": "demultiplexed"}], "target_id": 42}, {"stages": [{"read_count": 1995, "stage": "final"}, {"read_count": 2099, "stage": "demultiplexed"}], "target_id": 43}, {"stages": [{"read_count": 982, "stage": "final"}, {"read_count": 1036, "stage": "demultiplexed"}], "target_id": 44}, {"stages": [{"read_count": 6197, "stage": "final"}, {"read_count": 6765, "stage": "demultiplexed"}], "target_id": 45}, {"stages": [{"read_count": 19559, "stage": "final"}, {"read_count": 20984, "stage": "demultiplexed"}], "target_id": 46}, {"stages": [{"read_count": 1167, "stage": "final"}, {"read_count": 1229, "stage": "demultiplexed"}], "target_id": 47}, {"stages": [{"read_count": 5895, "stage": "final"}, {"read_count": 6380, "stage": "demultiplexed"}], "target_id": 48}, {"stages": [{"read_count": 733, "stage": "final"}, {"read_count": 786, "stage": "demultiplexed"}], "target_id": 49}, {"stages": [{"read_count": 3576, "stage": "final"}, {"read_count": 3856, "stage": "demultiplexed"}], "target_id": 34}, {"stages": [{"read_count": 4213, "stage": "final"}, {"read_count": 4575, "stage": "demultiplexed"}], "target_id": 33}, {"stages": [{"read_count": 860, "stage": "final"}, {"read_count": 942, "stage": "demultiplexed"}], "target_id": 54}, {"stages": [{"read_count": 506, "stage": "final"}, {"read_count": 546, "stage": "demultiplexed"}], "target_id": 55}, {"stages": [{"read_count": 17721, "stage": "final"}, {"read_count": 19024, "stage": "demultiplexed"}], "target_id": 56}, {"stages": [{"read_count": 516, "stage": "final"}, {"read_count": 546, "stage": "demultiplexed"}], "target_id": 58}, {"stages": [{"read_count": 283, "stage": "final"}, {"read_count": 298, "stage": "demultiplexed"}], "target_id": 59}, {"stages": [{"read_count": 7629, "stage": "final"}, {"read_count": 8260, "stage": "demultiplexed"}], "target_id": 57}, {"stages": [{"read_count": 2117, "stage": "final"}, {"read_count": 2224, "stage": "demultiplexed"}], "target_id": 60}, {"stages": [{"read_count": 784, "stage": "final"}, {"read_count": 826, "stage": "demultiplexed"}], "target_id": 61}, {"stages": [{"read_count": 579, "stage": "final"}, {"read_count": 622, "stage": "demultiplexed"}], "target_id": 65}, {"stages": [{"read_count": 527, "stage": "final"}, {"read_count": 563, "stage": "demultiplexed"}], "target_id": 66}, {"stages": [{"read_count": 2247, "stage": "final"}, {"read_count": 2384, "stage": "demultiplexed"}], "target_id": 67}, {"stages": [{"read_count": 419, "stage": "final"}, {"read_count": 444, "stage": "demultiplexed"}], "target_id": 68}, {"stages": [{"read_count": 14122, "stage": "final"}, {"read_count": 16039, "stage": "demultiplexed"}], "target_id": 69}, {"stages": [{"read_count": 1009, "stage": "final"}, {"read_count": 1071, "stage": "demultiplexed"}], "target_id": 80}, {"stages": [{"read_count": 274, "stage": "final"}, {"read_count": 300, "stage": "demultiplexed"}], "target_id": 35}, {"stages": [{"read_count": 392, "stage": "final"}, {"read_count": 426, "stage": "demultiplexed"}], "target_id": 37}, {"stages": [{"read_count": 3516, "stage": "final"}, {"read_count": 3818, "stage": "demultiplexed"}], "target_id": 36}, {"stages": [{"read_count": 2317, "stage": "final"}, {"read_count": 2458, "stage": "demultiplexed"}], "target_id": 76}, {"stages": [{"read_count": 16859, "stage": "final"}, {"read_count": 17934, "stage": "demultiplexed"}], "target_id": 75}, {"stages": [{"read_count": 4739, "stage": "final"}, {"read_count": 5188, "stage": "demultiplexed"}], "target_id": 81}, {"stages": [{"read_count": 19, "stage": "demultiplexed"}], "target_id": 82}, {"stages": [{"read_count": 371, "stage": "final"}, {"read_count": 413, "stage": "demultiplexed"}], "target_id": 78}, {"stages": [{"read_count": 537, "stage": "final"}, {"read_count": 595, "stage": "demultiplexed"}], "target_id": 79}, {"stages": [{"read_count": 11176, "stage": "final"}, {"read_count": 12286, "stage": "demultiplexed"}], "target_id": 70}, {"stages": [{"read_count": 2539, "stage": "final"}, {"read_count": 2663, "stage": "demultiplexed"}], "target_id": 71}, {"stages": [{"read_count": 232, "stage": "demultiplexed"}], "target_id": 72}, {"stages": [{"read_count": 172, "stage": "demultiplexed"}], "target_id": 73}, {"stages": [{"read_count": 1901, "stage": "final"}, {"read_count": 2051, "stage": "demultiplexed"}], "target_id": 74}, {"stages": [{"read_count": 22789, "stage": "final"}, {"read_count": 25098, "stage": "demultiplexed"}], "target_id": 83}, {"stages": [{"read_count": 3622, "stage": "final"}, {"read_count": 3947, "stage": "demultiplexed"}], "target_id": 84}, {"stages": [{"read_count": 2182, "stage": "final"}, {"read_count": 2296, "stage": "demultiplexed"}], "target_id": 85}, {"stages": [{"read_count": 5344, "stage": "final"}, {"read_count": 5849, "stage": "demultiplexed"}], "target_id": 86}, {"stages": [{"read_count": 1206, "stage": "final"}, {"read_count": 1279, "stage": "demultiplexed"}], "target_id": 87}, {"stages": [{"read_count": 16298, "stage": "final"}, {"read_count": 17431, "stage": "demultiplexed"}], "target_id": 88}, {"stages": [{"read_count": 106, "stage": "demultiplexed"}], "target_id": 89}, {"stages": [{"read_count": 2857, "stage": "final"}, {"read_count": 3115, "stage": "demultiplexed"}], "target_id": 90}, {"stages": [{"read_count": 710, "stage": "final"}, {"read_count": 774, "stage": "demultiplexed"}], "target_id": 38}, {"stages": [{"read_count": 775, "stage": "final"}, {"read_count": 813, "stage": "demultiplexed"}], "target_id": 91}, {"stages": [{"read_count": 618, "stage": "final"}, {"read_count": 655, "stage": "demultiplexed"}], "target_id": 92}, {"stages": [{"read_count": 4, "stage": "demultiplexed"}], "target_id": 93}, {"stages": [{"read_count": 1545, "stage": "final"}, {"read_count": 1630, "stage": "demultiplexed"}], "target_id": 94}, {"stages": [{"read_count": 170, "stage": "demultiplexed"}], "target_id": 96}, {"stages": [{"read_count": 34752, "stage": "final"}, {"read_count": 37672, "stage": "demultiplexed"}], "target_id": 95}, {"stages": [{"read_count": 1324, "stage": "final"}, {"read_count": 1416, "stage": "demultiplexed"}], "target_id": 97}, {"stages": [{"read_count": 1590, "stage": "final"}, {"read_count": 1663, "stage": "demultiplexed"}], "target_id": 98}, {"stages": [{"read_count": 46824, "stage": "final"}, {"read_count": 50413, "stage": "demultiplexed"}], "target_id": 99}], "total_raw_count": 806549}, {"library_sample_id": 0, "read_counts_for_targets": [{"stages": [{"read_count": 31484, "stage": "final"}], "target_id": 51}, {"stages": [{"read_count": 24076, "stage": "final"}], "target_id": 52}, {"stages": [{"read_count": 35619, "stage": "final"}], "target_id": 50}, {"stages": [{"read_count": 33465, "stage": "final"}], "target_id": 0}, {"stages": [{"read_count": 32066, "stage": "final"}], "target_id": 1}, {"stages": [{"read_count": 38609, "stage": "final"}], "target_id": 2}, {"stages": [{"read_count": 48414, "stage": "final"}], "target_id": 3}, {"stages": [{"read_count": 36695, "stage": "final"}], "target_id": 4}, {"stages": [{"read_count": 25447, "stage": "final"}], "target_id": 5}, {"stages": [{"read_count": 21610, "stage": "final"}], "target_id": 6}, {"stages": [{"read_count": 42576, "stage": "final"}], "target_id": 7}, {"stages": [{"read_count": 49627, "stage": "final"}], "target_id": 8}, {"stages": [{"read_count": 45595, "stage": "final"}], "target_id": 9}, {"stages": [{"read_count": 17913, "stage": "final"}], "target_id": 10}, {"stages": [{"read_count": 42252, "stage": "final"}], "target_id": 11}, {"stages": [{"read_count": 49641, "stage": "final"}], "target_id": 12}, {"stages": [{"read_count": 49953, "stage": "final"}], "target_id": 13}, {"stages": [{"read_count": 33844, "stage": "final"}], "target_id": 14}, {"stages": [{"read_count": 25697, "stage": "final"}], "target_id": 15}, {"stages": [{"read_count": 46915, "stage": "final"}], "target_id": 16}, {"stages": [{"read_count": 49966, "stage": "final"}], "target_id": 17}, {"stages": [{"read_count": 38480, "stage": "final"}], "target_id": 18}, {"stages": [{"read_count": 18960, "stage": "final"}], "target_id": 19}, {"stages": [{"read_count": 33183, "stage": "final"}], "target_id": 20}, {"stages": [{"read_count": 31147, "stage": "final"}], "target_id": 21}, {"stages": [{"read_count": 35366, "stage": "final"}], "target_id": 22}, {"stages": [{"read_count": 29611, "stage": "final"}], "target_id": 23}, {"stages": [{"read_count": 27075, "stage": "final"}], "target_id": 24}, {"stages": [{"read_count": 36178, "stage": "final"}], "target_id": 25}, {"stages": [{"read_count": 28161, "stage": "final"}], "target_id": 26}, {"stages": [{"read_count": 48791, "stage": "final"}], "target_id": 27}, {"stages": [{"read_count": 15826, "stage": "final"}], "target_id": 28}, {"stages": [{"read_count": 43173, "stage": "final"}], "target_id": 29}, {"stages": [{"read_count": 49946, "stage": "final"}], "target_id": 30}, {"stages": [{"read_count": 45402, "stage": "final"}], "target_id": 31}, {"stages": [{"read_count": 29636, "stage": "final"}], "target_id": 32}, {"stages": [{"read_count": 47034, "stage": "final"}], "target_id": 33}, {"stages": [{"read_count": 49955, "stage": "final"}], "target_id": 34}, {"stages": [{"read_count": 16463, "stage": "final"}], "target_id": 35}, {"stages": [{"read_count": 49802, "stage": "final"}], "target_id": 36}, {"stages": [{"read_count": 24539, "stage": "final"}], "target_id": 37}, {"stages": [{"read_count": 41530, "stage": "final"}], "target_id": 38}, {"stages": [{"read_count": 42184, "stage": "final"}], "target_id": 39}, {"stages": [{"read_count": 28057, "stage": "final"}], "target_id": 40}, {"stages": [{"read_count": 27730, "stage": "final"}], "target_id": 41}, {"stages": [{"read_count": 49338, "stage": "final"}], "target_id": 42}, {"stages": [{"read_count": 44481, "stage": "final"}], "target_id": 43}, {"stages": [{"read_count": 49365, "stage": "final"}], "target_id": 44}, {"stages": [{"read_count": 39009, "stage": "final"}], "target_id": 45}, {"stages": [{"read_count": 37407, "stage": "final"}], "target_id": 46}, {"stages": [{"read_count": 29934, "stage": "final"}], "target_id": 47}, {"stages": [{"read_count": 49971, "stage": "final"}], "target_id": 48}, {"stages": [{"read_count": 23924, "stage": "final"}], "target_id": 49}, {"stages": [{"read_count": 29713, "stage": "final"}], "target_id": 54}, {"stages": [{"read_count": 38625, "stage": "final"}], "target_id": 55}, {"stages": [{"read_count": 49969, "stage": "final"}], "target_id": 56}, {"stages": [{"read_count": 45069, "stage": "final"}], "target_id": 57}, {"stages": [{"read_count": 24050, "stage": "final"}], "target_id": 58}, {"stages": [{"read_count": 41999, "stage": "final"}], "target_id": 59}, {"stages": [{"read_count": 48335, "stage": "final"}], "target_id": 60}, {"stages": [{"read_count": 41343, "stage": "final"}], "target_id": 61}, {"stages": [{"read_count": 49944, "stage": "final"}], "target_id": 62}, {"stages": [{"read_count": 37382, "stage": "final"}], "target_id": 63}, {"stages": [{"read_count": 44271, "stage": "final"}], "target_id": 64}, {"stages": [{"read_count": 24451, "stage": "final"}], "target_id": 65}, {"stages": [{"read_count": 49746, "stage": "final"}], "target_id": 66}, {"stages": [{"read_count": 49910, "stage": "final"}], "target_id": 67}, {"stages": [{"read_count": 25672, "stage": "final"}], "target_id": 68}, {"stages": [{"read_count": 35612, "stage": "final"}], "target_id": 69}, {"stages": [{"read_count": 49786, "stage": "final"}], "target_id": 70}, {"stages": [{"read_count": 29564, "stage": "final"}], "target_id": 71}, {"stages": [{"read_count": 21816, "stage": "final"}], "target_id": 72}, {"stages": [{"read_count": 36326, "stage": "final"}], "target_id": 73}, {"stages": [{"read_count": 29426, "stage": "final"}], "target_id": 74}, {"stages": [{"read_count": 31697, "stage": "final"}], "target_id": 75}, {"stages": [{"read_count": 44365, "stage": "final"}], "target_id": 76}, {"stages": [{"read_count": 5984, "stage": "final"}], "target_id": 77}, {"stages": [{"read_count": 37749, "stage": "final"}], "target_id": 78}, {"stages": [{"read_count": 46063, "stage": "final"}], "target_id": 79}, {"stages": [{"read_count": 37213, "stage": "final"}], "target_id": 80}, {"stages": [{"read_count": 43031, "stage": "final"}], "target_id": 81}, {"stages": [{"read_count": 14142, "stage": "final"}], "target_id": 82}, {"stages": [{"read_count": 49745, "stage": "final"}], "target_id": 83}, {"stages": [{"read_count": 34260, "stage": "final"}], "target_id": 84}, {"stages": [{"read_count": 30666, "stage": "final"}], "target_id": 85}, {"stages": [{"read_count": 47489, "stage": "final"}], "target_id": 86}, {"stages": [{"read_count": 49972, "stage": "final"}], "target_id": 87}, {"stages": [{"read_count": 37605, "stage": "final"}], "target_id": 88}, {"stages": [{"read_count": 19230, "stage": "final"}], "target_id": 89}, {"stages": [{"read_count": 49701, "stage": "final"}], "target_id": 90}, {"stages": [{"read_count": 41271, "stage": "final"}], "target_id": 91}, {"stages": [{"read_count": 32967, "stage": "final"}], "target_id": 92}, {"stages": [{"read_count": 3634, "stage": "final"}], "target_id": 93}, {"stages": [{"read_count": 28109, "stage": "final"}], "target_id": 94}, {"stages": [{"read_count": 37013, "stage": "final"}], "target_id": 95}, {"stages": [{"read_count": 29147, "stage": "final"}], "target_id": 96}, {"stages": [{"read_count": 34162, "stage": "final"}], "target_id": 97}, {"stages": [{"read_count": 49728, "stage": "final"}], "target_id": 98}, {"stages": [{"read_count": 49740, "stage": "final"}], "target_id": 99}], "total_raw_count": 6858739}]}]} +{ + "pmo_header": { + "pmo_version": "v1.0.0", + "creation_date": "2025-11-03", + "generation_method": { + "program_name": "pmotools-python.PMOReader.combine_multiple_pmos", + "program_version": "v1.0.0" + } + }, + "targeted_genomes": [ + { + "chromosomes": [ + "Pf3D7_01_v3", + "Pf3D7_02_v3", + "Pf3D7_03_v3", + "Pf3D7_04_v3", + "Pf3D7_05_v3", + "Pf3D7_06_v3", + "Pf3D7_07_v3", + "Pf3D7_08_v3", + "Pf3D7_09_v3", + "Pf3D7_10_v3", + "Pf3D7_11_v3", + "Pf3D7_12_v3", + "Pf3D7_13_v3", + "Pf3D7_14_v3", + "Pf3D7_API_v3", + "Pf3D7_MIT_v3" + ], + "genome_version": "2020-09-01", + "gff_url": "https://plasmodb.org/common/downloads/release-65/Pfalciparum3D7/gff/data/PlasmoDB-65_Pfalciparum3D7.gff", + "name": "3D7", + "taxon_id": [ + 5833 + ], + "url": "https://plasmodb.org/common/downloads/release-65/Pfalciparum3D7/fasta/data/PlasmoDB-65_Pfalciparum3D7_Genome.fasta" + } + ], + "target_info": [ + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 1956129, + "genome_id": 0, + "start": 1956096, + "strand": "+" + }, + "seq": "TTTTTCTCCACTTTGTAATTTTTATTGTTGAAT" + }, + "gene_name": "PF3D7_1447900", + "insert_location": { + "chrom": "Pf3D7_14_v3", + "end": 1956286, + "genome_id": 0, + "ref_seq": "ATATATATAAAGTTAAACCTATAAATAATACACTACCTAATAAACTATTCTTATATTTAAAAATAAATATAATACATGTTATTAATCCTTCTATTGTTGCCGGAATAATATACATTAAAACAGAACTCATCAAATTATTAGCACTCTCGGTACCTCT", + "start": 1956129, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 1956129, + "genome_id": 0, + "start": 1956096, + "strand": "+" + }, + "seq": "CGGGTGGTATCATGAGAATAGTTGAT" + }, + "target_attributes": [ + "Included", + "DrugResistance" + ], + "target_name": "t96" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 1038369, + "genome_id": 0, + "start": 1038340, + "strand": "+" + }, + "seq": "ACACTTCAACTACACTTTTTAATTTAGCC" + }, + "gene_name": "PF3D7_1426700", + "insert_location": { + "chrom": "Pf3D7_14_v3", + "end": 1038486, + "genome_id": 0, + "ref_seq": "CATACAATTAATAAAGCTCTACGATAAATTTCTTTTTTATTTGATTTAGAAAAAGGAGAAAACCATTGAAACTTTTTGGCTAGATATTTATGGTCTTTATCAAAAATATATTCTGAA", + "start": 1038369, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 1038369, + "genome_id": 0, + "start": 1038340, + "strand": "+" + }, + "seq": "AGATCTTATGTTAAACTTCTAGAAGATGAAGT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t95" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 564208, + "genome_id": 0, + "start": 564177, + "strand": "+" + }, + "seq": "AAAATCTTTTGGTATTGTATTTTGACTGCAC" + }, + "gene_name": "PF3D7_1414200", + "insert_location": { + "chrom": "Pf3D7_14_v3", + "end": 564377, + "genome_id": 0, + "ref_seq": "TTATTAAAACTTTTTTTTCTTTCTGTAAAGTTTGTACATTATGTTTTGATGAGTTTTGATTATCTTCATAAAACTTTATATATTTATAAAAATTATTTTGTATAAAATCATTTAATAAAGGTAACATAATCTTTTTAGCTTGATTCAATTCACTACATGAATGTATATT", + "start": 564208, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 564208, + "genome_id": 0, + "start": 564177, + "strand": "+" + }, + "seq": "AAACGGAATCACTTATGGATACCATTTTATTT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t94" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 933023, + "genome_id": 0, + "start": 932995, + "strand": "+" + }, + "seq": "TGTAAAAGGAAAATGTCTTACGTGGATT" + }, + "gene_name": "PF3D7_0820700", + "insert_location": { + "chrom": "Pf3D7_08_v3", + "end": 933143, + "genome_id": 0, + "ref_seq": "TTGGTTTTAATGAGGATGATTTAGATAAAGAGTTTTTTTTTGATTTGCCGTCGATTAGTGGTTTTTCAAGTAATGGTATGAAAAAATGTAATTTAAGAAATTTATTAAAAAGATTAGAAG", + "start": 933023, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 933023, + "genome_id": 0, + "start": 932995, + "strand": "+" + }, + "seq": "ATTCAAAACCAATAGTACCACAATATGTTT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t50" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_05_v3", + "end": 1042162, + "genome_id": 0, + "start": 1042129, + "strand": "+" + }, + "seq": "GGAATATTTGTGATTTAGGATGTAATGCATACA" + }, + "gene_name": "PF3D7_0525100", + "insert_location": { + "chrom": "Pf3D7_05_v3", + "end": 1042281, + "genome_id": 0, + "ref_seq": "ATATTATTACGGTACCATTATATGATTCTTTAGGTCCTCAATCAAGTAGATTTATATTAGATCAAACACAGATGGAAACTATTGTATGTGACAAGACATGTGCTCGTAATTTATTTAAG", + "start": 1042162, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_05_v3", + "end": 1042162, + "genome_id": 0, + "start": 1042129, + "strand": "+" + }, + "seq": "CAAATATATCTCTTCGCATGTTTCTAAGGA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t36" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 2669135, + "genome_id": 0, + "start": 2669104, + "strand": "+" + }, + "seq": "ATTTACATGATGTAACTGAATCTCAGCTTTT" + }, + "gene_name": "PF3D7_1366800", + "insert_location": { + "chrom": "Pf3D7_13_v3", + "end": 2669307, + "genome_id": 0, + "ref_seq": "AAAAAAAATACATTTAAATCTATAATATTTGTAATAAATGATAAGAATATTAGTATTAATAGGGTACTACTATTTGTAAATACTTTTCTACATAATTTATCAATAGTAGGAAATATGATATTCTTTTTGTTTGGCTTTATTTTATCTGGGATTTTCCAATCATAAAGTTCGA", + "start": 2669135, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 2669135, + "genome_id": 0, + "start": 2669104, + "strand": "+" + }, + "seq": "AGCCAGTATTCTTTTTATGAAGTATTTTAACA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t88" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 2479086, + "genome_id": 0, + "start": 2479055, + "strand": "+" + }, + "seq": "CTTATAAAGAGAAATTTTCATGTTAGCGCTT" + }, + "gene_name": "PF3D7_1361800", + "insert_location": { + "chrom": "Pf3D7_13_v3", + "end": 2479246, + "genome_id": 0, + "ref_seq": "TCTATGCTTTATCAAAACAAAGTAATCAAAATGTAATACATTATTCTTGTCGATCTATATGTGCTTTTACAAAAAACCCTAAGGGTTTAGAAGCGGTAAAGGATATCAAGGACTTTGCGAATATTATAAGTAAATCTGTTGGTGATTTGAGTAAAGAGAA", + "start": 2479086, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 2479086, + "genome_id": 0, + "start": 2479055, + "strand": "+" + }, + "seq": "AGTCTTCCTTGATTTCTTTATCCAAGGTA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t86" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 2124634, + "genome_id": 0, + "start": 2124602, + "strand": "+" + }, + "seq": "AATTTGGTTTCAATAAAATTATCAGCTTTCTT" + }, + "gene_name": "PF3D7_1353100", + "insert_location": { + "chrom": "Pf3D7_13_v3", + "end": 2124847, + "genome_id": 0, + "ref_seq": "TAACATTTTTTTAACATCTTTACCTTTTTGACTTGGTTCTTTATCATAATTCTGTTGTTCTGCAGAATCAGCATTTACTTCAGTTTCTTCTTTATTTTGAAAAGTGTTTGATTCTACATGAGAATTGGAAGATGAACGTCTATGTTTTACTTCTGTATAACTAGTACGTTCTCCAGTATGATGAGCCTTATGGTTTACATCTTCAGTTTCTTC", + "start": 2124634, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 2124634, + "genome_id": 0, + "start": 2124602, + "strand": "+" + }, + "seq": "GAAGAATTTTAACACAAGGAGATCATCAC" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t85" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 1419543, + "genome_id": 0, + "start": 1419519, + "strand": "+" + }, + "seq": "GAAATGTCGATTCTCCTCCTTGTG" + }, + "gene_name": "PF3D7_1335100", + "insert_location": { + "chrom": "Pf3D7_13_v3", + "end": 1419670, + "genome_id": 0, + "ref_seq": "CTGGTTTTTGTACTTCTTGTCCTTGTGTTGATATCTCTTGTTCATTTTTAGATTGAGTATCTGTTTCACTTTGTGCCTTTACCTTTGATAATACGTTTTTACCGAATAATCCTAAATTTTGGAATAA", + "start": 1419543, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 1419543, + "genome_id": 0, + "start": 1419519, + "strand": "+" + }, + "seq": "GAAAACAAGGAAAAATCAGAATCATTTCCA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t81" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 1150303, + "genome_id": 0, + "start": 1150279, + "strand": "+" + }, + "seq": "TAACAACCCCTCCATCAACATCTT" + }, + "gene_name": "PF3D7_1327300", + "insert_location": { + "chrom": "Pf3D7_13_v3", + "end": 1150493, + "genome_id": 0, + "ref_seq": "CTAAAAAAAGCAAACAAAAAGAAAAGAGAATGGAAGATTTAAGTATTGAGGAAAATTTGAAAGAGAAATTAATAAACCTAAATATTCAGAAACAGTATAGTGGTTTCCATATGAAAGAAATGGAGGAACAAAATATTCCTGAATTAAATATTCCACAACTTTCAGCTATTCATAATAGAGAAGATATGAA", + "start": 1150303, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 1150303, + "genome_id": 0, + "start": 1150279, + "strand": "+" + }, + "seq": "ACACTTCTATATCTTCTTTCTTCATCATTCTTA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t80" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 1725365, + "genome_id": 0, + "start": 1725337, + "strand": "+" + }, + "seq": "TCGGTATAATAGAAGAGCCATCATATCC" + }, + "gene_name": "PF3D7_1343700", + "insert_location": { + "chrom": "Pf3D7_13_v3", + "end": 1725570, + "genome_id": 0, + "ref_seq": "CCCAATACAATAAATTCTACCATTTGACGTAACACCACAATTATTTCTTCTAGGTATATTTAAATTACTTGAAACATACCATACATCTCTTAAACGATCATACACCTCAGTTTCAAATAAAGCCTTATAATCATAGTTATTACCACCAAAAACGTATAAGAAATTATTCAATACAGCACTTCCAAAATAAGCTTTTTTGGTAGAC", + "start": 1725365, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 1725365, + "genome_id": 0, + "start": 1725337, + "strand": "+" + }, + "seq": "GCTGGCGTATGTGTACACCTAT" + }, + "target_attributes": [ + "Included", + "DrugResistance" + ], + "target_name": "t82" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 1876352, + "genome_id": 0, + "start": 1876325, + "strand": "+" + }, + "seq": "CCAGGACAATTTAAACCTACCAAATGA" + }, + "gene_name": "PF3D7_1346700", + "insert_location": { + "chrom": "Pf3D7_13_v3", + "end": 1876534, + "genome_id": 0, + "ref_seq": "TTATATTTTGGTTCAGACAAATGTACGTTACATGAAATATGTGCACTATCATCAACTAAAGAAATATCTAAACTATCTGTAAAAGTATGTTTAGAACTAACATTTGAAGAGAAGTTACATCCGTGTATGACTTTTTTTTCATATTTTGGTTTTAAAACTATTTTATAATTATTATTTTTAAA", + "start": 1876352, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 1876352, + "genome_id": 0, + "start": 1876325, + "strand": "+" + }, + "seq": "CAAAAGATGTTAATACAGAATGTACATGCAAA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t83" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 2524962, + "genome_id": 0, + "start": 2524931, + "strand": "+" + }, + "seq": "ATGATCTTCTCTGAAATTTACTTGAATTGTT" + }, + "gene_name": "PF3D7_1462300", + "insert_location": { + "chrom": "Pf3D7_14_v3", + "end": 2525089, + "genome_id": 0, + "ref_seq": "AAATGAGGTATAATCATCCATTTCGTTGGGTCGATTTGATCTATTTTTAAGGTCCATATATTGAGATGAATCATTATGCATTTTATAATCATGAGGGATATTAGGTGCATGGTATTTAGGGTCTTTA", + "start": 2524962, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 2524962, + "genome_id": 0, + "start": 2524931, + "strand": "+" + }, + "seq": "ACCAAACTTTTGGAGATTTCAAGATTATGA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t98" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 103659, + "genome_id": 0, + "start": 103631, + "strand": "+" + }, + "seq": "GAAAAGAAGATCCAACTGACAGAGAAAA" + }, + "insert_location": { + "chrom": "Pf3D7_13_v3", + "end": 103879, + "genome_id": 0, + "ref_seq": "AACTGATGTTAATGAAGGCCAAAATGGAAAACGTTTAACACAAGAAAAAACCCTAAAACAAATTCCTTCGACATCACCAAATAATTTAGAACAAAAATTACAACAAACACATATTTCTTCTTCCCAACAAAAACATTTAATAAAAACTACTCCTACTTCAGATTCAACTACAACTTCATCAAGCTCTTCTGTTCCTCTTACAAAACAATCCCCTCATTCT", + "start": 103659, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 103659, + "genome_id": 0, + "start": 103631, + "strand": "+" + }, + "seq": "TGTGTACTAGATAATGCAGGAACTGA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t78" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_12_v3", + "end": 684088, + "genome_id": 0, + "start": 684059, + "strand": "+" + }, + "seq": "GTCTACCATTTTTAATCGACTAACTCGAA" + }, + "gene_name": "PF3D7_1217300", + "insert_location": { + "chrom": "Pf3D7_12_v3", + "end": 684261, + "genome_id": 0, + "ref_seq": "AATATCAAGATGGTAGTATTGTTTTAGATGTTAGTAGTACGAGAGATAAACTTTATGGAGAAGTTGAGTGGGAAGGATATAAATTTGAACTTGTGGATACAGGAGGTTTAGTTTTTGAACAAGAAAAGTTTTCAAAAGAAATAAAGGATCAAATTCTTATGGCTCTAAAAGAA", + "start": 684088, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_12_v3", + "end": 684088, + "genome_id": 0, + "start": 684059, + "strand": "+" + }, + "seq": "CATCAACGACAAAAATAACAACTGATGA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t74" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 415653, + "genome_id": 0, + "start": 415623, + "strand": "+" + }, + "seq": "ATGAATTAATAAAAGAACATGGTGGACCTT" + }, + "gene_name": "PF3D7_0408600", + "insert_location": { + "chrom": "Pf3D7_04_v3", + "end": 415826, + "genome_id": 0, + "ref_seq": "ATGCTAGTTTTGCTGCTCATGAAAATAAAAGCTACTCATATGAAAGTCGTACATATAAAATGTATCCACCTGAATTTAATACATTAATGTTAAAAGCAGATTATTTTATAAGAGATATAAATACACGAGGATTTAGAGAAGTAAATATGGATTCATGTAAATCATATACAAAT", + "start": 415653, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 415653, + "genome_id": 0, + "start": 415623, + "strand": "+" + }, + "seq": "GACTTGAAAACATTTTAAATTTCTTGTATCCAT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t23" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_12_v3", + "end": 659891, + "genome_id": 0, + "start": 659858, + "strand": "+" + }, + "seq": "GTTAATACTGGTACTATTATACCATATGTTGCT" + }, + "gene_name": "PF3D7_1216600", + "insert_location": { + "chrom": "Pf3D7_12_v3", + "end": 660010, + "genome_id": 0, + "ref_seq": "GGGTCGACTTTTGGTGGTTTAACATTTTCAGCTACGAGATTTTCGAATGATGGCAATCCTACTTTGATTAATTCCTTTAACATAGATTTTGCGTGTTTTTTTACTTCTGATTTGATATC", + "start": 659891, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_12_v3", + "end": 659891, + "genome_id": 0, + "start": 659858, + "strand": "+" + }, + "seq": "TCACCAACCTTTTTAGAATCAAGCTTT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t73" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 156566, + "genome_id": 0, + "start": 156535, + "strand": "+" + }, + "seq": "AACTGAAAGTATATACAATAGTACACCTCCA" + }, + "gene_name": "PF3D7_1302900", + "insert_location": { + "chrom": "Pf3D7_13_v3", + "end": 156722, + "genome_id": 0, + "ref_seq": "TATAGAGTTATTATGTTCGAATTAATGACCAGATTATTTCGATTTTATACAAAACCAATAGACCTTATTATTACTATGAATACACACAGATATGACACACCTATATTGTTAAAACATTCAAACAGCTTACAACTTATCTTATCAAATCAACAAAAT", + "start": 156566, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 156566, + "genome_id": 0, + "start": 156535, + "strand": "+" + }, + "seq": "AAAAGGATAAGTTAGAATTGCTCATTAATCT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t79" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_11_v3", + "end": 1816211, + "genome_id": 0, + "start": 1816181, + "strand": "+" + }, + "seq": "GGGTAGATATCGTTATAAGGGCTATAATGT" + }, + "gene_name": "PF3D7_1145800", + "insert_location": { + "chrom": "Pf3D7_11_v3", + "end": 1816425, + "genome_id": 0, + "ref_seq": "ATTGACTTCTCCGGGTTGGTTACATTATCATTACAACCAATATTATTAAGGTTAATACTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCATATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACTT", + "start": 1816211, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_11_v3", + "end": 1816211, + "genome_id": 0, + "start": 1816181, + "strand": "+" + }, + "seq": "GCCAAAAATACGATGTGATGAAGAATG" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t71" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_11_v3", + "end": 1552430, + "genome_id": 0, + "start": 1552397, + "strand": "+" + }, + "seq": "AAGGGAAAAATAATGGATAATATAGTTGTGAAT" + }, + "gene_name": "PF3D7_1139100", + "insert_location": { + "chrom": "Pf3D7_11_v3", + "end": 1552640, + "genome_id": 0, + "ref_seq": "AATATCGACAATTATAAAGAAAAAATAGAAAATTTTAATGAAAGATATTATGAAGATGATTTAAGTTTCTTAAACTTTCCAGGAACCATAACAAGTTATGATAAAAACCATCAAAGAGATAAAAGAAAAAACTGTTTTGAAGAATATCTAGACAATAATAATTATTTTATTGATAGTAATCTAAAGGAAGTTATAGAAAATAATATATAT", + "start": 1552430, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_11_v3", + "end": 1552430, + "genome_id": 0, + "start": 1552397, + "strand": "+" + }, + "seq": "GTCAATTTGCTCCTTATCCATATTCGA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t69" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_11_v3", + "end": 1009856, + "genome_id": 0, + "start": 1009831, + "strand": "+" + }, + "seq": "AAACTGTGAGCATATCTTGGTTCAG" + }, + "gene_name": "PF3D7_1125800", + "insert_location": { + "chrom": "Pf3D7_11_v3", + "end": 1010038, + "genome_id": 0, + "ref_seq": "GAATTCTATCTATTTGTTTAATTGGTGTCCATGAATTTTTAGAGAAACACCACATATCAGCTAATAAGGAATTATTAACATCTAATCCTCCATGAATATATAAAAAATCATTAAAACTGAAAGAAGCATGCTTATATCTTGCACGTGGACAAATTTTATTTCCAATAAGTTCCCATTTCTTT", + "start": 1009856, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_11_v3", + "end": 1009856, + "genome_id": 0, + "start": 1009831, + "strand": "+" + }, + "seq": "TGTTGATGAAACATATAAATTTGATTTCCAAGC" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t66" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_11_v3", + "end": 1750865, + "genome_id": 0, + "start": 1750833, + "strand": "+" + }, + "seq": "CATCAACATATAGTCGTTATAAAAGAGCACTT" + }, + "gene_name": "PF3D7_1143800", + "insert_location": { + "chrom": "Pf3D7_11_v3", + "end": 1751055, + "genome_id": 0, + "ref_seq": "TTATTAAAAACAACAAATAAATTACCAAGGTCATGGAAAAAACTCTTGTTAAATCTATCCATTAGATTTCAAACAATACCTATAGGTGGTTCTATCGAAATCATATCAAAGGATGAGAAAAATATTTCTATGACACGATCCAGTGAATATAATGCAACAACATATGAGCATTACACATTTCCCAAATGGT", + "start": 1750865, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_11_v3", + "end": 1750865, + "genome_id": 0, + "start": 1750833, + "strand": "+" + }, + "seq": "GGCGTTTCCTCATTTTCTTTACTATTGT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t70" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_11_v3", + "end": 119486, + "genome_id": 0, + "start": 119456, + "strand": "+" + }, + "seq": "GCTTCCATCTCCTTTATATTCATCAAGAAA" + }, + "gene_name": "PF3D7_1102500", + "insert_location": { + "chrom": "Pf3D7_11_v3", + "end": 119693, + "genome_id": 0, + "ref_seq": "TTTCATCCAAGAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTTTTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTCAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCCC", + "start": 119486, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_11_v3", + "end": 119486, + "genome_id": 0, + "start": 119456, + "strand": "+" + }, + "seq": "GGAATTTTTAATGAATGGATTAAAACTAGTGAA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t65" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_10_v3", + "end": 1436479, + "genome_id": 0, + "start": 1436451, + "strand": "+" + }, + "seq": "CTAGGAATCGAATAAATGAGGAAAAGCA" + }, + "gene_name": "PF3D7_1036400", + "insert_location": { + "chrom": "Pf3D7_10_v3", + "end": 1436682, + "genome_id": 0, + "ref_seq": "CGAGAAGAAACACGTTTTATCTCATAATTCATATGAGAAAACTAAAAATAATGAAAATAATAAATTTTTCGATAAGGATAAAGAGTTAACGATGTCTAATGTAAAAAATGTGTCACAAACAAATTTCAAAAGTCTTTTAAGAAATCTTGGTGTTTCAGAGAATATATTCCTTAAAGAAAATAAATTAAATAAGGAAGGGAAAT", + "start": 1436479, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_10_v3", + "end": 1436479, + "genome_id": 0, + "start": 1436451, + "strand": "+" + }, + "seq": "ATCGTCATCATCATTTATTATGTGTTCAATTA" + }, + "target_attributes": [ + "Excluded", + "Microhaplotype" + ], + "target_name": "t64" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 531682, + "genome_id": 0, + "start": 531656, + "strand": "+" + }, + "seq": "CTTTTTGGGCTTATTGTTTGGAAGAA" + }, + "gene_name": "PF3D7_0113800", + "insert_location": { + "chrom": "Pf3D7_01_v3", + "end": 531900, + "genome_id": 0, + "ref_seq": "AAAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATTCCTACAAATAATTATAGCATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGTAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATAGTATCCGAA", + "start": 531682, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 531682, + "genome_id": 0, + "start": 531656, + "strand": "+" + }, + "seq": "ACTGGATTCTTCTAATATTCTTTGCTCTCT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t6" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_09_v3", + "end": 596133, + "genome_id": 0, + "start": 596101, + "strand": "+" + }, + "seq": "ATTTGTTTTTGTTCTACATCAATAATTGGTTT" + }, + "gene_name": "PF3D7_0913900", + "insert_location": { + "chrom": "Pf3D7_09_v3", + "end": 596334, + "genome_id": 0, + "ref_seq": "ATTATTTTCGTTTTTTTTTATATTATCATTATAATTATATGTATTTACAAAGAATTTATTATTATTTGTTTCTTTATAATTATATTCATTTTCTTTATTACTTAAGGAATTTATATTTGATAAAACTTGTTGTCCTCTTTCTTCTTTGTTGATGTGAATATTTGAGAAAATAATAATAAATGTAATGACTAGGGCTATGTT", + "start": 596133, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_09_v3", + "end": 596133, + "genome_id": 0, + "start": 596101, + "strand": "+" + }, + "seq": "AAATAGAAGTCATATAGGTGACTGGAATCTT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t55" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_09_v3", + "end": 516928, + "genome_id": 0, + "start": 516904, + "strand": "+" + }, + "seq": "TGTGGGCGCAAAAACTATAAATGA" + }, + "gene_name": "PF3D7_0911300", + "insert_location": { + "chrom": "Pf3D7_09_v3", + "end": 517092, + "genome_id": 0, + "ref_seq": "ATGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTGAAGAATGTCCCATAGGTTTTTATTGTCCAAAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCAA", + "start": 516928, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_09_v3", + "end": 516928, + "genome_id": 0, + "start": 516904, + "strand": "+" + }, + "seq": "ATTTTGTATATCCAAAATTACATTGACAATTGT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t54" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_05_v3", + "end": 1309609, + "genome_id": 0, + "start": 1309581, + "strand": "+" + }, + "seq": "ACGACGAAGAAAACGAAAGTATTGATAA" + }, + "gene_name": "PF3D7_0532300", + "insert_location": { + "chrom": "Pf3D7_05_v3", + "end": 1309744, + "genome_id": 0, + "ref_seq": "TAATGAAGAAAATATGTCTGACAGACCAAACAGTTTATCTCATGATAAGGATCAACACCTCGATGAAACACATAATGAACAATATGGATTATACGTAAAAGAAATGGAATCTAAAGTTGAAAAATTAGCTGAAAA", + "start": 1309609, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_05_v3", + "end": 1309609, + "genome_id": 0, + "start": 1309581, + "strand": "+" + }, + "seq": "ACCTCTTGAAATTCCTTTTCAACTTGA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t37" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 1362891, + "genome_id": 0, + "start": 1362863, + "strand": "+" + }, + "seq": "CGACTTCTTTAAGAGAACAAACAGAACA" + }, + "gene_name": "PF3D7_0831600", + "insert_location": { + "chrom": "Pf3D7_08_v3", + "end": 1363087, + "genome_id": 0, + "ref_seq": "CGTAAAAAAAAAGGGTTTTCCTAAAAAACCATCGGTTCATGGTTTTACACAGATGGTGTTTTTGCAGCTTACTAATATAGTCATGTATGCCCTTTGTTTTATGAGCCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAAT", + "start": 1362891, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 1362891, + "genome_id": 0, + "start": 1362863, + "strand": "+" + }, + "seq": "AAGTTTTCTTCTGAATAGTTCTACAAAGTATTT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t53" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_07_v3", + "end": 165235, + "genome_id": 0, + "start": 165202, + "strand": "+" + }, + "seq": "GGATCCTCTTACAATCTCGAAATAATTATAATT" + }, + "gene_name": "PF3D7_0703900", + "insert_location": { + "chrom": "Pf3D7_07_v3", + "end": 165422, + "genome_id": 0, + "ref_seq": "ATCATTATTATTATTATTATAATTATCATTGTTATTATTATTGTTGTTGTTGTTATTATTATTTCCTTTATTATTTAATATGCATTTTTTAATATCCATTTTATTATTTATCATATCAGTACTTTTATTTTTCTCCTTTTCGTTTATAGCTTTTTCCCTATGCACCCTGAATTTCCCATTTTTTTTT", + "start": 165235, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_07_v3", + "end": 165235, + "genome_id": 0, + "start": 165202, + "strand": "+" + }, + "seq": "ATGGTTTGGTAAGCGAGTTTATGTTATT" + }, + "target_attributes": [ + "Excluded", + "Microhaplotype" + ], + "target_name": "t40" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 1344686, + "genome_id": 0, + "start": 1344653, + "strand": "+" + }, + "seq": "TCTTTTCCATATATAATAACGCATGAATTCTTT" + }, + "gene_name": "PF3D7_0831400", + "insert_location": { + "chrom": "Pf3D7_08_v3", + "end": 1344819, + "genome_id": 0, + "ref_seq": "AAATATATCTTTTACTTTATCTGTAAGTTTCATGGAATCTATTATTTCATGTGCATATTTTATTTTTGCCTCGTTTATATATTTACCTGCTTTTAATTTACATAAACATTTTTCTATTAAGTTTTGATCATTT", + "start": 1344686, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 1344686, + "genome_id": 0, + "start": 1344653, + "strand": "+" + }, + "seq": "TGAGAACAGATGAAGTAACTACTCGATT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t52" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 3124642, + "genome_id": 0, + "start": 3124614, + "strand": "+" + }, + "seq": "CAGATTATTTGGTAATGAACAACCAGGA" + }, + "gene_name": "PF3D7_1475900", + "insert_location": { + "chrom": "Pf3D7_14_v3", + "end": 3124842, + "genome_id": 0, + "ref_seq": "TATGGAAAAATGGAATATGAAGTATTAAGTGATGATAACATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGATGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATAATATGTGGTCTACTTCTGGACTAGGGTTCTATGAATT", + "start": 3124642, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 3124642, + "genome_id": 0, + "start": 3124614, + "strand": "+" + }, + "seq": "AGGTCTTCCTAATCTTGAACCATCATAT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t99" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 1269320, + "genome_id": 0, + "start": 1269294, + "strand": "+" + }, + "seq": "CTCTTATATCAGGAGCAGCTATAGGA" + }, + "gene_name": "PF3D7_0829600", + "insert_location": { + "chrom": "Pf3D7_08_v3", + "end": 1269456, + "genome_id": 0, + "ref_seq": "GCCTTAGCATTAATAACACTTATAGGAGGTATTTATATGACTAAAGGAAGAAAAAGTTCCATATGGCATAATTCAGAAATAAATGATACACTTTATGATGTTGTTCTTGAAACAGTGAATCAAGGAAATACAGATG", + "start": 1269320, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 1269320, + "genome_id": 0, + "start": 1269294, + "strand": "+" + }, + "seq": "TTTTACTCCTCTTTGAAAAGCCAACTTTA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t51" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_05_v3", + "end": 329378, + "genome_id": 0, + "start": 329351, + "strand": "+" + }, + "seq": "GTGTTAAAACAACAGGAGGAACACTAA" + }, + "gene_name": "PF3D7_0508000", + "insert_location": { + "chrom": "Pf3D7_05_v3", + "end": 329550, + "genome_id": 0, + "ref_seq": "ATTGTGATGTATATAAATTCCCTTCTTCTTTATGTACCACATTATAAGAACCACGAACATATTCTTTTAAAAATGTTAACTTACTTCCAACAAATATATAATCAAAACAAAATTTTTTATTGTCGAAATGTTCTCGTTCAACCCCATTCATATTTCGGATATCATTATTTAA", + "start": 329378, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_05_v3", + "end": 329378, + "genome_id": 0, + "start": 329351, + "strand": "+" + }, + "seq": "TGTTGTAGAATATTCGTGTCCGTATAGT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t33" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_10_v3", + "end": 1386700, + "genome_id": 0, + "start": 1386672, + "strand": "+" + }, + "seq": "TGCTACAGTTATATAGGACGATTTTGGT" + }, + "gene_name": "PF3D7_1035000", + "insert_location": { + "chrom": "Pf3D7_10_v3", + "end": 1386869, + "genome_id": 0, + "ref_seq": "AGGGAACAGGTTAAATATATTGAAGACGTGGTTTGATAATCAGGTATTTCTTTAATTAAATATTCATGATATTGTTCGTTAGATACATAAATTAATTCGTCCTCCACATTTTGCTGTTCTGTTATAATTTGTGAAGAAGCTTGGTTTGTCTTATTTGGTAATTGCTCTT", + "start": 1386700, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_10_v3", + "end": 1386700, + "genome_id": 0, + "start": 1386672, + "strand": "+" + }, + "seq": "AAAATGAGGACAAGGAAAATAATACATTCATAA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t62" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_07_v3", + "end": 1358694, + "genome_id": 0, + "start": 1358666, + "strand": "+" + }, + "seq": "AAGGATCATTTCATTGAAGCCTCTAAAA" + }, + "gene_name": "PF3D7_0731500", + "insert_location": { + "chrom": "Pf3D7_07_v3", + "end": 1358911, + "genome_id": 0, + "ref_seq": "AAGAATCTCAACTTTTGCTTAAAAAAAATGATAACAAATATAATTCTAAATTTTGTAATGATTTGAAGAATAGTTTTTTAGATTATGGACATCTTGCTATGGGAAATGATATGGATTTTGGAGGTTATTCAACTAAGGCAGAAAACAAAATTCAAGAAGTTTTTAAAGGGGCTCATGGGGAAATAAGTGAACATAAAATTAAAAATTTTAGAAAAAA", + "start": 1358694, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_07_v3", + "end": 1358694, + "genome_id": 0, + "start": 1358666, + "strand": "+" + }, + "seq": "CAAAGTTTCTCTCTAAATTCATTCCACCAT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t45" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_12_v3", + "end": 2050130, + "genome_id": 0, + "start": 2050103, + "strand": "+" + }, + "seq": "TTGGTTTTGATTATCTCCCATTTTCGT" + }, + "gene_name": "PF3D7_1250100", + "insert_location": { + "chrom": "Pf3D7_12_v3", + "end": 2050314, + "genome_id": 0, + "ref_seq": "TTTTAAACTTTGAATCTGTTCAATTAATAACACTTCATCATTGTCTTCGCCTTTTATAATATCTCCATGATTATGTGCTCCTCTAATTAAGGTATCACTAACCTGTTGTTCATCTGTCGCATGAGAACTAGTAGATATATCTGGTTTATTTTTTTTCTTTCTTTTTGTTATTTCTAATTTTTTT", + "start": 2050130, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_12_v3", + "end": 2050130, + "genome_id": 0, + "start": 2050103, + "strand": "+" + }, + "seq": "AAAAACATACCTAGACATTTGAATGTCTTAGA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t77" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_03_v3", + "end": 141963, + "genome_id": 0, + "start": 141936, + "strand": "+" + }, + "seq": "AAAGCGAATAATGCCAATATGTTGTTC" + }, + "gene_name": "PF3D7_0302600", + "insert_location": { + "chrom": "Pf3D7_03_v3", + "end": 142181, + "genome_id": 0, + "ref_seq": "AGCATTTATAACAAAATATCAGAAGATGGAAAAACCAAAAATAGCCTACTTAGCGATATATCTAAATTATTTAAAATTGTAAAAGAAAGCAAATTAATATTTGTAACTGGATTTTTATTAACAACCTTGTCAGCAATTGTCGATTCATACATTCCAATTTTTCTATCCAAAACGGTATCTTTTGTAATGGAAAGAAAAAAATTTACATTTCTTAAAAT", + "start": 141963, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_03_v3", + "end": 141963, + "genome_id": 0, + "start": 141936, + "strand": "+" + }, + "seq": "TTTTTACAACTGACAAATTTGTTTTGTGT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t15" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 512199, + "genome_id": 0, + "start": 512168, + "strand": "+" + }, + "seq": "CGAATCAAAGGTAGAAAATGATCTTGAAGAA" + }, + "insert_location": { + "chrom": "Pf3D7_01_v3", + "end": 512388, + "genome_id": 0, + "ref_seq": "TTAAATAAATTAAGTGAAGATGATTATGAAAAAAATTGTAGACATTTAAATTATTTAATAGATAATATAAGAGAATTATTTTTTAGTTCTAAAAATATTAGAATTCCTGATGTAGCTCGTAAATATTTGTGGGATAATCAAATTGAAGGAAATCTCAAAAAATTAATATCTTCAGAAACAAAATATAAA", + "start": 512199, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 512199, + "genome_id": 0, + "start": 512168, + "strand": "+" + }, + "seq": "CTGTGGATTATTTATACGATTCCTTTGACA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t5" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_06_v3", + "end": 532195, + "genome_id": 0, + "start": 532167, + "strand": "+" + }, + "seq": "ATCAAGCTGAATCTATCCTATTGGATCA" + }, + "gene_name": "PF3D7_0612900", + "insert_location": { + "chrom": "Pf3D7_06_v3", + "end": 532378, + "genome_id": 0, + "ref_seq": "AGAACAATTGCTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACCCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCTCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACGTCCCCATGTGATCCAACGAATGCCAC", + "start": 532195, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_06_v3", + "end": 532195, + "genome_id": 0, + "start": 532167, + "strand": "+" + }, + "seq": "GTATATTGTTTATTGGGATCCCCTTCC" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t39" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 532690, + "genome_id": 0, + "start": 532660, + "strand": "+" + }, + "seq": "GGGAAGAATGGTTTAATCGTAAAAATGAAG" + }, + "gene_name": "PF3D7_0113800", + "insert_location": { + "chrom": "Pf3D7_01_v3", + "end": 532844, + "genome_id": 0, + "ref_seq": "ACTTTCTTAATTCTATGAATGAAGAATATACGCATATTAATTTAAATAACTTTATACATAATAATAACCATGATAATGACGAAAATTATACATTAGATCAGGTGGAAGGATATCCTATGACTAGTTATCAAAATAATATATACAAGGATTTTTT", + "start": 532690, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 532690, + "genome_id": 0, + "start": 532660, + "strand": "+" + }, + "seq": "GTCTTCGAAATAATGAACTCCCTTTTCT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t7" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_07_v3", + "end": 298886, + "genome_id": 0, + "start": 298857, + "strand": "+" + }, + "seq": "TAGATATATCATTCACAGTCGTCTCATGG" + }, + "gene_name": "PF3D7_0706100", + "insert_location": { + "chrom": "Pf3D7_07_v3", + "end": 299005, + "genome_id": 0, + "ref_seq": "ACATTCAATATGGTTCTGAGCTTAAAGATGTTATCCTTATACATGTTTCTATTCTCATTCGTTATAACATCAATGACATATAAAACATATCGCTCAAATATTTTGTGAACAATATTATA", + "start": 298886, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_07_v3", + "end": 298886, + "genome_id": 0, + "start": 298857, + "strand": "+" + }, + "seq": "TGTTAAGTTTTCTCTTGTGGAATCGAAT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t42" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_02_v3", + "end": 278165, + "genome_id": 0, + "start": 278144, + "strand": "+" + }, + "seq": "CTTACCATTCGCGCTTTCTTG" + }, + "gene_name": "PF3D7_0207000", + "insert_location": { + "chrom": "Pf3D7_02_v3", + "end": 278336, + "genome_id": 0, + "ref_seq": "GGAATTTTCTTTTTTATGACTTTCTTCTCCTTGTTCAGAAGCTTCTTTTTCATCCTTTTTTTCTGCTGCGTCAGATAAATTGGGGGAAGCACTTGAAGATTCATTTCCTCCAGGAGTATTACTAGTACTTACTCCGTCCACATTTGGTTTTTCTTCCCCTAGAATTCTCAT", + "start": 278165, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_02_v3", + "end": 278165, + "genome_id": 0, + "start": 278144, + "strand": "+" + }, + "seq": "AATATAGTACCAGAAAATGGAAGAATGTTAAAT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t11" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 133491, + "genome_id": 0, + "start": 133463, + "strand": "+" + }, + "seq": "TTTTGGTTCAGTACTATCTCTTGCATTT" + }, + "insert_location": { + "chrom": "Pf3D7_04_v3", + "end": 133701, + "genome_id": 0, + "ref_seq": "TTAGATTTTTTCCCTCCAGCAGGTGCACTAACTTTAGGTGTTTTAAATCTAGATGTATGTGGAACCCCATCTTTATTTGGTTTACCTCTATTTAATCTTTTACCAGCAGTAGAAACTACATTCTCTCGATTATCATTACCTACTTCAGTCTTTACAATTGTAGGAGGTGTTTTAACATGATTATCCCCTCCATGAGGAGTAACCCTTAAA", + "start": 133491, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 133491, + "genome_id": 0, + "start": 133463, + "strand": "+" + }, + "seq": "CGACACCAAATATTCAAGAAGAACC" + }, + "target_attributes": [ + "Excluded", + "Microhaplotype" + ], + "target_name": "t21" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_06_v3", + "end": 145343, + "genome_id": 0, + "start": 145315, + "strand": "+" + }, + "seq": "CAATCAACAAAAGCTGATGAATCATCAT" + }, + "gene_name": "PF3D7_0603600", + "insert_location": { + "chrom": "Pf3D7_06_v3", + "end": 145501, + "genome_id": 0, + "ref_seq": "AATTTGAATAAAATTTATCATTCACAATATTATATTTTTGTTTCTTCTTTTTTCCCATAATATTATTATTTTGTTCACAATATATGTTCATGTGTCCCCTCTTTTTCTGTAAAATATTAAAATGTTTCTTACTATGCTTCTCTTCATTTTTAATAACA", + "start": 145343, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_06_v3", + "end": 145343, + "genome_id": 0, + "start": 145315, + "strand": "+" + }, + "seq": "AAGGAAGGTAGAATATCAAATACAAGGGA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t38" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_07_v3", + "end": 1149415, + "genome_id": 0, + "start": 1149387, + "strand": "+" + }, + "seq": "TGGACATGTAGATATTTGACTAGTCGAA" + }, + "gene_name": "PF3D7_0727000", + "insert_location": { + "chrom": "Pf3D7_07_v3", + "end": 1149585, + "genome_id": 0, + "ref_seq": "TAATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCCATTGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTATA", + "start": 1149415, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_07_v3", + "end": 1149415, + "genome_id": 0, + "start": 1149387, + "strand": "+" + }, + "seq": "TGTATACTCTCACATATTCCCTTCAGTG" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t44" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_05_v3", + "end": 958389, + "genome_id": 0, + "start": 958362, + "strand": "+" + }, + "seq": "TTTAGAACAAGTGAGTTCAGGAATTGG" + }, + "gene_name": "PF3D7_0523000", + "insert_location": { + "chrom": "Pf3D7_05_v3", + "end": 958506, + "genome_id": 0, + "ref_seq": "TACGAAATTTATAACAATTTTTACATATGCCAGTTCCTTTTTAGGTTTATATATTTGGTCATTAATAAAAAATGCACGTTTGACTTTATGTATTACTTGCGTTTTTCCGTTAATTTA", + "start": 958389, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_05_v3", + "end": 958389, + "genome_id": 0, + "start": 958362, + "strand": "+" + }, + "seq": "TTTACTTTCTTATTACATATGACACCACAAACA" + }, + "target_attributes": [ + "Included", + "DrugResistance" + ], + "target_name": "t35" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 2481106, + "genome_id": 0, + "start": 2481079, + "strand": "+" + }, + "seq": "AGAAGATAAGCAATTATGGCAAAAGGT" + }, + "gene_name": "PF3D7_1361800", + "insert_location": { + "chrom": "Pf3D7_13_v3", + "end": 2481288, + "genome_id": 0, + "ref_seq": "GCAACTTACTTTAGAAGCCATGAATTCGGCCGATGATCCATTGGAAGCATTTAAAAATACTTTATTAATATTTGATTTTAATTTATCTGAATTTGATAAGGATCCATATATAAATGGTGTGCATGATTTAGCATCTAATATAAAGGATTGTTTAAGAAAAGGAGGTCACAGTAAAATATATT", + "start": 2481106, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 2481106, + "genome_id": 0, + "start": 2481079, + "strand": "+" + }, + "seq": "TCCATTTAAATAATAACCTTTGATCACTTTGAT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t87" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_03_v3", + "end": 850816, + "genome_id": 0, + "start": 850788, + "strand": "+" + }, + "seq": "CCATTTTTATCTACACGTACTACATGCA" + }, + "gene_name": "PF3D7_0320400", + "insert_location": { + "chrom": "Pf3D7_03_v3", + "end": 850989, + "genome_id": 0, + "ref_seq": "TCATATTCGTTTCAGCGTTTATAGAGCGAATATTATCGATTATGTCTATATTCCCTAAAATATGTACATAATAATCTCCATTTAATAATGTTACTTTCTTAAGAATATTTTTGTATATGACATCAAAGATATTACGAGTTAACAATACATCTACATTTCCGTCTATTATATAT", + "start": 850816, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_03_v3", + "end": 850816, + "genome_id": 0, + "start": 850788, + "strand": "+" + }, + "seq": "AAATGTCTCTAAGAGTTACAGGAACAGA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t19" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_05_v3", + "end": 958059, + "genome_id": 0, + "start": 958027, + "strand": "+" + }, + "seq": "AAATGTTTACCTGCACAACATAGAAAATTATT" + }, + "gene_name": "PF3D7_0523000", + "insert_location": { + "chrom": "Pf3D7_05_v3", + "end": 958221, + "genome_id": 0, + "ref_seq": "ATTTATATCATTTGTATGTGCTGTATTATCAGGAGGAACATTACCTTTTTTTATATCTGTGTTTGGTGTAATATTAAAGAACATGAATTTAGGTGATGATATTAATCCTATAATATTATCATTAGTATCTATAGGTTTAGTACAATTTATATTATCAATGAT", + "start": 958059, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_05_v3", + "end": 958059, + "genome_id": 0, + "start": 958027, + "strand": "+" + }, + "seq": "TTTGATGTAATTACATCCATACAATAACTTGAT" + }, + "target_attributes": [ + "Included", + "DrugResistance" + ], + "target_name": "t34" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 1992289, + "genome_id": 0, + "start": 1992261, + "strand": "+" + }, + "seq": "TTTTACTTTTGCTACCATCAGGCATAAT" + }, + "gene_name": "PF3D7_1448500", + "insert_location": { + "chrom": "Pf3D7_14_v3", + "end": 1992426, + "genome_id": 0, + "ref_seq": "ATAAACACCAGTACCATTTTTTTCTGATAAATTAATATTTTTTTGTATAACATCATATTTATCCCTTTTCGTGGTAAGTGCAGTATCCTGTTTTATTATTATATTATCGAATTCATCATGGTGTATATTTCTTTCAT", + "start": 1992289, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 1992289, + "genome_id": 0, + "start": 1992261, + "strand": "+" + }, + "seq": "ATCTTATTATGAAAGCTGTACATCCGATTTTA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t97" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_09_v3", + "end": 1406405, + "genome_id": 0, + "start": 1406375, + "strand": "+" + }, + "seq": "CAGATTATCATAGTGTTGTGGATGAAGATT" + }, + "gene_name": "PF3D7_0935600", + "insert_location": { + "chrom": "Pf3D7_09_v3", + "end": 1406541, + "genome_id": 0, + "ref_seq": "TAATTAATTTTAATGATGATGTTACTTTAGAAACACAATCCATGATAGCACACGGAGGGTCTTTGTCAGAAATAGAAGAAACTGGAGATTTATCTTCAGATGTTGATAGATTACATTCATCAATCGAAACTACTCC", + "start": 1406405, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_09_v3", + "end": 1406405, + "genome_id": 0, + "start": 1406375, + "strand": "+" + }, + "seq": "ATCACCTCGTATATATACAACATCATCTCTT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t58" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 1037634, + "genome_id": 0, + "start": 1037602, + "strand": "+" + }, + "seq": "ATTGAAGTACAATATGAAATCGATCTTGATAA" + }, + "gene_name": "PF3D7_0422500", + "insert_location": { + "chrom": "Pf3D7_04_v3", + "end": 1037844, + "genome_id": 0, + "ref_seq": "ATCTTATAAAGTTAATGAAATAGCTCAACTTAATTTAACCATAGAAAGAGATTTAACAGATGATGCTGTGATTTTTGCACACTCACTTTATTTACCATTTGAAAAAGAAGAAATGTGGTGGATCGTTATCGGAATTAAAAAAATGAACTTACTTTTATCTATCAAAAAATTATCTTTATTGAAAAGTGTCAATAATATAAAAATTAATTT", + "start": 1037634, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 1037634, + "genome_id": 0, + "start": 1037602, + "strand": "+" + }, + "seq": "GTATTTGGTTTGTCAGGCAATTCG" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t28" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_12_v3", + "end": 1237431, + "genome_id": 0, + "start": 1237407, + "strand": "+" + }, + "seq": "CGAATGCTTGTGTGATCAATGAAA" + }, + "gene_name": "PF3D7_1230000", + "insert_location": { + "chrom": "Pf3D7_12_v3", + "end": 1237603, + "genome_id": 0, + "ref_seq": "AGTATGAACACAAAACCGAAAGAGAGTTTAAAAAAAGATTCGATTTTAATGAAGGAAGAAATAACATAATAAATGTGTCAAATGTAAAGAAAACATGTAATATAGTTAAAAATGATTTAAAGGAATCTAACGAGATAAAAACTAATATAAACACAAGTTCTTATAATTTATA", + "start": 1237431, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_12_v3", + "end": 1237431, + "genome_id": 0, + "start": 1237407, + "strand": "+" + }, + "seq": "ACCTCTTTCAAAACATTCTCTTTTATTAATACA" + }, + "target_attributes": [ + "Excluded", + "Microhaplotype" + ], + "target_name": "t76" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 1128489, + "genome_id": 0, + "start": 1128461, + "strand": "+" + }, + "seq": "CTGTCGCAAAAGAAGGTTTTGATAATAT" + }, + "gene_name": "PF3D7_0424900", + "insert_location": { + "chrom": "Pf3D7_04_v3", + "end": 1128673, + "genome_id": 0, + "ref_seq": "ATTGAAAGAGTTAAAGGGAAAAATACAAAATTATTTAGATAATGATATTCAATTGAAAAATGGAAAACTCCTATATAAGGATACATGGGATAGAATTGTTTTGAAATTTTGTAGAACTGTAGCAATAGAAGAGGCAGAATACACTAGAAAATTTTATAGCTTAATTAATGATAAACATACAATT", + "start": 1128489, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 1128489, + "genome_id": 0, + "start": 1128461, + "strand": "+" + }, + "seq": "ATGAATGAATAAATCAATTTTACCACGTCATT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t32" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 39953, + "genome_id": 0, + "start": 39920, + "strand": "+" + }, + "seq": "CCAACTATATCTGTTCCATAAATGGTTATATTT" + }, + "gene_name": "PF3D7_1401100", + "insert_location": { + "chrom": "Pf3D7_14_v3", + "end": 40137, + "genome_id": 0, + "ref_seq": "ACATAGAAATATGTGCGAAAATTGGGAAAAAAATAAATAACAGGAATTGTTATATAAATTGAATCAAGAATGGCACAAAGAAAATAATACTGGTGACTTTCACACTAGTGATATCACACACAATAGTGGTATTACATACAGTAGTGGTAACATACCTAGTGAAAGTAATAGTAGTTATATCCAA", + "start": 39953, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 39953, + "genome_id": 0, + "start": 39920, + "strand": "+" + }, + "seq": "ATTTATTTGGATTGAGATCTTAATGTTCAAAGT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t89" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_11_v3", + "end": 1018953, + "genome_id": 0, + "start": 1018920, + "strand": "+" + }, + "seq": "GCTATACTACTACTTATGTTACTTATACCACAT" + }, + "gene_name": "PF3D7_1126100", + "insert_location": { + "chrom": "Pf3D7_11_v3", + "end": 1019085, + "genome_id": 0, + "ref_seq": "CTAGTGACTGTACATTTTTCATCTAATGTTCTATAGGATAAAGAATCTGAAGGACAATGCATATCATTACAAAAATAGCATGCACCTTTAAAATATAAATAAGAATGTCTTAACACAACAAAGGAATCAAAA", + "start": 1018953, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_11_v3", + "end": 1018953, + "genome_id": 0, + "start": 1018920, + "strand": "+" + }, + "seq": "CTCCTTTAGGTATTACGGTAGCAATAAG" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t67" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_03_v3", + "end": 221363, + "genome_id": 0, + "start": 221330, + "strand": "+" + }, + "seq": "GGAACAAGAAGGATAATACCATTATTAATCCTA" + }, + "gene_name": "PF3D7_0304600", + "insert_location": { + "chrom": "Pf3D7_03_v3", + "end": 221495, + "genome_id": 0, + "ref_seq": "TTGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTGCATAATCTAATTCGTCTTTAGGTTTATTAGCAGAGCCAGGCTTTATTCTAACTTGAATAC", + "start": 221363, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_03_v3", + "end": 221363, + "genome_id": 0, + "start": 221330, + "strand": "+" + }, + "seq": "CCCATGTAGTGTAACTTGTGGAAATG" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t16" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 748533, + "genome_id": 0, + "start": 748500, + "strand": "+" + }, + "seq": "AGATGTTTATATCATTAACAAAGTTGAAGATCT" + }, + "gene_name": "PF3D7_0417200", + "insert_location": { + "chrom": "Pf3D7_04_v3", + "end": 748696, + "genome_id": 0, + "ref_seq": "AATAGTTTTACTTGGGAAATTAAATTACTATAAATGTTTTATTATAGGAGGTTCCGTTGTTTATCAAGAATTTTTAGAAAAGAAATTAATAAAAAAAATATATTTTACTAGAATAAATAGTACATATGAATGTGATGTATTTTTTCCAGAAATAAATGAAAAT", + "start": 748533, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 748533, + "genome_id": 0, + "start": 748500, + "strand": "+" + }, + "seq": "ACATCGCTAACAGAAATAATTTGATACTC" + }, + "target_attributes": [ + "Included", + "DrugResistance" + ], + "target_name": "t26" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_07_v3", + "end": 166035, + "genome_id": 0, + "start": 166002, + "strand": "+" + }, + "seq": "AGGATATGTTCTTTTTAAAGTTCTCTTCATTTT" + }, + "gene_name": "PF3D7_0703900", + "insert_location": { + "chrom": "Pf3D7_07_v3", + "end": 166167, + "genome_id": 0, + "ref_seq": "CTTTTATTTGAACTTTTTTATTTTCTTCATTATCAATATAAAAACAACAATCTTTAAATTTATGAAATAACACCCAACTTAATGTATAAAATATAATTTCTATAAAATCAAAATTAATGTAATAACCTAATT", + "start": 166035, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_07_v3", + "end": 166035, + "genome_id": 0, + "start": 166002, + "strand": "+" + }, + "seq": "CGTTAAATGTAGAAAAGACGAAATCATCCA" + }, + "target_attributes": [ + "Excluded", + "Microhaplotype" + ], + "target_name": "t41" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_11_v3", + "end": 1376185, + "genome_id": 0, + "start": 1376159, + "strand": "+" + }, + "seq": "CTGCAAATTGAGCCATAGAAAAATGA" + }, + "gene_name": "PF3D7_1135100", + "insert_location": { + "chrom": "Pf3D7_11_v3", + "end": 1376372, + "genome_id": 0, + "ref_seq": "TTCTCATTCCTTTGAAAATATGAACTATTCAACTCATCAAGTTTTTCATATGTTATTTCATAACTGCCATCATCTGAATCCTCTTCATCACTACTACTTAAAGAATGCTCTTCTACAGTTATATCTTCATAATGATTATTTTTAGGAAAATATTCTTCAGATCTTTCTATAAATTCTGTTCCACTAC", + "start": 1376185, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_11_v3", + "end": 1376185, + "genome_id": 0, + "start": 1376159, + "strand": "+" + }, + "seq": "CGATAACACTAGATGTAAGATATGCATCAT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t68" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 1113450, + "genome_id": 0, + "start": 1113422, + "strand": "+" + }, + "seq": "GATTCTGCATGCAGTAATGAATCTATTG" + }, + "gene_name": "PF3D7_0424600", + "insert_location": { + "chrom": "Pf3D7_04_v3", + "end": 1113604, + "genome_id": 0, + "ref_seq": "AAATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACAACTATTCAATTTGTTTGTATAAGTTTTAGGTCTTATTATTCTTTTACGTTTTA", + "start": 1113450, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 1113450, + "genome_id": 0, + "start": 1113422, + "strand": "+" + }, + "seq": "CGTAGCATGCTCAGATATTATGATGATT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t31" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 495971, + "genome_id": 0, + "start": 495941, + "strand": "+" + }, + "seq": "GCCACCAAAATATTATATACCACAAGACAA" + }, + "gene_name": "PF3D7_0113100", + "insert_location": { + "chrom": "Pf3D7_01_v3", + "end": 496143, + "genome_id": 0, + "ref_seq": "TGAAAGTAGCGAATACCCTGTAGAAATTGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTGACTAAGCCTGATGTTACTGCACTACCTGAAGAATTACCATTAACGAGCTATAAAGTAACACCTACTTCTATTAATGTATTGCATAAAGAGGGCCCCACTTTAAAA", + "start": 495971, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 495971, + "genome_id": 0, + "start": 495941, + "strand": "+" + }, + "seq": "AAGGAAAATCTTTGGTGGGAAAAATAGA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t4" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_10_v3", + "end": 377095, + "genome_id": 0, + "start": 377062, + "strand": "+" + }, + "seq": "AAACAAATAGCATTCGATAAATTTGAAAATTTC" + }, + "gene_name": "PF3D7_1009200", + "insert_location": { + "chrom": "Pf3D7_10_v3", + "end": 377209, + "genome_id": 0, + "ref_seq": "AACCAAAAAATGATACCTGTACGTTTTTCTCCAGGAGAAACAAAAAAATTAGAAAGGATTCTCAAAAAAGTAGACGACTTTTTCTGTGCCAATATTAAAGCTCAATATACTTGC", + "start": 377095, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_10_v3", + "end": 377095, + "genome_id": 0, + "start": 377062, + "strand": "+" + }, + "seq": "CTTCATCTATATAGTCCCCGATGAATGA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t60" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 181557, + "genome_id": 0, + "start": 181524, + "strand": "+" + }, + "seq": "TCTATTAGCTTTTTCAAACCTTTCATTATTGTT" + }, + "gene_name": "PF3D7_0104100", + "insert_location": { + "chrom": "Pf3D7_01_v3", + "end": 181673, + "genome_id": 0, + "ref_seq": "TTCATTCTTTTTTTAACGAAAACTATTCATCTCAAAAATATAAGATATTTTATATGACGAATGCCATTGTATTTTTTGTTACGTAAAACCTGACTTCTTCAAGGAAAACACATGCG", + "start": 181557, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 181557, + "genome_id": 0, + "start": 181524, + "strand": "+" + }, + "seq": "AGCTTAGGCAAAAATTGGTGAAAATG" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t3" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_10_v3", + "end": 992371, + "genome_id": 0, + "start": 992338, + "strand": "+" + }, + "seq": "TGCCTATCATTAATGGAAAATATCCTCATTATA" + }, + "gene_name": "PF3D7_1023700", + "insert_location": { + "chrom": "Pf3D7_10_v3", + "end": 992544, + "genome_id": 0, + "ref_seq": "TTTTTAAAAAAAAAAATTATGATATAAAATCTTCAATTAATAAAAGATCTATCCAGTTCTTTAAAGACACTAATATAGATCATTATATAGCATATGAATATTATAAGGAGGACCGTACGGAATTTATATTAACTATTATGAATGAAAAAAATATTACTCATCAAGAAACTCAA", + "start": 992371, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_10_v3", + "end": 992371, + "genome_id": 0, + "start": 992338, + "strand": "+" + }, + "seq": "TCCCTTTCAACTTTTTCATTTCAAGACT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t61" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 407379, + "genome_id": 0, + "start": 407346, + "strand": "+" + }, + "seq": "TCGTCTTTCTGTTCATTATCCATATAATCTTTT" + }, + "gene_name": "PF3D7_1410300", + "insert_location": { + "chrom": "Pf3D7_14_v3", + "end": 407571, + "genome_id": 0, + "ref_seq": "TCTCCTTCCTTTTCATTCTTTACTTTATTTCTATTAATACACAACTCTCCTTGAGTTAAGAGATTTACGATATTATCAATATTGTTTTCTTTCATATACTTCAACTTTTTACTATTCATTTTTAAAAGATAATTAACCAAGTTACTCATGTTTGTATTAGATGGTATGTTCCCAATTTTTTCGTCTTTTCTT", + "start": 407379, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 407379, + "genome_id": 0, + "start": 407346, + "strand": "+" + }, + "seq": "TGAACTCTTTAAATTATCCTTTTTGAATATCCA" + }, + "target_attributes": [ + "Excluded", + "Microhaplotype" + ], + "target_name": "t93" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 1102389, + "genome_id": 0, + "start": 1102362, + "strand": "+" + }, + "seq": "CGTAGAGGTGTTGATGTTAATATGGAG" + }, + "gene_name": "PF3D7_0424400", + "insert_location": { + "chrom": "Pf3D7_04_v3", + "end": 1102578, + "genome_id": 0, + "ref_seq": "GAAGAAATAAATAAAATAATTTATACAAACGAATTTAATAATTATGAAGATAAAATATATGAAGATGTCAAATATATTAAAGAACAGGAAAATGAAATGTACTTGAGAGATGGAATTGAAGAGTTACATATGGATGAACCAAGTGGGGATGTATATTTTGATGATCAAGATGATTATATATTTTTAGAT", + "start": 1102389, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 1102389, + "genome_id": 0, + "start": 1102362, + "strand": "+" + }, + "seq": "CATCCAAACATACATCCTCTTTTTGTTC" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t30" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 2114975, + "genome_id": 0, + "start": 2114942, + "strand": "+" + }, + "seq": "TGTATCTATAGTCGATTTTGTTATTCTAAGCAT" + }, + "gene_name": "PF3D7_1352900", + "insert_location": { + "chrom": "Pf3D7_13_v3", + "end": 2115142, + "genome_id": 0, + "ref_seq": "ATCATTAAGTAAAAAATTTACGGTATCGACATTAACAGTGTAATAATTTCTTCCTAAATTTAAATGTTCTATATAATTCAAATTTAATACGGTATTTAACCTTTCTTCAAGTATTATCATTGCATTAATTTGAAACATAAGTAAAAAATTATTAGCACTTCTAAAAT", + "start": 2114975, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_13_v3", + "end": 2114975, + "genome_id": 0, + "start": 2114942, + "strand": "+" + }, + "seq": "ACATTTTATTGTTGTTAGAATACCTCTAGTTT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t84" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_12_v3", + "end": 63166, + "genome_id": 0, + "start": 63135, + "strand": "+" + }, + "seq": "ACATTCTATTAAAAACTTTGGGTACTCCTAA" + }, + "gene_name": "PF3D7_1200700", + "insert_location": { + "chrom": "Pf3D7_12_v3", + "end": 63280, + "genome_id": 0, + "ref_seq": "TATAATTTCACCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGCAATGAAAAAAACAACCCTTTCATA", + "start": 63166, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_12_v3", + "end": 63166, + "genome_id": 0, + "start": 63135, + "strand": "+" + }, + "seq": "ACACATTTATCTTATTTACCCGTATCTCATATA" + }, + "target_attributes": [ + "Excluded", + "Microhaplotype" + ], + "target_name": "t72" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 141778, + "genome_id": 0, + "start": 141751, + "strand": "+" + }, + "seq": "GATACACGTGATGAATACCATATAGCC" + }, + "gene_name": "PF3D7_0402300", + "insert_location": { + "chrom": "Pf3D7_04_v3", + "end": 141945, + "genome_id": 0, + "ref_seq": "CTTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCAAATCTGCACACAAAGAAATTAAAAAAGAATCAGAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAATT", + "start": 141778, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 141778, + "genome_id": 0, + "start": 141751, + "strand": "+" + }, + "seq": "AGATCAAGCATTTGTCTGTCTATATCTCTT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t22" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_10_v3", + "end": 1399544, + "genome_id": 0, + "start": 1399515, + "strand": "+" + }, + "seq": "GGTCAAACTCATTCTGAATTAAATCCTGA" + }, + "gene_name": "PF3D7_1035300", + "insert_location": { + "chrom": "Pf3D7_10_v3", + "end": 1399711, + "genome_id": 0, + "ref_seq": "AACATCAGAACATAGTAAAGATTTAAATAATAATGATTCAAAAAATGAATCTAGTGATATTATTTCAGTAAATAATAAATCAAATAAAGTACAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACAA", + "start": 1399544, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_10_v3", + "end": 1399544, + "genome_id": 0, + "start": 1399515, + "strand": "+" + }, + "seq": "GTTTTTGATTAGGAAAAGGTTCTGTTGAAA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t63" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 748230, + "genome_id": 0, + "start": 748200, + "strand": "+" + }, + "seq": "AGGTCTAGGAAATAAAGGAGTATTACCATG" + }, + "gene_name": "PF3D7_0417200", + "insert_location": { + "chrom": "Pf3D7_04_v3", + "end": 748436, + "genome_id": 0, + "ref_seq": "GAAATGTAATTCCCTAGATATGAAATATTTTTGTGCAGTTACAACATATGTGAATGAATCAAAATATGAAAAATTGAAATATAAGAGATGTAAATATTTAAACAAAGAAACTGTGGATAATGTAAATGATATGCCTAATTCTAAAAAATTACAAAATGTTGTAGTTATGGGAAGAACAAGCTGGGAAAGCATTCCAAAAAAATTTA", + "start": 748230, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 748230, + "genome_id": 0, + "start": 748200, + "strand": "+" + }, + "seq": "ACAATATAACATTTATCCTATTGCTTAAAGGTT" + }, + "target_attributes": [ + "Included", + "DrugResistance" + ], + "target_name": "t25" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_03_v3", + "end": 85440, + "genome_id": 0, + "start": 85407, + "strand": "+" + }, + "seq": "ACCCATAGAAATGTTAAATGATATTTTTCTTCT" + }, + "gene_name": "PF3D7_0301400", + "insert_location": { + "chrom": "Pf3D7_03_v3", + "end": 85646, + "genome_id": 0, + "ref_seq": "AACTTTTTAACACTATCATTATAATTATGTCTTTTATTTTCATATTTTTCTTTATAATAATTTATATCCTTTAATTTTTCTTTCATCAAATTTAACCATTTATCATTTAAATTCTCTTTTTCCACAGCTCCAGCATTTTTATTTATATCATCTACAACTACATCTTCCTTCACATAATTATTTATATAAAAATTATTATCATCTAA", + "start": 85440, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_03_v3", + "end": 85440, + "genome_id": 0, + "start": 85407, + "strand": "+" + }, + "seq": "GAAGAAGTATTAAATGAAGAATTTTCAGATGCT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t14" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 109912, + "genome_id": 0, + "start": 109879, + "strand": "+" + }, + "seq": "TTTTAAAACTGGCAAATTATTTATTTCTGTCAT" + }, + "gene_name": "PF3D7_0401900", + "insert_location": { + "chrom": "Pf3D7_04_v3", + "end": 110087, + "genome_id": 0, + "ref_seq": "AATATTTGTATATATTCTAGTAAACACTTTAGGTACACCTGCAAGTACCTCAACATCTGAATTATATAAATCTTTAGAAAAACAACTAATATCCTTACTCGATATATTTATTTTTATACCAAGAATAACAGCCATATAAACCAAAACTCTCTCAAATACATGTGATACAGGTAAA", + "start": 109912, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 109912, + "genome_id": 0, + "start": 109879, + "strand": "+" + }, + "seq": "CATGAAACCGAAAACCCATTTTTCTTA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t20" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_07_v3", + "end": 729975, + "genome_id": 0, + "start": 729943, + "strand": "+" + }, + "seq": "AATAAGAAATATGTCTTACAAGGAGATGTTTT" + }, + "gene_name": "PF3D7_0716700", + "insert_location": { + "chrom": "Pf3D7_07_v3", + "end": 730088, + "genome_id": 0, + "ref_seq": "TTTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATGTTACGATATAAAAAAATATAGATGTTCATTATTGAAG", + "start": 729975, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_07_v3", + "end": 729975, + "genome_id": 0, + "start": 729943, + "strand": "+" + }, + "seq": "AAACATTATGTAGTCAACATATGAAGGAAA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t43" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 534941, + "genome_id": 0, + "start": 534908, + "strand": "+" + }, + "seq": "TGTATGTGTGTTGATTGTAATTATAAGAATTGT" + }, + "gene_name": "PF3D7_0113800", + "insert_location": { + "chrom": "Pf3D7_01_v3", + "end": 535110, + "genome_id": 0, + "ref_seq": "AATACTCCGTCAGATATTCAAAATGAATGTATTTGTTCAAAAATAAATGAAGATAGAAATAATGATATGATAAACATATCTGAAATATATTATCGTTTCATTAAATTTATAACAATGATTGAAATATATTTGTGTGTAATAGAGGAAATTAAAAGGGAAGAATGGGAAA", + "start": 534941, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 534941, + "genome_id": 0, + "start": 534908, + "strand": "+" + }, + "seq": "CTACAAAAATTATGAAAAAGTTTGGTTCCTTTT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t9" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_09_v3", + "end": 685601, + "genome_id": 0, + "start": 685583, + "strand": "+" + }, + "seq": "CACGCGAACCAAACAACG" + }, + "gene_name": "PF3D7_0916400", + "insert_location": { + "chrom": "Pf3D7_09_v3", + "end": 685792, + "genome_id": 0, + "ref_seq": "ACAAAGGAACAAGATAATTTTTTCCATTTTTATAAAAGTAATATATATGATATGGAAAATAGAACCTGTAATAATAATATATTACAATATTGTGTTATGAATAATAAATCATATTTATTTCATAATATATCATCCAAAAAAAATATATATATAAAAAAAAAGAATCATCAGTTTTCTTTATTCATATATTC", + "start": 685601, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_09_v3", + "end": 685601, + "genome_id": 0, + "start": 685583, + "strand": "+" + }, + "seq": "GGGCGAAATTCTATGAATGTATTATTAATAGAA" + }, + "target_attributes": [ + "Excluded", + "Microhaplotype" + ], + "target_name": "t56" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_02_v3", + "end": 470492, + "genome_id": 0, + "start": 470459, + "strand": "+" + }, + "seq": "TGAACATGAAGAATATTGACATGAAACATTATA" + }, + "gene_name": "PF3D7_0211700", + "insert_location": { + "chrom": "Pf3D7_02_v3", + "end": 470676, + "genome_id": 0, + "ref_seq": "ATACACATAAGAAAAAAAAAATTTATTTATTCTTACAAAAAGAATATAAAAACAAAATTTTGGGATTTATAAATTTTTATAAACATATAACACACAAAATAAAAAAGAAACAAGAAAATGTTCATGATAAAATCACTTTTTTAAAATGTCTAAAGGAACTCTTTTTTGTCACACATACAAATAA", + "start": 470492, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_02_v3", + "end": 470492, + "genome_id": 0, + "start": 470459, + "strand": "+" + }, + "seq": "GTATGTATTATACCCTCCATTTGATTATTCTCT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t12" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 145449, + "genome_id": 0, + "start": 145416, + "strand": "+" + }, + "seq": "TGTTCGATATGTTTAAATATATGATTCTCGAAA" + }, + "gene_name": "PF3D7_0103300", + "insert_location": { + "chrom": "Pf3D7_01_v3", + "end": 145622, + "genome_id": 0, + "ref_seq": "AAACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGTATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATAAGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTAA", + "start": 145449, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 145449, + "genome_id": 0, + "start": 145416, + "strand": "+" + }, + "seq": "CCAATATGTCAAGGTATATTAAAGTATGGTATC" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t1" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 339168, + "genome_id": 0, + "start": 339139, + "strand": "+" + }, + "seq": "TGAGATAATCCTCCTGGAATATTTGTCAT" + }, + "gene_name": "PF3D7_0806300", + "insert_location": { + "chrom": "Pf3D7_08_v3", + "end": 339357, + "genome_id": 0, + "ref_seq": "ATCATTACTATTCTTTATCCATATATATGTTGTTATATCAGTTGCACCTGAGGGTGGATTCAAACCTCTTGCTTGTATAATATATGCACGTACTACTAAATTACGTGTTAATCTATATTCTCTTACTAAATCATCACATTTCTTTATCATTTCTTTTTTTAAATACATTGTCTTTTCATCATACACATT", + "start": 339168, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 339168, + "genome_id": 0, + "start": 339139, + "strand": "+" + }, + "seq": "CTGAAGCGGTTGGATATTTGAAATATATATGT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t48" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 1100656, + "genome_id": 0, + "start": 1100629, + "strand": "+" + }, + "seq": "CCCAAAACGGTTAATACTGAAGTTAGA" + }, + "gene_name": "PF3D7_0424400", + "insert_location": { + "chrom": "Pf3D7_04_v3", + "end": 1100831, + "genome_id": 0, + "ref_seq": "AATGTTCTAAGATCTGATGGAAAAATATCTGATCAAGGTTCTCAGAAAAGTCCTCCTAAGGAACTTTCTAATAAACAAATGACTCCTGCTCAACGTAAGAATGTGCCACATTTTGTTGAAAGAAGAGGCTATGGAAATAGTCATGTTAGGGGTAACGCACTTAAAAAAATTAGTA", + "start": 1100656, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 1100656, + "genome_id": 0, + "start": 1100629, + "strand": "+" + }, + "seq": "AGAAGAAGGACTTTTATAATTATCATCACCAT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t29" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 179903, + "genome_id": 0, + "start": 179874, + "strand": "+" + }, + "seq": "AACAACAAGCTTTGTCGCTAAAATTAATT" + }, + "gene_name": "PF3D7_0104100", + "insert_location": { + "chrom": "Pf3D7_01_v3", + "end": 180115, + "genome_id": 0, + "ref_seq": "CTTTCGATACAGGACATATAGATCATAATATAAACGAATATGAAAAACATTTTACAATTTTAAAAGAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGAAAATAATACATTTTTAAATAGAATAAGAACTGAACAAGTCAAAAAATCGTTATTAATAACAGGTATTATAAACGAAAATATT", + "start": 179903, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 179903, + "genome_id": 0, + "start": 179874, + "strand": "+" + }, + "seq": "TCTGATACCTATAGCTTCCATATTTTCATATTT" + }, + "target_attributes": [ + "Excluded", + "Microhaplotype" + ], + "target_name": "t2" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 120215, + "genome_id": 0, + "start": 120188, + "strand": "+" + }, + "seq": "GTCCTTATCACATCCTCCATTGTTTAC" + }, + "gene_name": "PF3D7_1403200", + "insert_location": { + "chrom": "Pf3D7_14_v3", + "end": 120351, + "genome_id": 0, + "ref_seq": "CTTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTCTGGACAATTACAATATTCATATCCATGAGTATTCTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAAA", + "start": 120215, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 120215, + "genome_id": 0, + "start": 120188, + "strand": "+" + }, + "seq": "ACAGAAAGAATGGTTTAGAAATGTACGAAT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t90" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 534215, + "genome_id": 0, + "start": 534182, + "strand": "+" + }, + "seq": "TTCAGATGTGATAAATATATGTGACATTTGTAA" + }, + "gene_name": "PF3D7_0113800", + "insert_location": { + "chrom": "Pf3D7_01_v3", + "end": 534368, + "genome_id": 0, + "ref_seq": "TGATAAAAAAAGAAAATGTAACAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAAAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTGT", + "start": 534215, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_01_v3", + "end": 534215, + "genome_id": 0, + "start": 534182, + "strand": "+" + }, + "seq": "AAAAATATAAGAGATTCAAAGGGTCAGAC" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t8" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 336468, + "genome_id": 0, + "start": 336438, + "strand": "+" + }, + "seq": "AATACATGAATATGATTAACAACGAACCCA" + }, + "gene_name": "PF3D7_0806200", + "insert_location": { + "chrom": "Pf3D7_08_v3", + "end": 336647, + "genome_id": 0, + "ref_seq": "TAAATTTACAGAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCCACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCACAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTAT", + "start": 336468, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 336468, + "genome_id": 0, + "start": 336438, + "strand": "+" + }, + "seq": "ACTAAAAGGAAGACAAGCTGAAAACAT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t47" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 102326, + "genome_id": 0, + "start": 102298, + "strand": "+" + }, + "seq": "ACTTGTCGCTATACCTTCATCTATTGAA" + }, + "gene_name": "PF3D7_0801300", + "insert_location": { + "chrom": "Pf3D7_08_v3", + "end": 102500, + "genome_id": 0, + "ref_seq": "TTAATTTTCTCAAGTAACATATTTTTGTCTTGACTACTTTCATCTGTAAATGGAACGACTACTCTTTGCTTACCTGCAAAAAGGACAACTGACATATGAGCCTTATCCTTACTTACATTCGAATTAAAGACCATAGATTCTAAAAATGGTATAGTTCCTTTTAACCAATAATCC", + "start": 102326, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 102326, + "genome_id": 0, + "start": 102298, + "strand": "+" + }, + "seq": "TGTTGAAGAGTCAAGTTTTGTTCAGAA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t46" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_09_v3", + "end": 1437114, + "genome_id": 0, + "start": 1437081, + "strand": "+" + }, + "seq": "CATCATAATCATCTAATGATGTTAATCCTTGTA" + }, + "gene_name": "PF3D7_0936300", + "insert_location": { + "chrom": "Pf3D7_09_v3", + "end": 1437303, + "genome_id": 0, + "ref_seq": "CTAAAACCTGACAGCTTTGTACAGTTATATTTACCCAATTAGAATGTTCAAACATATTTAAGTGTTGCCATTCTTCAAATAATTTTTTTTCATATTCAGTTTTTGGTTGGTTTTTAAATTCTTTTGATACTGTACCTTCTGCGGATGGTATAGGGAAGTTAAAAATTTTATTACGTACTTTGTTTGATT", + "start": 1437114, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_09_v3", + "end": 1437114, + "genome_id": 0, + "start": 1437081, + "strand": "+" + }, + "seq": "GCACCATCATTAAATTTAGAAGAAACCC" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t59" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 279663, + "genome_id": 0, + "start": 279635, + "strand": "+" + }, + "seq": "CGGATAAATGTTTAGTTATTAGCCAGGT" + }, + "gene_name": "PF3D7_1407700", + "insert_location": { + "chrom": "Pf3D7_14_v3", + "end": 279786, + "genome_id": 0, + "ref_seq": "GAGTAATAGTGATTCATATAAGGTAAATTGTATTAATTTCTCTGAAGGATTTTGTTGCTGTCATCCAATAAATAATTTAGCACTATTATATGGAGAGTATCAACAAAATCAAGAATCAAAAAT", + "start": 279663, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 279663, + "genome_id": 0, + "start": 279635, + "strand": "+" + }, + "seq": "CATTACTTATGGGAAGTTTCGGTAATTTCATA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t92" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_09_v3", + "end": 1178894, + "genome_id": 0, + "start": 1178862, + "strand": "+" + }, + "seq": "GAACGTTGAGAAATTACCTTTAGAAGATTACT" + }, + "gene_name": "PF3D7_0929400", + "insert_location": { + "chrom": "Pf3D7_09_v3", + "end": 1179078, + "genome_id": 0, + "ref_seq": "ACAAATTATCCTTAGCCCCAGATATGGTAAAGACATATCACTGTTATAAATTAGGAAAGCAAGCAGCTGAATTATTAGAATCTATCATTTTAAAGAAAAAGTTCGTAAGATTTAGAGTTACTGATGCTATTGATGTATATGATTTCTTTTATATAAAGAAAGTTTTATCCAGTCGTATTAAGAA", + "start": 1178894, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_09_v3", + "end": 1178894, + "genome_id": 0, + "start": 1178862, + "strand": "+" + }, + "seq": "GCTCTTTTGTCTTGTAAAAATTCATTATATTCT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t57" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_03_v3", + "end": 654002, + "genome_id": 0, + "start": 653972, + "strand": "+" + }, + "seq": "TCACCTAACGGTATATTTTTATCTCGTACA" + }, + "gene_name": "PF3D7_0316200", + "insert_location": { + "chrom": "Pf3D7_03_v3", + "end": 654175, + "genome_id": 0, + "ref_seq": "ATATTTTTATAATTTCCTTTCATCTTATTTTTTTCTTTATATTTTTTTTTTTCATATGTAAGATTTATATAATCACTTTCGCTTTTTCTAACCCTTTTGAACTTTTTAAATGTACTTCGTTCATTATTTCTAATTCTCGTAAACACAAGAATAAATATTTTGATATATCTTAT", + "start": 654002, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_03_v3", + "end": 654002, + "genome_id": 0, + "start": 653972, + "strand": "+" + }, + "seq": "TTATGTATTTTTCAAAAATCGGCACGTTT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t18" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_12_v3", + "end": 943258, + "genome_id": 0, + "start": 943227, + "strand": "+" + }, + "seq": "ACCCTACTTATACAAAGAGATAAAGAAGTAG" + }, + "gene_name": "PF3D7_1223400", + "insert_location": { + "chrom": "Pf3D7_12_v3", + "end": 943428, + "genome_id": 0, + "ref_seq": "AATCAACTATAATTAAAAATAGTGGAATTATTGAAAACTTTGGAGATATTGATTATATCTTTACGGATAAAACAGGAACACTAACAGAAAATGTCATGGTGCTTAAAGTTATACATATAGGTTTTGATGTTATACATGCAGAAAATGAAAAAAATTCCATACAAGGTAAT", + "start": 943258, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_12_v3", + "end": 943258, + "genome_id": 0, + "start": 943227, + "strand": "+" + }, + "seq": "AATTCCCTTTTTGTTTGGTTTCCATATT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t75" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 802525, + "genome_id": 0, + "start": 802494, + "strand": "+" + }, + "seq": "AAGCATCTGAACATTAAAGTTCAAACAAATA" + }, + "gene_name": "PF3D7_0418000", + "insert_location": { + "chrom": "Pf3D7_04_v3", + "end": 802713, + "genome_id": 0, + "ref_seq": "TAAATTATTATAGAAAGATAGAAGTTATTTTATATGAATGGTTATATTTTCATTATAATAATGTATATAACACCAAAGTAAAAAAACAAAAATTTATATTTACCCAACAAAAAAAAGACATATCAAAACATAACAAGTTATATCTTCAGTATGATCAAAATAAAAGAAACTCTGAAATAGAACATACA", + "start": 802525, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 802525, + "genome_id": 0, + "start": 802494, + "strand": "+" + }, + "seq": "GCACATCGAATAATCTTCTTTGTGATT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t27" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 549993, + "genome_id": 0, + "start": 549962, + "strand": "+" + }, + "seq": "CATAAAAGAGGAAATCCACATACAATGGATA" + }, + "gene_name": "PF3D7_0810800", + "insert_location": { + "chrom": "Pf3D7_08_v3", + "end": 550218, + "genome_id": 0, + "ref_seq": "AACTAACAAATTATGATAATCTAGTTTATGATATAAAAAATTATTTAGAACAAAGATTAAATTTTCTTGTATTAAATGGAATACCTCGTTATAGGATACTATTTGATATTGGATTAGGATTTGCGAAGAAACATGATCAATCTATTAAACTCTTACAAAATATACATGTATATGATGAGTATCCACTTTTTATTGGATATTCAAGAAAAAGATTTATTGCCCATT", + "start": 549993, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_08_v3", + "end": 549993, + "genome_id": 0, + "start": 549962, + "strand": "+" + }, + "seq": "GTGTATTTATTACAACATTTTGATCATTCATGC" + }, + "target_attributes": [ + "Included", + "DrugResistance" + ], + "target_name": "t49" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_03_v3", + "end": 618396, + "genome_id": 0, + "start": 618367, + "strand": "+" + }, + "seq": "GGGACACTACAGACAAAAATAAATGATCT" + }, + "gene_name": "PF3D7_0315200", + "insert_location": { + "chrom": "Pf3D7_03_v3", + "end": 618581, + "genome_id": 0, + "ref_seq": "AAAAAGAGATTATAGAAGTGGAAAGAAGACATATATAATACAAGCTCTACAATATGCATTAACATATTATAGCAAACTTTCAAATAGAAAGGAAGCACCTAAAGTAACCATGTTATTTACAGATGGAAATGATTCCTATGAATCAGAAAAGGGATTACAGGATATTGCATTATTATATAGAAAAG", + "start": 618396, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_03_v3", + "end": 618396, + "genome_id": 0, + "start": 618367, + "strand": "+" + }, + "seq": "AGAAACTCCTACTACCAATAATTTGACATTTT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t17" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_02_v3", + "end": 805822, + "genome_id": 0, + "start": 805795, + "strand": "+" + }, + "seq": "TTGGAAAATTTGAGAATCCTATGTGCT" + }, + "gene_name": "PF3D7_0220100", + "insert_location": { + "chrom": "Pf3D7_02_v3", + "end": 805942, + "genome_id": 0, + "ref_seq": "TTAATTATGAAGACAGTCTCACGACTTCATGTTATATTGATGAAAACAAATCCGATTCATCCTATGAAACTGAAGAAAATGTAAACTATAATAATAAAATGGGTAAACGCAAAAATTTAG", + "start": 805822, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_02_v3", + "end": 805822, + "genome_id": 0, + "start": 805795, + "strand": "+" + }, + "seq": "TTCGATTTGCCTACAATTTGTGATTCTA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t13" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 544718, + "genome_id": 0, + "start": 544686, + "strand": "+" + }, + "seq": "AACCCAGATAATCATTTATTAAATACAGACAC" + }, + "gene_name": "PF3D7_0412300", + "insert_location": { + "chrom": "Pf3D7_04_v3", + "end": 544861, + "genome_id": 0, + "ref_seq": "ATATATTTTACATAATAACAATCCTTCATGTAATGATTATAATTTAAATAATCTTTCATTTAATATAAATAAATATATTAATGAAGAAAAAGGCAAAAATAAAAAAACAAATCAACATATATCAGAACAATTTTTATTTCCTA", + "start": 544718, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_04_v3", + "end": 544718, + "genome_id": 0, + "start": 544686, + "strand": "+" + }, + "seq": "CTGCAGCACACATTATAACTAAATGTG" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t24" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 150105, + "genome_id": 0, + "start": 150075, + "strand": "+" + }, + "seq": "CCGAAAATAGAACTCCATATGTTCATTACC" + }, + "gene_name": "PF3D7_1404300", + "insert_location": { + "chrom": "Pf3D7_14_v3", + "end": 150294, + "genome_id": 0, + "ref_seq": "ATAATAATAGTAATATAAAGAATTATTCAGCTGTAGATATATTCTCACCCAAAAAAACTGGAAAGGAATGTATTAAATGTCTCCCAGATAATTTTTGTGAATGCGAATGTAGTTGTAAAAATAAAACAGGTTTTTCAATGAAATATAGACATGCCAGTAAGGGATCTAAAGGATATAGTAAAAAAATGA", + "start": 150105, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 150105, + "genome_id": 0, + "start": 150075, + "strand": "+" + }, + "seq": "GTCTGGAACGAGAAGATGTCTTTG" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t91" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_02_v3", + "end": 109807, + "genome_id": 0, + "start": 109776, + "strand": "+" + }, + "seq": "CCACCATTTCTTCATTTTAATTTTGAATGGT" + }, + "gene_name": "PF3D7_0202100", + "insert_location": { + "chrom": "Pf3D7_02_v3", + "end": 109982, + "genome_id": 0, + "ref_seq": "AACTTATGTTCATGAGCTAATTTCCCACAAATACTCCATAACGAACTTTTCATTTTATTAAATTTATCTCTCAAAAGAGAATGACTATAATGCCATATTAAATACATATCTTTCCTTTCTAATTTTCCTGGTAATTCTATTATCATTCTTTCTAAATCTTCTTCTGTAACTTTTC", + "start": 109807, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_02_v3", + "end": 109807, + "genome_id": 0, + "start": 109776, + "strand": "+" + }, + "seq": "ACCATTTGGATTAAAACCTTCAGATTTAAATA" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t10" + }, + { + "forward_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 3214351, + "genome_id": 0, + "start": 3214318, + "strand": "+" + }, + "seq": "TGTTAAAATATTTTCCAAAGAATTCAATTAGCG" + }, + "gene_name": "PF3D7_1478000", + "insert_location": { + "chrom": "Pf3D7_14_v3", + "end": 3214478, + "genome_id": 0, + "ref_seq": "ATCGTTTTGAATTGTTAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGAGTGATTTTGGAATAGCTACAATGAATGAAACCGAACATACTAGATCTTTTTATGGATT", + "start": 3214351, + "strand": "+" + }, + "reverse_primer": { + "location": { + "chrom": "Pf3D7_14_v3", + "end": 3214351, + "genome_id": 0, + "start": 3214318, + "strand": "+" + }, + "seq": "TCAATTGATGGTTGCCTTTCGATT" + }, + "target_attributes": [ + "Included", + "Microhaplotype" + ], + "target_name": "t100" + } + ], + "panel_info": [ + { + "panel_name": "heomev1", + "reactions": [ + { + "panel_targets": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99 + ], + "reaction_name": "full" + } + ] + } + ], + "sequencing_info": [ + { + "library_kit": "TruSeq i5/i7 barcode primers", + "library_layout": "paired-end", + "library_screen": "40 uL reaction containing 10 uL of bead purified digested product, 18uL of nuclease-free water, 8uL of 5X secondary PCR master mix, and 5 uL of 10 uM TruSeq i5/i7 barcode primers", + "library_selection": "RANDOM", + "library_source": "GENOMIC", + "library_strategy": "WGS", + "nucl_acid_amp": "https://www.paragongenomics.com/targeted-sequencing/amplicon-sequencing/cleanplex-ngs-amplicon-sequencing/", + "nucl_acid_amp_date": "2019-07-15", + "nucl_acid_ext": "https://www.paragongenomics.com/targeted-sequencing/amplicon-sequencing/cleanplex-ngs-amplicon-sequencing/", + "nucl_acid_ext_date": "2019-07-15", + "pcr_cond": "10 min at 95C, 13 cycles for high density samples (or 15 cycles for low density samples) of 15 sec at 98C and 75 sec at 60C", + "seq_center": "UCSF", + "seq_date": "2019-07-15", + "seq_instrument_model": "NextSeq 550 instrument", + "seq_platform": "ILLUMINA", + "sequencing_info_name": "Mozambique2018" + }, + { + "library_layout": "paired-end", + "library_selection": "RANDOM", + "library_source": "GENOMIC", + "library_strategy": "WGS", + "seq_date": "2020-01-01", + "seq_instrument_model": "Multiple", + "seq_platform": "ILLUMINA", + "sequencing_info_name": "Pf7Plus" + } + ], + "project_info": [ + { + "project_collector_chief_scientist": "Greenhouse, Bryan", + "project_description": "Heome1 targeted amplicon sequencing in 2018 from patients from several health clinics in provinces Inhassoro, Mandlakazi, and Namaacha", + "project_name": "MOZ2018" + }, + { + "project_description": "PathWeaver assemblies of Heome1 from large collection of global samples", + "project_name": "PathWeaverHeome1" + } + ], + "specimen_info": [ + { + "collection_country": "Mozambique", + "collection_date": "2018-06-07", + "geo_admin3": "Inhassoro", + "host_taxon_id": 9606, + "lat_lon": "-21.5535,35.1819", + "parasite_density_info": [ + { + "parasite_density": 477719.34375, + "parasite_density_method": "qpcr" + } + ], + "project_id": 0, + "specimen_collect_device": "dried blood spot", + "specimen_name": "8025874217", + "specimen_store_loc": "UCSF Greenhouse Lab", + "specimen_taxon_id": [ + 5833 + ], + "storage_plate_info": { + "plate_col": 12, + "plate_name": "8", + "plate_row": "C" + } + }, + { + "collection_country": "Mozambique", + "collection_date": "2018-04-30", + "geo_admin3": "Namaacha", + "host_taxon_id": 9606, + "lat_lon": "-25.9871,32.0326", + "parasite_density_info": [ + { + "parasite_density": 875.130981445312, + "parasite_density_method": "qpcr" + } + ], + "project_id": 0, + "specimen_collect_device": "dried blood spot", + "specimen_name": "8025874266", + "specimen_store_loc": "UCSF Greenhouse Lab", + "specimen_taxon_id": [ + 5833 + ], + "storage_plate_info": { + "plate_col": 7, + "plate_name": "8", + "plate_row": "B" + } + }, + { + "collection_country": "India", + "collection_date": "2012-08-01", + "geo_admin3": "NA", + "host_taxon_id": 9606, + "project_id": 1, + "specimen_collect_device": "Dried Blood spot", + "specimen_name": "5tbx", + "specimen_store_loc": "Multiple", + "specimen_taxon_id": [ + 5833 + ] + }, + { + "collection_country": "Papua New Guinea", + "collection_date": "NA", + "geo_admin3": "NA", + "host_taxon_id": 9606, + "project_id": 1, + "specimen_collect_device": "Dried Blood spot", + "specimen_name": "XUC009", + "specimen_store_loc": "Multiple", + "specimen_taxon_id": [ + 5833 + ] + } + ], + "library_sample_info": [ + { + "library_prep_plate_info": { + "plate_col": 12, + "plate_name": "8", + "plate_row": "C" + }, + "library_sample_name": "8025874217_lib_name", + "panel_id": 0, + "sequencing_info_id": 0, + "specimen_id": 0 + }, + { + "library_prep_plate_info": { + "plate_col": 7, + "plate_name": "8", + "plate_row": "B" + }, + "library_sample_name": "8025874266_lib_name", + "panel_id": 0, + "sequencing_info_id": 0, + "specimen_id": 1 + }, + { + "library_sample_name": "5tbx_lib_name", + "panel_id": 0, + "sequencing_info_id": 1, + "specimen_id": 2 + }, + { + "library_sample_name": "XUC009_lib_name", + "panel_id": 0, + "sequencing_info_id": 1, + "specimen_id": 3 + } + ], + "bioinformatics_methods_info": [ + { + "methods": [ + { + "program": "SeekDeep extractorPairedEnd", + "program_description": "Takes raw paired-end reads and demultiplexes on primers and does QC filtering", + "program_version": "v2.6.5" + }, + { + "additional_argument": [ + "--illumina", + "--qualThres 25,20", + "--trimFront 1", + "--trimBack 1" + ], + "program": "SeekDeep qluster", + "program_description": "Takes sequences per sample per target and clusters them", + "program_version": "v2.6.5" + }, + { + "additional_argument": [ + "--strictErrors", + "--illumina", + "--removeOneSampOnlyOneOffHaps", + "--excludeCommonlyLowFreqHaplotypes", + "--excludeLowFreqOneOffs", + "--rescueExcludedOneOffLowFreqHaplotypes" + ], + "program": "SeekDeep processClusters", + "program_description": "Compare across samples for each target to create population level identifiers and do post artifact cleanup", + "program_version": "v2.6.5" + } + ] + }, + { + "methods": [ + { + "additional_argument": [ + "--bamExtractTrimToRegion", + "--bed /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_withPrimers.bed", + "--genomeDir /tank/data/genomes/plasmodium/genomes/pf/genomes/", + "--primaryGenome Pf3D7", + "--bam bams/{SAMPLE}.sorted.bam" + ], + "program": "PathWeaver BamExtractPathwaysFromRegion", + "program_description": "Extract reads from a bam file for a specific genomic locatioon and then assembles local haplotypes for that region", + "program_version": "1.0.0-dev" + }, + { + "additional_argument": [ + "--bamExtractTrimToRegion", + "--bed /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_withPrimers.bed", + "--genomeDir /tank/data/genomes/plasmodium/genomes/pf/genomes/", + "--primaryGenome Pf3D7", + "--bam bams/{SAMPLE}.sorted.bam" + ], + "program": "PathWeaver BamExtractPathwaysFromRegion", + "program_description": "Extract reads from a bam file for a specific genomic locatioon and then assembles local haplotypes for that region", + "program_version": "1.0.0-dev" + }, + { + "additional_argument": [ + "--overWriteDir", + "--fracCutOff 0.005", + "--dout popClusteringTrimmedParagon", + "--replicateMinTotalReadCutOff 10", + "--clusterCutOff 5", + "--pat _heome1", + "--numThreads 10", + "--groupingsFile /tank/data/plasmodium/falciparum/pfdata/metadata/meta.tab.txt", + "--genome2bit /tank/data/genomes/plasmodium/genomes/pf/genomes/Pf3D7.2bit", + "--trimBedFnp /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_inserts_trimmed1.bed" + ], + "program": "PathWeaver runProcessClustersOnRecon", + "program_description": "Compare across samples for each target to create population level identifiers and do post artifact cleanup", + "program_version": "1.0.0-dev" + } + ] + } + ], + "bioinformatics_run_info": [ + { + "bioinformatics_methods_id": 0, + "bioinformatics_run_name": "Mozambique2018-SeekDeep", + "run_date": "2022-04-01" + }, + { + "bioinformatics_methods_id": 1, + "bioinformatics_run_name": "PathWeaver-Heome1", + "run_date": "2024-09-03" + } + ], + "representative_microhaplotypes": { + "targets": [ + { + "mhap_location": { + "chrom": "Pf3D7_01_v3", + "end": 145621, + "genome_id": 0, + "start": 145448, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGTATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATATGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTA" + }, + { + "seq": "AACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGTATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATAAGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTA" + }, + { + "seq": "AACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGAATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATATGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTA" + }, + { + "seq": "AACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGAATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATAAGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTA" + } + ], + "target_id": 79 + }, + { + "mhap_location": { + "chrom": "Pf3D7_02_v3", + "end": 109981, + "genome_id": 0, + "start": 109806, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ACTTATGTTCATGAGCTAATTTCCCACAAATACTCCATAACGAACTTTTCATTTTATTAAATTTATCTCTCAAAAGAGAATGACTATAATGCCATATTAAATACATATCTTTCCTTTCTAATTTTCCTGGTAATTCTATTATCATTCTTTCTAAATCTTCTTCTGTAACTTTT" + }, + { + "seq": "ACTCATGTTCATGAGCTAATTTCCCACAAATACTCCATAACGAACTTTTCATTTTATTAAATTTATCTCTCAAAAGAGAATGACTATAATGCCATATTAAATACATATCTTTCCTTTCTAATGTTCCTGGTAATTCTATTATCATTCTTTCTAAATCTTCTTCTGTAAGTTTT" + }, + { + "seq": "ACTTATGTTCATGAGCTAATTTCCCACAAATACTCCATAACGAACTTTTCATTTTATTAAATTTATCTCTCAAAAGAGAATGACTATAATGCCATATTAAATACATATCTTTCCTTTCTAATTTTCCTGGTAATTCTATTATCATTCTTTCTAAATCTTCTTCTGTAAGTTTT" + } + ], + "target_id": 98 + }, + { + "mhap_location": { + "chrom": "Pf3D7_14_v3", + "end": 3214477, + "genome_id": 0, + "start": 3214350, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TCGTTTTGAATTGTTAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGATTGATTTTGGAATAGCTACAATGAATGAAAACGAACATACTAGATCTTTTTATGGCT" + }, + { + "seq": "TCGTTTTGAATTGTTAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGAGTGATTTTGGAATAGCTACAATGAATGAAACCGAACATACTAGATCTTTTTATGGCT" + }, + { + "seq": "TCGTTTTGAATTGTCAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGAGTGATTTTGGAATAGCTACAATGAATGAAACCGAACATACTAGATCTTTTTATGGCT" + }, + { + "seq": "TCGTTTTGCATTGTCAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGAGTGATTTTGGAATAGCTACAATGAATGAAAGCGAACATACTAGATCTTTTTATGGCT" + } + ], + "target_id": 99 + }, + { + "mhap_location": { + "chrom": "Pf3D7_02_v3", + "end": 278335, + "genome_id": 0, + "start": 278164, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "GAATTTTCTTTTTTATGACTTTCTTCTCCTTGTTCAGAAGCTTCTTTTTCATCCTTTTTTTCTGCTGCGTCAGATAAATTGGGGGAAGCACTTGAAGATTCATTTCCTCCAGGAGTATTACTAGTACTTACTCCTTCCACATTTGGTTTTTCTTCCCCTAGAATTCTCA" + }, + { + "seq": "GAATTTTCTTTTTTATGACTTTCTTCTCCTTGTTCAGAAGCTTCTTTTTCATCCTTTTTTTCTGCTGCGTCAGATAAATTGGGGGAAGCACTTGAAGATTCATTTCCTCCAGGAGTATTACTAGTACTTACTCCGTCCACATTTGGTTTTTCTTCCCCTAGAATTCTCA" + }, + { + "seq": "GAATTTTCTTTTTTATGACTTTCTTCTCCTTGTTCAGAAGCTTCTTTTTCATCCTTTTTTTCTGCTGCGTCAGATAAATTGGGGGAAGCACTTGAAGATTCATTTCCTCCAGGAGTATCACTAGTACTTACTCCGTCCATATTTGGTTTTTCTTCCCTTAGAATTCTCA" + } + ], + "target_id": 42 + }, + { + "mhap_location": { + "chrom": "Pf3D7_02_v3", + "end": 470675, + "genome_id": 0, + "start": 470491, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TACACATAAGAAAAAAAAAATTTATTTATTCTTACAAAAAGAATATAAAAACAAAATTTTGGGATTTATAAATTTTTATAAACATATAACACACAAAATAAAAAAGAAACAAGAAAATGTTCATGATAAAATCACTTTTTTAAAATGTCTAAAGGAACTCTTTTTTGTCACACATACAAATG" + }, + { + "seq": "TACACATAAGAAAAAAAAAATTTATTTATTCTTACAAAAAGAATATAAAAACAAAATTTTGGGATTTATAAATTTTTATAAACATATAACACACAAAATAAAAAAGAAACAAGAAAATGTTCATGATAAAATCACTTTTTTAAAATGTCTAAAGGAACTCTTTTTTGTCACACATACAAATA" + }, + { + "seq": "TACACATAAGAAAAAAAAAATTTATTTATTCTTACAAAAAGAATATAAAAACAAAATTTTGGGATTTATAAATTTTTATAAACGTATAACACACAAAATAAAAAAGAAACAAGAAAATGTTCATGATAAAATCACTTTTTTAAAATGTCTAAAGGAACTCTTTTTTGTCACACATACAAATA" + } + ], + "target_id": 78 + }, + { + "mhap_location": { + "chrom": "Pf3D7_02_v3", + "end": 805941, + "genome_id": 0, + "start": 805821, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TAATTATGAAGACAGTCTCACGACTGCATGTTATATTGATGAAAACAAATCCGATTCATCCTATAAAACTGAAGAAGAAAATGTAAACTATAATAATAAAATGGGTAAACGCAAAAATTTA" + }, + { + "seq": "TAATTATGAAGACAGTCTCACGACTTCATGTTATATTGATGAAAACAAATCCGATTCATCCTATGAAACTGAAGAAAATGTAAACTATAATAATAAAATGGGTAAACGCAAAAATTTA" + } + ], + "target_id": 95 + }, + { + "mhap_location": { + "chrom": "Pf3D7_03_v3", + "end": 85645, + "genome_id": 0, + "start": 85439, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ACTTTTTAACACTATCATTATAATTATGTCTTTTATTTTCATATTTTTCTTTATAATAATTTATATCCTTTAATTTTTCTTTCATCAAATTTAACCATTTATCATTTAAATTCTCTTTTTCCACAGCTCCAGCATTTTTATTTATATCATCTACAACTACATCTTCCTTCACATAATTATTTATATAAAAATTATTATCATCTA" + }, + { + "seq": "ACTTTTTAACACTATCATTATAATTATGTCTTTTATTTTCATATTTTTCTTTATAATAATTTATATCCTTTAATTTTTCTTTCATCAAATTTAACCATTTATCATTTAAATTCTCTTTTTCCACAGCTCCAGCATTTTTATTTATATCATCTACAACTACATCTTCCTTCACATAATTATTTATATAAAAACTATTATCATCTA" + } + ], + "target_id": 73 + }, + { + "mhap_location": { + "chrom": "Pf3D7_03_v3", + "end": 142180, + "genome_id": 0, + "start": 141962, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "GCATTTATAACAAAATATCAGAAGATGGAAAAACCAAAAATAGCCTACTTAGCGATATATCAAAATTATTTAAAATTGTAAAAGAAAGCAAATTAATATTTGTAACTGGATTTTTATTAACAACCTTGTCAGCAATTGTAGATTCATACATTCCAATTTTTCTATCCAAAACGGTATCTTTTGTAATGGAAAGAAAAAAATTTACATTTCTTAAAA" + }, + { + "seq": "GCATTTATAACAAAATATCAGAAGATGGAAAAACCAAAAATAGCCTACTTAGCGATATATCAAAATTATTTAAAATTGTAAAAGAAAGCAAATTAATATTTGTAACTGGATTTTTATTAACAACCTTGTCAGCAATTGTCGATTCATACATTCCAATTTTTTTATCCAAAACGGTATCTTTTGTAATGGAAAGAAAAAGTTTTACATTTCTTAAAA" + } + ], + "target_id": 37 + }, + { + "mhap_location": { + "chrom": "Pf3D7_03_v3", + "end": 221494, + "genome_id": 0, + "start": 221362, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTGCATAATCTAATTGGTCTTTAGGTTTATTAGCAGAGCCAGGCTTTATTCTAACTTGAATA" + }, + { + "seq": "TGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTTCATAATTTAATTCGTCTTTAGGTTTATTAGCAGAGCCAGGCTTTATTCTAACTTGAATA" + }, + { + "seq": "TGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTTCATAATCTAATTCGTCTTTAGGTTTATTAGCAGAGCCAGGCTTTATTCTAACTTGAATA" + }, + { + "seq": "TGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTTCATAATCTAATTGGTCTTTAGGTTTATCAGCAGAGCCAGGCTTTATTCTAACTTGAATA" + } + ], + "target_id": 57 + }, + { + "mhap_location": { + "chrom": "Pf3D7_03_v3", + "end": 618580, + "genome_id": 0, + "start": 618395, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AAAAGAGATTATAGAAGTGGAAAGAAGACATATATAATACAAGCTCTACAATATGCATTAACATATTATAGCAAACTTTCAAATAGAAAGGAAGCACCTAAAGTAACCATGTTATTTACAGATGGAAATGATTCCTATGAATCAGAAAAGGGATTACAGGATATTGCATTATTATATAGAAAA" + }, + { + "seq": "AAAAGAGATTATAGAAGTGGAAAGAAGACATATATAATACAAGCTCTACGATATGCATTAACATATTATAGCAAACTTTCAAATAGAAAGGAAGCACCTAAAGTAACCATGTTATTTACAGATGGAAATGATTCCTATGAATCAGAAAAGGGATTACAGGATATTGCATTATTATATAGAAAA" + }, + { + "seq": "AAAAGAGATTATAGAAGTGGAAAGAAGACATATATAATACAAGCTCTACGATATGCATTAACATATTATAGCAAACTTTCAAATAGAAAGGAAGCACCTAAAGTAACCATGTTATTTACAGATGGAAATGATCCCTATGAATCAGAAAAGGGATTACAGGATATTGCATTATTATATAGAAAA" + } + ], + "target_id": 94 + }, + { + "mhap_location": { + "chrom": "Pf3D7_03_v3", + "end": 654174, + "genome_id": 0, + "start": 654001, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TATTTTTATAATTTCCTTTCATCTTATTTTTTTCTTTATATTTTTTTTTTTCATATGTAAGATTTATATAATCACTTTCGCTTTTTCTAACGCTTTTGAACTTTTTAAATGTACTTCGTTCATTATTTCTAATTCTCGTAAACACAAGAATAAATATTTTGATATATCTTA" + }, + { + "seq": "TATTTTTATAATTTCCTTTCATCTTATTTTTTTCTTTATATTTTTTTTTTTCATATGTAAGATTTATATAATCACTTTCGCTTTTTCTAACCCTTTTGAACTTTTTAAATGTACTTCGTTCATTATTTCTAATTCTCGTAAACACAAGAATAAATATTTTGATATATCTTA" + }, + { + "seq": "TATTTTTATAATTTCCTTTCATCTTATTTTTTTCTTTATATTTTTTTTTTTCATATGTAAGATTTATATAATCACTTTCGCTTTTTCTAACGCTTTTGAACTTTTTAAATGTACTTCCTTCATTATTTCTAATTCTCGTAAACACAAGAATAAATATTTTGATATATCTTA" + } + ], + "target_id": 90 + }, + { + "mhap_location": { + "chrom": "Pf3D7_03_v3", + "end": 850988, + "genome_id": 0, + "start": 850815, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "CATATTCGTTTCAGCGTTTATAGAGCGAATATTATCGATTATGTCTATATTCCCTAAAATATGTACATAATAATCTCCATTTAATAATGTTACTTTCTTAAGAATATTTTTGTATATGACATCAAAGATATTACGAGTTAACAATACATCTACATTTCCGTCTATTATATA" + }, + { + "seq": "CATATTCGTTTCAGCGTTTATAGAGCGAATATTATCGATTATGTCTATATTCCCTAAAATATGTACATAATAATCTCCATTTAATAATGTTACTTTCTTAAGAATATTTTTGTATATGACATCAAAGATATTACGAGTTAACAATACATCTACATTTCGGTCTATTATATA" + }, + { + "seq": "CATATTCGTTTCAGCGTTTATAGAGCGAAAATTATCGATTATGTCTATATTCCCTAAAATATGTACATAATAATCTCCATTTAATAATGTTACTTTCTTAAGAATATTTTTGTATATGACATCAAAGATATTACGAGTTAACAATACATCTACATTTCGGTCTATTATATA" + } + ], + "target_id": 48 + }, + { + "mhap_location": { + "chrom": "Pf3D7_01_v3", + "end": 180114, + "genome_id": 0, + "start": 179902, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TTTCGATACAGGACATATAGATCATAATATAAACGAATATGAAAAACATTTTACAATTTTAAAAAAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGATAATAATACATTTTTAAATAAAATAAGAAATGAACAAGTGAGGGCATCGTTATTAATAACAGGTATTATAAACGAAAATAT" + }, + { + "seq": "TTTCGATACAGGACATATAGATCATAATATAAACGAATATGAAAAACATTTTACAATTTTAAAAAAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGATAATAATACATTTTTAAATAGAATAAGCCATGAAGGAATCAAAAAATCGTTATTAATAACAGGTATTATAAACGAAAATAT" + }, + { + "seq": "TTTCGATATAGGACATATAGATCATAATATAAACGAATATGAAAAACGTTTTACAATTTTAAAAGAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGAAAATAATACATTTTTAAATAGATTAAGAAATGAACAAGTGAGGGCATCGTTATTAATAACAGGTATTATAAACGAAAATAT" + }, + { + "seq": "TTTCGATACAGGACATATAGATCATAATATAAACGAATATGAAAAACATTTTACAATTTTAAAAAAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGATAATAATACATTTTTAAATAGATTAAGAAATGAACAAGTGAGGGCATCGTTATTAATAACAGGTATTATAAACGAAAATAT" + } + ], + "target_id": 82 + }, + { + "mhap_location": { + "chrom": "Pf3D7_04_v3", + "end": 110086, + "genome_id": 0, + "start": 109911, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ATATTTGTATATATTCTAGTAAACACTTTAGGTACACCTGCAAGTACCTCAACATCTGAATTATATAAATCTTTAGAAAAACAACTAATATCCTTACTCCATATATTTATTTTTATACCAAGAATAACAGCCATATAAACCAAAACTCTCTCAAATACATGTGATACAGGTAA" + }, + { + "seq": "ATATTTGTATATATTCTAGTAAACACTTTAGGTACACCTGCAAGTACCTCAACATCTGAATTATATAAATCTTTAGAAAAACAACTAATATCCTTACTACATATATTTATTTTTATACCAAGAATAACAGCCATATAAACCAAAACTCTCTCAAATGCATGTGATACAGGTAA" + }, + { + "seq": "ATATTTGTATATATTCTAGTAAACACTTTAGGTACACCTGCAAGTACCTCAACATCTGAATTATATAAATCTTTAGAAAAACAACTAATATCCTTACTCCATATATTTATTTTTATACCAAGAATAACAGCCATATAAACCAAAACTCTCTCAAATGCATGTGATACAGGTAA" + } + ], + "target_id": 74 + }, + { + "mhap_location": { + "chrom": "Pf3D7_04_v3", + "end": 133700, + "genome_id": 0, + "start": 133490, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TAGATTTTTTCCCTTCAGCAGGTGCCCTCACTTTAGGTGTTTTAAACTTAGTTGTATGTGGAACCCCATCTTTATTTGGTTTACCTCTATTTAATCTTTTACCAGCAGTAGAAACTACATTCTCTCGATTATCATTACCTACTTCAGTCTTTACAATTGTAGGAGGTGTTTTAACATGATTATCCCCTCCATGAGGAGTAACCCTTAA" + }, + { + "seq": "TAGATTTTTTCCCTTCAGCAGGTGCCCTCACTTTAGGTGTTTTAAACTTAGTTGTATGTGGAACCCCATCTTTATTTGCTTTACCTCTATTTAATCTTTTACCAGCAGTAGAAACTACATTCTCTCGATTATCATTACCTACTTCAGTCTTTACAATTGTAGGAGGTGTTTTAACATGATTATCCCCTCCATGAGGAGTAACCCTTAA" + }, + { + "seq": "TAGATTTTTTCCCTCCAACAGATGCACTCACTTTAGGTGTTTTAAACTTAGTTGTATGTTGACCCCCCTCATTATTTAGTTTACCTTTATTTAATCTTTTACCAGCAGTAGAAACTACATTCTCTCGATTATCATTACCTACTTCAGTCTTTACAATTGTAGGAGGTGTTTTAACATGATCATCCCCTCCATGAGGAGTAACCCTTAA" + } + ], + "target_id": 43 + }, + { + "mhap_location": { + "chrom": "Pf3D7_04_v3", + "end": 141944, + "genome_id": 0, + "start": 141777, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCGAATCTGCACACAAAGAAATTAAAAAAGAATCAAAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAAT" + }, + { + "seq": "TTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCAAATCTGCACACAAAGAAATTAAAAAAGAATCAGAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAAT" + }, + { + "seq": "TTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCAAATCTGCACACAAAGAAATTAAAAAAGAATCAAAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAAT" + }, + { + "seq": "TTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCGAATCTGCACACAAAGAAATTAAAAAAGAATCAGAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAAT" + } + ], + "target_id": 70 + }, + { + "mhap_location": { + "chrom": "Pf3D7_04_v3", + "end": 415825, + "genome_id": 0, + "start": 415652, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TGCTAGTTTTGCTGCTCATGAAAATAAAAGCTACTCATATGAAGGTCGTACATATAAAATGTATCCACCTGAATTTAATACATTAATGTTAAAAGCAGATTATTTTATAAGAGATATAAATACACGAGGATTTAGAGAAGTAAATATGGATTCATGTAAATCATATACAAA" + }, + { + "seq": "TGCTAGTTTTGCTGCTCATGAAAATAAAAGCTACTCATATGAAGGTCGTACATATAAAATGTATCCACCTGAATTTAATGCATTAATGTTAAAAGCAGATTATTTTATAAGAGATATAAATACACGAGGATTTAGAGAAGTAAATATGGATTCATGTAAATCATATACAAA" + }, + { + "seq": "TGCTAGTTTTGCTGCTCATGAAAATAAAAGCTACTCATATGAAAGTCGTACATATAAAATGTATCCACCTGAATTTAATACATTAATGTTAAAAGCAGATTATTTTATAAGAGATATAAATACACGAGGATTTAGAGAAGTAAATATGGATTCATGTAAATCATATACAAA" + } + ], + "target_id": 15 + }, + { + "mhap_location": { + "chrom": "Pf3D7_04_v3", + "end": 544860, + "genome_id": 0, + "start": 544717, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TATATTTTACATAATAACAATCTTTCATGTAATGATTATAATTTAAATAATCTTTCATTTAATATAAATAAATATATTAATGAAGAAAAAGGCAAAAATAAAAAAACAAATCAACATATATCAGAACAATTTTTATTTCCT" + }, + { + "seq": "TATATTTTACATAATAACAATCTTTCATGTAATGATTATAATTTAAATAATCTTTCATTTAATATAAATAAATATATAAATGAAGAAAAAGGCAAAAATAAAAAAACAAATCAACATATATCAGAACAATTTTTATTTCCT" + }, + { + "seq": "TATATTTTACATAATAACAATCCTTCATGTAATGATTATAATTTAAATAATCTTTCATTTAATATAAATAAATATATAAATGAAGAAAAAGGCAAAAATAAAAAAACAAATCAACATATATCAGAACAATTTTTATTTCCT" + } + ], + "target_id": 96 + }, + { + "mhap_location": { + "chrom": "Pf3D7_04_v3", + "end": 748435, + "genome_id": 0, + "start": 748229, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AAATGTAATTCCCTAGATATGAAATATTTTCGTGCAGTTACAACATATGTGAATGAATCAAAATATGAAAAATTGAAATATAAGAGATGTAAATATTTAAACAAAGAAACTGTGGATAATGTAAATGATATGCCTAATTCTAAAAAATTACAAAATGTTGTAGTTATGGGAAGAACAAACTGGGAAAGCATTCCAAAAAAATTT" + } + ], + "target_id": 72 + }, + { + "mhap_location": { + "chrom": "Pf3D7_04_v3", + "end": 748695, + "genome_id": 0, + "start": 748532, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ATAGTTTTACTTGGGAAATTAAATTACTATAAATGTTTTATTATAGGAGGTTCCGTTGTTTATCAAGAATTTTTAGAAAAGAAATTAATAAAAAAAATATATTTTACTAGAATAAATAGTACATATGAATGTGATGTATTTTTTCCAGAAATAAATGAAAA" + } + ], + "target_id": 58 + }, + { + "mhap_location": { + "chrom": "Pf3D7_04_v3", + "end": 802712, + "genome_id": 0, + "start": 802524, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AAATTATTATAGAAAGATAGAAGTTATTTTATATGAATGGTTATATTTTCATTATAATAATGTATATAACACCAAAGTAAAAAAACAAAAATTTATATTTACCCAACAAAAAAAAGACATATCAAAACATAACAAGTTATATCTTCAGTATGATCAAAATAAAAGAAATTCTGAAATAAAACATAC" + }, + { + "seq": "AAATTATTATAGAAAGATAGAAGTTATTTTATATGAATGGTTATATTTTCATTATAATAATGTATATAACACCAAAGTAAAAAAACAAAAATTTATATTTACCCAACAAAAAAAAGACATATCAAAACATAACAAGTTATATCTTCAGTATGATCAAAATAAAAGAAATTCTGAAATAGAACATAC" + }, + { + "seq": "AAATTATTATAGAAAGATAGAAGTTATTTTATATGAATGGTTATATTTTCATTATAATAATGTATATAACACCAAAGTAAAAAAACAAAAATTTATATTTACCCAACAAAAAAAAGACATATCAAAACATAACAAGTTATATCTTCAGTATGATCAAAATAAAAGAAATTCTGAAATAGAACGTAC" + } + ], + "target_id": 92 + }, + { + "mhap_location": { + "chrom": "Pf3D7_04_v3", + "end": 1037843, + "genome_id": 0, + "start": 1037633, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TCTTATAAAGTTAATGAAATAGCTCAACTTAATTTAACCATAGAAAGAGATTTAACAGATGATGCTGTGATTTTTGCACACTCACTTTATTTACCATTTGAAAAAGAAGAAATGTGGTGGATCGTTATCGGAATTAAAAAAATGAACTTACTTTTATCTATCAAAAAATTATCTTTATTGAAAAGTATCAATAATATAAAAATTAATT" + }, + { + "seq": "TCTTATAAAGTTAATGAAATAGCTCAACTTAATTTAACCATAGAAAGAGATTTAACAGATGATGCTGTGATTTTTGCACACTCACTTTATTTACCATTTGAAAAAGAAGAAATGTGGTGGATCGTTATCGGAATTAAAAAAATGAACTTACTTTTATCTATCAAAAAATTATCTTTATTGAAAAGTGTCAATAATATAAAAATTAATT" + }, + { + "seq": "TCTTATAAAGTTAATGAAATTGCTCAACTTAATTTAACCATAGAAAGAGATTTAACAGATGATGCTGTGATTTTTGCACACTCACTTTATTTACCATTTGAAAAAGAAGAAATGTGGTGGATCGTTATCGGAATTAAAAAAATGAACTTACTTTTATCTATCAAAAAATTATCTTTATTGAAAAGTATCAATAATATAAAAATTAATT" + } + ], + "target_id": 52 + }, + { + "mhap_location": { + "chrom": "Pf3D7_04_v3", + "end": 1100830, + "genome_id": 0, + "start": 1100655, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ATGTTCTAAGATCTGGTGGAAAAATATCTGATCAAGGTTCTGAGATAAGTCCTCCTAAGGCACTTTCTAATAAACAAATGACTCCTGCTCAACGTAAGAATGTGCCACATTTTGTTGAAAGAAGAGGCTATGGAAATAGTCATGTTAGGGGTAACGCACTTAAAAAAATTAGT" + }, + { + "seq": "ATGTTCTAAGATCTGATGGAAAAATATCTGATCAAGGTTCTCAGAAAAGTCCTCCTAAGGAACTTTCTAATAAACAAATGACTCCTGCTCAACGTAAGAATGTGCCACATTTTGTTGAAAGAAGAGGCTATGGAAATAGTCATGTTAGGGGTAACGCACTTAAAAAAATTAGT" + }, + { + "seq": "ATGTTCTAAGATCTGGTGGAAAAATATCTGATCAAGGTTCTCAGAAAAGTCCTCCTAAGGAACTTTCTAATAAACAAATGACTCCTGCTCAACGTAAGAATGTGCCACATTTTGTTGAAAGAAGAGGCTATGGAAATAGTCATGTTAGGGGTAACTCACTTAAAAAAATTAGT" + } + ], + "target_id": 81 + }, + { + "mhap_location": { + "chrom": "Pf3D7_01_v3", + "end": 181672, + "genome_id": 0, + "start": 181556, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TCATTCTTTTTTTAACGAAAACTATTCATCTCAAAAATATAAGATATTTTATATGACGAATGCCATTGTATTTTTTGTTACGTAAAACCTGACTTCTTCAAGGAAAACACATGC" + }, + { + "seq": "TCATTCTTTTTTTAACTAAAACTATTCATCTCAAAAATATAAGATATTTTATATGACGAATGCCATTGTATTTTTTGTTACGTAAAACCTGACTTCTTCAAGGAAAACACATGC" + } + ], + "target_id": 64 + }, + { + "mhap_location": { + "chrom": "Pf3D7_04_v3", + "end": 1102577, + "genome_id": 0, + "start": 1102388, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AAGAAATAAATAAAATAATTTATACAAACGAATTTAATAATTATGAAGATAAAATATATGAAGATGTCAAATATATTAAAGAACAGGAAAATGAAATGTACTTGAGAGATGGAATTGAAGAGTTACATATGGATGAACCAAGTGGGGATGTATATTTTGATGATCAAGATGATTATATATTTTTAGA" + }, + { + "seq": "AAGAAATAAATAAAATAATTTATACAAACGAATTTAATAATTATGAAGATAAAATATATGAAGATGTCAAATATATTAAAGAACAGGAAAATGAAATATACTTGAGAGATGGAATTGAAGAGTTACATATGGATGAACCAAGTCGGGATGTATATTTTGATGATGAAAATGATTATATATTTTTAGA" + }, + { + "seq": "AAGAAATAAATAAAATAATTTATACAAACGAATTTAATAATTATGAAGATAAAATATATGAAGATGTCAAATATATTAAAGAACAGGAAAATGAAATATACTTGAGAGATGGAATTGAAGAGTTACATATGGATGAACCAAGTCGGGATGTATATGTTGATGATGAAAATGATTATATATTTTTAGA" + } + ], + "target_id": 67 + }, + { + "mhap_location": { + "chrom": "Pf3D7_04_v3", + "end": 1113603, + "genome_id": 0, + "start": 1113449, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACATCTATTCAATTTGTTTGTATAAGTTTTAGGTGTTATTATTCTTTTACGTTTT" + }, + { + "seq": "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACAACTATTCAATTTGTTTGTATAAGTTTTAGGTCTTATTATTCTTTTACGTTTT" + }, + { + "seq": "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACATCTATTCAATTTGTTTGTATAAGTATTAGGTCTTATTATTCTTTTACGTTTT" + }, + { + "seq": "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGATTTCCATAATTTGATTACATCTATTCAATTTGTTTGTATAATTATTAGGTCTTATTATTCTTTTACGTTTT" + }, + { + "seq": "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACATCTATTCAATTTGTTTGTATAATTATTAGGTCTTATTATTCTTTTACGTTTT" + } + ], + "target_id": 61 + }, + { + "mhap_location": { + "chrom": "Pf3D7_04_v3", + "end": 1128672, + "genome_id": 0, + "start": 1128488, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TTGAAAGAGTTAAAGGGAAAAATACAAAATTATTTAGATAATGATATTCAATTGAGTAATGGAAAACTCCTATATAAGGATACATGGGATAGAATTGATTTGAAGTTTTGTAGAACGGTAGCAATAGAAGAGGCAGTATACACTAGAAAATTTTATAGCTTAATTAATGATAAACATACAAT" + }, + { + "seq": "TTGAAAGAGTTAAAGGGAAAAATACAAAATTATTTAGATAATGATATTCAATTGAGTAATGGAAAACTCCTATATAAGGATACATGGGATAGAATTGATTTGAAGTTTTGTAGAACGGTAGCAATAGAAGAGGCAGAATACACTAGAAAATTTTATAGCTTAATTAATGATAAACATACAAT" + }, + { + "seq": "TTGAAAGAATTAAAGGGAAAAATACAAAATTATTTAGATAATGATATTCAATTGAGTAATGGAAAACTCCTATATAAGGATACATGGGATAGAATTGATTTGAAGTTTTGTAGAACGATAGCAATAGAAGAGGCAGAATACACTAGAAAATTTTATAGCTTAATTAATGATAAACATACAAT" + } + ], + "target_id": 54 + }, + { + "mhap_location": { + "chrom": "Pf3D7_05_v3", + "end": 329549, + "genome_id": 0, + "start": 329377, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TTGTGATGTATATAAATTCCCTTCTTCTTTATGTACCACATTATAAGAACCACGAACATATTCTTTTAAAAATGTTAACTTACTTCCAACAAATATATAATCAAAACAAAATTTTTTATTGTCGAAATGTTCTCGTTCAACCCCATTCATATTTCGGATATCATTATTTA" + }, + { + "seq": "TTGTGATGTATATAAATTCCCTTCTTCTTTATGTACCACATTATAAGAACCACGAACATATTCTTTTAAAAATGTTAACTTACTTCCAACAAATATATAATCAAAACAAAATTGTTTATTGTCGAAATGTTTTCGTTCAACCCCATTCATATTTCGGATATCATTATTTA" + } + ], + "target_id": 33 + }, + { + "mhap_location": { + "chrom": "Pf3D7_05_v3", + "end": 958220, + "genome_id": 0, + "start": 958058, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TTTATATCATTTGTATGTGCTGTATTATCAGGAGGAACATTACCTTTTTTTATATCTGTGTTTGGTGTAATATTAAAGAACATGAATTTAGGTGATGATATTAATCCTATAATATTATCATTAGTATCTATAGGTTTAGTACAATTTATATTATCAATGA" + }, + { + "seq": "TTTATATCATTTGTATGTGCTGTATTATCAGGAGGAACATTACCTTTTTTTATATCTGTGTTTGGTGTAATATTAAAGAACATGTATTTAGGTGATGATATTAATCCTATAATATTATCATTAGTATCTATAGGTTTAGTACAATTTATATTATCAATGA" + } + ], + "target_id": 49 + }, + { + "mhap_location": { + "chrom": "Pf3D7_05_v3", + "end": 958505, + "genome_id": 0, + "start": 958388, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ACGAAATTTATAACAATTTTTACATATGCCAGTTCCTTTTTAGGTTTATTTATTTGGTCATTAATAAAAAATGCACGTTTGACTTTATGTATTACTTGCGTTTTTCCGTTAATTT" + }, + { + "seq": "ACGAAATTTATAACAATTTTTACATATGCCAGTTCCTTTTTAGGTTTATATATTTGGTCATTAATAAAAAATGCACGTTTGACTTTATGTATTACTTGCGTTTTTCCGTTAATTT" + }, + { + "seq": "ACGAAATTTATAACAATTTTTACATATGCCAGTTCCTTTTTAGGGTTATTTATTTGGTCATTAATAAAAAATGCACGTTTGACTTTATGTATTACTTGCGTTTTTCCGTTAATTT" + } + ], + "target_id": 46 + }, + { + "mhap_location": { + "chrom": "Pf3D7_05_v3", + "end": 1042280, + "genome_id": 0, + "start": 1042161, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TATTATTACGGTACCATTATATGATTCTTTAGGTCCTCAATCAAGTAGATTTATATTAGATCAAACACAGATGGAAACTATTGTATGTGACAAGACATGTGCTCGTAATTTATTTAA" + }, + { + "seq": "TATTATTACGGTACCATTATATGATTCTTTAGGTCCTCAATCAAGTAGATTTATATTAGATCAAACACAGATGGAAACTATTGTATGTAACAAGACATGTGCTCGTAATTTATTTAA" + } + ], + "target_id": 4 + }, + { + "mhap_location": { + "chrom": "Pf3D7_05_v3", + "end": 1309743, + "genome_id": 0, + "start": 1309608, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AATGAAGAAAATATGTCTGACAGACCAAACAGTTTATCTCATGATAAGGATCAACACCTCGATGAAACATGTAATGAACAATATGGATTATACGTAAAAGAAATGGAATCTAAAGTTGAAAAATTAGCTGAAA" + }, + { + "seq": "AATGAAGAAAATATGTCTGACAGACCAAACAGTTTATCTCATGATAAGGATCAACACCACGATGAAACACATAATGAACAATATGGATTATACGTAAAAGAAATGGAATCTAAAGTTGAAAAATTAGCTGAAA" + } + ], + "target_id": 27 + }, + { + "mhap_location": { + "chrom": "Pf3D7_06_v3", + "end": 145500, + "genome_id": 0, + "start": 145342, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ATTTGAATAAAATTTATCATTCACAATATTATATTTTTGTTTCTTCTTTTTTCCCATAATATTATTATTTTGTTCACAATATATGTTCATGTGTCCCCTCTTTTTCTGTAAAATATTAAAATGTTTCTTACTATGCTTTTCTTCATTTTTAATAAC" + }, + { + "seq": "ATTTGAATAAAATTTATCATTCACAATATTATATTTTTGTTTCTTCTTTTTTCCCATAATATTATTATTTTGTTCACAATATATGTTCATGTGTCCCCTCTTTTTCTGTAAAATATTAAAATGTTTCTTAGTATGCTTCTCTTCATTTTTAATAAC" + } + ], + "target_id": 44 + }, + { + "mhap_location": { + "chrom": "Pf3D7_06_v3", + "end": 532377, + "genome_id": 0, + "start": 532194, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "GAACAATTGTTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACTCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCGCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACTTCCCCATGTGATCCAACGAATGCCA" + }, + { + "seq": "GAACAATTGCTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACTCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCTCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACTTCCCCATGTGATCCAACGAATGCCA" + }, + { + "seq": "GAACAATTGTTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACCCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCGCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACTTCCCCATGTGATCCAACGAATGCCA" + }, + { + "seq": "GAACAATTGCTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACCCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCGCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACTTCCCCATGTGATCCAACGAATGCCA" + } + ], + "target_id": 39 + }, + { + "mhap_location": { + "chrom": "Pf3D7_01_v3", + "end": 496142, + "genome_id": 0, + "start": 495970, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "GAAAGTAGCGAATACCCTGTACAAATCGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTTACTACGCCTGATGTTACTGCACTACCTGAAGAATTACCATTAACGAGCTATAAAGTAACACCTACTTCTATTAATGTATTGCATAAAGAGGGCCCCACTTTAAA" + }, + { + "seq": "GAAAGTAGCGAATACCCTGTAGAAATTGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTTACTACGCCTGATGTTACTGCACTACCTGAAGAATTACCATTAACGAGCTATAAAGTAACACCTACTTCTATTAATGTATTGCATAAAGAGGGCCCCACTTTAAA" + }, + { + "seq": "GAAAGTAGCGAATACCCTGTACAAATCGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTGACTAAGCCTGATGTTACTGCACTACCTGAACAATTGCCATTAACAAATTATAAAGTAACACCTACTTCTATTAATGTATTGAATAAAGAGGGCCCCACTTTAAA" + }, + { + "seq": "GAAAGTAGCGAATACCCTGTAGAAATTGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTTACTACGCCTGGTGTTACTGCACTACCTGAAGAATTACCATTAACGAGCTATAAAGTAACACCTACTTCTATTAATGTATTGCATAAAGAGGGCCCCACTTTAAA" + } + ], + "target_id": 62 + }, + { + "mhap_location": { + "chrom": "Pf3D7_07_v3", + "end": 165421, + "genome_id": 0, + "start": 165234, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TCATTATTATTATTATTATAATTATCATTGTTATTATTATTGTTGTTGTTGTTATTATTATTTCCTTTATTATTTAATATGCATTTTTTAATATCCATTTTATTATTTATCATATCAGTACTTTTATTTTTCTCCTTTTCGTTTATAGCTTTTTCCCTATGCACCCTGAATTTCCCATTTTTTTT" + }, + { + "seq": "TAATTATCATTATTATTATAATTATCATTGTTATTATTATTGTTGTTGTTGTTATTATTATTTCCTTTATTATTTAATATGCATTTTTTAATATCCATTTTATTATTTATCATATCAGTACTTTTATTTTTCTCCTTTTCGTTTATAGCTTTTTCCCTATGCACCCTGAATTTCCCATTTTTTTT" + }, + { + "seq": "TCATTATTATTATTATTATAATTATCATTTTTATTATTATTGTTGTTATTATTATTTCCTTTATTATTTAATATGCATTTTTTAATATCCATTTTATTATTTATCATATCAGTACTTTTATTTTTCTCCTTTTCGTTTATAGCTTTTTCCCTATGCACCCTGAATTTCCCATTTTTTTT" + } + ], + "target_id": 29 + }, + { + "mhap_location": { + "chrom": "Pf3D7_07_v3", + "end": 166166, + "genome_id": 0, + "start": 166034, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TTTTATTTGAACTTTTTTATTTTCTTCATTATCAATATAAAAACAACAATCTTTAAATTTATGAAATAACACCCAACTTAATGTATAAAATATAATTTCTATAAAATCAAAATTAATGTAATAACCTAAT" + } + ], + "target_id": 59 + }, + { + "mhap_location": { + "chrom": "Pf3D7_07_v3", + "end": 299004, + "genome_id": 0, + "start": 298885, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "CATTCAATATGGTTCTGAGCTTAAAGATGTTATCCTTATACATGTTTCTATTCTCATTCGTTATAACATCAATGACATATAAAACATATCTCTCAAATATTTTGTGAACAATATTAT" + } + ], + "target_id": 41 + }, + { + "mhap_location": { + "chrom": "Pf3D7_07_v3", + "end": 730087, + "genome_id": 0, + "start": 729974, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATATTACGATATAGAAAAATATAGATGTTCATTATTGAA" + }, + { + "seq": "TTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATATTACGATATAGAAAAATATAGATGTTCATTATTGAG" + }, + { + "seq": "TTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATGTTACGATATAAAAAAATATAGATGTTCATTATTGAA" + }, + { + "seq": "TTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATGTTACGATATAGAAAAATATAGATGTTCATTATTGAA" + } + ], + "target_id": 75 + }, + { + "mhap_location": { + "chrom": "Pf3D7_07_v3", + "end": 1149584, + "genome_id": 0, + "start": 1149414, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCTATAGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTAT" + }, + { + "seq": "AATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCCATTGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTAT" + }, + { + "seq": "AATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCTATTGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTAT" + } + ], + "target_id": 45 + }, + { + "mhap_location": { + "chrom": "Pf3D7_07_v3", + "end": 1358910, + "genome_id": 0, + "start": 1358693, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AGAATCTCAACTTTTGCTTAAAAAAAATGATAACAAATATAATTCTAAATTTTGTAATGATTTGAAGAATAGTTTTTTAGATTATGGACATCTTGCTATGGGAAATGATATGGATTTTGGAGGTTATTCAACTAAGGCAGAAAACAAAATTCAAGAAGTTTTTAAAGGGGCTCATGGGGAAATAAGTGAACATAAAATTAAAAATTTTAGAAAAG" + }, + { + "seq": "AGAATCTCAACTTTTGCTTAAAAAAAATGATAACAAATATAATTCTAAATTTTGTAATGATTTGAAGAATAGTTTTTTAGATTATGGACATCTTGCTATGGGAAATGATATGGATTTTGGAGGTTATTCAACTAAGGCAGAAAACAAAATTCAAGAAGTTTTTAAAGGGGCTCATGGGAAAATAAGTGAACATGAAATTAAAAATTTTAGAAAAA" + }, + { + "seq": "AGAATCTCAACTTTTGCTTAAAAAAAATGATAACAAATATAATTCTAAATTTTGTAATGATTTGAAGAATAGTTTTTTAGATTATGGACATCTTGCTATGGGAAATGATATGGATTTTGGAGGTTATTCAACTAAGGCAGAAAACAAAATTCAAGAAGTTTTTAAAGGGGCTCATGGGAAAATAAGTGAACATGAAATTAAAAATTTTAGAAAAG" + } + ], + "target_id": 35 + }, + { + "mhap_location": { + "chrom": "Pf3D7_08_v3", + "end": 102499, + "genome_id": 0, + "start": 102325, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TAATTTTCTCAAGTAACATATTTTTGTCTTGACTACTTTCATCTGTAAATGGAACGAATACTCTTTGCTTACCTGCAAAAAGGACAACTGACATATGAGCCTTATCCTTACTTACATTCGAATTAAAGACCATAGATTCTAAAAATGGTATAGTTCCTTTTAACCAATAATC" + }, + { + "seq": "TAATTTTCTCAAGTAACATATTTTTGTCTTGACTACTTTCATCTGTAAATGGAACCAATACTCTTTGCTTACCTGCAAAAAGGACAACTGACATATGAGCCTTATCCTTACTTACATTCGAATTAAAGACCATAGATTCTAAAAATGGTATAGTTCCTTTTAACCAATAATC" + }, + { + "seq": "TAATTTTCTCAAGTAACATATTTTTGTCTTGACTACTTTCATCTGTAAATGGAACGACTACTCTTTGCTTACCTGCAAAAAGGACAACTGACATATGAGCCTTATCCTTACTTACATTCGAATTAAAGACCATAGATTCTAAAAATGGTATAGTTCCTTTTAACCAATAATC" + }, + { + "seq": "TAATTTTCTCAAGTAACATATTTTTGTCTTGACTACTTTCATCTGTAAATGGAACGAATACTCTTTGCTTACCTGCAAAAAGGACAACTGACATATGAGCCTTATCCTTACTTACATTCGAATTAAGGACCATAGATTCTAAAAATGGTATAGTTCCTTTTAACCAATAATC" + } + ], + "target_id": 86 + }, + { + "mhap_location": { + "chrom": "Pf3D7_08_v3", + "end": 336646, + "genome_id": 0, + "start": 336467, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AAATTTACAGAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCCACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCACAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTA" + }, + { + "seq": "AAATTTACAAAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCTACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCACAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTA" + }, + { + "seq": "AAATTTACAGAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCCACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCCCAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTA" + }, + { + "seq": "AAATTTACAAAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCTACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCCCAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTA" + }, + { + "seq": "AAATTTACAGAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCTACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCCCAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTA" + } + ], + "target_id": 85 + }, + { + "mhap_location": { + "chrom": "Pf3D7_08_v3", + "end": 339356, + "genome_id": 0, + "start": 339167, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TCATTACTATTCTTTATCCATATATATGTTGTTATATCAGTTGCACCTGAGGGTGGATTCAAACCTCTTGCTTGTATAATATATGCACGTACTACTAAATTACGTGTTAATCTATATTCTCTTACTAAATCATCACATTTCTTTATCATTTCTTTTTTTAAATACATTGTCTTTTCATCATACACAT" + }, + { + "seq": "TCATTACTATTCTTTATCCATATATATGTTGTTATATCAGTTGCACCGGATGGTGGATTCAAACCTCTTGCTTGTATAATATATGCACGTACTACTAAATTACGTGTTAATCTATATTCTCTTACTAAATCATCACATTTCTTTATCATTTCTTTTTTTAAATACATTGTCTTTTCATCATACACAT" + }, + { + "seq": "TCATTACTATTCTTTATCCATATATATGTTGTTATATCAGTTGCACCGGATGGTGGATTCAAACCTCTTGCTTGTATAATATATGCACGTACTACTAAATTACGTGTTAATCTATATTCTCTTACTAAATCACCACATTTCTTTATCATTTCTTTTTTTAAATACATTGTCTTTTCATCATACACAT" + } + ], + "target_id": 80 + }, + { + "mhap_location": { + "chrom": "Pf3D7_08_v3", + "end": 550217, + "genome_id": 0, + "start": 549992, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ACTAACAAATTATGATAATCTAGTTTATGATATAAAAAATTATTTAGAACAAAGATTAAATTTTCTTGTATTAAATGGAATACCTCGTTATAGGATACTATTTGATATTGGATTAGGATTTGCGAAGAAACATGATCAATCTATTAAACTCTTACAAAATATACATGTATATGATGAGTATCCACTTTTTATTGGATATTCAAGAAAAAGATTTATTGCCCAT" + } + ], + "target_id": 93 + }, + { + "mhap_location": { + "chrom": "Pf3D7_01_v3", + "end": 512387, + "genome_id": 0, + "start": 512198, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TAAAGAAATTAAGTGAAGATGATTATGAAAAAAATTGTAGACATTTAAATTATTTAATAGATAATATAAGAGAATTATTTTTTAGTTCTAAAAATATTAGAATTCCTGATGTAGCTCGTAAATATTTGTGGGATAATCAAATTGAAGGAAATCTCAAAAAATTAATATCTTCAGAAACAAAATATAA" + }, + { + "seq": "TAAAGAAATTAAGTGAAGATGATTATGAAAAAAATTGTAGACATTTAAATTATTTAATAGATAATATAAGAGAATTATTTTTTAGTTCTAAAAATATTAGAATTCCTGATTTAGCTCGTAAATATTTGTGGGATAATCAAATTGAAGGAAATCTCAAAAAATTAATATCTTCAGCAACAAAATATAA" + }, + { + "seq": "TAAAGAAATTAAGTGAAGATGATTATGAAAAAAATTGTAGACATTTAAATTATTTAATAGATAATATAAGAGAATTATTTTTTAGTTCTAAAAATATTAGAATTCTTGATGTAGCTCGTAAATATTTGTGGGATAATCAAATTGAAGGAAATCTCAAAAAATTAATATCTTCAGAAACAAAAAATAA" + } + ], + "target_id": 38 + }, + { + "mhap_location": { + "chrom": "Pf3D7_08_v3", + "end": 933142, + "genome_id": 0, + "start": 933022, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TGGTTTTAATGAGGATGATTTAGATAAAGAGTTTTCTTTTGATTTGCCGTCGATTAGTGGTTTTTCAAGTAATGGTATGAAAAAATGTAATTTAAGAAATTTATTAAAAAGATTAGAA" + }, + { + "seq": "TGGTTTTAATGAGGATGATTTAGATAAAGAGTTTTTTTTTGATTTGCCGTCGATTAGTGGTTTTTCAAGTAATGGTATGAAAAAATGTAATTTAAGAAATTTATTAAAAAGATTAGAA" + } + ], + "target_id": 3 + }, + { + "mhap_location": { + "chrom": "Pf3D7_08_v3", + "end": 1269455, + "genome_id": 0, + "start": 1269319, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "CCTTAGCATTAATAACACTTATAGGAGGTATTTATATGACTAAAGGAAGAAAAAGTTCCATATGGCATAATTCAGAAATAAATGATACACTTTATGATGTTGTTCTTGAAGCAGTGAATCAAGGAAATACAGAT" + }, + { + "seq": "CCTTAGCATTAATAACACTTATAGGAGGTATTTATATGACTAAAGGAAGAAAAAGTTCCATATGGCATAATTCAGAAATAAATGATACACTTTATGATGTTGTTCTTGAAACAGTGAATCAAGGAAATACAGAT" + }, + { + "seq": "CCTTAGCATTAATAACACTTATAGGAGGTATTTATATGACTAAAGGAAGAAAAAGTTCCATATGGCATAATTCAGAAATAAATGATACACTTTATGATATTGTTCTTGAAACAGTGAATCAAGGAAATACAGAT" + } + ], + "target_id": 32 + }, + { + "mhap_location": { + "chrom": "Pf3D7_08_v3", + "end": 1344818, + "genome_id": 0, + "start": 1344685, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AATATATCTTTTACTTTATCTGTAAGTTTCATGGAATCTATTATTTCTTCTGCATATTTTATTTTTGCCTCGTTTATATATTTACCTGCTTCTAATTTACATAAACATTTTTCTATTAAGTTTTGATCATT" + }, + { + "seq": "AATATATCTTTTACTTTATCTGTAAGTTTCATGGAATCTATTATTTCATGTGCATATTTTATTTTTGCCTCGTTTATATATTTACCTGCTTTTAATTTACATAAACATTTTTCTATTAAGTTTTGATCATT" + }, + { + "seq": "AATATATCTTTTACTTTATCTGTAAGTTTCATGGAATCTATTATTTCATCTGCATATTTTATTTTTGCCTCGTTTATATATTTACCTGCTTTTAATTTACATAAACATTTTTCTATTAAGTTTTGATCATT" + } + ], + "target_id": 30 + }, + { + "mhap_location": { + "chrom": "Pf3D7_08_v3", + "end": 1363086, + "genome_id": 0, + "start": 1362890, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "GTAAAAAAAAAGGGTTTTCCTAAAAAACCATCGGTTCATGGTTTTACACAGATGGTGTTTTTGCAGCTTACTAATATAGTCATGTATGCCCTTTGTTTTATGAGCCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAA" + }, + { + "seq": "GTAAAAAAAAAGGGTTTTCCTAAAAAACCATCGGTTCATGGTTTTACACAGATGATGTTTTTGCAGCTTACTAATATAGTCATGTATGCCCTTTGTTTTATGAACCTTTCACAATTATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAA" + }, + { + "seq": "GTAAAAAAAAAGGGTTTTCCTAAAAAACCATCGGTTCATGGTTTTACACAGATGGTGTTTTTGAAGATTACTAATATAGTCATGTATGCCCTTTGTTTTATGAGCCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAA" + }, + { + "seq": "GTAAACAAAAAGGGTTTTCCTAAAAAACCATTGGTTCATGGTTTTACACAGATGGTGTTTTTGCAGCTTACTAATATAGTCATGTATGCCCTTTGTTTTATGGACCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAA" + } + ], + "target_id": 28 + }, + { + "mhap_location": { + "chrom": "Pf3D7_09_v3", + "end": 517091, + "genome_id": 0, + "start": 516927, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTAAAGAATGTCCCATAGGTTTTTATTGTCCAGAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCA" + }, + { + "seq": "TGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTGAAGAATGTCCCATAGGTTTTTATTGTCCAGAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCA" + }, + { + "seq": "TGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTAAAGAATGTCCCATAGGTTTTTATTGTCCAAAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCA" + } + ], + "target_id": 26 + }, + { + "mhap_location": { + "chrom": "Pf3D7_09_v3", + "end": 596333, + "genome_id": 0, + "start": 596132, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TTATTTTCGTTTTTTTTTATATTATCATTATAATTATATGTATTTACAAAGAATTTATTATTATTTGTTTCTTTATAATTATATTCATTTTCTTTATTACTTAAGGAATTTATATTTGATAAAACTTGTTGTCCTCTTTCTTCTTTGTTGATGTGAATATTTGAGAAAATAATAATAAATGTAATGACTAGGGCTATAT" + }, + { + "seq": "TTATTTTCGTTTTTTTTTATATTATCATTATAATTATATGTATTTACAAAGAATTTATTATTATTTGTTTCTTTATAATTATATTCATTTTCTTTATTACTTAAGGAATTTATATTTGATAAAACTTGTTGTCCTCTTTCTTCTTTGTTGATGTGAATATTTGAGAAAATAATAATAAATGTAATGACTAGGGCTATGT" + }, + { + "seq": "TTATTTTCGTTTTTTTTTATATTATCATTATAATTATATGTATTTACAAAGAATTTATTATTATTTGTTTCTTTATAATTATATTCATTTTCTTTATTACTTAAGGAATTTATATTTGATAAAACTTGTTGTACTCTTTCTTCTTTGTTGATGTGAATATTTGAGAAAATAATAATAAATGTAATGACTAGGGCTATGT" + } + ], + "target_id": 25 + }, + { + "mhap_location": { + "chrom": "Pf3D7_09_v3", + "end": 685791, + "genome_id": 0, + "start": 685600, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "CAAAGGAACAAGATAATTTTTTCCATTTTTATAAAAGTAATATATATGATATGGAAAATAGAACATGTAATAATAATATATTACAATATTGTGTTATGAATAATAAATCATATTTATTTCATAATATATCATCCAAAAAAAATATATATATAAAAAAAAAGAATCATCAGTTTTCTTTATTCATATATT" + }, + { + "seq": "CAAAGGAACAAGATAATTTTTTCAATTTTTATAAAAGTAATATATATGATATGGAAAATAGAACATGTAATAATAATATATTACAATATTGTGTTATGAATAATAAATCATATTTATTTCATAATATATCATCCAAAAAAAATATATATATAAAAAAAAAGAATCATCAGTTTTCTTTATTCATATATT" + } + ], + "target_id": 77 + }, + { + "mhap_location": { + "chrom": "Pf3D7_09_v3", + "end": 1179077, + "genome_id": 0, + "start": 1178893, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "CAAATTATCCTTAGCCCCAGATATGGTAAAGACATATCACTGTTATAAATTAGGAAAGCAAGCAGCTGAATTATTAGAATCTATCATTTTAAAGAAAAAGTTCGTAAGATTTAGAGTTACTGATGCTATTGATGTATATGATTTCTTTTATATAAAGAAAGTTTTATCCAGTCGTATTAAGA" + }, + { + "seq": "CAAATTACCCTTAGCCCCAGATATGGTAAAGACATATCACTGTTATAAATTAGGAAAGCAAGCAGCTAAATTATTAGAATCTATCATTTTAAAGAAAAAGTTCGTAAGATTTAGAGTTACTGATGCTATTGATGTATATGATTTCTTTTATATAAAGAAAGTTTTATCCAGTCGTATTAAGA" + } + ], + "target_id": 89 + }, + { + "mhap_location": { + "chrom": "Pf3D7_09_v3", + "end": 1406540, + "genome_id": 0, + "start": 1406404, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AATTAATTTTAATGATGATGTTACTTTAGAAACACAATCCATGATAGCACACGGAGGGTCTTTGTCAGAAATAGAAGAAACTGGAGATTTATCTTCAGATGTTGATAGATTACTTTCATCAATCGAAACTACTC" + }, + { + "seq": "AATTAATTTTAATGATGATGTTACTTTAGAAACACAATCCATGATAGCACACGGAGGGTCTTTGTCAGAAATAGAAGAAACTGAAGATTTATCTTCAGATGTTGATAGATTACTTTCATCAATCGAAACTACTC" + } + ], + "target_id": 51 + }, + { + "mhap_location": { + "chrom": "Pf3D7_09_v3", + "end": 1437302, + "genome_id": 0, + "start": 1437113, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TAAAACCTGACAGCTTTGTACAGTTATATTTACCCAATTAGAATGTTCAAACATATTTAAGTGTTGCCATTCTTCAAATAATTTTTTTTCATATTCAGTTTTTGGTTGGTTTTTAAATTCTTTTGATAATGTACCTTCTGCGGATGGTATAGGGAAGTTAAAAATTTTATTACTTACTTTGTTTGAT" + }, + { + "seq": "TAAAACCTGACAGCTTTGTACAGTTATATTTACCCAATTAGAATGTTCAAACATATTTAAGTGTTGCCATTCTTCAAATAATTTTTTTTCATATTCAGTTTTTGGTTGGTTTTTAAATTCTTTTGATACTGTACCTTCTGCGGATGGTATAGGGAAGTTAAAAATTTTATTACGTACTTTGTTTGAT" + } + ], + "target_id": 87 + }, + { + "mhap_location": { + "chrom": "Pf3D7_01_v3", + "end": 531899, + "genome_id": 0, + "start": 531681, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATACCTACAAATAATTATAGCATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGGAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATATTATCCGA" + }, + { + "seq": "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATTCCTACAAATAATTATAGCATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGTAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATAGTATCCGA" + }, + { + "seq": "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATTCCTACAAATAATTATAGCATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGGAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATATTATCCGA" + }, + { + "seq": "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATACCTACAAATAATTATAACATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGTAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATATTATCCGA" + }, + { + "seq": "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATACCTACAAATAATTATAACATGCCAAATAAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGTAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATATTATCCGA" + } + ], + "target_id": 24 + }, + { + "mhap_location": { + "chrom": "Pf3D7_10_v3", + "end": 377208, + "genome_id": 0, + "start": 377094, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ACCAAAAAATGATACCTGTACGTTTTTCTCCAGGAGAAACAAAAAAATTAGAAAGGATTCTCAAAAAAGTAGACGACTTTTTCTGTGCCAATATTAAAGCGCATTATACCTG" + }, + { + "seq": "ACCAAAAAATGATACCTGTACGTTTTTCTCCAGGAGAAACAAAAAAATTAGAAAGGATTCTCAAAAAAGTAGACGACTTTTTCTGTGCCAATATTAAAGCGCAATATACCTG" + } + ], + "target_id": 63 + }, + { + "mhap_location": { + "chrom": "Pf3D7_10_v3", + "end": 992543, + "genome_id": 0, + "start": 992370, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TTTTAAAAAAAAAAATTATGATATAAAATCTTCAATTAATAAAAGATCTATCCAGTTCTTTAGAGACACTAATATAGATCATTATATAGCATATGAATATTATAAGGAGGACCGTACAGAATTTATATTAACTATTATGAATGAAAAAAATATTACTCATCAAGAAACTCA" + }, + { + "seq": "TTTTAAAAAAAAAAATTATGATATAAAATCTTCAATTAATAAAAGATCTATCCAGTTCTTTAAAGACACTAATATAGATCATTATATAGCATATGAATATTATAAGGAGGACCGTACAGAATTTATATTAACTATTATGAATGAAAAAAATATTACTCATCAAGAAACTCA" + }, + { + "seq": "TTTTAAAAAAAAAAATTATGATATAAAATCTTCAATTAATAAAAGATCTATCCAGTTCTTTACAGACACTAATATAGATCATTATATAGCATATGAATATTATAAGGAGGACCGTACAGAATTTATATTAACTATTATGAATGAAAAAAATATTACTCATCAAGAAACTCA" + } + ], + "target_id": 65 + }, + { + "mhap_location": { + "chrom": "Pf3D7_10_v3", + "end": 1386868, + "genome_id": 0, + "start": 1386699, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "GAGAACAGGTTAAATATATTGAAGACGTGGTTTGATAATCAGGTATTTCTTTAATTAAATATTCATGATATTGTTCGTTAGATACATAAATTAATTCATCCTCCACATTTTGCTGTTCTGTTATAATTTGTGAAGAAGCTTGGTTTGTTTTATTTGGTAATTGCTCT" + }, + { + "seq": "GGGAACAGGTTAAATATATTGAAGACGTGGTTTGATAATCAGGTATTTCTTTAATTAAATATTCATGATATTGTTCGTTAGATACATAAATTAATTCGTCCTCCACATTTTGCTGTTCTGTTATAATTTGTGAAGAAGCTTGGTTTGTCTTATTTGGTAATTGCTCT" + }, + { + "seq": "GAGAACAGGTTAAATATATTGAAGACGTGGTTTGATAATCAGGTATTTCTTTAATTAAATATTCATGATATTGTTCGTTAGATACATAAATTAATTCGTCCTCCACATTTTGCTGTTCTGTTATAATTTGTGAAGAAGCTTGGTTTGTCTTATTTGGTAATTGCTCT" + } + ], + "target_id": 34 + }, + { + "mhap_location": { + "chrom": "Pf3D7_10_v3", + "end": 1399710, + "genome_id": 0, + "start": 1399543, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ACATCAGAACATAGTAAAGATTTAAATAATAATGATTCAAAAAATGAATCTAGTGATATTATTTCAGTAAATAATAAATCAAATAAAGTACAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACA" + }, + { + "seq": "ACATCAGAACATAGTAAAGATTTAAATAATAATGATTCAAAAAATGAATCTAGTGATATTATTTCAGAAAATAATAAATCAAATAAAGTACAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACA" + }, + { + "seq": "ACATCAGAACATAGTAAAGATTTAAATAATAATGGTTCAAAAAATGAATCTAGTGATATTATTTCAGAAAATAATAAATCAAATAAAGTACAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACA" + }, + { + "seq": "ACATCAGAACATAGTAAAGATTTAAATAATAATGATTCAAAAAATGAATCTAGTGATATTATTTCAGAAAATAATAAATCAAATAAAGTAGAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACA" + } + ], + "target_id": 71 + }, + { + "mhap_location": { + "chrom": "Pf3D7_10_v3", + "end": 1436681, + "genome_id": 0, + "start": 1436478, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "GAGAAGAAACACGTTTTATCTCATAATTCATATGAGAAAACTAAAAATAATGAAAATAATAAATTTTTCGATAAGGATAAAGAGTTAACGATGTCTAATGTAAAAAATGTGTCACAAACAAATTTCAAAAGTCTTTTAAGAAATCTTGGTGTTTCAGAGAATATATTCCTTAAAGAAAATAAATTAAATAAGGAAGGGAAA" + }, + { + "seq": "GAGGAGAAACACGTTTTATCTCATAATTCATATGAGAAAACTAAAAATAATGAAAATAATAAATTTTTCGATAAGGATAAAGAGTTATCGATGTCTAATGTAAAAAATGTGTCACAAACAAATTTCAAAAGTCTTTTAAGAAATCTTGGTGTTTCAGAGAATATATTCCTTAAAGAAAATAAATTAAATAAGGAAGGGAAA" + } + ], + "target_id": 23 + }, + { + "mhap_location": { + "chrom": "Pf3D7_11_v3", + "end": 119692, + "genome_id": 0, + "start": 119485, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TTCATCCAAAAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTATTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTGAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCC" + }, + { + "seq": "TTCATCCAAAAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTATTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTCAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCC" + }, + { + "seq": "TTCATCCAAGAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTATTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTGAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCC" + } + ], + "target_id": 22 + }, + { + "mhap_location": { + "chrom": "Pf3D7_11_v3", + "end": 1010037, + "genome_id": 0, + "start": 1009855, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AGTTCTATCTATTTGTTTAATTGGTGTCCATGAATTTTTAGAGAAACACCACATATCAGCTAATAAGGAATTATTAACATCTAATCCTCCATGAATATATAAAAAATCATTAAAACTGAAAGAAGCATGCTTATATCTTGCACGTGGACAAATTTTATTTCCAATAAGTTCCCATTTCTT" + }, + { + "seq": "AATTCTATCTATTTGTTTAATTGGTGTCCATGAATTTTTAGAGAAACACCACATATCAGCTAATAAGGAATTATTAACATCTAATCCTCCATGAATATATAAAAAATCATTAAAACTGAAAGAAGCATGCTTATATCTTGCACGTGGACAAATTTTATTTCCAATAAGTTCCCATTTCTT" + } + ], + "target_id": 20 + }, + { + "mhap_location": { + "chrom": "Pf3D7_11_v3", + "end": 1019084, + "genome_id": 0, + "start": 1018952, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TAGTGACTGTACATTTTTCATCTAATGTTCTATAGGATAAAGAATCTGAAGGACAATGCATATCATTACAAAAATAGCATGCACCTTTAAAATATAAATAAGAATGTCTTAACACAACAAAGGAATCAAA" + } + ], + "target_id": 56 + }, + { + "mhap_location": { + "chrom": "Pf3D7_11_v3", + "end": 1376371, + "genome_id": 0, + "start": 1376184, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TCTCATTCCTTTGAAAATATGAACTATTCAACTCATCAAGGTTTTCATATGTTATTTCATAACTGCCATCATCTGAATCCTCTTCATCACTACTACTTAAAGAATGCTCTTCTACAGTTATATCTTCATAATGATTATTTTTAGGAAAATATTCTTCAGATCTTTCTATAAATTCTGTTCCATTA" + }, + { + "seq": "TCTCATTCCTTTGAAAATATGAACTATTCAACTCATCAAGGTTTTCATATGTTATTTCATAAGTGCCATCATCTGAATCCTCTTCATCACTACTACTTAAAGAATGCTCTTCTACAGTTATATCTTCATAATGATTATTTTTAGGAAAATATTCTTCAGATCTTTCTATAAATTCTGTTCCATTA" + } + ], + "target_id": 60 + }, + { + "mhap_location": { + "chrom": "Pf3D7_11_v3", + "end": 1552639, + "genome_id": 0, + "start": 1552429, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ATATCGACAATTATAAAGAAAAAATAGAAAATTTTAATGAAAGATATTATGAAGATGATTTAAGTTTCTTAAACTTTCCAGGAACCATAACAAGTTATGATAAAAACCATCAAAGAGATAAAAGAAAAAACTGTTTTGAAGAATATCTAGACAATAATAATTATTTTATTGATAGTAATCTAAAGGAAGTTATAGAAAATAATATATA" + } + ], + "target_id": 19 + }, + { + "mhap_location": { + "chrom": "Pf3D7_01_v3", + "end": 532843, + "genome_id": 0, + "start": 532689, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "CTTTCTTAATTCTATGAATGAAGAATATACGCATATTAATTTAAATAACTTTATACATAATGATAACAATGATAAAGACGAAAATTATACATTAGATCAGGTGGAAGAATATCCTATGACTAGTTATCAAAATAATATATACAAGGATTTTT" + }, + { + "seq": "CTTTCTTAATTCTATGAATGAAGAATATACGCATATTAATTTAAATAACTTTATACATAATAATAACCATGATAATGACGAAAATTATACATTAGATCAGGTGGAAGGATATCCTATGACTAGTTATCAAAATAATATATACAAGGATTTTT" + } + ], + "target_id": 40 + }, + { + "mhap_location": { + "chrom": "Pf3D7_11_v3", + "end": 1751054, + "genome_id": 0, + "start": 1750864, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TATTAAAAACAACAAATAAATTACCAAGGTCATGGAAAAAACTCTTGTTAAATCTATCCATTAGATTTCAAACAATACCTATAGGTGGTTCTATCGAAATCATATCAAAGGATGAGAAAAATATTTCTGTGACACGATCCAGTGAATATAATGCAACAACATATGAGCATTACACATTTCCCAAATGG" + }, + { + "seq": "TATTAAAAACAACAAATAAATTACCAAGGTCATGGAAAAAACTCTTGTTAAATCTATCCATTAGATTTCAAACAATACCTATAGGTGGTTCTATCGAAATCATATCAAAGGATGAGAAAAATATTTCTATGACACGATCCAGTGAATATAATGCAACAACATATGAGCATTACACATTTCCCAAATGG" + }, + { + "seq": "TATTAAAAACAACAGATAAATTACCAAGGTCATGGAAAAAACTCTTGTTAAATCTATCCATTAGATTTCAAACAATACCTATAGGTGGTTCTATCGAAATCATATCAAAGGATGAGAAAAATATTTCTATGACACGATCCAGTGAATATAATGCAACAACATATGAGCATTACACATTTCCCAAATGG" + } + ], + "target_id": 21 + }, + { + "mhap_location": { + "chrom": "Pf3D7_11_v3", + "end": 1816424, + "genome_id": 0, + "start": 1816210, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TTGACTTCTCCGGGTTGGTTACATTATCATTACAACCAATATTATTAAGGTTAATATTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCATATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACT" + }, + { + "seq": "TTGACTTCTCCGGGTTTGTTACATTATCATTACAACCAATATTATTAAGGTTAATACTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCATATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACT" + }, + { + "seq": "TTGACTTCTCCGGGTTTGTTACATTATCATTACAACCAATATTATTAAGGTTAATATTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCATATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACT" + }, + { + "seq": "TTGACTTCTCCGGGTTTGTTACATTATCATTACAACCAATATTATTAAGGTTAATATTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCCTATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACT" + } + ], + "target_id": 18 + }, + { + "mhap_location": { + "chrom": "Pf3D7_12_v3", + "end": 63279, + "genome_id": 0, + "start": 63165, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ATAATTTCAGCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGTAATGAAAAAAATAACCCTTTCAT" + }, + { + "seq": "ATAATTTCACCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGCAATGAAAAAAATAACCCTTTCAT" + }, + { + "seq": "ATAATTTCACCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGCAATGAAAAAAACAACCCTTTCAT" + }, + { + "seq": "ATAATTTCACCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGTAATGAAAAAAATAACCCTTTCAT" + } + ], + "target_id": 69 + }, + { + "mhap_location": { + "chrom": "Pf3D7_12_v3", + "end": 660009, + "genome_id": 0, + "start": 659890, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "GGTCGACTTTTGGTGGTTTAACATTTTGAGCTACGAGATTTTCGACTGATGGCAATCCTACTTTGATTAATTCCTTTAACATAGATTTTGCGTGTCTTTTTACTTCTGATTTGATAT" + }, + { + "seq": "GGTCGACTTTTGGTGGTTTAACATTTTGAGCTACGAGTTTTTCGAATGATGGCAATCCTACTTTGATTAATTCCTTTAACATAAGTTTTGCGTGGTTTTTTACTTCTGATTTGATAT" + }, + { + "seq": "GGTCGACTTTTGGTGGTTTAACATTTTCAGCTATGAGTTTTTCGACTGATGGCAATCCTACTTTGATTAATTCCTTTAACATAAGTTTTGCGTGTTTTTTTACTTCTGATTTGATAT" + }, + { + "seq": "GGTCGACTTTTGGTGGTTTAACATTTTCAGCTACGAGTTTTTCGACTGATGGCAATCCTACTTTGATTAATTCCTTTAACATAAGTTTTGCGTGTCTTTTTACTTCTGATTTGATAT" + } + ], + "target_id": 16 + }, + { + "mhap_location": { + "chrom": "Pf3D7_12_v3", + "end": 684260, + "genome_id": 0, + "start": 684087, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ATATCAAGATGGTAGTATTGTTTTAGAGGTTAGTAGTACGAGAGATAAACTTTATGGAGAAGTTGAGTGGGAAGGATATAAATTTGAACTTGTGGATACAGGAGGTTTAGTTTTTGAACAAGAAAAGTTTTCAAAAGAAATAAAGGATCAAATTCTTATGGCTCTAAAAGA" + }, + { + "seq": "ATATCAAGATGGTAGTATTGTTTTAGATGTTAGTAGTACGAGAGATAAACTTTATGGAGAAGTTGAGTGGGAAGGATATAAATTTGAACTTGTGGATACAGGAGGTTTAGTTTTTGAACAAGAAAAGTTTTCAAAAGAAATAAAGGATCAAATTCTTATGGCTCTAAAAGA" + }, + { + "seq": "ATATCAAGATGGTAGTATTGTTTTAGATGTTAGTAGTACGAGAGATAAACTTTATGGAGAAGTTGAGTGGGAAGGATATAAATTTGAACTTGTGGATACAGGAGGTTTAGTTTTTGAACAAGAAAAGTTTTCAAAAGAAATAAAGGATCAAATTTTTATGGCTCTAAAAGA" + } + ], + "target_id": 14 + }, + { + "mhap_location": { + "chrom": "Pf3D7_12_v3", + "end": 943427, + "genome_id": 0, + "start": 943257, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ATCAACTATAATTAAAAATAGTGGAATTATTGAAAACTTTGGAGATATTGATTATATCTTTACGGATAAAACAGGAACACTAACAGAAAATGTTATGGTGCTTAAAGTTATACATATAGGTTTTGATGTTATACATGCAGAAAATGAAAAAAATTCCATACAAGGTAA" + }, + { + "seq": "ATCAACTATAATTAAAAATAGTGGAATTATTGAAAACTTTGGAGATATTGATTATATCTTTACGGATAAAACAGGAACATTAACAGAAAATGTTATGGTGCTTAAAGTTATACATATAGGTTTTGATGTTATACATGCAGAAAATGAAAAAAATTCCATACAAGGTAA" + } + ], + "target_id": 91 + }, + { + "mhap_location": { + "chrom": "Pf3D7_12_v3", + "end": 2050313, + "genome_id": 0, + "start": 2050129, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TTTAAACTTTGAATCTGTTCAATTAATAACACTTCATCATTGTCTTCGCCTTTTATAATATCTCCATGATTATGTGCTCCTCTAATTAAGGTATCACTAACCTGTTGTTCATCTGTCGCATGAGAACTAGTAGATATATCTGGTTTATTTTTTTTCTTTCTTTTTGTTATTTCTAATTTTTT" + }, + { + "seq": "TTTAAACTTTGAATCTGTTCAATTAATAACACTTCATCATTGTCTTCTCCTTTTATAATATCTCCATGATTATGTGCTCCTCTAATTAAGGTATCACTAACCTGTTGTTCATCTGTCGCATGAGAACTAGTAGATATATCTGGTTTATTTTTTTTCTTTCTTTTTGTTATTTCTAATTTTTT" + }, + { + "seq": "TTTAAACTTTGAATCTGTTCAATTAATAACACTTCATCATTGTCTTCTCCTTTTATAATATCCCCATGATTATGTGCTCCTCTAATTAAGGTATCACTAACCTGTTGTTCATCTGTCGCATGAGAACTAGTAGATATATCTGGTTTATTTTTTTTCTTTCTTTTTGTTATTTCTAATTTTTT" + } + ], + "target_id": 36 + }, + { + "mhap_location": { + "chrom": "Pf3D7_13_v3", + "end": 103878, + "genome_id": 0, + "start": 103658, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ACTGATGTTAATGAAGGCCAAAATGGAAAACGTTTAACACAAGAAAAAACCCTAAAACAAATTCCTTCGACATCACCAAATAATTTAGAACAAAAATTACAACAAACACATATTTCTTCTTCCCAACAAAAACATTTAATAAAAACTACTCCTACTTCAGATTCAACTACAACTTCATCAAGCTCTTCTGTTCCTCTTACAAAACAATCCCTTCATTC" + }, + { + "seq": "ACTGATGTTAATGAAGGCCAAAATGGAAAAAGTTTAACACAAGAAAAAACCCTAAAACAAATTCCTTCGACATCACCAAATAATTTAGAACAAAAATTACAACAAACACATATTTCTTCTTCCCAACAAAAACATTTAATAAAAACTACTCCTACTTCAGATTCAACTACAACTTCATCAAGCTCTTCTGTTCCTCTTACAAAACAATCCCTTCATTC" + } + ], + "target_id": 13 + }, + { + "mhap_location": { + "chrom": "Pf3D7_13_v3", + "end": 156721, + "genome_id": 0, + "start": 156565, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ATAGAGTTATTATGTTCGAATTAATGACCAGATTGTTTCGATTTTATACAAAACCAATAGACCTTATTATTACTATGAATACACACAGATATGACACACCTATATTGTTAAAACATTCAAACAGCTTACAACTTATCTTATCAAATCAACAAAA" + }, + { + "seq": "ATAGAGTTATTATGTTCGAATTAATGACCAGATTATTTCGATTTTATACAAAACCAATAGACCTTATTATTACTATGAATACACACAGATATGACACACCTATATTGTTAAAACATTCAAACAGCTTACAACTTATCTTATCAAATCAACAAAA" + } + ], + "target_id": 17 + }, + { + "mhap_location": { + "chrom": "Pf3D7_01_v3", + "end": 534367, + "genome_id": 0, + "start": 534214, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "GATAAAAAAAGAAAATGTACTAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAGAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTG" + }, + { + "seq": "GATAAAAAAAGAAAATGTAACAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAAAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCTATTAGTG" + }, + { + "seq": "GATAAAAAAAGAAAATGTAATAATCTACTTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAGAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTG" + }, + { + "seq": "GATAAAAAAAGAAAATGTAACAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAAAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTG" + }, + { + "seq": "GATAAAAAAAGAAAATGTAATAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAAAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTG" + } + ], + "target_id": 84 + }, + { + "mhap_location": { + "chrom": "Pf3D7_13_v3", + "end": 1150492, + "genome_id": 0, + "start": 1150302, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TAAAAAAAGCAAACAAAAAGAAAAGAGAATGGAAGATTTAAGTATTGAGGAAAATTTGAAAGAGAAATTAATAAACCTAAATATTCAGAAACAGTATAGTGGTTTCCATATGAAAGAAATGGAGGAACAAAATATTCCTGAATTAAATATTCCACAACTTTCAGCTATTCATAATAGAGAAGATATGA" + }, + { + "seq": "TAAAAAAAGCAAACAAAAAGAAAAGAGAATGGAAGATTTAAGTATTGAGGAAAATTTGAAAGAGAAATTAATAAACCTAAATATTCAGAAACAGTATAGTGGTTTCCATATGAAAGAAATGGAGGAACAAAATATTCCTGAATTAAATATTCCACAACTTTCAGCTACTCATAATAGAGAAGATATGA" + } + ], + "target_id": 9 + }, + { + "mhap_location": { + "chrom": "Pf3D7_13_v3", + "end": 1419669, + "genome_id": 0, + "start": 1419542, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TGGTTTTTGTACTTCTTTTCCTTGTGTTGATATCTCTTGTTCATTTTTAGATTGAGTATCTGTTTCACTTTGTGCCTTTACCTTTGATAATACGTTTTTACCGAATAATCCTAAATTTTGGAATA" + }, + { + "seq": "TGGTTTTTGTACTTTTTGTCCTTGTGTTGATATCTCTTGTTCATTTTTAGATTGAGTATCTGTTTCACTTTGTGCCTTTACCTTTGATAATACGTTTTTACCGAATAATCCTAAATTTTGGAATA" + } + ], + "target_id": 8 + }, + { + "mhap_location": { + "chrom": "Pf3D7_13_v3", + "end": 1725569, + "genome_id": 0, + "start": 1725364, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "CCAATACAATAAATTCTACCATTTGACGTAACACCACAATTATTTCTTCTAGGTATATTTAAATTACTTGAAACATACCATACATCTCTTAAACGATCATACACCTCAGTTTCAAATAAAGCCTTATAATCATAGTTATTACCACCAAAAACGTATAAGAAATTATTCAATACAGCACTTCCAAAATAAGCTTTTTTGGTAGA" + } + ], + "target_id": 10 + }, + { + "mhap_location": { + "chrom": "Pf3D7_13_v3", + "end": 1876533, + "genome_id": 0, + "start": 1876351, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TATATTTTGGTTCAGACAAATGTACGTTACATGAAATATGTGCACTATCATCAACTAAAGAAATATCTAAACTATCTGTAAAAGTATGTTTAGAACTAACATTTGAAGAGAAGTTACATCCGTGTATGACTTTTTTTTCATATTTTGGTTTTAAAACTATTTTATAATTATTATTTTTAA" + }, + { + "seq": "TATATTTTGGTTCAGACAAATGTACGTTACATGAAATATGTGCATTATCATCAACTAAAGAAATATCTAAACTATCTGTAAAAGTATGTTTAGAACTATCATTTGAAGAGAAGTTACATCCGTGTATGACTTTTTTTTCATATTTTGGTTTTAAAACTATTTTATAATTATTATTTTTAA" + } + ], + "target_id": 11 + }, + { + "mhap_location": { + "chrom": "Pf3D7_13_v3", + "end": 2115141, + "genome_id": 0, + "start": 2114974, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TCATTAAGTAAAAAATTTACGGTATCGACATTAACAGTGTAATAATTTCTTCCTAAATTTAAATGTTCTATATAATTCAAATTTAATACGGTATTTAACCTTTCTTCAAGTATTATCATTGCATTAATTTGAAACATAAGTGAAAAATTATTAGCACTTCTAAAA" + }, + { + "seq": "TCATTAAGTAAAAAATTTACGGTATCGACATTAACAGTGTAATAATTTCTTCCTAAATTTAAATGTTCTAAATAATTCAAATTTAATACGGTATTTAACCTTTCTTCAAGTATTATCATTGCATTAATTTGAAACATAAGTAAAAAATTATTAGCACTTCTAAAA" + }, + { + "seq": "TCATTAAGTAAAAAATTTACGGTATCGACATTAACAGTGTAATAATGTCTTCCTAAATTTAAATGTTCTAAATAATTCAAATTTAATACGGTATTTAACCTTTCTTCAAGTATTATCATTGCATTAATTTGAAACATAAGTAAAAAATTATTAGCACTTCTAAAA" + } + ], + "target_id": 68 + }, + { + "mhap_location": { + "chrom": "Pf3D7_13_v3", + "end": 2124846, + "genome_id": 0, + "start": 2124633, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AACATTTTTTTAACATCTTTACCTTTTTGACTTGGTTCTTCATCATAATTCTGTTGTTCTGCAGAATCAGCATTTACTTCAGTTTCTTCTTTATTTTGAAAAGTGTTTGATTCTACATGAGAATTGGAAGATGAACGTCTATGTTTTACTTCTGTATAACTAGTACGTTCTCCAGTATGATGAGCCTTAAGGTTTACATCTTCAGTTTCTT" + } + ], + "target_id": 7 + }, + { + "mhap_location": { + "chrom": "Pf3D7_13_v3", + "end": 2479245, + "genome_id": 0, + "start": 2479085, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "CTATGCTTTATCAAAACAAAGTAATGAAAATGTAATACATTATTCTTGTCGATCTATATGTGCTTTTACAAAAAACCCTAAGGGTTTAGAAGCGGTAAAGGATATCAAGGACTTTGCGAATATTATAAGTAAATCTGTTGGTGATTTGAGTAAAGAGA" + }, + { + "seq": "CCATGCTTTATCAAAACAAAGTAATGAAAATGTAATACATTATTCTTGTCGATCTATATGTGCTTTTACAAAAAACCCTAAGGGTTTAGAAGCGGTAAAGGATATCAAGGACTTTGCGAATATTATAAGTAAATCTGTTGGTGATTTGAGTAAAGAGA" + } + ], + "target_id": 6 + }, + { + "mhap_location": { + "chrom": "Pf3D7_13_v3", + "end": 2481287, + "genome_id": 0, + "start": 2481105, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "GAACTTACTTTAGAAGCCATGAATTCGGCCGATGATCCATTGGAAGCATTTAAAAATACTTTATTAATATTTGATTTTAATTTATCTGAATTTGATAAGGATCCATATATAAATGGTGTGCATGATTTAGCATCTAATATAAAGGATTGTTTAAGAAAAGGAGGTCAGAGTAAAATATAT" + }, + { + "seq": "GAACTTACTTTAGAAGCCATGAATTCGGCCGATGATCCATTGGAAGCATTTAAAAATACTTTATTAATATTTGATTTTAATTTATCTGAATTTGATAAGGATCCATATGTAAATGGTGTGCATGATTTAGCATCTAATATAAAGGATTGTTTAAGAAAAGGAGGTCACAGTAAAATATAT" + } + ], + "target_id": 47 + }, + { + "mhap_location": { + "chrom": "Pf3D7_13_v3", + "end": 2669306, + "genome_id": 0, + "start": 2669134, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AAAAAAATACATTTAAATCTATAATATTTGTAATAAATGATAAGAATATTAGTAATAATAGGGTACTACTATTTGTAAATACTTTTCTACATAATTTATCAATAGTAGGAAATATGATATTCTTTTTGTTTGGCTTTATTTTATCTGGGATTTTCCAATCATAAAGTTCG" + } + ], + "target_id": 5 + }, + { + "mhap_location": { + "chrom": "Pf3D7_14_v3", + "end": 40136, + "genome_id": 0, + "start": 39952, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "CATAGAAATATGTGCGAAAATTGGGAAAAAAATAAATAACAGGAATTGTTATATAAATTGAATCAAGAATGGCACAAAGAAAATAATACTGGTGACTTTCACACTAGTGATATCACACACAATAGTGGTATTACATACACTAGTGGTAACATACCTAGTGAAAGTAATAGTAGTTATATCCA" + }, + { + "seq": "CATAGAAATGTGTGCGAAAATTGGGAAAAAAATAAATAACAGGAATTGTTAGATAAATTGAATGAAGAATGGCACAAAGAAAATAATACTGGTGACTTTCACACTAGTGATATCACACACAATAGTGGTATTACATACACTAGTGGTAACATACCTAGTGAAAGTAATAGTAGTTATATCTA" + }, + { + "seq": "CATAGAAATATGTGCGAAAATTGGGAAAAAAATAAATAACAGGAATTGTTATATAAATTGAATCAAGAATGGCACAAAGAAAATAATACTGGTGACTTTCACACTAGTGATATCACACACAATAGTGGTATTACATACAGTAGTGGTAACATACCTAGTGAAAGTAATAGTAGTTATATCCA" + } + ], + "target_id": 55 + }, + { + "mhap_location": { + "chrom": "Pf3D7_01_v3", + "end": 535109, + "genome_id": 0, + "start": 534940, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ATATTCCGTCAGATATTCAAAATGAATGTATTTGTTCAAAAATAAATGAAGATAGAAATAATGATATGATAAACATATCTGAAATATTTTATCGTTTCATTAAATTTATAACAATGATTGAAATATATTTGTGTGTAATAGAGGAAATTAAAAGGGAAGAATGGGAA" + }, + { + "seq": "ATATTCCGTCAGATATTCAAAATGAATGTATTTGTTCAAAAATAAATGAAGATAGAAATAATGATATGATAAACATATCTGAAATATATTATCGTTTCATTAAATTTATAACAATGATTGAAATATATTTGTGTGTAATAGAGGAAATTAAAAGGGAAGAATGGGAA" + }, + { + "seq": "ATACTCCGTCAGATATTCAAAATGAATGTATTTGTTCAAAAATAAATGAAGATAGAAATAATGATATGATAAACATATCTGAAATATATTATCGTTTCATTAAATTTATAACAATGATTGAAATATATTTGTGTGTAATAGAGGAAATTAAAAGGGAAGAATGGGAA" + } + ], + "target_id": 76 + }, + { + "mhap_location": { + "chrom": "Pf3D7_14_v3", + "end": 120350, + "genome_id": 0, + "start": 120214, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTCTGGACAATTACAATATTCATATCCATGAGCATTCTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAA" + }, + { + "seq": "TTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTCTGGACAATTACAATATTCATATCCATGAACATTCTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAA" + }, + { + "seq": "TTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTCTGGACAATTACAATATTCATATCCATGAGCATTGTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAA" + }, + { + "seq": "TTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTGTGGACAATTACAATATTCATATCCATGAGCATTCTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAA" + } + ], + "target_id": 83 + }, + { + "mhap_location": { + "chrom": "Pf3D7_14_v3", + "end": 150293, + "genome_id": 0, + "start": 150104, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TAATAATAGTAATATAAAGAATTATTCAGCTGTAGATATATTCTCACCCAAAAAAACTGGAAAGGAATGTATTAAATGTCTCCCAGATAATTTTTGTGAATGCGAATGTAGTTGTAAAAATAAAACAGGTTTTTCAATGAAATATAGACATGCCAGTAAGGGATCTAAAAGATATAGTAAAAAAATG" + }, + { + "seq": "TAATAATAGTAATATAAAGAATTATTCAGCTGTAGATATATTCTCACCCAAAAAAACTGGAAAGGAATGTATTAAATGTCTCCCAGATAATTTTTGTGAATGCGAATGTAGTTGTAAAAATAAAACAGGTTTTTCAATGAAATATAGACATGCCAGTAAGGGATCTAAAAGATATCGTAAAAAAATG" + } + ], + "target_id": 97 + }, + { + "mhap_location": { + "chrom": "Pf3D7_14_v3", + "end": 279785, + "genome_id": 0, + "start": 279662, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AGTTATAGTGATTCATATAAGGTAAATTGTATTAATTTCTCTGAAGGATTTTGTTGCTGTCATCCAATAAATAATTTAGCACTATTATATGGAGAGTATCAACAAAATCAAGAATCAAAAA" + }, + { + "seq": "AGTAATAGTGATTCATATAAGGTAAATTGTATTAATTTCTCTGAAGGATTTTGTTGCTGTCATCCAATAAATAATTTAGCACTATTATATGGAGAGTATCAACAAAATCAAGAATCAAAAA" + } + ], + "target_id": 88 + }, + { + "mhap_location": { + "chrom": "Pf3D7_14_v3", + "end": 407570, + "genome_id": 0, + "start": 407378, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "CTCCTTCCTTTTCATTCTTTACTTTATTTCTATTAATACACAACTCTCCTTGAGTTAAGAGATTTACGATATTATCAATATTGTTTTCTTTCATATACTTCAACTTTTTACTATTCATTTTTAAAAGATAATTAACCAAGTTACTCATGTTTGTATTAGATGGTATGTTCCCAATTTTTTCGTCTTTTCT" + }, + { + "seq": "CTACTACCTTTTCATTCTTTACTTTATTTCTATTAATACACAACTCTCCTTGAGTTAAGAGATTTACGATATTATCAATATTGTTTTCTTTCATATACTTCAACTTTTTACTATTCATTTTTAAAAGATAATTAACCAAGTTACTCATGTTTGTATTAGATGGTATGTTCCCAATTTTTTCGTCTTTTCT" + } + ], + "target_id": 66 + }, + { + "mhap_location": { + "chrom": "Pf3D7_14_v3", + "end": 564376, + "genome_id": 0, + "start": 564207, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TATTAAAACTTTTTTTTCTTTCTGTAAAGTTTGTACATTATGTTTTGATGAGTTTTTATTATCTTCATAAAACTTTATATATTTATAAAAATTATTTTGTATAAAATCATTTAATAAAGGTAACATAATTTTTTTAGCTTGATTCAATTCACTACATGAATGTATAT" + }, + { + "seq": "TATTAAAACTTTTTTTTCTTTCTGTAAAGTTTGTACATTATGTTTTGATGAGTTTTGATTATCTTCATAAAACTTTATATATTTATAAAAATTATTTTGTATAAAATCATTTAATAAAGGTAACATAATTTTTTTAGCTTGATTCAATTCACTACATGAATGTATAT" + } + ], + "target_id": 2 + }, + { + "mhap_location": { + "chrom": "Pf3D7_14_v3", + "end": 1038485, + "genome_id": 0, + "start": 1038368, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ATACAACTAATAAAGCTCTACGATAAATTTCTTTTTTATTTGATTTAGAAAAAGGAGAAAACCATTGAAACTTTTTGGCTAGATATTTATGGTCTTTATCAAAAATATATTCTGA" + }, + { + "seq": "ATACAACTAATAAAGCTCTACGATAAATTTCTTTTTTATTTGATTTAGAAAAAGGAGAAAACCATTGAAACTTTTTGGCTAGATATTTATGGTCTTTATCAAAAATATAATCTGA" + } + ], + "target_id": 1 + }, + { + "mhap_location": { + "chrom": "Pf3D7_14_v3", + "end": 1956285, + "genome_id": 0, + "start": 1956128, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TATATATAAAGTTAAACCTATAAATAATACACTACCTAATAAACTATTCTTATATTTAAAAATAAATATAATACATGTTATTAATCCTTCTATTGTTGCCGGAATAATATACATTAAAACAGAACTCATCAAATTATTAGCACTCTCGGTACCTC" + }, + { + "seq": "TATATAAAGTTAAACCTATAAATAATACACTACCTAATAAACTATTCTTATATTTAAAAATAAATATAATACATGTTATTAATCCTTCTATTGTTGCCGGAATAATATACATTAAAACAGAACTCATCAAATTATTAGCACTCTCGGTACCTC" + }, + { + "seq": "TATATATAAAGTTAAACCTATAAATAATACACTACCTAATAAACTATTCTTATATTTAAAAATAAATATAACACATGTTATTAATCCTTCTATTGTTGCCGGAATAATATACATTAAAACAGAACTCATCAAATTATTAGCACTCTCGGTACCTC" + } + ], + "target_id": 0 + }, + { + "mhap_location": { + "chrom": "Pf3D7_14_v3", + "end": 1992425, + "genome_id": 0, + "start": 1992288, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "TAATCACCAGTACCATTTTTTTCTGATAAATTAATATTTTTTTGTATAACATCATATTTATCCCTTTTCGTGGTAAGTGCAGTATCCTGTTTTATTATTATATTATCGAATTCATCATGGTGTATATTTCTTTCT" + }, + { + "seq": "TAAACACCAGTACCATTTTTTTCTGATAAATTAATATTTTTTTGTATAACATCATATTTATCCCTTTTCGTGGTAAGTGCAGTATCCTGTTTTATTATTATATTATCGAATTCATCATGGTGTATATTTCTTTCA" + }, + { + "seq": "TAAACACCAGTACCATTTTTTTCTGATAAATTAATATTTTTTTGTATAACATCATATTTATCCCTTTTCGTGGTAAGTGCAGTATCCTGTTTTATTATTATATTATCGAATTCATCATGGTGTATATTTCTTTCT" + } + ], + "target_id": 50 + }, + { + "mhap_location": { + "chrom": "Pf3D7_14_v3", + "end": 2525088, + "genome_id": 0, + "start": 2524961, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "AATGAGGTATAATCATTCATTTCGTTGGGTCGATTTGATCTATTTTTAAGGTCCATATATTGAGATGAATCATTATGCATTTTATAATCATGAGGGATATTAGGTGCATGGTATTTAGGGTCTTT" + }, + { + "seq": "AATGAGGTATAATCATCCATTTCGTTGGGTCGATTTGATCTATTTTTAAGGTCCATATATTGAGATGAATCATTATGCATTTTATAATCATGAGGGATATTAGGTGCATGGTATTTAGGGTCTTT" + }, + { + "seq": "AAAGAGGTATAATCATCCATTTTGTTGGGTCGATTTGATCTATTTTTAAGGTCCATATATTGAGATGAATCATTATGCATTTTATAATCATGAGGGATATTAGGTGCATGGTATTTAGGGTCTTT" + } + ], + "target_id": 12 + }, + { + "mhap_location": { + "chrom": "Pf3D7_14_v3", + "end": 3124841, + "genome_id": 0, + "start": 3124641, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "ATGGAAAAATGGAATATGAAGTATTAAGTGATGATAATATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGGTGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATAATATGTGGTCTACTTCTGGACTAGGGTTCTATGAAT" + }, + { + "seq": "ATGGAAAAATGGAATATGAAGTATTAAGTGATGATAAAATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGATGACGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATAATATGTGGTCTACTTCTGGACTAGGGTTCTATGAAT" + }, + { + "seq": "ATGGAAAAATGGAATATGAAGTATTAAGTGATGATAAAATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGATGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATAATATGTGGTCTACTTCTGGACTAGGGTTCTATGAAT" + }, + { + "seq": "ATGGAAAAATGGAATATGAAGTATTAAGTGATGATAAAATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGGTGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATGATATGTGGTCTACTTCTGGACTAGGGTTCTATGAAT" + }, + { + "seq": "ATGGAAAAATGGAATATGAAGTATTAAGTGATGATAAAATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGATGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATGATATGTGGTCTACTTCTGGACTAGGGTTCTATGAAT" + } + ], + "target_id": 31 + }, + { + "mhap_location": { + "chrom": "Pf3D7_12_v3", + "end": 1237602, + "genome_id": 0, + "start": 1237430, + "strand": "+" + }, + "microhaplotypes": [ + { + "seq": "GTATGAACACAAAACCGAAAGAGAGTTTAAAAAAAGATCCGATTTTAATGAAGGAAGAAATAACATAATAAATGTGTCAAATGTAAAGAAAACATGTAATATAGTTAAAAATGATTTAAAGGAATCTAACGAGATAAAAACTAATATAAACACAAGTTCTTATAATTTAT" + } + ], + "target_id": 53 + } + ] + }, + "detected_microhaplotypes": [ + { + "bioinformatics_run_id": 0, + "library_samples": [ + { + "library_sample_id": 1, + "target_results": [ + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 2227 + }, + { + "mhap_id": 2, + "reads": 51 + } + ], + "mhaps_target_id": 98 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 19391 + } + ], + "mhaps_target_id": 97 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 16586 + } + ], + "mhaps_target_id": 96 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 836 + }, + { + "mhap_id": 0, + "reads": 33 + } + ], + "mhaps_target_id": 95 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 6967 + } + ], + "mhaps_target_id": 94 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1010 + } + ], + "mhaps_target_id": 93 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 300 + } + ], + "mhaps_target_id": 86 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 4256 + } + ], + "mhaps_target_id": 84 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 958 + } + ], + "mhaps_target_id": 83 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 31313 + } + ], + "mhaps_target_id": 79 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 2554 + } + ], + "mhaps_target_id": 78 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1379 + } + ], + "mhaps_target_id": 81 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1089 + } + ], + "mhaps_target_id": 75 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 2310 + } + ], + "mhaps_target_id": 72 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 44681 + } + ], + "mhaps_target_id": 71 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 365 + }, + { + "mhap_id": 2, + "reads": 19 + } + ], + "mhaps_target_id": 69 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 282 + } + ], + "mhaps_target_id": 67 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 3831 + }, + { + "mhap_id": 0, + "reads": 64 + } + ], + "mhaps_target_id": 63 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 507 + } + ], + "mhaps_target_id": 56 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 2790 + }, + { + "mhap_id": 0, + "reads": 67 + } + ], + "mhaps_target_id": 10 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1186 + }, + { + "mhap_id": 1, + "reads": 20 + } + ], + "mhaps_target_id": 55 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 5344 + } + ], + "mhaps_target_id": 41 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 10595 + } + ], + "mhaps_target_id": 54 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1420 + }, + { + "mhap_id": 0, + "reads": 30 + } + ], + "mhaps_target_id": 50 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 11091 + } + ], + "mhaps_target_id": 48 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 3576 + } + ], + "mhaps_target_id": 59 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 377 + }, + { + "mhap_id": 1, + "reads": 15 + } + ], + "mhaps_target_id": 7 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 710 + } + ], + "mhaps_target_id": 45 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 259 + }, + { + "mhap_id": 1, + "reads": 15 + } + ], + "mhaps_target_id": 40 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1009 + } + ], + "mhaps_target_id": 43 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 3485 + }, + { + "mhap_id": 2, + "reads": 31 + } + ], + "mhaps_target_id": 74 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 16766 + }, + { + "mhap_id": 0, + "reads": 93 + } + ], + "mhaps_target_id": 38 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 13601 + } + ], + "mhaps_target_id": 33 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 33117 + } + ], + "mhaps_target_id": 37 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1980 + }, + { + "mhap_id": 0, + "reads": 15 + } + ], + "mhaps_target_id": 14 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 957 + }, + { + "mhap_id": 0, + "reads": 25 + } + ], + "mhaps_target_id": 32 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 6197 + } + ], + "mhaps_target_id": 39 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 19559 + } + ], + "mhaps_target_id": 29 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1167 + } + ], + "mhaps_target_id": 85 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 5895 + } + ], + "mhaps_target_id": 11 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 733 + } + ], + "mhaps_target_id": 28 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 860 + } + ], + "mhaps_target_id": 26 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 4213 + } + ], + "mhaps_target_id": 27 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 560 + }, + { + "mhap_id": 0, + "reads": 19 + } + ], + "mhaps_target_id": 58 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 361 + }, + { + "mhap_id": 2, + "reads": 17 + } + ], + "mhaps_target_id": 21 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 23438 + } + ], + "mhaps_target_id": 31 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 511 + }, + { + "mhap_id": 0, + "reads": 16 + } + ], + "mhaps_target_id": 92 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 2230 + }, + { + "mhap_id": 1, + "reads": 17 + } + ], + "mhaps_target_id": 24 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 419 + } + ], + "mhaps_target_id": 82 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 14122 + } + ], + "mhaps_target_id": 70 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 25203 + } + ], + "mhaps_target_id": 57 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 516 + } + ], + "mhaps_target_id": 19 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 2249 + }, + { + "mhap_id": 0, + "reads": 48 + }, + { + "mhap_id": 2, + "reads": 20 + } + ], + "mhaps_target_id": 88 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 371 + } + ], + "mhaps_target_id": 4 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 515 + }, + { + "mhap_id": 0, + "reads": 22 + } + ], + "mhaps_target_id": 0 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 7336 + } + ], + "mhaps_target_id": 3 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 486 + }, + { + "mhap_id": 0, + "reads": 20 + } + ], + "mhaps_target_id": 87 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1564 + }, + { + "mhap_id": 1, + "reads": 15 + } + ], + "mhaps_target_id": 68 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 17721 + } + ], + "mhaps_target_id": 64 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 784 + } + ], + "mhaps_target_id": 25 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 283 + } + ], + "mhaps_target_id": 36 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 7629 + } + ], + "mhaps_target_id": 8 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1964 + }, + { + "mhap_id": 0, + "reads": 50 + } + ], + "mhaps_target_id": 16 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1213 + } + ], + "mhaps_target_id": 80 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 11070 + }, + { + "mhap_id": 0, + "reads": 106 + } + ], + "mhaps_target_id": 15 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 2500 + }, + { + "mhap_id": 2, + "reads": 39 + } + ], + "mhaps_target_id": 60 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 24537 + } + ], + "mhaps_target_id": 30 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1868 + }, + { + "mhap_id": 2, + "reads": 18 + }, + { + "mhap_id": 1, + "reads": 15 + } + ], + "mhaps_target_id": 13 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 22789 + } + ], + "mhaps_target_id": 89 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 3602 + }, + { + "mhap_id": 0, + "reads": 20 + } + ], + "mhaps_target_id": 77 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 2155 + }, + { + "mhap_id": 0, + "reads": 16 + }, + { + "mhap_id": 3, + "reads": 11 + } + ], + "mhaps_target_id": 42 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 16298 + } + ], + "mhaps_target_id": 91 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 2079 + }, + { + "mhap_id": 0, + "reads": 38 + } + ], + "mhaps_target_id": 65 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 4739 + } + ], + "mhaps_target_id": 22 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 775 + } + ], + "mhaps_target_id": 73 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 618 + } + ], + "mhaps_target_id": 20 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 20051 + } + ], + "mhaps_target_id": 46 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1533 + }, + { + "mhap_id": 0, + "reads": 12 + } + ], + "mhaps_target_id": 9 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 34752 + } + ], + "mhaps_target_id": 5 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 6522 + } + ], + "mhaps_target_id": 34 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 26863 + } + ], + "mhaps_target_id": 23 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 15285 + } + ], + "mhaps_target_id": 47 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1324 + } + ], + "mhaps_target_id": 90 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1590 + } + ], + "mhaps_target_id": 1 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 46824 + } + ], + "mhaps_target_id": 2 + } + ] + }, + { + "library_sample_id": 0, + "target_results": [ + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 23292 + }, + { + "mhap_id": 0, + "reads": 8192 + } + ], + "mhaps_target_id": 54 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 17655 + }, + { + "mhap_id": 1, + "reads": 6421 + } + ], + "mhaps_target_id": 21 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 29456 + }, + { + "mhap_id": 1, + "reads": 6163 + } + ], + "mhaps_target_id": 96 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 33182 + }, + { + "mhap_id": 1, + "reads": 283 + } + ], + "mhaps_target_id": 95 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 32066 + } + ], + "mhaps_target_id": 94 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 38609 + } + ], + "mhaps_target_id": 93 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 48414 + } + ], + "mhaps_target_id": 46 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 30508 + }, + { + "mhap_id": 0, + "reads": 6187 + } + ], + "mhaps_target_id": 30 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 25447 + } + ], + "mhaps_target_id": 86 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 21610 + } + ], + "mhaps_target_id": 84 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 42576 + } + ], + "mhaps_target_id": 83 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 49627 + } + ], + "mhaps_target_id": 79 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 45595 + } + ], + "mhaps_target_id": 78 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 17913 + } + ], + "mhaps_target_id": 80 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 42252 + } + ], + "mhaps_target_id": 81 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 37051 + }, + { + "mhap_id": 1, + "reads": 12590 + } + ], + "mhaps_target_id": 97 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 49953 + } + ], + "mhaps_target_id": 75 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 33844 + } + ], + "mhaps_target_id": 72 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 19299 + }, + { + "mhap_id": 0, + "reads": 6398 + } + ], + "mhaps_target_id": 16 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 46915 + } + ], + "mhaps_target_id": 71 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 41720 + }, + { + "mhap_id": 1, + "reads": 8246 + } + ], + "mhaps_target_id": 76 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 28472 + }, + { + "mhap_id": 1, + "reads": 10008 + } + ], + "mhaps_target_id": 69 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 18960 + } + ], + "mhaps_target_id": 66 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 33183 + } + ], + "mhaps_target_id": 63 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 31147 + } + ], + "mhaps_target_id": 68 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 35366 + } + ], + "mhaps_target_id": 62 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 29611 + } + ], + "mhaps_target_id": 61 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 27075 + } + ], + "mhaps_target_id": 56 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 26668 + }, + { + "mhap_id": 1, + "reads": 9510 + } + ], + "mhaps_target_id": 51 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 28161 + } + ], + "mhaps_target_id": 50 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 48791 + } + ], + "mhaps_target_id": 31 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 11363 + }, + { + "mhap_id": 1, + "reads": 4463 + } + ], + "mhaps_target_id": 49 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 43173 + } + ], + "mhaps_target_id": 35 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 35561 + }, + { + "mhap_id": 0, + "reads": 14385 + } + ], + "mhaps_target_id": 48 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 45402 + } + ], + "mhaps_target_id": 98 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 21661 + }, + { + "mhap_id": 1, + "reads": 7975 + } + ], + "mhaps_target_id": 47 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 34294 + }, + { + "mhap_id": 0, + "reads": 12740 + } + ], + "mhaps_target_id": 27 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 49955 + } + ], + "mhaps_target_id": 59 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 16463 + } + ], + "mhaps_target_id": 40 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 37292 + }, + { + "mhap_id": 0, + "reads": 12510 + } + ], + "mhaps_target_id": 74 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 24539 + } + ], + "mhaps_target_id": 7 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 41530 + } + ], + "mhaps_target_id": 45 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 29642 + }, + { + "mhap_id": 1, + "reads": 12542 + } + ], + "mhaps_target_id": 33 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 20519 + }, + { + "mhap_id": 0, + "reads": 7538 + } + ], + "mhaps_target_id": 67 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 27730 + } + ], + "mhaps_target_id": 37 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 49338 + } + ], + "mhaps_target_id": 3 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 32341 + }, + { + "mhap_id": 1, + "reads": 12140 + } + ], + "mhaps_target_id": 14 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 49365 + } + ], + "mhaps_target_id": 32 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 39009 + } + ], + "mhaps_target_id": 39 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 27621 + }, + { + "mhap_id": 0, + "reads": 9786 + } + ], + "mhaps_target_id": 29 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 29934 + } + ], + "mhaps_target_id": 85 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 49971 + } + ], + "mhaps_target_id": 11 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 23924 + } + ], + "mhaps_target_id": 28 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 29713 + } + ], + "mhaps_target_id": 26 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 38625 + } + ], + "mhaps_target_id": 87 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 49969 + } + ], + "mhaps_target_id": 64 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 45069 + } + ], + "mhaps_target_id": 8 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 24050 + } + ], + "mhaps_target_id": 19 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 41999 + } + ], + "mhaps_target_id": 36 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 48335 + } + ], + "mhaps_target_id": 65 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 22586 + }, + { + "mhap_id": 0, + "reads": 18757 + } + ], + "mhaps_target_id": 25 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 37449 + }, + { + "mhap_id": 1, + "reads": 12495 + } + ], + "mhaps_target_id": 34 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 31005 + }, + { + "mhap_id": 1, + "reads": 6377 + } + ], + "mhaps_target_id": 57 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 44271 + } + ], + "mhaps_target_id": 23 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 24451 + } + ], + "mhaps_target_id": 58 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 49746 + } + ], + "mhaps_target_id": 92 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 28724 + }, + { + "mhap_id": 1, + "reads": 21186 + } + ], + "mhaps_target_id": 24 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 25672 + } + ], + "mhaps_target_id": 82 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 35612 + } + ], + "mhaps_target_id": 70 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 49786 + } + ], + "mhaps_target_id": 15 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 29564 + } + ], + "mhaps_target_id": 60 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 21816 + } + ], + "mhaps_target_id": 18 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 36326 + } + ], + "mhaps_target_id": 6 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 21602 + }, + { + "mhap_id": 1, + "reads": 7824 + } + ], + "mhaps_target_id": 13 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 31697 + } + ], + "mhaps_target_id": 38 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 33113 + }, + { + "mhap_id": 1, + "reads": 11252 + } + ], + "mhaps_target_id": 88 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 3203 + }, + { + "mhap_id": 1, + "reads": 2781 + } + ], + "mhaps_target_id": 52 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 28266 + }, + { + "mhap_id": 1, + "reads": 9483 + } + ], + "mhaps_target_id": 4 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 34463 + }, + { + "mhap_id": 1, + "reads": 11600 + } + ], + "mhaps_target_id": 0 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 37213 + } + ], + "mhaps_target_id": 43 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 24157 + }, + { + "mhap_id": 1, + "reads": 18874 + } + ], + "mhaps_target_id": 22 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 10520 + }, + { + "mhap_id": 1, + "reads": 3622 + } + ], + "mhaps_target_id": 12 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 49745 + } + ], + "mhaps_target_id": 89 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 24530 + }, + { + "mhap_id": 1, + "reads": 9730 + } + ], + "mhaps_target_id": 77 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 22427 + }, + { + "mhap_id": 0, + "reads": 8239 + } + ], + "mhaps_target_id": 42 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 35294 + }, + { + "mhap_id": 1, + "reads": 12195 + } + ], + "mhaps_target_id": 41 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 49972 + } + ], + "mhaps_target_id": 55 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 37605 + } + ], + "mhaps_target_id": 91 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 19230 + } + ], + "mhaps_target_id": 53 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 49701 + } + ], + "mhaps_target_id": 10 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 30585 + }, + { + "mhap_id": 0, + "reads": 10686 + } + ], + "mhaps_target_id": 73 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 32967 + } + ], + "mhaps_target_id": 20 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 3634 + } + ], + "mhaps_target_id": 44 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 28109 + } + ], + "mhaps_target_id": 9 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 37013 + } + ], + "mhaps_target_id": 5 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 21764 + }, + { + "mhap_id": 1, + "reads": 7383 + } + ], + "mhaps_target_id": 17 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 34162 + } + ], + "mhaps_target_id": 90 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 49728 + } + ], + "mhaps_target_id": 1 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 49740 + } + ], + "mhaps_target_id": 2 + } + ] + } + ] + }, + { + "bioinformatics_run_id": 1, + "library_samples": [ + { + "library_sample_id": 3, + "target_results": [ + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 289 + } + ], + "mhaps_target_id": 2 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 333 + } + ], + "mhaps_target_id": 47 + }, + { + "mhaps": [ + { + "mhap_id": 4, + "reads": 480 + } + ], + "mhaps_target_id": 98 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 427 + } + ], + "mhaps_target_id": 75 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 181 + } + ], + "mhaps_target_id": 97 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 352 + } + ], + "mhaps_target_id": 21 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 333 + } + ], + "mhaps_target_id": 99 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 302 + } + ], + "mhaps_target_id": 96 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 299 + } + ], + "mhaps_target_id": 95 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 230 + } + ], + "mhaps_target_id": 94 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 268 + } + ], + "mhaps_target_id": 93 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 301 + } + ], + "mhaps_target_id": 30 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 271 + } + ], + "mhaps_target_id": 46 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 260 + } + ], + "mhaps_target_id": 86 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 358 + } + ], + "mhaps_target_id": 84 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 329 + } + ], + "mhaps_target_id": 83 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 305 + } + ], + "mhaps_target_id": 79 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 208 + } + ], + "mhaps_target_id": 78 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 360 + } + ], + "mhaps_target_id": 80 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 311 + } + ], + "mhaps_target_id": 81 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 377 + } + ], + "mhaps_target_id": 72 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 446 + } + ], + "mhaps_target_id": 16 + }, + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 361 + } + ], + "mhaps_target_id": 71 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 324 + } + ], + "mhaps_target_id": 76 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 282 + } + ], + "mhaps_target_id": 69 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 208 + } + ], + "mhaps_target_id": 66 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 408 + } + ], + "mhaps_target_id": 63 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 286 + } + ], + "mhaps_target_id": 68 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 363 + } + ], + "mhaps_target_id": 62 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 387 + } + ], + "mhaps_target_id": 61 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 362 + } + ], + "mhaps_target_id": 51 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 316 + } + ], + "mhaps_target_id": 50 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 356 + } + ], + "mhaps_target_id": 31 + }, + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 374 + } + ], + "mhaps_target_id": 49 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 317 + } + ], + "mhaps_target_id": 35 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 288 + } + ], + "mhaps_target_id": 48 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 354 + } + ], + "mhaps_target_id": 43 + }, + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 441 + } + ], + "mhaps_target_id": 33 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 385 + } + ], + "mhaps_target_id": 67 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 156 + } + ], + "mhaps_target_id": 37 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 391 + } + ], + "mhaps_target_id": 3 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 469 + } + ], + "mhaps_target_id": 14 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 276 + } + ], + "mhaps_target_id": 32 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 441 + } + ], + "mhaps_target_id": 85 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 395 + } + ], + "mhaps_target_id": 11 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 305 + } + ], + "mhaps_target_id": 28 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 346 + } + ], + "mhaps_target_id": 26 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 326 + } + ], + "mhaps_target_id": 59 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 382 + } + ], + "mhaps_target_id": 27 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 433 + } + ], + "mhaps_target_id": 87 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 310 + } + ], + "mhaps_target_id": 64 + }, + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 333 + } + ], + "mhaps_target_id": 8 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 350 + } + ], + "mhaps_target_id": 19 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 257 + } + ], + "mhaps_target_id": 36 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 235 + } + ], + "mhaps_target_id": 65 + }, + { + "mhaps": [ + { + "mhap_id": 4, + "reads": 348 + } + ], + "mhaps_target_id": 25 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 335 + } + ], + "mhaps_target_id": 58 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 262 + } + ], + "mhaps_target_id": 73 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 385 + } + ], + "mhaps_target_id": 20 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 289 + } + ], + "mhaps_target_id": 92 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 366 + } + ], + "mhaps_target_id": 24 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 270 + } + ], + "mhaps_target_id": 82 + }, + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 346 + } + ], + "mhaps_target_id": 70 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 293 + } + ], + "mhaps_target_id": 23 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 356 + } + ], + "mhaps_target_id": 57 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 316 + } + ], + "mhaps_target_id": 17 + }, + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 358 + } + ], + "mhaps_target_id": 15 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 366 + } + ], + "mhaps_target_id": 60 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 420 + } + ], + "mhaps_target_id": 18 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 341 + } + ], + "mhaps_target_id": 6 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 392 + } + ], + "mhaps_target_id": 13 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 327 + } + ], + "mhaps_target_id": 9 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 351 + } + ], + "mhaps_target_id": 53 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 287 + } + ], + "mhaps_target_id": 91 + }, + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 420 + } + ], + "mhaps_target_id": 12 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 405 + } + ], + "mhaps_target_id": 22 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 399 + } + ], + "mhaps_target_id": 45 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 395 + } + ], + "mhaps_target_id": 74 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 370 + } + ], + "mhaps_target_id": 7 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 418 + } + ], + "mhaps_target_id": 40 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 261 + } + ], + "mhaps_target_id": 5 + }, + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 439 + } + ], + "mhaps_target_id": 41 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 251 + } + ], + "mhaps_target_id": 52 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 308 + } + ], + "mhaps_target_id": 38 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 398 + } + ], + "mhaps_target_id": 88 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 300 + } + ], + "mhaps_target_id": 4 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 329 + } + ], + "mhaps_target_id": 0 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 250 + } + ], + "mhaps_target_id": 89 + }, + { + "mhaps": [ + { + "mhap_id": 4, + "reads": 340 + } + ], + "mhaps_target_id": 77 + }, + { + "mhaps": [ + { + "mhap_id": 4, + "reads": 303 + } + ], + "mhaps_target_id": 42 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 389 + } + ], + "mhaps_target_id": 34 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 302 + } + ], + "mhaps_target_id": 90 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 338 + } + ], + "mhaps_target_id": 1 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 357 + } + ], + "mhaps_target_id": 39 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 300 + } + ], + "mhaps_target_id": 29 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 293 + } + ], + "mhaps_target_id": 44 + }, + { + "mhaps": [ + { + "mhap_id": 4, + "reads": 358 + } + ], + "mhaps_target_id": 56 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 290 + } + ], + "mhaps_target_id": 10 + } + ] + }, + { + "library_sample_id": 2, + "target_results": [ + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1191 + } + ], + "mhaps_target_id": 2 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1129 + } + ], + "mhaps_target_id": 54 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 920 + }, + { + "mhap_id": 2, + "reads": 291 + } + ], + "mhaps_target_id": 21 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1039 + } + ], + "mhaps_target_id": 99 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1151 + } + ], + "mhaps_target_id": 96 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1177 + } + ], + "mhaps_target_id": 95 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1221 + } + ], + "mhaps_target_id": 94 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1076 + } + ], + "mhaps_target_id": 93 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1090 + } + ], + "mhaps_target_id": 30 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1137 + } + ], + "mhaps_target_id": 46 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 884 + } + ], + "mhaps_target_id": 86 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1417 + } + ], + "mhaps_target_id": 84 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1282 + } + ], + "mhaps_target_id": 83 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1295 + } + ], + "mhaps_target_id": 79 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1488 + } + ], + "mhaps_target_id": 78 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1455 + } + ], + "mhaps_target_id": 80 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1375 + } + ], + "mhaps_target_id": 81 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 928 + } + ], + "mhaps_target_id": 97 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1439 + } + ], + "mhaps_target_id": 75 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1315 + } + ], + "mhaps_target_id": 72 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1434 + } + ], + "mhaps_target_id": 16 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 997 + } + ], + "mhaps_target_id": 71 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1208 + } + ], + "mhaps_target_id": 76 + }, + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 788 + }, + { + "mhap_id": 2, + "reads": 321 + } + ], + "mhaps_target_id": 69 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1354 + } + ], + "mhaps_target_id": 66 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1234 + } + ], + "mhaps_target_id": 63 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1117 + } + ], + "mhaps_target_id": 68 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 833 + }, + { + "mhap_id": 2, + "reads": 336 + } + ], + "mhaps_target_id": 62 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1451 + } + ], + "mhaps_target_id": 61 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1283 + } + ], + "mhaps_target_id": 51 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 915 + }, + { + "mhap_id": 0, + "reads": 267 + } + ], + "mhaps_target_id": 50 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1209 + } + ], + "mhaps_target_id": 31 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 2063 + }, + { + "mhap_id": 2, + "reads": 450 + } + ], + "mhaps_target_id": 49 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1319 + } + ], + "mhaps_target_id": 35 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1196 + } + ], + "mhaps_target_id": 48 + }, + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 1507 + } + ], + "mhaps_target_id": 98 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 843 + }, + { + "mhap_id": 2, + "reads": 269 + } + ], + "mhaps_target_id": 47 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1411 + } + ], + "mhaps_target_id": 43 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1334 + } + ], + "mhaps_target_id": 33 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 937 + }, + { + "mhap_id": 1, + "reads": 318 + } + ], + "mhaps_target_id": 67 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1066 + } + ], + "mhaps_target_id": 37 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1128 + } + ], + "mhaps_target_id": 3 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1500 + } + ], + "mhaps_target_id": 14 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1276 + } + ], + "mhaps_target_id": 32 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1370 + } + ], + "mhaps_target_id": 85 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1011 + }, + { + "mhap_id": 1, + "reads": 347 + } + ], + "mhaps_target_id": 11 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1288 + } + ], + "mhaps_target_id": 28 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 955 + }, + { + "mhap_id": 1, + "reads": 313 + } + ], + "mhaps_target_id": 26 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1171 + } + ], + "mhaps_target_id": 59 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1197 + } + ], + "mhaps_target_id": 27 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 952 + }, + { + "mhap_id": 0, + "reads": 403 + } + ], + "mhaps_target_id": 87 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1100 + } + ], + "mhaps_target_id": 64 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1133 + } + ], + "mhaps_target_id": 8 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1293 + } + ], + "mhaps_target_id": 19 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1257 + } + ], + "mhaps_target_id": 36 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1338 + } + ], + "mhaps_target_id": 65 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 934 + }, + { + "mhap_id": 3, + "reads": 318 + } + ], + "mhaps_target_id": 25 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1371 + } + ], + "mhaps_target_id": 58 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 933 + }, + { + "mhap_id": 1, + "reads": 338 + } + ], + "mhaps_target_id": 73 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 712 + }, + { + "mhap_id": 1, + "reads": 289 + } + ], + "mhaps_target_id": 20 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1413 + } + ], + "mhaps_target_id": 92 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1196 + } + ], + "mhaps_target_id": 24 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1348 + } + ], + "mhaps_target_id": 82 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1207 + } + ], + "mhaps_target_id": 70 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 909 + } + ], + "mhaps_target_id": 23 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1135 + } + ], + "mhaps_target_id": 57 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 951 + }, + { + "mhap_id": 1, + "reads": 318 + } + ], + "mhaps_target_id": 17 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 964 + }, + { + "mhap_id": 0, + "reads": 294 + } + ], + "mhaps_target_id": 15 + }, + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 1397 + } + ], + "mhaps_target_id": 60 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1251 + } + ], + "mhaps_target_id": 18 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 910 + }, + { + "mhap_id": 0, + "reads": 337 + } + ], + "mhaps_target_id": 6 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1039 + }, + { + "mhap_id": 0, + "reads": 325 + } + ], + "mhaps_target_id": 13 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1489 + } + ], + "mhaps_target_id": 9 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 814 + }, + { + "mhap_id": 1, + "reads": 267 + } + ], + "mhaps_target_id": 53 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1186 + } + ], + "mhaps_target_id": 91 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1496 + } + ], + "mhaps_target_id": 12 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1454 + } + ], + "mhaps_target_id": 22 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1224 + } + ], + "mhaps_target_id": 45 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1429 + } + ], + "mhaps_target_id": 74 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1097 + }, + { + "mhap_id": 1, + "reads": 350 + } + ], + "mhaps_target_id": 7 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1493 + } + ], + "mhaps_target_id": 40 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1024 + } + ], + "mhaps_target_id": 5 + }, + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 1365 + } + ], + "mhaps_target_id": 41 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1097 + } + ], + "mhaps_target_id": 52 + }, + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 819 + }, + { + "mhap_id": 2, + "reads": 273 + } + ], + "mhaps_target_id": 38 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1121 + } + ], + "mhaps_target_id": 88 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1227 + } + ], + "mhaps_target_id": 4 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1058 + }, + { + "mhap_id": 3, + "reads": 245 + } + ], + "mhaps_target_id": 0 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 732 + }, + { + "mhap_id": 3, + "reads": 253 + } + ], + "mhaps_target_id": 89 + }, + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 883 + }, + { + "mhap_id": 2, + "reads": 299 + } + ], + "mhaps_target_id": 77 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1076 + } + ], + "mhaps_target_id": 42 + }, + { + "mhaps": [ + { + "mhap_id": 3, + "reads": 991 + } + ], + "mhaps_target_id": 34 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1158 + } + ], + "mhaps_target_id": 90 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 1341 + } + ], + "mhaps_target_id": 1 + }, + { + "mhaps": [ + { + "mhap_id": 1, + "reads": 992 + }, + { + "mhap_id": 0, + "reads": 302 + } + ], + "mhaps_target_id": 39 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1184 + } + ], + "mhaps_target_id": 29 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1304 + } + ], + "mhaps_target_id": 44 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 810 + }, + { + "mhap_id": 3, + "reads": 364 + } + ], + "mhaps_target_id": 56 + }, + { + "mhaps": [ + { + "mhap_id": 0, + "reads": 1356 + } + ], + "mhaps_target_id": 55 + }, + { + "mhaps": [ + { + "mhap_id": 2, + "reads": 1109 + } + ], + "mhaps_target_id": 10 + } + ] + } + ] + } + ], + "read_counts_by_stage": [ + { + "bioinformatics_run_id": 0, + "read_counts_by_library_sample_by_stage": [ + { + "library_sample_id": 1, + "read_counts_for_targets": [ + { + "stages": [ + { + "reads": 15285, + "stage": "final" + }, + { + "reads": 16686, + "stage": "demultiplexed" + } + ], + "target_id": 32 + }, + { + "stages": [ + { + "reads": 2278, + "stage": "final" + }, + { + "reads": 2448, + "stage": "demultiplexed" + } + ], + "target_id": 31 + }, + { + "stages": [ + { + "reads": 1089, + "stage": "final" + }, + { + "reads": 1172, + "stage": "demultiplexed" + } + ], + "target_id": 13 + }, + { + "stages": [ + { + "reads": 19391, + "stage": "final" + }, + { + "reads": 20615, + "stage": "demultiplexed" + } + ], + "target_id": 12 + }, + { + "stages": [ + { + "reads": 10595, + "stage": "final" + }, + { + "reads": 11645, + "stage": "demultiplexed" + } + ], + "target_id": 51 + }, + { + "stages": [ + { + "reads": 378, + "stage": "final" + }, + { + "reads": 408, + "stage": "demultiplexed" + } + ], + "target_id": 52 + }, + { + "stages": [ + { + "reads": 16586, + "stage": "final" + }, + { + "reads": 17719, + "stage": "demultiplexed" + } + ], + "target_id": 50 + }, + { + "stages": [ + { + "reads": 869, + "stage": "final" + }, + { + "reads": 936, + "stage": "demultiplexed" + } + ], + "target_id": 0 + }, + { + "stages": [ + { + "reads": 6967, + "stage": "final" + }, + { + "reads": 7810, + "stage": "demultiplexed" + } + ], + "target_id": 1 + }, + { + "stages": [ + { + "reads": 1010, + "stage": "final" + }, + { + "reads": 1080, + "stage": "demultiplexed" + } + ], + "target_id": 2 + }, + { + "stages": [ + { + "reads": 20051, + "stage": "final" + }, + { + "reads": 21658, + "stage": "demultiplexed" + } + ], + "target_id": 3 + }, + { + "stages": [ + { + "reads": 24537, + "stage": "final" + }, + { + "reads": 26316, + "stage": "demultiplexed" + } + ], + "target_id": 4 + }, + { + "stages": [ + { + "reads": 300, + "stage": "final" + }, + { + "reads": 327, + "stage": "demultiplexed" + } + ], + "target_id": 5 + }, + { + "stages": [ + { + "reads": 4256, + "stage": "final" + }, + { + "reads": 4550, + "stage": "demultiplexed" + } + ], + "target_id": 6 + }, + { + "stages": [ + { + "reads": 958, + "stage": "final" + }, + { + "reads": 1028, + "stage": "demultiplexed" + } + ], + "target_id": 7 + }, + { + "stages": [ + { + "reads": 31313, + "stage": "final" + }, + { + "reads": 34255, + "stage": "demultiplexed" + } + ], + "target_id": 8 + }, + { + "stages": [ + { + "reads": 2554, + "stage": "final" + }, + { + "reads": 2798, + "stage": "demultiplexed" + } + ], + "target_id": 9 + }, + { + "stages": [ + { + "reads": 1213, + "stage": "final" + }, + { + "reads": 1271, + "stage": "demultiplexed" + } + ], + "target_id": 10 + }, + { + "stages": [ + { + "reads": 1379, + "stage": "final" + }, + { + "reads": 1462, + "stage": "demultiplexed" + } + ], + "target_id": 11 + }, + { + "stages": [ + { + "reads": 2310, + "stage": "final" + }, + { + "reads": 2421, + "stage": "demultiplexed" + } + ], + "target_id": 14 + }, + { + "stages": [ + { + "reads": 2014, + "stage": "final" + }, + { + "reads": 2126, + "stage": "demultiplexed" + } + ], + "target_id": 15 + }, + { + "stages": [ + { + "reads": 44681, + "stage": "final" + }, + { + "reads": 47559, + "stage": "demultiplexed" + } + ], + "target_id": 16 + }, + { + "stages": [ + { + "reads": 273, + "stage": "demultiplexed" + } + ], + "target_id": 17 + }, + { + "stages": [ + { + "reads": 384, + "stage": "final" + }, + { + "reads": 410, + "stage": "demultiplexed" + } + ], + "target_id": 18 + }, + { + "stages": [ + { + "reads": 507, + "stage": "final" + }, + { + "reads": 594, + "stage": "demultiplexed" + } + ], + "target_id": 24 + }, + { + "stages": [ + { + "reads": 226, + "stage": "demultiplexed" + } + ], + "target_id": 19 + }, + { + "stages": [ + { + "reads": 3895, + "stage": "final" + }, + { + "reads": 4189, + "stage": "demultiplexed" + } + ], + "target_id": 20 + }, + { + "stages": [ + { + "reads": 1579, + "stage": "final" + }, + { + "reads": 1650, + "stage": "demultiplexed" + } + ], + "target_id": 21 + }, + { + "stages": [ + { + "reads": 222, + "stage": "demultiplexed" + } + ], + "target_id": 22 + }, + { + "stages": [ + { + "reads": 170, + "stage": "demultiplexed" + } + ], + "target_id": 23 + }, + { + "stages": [ + { + "reads": 150, + "stage": "demultiplexed" + } + ], + "target_id": 25 + }, + { + "stages": [ + { + "reads": 1450, + "stage": "final" + }, + { + "reads": 1537, + "stage": "demultiplexed" + } + ], + "target_id": 26 + }, + { + "stages": [ + { + "reads": 23438, + "stage": "final" + }, + { + "reads": 25268, + "stage": "demultiplexed" + } + ], + "target_id": 27 + }, + { + "stages": [ + { + "reads": 128, + "stage": "demultiplexed" + } + ], + "target_id": 28 + }, + { + "stages": [ + { + "reads": 269, + "stage": "demultiplexed" + } + ], + "target_id": 29 + }, + { + "stages": [ + { + "reads": 11091, + "stage": "final" + }, + { + "reads": 11848, + "stage": "demultiplexed" + } + ], + "target_id": 30 + }, + { + "stages": [ + { + "reads": 6522, + "stage": "final" + }, + { + "reads": 7079, + "stage": "demultiplexed" + } + ], + "target_id": 62 + }, + { + "stages": [ + { + "reads": 25203, + "stage": "final" + }, + { + "reads": 27285, + "stage": "demultiplexed" + } + ], + "target_id": 63 + }, + { + "stages": [ + { + "reads": 26863, + "stage": "final" + }, + { + "reads": 29317, + "stage": "demultiplexed" + } + ], + "target_id": 64 + }, + { + "stages": [ + { + "reads": 13601, + "stage": "final" + }, + { + "reads": 14870, + "stage": "demultiplexed" + } + ], + "target_id": 39 + }, + { + "stages": [ + { + "reads": 282, + "stage": "final" + }, + { + "reads": 298, + "stage": "demultiplexed" + } + ], + "target_id": 40 + }, + { + "stages": [ + { + "reads": 33117, + "stage": "final" + }, + { + "reads": 35774, + "stage": "demultiplexed" + } + ], + "target_id": 41 + }, + { + "stages": [ + { + "reads": 7336, + "stage": "final" + }, + { + "reads": 8382, + "stage": "demultiplexed" + } + ], + "target_id": 42 + }, + { + "stages": [ + { + "reads": 1995, + "stage": "final" + }, + { + "reads": 2099, + "stage": "demultiplexed" + } + ], + "target_id": 43 + }, + { + "stages": [ + { + "reads": 982, + "stage": "final" + }, + { + "reads": 1036, + "stage": "demultiplexed" + } + ], + "target_id": 44 + }, + { + "stages": [ + { + "reads": 6197, + "stage": "final" + }, + { + "reads": 6765, + "stage": "demultiplexed" + } + ], + "target_id": 45 + }, + { + "stages": [ + { + "reads": 19559, + "stage": "final" + }, + { + "reads": 20984, + "stage": "demultiplexed" + } + ], + "target_id": 46 + }, + { + "stages": [ + { + "reads": 1167, + "stage": "final" + }, + { + "reads": 1229, + "stage": "demultiplexed" + } + ], + "target_id": 47 + }, + { + "stages": [ + { + "reads": 5895, + "stage": "final" + }, + { + "reads": 6380, + "stage": "demultiplexed" + } + ], + "target_id": 48 + }, + { + "stages": [ + { + "reads": 733, + "stage": "final" + }, + { + "reads": 786, + "stage": "demultiplexed" + } + ], + "target_id": 49 + }, + { + "stages": [ + { + "reads": 3576, + "stage": "final" + }, + { + "reads": 3856, + "stage": "demultiplexed" + } + ], + "target_id": 34 + }, + { + "stages": [ + { + "reads": 4213, + "stage": "final" + }, + { + "reads": 4575, + "stage": "demultiplexed" + } + ], + "target_id": 33 + }, + { + "stages": [ + { + "reads": 860, + "stage": "final" + }, + { + "reads": 942, + "stage": "demultiplexed" + } + ], + "target_id": 54 + }, + { + "stages": [ + { + "reads": 506, + "stage": "final" + }, + { + "reads": 546, + "stage": "demultiplexed" + } + ], + "target_id": 55 + }, + { + "stages": [ + { + "reads": 17721, + "stage": "final" + }, + { + "reads": 19024, + "stage": "demultiplexed" + } + ], + "target_id": 56 + }, + { + "stages": [ + { + "reads": 516, + "stage": "final" + }, + { + "reads": 546, + "stage": "demultiplexed" + } + ], + "target_id": 58 + }, + { + "stages": [ + { + "reads": 283, + "stage": "final" + }, + { + "reads": 298, + "stage": "demultiplexed" + } + ], + "target_id": 59 + }, + { + "stages": [ + { + "reads": 7629, + "stage": "final" + }, + { + "reads": 8260, + "stage": "demultiplexed" + } + ], + "target_id": 57 + }, + { + "stages": [ + { + "reads": 2117, + "stage": "final" + }, + { + "reads": 2224, + "stage": "demultiplexed" + } + ], + "target_id": 60 + }, + { + "stages": [ + { + "reads": 784, + "stage": "final" + }, + { + "reads": 826, + "stage": "demultiplexed" + } + ], + "target_id": 61 + }, + { + "stages": [ + { + "reads": 579, + "stage": "final" + }, + { + "reads": 622, + "stage": "demultiplexed" + } + ], + "target_id": 65 + }, + { + "stages": [ + { + "reads": 527, + "stage": "final" + }, + { + "reads": 563, + "stage": "demultiplexed" + } + ], + "target_id": 66 + }, + { + "stages": [ + { + "reads": 2247, + "stage": "final" + }, + { + "reads": 2384, + "stage": "demultiplexed" + } + ], + "target_id": 67 + }, + { + "stages": [ + { + "reads": 419, + "stage": "final" + }, + { + "reads": 444, + "stage": "demultiplexed" + } + ], + "target_id": 68 + }, + { + "stages": [ + { + "reads": 14122, + "stage": "final" + }, + { + "reads": 16039, + "stage": "demultiplexed" + } + ], + "target_id": 69 + }, + { + "stages": [ + { + "reads": 1009, + "stage": "final" + }, + { + "reads": 1071, + "stage": "demultiplexed" + } + ], + "target_id": 80 + }, + { + "stages": [ + { + "reads": 274, + "stage": "final" + }, + { + "reads": 300, + "stage": "demultiplexed" + } + ], + "target_id": 35 + }, + { + "stages": [ + { + "reads": 392, + "stage": "final" + }, + { + "reads": 426, + "stage": "demultiplexed" + } + ], + "target_id": 37 + }, + { + "stages": [ + { + "reads": 3516, + "stage": "final" + }, + { + "reads": 3818, + "stage": "demultiplexed" + } + ], + "target_id": 36 + }, + { + "stages": [ + { + "reads": 2317, + "stage": "final" + }, + { + "reads": 2458, + "stage": "demultiplexed" + } + ], + "target_id": 76 + }, + { + "stages": [ + { + "reads": 16859, + "stage": "final" + }, + { + "reads": 17934, + "stage": "demultiplexed" + } + ], + "target_id": 75 + }, + { + "stages": [ + { + "reads": 4739, + "stage": "final" + }, + { + "reads": 5188, + "stage": "demultiplexed" + } + ], + "target_id": 81 + }, + { + "stages": [ + { + "reads": 19, + "stage": "demultiplexed" + } + ], + "target_id": 82 + }, + { + "stages": [ + { + "reads": 371, + "stage": "final" + }, + { + "reads": 413, + "stage": "demultiplexed" + } + ], + "target_id": 78 + }, + { + "stages": [ + { + "reads": 537, + "stage": "final" + }, + { + "reads": 595, + "stage": "demultiplexed" + } + ], + "target_id": 79 + }, + { + "stages": [ + { + "reads": 11176, + "stage": "final" + }, + { + "reads": 12286, + "stage": "demultiplexed" + } + ], + "target_id": 70 + }, + { + "stages": [ + { + "reads": 2539, + "stage": "final" + }, + { + "reads": 2663, + "stage": "demultiplexed" + } + ], + "target_id": 71 + }, + { + "stages": [ + { + "reads": 232, + "stage": "demultiplexed" + } + ], + "target_id": 72 + }, + { + "stages": [ + { + "reads": 172, + "stage": "demultiplexed" + } + ], + "target_id": 73 + }, + { + "stages": [ + { + "reads": 1901, + "stage": "final" + }, + { + "reads": 2051, + "stage": "demultiplexed" + } + ], + "target_id": 74 + }, + { + "stages": [ + { + "reads": 22789, + "stage": "final" + }, + { + "reads": 25098, + "stage": "demultiplexed" + } + ], + "target_id": 83 + }, + { + "stages": [ + { + "reads": 3622, + "stage": "final" + }, + { + "reads": 3947, + "stage": "demultiplexed" + } + ], + "target_id": 84 + }, + { + "stages": [ + { + "reads": 2182, + "stage": "final" + }, + { + "reads": 2296, + "stage": "demultiplexed" + } + ], + "target_id": 85 + }, + { + "stages": [ + { + "reads": 5344, + "stage": "final" + }, + { + "reads": 5849, + "stage": "demultiplexed" + } + ], + "target_id": 86 + }, + { + "stages": [ + { + "reads": 1206, + "stage": "final" + }, + { + "reads": 1279, + "stage": "demultiplexed" + } + ], + "target_id": 87 + }, + { + "stages": [ + { + "reads": 16298, + "stage": "final" + }, + { + "reads": 17431, + "stage": "demultiplexed" + } + ], + "target_id": 88 + }, + { + "stages": [ + { + "reads": 106, + "stage": "demultiplexed" + } + ], + "target_id": 89 + }, + { + "stages": [ + { + "reads": 2857, + "stage": "final" + }, + { + "reads": 3115, + "stage": "demultiplexed" + } + ], + "target_id": 90 + }, + { + "stages": [ + { + "reads": 710, + "stage": "final" + }, + { + "reads": 774, + "stage": "demultiplexed" + } + ], + "target_id": 38 + }, + { + "stages": [ + { + "reads": 775, + "stage": "final" + }, + { + "reads": 813, + "stage": "demultiplexed" + } + ], + "target_id": 91 + }, + { + "stages": [ + { + "reads": 618, + "stage": "final" + }, + { + "reads": 655, + "stage": "demultiplexed" + } + ], + "target_id": 92 + }, + { + "stages": [ + { + "reads": 4, + "stage": "demultiplexed" + } + ], + "target_id": 93 + }, + { + "stages": [ + { + "reads": 1545, + "stage": "final" + }, + { + "reads": 1630, + "stage": "demultiplexed" + } + ], + "target_id": 94 + }, + { + "stages": [ + { + "reads": 170, + "stage": "demultiplexed" + } + ], + "target_id": 96 + }, + { + "stages": [ + { + "reads": 34752, + "stage": "final" + }, + { + "reads": 37672, + "stage": "demultiplexed" + } + ], + "target_id": 95 + }, + { + "stages": [ + { + "reads": 1324, + "stage": "final" + }, + { + "reads": 1416, + "stage": "demultiplexed" + } + ], + "target_id": 97 + }, + { + "stages": [ + { + "reads": 1590, + "stage": "final" + }, + { + "reads": 1663, + "stage": "demultiplexed" + } + ], + "target_id": 98 + }, + { + "stages": [ + { + "reads": 46824, + "stage": "final" + }, + { + "reads": 50413, + "stage": "demultiplexed" + } + ], + "target_id": 99 + } + ], + "total_raw_count": 806549 + }, + { + "library_sample_id": 0, + "read_counts_for_targets": [ + { + "stages": [ + { + "reads": 31484, + "stage": "final" + } + ], + "target_id": 51 + }, + { + "stages": [ + { + "reads": 24076, + "stage": "final" + } + ], + "target_id": 52 + }, + { + "stages": [ + { + "reads": 35619, + "stage": "final" + } + ], + "target_id": 50 + }, + { + "stages": [ + { + "reads": 33465, + "stage": "final" + } + ], + "target_id": 0 + }, + { + "stages": [ + { + "reads": 32066, + "stage": "final" + } + ], + "target_id": 1 + }, + { + "stages": [ + { + "reads": 38609, + "stage": "final" + } + ], + "target_id": 2 + }, + { + "stages": [ + { + "reads": 48414, + "stage": "final" + } + ], + "target_id": 3 + }, + { + "stages": [ + { + "reads": 36695, + "stage": "final" + } + ], + "target_id": 4 + }, + { + "stages": [ + { + "reads": 25447, + "stage": "final" + } + ], + "target_id": 5 + }, + { + "stages": [ + { + "reads": 21610, + "stage": "final" + } + ], + "target_id": 6 + }, + { + "stages": [ + { + "reads": 42576, + "stage": "final" + } + ], + "target_id": 7 + }, + { + "stages": [ + { + "reads": 49627, + "stage": "final" + } + ], + "target_id": 8 + }, + { + "stages": [ + { + "reads": 45595, + "stage": "final" + } + ], + "target_id": 9 + }, + { + "stages": [ + { + "reads": 17913, + "stage": "final" + } + ], + "target_id": 10 + }, + { + "stages": [ + { + "reads": 42252, + "stage": "final" + } + ], + "target_id": 11 + }, + { + "stages": [ + { + "reads": 49641, + "stage": "final" + } + ], + "target_id": 12 + }, + { + "stages": [ + { + "reads": 49953, + "stage": "final" + } + ], + "target_id": 13 + }, + { + "stages": [ + { + "reads": 33844, + "stage": "final" + } + ], + "target_id": 14 + }, + { + "stages": [ + { + "reads": 25697, + "stage": "final" + } + ], + "target_id": 15 + }, + { + "stages": [ + { + "reads": 46915, + "stage": "final" + } + ], + "target_id": 16 + }, + { + "stages": [ + { + "reads": 49966, + "stage": "final" + } + ], + "target_id": 17 + }, + { + "stages": [ + { + "reads": 38480, + "stage": "final" + } + ], + "target_id": 18 + }, + { + "stages": [ + { + "reads": 18960, + "stage": "final" + } + ], + "target_id": 19 + }, + { + "stages": [ + { + "reads": 33183, + "stage": "final" + } + ], + "target_id": 20 + }, + { + "stages": [ + { + "reads": 31147, + "stage": "final" + } + ], + "target_id": 21 + }, + { + "stages": [ + { + "reads": 35366, + "stage": "final" + } + ], + "target_id": 22 + }, + { + "stages": [ + { + "reads": 29611, + "stage": "final" + } + ], + "target_id": 23 + }, + { + "stages": [ + { + "reads": 27075, + "stage": "final" + } + ], + "target_id": 24 + }, + { + "stages": [ + { + "reads": 36178, + "stage": "final" + } + ], + "target_id": 25 + }, + { + "stages": [ + { + "reads": 28161, + "stage": "final" + } + ], + "target_id": 26 + }, + { + "stages": [ + { + "reads": 48791, + "stage": "final" + } + ], + "target_id": 27 + }, + { + "stages": [ + { + "reads": 15826, + "stage": "final" + } + ], + "target_id": 28 + }, + { + "stages": [ + { + "reads": 43173, + "stage": "final" + } + ], + "target_id": 29 + }, + { + "stages": [ + { + "reads": 49946, + "stage": "final" + } + ], + "target_id": 30 + }, + { + "stages": [ + { + "reads": 45402, + "stage": "final" + } + ], + "target_id": 31 + }, + { + "stages": [ + { + "reads": 29636, + "stage": "final" + } + ], + "target_id": 32 + }, + { + "stages": [ + { + "reads": 47034, + "stage": "final" + } + ], + "target_id": 33 + }, + { + "stages": [ + { + "reads": 49955, + "stage": "final" + } + ], + "target_id": 34 + }, + { + "stages": [ + { + "reads": 16463, + "stage": "final" + } + ], + "target_id": 35 + }, + { + "stages": [ + { + "reads": 49802, + "stage": "final" + } + ], + "target_id": 36 + }, + { + "stages": [ + { + "reads": 24539, + "stage": "final" + } + ], + "target_id": 37 + }, + { + "stages": [ + { + "reads": 41530, + "stage": "final" + } + ], + "target_id": 38 + }, + { + "stages": [ + { + "reads": 42184, + "stage": "final" + } + ], + "target_id": 39 + }, + { + "stages": [ + { + "reads": 28057, + "stage": "final" + } + ], + "target_id": 40 + }, + { + "stages": [ + { + "reads": 27730, + "stage": "final" + } + ], + "target_id": 41 + }, + { + "stages": [ + { + "reads": 49338, + "stage": "final" + } + ], + "target_id": 42 + }, + { + "stages": [ + { + "reads": 44481, + "stage": "final" + } + ], + "target_id": 43 + }, + { + "stages": [ + { + "reads": 49365, + "stage": "final" + } + ], + "target_id": 44 + }, + { + "stages": [ + { + "reads": 39009, + "stage": "final" + } + ], + "target_id": 45 + }, + { + "stages": [ + { + "reads": 37407, + "stage": "final" + } + ], + "target_id": 46 + }, + { + "stages": [ + { + "reads": 29934, + "stage": "final" + } + ], + "target_id": 47 + }, + { + "stages": [ + { + "reads": 49971, + "stage": "final" + } + ], + "target_id": 48 + }, + { + "stages": [ + { + "reads": 23924, + "stage": "final" + } + ], + "target_id": 49 + }, + { + "stages": [ + { + "reads": 29713, + "stage": "final" + } + ], + "target_id": 54 + }, + { + "stages": [ + { + "reads": 38625, + "stage": "final" + } + ], + "target_id": 55 + }, + { + "stages": [ + { + "reads": 49969, + "stage": "final" + } + ], + "target_id": 56 + }, + { + "stages": [ + { + "reads": 45069, + "stage": "final" + } + ], + "target_id": 57 + }, + { + "stages": [ + { + "reads": 24050, + "stage": "final" + } + ], + "target_id": 58 + }, + { + "stages": [ + { + "reads": 41999, + "stage": "final" + } + ], + "target_id": 59 + }, + { + "stages": [ + { + "reads": 48335, + "stage": "final" + } + ], + "target_id": 60 + }, + { + "stages": [ + { + "reads": 41343, + "stage": "final" + } + ], + "target_id": 61 + }, + { + "stages": [ + { + "reads": 49944, + "stage": "final" + } + ], + "target_id": 62 + }, + { + "stages": [ + { + "reads": 37382, + "stage": "final" + } + ], + "target_id": 63 + }, + { + "stages": [ + { + "reads": 44271, + "stage": "final" + } + ], + "target_id": 64 + }, + { + "stages": [ + { + "reads": 24451, + "stage": "final" + } + ], + "target_id": 65 + }, + { + "stages": [ + { + "reads": 49746, + "stage": "final" + } + ], + "target_id": 66 + }, + { + "stages": [ + { + "reads": 49910, + "stage": "final" + } + ], + "target_id": 67 + }, + { + "stages": [ + { + "reads": 25672, + "stage": "final" + } + ], + "target_id": 68 + }, + { + "stages": [ + { + "reads": 35612, + "stage": "final" + } + ], + "target_id": 69 + }, + { + "stages": [ + { + "reads": 49786, + "stage": "final" + } + ], + "target_id": 70 + }, + { + "stages": [ + { + "reads": 29564, + "stage": "final" + } + ], + "target_id": 71 + }, + { + "stages": [ + { + "reads": 21816, + "stage": "final" + } + ], + "target_id": 72 + }, + { + "stages": [ + { + "reads": 36326, + "stage": "final" + } + ], + "target_id": 73 + }, + { + "stages": [ + { + "reads": 29426, + "stage": "final" + } + ], + "target_id": 74 + }, + { + "stages": [ + { + "reads": 31697, + "stage": "final" + } + ], + "target_id": 75 + }, + { + "stages": [ + { + "reads": 44365, + "stage": "final" + } + ], + "target_id": 76 + }, + { + "stages": [ + { + "reads": 5984, + "stage": "final" + } + ], + "target_id": 77 + }, + { + "stages": [ + { + "reads": 37749, + "stage": "final" + } + ], + "target_id": 78 + }, + { + "stages": [ + { + "reads": 46063, + "stage": "final" + } + ], + "target_id": 79 + }, + { + "stages": [ + { + "reads": 37213, + "stage": "final" + } + ], + "target_id": 80 + }, + { + "stages": [ + { + "reads": 43031, + "stage": "final" + } + ], + "target_id": 81 + }, + { + "stages": [ + { + "reads": 14142, + "stage": "final" + } + ], + "target_id": 82 + }, + { + "stages": [ + { + "reads": 49745, + "stage": "final" + } + ], + "target_id": 83 + }, + { + "stages": [ + { + "reads": 34260, + "stage": "final" + } + ], + "target_id": 84 + }, + { + "stages": [ + { + "reads": 30666, + "stage": "final" + } + ], + "target_id": 85 + }, + { + "stages": [ + { + "reads": 47489, + "stage": "final" + } + ], + "target_id": 86 + }, + { + "stages": [ + { + "reads": 49972, + "stage": "final" + } + ], + "target_id": 87 + }, + { + "stages": [ + { + "reads": 37605, + "stage": "final" + } + ], + "target_id": 88 + }, + { + "stages": [ + { + "reads": 19230, + "stage": "final" + } + ], + "target_id": 89 + }, + { + "stages": [ + { + "reads": 49701, + "stage": "final" + } + ], + "target_id": 90 + }, + { + "stages": [ + { + "reads": 41271, + "stage": "final" + } + ], + "target_id": 91 + }, + { + "stages": [ + { + "reads": 32967, + "stage": "final" + } + ], + "target_id": 92 + }, + { + "stages": [ + { + "reads": 3634, + "stage": "final" + } + ], + "target_id": 93 + }, + { + "stages": [ + { + "reads": 28109, + "stage": "final" + } + ], + "target_id": 94 + }, + { + "stages": [ + { + "reads": 37013, + "stage": "final" + } + ], + "target_id": 95 + }, + { + "stages": [ + { + "reads": 29147, + "stage": "final" + } + ], + "target_id": 96 + }, + { + "stages": [ + { + "reads": 34162, + "stage": "final" + } + ], + "target_id": 97 + }, + { + "stages": [ + { + "reads": 49728, + "stage": "final" + } + ], + "target_id": 98 + }, + { + "stages": [ + { + "reads": 49740, + "stage": "final" + } + ], + "target_id": 99 + } + ], + "total_raw_count": 6858739 + } + ] + } + ] +} diff --git a/tests/data/minimum_pmo_example.json b/tests/data/minimum_pmo_example.json index 9649871..55305af 100644 --- a/tests/data/minimum_pmo_example.json +++ b/tests/data/minimum_pmo_example.json @@ -2,8 +2,25 @@ "bioinformatics_methods_info" : [ { - "additional_methods" : + "methods" : [ + { + "program" : "SeekDeep extractorPairedEnd", + "program_description" : "Takes raw paired-end reads and demultiplexes on primers and does QC filtering", + "program_version" : "v2.6.5" + }, + { + "additional_argument" : + [ + "--illumina", + "--qualThres 25,20", + "--trimFront 1", + "--trimBack 1" + ], + "program" : "SeekDeep qluster", + "program_description" : "Takes sequences per sample per target and clusters them", + "program_version" : "v2.6.5" + }, { "additional_argument" : [ @@ -18,27 +35,7 @@ "program_description" : "Compare across samples for each target to create population level identifiers and do post artifact cleanup", "program_version" : "v2.6.5" } - ], - "bioinformatics_method_name" : "SeekDeep", - "demultiplexing_method" : - { - "program" : "SeekDeep extractorPairedEnd", - "program_description" : "Takes raw paired-end reads and demultiplexes on primers and does QC filtering", - "program_version" : "v2.6.5" - }, - "denoising_method" : - { - "additional_argument" : - [ - "--illumina", - "--qualThres 25,20", - "--trimFront 1", - "--trimBack 1" - ], - "program" : "SeekDeep qluster", - "program_description" : "Takes sequences per sample per target and clusters them", - "program_version" : "v2.6.5" - } + ] } ], "bioinformatics_run_info" : @@ -2187,7 +2184,7 @@ "plate_name" : "8", "plate_row" : "C" }, - "library_sample_name" : "8025874217", + "library_sample_name" : "8025874217_lib_name", "panel_id" : 0, "sequencing_info_id" : 0, "specimen_id" : 0 @@ -2199,7 +2196,7 @@ "plate_name" : "8", "plate_row" : "B" }, - "library_sample_name" : "8025874266", + "library_sample_name" : "8025874266_lib_name", "panel_id" : 0, "sequencing_info_id" : 0, "specimen_id" : 1 @@ -2322,7 +2319,7 @@ ], "pmo_header" : { - "creation_date" : "2025-07-22", + "creation_date" : "2025-11-03", "generation_method" : { "program_name" : "elucidator combingallintopmojson", @@ -2352,11 +2349,11 @@ "stages" : [ { - "read_count" : 15285, + "reads" : 15285, "stage" : "final" }, { - "read_count" : 16686, + "reads" : 16686, "stage" : "demultiplexed" } ], @@ -2366,11 +2363,11 @@ "stages" : [ { - "read_count" : 2278, + "reads" : 2278, "stage" : "final" }, { - "read_count" : 2448, + "reads" : 2448, "stage" : "demultiplexed" } ], @@ -2380,11 +2377,11 @@ "stages" : [ { - "read_count" : 1089, + "reads" : 1089, "stage" : "final" }, { - "read_count" : 1172, + "reads" : 1172, "stage" : "demultiplexed" } ], @@ -2394,11 +2391,11 @@ "stages" : [ { - "read_count" : 19391, + "reads" : 19391, "stage" : "final" }, { - "read_count" : 20615, + "reads" : 20615, "stage" : "demultiplexed" } ], @@ -2408,11 +2405,11 @@ "stages" : [ { - "read_count" : 10595, + "reads" : 10595, "stage" : "final" }, { - "read_count" : 11645, + "reads" : 11645, "stage" : "demultiplexed" } ], @@ -2422,11 +2419,11 @@ "stages" : [ { - "read_count" : 378, + "reads" : 378, "stage" : "final" }, { - "read_count" : 408, + "reads" : 408, "stage" : "demultiplexed" } ], @@ -2436,11 +2433,11 @@ "stages" : [ { - "read_count" : 16586, + "reads" : 16586, "stage" : "final" }, { - "read_count" : 17719, + "reads" : 17719, "stage" : "demultiplexed" } ], @@ -2450,11 +2447,11 @@ "stages" : [ { - "read_count" : 869, + "reads" : 869, "stage" : "final" }, { - "read_count" : 936, + "reads" : 936, "stage" : "demultiplexed" } ], @@ -2464,11 +2461,11 @@ "stages" : [ { - "read_count" : 6967, + "reads" : 6967, "stage" : "final" }, { - "read_count" : 7810, + "reads" : 7810, "stage" : "demultiplexed" } ], @@ -2478,11 +2475,11 @@ "stages" : [ { - "read_count" : 1010, + "reads" : 1010, "stage" : "final" }, { - "read_count" : 1080, + "reads" : 1080, "stage" : "demultiplexed" } ], @@ -2492,11 +2489,11 @@ "stages" : [ { - "read_count" : 20051, + "reads" : 20051, "stage" : "final" }, { - "read_count" : 21658, + "reads" : 21658, "stage" : "demultiplexed" } ], @@ -2506,11 +2503,11 @@ "stages" : [ { - "read_count" : 24537, + "reads" : 24537, "stage" : "final" }, { - "read_count" : 26316, + "reads" : 26316, "stage" : "demultiplexed" } ], @@ -2520,11 +2517,11 @@ "stages" : [ { - "read_count" : 300, + "reads" : 300, "stage" : "final" }, { - "read_count" : 327, + "reads" : 327, "stage" : "demultiplexed" } ], @@ -2534,11 +2531,11 @@ "stages" : [ { - "read_count" : 4256, + "reads" : 4256, "stage" : "final" }, { - "read_count" : 4550, + "reads" : 4550, "stage" : "demultiplexed" } ], @@ -2548,11 +2545,11 @@ "stages" : [ { - "read_count" : 958, + "reads" : 958, "stage" : "final" }, { - "read_count" : 1028, + "reads" : 1028, "stage" : "demultiplexed" } ], @@ -2562,11 +2559,11 @@ "stages" : [ { - "read_count" : 31313, + "reads" : 31313, "stage" : "final" }, { - "read_count" : 34255, + "reads" : 34255, "stage" : "demultiplexed" } ], @@ -2576,11 +2573,11 @@ "stages" : [ { - "read_count" : 2554, + "reads" : 2554, "stage" : "final" }, { - "read_count" : 2798, + "reads" : 2798, "stage" : "demultiplexed" } ], @@ -2590,11 +2587,11 @@ "stages" : [ { - "read_count" : 1213, + "reads" : 1213, "stage" : "final" }, { - "read_count" : 1271, + "reads" : 1271, "stage" : "demultiplexed" } ], @@ -2604,11 +2601,11 @@ "stages" : [ { - "read_count" : 1379, + "reads" : 1379, "stage" : "final" }, { - "read_count" : 1462, + "reads" : 1462, "stage" : "demultiplexed" } ], @@ -2618,11 +2615,11 @@ "stages" : [ { - "read_count" : 2310, + "reads" : 2310, "stage" : "final" }, { - "read_count" : 2421, + "reads" : 2421, "stage" : "demultiplexed" } ], @@ -2632,11 +2629,11 @@ "stages" : [ { - "read_count" : 2014, + "reads" : 2014, "stage" : "final" }, { - "read_count" : 2126, + "reads" : 2126, "stage" : "demultiplexed" } ], @@ -2646,11 +2643,11 @@ "stages" : [ { - "read_count" : 44681, + "reads" : 44681, "stage" : "final" }, { - "read_count" : 47559, + "reads" : 47559, "stage" : "demultiplexed" } ], @@ -2660,7 +2657,7 @@ "stages" : [ { - "read_count" : 273, + "reads" : 273, "stage" : "demultiplexed" } ], @@ -2670,11 +2667,11 @@ "stages" : [ { - "read_count" : 384, + "reads" : 384, "stage" : "final" }, { - "read_count" : 410, + "reads" : 410, "stage" : "demultiplexed" } ], @@ -2684,11 +2681,11 @@ "stages" : [ { - "read_count" : 507, + "reads" : 507, "stage" : "final" }, { - "read_count" : 594, + "reads" : 594, "stage" : "demultiplexed" } ], @@ -2698,7 +2695,7 @@ "stages" : [ { - "read_count" : 226, + "reads" : 226, "stage" : "demultiplexed" } ], @@ -2708,11 +2705,11 @@ "stages" : [ { - "read_count" : 3895, + "reads" : 3895, "stage" : "final" }, { - "read_count" : 4189, + "reads" : 4189, "stage" : "demultiplexed" } ], @@ -2722,11 +2719,11 @@ "stages" : [ { - "read_count" : 1579, + "reads" : 1579, "stage" : "final" }, { - "read_count" : 1650, + "reads" : 1650, "stage" : "demultiplexed" } ], @@ -2736,7 +2733,7 @@ "stages" : [ { - "read_count" : 222, + "reads" : 222, "stage" : "demultiplexed" } ], @@ -2746,7 +2743,7 @@ "stages" : [ { - "read_count" : 170, + "reads" : 170, "stage" : "demultiplexed" } ], @@ -2756,7 +2753,7 @@ "stages" : [ { - "read_count" : 150, + "reads" : 150, "stage" : "demultiplexed" } ], @@ -2766,11 +2763,11 @@ "stages" : [ { - "read_count" : 1450, + "reads" : 1450, "stage" : "final" }, { - "read_count" : 1537, + "reads" : 1537, "stage" : "demultiplexed" } ], @@ -2780,11 +2777,11 @@ "stages" : [ { - "read_count" : 23438, + "reads" : 23438, "stage" : "final" }, { - "read_count" : 25268, + "reads" : 25268, "stage" : "demultiplexed" } ], @@ -2794,7 +2791,7 @@ "stages" : [ { - "read_count" : 128, + "reads" : 128, "stage" : "demultiplexed" } ], @@ -2804,7 +2801,7 @@ "stages" : [ { - "read_count" : 269, + "reads" : 269, "stage" : "demultiplexed" } ], @@ -2814,11 +2811,11 @@ "stages" : [ { - "read_count" : 11091, + "reads" : 11091, "stage" : "final" }, { - "read_count" : 11848, + "reads" : 11848, "stage" : "demultiplexed" } ], @@ -2828,11 +2825,11 @@ "stages" : [ { - "read_count" : 6522, + "reads" : 6522, "stage" : "final" }, { - "read_count" : 7079, + "reads" : 7079, "stage" : "demultiplexed" } ], @@ -2842,11 +2839,11 @@ "stages" : [ { - "read_count" : 25203, + "reads" : 25203, "stage" : "final" }, { - "read_count" : 27285, + "reads" : 27285, "stage" : "demultiplexed" } ], @@ -2856,11 +2853,11 @@ "stages" : [ { - "read_count" : 26863, + "reads" : 26863, "stage" : "final" }, { - "read_count" : 29317, + "reads" : 29317, "stage" : "demultiplexed" } ], @@ -2870,11 +2867,11 @@ "stages" : [ { - "read_count" : 13601, + "reads" : 13601, "stage" : "final" }, { - "read_count" : 14870, + "reads" : 14870, "stage" : "demultiplexed" } ], @@ -2884,11 +2881,11 @@ "stages" : [ { - "read_count" : 282, + "reads" : 282, "stage" : "final" }, { - "read_count" : 298, + "reads" : 298, "stage" : "demultiplexed" } ], @@ -2898,11 +2895,11 @@ "stages" : [ { - "read_count" : 33117, + "reads" : 33117, "stage" : "final" }, { - "read_count" : 35774, + "reads" : 35774, "stage" : "demultiplexed" } ], @@ -2912,11 +2909,11 @@ "stages" : [ { - "read_count" : 7336, + "reads" : 7336, "stage" : "final" }, { - "read_count" : 8382, + "reads" : 8382, "stage" : "demultiplexed" } ], @@ -2926,11 +2923,11 @@ "stages" : [ { - "read_count" : 1995, + "reads" : 1995, "stage" : "final" }, { - "read_count" : 2099, + "reads" : 2099, "stage" : "demultiplexed" } ], @@ -2940,11 +2937,11 @@ "stages" : [ { - "read_count" : 982, + "reads" : 982, "stage" : "final" }, { - "read_count" : 1036, + "reads" : 1036, "stage" : "demultiplexed" } ], @@ -2954,11 +2951,11 @@ "stages" : [ { - "read_count" : 6197, + "reads" : 6197, "stage" : "final" }, { - "read_count" : 6765, + "reads" : 6765, "stage" : "demultiplexed" } ], @@ -2968,11 +2965,11 @@ "stages" : [ { - "read_count" : 19559, + "reads" : 19559, "stage" : "final" }, { - "read_count" : 20984, + "reads" : 20984, "stage" : "demultiplexed" } ], @@ -2982,11 +2979,11 @@ "stages" : [ { - "read_count" : 1167, + "reads" : 1167, "stage" : "final" }, { - "read_count" : 1229, + "reads" : 1229, "stage" : "demultiplexed" } ], @@ -2996,11 +2993,11 @@ "stages" : [ { - "read_count" : 5895, + "reads" : 5895, "stage" : "final" }, { - "read_count" : 6380, + "reads" : 6380, "stage" : "demultiplexed" } ], @@ -3010,11 +3007,11 @@ "stages" : [ { - "read_count" : 733, + "reads" : 733, "stage" : "final" }, { - "read_count" : 786, + "reads" : 786, "stage" : "demultiplexed" } ], @@ -3024,11 +3021,11 @@ "stages" : [ { - "read_count" : 3576, + "reads" : 3576, "stage" : "final" }, { - "read_count" : 3856, + "reads" : 3856, "stage" : "demultiplexed" } ], @@ -3038,11 +3035,11 @@ "stages" : [ { - "read_count" : 4213, + "reads" : 4213, "stage" : "final" }, { - "read_count" : 4575, + "reads" : 4575, "stage" : "demultiplexed" } ], @@ -3052,11 +3049,11 @@ "stages" : [ { - "read_count" : 860, + "reads" : 860, "stage" : "final" }, { - "read_count" : 942, + "reads" : 942, "stage" : "demultiplexed" } ], @@ -3066,11 +3063,11 @@ "stages" : [ { - "read_count" : 506, + "reads" : 506, "stage" : "final" }, { - "read_count" : 546, + "reads" : 546, "stage" : "demultiplexed" } ], @@ -3080,11 +3077,11 @@ "stages" : [ { - "read_count" : 17721, + "reads" : 17721, "stage" : "final" }, { - "read_count" : 19024, + "reads" : 19024, "stage" : "demultiplexed" } ], @@ -3094,11 +3091,11 @@ "stages" : [ { - "read_count" : 516, + "reads" : 516, "stage" : "final" }, { - "read_count" : 546, + "reads" : 546, "stage" : "demultiplexed" } ], @@ -3108,11 +3105,11 @@ "stages" : [ { - "read_count" : 283, + "reads" : 283, "stage" : "final" }, { - "read_count" : 298, + "reads" : 298, "stage" : "demultiplexed" } ], @@ -3122,11 +3119,11 @@ "stages" : [ { - "read_count" : 7629, + "reads" : 7629, "stage" : "final" }, { - "read_count" : 8260, + "reads" : 8260, "stage" : "demultiplexed" } ], @@ -3136,11 +3133,11 @@ "stages" : [ { - "read_count" : 2117, + "reads" : 2117, "stage" : "final" }, { - "read_count" : 2224, + "reads" : 2224, "stage" : "demultiplexed" } ], @@ -3150,11 +3147,11 @@ "stages" : [ { - "read_count" : 784, + "reads" : 784, "stage" : "final" }, { - "read_count" : 826, + "reads" : 826, "stage" : "demultiplexed" } ], @@ -3164,11 +3161,11 @@ "stages" : [ { - "read_count" : 579, + "reads" : 579, "stage" : "final" }, { - "read_count" : 622, + "reads" : 622, "stage" : "demultiplexed" } ], @@ -3178,11 +3175,11 @@ "stages" : [ { - "read_count" : 527, + "reads" : 527, "stage" : "final" }, { - "read_count" : 563, + "reads" : 563, "stage" : "demultiplexed" } ], @@ -3192,11 +3189,11 @@ "stages" : [ { - "read_count" : 2247, + "reads" : 2247, "stage" : "final" }, { - "read_count" : 2384, + "reads" : 2384, "stage" : "demultiplexed" } ], @@ -3206,11 +3203,11 @@ "stages" : [ { - "read_count" : 419, + "reads" : 419, "stage" : "final" }, { - "read_count" : 444, + "reads" : 444, "stage" : "demultiplexed" } ], @@ -3220,11 +3217,11 @@ "stages" : [ { - "read_count" : 14122, + "reads" : 14122, "stage" : "final" }, { - "read_count" : 16039, + "reads" : 16039, "stage" : "demultiplexed" } ], @@ -3234,11 +3231,11 @@ "stages" : [ { - "read_count" : 1009, + "reads" : 1009, "stage" : "final" }, { - "read_count" : 1071, + "reads" : 1071, "stage" : "demultiplexed" } ], @@ -3248,11 +3245,11 @@ "stages" : [ { - "read_count" : 274, + "reads" : 274, "stage" : "final" }, { - "read_count" : 300, + "reads" : 300, "stage" : "demultiplexed" } ], @@ -3262,11 +3259,11 @@ "stages" : [ { - "read_count" : 392, + "reads" : 392, "stage" : "final" }, { - "read_count" : 426, + "reads" : 426, "stage" : "demultiplexed" } ], @@ -3276,11 +3273,11 @@ "stages" : [ { - "read_count" : 3516, + "reads" : 3516, "stage" : "final" }, { - "read_count" : 3818, + "reads" : 3818, "stage" : "demultiplexed" } ], @@ -3290,11 +3287,11 @@ "stages" : [ { - "read_count" : 2317, + "reads" : 2317, "stage" : "final" }, { - "read_count" : 2458, + "reads" : 2458, "stage" : "demultiplexed" } ], @@ -3304,11 +3301,11 @@ "stages" : [ { - "read_count" : 16859, + "reads" : 16859, "stage" : "final" }, { - "read_count" : 17934, + "reads" : 17934, "stage" : "demultiplexed" } ], @@ -3318,11 +3315,11 @@ "stages" : [ { - "read_count" : 4739, + "reads" : 4739, "stage" : "final" }, { - "read_count" : 5188, + "reads" : 5188, "stage" : "demultiplexed" } ], @@ -3332,7 +3329,7 @@ "stages" : [ { - "read_count" : 19, + "reads" : 19, "stage" : "demultiplexed" } ], @@ -3342,11 +3339,11 @@ "stages" : [ { - "read_count" : 371, + "reads" : 371, "stage" : "final" }, { - "read_count" : 413, + "reads" : 413, "stage" : "demultiplexed" } ], @@ -3356,11 +3353,11 @@ "stages" : [ { - "read_count" : 537, + "reads" : 537, "stage" : "final" }, { - "read_count" : 595, + "reads" : 595, "stage" : "demultiplexed" } ], @@ -3370,11 +3367,11 @@ "stages" : [ { - "read_count" : 11176, + "reads" : 11176, "stage" : "final" }, { - "read_count" : 12286, + "reads" : 12286, "stage" : "demultiplexed" } ], @@ -3384,11 +3381,11 @@ "stages" : [ { - "read_count" : 2539, + "reads" : 2539, "stage" : "final" }, { - "read_count" : 2663, + "reads" : 2663, "stage" : "demultiplexed" } ], @@ -3398,7 +3395,7 @@ "stages" : [ { - "read_count" : 232, + "reads" : 232, "stage" : "demultiplexed" } ], @@ -3408,7 +3405,7 @@ "stages" : [ { - "read_count" : 172, + "reads" : 172, "stage" : "demultiplexed" } ], @@ -3418,11 +3415,11 @@ "stages" : [ { - "read_count" : 1901, + "reads" : 1901, "stage" : "final" }, { - "read_count" : 2051, + "reads" : 2051, "stage" : "demultiplexed" } ], @@ -3432,11 +3429,11 @@ "stages" : [ { - "read_count" : 22789, + "reads" : 22789, "stage" : "final" }, { - "read_count" : 25098, + "reads" : 25098, "stage" : "demultiplexed" } ], @@ -3446,11 +3443,11 @@ "stages" : [ { - "read_count" : 3622, + "reads" : 3622, "stage" : "final" }, { - "read_count" : 3947, + "reads" : 3947, "stage" : "demultiplexed" } ], @@ -3460,11 +3457,11 @@ "stages" : [ { - "read_count" : 2182, + "reads" : 2182, "stage" : "final" }, { - "read_count" : 2296, + "reads" : 2296, "stage" : "demultiplexed" } ], @@ -3474,11 +3471,11 @@ "stages" : [ { - "read_count" : 5344, + "reads" : 5344, "stage" : "final" }, { - "read_count" : 5849, + "reads" : 5849, "stage" : "demultiplexed" } ], @@ -3488,11 +3485,11 @@ "stages" : [ { - "read_count" : 1206, + "reads" : 1206, "stage" : "final" }, { - "read_count" : 1279, + "reads" : 1279, "stage" : "demultiplexed" } ], @@ -3502,11 +3499,11 @@ "stages" : [ { - "read_count" : 16298, + "reads" : 16298, "stage" : "final" }, { - "read_count" : 17431, + "reads" : 17431, "stage" : "demultiplexed" } ], @@ -3516,7 +3513,7 @@ "stages" : [ { - "read_count" : 106, + "reads" : 106, "stage" : "demultiplexed" } ], @@ -3526,11 +3523,11 @@ "stages" : [ { - "read_count" : 2857, + "reads" : 2857, "stage" : "final" }, { - "read_count" : 3115, + "reads" : 3115, "stage" : "demultiplexed" } ], @@ -3540,11 +3537,11 @@ "stages" : [ { - "read_count" : 710, + "reads" : 710, "stage" : "final" }, { - "read_count" : 774, + "reads" : 774, "stage" : "demultiplexed" } ], @@ -3554,11 +3551,11 @@ "stages" : [ { - "read_count" : 775, + "reads" : 775, "stage" : "final" }, { - "read_count" : 813, + "reads" : 813, "stage" : "demultiplexed" } ], @@ -3568,11 +3565,11 @@ "stages" : [ { - "read_count" : 618, + "reads" : 618, "stage" : "final" }, { - "read_count" : 655, + "reads" : 655, "stage" : "demultiplexed" } ], @@ -3582,7 +3579,7 @@ "stages" : [ { - "read_count" : 4, + "reads" : 4, "stage" : "demultiplexed" } ], @@ -3592,11 +3589,11 @@ "stages" : [ { - "read_count" : 1545, + "reads" : 1545, "stage" : "final" }, { - "read_count" : 1630, + "reads" : 1630, "stage" : "demultiplexed" } ], @@ -3606,7 +3603,7 @@ "stages" : [ { - "read_count" : 170, + "reads" : 170, "stage" : "demultiplexed" } ], @@ -3616,11 +3613,11 @@ "stages" : [ { - "read_count" : 34752, + "reads" : 34752, "stage" : "final" }, { - "read_count" : 37672, + "reads" : 37672, "stage" : "demultiplexed" } ], @@ -3630,11 +3627,11 @@ "stages" : [ { - "read_count" : 1324, + "reads" : 1324, "stage" : "final" }, { - "read_count" : 1416, + "reads" : 1416, "stage" : "demultiplexed" } ], @@ -3644,11 +3641,11 @@ "stages" : [ { - "read_count" : 1590, + "reads" : 1590, "stage" : "final" }, { - "read_count" : 1663, + "reads" : 1663, "stage" : "demultiplexed" } ], @@ -3658,11 +3655,11 @@ "stages" : [ { - "read_count" : 46824, + "reads" : 46824, "stage" : "final" }, { - "read_count" : 50413, + "reads" : 50413, "stage" : "demultiplexed" } ], @@ -3679,7 +3676,7 @@ "stages" : [ { - "read_count" : 31484, + "reads" : 31484, "stage" : "final" } ], @@ -3689,7 +3686,7 @@ "stages" : [ { - "read_count" : 24076, + "reads" : 24076, "stage" : "final" } ], @@ -3699,7 +3696,7 @@ "stages" : [ { - "read_count" : 35619, + "reads" : 35619, "stage" : "final" } ], @@ -3709,7 +3706,7 @@ "stages" : [ { - "read_count" : 33465, + "reads" : 33465, "stage" : "final" } ], @@ -3719,7 +3716,7 @@ "stages" : [ { - "read_count" : 32066, + "reads" : 32066, "stage" : "final" } ], @@ -3729,7 +3726,7 @@ "stages" : [ { - "read_count" : 38609, + "reads" : 38609, "stage" : "final" } ], @@ -3739,7 +3736,7 @@ "stages" : [ { - "read_count" : 48414, + "reads" : 48414, "stage" : "final" } ], @@ -3749,7 +3746,7 @@ "stages" : [ { - "read_count" : 36695, + "reads" : 36695, "stage" : "final" } ], @@ -3759,7 +3756,7 @@ "stages" : [ { - "read_count" : 25447, + "reads" : 25447, "stage" : "final" } ], @@ -3769,7 +3766,7 @@ "stages" : [ { - "read_count" : 21610, + "reads" : 21610, "stage" : "final" } ], @@ -3779,7 +3776,7 @@ "stages" : [ { - "read_count" : 42576, + "reads" : 42576, "stage" : "final" } ], @@ -3789,7 +3786,7 @@ "stages" : [ { - "read_count" : 49627, + "reads" : 49627, "stage" : "final" } ], @@ -3799,7 +3796,7 @@ "stages" : [ { - "read_count" : 45595, + "reads" : 45595, "stage" : "final" } ], @@ -3809,7 +3806,7 @@ "stages" : [ { - "read_count" : 17913, + "reads" : 17913, "stage" : "final" } ], @@ -3819,7 +3816,7 @@ "stages" : [ { - "read_count" : 42252, + "reads" : 42252, "stage" : "final" } ], @@ -3829,7 +3826,7 @@ "stages" : [ { - "read_count" : 49641, + "reads" : 49641, "stage" : "final" } ], @@ -3839,7 +3836,7 @@ "stages" : [ { - "read_count" : 49953, + "reads" : 49953, "stage" : "final" } ], @@ -3849,7 +3846,7 @@ "stages" : [ { - "read_count" : 33844, + "reads" : 33844, "stage" : "final" } ], @@ -3859,7 +3856,7 @@ "stages" : [ { - "read_count" : 25697, + "reads" : 25697, "stage" : "final" } ], @@ -3869,7 +3866,7 @@ "stages" : [ { - "read_count" : 46915, + "reads" : 46915, "stage" : "final" } ], @@ -3879,7 +3876,7 @@ "stages" : [ { - "read_count" : 49966, + "reads" : 49966, "stage" : "final" } ], @@ -3889,7 +3886,7 @@ "stages" : [ { - "read_count" : 38480, + "reads" : 38480, "stage" : "final" } ], @@ -3899,7 +3896,7 @@ "stages" : [ { - "read_count" : 18960, + "reads" : 18960, "stage" : "final" } ], @@ -3909,7 +3906,7 @@ "stages" : [ { - "read_count" : 33183, + "reads" : 33183, "stage" : "final" } ], @@ -3919,7 +3916,7 @@ "stages" : [ { - "read_count" : 31147, + "reads" : 31147, "stage" : "final" } ], @@ -3929,7 +3926,7 @@ "stages" : [ { - "read_count" : 35366, + "reads" : 35366, "stage" : "final" } ], @@ -3939,7 +3936,7 @@ "stages" : [ { - "read_count" : 29611, + "reads" : 29611, "stage" : "final" } ], @@ -3949,7 +3946,7 @@ "stages" : [ { - "read_count" : 27075, + "reads" : 27075, "stage" : "final" } ], @@ -3959,7 +3956,7 @@ "stages" : [ { - "read_count" : 36178, + "reads" : 36178, "stage" : "final" } ], @@ -3969,7 +3966,7 @@ "stages" : [ { - "read_count" : 28161, + "reads" : 28161, "stage" : "final" } ], @@ -3979,7 +3976,7 @@ "stages" : [ { - "read_count" : 48791, + "reads" : 48791, "stage" : "final" } ], @@ -3989,7 +3986,7 @@ "stages" : [ { - "read_count" : 15826, + "reads" : 15826, "stage" : "final" } ], @@ -3999,7 +3996,7 @@ "stages" : [ { - "read_count" : 43173, + "reads" : 43173, "stage" : "final" } ], @@ -4009,7 +4006,7 @@ "stages" : [ { - "read_count" : 49946, + "reads" : 49946, "stage" : "final" } ], @@ -4019,7 +4016,7 @@ "stages" : [ { - "read_count" : 45402, + "reads" : 45402, "stage" : "final" } ], @@ -4029,7 +4026,7 @@ "stages" : [ { - "read_count" : 29636, + "reads" : 29636, "stage" : "final" } ], @@ -4039,7 +4036,7 @@ "stages" : [ { - "read_count" : 47034, + "reads" : 47034, "stage" : "final" } ], @@ -4049,7 +4046,7 @@ "stages" : [ { - "read_count" : 49955, + "reads" : 49955, "stage" : "final" } ], @@ -4059,7 +4056,7 @@ "stages" : [ { - "read_count" : 16463, + "reads" : 16463, "stage" : "final" } ], @@ -4069,7 +4066,7 @@ "stages" : [ { - "read_count" : 49802, + "reads" : 49802, "stage" : "final" } ], @@ -4079,7 +4076,7 @@ "stages" : [ { - "read_count" : 24539, + "reads" : 24539, "stage" : "final" } ], @@ -4089,7 +4086,7 @@ "stages" : [ { - "read_count" : 41530, + "reads" : 41530, "stage" : "final" } ], @@ -4099,7 +4096,7 @@ "stages" : [ { - "read_count" : 42184, + "reads" : 42184, "stage" : "final" } ], @@ -4109,7 +4106,7 @@ "stages" : [ { - "read_count" : 28057, + "reads" : 28057, "stage" : "final" } ], @@ -4119,7 +4116,7 @@ "stages" : [ { - "read_count" : 27730, + "reads" : 27730, "stage" : "final" } ], @@ -4129,7 +4126,7 @@ "stages" : [ { - "read_count" : 49338, + "reads" : 49338, "stage" : "final" } ], @@ -4139,7 +4136,7 @@ "stages" : [ { - "read_count" : 44481, + "reads" : 44481, "stage" : "final" } ], @@ -4149,7 +4146,7 @@ "stages" : [ { - "read_count" : 49365, + "reads" : 49365, "stage" : "final" } ], @@ -4159,7 +4156,7 @@ "stages" : [ { - "read_count" : 39009, + "reads" : 39009, "stage" : "final" } ], @@ -4169,7 +4166,7 @@ "stages" : [ { - "read_count" : 37407, + "reads" : 37407, "stage" : "final" } ], @@ -4179,7 +4176,7 @@ "stages" : [ { - "read_count" : 29934, + "reads" : 29934, "stage" : "final" } ], @@ -4189,7 +4186,7 @@ "stages" : [ { - "read_count" : 49971, + "reads" : 49971, "stage" : "final" } ], @@ -4199,7 +4196,7 @@ "stages" : [ { - "read_count" : 23924, + "reads" : 23924, "stage" : "final" } ], @@ -4209,7 +4206,7 @@ "stages" : [ { - "read_count" : 29713, + "reads" : 29713, "stage" : "final" } ], @@ -4219,7 +4216,7 @@ "stages" : [ { - "read_count" : 38625, + "reads" : 38625, "stage" : "final" } ], @@ -4229,7 +4226,7 @@ "stages" : [ { - "read_count" : 49969, + "reads" : 49969, "stage" : "final" } ], @@ -4239,7 +4236,7 @@ "stages" : [ { - "read_count" : 45069, + "reads" : 45069, "stage" : "final" } ], @@ -4249,7 +4246,7 @@ "stages" : [ { - "read_count" : 24050, + "reads" : 24050, "stage" : "final" } ], @@ -4259,7 +4256,7 @@ "stages" : [ { - "read_count" : 41999, + "reads" : 41999, "stage" : "final" } ], @@ -4269,7 +4266,7 @@ "stages" : [ { - "read_count" : 48335, + "reads" : 48335, "stage" : "final" } ], @@ -4279,7 +4276,7 @@ "stages" : [ { - "read_count" : 41343, + "reads" : 41343, "stage" : "final" } ], @@ -4289,7 +4286,7 @@ "stages" : [ { - "read_count" : 49944, + "reads" : 49944, "stage" : "final" } ], @@ -4299,7 +4296,7 @@ "stages" : [ { - "read_count" : 37382, + "reads" : 37382, "stage" : "final" } ], @@ -4309,7 +4306,7 @@ "stages" : [ { - "read_count" : 44271, + "reads" : 44271, "stage" : "final" } ], @@ -4319,7 +4316,7 @@ "stages" : [ { - "read_count" : 24451, + "reads" : 24451, "stage" : "final" } ], @@ -4329,7 +4326,7 @@ "stages" : [ { - "read_count" : 49746, + "reads" : 49746, "stage" : "final" } ], @@ -4339,7 +4336,7 @@ "stages" : [ { - "read_count" : 49910, + "reads" : 49910, "stage" : "final" } ], @@ -4349,7 +4346,7 @@ "stages" : [ { - "read_count" : 25672, + "reads" : 25672, "stage" : "final" } ], @@ -4359,7 +4356,7 @@ "stages" : [ { - "read_count" : 35612, + "reads" : 35612, "stage" : "final" } ], @@ -4369,7 +4366,7 @@ "stages" : [ { - "read_count" : 49786, + "reads" : 49786, "stage" : "final" } ], @@ -4379,7 +4376,7 @@ "stages" : [ { - "read_count" : 29564, + "reads" : 29564, "stage" : "final" } ], @@ -4389,7 +4386,7 @@ "stages" : [ { - "read_count" : 21816, + "reads" : 21816, "stage" : "final" } ], @@ -4399,7 +4396,7 @@ "stages" : [ { - "read_count" : 36326, + "reads" : 36326, "stage" : "final" } ], @@ -4409,7 +4406,7 @@ "stages" : [ { - "read_count" : 29426, + "reads" : 29426, "stage" : "final" } ], @@ -4419,7 +4416,7 @@ "stages" : [ { - "read_count" : 31697, + "reads" : 31697, "stage" : "final" } ], @@ -4429,7 +4426,7 @@ "stages" : [ { - "read_count" : 44365, + "reads" : 44365, "stage" : "final" } ], @@ -4439,7 +4436,7 @@ "stages" : [ { - "read_count" : 5984, + "reads" : 5984, "stage" : "final" } ], @@ -4449,7 +4446,7 @@ "stages" : [ { - "read_count" : 37749, + "reads" : 37749, "stage" : "final" } ], @@ -4459,7 +4456,7 @@ "stages" : [ { - "read_count" : 46063, + "reads" : 46063, "stage" : "final" } ], @@ -4469,7 +4466,7 @@ "stages" : [ { - "read_count" : 37213, + "reads" : 37213, "stage" : "final" } ], @@ -4479,7 +4476,7 @@ "stages" : [ { - "read_count" : 43031, + "reads" : 43031, "stage" : "final" } ], @@ -4489,7 +4486,7 @@ "stages" : [ { - "read_count" : 14142, + "reads" : 14142, "stage" : "final" } ], @@ -4499,7 +4496,7 @@ "stages" : [ { - "read_count" : 49745, + "reads" : 49745, "stage" : "final" } ], @@ -4509,7 +4506,7 @@ "stages" : [ { - "read_count" : 34260, + "reads" : 34260, "stage" : "final" } ], @@ -4519,7 +4516,7 @@ "stages" : [ { - "read_count" : 30666, + "reads" : 30666, "stage" : "final" } ], @@ -4529,7 +4526,7 @@ "stages" : [ { - "read_count" : 47489, + "reads" : 47489, "stage" : "final" } ], @@ -4539,7 +4536,7 @@ "stages" : [ { - "read_count" : 49972, + "reads" : 49972, "stage" : "final" } ], @@ -4549,7 +4546,7 @@ "stages" : [ { - "read_count" : 37605, + "reads" : 37605, "stage" : "final" } ], @@ -4559,7 +4556,7 @@ "stages" : [ { - "read_count" : 19230, + "reads" : 19230, "stage" : "final" } ], @@ -4569,7 +4566,7 @@ "stages" : [ { - "read_count" : 49701, + "reads" : 49701, "stage" : "final" } ], @@ -4579,7 +4576,7 @@ "stages" : [ { - "read_count" : 41271, + "reads" : 41271, "stage" : "final" } ], @@ -4589,7 +4586,7 @@ "stages" : [ { - "read_count" : 32967, + "reads" : 32967, "stage" : "final" } ], @@ -4599,7 +4596,7 @@ "stages" : [ { - "read_count" : 3634, + "reads" : 3634, "stage" : "final" } ], @@ -4609,7 +4606,7 @@ "stages" : [ { - "read_count" : 28109, + "reads" : 28109, "stage" : "final" } ], @@ -4619,7 +4616,7 @@ "stages" : [ { - "read_count" : 37013, + "reads" : 37013, "stage" : "final" } ], @@ -4629,7 +4626,7 @@ "stages" : [ { - "read_count" : 29147, + "reads" : 29147, "stage" : "final" } ], @@ -4639,7 +4636,7 @@ "stages" : [ { - "read_count" : 34162, + "reads" : 34162, "stage" : "final" } ], @@ -4649,7 +4646,7 @@ "stages" : [ { - "read_count" : 49728, + "reads" : 49728, "stage" : "final" } ], @@ -4659,7 +4656,7 @@ "stages" : [ { - "read_count" : 49740, + "reads" : 49740, "stage" : "final" } ], diff --git a/tests/data/minimum_pmo_example.json.gz b/tests/data/minimum_pmo_example.json.gz index 29c670f811242cc14b9c982e712dfa30d2f266d4..be9231ff09effc2029e248f8a7295391cff66f8c 100644 GIT binary patch literal 27204 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 K0_`tGfyKsM_V&SYZnK5u!ByU#Qm0dhG(r0 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 diff --git a/tests/data/minimum_pmo_example_2.json b/tests/data/minimum_pmo_example_2.json index 2ece80c..016f01b 100644 --- a/tests/data/minimum_pmo_example_2.json +++ b/tests/data/minimum_pmo_example_2.json @@ -2,8 +2,34 @@ "bioinformatics_methods_info" : [ { - "additional_methods" : + "methods" : [ + { + "additional_argument" : + [ + "--bamExtractTrimToRegion", + "--bed /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_withPrimers.bed", + "--genomeDir /tank/data/genomes/plasmodium/genomes/pf/genomes/", + "--primaryGenome Pf3D7", + "--bam bams/{SAMPLE}.sorted.bam" + ], + "program" : "PathWeaver BamExtractPathwaysFromRegion", + "program_description" : "Extract reads from a bam file for a specific genomic locatioon and then assembles local haplotypes for that region", + "program_version" : "1.0.0-dev" + }, + { + "additional_argument" : + [ + "--bamExtractTrimToRegion", + "--bed /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_withPrimers.bed", + "--genomeDir /tank/data/genomes/plasmodium/genomes/pf/genomes/", + "--primaryGenome Pf3D7", + "--bam bams/{SAMPLE}.sorted.bam" + ], + "program" : "PathWeaver BamExtractPathwaysFromRegion", + "program_description" : "Extract reads from a bam file for a specific genomic locatioon and then assembles local haplotypes for that region", + "program_version" : "1.0.0-dev" + }, { "additional_argument" : [ @@ -22,35 +48,7 @@ "program_description" : "Compare across samples for each target to create population level identifiers and do post artifact cleanup", "program_version" : "1.0.0-dev" } - ], - "demultiplexing_method" : - { - "additional_argument" : - [ - "--bamExtractTrimToRegion", - "--bed /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_withPrimers.bed", - "--genomeDir /tank/data/genomes/plasmodium/genomes/pf/genomes/", - "--primaryGenome Pf3D7", - "--bam bams/{SAMPLE}.sorted.bam" - ], - "program" : "PathWeaver BamExtractPathwaysFromRegion", - "program_description" : "Extract reads from a bam file for a specific genomic locatioon and then assembles local haplotypes for that region", - "program_version" : "1.0.0-dev" - }, - "denoising_method" : - { - "additional_argument" : - [ - "--bamExtractTrimToRegion", - "--bed /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_withPrimers.bed", - "--genomeDir /tank/data/genomes/plasmodium/genomes/pf/genomes/", - "--primaryGenome Pf3D7", - "--bam bams/{SAMPLE}.sorted.bam" - ], - "program" : "PathWeaver BamExtractPathwaysFromRegion", - "program_description" : "Extract reads from a bam file for a specific genomic locatioon and then assembles local haplotypes for that region", - "program_version" : "1.0.0-dev" - } + ] } ], "bioinformatics_run_info" : @@ -2165,13 +2163,13 @@ "library_sample_info" : [ { - "library_sample_name" : "5tbx", + "library_sample_name" : "5tbx_lib_name", "panel_id" : 0, "sequencing_info_id" : 0, "specimen_id" : 0 }, { - "library_sample_name" : "XUC009", + "library_sample_name" : "XUC009_lib_name", "panel_id" : 0, "sequencing_info_id" : 0, "specimen_id" : 1 @@ -2294,7 +2292,7 @@ ], "pmo_header" : { - "creation_date" : "2025-07-22", + "creation_date" : "2025-11-03", "generation_method" : { "program_name" : "elucidator combingallintopmojson", diff --git a/tests/data/minimum_pmo_example_2.json.gz b/tests/data/minimum_pmo_example_2.json.gz index 57f086411bf12446bef486f3d950273a7529682d..4dbb70f327b98a1ff386a8d059d6c364c499e6e1 100644 GIT binary patch literal 24067 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

B4pcC5#U6Hfnh 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 diff --git a/tests/test_pmo_engine/test_pmo_checker.py b/tests/test_pmo_engine/test_pmo_checker.py index d6645c6..6332167 100755 --- a/tests/test_pmo_engine/test_pmo_checker.py +++ b/tests/test_pmo_engine/test_pmo_checker.py @@ -12,7 +12,7 @@ class TestPMOChecker(unittest.TestCase): def setUp(self): self.working_dir = os.path.dirname(os.path.abspath(__file__)) self.pmo_jsonschema_data = load_schema( - "portable_microhaplotype_object_v0.1.0.schema.json" + "portable_microhaplotype_object_v1.0.0.schema.json" ) self.checker = PMOChecker(self.pmo_jsonschema_data) diff --git a/tests/test_pmo_engine/test_pmo_processor.py b/tests/test_pmo_engine/test_pmo_processor.py index 13a7891..845e7b5 100755 --- a/tests/test_pmo_engine/test_pmo_processor.py +++ b/tests/test_pmo_engine/test_pmo_processor.py @@ -23,7 +23,7 @@ def setUp(self): self.working_dir = os.path.dirname(os.path.abspath(__file__)) self.test_dir = tempfile.TemporaryDirectory() self.pmo_jsonschema_data = load_schema( - "portable_microhaplotype_object_v0.1.0.schema.json" + "portable_microhaplotype_object_v1.0.0.schema.json" ) with open( os.path.join( @@ -47,7 +47,7 @@ def test_list_library_sample_names_per_specimen_name(self): ) id_counts_check_data = { "specimen_name": ["8025874217", "8025874266"], - "library_sample_name": ["8025874217", "8025874266"], + "library_sample_name": ["8025874217_lib_name", "8025874266_lib_name"], "library_sample_count": [1, 1], } id_counts_check_df = pd.DataFrame(id_counts_check_data) @@ -64,7 +64,7 @@ def test_list_library_sample_names_per_specimen_name(self): ) id_counts_check_data_2 = { "specimen_name": ["5tbx", "XUC009"], - "library_sample_name": ["5tbx", "XUC009"], + "library_sample_name": ["5tbx_lib_name", "XUC009_lib_name"], "library_sample_count": [1, 1], } id_counts_check_df_2 = pd.DataFrame(id_counts_check_data_2) @@ -76,7 +76,7 @@ def test_count_targets_per_library_sample(self): ) targets_per_sample_check_data = { "bioinformatics_run_id": [0, 0], - "library_sample_name": ["8025874266", "8025874217"], + "library_sample_name": ["8025874266_lib_name", "8025874217_lib_name"], "target_number": [85, 99], } targets_per_sample_check_df = pd.DataFrame(targets_per_sample_check_data) @@ -89,7 +89,7 @@ def test_count_targets_per_library_sample(self): ) targets_per_sample_read_count_off1000_check_data = { "bioinformatics_run_id": [0, 0], - "library_sample_name": ["8025874266", "8025874217"], + "library_sample_name": ["8025874266_lib_name", "8025874217_lib_name"], "target_number": [61, 99], } targets_per_sample_read_count_off1000_check_df = pd.DataFrame( @@ -111,7 +111,7 @@ def test_count_targets_per_library_sample(self): ) targets_per_sample_check_data_2 = { "bioinformatics_run_id": [0, 0], - "library_sample_name": ["XUC009", "5tbx"], + "library_sample_name": ["XUC009_lib_name", "5tbx_lib_name"], "target_number": [98, 100], } targets_per_sample_check_df_2 = pd.DataFrame(targets_per_sample_check_data_2) @@ -124,7 +124,7 @@ def test_count_targets_per_library_sample(self): ) targets_per_sample_check_data_2_read_count_off200 = { "bioinformatics_run_id": [0, 0], - "library_sample_name": ["XUC009", "5tbx"], + "library_sample_name": ["XUC009_lib_name", "5tbx_lib_name"], "target_number": [96, 100], } targets_per_sample_check_df_2_read_count_off200 = pd.DataFrame( @@ -148,22 +148,22 @@ def test_count_targets_per_library_sample(self): [ { "bioinformatics_run_id": 0, - "library_sample_name": "8025874266", + "library_sample_name": "8025874266_lib_name", "target_number": 85, }, { "bioinformatics_run_id": 0, - "library_sample_name": "8025874217", + "library_sample_name": "8025874217_lib_name", "target_number": 99, }, { "bioinformatics_run_id": 1, - "library_sample_name": "XUC009", + "library_sample_name": "XUC009_lib_name", "target_number": 98, }, { "bioinformatics_run_id": 1, - "library_sample_name": "5tbx", + "library_sample_name": "5tbx_lib_name", "target_number": 100, }, ] @@ -387,7 +387,7 @@ def test_extract_alleles_per_sample_table(self): self.test_dir.name, "extracted_alleles_per_sample_table_no_extra_args.csv" ) allele_data.to_csv(output_fnp, index=False) - self.assertEqual("d1775ec03eb38743cd4dd92d0a832bff", md5sum_of_fnp(output_fnp)) + self.assertEqual("2898d87133e2e381612f3c0dea70122f", md5sum_of_fnp(output_fnp)) allele_data_with_seq_reads = PMOProcessor.extract_alleles_per_sample_table( self.combined_pmo_data, @@ -406,7 +406,7 @@ def test_extract_alleles_per_sample_table(self): "extracted_alleles_per_sample_table_no_extra_args_with_seq_reads.csv", ) allele_data_with_seq_reads.to_csv(output_fnp, index=False) - self.assertEqual("0e5da30c561c748fb2553f852db76607", md5sum_of_fnp(output_fnp)) + self.assertEqual("744c1c0233066f030881c8b595b9ad5c", md5sum_of_fnp(output_fnp)) allele_data_with_seq_reads_panel_id_collection_country = ( PMOProcessor.extract_alleles_per_sample_table( @@ -431,7 +431,7 @@ def test_extract_alleles_per_sample_table(self): allele_data_with_seq_reads_panel_id_collection_country.to_csv( output_fnp, index=False ) - self.assertEqual("13aed17cbdff88f0a80c685c42d89cb8", md5sum_of_fnp(output_fnp)) + self.assertEqual("c425004244e6af1386b6e7776da76fed", md5sum_of_fnp(output_fnp)) def test_extract_from_pmo_with_read_filter(self): pmo_data_filtered = PMOProcessor.extract_from_pmo_with_read_filter( @@ -442,7 +442,7 @@ def test_extract_from_pmo_with_read_filter(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_filtered, f) - self.assertEqual("cde277533e44e64c3ef980106024275f", md5sum_of_fnp(output_fnp)) + self.assertEqual("4a9f04348758dd684847dfd6d8555f93", md5sum_of_fnp(output_fnp)) checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_filtered) @@ -455,7 +455,7 @@ def test_filter_pmo_by_target_ids(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_select_targets, f) - self.assertEqual("7bb125130685a955d658fe5c03634024", md5sum_of_fnp(output_fnp)) + self.assertEqual("911bac290439bf8d560f9a6bc6239c08", md5sum_of_fnp(output_fnp)) # check pmo extracted against PMO schema checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_select_targets) @@ -469,7 +469,7 @@ def test_filter_pmo_by_target_names(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_select_targets, f) - self.assertEqual("4d546b332b264cf58ed0d44a687728b9", md5sum_of_fnp(output_fnp)) + self.assertEqual("8baa9e81dd8c61a13655c8258899dd65", md5sum_of_fnp(output_fnp)) # check pmo extracted against PMO schema checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_select_targets) @@ -483,7 +483,7 @@ def test_filter_pmo_by_library_sample_ids(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_select_targets, f) - self.assertEqual("96e9ddc3a3d582617d856b01dd3f5083", md5sum_of_fnp(output_fnp)) + self.assertEqual("5eedbb3df7ce897f3e6d7a8fd8bab4f9", md5sum_of_fnp(output_fnp)) # check pmo extracted against PMO schema checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_select_targets) @@ -491,7 +491,7 @@ def test_filter_pmo_by_library_sample_ids(self): def test_filter_pmo_by_library_sample_names(self): pmo_data_select_library_sample_names = ( PMOProcessor.filter_pmo_by_library_sample_names( - self.combined_pmo_data, {"8025874217", "XUC009"} + self.combined_pmo_data, {"8025874217_lib_name", "XUC009_lib_name"} ) ) output_fnp = os.path.join( @@ -499,7 +499,7 @@ def test_filter_pmo_by_library_sample_names(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_select_library_sample_names, f) - self.assertEqual("f7637b5f2b100ca316102c13283493b0", md5sum_of_fnp(output_fnp)) + self.assertEqual("d1e96a4884a4c32b190891fdebb59f0c", md5sum_of_fnp(output_fnp)) # check pmo extracted against PMO schema checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_select_library_sample_names) @@ -513,7 +513,7 @@ def test_filter_pmo_by_specimen_ids(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_select_targets, f) - self.assertEqual("ce94ed180bd6672d69371e3e0fcf0c4e", md5sum_of_fnp(output_fnp)) + self.assertEqual("a70e00a2fce7fc7fd3a7a7a0f136ccdb", md5sum_of_fnp(output_fnp)) # check pmo extracted against PMO schema checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_select_targets) @@ -527,7 +527,7 @@ def test_filter_pmo_by_specimen_names(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_select_targets, f) - self.assertEqual("ce94ed180bd6672d69371e3e0fcf0c4e", md5sum_of_fnp(output_fnp)) + self.assertEqual("a70e00a2fce7fc7fd3a7a7a0f136ccdb", md5sum_of_fnp(output_fnp)) # check pmo extracted against PMO schema checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_select_targets) @@ -544,7 +544,7 @@ def test_extract_from_pmo_samples_with_meta_groupings(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_select_meta, f) - self.assertEqual("b7c0c2c1c5fbfd9a023af3dfd6bf44c0", md5sum_of_fnp(output_fnp)) + self.assertEqual("aeaa3c81a1c3ba7f748c0479bfcdcdd7", md5sum_of_fnp(output_fnp)) # check pmo extracted against PMO schema checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_select_meta) @@ -577,7 +577,15 @@ def test_get_sorted_library_sample_names(self): ) as f: pmo_data_combined = json.load(f) names = PMOProcessor.get_sorted_library_sample_names(pmo_data_combined) - self.assertEqual(["5tbx", "8025874217", "8025874266", "XUC009"], names) + self.assertEqual( + [ + "5tbx_lib_name", + "8025874217_lib_name", + "8025874266_lib_name", + "XUC009_lib_name", + ], + names, + ) def test_sorted_get_target_names(self): with open( @@ -731,7 +739,15 @@ def test_get_library_sample_names(self): ) as f: pmo_data_combined = json.load(f) names = PMOProcessor.get_library_sample_names(pmo_data_combined) - self.assertEqual(["8025874217", "8025874266", "5tbx", "XUC009"], names) + self.assertEqual( + [ + "8025874217_lib_name", + "8025874266_lib_name", + "5tbx_lib_name", + "XUC009_lib_name", + ], + names, + ) def test_get_target_names(self): with open( diff --git a/tests/test_pmo_engine/test_pmo_reader.py b/tests/test_pmo_engine/test_pmo_reader.py index edb5740..5cef258 100755 --- a/tests/test_pmo_engine/test_pmo_reader.py +++ b/tests/test_pmo_engine/test_pmo_reader.py @@ -85,7 +85,7 @@ def test_combine_multiple_pmos(self): combined_pmo = PMOReader.combine_multiple_pmos(pmo_data_list) # validate with schema pmo_jsonschema_data = load_schema( - "portable_microhaplotype_object_v0.1.0.schema.json" + "portable_microhaplotype_object_v1.0.0.schema.json" ) checker = PMOChecker(pmo_jsonschema_data) checker.validate_pmo_json(combined_pmo) diff --git a/tests/test_pmo_engine/test_pmo_writer.py b/tests/test_pmo_engine/test_pmo_writer.py index f69fe31..5e157e7 100755 --- a/tests/test_pmo_engine/test_pmo_writer.py +++ b/tests/test_pmo_engine/test_pmo_writer.py @@ -53,7 +53,7 @@ def test_write_out_pmo(self): PMOWriter.write_out_pmo(pmo_data, output_fnp, True) with open(output_fnp, "rb") as file_to_check: md5_returned = hashlib.md5(file_to_check.read()).hexdigest() - self.assertEqual("f56b922855f471346376e6d928894e4d", md5_returned) + self.assertEqual("947659479b1924a40e91dedcb5f558fb", md5_returned) def test_write_out_pmo_gzip(self): with open( @@ -68,7 +68,7 @@ def test_write_out_pmo_gzip(self): with gzip.open(output_fnp, "rb") as f: for chunk in iter(lambda: f.read(4096), b""): hash_md5.update(chunk) - self.assertEqual("f56b922855f471346376e6d928894e4d", hash_md5.hexdigest()) + self.assertEqual("947659479b1924a40e91dedcb5f558fb", hash_md5.hexdigest()) def test_write_out_pmo_fail_overwrite(self): with open( diff --git a/uv.lock b/uv.lock index 8c809d2..f33eb44 100644 --- a/uv.lock +++ b/uv.lock @@ -264,7 +264,7 @@ wheels = [ [[package]] name = "pmotools" -version = "0.1.0" +version = "1.0.0" source = { editable = "." } dependencies = [ { name = "biopython" }, From bee227e2b86e51ddace873fad536d654fb5dbcaa Mon Sep 17 00:00:00 2001 From: Nicholas Hathaway Date: Tue, 4 Nov 2025 23:58:42 -0800 Subject: [PATCH 04/31] be more permissive with specimen_name; --- .../schemas/portable_microhaplotype_object_v1.0.0.schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pmotools/schemas/portable_microhaplotype_object_v1.0.0.schema.json b/src/pmotools/schemas/portable_microhaplotype_object_v1.0.0.schema.json index 6aa78b2..e676ffb 100644 --- a/src/pmotools/schemas/portable_microhaplotype_object_v1.0.0.schema.json +++ b/src/pmotools/schemas/portable_microhaplotype_object_v1.0.0.schema.json @@ -1461,7 +1461,7 @@ }, "specimen_name": { "description": "an identifier for the specimen, should be unique within this sample set", - "pattern": "^[A-z-._0-9 ]+$", + "pattern": "^[A-z-._0-9\\(\\),\\/\\ ]+$", "type": "string" }, "specimen_store_loc": { From 7d6b7be5c79815ad9af5173db4f00f2c9c678e86 Mon Sep 17 00:00:00 2001 From: Nicholas Hathaway Date: Wed, 5 Nov 2025 00:34:07 -0800 Subject: [PATCH 05/31] fix for auto completion; --- README.md | 21 ++++++++++++++++++++- etc/bash_completion | 17 ++++++++++++++++- src/pmotools/cli.py | 18 +++++++++++++++++- 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0a0afad..c274320 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,17 @@ This package is built to either be used as a library in python projects and a co If you want to add auto-completion to the scripts master function [pmotools-python](scripts/pmotools-runner.py) you can add the following to your `~/.bash_completion`. This can also be found in etc/bash_completion in the current directory. Or can be generated with `pmotools-python --bash-completion` ```bash +# bash completion for pmotools-python +# add the below to your ~/.bash_completion + _pmotools_python_complete() { + # Make sure underscores (and =) are NOT treated as word breaks + # so options like --pmo_files or --file=path complete as one token. + local _OLD_WB="${COMP_WORDBREAKS-}" + COMP_WORDBREAKS="${COMP_WORDBREAKS//_/}" + COMP_WORDBREAKS="${COMP_WORDBREAKS//=}" + local cur prev COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" @@ -34,6 +43,9 @@ _pmotools_python_complete() lines="$(${COMP_WORDS[0]} --list-plain 2>/dev/null)" cmds="$(printf '%s\n' "${lines}" | awk -F'\t' '{print $1}')" COMPREPLY=( $(compgen -W "${cmds}" -- "${cur}") ) + + # restore wordbreaks before returning + COMP_WORDBREAKS="$_OLD_WB" return 0 fi @@ -42,19 +54,26 @@ _pmotools_python_complete() local helps opts helps="$(${COMP_WORDS[0]} ${COMP_WORDS[1]} -h 2>/dev/null)" # Pull out flag tokens and split comma-separated forms + # Keep underscores intact in the tokens. opts="$(printf '%s\n' "${helps}" \ - | sed -n 's/^[[:space:]]\{0,\}\(-[-[:alnum:]][-[:alnum:]]*\)\(, *-[[:alnum:]][-[:alnum:]]*\)\{0,\}.*/\1/p' \ + | sed -n 's/^[[:space:]]\{0,\}\(-[-[:alnum:]_][-[:alnum:]_]*\)\(, *-[[:alnum:]_][-[:alnum:]_]*\)\{0,\}.*/\1/p' \ | sed 's/, / /g')" COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + + COMP_WORDBREAKS="$_OLD_WB" return 0 fi # 3) Otherwise, fall back to filename completion for positional args COMPREPLY=( $(compgen -f -- "${cur}") ) + + # restore original word breaks + COMP_WORDBREAKS="$_OLD_WB" return 0 } complete -F _pmotools_python_complete pmotools-python + ``` ## Developer Setup diff --git a/etc/bash_completion b/etc/bash_completion index acd5913..6d89293 100644 --- a/etc/bash_completion +++ b/etc/bash_completion @@ -3,6 +3,12 @@ _pmotools_python_complete() { + # Make sure underscores (and =) are NOT treated as word breaks + # so options like --pmo_files or --file=path complete as one token. + local _OLD_WB="${COMP_WORDBREAKS-}" + COMP_WORDBREAKS="${COMP_WORDBREAKS//_/}" + COMP_WORDBREAKS="${COMP_WORDBREAKS//=}" + local cur prev COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" @@ -16,6 +22,9 @@ _pmotools_python_complete() lines="$(${COMP_WORDS[0]} --list-plain 2>/dev/null)" cmds="$(printf '%s\n' "${lines}" | awk -F'\t' '{print $1}')" COMPREPLY=( $(compgen -W "${cmds}" -- "${cur}") ) + + # restore wordbreaks before returning + COMP_WORDBREAKS="$_OLD_WB" return 0 fi @@ -24,15 +33,21 @@ _pmotools_python_complete() local helps opts helps="$(${COMP_WORDS[0]} ${COMP_WORDS[1]} -h 2>/dev/null)" # Pull out flag tokens and split comma-separated forms + # Keep underscores intact in the tokens. opts="$(printf '%s\n' "${helps}" \ - | sed -n 's/^[[:space:]]\{0,\}\(-[-[:alnum:]][-[:alnum:]]*\)\(, *-[[:alnum:]][-[:alnum:]]*\)\{0,\}.*/\1/p' \ + | sed -n 's/^[[:space:]]\{0,\}\(-[-[:alnum:]_][-[:alnum:]_]*\)\(, *-[[:alnum:]_][-[:alnum:]_]*\)\{0,\}.*/\1/p' \ | sed 's/, / /g')" COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + + COMP_WORDBREAKS="$_OLD_WB" return 0 fi # 3) Otherwise, fall back to filename completion for positional args COMPREPLY=( $(compgen -f -- "${cur}") ) + + # restore original word breaks + COMP_WORDBREAKS="$_OLD_WB" return 0 } diff --git a/src/pmotools/cli.py b/src/pmotools/cli.py index dfc12ec..855e48f 100644 --- a/src/pmotools/cli.py +++ b/src/pmotools/cli.py @@ -223,6 +223,12 @@ def _print_bash_completion(): _pmotools_python_complete() { + # Make sure underscores (and =) are NOT treated as word breaks + # so options like --pmo_files or --file=path complete as one token. + local _OLD_WB="${COMP_WORDBREAKS-}" + COMP_WORDBREAKS="${COMP_WORDBREAKS//_/}" + COMP_WORDBREAKS="${COMP_WORDBREAKS//=}" + local cur prev COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" @@ -236,6 +242,9 @@ def _print_bash_completion(): lines="$(${COMP_WORDS[0]} --list-plain 2>/dev/null)" cmds="$(printf '%s\n' "${lines}" | awk -F'\t' '{print $1}')" COMPREPLY=( $(compgen -W "${cmds}" -- "${cur}") ) + + # restore wordbreaks before returning + COMP_WORDBREAKS="$_OLD_WB" return 0 fi @@ -244,19 +253,26 @@ def _print_bash_completion(): local helps opts helps="$(${COMP_WORDS[0]} ${COMP_WORDS[1]} -h 2>/dev/null)" # Pull out flag tokens and split comma-separated forms + # Keep underscores intact in the tokens. opts="$(printf '%s\n' "${helps}" \ - | sed -n 's/^[[:space:]]\{0,\}\(-[-[:alnum:]][-[:alnum:]]*\)\(, *-[[:alnum:]][-[:alnum:]]*\)\{0,\}.*/\1/p' \ + | sed -n 's/^[[:space:]]\{0,\}\(-[-[:alnum:]_][-[:alnum:]_]*\)\(, *-[[:alnum:]_][-[:alnum:]_]*\)\{0,\}.*/\1/p' \ | sed 's/, / /g')" COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + + COMP_WORDBREAKS="$_OLD_WB" return 0 fi # 3) Otherwise, fall back to filename completion for positional args COMPREPLY=( $(compgen -f -- "${cur}") ) + + # restore original word breaks + COMP_WORDBREAKS="$_OLD_WB" return 0 } complete -F _pmotools_python_complete pmotools-python + """ import sys From e0889fdeb4a60d56006b0cee2fc2bfd4da8bebb6 Mon Sep 17 00:00:00 2001 From: Nicholas Hathaway Date: Wed, 5 Nov 2025 09:42:25 -0800 Subject: [PATCH 06/31] curated descriptions within schema file; --- ...e_microhaplotype_object_v1.0.0.schema.json | 118 +++++++++--------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/src/pmotools/schemas/portable_microhaplotype_object_v1.0.0.schema.json b/src/pmotools/schemas/portable_microhaplotype_object_v1.0.0.schema.json index e676ffb..e4025b3 100644 --- a/src/pmotools/schemas/portable_microhaplotype_object_v1.0.0.schema.json +++ b/src/pmotools/schemas/portable_microhaplotype_object_v1.0.0.schema.json @@ -2,10 +2,10 @@ "$defs": { "BioMethod": { "additionalProperties": true, - "description": "methodology description of a portion of a bioinformatics pipeline", + "description": "bioinformatics methodology description with info on program, version, and arguments different from the default", "properties": { "additional_argument": { - "description": "any additional arguments that differ from the default", + "description": "any additional arguments that differ from the default arguments", "items": { "pattern": "^[A-z-._0-9{}\\(\\),\\/\\ ]+$", "type": "string" @@ -37,7 +37,7 @@ ] }, "program_version": { - "description": "the version of generation method, should be in the format of v[MAJOR].[MINOR].[PATCH]", + "description": "the version of program, should be in the format of v[MAJOR].[MINOR].[PATCH]", "pattern": "^[A-z-._0-9 ]+$", "type": "string" } @@ -51,10 +51,10 @@ }, "BioinformaticsMethodInfo": { "additionalProperties": true, - "description": "the targeted amplicon bioinformatics methods used to generate the amplicon data in this PMO", + "description": "the targeted amplicon bioinformatics methods used to generate the microhaplotype data in this PMO", "properties": { "methods": { - "description": "methodology used to generate the amplicon data stored in this PMO, e.g. demultiplexing method, denosing method or just a pipeline method info", + "description": "methodology used to generate the microhaplotype data stored in this PMO, e.g. demultiplexing method, denosing method, or a pipeline method that ties all th steps together", "items": { "$ref": "#/$defs/BioMethod" }, @@ -69,7 +69,7 @@ }, "BioinformaticsRunInfo": { "additionalProperties": true, - "description": "Information about the pipeline run that generated some of the microhaplotype detected and reads_by_stage", + "description": "Information about the pipeline run that generated microhaplotype_detected and reads_by_stage", "properties": { "bioinformatics_methods_id": { "description": "the index into the bioinformatics_methods_info list", @@ -109,7 +109,7 @@ "type": "integer" }, "library_samples": { - "description": "a list of the microhaplotypes detected for a sample by targets ", + "description": "a list of the microhaplotypes detected for all samples with a list for each target ", "items": { "$ref": "#/$defs/DetectedMicrohaplotypesForSample" }, @@ -178,7 +178,7 @@ "description": "information on a genome", "properties": { "chromosomes": { - "description": "a list of chromosomes found within this genome", + "description": "a list of the chromosomes/contigs found within this genome", "items": { "pattern": "^[A-z-._0-9]+$", "type": "string" @@ -207,7 +207,7 @@ "type": "string" }, "taxon_id": { - "description": "the NCBI taxonomy number, can be a list of values", + "description": "the NCBI taxonomy number, can be a list of values if it's a genome file that has been created by combining gnomes from different species", "items": { "minimum": 0, "pattern": "^[0-9]$", @@ -296,7 +296,7 @@ "description": "Information about a specific amplification and sequencing of a specimen", "properties": { "alternate_identifiers": { - "description": "a list of optional alternative names", + "description": "a list of alternative names", "items": { "pattern": "^[A-z-._0-9 ]+$", "type": "string" @@ -334,7 +334,7 @@ "description": "plate location of where library was prepared for sequencing " }, "library_sample_name": { - "description": "a unique identifier for this sequence/amplification run on a specimen_name", + "description": "a unique identifier for this sequencing/amplification run", "pattern": "^[A-z-._0-9 ]+$", "type": "string" }, @@ -457,12 +457,12 @@ "type": "integer" }, "reads": { - "description": "the read count associated with this microhaplotype", + "description": "the read count for this microhaplotype", "minimum": 0, "type": "integer" }, "umis": { - "description": "the unique molecular identifier (umi) count associated with this microhaplotype", + "description": "the unique molecular identifier (umi) count for this microhaplotype", "minimum": 0, "type": [ "integer", @@ -542,10 +542,10 @@ }, "PlateInfo": { "additionalProperties": true, - "description": "Information about a plate location in a standard 96 well plate", + "description": "Information about a plate location, e.g. a standard 96 well plate with row having a letter and column having a number", "properties": { "plate_col": { - "description": "the column the specimen was in", + "description": "the column position", "minimum": 0, "pattern": "^[0-9]+$", "type": [ @@ -554,7 +554,7 @@ ] }, "plate_name": { - "description": "a name of plate the specimen was in", + "description": "a name for the plate", "pattern": "^[A-z-._0-9 ]+$", "type": [ "string", @@ -562,7 +562,7 @@ ] }, "plate_row": { - "description": "the row the specimen was in", + "description": "the row position", "pattern": "^[A-z]$", "type": [ "string", @@ -583,7 +583,7 @@ "type": "string" }, "program_version": { - "description": "the version of generation method, should be in the format of v[MAJOR].[MINOR].[PATCH]", + "description": "the version of program, should be in the format of v[MAJOR].[MINOR].[PATCH]", "pattern": "^[A-z-._0-9 ]+$", "type": "string" } @@ -597,7 +597,7 @@ }, "PmoHeader": { "additionalProperties": true, - "description": "Information on the PMO file", + "description": "Information on the PMO file itself", "properties": { "creation_date": { "description": "the date of when the PMO file was created or modified, should be YYYY-MM-DD", @@ -632,17 +632,17 @@ }, "PortableMicrohaplotypeObject": { "additionalProperties": true, - "description": "Information on final results from a targeted amplicon analysis", + "description": "Information on final microhaplotype results from a targeted amplicon analysis with associated meta data", "properties": { "bioinformatics_methods_info": { - "description": "the bioinformatics pipeline/methods used to generated the amplicon analysis for this project", + "description": "the bioinformatics pipeline/methods used to generated the microhaplotype analysis for this project", "items": { "$ref": "#/$defs/BioinformaticsMethodInfo" }, "type": "array" }, "bioinformatics_run_info": { - "description": "the runtime info for the bioinformatics pipeline used to generated the amplicon analysis for this project", + "description": "the runtime info for the bioinformatics pipeline used to generated the microhaplotypes analysis for this project", "items": { "$ref": "#/$defs/BioinformaticsRunInfo" }, @@ -656,7 +656,7 @@ "type": "array" }, "library_sample_info": { - "description": "a list of libraries of all the seq/amp of the specimens within this project", + "description": "a list of libraries of all the seq/amp of the specimens within this PMO file", "items": { "$ref": "#/$defs/LibrarySampleInfo" }, @@ -681,7 +681,7 @@ "type": "array" }, "read_counts_by_stage": { - "description": "the read counts for different stages of the pipeline", + "description": "the read counts for library_samples for different stages of the pipeline", "items": { "$ref": "#/$defs/ReadCountsByStage" }, @@ -695,14 +695,14 @@ "description": "a list of the information on the representative microhaplotypes" }, "sequencing_info": { - "description": "a list of sequencing info for this project", + "description": "a list of sequencing infos for this PMO file", "items": { "$ref": "#/$defs/SequencingInfo" }, "type": "array" }, "specimen_info": { - "description": "a list of all the specimens within this project", + "description": "a list of all the specimens within this PMO file", "items": { "$ref": "#/$defs/SpecimenInfo" }, @@ -716,7 +716,7 @@ "type": "array" }, "targeted_genomes": { - "description": "a list of genomes that the targets in TargetInfo refer to", + "description": "a list of genomes that any genomic location information refers to", "items": { "$ref": "#/$defs/GenomeInfo" }, @@ -756,7 +756,7 @@ "description": "what the intended genomic location of the primer is" }, "seq": { - "description": "the DNA sequence", + "description": "the sequence", "pattern": "^[A-z]+$", "type": "string" } @@ -769,7 +769,7 @@ }, "ProjectInfo": { "additionalProperties": true, - "description": "Information on project info", + "description": "Information on a project underwhich a collection of specimens belong to", "properties": { "BioProject_accession": { "description": "an SRA bioproject accession e.g. PRJNA33823", @@ -848,7 +848,7 @@ }, "gene_name": { "description": "an identifier of the gene, if any, is being covered with this targeted", - "pattern": "^[A-z-._0-9]+$", + "pattern": "^[A-z-._0-9:]+$", "type": [ "string", "null" @@ -1005,7 +1005,7 @@ }, "RepresentativeMicrohaplotype": { "additionalProperties": true, - "description": "the representative sequence for a microhaplotype, similar to a fast(a/q) format", + "description": "the representative sequence for a microhaplotype", "properties": { "alt_annotations": { "description": "a list of additional annotations associated with this microhaplotype, e.g. wildtype", @@ -1018,7 +1018,7 @@ ] }, "associated_protein_variants": { - "description": "a list of associated protein variants with this haplotype, e.g. amino acid changes/INDELS", + "description": "a list of protein variants for this haplotype, e.g. amino acid changes/INDELS", "items": { "$ref": "#/$defs/ProteinVariant" }, @@ -1028,7 +1028,7 @@ ] }, "associated_seq_variants": { - "description": "a list of associated sequence variants with this haplotype, e.g. SNPS, indels", + "description": "a list of sequence variants for this haplotype, e.g. SNPS, indels", "items": { "$ref": "#/$defs/GenomicLocation" }, @@ -1068,7 +1068,7 @@ "pattern": "^[A-z-._0-9]+$" }, "quality": { - "description": "the ansi fastq per base quality score for this sequence, this is optional", + "description": "the ASCII fastq per base quality score for this sequence, this is optional, must be same length as the sequence", "pattern": "^[A-z-._0-9]+$", "type": [ "string", @@ -1076,7 +1076,7 @@ ] }, "seq": { - "description": "the DNA sequence", + "description": "the sequence", "pattern": "^[A-z]+$", "type": "string" } @@ -1092,7 +1092,7 @@ "description": "a collection of representative sequences for microhaplotypes for all targets", "properties": { "targets": { - "description": "a list of the microhaplotype for each targets ", + "description": "a list of the microhaplotypes for each targets ", "items": { "$ref": "#/$defs/RepresentativeMicrohaplotypesForTarget" }, @@ -1107,7 +1107,7 @@ }, "RepresentativeMicrohaplotypesForTarget": { "additionalProperties": true, - "description": "a list of the representative sequence for a microhaplotypes, similar to a fast(a/q) format", + "description": "a list of the representative sequence for the microhaplotypes for a target", "properties": { "mhap_location": { "anyOf": [ @@ -1118,10 +1118,10 @@ "type": "null" } ], - "description": "a genomic location that was analyzed for this target info, this allows listing location that may be different from the full target location (e.g 1 base in from the full) " + "description": "a genomic location that was analyzed for this target info, this allows listing location that may be different from the full target location (e.g 1 trimmed off the full length) " }, "microhaplotypes": { - "description": "a list of the microhaplotypes detected for a target", + "description": "a list of all the microhaplotypes for a target", "items": { "$ref": "#/$defs/RepresentativeMicrohaplotype" }, @@ -1172,7 +1172,7 @@ "type": "string" }, "library_source": { - "description": "Source of amplification material (common names GENOMIC, TRANSCRIPTOMIC)", + "description": "Source of amplification material e.g. was it DNA (GENOMIC) or RNA (TRANSCRIPTOMIC) (common names GENOMIC, TRANSCRIPTOMIC)", "pattern": "^[A-z-._0-9 ]+$", "type": "string" }, @@ -1248,7 +1248,7 @@ "type": "string" }, "sequencing_info_name": { - "description": "a name of for the sequencing done, e.g. batch1", + "description": "a name for a specific sequencing run, e.g. batch1", "pattern": "^[A-z-._0-9 ]+$", "type": "string" } @@ -1270,7 +1270,7 @@ "description": "Information on specimen info", "properties": { "alternate_identifiers": { - "description": "a list of optional alternative names", + "description": "a list of alternative names", "items": { "pattern": "^[A-z-._0-9 ]+$", "type": "string" @@ -1386,7 +1386,7 @@ ] }, "host_sex": { - "description": "if specimen is from a person, the sex listed for that person", + "description": "if specimen is collected from a host with a sex, the sex listed for that host", "pattern": "^[A-z-._0-9 ]+$", "type": [ "string", @@ -1473,7 +1473,7 @@ ] }, "specimen_taxon_id": { - "description": "the NCBI taxonomy number of the organism in specimen, can list multiple if a mixed sample", + "description": "the NCBI taxonomy number of the organism(s) in the specimen, can list multiple if a mixed sample", "items": { "minimum": 0, "pattern": "^[0-9]+$", @@ -1557,15 +1557,15 @@ }, "TargetInfo": { "additionalProperties": true, - "description": "Information about a specific target within a genome", + "description": "Information about a specific targeted microhaplotype", "properties": { "forward_primer": { "$ref": "#/$defs/PrimerInfo", - "description": "the forward primer associated with this target" + "description": "the forward primer for this target" }, "gene_name": { "description": "an identifier of the gene, if any, is being covered with this targeted", - "pattern": "^[A-z-._0-9]+$", + "pattern": "^[A-z-._0-9:]+$", "type": [ "string", "null" @@ -1583,7 +1583,7 @@ "description": "the intended genomic location of the insert of the amplicon (the location between the end of the forward primer and the beginning of the reverse primer)" }, "markers_of_interest": { - "description": "a list of covered markers of interest", + "description": "a list of markers of interest that are covered by this target", "items": { "$ref": "#/$defs/MarkerOfInterest" }, @@ -1594,10 +1594,10 @@ }, "reverse_primer": { "$ref": "#/$defs/PrimerInfo", - "description": "the reverse primer associated with this target" + "description": "the reverse primer for this target" }, "target_attributes": { - "description": "a list of classification type for the primer target", + "description": "a list of classification types for this target", "items": { "type": "string" }, @@ -1607,7 +1607,7 @@ ] }, "target_name": { - "description": "an identifier for this target", + "description": "a name for this target", "pattern": "^[A-z-._0-9]+$", "type": "string" } @@ -1689,18 +1689,18 @@ "$id": "https://plasmogenepi.github.io/portable-microhaplotype-object", "$schema": "https://json-schema.org/draft/2019-09/schema", "additionalProperties": true, - "description": "Information on final results from a targeted amplicon analysis", + "description": "Information on final microhaplotype results from a targeted amplicon analysis with associated meta data", "metamodel_version": "1.7.0", "properties": { "bioinformatics_methods_info": { - "description": "the bioinformatics pipeline/methods used to generated the amplicon analysis for this project", + "description": "the bioinformatics pipeline/methods used to generated the microhaplotype analysis for this project", "items": { "$ref": "#/$defs/BioinformaticsMethodInfo" }, "type": "array" }, "bioinformatics_run_info": { - "description": "the runtime info for the bioinformatics pipeline used to generated the amplicon analysis for this project", + "description": "the runtime info for the bioinformatics pipeline used to generated the microhaplotypes analysis for this project", "items": { "$ref": "#/$defs/BioinformaticsRunInfo" }, @@ -1714,7 +1714,7 @@ "type": "array" }, "library_sample_info": { - "description": "a list of libraries of all the seq/amp of the specimens within this project", + "description": "a list of libraries of all the seq/amp of the specimens within this PMO file", "items": { "$ref": "#/$defs/LibrarySampleInfo" }, @@ -1739,7 +1739,7 @@ "type": "array" }, "read_counts_by_stage": { - "description": "the read counts for different stages of the pipeline", + "description": "the read counts for library_samples for different stages of the pipeline", "items": { "$ref": "#/$defs/ReadCountsByStage" }, @@ -1753,14 +1753,14 @@ "description": "a list of the information on the representative microhaplotypes" }, "sequencing_info": { - "description": "a list of sequencing info for this project", + "description": "a list of sequencing infos for this PMO file", "items": { "$ref": "#/$defs/SequencingInfo" }, "type": "array" }, "specimen_info": { - "description": "a list of all the specimens within this project", + "description": "a list of all the specimens within this PMO file", "items": { "$ref": "#/$defs/SpecimenInfo" }, @@ -1774,7 +1774,7 @@ "type": "array" }, "targeted_genomes": { - "description": "a list of genomes that the targets in TargetInfo refer to", + "description": "a list of genomes that any genomic location information refers to", "items": { "$ref": "#/$defs/GenomeInfo" }, From 36a3d354697d6d848e627a742c46dde5e15572cc Mon Sep 17 00:00:00 2001 From: Nicholas Hathaway Date: Wed, 5 Nov 2025 12:34:13 -0800 Subject: [PATCH 07/31] fixed example files; de-bumped version; --- docs/conf.py | 2 +- pyproject.toml | 2 +- src/pmotools/pmo_builder/merge_to_pmo.py | 5 +++-- src/pmotools/pmo_engine/pmo_processor.py | 4 ---- src/pmotools/pmo_engine/pmo_reader.py | 5 +++-- tests/data/combined_pmo_example.json | 12 ------------ tests/data/minimum_pmo_example_2.json | 13 ------------- tests/data/minimum_pmo_example_2.json.gz | Bin 24067 -> 24085 bytes tests/test_pmo_builder/test_merge_to_pmo.py | 4 ++-- uv.lock | 2 +- 10 files changed, 11 insertions(+), 38 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 4357844..be05304 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -14,7 +14,7 @@ project = "pmotools-python" copyright = "2024, Plasmogenepi" author = "Plasmogenepi" -release = "1.0.0" +release = "0.1.0" # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration diff --git a/pyproject.toml b/pyproject.toml index 7d83145..59be2ce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "pmotools" -version = "1.0.0" +version = "0.1.0" description = "Tools for building and analyzing PMO files" readme = "README.md" authors = [ diff --git a/src/pmotools/pmo_builder/merge_to_pmo.py b/src/pmotools/pmo_builder/merge_to_pmo.py index 12e006d..7aa5aa3 100644 --- a/src/pmotools/pmo_builder/merge_to_pmo.py +++ b/src/pmotools/pmo_builder/merge_to_pmo.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 from datetime import date import json +from pmotools import __version__ as __pmotools_version__ def merge_to_pmo( @@ -89,11 +90,11 @@ def _generate_pmo_header(): today = date.today().isoformat() # TODO: update to grab pmo version - will put this in a seperate PR pmo_header = { - "pmo_version": "1.0.0", + "pmo_version": __pmotools_version__, "creation_date": today, "generation_method": { "program_name": "pmotools-python", - "program_version": "1.0.0", + "program_version": __pmotools_version__, }, } return pmo_header diff --git a/src/pmotools/pmo_engine/pmo_processor.py b/src/pmotools/pmo_engine/pmo_processor.py index a2711e7..44288e6 100644 --- a/src/pmotools/pmo_engine/pmo_processor.py +++ b/src/pmotools/pmo_engine/pmo_processor.py @@ -7,7 +7,6 @@ import pandas as pd from collections import defaultdict from pmotools.pmo_engine.pmo_checker import PMOChecker -from pmotools.utils.schema_loader import load_schema from pmotools import __version__ as __pmotools_version__ @@ -534,9 +533,6 @@ def extract_allele_counts_freq_from_pmo( :param collapse_across_runs: whether to collapse count/freqs across bioinformatics_run_id runs :return: DataFrame with columns: bioinformatics_run_id, target, mhap_id, count, freq, target_total """ - schema = load_schema("portable_microhaplotype_object_v1.0.0.schema.json") - checker = PMOChecker(schema) - checker.check_for_required_base_fields(pmodata) allele_counts = defaultdict(lambda: defaultdict(lambda: defaultdict(int))) target_totals = defaultdict(lambda: defaultdict(int)) diff --git a/src/pmotools/pmo_engine/pmo_reader.py b/src/pmotools/pmo_engine/pmo_reader.py index 3b4f4af..742d4b4 100644 --- a/src/pmotools/pmo_engine/pmo_reader.py +++ b/src/pmotools/pmo_engine/pmo_reader.py @@ -6,6 +6,7 @@ import os import sys from collections import defaultdict +from pmotools import __version__ as __pmotools_version__ class PMOReader: @@ -62,11 +63,11 @@ def combine_multiple_pmos(pmos: list[dict]): # currently losing all info about previous header info, # consider coming up with something in standard that might preserve this info if needed pmo_out["pmo_header"] = { - "pmo_version": "v1.0.0", + "pmo_version": __pmotools_version__, "creation_date": datetime.datetime.now().strftime("%Y-%m-%d"), "generation_method": { "program_name": "pmotools-python.PMOReader.combine_multiple_pmos", - "program_version": "v1.0.0", + "program_version": __pmotools_version__, }, } diff --git a/tests/data/combined_pmo_example.json b/tests/data/combined_pmo_example.json index 54ce7f7..7b980b7 100644 --- a/tests/data/combined_pmo_example.json +++ b/tests/data/combined_pmo_example.json @@ -3950,18 +3950,6 @@ "program_description": "Extract reads from a bam file for a specific genomic locatioon and then assembles local haplotypes for that region", "program_version": "1.0.0-dev" }, - { - "additional_argument": [ - "--bamExtractTrimToRegion", - "--bed /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_withPrimers.bed", - "--genomeDir /tank/data/genomes/plasmodium/genomes/pf/genomes/", - "--primaryGenome Pf3D7", - "--bam bams/{SAMPLE}.sorted.bam" - ], - "program": "PathWeaver BamExtractPathwaysFromRegion", - "program_description": "Extract reads from a bam file for a specific genomic locatioon and then assembles local haplotypes for that region", - "program_version": "1.0.0-dev" - }, { "additional_argument": [ "--overWriteDir", diff --git a/tests/data/minimum_pmo_example_2.json b/tests/data/minimum_pmo_example_2.json index 016f01b..50673cd 100644 --- a/tests/data/minimum_pmo_example_2.json +++ b/tests/data/minimum_pmo_example_2.json @@ -17,19 +17,6 @@ "program_description" : "Extract reads from a bam file for a specific genomic locatioon and then assembles local haplotypes for that region", "program_version" : "1.0.0-dev" }, - { - "additional_argument" : - [ - "--bamExtractTrimToRegion", - "--bed /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_withPrimers.bed", - "--genomeDir /tank/data/genomes/plasmodium/genomes/pf/genomes/", - "--primaryGenome Pf3D7", - "--bam bams/{SAMPLE}.sorted.bam" - ], - "program" : "PathWeaver BamExtractPathwaysFromRegion", - "program_description" : "Extract reads from a bam file for a specific genomic locatioon and then assembles local haplotypes for that region", - "program_version" : "1.0.0-dev" - }, { "additional_argument" : [ diff --git a/tests/data/minimum_pmo_example_2.json.gz b/tests/data/minimum_pmo_example_2.json.gz index 4dbb70f327b98a1ff386a8d059d6c364c499e6e1..9ef4aba5f6ce326470ebacfcf472d187ab767d64 100644 GIT binary patch literal 24085 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 literal 24067 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

B4pcC5#U6Hfnh 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 Date: Wed, 5 Nov 2025 12:39:07 -0800 Subject: [PATCH 08/31] forgot to update unit test mdsum; --- tests/test_pmo_engine/test_pmo_processor.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/test_pmo_engine/test_pmo_processor.py b/tests/test_pmo_engine/test_pmo_processor.py index 845e7b5..b6e0fba 100755 --- a/tests/test_pmo_engine/test_pmo_processor.py +++ b/tests/test_pmo_engine/test_pmo_processor.py @@ -442,7 +442,7 @@ def test_extract_from_pmo_with_read_filter(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_filtered, f) - self.assertEqual("4a9f04348758dd684847dfd6d8555f93", md5sum_of_fnp(output_fnp)) + self.assertEqual("879b1a0c62a77a8fcc910a21d8ec9de6", md5sum_of_fnp(output_fnp)) checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_filtered) @@ -455,7 +455,7 @@ def test_filter_pmo_by_target_ids(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_select_targets, f) - self.assertEqual("911bac290439bf8d560f9a6bc6239c08", md5sum_of_fnp(output_fnp)) + self.assertEqual("d9525c0a067d8a291af8bf89b80bfb42", md5sum_of_fnp(output_fnp)) # check pmo extracted against PMO schema checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_select_targets) @@ -469,7 +469,7 @@ def test_filter_pmo_by_target_names(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_select_targets, f) - self.assertEqual("8baa9e81dd8c61a13655c8258899dd65", md5sum_of_fnp(output_fnp)) + self.assertEqual("853d0806237d4078abc601f0c7dcdc3c", md5sum_of_fnp(output_fnp)) # check pmo extracted against PMO schema checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_select_targets) @@ -483,7 +483,7 @@ def test_filter_pmo_by_library_sample_ids(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_select_targets, f) - self.assertEqual("5eedbb3df7ce897f3e6d7a8fd8bab4f9", md5sum_of_fnp(output_fnp)) + self.assertEqual("b942daeac359bbe063563f8692986d1c", md5sum_of_fnp(output_fnp)) # check pmo extracted against PMO schema checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_select_targets) @@ -499,7 +499,7 @@ def test_filter_pmo_by_library_sample_names(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_select_library_sample_names, f) - self.assertEqual("d1e96a4884a4c32b190891fdebb59f0c", md5sum_of_fnp(output_fnp)) + self.assertEqual("99873ba369fa94722969ab9ce6581287", md5sum_of_fnp(output_fnp)) # check pmo extracted against PMO schema checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_select_library_sample_names) @@ -513,7 +513,7 @@ def test_filter_pmo_by_specimen_ids(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_select_targets, f) - self.assertEqual("a70e00a2fce7fc7fd3a7a7a0f136ccdb", md5sum_of_fnp(output_fnp)) + self.assertEqual("b5d1d39d508a7c7c1d8ccce65c52bc5d", md5sum_of_fnp(output_fnp)) # check pmo extracted against PMO schema checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_select_targets) @@ -527,7 +527,7 @@ def test_filter_pmo_by_specimen_names(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_select_targets, f) - self.assertEqual("a70e00a2fce7fc7fd3a7a7a0f136ccdb", md5sum_of_fnp(output_fnp)) + self.assertEqual("b5d1d39d508a7c7c1d8ccce65c52bc5d", md5sum_of_fnp(output_fnp)) # check pmo extracted against PMO schema checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_select_targets) @@ -544,7 +544,7 @@ def test_extract_from_pmo_samples_with_meta_groupings(self): ) with open(output_fnp, "w") as f: json.dump(pmo_data_select_meta, f) - self.assertEqual("aeaa3c81a1c3ba7f748c0479bfcdcdd7", md5sum_of_fnp(output_fnp)) + self.assertEqual("338e838297d79a8038d8d5392a6ca57e", md5sum_of_fnp(output_fnp)) # check pmo extracted against PMO schema checker = PMOChecker(self.pmo_jsonschema_data) checker.validate_pmo_json(pmo_data_select_meta) From 5c638b363035dc3451f633ecf64c0931664a4241 Mon Sep 17 00:00:00 2001 From: kathryn1995 Date: Sat, 8 Nov 2025 15:20:20 -0800 Subject: [PATCH 09/31] Add integration test for when schema updates --- src/pmotools/pmo_builder/merge_to_pmo.py | 53 ++- src/pmotools/pmo_builder/metatable_to_pmo.py | 7 +- tests/test_pmo_builder/test_merge_to_pmo.py | 2 + .../test_schema_validation_integration.py | 346 ++++++++++++++++++ 4 files changed, 401 insertions(+), 7 deletions(-) create mode 100644 tests/test_pmo_builder/test_schema_validation_integration.py diff --git a/src/pmotools/pmo_builder/merge_to_pmo.py b/src/pmotools/pmo_builder/merge_to_pmo.py index aa3c31d..b380719 100644 --- a/src/pmotools/pmo_builder/merge_to_pmo.py +++ b/src/pmotools/pmo_builder/merge_to_pmo.py @@ -1,6 +1,18 @@ #!/usr/bin/env python3 from datetime import date -import json + +import numpy as np + + +def _convert_numpy_scalars(obj): + """Recursively convert numpy scalar types to native Python types.""" + if isinstance(obj, dict): + return {key: _convert_numpy_scalars(value) for key, value in obj.items()} + if isinstance(obj, list): + return [_convert_numpy_scalars(value) for value in obj] + if isinstance(obj, np.generic): + return obj.item() + return obj def merge_to_pmo( @@ -36,12 +48,21 @@ def merge_to_pmo( bioinfo_method_info = [dict(d) for d in bioinfo_method_info] bioinfo_run_info = [dict(d) for d in bioinfo_run_info] project_info = [dict(d) for d in project_info] - panel_info = json.loads(json.dumps(panel_info)) - mhap_info = json.loads(json.dumps(mhap_info)) + panel_info = _convert_numpy_scalars(panel_info) + mhap_info = _convert_numpy_scalars(mhap_info) # Handle read_counts_by_stage_info if provided if read_counts_by_stage_info is not None: - read_counts_by_stage_info = [dict(d) for d in read_counts_by_stage_info] + read_counts_by_stage_info = [ + _convert_numpy_scalars(dict(d)) for d in read_counts_by_stage_info + ] + + specimen_info = _convert_numpy_scalars(specimen_info) + library_sample_info = _convert_numpy_scalars(library_sample_info) + sequencing_info = _convert_numpy_scalars(sequencing_info) + bioinfo_method_info = _convert_numpy_scalars(bioinfo_method_info) + bioinfo_run_info = _convert_numpy_scalars(bioinfo_run_info) + project_info = _convert_numpy_scalars(project_info) _replace_names_with_IDs( specimen_info, @@ -74,7 +95,7 @@ def merge_to_pmo( if read_counts_by_stage_info is not None: pmo["read_counts_by_stage"] = read_counts_by_stage_info - return pmo + return _convert_numpy_scalars(pmo) def _make_lookup(dict, key): @@ -121,6 +142,7 @@ def _report_missing_IDs( missing_libs, missing_read_counts_bioinfo_runs, missing_read_counts_libs, + missing_read_counts_targets, ): if any( [ @@ -133,6 +155,7 @@ def _report_missing_IDs( missing_libs, missing_read_counts_bioinfo_runs, missing_read_counts_libs, + missing_read_counts_targets, ] ): error_message = ( @@ -156,6 +179,8 @@ def _report_missing_IDs( error_message += f"Bioinformatics run names in Read Counts by Stage not in Bioinformatic Run Info: {missing_read_counts_bioinfo_runs}\n" if missing_read_counts_libs: error_message += f"Library Sample names in Read Counts by Stage not in Library Sample Info: {missing_read_counts_libs}\n" + if missing_read_counts_targets: + error_message += f"Target names in Read Counts by Stage not in Target Info: {missing_read_counts_targets}\n" raise ValueError(error_message) @@ -222,6 +247,8 @@ def _replace_names_with_IDs( # Replace bioinformatics_run_name and library_sample_name if provided missing_read_counts_bioinfo_runs = [] missing_read_counts_libs = [] + missing_read_counts_targets = [] + target_lookup = _make_lookup(panel_info["target_info"], "target_name") if read_counts_by_stage_info is not None: # Replace bioinformatics_run_name with bioinformatics_run_id missing_read_counts_bioinfo_runs = _replace_key_with_id( @@ -231,7 +258,7 @@ def _replace_names_with_IDs( "bioinformatics_run_id", ) - # Replace library_sample_name with library_sample_id in each run + # Replace library_sample_name with library_sample_id in each run and map targets for read_counts_run in read_counts_by_stage_info: missing_read_counts_libs += _replace_key_with_id( read_counts_run["read_counts_by_library_sample_by_stage"], @@ -241,6 +268,19 @@ def _replace_names_with_IDs( lookup=lib_sample_lookup, ) + for library_entry in read_counts_run.get( + "read_counts_by_library_sample_by_stage", [] + ): + target_entries = library_entry.get("read_counts_for_targets") or [] + for target_entry in target_entries: + target_name = target_entry.pop("target_name", None) + if target_name is None: + continue + if target_name in target_lookup: + target_entry["target_id"] = target_lookup[target_name] + else: + missing_read_counts_targets.append(target_name) + # If any names were missing from reference tables error _report_missing_IDs( missing_projects, @@ -252,4 +292,5 @@ def _replace_names_with_IDs( missing_libs, missing_read_counts_bioinfo_runs, missing_read_counts_libs, + missing_read_counts_targets, ) diff --git a/src/pmotools/pmo_builder/metatable_to_pmo.py b/src/pmotools/pmo_builder/metatable_to_pmo.py index 35c3738..217c739 100644 --- a/src/pmotools/pmo_builder/metatable_to_pmo.py +++ b/src/pmotools/pmo_builder/metatable_to_pmo.py @@ -362,12 +362,17 @@ def add_plate_info( content_row[plate_row_col].iloc[0].upper() if plate_row_col else None ) plate_col_val = content_row[plate_col_col].iloc[0] if plate_col_col else None + if plate_col_val is not None and not pd.isna(plate_col_val): + try: + plate_col_val = int(plate_col_val) + except (TypeError, ValueError): + plate_col_val = plate_col_val plate_info = {} if plate_name_val: plate_info["plate_name"] = plate_name_val if plate_row_val: plate_info["plate_row"] = plate_row_val - if plate_col_val: + if plate_col_val is not None and not pd.isna(plate_col_val): plate_info["plate_col"] = plate_col_val if plate_info: diff --git a/tests/test_pmo_builder/test_merge_to_pmo.py b/tests/test_pmo_builder/test_merge_to_pmo.py index bafec6c..7f8b981 100644 --- a/tests/test_pmo_builder/test_merge_to_pmo.py +++ b/tests/test_pmo_builder/test_merge_to_pmo.py @@ -35,6 +35,7 @@ def test_report_missing_IDs_passes(self): [], [], [], + [], ) def test_report_missing_IDs_fails_correctly(self): @@ -49,6 +50,7 @@ def test_report_missing_IDs_fails_correctly(self): [], [], [], + [], ) self.assertEqual( "The following fields were found in one table and not another:\nProject names in Specimen Info not in Project Info: ['something']\nTarget names in Representative Microhaplotypes not in Target Info: ['something else', 'something else2']\n", diff --git a/tests/test_pmo_builder/test_schema_validation_integration.py b/tests/test_pmo_builder/test_schema_validation_integration.py new file mode 100644 index 0000000..a3b099f --- /dev/null +++ b/tests/test_pmo_builder/test_schema_validation_integration.py @@ -0,0 +1,346 @@ +#!/usr/bin/env python3 +import json +from pathlib import Path + +import pandas as pd + +from pmotools import __version__ +from pmotools.pmo_builder.metatable_to_pmo import ( + library_sample_info_table_to_pmo, + specimen_info_table_to_pmo, +) +from pmotools.pmo_builder.panel_information_to_pmo import panel_info_table_to_pmo +from pmotools.pmo_builder.mhap_table_to_pmo import mhap_table_to_pmo +from pmotools.pmo_builder.read_count_by_stage_table_to_pmo import ( + read_count_by_stage_table_to_pmo, +) +from pmotools.pmo_builder.merge_to_pmo import merge_to_pmo +from pmotools.pmo_engine.pmo_checker import PMOChecker + + +def test_toy_pmo_validates_against_schema(): + """Build a toy PMO with builder functions and validate against the schema.""" + # Specimen information with optional fields + specimen_df = pd.DataFrame( + { + "specimen_name": ["specimen1"], + "specimen_taxon_id": [[5900]], + "host_taxon_id": [9606], + "collection_date": ["2024-01-01"], + "collection_country": ["Wonderland"], + "project_name": ["Test Project"], + "host_age": [35], + "host_sex": ["female"], + "lat_lon": ["37.77,-122.42"], + "specimen_collect_device": ["venipuncture"], + "specimen_comments": [["no issues"]], + "specimen_store_loc": ["Freezer 1"], + "drug_usage": [["DrugX"]], + "env_broad_scale": ["Urban"], + "env_local_scale": ["Clinic"], + "env_medium": ["Blood"], + "alternate_ids": [["ALT1", "ALT2"]], + "custom_note": ["Important specimen"], + } + ) + specimen_info = specimen_info_table_to_pmo( + specimen_df, + alternate_identifiers_col="alternate_ids", + drug_usage_col="drug_usage", + env_broad_scale_col="env_broad_scale", + env_local_scale_col="env_local_scale", + env_medium_col="env_medium", + host_age_col="host_age", + host_sex_col="host_sex", + specimen_collect_device_col="specimen_collect_device", + specimen_comments_col="specimen_comments", + specimen_store_loc_col="specimen_store_loc", + lat_lon_col="lat_lon", + additional_specimen_cols=["custom_note"], + ) + + # Sequencing information (manually constructed to satisfy schema requirements) + sequencing_info = [ + { + "sequencing_info_name": "seq_run1", + "seq_platform": "ILLUMINA", + "seq_instrument_model": "NextSeq 2000", + "library_layout": "PAIRED", + "library_strategy": "AMPLICON", + "library_source": "GENOMIC", + "library_selection": "PCR", + "library_kit": "MiSeq Reagent Kit v3", + "seq_center": "UCSF Core", + "seq_date": "2024-01-15", + "nucl_acid_amp": "https://example.org/amp", + "nucl_acid_ext": "https://example.org/ext", + } + ] + + # Library sample information with optional fields + library_df = pd.DataFrame( + { + "library_sample_name": ["lib1"], + "sequencing_info_name": ["seq_run1"], + "specimen_name": ["specimen1"], + "panel_name": ["panel1"], + "accession": ["ACC123"], + "prep_plate_name": ["PlateA"], + "prep_plate_row": ["B"], + "prep_plate_col": [3], + "library_note": ["High quality"], + } + ) + library_sample_info = library_sample_info_table_to_pmo( + library_df, + accession_col="accession", + library_prep_plate_name_col="prep_plate_name", + library_prep_plate_row_col="prep_plate_row", + library_prep_plate_col_col="prep_plate_col", + additional_library_sample_info_cols=["library_note"], + ) + + # Panel and target information with optional fields + target_df = pd.DataFrame( + { + "target_name": ["target1"], + "fwd_primer": ["ATGCATGC"], + "rev_primer": ["GCATGCAT"], + "reaction": ["rxn1"], + "forward_start": [100], + "forward_end": [107], + "reverse_start": [150], + "reverse_end": [157], + "insert_start": [110], + "insert_end": [149], + "chrom": ["chr1"], + "strand": ["+"], + "ref_seq": ["ATGCGCTA"], + "gene_name": ["geneA"], + "target_attributes": [["marker"]], + "amplicon_length": [250], + } + ) + genome_info = { + "name": "TestGenome", + "genome_version": "v1.0", + "taxon_id": [9999], + "url": "https://example.org/genome", + "chromosomes": ["chr1"], + "gff_url": "https://example.org/genome.gff", + } + panel_info = panel_info_table_to_pmo( + target_table=target_df, + panel_name="panel1", + genome_info=genome_info, + reaction_name_col="reaction", + forward_primers_start_col="forward_start", + forward_primers_end_col="forward_end", + reverse_primers_start_col="reverse_start", + reverse_primers_end_col="reverse_end", + insert_start_col="insert_start", + insert_end_col="insert_end", + chrom_col="chrom", + strand_col="strand", + ref_seq_col="ref_seq", + gene_name_col="gene_name", + target_attributes_col="target_attributes", + additional_target_info_cols=["amplicon_length"], + ) + + # Microhaplotype information with optional details + mhap_df = pd.DataFrame( + { + "library_sample_name": ["lib1"], + "target_name": ["target1"], + "seq": ["ATGCATGC"], + "reads": [42], + "bioinformatics_run_name": ["run1"], + "umis": [10], + "microhap_name": ["mh1"], + "pseudocigar": ["8M"], + "quality": ["ABCD"], + "mask_start": ["1"], + "mask_segment": ["2"], + "mask_replacement": ["2"], + "chrom": ["chr1"], + "start": [120], + "end": [127], + "ref_seq": ["ATGC"], + "strand": ["+"], + "custom_annotation": ["custom"], + "custom_detected": ["det-note"], + } + ) + mhap_info = mhap_table_to_pmo( + microhaplotype_table=mhap_df, + bioinformatics_run_name="bioinformatics_run_name", + umis_col="umis", + microhaplotype_name_col="microhap_name", + pseudocigar_col="pseudocigar", + quality_col="quality", + masking_seq_start_col="mask_start", + masking_seq_segment_size_col="mask_segment", + masking_replacement_size_col="mask_replacement", + chrom_col="chrom", + start_col="start", + end_col="end", + ref_seq_col="ref_seq", + strand_col="strand", + additional_representative_mhap_cols=["custom_annotation"], + additional_mhap_detected_cols=["custom_detected"], + ) + + # Read counts by stage with additional columns + total_raw_counts_df = pd.DataFrame( + { + "library_sample_name": ["lib1"], + "total_raw_count": [1000], + "bioinformatics_run_name": ["run1"], + "library_comment": ["primary run"], + } + ) + reads_by_stage_df = pd.DataFrame( + { + "library_sample_name": ["lib1"], + "target_name": ["target1"], + "stage": ["RawReads"], + "read_count": [800], + "bioinformatics_run_name": ["run1"], + "quality_score": [0.98], + "coverage_depth": [150], + } + ) + read_counts_by_stage_info = read_count_by_stage_table_to_pmo( + bioinformatics_run_name="bioinformatics_run_name", + total_raw_count_table=total_raw_counts_df, + reads_by_stage_table=reads_by_stage_df, + additional_library_sample_cols=["library_comment"], + additional_target_cols=["quality_score", "coverage_depth"], + ) + + # Bioinformatics method and run information + bioinfo_methods_info = [ + { + "bioinformatics_method_name": "Test Pipeline", + "demultiplexing_method": { + "program": "Cutadapt", + "program_version": "v1.0.0", + }, + "denoising_method": { + "program": "DADA2", + "program_version": "v1.0.0", + }, + "additional_methods": [ + { + "program": "CustomFilter", + "program_version": "v2.0.0", + } + ], + } + ] + bioinfo_run_info = [ + { + "bioinformatics_run_name": "run1", + "bioinformatics_methods_id": 0, + "run_date": "2024-02-01", + "run_comments": "First batch", + } + ] + + # Project info with optional metadata + project_info = [ + { + "project_name": "Test Project", + "project_description": "Toy project for schema validation.", + "project_type": "Surveillance", + "project_contributors": ["Alice", "Bob"], + "BioProject_accession": "PRJNA12345", + } + ] + + # Merge into PMO structure + pmo = merge_to_pmo( + specimen_info=specimen_info, + library_sample_info=library_sample_info, + sequencing_info=sequencing_info, + panel_info=panel_info, + mhap_info=mhap_info, + bioinfo_method_info=bioinfo_methods_info, + bioinfo_run_info=bioinfo_run_info, + project_info=project_info, + read_counts_by_stage_info=read_counts_by_stage_info, + ) + + # Load the schema and validate using PMOChecker + schemas_dir = Path(__file__).resolve().parents[2] / "src" / "pmotools" / "schemas" + schema_filename = f"portable_microhaplotype_object_v{__version__}.schema.json" + schema_path = schemas_dir / schema_filename + if not schema_path.exists(): + available_schemas = sorted( + schemas_dir.glob("portable_microhaplotype_object_*.schema.json") + ) + if not available_schemas: + raise FileNotFoundError( + f"No schema files found in {schemas_dir} matching " + "'portable_microhaplotype_object_*.schema.json'" + ) + schema_path = available_schemas[-1] + with schema_path.open(encoding="utf-8") as schema_file: + schema = json.load(schema_file) + + checker = PMOChecker(schema) + checker.check_for_required_base_fields(pmo) + checker.validate_pmo_json(pmo) + + # Validate optional fields propagated through builders + specimen_entry = pmo["specimen_info"][0] + assert specimen_entry["host_age"] == 35 + assert specimen_entry["specimen_store_loc"] == "Freezer 1" + assert specimen_entry["custom_note"] == "Important specimen" + + sequencing_entry = pmo["sequencing_info"][0] + assert sequencing_entry["seq_center"] == "UCSF Core" + assert sequencing_entry["library_kit"] == "MiSeq Reagent Kit v3" + + library_entry = pmo["library_sample_info"][0] + assert library_entry["accession"] == "ACC123" + assert library_entry["library_note"] == "High quality" + + genome_entry = pmo["targeted_genomes"][0] + assert genome_entry["chromosomes"] == ["chr1"] + assert genome_entry["gff_url"] == "https://example.org/genome.gff" + + target_entry = pmo["target_info"][0] + assert target_entry["gene_name"] == "geneA" + assert target_entry["amplicon_length"] == 250 + assert target_entry["insert_location"]["chrom"] == "chr1" + + representative_mhap = pmo["representative_microhaplotypes"]["targets"][0][ + "microhaplotypes" + ][0] + assert representative_mhap["microhaplotype_name"] == "mh1" + assert representative_mhap["masking"][0]["seq_segment_size"] == 2 + assert representative_mhap["custom_annotation"] == "custom" + + detected_mhap = pmo["detected_microhaplotypes"][0]["library_samples"][0][ + "target_results" + ][0]["mhaps"][0] + assert detected_mhap["umis"] == 10 + assert detected_mhap["custom_detected"] == "det-note" + + read_counts_run = pmo["read_counts_by_stage"][0] + assert read_counts_run["bioinformatics_run_id"] == 0 + library_counts = read_counts_run["read_counts_by_library_sample_by_stage"][0] + assert library_counts["library_sample_id"] == 0 + target_counts = library_counts["read_counts_for_targets"][0] + assert target_counts["target_id"] == 0 + stage_entry = target_counts["stages"][0] + assert stage_entry["quality_score"] == 0.98 + assert stage_entry["coverage_depth"] == 150 + + assert pmo["project_info"][0]["project_type"] == "Surveillance" + assert ( + pmo["bioinformatics_methods_info"][0]["additional_methods"][0]["program"] + == "CustomFilter" + ) From 811fae0c7501a480c94162a53b0948c6ce0389dc Mon Sep 17 00:00:00 2001 From: kathryn1995 Date: Sat, 8 Nov 2025 15:26:42 -0800 Subject: [PATCH 10/31] Include parasitemia in test --- .../test_schema_validation_integration.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/test_pmo_builder/test_schema_validation_integration.py b/tests/test_pmo_builder/test_schema_validation_integration.py index a3b099f..5a168c0 100644 --- a/tests/test_pmo_builder/test_schema_validation_integration.py +++ b/tests/test_pmo_builder/test_schema_validation_integration.py @@ -41,6 +41,8 @@ def test_toy_pmo_validates_against_schema(): "env_medium": ["Blood"], "alternate_ids": [["ALT1", "ALT2"]], "custom_note": ["Important specimen"], + "parasite_density": [1200], + "parasite_density_method": ["microscopy"], } ) specimen_info = specimen_info_table_to_pmo( @@ -56,6 +58,8 @@ def test_toy_pmo_validates_against_schema(): specimen_comments_col="specimen_comments", specimen_store_loc_col="specimen_store_loc", lat_lon_col="lat_lon", + parasite_density_col="parasite_density", + parasite_density_method_col="parasite_density_method", additional_specimen_cols=["custom_note"], ) @@ -298,6 +302,11 @@ def test_toy_pmo_validates_against_schema(): assert specimen_entry["host_age"] == 35 assert specimen_entry["specimen_store_loc"] == "Freezer 1" assert specimen_entry["custom_note"] == "Important specimen" + assert specimen_entry["parasite_density_info"][0]["parasite_density"] == 1200 + assert ( + specimen_entry["parasite_density_info"][0]["parasite_density_method"] + == "microscopy" + ) sequencing_entry = pmo["sequencing_info"][0] assert sequencing_entry["seq_center"] == "UCSF Core" From 57ffcda96b772daf6802b9f2961db14592437e0e Mon Sep 17 00:00:00 2001 From: kathryn1995 Date: Mon, 17 Nov 2025 14:25:22 -0800 Subject: [PATCH 11/31] Add function to merge panels --- .../pmo_builder/panel_information_to_pmo.py | 90 ++++++++- .../test_panel_information_to_pmo.py | 177 ++++++++++++++++++ 2 files changed, 266 insertions(+), 1 deletion(-) diff --git a/src/pmotools/pmo_builder/panel_information_to_pmo.py b/src/pmotools/pmo_builder/panel_information_to_pmo.py index 36d381e..45251ea 100644 --- a/src/pmotools/pmo_builder/panel_information_to_pmo.py +++ b/src/pmotools/pmo_builder/panel_information_to_pmo.py @@ -1,6 +1,9 @@ #!/usr/bin/env python3 -import pandas as pd +import copy +import json + import numpy as np +import pandas as pd import warnings from ..pmo_builder.json_convert_utils import check_additional_columns_exist @@ -383,3 +386,88 @@ def check_genome_info(genome_info): raise TypeError( f"genome_info must be a dict, but got {type(genome_info).__name__}" ) + + +def merge_panel_info_dicts(panel_info_dicts: list[dict]) -> dict: + """ + Merge multiple panel_info dictionaries produced by panel_info_table_to_pmo. + + Target lists are concatenated (deduplicated by target_name) and all + genome references are collapsed so that genome identifiers remain valid + across the merged structure. + """ + if not panel_info_dicts: + raise ValueError("panel_info_dicts must contain at least one entry.") + + merged_targets: list[dict] = [] + target_name_to_index: dict[str, int] = {} + merged_panels: list[dict] = [] + + merged_genomes: list[dict] = [] + genome_signature_to_index: dict[str, int] = {} + + def canonicalise_genome(genome: dict) -> str: + return json.dumps(genome, sort_keys=True) + + def remap_genome_ids(target_entry: dict, mapping: dict[int, int]) -> None: + insert_loc = target_entry.get("insert_location") + if insert_loc and "genome_id" in insert_loc: + old_id = insert_loc["genome_id"] + if old_id in mapping: + insert_loc["genome_id"] = mapping[old_id] + + for primer_key in ("forward_primer", "reverse_primer"): + primer = target_entry.get(primer_key) + if primer and isinstance(primer, dict): + primer_loc = primer.get("location") + if primer_loc and "genome_id" in primer_loc: + old_id = primer_loc["genome_id"] + if old_id in mapping: + primer_loc["genome_id"] = mapping[old_id] + + for panel_dict in panel_info_dicts: + if "targeted_genomes" not in panel_dict: + raise ValueError("panel_info_dict missing 'targeted_genomes'.") + + genome_mapping: dict[int, int] = {} + for idx, genome in enumerate(panel_dict["targeted_genomes"]): + signature = canonicalise_genome(genome) + if signature not in genome_signature_to_index: + genome_signature_to_index[signature] = len(merged_genomes) + merged_genomes.append(genome) + genome_mapping[idx] = genome_signature_to_index[signature] + + if "target_info" not in panel_dict: + raise ValueError("panel_info_dict missing 'target_info'.") + + for target in panel_dict["target_info"]: + target_name = target.get("target_name") + if target_name is None: + raise ValueError("Each target_info entry must include a 'target_name'.") + + if target_name not in target_name_to_index: + target_copy = copy.deepcopy(target) + remap_genome_ids(target_copy, genome_mapping) + target_name_to_index[target_name] = len(merged_targets) + merged_targets.append(target_copy) + + for panel in panel_dict.get("panel_info", []): + remapped_panel = {"panel_name": panel["panel_name"], "reactions": []} + for reaction in panel.get("reactions", []): + remapped_targets = [] + for target_idx in reaction["panel_targets"]: + target_name = panel_dict["target_info"][target_idx]["target_name"] + remapped_targets.append(target_name_to_index[target_name]) + remapped_panel["reactions"].append( + { + "reaction_name": reaction["reaction_name"], + "panel_targets": remapped_targets, + } + ) + merged_panels.append(remapped_panel) + + return { + "panel_info": merged_panels, + "target_info": merged_targets, + "targeted_genomes": merged_genomes, + } diff --git a/tests/test_pmo_builder/test_panel_information_to_pmo.py b/tests/test_pmo_builder/test_panel_information_to_pmo.py index 8c87fbd..34fef08 100644 --- a/tests/test_pmo_builder/test_panel_information_to_pmo.py +++ b/tests/test_pmo_builder/test_panel_information_to_pmo.py @@ -5,6 +5,7 @@ from pmotools.pmo_builder.panel_information_to_pmo import ( PMOPanelBuilder, check_genome_info, + merge_panel_info_dicts, ) @@ -185,6 +186,182 @@ def test_build_panel_info(self): } self.assertEqual(panel_info, expected_panel_info) + def test_merge_panel_info_dicts_no_overlap(self): + target_info_b = [ + { + "target_name": "target4", + "forward_primer": {"seq": "CTA"}, + "reverse_primer": {"seq": "TGG"}, + }, + { + "target_name": "target5", + "forward_primer": {"seq": "TTG"}, + "reverse_primer": {"seq": "ATT"}, + }, + ] + + panel_info_dict_a = { + "panel_info": [ + { + "panel_name": "test_panel1", + "reactions": [{"reaction_name": "1", "panel_targets": [0, 1, 2]}], + } + ], + "targeted_genomes": [self.genome_info], + "target_info": self.min_target_json, + } + panel_info_dict_b = { + "panel_info": [ + { + "panel_name": "test_panel2", + "reactions": [{"reaction_name": "1", "panel_targets": [0, 1]}], + } + ], + "targeted_genomes": [self.genome_info], + "target_info": target_info_b, + } + + merged = merge_panel_info_dicts([panel_info_dict_a, panel_info_dict_b]) + + expected_merged = { + "panel_info": [ + { + "panel_name": "test_panel1", + "reactions": [{"reaction_name": "1", "panel_targets": [0, 1, 2]}], + }, + { + "panel_name": "test_panel2", + "reactions": [{"reaction_name": "1", "panel_targets": [3, 4]}], + }, + ], + "targeted_genomes": [self.genome_info], + "target_info": self.min_target_json + target_info_b, + } + + self.assertEqual(merged, expected_merged) + + def test_merge_panel_info_dicts_with_overlap_no_reaction(self): + target_info_b = [ + { + "target_name": "target2", + "forward_primer": {"seq": "CTA"}, + "reverse_primer": {"seq": "TGG"}, + }, + { + "target_name": "target5", + "forward_primer": {"seq": "TTG"}, + "reverse_primer": {"seq": "ATT"}, + }, + ] + + panel_info_dict_a = { + "panel_info": [ + { + "panel_name": "test_panel1", + "reactions": [{"reaction_name": "1", "panel_targets": [0, 1, 2]}], + } + ], + "targeted_genomes": [self.genome_info], + "target_info": self.min_target_json, + } + panel_info_dict_b = { + "panel_info": [ + { + "panel_name": "test_panel2", + "reactions": [{"reaction_name": "1", "panel_targets": [0, 1]}], + } + ], + "targeted_genomes": [self.genome_info], + "target_info": target_info_b, + } + + merged = merge_panel_info_dicts([panel_info_dict_a, panel_info_dict_b]) + + expected_merged = { + "panel_info": [ + { + "panel_name": "test_panel1", + "reactions": [{"reaction_name": "1", "panel_targets": [0, 1, 2]}], + }, + { + "panel_name": "test_panel2", + "reactions": [{"reaction_name": "1", "panel_targets": [1, 3]}], + }, + ], + "targeted_genomes": [self.genome_info], + "target_info": self.min_target_json + + [ + { + "target_name": "target5", + "forward_primer": {"seq": "TTG"}, + "reverse_primer": {"seq": "ATT"}, + }, + ], + } + + self.assertEqual(merged, expected_merged) + + def test_merge_panel_info_dicts_with_overlap(self): + target_info_b = [ + { + "target_name": "target2", + "forward_primer": {"seq": "CTA"}, + "reverse_primer": {"seq": "TGG"}, + }, + { + "target_name": "target5", + "forward_primer": {"seq": "TTG"}, + "reverse_primer": {"seq": "ATT"}, + }, + ] + + panel_info_dict_a = { + "panel_info": [ + { + "panel_name": "test_panel1", + "reactions": [{"reaction_name": "1", "panel_targets": [0, 1, 2]}], + } + ], + "targeted_genomes": [self.genome_info], + "target_info": self.min_target_json, + } + panel_info_dict_b = { + "panel_info": [ + { + "panel_name": "test_panel2", + "reactions": [{"reaction_name": "1", "panel_targets": [0, 1]}], + } + ], + "targeted_genomes": [self.genome_info], + "target_info": target_info_b, + } + + merged = merge_panel_info_dicts([panel_info_dict_a, panel_info_dict_b]) + + expected_merged = { + "panel_info": [ + { + "panel_name": "test_panel1", + "reactions": [{"reaction_name": "1", "panel_targets": [0, 1, 2]}], + }, + { + "panel_name": "test_panel2", + "reactions": [{"reaction_name": "1", "panel_targets": [1, 3]}], + }, + ], + "targeted_genomes": [self.genome_info], + "target_info": self.min_target_json + + [ + { + "target_name": "target5", + "forward_primer": {"seq": "TTG"}, + "reverse_primer": {"seq": "ATT"}, + }, + ], + } + + self.assertEqual(merged, expected_merged) + def test_build_panel_info_multi_reaction(self): target_table_with_reactions = self.min_target_table target_table_with_reactions["reaction"] = [ From 1f763fa6cee7c97b39d5436a2250fe6135281054 Mon Sep 17 00:00:00 2001 From: kathryn1995 Date: Mon, 17 Nov 2025 14:28:00 -0800 Subject: [PATCH 12/31] Remove unused library --- src/pmotools/pmo_builder/merge_to_pmo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pmotools/pmo_builder/merge_to_pmo.py b/src/pmotools/pmo_builder/merge_to_pmo.py index 77e757f..c52d7b3 100644 --- a/src/pmotools/pmo_builder/merge_to_pmo.py +++ b/src/pmotools/pmo_builder/merge_to_pmo.py @@ -1,9 +1,9 @@ #!/usr/bin/env python3 from datetime import date import numpy as np -import json from pmotools import __version__ as __pmotools_version__ + def _convert_numpy_scalars(obj): """Recursively convert numpy scalar types to native Python types.""" if isinstance(obj, dict): From 97962dd3bb4a9fff266bcf9ed1378124c6f85559 Mon Sep 17 00:00:00 2001 From: kathryn1995 Date: Mon, 17 Nov 2025 14:51:17 -0800 Subject: [PATCH 13/31] Update validation to most recent schema --- .../read_count_by_stage_table_to_pmo.py | 2 +- .../test_read_count_by_stage_table_to_pmo.py | 18 +++++++------ .../test_schema_validation_integration.py | 27 ++++++++----------- 3 files changed, 22 insertions(+), 25 deletions(-) diff --git a/src/pmotools/pmo_builder/read_count_by_stage_table_to_pmo.py b/src/pmotools/pmo_builder/read_count_by_stage_table_to_pmo.py index 38e3709..8877412 100644 --- a/src/pmotools/pmo_builder/read_count_by_stage_table_to_pmo.py +++ b/src/pmotools/pmo_builder/read_count_by_stage_table_to_pmo.py @@ -261,7 +261,7 @@ def _process_reads_by_stage_table( reads_data[sample_name][target_name] = {} # Create stage data with read count and additional columns - stage_data = {"stage": stage, "read_count": read_count} + stage_data = {"stage": stage, "reads": read_count} # Add additional columns if present and not null if additional_cols: diff --git a/tests/test_pmo_builder/test_read_count_by_stage_table_to_pmo.py b/tests/test_pmo_builder/test_read_count_by_stage_table_to_pmo.py index 92abf33..4bf01e1 100644 --- a/tests/test_pmo_builder/test_read_count_by_stage_table_to_pmo.py +++ b/tests/test_pmo_builder/test_read_count_by_stage_table_to_pmo.py @@ -50,7 +50,7 @@ def setUp(self): "denoised", "demultiplexed", ], - "read_count": [100, 80, 50, 200, 150, 75], + "reads": [100, 80, 50, 200, 150, 75], } ) @@ -76,8 +76,8 @@ def setUp(self): { "target_name": "target1", "stages": [ - {"stage": "demultiplexed", "read_count": 100}, - {"stage": "denoised", "read_count": 80}, + {"stage": "demultiplexed", "reads": 100}, + {"stage": "denoised", "reads": 80}, ], } ], @@ -90,6 +90,7 @@ def test_basic_functionality_long_format(self): result = read_count_by_stage_table_to_pmo( total_raw_count_table=self.total_raw_count_table, bioinformatics_run_name="test_run", + read_count_col="reads", reads_by_stage_table=self.reads_by_stage_table_long, ) @@ -367,7 +368,7 @@ def test_process_reads_by_stage_table_long(self): "library_sample_name", "target_name", "stage", - "read_count", + "reads", ) self.assertIn("sample1", result) @@ -376,7 +377,7 @@ def test_process_reads_by_stage_table_long(self): # Now stages are dictionaries with stage and read_count demultiplexed_data = result["sample1"]["target1"]["demultiplexed"] self.assertEqual(demultiplexed_data["stage"], "demultiplexed") - self.assertEqual(demultiplexed_data["read_count"], 100) + self.assertEqual(demultiplexed_data["reads"], 100) def test_process_reads_by_stage_table_wide(self): """Test the _process_reads_by_stage_table helper function with wide format.""" @@ -385,7 +386,7 @@ def test_process_reads_by_stage_table_wide(self): "library_sample_name", "target_name", ["demultiplexed", "denoised", "filtered"], - "read_count", + "reads", ) self.assertIn("sample1", result) @@ -394,7 +395,7 @@ def test_process_reads_by_stage_table_wide(self): # Now stages are dictionaries with stage and read_count demultiplexed_data = result["sample1"]["target1"]["demultiplexed"] self.assertEqual(demultiplexed_data["stage"], "demultiplexed") - self.assertEqual(demultiplexed_data["read_count"], 100) + self.assertEqual(demultiplexed_data["reads"], 100) def test_build_read_counts_by_stage_output(self): """Test the _build_read_counts_by_stage_output helper function.""" @@ -462,7 +463,7 @@ def test_numeric_read_counts(self): # Should be converted to int demultiplexed_data = result["sample1"]["target1"]["demultiplexed"] - self.assertEqual(demultiplexed_data["read_count"], 100) + self.assertEqual(demultiplexed_data["reads"], 100) def test_missing_values_handling(self): """Test handling of missing values in additional columns.""" @@ -613,6 +614,7 @@ def test_single_run_behavior_unchanged(self): total_raw_count_table=self.total_raw_count_table, bioinformatics_run_name="test_run", reads_by_stage_table=self.reads_by_stage_table_long, + read_count_col="reads", ) # Should return a list with one entry diff --git a/tests/test_pmo_builder/test_schema_validation_integration.py b/tests/test_pmo_builder/test_schema_validation_integration.py index 5a168c0..df00da3 100644 --- a/tests/test_pmo_builder/test_schema_validation_integration.py +++ b/tests/test_pmo_builder/test_schema_validation_integration.py @@ -226,21 +226,20 @@ def test_toy_pmo_validates_against_schema(): # Bioinformatics method and run information bioinfo_methods_info = [ { - "bioinformatics_method_name": "Test Pipeline", - "demultiplexing_method": { - "program": "Cutadapt", - "program_version": "v1.0.0", - }, - "denoising_method": { - "program": "DADA2", - "program_version": "v1.0.0", - }, - "additional_methods": [ + "methods": [ + { + "program": "Cutadapt", + "program_version": "v1.0.0", + }, + { + "program": "DADA2", + "program_version": "v1.0.0", + }, { "program": "CustomFilter", "program_version": "v2.0.0", - } - ], + }, + ] } ] bioinfo_run_info = [ @@ -349,7 +348,3 @@ def test_toy_pmo_validates_against_schema(): assert stage_entry["coverage_depth"] == 150 assert pmo["project_info"][0]["project_type"] == "Surveillance" - assert ( - pmo["bioinformatics_methods_info"][0]["additional_methods"][0]["program"] - == "CustomFilter" - ) From 9aedb2e3afdc16cd81d57712faf7e528fb76752c Mon Sep 17 00:00:00 2001 From: kathryn1995 Date: Mon, 17 Nov 2025 16:11:26 -0800 Subject: [PATCH 14/31] Update specimen function for new schema; check nulls in required; strip missing optionals --- .../pmo_builder/json_convert_utils.py | 45 ++ src/pmotools/pmo_builder/metatable_to_pmo.py | 46 +- .../test_pmo_builder/test_metatable_to_pmo.py | 464 ++++++++++++++++++ 3 files changed, 552 insertions(+), 3 deletions(-) diff --git a/src/pmotools/pmo_builder/json_convert_utils.py b/src/pmotools/pmo_builder/json_convert_utils.py index 6eb89e9..e64c063 100644 --- a/src/pmotools/pmo_builder/json_convert_utils.py +++ b/src/pmotools/pmo_builder/json_convert_utils.py @@ -3,3 +3,48 @@ def check_additional_columns_exist(df, additional_column_list): missing_cols = set(additional_column_list) - set(df.columns) if missing_cols: raise ValueError(f"Missing additional columns: {missing_cols}") + + +def remove_optional_null_values(json_data, optional_columns): + """ + Remove empty values from optional fields in a list of dictionaries. + + :param json_data: List of dictionaries to process + :param optional_columns: List of optional field names to check for empty values + :return: List of dictionaries with empty optional fields removed + + Empty values include: None, empty strings (''), empty dicts ({}), and empty lists ([]) + """ + # Convert optional_columns to a set for faster lookup + optional_fields_set = set(optional_columns) if optional_columns else set() + + for item in json_data: + # Collect keys to remove to avoid modifying dict while iterating + keys_to_remove = [] + for key, value in item.items(): + if key in optional_fields_set: + # Check if value is empty: None, empty string, empty dict, or empty list + if value is None or value == "" or value == {} or value == []: + keys_to_remove.append(key) + + # Remove the empty optional fields + for key in keys_to_remove: + del item[key] + + return json_data + + +def check_null_values(df, columns): + """ + Check for null values in a list of columns + + :param df: DataFrame to check + :param columns: List of column names to check + :return: None + """ + null_columns = [] + for col in columns: + if df[col].isna().any(): + null_columns.append(col) + if null_columns: + raise ValueError(f"The following columns contain null values: {null_columns}") diff --git a/src/pmotools/pmo_builder/metatable_to_pmo.py b/src/pmotools/pmo_builder/metatable_to_pmo.py index 35c3738..8e5f887 100644 --- a/src/pmotools/pmo_builder/metatable_to_pmo.py +++ b/src/pmotools/pmo_builder/metatable_to_pmo.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import pandas as pd import json +from .json_convert_utils import remove_optional_null_values, check_null_values def pandas_table_to_json(contents: pd.DataFrame, return_indexed_dict: bool = False): @@ -124,7 +125,7 @@ def specimen_info_table_to_pmo( collection_country_col: str = "collection_country", project_name_col: str = "project_name", alternate_identifiers_col: str = None, - # collector_chief_scientist_col: str = None, + blood_meal_col: str = None, drug_usage_col: str = None, env_broad_scale_col: str = None, env_local_scale_col: str = None, @@ -132,12 +133,16 @@ def specimen_info_table_to_pmo( geo_admin1_col: str = None, geo_admin2_col: str = None, geo_admin3_col: str = None, + gravid_col: str = None, + gravidity_col: str = None, + has_travel_out_six_month_col: str = None, host_age_col: str = None, host_sex_col: str = None, host_subject_id: str = None, lat_lon_col: str = None, parasite_density_col: str = None, parasite_density_method_col: str = None, + specimen_accession_col: str = None, storage_plate_col_col: str = None, storage_plate_name_col: str = None, storage_plate_row_col: str = None, @@ -145,8 +150,15 @@ def specimen_info_table_to_pmo( specimen_collect_device_col: str = None, specimen_comments_col: str = None, specimen_store_loc_col: str = None, + specimen_type_col: str = None, + treatment_status_col: str = None, additional_specimen_cols: list | None = None, - list_values_specimen_columns: list | None = ["alternate_identifiers_col"], + list_values_specimen_columns: list | None = [ + "alternate_identifiers_col", + "drug_usage_col", + "specimen_comments_col", + "treatment_status_col", + ], list_values_specimen_columns_delimiter: str = ",", ): """ @@ -160,6 +172,7 @@ def specimen_info_table_to_pmo( :param collection_country_col (string): Name of country collected in (admin level 0). Default : collection_country :param project_name_col (string): Name of the project. Default : project_name :param alternate_identifiers_col (Optional[str]): List of optional alternative names for the samples + :param blood_meal_col (Optional[str]): Whether host specimen has had a recent blood meal :param drug_usage_col (Optional[str]): Any drug used by subject and the frequency of usage; can include multiple drugs used :param env_broad_scale_col (Optional[str]): The broad environment from which the specimen was collected :param env_local_scale_col (Optional[str]): The local environment from which the specimen was collected @@ -167,12 +180,16 @@ def specimen_info_table_to_pmo( :param geo_admin1_col (Optional[str]): Geographical admin level 1 :param geo_admin2_col (Optional[str]): Geographical admin level 2 :param geo_admin3_col (Optional[str]): Geographical admin level 3 + :param gravid_col (Optional[str]): Whether host specimen is pregnant + :param gravidity_col (Optional[str]): The number of previous pregnancies + :param has_travel_out_six_month_col (Optional[str]): Whether host specimen has travelled out from local region in the last six months :param host_age_col (Optional[str]): The age in years of the person :param host_sex_col (Optional[str]): If specimen is from a person, the sex of that person :param host_subject_id (Optional[str]): ID for the individual a specimen was collected from :param lat_lon_col (Optional[str]): Latitude and longitude of the collection site :param parasite_density_col (Optional[str, list[str]]): The parasite density in parasites per microliters :param parasite_density_method_col (Optional[str or list[str]]): The method of how the density was obtained. If set parasite_density_col must also be specified. + :param specimen_accession_col (Optional[str]): The accession number of the specimen :param storage_plate_col_col (Optional[str]): Column the specimen was in in the plate. If set storage_plate_row_col must also be specified. :param storage_plate_name_col (Optional[str]): Name of plate the specimen was in :param storage_plate_row_col (Optional[str]): Row the specimen was in in the plate. If set storage_plate_col_col must also be specified. @@ -180,6 +197,8 @@ def specimen_info_table_to_pmo( :param specimen_collect_device_col (Optional[str]): The way the specimen was collected :param specimen_comments_col (Optional[str]): Additional comments about the specimen :param specimen_store_loc_col (Optional[str]): Specimen storage site + :param specimen_type_col (Optional[str]): Type of specimen, e.g. negative_control, positive_control, field_sample + :param treatment_status_col (Optional[str]): If person has been treated with drugs, what was the treatment outcome :param additional_specimen_cols (Optional[List[str], None]]): Additional column names to include :param list_values_specimen_columns (Optional[List[str], None]): columns that contain values that could be list, are delimited by the argument list_values_specimen_columns_delimiter :param list_values_specimen_columns_delimiter (','): delimiter between list_values_specimen_columns @@ -200,10 +219,14 @@ def specimen_info_table_to_pmo( collection_country_col: "collection_country", project_name_col: "project_name", } - + required_columns = list(column_mapping.keys()) optional_column_mapping = { alternate_identifiers_col: "alternate_identifiers", drug_usage_col: "drug_usage", + blood_meal_col: "blood_meal", + gravid_col: "gravid", + gravidity_col: "gravidity", + has_travel_out_six_month_col: "has_travel_out_six_month", env_broad_scale_col: "env_broad_scale", env_local_scale_col: "env_local_scale", env_medium_col: "env_medium", @@ -214,6 +237,9 @@ def specimen_info_table_to_pmo( host_sex_col: "host_sex", host_subject_id: "host_subject_id", lat_lon_col: "lat_lon", + specimen_accession_col: "specimen_accession", + specimen_type_col: "specimen_type", + treatment_status_col: "treatment_status", specimen_collect_device_col: "specimen_collect_device", specimen_comments_col: "specimen_comments", specimen_store_loc_col: "specimen_store_loc", @@ -250,6 +276,9 @@ def specimen_info_table_to_pmo( host_sex_col, host_subject_id, lat_lon_col, + specimen_accession_col, + specimen_type_col, + treatment_status_col, storage_plate_col_col, storage_plate_name_col, storage_plate_row_col, @@ -257,10 +286,17 @@ def specimen_info_table_to_pmo( specimen_collect_device_col, specimen_comments_col, specimen_store_loc_col, + blood_meal_col, + gravid_col, + gravidity_col, + has_travel_out_six_month_col, ] ) check_columns_exist(copy_contents, list(column_mapping.keys())) + # Check for null values in required columns + check_null_values(copy_contents, required_columns) + # Rename and subset columns selected_pmo_fields = list(column_mapping.values()) copy_contents = copy_contents.rename(columns=column_mapping) @@ -291,6 +327,10 @@ def specimen_info_table_to_pmo( meta_json[col] = meta_json[col].split( list_values_specimen_columns_delimiter ) + + meta_json = remove_optional_null_values( + meta_json, list(optional_column_mapping.values()) + ) return meta_json diff --git a/tests/test_pmo_builder/test_metatable_to_pmo.py b/tests/test_pmo_builder/test_metatable_to_pmo.py index 2eefaa4..0dd2717 100644 --- a/tests/test_pmo_builder/test_metatable_to_pmo.py +++ b/tests/test_pmo_builder/test_metatable_to_pmo.py @@ -592,6 +592,470 @@ def test_specimen_info_table_to_pmo_fails_without_df(self): specimen_info_table_to_pmo("test") self.assertEqual("contents must be a pandas DataFrame.", str(context.exception)) + def test_specimen_info_table_to_pmo_fails_with_null_in_required_columns(self): + """Test that function raises error when required columns contain null values""" + # Test with null in specimen_name + df1 = pd.DataFrame( + { + "specimen_name": ["sample1", None], + "specimen_taxon_id": [5833, 5833], + "host_taxon_id": [9606, 9606], + "collection_date": ["01/02/2023", "01/02/2023"], + "collection_country": ["Mozambique", "Ghana"], + "project_name": ["project1", "project2"], + } + ) + with self.assertRaises(ValueError) as context: + specimen_info_table_to_pmo(df1) + self.assertIn( + "The following columns contain null values", + str(context.exception), + ) + self.assertIn("specimen_name", str(context.exception)) + + # Test with null in specimen_taxon_id + df2 = pd.DataFrame( + { + "specimen_name": ["sample1", "sample2"], + "specimen_taxon_id": [5833, None], + "host_taxon_id": [9606, 9606], + "collection_date": ["01/02/2023", "01/02/2023"], + "collection_country": ["Mozambique", "Ghana"], + "project_name": ["project1", "project2"], + } + ) + with self.assertRaises(ValueError) as context: + specimen_info_table_to_pmo(df2) + self.assertIn( + "The following columns contain null values", + str(context.exception), + ) + self.assertIn("specimen_taxon_id", str(context.exception)) + + # Test with null in host_taxon_id + df3 = pd.DataFrame( + { + "specimen_name": ["sample1", "sample2"], + "specimen_taxon_id": [5833, 5833], + "host_taxon_id": [None, 9606], + "collection_date": ["01/02/2023", "01/02/2023"], + "collection_country": ["Mozambique", "Ghana"], + "project_name": ["project1", "project2"], + } + ) + with self.assertRaises(ValueError) as context: + specimen_info_table_to_pmo(df3) + self.assertIn( + "The following columns contain null values", + str(context.exception), + ) + self.assertIn("host_taxon_id", str(context.exception)) + + # Test with null in collection_date + df4 = pd.DataFrame( + { + "specimen_name": ["sample1", "sample2"], + "specimen_taxon_id": [5833, 5833], + "host_taxon_id": [9606, 9606], + "collection_date": ["01/02/2023", None], + "collection_country": ["Mozambique", "Ghana"], + "project_name": ["project1", "project2"], + } + ) + with self.assertRaises(ValueError) as context: + specimen_info_table_to_pmo(df4) + self.assertIn( + "The following columns contain null values", + str(context.exception), + ) + self.assertIn("collection_date", str(context.exception)) + + # Test with null in collection_country + df5 = pd.DataFrame( + { + "specimen_name": ["sample1", "sample2"], + "specimen_taxon_id": [5833, 5833], + "host_taxon_id": [9606, 9606], + "collection_date": ["01/02/2023", "01/02/2023"], + "collection_country": [None, "Ghana"], + "project_name": ["project1", "project2"], + } + ) + with self.assertRaises(ValueError) as context: + specimen_info_table_to_pmo(df5) + self.assertIn( + "The following columns contain null values", + str(context.exception), + ) + self.assertIn("collection_country", str(context.exception)) + + # Test with null in project_name + df6 = pd.DataFrame( + { + "specimen_name": ["sample1", "sample2"], + "specimen_taxon_id": [5833, 5833], + "host_taxon_id": [9606, 9606], + "collection_date": ["01/02/2023", "01/02/2023"], + "collection_country": ["Mozambique", "Ghana"], + "project_name": ["project1", None], + } + ) + with self.assertRaises(ValueError) as context: + specimen_info_table_to_pmo(df6) + self.assertIn( + "The following columns contain null values", + str(context.exception), + ) + self.assertIn("project_name", str(context.exception)) + + # Test with nulls in multiple required columns + df7 = pd.DataFrame( + { + "specimen_name": ["sample1", None], + "specimen_taxon_id": [5833, None], + "host_taxon_id": [9606, 9606], + "collection_date": ["01/02/2023", "01/02/2023"], + "collection_country": ["Mozambique", "Ghana"], + "project_name": ["project1", "project2"], + } + ) + with self.assertRaises(ValueError) as context: + specimen_info_table_to_pmo(df7) + self.assertIn( + "The following columns contain null values", + str(context.exception), + ) + # Both columns with nulls should be mentioned + error_msg = str(context.exception) + self.assertTrue( + "specimen_name" in error_msg and "specimen_taxon_id" in error_msg + ) + + def test_specimen_info_table_to_pmo_removes_empty_optional_fields(self): + """Test that empty optional fields (None, empty string, empty dict, empty list) are removed""" + df = pd.DataFrame( + { + "specimen_name": ["sample1", "sample2", "sample3", "sample4"], + "specimen_taxon_id": [5833, 5833, 5833, 5833], + "host_taxon_id": [9606, 9606, 9606, 9606], + "collection_date": [ + "01/02/2023", + "01/02/2023", + "01/02/2023", + "01/02/2023", + ], + "collection_country": ["Mozambique", "Ghana", "Kenya", "Tanzania"], + "project_name": ["project1", "project2", "project3", "project4"], + "lat_lon": ["", "-25.123,31.456", None, "-1.234,36.789"], + "host_age": [None, 25, None, 30], + "host_sex": ["M", "", None, "F"], + "geo_admin1": [None, "Province1", "", "Province2"], + } + ) + + result = specimen_info_table_to_pmo( + df, + lat_lon_col="lat_lon", + host_age_col="host_age", + host_sex_col="host_sex", + geo_admin1_col="geo_admin1", + ) + + # sample1: lat_lon is empty string, host_age is None, host_sex is "M", geo_admin1 is None + # Should remove: lat_lon, host_age, geo_admin1 + # Should keep: host_sex + self.assertNotIn("lat_lon", result[0]) + self.assertNotIn("host_age", result[0]) + self.assertNotIn("geo_admin1", result[0]) + self.assertEqual(result[0]["host_sex"], "M") + + # sample2: lat_lon has value, host_age has value, host_sex is empty string, geo_admin1 has value + # Should remove: host_sex + # Should keep: lat_lon, host_age, geo_admin1 + self.assertEqual(result[1]["lat_lon"], "-25.123,31.456") + self.assertEqual(result[1]["host_age"], 25) + self.assertNotIn("host_sex", result[1]) + self.assertEqual(result[1]["geo_admin1"], "Province1") + + # sample3: lat_lon is None, host_age is None, host_sex is None, geo_admin1 is empty string + # Should remove all optional fields + self.assertNotIn("lat_lon", result[2]) + self.assertNotIn("host_age", result[2]) + self.assertNotIn("host_sex", result[2]) + self.assertNotIn("geo_admin1", result[2]) + + # sample4: all optional fields have values + # Should keep all + self.assertEqual(result[3]["lat_lon"], "-1.234,36.789") + self.assertEqual(result[3]["host_age"], 30) + self.assertEqual(result[3]["host_sex"], "F") + self.assertEqual(result[3]["geo_admin1"], "Province2") + + def test_specimen_info_table_to_pmo_with_geo_fields(self): + """Test geographic administrative fields""" + df = pd.DataFrame( + { + "specimen_name": ["sample1", "sample2"], + "specimen_taxon_id": [5833, 5833], + "host_taxon_id": [9606, 9606], + "collection_date": ["2023-03-29", "2023-03-20"], + "collection_country": ["Eswatini", "Eswatini"], + "project_name": ["RegGenE8", "RegGenE8"], + "geo_admin1": ["Lubombo", "Lubombo"], + "geo_admin2": ["Sithobela", "Sithobela"], + "geo_admin3": [ + "CABRINI MINISTRIES HEALTH CARE", + "SITHOBELA RURAL HEALTH CENTER", + ], + "lat_lon": ["", ""], + } + ) + + result = specimen_info_table_to_pmo( + df, + geo_admin1_col="geo_admin1", + geo_admin2_col="geo_admin2", + geo_admin3_col="geo_admin3", + lat_lon_col="lat_lon", + ) + + self.assertEqual(result[0]["geo_admin1"], "Lubombo") + self.assertEqual(result[0]["geo_admin2"], "Sithobela") + self.assertEqual(result[0]["geo_admin3"], "CABRINI MINISTRIES HEALTH CARE") + self.assertNotIn("lat_lon", result[0]) # Empty string should be removed + + self.assertEqual(result[1]["geo_admin1"], "Lubombo") + self.assertEqual(result[1]["geo_admin2"], "Sithobela") + self.assertEqual(result[1]["geo_admin3"], "SITHOBELA RURAL HEALTH CENTER") + self.assertNotIn("lat_lon", result[1]) # Empty string should be removed + + def test_specimen_info_table_to_pmo_removes_empty_dict_list(self): + """Test that empty dicts and lists are removed from optional fields via additional_specimen_cols""" + # Note: This tests the remove_optional_null_values function indirectly + # Since add_plate_info and add_parasite_density_info don't add empty structures, + # we test with additional_specimen_cols that might contain empty dicts/lists + + # First test: verify empty storage_plate_info and parasite_density_info are not added + df = pd.DataFrame( + { + "specimen_name": ["sample1", "sample2"], + "specimen_taxon_id": [5833, 5833], + "host_taxon_id": [9606, 9606], + "collection_date": ["01/02/2023", "01/02/2023"], + "collection_country": ["Mozambique", "Ghana"], + "project_name": ["project1", "project2"], + } + ) + + result_with_empty_info = specimen_info_table_to_pmo( + df, + storage_plate_col_col=None, + storage_plate_name_col=None, + storage_plate_row_col=None, + storage_plate_position_col=None, + parasite_density_col=None, + parasite_density_method_col=None, + ) + + # Storage plate info and parasite density info should not be added if all params are None + self.assertNotIn("storage_plate_info", result_with_empty_info[0]) + self.assertNotIn("parasite_density_info", result_with_empty_info[0]) + + # Test with parasite density that results in no valid densities (all None) + df2 = pd.DataFrame( + { + "specimen_name": ["sample1"], + "specimen_taxon_id": [5833], + "host_taxon_id": [9606], + "collection_date": ["01/02/2023"], + "collection_country": ["Mozambique"], + "project_name": ["project1"], + "parasite_density": [None], + } + ) + + result2 = specimen_info_table_to_pmo( + df2, + parasite_density_col="parasite_density", + parasite_density_method_col=None, + ) + + # Since all density values are None, parasite_density_info should not be added + self.assertNotIn("parasite_density_info", result2[0]) + + def test_specimen_info_table_to_pmo_with_host_fields(self): + """Test host-related optional fields""" + df = pd.DataFrame( + { + "specimen_name": ["sample1", "sample2", "sample3"], + "specimen_taxon_id": [5833, 5833, 5833], + "host_taxon_id": [9606, 9606, 9606], + "collection_date": ["01/02/2023", "01/02/2023", "01/02/2023"], + "collection_country": ["Mozambique", "Ghana", "Kenya"], + "project_name": ["project1", "project2", "project3"], + "host_age": [25, None, 30], + "host_sex": ["M", "F", ""], + "host_subject_id": ["SUB001", "", "SUB003"], + "gravid": [True, None, False], + "gravidity": [2, None, 0], + } + ) + + result = specimen_info_table_to_pmo( + df, + host_age_col="host_age", + host_sex_col="host_sex", + host_subject_id="host_subject_id", + gravid_col="gravid", + gravidity_col="gravidity", + ) + + # sample1: all fields have values + self.assertEqual(result[0]["host_age"], 25) + self.assertEqual(result[0]["host_sex"], "M") + self.assertEqual(result[0]["host_subject_id"], "SUB001") + self.assertEqual(result[0]["gravid"], True) + self.assertEqual(result[0]["gravidity"], 2) + + # sample2: host_age is None, host_subject_id is empty string, gravid is None, gravidity is None + # Should remove: host_age, host_subject_id, gravid, gravidity + # Should keep: host_sex + self.assertNotIn("host_age", result[1]) + self.assertEqual(result[1]["host_sex"], "F") + self.assertNotIn("host_subject_id", result[1]) + self.assertNotIn("gravid", result[1]) + self.assertNotIn("gravidity", result[1]) + + # sample3: host_sex is empty string + # Should remove: host_sex + # Should keep: host_age, host_subject_id, gravid, gravidity + self.assertEqual(result[2]["host_age"], 30) + self.assertNotIn("host_sex", result[2]) + self.assertEqual(result[2]["host_subject_id"], "SUB003") + self.assertEqual(result[2]["gravid"], False) + self.assertEqual(result[2]["gravidity"], 0) + + def test_specimen_info_table_to_pmo_with_specimen_fields(self): + """Test specimen-specific optional fields""" + df = pd.DataFrame( + { + "specimen_name": ["sample1", "sample2"], + "specimen_taxon_id": [5833, 5833], + "host_taxon_id": [9606, 9606], + "collection_date": ["01/02/2023", "01/02/2023"], + "collection_country": ["Mozambique", "Ghana"], + "project_name": ["project1", "project2"], + "specimen_accession": ["ACC001", ""], + "specimen_type": ["field_sample", None], + "specimen_collect_device": ["needle", ""], + "specimen_store_loc": [None, "freezer1"], + "specimen_comments": ["", "Some comment"], + } + ) + + result = specimen_info_table_to_pmo( + df, + specimen_accession_col="specimen_accession", + specimen_type_col="specimen_type", + specimen_collect_device_col="specimen_collect_device", + specimen_store_loc_col="specimen_store_loc", + specimen_comments_col="specimen_comments", + ) + + # sample1: specimen_accession has value, specimen_type has value, specimen_collect_device has value + # specimen_store_loc is None, specimen_comments is empty string + # Should remove: specimen_store_loc, specimen_comments + self.assertEqual(result[0]["specimen_accession"], "ACC001") + self.assertEqual(result[0]["specimen_type"], "field_sample") + self.assertEqual(result[0]["specimen_collect_device"], "needle") + self.assertNotIn("specimen_store_loc", result[0]) + self.assertNotIn("specimen_comments", result[0]) + + # sample2: specimen_accession is empty string, specimen_type is None, specimen_collect_device is empty string + # specimen_store_loc has value, specimen_comments has value + # Should remove: specimen_accession, specimen_type, specimen_collect_device + self.assertNotIn("specimen_accession", result[1]) + self.assertNotIn("specimen_type", result[1]) + self.assertNotIn("specimen_collect_device", result[1]) + self.assertEqual(result[1]["specimen_store_loc"], "freezer1") + self.assertEqual(result[1]["specimen_comments"], "Some comment") + + def test_specimen_info_table_to_pmo_with_environment_fields(self): + """Test environment-related optional fields""" + df = pd.DataFrame( + { + "specimen_name": ["sample1", "sample2"], + "specimen_taxon_id": [5833, 5833], + "host_taxon_id": [9606, 9606], + "collection_date": ["01/02/2023", "01/02/2023"], + "collection_country": ["Mozambique", "Ghana"], + "project_name": ["project1", "project2"], + "env_broad_scale": ["terrestrial", ""], + "env_local_scale": [None, "forest"], + "env_medium": ["soil", None], + } + ) + + result = specimen_info_table_to_pmo( + df, + env_broad_scale_col="env_broad_scale", + env_local_scale_col="env_local_scale", + env_medium_col="env_medium", + ) + + # sample1: env_broad_scale has value, env_local_scale is None, env_medium has value + self.assertEqual(result[0]["env_broad_scale"], "terrestrial") + self.assertNotIn("env_local_scale", result[0]) + self.assertEqual(result[0]["env_medium"], "soil") + + # sample2: env_broad_scale is empty string, env_local_scale has value, env_medium is None + self.assertNotIn("env_broad_scale", result[1]) + self.assertEqual(result[1]["env_local_scale"], "forest") + self.assertNotIn("env_medium", result[1]) + + def test_specimen_info_table_to_pmo_with_other_optional_fields(self): + """Test other optional fields like blood_meal, has_travel_out_six_month, treatment_status, etc.""" + df = pd.DataFrame( + { + "specimen_name": ["sample1", "sample2", "sample3"], + "specimen_taxon_id": [5833, 5833, 5833], + "host_taxon_id": [9606, 9606, 9606], + "collection_date": ["01/02/2023", "01/02/2023", "01/02/2023"], + "collection_country": ["Mozambique", "Ghana", "Kenya"], + "project_name": ["project1", "project2", "project3"], + "blood_meal": [True, None, False], + "has_travel_out_six_month": [None, True, ""], + "treatment_status": ["cured", "", None], + "specimen_accession": ["ACC001", None, "ACC003"], + } + ) + + result = specimen_info_table_to_pmo( + df, + blood_meal_col="blood_meal", + has_travel_out_six_month_col="has_travel_out_six_month", + treatment_status_col="treatment_status", + specimen_accession_col="specimen_accession", + ) + + # sample1: blood_meal has value (True), has_travel_out_six_month is None, treatment_status has value, specimen_accession has value + self.assertEqual(result[0]["blood_meal"], True) + self.assertNotIn("has_travel_out_six_month", result[0]) + self.assertEqual(result[0]["treatment_status"], "cured") + self.assertEqual(result[0]["specimen_accession"], "ACC001") + + # sample2: blood_meal is None, has_travel_out_six_month has value (True), treatment_status is empty string, specimen_accession is None + self.assertNotIn("blood_meal", result[1]) + self.assertEqual(result[1]["has_travel_out_six_month"], True) + self.assertNotIn("treatment_status", result[1]) + self.assertNotIn("specimen_accession", result[1]) + + # sample3: blood_meal has value (False), has_travel_out_six_month is empty string, treatment_status is None, specimen_accession has value + self.assertEqual(result[2]["blood_meal"], False) + self.assertNotIn("has_travel_out_six_month", result[2]) + self.assertNotIn("treatment_status", result[2]) + self.assertEqual(result[2]["specimen_accession"], "ACC003") + def test_library_sample_info_table_to_pmo_default(self): df = pd.DataFrame( { From 41b24ba3f651fbe65d9123d4a05a287a3285d1b9 Mon Sep 17 00:00:00 2001 From: kathryn1995 Date: Mon, 17 Nov 2025 16:31:24 -0800 Subject: [PATCH 15/31] update library sample function --- src/pmotools/pmo_builder/metatable_to_pmo.py | 44 ++- .../test_pmo_builder/test_metatable_to_pmo.py | 274 +++++++++++++++++- 2 files changed, 310 insertions(+), 8 deletions(-) diff --git a/src/pmotools/pmo_builder/metatable_to_pmo.py b/src/pmotools/pmo_builder/metatable_to_pmo.py index 8e5f887..41f7b7f 100644 --- a/src/pmotools/pmo_builder/metatable_to_pmo.py +++ b/src/pmotools/pmo_builder/metatable_to_pmo.py @@ -36,11 +36,16 @@ def library_sample_info_table_to_pmo( sequencing_info_name_col: str = "sequencing_info_name", specimen_name_col: str = "specimen_name", panel_name_col: str = "panel_name", - accession_col: str = None, + alternate_identifiers_col: str = None, + experiment_accession_col: str = None, + fastqs_loc_col: str = None, library_prep_plate_name_col: str = None, library_prep_plate_col_col: str = None, library_prep_plate_row_col: str = None, library_prep_plate_position_col: str = None, + parasite_density_col: str = None, + parasite_density_method_col: str = None, + run_accession_col: str = None, additional_library_sample_info_cols: list | None = None, ): """ @@ -51,11 +56,16 @@ def library_sample_info_table_to_pmo( :param sequencing_info_name_col (str): Column name for sequencing information names. Default: sequencing_info_name :param specimen_name_col (str): Column name for specimen IDs. Default: specimen_name :param panel_name_col (str): Column name for panel IDs. Default: panel_name - :param accession_col (Optional[str]): Column name for accession information. + :param alternate_identifiers_col (Optional[str]): Column name for alternate identifiers. + :param experiment_accession_col (Optional[str]): Column name for experiment accession information. + :param fastqs_loc_col (Optional[str]): Column name for location of fastqs. :param library_prep_plate_name_col (Optional[str]): Column name containing plate name for sequencing. :param library_prep_plate_col_col (Optional[str]): Column name for col of sample on sequencing plate. :param library_prep_plate_row_col (Optional[str]): Column name for row of sample on sequencing plate. :param library_prep_plate_position_col (Optional[str]): Column name for position on sequencing plate (e.g. A01). Can't be set if library_prep_plate_col_col and library_prep_plate_row_col are specified. + :param parasite_density_col (Optional[str, list[str]]): The parasite density in parasites per microliters + :param parasite_density_method_col (Optional[str or list[str]]): The method of how the density was obtained. If set parasite_density_col must also be specified. + :param run_accession_col (Optional[str]): Column name for run accession information. :param additional_library_sample_info_cols (Optional[List[str], None]]): Additional column names to include. :return: JSON format where keys are `library_sample_id` and values are corresponding row data. @@ -67,13 +77,18 @@ def library_sample_info_table_to_pmo( copy_contents = contents.copy() column_mapping = { library_sample_name_col: "library_sample_name", - sequencing_info_name_col: "sequencing_info_name", specimen_name_col: "specimen_name", panel_name_col: "panel_name", + sequencing_info_name_col: "sequencing_info_name", } - + required_columns = list(column_mapping.keys()) # Add optional columns - optional_column_mapping = {accession_col: "accession"} + optional_column_mapping = { + alternate_identifiers_col: "alternate_identifiers", + experiment_accession_col: "experiment_accession", + fastqs_loc_col: "fastqs_loc", + run_accession_col: "run_accession", + } column_mapping.update( {k: v for k, v in optional_column_mapping.items() if k is not None} ) @@ -90,11 +105,16 @@ def library_sample_info_table_to_pmo( sequencing_info_name_col, specimen_name_col, panel_name_col, - accession_col, + alternate_identifiers_col, + experiment_accession_col, + fastqs_loc_col, ] ) check_columns_exist(copy_contents, list(column_mapping.keys())) + # Check for null values in required columns + check_null_values(copy_contents, required_columns) + # Rename and subset columns selected_pmo_fields = list(column_mapping.values()) copy_contents = copy_contents.rename(columns=column_mapping) @@ -112,7 +132,17 @@ def library_sample_info_table_to_pmo( "specimen_name", "library_prep_plate_info", ) - + meta_json = add_parasite_density_info( + parasite_density_col, + parasite_density_method_col, + meta_json, + copy_contents, + "library_sample_name", + entry_name="parasite_density_info", + ) + meta_json = remove_optional_null_values( + meta_json, list(optional_column_mapping.values()) + ) return meta_json diff --git a/tests/test_pmo_builder/test_metatable_to_pmo.py b/tests/test_pmo_builder/test_metatable_to_pmo.py index 0dd2717..39d5b6e 100644 --- a/tests/test_pmo_builder/test_metatable_to_pmo.py +++ b/tests/test_pmo_builder/test_metatable_to_pmo.py @@ -1200,9 +1200,281 @@ def test_library_sample_info_table_to_pmo_fails_with_missing_cols(self): def test_library_sample_info_table_to_pmo_fails_without_df(self): with self.assertRaises(ValueError) as context: - specimen_info_table_to_pmo("test") + library_sample_info_table_to_pmo("test") self.assertEqual("contents must be a pandas DataFrame.", str(context.exception)) + def test_library_sample_info_table_to_pmo_fails_with_null_in_required_columns(self): + """Test that function raises error when required columns contain null values""" + # Test with null in library_sample_name + df1 = pd.DataFrame( + { + "library_sample_name": ["sample1_MH_run1", None], + "sequencing_info_name": ["run1", "run1"], + "specimen_name": ["sample1", "sample2"], + "panel_name": ["MH", "MH"], + } + ) + with self.assertRaises(ValueError) as context: + library_sample_info_table_to_pmo(df1) + self.assertIn( + "The following columns contain null values", + str(context.exception), + ) + self.assertIn("library_sample_name", str(context.exception)) + + # Test with null in sequencing_info_name + df2 = pd.DataFrame( + { + "library_sample_name": ["sample1_MH_run1", "sample2_MH_run1"], + "sequencing_info_name": [None, "run1"], + "specimen_name": ["sample1", "sample2"], + "panel_name": ["MH", "MH"], + } + ) + with self.assertRaises(ValueError) as context: + library_sample_info_table_to_pmo(df2) + self.assertIn( + "The following columns contain null values", + str(context.exception), + ) + self.assertIn("sequencing_info_name", str(context.exception)) + + # Test with null in specimen_name + df3 = pd.DataFrame( + { + "library_sample_name": ["sample1_MH_run1", "sample2_MH_run1"], + "sequencing_info_name": ["run1", "run1"], + "specimen_name": ["sample1", None], + "panel_name": ["MH", "MH"], + } + ) + with self.assertRaises(ValueError) as context: + library_sample_info_table_to_pmo(df3) + self.assertIn( + "The following columns contain null values", + str(context.exception), + ) + self.assertIn("specimen_name", str(context.exception)) + + # Test with null in panel_name + df4 = pd.DataFrame( + { + "library_sample_name": ["sample1_MH_run1", "sample2_MH_run1"], + "sequencing_info_name": ["run1", "run1"], + "specimen_name": ["sample1", "sample2"], + "panel_name": [None, "MH"], + } + ) + with self.assertRaises(ValueError) as context: + library_sample_info_table_to_pmo(df4) + self.assertIn( + "The following columns contain null values", + str(context.exception), + ) + self.assertIn("panel_name", str(context.exception)) + + # Test with nulls in multiple required columns + df5 = pd.DataFrame( + { + "library_sample_name": ["sample1_MH_run1", None], + "sequencing_info_name": [None, "run1"], + "specimen_name": ["sample1", "sample2"], + "panel_name": ["MH", "MH"], + } + ) + with self.assertRaises(ValueError) as context: + library_sample_info_table_to_pmo(df5) + self.assertIn( + "The following columns contain null values", + str(context.exception), + ) + error_msg = str(context.exception) + self.assertTrue( + "library_sample_name" in error_msg and "sequencing_info_name" in error_msg + ) + + def test_library_sample_info_table_to_pmo_with_new_optional_fields(self): + """Test new optional fields: alternate_identifiers, experiment_accession, fastqs_loc, run_accession""" + df = pd.DataFrame( + { + "library_sample_name": ["sample1_MH_run1", "sample2_MH_run1"], + "sequencing_info_name": ["run1", "run1"], + "specimen_name": ["sample1", "sample2"], + "panel_name": ["MH", "MH"], + "alternate_identifiers": ["ID1,ID2", ""], + "experiment_accession": ["EXP001", None], + "fastqs_loc": [None, "/path/to/fastqs"], + "run_accession": ["RUN001", ""], + } + ) + + result = library_sample_info_table_to_pmo( + df, + alternate_identifiers_col="alternate_identifiers", + experiment_accession_col="experiment_accession", + fastqs_loc_col="fastqs_loc", + run_accession_col="run_accession", + ) + + # sample1: alternate_identifiers has value, experiment_accession has value, fastqs_loc is None, run_accession has value + # Should remove: fastqs_loc + self.assertEqual(result[0]["alternate_identifiers"], "ID1,ID2") + self.assertEqual(result[0]["experiment_accession"], "EXP001") + self.assertNotIn("fastqs_loc", result[0]) + self.assertEqual(result[0]["run_accession"], "RUN001") + + # sample2: alternate_identifiers is empty string, experiment_accession is None, fastqs_loc has value, run_accession is empty string + # Should remove: alternate_identifiers, experiment_accession, run_accession + self.assertNotIn("alternate_identifiers", result[1]) + self.assertNotIn("experiment_accession", result[1]) + self.assertEqual(result[1]["fastqs_loc"], "/path/to/fastqs") + self.assertNotIn("run_accession", result[1]) + + def test_library_sample_info_table_to_pmo_removes_empty_optional_fields(self): + """Test that empty optional fields are removed""" + df = pd.DataFrame( + { + "library_sample_name": [ + "sample1_MH_run1", + "sample2_MH_run1", + "sample3_MH_run1", + ], + "sequencing_info_name": ["run1", "run1", "run1"], + "specimen_name": ["sample1", "sample2", "sample3"], + "panel_name": ["MH", "MH", "MH"], + "alternate_identifiers": ["ID1", "", None], + "experiment_accession": ["EXP001", None, "EXP003"], + "fastqs_loc": [None, "/path/to/fastqs", ""], + } + ) + + result = library_sample_info_table_to_pmo( + df, + alternate_identifiers_col="alternate_identifiers", + experiment_accession_col="experiment_accession", + fastqs_loc_col="fastqs_loc", + ) + + # sample1: all optional fields have values + self.assertEqual(result[0]["alternate_identifiers"], "ID1") + self.assertEqual(result[0]["experiment_accession"], "EXP001") + self.assertNotIn("fastqs_loc", result[0]) # None should be removed + + # sample2: alternate_identifiers is empty string, experiment_accession is None, fastqs_loc has value + self.assertNotIn("alternate_identifiers", result[1]) + self.assertNotIn("experiment_accession", result[1]) + self.assertEqual(result[1]["fastqs_loc"], "/path/to/fastqs") + + # sample3: alternate_identifiers is None, experiment_accession has value, fastqs_loc is empty string + self.assertNotIn("alternate_identifiers", result[2]) + self.assertEqual(result[2]["experiment_accession"], "EXP003") + self.assertNotIn("fastqs_loc", result[2]) + + def test_library_sample_info_table_to_pmo_with_parasite_density(self): + """Test parasite density info in library sample info""" + df = pd.DataFrame( + { + "library_sample_name": ["sample1_MH_run1", "sample2_MH_run1"], + "sequencing_info_name": ["run1", "run1"], + "specimen_name": ["sample1", "sample2"], + "panel_name": ["MH", "MH"], + "parasite_density": [10, 100], + "parasite_density_method": ["qPCR", "microscopy"], + } + ) + + result = library_sample_info_table_to_pmo( + df, + parasite_density_col="parasite_density", + parasite_density_method_col="parasite_density_method", + ) + + self.assertEqual(result[0]["parasite_density_info"][0]["parasite_density"], 10) + self.assertEqual( + result[0]["parasite_density_info"][0]["parasite_density_method"], "qPCR" + ) + self.assertEqual(result[1]["parasite_density_info"][0]["parasite_density"], 100) + self.assertEqual( + result[1]["parasite_density_info"][0]["parasite_density_method"], + "microscopy", + ) + + def test_library_sample_info_table_to_pmo_with_parasite_density_multiple(self): + """Test multiple parasite density measurements""" + df = pd.DataFrame( + { + "library_sample_name": ["sample1_MH_run1", "sample2_MH_run1"], + "sequencing_info_name": ["run1", "run1"], + "specimen_name": ["sample1", "sample2"], + "panel_name": ["MH", "MH"], + "density1": [15, 107], + "method1": ["qPCR", "qPCR"], + "density2": [10, 100], + "method2": ["microscopy", "microscopy"], + } + ) + + result = library_sample_info_table_to_pmo( + df, + parasite_density_col=["density1", "density2"], + parasite_density_method_col=["method1", "method2"], + ) + + self.assertEqual(result[0]["parasite_density_info"][0]["parasite_density"], 15) + self.assertEqual(result[0]["parasite_density_info"][1]["parasite_density"], 10) + self.assertEqual(result[1]["parasite_density_info"][0]["parasite_density"], 107) + self.assertEqual(result[1]["parasite_density_info"][1]["parasite_density"], 100) + + def test_library_sample_info_table_to_pmo_with_all_new_fields(self): + """Test all new optional fields together""" + df = pd.DataFrame( + { + "library_sample_name": ["sample1_MH_run1", "sample2_MH_run1"], + "sequencing_info_name": ["run1", "run1"], + "specimen_name": ["sample1", "sample2"], + "panel_name": ["MH", "MH"], + "alternate_identifiers": ["ID1", "ID2"], + "experiment_accession": ["EXP001", "EXP002"], + "fastqs_loc": ["/path/to/fastqs1", "/path/to/fastqs2"], + "run_accession": ["RUN001", "RUN002"], + "parasite_density": [10, 100], + "parasite_density_method": ["qPCR", "microscopy"], + "library_prep_plate_col": [1, 2], + "library_prep_plate_name": ["plate1", "plate1"], + "library_prep_plate_row": ["A", "B"], + } + ) + + result = library_sample_info_table_to_pmo( + df, + alternate_identifiers_col="alternate_identifiers", + experiment_accession_col="experiment_accession", + fastqs_loc_col="fastqs_loc", + run_accession_col="run_accession", + parasite_density_col="parasite_density", + parasite_density_method_col="parasite_density_method", + library_prep_plate_col_col="library_prep_plate_col", + library_prep_plate_name_col="library_prep_plate_name", + library_prep_plate_row_col="library_prep_plate_row", + ) + + # Check all fields are present + self.assertEqual(result[0]["alternate_identifiers"], "ID1") + self.assertEqual(result[0]["experiment_accession"], "EXP001") + self.assertEqual(result[0]["fastqs_loc"], "/path/to/fastqs1") + self.assertEqual(result[0]["run_accession"], "RUN001") + self.assertEqual(result[0]["parasite_density_info"][0]["parasite_density"], 10) + self.assertIn("library_prep_plate_info", result[0]) + self.assertEqual(result[0]["library_prep_plate_info"]["plate_col"], 1) + + self.assertEqual(result[1]["alternate_identifiers"], "ID2") + self.assertEqual(result[1]["experiment_accession"], "EXP002") + self.assertEqual(result[1]["fastqs_loc"], "/path/to/fastqs2") + self.assertEqual(result[1]["run_accession"], "RUN002") + self.assertEqual(result[1]["parasite_density_info"][0]["parasite_density"], 100) + self.assertIn("library_prep_plate_info", result[1]) + self.assertEqual(result[1]["library_prep_plate_info"]["plate_col"], 2) + if __name__ == "__main__": unittest.main() From 77818964996688e988e0e80aa6471b8009f2e414 Mon Sep 17 00:00:00 2001 From: kathryn1995 Date: Tue, 18 Nov 2025 15:40:06 -0800 Subject: [PATCH 16/31] Allow genomes to be dict or list --- .../pmo_builder/panel_information_to_pmo.py | 29 ++++- .../test_panel_information_to_pmo.py | 113 +++++++++++++++++- 2 files changed, 135 insertions(+), 7 deletions(-) diff --git a/src/pmotools/pmo_builder/panel_information_to_pmo.py b/src/pmotools/pmo_builder/panel_information_to_pmo.py index 36d381e..105310d 100644 --- a/src/pmotools/pmo_builder/panel_information_to_pmo.py +++ b/src/pmotools/pmo_builder/panel_information_to_pmo.py @@ -10,7 +10,7 @@ def panel_info_table_to_pmo( target_table: pd.DataFrame, panel_name: str, - genome_info: dict, + genome_info: dict | list, target_name_col: str = "target_name", forward_primers_seq_col: str = "fwd_primer", reverse_primers_seq_col: str = "rev_primer", @@ -34,7 +34,7 @@ def panel_info_table_to_pmo( :param target_table: The dataframe containing the target information :param panel_name: the panel ID assigned to the panel - :param genome_info: A dictionary containing the genome information + :param genome_info: A dictionary or list of dictionaries containing the genome information :param target_name_col: the name of the column containing the target IDs :param forward_primers_seq_col: the name of the column containing the sequence of the forward primer :param reverse_primers_seq_col: the name of the column containing the sequence of the reverse primer @@ -55,6 +55,11 @@ def panel_info_table_to_pmo( if not isinstance(target_table, pd.DataFrame): raise ValueError("target_table must be a pandas DataFrame.") + + # Convert genome_info to list if it's a dict + if isinstance(genome_info, dict): + genome_info = [genome_info] + check_genome_info(genome_info) # Check additional columns if any are added @@ -87,7 +92,7 @@ def panel_info_table_to_pmo( # Put together components panel_info_dict = { "panel_info": [panel_dict], - "targeted_genomes": [genome_info], + "targeted_genomes": genome_info, "target_info": targets_dict, } return panel_info_dict @@ -98,7 +103,7 @@ def __init__( self, target_table: pd.DataFrame, panel_name: str, - genome_info: dict, + genome_info: dict | list, target_name_col: str = "target_name", forward_primers_seq_col: str = "fwd_primer", reverse_primers_seq_col: str = "rev_primer", @@ -379,7 +384,21 @@ def check_genome_info(genome_info): raise ValueError( f"genome_info missing required keys: {', '.join(missing_keys)}" ) + elif isinstance(genome_info, list): + if not genome_info: + raise ValueError("genome_info list cannot be empty") + required_keys = {"name", "genome_version", "taxon_id", "url"} + for i, genome_dict in enumerate(genome_info): + if not isinstance(genome_dict, dict): + raise TypeError( + f"genome_info[{i}] must be a dict, but got {type(genome_dict).__name__}" + ) + missing_keys = required_keys - genome_dict.keys() + if missing_keys: + raise ValueError( + f"genome_info[{i}] missing required keys: {', '.join(missing_keys)}" + ) else: raise TypeError( - f"genome_info must be a dict, but got {type(genome_info).__name__}" + f"genome_info must be a dict or list, but got {type(genome_info).__name__}" ) diff --git a/tests/test_pmo_builder/test_panel_information_to_pmo.py b/tests/test_pmo_builder/test_panel_information_to_pmo.py index 8c87fbd..f0dadc3 100644 --- a/tests/test_pmo_builder/test_panel_information_to_pmo.py +++ b/tests/test_pmo_builder/test_panel_information_to_pmo.py @@ -5,6 +5,7 @@ from pmotools.pmo_builder.panel_information_to_pmo import ( PMOPanelBuilder, check_genome_info, + panel_info_table_to_pmo, ) @@ -166,17 +167,55 @@ def test_summarise_targets_missing_optional_info_with_missing(self): def test_check_genome_info_passes(self): check_genome_info(self.genome_info) + def test_check_genome_info_passes_with_list(self): + genome_info_list = [ + { + "name": "3D7", + "url": "somthing.com", + "genome_version": 1, + "taxon_id": 1, + }, + { + "name": "DD2", + "url": "somthingelse.com", + "genome_version": 2, + "taxon_id": 2, + }, + ] + check_genome_info(genome_info_list) + def test_check_genome_info_fails_with_string(self): with self.assertRaises(TypeError) as context: check_genome_info("genome_info") - self.assertEqual( - str(context.exception), "genome_info must be a dict, but got str" + self.assertIn( + "genome_info must be a dict or list", + str(context.exception), ) def test_check_genome_info_fails_with_missing_key(self): with self.assertRaises(ValueError): check_genome_info({"name": "3D7", "taxon_id": 1}) + def test_check_genome_info_fails_with_empty_list(self): + with self.assertRaises(ValueError) as context: + check_genome_info([]) + self.assertEqual(str(context.exception), "genome_info list cannot be empty") + + def test_check_genome_info_fails_with_list_containing_non_dict(self): + with self.assertRaises(TypeError) as context: + check_genome_info([self.genome_info, "not_a_dict"]) + self.assertIn("genome_info[1] must be a dict", str(context.exception)) + + def test_check_genome_info_fails_with_list_containing_invalid_dict(self): + with self.assertRaises(ValueError) as context: + check_genome_info( + [ + self.genome_info, + {"name": "3D7", "taxon_id": 1}, # missing required keys + ] + ) + self.assertIn("genome_info[1] missing required keys", str(context.exception)) + def test_build_panel_info(self): panel_info = self.min_builder.build_panel_info(self.min_target_json) expected_panel_info = { @@ -441,6 +480,76 @@ def test_create_targets_dict_additional_info( ] self.assertEqual(expected_json, target_info) + @patch( + "pmotools.pmo_builder.panel_information_to_pmo.PMOPanelBuilder.check_targets_are_unique" + ) + @patch( + "pmotools.pmo_builder.panel_information_to_pmo.PMOPanelBuilder.check_unique_target_info" + ) + @patch( + "pmotools.pmo_builder.panel_information_to_pmo.PMOPanelBuilder.summarise_targets_missing_optional_info" + ) + def test_panel_info_table_to_pmo_with_dict_genome_info( + self, + mock_summarise_targets_missing_optional_info, + mock_check_unique_target_info, + mock_check_targets_are_unique, + ): + """Test panel_info_table_to_pmo with dict genome_info (should be converted to list)""" + mock_summarise_targets_missing_optional_info.return_value = [], [], [] + result = panel_info_table_to_pmo( + self.min_target_table, "test_panel", self.genome_info + ) + + # Check that genome_info dict was converted to list + self.assertIsInstance(result["targeted_genomes"], list) + self.assertEqual(len(result["targeted_genomes"]), 1) + self.assertEqual(result["targeted_genomes"][0], self.genome_info) + self.assertIn("panel_info", result) + self.assertIn("target_info", result) + + @patch( + "pmotools.pmo_builder.panel_information_to_pmo.PMOPanelBuilder.check_targets_are_unique" + ) + @patch( + "pmotools.pmo_builder.panel_information_to_pmo.PMOPanelBuilder.check_unique_target_info" + ) + @patch( + "pmotools.pmo_builder.panel_information_to_pmo.PMOPanelBuilder.summarise_targets_missing_optional_info" + ) + def test_panel_info_table_to_pmo_with_list_genome_info( + self, + mock_summarise_targets_missing_optional_info, + mock_check_unique_target_info, + mock_check_targets_are_unique, + ): + """Test panel_info_table_to_pmo with list genome_info""" + mock_summarise_targets_missing_optional_info.return_value = [], [], [] + genome_info_list = [ + { + "name": "3D7", + "url": "somthing.com", + "genome_version": 1, + "taxon_id": 1, + }, + { + "name": "DD2", + "url": "somthingelse.com", + "genome_version": 2, + "taxon_id": 2, + }, + ] + result = panel_info_table_to_pmo( + self.min_target_table, "test_panel", genome_info_list + ) + + # Check that genome_info list is used directly + self.assertIsInstance(result["targeted_genomes"], list) + self.assertEqual(len(result["targeted_genomes"]), 2) + self.assertEqual(result["targeted_genomes"], genome_info_list) + self.assertIn("panel_info", result) + self.assertIn("target_info", result) + if __name__ == "__main__": unittest.main() From e5de09972a02e9a3928a329694b4c4eedcedc2dd Mon Sep 17 00:00:00 2001 From: kathryn1995 Date: Tue, 18 Nov 2025 15:56:08 -0800 Subject: [PATCH 17/31] Update the genome_id column --- .../pmo_builder/panel_information_to_pmo.py | 18 +- .../test_panel_information_to_pmo.py | 156 ++++++++++++++++++ 2 files changed, 172 insertions(+), 2 deletions(-) diff --git a/src/pmotools/pmo_builder/panel_information_to_pmo.py b/src/pmotools/pmo_builder/panel_information_to_pmo.py index 105310d..7122164 100644 --- a/src/pmotools/pmo_builder/panel_information_to_pmo.py +++ b/src/pmotools/pmo_builder/panel_information_to_pmo.py @@ -25,6 +25,7 @@ def panel_info_table_to_pmo( strand_col: str | None = None, ref_seq_col: str | None = None, gene_name_col: str | None = None, + genome_id_col: str | None = None, target_attributes_col: str | None = None, additional_target_info_cols: list | None = None, ): @@ -49,6 +50,7 @@ def panel_info_table_to_pmo( :param gene_name_col (Optional): the name of the column containing the gene id :param strand_col (Optional): the name of the column containing the strand for the target :param target_attributes_col (Optional): a list of classification type for the primer target + :param genome_id_col (Optional): the name of the column containing the genome ID (default is 0) :param additional_target_info_cols (Optional): dictionary of optional additional columns to add to the target information dictionary. Keys are column names and values are the type. :return: a dict of the panel information """ @@ -87,7 +89,7 @@ def panel_info_table_to_pmo( ) # Create dictionary of targets and panels - targets_dict = builder.create_targets_dict() + targets_dict = builder.create_targets_dict(genome_id_col) panel_dict = builder.build_panel_info(targets_dict) # Put together components panel_info_dict = { @@ -264,7 +266,7 @@ def check_missing(name, cols): def create_targets_dict( self, - genome_id: int = 0, + genome_id_col: str | None = None, ): # Check targets before putting into JSON ( @@ -316,6 +318,10 @@ def create_targets_dict( # Add insert location info if location_info_cols are provided if insert_start_col and target_name not in missing_insert_loc: + if genome_id_col: + genome_id = int(row[genome_id_col]) + else: + genome_id = 0 target_dict["insert_location"] = { "genome_id": genome_id, "chrom": row[chrom_col], @@ -331,6 +337,10 @@ def create_targets_dict( fwd_primer_dict = {"seq": row[self.forward_primers_seq_col]} rev_primer_dict = {"seq": row[self.reverse_primers_seq_col]} if forward_primers_start_col and target_name not in missing_fwd_primer_loc: + if genome_id_col: + genome_id = int(row[genome_id_col]) + else: + genome_id = 0 fwd_primer_dict["location"] = { "genome_id": genome_id, "chrom": row[chrom_col], @@ -340,6 +350,10 @@ def create_targets_dict( if strand_col and pd.notna(row[strand_col]): fwd_primer_dict["location"]["strand"] = row[strand_col] if reverse_primers_start_col and target_name not in missing_rev_primer_loc: + if genome_id_col: + genome_id = int(row[genome_id_col]) + else: + genome_id = 0 rev_primer_dict["location"] = { "genome_id": genome_id, "chrom": row[chrom_col], diff --git a/tests/test_pmo_builder/test_panel_information_to_pmo.py b/tests/test_pmo_builder/test_panel_information_to_pmo.py index f0dadc3..813d5da 100644 --- a/tests/test_pmo_builder/test_panel_information_to_pmo.py +++ b/tests/test_pmo_builder/test_panel_information_to_pmo.py @@ -550,6 +550,162 @@ def test_panel_info_table_to_pmo_with_list_genome_info( self.assertIn("panel_info", result) self.assertIn("target_info", result) + @patch( + "pmotools.pmo_builder.panel_information_to_pmo.PMOPanelBuilder.check_targets_are_unique" + ) + @patch( + "pmotools.pmo_builder.panel_information_to_pmo.PMOPanelBuilder.check_unique_target_info" + ) + @patch( + "pmotools.pmo_builder.panel_information_to_pmo.PMOPanelBuilder.summarise_targets_missing_optional_info" + ) + def test_create_targets_dict_with_genome_id_col( + self, + mock_summarise_targets_missing_optional_info, + mock_check_unique_target_info, + mock_check_targets_are_unique, + ): + """Test create_targets_dict with genome_id_col parameter""" + mock_summarise_targets_missing_optional_info.return_value = [], [], [] + target_table = self.min_target_table.copy() + target_table["target_start"] = [1, 2, 3] + target_table["target_end"] = [5, 6, 7] + target_table["insert_start"] = [2, 3, 4] + target_table["insert_end"] = [3, 4, 5] + target_table["chrom"] = "chrom1" + target_table["genome_id"] = [ + 0, + 1, + 0, + ] # Different genome_ids for different targets + + builder = PMOPanelBuilder( + target_table, + "test_panel", + self.genome_info, + "target_name", + "fwd_primer", + "rev_primer", + forward_primers_start_col="target_start", + forward_primers_end_col="insert_start", + reverse_primers_start_col="insert_end", + reverse_primers_end_col="target_end", + insert_start_col="insert_start", + insert_end_col="insert_end", + chrom_col="chrom", + ) + + target_info = builder.create_targets_dict(genome_id_col="genome_id") + + # Check that genome_id values come from the column + self.assertEqual(target_info[0]["insert_location"]["genome_id"], 0) + self.assertEqual(target_info[0]["forward_primer"]["location"]["genome_id"], 0) + self.assertEqual(target_info[0]["reverse_primer"]["location"]["genome_id"], 0) + + self.assertEqual(target_info[1]["insert_location"]["genome_id"], 1) + self.assertEqual(target_info[1]["forward_primer"]["location"]["genome_id"], 1) + self.assertEqual(target_info[1]["reverse_primer"]["location"]["genome_id"], 1) + + self.assertEqual(target_info[2]["insert_location"]["genome_id"], 0) + self.assertEqual(target_info[2]["forward_primer"]["location"]["genome_id"], 0) + self.assertEqual(target_info[2]["reverse_primer"]["location"]["genome_id"], 0) + + @patch( + "pmotools.pmo_builder.panel_information_to_pmo.PMOPanelBuilder.check_targets_are_unique" + ) + @patch( + "pmotools.pmo_builder.panel_information_to_pmo.PMOPanelBuilder.check_unique_target_info" + ) + @patch( + "pmotools.pmo_builder.panel_information_to_pmo.PMOPanelBuilder.summarise_targets_missing_optional_info" + ) + def test_create_targets_dict_without_genome_id_col( + self, + mock_summarise_targets_missing_optional_info, + mock_check_unique_target_info, + mock_check_targets_are_unique, + ): + """Test create_targets_dict without genome_id_col (should default to 0)""" + mock_summarise_targets_missing_optional_info.return_value = [], [], [] + target_table = self.min_target_table.copy() + target_table["target_start"] = [1, 2, 3] + target_table["target_end"] = [5, 6, 7] + target_table["insert_start"] = [2, 3, 4] + target_table["insert_end"] = [3, 4, 5] + target_table["chrom"] = "chrom1" + + builder = PMOPanelBuilder( + target_table, + "test_panel", + self.genome_info, + "target_name", + "fwd_primer", + "rev_primer", + forward_primers_start_col="target_start", + forward_primers_end_col="insert_start", + reverse_primers_start_col="insert_end", + reverse_primers_end_col="target_end", + insert_start_col="insert_start", + insert_end_col="insert_end", + chrom_col="chrom", + ) + + target_info = builder.create_targets_dict() + + # Check that genome_id defaults to 0 when genome_id_col is not provided + for target in target_info: + self.assertEqual(target["insert_location"]["genome_id"], 0) + self.assertEqual(target["forward_primer"]["location"]["genome_id"], 0) + self.assertEqual(target["reverse_primer"]["location"]["genome_id"], 0) + + @patch( + "pmotools.pmo_builder.panel_information_to_pmo.PMOPanelBuilder.check_targets_are_unique" + ) + @patch( + "pmotools.pmo_builder.panel_information_to_pmo.PMOPanelBuilder.check_unique_target_info" + ) + @patch( + "pmotools.pmo_builder.panel_information_to_pmo.PMOPanelBuilder.summarise_targets_missing_optional_info" + ) + def test_panel_info_table_to_pmo_with_genome_id_col( + self, + mock_summarise_targets_missing_optional_info, + mock_check_unique_target_info, + mock_check_targets_are_unique, + ): + """Test panel_info_table_to_pmo with genome_id_col parameter""" + mock_summarise_targets_missing_optional_info.return_value = [], [], [] + target_table = self.min_target_table.copy() + target_table["target_start"] = [1, 2, 3] + target_table["target_end"] = [5, 6, 7] + target_table["insert_start"] = [2, 3, 4] + target_table["insert_end"] = [3, 4, 5] + target_table["chrom"] = "chrom1" + target_table["genome_id"] = [0, 1, 0] + + result = panel_info_table_to_pmo( + target_table, + "test_panel", + self.genome_info, + forward_primers_start_col="target_start", + forward_primers_end_col="insert_start", + reverse_primers_start_col="insert_end", + reverse_primers_end_col="target_end", + insert_start_col="insert_start", + insert_end_col="insert_end", + chrom_col="chrom", + genome_id_col="genome_id", + ) + + # Check that genome_id values come from the column in the result + target_info = result["target_info"] + self.assertEqual(target_info[0]["insert_location"]["genome_id"], 0) + self.assertEqual(target_info[1]["insert_location"]["genome_id"], 1) + self.assertEqual(target_info[2]["insert_location"]["genome_id"], 0) + self.assertEqual(target_info[0]["forward_primer"]["location"]["genome_id"], 0) + self.assertEqual(target_info[1]["forward_primer"]["location"]["genome_id"], 1) + self.assertEqual(target_info[2]["forward_primer"]["location"]["genome_id"], 0) + if __name__ == "__main__": unittest.main() From c69f0324b7fa7c02179669f7d6faa2b0433bc842 Mon Sep 17 00:00:00 2001 From: kathryn1995 Date: Tue, 18 Nov 2025 17:34:42 -0800 Subject: [PATCH 18/31] Remove duplicate test --- .../test_panel_information_to_pmo.py | 62 +------------------ 1 file changed, 1 insertion(+), 61 deletions(-) diff --git a/tests/test_pmo_builder/test_panel_information_to_pmo.py b/tests/test_pmo_builder/test_panel_information_to_pmo.py index 34fef08..9db3c02 100644 --- a/tests/test_pmo_builder/test_panel_information_to_pmo.py +++ b/tests/test_pmo_builder/test_panel_information_to_pmo.py @@ -210,6 +210,7 @@ def test_merge_panel_info_dicts_no_overlap(self): "targeted_genomes": [self.genome_info], "target_info": self.min_target_json, } + panel_info_dict_b = { "panel_info": [ { @@ -240,67 +241,6 @@ def test_merge_panel_info_dicts_no_overlap(self): self.assertEqual(merged, expected_merged) - def test_merge_panel_info_dicts_with_overlap_no_reaction(self): - target_info_b = [ - { - "target_name": "target2", - "forward_primer": {"seq": "CTA"}, - "reverse_primer": {"seq": "TGG"}, - }, - { - "target_name": "target5", - "forward_primer": {"seq": "TTG"}, - "reverse_primer": {"seq": "ATT"}, - }, - ] - - panel_info_dict_a = { - "panel_info": [ - { - "panel_name": "test_panel1", - "reactions": [{"reaction_name": "1", "panel_targets": [0, 1, 2]}], - } - ], - "targeted_genomes": [self.genome_info], - "target_info": self.min_target_json, - } - panel_info_dict_b = { - "panel_info": [ - { - "panel_name": "test_panel2", - "reactions": [{"reaction_name": "1", "panel_targets": [0, 1]}], - } - ], - "targeted_genomes": [self.genome_info], - "target_info": target_info_b, - } - - merged = merge_panel_info_dicts([panel_info_dict_a, panel_info_dict_b]) - - expected_merged = { - "panel_info": [ - { - "panel_name": "test_panel1", - "reactions": [{"reaction_name": "1", "panel_targets": [0, 1, 2]}], - }, - { - "panel_name": "test_panel2", - "reactions": [{"reaction_name": "1", "panel_targets": [1, 3]}], - }, - ], - "targeted_genomes": [self.genome_info], - "target_info": self.min_target_json - + [ - { - "target_name": "target5", - "forward_primer": {"seq": "TTG"}, - "reverse_primer": {"seq": "ATT"}, - }, - ], - } - - self.assertEqual(merged, expected_merged) - def test_merge_panel_info_dicts_with_overlap(self): target_info_b = [ { From 38b7b520ec5e773a870c6f9b3f7f6a07d30f0a57 Mon Sep 17 00:00:00 2001 From: Nicholas Hathaway Date: Wed, 19 Nov 2025 12:19:56 -0500 Subject: [PATCH 19/31] was still using old fields; --- src/pmotools/pmo_engine/pmo_reader.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/pmotools/pmo_engine/pmo_reader.py b/src/pmotools/pmo_engine/pmo_reader.py index 742d4b4..b65abff 100644 --- a/src/pmotools/pmo_engine/pmo_reader.py +++ b/src/pmotools/pmo_engine/pmo_reader.py @@ -158,13 +158,11 @@ def combine_multiple_pmos(pmos: list[dict]): new_index = len(pmo_out["panel_info"]) # update target indexes to make sure reaction points to the right target indexes for reaction in panel_copy["reactions"]: - for target_id_reaction in range( - len(reaction["target_id_reactions"]) - ): - reaction["target_id_reactions"][ + for target_id_reaction in range(len(reaction["panel_targets"])): + reaction["panel_targets"][ target_id_reaction ] = target_info_old_index_key[pmo_index][ - reaction["target_id_reactions"][target_id_reaction] + reaction["panel_targets"][target_id_reaction] ] pmo_out["panel_info"].append(panel_copy) panel_info_out_index_key[panel_copy["panel_name"]] = new_index From 8d3943cf59fa668219fef67876724bffacd4a947 Mon Sep 17 00:00:00 2001 From: Nicholas Hathaway Date: Wed, 19 Nov 2025 13:00:03 -0500 Subject: [PATCH 20/31] fix for having the same specimen in different files when combining; --- src/pmotools/pmo_engine/pmo_reader.py | 44 +++++++++++++++++++++------ 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/src/pmotools/pmo_engine/pmo_reader.py b/src/pmotools/pmo_engine/pmo_reader.py index b65abff..0d2d7eb 100644 --- a/src/pmotools/pmo_engine/pmo_reader.py +++ b/src/pmotools/pmo_engine/pmo_reader.py @@ -225,10 +225,12 @@ def combine_multiple_pmos(pmos: list[dict]): # update project_id pmo_out["specimen_info"] = copy.deepcopy(pmos[0]["specimen_info"]) specimen_names = [] + specimen_index_key = {} duplicate_specimen_names = [] for specimen in pmo_out["specimen_info"]: if specimen["specimen_name"] in specimen_names: duplicate_specimen_names.append(specimen["specimen_name"]) + specimen_index_key[specimen["specimen_name"]] = len(specimen_names) specimen_names.append(specimen["specimen_name"]) # key1 pmo_index, key2 old_index, val new_index @@ -237,16 +239,38 @@ def combine_multiple_pmos(pmos: list[dict]): for specimen_info_index, specimen_info in enumerate(pmo["specimen_info"]): # checkin for duplicates if specimen_info["specimen_name"] in specimen_names: - duplicate_specimen_names.append(specimen_info["specimen_name"]) - specimen_names.append(specimen_info["specimen_name"]) - new_index = len(pmo_out["specimen_info"]) - # update project_id - specimen_info_copy = copy.deepcopy(specimen_info) - specimen_info_copy["project_id"] = project_info_old_index_key[ - pmo_index - ][specimen_info_copy["project_id"]] - pmo_out["specimen_info"].append(specimen_info_copy) - specimen_info_old_index_key[pmo_index][specimen_info_index] = new_index + # if specimen is exactly the same, then no issues + # @todo allow merging of info and as long as the meta present in both are the same then it should be fine + if ( + specimen_info + != pmo_out["specimen_info"][ + specimen_index_key[specimen_info["specimen_name"]] + ] + ): + duplicate_specimen_names.append(specimen_info["specimen_name"]) + specimen_info_old_index_key[pmo_index][ + specimen_info_index + ] = specimen_index_key[specimen_info["specimen_name"]] + else: + # update key for the already present id + specimen_info_old_index_key[pmo_index][ + specimen_info_index + ] = specimen_index_key[specimen_info["specimen_name"]] + else: + specimen_index_key[specimen_info["specimen_name"]] = len( + specimen_names + ) + specimen_names.append(specimen_info["specimen_name"]) + new_index = len(pmo_out["specimen_info"]) + # update project_id + specimen_info_copy = copy.deepcopy(specimen_info) + specimen_info_copy["project_id"] = project_info_old_index_key[ + pmo_index + ][specimen_info_copy["project_id"]] + pmo_out["specimen_info"].append(specimen_info_copy) + specimen_info_old_index_key[pmo_index][ + specimen_info_index + ] = new_index ## library_sample_info pmo_out["library_sample_info"] = copy.deepcopy(pmos[0]["library_sample_info"]) From bf2370170d7ed4cdf1a955838fc9784277f92c3d Mon Sep 17 00:00:00 2001 From: Nicholas Hathaway Date: Wed, 19 Nov 2025 15:21:29 -0500 Subject: [PATCH 21/31] update run_accession; --- tests/test_pmo_builder/test_schema_validation_integration.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_pmo_builder/test_schema_validation_integration.py b/tests/test_pmo_builder/test_schema_validation_integration.py index df00da3..3ac2627 100644 --- a/tests/test_pmo_builder/test_schema_validation_integration.py +++ b/tests/test_pmo_builder/test_schema_validation_integration.py @@ -97,7 +97,7 @@ def test_toy_pmo_validates_against_schema(): ) library_sample_info = library_sample_info_table_to_pmo( library_df, - accession_col="accession", + run_accession_col="accession", library_prep_plate_name_col="prep_plate_name", library_prep_plate_row_col="prep_plate_row", library_prep_plate_col_col="prep_plate_col", @@ -312,7 +312,7 @@ def test_toy_pmo_validates_against_schema(): assert sequencing_entry["library_kit"] == "MiSeq Reagent Kit v3" library_entry = pmo["library_sample_info"][0] - assert library_entry["accession"] == "ACC123" + assert library_entry["run_accession"] == "ACC123" assert library_entry["library_note"] == "High quality" genome_entry = pmo["targeted_genomes"][0] From 44ea71091bbf331694ffac050d280e4ce3a24eb9 Mon Sep 17 00:00:00 2001 From: Nicholas Hathaway Date: Wed, 19 Nov 2025 16:43:45 -0500 Subject: [PATCH 22/31] added update function for travel info; --- src/pmotools/pmo_engine/pmo_processor.py | 93 ++++++++- tests/test_pmo_engine/test_pmo_processor.py | 207 ++++++++++++++++++++ 2 files changed, 298 insertions(+), 2 deletions(-) diff --git a/src/pmotools/pmo_engine/pmo_processor.py b/src/pmotools/pmo_engine/pmo_processor.py index 44288e6..42969dd 100644 --- a/src/pmotools/pmo_engine/pmo_processor.py +++ b/src/pmotools/pmo_engine/pmo_processor.py @@ -3,7 +3,9 @@ import os from typing import NamedTuple import copy -import pandas +import re + + import pandas as pd from collections import defaultdict from pmotools.pmo_engine.pmo_checker import PMOChecker @@ -407,7 +409,7 @@ def list_library_sample_names_per_specimen_name( pmodata, select_specimen_ids: list[int] = None, select_specimen_names: list[str] = None, - ) -> pandas.DataFrame: + ) -> pd.DataFrame: """ List all the library_sample_names per specimen_name :param pmodata: the PMO @@ -1481,3 +1483,90 @@ def extract_panels_insert_bed_loc( ) bed_loc_out[panel_id] = bed_loc_out_per_panel return bed_loc_out + + @staticmethod + def update_specimen_meta_with_traveler_info( + pmo, + traveler_info: pd.DataFrame, + specimen_name_col: str = "specimen_name", + travel_country_col: str = "travel_country", + travel_start_col: str = "travel_start_date", + travel_end_col: str = "travel_end_date", + bed_net_usage_col: str = None, + geo_admin1_col: str = None, + geo_admin2_col: str = None, + geo_admin3_col: str = None, + lat_lon_col: str = None, + replace_current_traveler_info: bool = False, + ): + required_cols = [ + specimen_name_col, + travel_country_col, + travel_start_col, + travel_end_col, + ] + if bed_net_usage_col is not None: + required_cols.append(bed_net_usage_col) + if geo_admin1_col is not None: + required_cols.append(geo_admin1_col) + if geo_admin2_col is not None: + required_cols.append(geo_admin2_col) + if geo_admin3_col is not None: + required_cols.append(geo_admin3_col) + if lat_lon_col is not None: + required_cols.append(lat_lon_col) + + if not set(required_cols).issubset(traveler_info.columns): + raise Exception( + "missing traveler_info columns: " + ",".join(required_cols), + " columns in table: " + ",".join(traveler_info.columns), + ) + + specimen_names_in_pmo = set(PMOProcessor.get_specimen_names(pmo)) + specimen_names_in_traveler_info = set( + traveler_info[specimen_name_col].astype(str).tolist() + ) + + # check to see if provided traveler info for a specimen that cannot be found in PMO + missing_traveler_specs = specimen_names_in_traveler_info - specimen_names_in_pmo + + if missing_traveler_specs: + raise ValueError( + f"Provided traveler info for the following specimens but they are missing from the PMO: {sorted(missing_traveler_specs)}" + ) + # Matches YYYY-MM or YYYY-MM-DD + date_regex = re.compile(r"^\d{4}-\d{2}(-\d{2})?$") + traveler_info_records = traveler_info[required_cols].to_dict(orient="records") + spec_indexs = PMOProcessor.get_index_key_of_specimen_names(pmo) + + # prep traveler info lists, clear the list if we are replacing or start an empty list to append to if none exist already + for specimen_name in specimen_names_in_traveler_info: + if ( + replace_current_traveler_info + or "travel_out_six_month" + not in pmo["specimen_info"][spec_indexs[specimen_name]] + ): + pmo["specimen_info"][spec_indexs[specimen_name]][ + "travel_out_six_month" + ] = [] + + for travel_rec in traveler_info_records: + specimen_name = str(travel_rec[specimen_name_col]) + # Validate date formats + for date_col in (travel_start_col, travel_end_col): + val = travel_rec[date_col] + if pd.isna(val): + raise ValueError( + f"Missing required date value in column '{date_col}' for specimen '{specimen_name}'" + ) + val_str = str(val) + if not date_regex.match(val_str): + raise ValueError( + f"Invalid date format in '{date_col}' for specimen '{specimen_name}': '{val_str}'. " + f"Expected YYYY-MM or YYYY-MM-DD" + ) + # add in travel_rec + travel_rec.pop(specimen_name_col, None) + pmo["specimen_info"][spec_indexs[specimen_name]][ + "travel_out_six_month" + ].append(travel_rec) diff --git a/tests/test_pmo_engine/test_pmo_processor.py b/tests/test_pmo_engine/test_pmo_processor.py index b6e0fba..e7fd833 100755 --- a/tests/test_pmo_engine/test_pmo_processor.py +++ b/tests/test_pmo_engine/test_pmo_processor.py @@ -873,6 +873,213 @@ def test_get_panel_names(self): names = PMOProcessor.get_panel_names(pmo_data_combined) self.assertEqual(["heomev1"], names) + def test_update_specimen_meta_with_traveler_info(self): + test_pmo = { + "specimen_info": [{"specimen_name": "spec1"}, {"specimen_name": "spec2"}], + } + traveler_info = pd.DataFrame( + { + "specimen_name": ["spec1", "spec1", "spec2"], + "travel_country": ["Kenya", "Kenya", "Tanzania"], + "travel_start_date": ["2024-01", "2024-04", "2024-02-15"], + "travel_end_date": ["2024-02", "2024-06", "2024-02-27"], + } + ) + + PMOProcessor.update_specimen_meta_with_traveler_info(test_pmo, traveler_info) + test_out_pmo = { + "specimen_info": [ + { + "specimen_name": "spec1", + "travel_out_six_month": [ + { + "travel_country": "Kenya", + "travel_start_date": "2024-01", + "travel_end_date": "2024-02", + }, + { + "travel_country": "Kenya", + "travel_start_date": "2024-04", + "travel_end_date": "2024-06", + }, + ], + }, + { + "specimen_name": "spec2", + "travel_out_six_month": [ + { + "travel_country": "Tanzania", + "travel_start_date": "2024-02-15", + "travel_end_date": "2024-02-27", + } + ], + }, + ] + } + self.assertEqual(test_out_pmo, test_pmo) + + def test_update_specimen_meta_with_traveler_info_raises(self): + test_pmo = { + "specimen_info": [{"specimen_name": "spec1"}, {"specimen_name": "spec2"}], + } + traveler_info = pd.DataFrame( + { + "specimen_name": ["spec1", "spec2"], + "travel_country": ["Kenya", "Tanzania"], + "travel_start_date": ["24-01", "2024-02"], # BAD: "24-01" + "travel_end_date": ["2024-02-05", "2024-03"], + } + ) + + with self.assertRaises(ValueError): + PMOProcessor.update_specimen_meta_with_traveler_info( + test_pmo, traveler_info + ) + + def test_update_specimen_meta_with_traveler_info_with_optional(self): + test_pmo = { + "specimen_info": [{"specimen_name": "spec1"}, {"specimen_name": "spec2"}], + } + traveler_info = pd.DataFrame( + { + "specimen_name": ["spec1", "spec2"], + "travel_country": ["Kenya", "Tanzania"], + "travel_start_date": ["2024-01", "2024-02"], + "travel_end_date": ["2024-01-20", "2024-02-15"], + "bed_net": [0.50, 0.0], + "admin1": ["Nairobi", "Dar es Salaam"], + "admin2": ["SubCounty1", "SubCounty2"], + "admin3": ["Ward1", "Ward2"], + "latlon": ["-1.2921,36.8219", "-6.7924,39.2083"], + } + ) + + PMOProcessor.update_specimen_meta_with_traveler_info( + test_pmo, + traveler_info, + bed_net_usage_col="bed_net", + geo_admin1_col="admin1", + geo_admin2_col="admin2", + geo_admin3_col="admin3", + lat_lon_col="latlon", + ) + test_out_pmo = { + "specimen_info": [ + { + "specimen_name": "spec1", + "travel_out_six_month": [ + { + "travel_country": "Kenya", + "travel_start_date": "2024-01", + "travel_end_date": "2024-01-20", + "bed_net": 0.5, + "admin1": "Nairobi", + "admin2": "SubCounty1", + "admin3": "Ward1", + "latlon": "-1.2921,36.8219", + } + ], + }, + { + "specimen_name": "spec2", + "travel_out_six_month": [ + { + "travel_country": "Tanzania", + "travel_start_date": "2024-02", + "travel_end_date": "2024-02-15", + "bed_net": 0.0, + "admin1": "Dar es Salaam", + "admin2": "SubCounty2", + "admin3": "Ward2", + "latlon": "-6.7924,39.2083", + } + ], + }, + ] + } + self.assertEqual(test_out_pmo, test_pmo) + + def test_update_specimen_meta_with_traveler_info_with_optional_replace_old(self): + test_pmo = { + "specimen_info": [ + { + "specimen_name": "spec1", + "travel_out_six_month": [ + { + "travel_country": "Kenya", + "travel_start_date": "2024-01", + "travel_end_date": "2024-02", + }, + { + "travel_country": "Kenya", + "travel_start_date": "2024-04", + "travel_end_date": "2024-06", + }, + ], + }, + {"specimen_name": "spec2"}, + ], + } + traveler_info = pd.DataFrame( + { + "specimen_name": ["spec1", "spec2"], + "travel_country": ["Kenya", "Tanzania"], + "travel_start_date": ["2024-01", "2024-02"], + "travel_end_date": ["2024-01-20", "2024-02-15"], + "bed_net": [0.50, 0.0], + "admin1": ["Nairobi", "Dar es Salaam"], + "admin2": ["SubCounty1", "SubCounty2"], + "admin3": ["Ward1", "Ward2"], + "latlon": ["-1.2921,36.8219", "-6.7924,39.2083"], + } + ) + + PMOProcessor.update_specimen_meta_with_traveler_info( + test_pmo, + traveler_info, + bed_net_usage_col="bed_net", + geo_admin1_col="admin1", + geo_admin2_col="admin2", + geo_admin3_col="admin3", + lat_lon_col="latlon", + replace_current_traveler_info=True, + ) + test_out_pmo = { + "specimen_info": [ + { + "specimen_name": "spec1", + "travel_out_six_month": [ + { + "travel_country": "Kenya", + "travel_start_date": "2024-01", + "travel_end_date": "2024-01-20", + "bed_net": 0.5, + "admin1": "Nairobi", + "admin2": "SubCounty1", + "admin3": "Ward1", + "latlon": "-1.2921,36.8219", + } + ], + }, + { + "specimen_name": "spec2", + "travel_out_six_month": [ + { + "travel_country": "Tanzania", + "travel_start_date": "2024-02", + "travel_end_date": "2024-02-15", + "bed_net": 0.0, + "admin1": "Dar es Salaam", + "admin2": "SubCounty2", + "admin3": "Ward2", + "latlon": "-6.7924,39.2083", + } + ], + }, + ] + } + self.assertEqual(test_out_pmo, test_pmo) + if __name__ == "__main__": unittest.main() From cd9c27ad1750a4ecb5b9aa3f7528988da2dda723 Mon Sep 17 00:00:00 2001 From: Nicholas Hathaway Date: Wed, 19 Nov 2025 20:58:28 -0500 Subject: [PATCH 23/31] added function to add travel info; --- src/pmotools/pmo_engine/pmo_processor.py | 109 ++++++++++- tests/test_pmo_engine/test_pmo_processor.py | 207 ++++++++++++++++++++ 2 files changed, 314 insertions(+), 2 deletions(-) diff --git a/src/pmotools/pmo_engine/pmo_processor.py b/src/pmotools/pmo_engine/pmo_processor.py index 44288e6..57dcf5c 100644 --- a/src/pmotools/pmo_engine/pmo_processor.py +++ b/src/pmotools/pmo_engine/pmo_processor.py @@ -3,8 +3,9 @@ import os from typing import NamedTuple import copy -import pandas +import re import pandas as pd + from collections import defaultdict from pmotools.pmo_engine.pmo_checker import PMOChecker @@ -407,7 +408,7 @@ def list_library_sample_names_per_specimen_name( pmodata, select_specimen_ids: list[int] = None, select_specimen_names: list[str] = None, - ) -> pandas.DataFrame: + ) -> pd.DataFrame: """ List all the library_sample_names per specimen_name :param pmodata: the PMO @@ -1481,3 +1482,107 @@ def extract_panels_insert_bed_loc( ) bed_loc_out[panel_id] = bed_loc_out_per_panel return bed_loc_out + + @staticmethod + def update_specimen_meta_with_traveler_info( + pmo, + traveler_info: pd.DataFrame, + specimen_name_col: str = "specimen_name", + travel_country_col: str = "travel_country", + travel_start_col: str = "travel_start_date", + travel_end_col: str = "travel_end_date", + bed_net_usage_col: str = None, + geo_admin1_col: str = None, + geo_admin2_col: str = None, + geo_admin3_col: str = None, + lat_lon_col: str = None, + replace_current_traveler_info: bool = False, + ): + """ + Update a PMO's specimen's metadata with travel info + :param pmo: the PMO to update, will directly modify this PMO + :param traveler_info: the traveler info + :param specimen_name_col: the specimen name column within the traveler input table + :param travel_country_col: the column name containing the traveled to country + :param travel_start_col: the column name containing the traveled start date, format YYYY-MM-DD or YYYY-MM + :param travel_end_col: the column name containing the traveled end date, format YYYY-MM-DD or YYYY-MM + :param bed_net_usage_col: a number between 0 - 1 for rough frequency of bednet usage while traveling + :param geo_admin1_col: the column name containing the traveled to country admin level 1 info + :param geo_admin2_col: the column name containing the traveled to country admin level 2 info + :param geo_admin3_col: the column name containing the traveled to country admin level 3 info + :param lat_lon_col: the latitude and longitude column name containing the region traveled to latitude and longitude + :param replace_current_traveler_info: whether to replace current travel info + :return: a reference to the updated PMO + """ + required_cols = [ + specimen_name_col, + travel_country_col, + travel_start_col, + travel_end_col, + ] + if bed_net_usage_col is not None: + required_cols.append(bed_net_usage_col) + if geo_admin1_col is not None: + required_cols.append(geo_admin1_col) + if geo_admin2_col is not None: + required_cols.append(geo_admin2_col) + if geo_admin3_col is not None: + required_cols.append(geo_admin3_col) + if lat_lon_col is not None: + required_cols.append(lat_lon_col) + + if not set(required_cols).issubset(traveler_info.columns): + raise Exception( + "missing traveler_info columns: " + ",".join(required_cols), + " columns in table: " + ",".join(traveler_info.columns), + ) + + specimen_names_in_pmo = set(PMOProcessor.get_specimen_names(pmo)) + specimen_names_in_traveler_info = set( + traveler_info[specimen_name_col].astype(str).tolist() + ) + + # check to see if provided traveler info for a specimen that cannot be found in PMO + missing_traveler_specs = specimen_names_in_traveler_info - specimen_names_in_pmo + + if missing_traveler_specs: + raise ValueError( + f"Provided traveler info for the following specimens but they are missing from the PMO: {sorted(missing_traveler_specs)}" + ) + # Matches YYYY-MM or YYYY-MM-DD + date_regex = re.compile(r"^\d{4}-\d{2}(-\d{2})?$") + traveler_info_records = traveler_info[required_cols].to_dict(orient="records") + spec_indexs = PMOProcessor.get_index_key_of_specimen_names(pmo) + + # prep traveler info lists, clear the list if we are replacing or start an empty list to append to if none exist already + for specimen_name in specimen_names_in_traveler_info: + if ( + replace_current_traveler_info + or "travel_out_six_month" + not in pmo["specimen_info"][spec_indexs[specimen_name]] + ): + pmo["specimen_info"][spec_indexs[specimen_name]][ + "travel_out_six_month" + ] = [] + + for travel_rec in traveler_info_records: + specimen_name = str(travel_rec[specimen_name_col]) + # Validate date formats + for date_col in (travel_start_col, travel_end_col): + val = travel_rec[date_col] + if pd.isna(val): + raise ValueError( + f"Missing required date value in column '{date_col}' for specimen '{specimen_name}'" + ) + val_str = str(val) + if not date_regex.match(val_str): + raise ValueError( + f"Invalid date format in '{date_col}' for specimen '{specimen_name}': '{val_str}'. " + f"Expected YYYY-MM or YYYY-MM-DD" + ) + # add in travel_rec + travel_rec.pop(specimen_name_col, None) + pmo["specimen_info"][spec_indexs[specimen_name]][ + "travel_out_six_month" + ].append(travel_rec) + return pmo diff --git a/tests/test_pmo_engine/test_pmo_processor.py b/tests/test_pmo_engine/test_pmo_processor.py index b6e0fba..e7fd833 100755 --- a/tests/test_pmo_engine/test_pmo_processor.py +++ b/tests/test_pmo_engine/test_pmo_processor.py @@ -873,6 +873,213 @@ def test_get_panel_names(self): names = PMOProcessor.get_panel_names(pmo_data_combined) self.assertEqual(["heomev1"], names) + def test_update_specimen_meta_with_traveler_info(self): + test_pmo = { + "specimen_info": [{"specimen_name": "spec1"}, {"specimen_name": "spec2"}], + } + traveler_info = pd.DataFrame( + { + "specimen_name": ["spec1", "spec1", "spec2"], + "travel_country": ["Kenya", "Kenya", "Tanzania"], + "travel_start_date": ["2024-01", "2024-04", "2024-02-15"], + "travel_end_date": ["2024-02", "2024-06", "2024-02-27"], + } + ) + + PMOProcessor.update_specimen_meta_with_traveler_info(test_pmo, traveler_info) + test_out_pmo = { + "specimen_info": [ + { + "specimen_name": "spec1", + "travel_out_six_month": [ + { + "travel_country": "Kenya", + "travel_start_date": "2024-01", + "travel_end_date": "2024-02", + }, + { + "travel_country": "Kenya", + "travel_start_date": "2024-04", + "travel_end_date": "2024-06", + }, + ], + }, + { + "specimen_name": "spec2", + "travel_out_six_month": [ + { + "travel_country": "Tanzania", + "travel_start_date": "2024-02-15", + "travel_end_date": "2024-02-27", + } + ], + }, + ] + } + self.assertEqual(test_out_pmo, test_pmo) + + def test_update_specimen_meta_with_traveler_info_raises(self): + test_pmo = { + "specimen_info": [{"specimen_name": "spec1"}, {"specimen_name": "spec2"}], + } + traveler_info = pd.DataFrame( + { + "specimen_name": ["spec1", "spec2"], + "travel_country": ["Kenya", "Tanzania"], + "travel_start_date": ["24-01", "2024-02"], # BAD: "24-01" + "travel_end_date": ["2024-02-05", "2024-03"], + } + ) + + with self.assertRaises(ValueError): + PMOProcessor.update_specimen_meta_with_traveler_info( + test_pmo, traveler_info + ) + + def test_update_specimen_meta_with_traveler_info_with_optional(self): + test_pmo = { + "specimen_info": [{"specimen_name": "spec1"}, {"specimen_name": "spec2"}], + } + traveler_info = pd.DataFrame( + { + "specimen_name": ["spec1", "spec2"], + "travel_country": ["Kenya", "Tanzania"], + "travel_start_date": ["2024-01", "2024-02"], + "travel_end_date": ["2024-01-20", "2024-02-15"], + "bed_net": [0.50, 0.0], + "admin1": ["Nairobi", "Dar es Salaam"], + "admin2": ["SubCounty1", "SubCounty2"], + "admin3": ["Ward1", "Ward2"], + "latlon": ["-1.2921,36.8219", "-6.7924,39.2083"], + } + ) + + PMOProcessor.update_specimen_meta_with_traveler_info( + test_pmo, + traveler_info, + bed_net_usage_col="bed_net", + geo_admin1_col="admin1", + geo_admin2_col="admin2", + geo_admin3_col="admin3", + lat_lon_col="latlon", + ) + test_out_pmo = { + "specimen_info": [ + { + "specimen_name": "spec1", + "travel_out_six_month": [ + { + "travel_country": "Kenya", + "travel_start_date": "2024-01", + "travel_end_date": "2024-01-20", + "bed_net": 0.5, + "admin1": "Nairobi", + "admin2": "SubCounty1", + "admin3": "Ward1", + "latlon": "-1.2921,36.8219", + } + ], + }, + { + "specimen_name": "spec2", + "travel_out_six_month": [ + { + "travel_country": "Tanzania", + "travel_start_date": "2024-02", + "travel_end_date": "2024-02-15", + "bed_net": 0.0, + "admin1": "Dar es Salaam", + "admin2": "SubCounty2", + "admin3": "Ward2", + "latlon": "-6.7924,39.2083", + } + ], + }, + ] + } + self.assertEqual(test_out_pmo, test_pmo) + + def test_update_specimen_meta_with_traveler_info_with_optional_replace_old(self): + test_pmo = { + "specimen_info": [ + { + "specimen_name": "spec1", + "travel_out_six_month": [ + { + "travel_country": "Kenya", + "travel_start_date": "2024-01", + "travel_end_date": "2024-02", + }, + { + "travel_country": "Kenya", + "travel_start_date": "2024-04", + "travel_end_date": "2024-06", + }, + ], + }, + {"specimen_name": "spec2"}, + ], + } + traveler_info = pd.DataFrame( + { + "specimen_name": ["spec1", "spec2"], + "travel_country": ["Kenya", "Tanzania"], + "travel_start_date": ["2024-01", "2024-02"], + "travel_end_date": ["2024-01-20", "2024-02-15"], + "bed_net": [0.50, 0.0], + "admin1": ["Nairobi", "Dar es Salaam"], + "admin2": ["SubCounty1", "SubCounty2"], + "admin3": ["Ward1", "Ward2"], + "latlon": ["-1.2921,36.8219", "-6.7924,39.2083"], + } + ) + + PMOProcessor.update_specimen_meta_with_traveler_info( + test_pmo, + traveler_info, + bed_net_usage_col="bed_net", + geo_admin1_col="admin1", + geo_admin2_col="admin2", + geo_admin3_col="admin3", + lat_lon_col="latlon", + replace_current_traveler_info=True, + ) + test_out_pmo = { + "specimen_info": [ + { + "specimen_name": "spec1", + "travel_out_six_month": [ + { + "travel_country": "Kenya", + "travel_start_date": "2024-01", + "travel_end_date": "2024-01-20", + "bed_net": 0.5, + "admin1": "Nairobi", + "admin2": "SubCounty1", + "admin3": "Ward1", + "latlon": "-1.2921,36.8219", + } + ], + }, + { + "specimen_name": "spec2", + "travel_out_six_month": [ + { + "travel_country": "Tanzania", + "travel_start_date": "2024-02", + "travel_end_date": "2024-02-15", + "bed_net": 0.0, + "admin1": "Dar es Salaam", + "admin2": "SubCounty2", + "admin3": "Ward2", + "latlon": "-6.7924,39.2083", + } + ], + }, + ] + } + self.assertEqual(test_out_pmo, test_pmo) + if __name__ == "__main__": unittest.main() From cf2a34468379c01829032544d7b9dfc310ac47c9 Mon Sep 17 00:00:00 2001 From: kathryn1995 Date: Thu, 20 Nov 2025 12:56:12 -0800 Subject: [PATCH 24/31] Revert "added update function for travel info;" This reverts commit 44ea71091bbf331694ffac050d280e4ce3a24eb9. --- src/pmotools/pmo_engine/pmo_processor.py | 93 +-------- tests/test_pmo_engine/test_pmo_processor.py | 207 -------------------- 2 files changed, 2 insertions(+), 298 deletions(-) diff --git a/src/pmotools/pmo_engine/pmo_processor.py b/src/pmotools/pmo_engine/pmo_processor.py index 42969dd..44288e6 100644 --- a/src/pmotools/pmo_engine/pmo_processor.py +++ b/src/pmotools/pmo_engine/pmo_processor.py @@ -3,9 +3,7 @@ import os from typing import NamedTuple import copy -import re - - +import pandas import pandas as pd from collections import defaultdict from pmotools.pmo_engine.pmo_checker import PMOChecker @@ -409,7 +407,7 @@ def list_library_sample_names_per_specimen_name( pmodata, select_specimen_ids: list[int] = None, select_specimen_names: list[str] = None, - ) -> pd.DataFrame: + ) -> pandas.DataFrame: """ List all the library_sample_names per specimen_name :param pmodata: the PMO @@ -1483,90 +1481,3 @@ def extract_panels_insert_bed_loc( ) bed_loc_out[panel_id] = bed_loc_out_per_panel return bed_loc_out - - @staticmethod - def update_specimen_meta_with_traveler_info( - pmo, - traveler_info: pd.DataFrame, - specimen_name_col: str = "specimen_name", - travel_country_col: str = "travel_country", - travel_start_col: str = "travel_start_date", - travel_end_col: str = "travel_end_date", - bed_net_usage_col: str = None, - geo_admin1_col: str = None, - geo_admin2_col: str = None, - geo_admin3_col: str = None, - lat_lon_col: str = None, - replace_current_traveler_info: bool = False, - ): - required_cols = [ - specimen_name_col, - travel_country_col, - travel_start_col, - travel_end_col, - ] - if bed_net_usage_col is not None: - required_cols.append(bed_net_usage_col) - if geo_admin1_col is not None: - required_cols.append(geo_admin1_col) - if geo_admin2_col is not None: - required_cols.append(geo_admin2_col) - if geo_admin3_col is not None: - required_cols.append(geo_admin3_col) - if lat_lon_col is not None: - required_cols.append(lat_lon_col) - - if not set(required_cols).issubset(traveler_info.columns): - raise Exception( - "missing traveler_info columns: " + ",".join(required_cols), - " columns in table: " + ",".join(traveler_info.columns), - ) - - specimen_names_in_pmo = set(PMOProcessor.get_specimen_names(pmo)) - specimen_names_in_traveler_info = set( - traveler_info[specimen_name_col].astype(str).tolist() - ) - - # check to see if provided traveler info for a specimen that cannot be found in PMO - missing_traveler_specs = specimen_names_in_traveler_info - specimen_names_in_pmo - - if missing_traveler_specs: - raise ValueError( - f"Provided traveler info for the following specimens but they are missing from the PMO: {sorted(missing_traveler_specs)}" - ) - # Matches YYYY-MM or YYYY-MM-DD - date_regex = re.compile(r"^\d{4}-\d{2}(-\d{2})?$") - traveler_info_records = traveler_info[required_cols].to_dict(orient="records") - spec_indexs = PMOProcessor.get_index_key_of_specimen_names(pmo) - - # prep traveler info lists, clear the list if we are replacing or start an empty list to append to if none exist already - for specimen_name in specimen_names_in_traveler_info: - if ( - replace_current_traveler_info - or "travel_out_six_month" - not in pmo["specimen_info"][spec_indexs[specimen_name]] - ): - pmo["specimen_info"][spec_indexs[specimen_name]][ - "travel_out_six_month" - ] = [] - - for travel_rec in traveler_info_records: - specimen_name = str(travel_rec[specimen_name_col]) - # Validate date formats - for date_col in (travel_start_col, travel_end_col): - val = travel_rec[date_col] - if pd.isna(val): - raise ValueError( - f"Missing required date value in column '{date_col}' for specimen '{specimen_name}'" - ) - val_str = str(val) - if not date_regex.match(val_str): - raise ValueError( - f"Invalid date format in '{date_col}' for specimen '{specimen_name}': '{val_str}'. " - f"Expected YYYY-MM or YYYY-MM-DD" - ) - # add in travel_rec - travel_rec.pop(specimen_name_col, None) - pmo["specimen_info"][spec_indexs[specimen_name]][ - "travel_out_six_month" - ].append(travel_rec) diff --git a/tests/test_pmo_engine/test_pmo_processor.py b/tests/test_pmo_engine/test_pmo_processor.py index e7fd833..b6e0fba 100755 --- a/tests/test_pmo_engine/test_pmo_processor.py +++ b/tests/test_pmo_engine/test_pmo_processor.py @@ -873,213 +873,6 @@ def test_get_panel_names(self): names = PMOProcessor.get_panel_names(pmo_data_combined) self.assertEqual(["heomev1"], names) - def test_update_specimen_meta_with_traveler_info(self): - test_pmo = { - "specimen_info": [{"specimen_name": "spec1"}, {"specimen_name": "spec2"}], - } - traveler_info = pd.DataFrame( - { - "specimen_name": ["spec1", "spec1", "spec2"], - "travel_country": ["Kenya", "Kenya", "Tanzania"], - "travel_start_date": ["2024-01", "2024-04", "2024-02-15"], - "travel_end_date": ["2024-02", "2024-06", "2024-02-27"], - } - ) - - PMOProcessor.update_specimen_meta_with_traveler_info(test_pmo, traveler_info) - test_out_pmo = { - "specimen_info": [ - { - "specimen_name": "spec1", - "travel_out_six_month": [ - { - "travel_country": "Kenya", - "travel_start_date": "2024-01", - "travel_end_date": "2024-02", - }, - { - "travel_country": "Kenya", - "travel_start_date": "2024-04", - "travel_end_date": "2024-06", - }, - ], - }, - { - "specimen_name": "spec2", - "travel_out_six_month": [ - { - "travel_country": "Tanzania", - "travel_start_date": "2024-02-15", - "travel_end_date": "2024-02-27", - } - ], - }, - ] - } - self.assertEqual(test_out_pmo, test_pmo) - - def test_update_specimen_meta_with_traveler_info_raises(self): - test_pmo = { - "specimen_info": [{"specimen_name": "spec1"}, {"specimen_name": "spec2"}], - } - traveler_info = pd.DataFrame( - { - "specimen_name": ["spec1", "spec2"], - "travel_country": ["Kenya", "Tanzania"], - "travel_start_date": ["24-01", "2024-02"], # BAD: "24-01" - "travel_end_date": ["2024-02-05", "2024-03"], - } - ) - - with self.assertRaises(ValueError): - PMOProcessor.update_specimen_meta_with_traveler_info( - test_pmo, traveler_info - ) - - def test_update_specimen_meta_with_traveler_info_with_optional(self): - test_pmo = { - "specimen_info": [{"specimen_name": "spec1"}, {"specimen_name": "spec2"}], - } - traveler_info = pd.DataFrame( - { - "specimen_name": ["spec1", "spec2"], - "travel_country": ["Kenya", "Tanzania"], - "travel_start_date": ["2024-01", "2024-02"], - "travel_end_date": ["2024-01-20", "2024-02-15"], - "bed_net": [0.50, 0.0], - "admin1": ["Nairobi", "Dar es Salaam"], - "admin2": ["SubCounty1", "SubCounty2"], - "admin3": ["Ward1", "Ward2"], - "latlon": ["-1.2921,36.8219", "-6.7924,39.2083"], - } - ) - - PMOProcessor.update_specimen_meta_with_traveler_info( - test_pmo, - traveler_info, - bed_net_usage_col="bed_net", - geo_admin1_col="admin1", - geo_admin2_col="admin2", - geo_admin3_col="admin3", - lat_lon_col="latlon", - ) - test_out_pmo = { - "specimen_info": [ - { - "specimen_name": "spec1", - "travel_out_six_month": [ - { - "travel_country": "Kenya", - "travel_start_date": "2024-01", - "travel_end_date": "2024-01-20", - "bed_net": 0.5, - "admin1": "Nairobi", - "admin2": "SubCounty1", - "admin3": "Ward1", - "latlon": "-1.2921,36.8219", - } - ], - }, - { - "specimen_name": "spec2", - "travel_out_six_month": [ - { - "travel_country": "Tanzania", - "travel_start_date": "2024-02", - "travel_end_date": "2024-02-15", - "bed_net": 0.0, - "admin1": "Dar es Salaam", - "admin2": "SubCounty2", - "admin3": "Ward2", - "latlon": "-6.7924,39.2083", - } - ], - }, - ] - } - self.assertEqual(test_out_pmo, test_pmo) - - def test_update_specimen_meta_with_traveler_info_with_optional_replace_old(self): - test_pmo = { - "specimen_info": [ - { - "specimen_name": "spec1", - "travel_out_six_month": [ - { - "travel_country": "Kenya", - "travel_start_date": "2024-01", - "travel_end_date": "2024-02", - }, - { - "travel_country": "Kenya", - "travel_start_date": "2024-04", - "travel_end_date": "2024-06", - }, - ], - }, - {"specimen_name": "spec2"}, - ], - } - traveler_info = pd.DataFrame( - { - "specimen_name": ["spec1", "spec2"], - "travel_country": ["Kenya", "Tanzania"], - "travel_start_date": ["2024-01", "2024-02"], - "travel_end_date": ["2024-01-20", "2024-02-15"], - "bed_net": [0.50, 0.0], - "admin1": ["Nairobi", "Dar es Salaam"], - "admin2": ["SubCounty1", "SubCounty2"], - "admin3": ["Ward1", "Ward2"], - "latlon": ["-1.2921,36.8219", "-6.7924,39.2083"], - } - ) - - PMOProcessor.update_specimen_meta_with_traveler_info( - test_pmo, - traveler_info, - bed_net_usage_col="bed_net", - geo_admin1_col="admin1", - geo_admin2_col="admin2", - geo_admin3_col="admin3", - lat_lon_col="latlon", - replace_current_traveler_info=True, - ) - test_out_pmo = { - "specimen_info": [ - { - "specimen_name": "spec1", - "travel_out_six_month": [ - { - "travel_country": "Kenya", - "travel_start_date": "2024-01", - "travel_end_date": "2024-01-20", - "bed_net": 0.5, - "admin1": "Nairobi", - "admin2": "SubCounty1", - "admin3": "Ward1", - "latlon": "-1.2921,36.8219", - } - ], - }, - { - "specimen_name": "spec2", - "travel_out_six_month": [ - { - "travel_country": "Tanzania", - "travel_start_date": "2024-02", - "travel_end_date": "2024-02-15", - "bed_net": 0.0, - "admin1": "Dar es Salaam", - "admin2": "SubCounty2", - "admin3": "Ward2", - "latlon": "-6.7924,39.2083", - } - ], - }, - ] - } - self.assertEqual(test_out_pmo, test_pmo) - if __name__ == "__main__": unittest.main() From 040633eda941a05a740a61b3c1cafbd4a14321fe Mon Sep 17 00:00:00 2001 From: Nicholas Hathaway Date: Fri, 21 Nov 2025 15:48:04 -0800 Subject: [PATCH 25/31] added more tests for properly throwing dup library_sample_names and specimen_names; --- src/pmotools/pmo_engine/pmo_reader.py | 7 + ...mple_2_for_library_sample_dup_testing.json | 8495 +++++++++++++++++ ...um_pmo_example_2_for_spec_dup_testing.json | 8495 +++++++++++++++++ tests/test_pmo_engine/test_pmo_reader.py | 42 + 4 files changed, 17039 insertions(+) create mode 100644 tests/data/minimum_pmo_example_2_for_library_sample_dup_testing.json create mode 100644 tests/data/minimum_pmo_example_2_for_spec_dup_testing.json diff --git a/src/pmotools/pmo_engine/pmo_reader.py b/src/pmotools/pmo_engine/pmo_reader.py index 0d2d7eb..f31e9e0 100644 --- a/src/pmotools/pmo_engine/pmo_reader.py +++ b/src/pmotools/pmo_engine/pmo_reader.py @@ -278,6 +278,13 @@ def combine_multiple_pmos(pmos: list[dict]): library_sample_info_old_index_key = defaultdict(dict) duplicate_library_sample_names = [] library_sample_names = [] + # have to add the library_sample_names already added in the first PMO + for library_sample in pmo_out["library_sample_info"]: + if library_sample["library_sample_name"] in library_sample_names: + duplicate_library_sample_names.append( + library_sample["library_sample_name"] + ) + library_sample_names.append(library_sample["library_sample_name"]) for pmo_index, pmo in enumerate(pmos[1:], start=1): for library_sample_info_index, library_sample_info in enumerate( pmo["library_sample_info"] diff --git a/tests/data/minimum_pmo_example_2_for_library_sample_dup_testing.json b/tests/data/minimum_pmo_example_2_for_library_sample_dup_testing.json new file mode 100644 index 0000000..50673cd --- /dev/null +++ b/tests/data/minimum_pmo_example_2_for_library_sample_dup_testing.json @@ -0,0 +1,8495 @@ +{ + "bioinformatics_methods_info" : + [ + { + "methods" : + [ + { + "additional_argument" : + [ + "--bamExtractTrimToRegion", + "--bed /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_withPrimers.bed", + "--genomeDir /tank/data/genomes/plasmodium/genomes/pf/genomes/", + "--primaryGenome Pf3D7", + "--bam bams/{SAMPLE}.sorted.bam" + ], + "program" : "PathWeaver BamExtractPathwaysFromRegion", + "program_description" : "Extract reads from a bam file for a specific genomic locatioon and then assembles local haplotypes for that region", + "program_version" : "1.0.0-dev" + }, + { + "additional_argument" : + [ + "--overWriteDir", + "--fracCutOff 0.005", + "--dout popClusteringTrimmedParagon", + "--replicateMinTotalReadCutOff 10", + "--clusterCutOff 5", + "--pat _heome1", + "--numThreads 10", + "--groupingsFile /tank/data/plasmodium/falciparum/pfdata/metadata/meta.tab.txt", + "--genome2bit /tank/data/genomes/plasmodium/genomes/pf/genomes/Pf3D7.2bit", + "--trimBedFnp /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_inserts_trimmed1.bed" + ], + "program" : "PathWeaver runProcessClustersOnRecon", + "program_description" : "Compare across samples for each target to create population level identifiers and do post artifact cleanup", + "program_version" : "1.0.0-dev" + } + ] + } + ], + "bioinformatics_run_info" : + [ + { + "bioinformatics_methods_id" : 0, + "bioinformatics_run_name" : "PathWeaver-Heome1", + "run_date" : "2024-09-03" + } + ], + "detected_microhaplotypes" : + [ + { + "bioinformatics_run_id" : 0, + "library_samples" : + [ + { + "library_sample_id" : 1, + "target_results" : + [ + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 289 + } + ], + "mhaps_target_id" : 2 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 333 + } + ], + "mhaps_target_id" : 47 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 480 + } + ], + "mhaps_target_id" : 99 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 427 + } + ], + "mhaps_target_id" : 76 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 181 + } + ], + "mhaps_target_id" : 98 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 352 + } + ], + "mhaps_target_id" : 21 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 333 + } + ], + "mhaps_target_id" : 74 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 302 + } + ], + "mhaps_target_id" : 97 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 299 + } + ], + "mhaps_target_id" : 96 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 230 + } + ], + "mhaps_target_id" : 95 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 268 + } + ], + "mhaps_target_id" : 94 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 301 + } + ], + "mhaps_target_id" : 30 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 271 + } + ], + "mhaps_target_id" : 46 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 260 + } + ], + "mhaps_target_id" : 87 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 358 + } + ], + "mhaps_target_id" : 85 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 329 + } + ], + "mhaps_target_id" : 84 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 305 + } + ], + "mhaps_target_id" : 80 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 208 + } + ], + "mhaps_target_id" : 79 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 360 + } + ], + "mhaps_target_id" : 81 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 311 + } + ], + "mhaps_target_id" : 82 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 377 + } + ], + "mhaps_target_id" : 72 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 446 + } + ], + "mhaps_target_id" : 16 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 361 + } + ], + "mhaps_target_id" : 71 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 324 + } + ], + "mhaps_target_id" : 77 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 282 + } + ], + "mhaps_target_id" : 69 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 208 + } + ], + "mhaps_target_id" : 66 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 408 + } + ], + "mhaps_target_id" : 63 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 286 + } + ], + "mhaps_target_id" : 68 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 363 + } + ], + "mhaps_target_id" : 62 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 387 + } + ], + "mhaps_target_id" : 61 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 362 + } + ], + "mhaps_target_id" : 51 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 316 + } + ], + "mhaps_target_id" : 50 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 356 + } + ], + "mhaps_target_id" : 31 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 374 + } + ], + "mhaps_target_id" : 49 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 317 + } + ], + "mhaps_target_id" : 35 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 288 + } + ], + "mhaps_target_id" : 48 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 354 + } + ], + "mhaps_target_id" : 43 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 441 + } + ], + "mhaps_target_id" : 33 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 385 + } + ], + "mhaps_target_id" : 67 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 156 + } + ], + "mhaps_target_id" : 37 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 391 + } + ], + "mhaps_target_id" : 3 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 469 + } + ], + "mhaps_target_id" : 14 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 276 + } + ], + "mhaps_target_id" : 32 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 441 + } + ], + "mhaps_target_id" : 86 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 395 + } + ], + "mhaps_target_id" : 11 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 305 + } + ], + "mhaps_target_id" : 28 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 346 + } + ], + "mhaps_target_id" : 26 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 326 + } + ], + "mhaps_target_id" : 59 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 382 + } + ], + "mhaps_target_id" : 27 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 433 + } + ], + "mhaps_target_id" : 88 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 310 + } + ], + "mhaps_target_id" : 64 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 333 + } + ], + "mhaps_target_id" : 8 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 350 + } + ], + "mhaps_target_id" : 19 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 257 + } + ], + "mhaps_target_id" : 36 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 235 + } + ], + "mhaps_target_id" : 65 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 348 + } + ], + "mhaps_target_id" : 25 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 335 + } + ], + "mhaps_target_id" : 58 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 262 + } + ], + "mhaps_target_id" : 73 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 385 + } + ], + "mhaps_target_id" : 20 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 289 + } + ], + "mhaps_target_id" : 93 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 366 + } + ], + "mhaps_target_id" : 24 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 270 + } + ], + "mhaps_target_id" : 83 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 346 + } + ], + "mhaps_target_id" : 70 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 293 + } + ], + "mhaps_target_id" : 23 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 356 + } + ], + "mhaps_target_id" : 57 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 316 + } + ], + "mhaps_target_id" : 17 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 358 + } + ], + "mhaps_target_id" : 15 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 366 + } + ], + "mhaps_target_id" : 60 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 420 + } + ], + "mhaps_target_id" : 18 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 341 + } + ], + "mhaps_target_id" : 6 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 392 + } + ], + "mhaps_target_id" : 13 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 327 + } + ], + "mhaps_target_id" : 9 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 351 + } + ], + "mhaps_target_id" : 53 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 287 + } + ], + "mhaps_target_id" : 92 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 420 + } + ], + "mhaps_target_id" : 12 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 405 + } + ], + "mhaps_target_id" : 22 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 399 + } + ], + "mhaps_target_id" : 45 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 395 + } + ], + "mhaps_target_id" : 75 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 370 + } + ], + "mhaps_target_id" : 7 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 418 + } + ], + "mhaps_target_id" : 40 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 261 + } + ], + "mhaps_target_id" : 5 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 439 + } + ], + "mhaps_target_id" : 41 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 251 + } + ], + "mhaps_target_id" : 52 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 308 + } + ], + "mhaps_target_id" : 38 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 398 + } + ], + "mhaps_target_id" : 89 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 300 + } + ], + "mhaps_target_id" : 4 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 329 + } + ], + "mhaps_target_id" : 0 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 250 + } + ], + "mhaps_target_id" : 90 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 340 + } + ], + "mhaps_target_id" : 78 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 303 + } + ], + "mhaps_target_id" : 42 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 389 + } + ], + "mhaps_target_id" : 34 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 302 + } + ], + "mhaps_target_id" : 91 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 338 + } + ], + "mhaps_target_id" : 1 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 357 + } + ], + "mhaps_target_id" : 39 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 300 + } + ], + "mhaps_target_id" : 29 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 293 + } + ], + "mhaps_target_id" : 44 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 358 + } + ], + "mhaps_target_id" : 56 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 290 + } + ], + "mhaps_target_id" : 10 + } + ] + }, + { + "library_sample_id" : 0, + "target_results" : + [ + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1191 + } + ], + "mhaps_target_id" : 2 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1129 + } + ], + "mhaps_target_id" : 54 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 920 + }, + { + "mhap_id" : 0, + "reads" : 291 + } + ], + "mhaps_target_id" : 21 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1039 + } + ], + "mhaps_target_id" : 74 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1151 + } + ], + "mhaps_target_id" : 97 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1177 + } + ], + "mhaps_target_id" : 96 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1221 + } + ], + "mhaps_target_id" : 95 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1076 + } + ], + "mhaps_target_id" : 94 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1090 + } + ], + "mhaps_target_id" : 30 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1137 + } + ], + "mhaps_target_id" : 46 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 884 + } + ], + "mhaps_target_id" : 87 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1417 + } + ], + "mhaps_target_id" : 85 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1282 + } + ], + "mhaps_target_id" : 84 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1295 + } + ], + "mhaps_target_id" : 80 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1488 + } + ], + "mhaps_target_id" : 79 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1455 + } + ], + "mhaps_target_id" : 81 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1375 + } + ], + "mhaps_target_id" : 82 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 928 + } + ], + "mhaps_target_id" : 98 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1439 + } + ], + "mhaps_target_id" : 76 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1315 + } + ], + "mhaps_target_id" : 72 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1434 + } + ], + "mhaps_target_id" : 16 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 997 + } + ], + "mhaps_target_id" : 71 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1208 + } + ], + "mhaps_target_id" : 77 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 788 + }, + { + "mhap_id" : 0, + "reads" : 321 + } + ], + "mhaps_target_id" : 69 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1354 + } + ], + "mhaps_target_id" : 66 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1234 + } + ], + "mhaps_target_id" : 63 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1117 + } + ], + "mhaps_target_id" : 68 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 833 + }, + { + "mhap_id" : 1, + "reads" : 336 + } + ], + "mhaps_target_id" : 62 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1451 + } + ], + "mhaps_target_id" : 61 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1283 + } + ], + "mhaps_target_id" : 51 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 915 + }, + { + "mhap_id" : 1, + "reads" : 267 + } + ], + "mhaps_target_id" : 50 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1209 + } + ], + "mhaps_target_id" : 31 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 2063 + }, + { + "mhap_id" : 1, + "reads" : 450 + } + ], + "mhaps_target_id" : 49 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1319 + } + ], + "mhaps_target_id" : 35 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1196 + } + ], + "mhaps_target_id" : 48 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1507 + } + ], + "mhaps_target_id" : 99 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 843 + }, + { + "mhap_id" : 1, + "reads" : 269 + } + ], + "mhaps_target_id" : 47 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1411 + } + ], + "mhaps_target_id" : 43 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1334 + } + ], + "mhaps_target_id" : 33 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 937 + }, + { + "mhap_id" : 1, + "reads" : 318 + } + ], + "mhaps_target_id" : 67 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1066 + } + ], + "mhaps_target_id" : 37 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1128 + } + ], + "mhaps_target_id" : 3 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1500 + } + ], + "mhaps_target_id" : 14 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1276 + } + ], + "mhaps_target_id" : 32 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1370 + } + ], + "mhaps_target_id" : 86 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 1011 + }, + { + "mhap_id" : 0, + "reads" : 347 + } + ], + "mhaps_target_id" : 11 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1288 + } + ], + "mhaps_target_id" : 28 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 955 + }, + { + "mhap_id" : 0, + "reads" : 313 + } + ], + "mhaps_target_id" : 26 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1171 + } + ], + "mhaps_target_id" : 59 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1197 + } + ], + "mhaps_target_id" : 27 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 952 + }, + { + "mhap_id" : 0, + "reads" : 403 + } + ], + "mhaps_target_id" : 88 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1100 + } + ], + "mhaps_target_id" : 64 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1133 + } + ], + "mhaps_target_id" : 8 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1293 + } + ], + "mhaps_target_id" : 19 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1257 + } + ], + "mhaps_target_id" : 36 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1338 + } + ], + "mhaps_target_id" : 65 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 934 + }, + { + "mhap_id" : 1, + "reads" : 318 + } + ], + "mhaps_target_id" : 25 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1371 + } + ], + "mhaps_target_id" : 58 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 933 + }, + { + "mhap_id" : 1, + "reads" : 338 + } + ], + "mhaps_target_id" : 73 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 712 + }, + { + "mhap_id" : 0, + "reads" : 289 + } + ], + "mhaps_target_id" : 20 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1413 + } + ], + "mhaps_target_id" : 93 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1196 + } + ], + "mhaps_target_id" : 24 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1348 + } + ], + "mhaps_target_id" : 83 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1207 + } + ], + "mhaps_target_id" : 70 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 909 + } + ], + "mhaps_target_id" : 23 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1135 + } + ], + "mhaps_target_id" : 57 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 951 + }, + { + "mhap_id" : 0, + "reads" : 318 + } + ], + "mhaps_target_id" : 17 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 964 + }, + { + "mhap_id" : 1, + "reads" : 294 + } + ], + "mhaps_target_id" : 15 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1397 + } + ], + "mhaps_target_id" : 60 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1251 + } + ], + "mhaps_target_id" : 18 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 910 + }, + { + "mhap_id" : 0, + "reads" : 337 + } + ], + "mhaps_target_id" : 6 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1039 + }, + { + "mhap_id" : 1, + "reads" : 325 + } + ], + "mhaps_target_id" : 13 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1489 + } + ], + "mhaps_target_id" : 9 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 814 + }, + { + "mhap_id" : 0, + "reads" : 267 + } + ], + "mhaps_target_id" : 53 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1186 + } + ], + "mhaps_target_id" : 92 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1496 + } + ], + "mhaps_target_id" : 12 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1454 + } + ], + "mhaps_target_id" : 22 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1224 + } + ], + "mhaps_target_id" : 45 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1429 + } + ], + "mhaps_target_id" : 75 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1097 + }, + { + "mhap_id" : 1, + "reads" : 350 + } + ], + "mhaps_target_id" : 7 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1493 + } + ], + "mhaps_target_id" : 40 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1024 + } + ], + "mhaps_target_id" : 5 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1365 + } + ], + "mhaps_target_id" : 41 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1097 + } + ], + "mhaps_target_id" : 52 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 819 + }, + { + "mhap_id" : 0, + "reads" : 273 + } + ], + "mhaps_target_id" : 38 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1121 + } + ], + "mhaps_target_id" : 89 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1227 + } + ], + "mhaps_target_id" : 4 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1058 + }, + { + "mhap_id" : 1, + "reads" : 245 + } + ], + "mhaps_target_id" : 0 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 732 + }, + { + "mhap_id" : 1, + "reads" : 253 + } + ], + "mhaps_target_id" : 90 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 883 + }, + { + "mhap_id" : 1, + "reads" : 299 + } + ], + "mhaps_target_id" : 78 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1076 + } + ], + "mhaps_target_id" : 42 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 991 + } + ], + "mhaps_target_id" : 34 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1158 + } + ], + "mhaps_target_id" : 91 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1341 + } + ], + "mhaps_target_id" : 1 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 992 + }, + { + "mhap_id" : 1, + "reads" : 302 + } + ], + "mhaps_target_id" : 39 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1184 + } + ], + "mhaps_target_id" : 29 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1304 + } + ], + "mhaps_target_id" : 44 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 810 + }, + { + "mhap_id" : 1, + "reads" : 364 + } + ], + "mhaps_target_id" : 56 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1356 + } + ], + "mhaps_target_id" : 55 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1109 + } + ], + "mhaps_target_id" : 10 + } + ] + } + ] + } + ], + "library_sample_info" : + [ + { + "library_sample_name" : "5tbx_lib_name", + "panel_id" : 0, + "sequencing_info_id" : 0, + "specimen_id" : 0 + }, + { + "library_sample_name" : "XUC009_lib_name", + "panel_id" : 0, + "sequencing_info_id" : 0, + "specimen_id" : 1 + } + ], + "panel_info" : + [ + { + "panel_name" : "heomev1", + "reactions" : + [ + { + "panel_targets" : + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99 + ], + "reaction_name" : "full" + } + ] + } + ], + "pmo_header" : + { + "creation_date" : "2025-11-03", + "generation_method" : + { + "program_name" : "elucidator combingallintopmojson", + "program_version" : "1.1.1" + }, + "pmo_version" : "v1.0.0" + }, + "project_info" : + [ + { + "project_description" : "PathWeaver assemblies of Heome1 from large collection of global samples", + "project_name" : "PathWeaverHeome1" + } + ], + "representative_microhaplotypes" : + { + "targets" : + [ + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 145621, + "genome_id" : 0, + "start" : 145448, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGAATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATATGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTA" + }, + { + "seq" : "AACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGAATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATAAGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTA" + }, + { + "seq" : "AACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGTATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATAAGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTA" + } + ], + "target_id" : 79 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 109981, + "genome_id" : 0, + "start" : 109806, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ACTCATGTTCATGAGCTAATTTCCCACAAATACTCCATAACGAACTTTTCATTTTATTAAATTTATCTCTCAAAAGAGAATGACTATAATGCCATATTAAATACATATCTTTCCTTTCTAATGTTCCTGGTAATTCTATTATCATTCTTTCTAAATCTTCTTCTGTAAGTTTT" + }, + { + "seq" : "ACTTATGTTCATGAGCTAATTTCCCACAAATACTCCATAACGAACTTTTCATTTTATTAAATTTATCTCTCAAAAGAGAATGACTATAATGCCATATTAAATACATATCTTTCCTTTCTAATTTTCCTGGTAATTCTATTATCATTCTTTCTAAATCTTCTTCTGTAAGTTTT" + } + ], + "target_id" : 98 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3214477, + "genome_id" : 0, + "start" : 3214350, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TCGTTTTGAATTGTCAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGAGTGATTTTGGAATAGCTACAATGAATGAAACCGAACATACTAGATCTTTTTATGGCT" + }, + { + "seq" : "TCGTTTTGCATTGTCAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGAGTGATTTTGGAATAGCTACAATGAATGAAAGCGAACATACTAGATCTTTTTATGGCT" + } + ], + "target_id" : 99 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 278335, + "genome_id" : 0, + "start" : 278164, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GAATTTTCTTTTTTATGACTTTCTTCTCCTTGTTCAGAAGCTTCTTTTTCATCCTTTTTTTCTGCTGCGTCAGATAAATTGGGGGAAGCACTTGAAGATTCATTTCCTCCAGGAGTATCACTAGTACTTACTCCGTCCATATTTGGTTTTTCTTCCCTTAGAATTCTCA" + }, + { + "seq" : "GAATTTTCTTTTTTATGACTTTCTTCTCCTTGTTCAGAAGCTTCTTTTTCATCCTTTTTTTCTGCTGCGTCAGATAAATTGGGGGAAGCACTTGAAGATTCATTTCCTCCAGGAGTATTACTAGTACTTACTCCGTCCACATTTGGTTTTTCTTCCCCTAGAATTCTCA" + } + ], + "target_id" : 42 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 470675, + "genome_id" : 0, + "start" : 470491, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TACACATAAGAAAAAAAAAATTTATTTATTCTTACAAAAAGAATATAAAAACAAAATTTTGGGATTTATAAATTTTTATAAACGTATAACACACAAAATAAAAAAGAAACAAGAAAATGTTCATGATAAAATCACTTTTTTAAAATGTCTAAAGGAACTCTTTTTTGTCACACATACAAATA" + }, + { + "seq" : "TACACATAAGAAAAAAAAAATTTATTTATTCTTACAAAAAGAATATAAAAACAAAATTTTGGGATTTATAAATTTTTATAAACATATAACACACAAAATAAAAAAGAAACAAGAAAATGTTCATGATAAAATCACTTTTTTAAAATGTCTAAAGGAACTCTTTTTTGTCACACATACAAATG" + } + ], + "target_id" : 78 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 805941, + "genome_id" : 0, + "start" : 805821, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAATTATGAAGACAGTCTCACGACTTCATGTTATATTGATGAAAACAAATCCGATTCATCCTATGAAACTGAAGAAAATGTAAACTATAATAATAAAATGGGTAAACGCAAAAATTTA" + } + ], + "target_id" : 95 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 85645, + "genome_id" : 0, + "start" : 85439, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ACTTTTTAACACTATCATTATAATTATGTCTTTTATTTTCATATTTTTCTTTATAATAATTTATATCCTTTAATTTTTCTTTCATCAAATTTAACCATTTATCATTTAAATTCTCTTTTTCCACAGCTCCAGCATTTTTATTTATATCATCTACAACTACATCTTCCTTCACATAATTATTTATATAAAAATTATTATCATCTA" + }, + { + "seq" : "ACTTTTTAACACTATCATTATAATTATGTCTTTTATTTTCATATTTTTCTTTATAATAATTTATATCCTTTAATTTTTCTTTCATCAAATTTAACCATTTATCATTTAAATTCTCTTTTTCCACAGCTCCAGCATTTTTATTTATATCATCTACAACTACATCTTCCTTCACATAATTATTTATATAAAAACTATTATCATCTA" + } + ], + "target_id" : 73 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 142180, + "genome_id" : 0, + "start" : 141962, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GCATTTATAACAAAATATCAGAAGATGGAAAAACCAAAAATAGCCTACTTAGCGATATATCAAAATTATTTAAAATTGTAAAAGAAAGCAAATTAATATTTGTAACTGGATTTTTATTAACAACCTTGTCAGCAATTGTAGATTCATACATTCCAATTTTTCTATCCAAAACGGTATCTTTTGTAATGGAAAGAAAAAAATTTACATTTCTTAAAA" + }, + { + "seq" : "GCATTTATAACAAAATATCAGAAGATGGAAAAACCAAAAATAGCCTACTTAGCGATATATCAAAATTATTTAAAATTGTAAAAGAAAGCAAATTAATATTTGTAACTGGATTTTTATTAACAACCTTGTCAGCAATTGTCGATTCATACATTCCAATTTTTTTATCCAAAACGGTATCTTTTGTAATGGAAAGAAAAAGTTTTACATTTCTTAAAA" + } + ], + "target_id" : 37 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 221494, + "genome_id" : 0, + "start" : 221362, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTTCATAATCTAATTCGTCTTTAGGTTTATTAGCAGAGCCAGGCTTTATTCTAACTTGAATA" + }, + { + "seq" : "TGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTTCATAATCTAATTGGTCTTTAGGTTTATCAGCAGAGCCAGGCTTTATTCTAACTTGAATA" + } + ], + "target_id" : 57 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 618580, + "genome_id" : 0, + "start" : 618395, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AAAAGAGATTATAGAAGTGGAAAGAAGACATATATAATACAAGCTCTACGATATGCATTAACATATTATAGCAAACTTTCAAATAGAAAGGAAGCACCTAAAGTAACCATGTTATTTACAGATGGAAATGATCCCTATGAATCAGAAAAGGGATTACAGGATATTGCATTATTATATAGAAAA" + }, + { + "seq" : "AAAAGAGATTATAGAAGTGGAAAGAAGACATATATAATACAAGCTCTACGATATGCATTAACATATTATAGCAAACTTTCAAATAGAAAGGAAGCACCTAAAGTAACCATGTTATTTACAGATGGAAATGATTCCTATGAATCAGAAAAGGGATTACAGGATATTGCATTATTATATAGAAAA" + } + ], + "target_id" : 94 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 654174, + "genome_id" : 0, + "start" : 654001, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TATTTTTATAATTTCCTTTCATCTTATTTTTTTCTTTATATTTTTTTTTTTCATATGTAAGATTTATATAATCACTTTCGCTTTTTCTAACGCTTTTGAACTTTTTAAATGTACTTCCTTCATTATTTCTAATTCTCGTAAACACAAGAATAAATATTTTGATATATCTTA" + }, + { + "seq" : "TATTTTTATAATTTCCTTTCATCTTATTTTTTTCTTTATATTTTTTTTTTTCATATGTAAGATTTATATAATCACTTTCGCTTTTTCTAACGCTTTTGAACTTTTTAAATGTACTTCGTTCATTATTTCTAATTCTCGTAAACACAAGAATAAATATTTTGATATATCTTA" + } + ], + "target_id" : 90 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 850988, + "genome_id" : 0, + "start" : 850815, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CATATTCGTTTCAGCGTTTATAGAGCGAATATTATCGATTATGTCTATATTCCCTAAAATATGTACATAATAATCTCCATTTAATAATGTTACTTTCTTAAGAATATTTTTGTATATGACATCAAAGATATTACGAGTTAACAATACATCTACATTTCGGTCTATTATATA" + }, + { + "seq" : "CATATTCGTTTCAGCGTTTATAGAGCGAAAATTATCGATTATGTCTATATTCCCTAAAATATGTACATAATAATCTCCATTTAATAATGTTACTTTCTTAAGAATATTTTTGTATATGACATCAAAGATATTACGAGTTAACAATACATCTACATTTCGGTCTATTATATA" + } + ], + "target_id" : 48 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 180114, + "genome_id" : 0, + "start" : 179902, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTTCGATATAGGACATATAGATCATAATATAAACGAATATGAAAAACGTTTTACAATTTTAAAAGAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGAAAATAATACATTTTTAAATAGATTAAGAAATGAACAAGTGAGGGCATCGTTATTAATAACAGGTATTATAAACGAAAATAT" + }, + { + "seq" : "TTTCGATACAGGACATATAGATCATAATATAAACGAATATGAAAAACATTTTACAATTTTAAAAAAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGATAATAATACATTTTTAAATAGATTAAGAAATGAACAAGTGAGGGCATCGTTATTAATAACAGGTATTATAAACGAAAATAT" + } + ], + "target_id" : 82 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 110086, + "genome_id" : 0, + "start" : 109911, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATATTTGTATATATTCTAGTAAACACTTTAGGTACACCTGCAAGTACCTCAACATCTGAATTATATAAATCTTTAGAAAAACAACTAATATCCTTACTCCATATATTTATTTTTATACCAAGAATAACAGCCATATAAACCAAAACTCTCTCAAATGCATGTGATACAGGTAA" + }, + { + "seq" : "ATATTTGTATATATTCTAGTAAACACTTTAGGTACACCTGCAAGTACCTCAACATCTGAATTATATAAATCTTTAGAAAAACAACTAATATCCTTACTCCATATATTTATTTTTATACCAAGAATAACAGCCATATAAACCAAAACTCTCTCAAATACATGTGATACAGGTAA" + } + ], + "target_id" : 74 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 133700, + "genome_id" : 0, + "start" : 133490, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAGATTTTTTCCCTCCAACAGATGCACTCACTTTAGGTGTTTTAAACTTAGTTGTATGTTGACCCCCCTCATTATTTAGTTTACCTTTATTTAATCTTTTACCAGCAGTAGAAACTACATTCTCTCGATTATCATTACCTACTTCAGTCTTTACAATTGTAGGAGGTGTTTTAACATGATCATCCCCTCCATGAGGAGTAACCCTTAA" + }, + { + "seq" : "TAGATTTTTTCCCTTCAGCAGGTGCCCTCACTTTAGGTGTTTTAAACTTAGTTGTATGTGGAACCCCATCTTTATTTGCTTTACCTCTATTTAATCTTTTACCAGCAGTAGAAACTACATTCTCTCGATTATCATTACCTACTTCAGTCTTTACAATTGTAGGAGGTGTTTTAACATGATTATCCCCTCCATGAGGAGTAACCCTTAA" + } + ], + "target_id" : 43 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 141944, + "genome_id" : 0, + "start" : 141777, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCAAATCTGCACACAAAGAAATTAAAAAAGAATCAAAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAAT" + }, + { + "seq" : "TTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCGAATCTGCACACAAAGAAATTAAAAAAGAATCAAAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAAT" + }, + { + "seq" : "TTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCGAATCTGCACACAAAGAAATTAAAAAAGAATCAGAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAAT" + } + ], + "target_id" : 70 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 415825, + "genome_id" : 0, + "start" : 415652, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TGCTAGTTTTGCTGCTCATGAAAATAAAAGCTACTCATATGAAGGTCGTACATATAAAATGTATCCACCTGAATTTAATACATTAATGTTAAAAGCAGATTATTTTATAAGAGATATAAATACACGAGGATTTAGAGAAGTAAATATGGATTCATGTAAATCATATACAAA" + } + ], + "target_id" : 15 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 544860, + "genome_id" : 0, + "start" : 544717, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TATATTTTACATAATAACAATCTTTCATGTAATGATTATAATTTAAATAATCTTTCATTTAATATAAATAAATATATAAATGAAGAAAAAGGCAAAAATAAAAAAACAAATCAACATATATCAGAACAATTTTTATTTCCT" + }, + { + "seq" : "TATATTTTACATAATAACAATCCTTCATGTAATGATTATAATTTAAATAATCTTTCATTTAATATAAATAAATATATAAATGAAGAAAAAGGCAAAAATAAAAAAACAAATCAACATATATCAGAACAATTTTTATTTCCT" + } + ], + "target_id" : 96 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748435, + "genome_id" : 0, + "start" : 748229, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AAATGTAATTCCCTAGATATGAAATATTTTCGTGCAGTTACAACATATGTGAATGAATCAAAATATGAAAAATTGAAATATAAGAGATGTAAATATTTAAACAAAGAAACTGTGGATAATGTAAATGATATGCCTAATTCTAAAAAATTACAAAATGTTGTAGTTATGGGAAGAACAAACTGGGAAAGCATTCCAAAAAAATTT" + } + ], + "target_id" : 72 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748695, + "genome_id" : 0, + "start" : 748532, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATAGTTTTACTTGGGAAATTAAATTACTATAAATGTTTTATTATAGGAGGTTCCGTTGTTTATCAAGAATTTTTAGAAAAGAAATTAATAAAAAAAATATATTTTACTAGAATAAATAGTACATATGAATGTGATGTATTTTTTCCAGAAATAAATGAAAA" + } + ], + "target_id" : 58 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 802712, + "genome_id" : 0, + "start" : 802524, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AAATTATTATAGAAAGATAGAAGTTATTTTATATGAATGGTTATATTTTCATTATAATAATGTATATAACACCAAAGTAAAAAAACAAAAATTTATATTTACCCAACAAAAAAAAGACATATCAAAACATAACAAGTTATATCTTCAGTATGATCAAAATAAAAGAAATTCTGAAATAGAACATAC" + }, + { + "seq" : "AAATTATTATAGAAAGATAGAAGTTATTTTATATGAATGGTTATATTTTCATTATAATAATGTATATAACACCAAAGTAAAAAAACAAAAATTTATATTTACCCAACAAAAAAAAGACATATCAAAACATAACAAGTTATATCTTCAGTATGATCAAAATAAAAGAAATTCTGAAATAGAACGTAC" + } + ], + "target_id" : 92 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1037843, + "genome_id" : 0, + "start" : 1037633, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TCTTATAAAGTTAATGAAATTGCTCAACTTAATTTAACCATAGAAAGAGATTTAACAGATGATGCTGTGATTTTTGCACACTCACTTTATTTACCATTTGAAAAAGAAGAAATGTGGTGGATCGTTATCGGAATTAAAAAAATGAACTTACTTTTATCTATCAAAAAATTATCTTTATTGAAAAGTATCAATAATATAAAAATTAATT" + }, + { + "seq" : "TCTTATAAAGTTAATGAAATAGCTCAACTTAATTTAACCATAGAAAGAGATTTAACAGATGATGCTGTGATTTTTGCACACTCACTTTATTTACCATTTGAAAAAGAAGAAATGTGGTGGATCGTTATCGGAATTAAAAAAATGAACTTACTTTTATCTATCAAAAAATTATCTTTATTGAAAAGTGTCAATAATATAAAAATTAATT" + } + ], + "target_id" : 52 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1100830, + "genome_id" : 0, + "start" : 1100655, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATGTTCTAAGATCTGATGGAAAAATATCTGATCAAGGTTCTCAGAAAAGTCCTCCTAAGGAACTTTCTAATAAACAAATGACTCCTGCTCAACGTAAGAATGTGCCACATTTTGTTGAAAGAAGAGGCTATGGAAATAGTCATGTTAGGGGTAACGCACTTAAAAAAATTAGT" + }, + { + "seq" : "ATGTTCTAAGATCTGGTGGAAAAATATCTGATCAAGGTTCTCAGAAAAGTCCTCCTAAGGAACTTTCTAATAAACAAATGACTCCTGCTCAACGTAAGAATGTGCCACATTTTGTTGAAAGAAGAGGCTATGGAAATAGTCATGTTAGGGGTAACTCACTTAAAAAAATTAGT" + } + ], + "target_id" : 81 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 181672, + "genome_id" : 0, + "start" : 181556, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TCATTCTTTTTTTAACTAAAACTATTCATCTCAAAAATATAAGATATTTTATATGACGAATGCCATTGTATTTTTTGTTACGTAAAACCTGACTTCTTCAAGGAAAACACATGC" + }, + { + "seq" : "TCATTCTTTTTTTAACGAAAACTATTCATCTCAAAAATATAAGATATTTTATATGACGAATGCCATTGTATTTTTTGTTACGTAAAACCTGACTTCTTCAAGGAAAACACATGC" + } + ], + "target_id" : 64 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1102577, + "genome_id" : 0, + "start" : 1102388, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AAGAAATAAATAAAATAATTTATACAAACGAATTTAATAATTATGAAGATAAAATATATGAAGATGTCAAATATATTAAAGAACAGGAAAATGAAATATACTTGAGAGATGGAATTGAAGAGTTACATATGGATGAACCAAGTCGGGATGTATATGTTGATGATGAAAATGATTATATATTTTTAGA" + }, + { + "seq" : "AAGAAATAAATAAAATAATTTATACAAACGAATTTAATAATTATGAAGATAAAATATATGAAGATGTCAAATATATTAAAGAACAGGAAAATGAAATGTACTTGAGAGATGGAATTGAAGAGTTACATATGGATGAACCAAGTGGGGATGTATATTTTGATGATCAAGATGATTATATATTTTTAGA" + } + ], + "target_id" : 67 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1113603, + "genome_id" : 0, + "start" : 1113449, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACATCTATTCAATTTGTTTGTATAAGTATTAGGTCTTATTATTCTTTTACGTTTT" + }, + { + "seq" : "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGATTTCCATAATTTGATTACATCTATTCAATTTGTTTGTATAATTATTAGGTCTTATTATTCTTTTACGTTTT" + }, + { + "seq" : "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACATCTATTCAATTTGTTTGTATAATTATTAGGTCTTATTATTCTTTTACGTTTT" + } + ], + "target_id" : 61 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1128672, + "genome_id" : 0, + "start" : 1128488, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTGAAAGAGTTAAAGGGAAAAATACAAAATTATTTAGATAATGATATTCAATTGAGTAATGGAAAACTCCTATATAAGGATACATGGGATAGAATTGATTTGAAGTTTTGTAGAACGGTAGCAATAGAAGAGGCAGAATACACTAGAAAATTTTATAGCTTAATTAATGATAAACATACAAT" + }, + { + "seq" : "TTGAAAGAATTAAAGGGAAAAATACAAAATTATTTAGATAATGATATTCAATTGAGTAATGGAAAACTCCTATATAAGGATACATGGGATAGAATTGATTTGAAGTTTTGTAGAACGATAGCAATAGAAGAGGCAGAATACACTAGAAAATTTTATAGCTTAATTAATGATAAACATACAAT" + } + ], + "target_id" : 54 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 329549, + "genome_id" : 0, + "start" : 329377, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTGTGATGTATATAAATTCCCTTCTTCTTTATGTACCACATTATAAGAACCACGAACATATTCTTTTAAAAATGTTAACTTACTTCCAACAAATATATAATCAAAACAAAATTTTTTATTGTCGAAATGTTCTCGTTCAACCCCATTCATATTTCGGATATCATTATTTA" + } + ], + "target_id" : 33 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958220, + "genome_id" : 0, + "start" : 958058, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTTATATCATTTGTATGTGCTGTATTATCAGGAGGAACATTACCTTTTTTTATATCTGTGTTTGGTGTAATATTAAAGAACATGAATTTAGGTGATGATATTAATCCTATAATATTATCATTAGTATCTATAGGTTTAGTACAATTTATATTATCAATGA" + }, + { + "seq" : "TTTATATCATTTGTATGTGCTGTATTATCAGGAGGAACATTACCTTTTTTTATATCTGTGTTTGGTGTAATATTAAAGAACATGTATTTAGGTGATGATATTAATCCTATAATATTATCATTAGTATCTATAGGTTTAGTACAATTTATATTATCAATGA" + } + ], + "target_id" : 49 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958505, + "genome_id" : 0, + "start" : 958388, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ACGAAATTTATAACAATTTTTACATATGCCAGTTCCTTTTTAGGGTTATTTATTTGGTCATTAATAAAAAATGCACGTTTGACTTTATGTATTACTTGCGTTTTTCCGTTAATTT" + }, + { + "seq" : "ACGAAATTTATAACAATTTTTACATATGCCAGTTCCTTTTTAGGTTTATATATTTGGTCATTAATAAAAAATGCACGTTTGACTTTATGTATTACTTGCGTTTTTCCGTTAATTT" + } + ], + "target_id" : 46 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1042280, + "genome_id" : 0, + "start" : 1042161, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TATTATTACGGTACCATTATATGATTCTTTAGGTCCTCAATCAAGTAGATTTATATTAGATCAAACACAGATGGAAACTATTGTATGTAACAAGACATGTGCTCGTAATTTATTTAA" + } + ], + "target_id" : 4 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1309743, + "genome_id" : 0, + "start" : 1309608, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AATGAAGAAAATATGTCTGACAGACCAAACAGTTTATCTCATGATAAGGATCAACACCACGATGAAACACATAATGAACAATATGGATTATACGTAAAAGAAATGGAATCTAAAGTTGAAAAATTAGCTGAAA" + } + ], + "target_id" : 27 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 145500, + "genome_id" : 0, + "start" : 145342, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATTTGAATAAAATTTATCATTCACAATATTATATTTTTGTTTCTTCTTTTTTCCCATAATATTATTATTTTGTTCACAATATATGTTCATGTGTCCCCTCTTTTTCTGTAAAATATTAAAATGTTTCTTACTATGCTTTTCTTCATTTTTAATAAC" + } + ], + "target_id" : 44 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 532377, + "genome_id" : 0, + "start" : 532194, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GAACAATTGTTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACCCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCGCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACTTCCCCATGTGATCCAACGAATGCCA" + }, + { + "seq" : "GAACAATTGCTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACCCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCGCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACTTCCCCATGTGATCCAACGAATGCCA" + } + ], + "target_id" : 39 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 496142, + "genome_id" : 0, + "start" : 495970, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GAAAGTAGCGAATACCCTGTAGAAATTGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTTACTACGCCTGGTGTTACTGCACTACCTGAAGAATTACCATTAACGAGCTATAAAGTAACACCTACTTCTATTAATGTATTGCATAAAGAGGGCCCCACTTTAAA" + }, + { + "seq" : "GAAAGTAGCGAATACCCTGTAGAAATTGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTTACTACGCCTGATGTTACTGCACTACCTGAAGAATTACCATTAACGAGCTATAAAGTAACACCTACTTCTATTAATGTATTGCATAAAGAGGGCCCCACTTTAAA" + } + ], + "target_id" : 62 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 165421, + "genome_id" : 0, + "start" : 165234, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAATTATCATTATTATTATAATTATCATTGTTATTATTATTGTTGTTGTTGTTATTATTATTTCCTTTATTATTTAATATGCATTTTTTAATATCCATTTTATTATTTATCATATCAGTACTTTTATTTTTCTCCTTTTCGTTTATAGCTTTTTCCCTATGCACCCTGAATTTCCCATTTTTTTT" + }, + { + "seq" : "TCATTATTATTATTATTATAATTATCATTTTTATTATTATTGTTGTTATTATTATTTCCTTTATTATTTAATATGCATTTTTTAATATCCATTTTATTATTTATCATATCAGTACTTTTATTTTTCTCCTTTTCGTTTATAGCTTTTTCCCTATGCACCCTGAATTTCCCATTTTTTTT" + } + ], + "target_id" : 29 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 166166, + "genome_id" : 0, + "start" : 166034, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTTTATTTGAACTTTTTTATTTTCTTCATTATCAATATAAAAACAACAATCTTTAAATTTATGAAATAACACCCAACTTAATGTATAAAATATAATTTCTATAAAATCAAAATTAATGTAATAACCTAAT" + } + ], + "target_id" : 59 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 299004, + "genome_id" : 0, + "start" : 298885, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CATTCAATATGGTTCTGAGCTTAAAGATGTTATCCTTATACATGTTTCTATTCTCATTCGTTATAACATCAATGACATATAAAACATATCTCTCAAATATTTTGTGAACAATATTAT" + } + ], + "target_id" : 41 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 730087, + "genome_id" : 0, + "start" : 729974, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATGTTACGATATAAAAAAATATAGATGTTCATTATTGAA" + }, + { + "seq" : "TTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATGTTACGATATAGAAAAATATAGATGTTCATTATTGAA" + } + ], + "target_id" : 75 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1149584, + "genome_id" : 0, + "start" : 1149414, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCCATTGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTAT" + }, + { + "seq" : "AATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCTATAGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTAT" + }, + { + "seq" : "AATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCTATTGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTAT" + } + ], + "target_id" : 45 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1358910, + "genome_id" : 0, + "start" : 1358693, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AGAATCTCAACTTTTGCTTAAAAAAAATGATAACAAATATAATTCTAAATTTTGTAATGATTTGAAGAATAGTTTTTTAGATTATGGACATCTTGCTATGGGAAATGATATGGATTTTGGAGGTTATTCAACTAAGGCAGAAAACAAAATTCAAGAAGTTTTTAAAGGGGCTCATGGGAAAATAAGTGAACATGAAATTAAAAATTTTAGAAAAG" + } + ], + "target_id" : 35 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 102499, + "genome_id" : 0, + "start" : 102325, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAATTTTCTCAAGTAACATATTTTTGTCTTGACTACTTTCATCTGTAAATGGAACGAATACTCTTTGCTTACCTGCAAAAAGGACAACTGACATATGAGCCTTATCCTTACTTACATTCGAATTAAGGACCATAGATTCTAAAAATGGTATAGTTCCTTTTAACCAATAATC" + } + ], + "target_id" : 86 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 336646, + "genome_id" : 0, + "start" : 336467, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AAATTTACAGAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCCACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCACAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTA" + }, + { + "seq" : "AAATTTACAGAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCTACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCCCAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTA" + } + ], + "target_id" : 85 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 339356, + "genome_id" : 0, + "start" : 339167, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TCATTACTATTCTTTATCCATATATATGTTGTTATATCAGTTGCACCTGAGGGTGGATTCAAACCTCTTGCTTGTATAATATATGCACGTACTACTAAATTACGTGTTAATCTATATTCTCTTACTAAATCATCACATTTCTTTATCATTTCTTTTTTTAAATACATTGTCTTTTCATCATACACAT" + }, + { + "seq" : "TCATTACTATTCTTTATCCATATATATGTTGTTATATCAGTTGCACCGGATGGTGGATTCAAACCTCTTGCTTGTATAATATATGCACGTACTACTAAATTACGTGTTAATCTATATTCTCTTACTAAATCACCACATTTCTTTATCATTTCTTTTTTTAAATACATTGTCTTTTCATCATACACAT" + } + ], + "target_id" : 80 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 550217, + "genome_id" : 0, + "start" : 549992, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ACTAACAAATTATGATAATCTAGTTTATGATATAAAAAATTATTTAGAACAAAGATTAAATTTTCTTGTATTAAATGGAATACCTCGTTATAGGATACTATTTGATATTGGATTAGGATTTGCGAAGAAACATGATCAATCTATTAAACTCTTACAAAATATACATGTATATGATGAGTATCCACTTTTTATTGGATATTCAAGAAAAAGATTTATTGCCCAT" + } + ], + "target_id" : 93 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 512387, + "genome_id" : 0, + "start" : 512198, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAAAGAAATTAAGTGAAGATGATTATGAAAAAAATTGTAGACATTTAAATTATTTAATAGATAATATAAGAGAATTATTTTTTAGTTCTAAAAATATTAGAATTCCTGATTTAGCTCGTAAATATTTGTGGGATAATCAAATTGAAGGAAATCTCAAAAAATTAATATCTTCAGCAACAAAATATAA" + }, + { + "seq" : "TAAAGAAATTAAGTGAAGATGATTATGAAAAAAATTGTAGACATTTAAATTATTTAATAGATAATATAAGAGAATTATTTTTTAGTTCTAAAAATATTAGAATTCTTGATGTAGCTCGTAAATATTTGTGGGATAATCAAATTGAAGGAAATCTCAAAAAATTAATATCTTCAGAAACAAAAAATAA" + } + ], + "target_id" : 38 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 933142, + "genome_id" : 0, + "start" : 933022, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TGGTTTTAATGAGGATGATTTAGATAAAGAGTTTTTTTTTGATTTGCCGTCGATTAGTGGTTTTTCAAGTAATGGTATGAAAAAATGTAATTTAAGAAATTTATTAAAAAGATTAGAA" + } + ], + "target_id" : 3 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1269455, + "genome_id" : 0, + "start" : 1269319, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CCTTAGCATTAATAACACTTATAGGAGGTATTTATATGACTAAAGGAAGAAAAAGTTCCATATGGCATAATTCAGAAATAAATGATACACTTTATGATGTTGTTCTTGAAACAGTGAATCAAGGAAATACAGAT" + }, + { + "seq" : "CCTTAGCATTAATAACACTTATAGGAGGTATTTATATGACTAAAGGAAGAAAAAGTTCCATATGGCATAATTCAGAAATAAATGATACACTTTATGATATTGTTCTTGAAACAGTGAATCAAGGAAATACAGAT" + } + ], + "target_id" : 32 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1344818, + "genome_id" : 0, + "start" : 1344685, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AATATATCTTTTACTTTATCTGTAAGTTTCATGGAATCTATTATTTCATCTGCATATTTTATTTTTGCCTCGTTTATATATTTACCTGCTTTTAATTTACATAAACATTTTTCTATTAAGTTTTGATCATT" + } + ], + "target_id" : 30 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1363086, + "genome_id" : 0, + "start" : 1362890, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GTAAAAAAAAAGGGTTTTCCTAAAAAACCATCGGTTCATGGTTTTACACAGATGGTGTTTTTGCAGCTTACTAATATAGTCATGTATGCCCTTTGTTTTATGAGCCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAA" + }, + { + "seq" : "GTAAAAAAAAAGGGTTTTCCTAAAAAACCATCGGTTCATGGTTTTACACAGATGGTGTTTTTGAAGATTACTAATATAGTCATGTATGCCCTTTGTTTTATGAGCCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAA" + }, + { + "seq" : "GTAAACAAAAAGGGTTTTCCTAAAAAACCATTGGTTCATGGTTTTACACAGATGGTGTTTTTGCAGCTTACTAATATAGTCATGTATGCCCTTTGTTTTATGGACCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAA" + } + ], + "target_id" : 28 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 517091, + "genome_id" : 0, + "start" : 516927, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTGAAGAATGTCCCATAGGTTTTTATTGTCCAGAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCA" + }, + { + "seq" : "TGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTAAAGAATGTCCCATAGGTTTTTATTGTCCAGAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCA" + }, + { + "seq" : "TGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTAAAGAATGTCCCATAGGTTTTTATTGTCCAAAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCA" + } + ], + "target_id" : 26 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 596333, + "genome_id" : 0, + "start" : 596132, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTATTTTCGTTTTTTTTTATATTATCATTATAATTATATGTATTTACAAAGAATTTATTATTATTTGTTTCTTTATAATTATATTCATTTTCTTTATTACTTAAGGAATTTATATTTGATAAAACTTGTTGTACTCTTTCTTCTTTGTTGATGTGAATATTTGAGAAAATAATAATAAATGTAATGACTAGGGCTATGT" + } + ], + "target_id" : 25 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 685791, + "genome_id" : 0, + "start" : 685600, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CAAAGGAACAAGATAATTTTTTCAATTTTTATAAAAGTAATATATATGATATGGAAAATAGAACATGTAATAATAATATATTACAATATTGTGTTATGAATAATAAATCATATTTATTTCATAATATATCATCCAAAAAAAATATATATATAAAAAAAAAGAATCATCAGTTTTCTTTATTCATATATT" + } + ], + "target_id" : 77 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1179077, + "genome_id" : 0, + "start" : 1178893, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CAAATTACCCTTAGCCCCAGATATGGTAAAGACATATCACTGTTATAAATTAGGAAAGCAAGCAGCTAAATTATTAGAATCTATCATTTTAAAGAAAAAGTTCGTAAGATTTAGAGTTACTGATGCTATTGATGTATATGATTTCTTTTATATAAAGAAAGTTTTATCCAGTCGTATTAAGA" + }, + { + "seq" : "CAAATTATCCTTAGCCCCAGATATGGTAAAGACATATCACTGTTATAAATTAGGAAAGCAAGCAGCTGAATTATTAGAATCTATCATTTTAAAGAAAAAGTTCGTAAGATTTAGAGTTACTGATGCTATTGATGTATATGATTTCTTTTATATAAAGAAAGTTTTATCCAGTCGTATTAAGA" + } + ], + "target_id" : 89 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1406540, + "genome_id" : 0, + "start" : 1406404, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AATTAATTTTAATGATGATGTTACTTTAGAAACACAATCCATGATAGCACACGGAGGGTCTTTGTCAGAAATAGAAGAAACTGGAGATTTATCTTCAGATGTTGATAGATTACTTTCATCAATCGAAACTACTC" + } + ], + "target_id" : 51 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1437302, + "genome_id" : 0, + "start" : 1437113, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAAAACCTGACAGCTTTGTACAGTTATATTTACCCAATTAGAATGTTCAAACATATTTAAGTGTTGCCATTCTTCAAATAATTTTTTTTCATATTCAGTTTTTGGTTGGTTTTTAAATTCTTTTGATAATGTACCTTCTGCGGATGGTATAGGGAAGTTAAAAATTTTATTACTTACTTTGTTTGAT" + } + ], + "target_id" : 87 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 531899, + "genome_id" : 0, + "start" : 531681, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATTCCTACAAATAATTATAGCATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGGAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATATTATCCGA" + }, + { + "seq" : "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATACCTACAAATAATTATAACATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGTAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATATTATCCGA" + }, + { + "seq" : "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATACCTACAAATAATTATAACATGCCAAATAAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGTAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATATTATCCGA" + } + ], + "target_id" : 24 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 377208, + "genome_id" : 0, + "start" : 377094, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ACCAAAAAATGATACCTGTACGTTTTTCTCCAGGAGAAACAAAAAAATTAGAAAGGATTCTCAAAAAAGTAGACGACTTTTTCTGTGCCAATATTAAAGCGCAATATACCTG" + } + ], + "target_id" : 63 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 992543, + "genome_id" : 0, + "start" : 992370, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTTTAAAAAAAAAAATTATGATATAAAATCTTCAATTAATAAAAGATCTATCCAGTTCTTTACAGACACTAATATAGATCATTATATAGCATATGAATATTATAAGGAGGACCGTACAGAATTTATATTAACTATTATGAATGAAAAAAATATTACTCATCAAGAAACTCA" + } + ], + "target_id" : 65 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1386868, + "genome_id" : 0, + "start" : 1386699, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GAGAACAGGTTAAATATATTGAAGACGTGGTTTGATAATCAGGTATTTCTTTAATTAAATATTCATGATATTGTTCGTTAGATACATAAATTAATTCGTCCTCCACATTTTGCTGTTCTGTTATAATTTGTGAAGAAGCTTGGTTTGTCTTATTTGGTAATTGCTCT" + }, + { + "seq" : "GGGAACAGGTTAAATATATTGAAGACGTGGTTTGATAATCAGGTATTTCTTTAATTAAATATTCATGATATTGTTCGTTAGATACATAAATTAATTCGTCCTCCACATTTTGCTGTTCTGTTATAATTTGTGAAGAAGCTTGGTTTGTCTTATTTGGTAATTGCTCT" + } + ], + "target_id" : 34 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1399710, + "genome_id" : 0, + "start" : 1399543, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ACATCAGAACATAGTAAAGATTTAAATAATAATGATTCAAAAAATGAATCTAGTGATATTATTTCAGAAAATAATAAATCAAATAAAGTAGAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACA" + }, + { + "seq" : "ACATCAGAACATAGTAAAGATTTAAATAATAATGATTCAAAAAATGAATCTAGTGATATTATTTCAGAAAATAATAAATCAAATAAAGTACAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACA" + } + ], + "target_id" : 71 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1436681, + "genome_id" : 0, + "start" : 1436478, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GAGGAGAAACACGTTTTATCTCATAATTCATATGAGAAAACTAAAAATAATGAAAATAATAAATTTTTCGATAAGGATAAAGAGTTATCGATGTCTAATGTAAAAAATGTGTCACAAACAAATTTCAAAAGTCTTTTAAGAAATCTTGGTGTTTCAGAGAATATATTCCTTAAAGAAAATAAATTAAATAAGGAAGGGAAA" + }, + { + "seq" : "GAGAAGAAACACGTTTTATCTCATAATTCATATGAGAAAACTAAAAATAATGAAAATAATAAATTTTTCGATAAGGATAAAGAGTTAACGATGTCTAATGTAAAAAATGTGTCACAAACAAATTTCAAAAGTCTTTTAAGAAATCTTGGTGTTTCAGAGAATATATTCCTTAAAGAAAATAAATTAAATAAGGAAGGGAAA" + } + ], + "target_id" : 23 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 119692, + "genome_id" : 0, + "start" : 119485, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTCATCCAAAAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTATTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTCAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCC" + }, + { + "seq" : "TTCATCCAAGAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTATTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTGAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCC" + }, + { + "seq" : "TTCATCCAAAAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTATTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTGAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCC" + } + ], + "target_id" : 22 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1010037, + "genome_id" : 0, + "start" : 1009855, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AGTTCTATCTATTTGTTTAATTGGTGTCCATGAATTTTTAGAGAAACACCACATATCAGCTAATAAGGAATTATTAACATCTAATCCTCCATGAATATATAAAAAATCATTAAAACTGAAAGAAGCATGCTTATATCTTGCACGTGGACAAATTTTATTTCCAATAAGTTCCCATTTCTT" + }, + { + "seq" : "AATTCTATCTATTTGTTTAATTGGTGTCCATGAATTTTTAGAGAAACACCACATATCAGCTAATAAGGAATTATTAACATCTAATCCTCCATGAATATATAAAAAATCATTAAAACTGAAAGAAGCATGCTTATATCTTGCACGTGGACAAATTTTATTTCCAATAAGTTCCCATTTCTT" + } + ], + "target_id" : 20 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1019084, + "genome_id" : 0, + "start" : 1018952, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAGTGACTGTACATTTTTCATCTAATGTTCTATAGGATAAAGAATCTGAAGGACAATGCATATCATTACAAAAATAGCATGCACCTTTAAAATATAAATAAGAATGTCTTAACACAACAAAGGAATCAAA" + } + ], + "target_id" : 56 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1376371, + "genome_id" : 0, + "start" : 1376184, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TCTCATTCCTTTGAAAATATGAACTATTCAACTCATCAAGGTTTTCATATGTTATTTCATAACTGCCATCATCTGAATCCTCTTCATCACTACTACTTAAAGAATGCTCTTCTACAGTTATATCTTCATAATGATTATTTTTAGGAAAATATTCTTCAGATCTTTCTATAAATTCTGTTCCATTA" + } + ], + "target_id" : 60 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1552639, + "genome_id" : 0, + "start" : 1552429, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATATCGACAATTATAAAGAAAAAATAGAAAATTTTAATGAAAGATATTATGAAGATGATTTAAGTTTCTTAAACTTTCCAGGAACCATAACAAGTTATGATAAAAACCATCAAAGAGATAAAAGAAAAAACTGTTTTGAAGAATATCTAGACAATAATAATTATTTTATTGATAGTAATCTAAAGGAAGTTATAGAAAATAATATATA" + } + ], + "target_id" : 19 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 532843, + "genome_id" : 0, + "start" : 532689, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CTTTCTTAATTCTATGAATGAAGAATATACGCATATTAATTTAAATAACTTTATACATAATGATAACAATGATAAAGACGAAAATTATACATTAGATCAGGTGGAAGAATATCCTATGACTAGTTATCAAAATAATATATACAAGGATTTTT" + }, + { + "seq" : "CTTTCTTAATTCTATGAATGAAGAATATACGCATATTAATTTAAATAACTTTATACATAATAATAACCATGATAATGACGAAAATTATACATTAGATCAGGTGGAAGGATATCCTATGACTAGTTATCAAAATAATATATACAAGGATTTTT" + } + ], + "target_id" : 40 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1751054, + "genome_id" : 0, + "start" : 1750864, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TATTAAAAACAACAAATAAATTACCAAGGTCATGGAAAAAACTCTTGTTAAATCTATCCATTAGATTTCAAACAATACCTATAGGTGGTTCTATCGAAATCATATCAAAGGATGAGAAAAATATTTCTGTGACACGATCCAGTGAATATAATGCAACAACATATGAGCATTACACATTTCCCAAATGG" + }, + { + "seq" : "TATTAAAAACAACAGATAAATTACCAAGGTCATGGAAAAAACTCTTGTTAAATCTATCCATTAGATTTCAAACAATACCTATAGGTGGTTCTATCGAAATCATATCAAAGGATGAGAAAAATATTTCTATGACACGATCCAGTGAATATAATGCAACAACATATGAGCATTACACATTTCCCAAATGG" + } + ], + "target_id" : 21 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1816424, + "genome_id" : 0, + "start" : 1816210, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTGACTTCTCCGGGTTTGTTACATTATCATTACAACCAATATTATTAAGGTTAATATTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCATATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACT" + }, + { + "seq" : "TTGACTTCTCCGGGTTTGTTACATTATCATTACAACCAATATTATTAAGGTTAATATTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCCTATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACT" + } + ], + "target_id" : 18 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 63279, + "genome_id" : 0, + "start" : 63165, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATAATTTCACCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGCAATGAAAAAAACAACCCTTTCAT" + }, + { + "seq" : "ATAATTTCACCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGTAATGAAAAAAATAACCCTTTCAT" + } + ], + "target_id" : 69 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 660009, + "genome_id" : 0, + "start" : 659890, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GGTCGACTTTTGGTGGTTTAACATTTTCAGCTATGAGTTTTTCGACTGATGGCAATCCTACTTTGATTAATTCCTTTAACATAAGTTTTGCGTGTTTTTTTACTTCTGATTTGATAT" + }, + { + "seq" : "GGTCGACTTTTGGTGGTTTAACATTTTCAGCTACGAGTTTTTCGACTGATGGCAATCCTACTTTGATTAATTCCTTTAACATAAGTTTTGCGTGTCTTTTTACTTCTGATTTGATAT" + } + ], + "target_id" : 16 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 684260, + "genome_id" : 0, + "start" : 684087, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATATCAAGATGGTAGTATTGTTTTAGATGTTAGTAGTACGAGAGATAAACTTTATGGAGAAGTTGAGTGGGAAGGATATAAATTTGAACTTGTGGATACAGGAGGTTTAGTTTTTGAACAAGAAAAGTTTTCAAAAGAAATAAAGGATCAAATTCTTATGGCTCTAAAAGA" + }, + { + "seq" : "ATATCAAGATGGTAGTATTGTTTTAGATGTTAGTAGTACGAGAGATAAACTTTATGGAGAAGTTGAGTGGGAAGGATATAAATTTGAACTTGTGGATACAGGAGGTTTAGTTTTTGAACAAGAAAAGTTTTCAAAAGAAATAAAGGATCAAATTTTTATGGCTCTAAAAGA" + } + ], + "target_id" : 14 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 943427, + "genome_id" : 0, + "start" : 943257, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATCAACTATAATTAAAAATAGTGGAATTATTGAAAACTTTGGAGATATTGATTATATCTTTACGGATAAAACAGGAACACTAACAGAAAATGTTATGGTGCTTAAAGTTATACATATAGGTTTTGATGTTATACATGCAGAAAATGAAAAAAATTCCATACAAGGTAA" + }, + { + "seq" : "ATCAACTATAATTAAAAATAGTGGAATTATTGAAAACTTTGGAGATATTGATTATATCTTTACGGATAAAACAGGAACATTAACAGAAAATGTTATGGTGCTTAAAGTTATACATATAGGTTTTGATGTTATACATGCAGAAAATGAAAAAAATTCCATACAAGGTAA" + } + ], + "target_id" : 91 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 1237602, + "genome_id" : 0, + "start" : 1237430, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GTATGAACACAAAACCGAAAGAGAGTTTAAAAAAAGATCCGATTTTAATGAAGGAAGAAATAACATAATAAATGTGTCAAATGTAAAGAAAACATGTAATATAGTTAAAAATGATTTAAAGGAATCTAACGAGATAAAAACTAATATAAACACAAGTTCTTATAATTTAT" + } + ], + "target_id" : 53 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 2050313, + "genome_id" : 0, + "start" : 2050129, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTTAAACTTTGAATCTGTTCAATTAATAACACTTCATCATTGTCTTCGCCTTTTATAATATCTCCATGATTATGTGCTCCTCTAATTAAGGTATCACTAACCTGTTGTTCATCTGTCGCATGAGAACTAGTAGATATATCTGGTTTATTTTTTTTCTTTCTTTTTGTTATTTCTAATTTTTT" + }, + { + "seq" : "TTTAAACTTTGAATCTGTTCAATTAATAACACTTCATCATTGTCTTCTCCTTTTATAATATCCCCATGATTATGTGCTCCTCTAATTAAGGTATCACTAACCTGTTGTTCATCTGTCGCATGAGAACTAGTAGATATATCTGGTTTATTTTTTTTCTTTCTTTTTGTTATTTCTAATTTTTT" + } + ], + "target_id" : 36 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 103878, + "genome_id" : 0, + "start" : 103658, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ACTGATGTTAATGAAGGCCAAAATGGAAAAAGTTTAACACAAGAAAAAACCCTAAAACAAATTCCTTCGACATCACCAAATAATTTAGAACAAAAATTACAACAAACACATATTTCTTCTTCCCAACAAAAACATTTAATAAAAACTACTCCTACTTCAGATTCAACTACAACTTCATCAAGCTCTTCTGTTCCTCTTACAAAACAATCCCTTCATTC" + }, + { + "seq" : "ACTGATGTTAATGAAGGCCAAAATGGAAAACGTTTAACACAAGAAAAAACCCTAAAACAAATTCCTTCGACATCACCAAATAATTTAGAACAAAAATTACAACAAACACATATTTCTTCTTCCCAACAAAAACATTTAATAAAAACTACTCCTACTTCAGATTCAACTACAACTTCATCAAGCTCTTCTGTTCCTCTTACAAAACAATCCCTTCATTC" + } + ], + "target_id" : 13 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 156721, + "genome_id" : 0, + "start" : 156565, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATAGAGTTATTATGTTCGAATTAATGACCAGATTGTTTCGATTTTATACAAAACCAATAGACCTTATTATTACTATGAATACACACAGATATGACACACCTATATTGTTAAAACATTCAAACAGCTTACAACTTATCTTATCAAATCAACAAAA" + } + ], + "target_id" : 17 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 534367, + "genome_id" : 0, + "start" : 534214, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GATAAAAAAAGAAAATGTAACAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAAAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTG" + }, + { + "seq" : "GATAAAAAAAGAAAATGTAATAATCTACTTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAGAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTG" + }, + { + "seq" : "GATAAAAAAAGAAAATGTAATAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAAAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTG" + } + ], + "target_id" : 84 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1150492, + "genome_id" : 0, + "start" : 1150302, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAAAAAAAGCAAACAAAAAGAAAAGAGAATGGAAGATTTAAGTATTGAGGAAAATTTGAAAGAGAAATTAATAAACCTAAATATTCAGAAACAGTATAGTGGTTTCCATATGAAAGAAATGGAGGAACAAAATATTCCTGAATTAAATATTCCACAACTTTCAGCTATTCATAATAGAGAAGATATGA" + }, + { + "seq" : "TAAAAAAAGCAAACAAAAAGAAAAGAGAATGGAAGATTTAAGTATTGAGGAAAATTTGAAAGAGAAATTAATAAACCTAAATATTCAGAAACAGTATAGTGGTTTCCATATGAAAGAAATGGAGGAACAAAATATTCCTGAATTAAATATTCCACAACTTTCAGCTACTCATAATAGAGAAGATATGA" + } + ], + "target_id" : 9 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1419669, + "genome_id" : 0, + "start" : 1419542, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TGGTTTTTGTACTTTTTGTCCTTGTGTTGATATCTCTTGTTCATTTTTAGATTGAGTATCTGTTTCACTTTGTGCCTTTACCTTTGATAATACGTTTTTACCGAATAATCCTAAATTTTGGAATA" + }, + { + "seq" : "TGGTTTTTGTACTTCTTTTCCTTGTGTTGATATCTCTTGTTCATTTTTAGATTGAGTATCTGTTTCACTTTGTGCCTTTACCTTTGATAATACGTTTTTACCGAATAATCCTAAATTTTGGAATA" + } + ], + "target_id" : 8 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1725569, + "genome_id" : 0, + "start" : 1725364, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CCAATACAATAAATTCTACCATTTGACGTAACACCACAATTATTTCTTCTAGGTATATTTAAATTACTTGAAACATACCATACATCTCTTAAACGATCATACACCTCAGTTTCAAATAAAGCCTTATAATCATAGTTATTACCACCAAAAACGTATAAGAAATTATTCAATACAGCACTTCCAAAATAAGCTTTTTTGGTAGA" + } + ], + "target_id" : 10 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1876533, + "genome_id" : 0, + "start" : 1876351, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TATATTTTGGTTCAGACAAATGTACGTTACATGAAATATGTGCATTATCATCAACTAAAGAAATATCTAAACTATCTGTAAAAGTATGTTTAGAACTATCATTTGAAGAGAAGTTACATCCGTGTATGACTTTTTTTTCATATTTTGGTTTTAAAACTATTTTATAATTATTATTTTTAA" + } + ], + "target_id" : 11 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2115141, + "genome_id" : 0, + "start" : 2114974, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TCATTAAGTAAAAAATTTACGGTATCGACATTAACAGTGTAATAATTTCTTCCTAAATTTAAATGTTCTAAATAATTCAAATTTAATACGGTATTTAACCTTTCTTCAAGTATTATCATTGCATTAATTTGAAACATAAGTAAAAAATTATTAGCACTTCTAAAA" + }, + { + "seq" : "TCATTAAGTAAAAAATTTACGGTATCGACATTAACAGTGTAATAATGTCTTCCTAAATTTAAATGTTCTAAATAATTCAAATTTAATACGGTATTTAACCTTTCTTCAAGTATTATCATTGCATTAATTTGAAACATAAGTAAAAAATTATTAGCACTTCTAAAA" + } + ], + "target_id" : 68 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2124846, + "genome_id" : 0, + "start" : 2124633, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AACATTTTTTTAACATCTTTACCTTTTTGACTTGGTTCTTCATCATAATTCTGTTGTTCTGCAGAATCAGCATTTACTTCAGTTTCTTCTTTATTTTGAAAAGTGTTTGATTCTACATGAGAATTGGAAGATGAACGTCTATGTTTTACTTCTGTATAACTAGTACGTTCTCCAGTATGATGAGCCTTAAGGTTTACATCTTCAGTTTCTT" + } + ], + "target_id" : 7 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2479245, + "genome_id" : 0, + "start" : 2479085, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CCATGCTTTATCAAAACAAAGTAATGAAAATGTAATACATTATTCTTGTCGATCTATATGTGCTTTTACAAAAAACCCTAAGGGTTTAGAAGCGGTAAAGGATATCAAGGACTTTGCGAATATTATAAGTAAATCTGTTGGTGATTTGAGTAAAGAGA" + } + ], + "target_id" : 6 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2481287, + "genome_id" : 0, + "start" : 2481105, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GAACTTACTTTAGAAGCCATGAATTCGGCCGATGATCCATTGGAAGCATTTAAAAATACTTTATTAATATTTGATTTTAATTTATCTGAATTTGATAAGGATCCATATGTAAATGGTGTGCATGATTTAGCATCTAATATAAAGGATTGTTTAAGAAAAGGAGGTCACAGTAAAATATAT" + } + ], + "target_id" : 47 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2669306, + "genome_id" : 0, + "start" : 2669134, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AAAAAAATACATTTAAATCTATAATATTTGTAATAAATGATAAGAATATTAGTAATAATAGGGTACTACTATTTGTAAATACTTTTCTACATAATTTATCAATAGTAGGAAATATGATATTCTTTTTGTTTGGCTTTATTTTATCTGGGATTTTCCAATCATAAAGTTCG" + } + ], + "target_id" : 5 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 40136, + "genome_id" : 0, + "start" : 39952, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CATAGAAATATGTGCGAAAATTGGGAAAAAAATAAATAACAGGAATTGTTATATAAATTGAATCAAGAATGGCACAAAGAAAATAATACTGGTGACTTTCACACTAGTGATATCACACACAATAGTGGTATTACATACACTAGTGGTAACATACCTAGTGAAAGTAATAGTAGTTATATCCA" + }, + { + "seq" : "CATAGAAATATGTGCGAAAATTGGGAAAAAAATAAATAACAGGAATTGTTATATAAATTGAATCAAGAATGGCACAAAGAAAATAATACTGGTGACTTTCACACTAGTGATATCACACACAATAGTGGTATTACATACAGTAGTGGTAACATACCTAGTGAAAGTAATAGTAGTTATATCCA" + } + ], + "target_id" : 55 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 535109, + "genome_id" : 0, + "start" : 534940, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATACTCCGTCAGATATTCAAAATGAATGTATTTGTTCAAAAATAAATGAAGATAGAAATAATGATATGATAAACATATCTGAAATATATTATCGTTTCATTAAATTTATAACAATGATTGAAATATATTTGTGTGTAATAGAGGAAATTAAAAGGGAAGAATGGGAA" + } + ], + "target_id" : 76 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 120350, + "genome_id" : 0, + "start" : 120214, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTCTGGACAATTACAATATTCATATCCATGAGCATTGTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAA" + }, + { + "seq" : "TTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTGTGGACAATTACAATATTCATATCCATGAGCATTCTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAA" + }, + { + "seq" : "TTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTCTGGACAATTACAATATTCATATCCATGAGCATTCTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAA" + } + ], + "target_id" : 83 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 150293, + "genome_id" : 0, + "start" : 150104, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAATAATAGTAATATAAAGAATTATTCAGCTGTAGATATATTCTCACCCAAAAAAACTGGAAAGGAATGTATTAAATGTCTCCCAGATAATTTTTGTGAATGCGAATGTAGTTGTAAAAATAAAACAGGTTTTTCAATGAAATATAGACATGCCAGTAAGGGATCTAAAAGATATCGTAAAAAAATG" + }, + { + "seq" : "TAATAATAGTAATATAAAGAATTATTCAGCTGTAGATATATTCTCACCCAAAAAAACTGGAAAGGAATGTATTAAATGTCTCCCAGATAATTTTTGTGAATGCGAATGTAGTTGTAAAAATAAAACAGGTTTTTCAATGAAATATAGACATGCCAGTAAGGGATCTAAAAGATATAGTAAAAAAATG" + } + ], + "target_id" : 97 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 279785, + "genome_id" : 0, + "start" : 279662, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AGTTATAGTGATTCATATAAGGTAAATTGTATTAATTTCTCTGAAGGATTTTGTTGCTGTCATCCAATAAATAATTTAGCACTATTATATGGAGAGTATCAACAAAATCAAGAATCAAAAA" + } + ], + "target_id" : 88 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 407570, + "genome_id" : 0, + "start" : 407378, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CTCCTTCCTTTTCATTCTTTACTTTATTTCTATTAATACACAACTCTCCTTGAGTTAAGAGATTTACGATATTATCAATATTGTTTTCTTTCATATACTTCAACTTTTTACTATTCATTTTTAAAAGATAATTAACCAAGTTACTCATGTTTGTATTAGATGGTATGTTCCCAATTTTTTCGTCTTTTCT" + } + ], + "target_id" : 66 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 564376, + "genome_id" : 0, + "start" : 564207, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TATTAAAACTTTTTTTTCTTTCTGTAAAGTTTGTACATTATGTTTTGATGAGTTTTGATTATCTTCATAAAACTTTATATATTTATAAAAATTATTTTGTATAAAATCATTTAATAAAGGTAACATAATTTTTTTAGCTTGATTCAATTCACTACATGAATGTATAT" + } + ], + "target_id" : 2 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1038485, + "genome_id" : 0, + "start" : 1038368, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATACAACTAATAAAGCTCTACGATAAATTTCTTTTTTATTTGATTTAGAAAAAGGAGAAAACCATTGAAACTTTTTGGCTAGATATTTATGGTCTTTATCAAAAATATATTCTGA" + }, + { + "seq" : "ATACAACTAATAAAGCTCTACGATAAATTTCTTTTTTATTTGATTTAGAAAAAGGAGAAAACCATTGAAACTTTTTGGCTAGATATTTATGGTCTTTATCAAAAATATAATCTGA" + } + ], + "target_id" : 1 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1956285, + "genome_id" : 0, + "start" : 1956128, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TATATATAAAGTTAAACCTATAAATAATACACTACCTAATAAACTATTCTTATATTTAAAAATAAATATAATACATGTTATTAATCCTTCTATTGTTGCCGGAATAATATACATTAAAACAGAACTCATCAAATTATTAGCACTCTCGGTACCTC" + } + ], + "target_id" : 0 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1992425, + "genome_id" : 0, + "start" : 1992288, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAAACACCAGTACCATTTTTTTCTGATAAATTAATATTTTTTTGTATAACATCATATTTATCCCTTTTCGTGGTAAGTGCAGTATCCTGTTTTATTATTATATTATCGAATTCATCATGGTGTATATTTCTTTCT" + } + ], + "target_id" : 50 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 2525088, + "genome_id" : 0, + "start" : 2524961, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AATGAGGTATAATCATTCATTTCGTTGGGTCGATTTGATCTATTTTTAAGGTCCATATATTGAGATGAATCATTATGCATTTTATAATCATGAGGGATATTAGGTGCATGGTATTTAGGGTCTTT" + }, + { + "seq" : "AAAGAGGTATAATCATCCATTTTGTTGGGTCGATTTGATCTATTTTTAAGGTCCATATATTGAGATGAATCATTATGCATTTTATAATCATGAGGGATATTAGGTGCATGGTATTTAGGGTCTTT" + } + ], + "target_id" : 12 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3124841, + "genome_id" : 0, + "start" : 3124641, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATGGAAAAATGGAATATGAAGTATTAAGTGATGATAAAATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGGTGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATGATATGTGGTCTACTTCTGGACTAGGGTTCTATGAAT" + }, + { + "seq" : "ATGGAAAAATGGAATATGAAGTATTAAGTGATGATAAAATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGATGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATGATATGTGGTCTACTTCTGGACTAGGGTTCTATGAAT" + } + ], + "target_id" : 31 + } + ] + }, + "sequencing_info" : + [ + { + "library_layout" : "paired-end", + "library_selection" : "RANDOM", + "library_source" : "GENOMIC", + "library_strategy" : "WGS", + "seq_date" : "2020-01-01", + "seq_instrument_model" : "Multiple", + "seq_platform" : "ILLUMINA", + "sequencing_info_name" : "Pf7Plus" + } + ], + "specimen_info" : + [ + { + "collection_country" : "India", + "collection_date" : "2012-08-01", + "geo_admin3" : "NA", + "host_taxon_id" : 9606, + "project_id" : 0, + "specimen_collect_device" : "Dried Blood spot", + "specimen_name" : "5tbx", + "specimen_store_loc" : "Multiple", + "specimen_taxon_id" : + [ + 5833 + ] + }, + { + "collection_country" : "Papua New Guinea", + "collection_date" : "NA", + "geo_admin3" : "NA", + "host_taxon_id" : 9606, + "project_id" : 0, + "specimen_collect_device" : "Dried Blood spot", + "specimen_name" : "XUC009", + "specimen_store_loc" : "Multiple", + "specimen_taxon_id" : + [ + 5833 + ] + } + ], + "target_info" : + [ + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1956129, + "genome_id" : 0, + "start" : 1956096, + "strand" : "+" + }, + "seq" : "TTTTTCTCCACTTTGTAATTTTTATTGTTGAAT" + }, + "gene_name" : "PF3D7_1447900", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1956286, + "genome_id" : 0, + "ref_seq" : "ATATATATAAAGTTAAACCTATAAATAATACACTACCTAATAAACTATTCTTATATTTAAAAATAAATATAATACATGTTATTAATCCTTCTATTGTTGCCGGAATAATATACATTAAAACAGAACTCATCAAATTATTAGCACTCTCGGTACCTCT", + "start" : 1956129, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1956129, + "genome_id" : 0, + "start" : 1956096, + "strand" : "+" + }, + "seq" : "CGGGTGGTATCATGAGAATAGTTGAT" + }, + "target_attributes" : + [ + "Included", + "DrugResistance" + ], + "target_name" : "t96" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1038369, + "genome_id" : 0, + "start" : 1038340, + "strand" : "+" + }, + "seq" : "ACACTTCAACTACACTTTTTAATTTAGCC" + }, + "gene_name" : "PF3D7_1426700", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1038486, + "genome_id" : 0, + "ref_seq" : "CATACAATTAATAAAGCTCTACGATAAATTTCTTTTTTATTTGATTTAGAAAAAGGAGAAAACCATTGAAACTTTTTGGCTAGATATTTATGGTCTTTATCAAAAATATATTCTGAA", + "start" : 1038369, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1038369, + "genome_id" : 0, + "start" : 1038340, + "strand" : "+" + }, + "seq" : "AGATCTTATGTTAAACTTCTAGAAGATGAAGT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t95" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 564208, + "genome_id" : 0, + "start" : 564177, + "strand" : "+" + }, + "seq" : "AAAATCTTTTGGTATTGTATTTTGACTGCAC" + }, + "gene_name" : "PF3D7_1414200", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 564377, + "genome_id" : 0, + "ref_seq" : "TTATTAAAACTTTTTTTTCTTTCTGTAAAGTTTGTACATTATGTTTTGATGAGTTTTGATTATCTTCATAAAACTTTATATATTTATAAAAATTATTTTGTATAAAATCATTTAATAAAGGTAACATAATCTTTTTAGCTTGATTCAATTCACTACATGAATGTATATT", + "start" : 564208, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 564208, + "genome_id" : 0, + "start" : 564177, + "strand" : "+" + }, + "seq" : "AAACGGAATCACTTATGGATACCATTTTATTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t94" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 933023, + "genome_id" : 0, + "start" : 932995, + "strand" : "+" + }, + "seq" : "TGTAAAAGGAAAATGTCTTACGTGGATT" + }, + "gene_name" : "PF3D7_0820700", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 933143, + "genome_id" : 0, + "ref_seq" : "TTGGTTTTAATGAGGATGATTTAGATAAAGAGTTTTTTTTTGATTTGCCGTCGATTAGTGGTTTTTCAAGTAATGGTATGAAAAAATGTAATTTAAGAAATTTATTAAAAAGATTAGAAG", + "start" : 933023, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 933023, + "genome_id" : 0, + "start" : 932995, + "strand" : "+" + }, + "seq" : "ATTCAAAACCAATAGTACCACAATATGTTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t50" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1042162, + "genome_id" : 0, + "start" : 1042129, + "strand" : "+" + }, + "seq" : "GGAATATTTGTGATTTAGGATGTAATGCATACA" + }, + "gene_name" : "PF3D7_0525100", + "insert_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1042281, + "genome_id" : 0, + "ref_seq" : "ATATTATTACGGTACCATTATATGATTCTTTAGGTCCTCAATCAAGTAGATTTATATTAGATCAAACACAGATGGAAACTATTGTATGTGACAAGACATGTGCTCGTAATTTATTTAAG", + "start" : 1042162, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1042162, + "genome_id" : 0, + "start" : 1042129, + "strand" : "+" + }, + "seq" : "CAAATATATCTCTTCGCATGTTTCTAAGGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t36" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2669135, + "genome_id" : 0, + "start" : 2669104, + "strand" : "+" + }, + "seq" : "ATTTACATGATGTAACTGAATCTCAGCTTTT" + }, + "gene_name" : "PF3D7_1366800", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2669307, + "genome_id" : 0, + "ref_seq" : "AAAAAAAATACATTTAAATCTATAATATTTGTAATAAATGATAAGAATATTAGTATTAATAGGGTACTACTATTTGTAAATACTTTTCTACATAATTTATCAATAGTAGGAAATATGATATTCTTTTTGTTTGGCTTTATTTTATCTGGGATTTTCCAATCATAAAGTTCGA", + "start" : 2669135, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2669135, + "genome_id" : 0, + "start" : 2669104, + "strand" : "+" + }, + "seq" : "AGCCAGTATTCTTTTTATGAAGTATTTTAACA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t88" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2479086, + "genome_id" : 0, + "start" : 2479055, + "strand" : "+" + }, + "seq" : "CTTATAAAGAGAAATTTTCATGTTAGCGCTT" + }, + "gene_name" : "PF3D7_1361800", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2479246, + "genome_id" : 0, + "ref_seq" : "TCTATGCTTTATCAAAACAAAGTAATCAAAATGTAATACATTATTCTTGTCGATCTATATGTGCTTTTACAAAAAACCCTAAGGGTTTAGAAGCGGTAAAGGATATCAAGGACTTTGCGAATATTATAAGTAAATCTGTTGGTGATTTGAGTAAAGAGAA", + "start" : 2479086, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2479086, + "genome_id" : 0, + "start" : 2479055, + "strand" : "+" + }, + "seq" : "AGTCTTCCTTGATTTCTTTATCCAAGGTA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t86" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2124634, + "genome_id" : 0, + "start" : 2124602, + "strand" : "+" + }, + "seq" : "AATTTGGTTTCAATAAAATTATCAGCTTTCTT" + }, + "gene_name" : "PF3D7_1353100", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2124847, + "genome_id" : 0, + "ref_seq" : "TAACATTTTTTTAACATCTTTACCTTTTTGACTTGGTTCTTTATCATAATTCTGTTGTTCTGCAGAATCAGCATTTACTTCAGTTTCTTCTTTATTTTGAAAAGTGTTTGATTCTACATGAGAATTGGAAGATGAACGTCTATGTTTTACTTCTGTATAACTAGTACGTTCTCCAGTATGATGAGCCTTATGGTTTACATCTTCAGTTTCTTC", + "start" : 2124634, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2124634, + "genome_id" : 0, + "start" : 2124602, + "strand" : "+" + }, + "seq" : "GAAGAATTTTAACACAAGGAGATCATCAC" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t85" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1419543, + "genome_id" : 0, + "start" : 1419519, + "strand" : "+" + }, + "seq" : "GAAATGTCGATTCTCCTCCTTGTG" + }, + "gene_name" : "PF3D7_1335100", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1419670, + "genome_id" : 0, + "ref_seq" : "CTGGTTTTTGTACTTCTTGTCCTTGTGTTGATATCTCTTGTTCATTTTTAGATTGAGTATCTGTTTCACTTTGTGCCTTTACCTTTGATAATACGTTTTTACCGAATAATCCTAAATTTTGGAATAA", + "start" : 1419543, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1419543, + "genome_id" : 0, + "start" : 1419519, + "strand" : "+" + }, + "seq" : "GAAAACAAGGAAAAATCAGAATCATTTCCA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t81" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1150303, + "genome_id" : 0, + "start" : 1150279, + "strand" : "+" + }, + "seq" : "TAACAACCCCTCCATCAACATCTT" + }, + "gene_name" : "PF3D7_1327300", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1150493, + "genome_id" : 0, + "ref_seq" : "CTAAAAAAAGCAAACAAAAAGAAAAGAGAATGGAAGATTTAAGTATTGAGGAAAATTTGAAAGAGAAATTAATAAACCTAAATATTCAGAAACAGTATAGTGGTTTCCATATGAAAGAAATGGAGGAACAAAATATTCCTGAATTAAATATTCCACAACTTTCAGCTATTCATAATAGAGAAGATATGAA", + "start" : 1150303, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1150303, + "genome_id" : 0, + "start" : 1150279, + "strand" : "+" + }, + "seq" : "ACACTTCTATATCTTCTTTCTTCATCATTCTTA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t80" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1725365, + "genome_id" : 0, + "start" : 1725337, + "strand" : "+" + }, + "seq" : "TCGGTATAATAGAAGAGCCATCATATCC" + }, + "gene_name" : "PF3D7_1343700", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1725570, + "genome_id" : 0, + "ref_seq" : "CCCAATACAATAAATTCTACCATTTGACGTAACACCACAATTATTTCTTCTAGGTATATTTAAATTACTTGAAACATACCATACATCTCTTAAACGATCATACACCTCAGTTTCAAATAAAGCCTTATAATCATAGTTATTACCACCAAAAACGTATAAGAAATTATTCAATACAGCACTTCCAAAATAAGCTTTTTTGGTAGAC", + "start" : 1725365, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1725365, + "genome_id" : 0, + "start" : 1725337, + "strand" : "+" + }, + "seq" : "GCTGGCGTATGTGTACACCTAT" + }, + "target_attributes" : + [ + "Included", + "DrugResistance" + ], + "target_name" : "t82" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1876352, + "genome_id" : 0, + "start" : 1876325, + "strand" : "+" + }, + "seq" : "CCAGGACAATTTAAACCTACCAAATGA" + }, + "gene_name" : "PF3D7_1346700", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1876534, + "genome_id" : 0, + "ref_seq" : "TTATATTTTGGTTCAGACAAATGTACGTTACATGAAATATGTGCACTATCATCAACTAAAGAAATATCTAAACTATCTGTAAAAGTATGTTTAGAACTAACATTTGAAGAGAAGTTACATCCGTGTATGACTTTTTTTTCATATTTTGGTTTTAAAACTATTTTATAATTATTATTTTTAAA", + "start" : 1876352, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1876352, + "genome_id" : 0, + "start" : 1876325, + "strand" : "+" + }, + "seq" : "CAAAAGATGTTAATACAGAATGTACATGCAAA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t83" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 2524962, + "genome_id" : 0, + "start" : 2524931, + "strand" : "+" + }, + "seq" : "ATGATCTTCTCTGAAATTTACTTGAATTGTT" + }, + "gene_name" : "PF3D7_1462300", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 2525089, + "genome_id" : 0, + "ref_seq" : "AAATGAGGTATAATCATCCATTTCGTTGGGTCGATTTGATCTATTTTTAAGGTCCATATATTGAGATGAATCATTATGCATTTTATAATCATGAGGGATATTAGGTGCATGGTATTTAGGGTCTTTA", + "start" : 2524962, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 2524962, + "genome_id" : 0, + "start" : 2524931, + "strand" : "+" + }, + "seq" : "ACCAAACTTTTGGAGATTTCAAGATTATGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t98" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 103659, + "genome_id" : 0, + "start" : 103631, + "strand" : "+" + }, + "seq" : "GAAAAGAAGATCCAACTGACAGAGAAAA" + }, + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 103879, + "genome_id" : 0, + "ref_seq" : "AACTGATGTTAATGAAGGCCAAAATGGAAAACGTTTAACACAAGAAAAAACCCTAAAACAAATTCCTTCGACATCACCAAATAATTTAGAACAAAAATTACAACAAACACATATTTCTTCTTCCCAACAAAAACATTTAATAAAAACTACTCCTACTTCAGATTCAACTACAACTTCATCAAGCTCTTCTGTTCCTCTTACAAAACAATCCCCTCATTCT", + "start" : 103659, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 103659, + "genome_id" : 0, + "start" : 103631, + "strand" : "+" + }, + "seq" : "TGTGTACTAGATAATGCAGGAACTGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t78" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 684088, + "genome_id" : 0, + "start" : 684059, + "strand" : "+" + }, + "seq" : "GTCTACCATTTTTAATCGACTAACTCGAA" + }, + "gene_name" : "PF3D7_1217300", + "insert_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 684261, + "genome_id" : 0, + "ref_seq" : "AATATCAAGATGGTAGTATTGTTTTAGATGTTAGTAGTACGAGAGATAAACTTTATGGAGAAGTTGAGTGGGAAGGATATAAATTTGAACTTGTGGATACAGGAGGTTTAGTTTTTGAACAAGAAAAGTTTTCAAAAGAAATAAAGGATCAAATTCTTATGGCTCTAAAAGAA", + "start" : 684088, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 684088, + "genome_id" : 0, + "start" : 684059, + "strand" : "+" + }, + "seq" : "CATCAACGACAAAAATAACAACTGATGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t74" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 415653, + "genome_id" : 0, + "start" : 415623, + "strand" : "+" + }, + "seq" : "ATGAATTAATAAAAGAACATGGTGGACCTT" + }, + "gene_name" : "PF3D7_0408600", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 415826, + "genome_id" : 0, + "ref_seq" : "ATGCTAGTTTTGCTGCTCATGAAAATAAAAGCTACTCATATGAAAGTCGTACATATAAAATGTATCCACCTGAATTTAATACATTAATGTTAAAAGCAGATTATTTTATAAGAGATATAAATACACGAGGATTTAGAGAAGTAAATATGGATTCATGTAAATCATATACAAAT", + "start" : 415653, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 415653, + "genome_id" : 0, + "start" : 415623, + "strand" : "+" + }, + "seq" : "GACTTGAAAACATTTTAAATTTCTTGTATCCAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t23" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 659891, + "genome_id" : 0, + "start" : 659858, + "strand" : "+" + }, + "seq" : "GTTAATACTGGTACTATTATACCATATGTTGCT" + }, + "gene_name" : "PF3D7_1216600", + "insert_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 660010, + "genome_id" : 0, + "ref_seq" : "GGGTCGACTTTTGGTGGTTTAACATTTTCAGCTACGAGATTTTCGAATGATGGCAATCCTACTTTGATTAATTCCTTTAACATAGATTTTGCGTGTTTTTTTACTTCTGATTTGATATC", + "start" : 659891, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 659891, + "genome_id" : 0, + "start" : 659858, + "strand" : "+" + }, + "seq" : "TCACCAACCTTTTTAGAATCAAGCTTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t73" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 156566, + "genome_id" : 0, + "start" : 156535, + "strand" : "+" + }, + "seq" : "AACTGAAAGTATATACAATAGTACACCTCCA" + }, + "gene_name" : "PF3D7_1302900", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 156722, + "genome_id" : 0, + "ref_seq" : "TATAGAGTTATTATGTTCGAATTAATGACCAGATTATTTCGATTTTATACAAAACCAATAGACCTTATTATTACTATGAATACACACAGATATGACACACCTATATTGTTAAAACATTCAAACAGCTTACAACTTATCTTATCAAATCAACAAAAT", + "start" : 156566, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 156566, + "genome_id" : 0, + "start" : 156535, + "strand" : "+" + }, + "seq" : "AAAAGGATAAGTTAGAATTGCTCATTAATCT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t79" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1816211, + "genome_id" : 0, + "start" : 1816181, + "strand" : "+" + }, + "seq" : "GGGTAGATATCGTTATAAGGGCTATAATGT" + }, + "gene_name" : "PF3D7_1145800", + "insert_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1816425, + "genome_id" : 0, + "ref_seq" : "ATTGACTTCTCCGGGTTGGTTACATTATCATTACAACCAATATTATTAAGGTTAATACTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCATATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACTT", + "start" : 1816211, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1816211, + "genome_id" : 0, + "start" : 1816181, + "strand" : "+" + }, + "seq" : "GCCAAAAATACGATGTGATGAAGAATG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t71" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1552430, + "genome_id" : 0, + "start" : 1552397, + "strand" : "+" + }, + "seq" : "AAGGGAAAAATAATGGATAATATAGTTGTGAAT" + }, + "gene_name" : "PF3D7_1139100", + "insert_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1552640, + "genome_id" : 0, + "ref_seq" : "AATATCGACAATTATAAAGAAAAAATAGAAAATTTTAATGAAAGATATTATGAAGATGATTTAAGTTTCTTAAACTTTCCAGGAACCATAACAAGTTATGATAAAAACCATCAAAGAGATAAAAGAAAAAACTGTTTTGAAGAATATCTAGACAATAATAATTATTTTATTGATAGTAATCTAAAGGAAGTTATAGAAAATAATATATAT", + "start" : 1552430, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1552430, + "genome_id" : 0, + "start" : 1552397, + "strand" : "+" + }, + "seq" : "GTCAATTTGCTCCTTATCCATATTCGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t69" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1009856, + "genome_id" : 0, + "start" : 1009831, + "strand" : "+" + }, + "seq" : "AAACTGTGAGCATATCTTGGTTCAG" + }, + "gene_name" : "PF3D7_1125800", + "insert_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1010038, + "genome_id" : 0, + "ref_seq" : "GAATTCTATCTATTTGTTTAATTGGTGTCCATGAATTTTTAGAGAAACACCACATATCAGCTAATAAGGAATTATTAACATCTAATCCTCCATGAATATATAAAAAATCATTAAAACTGAAAGAAGCATGCTTATATCTTGCACGTGGACAAATTTTATTTCCAATAAGTTCCCATTTCTTT", + "start" : 1009856, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1009856, + "genome_id" : 0, + "start" : 1009831, + "strand" : "+" + }, + "seq" : "TGTTGATGAAACATATAAATTTGATTTCCAAGC" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t66" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1750865, + "genome_id" : 0, + "start" : 1750833, + "strand" : "+" + }, + "seq" : "CATCAACATATAGTCGTTATAAAAGAGCACTT" + }, + "gene_name" : "PF3D7_1143800", + "insert_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1751055, + "genome_id" : 0, + "ref_seq" : "TTATTAAAAACAACAAATAAATTACCAAGGTCATGGAAAAAACTCTTGTTAAATCTATCCATTAGATTTCAAACAATACCTATAGGTGGTTCTATCGAAATCATATCAAAGGATGAGAAAAATATTTCTATGACACGATCCAGTGAATATAATGCAACAACATATGAGCATTACACATTTCCCAAATGGT", + "start" : 1750865, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1750865, + "genome_id" : 0, + "start" : 1750833, + "strand" : "+" + }, + "seq" : "GGCGTTTCCTCATTTTCTTTACTATTGT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t70" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 119486, + "genome_id" : 0, + "start" : 119456, + "strand" : "+" + }, + "seq" : "GCTTCCATCTCCTTTATATTCATCAAGAAA" + }, + "gene_name" : "PF3D7_1102500", + "insert_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 119693, + "genome_id" : 0, + "ref_seq" : "TTTCATCCAAGAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTTTTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTCAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCCC", + "start" : 119486, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 119486, + "genome_id" : 0, + "start" : 119456, + "strand" : "+" + }, + "seq" : "GGAATTTTTAATGAATGGATTAAAACTAGTGAA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t65" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1436479, + "genome_id" : 0, + "start" : 1436451, + "strand" : "+" + }, + "seq" : "CTAGGAATCGAATAAATGAGGAAAAGCA" + }, + "gene_name" : "PF3D7_1036400", + "insert_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1436682, + "genome_id" : 0, + "ref_seq" : "CGAGAAGAAACACGTTTTATCTCATAATTCATATGAGAAAACTAAAAATAATGAAAATAATAAATTTTTCGATAAGGATAAAGAGTTAACGATGTCTAATGTAAAAAATGTGTCACAAACAAATTTCAAAAGTCTTTTAAGAAATCTTGGTGTTTCAGAGAATATATTCCTTAAAGAAAATAAATTAAATAAGGAAGGGAAAT", + "start" : 1436479, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1436479, + "genome_id" : 0, + "start" : 1436451, + "strand" : "+" + }, + "seq" : "ATCGTCATCATCATTTATTATGTGTTCAATTA" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t64" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 531682, + "genome_id" : 0, + "start" : 531656, + "strand" : "+" + }, + "seq" : "CTTTTTGGGCTTATTGTTTGGAAGAA" + }, + "gene_name" : "PF3D7_0113800", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 531900, + "genome_id" : 0, + "ref_seq" : "AAAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATTCCTACAAATAATTATAGCATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGTAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATAGTATCCGAA", + "start" : 531682, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 531682, + "genome_id" : 0, + "start" : 531656, + "strand" : "+" + }, + "seq" : "ACTGGATTCTTCTAATATTCTTTGCTCTCT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t6" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 596133, + "genome_id" : 0, + "start" : 596101, + "strand" : "+" + }, + "seq" : "ATTTGTTTTTGTTCTACATCAATAATTGGTTT" + }, + "gene_name" : "PF3D7_0913900", + "insert_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 596334, + "genome_id" : 0, + "ref_seq" : "ATTATTTTCGTTTTTTTTTATATTATCATTATAATTATATGTATTTACAAAGAATTTATTATTATTTGTTTCTTTATAATTATATTCATTTTCTTTATTACTTAAGGAATTTATATTTGATAAAACTTGTTGTCCTCTTTCTTCTTTGTTGATGTGAATATTTGAGAAAATAATAATAAATGTAATGACTAGGGCTATGTT", + "start" : 596133, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 596133, + "genome_id" : 0, + "start" : 596101, + "strand" : "+" + }, + "seq" : "AAATAGAAGTCATATAGGTGACTGGAATCTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t55" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 516928, + "genome_id" : 0, + "start" : 516904, + "strand" : "+" + }, + "seq" : "TGTGGGCGCAAAAACTATAAATGA" + }, + "gene_name" : "PF3D7_0911300", + "insert_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 517092, + "genome_id" : 0, + "ref_seq" : "ATGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTGAAGAATGTCCCATAGGTTTTTATTGTCCAAAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCAA", + "start" : 516928, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 516928, + "genome_id" : 0, + "start" : 516904, + "strand" : "+" + }, + "seq" : "ATTTTGTATATCCAAAATTACATTGACAATTGT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t54" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1309609, + "genome_id" : 0, + "start" : 1309581, + "strand" : "+" + }, + "seq" : "ACGACGAAGAAAACGAAAGTATTGATAA" + }, + "gene_name" : "PF3D7_0532300", + "insert_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1309744, + "genome_id" : 0, + "ref_seq" : "TAATGAAGAAAATATGTCTGACAGACCAAACAGTTTATCTCATGATAAGGATCAACACCTCGATGAAACACATAATGAACAATATGGATTATACGTAAAAGAAATGGAATCTAAAGTTGAAAAATTAGCTGAAAA", + "start" : 1309609, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1309609, + "genome_id" : 0, + "start" : 1309581, + "strand" : "+" + }, + "seq" : "ACCTCTTGAAATTCCTTTTCAACTTGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t37" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1362891, + "genome_id" : 0, + "start" : 1362863, + "strand" : "+" + }, + "seq" : "CGACTTCTTTAAGAGAACAAACAGAACA" + }, + "gene_name" : "PF3D7_0831600", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1363087, + "genome_id" : 0, + "ref_seq" : "CGTAAAAAAAAAGGGTTTTCCTAAAAAACCATCGGTTCATGGTTTTACACAGATGGTGTTTTTGCAGCTTACTAATATAGTCATGTATGCCCTTTGTTTTATGAGCCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAAT", + "start" : 1362891, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1362891, + "genome_id" : 0, + "start" : 1362863, + "strand" : "+" + }, + "seq" : "AAGTTTTCTTCTGAATAGTTCTACAAAGTATTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t53" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 165235, + "genome_id" : 0, + "start" : 165202, + "strand" : "+" + }, + "seq" : "GGATCCTCTTACAATCTCGAAATAATTATAATT" + }, + "gene_name" : "PF3D7_0703900", + "insert_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 165422, + "genome_id" : 0, + "ref_seq" : "ATCATTATTATTATTATTATAATTATCATTGTTATTATTATTGTTGTTGTTGTTATTATTATTTCCTTTATTATTTAATATGCATTTTTTAATATCCATTTTATTATTTATCATATCAGTACTTTTATTTTTCTCCTTTTCGTTTATAGCTTTTTCCCTATGCACCCTGAATTTCCCATTTTTTTTT", + "start" : 165235, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 165235, + "genome_id" : 0, + "start" : 165202, + "strand" : "+" + }, + "seq" : "ATGGTTTGGTAAGCGAGTTTATGTTATT" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t40" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1344686, + "genome_id" : 0, + "start" : 1344653, + "strand" : "+" + }, + "seq" : "TCTTTTCCATATATAATAACGCATGAATTCTTT" + }, + "gene_name" : "PF3D7_0831400", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1344819, + "genome_id" : 0, + "ref_seq" : "AAATATATCTTTTACTTTATCTGTAAGTTTCATGGAATCTATTATTTCATGTGCATATTTTATTTTTGCCTCGTTTATATATTTACCTGCTTTTAATTTACATAAACATTTTTCTATTAAGTTTTGATCATTT", + "start" : 1344686, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1344686, + "genome_id" : 0, + "start" : 1344653, + "strand" : "+" + }, + "seq" : "TGAGAACAGATGAAGTAACTACTCGATT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t52" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3124642, + "genome_id" : 0, + "start" : 3124614, + "strand" : "+" + }, + "seq" : "CAGATTATTTGGTAATGAACAACCAGGA" + }, + "gene_name" : "PF3D7_1475900", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3124842, + "genome_id" : 0, + "ref_seq" : "TATGGAAAAATGGAATATGAAGTATTAAGTGATGATAACATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGATGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATAATATGTGGTCTACTTCTGGACTAGGGTTCTATGAATT", + "start" : 3124642, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3124642, + "genome_id" : 0, + "start" : 3124614, + "strand" : "+" + }, + "seq" : "AGGTCTTCCTAATCTTGAACCATCATAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t99" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1269320, + "genome_id" : 0, + "start" : 1269294, + "strand" : "+" + }, + "seq" : "CTCTTATATCAGGAGCAGCTATAGGA" + }, + "gene_name" : "PF3D7_0829600", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1269456, + "genome_id" : 0, + "ref_seq" : "GCCTTAGCATTAATAACACTTATAGGAGGTATTTATATGACTAAAGGAAGAAAAAGTTCCATATGGCATAATTCAGAAATAAATGATACACTTTATGATGTTGTTCTTGAAACAGTGAATCAAGGAAATACAGATG", + "start" : 1269320, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1269320, + "genome_id" : 0, + "start" : 1269294, + "strand" : "+" + }, + "seq" : "TTTTACTCCTCTTTGAAAAGCCAACTTTA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t51" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 329378, + "genome_id" : 0, + "start" : 329351, + "strand" : "+" + }, + "seq" : "GTGTTAAAACAACAGGAGGAACACTAA" + }, + "gene_name" : "PF3D7_0508000", + "insert_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 329550, + "genome_id" : 0, + "ref_seq" : "ATTGTGATGTATATAAATTCCCTTCTTCTTTATGTACCACATTATAAGAACCACGAACATATTCTTTTAAAAATGTTAACTTACTTCCAACAAATATATAATCAAAACAAAATTTTTTATTGTCGAAATGTTCTCGTTCAACCCCATTCATATTTCGGATATCATTATTTAA", + "start" : 329378, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 329378, + "genome_id" : 0, + "start" : 329351, + "strand" : "+" + }, + "seq" : "TGTTGTAGAATATTCGTGTCCGTATAGT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t33" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1386700, + "genome_id" : 0, + "start" : 1386672, + "strand" : "+" + }, + "seq" : "TGCTACAGTTATATAGGACGATTTTGGT" + }, + "gene_name" : "PF3D7_1035000", + "insert_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1386869, + "genome_id" : 0, + "ref_seq" : "AGGGAACAGGTTAAATATATTGAAGACGTGGTTTGATAATCAGGTATTTCTTTAATTAAATATTCATGATATTGTTCGTTAGATACATAAATTAATTCGTCCTCCACATTTTGCTGTTCTGTTATAATTTGTGAAGAAGCTTGGTTTGTCTTATTTGGTAATTGCTCTT", + "start" : 1386700, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1386700, + "genome_id" : 0, + "start" : 1386672, + "strand" : "+" + }, + "seq" : "AAAATGAGGACAAGGAAAATAATACATTCATAA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t62" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1358694, + "genome_id" : 0, + "start" : 1358666, + "strand" : "+" + }, + "seq" : "AAGGATCATTTCATTGAAGCCTCTAAAA" + }, + "gene_name" : "PF3D7_0731500", + "insert_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1358911, + "genome_id" : 0, + "ref_seq" : "AAGAATCTCAACTTTTGCTTAAAAAAAATGATAACAAATATAATTCTAAATTTTGTAATGATTTGAAGAATAGTTTTTTAGATTATGGACATCTTGCTATGGGAAATGATATGGATTTTGGAGGTTATTCAACTAAGGCAGAAAACAAAATTCAAGAAGTTTTTAAAGGGGCTCATGGGGAAATAAGTGAACATAAAATTAAAAATTTTAGAAAAAA", + "start" : 1358694, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1358694, + "genome_id" : 0, + "start" : 1358666, + "strand" : "+" + }, + "seq" : "CAAAGTTTCTCTCTAAATTCATTCCACCAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t45" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 2050130, + "genome_id" : 0, + "start" : 2050103, + "strand" : "+" + }, + "seq" : "TTGGTTTTGATTATCTCCCATTTTCGT" + }, + "gene_name" : "PF3D7_1250100", + "insert_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 2050314, + "genome_id" : 0, + "ref_seq" : "TTTTAAACTTTGAATCTGTTCAATTAATAACACTTCATCATTGTCTTCGCCTTTTATAATATCTCCATGATTATGTGCTCCTCTAATTAAGGTATCACTAACCTGTTGTTCATCTGTCGCATGAGAACTAGTAGATATATCTGGTTTATTTTTTTTCTTTCTTTTTGTTATTTCTAATTTTTTT", + "start" : 2050130, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 2050130, + "genome_id" : 0, + "start" : 2050103, + "strand" : "+" + }, + "seq" : "AAAAACATACCTAGACATTTGAATGTCTTAGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t77" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 141963, + "genome_id" : 0, + "start" : 141936, + "strand" : "+" + }, + "seq" : "AAAGCGAATAATGCCAATATGTTGTTC" + }, + "gene_name" : "PF3D7_0302600", + "insert_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 142181, + "genome_id" : 0, + "ref_seq" : "AGCATTTATAACAAAATATCAGAAGATGGAAAAACCAAAAATAGCCTACTTAGCGATATATCTAAATTATTTAAAATTGTAAAAGAAAGCAAATTAATATTTGTAACTGGATTTTTATTAACAACCTTGTCAGCAATTGTCGATTCATACATTCCAATTTTTCTATCCAAAACGGTATCTTTTGTAATGGAAAGAAAAAAATTTACATTTCTTAAAAT", + "start" : 141963, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 141963, + "genome_id" : 0, + "start" : 141936, + "strand" : "+" + }, + "seq" : "TTTTTACAACTGACAAATTTGTTTTGTGT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t15" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 512199, + "genome_id" : 0, + "start" : 512168, + "strand" : "+" + }, + "seq" : "CGAATCAAAGGTAGAAAATGATCTTGAAGAA" + }, + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 512388, + "genome_id" : 0, + "ref_seq" : "TTAAATAAATTAAGTGAAGATGATTATGAAAAAAATTGTAGACATTTAAATTATTTAATAGATAATATAAGAGAATTATTTTTTAGTTCTAAAAATATTAGAATTCCTGATGTAGCTCGTAAATATTTGTGGGATAATCAAATTGAAGGAAATCTCAAAAAATTAATATCTTCAGAAACAAAATATAAA", + "start" : 512199, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 512199, + "genome_id" : 0, + "start" : 512168, + "strand" : "+" + }, + "seq" : "CTGTGGATTATTTATACGATTCCTTTGACA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t5" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 532195, + "genome_id" : 0, + "start" : 532167, + "strand" : "+" + }, + "seq" : "ATCAAGCTGAATCTATCCTATTGGATCA" + }, + "gene_name" : "PF3D7_0612900", + "insert_location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 532378, + "genome_id" : 0, + "ref_seq" : "AGAACAATTGCTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACCCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCTCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACGTCCCCATGTGATCCAACGAATGCCAC", + "start" : 532195, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 532195, + "genome_id" : 0, + "start" : 532167, + "strand" : "+" + }, + "seq" : "GTATATTGTTTATTGGGATCCCCTTCC" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t39" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 532690, + "genome_id" : 0, + "start" : 532660, + "strand" : "+" + }, + "seq" : "GGGAAGAATGGTTTAATCGTAAAAATGAAG" + }, + "gene_name" : "PF3D7_0113800", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 532844, + "genome_id" : 0, + "ref_seq" : "ACTTTCTTAATTCTATGAATGAAGAATATACGCATATTAATTTAAATAACTTTATACATAATAATAACCATGATAATGACGAAAATTATACATTAGATCAGGTGGAAGGATATCCTATGACTAGTTATCAAAATAATATATACAAGGATTTTTT", + "start" : 532690, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 532690, + "genome_id" : 0, + "start" : 532660, + "strand" : "+" + }, + "seq" : "GTCTTCGAAATAATGAACTCCCTTTTCT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t7" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 298886, + "genome_id" : 0, + "start" : 298857, + "strand" : "+" + }, + "seq" : "TAGATATATCATTCACAGTCGTCTCATGG" + }, + "gene_name" : "PF3D7_0706100", + "insert_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 299005, + "genome_id" : 0, + "ref_seq" : "ACATTCAATATGGTTCTGAGCTTAAAGATGTTATCCTTATACATGTTTCTATTCTCATTCGTTATAACATCAATGACATATAAAACATATCGCTCAAATATTTTGTGAACAATATTATA", + "start" : 298886, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 298886, + "genome_id" : 0, + "start" : 298857, + "strand" : "+" + }, + "seq" : "TGTTAAGTTTTCTCTTGTGGAATCGAAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t42" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 278165, + "genome_id" : 0, + "start" : 278144, + "strand" : "+" + }, + "seq" : "CTTACCATTCGCGCTTTCTTG" + }, + "gene_name" : "PF3D7_0207000", + "insert_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 278336, + "genome_id" : 0, + "ref_seq" : "GGAATTTTCTTTTTTATGACTTTCTTCTCCTTGTTCAGAAGCTTCTTTTTCATCCTTTTTTTCTGCTGCGTCAGATAAATTGGGGGAAGCACTTGAAGATTCATTTCCTCCAGGAGTATTACTAGTACTTACTCCGTCCACATTTGGTTTTTCTTCCCCTAGAATTCTCAT", + "start" : 278165, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 278165, + "genome_id" : 0, + "start" : 278144, + "strand" : "+" + }, + "seq" : "AATATAGTACCAGAAAATGGAAGAATGTTAAAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t11" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 133491, + "genome_id" : 0, + "start" : 133463, + "strand" : "+" + }, + "seq" : "TTTTGGTTCAGTACTATCTCTTGCATTT" + }, + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 133701, + "genome_id" : 0, + "ref_seq" : "TTAGATTTTTTCCCTCCAGCAGGTGCACTAACTTTAGGTGTTTTAAATCTAGATGTATGTGGAACCCCATCTTTATTTGGTTTACCTCTATTTAATCTTTTACCAGCAGTAGAAACTACATTCTCTCGATTATCATTACCTACTTCAGTCTTTACAATTGTAGGAGGTGTTTTAACATGATTATCCCCTCCATGAGGAGTAACCCTTAAA", + "start" : 133491, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 133491, + "genome_id" : 0, + "start" : 133463, + "strand" : "+" + }, + "seq" : "CGACACCAAATATTCAAGAAGAACC" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t21" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 145343, + "genome_id" : 0, + "start" : 145315, + "strand" : "+" + }, + "seq" : "CAATCAACAAAAGCTGATGAATCATCAT" + }, + "gene_name" : "PF3D7_0603600", + "insert_location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 145501, + "genome_id" : 0, + "ref_seq" : "AATTTGAATAAAATTTATCATTCACAATATTATATTTTTGTTTCTTCTTTTTTCCCATAATATTATTATTTTGTTCACAATATATGTTCATGTGTCCCCTCTTTTTCTGTAAAATATTAAAATGTTTCTTACTATGCTTCTCTTCATTTTTAATAACA", + "start" : 145343, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 145343, + "genome_id" : 0, + "start" : 145315, + "strand" : "+" + }, + "seq" : "AAGGAAGGTAGAATATCAAATACAAGGGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t38" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1149415, + "genome_id" : 0, + "start" : 1149387, + "strand" : "+" + }, + "seq" : "TGGACATGTAGATATTTGACTAGTCGAA" + }, + "gene_name" : "PF3D7_0727000", + "insert_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1149585, + "genome_id" : 0, + "ref_seq" : "TAATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCCATTGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTATA", + "start" : 1149415, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1149415, + "genome_id" : 0, + "start" : 1149387, + "strand" : "+" + }, + "seq" : "TGTATACTCTCACATATTCCCTTCAGTG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t44" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958389, + "genome_id" : 0, + "start" : 958362, + "strand" : "+" + }, + "seq" : "TTTAGAACAAGTGAGTTCAGGAATTGG" + }, + "gene_name" : "PF3D7_0523000", + "insert_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958506, + "genome_id" : 0, + "ref_seq" : "TACGAAATTTATAACAATTTTTACATATGCCAGTTCCTTTTTAGGTTTATATATTTGGTCATTAATAAAAAATGCACGTTTGACTTTATGTATTACTTGCGTTTTTCCGTTAATTTA", + "start" : 958389, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958389, + "genome_id" : 0, + "start" : 958362, + "strand" : "+" + }, + "seq" : "TTTACTTTCTTATTACATATGACACCACAAACA" + }, + "target_attributes" : + [ + "Included", + "DrugResistance" + ], + "target_name" : "t35" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2481106, + "genome_id" : 0, + "start" : 2481079, + "strand" : "+" + }, + "seq" : "AGAAGATAAGCAATTATGGCAAAAGGT" + }, + "gene_name" : "PF3D7_1361800", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2481288, + "genome_id" : 0, + "ref_seq" : "GCAACTTACTTTAGAAGCCATGAATTCGGCCGATGATCCATTGGAAGCATTTAAAAATACTTTATTAATATTTGATTTTAATTTATCTGAATTTGATAAGGATCCATATATAAATGGTGTGCATGATTTAGCATCTAATATAAAGGATTGTTTAAGAAAAGGAGGTCACAGTAAAATATATT", + "start" : 2481106, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2481106, + "genome_id" : 0, + "start" : 2481079, + "strand" : "+" + }, + "seq" : "TCCATTTAAATAATAACCTTTGATCACTTTGAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t87" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 850816, + "genome_id" : 0, + "start" : 850788, + "strand" : "+" + }, + "seq" : "CCATTTTTATCTACACGTACTACATGCA" + }, + "gene_name" : "PF3D7_0320400", + "insert_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 850989, + "genome_id" : 0, + "ref_seq" : "TCATATTCGTTTCAGCGTTTATAGAGCGAATATTATCGATTATGTCTATATTCCCTAAAATATGTACATAATAATCTCCATTTAATAATGTTACTTTCTTAAGAATATTTTTGTATATGACATCAAAGATATTACGAGTTAACAATACATCTACATTTCCGTCTATTATATAT", + "start" : 850816, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 850816, + "genome_id" : 0, + "start" : 850788, + "strand" : "+" + }, + "seq" : "AAATGTCTCTAAGAGTTACAGGAACAGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t19" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958059, + "genome_id" : 0, + "start" : 958027, + "strand" : "+" + }, + "seq" : "AAATGTTTACCTGCACAACATAGAAAATTATT" + }, + "gene_name" : "PF3D7_0523000", + "insert_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958221, + "genome_id" : 0, + "ref_seq" : "ATTTATATCATTTGTATGTGCTGTATTATCAGGAGGAACATTACCTTTTTTTATATCTGTGTTTGGTGTAATATTAAAGAACATGAATTTAGGTGATGATATTAATCCTATAATATTATCATTAGTATCTATAGGTTTAGTACAATTTATATTATCAATGAT", + "start" : 958059, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958059, + "genome_id" : 0, + "start" : 958027, + "strand" : "+" + }, + "seq" : "TTTGATGTAATTACATCCATACAATAACTTGAT" + }, + "target_attributes" : + [ + "Included", + "DrugResistance" + ], + "target_name" : "t34" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1992289, + "genome_id" : 0, + "start" : 1992261, + "strand" : "+" + }, + "seq" : "TTTTACTTTTGCTACCATCAGGCATAAT" + }, + "gene_name" : "PF3D7_1448500", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1992426, + "genome_id" : 0, + "ref_seq" : "ATAAACACCAGTACCATTTTTTTCTGATAAATTAATATTTTTTTGTATAACATCATATTTATCCCTTTTCGTGGTAAGTGCAGTATCCTGTTTTATTATTATATTATCGAATTCATCATGGTGTATATTTCTTTCAT", + "start" : 1992289, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1992289, + "genome_id" : 0, + "start" : 1992261, + "strand" : "+" + }, + "seq" : "ATCTTATTATGAAAGCTGTACATCCGATTTTA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t97" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1406405, + "genome_id" : 0, + "start" : 1406375, + "strand" : "+" + }, + "seq" : "CAGATTATCATAGTGTTGTGGATGAAGATT" + }, + "gene_name" : "PF3D7_0935600", + "insert_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1406541, + "genome_id" : 0, + "ref_seq" : "TAATTAATTTTAATGATGATGTTACTTTAGAAACACAATCCATGATAGCACACGGAGGGTCTTTGTCAGAAATAGAAGAAACTGGAGATTTATCTTCAGATGTTGATAGATTACATTCATCAATCGAAACTACTCC", + "start" : 1406405, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1406405, + "genome_id" : 0, + "start" : 1406375, + "strand" : "+" + }, + "seq" : "ATCACCTCGTATATATACAACATCATCTCTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t58" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1037634, + "genome_id" : 0, + "start" : 1037602, + "strand" : "+" + }, + "seq" : "ATTGAAGTACAATATGAAATCGATCTTGATAA" + }, + "gene_name" : "PF3D7_0422500", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1037844, + "genome_id" : 0, + "ref_seq" : "ATCTTATAAAGTTAATGAAATAGCTCAACTTAATTTAACCATAGAAAGAGATTTAACAGATGATGCTGTGATTTTTGCACACTCACTTTATTTACCATTTGAAAAAGAAGAAATGTGGTGGATCGTTATCGGAATTAAAAAAATGAACTTACTTTTATCTATCAAAAAATTATCTTTATTGAAAAGTGTCAATAATATAAAAATTAATTT", + "start" : 1037634, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1037634, + "genome_id" : 0, + "start" : 1037602, + "strand" : "+" + }, + "seq" : "GTATTTGGTTTGTCAGGCAATTCG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t28" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 1237431, + "genome_id" : 0, + "start" : 1237407, + "strand" : "+" + }, + "seq" : "CGAATGCTTGTGTGATCAATGAAA" + }, + "gene_name" : "PF3D7_1230000", + "insert_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 1237603, + "genome_id" : 0, + "ref_seq" : "AGTATGAACACAAAACCGAAAGAGAGTTTAAAAAAAGATTCGATTTTAATGAAGGAAGAAATAACATAATAAATGTGTCAAATGTAAAGAAAACATGTAATATAGTTAAAAATGATTTAAAGGAATCTAACGAGATAAAAACTAATATAAACACAAGTTCTTATAATTTATA", + "start" : 1237431, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 1237431, + "genome_id" : 0, + "start" : 1237407, + "strand" : "+" + }, + "seq" : "ACCTCTTTCAAAACATTCTCTTTTATTAATACA" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t76" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1128489, + "genome_id" : 0, + "start" : 1128461, + "strand" : "+" + }, + "seq" : "CTGTCGCAAAAGAAGGTTTTGATAATAT" + }, + "gene_name" : "PF3D7_0424900", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1128673, + "genome_id" : 0, + "ref_seq" : "ATTGAAAGAGTTAAAGGGAAAAATACAAAATTATTTAGATAATGATATTCAATTGAAAAATGGAAAACTCCTATATAAGGATACATGGGATAGAATTGTTTTGAAATTTTGTAGAACTGTAGCAATAGAAGAGGCAGAATACACTAGAAAATTTTATAGCTTAATTAATGATAAACATACAATT", + "start" : 1128489, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1128489, + "genome_id" : 0, + "start" : 1128461, + "strand" : "+" + }, + "seq" : "ATGAATGAATAAATCAATTTTACCACGTCATT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t32" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 39953, + "genome_id" : 0, + "start" : 39920, + "strand" : "+" + }, + "seq" : "CCAACTATATCTGTTCCATAAATGGTTATATTT" + }, + "gene_name" : "PF3D7_1401100", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 40137, + "genome_id" : 0, + "ref_seq" : "ACATAGAAATATGTGCGAAAATTGGGAAAAAAATAAATAACAGGAATTGTTATATAAATTGAATCAAGAATGGCACAAAGAAAATAATACTGGTGACTTTCACACTAGTGATATCACACACAATAGTGGTATTACATACAGTAGTGGTAACATACCTAGTGAAAGTAATAGTAGTTATATCCAA", + "start" : 39953, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 39953, + "genome_id" : 0, + "start" : 39920, + "strand" : "+" + }, + "seq" : "ATTTATTTGGATTGAGATCTTAATGTTCAAAGT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t89" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1018953, + "genome_id" : 0, + "start" : 1018920, + "strand" : "+" + }, + "seq" : "GCTATACTACTACTTATGTTACTTATACCACAT" + }, + "gene_name" : "PF3D7_1126100", + "insert_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1019085, + "genome_id" : 0, + "ref_seq" : "CTAGTGACTGTACATTTTTCATCTAATGTTCTATAGGATAAAGAATCTGAAGGACAATGCATATCATTACAAAAATAGCATGCACCTTTAAAATATAAATAAGAATGTCTTAACACAACAAAGGAATCAAAA", + "start" : 1018953, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1018953, + "genome_id" : 0, + "start" : 1018920, + "strand" : "+" + }, + "seq" : "CTCCTTTAGGTATTACGGTAGCAATAAG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t67" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 221363, + "genome_id" : 0, + "start" : 221330, + "strand" : "+" + }, + "seq" : "GGAACAAGAAGGATAATACCATTATTAATCCTA" + }, + "gene_name" : "PF3D7_0304600", + "insert_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 221495, + "genome_id" : 0, + "ref_seq" : "TTGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTGCATAATCTAATTCGTCTTTAGGTTTATTAGCAGAGCCAGGCTTTATTCTAACTTGAATAC", + "start" : 221363, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 221363, + "genome_id" : 0, + "start" : 221330, + "strand" : "+" + }, + "seq" : "CCCATGTAGTGTAACTTGTGGAAATG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t16" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748533, + "genome_id" : 0, + "start" : 748500, + "strand" : "+" + }, + "seq" : "AGATGTTTATATCATTAACAAAGTTGAAGATCT" + }, + "gene_name" : "PF3D7_0417200", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748696, + "genome_id" : 0, + "ref_seq" : "AATAGTTTTACTTGGGAAATTAAATTACTATAAATGTTTTATTATAGGAGGTTCCGTTGTTTATCAAGAATTTTTAGAAAAGAAATTAATAAAAAAAATATATTTTACTAGAATAAATAGTACATATGAATGTGATGTATTTTTTCCAGAAATAAATGAAAAT", + "start" : 748533, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748533, + "genome_id" : 0, + "start" : 748500, + "strand" : "+" + }, + "seq" : "ACATCGCTAACAGAAATAATTTGATACTC" + }, + "target_attributes" : + [ + "Included", + "DrugResistance" + ], + "target_name" : "t26" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 166035, + "genome_id" : 0, + "start" : 166002, + "strand" : "+" + }, + "seq" : "AGGATATGTTCTTTTTAAAGTTCTCTTCATTTT" + }, + "gene_name" : "PF3D7_0703900", + "insert_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 166167, + "genome_id" : 0, + "ref_seq" : "CTTTTATTTGAACTTTTTTATTTTCTTCATTATCAATATAAAAACAACAATCTTTAAATTTATGAAATAACACCCAACTTAATGTATAAAATATAATTTCTATAAAATCAAAATTAATGTAATAACCTAATT", + "start" : 166035, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 166035, + "genome_id" : 0, + "start" : 166002, + "strand" : "+" + }, + "seq" : "CGTTAAATGTAGAAAAGACGAAATCATCCA" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t41" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1376185, + "genome_id" : 0, + "start" : 1376159, + "strand" : "+" + }, + "seq" : "CTGCAAATTGAGCCATAGAAAAATGA" + }, + "gene_name" : "PF3D7_1135100", + "insert_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1376372, + "genome_id" : 0, + "ref_seq" : "TTCTCATTCCTTTGAAAATATGAACTATTCAACTCATCAAGTTTTTCATATGTTATTTCATAACTGCCATCATCTGAATCCTCTTCATCACTACTACTTAAAGAATGCTCTTCTACAGTTATATCTTCATAATGATTATTTTTAGGAAAATATTCTTCAGATCTTTCTATAAATTCTGTTCCACTAC", + "start" : 1376185, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1376185, + "genome_id" : 0, + "start" : 1376159, + "strand" : "+" + }, + "seq" : "CGATAACACTAGATGTAAGATATGCATCAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t68" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1113450, + "genome_id" : 0, + "start" : 1113422, + "strand" : "+" + }, + "seq" : "GATTCTGCATGCAGTAATGAATCTATTG" + }, + "gene_name" : "PF3D7_0424600", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1113604, + "genome_id" : 0, + "ref_seq" : "AAATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACAACTATTCAATTTGTTTGTATAAGTTTTAGGTCTTATTATTCTTTTACGTTTTA", + "start" : 1113450, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1113450, + "genome_id" : 0, + "start" : 1113422, + "strand" : "+" + }, + "seq" : "CGTAGCATGCTCAGATATTATGATGATT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t31" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 495971, + "genome_id" : 0, + "start" : 495941, + "strand" : "+" + }, + "seq" : "GCCACCAAAATATTATATACCACAAGACAA" + }, + "gene_name" : "PF3D7_0113100", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 496143, + "genome_id" : 0, + "ref_seq" : "TGAAAGTAGCGAATACCCTGTAGAAATTGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTGACTAAGCCTGATGTTACTGCACTACCTGAAGAATTACCATTAACGAGCTATAAAGTAACACCTACTTCTATTAATGTATTGCATAAAGAGGGCCCCACTTTAAAA", + "start" : 495971, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 495971, + "genome_id" : 0, + "start" : 495941, + "strand" : "+" + }, + "seq" : "AAGGAAAATCTTTGGTGGGAAAAATAGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t4" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 377095, + "genome_id" : 0, + "start" : 377062, + "strand" : "+" + }, + "seq" : "AAACAAATAGCATTCGATAAATTTGAAAATTTC" + }, + "gene_name" : "PF3D7_1009200", + "insert_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 377209, + "genome_id" : 0, + "ref_seq" : "AACCAAAAAATGATACCTGTACGTTTTTCTCCAGGAGAAACAAAAAAATTAGAAAGGATTCTCAAAAAAGTAGACGACTTTTTCTGTGCCAATATTAAAGCTCAATATACTTGC", + "start" : 377095, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 377095, + "genome_id" : 0, + "start" : 377062, + "strand" : "+" + }, + "seq" : "CTTCATCTATATAGTCCCCGATGAATGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t60" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 181557, + "genome_id" : 0, + "start" : 181524, + "strand" : "+" + }, + "seq" : "TCTATTAGCTTTTTCAAACCTTTCATTATTGTT" + }, + "gene_name" : "PF3D7_0104100", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 181673, + "genome_id" : 0, + "ref_seq" : "TTCATTCTTTTTTTAACGAAAACTATTCATCTCAAAAATATAAGATATTTTATATGACGAATGCCATTGTATTTTTTGTTACGTAAAACCTGACTTCTTCAAGGAAAACACATGCG", + "start" : 181557, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 181557, + "genome_id" : 0, + "start" : 181524, + "strand" : "+" + }, + "seq" : "AGCTTAGGCAAAAATTGGTGAAAATG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t3" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 992371, + "genome_id" : 0, + "start" : 992338, + "strand" : "+" + }, + "seq" : "TGCCTATCATTAATGGAAAATATCCTCATTATA" + }, + "gene_name" : "PF3D7_1023700", + "insert_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 992544, + "genome_id" : 0, + "ref_seq" : "TTTTTAAAAAAAAAAATTATGATATAAAATCTTCAATTAATAAAAGATCTATCCAGTTCTTTAAAGACACTAATATAGATCATTATATAGCATATGAATATTATAAGGAGGACCGTACGGAATTTATATTAACTATTATGAATGAAAAAAATATTACTCATCAAGAAACTCAA", + "start" : 992371, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 992371, + "genome_id" : 0, + "start" : 992338, + "strand" : "+" + }, + "seq" : "TCCCTTTCAACTTTTTCATTTCAAGACT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t61" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 407379, + "genome_id" : 0, + "start" : 407346, + "strand" : "+" + }, + "seq" : "TCGTCTTTCTGTTCATTATCCATATAATCTTTT" + }, + "gene_name" : "PF3D7_1410300", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 407571, + "genome_id" : 0, + "ref_seq" : "TCTCCTTCCTTTTCATTCTTTACTTTATTTCTATTAATACACAACTCTCCTTGAGTTAAGAGATTTACGATATTATCAATATTGTTTTCTTTCATATACTTCAACTTTTTACTATTCATTTTTAAAAGATAATTAACCAAGTTACTCATGTTTGTATTAGATGGTATGTTCCCAATTTTTTCGTCTTTTCTT", + "start" : 407379, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 407379, + "genome_id" : 0, + "start" : 407346, + "strand" : "+" + }, + "seq" : "TGAACTCTTTAAATTATCCTTTTTGAATATCCA" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t93" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1102389, + "genome_id" : 0, + "start" : 1102362, + "strand" : "+" + }, + "seq" : "CGTAGAGGTGTTGATGTTAATATGGAG" + }, + "gene_name" : "PF3D7_0424400", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1102578, + "genome_id" : 0, + "ref_seq" : "GAAGAAATAAATAAAATAATTTATACAAACGAATTTAATAATTATGAAGATAAAATATATGAAGATGTCAAATATATTAAAGAACAGGAAAATGAAATGTACTTGAGAGATGGAATTGAAGAGTTACATATGGATGAACCAAGTGGGGATGTATATTTTGATGATCAAGATGATTATATATTTTTAGAT", + "start" : 1102389, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1102389, + "genome_id" : 0, + "start" : 1102362, + "strand" : "+" + }, + "seq" : "CATCCAAACATACATCCTCTTTTTGTTC" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t30" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2114975, + "genome_id" : 0, + "start" : 2114942, + "strand" : "+" + }, + "seq" : "TGTATCTATAGTCGATTTTGTTATTCTAAGCAT" + }, + "gene_name" : "PF3D7_1352900", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2115142, + "genome_id" : 0, + "ref_seq" : "ATCATTAAGTAAAAAATTTACGGTATCGACATTAACAGTGTAATAATTTCTTCCTAAATTTAAATGTTCTATATAATTCAAATTTAATACGGTATTTAACCTTTCTTCAAGTATTATCATTGCATTAATTTGAAACATAAGTAAAAAATTATTAGCACTTCTAAAAT", + "start" : 2114975, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2114975, + "genome_id" : 0, + "start" : 2114942, + "strand" : "+" + }, + "seq" : "ACATTTTATTGTTGTTAGAATACCTCTAGTTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t84" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 63166, + "genome_id" : 0, + "start" : 63135, + "strand" : "+" + }, + "seq" : "ACATTCTATTAAAAACTTTGGGTACTCCTAA" + }, + "gene_name" : "PF3D7_1200700", + "insert_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 63280, + "genome_id" : 0, + "ref_seq" : "TATAATTTCACCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGCAATGAAAAAAACAACCCTTTCATA", + "start" : 63166, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 63166, + "genome_id" : 0, + "start" : 63135, + "strand" : "+" + }, + "seq" : "ACACATTTATCTTATTTACCCGTATCTCATATA" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t72" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 141778, + "genome_id" : 0, + "start" : 141751, + "strand" : "+" + }, + "seq" : "GATACACGTGATGAATACCATATAGCC" + }, + "gene_name" : "PF3D7_0402300", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 141945, + "genome_id" : 0, + "ref_seq" : "CTTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCAAATCTGCACACAAAGAAATTAAAAAAGAATCAGAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAATT", + "start" : 141778, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 141778, + "genome_id" : 0, + "start" : 141751, + "strand" : "+" + }, + "seq" : "AGATCAAGCATTTGTCTGTCTATATCTCTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t22" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1399544, + "genome_id" : 0, + "start" : 1399515, + "strand" : "+" + }, + "seq" : "GGTCAAACTCATTCTGAATTAAATCCTGA" + }, + "gene_name" : "PF3D7_1035300", + "insert_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1399711, + "genome_id" : 0, + "ref_seq" : "AACATCAGAACATAGTAAAGATTTAAATAATAATGATTCAAAAAATGAATCTAGTGATATTATTTCAGTAAATAATAAATCAAATAAAGTACAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACAA", + "start" : 1399544, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1399544, + "genome_id" : 0, + "start" : 1399515, + "strand" : "+" + }, + "seq" : "GTTTTTGATTAGGAAAAGGTTCTGTTGAAA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t63" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748230, + "genome_id" : 0, + "start" : 748200, + "strand" : "+" + }, + "seq" : "AGGTCTAGGAAATAAAGGAGTATTACCATG" + }, + "gene_name" : "PF3D7_0417200", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748436, + "genome_id" : 0, + "ref_seq" : "GAAATGTAATTCCCTAGATATGAAATATTTTTGTGCAGTTACAACATATGTGAATGAATCAAAATATGAAAAATTGAAATATAAGAGATGTAAATATTTAAACAAAGAAACTGTGGATAATGTAAATGATATGCCTAATTCTAAAAAATTACAAAATGTTGTAGTTATGGGAAGAACAAGCTGGGAAAGCATTCCAAAAAAATTTA", + "start" : 748230, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748230, + "genome_id" : 0, + "start" : 748200, + "strand" : "+" + }, + "seq" : "ACAATATAACATTTATCCTATTGCTTAAAGGTT" + }, + "target_attributes" : + [ + "Included", + "DrugResistance" + ], + "target_name" : "t25" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 85440, + "genome_id" : 0, + "start" : 85407, + "strand" : "+" + }, + "seq" : "ACCCATAGAAATGTTAAATGATATTTTTCTTCT" + }, + "gene_name" : "PF3D7_0301400", + "insert_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 85646, + "genome_id" : 0, + "ref_seq" : "AACTTTTTAACACTATCATTATAATTATGTCTTTTATTTTCATATTTTTCTTTATAATAATTTATATCCTTTAATTTTTCTTTCATCAAATTTAACCATTTATCATTTAAATTCTCTTTTTCCACAGCTCCAGCATTTTTATTTATATCATCTACAACTACATCTTCCTTCACATAATTATTTATATAAAAATTATTATCATCTAA", + "start" : 85440, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 85440, + "genome_id" : 0, + "start" : 85407, + "strand" : "+" + }, + "seq" : "GAAGAAGTATTAAATGAAGAATTTTCAGATGCT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t14" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 109912, + "genome_id" : 0, + "start" : 109879, + "strand" : "+" + }, + "seq" : "TTTTAAAACTGGCAAATTATTTATTTCTGTCAT" + }, + "gene_name" : "PF3D7_0401900", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 110087, + "genome_id" : 0, + "ref_seq" : "AATATTTGTATATATTCTAGTAAACACTTTAGGTACACCTGCAAGTACCTCAACATCTGAATTATATAAATCTTTAGAAAAACAACTAATATCCTTACTCGATATATTTATTTTTATACCAAGAATAACAGCCATATAAACCAAAACTCTCTCAAATACATGTGATACAGGTAAA", + "start" : 109912, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 109912, + "genome_id" : 0, + "start" : 109879, + "strand" : "+" + }, + "seq" : "CATGAAACCGAAAACCCATTTTTCTTA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t20" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 729975, + "genome_id" : 0, + "start" : 729943, + "strand" : "+" + }, + "seq" : "AATAAGAAATATGTCTTACAAGGAGATGTTTT" + }, + "gene_name" : "PF3D7_0716700", + "insert_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 730088, + "genome_id" : 0, + "ref_seq" : "TTTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATGTTACGATATAAAAAAATATAGATGTTCATTATTGAAG", + "start" : 729975, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 729975, + "genome_id" : 0, + "start" : 729943, + "strand" : "+" + }, + "seq" : "AAACATTATGTAGTCAACATATGAAGGAAA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t43" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 534941, + "genome_id" : 0, + "start" : 534908, + "strand" : "+" + }, + "seq" : "TGTATGTGTGTTGATTGTAATTATAAGAATTGT" + }, + "gene_name" : "PF3D7_0113800", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 535110, + "genome_id" : 0, + "ref_seq" : "AATACTCCGTCAGATATTCAAAATGAATGTATTTGTTCAAAAATAAATGAAGATAGAAATAATGATATGATAAACATATCTGAAATATATTATCGTTTCATTAAATTTATAACAATGATTGAAATATATTTGTGTGTAATAGAGGAAATTAAAAGGGAAGAATGGGAAA", + "start" : 534941, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 534941, + "genome_id" : 0, + "start" : 534908, + "strand" : "+" + }, + "seq" : "CTACAAAAATTATGAAAAAGTTTGGTTCCTTTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t9" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 685601, + "genome_id" : 0, + "start" : 685583, + "strand" : "+" + }, + "seq" : "CACGCGAACCAAACAACG" + }, + "gene_name" : "PF3D7_0916400", + "insert_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 685792, + "genome_id" : 0, + "ref_seq" : "ACAAAGGAACAAGATAATTTTTTCCATTTTTATAAAAGTAATATATATGATATGGAAAATAGAACCTGTAATAATAATATATTACAATATTGTGTTATGAATAATAAATCATATTTATTTCATAATATATCATCCAAAAAAAATATATATATAAAAAAAAAGAATCATCAGTTTTCTTTATTCATATATTC", + "start" : 685601, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 685601, + "genome_id" : 0, + "start" : 685583, + "strand" : "+" + }, + "seq" : "GGGCGAAATTCTATGAATGTATTATTAATAGAA" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t56" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 470492, + "genome_id" : 0, + "start" : 470459, + "strand" : "+" + }, + "seq" : "TGAACATGAAGAATATTGACATGAAACATTATA" + }, + "gene_name" : "PF3D7_0211700", + "insert_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 470676, + "genome_id" : 0, + "ref_seq" : "ATACACATAAGAAAAAAAAAATTTATTTATTCTTACAAAAAGAATATAAAAACAAAATTTTGGGATTTATAAATTTTTATAAACATATAACACACAAAATAAAAAAGAAACAAGAAAATGTTCATGATAAAATCACTTTTTTAAAATGTCTAAAGGAACTCTTTTTTGTCACACATACAAATAA", + "start" : 470492, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 470492, + "genome_id" : 0, + "start" : 470459, + "strand" : "+" + }, + "seq" : "GTATGTATTATACCCTCCATTTGATTATTCTCT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t12" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 145449, + "genome_id" : 0, + "start" : 145416, + "strand" : "+" + }, + "seq" : "TGTTCGATATGTTTAAATATATGATTCTCGAAA" + }, + "gene_name" : "PF3D7_0103300", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 145622, + "genome_id" : 0, + "ref_seq" : "AAACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGTATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATAAGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTAA", + "start" : 145449, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 145449, + "genome_id" : 0, + "start" : 145416, + "strand" : "+" + }, + "seq" : "CCAATATGTCAAGGTATATTAAAGTATGGTATC" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t1" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 339168, + "genome_id" : 0, + "start" : 339139, + "strand" : "+" + }, + "seq" : "TGAGATAATCCTCCTGGAATATTTGTCAT" + }, + "gene_name" : "PF3D7_0806300", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 339357, + "genome_id" : 0, + "ref_seq" : "ATCATTACTATTCTTTATCCATATATATGTTGTTATATCAGTTGCACCTGAGGGTGGATTCAAACCTCTTGCTTGTATAATATATGCACGTACTACTAAATTACGTGTTAATCTATATTCTCTTACTAAATCATCACATTTCTTTATCATTTCTTTTTTTAAATACATTGTCTTTTCATCATACACATT", + "start" : 339168, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 339168, + "genome_id" : 0, + "start" : 339139, + "strand" : "+" + }, + "seq" : "CTGAAGCGGTTGGATATTTGAAATATATATGT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t48" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1100656, + "genome_id" : 0, + "start" : 1100629, + "strand" : "+" + }, + "seq" : "CCCAAAACGGTTAATACTGAAGTTAGA" + }, + "gene_name" : "PF3D7_0424400", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1100831, + "genome_id" : 0, + "ref_seq" : "AATGTTCTAAGATCTGATGGAAAAATATCTGATCAAGGTTCTCAGAAAAGTCCTCCTAAGGAACTTTCTAATAAACAAATGACTCCTGCTCAACGTAAGAATGTGCCACATTTTGTTGAAAGAAGAGGCTATGGAAATAGTCATGTTAGGGGTAACGCACTTAAAAAAATTAGTA", + "start" : 1100656, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1100656, + "genome_id" : 0, + "start" : 1100629, + "strand" : "+" + }, + "seq" : "AGAAGAAGGACTTTTATAATTATCATCACCAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t29" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 179903, + "genome_id" : 0, + "start" : 179874, + "strand" : "+" + }, + "seq" : "AACAACAAGCTTTGTCGCTAAAATTAATT" + }, + "gene_name" : "PF3D7_0104100", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 180115, + "genome_id" : 0, + "ref_seq" : "CTTTCGATACAGGACATATAGATCATAATATAAACGAATATGAAAAACATTTTACAATTTTAAAAGAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGAAAATAATACATTTTTAAATAGAATAAGAACTGAACAAGTCAAAAAATCGTTATTAATAACAGGTATTATAAACGAAAATATT", + "start" : 179903, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 179903, + "genome_id" : 0, + "start" : 179874, + "strand" : "+" + }, + "seq" : "TCTGATACCTATAGCTTCCATATTTTCATATTT" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t2" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 120215, + "genome_id" : 0, + "start" : 120188, + "strand" : "+" + }, + "seq" : "GTCCTTATCACATCCTCCATTGTTTAC" + }, + "gene_name" : "PF3D7_1403200", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 120351, + "genome_id" : 0, + "ref_seq" : "CTTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTCTGGACAATTACAATATTCATATCCATGAGTATTCTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAAA", + "start" : 120215, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 120215, + "genome_id" : 0, + "start" : 120188, + "strand" : "+" + }, + "seq" : "ACAGAAAGAATGGTTTAGAAATGTACGAAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t90" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 534215, + "genome_id" : 0, + "start" : 534182, + "strand" : "+" + }, + "seq" : "TTCAGATGTGATAAATATATGTGACATTTGTAA" + }, + "gene_name" : "PF3D7_0113800", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 534368, + "genome_id" : 0, + "ref_seq" : "TGATAAAAAAAGAAAATGTAACAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAAAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTGT", + "start" : 534215, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 534215, + "genome_id" : 0, + "start" : 534182, + "strand" : "+" + }, + "seq" : "AAAAATATAAGAGATTCAAAGGGTCAGAC" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t8" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 336468, + "genome_id" : 0, + "start" : 336438, + "strand" : "+" + }, + "seq" : "AATACATGAATATGATTAACAACGAACCCA" + }, + "gene_name" : "PF3D7_0806200", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 336647, + "genome_id" : 0, + "ref_seq" : "TAAATTTACAGAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCCACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCACAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTAT", + "start" : 336468, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 336468, + "genome_id" : 0, + "start" : 336438, + "strand" : "+" + }, + "seq" : "ACTAAAAGGAAGACAAGCTGAAAACAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t47" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 102326, + "genome_id" : 0, + "start" : 102298, + "strand" : "+" + }, + "seq" : "ACTTGTCGCTATACCTTCATCTATTGAA" + }, + "gene_name" : "PF3D7_0801300", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 102500, + "genome_id" : 0, + "ref_seq" : "TTAATTTTCTCAAGTAACATATTTTTGTCTTGACTACTTTCATCTGTAAATGGAACGACTACTCTTTGCTTACCTGCAAAAAGGACAACTGACATATGAGCCTTATCCTTACTTACATTCGAATTAAAGACCATAGATTCTAAAAATGGTATAGTTCCTTTTAACCAATAATCC", + "start" : 102326, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 102326, + "genome_id" : 0, + "start" : 102298, + "strand" : "+" + }, + "seq" : "TGTTGAAGAGTCAAGTTTTGTTCAGAA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t46" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1437114, + "genome_id" : 0, + "start" : 1437081, + "strand" : "+" + }, + "seq" : "CATCATAATCATCTAATGATGTTAATCCTTGTA" + }, + "gene_name" : "PF3D7_0936300", + "insert_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1437303, + "genome_id" : 0, + "ref_seq" : "CTAAAACCTGACAGCTTTGTACAGTTATATTTACCCAATTAGAATGTTCAAACATATTTAAGTGTTGCCATTCTTCAAATAATTTTTTTTCATATTCAGTTTTTGGTTGGTTTTTAAATTCTTTTGATACTGTACCTTCTGCGGATGGTATAGGGAAGTTAAAAATTTTATTACGTACTTTGTTTGATT", + "start" : 1437114, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1437114, + "genome_id" : 0, + "start" : 1437081, + "strand" : "+" + }, + "seq" : "GCACCATCATTAAATTTAGAAGAAACCC" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t59" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 279663, + "genome_id" : 0, + "start" : 279635, + "strand" : "+" + }, + "seq" : "CGGATAAATGTTTAGTTATTAGCCAGGT" + }, + "gene_name" : "PF3D7_1407700", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 279786, + "genome_id" : 0, + "ref_seq" : "GAGTAATAGTGATTCATATAAGGTAAATTGTATTAATTTCTCTGAAGGATTTTGTTGCTGTCATCCAATAAATAATTTAGCACTATTATATGGAGAGTATCAACAAAATCAAGAATCAAAAAT", + "start" : 279663, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 279663, + "genome_id" : 0, + "start" : 279635, + "strand" : "+" + }, + "seq" : "CATTACTTATGGGAAGTTTCGGTAATTTCATA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t92" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1178894, + "genome_id" : 0, + "start" : 1178862, + "strand" : "+" + }, + "seq" : "GAACGTTGAGAAATTACCTTTAGAAGATTACT" + }, + "gene_name" : "PF3D7_0929400", + "insert_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1179078, + "genome_id" : 0, + "ref_seq" : "ACAAATTATCCTTAGCCCCAGATATGGTAAAGACATATCACTGTTATAAATTAGGAAAGCAAGCAGCTGAATTATTAGAATCTATCATTTTAAAGAAAAAGTTCGTAAGATTTAGAGTTACTGATGCTATTGATGTATATGATTTCTTTTATATAAAGAAAGTTTTATCCAGTCGTATTAAGAA", + "start" : 1178894, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1178894, + "genome_id" : 0, + "start" : 1178862, + "strand" : "+" + }, + "seq" : "GCTCTTTTGTCTTGTAAAAATTCATTATATTCT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t57" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 654002, + "genome_id" : 0, + "start" : 653972, + "strand" : "+" + }, + "seq" : "TCACCTAACGGTATATTTTTATCTCGTACA" + }, + "gene_name" : "PF3D7_0316200", + "insert_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 654175, + "genome_id" : 0, + "ref_seq" : "ATATTTTTATAATTTCCTTTCATCTTATTTTTTTCTTTATATTTTTTTTTTTCATATGTAAGATTTATATAATCACTTTCGCTTTTTCTAACCCTTTTGAACTTTTTAAATGTACTTCGTTCATTATTTCTAATTCTCGTAAACACAAGAATAAATATTTTGATATATCTTAT", + "start" : 654002, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 654002, + "genome_id" : 0, + "start" : 653972, + "strand" : "+" + }, + "seq" : "TTATGTATTTTTCAAAAATCGGCACGTTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t18" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 943258, + "genome_id" : 0, + "start" : 943227, + "strand" : "+" + }, + "seq" : "ACCCTACTTATACAAAGAGATAAAGAAGTAG" + }, + "gene_name" : "PF3D7_1223400", + "insert_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 943428, + "genome_id" : 0, + "ref_seq" : "AATCAACTATAATTAAAAATAGTGGAATTATTGAAAACTTTGGAGATATTGATTATATCTTTACGGATAAAACAGGAACACTAACAGAAAATGTCATGGTGCTTAAAGTTATACATATAGGTTTTGATGTTATACATGCAGAAAATGAAAAAAATTCCATACAAGGTAAT", + "start" : 943258, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 943258, + "genome_id" : 0, + "start" : 943227, + "strand" : "+" + }, + "seq" : "AATTCCCTTTTTGTTTGGTTTCCATATT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t75" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 802525, + "genome_id" : 0, + "start" : 802494, + "strand" : "+" + }, + "seq" : "AAGCATCTGAACATTAAAGTTCAAACAAATA" + }, + "gene_name" : "PF3D7_0418000", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 802713, + "genome_id" : 0, + "ref_seq" : "TAAATTATTATAGAAAGATAGAAGTTATTTTATATGAATGGTTATATTTTCATTATAATAATGTATATAACACCAAAGTAAAAAAACAAAAATTTATATTTACCCAACAAAAAAAAGACATATCAAAACATAACAAGTTATATCTTCAGTATGATCAAAATAAAAGAAACTCTGAAATAGAACATACA", + "start" : 802525, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 802525, + "genome_id" : 0, + "start" : 802494, + "strand" : "+" + }, + "seq" : "GCACATCGAATAATCTTCTTTGTGATT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t27" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 549993, + "genome_id" : 0, + "start" : 549962, + "strand" : "+" + }, + "seq" : "CATAAAAGAGGAAATCCACATACAATGGATA" + }, + "gene_name" : "PF3D7_0810800", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 550218, + "genome_id" : 0, + "ref_seq" : "AACTAACAAATTATGATAATCTAGTTTATGATATAAAAAATTATTTAGAACAAAGATTAAATTTTCTTGTATTAAATGGAATACCTCGTTATAGGATACTATTTGATATTGGATTAGGATTTGCGAAGAAACATGATCAATCTATTAAACTCTTACAAAATATACATGTATATGATGAGTATCCACTTTTTATTGGATATTCAAGAAAAAGATTTATTGCCCATT", + "start" : 549993, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 549993, + "genome_id" : 0, + "start" : 549962, + "strand" : "+" + }, + "seq" : "GTGTATTTATTACAACATTTTGATCATTCATGC" + }, + "target_attributes" : + [ + "Included", + "DrugResistance" + ], + "target_name" : "t49" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 618396, + "genome_id" : 0, + "start" : 618367, + "strand" : "+" + }, + "seq" : "GGGACACTACAGACAAAAATAAATGATCT" + }, + "gene_name" : "PF3D7_0315200", + "insert_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 618581, + "genome_id" : 0, + "ref_seq" : "AAAAAGAGATTATAGAAGTGGAAAGAAGACATATATAATACAAGCTCTACAATATGCATTAACATATTATAGCAAACTTTCAAATAGAAAGGAAGCACCTAAAGTAACCATGTTATTTACAGATGGAAATGATTCCTATGAATCAGAAAAGGGATTACAGGATATTGCATTATTATATAGAAAAG", + "start" : 618396, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 618396, + "genome_id" : 0, + "start" : 618367, + "strand" : "+" + }, + "seq" : "AGAAACTCCTACTACCAATAATTTGACATTTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t17" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 805822, + "genome_id" : 0, + "start" : 805795, + "strand" : "+" + }, + "seq" : "TTGGAAAATTTGAGAATCCTATGTGCT" + }, + "gene_name" : "PF3D7_0220100", + "insert_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 805942, + "genome_id" : 0, + "ref_seq" : "TTAATTATGAAGACAGTCTCACGACTTCATGTTATATTGATGAAAACAAATCCGATTCATCCTATGAAACTGAAGAAAATGTAAACTATAATAATAAAATGGGTAAACGCAAAAATTTAG", + "start" : 805822, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 805822, + "genome_id" : 0, + "start" : 805795, + "strand" : "+" + }, + "seq" : "TTCGATTTGCCTACAATTTGTGATTCTA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t13" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 544718, + "genome_id" : 0, + "start" : 544686, + "strand" : "+" + }, + "seq" : "AACCCAGATAATCATTTATTAAATACAGACAC" + }, + "gene_name" : "PF3D7_0412300", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 544861, + "genome_id" : 0, + "ref_seq" : "ATATATTTTACATAATAACAATCCTTCATGTAATGATTATAATTTAAATAATCTTTCATTTAATATAAATAAATATATTAATGAAGAAAAAGGCAAAAATAAAAAAACAAATCAACATATATCAGAACAATTTTTATTTCCTA", + "start" : 544718, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 544718, + "genome_id" : 0, + "start" : 544686, + "strand" : "+" + }, + "seq" : "CTGCAGCACACATTATAACTAAATGTG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t24" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 150105, + "genome_id" : 0, + "start" : 150075, + "strand" : "+" + }, + "seq" : "CCGAAAATAGAACTCCATATGTTCATTACC" + }, + "gene_name" : "PF3D7_1404300", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 150294, + "genome_id" : 0, + "ref_seq" : "ATAATAATAGTAATATAAAGAATTATTCAGCTGTAGATATATTCTCACCCAAAAAAACTGGAAAGGAATGTATTAAATGTCTCCCAGATAATTTTTGTGAATGCGAATGTAGTTGTAAAAATAAAACAGGTTTTTCAATGAAATATAGACATGCCAGTAAGGGATCTAAAGGATATAGTAAAAAAATGA", + "start" : 150105, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 150105, + "genome_id" : 0, + "start" : 150075, + "strand" : "+" + }, + "seq" : "GTCTGGAACGAGAAGATGTCTTTG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t91" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 109807, + "genome_id" : 0, + "start" : 109776, + "strand" : "+" + }, + "seq" : "CCACCATTTCTTCATTTTAATTTTGAATGGT" + }, + "gene_name" : "PF3D7_0202100", + "insert_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 109982, + "genome_id" : 0, + "ref_seq" : "AACTTATGTTCATGAGCTAATTTCCCACAAATACTCCATAACGAACTTTTCATTTTATTAAATTTATCTCTCAAAAGAGAATGACTATAATGCCATATTAAATACATATCTTTCCTTTCTAATTTTCCTGGTAATTCTATTATCATTCTTTCTAAATCTTCTTCTGTAACTTTTC", + "start" : 109807, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 109807, + "genome_id" : 0, + "start" : 109776, + "strand" : "+" + }, + "seq" : "ACCATTTGGATTAAAACCTTCAGATTTAAATA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t10" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3214351, + "genome_id" : 0, + "start" : 3214318, + "strand" : "+" + }, + "seq" : "TGTTAAAATATTTTCCAAAGAATTCAATTAGCG" + }, + "gene_name" : "PF3D7_1478000", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3214478, + "genome_id" : 0, + "ref_seq" : "ATCGTTTTGAATTGTTAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGAGTGATTTTGGAATAGCTACAATGAATGAAACCGAACATACTAGATCTTTTTATGGATT", + "start" : 3214351, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3214351, + "genome_id" : 0, + "start" : 3214318, + "strand" : "+" + }, + "seq" : "TCAATTGATGGTTGCCTTTCGATT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t100" + } + ], + "targeted_genomes" : + [ + { + "chromosomes" : + [ + "Pf3D7_01_v3", + "Pf3D7_02_v3", + "Pf3D7_03_v3", + "Pf3D7_04_v3", + "Pf3D7_05_v3", + "Pf3D7_06_v3", + "Pf3D7_07_v3", + "Pf3D7_08_v3", + "Pf3D7_09_v3", + "Pf3D7_10_v3", + "Pf3D7_11_v3", + "Pf3D7_12_v3", + "Pf3D7_13_v3", + "Pf3D7_14_v3", + "Pf3D7_API_v3", + "Pf3D7_MIT_v3" + ], + "genome_version" : "2020-09-01", + "gff_url" : "https://plasmodb.org/common/downloads/release-65/Pfalciparum3D7/gff/data/PlasmoDB-65_Pfalciparum3D7.gff", + "name" : "3D7", + "taxon_id" : + [ + 5833 + ], + "url" : "https://plasmodb.org/common/downloads/release-65/Pfalciparum3D7/fasta/data/PlasmoDB-65_Pfalciparum3D7_Genome.fasta" + } + ] +} diff --git a/tests/data/minimum_pmo_example_2_for_spec_dup_testing.json b/tests/data/minimum_pmo_example_2_for_spec_dup_testing.json new file mode 100644 index 0000000..090cdbd --- /dev/null +++ b/tests/data/minimum_pmo_example_2_for_spec_dup_testing.json @@ -0,0 +1,8495 @@ +{ + "bioinformatics_methods_info" : + [ + { + "methods" : + [ + { + "additional_argument" : + [ + "--bamExtractTrimToRegion", + "--bed /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_withPrimers.bed", + "--genomeDir /tank/data/genomes/plasmodium/genomes/pf/genomes/", + "--primaryGenome Pf3D7", + "--bam bams/{SAMPLE}.sorted.bam" + ], + "program" : "PathWeaver BamExtractPathwaysFromRegion", + "program_description" : "Extract reads from a bam file for a specific genomic locatioon and then assembles local haplotypes for that region", + "program_version" : "1.0.0-dev" + }, + { + "additional_argument" : + [ + "--overWriteDir", + "--fracCutOff 0.005", + "--dout popClusteringTrimmedParagon", + "--replicateMinTotalReadCutOff 10", + "--clusterCutOff 5", + "--pat _heome1", + "--numThreads 10", + "--groupingsFile /tank/data/plasmodium/falciparum/pfdata/metadata/meta.tab.txt", + "--genome2bit /tank/data/genomes/plasmodium/genomes/pf/genomes/Pf3D7.2bit", + "--trimBedFnp /tank/data/plasmodium/falciparum/beds/targeted_panels/heome1/heome1_Pf3D7_inserts_trimmed1.bed" + ], + "program" : "PathWeaver runProcessClustersOnRecon", + "program_description" : "Compare across samples for each target to create population level identifiers and do post artifact cleanup", + "program_version" : "1.0.0-dev" + } + ] + } + ], + "bioinformatics_run_info" : + [ + { + "bioinformatics_methods_id" : 0, + "bioinformatics_run_name" : "PathWeaver-Heome1", + "run_date" : "2024-09-03" + } + ], + "detected_microhaplotypes" : + [ + { + "bioinformatics_run_id" : 0, + "library_samples" : + [ + { + "library_sample_id" : 1, + "target_results" : + [ + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 289 + } + ], + "mhaps_target_id" : 2 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 333 + } + ], + "mhaps_target_id" : 47 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 480 + } + ], + "mhaps_target_id" : 99 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 427 + } + ], + "mhaps_target_id" : 76 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 181 + } + ], + "mhaps_target_id" : 98 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 352 + } + ], + "mhaps_target_id" : 21 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 333 + } + ], + "mhaps_target_id" : 74 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 302 + } + ], + "mhaps_target_id" : 97 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 299 + } + ], + "mhaps_target_id" : 96 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 230 + } + ], + "mhaps_target_id" : 95 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 268 + } + ], + "mhaps_target_id" : 94 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 301 + } + ], + "mhaps_target_id" : 30 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 271 + } + ], + "mhaps_target_id" : 46 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 260 + } + ], + "mhaps_target_id" : 87 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 358 + } + ], + "mhaps_target_id" : 85 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 329 + } + ], + "mhaps_target_id" : 84 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 305 + } + ], + "mhaps_target_id" : 80 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 208 + } + ], + "mhaps_target_id" : 79 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 360 + } + ], + "mhaps_target_id" : 81 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 311 + } + ], + "mhaps_target_id" : 82 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 377 + } + ], + "mhaps_target_id" : 72 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 446 + } + ], + "mhaps_target_id" : 16 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 361 + } + ], + "mhaps_target_id" : 71 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 324 + } + ], + "mhaps_target_id" : 77 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 282 + } + ], + "mhaps_target_id" : 69 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 208 + } + ], + "mhaps_target_id" : 66 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 408 + } + ], + "mhaps_target_id" : 63 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 286 + } + ], + "mhaps_target_id" : 68 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 363 + } + ], + "mhaps_target_id" : 62 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 387 + } + ], + "mhaps_target_id" : 61 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 362 + } + ], + "mhaps_target_id" : 51 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 316 + } + ], + "mhaps_target_id" : 50 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 356 + } + ], + "mhaps_target_id" : 31 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 374 + } + ], + "mhaps_target_id" : 49 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 317 + } + ], + "mhaps_target_id" : 35 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 288 + } + ], + "mhaps_target_id" : 48 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 354 + } + ], + "mhaps_target_id" : 43 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 441 + } + ], + "mhaps_target_id" : 33 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 385 + } + ], + "mhaps_target_id" : 67 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 156 + } + ], + "mhaps_target_id" : 37 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 391 + } + ], + "mhaps_target_id" : 3 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 469 + } + ], + "mhaps_target_id" : 14 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 276 + } + ], + "mhaps_target_id" : 32 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 441 + } + ], + "mhaps_target_id" : 86 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 395 + } + ], + "mhaps_target_id" : 11 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 305 + } + ], + "mhaps_target_id" : 28 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 346 + } + ], + "mhaps_target_id" : 26 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 326 + } + ], + "mhaps_target_id" : 59 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 382 + } + ], + "mhaps_target_id" : 27 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 433 + } + ], + "mhaps_target_id" : 88 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 310 + } + ], + "mhaps_target_id" : 64 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 333 + } + ], + "mhaps_target_id" : 8 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 350 + } + ], + "mhaps_target_id" : 19 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 257 + } + ], + "mhaps_target_id" : 36 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 235 + } + ], + "mhaps_target_id" : 65 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 348 + } + ], + "mhaps_target_id" : 25 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 335 + } + ], + "mhaps_target_id" : 58 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 262 + } + ], + "mhaps_target_id" : 73 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 385 + } + ], + "mhaps_target_id" : 20 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 289 + } + ], + "mhaps_target_id" : 93 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 366 + } + ], + "mhaps_target_id" : 24 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 270 + } + ], + "mhaps_target_id" : 83 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 346 + } + ], + "mhaps_target_id" : 70 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 293 + } + ], + "mhaps_target_id" : 23 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 356 + } + ], + "mhaps_target_id" : 57 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 316 + } + ], + "mhaps_target_id" : 17 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 358 + } + ], + "mhaps_target_id" : 15 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 366 + } + ], + "mhaps_target_id" : 60 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 420 + } + ], + "mhaps_target_id" : 18 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 341 + } + ], + "mhaps_target_id" : 6 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 392 + } + ], + "mhaps_target_id" : 13 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 327 + } + ], + "mhaps_target_id" : 9 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 351 + } + ], + "mhaps_target_id" : 53 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 287 + } + ], + "mhaps_target_id" : 92 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 420 + } + ], + "mhaps_target_id" : 12 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 405 + } + ], + "mhaps_target_id" : 22 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 399 + } + ], + "mhaps_target_id" : 45 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 395 + } + ], + "mhaps_target_id" : 75 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 370 + } + ], + "mhaps_target_id" : 7 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 418 + } + ], + "mhaps_target_id" : 40 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 261 + } + ], + "mhaps_target_id" : 5 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 439 + } + ], + "mhaps_target_id" : 41 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 251 + } + ], + "mhaps_target_id" : 52 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 308 + } + ], + "mhaps_target_id" : 38 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 398 + } + ], + "mhaps_target_id" : 89 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 300 + } + ], + "mhaps_target_id" : 4 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 329 + } + ], + "mhaps_target_id" : 0 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 250 + } + ], + "mhaps_target_id" : 90 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 340 + } + ], + "mhaps_target_id" : 78 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 303 + } + ], + "mhaps_target_id" : 42 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 389 + } + ], + "mhaps_target_id" : 34 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 302 + } + ], + "mhaps_target_id" : 91 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 338 + } + ], + "mhaps_target_id" : 1 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 357 + } + ], + "mhaps_target_id" : 39 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 300 + } + ], + "mhaps_target_id" : 29 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 293 + } + ], + "mhaps_target_id" : 44 + }, + { + "mhaps" : + [ + { + "mhap_id" : 2, + "reads" : 358 + } + ], + "mhaps_target_id" : 56 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 290 + } + ], + "mhaps_target_id" : 10 + } + ] + }, + { + "library_sample_id" : 0, + "target_results" : + [ + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1191 + } + ], + "mhaps_target_id" : 2 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1129 + } + ], + "mhaps_target_id" : 54 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 920 + }, + { + "mhap_id" : 0, + "reads" : 291 + } + ], + "mhaps_target_id" : 21 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1039 + } + ], + "mhaps_target_id" : 74 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1151 + } + ], + "mhaps_target_id" : 97 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1177 + } + ], + "mhaps_target_id" : 96 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1221 + } + ], + "mhaps_target_id" : 95 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1076 + } + ], + "mhaps_target_id" : 94 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1090 + } + ], + "mhaps_target_id" : 30 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1137 + } + ], + "mhaps_target_id" : 46 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 884 + } + ], + "mhaps_target_id" : 87 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1417 + } + ], + "mhaps_target_id" : 85 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1282 + } + ], + "mhaps_target_id" : 84 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1295 + } + ], + "mhaps_target_id" : 80 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1488 + } + ], + "mhaps_target_id" : 79 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1455 + } + ], + "mhaps_target_id" : 81 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1375 + } + ], + "mhaps_target_id" : 82 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 928 + } + ], + "mhaps_target_id" : 98 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1439 + } + ], + "mhaps_target_id" : 76 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1315 + } + ], + "mhaps_target_id" : 72 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1434 + } + ], + "mhaps_target_id" : 16 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 997 + } + ], + "mhaps_target_id" : 71 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1208 + } + ], + "mhaps_target_id" : 77 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 788 + }, + { + "mhap_id" : 0, + "reads" : 321 + } + ], + "mhaps_target_id" : 69 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1354 + } + ], + "mhaps_target_id" : 66 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1234 + } + ], + "mhaps_target_id" : 63 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1117 + } + ], + "mhaps_target_id" : 68 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 833 + }, + { + "mhap_id" : 1, + "reads" : 336 + } + ], + "mhaps_target_id" : 62 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1451 + } + ], + "mhaps_target_id" : 61 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1283 + } + ], + "mhaps_target_id" : 51 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 915 + }, + { + "mhap_id" : 1, + "reads" : 267 + } + ], + "mhaps_target_id" : 50 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1209 + } + ], + "mhaps_target_id" : 31 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 2063 + }, + { + "mhap_id" : 1, + "reads" : 450 + } + ], + "mhaps_target_id" : 49 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1319 + } + ], + "mhaps_target_id" : 35 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1196 + } + ], + "mhaps_target_id" : 48 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1507 + } + ], + "mhaps_target_id" : 99 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 843 + }, + { + "mhap_id" : 1, + "reads" : 269 + } + ], + "mhaps_target_id" : 47 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1411 + } + ], + "mhaps_target_id" : 43 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1334 + } + ], + "mhaps_target_id" : 33 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 937 + }, + { + "mhap_id" : 1, + "reads" : 318 + } + ], + "mhaps_target_id" : 67 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1066 + } + ], + "mhaps_target_id" : 37 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1128 + } + ], + "mhaps_target_id" : 3 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1500 + } + ], + "mhaps_target_id" : 14 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1276 + } + ], + "mhaps_target_id" : 32 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1370 + } + ], + "mhaps_target_id" : 86 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 1011 + }, + { + "mhap_id" : 0, + "reads" : 347 + } + ], + "mhaps_target_id" : 11 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1288 + } + ], + "mhaps_target_id" : 28 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 955 + }, + { + "mhap_id" : 0, + "reads" : 313 + } + ], + "mhaps_target_id" : 26 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1171 + } + ], + "mhaps_target_id" : 59 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1197 + } + ], + "mhaps_target_id" : 27 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 952 + }, + { + "mhap_id" : 0, + "reads" : 403 + } + ], + "mhaps_target_id" : 88 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1100 + } + ], + "mhaps_target_id" : 64 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1133 + } + ], + "mhaps_target_id" : 8 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1293 + } + ], + "mhaps_target_id" : 19 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1257 + } + ], + "mhaps_target_id" : 36 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1338 + } + ], + "mhaps_target_id" : 65 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 934 + }, + { + "mhap_id" : 1, + "reads" : 318 + } + ], + "mhaps_target_id" : 25 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1371 + } + ], + "mhaps_target_id" : 58 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 933 + }, + { + "mhap_id" : 1, + "reads" : 338 + } + ], + "mhaps_target_id" : 73 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 712 + }, + { + "mhap_id" : 0, + "reads" : 289 + } + ], + "mhaps_target_id" : 20 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1413 + } + ], + "mhaps_target_id" : 93 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1196 + } + ], + "mhaps_target_id" : 24 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1348 + } + ], + "mhaps_target_id" : 83 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1207 + } + ], + "mhaps_target_id" : 70 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 909 + } + ], + "mhaps_target_id" : 23 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1135 + } + ], + "mhaps_target_id" : 57 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 951 + }, + { + "mhap_id" : 0, + "reads" : 318 + } + ], + "mhaps_target_id" : 17 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 964 + }, + { + "mhap_id" : 1, + "reads" : 294 + } + ], + "mhaps_target_id" : 15 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1397 + } + ], + "mhaps_target_id" : 60 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1251 + } + ], + "mhaps_target_id" : 18 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 910 + }, + { + "mhap_id" : 0, + "reads" : 337 + } + ], + "mhaps_target_id" : 6 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1039 + }, + { + "mhap_id" : 1, + "reads" : 325 + } + ], + "mhaps_target_id" : 13 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1489 + } + ], + "mhaps_target_id" : 9 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 814 + }, + { + "mhap_id" : 0, + "reads" : 267 + } + ], + "mhaps_target_id" : 53 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1186 + } + ], + "mhaps_target_id" : 92 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1496 + } + ], + "mhaps_target_id" : 12 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1454 + } + ], + "mhaps_target_id" : 22 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1224 + } + ], + "mhaps_target_id" : 45 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1429 + } + ], + "mhaps_target_id" : 75 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1097 + }, + { + "mhap_id" : 1, + "reads" : 350 + } + ], + "mhaps_target_id" : 7 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1493 + } + ], + "mhaps_target_id" : 40 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1024 + } + ], + "mhaps_target_id" : 5 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1365 + } + ], + "mhaps_target_id" : 41 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1097 + } + ], + "mhaps_target_id" : 52 + }, + { + "mhaps" : + [ + { + "mhap_id" : 1, + "reads" : 819 + }, + { + "mhap_id" : 0, + "reads" : 273 + } + ], + "mhaps_target_id" : 38 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1121 + } + ], + "mhaps_target_id" : 89 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1227 + } + ], + "mhaps_target_id" : 4 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1058 + }, + { + "mhap_id" : 1, + "reads" : 245 + } + ], + "mhaps_target_id" : 0 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 732 + }, + { + "mhap_id" : 1, + "reads" : 253 + } + ], + "mhaps_target_id" : 90 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 883 + }, + { + "mhap_id" : 1, + "reads" : 299 + } + ], + "mhaps_target_id" : 78 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1076 + } + ], + "mhaps_target_id" : 42 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 991 + } + ], + "mhaps_target_id" : 34 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1158 + } + ], + "mhaps_target_id" : 91 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1341 + } + ], + "mhaps_target_id" : 1 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 992 + }, + { + "mhap_id" : 1, + "reads" : 302 + } + ], + "mhaps_target_id" : 39 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1184 + } + ], + "mhaps_target_id" : 29 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1304 + } + ], + "mhaps_target_id" : 44 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 810 + }, + { + "mhap_id" : 1, + "reads" : 364 + } + ], + "mhaps_target_id" : 56 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1356 + } + ], + "mhaps_target_id" : 55 + }, + { + "mhaps" : + [ + { + "mhap_id" : 0, + "reads" : 1109 + } + ], + "mhaps_target_id" : 10 + } + ] + } + ] + } + ], + "library_sample_info" : + [ + { + "library_sample_name" : "5tbx_lib_name2", + "panel_id" : 0, + "sequencing_info_id" : 0, + "specimen_id" : 0 + }, + { + "library_sample_name" : "XUC009_lib_name2", + "panel_id" : 0, + "sequencing_info_id" : 0, + "specimen_id" : 1 + } + ], + "panel_info" : + [ + { + "panel_name" : "heomev1", + "reactions" : + [ + { + "panel_targets" : + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99 + ], + "reaction_name" : "full" + } + ] + } + ], + "pmo_header" : + { + "creation_date" : "2025-11-03", + "generation_method" : + { + "program_name" : "elucidator combingallintopmojson", + "program_version" : "1.1.1" + }, + "pmo_version" : "v1.0.0" + }, + "project_info" : + [ + { + "project_description" : "PathWeaver assemblies of Heome1 from large collection of global samples", + "project_name" : "PathWeaverHeome1" + } + ], + "representative_microhaplotypes" : + { + "targets" : + [ + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 145621, + "genome_id" : 0, + "start" : 145448, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGAATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATATGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTA" + }, + { + "seq" : "AACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGAATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATAAGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTA" + }, + { + "seq" : "AACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGTATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATAAGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTA" + } + ], + "target_id" : 79 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 109981, + "genome_id" : 0, + "start" : 109806, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ACTCATGTTCATGAGCTAATTTCCCACAAATACTCCATAACGAACTTTTCATTTTATTAAATTTATCTCTCAAAAGAGAATGACTATAATGCCATATTAAATACATATCTTTCCTTTCTAATGTTCCTGGTAATTCTATTATCATTCTTTCTAAATCTTCTTCTGTAAGTTTT" + }, + { + "seq" : "ACTTATGTTCATGAGCTAATTTCCCACAAATACTCCATAACGAACTTTTCATTTTATTAAATTTATCTCTCAAAAGAGAATGACTATAATGCCATATTAAATACATATCTTTCCTTTCTAATTTTCCTGGTAATTCTATTATCATTCTTTCTAAATCTTCTTCTGTAAGTTTT" + } + ], + "target_id" : 98 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3214477, + "genome_id" : 0, + "start" : 3214350, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TCGTTTTGAATTGTCAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGAGTGATTTTGGAATAGCTACAATGAATGAAACCGAACATACTAGATCTTTTTATGGCT" + }, + { + "seq" : "TCGTTTTGCATTGTCAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGAGTGATTTTGGAATAGCTACAATGAATGAAAGCGAACATACTAGATCTTTTTATGGCT" + } + ], + "target_id" : 99 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 278335, + "genome_id" : 0, + "start" : 278164, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GAATTTTCTTTTTTATGACTTTCTTCTCCTTGTTCAGAAGCTTCTTTTTCATCCTTTTTTTCTGCTGCGTCAGATAAATTGGGGGAAGCACTTGAAGATTCATTTCCTCCAGGAGTATCACTAGTACTTACTCCGTCCATATTTGGTTTTTCTTCCCTTAGAATTCTCA" + }, + { + "seq" : "GAATTTTCTTTTTTATGACTTTCTTCTCCTTGTTCAGAAGCTTCTTTTTCATCCTTTTTTTCTGCTGCGTCAGATAAATTGGGGGAAGCACTTGAAGATTCATTTCCTCCAGGAGTATTACTAGTACTTACTCCGTCCACATTTGGTTTTTCTTCCCCTAGAATTCTCA" + } + ], + "target_id" : 42 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 470675, + "genome_id" : 0, + "start" : 470491, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TACACATAAGAAAAAAAAAATTTATTTATTCTTACAAAAAGAATATAAAAACAAAATTTTGGGATTTATAAATTTTTATAAACGTATAACACACAAAATAAAAAAGAAACAAGAAAATGTTCATGATAAAATCACTTTTTTAAAATGTCTAAAGGAACTCTTTTTTGTCACACATACAAATA" + }, + { + "seq" : "TACACATAAGAAAAAAAAAATTTATTTATTCTTACAAAAAGAATATAAAAACAAAATTTTGGGATTTATAAATTTTTATAAACATATAACACACAAAATAAAAAAGAAACAAGAAAATGTTCATGATAAAATCACTTTTTTAAAATGTCTAAAGGAACTCTTTTTTGTCACACATACAAATG" + } + ], + "target_id" : 78 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 805941, + "genome_id" : 0, + "start" : 805821, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAATTATGAAGACAGTCTCACGACTTCATGTTATATTGATGAAAACAAATCCGATTCATCCTATGAAACTGAAGAAAATGTAAACTATAATAATAAAATGGGTAAACGCAAAAATTTA" + } + ], + "target_id" : 95 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 85645, + "genome_id" : 0, + "start" : 85439, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ACTTTTTAACACTATCATTATAATTATGTCTTTTATTTTCATATTTTTCTTTATAATAATTTATATCCTTTAATTTTTCTTTCATCAAATTTAACCATTTATCATTTAAATTCTCTTTTTCCACAGCTCCAGCATTTTTATTTATATCATCTACAACTACATCTTCCTTCACATAATTATTTATATAAAAATTATTATCATCTA" + }, + { + "seq" : "ACTTTTTAACACTATCATTATAATTATGTCTTTTATTTTCATATTTTTCTTTATAATAATTTATATCCTTTAATTTTTCTTTCATCAAATTTAACCATTTATCATTTAAATTCTCTTTTTCCACAGCTCCAGCATTTTTATTTATATCATCTACAACTACATCTTCCTTCACATAATTATTTATATAAAAACTATTATCATCTA" + } + ], + "target_id" : 73 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 142180, + "genome_id" : 0, + "start" : 141962, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GCATTTATAACAAAATATCAGAAGATGGAAAAACCAAAAATAGCCTACTTAGCGATATATCAAAATTATTTAAAATTGTAAAAGAAAGCAAATTAATATTTGTAACTGGATTTTTATTAACAACCTTGTCAGCAATTGTAGATTCATACATTCCAATTTTTCTATCCAAAACGGTATCTTTTGTAATGGAAAGAAAAAAATTTACATTTCTTAAAA" + }, + { + "seq" : "GCATTTATAACAAAATATCAGAAGATGGAAAAACCAAAAATAGCCTACTTAGCGATATATCAAAATTATTTAAAATTGTAAAAGAAAGCAAATTAATATTTGTAACTGGATTTTTATTAACAACCTTGTCAGCAATTGTCGATTCATACATTCCAATTTTTTTATCCAAAACGGTATCTTTTGTAATGGAAAGAAAAAGTTTTACATTTCTTAAAA" + } + ], + "target_id" : 37 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 221494, + "genome_id" : 0, + "start" : 221362, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTTCATAATCTAATTCGTCTTTAGGTTTATTAGCAGAGCCAGGCTTTATTCTAACTTGAATA" + }, + { + "seq" : "TGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTTCATAATCTAATTGGTCTTTAGGTTTATCAGCAGAGCCAGGCTTTATTCTAACTTGAATA" + } + ], + "target_id" : 57 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 618580, + "genome_id" : 0, + "start" : 618395, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AAAAGAGATTATAGAAGTGGAAAGAAGACATATATAATACAAGCTCTACGATATGCATTAACATATTATAGCAAACTTTCAAATAGAAAGGAAGCACCTAAAGTAACCATGTTATTTACAGATGGAAATGATCCCTATGAATCAGAAAAGGGATTACAGGATATTGCATTATTATATAGAAAA" + }, + { + "seq" : "AAAAGAGATTATAGAAGTGGAAAGAAGACATATATAATACAAGCTCTACGATATGCATTAACATATTATAGCAAACTTTCAAATAGAAAGGAAGCACCTAAAGTAACCATGTTATTTACAGATGGAAATGATTCCTATGAATCAGAAAAGGGATTACAGGATATTGCATTATTATATAGAAAA" + } + ], + "target_id" : 94 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 654174, + "genome_id" : 0, + "start" : 654001, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TATTTTTATAATTTCCTTTCATCTTATTTTTTTCTTTATATTTTTTTTTTTCATATGTAAGATTTATATAATCACTTTCGCTTTTTCTAACGCTTTTGAACTTTTTAAATGTACTTCCTTCATTATTTCTAATTCTCGTAAACACAAGAATAAATATTTTGATATATCTTA" + }, + { + "seq" : "TATTTTTATAATTTCCTTTCATCTTATTTTTTTCTTTATATTTTTTTTTTTCATATGTAAGATTTATATAATCACTTTCGCTTTTTCTAACGCTTTTGAACTTTTTAAATGTACTTCGTTCATTATTTCTAATTCTCGTAAACACAAGAATAAATATTTTGATATATCTTA" + } + ], + "target_id" : 90 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 850988, + "genome_id" : 0, + "start" : 850815, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CATATTCGTTTCAGCGTTTATAGAGCGAATATTATCGATTATGTCTATATTCCCTAAAATATGTACATAATAATCTCCATTTAATAATGTTACTTTCTTAAGAATATTTTTGTATATGACATCAAAGATATTACGAGTTAACAATACATCTACATTTCGGTCTATTATATA" + }, + { + "seq" : "CATATTCGTTTCAGCGTTTATAGAGCGAAAATTATCGATTATGTCTATATTCCCTAAAATATGTACATAATAATCTCCATTTAATAATGTTACTTTCTTAAGAATATTTTTGTATATGACATCAAAGATATTACGAGTTAACAATACATCTACATTTCGGTCTATTATATA" + } + ], + "target_id" : 48 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 180114, + "genome_id" : 0, + "start" : 179902, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTTCGATATAGGACATATAGATCATAATATAAACGAATATGAAAAACGTTTTACAATTTTAAAAGAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGAAAATAATACATTTTTAAATAGATTAAGAAATGAACAAGTGAGGGCATCGTTATTAATAACAGGTATTATAAACGAAAATAT" + }, + { + "seq" : "TTTCGATACAGGACATATAGATCATAATATAAACGAATATGAAAAACATTTTACAATTTTAAAAAAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGATAATAATACATTTTTAAATAGATTAAGAAATGAACAAGTGAGGGCATCGTTATTAATAACAGGTATTATAAACGAAAATAT" + } + ], + "target_id" : 82 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 110086, + "genome_id" : 0, + "start" : 109911, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATATTTGTATATATTCTAGTAAACACTTTAGGTACACCTGCAAGTACCTCAACATCTGAATTATATAAATCTTTAGAAAAACAACTAATATCCTTACTCCATATATTTATTTTTATACCAAGAATAACAGCCATATAAACCAAAACTCTCTCAAATGCATGTGATACAGGTAA" + }, + { + "seq" : "ATATTTGTATATATTCTAGTAAACACTTTAGGTACACCTGCAAGTACCTCAACATCTGAATTATATAAATCTTTAGAAAAACAACTAATATCCTTACTCCATATATTTATTTTTATACCAAGAATAACAGCCATATAAACCAAAACTCTCTCAAATACATGTGATACAGGTAA" + } + ], + "target_id" : 74 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 133700, + "genome_id" : 0, + "start" : 133490, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAGATTTTTTCCCTCCAACAGATGCACTCACTTTAGGTGTTTTAAACTTAGTTGTATGTTGACCCCCCTCATTATTTAGTTTACCTTTATTTAATCTTTTACCAGCAGTAGAAACTACATTCTCTCGATTATCATTACCTACTTCAGTCTTTACAATTGTAGGAGGTGTTTTAACATGATCATCCCCTCCATGAGGAGTAACCCTTAA" + }, + { + "seq" : "TAGATTTTTTCCCTTCAGCAGGTGCCCTCACTTTAGGTGTTTTAAACTTAGTTGTATGTGGAACCCCATCTTTATTTGCTTTACCTCTATTTAATCTTTTACCAGCAGTAGAAACTACATTCTCTCGATTATCATTACCTACTTCAGTCTTTACAATTGTAGGAGGTGTTTTAACATGATTATCCCCTCCATGAGGAGTAACCCTTAA" + } + ], + "target_id" : 43 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 141944, + "genome_id" : 0, + "start" : 141777, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCAAATCTGCACACAAAGAAATTAAAAAAGAATCAAAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAAT" + }, + { + "seq" : "TTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCGAATCTGCACACAAAGAAATTAAAAAAGAATCAAAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAAT" + }, + { + "seq" : "TTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCGAATCTGCACACAAAGAAATTAAAAAAGAATCAGAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAAT" + } + ], + "target_id" : 70 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 415825, + "genome_id" : 0, + "start" : 415652, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TGCTAGTTTTGCTGCTCATGAAAATAAAAGCTACTCATATGAAGGTCGTACATATAAAATGTATCCACCTGAATTTAATACATTAATGTTAAAAGCAGATTATTTTATAAGAGATATAAATACACGAGGATTTAGAGAAGTAAATATGGATTCATGTAAATCATATACAAA" + } + ], + "target_id" : 15 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 544860, + "genome_id" : 0, + "start" : 544717, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TATATTTTACATAATAACAATCTTTCATGTAATGATTATAATTTAAATAATCTTTCATTTAATATAAATAAATATATAAATGAAGAAAAAGGCAAAAATAAAAAAACAAATCAACATATATCAGAACAATTTTTATTTCCT" + }, + { + "seq" : "TATATTTTACATAATAACAATCCTTCATGTAATGATTATAATTTAAATAATCTTTCATTTAATATAAATAAATATATAAATGAAGAAAAAGGCAAAAATAAAAAAACAAATCAACATATATCAGAACAATTTTTATTTCCT" + } + ], + "target_id" : 96 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748435, + "genome_id" : 0, + "start" : 748229, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AAATGTAATTCCCTAGATATGAAATATTTTCGTGCAGTTACAACATATGTGAATGAATCAAAATATGAAAAATTGAAATATAAGAGATGTAAATATTTAAACAAAGAAACTGTGGATAATGTAAATGATATGCCTAATTCTAAAAAATTACAAAATGTTGTAGTTATGGGAAGAACAAACTGGGAAAGCATTCCAAAAAAATTT" + } + ], + "target_id" : 72 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748695, + "genome_id" : 0, + "start" : 748532, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATAGTTTTACTTGGGAAATTAAATTACTATAAATGTTTTATTATAGGAGGTTCCGTTGTTTATCAAGAATTTTTAGAAAAGAAATTAATAAAAAAAATATATTTTACTAGAATAAATAGTACATATGAATGTGATGTATTTTTTCCAGAAATAAATGAAAA" + } + ], + "target_id" : 58 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 802712, + "genome_id" : 0, + "start" : 802524, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AAATTATTATAGAAAGATAGAAGTTATTTTATATGAATGGTTATATTTTCATTATAATAATGTATATAACACCAAAGTAAAAAAACAAAAATTTATATTTACCCAACAAAAAAAAGACATATCAAAACATAACAAGTTATATCTTCAGTATGATCAAAATAAAAGAAATTCTGAAATAGAACATAC" + }, + { + "seq" : "AAATTATTATAGAAAGATAGAAGTTATTTTATATGAATGGTTATATTTTCATTATAATAATGTATATAACACCAAAGTAAAAAAACAAAAATTTATATTTACCCAACAAAAAAAAGACATATCAAAACATAACAAGTTATATCTTCAGTATGATCAAAATAAAAGAAATTCTGAAATAGAACGTAC" + } + ], + "target_id" : 92 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1037843, + "genome_id" : 0, + "start" : 1037633, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TCTTATAAAGTTAATGAAATTGCTCAACTTAATTTAACCATAGAAAGAGATTTAACAGATGATGCTGTGATTTTTGCACACTCACTTTATTTACCATTTGAAAAAGAAGAAATGTGGTGGATCGTTATCGGAATTAAAAAAATGAACTTACTTTTATCTATCAAAAAATTATCTTTATTGAAAAGTATCAATAATATAAAAATTAATT" + }, + { + "seq" : "TCTTATAAAGTTAATGAAATAGCTCAACTTAATTTAACCATAGAAAGAGATTTAACAGATGATGCTGTGATTTTTGCACACTCACTTTATTTACCATTTGAAAAAGAAGAAATGTGGTGGATCGTTATCGGAATTAAAAAAATGAACTTACTTTTATCTATCAAAAAATTATCTTTATTGAAAAGTGTCAATAATATAAAAATTAATT" + } + ], + "target_id" : 52 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1100830, + "genome_id" : 0, + "start" : 1100655, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATGTTCTAAGATCTGATGGAAAAATATCTGATCAAGGTTCTCAGAAAAGTCCTCCTAAGGAACTTTCTAATAAACAAATGACTCCTGCTCAACGTAAGAATGTGCCACATTTTGTTGAAAGAAGAGGCTATGGAAATAGTCATGTTAGGGGTAACGCACTTAAAAAAATTAGT" + }, + { + "seq" : "ATGTTCTAAGATCTGGTGGAAAAATATCTGATCAAGGTTCTCAGAAAAGTCCTCCTAAGGAACTTTCTAATAAACAAATGACTCCTGCTCAACGTAAGAATGTGCCACATTTTGTTGAAAGAAGAGGCTATGGAAATAGTCATGTTAGGGGTAACTCACTTAAAAAAATTAGT" + } + ], + "target_id" : 81 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 181672, + "genome_id" : 0, + "start" : 181556, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TCATTCTTTTTTTAACTAAAACTATTCATCTCAAAAATATAAGATATTTTATATGACGAATGCCATTGTATTTTTTGTTACGTAAAACCTGACTTCTTCAAGGAAAACACATGC" + }, + { + "seq" : "TCATTCTTTTTTTAACGAAAACTATTCATCTCAAAAATATAAGATATTTTATATGACGAATGCCATTGTATTTTTTGTTACGTAAAACCTGACTTCTTCAAGGAAAACACATGC" + } + ], + "target_id" : 64 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1102577, + "genome_id" : 0, + "start" : 1102388, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AAGAAATAAATAAAATAATTTATACAAACGAATTTAATAATTATGAAGATAAAATATATGAAGATGTCAAATATATTAAAGAACAGGAAAATGAAATATACTTGAGAGATGGAATTGAAGAGTTACATATGGATGAACCAAGTCGGGATGTATATGTTGATGATGAAAATGATTATATATTTTTAGA" + }, + { + "seq" : "AAGAAATAAATAAAATAATTTATACAAACGAATTTAATAATTATGAAGATAAAATATATGAAGATGTCAAATATATTAAAGAACAGGAAAATGAAATGTACTTGAGAGATGGAATTGAAGAGTTACATATGGATGAACCAAGTGGGGATGTATATTTTGATGATCAAGATGATTATATATTTTTAGA" + } + ], + "target_id" : 67 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1113603, + "genome_id" : 0, + "start" : 1113449, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACATCTATTCAATTTGTTTGTATAAGTATTAGGTCTTATTATTCTTTTACGTTTT" + }, + { + "seq" : "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGATTTCCATAATTTGATTACATCTATTCAATTTGTTTGTATAATTATTAGGTCTTATTATTCTTTTACGTTTT" + }, + { + "seq" : "AATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACATCTATTCAATTTGTTTGTATAATTATTAGGTCTTATTATTCTTTTACGTTTT" + } + ], + "target_id" : 61 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1128672, + "genome_id" : 0, + "start" : 1128488, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTGAAAGAGTTAAAGGGAAAAATACAAAATTATTTAGATAATGATATTCAATTGAGTAATGGAAAACTCCTATATAAGGATACATGGGATAGAATTGATTTGAAGTTTTGTAGAACGGTAGCAATAGAAGAGGCAGAATACACTAGAAAATTTTATAGCTTAATTAATGATAAACATACAAT" + }, + { + "seq" : "TTGAAAGAATTAAAGGGAAAAATACAAAATTATTTAGATAATGATATTCAATTGAGTAATGGAAAACTCCTATATAAGGATACATGGGATAGAATTGATTTGAAGTTTTGTAGAACGATAGCAATAGAAGAGGCAGAATACACTAGAAAATTTTATAGCTTAATTAATGATAAACATACAAT" + } + ], + "target_id" : 54 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 329549, + "genome_id" : 0, + "start" : 329377, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTGTGATGTATATAAATTCCCTTCTTCTTTATGTACCACATTATAAGAACCACGAACATATTCTTTTAAAAATGTTAACTTACTTCCAACAAATATATAATCAAAACAAAATTTTTTATTGTCGAAATGTTCTCGTTCAACCCCATTCATATTTCGGATATCATTATTTA" + } + ], + "target_id" : 33 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958220, + "genome_id" : 0, + "start" : 958058, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTTATATCATTTGTATGTGCTGTATTATCAGGAGGAACATTACCTTTTTTTATATCTGTGTTTGGTGTAATATTAAAGAACATGAATTTAGGTGATGATATTAATCCTATAATATTATCATTAGTATCTATAGGTTTAGTACAATTTATATTATCAATGA" + }, + { + "seq" : "TTTATATCATTTGTATGTGCTGTATTATCAGGAGGAACATTACCTTTTTTTATATCTGTGTTTGGTGTAATATTAAAGAACATGTATTTAGGTGATGATATTAATCCTATAATATTATCATTAGTATCTATAGGTTTAGTACAATTTATATTATCAATGA" + } + ], + "target_id" : 49 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958505, + "genome_id" : 0, + "start" : 958388, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ACGAAATTTATAACAATTTTTACATATGCCAGTTCCTTTTTAGGGTTATTTATTTGGTCATTAATAAAAAATGCACGTTTGACTTTATGTATTACTTGCGTTTTTCCGTTAATTT" + }, + { + "seq" : "ACGAAATTTATAACAATTTTTACATATGCCAGTTCCTTTTTAGGTTTATATATTTGGTCATTAATAAAAAATGCACGTTTGACTTTATGTATTACTTGCGTTTTTCCGTTAATTT" + } + ], + "target_id" : 46 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1042280, + "genome_id" : 0, + "start" : 1042161, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TATTATTACGGTACCATTATATGATTCTTTAGGTCCTCAATCAAGTAGATTTATATTAGATCAAACACAGATGGAAACTATTGTATGTAACAAGACATGTGCTCGTAATTTATTTAA" + } + ], + "target_id" : 4 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1309743, + "genome_id" : 0, + "start" : 1309608, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AATGAAGAAAATATGTCTGACAGACCAAACAGTTTATCTCATGATAAGGATCAACACCACGATGAAACACATAATGAACAATATGGATTATACGTAAAAGAAATGGAATCTAAAGTTGAAAAATTAGCTGAAA" + } + ], + "target_id" : 27 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 145500, + "genome_id" : 0, + "start" : 145342, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATTTGAATAAAATTTATCATTCACAATATTATATTTTTGTTTCTTCTTTTTTCCCATAATATTATTATTTTGTTCACAATATATGTTCATGTGTCCCCTCTTTTTCTGTAAAATATTAAAATGTTTCTTACTATGCTTTTCTTCATTTTTAATAAC" + } + ], + "target_id" : 44 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 532377, + "genome_id" : 0, + "start" : 532194, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GAACAATTGTTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACCCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCGCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACTTCCCCATGTGATCCAACGAATGCCA" + }, + { + "seq" : "GAACAATTGCTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACCCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCGCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACTTCCCCATGTGATCCAACGAATGCCA" + } + ], + "target_id" : 39 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 496142, + "genome_id" : 0, + "start" : 495970, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GAAAGTAGCGAATACCCTGTAGAAATTGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTTACTACGCCTGGTGTTACTGCACTACCTGAAGAATTACCATTAACGAGCTATAAAGTAACACCTACTTCTATTAATGTATTGCATAAAGAGGGCCCCACTTTAAA" + }, + { + "seq" : "GAAAGTAGCGAATACCCTGTAGAAATTGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTTACTACGCCTGATGTTACTGCACTACCTGAAGAATTACCATTAACGAGCTATAAAGTAACACCTACTTCTATTAATGTATTGCATAAAGAGGGCCCCACTTTAAA" + } + ], + "target_id" : 62 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 165421, + "genome_id" : 0, + "start" : 165234, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAATTATCATTATTATTATAATTATCATTGTTATTATTATTGTTGTTGTTGTTATTATTATTTCCTTTATTATTTAATATGCATTTTTTAATATCCATTTTATTATTTATCATATCAGTACTTTTATTTTTCTCCTTTTCGTTTATAGCTTTTTCCCTATGCACCCTGAATTTCCCATTTTTTTT" + }, + { + "seq" : "TCATTATTATTATTATTATAATTATCATTTTTATTATTATTGTTGTTATTATTATTTCCTTTATTATTTAATATGCATTTTTTAATATCCATTTTATTATTTATCATATCAGTACTTTTATTTTTCTCCTTTTCGTTTATAGCTTTTTCCCTATGCACCCTGAATTTCCCATTTTTTTT" + } + ], + "target_id" : 29 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 166166, + "genome_id" : 0, + "start" : 166034, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTTTATTTGAACTTTTTTATTTTCTTCATTATCAATATAAAAACAACAATCTTTAAATTTATGAAATAACACCCAACTTAATGTATAAAATATAATTTCTATAAAATCAAAATTAATGTAATAACCTAAT" + } + ], + "target_id" : 59 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 299004, + "genome_id" : 0, + "start" : 298885, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CATTCAATATGGTTCTGAGCTTAAAGATGTTATCCTTATACATGTTTCTATTCTCATTCGTTATAACATCAATGACATATAAAACATATCTCTCAAATATTTTGTGAACAATATTAT" + } + ], + "target_id" : 41 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 730087, + "genome_id" : 0, + "start" : 729974, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATGTTACGATATAAAAAAATATAGATGTTCATTATTGAA" + }, + { + "seq" : "TTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATGTTACGATATAGAAAAATATAGATGTTCATTATTGAA" + } + ], + "target_id" : 75 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1149584, + "genome_id" : 0, + "start" : 1149414, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCCATTGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTAT" + }, + { + "seq" : "AATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCTATAGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTAT" + }, + { + "seq" : "AATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCTATTGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTAT" + } + ], + "target_id" : 45 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1358910, + "genome_id" : 0, + "start" : 1358693, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AGAATCTCAACTTTTGCTTAAAAAAAATGATAACAAATATAATTCTAAATTTTGTAATGATTTGAAGAATAGTTTTTTAGATTATGGACATCTTGCTATGGGAAATGATATGGATTTTGGAGGTTATTCAACTAAGGCAGAAAACAAAATTCAAGAAGTTTTTAAAGGGGCTCATGGGAAAATAAGTGAACATGAAATTAAAAATTTTAGAAAAG" + } + ], + "target_id" : 35 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 102499, + "genome_id" : 0, + "start" : 102325, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAATTTTCTCAAGTAACATATTTTTGTCTTGACTACTTTCATCTGTAAATGGAACGAATACTCTTTGCTTACCTGCAAAAAGGACAACTGACATATGAGCCTTATCCTTACTTACATTCGAATTAAGGACCATAGATTCTAAAAATGGTATAGTTCCTTTTAACCAATAATC" + } + ], + "target_id" : 86 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 336646, + "genome_id" : 0, + "start" : 336467, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AAATTTACAGAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCCACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCACAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTA" + }, + { + "seq" : "AAATTTACAGAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCTACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCCCAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTA" + } + ], + "target_id" : 85 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 339356, + "genome_id" : 0, + "start" : 339167, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TCATTACTATTCTTTATCCATATATATGTTGTTATATCAGTTGCACCTGAGGGTGGATTCAAACCTCTTGCTTGTATAATATATGCACGTACTACTAAATTACGTGTTAATCTATATTCTCTTACTAAATCATCACATTTCTTTATCATTTCTTTTTTTAAATACATTGTCTTTTCATCATACACAT" + }, + { + "seq" : "TCATTACTATTCTTTATCCATATATATGTTGTTATATCAGTTGCACCGGATGGTGGATTCAAACCTCTTGCTTGTATAATATATGCACGTACTACTAAATTACGTGTTAATCTATATTCTCTTACTAAATCACCACATTTCTTTATCATTTCTTTTTTTAAATACATTGTCTTTTCATCATACACAT" + } + ], + "target_id" : 80 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 550217, + "genome_id" : 0, + "start" : 549992, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ACTAACAAATTATGATAATCTAGTTTATGATATAAAAAATTATTTAGAACAAAGATTAAATTTTCTTGTATTAAATGGAATACCTCGTTATAGGATACTATTTGATATTGGATTAGGATTTGCGAAGAAACATGATCAATCTATTAAACTCTTACAAAATATACATGTATATGATGAGTATCCACTTTTTATTGGATATTCAAGAAAAAGATTTATTGCCCAT" + } + ], + "target_id" : 93 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 512387, + "genome_id" : 0, + "start" : 512198, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAAAGAAATTAAGTGAAGATGATTATGAAAAAAATTGTAGACATTTAAATTATTTAATAGATAATATAAGAGAATTATTTTTTAGTTCTAAAAATATTAGAATTCCTGATTTAGCTCGTAAATATTTGTGGGATAATCAAATTGAAGGAAATCTCAAAAAATTAATATCTTCAGCAACAAAATATAA" + }, + { + "seq" : "TAAAGAAATTAAGTGAAGATGATTATGAAAAAAATTGTAGACATTTAAATTATTTAATAGATAATATAAGAGAATTATTTTTTAGTTCTAAAAATATTAGAATTCTTGATGTAGCTCGTAAATATTTGTGGGATAATCAAATTGAAGGAAATCTCAAAAAATTAATATCTTCAGAAACAAAAAATAA" + } + ], + "target_id" : 38 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 933142, + "genome_id" : 0, + "start" : 933022, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TGGTTTTAATGAGGATGATTTAGATAAAGAGTTTTTTTTTGATTTGCCGTCGATTAGTGGTTTTTCAAGTAATGGTATGAAAAAATGTAATTTAAGAAATTTATTAAAAAGATTAGAA" + } + ], + "target_id" : 3 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1269455, + "genome_id" : 0, + "start" : 1269319, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CCTTAGCATTAATAACACTTATAGGAGGTATTTATATGACTAAAGGAAGAAAAAGTTCCATATGGCATAATTCAGAAATAAATGATACACTTTATGATGTTGTTCTTGAAACAGTGAATCAAGGAAATACAGAT" + }, + { + "seq" : "CCTTAGCATTAATAACACTTATAGGAGGTATTTATATGACTAAAGGAAGAAAAAGTTCCATATGGCATAATTCAGAAATAAATGATACACTTTATGATATTGTTCTTGAAACAGTGAATCAAGGAAATACAGAT" + } + ], + "target_id" : 32 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1344818, + "genome_id" : 0, + "start" : 1344685, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AATATATCTTTTACTTTATCTGTAAGTTTCATGGAATCTATTATTTCATCTGCATATTTTATTTTTGCCTCGTTTATATATTTACCTGCTTTTAATTTACATAAACATTTTTCTATTAAGTTTTGATCATT" + } + ], + "target_id" : 30 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1363086, + "genome_id" : 0, + "start" : 1362890, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GTAAAAAAAAAGGGTTTTCCTAAAAAACCATCGGTTCATGGTTTTACACAGATGGTGTTTTTGCAGCTTACTAATATAGTCATGTATGCCCTTTGTTTTATGAGCCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAA" + }, + { + "seq" : "GTAAAAAAAAAGGGTTTTCCTAAAAAACCATCGGTTCATGGTTTTACACAGATGGTGTTTTTGAAGATTACTAATATAGTCATGTATGCCCTTTGTTTTATGAGCCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAA" + }, + { + "seq" : "GTAAACAAAAAGGGTTTTCCTAAAAAACCATTGGTTCATGGTTTTACACAGATGGTGTTTTTGCAGCTTACTAATATAGTCATGTATGCCCTTTGTTTTATGGACCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAA" + } + ], + "target_id" : 28 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 517091, + "genome_id" : 0, + "start" : 516927, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTGAAGAATGTCCCATAGGTTTTTATTGTCCAGAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCA" + }, + { + "seq" : "TGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTAAAGAATGTCCCATAGGTTTTTATTGTCCAGAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCA" + }, + { + "seq" : "TGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTAAAGAATGTCCCATAGGTTTTTATTGTCCAAAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCA" + } + ], + "target_id" : 26 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 596333, + "genome_id" : 0, + "start" : 596132, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTATTTTCGTTTTTTTTTATATTATCATTATAATTATATGTATTTACAAAGAATTTATTATTATTTGTTTCTTTATAATTATATTCATTTTCTTTATTACTTAAGGAATTTATATTTGATAAAACTTGTTGTACTCTTTCTTCTTTGTTGATGTGAATATTTGAGAAAATAATAATAAATGTAATGACTAGGGCTATGT" + } + ], + "target_id" : 25 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 685791, + "genome_id" : 0, + "start" : 685600, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CAAAGGAACAAGATAATTTTTTCAATTTTTATAAAAGTAATATATATGATATGGAAAATAGAACATGTAATAATAATATATTACAATATTGTGTTATGAATAATAAATCATATTTATTTCATAATATATCATCCAAAAAAAATATATATATAAAAAAAAAGAATCATCAGTTTTCTTTATTCATATATT" + } + ], + "target_id" : 77 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1179077, + "genome_id" : 0, + "start" : 1178893, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CAAATTACCCTTAGCCCCAGATATGGTAAAGACATATCACTGTTATAAATTAGGAAAGCAAGCAGCTAAATTATTAGAATCTATCATTTTAAAGAAAAAGTTCGTAAGATTTAGAGTTACTGATGCTATTGATGTATATGATTTCTTTTATATAAAGAAAGTTTTATCCAGTCGTATTAAGA" + }, + { + "seq" : "CAAATTATCCTTAGCCCCAGATATGGTAAAGACATATCACTGTTATAAATTAGGAAAGCAAGCAGCTGAATTATTAGAATCTATCATTTTAAAGAAAAAGTTCGTAAGATTTAGAGTTACTGATGCTATTGATGTATATGATTTCTTTTATATAAAGAAAGTTTTATCCAGTCGTATTAAGA" + } + ], + "target_id" : 89 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1406540, + "genome_id" : 0, + "start" : 1406404, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AATTAATTTTAATGATGATGTTACTTTAGAAACACAATCCATGATAGCACACGGAGGGTCTTTGTCAGAAATAGAAGAAACTGGAGATTTATCTTCAGATGTTGATAGATTACTTTCATCAATCGAAACTACTC" + } + ], + "target_id" : 51 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1437302, + "genome_id" : 0, + "start" : 1437113, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAAAACCTGACAGCTTTGTACAGTTATATTTACCCAATTAGAATGTTCAAACATATTTAAGTGTTGCCATTCTTCAAATAATTTTTTTTCATATTCAGTTTTTGGTTGGTTTTTAAATTCTTTTGATAATGTACCTTCTGCGGATGGTATAGGGAAGTTAAAAATTTTATTACTTACTTTGTTTGAT" + } + ], + "target_id" : 87 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 531899, + "genome_id" : 0, + "start" : 531681, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATTCCTACAAATAATTATAGCATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGGAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATATTATCCGA" + }, + { + "seq" : "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATACCTACAAATAATTATAACATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGTAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATATTATCCGA" + }, + { + "seq" : "AAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATACCTACAAATAATTATAACATGCCAAATAAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGTAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATATTATCCGA" + } + ], + "target_id" : 24 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 377208, + "genome_id" : 0, + "start" : 377094, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ACCAAAAAATGATACCTGTACGTTTTTCTCCAGGAGAAACAAAAAAATTAGAAAGGATTCTCAAAAAAGTAGACGACTTTTTCTGTGCCAATATTAAAGCGCAATATACCTG" + } + ], + "target_id" : 63 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 992543, + "genome_id" : 0, + "start" : 992370, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTTTAAAAAAAAAAATTATGATATAAAATCTTCAATTAATAAAAGATCTATCCAGTTCTTTACAGACACTAATATAGATCATTATATAGCATATGAATATTATAAGGAGGACCGTACAGAATTTATATTAACTATTATGAATGAAAAAAATATTACTCATCAAGAAACTCA" + } + ], + "target_id" : 65 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1386868, + "genome_id" : 0, + "start" : 1386699, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GAGAACAGGTTAAATATATTGAAGACGTGGTTTGATAATCAGGTATTTCTTTAATTAAATATTCATGATATTGTTCGTTAGATACATAAATTAATTCGTCCTCCACATTTTGCTGTTCTGTTATAATTTGTGAAGAAGCTTGGTTTGTCTTATTTGGTAATTGCTCT" + }, + { + "seq" : "GGGAACAGGTTAAATATATTGAAGACGTGGTTTGATAATCAGGTATTTCTTTAATTAAATATTCATGATATTGTTCGTTAGATACATAAATTAATTCGTCCTCCACATTTTGCTGTTCTGTTATAATTTGTGAAGAAGCTTGGTTTGTCTTATTTGGTAATTGCTCT" + } + ], + "target_id" : 34 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1399710, + "genome_id" : 0, + "start" : 1399543, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ACATCAGAACATAGTAAAGATTTAAATAATAATGATTCAAAAAATGAATCTAGTGATATTATTTCAGAAAATAATAAATCAAATAAAGTAGAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACA" + }, + { + "seq" : "ACATCAGAACATAGTAAAGATTTAAATAATAATGATTCAAAAAATGAATCTAGTGATATTATTTCAGAAAATAATAAATCAAATAAAGTACAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACA" + } + ], + "target_id" : 71 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1436681, + "genome_id" : 0, + "start" : 1436478, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GAGGAGAAACACGTTTTATCTCATAATTCATATGAGAAAACTAAAAATAATGAAAATAATAAATTTTTCGATAAGGATAAAGAGTTATCGATGTCTAATGTAAAAAATGTGTCACAAACAAATTTCAAAAGTCTTTTAAGAAATCTTGGTGTTTCAGAGAATATATTCCTTAAAGAAAATAAATTAAATAAGGAAGGGAAA" + }, + { + "seq" : "GAGAAGAAACACGTTTTATCTCATAATTCATATGAGAAAACTAAAAATAATGAAAATAATAAATTTTTCGATAAGGATAAAGAGTTAACGATGTCTAATGTAAAAAATGTGTCACAAACAAATTTCAAAAGTCTTTTAAGAAATCTTGGTGTTTCAGAGAATATATTCCTTAAAGAAAATAAATTAAATAAGGAAGGGAAA" + } + ], + "target_id" : 23 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 119692, + "genome_id" : 0, + "start" : 119485, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTCATCCAAAAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTATTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTCAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCC" + }, + { + "seq" : "TTCATCCAAGAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTATTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTGAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCC" + }, + { + "seq" : "TTCATCCAAAAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTATTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTGAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCC" + } + ], + "target_id" : 22 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1010037, + "genome_id" : 0, + "start" : 1009855, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AGTTCTATCTATTTGTTTAATTGGTGTCCATGAATTTTTAGAGAAACACCACATATCAGCTAATAAGGAATTATTAACATCTAATCCTCCATGAATATATAAAAAATCATTAAAACTGAAAGAAGCATGCTTATATCTTGCACGTGGACAAATTTTATTTCCAATAAGTTCCCATTTCTT" + }, + { + "seq" : "AATTCTATCTATTTGTTTAATTGGTGTCCATGAATTTTTAGAGAAACACCACATATCAGCTAATAAGGAATTATTAACATCTAATCCTCCATGAATATATAAAAAATCATTAAAACTGAAAGAAGCATGCTTATATCTTGCACGTGGACAAATTTTATTTCCAATAAGTTCCCATTTCTT" + } + ], + "target_id" : 20 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1019084, + "genome_id" : 0, + "start" : 1018952, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAGTGACTGTACATTTTTCATCTAATGTTCTATAGGATAAAGAATCTGAAGGACAATGCATATCATTACAAAAATAGCATGCACCTTTAAAATATAAATAAGAATGTCTTAACACAACAAAGGAATCAAA" + } + ], + "target_id" : 56 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1376371, + "genome_id" : 0, + "start" : 1376184, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TCTCATTCCTTTGAAAATATGAACTATTCAACTCATCAAGGTTTTCATATGTTATTTCATAACTGCCATCATCTGAATCCTCTTCATCACTACTACTTAAAGAATGCTCTTCTACAGTTATATCTTCATAATGATTATTTTTAGGAAAATATTCTTCAGATCTTTCTATAAATTCTGTTCCATTA" + } + ], + "target_id" : 60 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1552639, + "genome_id" : 0, + "start" : 1552429, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATATCGACAATTATAAAGAAAAAATAGAAAATTTTAATGAAAGATATTATGAAGATGATTTAAGTTTCTTAAACTTTCCAGGAACCATAACAAGTTATGATAAAAACCATCAAAGAGATAAAAGAAAAAACTGTTTTGAAGAATATCTAGACAATAATAATTATTTTATTGATAGTAATCTAAAGGAAGTTATAGAAAATAATATATA" + } + ], + "target_id" : 19 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 532843, + "genome_id" : 0, + "start" : 532689, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CTTTCTTAATTCTATGAATGAAGAATATACGCATATTAATTTAAATAACTTTATACATAATGATAACAATGATAAAGACGAAAATTATACATTAGATCAGGTGGAAGAATATCCTATGACTAGTTATCAAAATAATATATACAAGGATTTTT" + }, + { + "seq" : "CTTTCTTAATTCTATGAATGAAGAATATACGCATATTAATTTAAATAACTTTATACATAATAATAACCATGATAATGACGAAAATTATACATTAGATCAGGTGGAAGGATATCCTATGACTAGTTATCAAAATAATATATACAAGGATTTTT" + } + ], + "target_id" : 40 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1751054, + "genome_id" : 0, + "start" : 1750864, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TATTAAAAACAACAAATAAATTACCAAGGTCATGGAAAAAACTCTTGTTAAATCTATCCATTAGATTTCAAACAATACCTATAGGTGGTTCTATCGAAATCATATCAAAGGATGAGAAAAATATTTCTGTGACACGATCCAGTGAATATAATGCAACAACATATGAGCATTACACATTTCCCAAATGG" + }, + { + "seq" : "TATTAAAAACAACAGATAAATTACCAAGGTCATGGAAAAAACTCTTGTTAAATCTATCCATTAGATTTCAAACAATACCTATAGGTGGTTCTATCGAAATCATATCAAAGGATGAGAAAAATATTTCTATGACACGATCCAGTGAATATAATGCAACAACATATGAGCATTACACATTTCCCAAATGG" + } + ], + "target_id" : 21 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1816424, + "genome_id" : 0, + "start" : 1816210, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTGACTTCTCCGGGTTTGTTACATTATCATTACAACCAATATTATTAAGGTTAATATTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCATATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACT" + }, + { + "seq" : "TTGACTTCTCCGGGTTTGTTACATTATCATTACAACCAATATTATTAAGGTTAATATTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCCTATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACT" + } + ], + "target_id" : 18 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 63279, + "genome_id" : 0, + "start" : 63165, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATAATTTCACCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGCAATGAAAAAAACAACCCTTTCAT" + }, + { + "seq" : "ATAATTTCACCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGTAATGAAAAAAATAACCCTTTCAT" + } + ], + "target_id" : 69 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 660009, + "genome_id" : 0, + "start" : 659890, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GGTCGACTTTTGGTGGTTTAACATTTTCAGCTATGAGTTTTTCGACTGATGGCAATCCTACTTTGATTAATTCCTTTAACATAAGTTTTGCGTGTTTTTTTACTTCTGATTTGATAT" + }, + { + "seq" : "GGTCGACTTTTGGTGGTTTAACATTTTCAGCTACGAGTTTTTCGACTGATGGCAATCCTACTTTGATTAATTCCTTTAACATAAGTTTTGCGTGTCTTTTTACTTCTGATTTGATAT" + } + ], + "target_id" : 16 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 684260, + "genome_id" : 0, + "start" : 684087, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATATCAAGATGGTAGTATTGTTTTAGATGTTAGTAGTACGAGAGATAAACTTTATGGAGAAGTTGAGTGGGAAGGATATAAATTTGAACTTGTGGATACAGGAGGTTTAGTTTTTGAACAAGAAAAGTTTTCAAAAGAAATAAAGGATCAAATTCTTATGGCTCTAAAAGA" + }, + { + "seq" : "ATATCAAGATGGTAGTATTGTTTTAGATGTTAGTAGTACGAGAGATAAACTTTATGGAGAAGTTGAGTGGGAAGGATATAAATTTGAACTTGTGGATACAGGAGGTTTAGTTTTTGAACAAGAAAAGTTTTCAAAAGAAATAAAGGATCAAATTTTTATGGCTCTAAAAGA" + } + ], + "target_id" : 14 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 943427, + "genome_id" : 0, + "start" : 943257, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATCAACTATAATTAAAAATAGTGGAATTATTGAAAACTTTGGAGATATTGATTATATCTTTACGGATAAAACAGGAACACTAACAGAAAATGTTATGGTGCTTAAAGTTATACATATAGGTTTTGATGTTATACATGCAGAAAATGAAAAAAATTCCATACAAGGTAA" + }, + { + "seq" : "ATCAACTATAATTAAAAATAGTGGAATTATTGAAAACTTTGGAGATATTGATTATATCTTTACGGATAAAACAGGAACATTAACAGAAAATGTTATGGTGCTTAAAGTTATACATATAGGTTTTGATGTTATACATGCAGAAAATGAAAAAAATTCCATACAAGGTAA" + } + ], + "target_id" : 91 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 1237602, + "genome_id" : 0, + "start" : 1237430, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GTATGAACACAAAACCGAAAGAGAGTTTAAAAAAAGATCCGATTTTAATGAAGGAAGAAATAACATAATAAATGTGTCAAATGTAAAGAAAACATGTAATATAGTTAAAAATGATTTAAAGGAATCTAACGAGATAAAAACTAATATAAACACAAGTTCTTATAATTTAT" + } + ], + "target_id" : 53 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 2050313, + "genome_id" : 0, + "start" : 2050129, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTTAAACTTTGAATCTGTTCAATTAATAACACTTCATCATTGTCTTCGCCTTTTATAATATCTCCATGATTATGTGCTCCTCTAATTAAGGTATCACTAACCTGTTGTTCATCTGTCGCATGAGAACTAGTAGATATATCTGGTTTATTTTTTTTCTTTCTTTTTGTTATTTCTAATTTTTT" + }, + { + "seq" : "TTTAAACTTTGAATCTGTTCAATTAATAACACTTCATCATTGTCTTCTCCTTTTATAATATCCCCATGATTATGTGCTCCTCTAATTAAGGTATCACTAACCTGTTGTTCATCTGTCGCATGAGAACTAGTAGATATATCTGGTTTATTTTTTTTCTTTCTTTTTGTTATTTCTAATTTTTT" + } + ], + "target_id" : 36 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 103878, + "genome_id" : 0, + "start" : 103658, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ACTGATGTTAATGAAGGCCAAAATGGAAAAAGTTTAACACAAGAAAAAACCCTAAAACAAATTCCTTCGACATCACCAAATAATTTAGAACAAAAATTACAACAAACACATATTTCTTCTTCCCAACAAAAACATTTAATAAAAACTACTCCTACTTCAGATTCAACTACAACTTCATCAAGCTCTTCTGTTCCTCTTACAAAACAATCCCTTCATTC" + }, + { + "seq" : "ACTGATGTTAATGAAGGCCAAAATGGAAAACGTTTAACACAAGAAAAAACCCTAAAACAAATTCCTTCGACATCACCAAATAATTTAGAACAAAAATTACAACAAACACATATTTCTTCTTCCCAACAAAAACATTTAATAAAAACTACTCCTACTTCAGATTCAACTACAACTTCATCAAGCTCTTCTGTTCCTCTTACAAAACAATCCCTTCATTC" + } + ], + "target_id" : 13 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 156721, + "genome_id" : 0, + "start" : 156565, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATAGAGTTATTATGTTCGAATTAATGACCAGATTGTTTCGATTTTATACAAAACCAATAGACCTTATTATTACTATGAATACACACAGATATGACACACCTATATTGTTAAAACATTCAAACAGCTTACAACTTATCTTATCAAATCAACAAAA" + } + ], + "target_id" : 17 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 534367, + "genome_id" : 0, + "start" : 534214, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GATAAAAAAAGAAAATGTAACAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAAAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTG" + }, + { + "seq" : "GATAAAAAAAGAAAATGTAATAATCTACTTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAGAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTG" + }, + { + "seq" : "GATAAAAAAAGAAAATGTAATAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAAAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTG" + } + ], + "target_id" : 84 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1150492, + "genome_id" : 0, + "start" : 1150302, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAAAAAAAGCAAACAAAAAGAAAAGAGAATGGAAGATTTAAGTATTGAGGAAAATTTGAAAGAGAAATTAATAAACCTAAATATTCAGAAACAGTATAGTGGTTTCCATATGAAAGAAATGGAGGAACAAAATATTCCTGAATTAAATATTCCACAACTTTCAGCTATTCATAATAGAGAAGATATGA" + }, + { + "seq" : "TAAAAAAAGCAAACAAAAAGAAAAGAGAATGGAAGATTTAAGTATTGAGGAAAATTTGAAAGAGAAATTAATAAACCTAAATATTCAGAAACAGTATAGTGGTTTCCATATGAAAGAAATGGAGGAACAAAATATTCCTGAATTAAATATTCCACAACTTTCAGCTACTCATAATAGAGAAGATATGA" + } + ], + "target_id" : 9 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1419669, + "genome_id" : 0, + "start" : 1419542, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TGGTTTTTGTACTTTTTGTCCTTGTGTTGATATCTCTTGTTCATTTTTAGATTGAGTATCTGTTTCACTTTGTGCCTTTACCTTTGATAATACGTTTTTACCGAATAATCCTAAATTTTGGAATA" + }, + { + "seq" : "TGGTTTTTGTACTTCTTTTCCTTGTGTTGATATCTCTTGTTCATTTTTAGATTGAGTATCTGTTTCACTTTGTGCCTTTACCTTTGATAATACGTTTTTACCGAATAATCCTAAATTTTGGAATA" + } + ], + "target_id" : 8 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1725569, + "genome_id" : 0, + "start" : 1725364, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CCAATACAATAAATTCTACCATTTGACGTAACACCACAATTATTTCTTCTAGGTATATTTAAATTACTTGAAACATACCATACATCTCTTAAACGATCATACACCTCAGTTTCAAATAAAGCCTTATAATCATAGTTATTACCACCAAAAACGTATAAGAAATTATTCAATACAGCACTTCCAAAATAAGCTTTTTTGGTAGA" + } + ], + "target_id" : 10 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1876533, + "genome_id" : 0, + "start" : 1876351, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TATATTTTGGTTCAGACAAATGTACGTTACATGAAATATGTGCATTATCATCAACTAAAGAAATATCTAAACTATCTGTAAAAGTATGTTTAGAACTATCATTTGAAGAGAAGTTACATCCGTGTATGACTTTTTTTTCATATTTTGGTTTTAAAACTATTTTATAATTATTATTTTTAA" + } + ], + "target_id" : 11 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2115141, + "genome_id" : 0, + "start" : 2114974, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TCATTAAGTAAAAAATTTACGGTATCGACATTAACAGTGTAATAATTTCTTCCTAAATTTAAATGTTCTAAATAATTCAAATTTAATACGGTATTTAACCTTTCTTCAAGTATTATCATTGCATTAATTTGAAACATAAGTAAAAAATTATTAGCACTTCTAAAA" + }, + { + "seq" : "TCATTAAGTAAAAAATTTACGGTATCGACATTAACAGTGTAATAATGTCTTCCTAAATTTAAATGTTCTAAATAATTCAAATTTAATACGGTATTTAACCTTTCTTCAAGTATTATCATTGCATTAATTTGAAACATAAGTAAAAAATTATTAGCACTTCTAAAA" + } + ], + "target_id" : 68 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2124846, + "genome_id" : 0, + "start" : 2124633, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AACATTTTTTTAACATCTTTACCTTTTTGACTTGGTTCTTCATCATAATTCTGTTGTTCTGCAGAATCAGCATTTACTTCAGTTTCTTCTTTATTTTGAAAAGTGTTTGATTCTACATGAGAATTGGAAGATGAACGTCTATGTTTTACTTCTGTATAACTAGTACGTTCTCCAGTATGATGAGCCTTAAGGTTTACATCTTCAGTTTCTT" + } + ], + "target_id" : 7 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2479245, + "genome_id" : 0, + "start" : 2479085, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CCATGCTTTATCAAAACAAAGTAATGAAAATGTAATACATTATTCTTGTCGATCTATATGTGCTTTTACAAAAAACCCTAAGGGTTTAGAAGCGGTAAAGGATATCAAGGACTTTGCGAATATTATAAGTAAATCTGTTGGTGATTTGAGTAAAGAGA" + } + ], + "target_id" : 6 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2481287, + "genome_id" : 0, + "start" : 2481105, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "GAACTTACTTTAGAAGCCATGAATTCGGCCGATGATCCATTGGAAGCATTTAAAAATACTTTATTAATATTTGATTTTAATTTATCTGAATTTGATAAGGATCCATATGTAAATGGTGTGCATGATTTAGCATCTAATATAAAGGATTGTTTAAGAAAAGGAGGTCACAGTAAAATATAT" + } + ], + "target_id" : 47 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2669306, + "genome_id" : 0, + "start" : 2669134, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AAAAAAATACATTTAAATCTATAATATTTGTAATAAATGATAAGAATATTAGTAATAATAGGGTACTACTATTTGTAAATACTTTTCTACATAATTTATCAATAGTAGGAAATATGATATTCTTTTTGTTTGGCTTTATTTTATCTGGGATTTTCCAATCATAAAGTTCG" + } + ], + "target_id" : 5 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 40136, + "genome_id" : 0, + "start" : 39952, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CATAGAAATATGTGCGAAAATTGGGAAAAAAATAAATAACAGGAATTGTTATATAAATTGAATCAAGAATGGCACAAAGAAAATAATACTGGTGACTTTCACACTAGTGATATCACACACAATAGTGGTATTACATACACTAGTGGTAACATACCTAGTGAAAGTAATAGTAGTTATATCCA" + }, + { + "seq" : "CATAGAAATATGTGCGAAAATTGGGAAAAAAATAAATAACAGGAATTGTTATATAAATTGAATCAAGAATGGCACAAAGAAAATAATACTGGTGACTTTCACACTAGTGATATCACACACAATAGTGGTATTACATACAGTAGTGGTAACATACCTAGTGAAAGTAATAGTAGTTATATCCA" + } + ], + "target_id" : 55 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 535109, + "genome_id" : 0, + "start" : 534940, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATACTCCGTCAGATATTCAAAATGAATGTATTTGTTCAAAAATAAATGAAGATAGAAATAATGATATGATAAACATATCTGAAATATATTATCGTTTCATTAAATTTATAACAATGATTGAAATATATTTGTGTGTAATAGAGGAAATTAAAAGGGAAGAATGGGAA" + } + ], + "target_id" : 76 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 120350, + "genome_id" : 0, + "start" : 120214, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTCTGGACAATTACAATATTCATATCCATGAGCATTGTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAA" + }, + { + "seq" : "TTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTGTGGACAATTACAATATTCATATCCATGAGCATTCTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAA" + }, + { + "seq" : "TTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTCTGGACAATTACAATATTCATATCCATGAGCATTCTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAA" + } + ], + "target_id" : 83 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 150293, + "genome_id" : 0, + "start" : 150104, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAATAATAGTAATATAAAGAATTATTCAGCTGTAGATATATTCTCACCCAAAAAAACTGGAAAGGAATGTATTAAATGTCTCCCAGATAATTTTTGTGAATGCGAATGTAGTTGTAAAAATAAAACAGGTTTTTCAATGAAATATAGACATGCCAGTAAGGGATCTAAAAGATATCGTAAAAAAATG" + }, + { + "seq" : "TAATAATAGTAATATAAAGAATTATTCAGCTGTAGATATATTCTCACCCAAAAAAACTGGAAAGGAATGTATTAAATGTCTCCCAGATAATTTTTGTGAATGCGAATGTAGTTGTAAAAATAAAACAGGTTTTTCAATGAAATATAGACATGCCAGTAAGGGATCTAAAAGATATAGTAAAAAAATG" + } + ], + "target_id" : 97 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 279785, + "genome_id" : 0, + "start" : 279662, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AGTTATAGTGATTCATATAAGGTAAATTGTATTAATTTCTCTGAAGGATTTTGTTGCTGTCATCCAATAAATAATTTAGCACTATTATATGGAGAGTATCAACAAAATCAAGAATCAAAAA" + } + ], + "target_id" : 88 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 407570, + "genome_id" : 0, + "start" : 407378, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "CTCCTTCCTTTTCATTCTTTACTTTATTTCTATTAATACACAACTCTCCTTGAGTTAAGAGATTTACGATATTATCAATATTGTTTTCTTTCATATACTTCAACTTTTTACTATTCATTTTTAAAAGATAATTAACCAAGTTACTCATGTTTGTATTAGATGGTATGTTCCCAATTTTTTCGTCTTTTCT" + } + ], + "target_id" : 66 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 564376, + "genome_id" : 0, + "start" : 564207, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TATTAAAACTTTTTTTTCTTTCTGTAAAGTTTGTACATTATGTTTTGATGAGTTTTGATTATCTTCATAAAACTTTATATATTTATAAAAATTATTTTGTATAAAATCATTTAATAAAGGTAACATAATTTTTTTAGCTTGATTCAATTCACTACATGAATGTATAT" + } + ], + "target_id" : 2 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1038485, + "genome_id" : 0, + "start" : 1038368, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATACAACTAATAAAGCTCTACGATAAATTTCTTTTTTATTTGATTTAGAAAAAGGAGAAAACCATTGAAACTTTTTGGCTAGATATTTATGGTCTTTATCAAAAATATATTCTGA" + }, + { + "seq" : "ATACAACTAATAAAGCTCTACGATAAATTTCTTTTTTATTTGATTTAGAAAAAGGAGAAAACCATTGAAACTTTTTGGCTAGATATTTATGGTCTTTATCAAAAATATAATCTGA" + } + ], + "target_id" : 1 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1956285, + "genome_id" : 0, + "start" : 1956128, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TATATATAAAGTTAAACCTATAAATAATACACTACCTAATAAACTATTCTTATATTTAAAAATAAATATAATACATGTTATTAATCCTTCTATTGTTGCCGGAATAATATACATTAAAACAGAACTCATCAAATTATTAGCACTCTCGGTACCTC" + } + ], + "target_id" : 0 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1992425, + "genome_id" : 0, + "start" : 1992288, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "TAAACACCAGTACCATTTTTTTCTGATAAATTAATATTTTTTTGTATAACATCATATTTATCCCTTTTCGTGGTAAGTGCAGTATCCTGTTTTATTATTATATTATCGAATTCATCATGGTGTATATTTCTTTCT" + } + ], + "target_id" : 50 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 2525088, + "genome_id" : 0, + "start" : 2524961, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "AATGAGGTATAATCATTCATTTCGTTGGGTCGATTTGATCTATTTTTAAGGTCCATATATTGAGATGAATCATTATGCATTTTATAATCATGAGGGATATTAGGTGCATGGTATTTAGGGTCTTT" + }, + { + "seq" : "AAAGAGGTATAATCATCCATTTTGTTGGGTCGATTTGATCTATTTTTAAGGTCCATATATTGAGATGAATCATTATGCATTTTATAATCATGAGGGATATTAGGTGCATGGTATTTAGGGTCTTT" + } + ], + "target_id" : 12 + }, + { + "mhap_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3124841, + "genome_id" : 0, + "start" : 3124641, + "strand" : "+" + }, + "microhaplotypes" : + [ + { + "seq" : "ATGGAAAAATGGAATATGAAGTATTAAGTGATGATAAAATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGGTGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATGATATGTGGTCTACTTCTGGACTAGGGTTCTATGAAT" + }, + { + "seq" : "ATGGAAAAATGGAATATGAAGTATTAAGTGATGATAAAATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGATGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATGATATGTGGTCTACTTCTGGACTAGGGTTCTATGAAT" + } + ], + "target_id" : 31 + } + ] + }, + "sequencing_info" : + [ + { + "library_layout" : "paired-end", + "library_selection" : "RANDOM", + "library_source" : "GENOMIC", + "library_strategy" : "WGS", + "seq_date" : "2020-01-01", + "seq_instrument_model" : "Multiple", + "seq_platform" : "ILLUMINA", + "sequencing_info_name" : "Pf7Plus" + } + ], + "specimen_info" : + [ + { + "collection_country" : "India", + "collection_date" : "2012-08-25", + "geo_admin3" : "NA", + "host_taxon_id" : 9606, + "project_id" : 0, + "specimen_collect_device" : "Dried Blood spot", + "specimen_name" : "5tbx", + "specimen_store_loc" : "Multiple", + "specimen_taxon_id" : + [ + 5833 + ] + }, + { + "collection_country" : "Papua New Guinea", + "collection_date" : "2015", + "geo_admin3" : "NA", + "host_taxon_id" : 9606, + "project_id" : 0, + "specimen_collect_device" : "Dried Blood spot", + "specimen_name" : "XUC009", + "specimen_store_loc" : "Multiple", + "specimen_taxon_id" : + [ + 5833 + ] + } + ], + "target_info" : + [ + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1956129, + "genome_id" : 0, + "start" : 1956096, + "strand" : "+" + }, + "seq" : "TTTTTCTCCACTTTGTAATTTTTATTGTTGAAT" + }, + "gene_name" : "PF3D7_1447900", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1956286, + "genome_id" : 0, + "ref_seq" : "ATATATATAAAGTTAAACCTATAAATAATACACTACCTAATAAACTATTCTTATATTTAAAAATAAATATAATACATGTTATTAATCCTTCTATTGTTGCCGGAATAATATACATTAAAACAGAACTCATCAAATTATTAGCACTCTCGGTACCTCT", + "start" : 1956129, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1956129, + "genome_id" : 0, + "start" : 1956096, + "strand" : "+" + }, + "seq" : "CGGGTGGTATCATGAGAATAGTTGAT" + }, + "target_attributes" : + [ + "Included", + "DrugResistance" + ], + "target_name" : "t96" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1038369, + "genome_id" : 0, + "start" : 1038340, + "strand" : "+" + }, + "seq" : "ACACTTCAACTACACTTTTTAATTTAGCC" + }, + "gene_name" : "PF3D7_1426700", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1038486, + "genome_id" : 0, + "ref_seq" : "CATACAATTAATAAAGCTCTACGATAAATTTCTTTTTTATTTGATTTAGAAAAAGGAGAAAACCATTGAAACTTTTTGGCTAGATATTTATGGTCTTTATCAAAAATATATTCTGAA", + "start" : 1038369, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1038369, + "genome_id" : 0, + "start" : 1038340, + "strand" : "+" + }, + "seq" : "AGATCTTATGTTAAACTTCTAGAAGATGAAGT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t95" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 564208, + "genome_id" : 0, + "start" : 564177, + "strand" : "+" + }, + "seq" : "AAAATCTTTTGGTATTGTATTTTGACTGCAC" + }, + "gene_name" : "PF3D7_1414200", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 564377, + "genome_id" : 0, + "ref_seq" : "TTATTAAAACTTTTTTTTCTTTCTGTAAAGTTTGTACATTATGTTTTGATGAGTTTTGATTATCTTCATAAAACTTTATATATTTATAAAAATTATTTTGTATAAAATCATTTAATAAAGGTAACATAATCTTTTTAGCTTGATTCAATTCACTACATGAATGTATATT", + "start" : 564208, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 564208, + "genome_id" : 0, + "start" : 564177, + "strand" : "+" + }, + "seq" : "AAACGGAATCACTTATGGATACCATTTTATTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t94" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 933023, + "genome_id" : 0, + "start" : 932995, + "strand" : "+" + }, + "seq" : "TGTAAAAGGAAAATGTCTTACGTGGATT" + }, + "gene_name" : "PF3D7_0820700", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 933143, + "genome_id" : 0, + "ref_seq" : "TTGGTTTTAATGAGGATGATTTAGATAAAGAGTTTTTTTTTGATTTGCCGTCGATTAGTGGTTTTTCAAGTAATGGTATGAAAAAATGTAATTTAAGAAATTTATTAAAAAGATTAGAAG", + "start" : 933023, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 933023, + "genome_id" : 0, + "start" : 932995, + "strand" : "+" + }, + "seq" : "ATTCAAAACCAATAGTACCACAATATGTTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t50" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1042162, + "genome_id" : 0, + "start" : 1042129, + "strand" : "+" + }, + "seq" : "GGAATATTTGTGATTTAGGATGTAATGCATACA" + }, + "gene_name" : "PF3D7_0525100", + "insert_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1042281, + "genome_id" : 0, + "ref_seq" : "ATATTATTACGGTACCATTATATGATTCTTTAGGTCCTCAATCAAGTAGATTTATATTAGATCAAACACAGATGGAAACTATTGTATGTGACAAGACATGTGCTCGTAATTTATTTAAG", + "start" : 1042162, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1042162, + "genome_id" : 0, + "start" : 1042129, + "strand" : "+" + }, + "seq" : "CAAATATATCTCTTCGCATGTTTCTAAGGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t36" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2669135, + "genome_id" : 0, + "start" : 2669104, + "strand" : "+" + }, + "seq" : "ATTTACATGATGTAACTGAATCTCAGCTTTT" + }, + "gene_name" : "PF3D7_1366800", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2669307, + "genome_id" : 0, + "ref_seq" : "AAAAAAAATACATTTAAATCTATAATATTTGTAATAAATGATAAGAATATTAGTATTAATAGGGTACTACTATTTGTAAATACTTTTCTACATAATTTATCAATAGTAGGAAATATGATATTCTTTTTGTTTGGCTTTATTTTATCTGGGATTTTCCAATCATAAAGTTCGA", + "start" : 2669135, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2669135, + "genome_id" : 0, + "start" : 2669104, + "strand" : "+" + }, + "seq" : "AGCCAGTATTCTTTTTATGAAGTATTTTAACA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t88" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2479086, + "genome_id" : 0, + "start" : 2479055, + "strand" : "+" + }, + "seq" : "CTTATAAAGAGAAATTTTCATGTTAGCGCTT" + }, + "gene_name" : "PF3D7_1361800", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2479246, + "genome_id" : 0, + "ref_seq" : "TCTATGCTTTATCAAAACAAAGTAATCAAAATGTAATACATTATTCTTGTCGATCTATATGTGCTTTTACAAAAAACCCTAAGGGTTTAGAAGCGGTAAAGGATATCAAGGACTTTGCGAATATTATAAGTAAATCTGTTGGTGATTTGAGTAAAGAGAA", + "start" : 2479086, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2479086, + "genome_id" : 0, + "start" : 2479055, + "strand" : "+" + }, + "seq" : "AGTCTTCCTTGATTTCTTTATCCAAGGTA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t86" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2124634, + "genome_id" : 0, + "start" : 2124602, + "strand" : "+" + }, + "seq" : "AATTTGGTTTCAATAAAATTATCAGCTTTCTT" + }, + "gene_name" : "PF3D7_1353100", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2124847, + "genome_id" : 0, + "ref_seq" : "TAACATTTTTTTAACATCTTTACCTTTTTGACTTGGTTCTTTATCATAATTCTGTTGTTCTGCAGAATCAGCATTTACTTCAGTTTCTTCTTTATTTTGAAAAGTGTTTGATTCTACATGAGAATTGGAAGATGAACGTCTATGTTTTACTTCTGTATAACTAGTACGTTCTCCAGTATGATGAGCCTTATGGTTTACATCTTCAGTTTCTTC", + "start" : 2124634, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2124634, + "genome_id" : 0, + "start" : 2124602, + "strand" : "+" + }, + "seq" : "GAAGAATTTTAACACAAGGAGATCATCAC" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t85" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1419543, + "genome_id" : 0, + "start" : 1419519, + "strand" : "+" + }, + "seq" : "GAAATGTCGATTCTCCTCCTTGTG" + }, + "gene_name" : "PF3D7_1335100", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1419670, + "genome_id" : 0, + "ref_seq" : "CTGGTTTTTGTACTTCTTGTCCTTGTGTTGATATCTCTTGTTCATTTTTAGATTGAGTATCTGTTTCACTTTGTGCCTTTACCTTTGATAATACGTTTTTACCGAATAATCCTAAATTTTGGAATAA", + "start" : 1419543, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1419543, + "genome_id" : 0, + "start" : 1419519, + "strand" : "+" + }, + "seq" : "GAAAACAAGGAAAAATCAGAATCATTTCCA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t81" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1150303, + "genome_id" : 0, + "start" : 1150279, + "strand" : "+" + }, + "seq" : "TAACAACCCCTCCATCAACATCTT" + }, + "gene_name" : "PF3D7_1327300", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1150493, + "genome_id" : 0, + "ref_seq" : "CTAAAAAAAGCAAACAAAAAGAAAAGAGAATGGAAGATTTAAGTATTGAGGAAAATTTGAAAGAGAAATTAATAAACCTAAATATTCAGAAACAGTATAGTGGTTTCCATATGAAAGAAATGGAGGAACAAAATATTCCTGAATTAAATATTCCACAACTTTCAGCTATTCATAATAGAGAAGATATGAA", + "start" : 1150303, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1150303, + "genome_id" : 0, + "start" : 1150279, + "strand" : "+" + }, + "seq" : "ACACTTCTATATCTTCTTTCTTCATCATTCTTA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t80" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1725365, + "genome_id" : 0, + "start" : 1725337, + "strand" : "+" + }, + "seq" : "TCGGTATAATAGAAGAGCCATCATATCC" + }, + "gene_name" : "PF3D7_1343700", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1725570, + "genome_id" : 0, + "ref_seq" : "CCCAATACAATAAATTCTACCATTTGACGTAACACCACAATTATTTCTTCTAGGTATATTTAAATTACTTGAAACATACCATACATCTCTTAAACGATCATACACCTCAGTTTCAAATAAAGCCTTATAATCATAGTTATTACCACCAAAAACGTATAAGAAATTATTCAATACAGCACTTCCAAAATAAGCTTTTTTGGTAGAC", + "start" : 1725365, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1725365, + "genome_id" : 0, + "start" : 1725337, + "strand" : "+" + }, + "seq" : "GCTGGCGTATGTGTACACCTAT" + }, + "target_attributes" : + [ + "Included", + "DrugResistance" + ], + "target_name" : "t82" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1876352, + "genome_id" : 0, + "start" : 1876325, + "strand" : "+" + }, + "seq" : "CCAGGACAATTTAAACCTACCAAATGA" + }, + "gene_name" : "PF3D7_1346700", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1876534, + "genome_id" : 0, + "ref_seq" : "TTATATTTTGGTTCAGACAAATGTACGTTACATGAAATATGTGCACTATCATCAACTAAAGAAATATCTAAACTATCTGTAAAAGTATGTTTAGAACTAACATTTGAAGAGAAGTTACATCCGTGTATGACTTTTTTTTCATATTTTGGTTTTAAAACTATTTTATAATTATTATTTTTAAA", + "start" : 1876352, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 1876352, + "genome_id" : 0, + "start" : 1876325, + "strand" : "+" + }, + "seq" : "CAAAAGATGTTAATACAGAATGTACATGCAAA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t83" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 2524962, + "genome_id" : 0, + "start" : 2524931, + "strand" : "+" + }, + "seq" : "ATGATCTTCTCTGAAATTTACTTGAATTGTT" + }, + "gene_name" : "PF3D7_1462300", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 2525089, + "genome_id" : 0, + "ref_seq" : "AAATGAGGTATAATCATCCATTTCGTTGGGTCGATTTGATCTATTTTTAAGGTCCATATATTGAGATGAATCATTATGCATTTTATAATCATGAGGGATATTAGGTGCATGGTATTTAGGGTCTTTA", + "start" : 2524962, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 2524962, + "genome_id" : 0, + "start" : 2524931, + "strand" : "+" + }, + "seq" : "ACCAAACTTTTGGAGATTTCAAGATTATGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t98" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 103659, + "genome_id" : 0, + "start" : 103631, + "strand" : "+" + }, + "seq" : "GAAAAGAAGATCCAACTGACAGAGAAAA" + }, + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 103879, + "genome_id" : 0, + "ref_seq" : "AACTGATGTTAATGAAGGCCAAAATGGAAAACGTTTAACACAAGAAAAAACCCTAAAACAAATTCCTTCGACATCACCAAATAATTTAGAACAAAAATTACAACAAACACATATTTCTTCTTCCCAACAAAAACATTTAATAAAAACTACTCCTACTTCAGATTCAACTACAACTTCATCAAGCTCTTCTGTTCCTCTTACAAAACAATCCCCTCATTCT", + "start" : 103659, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 103659, + "genome_id" : 0, + "start" : 103631, + "strand" : "+" + }, + "seq" : "TGTGTACTAGATAATGCAGGAACTGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t78" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 684088, + "genome_id" : 0, + "start" : 684059, + "strand" : "+" + }, + "seq" : "GTCTACCATTTTTAATCGACTAACTCGAA" + }, + "gene_name" : "PF3D7_1217300", + "insert_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 684261, + "genome_id" : 0, + "ref_seq" : "AATATCAAGATGGTAGTATTGTTTTAGATGTTAGTAGTACGAGAGATAAACTTTATGGAGAAGTTGAGTGGGAAGGATATAAATTTGAACTTGTGGATACAGGAGGTTTAGTTTTTGAACAAGAAAAGTTTTCAAAAGAAATAAAGGATCAAATTCTTATGGCTCTAAAAGAA", + "start" : 684088, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 684088, + "genome_id" : 0, + "start" : 684059, + "strand" : "+" + }, + "seq" : "CATCAACGACAAAAATAACAACTGATGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t74" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 415653, + "genome_id" : 0, + "start" : 415623, + "strand" : "+" + }, + "seq" : "ATGAATTAATAAAAGAACATGGTGGACCTT" + }, + "gene_name" : "PF3D7_0408600", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 415826, + "genome_id" : 0, + "ref_seq" : "ATGCTAGTTTTGCTGCTCATGAAAATAAAAGCTACTCATATGAAAGTCGTACATATAAAATGTATCCACCTGAATTTAATACATTAATGTTAAAAGCAGATTATTTTATAAGAGATATAAATACACGAGGATTTAGAGAAGTAAATATGGATTCATGTAAATCATATACAAAT", + "start" : 415653, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 415653, + "genome_id" : 0, + "start" : 415623, + "strand" : "+" + }, + "seq" : "GACTTGAAAACATTTTAAATTTCTTGTATCCAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t23" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 659891, + "genome_id" : 0, + "start" : 659858, + "strand" : "+" + }, + "seq" : "GTTAATACTGGTACTATTATACCATATGTTGCT" + }, + "gene_name" : "PF3D7_1216600", + "insert_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 660010, + "genome_id" : 0, + "ref_seq" : "GGGTCGACTTTTGGTGGTTTAACATTTTCAGCTACGAGATTTTCGAATGATGGCAATCCTACTTTGATTAATTCCTTTAACATAGATTTTGCGTGTTTTTTTACTTCTGATTTGATATC", + "start" : 659891, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 659891, + "genome_id" : 0, + "start" : 659858, + "strand" : "+" + }, + "seq" : "TCACCAACCTTTTTAGAATCAAGCTTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t73" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 156566, + "genome_id" : 0, + "start" : 156535, + "strand" : "+" + }, + "seq" : "AACTGAAAGTATATACAATAGTACACCTCCA" + }, + "gene_name" : "PF3D7_1302900", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 156722, + "genome_id" : 0, + "ref_seq" : "TATAGAGTTATTATGTTCGAATTAATGACCAGATTATTTCGATTTTATACAAAACCAATAGACCTTATTATTACTATGAATACACACAGATATGACACACCTATATTGTTAAAACATTCAAACAGCTTACAACTTATCTTATCAAATCAACAAAAT", + "start" : 156566, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 156566, + "genome_id" : 0, + "start" : 156535, + "strand" : "+" + }, + "seq" : "AAAAGGATAAGTTAGAATTGCTCATTAATCT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t79" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1816211, + "genome_id" : 0, + "start" : 1816181, + "strand" : "+" + }, + "seq" : "GGGTAGATATCGTTATAAGGGCTATAATGT" + }, + "gene_name" : "PF3D7_1145800", + "insert_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1816425, + "genome_id" : 0, + "ref_seq" : "ATTGACTTCTCCGGGTTGGTTACATTATCATTACAACCAATATTATTAAGGTTAATACTATTTTTATCATTATTATTGTTGTTTTCATTTGTGTGGTTATATAATAACAATGATGTGTCGTCTATTGGATCATTTTGCACAAGGTCAATATCATTAGAATTATGTTTCATATTATTTGTATACATTTTTTTGTAATTATCATTTTTTCTTACTT", + "start" : 1816211, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1816211, + "genome_id" : 0, + "start" : 1816181, + "strand" : "+" + }, + "seq" : "GCCAAAAATACGATGTGATGAAGAATG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t71" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1552430, + "genome_id" : 0, + "start" : 1552397, + "strand" : "+" + }, + "seq" : "AAGGGAAAAATAATGGATAATATAGTTGTGAAT" + }, + "gene_name" : "PF3D7_1139100", + "insert_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1552640, + "genome_id" : 0, + "ref_seq" : "AATATCGACAATTATAAAGAAAAAATAGAAAATTTTAATGAAAGATATTATGAAGATGATTTAAGTTTCTTAAACTTTCCAGGAACCATAACAAGTTATGATAAAAACCATCAAAGAGATAAAAGAAAAAACTGTTTTGAAGAATATCTAGACAATAATAATTATTTTATTGATAGTAATCTAAAGGAAGTTATAGAAAATAATATATAT", + "start" : 1552430, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1552430, + "genome_id" : 0, + "start" : 1552397, + "strand" : "+" + }, + "seq" : "GTCAATTTGCTCCTTATCCATATTCGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t69" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1009856, + "genome_id" : 0, + "start" : 1009831, + "strand" : "+" + }, + "seq" : "AAACTGTGAGCATATCTTGGTTCAG" + }, + "gene_name" : "PF3D7_1125800", + "insert_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1010038, + "genome_id" : 0, + "ref_seq" : "GAATTCTATCTATTTGTTTAATTGGTGTCCATGAATTTTTAGAGAAACACCACATATCAGCTAATAAGGAATTATTAACATCTAATCCTCCATGAATATATAAAAAATCATTAAAACTGAAAGAAGCATGCTTATATCTTGCACGTGGACAAATTTTATTTCCAATAAGTTCCCATTTCTTT", + "start" : 1009856, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1009856, + "genome_id" : 0, + "start" : 1009831, + "strand" : "+" + }, + "seq" : "TGTTGATGAAACATATAAATTTGATTTCCAAGC" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t66" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1750865, + "genome_id" : 0, + "start" : 1750833, + "strand" : "+" + }, + "seq" : "CATCAACATATAGTCGTTATAAAAGAGCACTT" + }, + "gene_name" : "PF3D7_1143800", + "insert_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1751055, + "genome_id" : 0, + "ref_seq" : "TTATTAAAAACAACAAATAAATTACCAAGGTCATGGAAAAAACTCTTGTTAAATCTATCCATTAGATTTCAAACAATACCTATAGGTGGTTCTATCGAAATCATATCAAAGGATGAGAAAAATATTTCTATGACACGATCCAGTGAATATAATGCAACAACATATGAGCATTACACATTTCCCAAATGGT", + "start" : 1750865, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1750865, + "genome_id" : 0, + "start" : 1750833, + "strand" : "+" + }, + "seq" : "GGCGTTTCCTCATTTTCTTTACTATTGT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t70" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 119486, + "genome_id" : 0, + "start" : 119456, + "strand" : "+" + }, + "seq" : "GCTTCCATCTCCTTTATATTCATCAAGAAA" + }, + "gene_name" : "PF3D7_1102500", + "insert_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 119693, + "genome_id" : 0, + "ref_seq" : "TTTCATCCAAGAGTAATTATGTTTTTCTTGTTGATATTTTGCTTTATACAAACGAGCAAGATACTTTTTATACGATTCATGCTCTTTAATTTTCTTTTCAAAAGTTTTGGTTATAATGTGTTCAAGTGATTGTAAAGTATTTTTCTTTAATTTTCTCCATATTAATCTACATGCGATTATAAGAATTCTATATTCTTTGATATTCCC", + "start" : 119486, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 119486, + "genome_id" : 0, + "start" : 119456, + "strand" : "+" + }, + "seq" : "GGAATTTTTAATGAATGGATTAAAACTAGTGAA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t65" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1436479, + "genome_id" : 0, + "start" : 1436451, + "strand" : "+" + }, + "seq" : "CTAGGAATCGAATAAATGAGGAAAAGCA" + }, + "gene_name" : "PF3D7_1036400", + "insert_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1436682, + "genome_id" : 0, + "ref_seq" : "CGAGAAGAAACACGTTTTATCTCATAATTCATATGAGAAAACTAAAAATAATGAAAATAATAAATTTTTCGATAAGGATAAAGAGTTAACGATGTCTAATGTAAAAAATGTGTCACAAACAAATTTCAAAAGTCTTTTAAGAAATCTTGGTGTTTCAGAGAATATATTCCTTAAAGAAAATAAATTAAATAAGGAAGGGAAAT", + "start" : 1436479, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1436479, + "genome_id" : 0, + "start" : 1436451, + "strand" : "+" + }, + "seq" : "ATCGTCATCATCATTTATTATGTGTTCAATTA" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t64" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 531682, + "genome_id" : 0, + "start" : 531656, + "strand" : "+" + }, + "seq" : "CTTTTTGGGCTTATTGTTTGGAAGAA" + }, + "gene_name" : "PF3D7_0113800", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 531900, + "genome_id" : 0, + "ref_seq" : "AAAAGAAAGATGTTAAGAAAAAAAAGATCGATATGATAAATATATTACACATTCCTACAAATAATTATAGCATGCCAAATGAAAAAGATATAAACAGTTATGAATTTTTTGGATCTGAACCTATTGAATTATATGATGTAAAATCTAATAAGAATTGTGTTATAACTAGCCAATCTTATATTTGTATTGAAAACCCGCATGCTGCCATAGTATCCGAA", + "start" : 531682, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 531682, + "genome_id" : 0, + "start" : 531656, + "strand" : "+" + }, + "seq" : "ACTGGATTCTTCTAATATTCTTTGCTCTCT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t6" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 596133, + "genome_id" : 0, + "start" : 596101, + "strand" : "+" + }, + "seq" : "ATTTGTTTTTGTTCTACATCAATAATTGGTTT" + }, + "gene_name" : "PF3D7_0913900", + "insert_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 596334, + "genome_id" : 0, + "ref_seq" : "ATTATTTTCGTTTTTTTTTATATTATCATTATAATTATATGTATTTACAAAGAATTTATTATTATTTGTTTCTTTATAATTATATTCATTTTCTTTATTACTTAAGGAATTTATATTTGATAAAACTTGTTGTCCTCTTTCTTCTTTGTTGATGTGAATATTTGAGAAAATAATAATAAATGTAATGACTAGGGCTATGTT", + "start" : 596133, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 596133, + "genome_id" : 0, + "start" : 596101, + "strand" : "+" + }, + "seq" : "AAATAGAAGTCATATAGGTGACTGGAATCTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t55" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 516928, + "genome_id" : 0, + "start" : 516904, + "strand" : "+" + }, + "seq" : "TGTGGGCGCAAAAACTATAAATGA" + }, + "gene_name" : "PF3D7_0911300", + "insert_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 517092, + "genome_id" : 0, + "ref_seq" : "ATGTTTGTGTAATAAAGGATATTTCTATAATGTCAAGAAACAACAATGTGAAGAATGTCCCATAGGTTTTTATTGTCCAAAAATAAGCTCAAAAAATAATATAAAAAAACCTATCAAATGTCCTAAAAATTCCTCAAGTATAAAAAAAGGTATGTATATATCAA", + "start" : 516928, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 516928, + "genome_id" : 0, + "start" : 516904, + "strand" : "+" + }, + "seq" : "ATTTTGTATATCCAAAATTACATTGACAATTGT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t54" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1309609, + "genome_id" : 0, + "start" : 1309581, + "strand" : "+" + }, + "seq" : "ACGACGAAGAAAACGAAAGTATTGATAA" + }, + "gene_name" : "PF3D7_0532300", + "insert_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1309744, + "genome_id" : 0, + "ref_seq" : "TAATGAAGAAAATATGTCTGACAGACCAAACAGTTTATCTCATGATAAGGATCAACACCTCGATGAAACACATAATGAACAATATGGATTATACGTAAAAGAAATGGAATCTAAAGTTGAAAAATTAGCTGAAAA", + "start" : 1309609, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 1309609, + "genome_id" : 0, + "start" : 1309581, + "strand" : "+" + }, + "seq" : "ACCTCTTGAAATTCCTTTTCAACTTGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t37" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1362891, + "genome_id" : 0, + "start" : 1362863, + "strand" : "+" + }, + "seq" : "CGACTTCTTTAAGAGAACAAACAGAACA" + }, + "gene_name" : "PF3D7_0831600", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1363087, + "genome_id" : 0, + "ref_seq" : "CGTAAAAAAAAAGGGTTTTCCTAAAAAACCATCGGTTCATGGTTTTACACAGATGGTGTTTTTGCAGCTTACTAATATAGTCATGTATGCCCTTTGTTTTATGAGCCTTTCACAAATATATGCTTATTTCGAAAACGTGAATTTTTATATTATAAGCAATTTTCGTTTCCTTGAGAGATATTTTAATATATTCAAT", + "start" : 1362891, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1362891, + "genome_id" : 0, + "start" : 1362863, + "strand" : "+" + }, + "seq" : "AAGTTTTCTTCTGAATAGTTCTACAAAGTATTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t53" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 165235, + "genome_id" : 0, + "start" : 165202, + "strand" : "+" + }, + "seq" : "GGATCCTCTTACAATCTCGAAATAATTATAATT" + }, + "gene_name" : "PF3D7_0703900", + "insert_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 165422, + "genome_id" : 0, + "ref_seq" : "ATCATTATTATTATTATTATAATTATCATTGTTATTATTATTGTTGTTGTTGTTATTATTATTTCCTTTATTATTTAATATGCATTTTTTAATATCCATTTTATTATTTATCATATCAGTACTTTTATTTTTCTCCTTTTCGTTTATAGCTTTTTCCCTATGCACCCTGAATTTCCCATTTTTTTTT", + "start" : 165235, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 165235, + "genome_id" : 0, + "start" : 165202, + "strand" : "+" + }, + "seq" : "ATGGTTTGGTAAGCGAGTTTATGTTATT" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t40" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1344686, + "genome_id" : 0, + "start" : 1344653, + "strand" : "+" + }, + "seq" : "TCTTTTCCATATATAATAACGCATGAATTCTTT" + }, + "gene_name" : "PF3D7_0831400", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1344819, + "genome_id" : 0, + "ref_seq" : "AAATATATCTTTTACTTTATCTGTAAGTTTCATGGAATCTATTATTTCATGTGCATATTTTATTTTTGCCTCGTTTATATATTTACCTGCTTTTAATTTACATAAACATTTTTCTATTAAGTTTTGATCATTT", + "start" : 1344686, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1344686, + "genome_id" : 0, + "start" : 1344653, + "strand" : "+" + }, + "seq" : "TGAGAACAGATGAAGTAACTACTCGATT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t52" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3124642, + "genome_id" : 0, + "start" : 3124614, + "strand" : "+" + }, + "seq" : "CAGATTATTTGGTAATGAACAACCAGGA" + }, + "gene_name" : "PF3D7_1475900", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3124842, + "genome_id" : 0, + "ref_seq" : "TATGGAAAAATGGAATATGAAGTATTAAGTGATGATAACATAGTGTATGAAAATATACAACATGATTTATTAAAAACAATAGAAGATGATGAAGAAATGTTAAAAGGAACTGAAAGGAAGGATAATATAGATATACTGAGGACTCCTGGAAGGGGAGAATATAATATGTGGTCTACTTCTGGACTAGGGTTCTATGAATT", + "start" : 3124642, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3124642, + "genome_id" : 0, + "start" : 3124614, + "strand" : "+" + }, + "seq" : "AGGTCTTCCTAATCTTGAACCATCATAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t99" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1269320, + "genome_id" : 0, + "start" : 1269294, + "strand" : "+" + }, + "seq" : "CTCTTATATCAGGAGCAGCTATAGGA" + }, + "gene_name" : "PF3D7_0829600", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1269456, + "genome_id" : 0, + "ref_seq" : "GCCTTAGCATTAATAACACTTATAGGAGGTATTTATATGACTAAAGGAAGAAAAAGTTCCATATGGCATAATTCAGAAATAAATGATACACTTTATGATGTTGTTCTTGAAACAGTGAATCAAGGAAATACAGATG", + "start" : 1269320, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 1269320, + "genome_id" : 0, + "start" : 1269294, + "strand" : "+" + }, + "seq" : "TTTTACTCCTCTTTGAAAAGCCAACTTTA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t51" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 329378, + "genome_id" : 0, + "start" : 329351, + "strand" : "+" + }, + "seq" : "GTGTTAAAACAACAGGAGGAACACTAA" + }, + "gene_name" : "PF3D7_0508000", + "insert_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 329550, + "genome_id" : 0, + "ref_seq" : "ATTGTGATGTATATAAATTCCCTTCTTCTTTATGTACCACATTATAAGAACCACGAACATATTCTTTTAAAAATGTTAACTTACTTCCAACAAATATATAATCAAAACAAAATTTTTTATTGTCGAAATGTTCTCGTTCAACCCCATTCATATTTCGGATATCATTATTTAA", + "start" : 329378, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 329378, + "genome_id" : 0, + "start" : 329351, + "strand" : "+" + }, + "seq" : "TGTTGTAGAATATTCGTGTCCGTATAGT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t33" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1386700, + "genome_id" : 0, + "start" : 1386672, + "strand" : "+" + }, + "seq" : "TGCTACAGTTATATAGGACGATTTTGGT" + }, + "gene_name" : "PF3D7_1035000", + "insert_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1386869, + "genome_id" : 0, + "ref_seq" : "AGGGAACAGGTTAAATATATTGAAGACGTGGTTTGATAATCAGGTATTTCTTTAATTAAATATTCATGATATTGTTCGTTAGATACATAAATTAATTCGTCCTCCACATTTTGCTGTTCTGTTATAATTTGTGAAGAAGCTTGGTTTGTCTTATTTGGTAATTGCTCTT", + "start" : 1386700, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1386700, + "genome_id" : 0, + "start" : 1386672, + "strand" : "+" + }, + "seq" : "AAAATGAGGACAAGGAAAATAATACATTCATAA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t62" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1358694, + "genome_id" : 0, + "start" : 1358666, + "strand" : "+" + }, + "seq" : "AAGGATCATTTCATTGAAGCCTCTAAAA" + }, + "gene_name" : "PF3D7_0731500", + "insert_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1358911, + "genome_id" : 0, + "ref_seq" : "AAGAATCTCAACTTTTGCTTAAAAAAAATGATAACAAATATAATTCTAAATTTTGTAATGATTTGAAGAATAGTTTTTTAGATTATGGACATCTTGCTATGGGAAATGATATGGATTTTGGAGGTTATTCAACTAAGGCAGAAAACAAAATTCAAGAAGTTTTTAAAGGGGCTCATGGGGAAATAAGTGAACATAAAATTAAAAATTTTAGAAAAAA", + "start" : 1358694, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1358694, + "genome_id" : 0, + "start" : 1358666, + "strand" : "+" + }, + "seq" : "CAAAGTTTCTCTCTAAATTCATTCCACCAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t45" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 2050130, + "genome_id" : 0, + "start" : 2050103, + "strand" : "+" + }, + "seq" : "TTGGTTTTGATTATCTCCCATTTTCGT" + }, + "gene_name" : "PF3D7_1250100", + "insert_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 2050314, + "genome_id" : 0, + "ref_seq" : "TTTTAAACTTTGAATCTGTTCAATTAATAACACTTCATCATTGTCTTCGCCTTTTATAATATCTCCATGATTATGTGCTCCTCTAATTAAGGTATCACTAACCTGTTGTTCATCTGTCGCATGAGAACTAGTAGATATATCTGGTTTATTTTTTTTCTTTCTTTTTGTTATTTCTAATTTTTTT", + "start" : 2050130, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 2050130, + "genome_id" : 0, + "start" : 2050103, + "strand" : "+" + }, + "seq" : "AAAAACATACCTAGACATTTGAATGTCTTAGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t77" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 141963, + "genome_id" : 0, + "start" : 141936, + "strand" : "+" + }, + "seq" : "AAAGCGAATAATGCCAATATGTTGTTC" + }, + "gene_name" : "PF3D7_0302600", + "insert_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 142181, + "genome_id" : 0, + "ref_seq" : "AGCATTTATAACAAAATATCAGAAGATGGAAAAACCAAAAATAGCCTACTTAGCGATATATCTAAATTATTTAAAATTGTAAAAGAAAGCAAATTAATATTTGTAACTGGATTTTTATTAACAACCTTGTCAGCAATTGTCGATTCATACATTCCAATTTTTCTATCCAAAACGGTATCTTTTGTAATGGAAAGAAAAAAATTTACATTTCTTAAAAT", + "start" : 141963, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 141963, + "genome_id" : 0, + "start" : 141936, + "strand" : "+" + }, + "seq" : "TTTTTACAACTGACAAATTTGTTTTGTGT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t15" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 512199, + "genome_id" : 0, + "start" : 512168, + "strand" : "+" + }, + "seq" : "CGAATCAAAGGTAGAAAATGATCTTGAAGAA" + }, + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 512388, + "genome_id" : 0, + "ref_seq" : "TTAAATAAATTAAGTGAAGATGATTATGAAAAAAATTGTAGACATTTAAATTATTTAATAGATAATATAAGAGAATTATTTTTTAGTTCTAAAAATATTAGAATTCCTGATGTAGCTCGTAAATATTTGTGGGATAATCAAATTGAAGGAAATCTCAAAAAATTAATATCTTCAGAAACAAAATATAAA", + "start" : 512199, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 512199, + "genome_id" : 0, + "start" : 512168, + "strand" : "+" + }, + "seq" : "CTGTGGATTATTTATACGATTCCTTTGACA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t5" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 532195, + "genome_id" : 0, + "start" : 532167, + "strand" : "+" + }, + "seq" : "ATCAAGCTGAATCTATCCTATTGGATCA" + }, + "gene_name" : "PF3D7_0612900", + "insert_location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 532378, + "genome_id" : 0, + "ref_seq" : "AGAACAATTGCTAAACACCAAATTGGGTGAAACAAAAAACCACCTGAACAGAACCCCATTTATACCTGAATCGGTCATACGAGAAAGGAAATTACGCCAAGAAAAAGCTCAATCCACAAACAACATGTTCGATTCAACAAACGCAGATAGTATTACGTCCCCATGTGATCCAACGAATGCCAC", + "start" : 532195, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 532195, + "genome_id" : 0, + "start" : 532167, + "strand" : "+" + }, + "seq" : "GTATATTGTTTATTGGGATCCCCTTCC" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t39" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 532690, + "genome_id" : 0, + "start" : 532660, + "strand" : "+" + }, + "seq" : "GGGAAGAATGGTTTAATCGTAAAAATGAAG" + }, + "gene_name" : "PF3D7_0113800", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 532844, + "genome_id" : 0, + "ref_seq" : "ACTTTCTTAATTCTATGAATGAAGAATATACGCATATTAATTTAAATAACTTTATACATAATAATAACCATGATAATGACGAAAATTATACATTAGATCAGGTGGAAGGATATCCTATGACTAGTTATCAAAATAATATATACAAGGATTTTTT", + "start" : 532690, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 532690, + "genome_id" : 0, + "start" : 532660, + "strand" : "+" + }, + "seq" : "GTCTTCGAAATAATGAACTCCCTTTTCT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t7" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 298886, + "genome_id" : 0, + "start" : 298857, + "strand" : "+" + }, + "seq" : "TAGATATATCATTCACAGTCGTCTCATGG" + }, + "gene_name" : "PF3D7_0706100", + "insert_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 299005, + "genome_id" : 0, + "ref_seq" : "ACATTCAATATGGTTCTGAGCTTAAAGATGTTATCCTTATACATGTTTCTATTCTCATTCGTTATAACATCAATGACATATAAAACATATCGCTCAAATATTTTGTGAACAATATTATA", + "start" : 298886, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 298886, + "genome_id" : 0, + "start" : 298857, + "strand" : "+" + }, + "seq" : "TGTTAAGTTTTCTCTTGTGGAATCGAAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t42" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 278165, + "genome_id" : 0, + "start" : 278144, + "strand" : "+" + }, + "seq" : "CTTACCATTCGCGCTTTCTTG" + }, + "gene_name" : "PF3D7_0207000", + "insert_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 278336, + "genome_id" : 0, + "ref_seq" : "GGAATTTTCTTTTTTATGACTTTCTTCTCCTTGTTCAGAAGCTTCTTTTTCATCCTTTTTTTCTGCTGCGTCAGATAAATTGGGGGAAGCACTTGAAGATTCATTTCCTCCAGGAGTATTACTAGTACTTACTCCGTCCACATTTGGTTTTTCTTCCCCTAGAATTCTCAT", + "start" : 278165, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 278165, + "genome_id" : 0, + "start" : 278144, + "strand" : "+" + }, + "seq" : "AATATAGTACCAGAAAATGGAAGAATGTTAAAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t11" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 133491, + "genome_id" : 0, + "start" : 133463, + "strand" : "+" + }, + "seq" : "TTTTGGTTCAGTACTATCTCTTGCATTT" + }, + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 133701, + "genome_id" : 0, + "ref_seq" : "TTAGATTTTTTCCCTCCAGCAGGTGCACTAACTTTAGGTGTTTTAAATCTAGATGTATGTGGAACCCCATCTTTATTTGGTTTACCTCTATTTAATCTTTTACCAGCAGTAGAAACTACATTCTCTCGATTATCATTACCTACTTCAGTCTTTACAATTGTAGGAGGTGTTTTAACATGATTATCCCCTCCATGAGGAGTAACCCTTAAA", + "start" : 133491, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 133491, + "genome_id" : 0, + "start" : 133463, + "strand" : "+" + }, + "seq" : "CGACACCAAATATTCAAGAAGAACC" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t21" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 145343, + "genome_id" : 0, + "start" : 145315, + "strand" : "+" + }, + "seq" : "CAATCAACAAAAGCTGATGAATCATCAT" + }, + "gene_name" : "PF3D7_0603600", + "insert_location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 145501, + "genome_id" : 0, + "ref_seq" : "AATTTGAATAAAATTTATCATTCACAATATTATATTTTTGTTTCTTCTTTTTTCCCATAATATTATTATTTTGTTCACAATATATGTTCATGTGTCCCCTCTTTTTCTGTAAAATATTAAAATGTTTCTTACTATGCTTCTCTTCATTTTTAATAACA", + "start" : 145343, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_06_v3", + "end" : 145343, + "genome_id" : 0, + "start" : 145315, + "strand" : "+" + }, + "seq" : "AAGGAAGGTAGAATATCAAATACAAGGGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t38" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1149415, + "genome_id" : 0, + "start" : 1149387, + "strand" : "+" + }, + "seq" : "TGGACATGTAGATATTTGACTAGTCGAA" + }, + "gene_name" : "PF3D7_0727000", + "insert_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1149585, + "genome_id" : 0, + "ref_seq" : "TAATATTTAATATTTTTGTTTAGGAAGTTTTCAAAATTGATGACATTGATAACCGTTTTTATTAAATCGCTTGGGTTGTTTGTGTGTTCCATTGTAGAAGACATAATTTTAAGAATGTGTTTTTGTGTTATTAAACAAAACTTTGTTACTATATGGAATCGTATGTTATA", + "start" : 1149415, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 1149415, + "genome_id" : 0, + "start" : 1149387, + "strand" : "+" + }, + "seq" : "TGTATACTCTCACATATTCCCTTCAGTG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t44" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958389, + "genome_id" : 0, + "start" : 958362, + "strand" : "+" + }, + "seq" : "TTTAGAACAAGTGAGTTCAGGAATTGG" + }, + "gene_name" : "PF3D7_0523000", + "insert_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958506, + "genome_id" : 0, + "ref_seq" : "TACGAAATTTATAACAATTTTTACATATGCCAGTTCCTTTTTAGGTTTATATATTTGGTCATTAATAAAAAATGCACGTTTGACTTTATGTATTACTTGCGTTTTTCCGTTAATTTA", + "start" : 958389, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958389, + "genome_id" : 0, + "start" : 958362, + "strand" : "+" + }, + "seq" : "TTTACTTTCTTATTACATATGACACCACAAACA" + }, + "target_attributes" : + [ + "Included", + "DrugResistance" + ], + "target_name" : "t35" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2481106, + "genome_id" : 0, + "start" : 2481079, + "strand" : "+" + }, + "seq" : "AGAAGATAAGCAATTATGGCAAAAGGT" + }, + "gene_name" : "PF3D7_1361800", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2481288, + "genome_id" : 0, + "ref_seq" : "GCAACTTACTTTAGAAGCCATGAATTCGGCCGATGATCCATTGGAAGCATTTAAAAATACTTTATTAATATTTGATTTTAATTTATCTGAATTTGATAAGGATCCATATATAAATGGTGTGCATGATTTAGCATCTAATATAAAGGATTGTTTAAGAAAAGGAGGTCACAGTAAAATATATT", + "start" : 2481106, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2481106, + "genome_id" : 0, + "start" : 2481079, + "strand" : "+" + }, + "seq" : "TCCATTTAAATAATAACCTTTGATCACTTTGAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t87" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 850816, + "genome_id" : 0, + "start" : 850788, + "strand" : "+" + }, + "seq" : "CCATTTTTATCTACACGTACTACATGCA" + }, + "gene_name" : "PF3D7_0320400", + "insert_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 850989, + "genome_id" : 0, + "ref_seq" : "TCATATTCGTTTCAGCGTTTATAGAGCGAATATTATCGATTATGTCTATATTCCCTAAAATATGTACATAATAATCTCCATTTAATAATGTTACTTTCTTAAGAATATTTTTGTATATGACATCAAAGATATTACGAGTTAACAATACATCTACATTTCCGTCTATTATATAT", + "start" : 850816, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 850816, + "genome_id" : 0, + "start" : 850788, + "strand" : "+" + }, + "seq" : "AAATGTCTCTAAGAGTTACAGGAACAGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t19" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958059, + "genome_id" : 0, + "start" : 958027, + "strand" : "+" + }, + "seq" : "AAATGTTTACCTGCACAACATAGAAAATTATT" + }, + "gene_name" : "PF3D7_0523000", + "insert_location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958221, + "genome_id" : 0, + "ref_seq" : "ATTTATATCATTTGTATGTGCTGTATTATCAGGAGGAACATTACCTTTTTTTATATCTGTGTTTGGTGTAATATTAAAGAACATGAATTTAGGTGATGATATTAATCCTATAATATTATCATTAGTATCTATAGGTTTAGTACAATTTATATTATCAATGAT", + "start" : 958059, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_05_v3", + "end" : 958059, + "genome_id" : 0, + "start" : 958027, + "strand" : "+" + }, + "seq" : "TTTGATGTAATTACATCCATACAATAACTTGAT" + }, + "target_attributes" : + [ + "Included", + "DrugResistance" + ], + "target_name" : "t34" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1992289, + "genome_id" : 0, + "start" : 1992261, + "strand" : "+" + }, + "seq" : "TTTTACTTTTGCTACCATCAGGCATAAT" + }, + "gene_name" : "PF3D7_1448500", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1992426, + "genome_id" : 0, + "ref_seq" : "ATAAACACCAGTACCATTTTTTTCTGATAAATTAATATTTTTTTGTATAACATCATATTTATCCCTTTTCGTGGTAAGTGCAGTATCCTGTTTTATTATTATATTATCGAATTCATCATGGTGTATATTTCTTTCAT", + "start" : 1992289, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 1992289, + "genome_id" : 0, + "start" : 1992261, + "strand" : "+" + }, + "seq" : "ATCTTATTATGAAAGCTGTACATCCGATTTTA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t97" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1406405, + "genome_id" : 0, + "start" : 1406375, + "strand" : "+" + }, + "seq" : "CAGATTATCATAGTGTTGTGGATGAAGATT" + }, + "gene_name" : "PF3D7_0935600", + "insert_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1406541, + "genome_id" : 0, + "ref_seq" : "TAATTAATTTTAATGATGATGTTACTTTAGAAACACAATCCATGATAGCACACGGAGGGTCTTTGTCAGAAATAGAAGAAACTGGAGATTTATCTTCAGATGTTGATAGATTACATTCATCAATCGAAACTACTCC", + "start" : 1406405, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1406405, + "genome_id" : 0, + "start" : 1406375, + "strand" : "+" + }, + "seq" : "ATCACCTCGTATATATACAACATCATCTCTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t58" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1037634, + "genome_id" : 0, + "start" : 1037602, + "strand" : "+" + }, + "seq" : "ATTGAAGTACAATATGAAATCGATCTTGATAA" + }, + "gene_name" : "PF3D7_0422500", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1037844, + "genome_id" : 0, + "ref_seq" : "ATCTTATAAAGTTAATGAAATAGCTCAACTTAATTTAACCATAGAAAGAGATTTAACAGATGATGCTGTGATTTTTGCACACTCACTTTATTTACCATTTGAAAAAGAAGAAATGTGGTGGATCGTTATCGGAATTAAAAAAATGAACTTACTTTTATCTATCAAAAAATTATCTTTATTGAAAAGTGTCAATAATATAAAAATTAATTT", + "start" : 1037634, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1037634, + "genome_id" : 0, + "start" : 1037602, + "strand" : "+" + }, + "seq" : "GTATTTGGTTTGTCAGGCAATTCG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t28" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 1237431, + "genome_id" : 0, + "start" : 1237407, + "strand" : "+" + }, + "seq" : "CGAATGCTTGTGTGATCAATGAAA" + }, + "gene_name" : "PF3D7_1230000", + "insert_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 1237603, + "genome_id" : 0, + "ref_seq" : "AGTATGAACACAAAACCGAAAGAGAGTTTAAAAAAAGATTCGATTTTAATGAAGGAAGAAATAACATAATAAATGTGTCAAATGTAAAGAAAACATGTAATATAGTTAAAAATGATTTAAAGGAATCTAACGAGATAAAAACTAATATAAACACAAGTTCTTATAATTTATA", + "start" : 1237431, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 1237431, + "genome_id" : 0, + "start" : 1237407, + "strand" : "+" + }, + "seq" : "ACCTCTTTCAAAACATTCTCTTTTATTAATACA" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t76" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1128489, + "genome_id" : 0, + "start" : 1128461, + "strand" : "+" + }, + "seq" : "CTGTCGCAAAAGAAGGTTTTGATAATAT" + }, + "gene_name" : "PF3D7_0424900", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1128673, + "genome_id" : 0, + "ref_seq" : "ATTGAAAGAGTTAAAGGGAAAAATACAAAATTATTTAGATAATGATATTCAATTGAAAAATGGAAAACTCCTATATAAGGATACATGGGATAGAATTGTTTTGAAATTTTGTAGAACTGTAGCAATAGAAGAGGCAGAATACACTAGAAAATTTTATAGCTTAATTAATGATAAACATACAATT", + "start" : 1128489, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1128489, + "genome_id" : 0, + "start" : 1128461, + "strand" : "+" + }, + "seq" : "ATGAATGAATAAATCAATTTTACCACGTCATT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t32" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 39953, + "genome_id" : 0, + "start" : 39920, + "strand" : "+" + }, + "seq" : "CCAACTATATCTGTTCCATAAATGGTTATATTT" + }, + "gene_name" : "PF3D7_1401100", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 40137, + "genome_id" : 0, + "ref_seq" : "ACATAGAAATATGTGCGAAAATTGGGAAAAAAATAAATAACAGGAATTGTTATATAAATTGAATCAAGAATGGCACAAAGAAAATAATACTGGTGACTTTCACACTAGTGATATCACACACAATAGTGGTATTACATACAGTAGTGGTAACATACCTAGTGAAAGTAATAGTAGTTATATCCAA", + "start" : 39953, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 39953, + "genome_id" : 0, + "start" : 39920, + "strand" : "+" + }, + "seq" : "ATTTATTTGGATTGAGATCTTAATGTTCAAAGT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t89" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1018953, + "genome_id" : 0, + "start" : 1018920, + "strand" : "+" + }, + "seq" : "GCTATACTACTACTTATGTTACTTATACCACAT" + }, + "gene_name" : "PF3D7_1126100", + "insert_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1019085, + "genome_id" : 0, + "ref_seq" : "CTAGTGACTGTACATTTTTCATCTAATGTTCTATAGGATAAAGAATCTGAAGGACAATGCATATCATTACAAAAATAGCATGCACCTTTAAAATATAAATAAGAATGTCTTAACACAACAAAGGAATCAAAA", + "start" : 1018953, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1018953, + "genome_id" : 0, + "start" : 1018920, + "strand" : "+" + }, + "seq" : "CTCCTTTAGGTATTACGGTAGCAATAAG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t67" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 221363, + "genome_id" : 0, + "start" : 221330, + "strand" : "+" + }, + "seq" : "GGAACAAGAAGGATAATACCATTATTAATCCTA" + }, + "gene_name" : "PF3D7_0304600", + "insert_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 221495, + "genome_id" : 0, + "ref_seq" : "TTGAACTATTTACGACATTAAACACACTGGAACATTTTTCCATTTTACAAATTTTTTTTTCAATATCATTTGCATAATCTAATTCGTCTTTAGGTTTATTAGCAGAGCCAGGCTTTATTCTAACTTGAATAC", + "start" : 221363, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 221363, + "genome_id" : 0, + "start" : 221330, + "strand" : "+" + }, + "seq" : "CCCATGTAGTGTAACTTGTGGAAATG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t16" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748533, + "genome_id" : 0, + "start" : 748500, + "strand" : "+" + }, + "seq" : "AGATGTTTATATCATTAACAAAGTTGAAGATCT" + }, + "gene_name" : "PF3D7_0417200", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748696, + "genome_id" : 0, + "ref_seq" : "AATAGTTTTACTTGGGAAATTAAATTACTATAAATGTTTTATTATAGGAGGTTCCGTTGTTTATCAAGAATTTTTAGAAAAGAAATTAATAAAAAAAATATATTTTACTAGAATAAATAGTACATATGAATGTGATGTATTTTTTCCAGAAATAAATGAAAAT", + "start" : 748533, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748533, + "genome_id" : 0, + "start" : 748500, + "strand" : "+" + }, + "seq" : "ACATCGCTAACAGAAATAATTTGATACTC" + }, + "target_attributes" : + [ + "Included", + "DrugResistance" + ], + "target_name" : "t26" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 166035, + "genome_id" : 0, + "start" : 166002, + "strand" : "+" + }, + "seq" : "AGGATATGTTCTTTTTAAAGTTCTCTTCATTTT" + }, + "gene_name" : "PF3D7_0703900", + "insert_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 166167, + "genome_id" : 0, + "ref_seq" : "CTTTTATTTGAACTTTTTTATTTTCTTCATTATCAATATAAAAACAACAATCTTTAAATTTATGAAATAACACCCAACTTAATGTATAAAATATAATTTCTATAAAATCAAAATTAATGTAATAACCTAATT", + "start" : 166035, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 166035, + "genome_id" : 0, + "start" : 166002, + "strand" : "+" + }, + "seq" : "CGTTAAATGTAGAAAAGACGAAATCATCCA" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t41" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1376185, + "genome_id" : 0, + "start" : 1376159, + "strand" : "+" + }, + "seq" : "CTGCAAATTGAGCCATAGAAAAATGA" + }, + "gene_name" : "PF3D7_1135100", + "insert_location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1376372, + "genome_id" : 0, + "ref_seq" : "TTCTCATTCCTTTGAAAATATGAACTATTCAACTCATCAAGTTTTTCATATGTTATTTCATAACTGCCATCATCTGAATCCTCTTCATCACTACTACTTAAAGAATGCTCTTCTACAGTTATATCTTCATAATGATTATTTTTAGGAAAATATTCTTCAGATCTTTCTATAAATTCTGTTCCACTAC", + "start" : 1376185, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_11_v3", + "end" : 1376185, + "genome_id" : 0, + "start" : 1376159, + "strand" : "+" + }, + "seq" : "CGATAACACTAGATGTAAGATATGCATCAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t68" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1113450, + "genome_id" : 0, + "start" : 1113422, + "strand" : "+" + }, + "seq" : "GATTCTGCATGCAGTAATGAATCTATTG" + }, + "gene_name" : "PF3D7_0424600", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1113604, + "genome_id" : 0, + "ref_seq" : "AAATCATCTAAGAATAAACTTTTTTGTTTAAACCATTTATTGAACATTTCACTTAAATGTGATTCAATTTTTTTTTCTGAGCTTTCCATAATTTGATTACAACTATTCAATTTGTTTGTATAAGTTTTAGGTCTTATTATTCTTTTACGTTTTA", + "start" : 1113450, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1113450, + "genome_id" : 0, + "start" : 1113422, + "strand" : "+" + }, + "seq" : "CGTAGCATGCTCAGATATTATGATGATT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t31" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 495971, + "genome_id" : 0, + "start" : 495941, + "strand" : "+" + }, + "seq" : "GCCACCAAAATATTATATACCACAAGACAA" + }, + "gene_name" : "PF3D7_0113100", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 496143, + "genome_id" : 0, + "ref_seq" : "TGAAAGTAGCGAATACCCTGTAGAAATTGTTAGTAAACCTCTGGAATGGTTATTGTTTCATGATTTGACTAAGCCTGATGTTACTGCACTACCTGAAGAATTACCATTAACGAGCTATAAAGTAACACCTACTTCTATTAATGTATTGCATAAAGAGGGCCCCACTTTAAAA", + "start" : 495971, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 495971, + "genome_id" : 0, + "start" : 495941, + "strand" : "+" + }, + "seq" : "AAGGAAAATCTTTGGTGGGAAAAATAGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t4" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 377095, + "genome_id" : 0, + "start" : 377062, + "strand" : "+" + }, + "seq" : "AAACAAATAGCATTCGATAAATTTGAAAATTTC" + }, + "gene_name" : "PF3D7_1009200", + "insert_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 377209, + "genome_id" : 0, + "ref_seq" : "AACCAAAAAATGATACCTGTACGTTTTTCTCCAGGAGAAACAAAAAAATTAGAAAGGATTCTCAAAAAAGTAGACGACTTTTTCTGTGCCAATATTAAAGCTCAATATACTTGC", + "start" : 377095, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 377095, + "genome_id" : 0, + "start" : 377062, + "strand" : "+" + }, + "seq" : "CTTCATCTATATAGTCCCCGATGAATGA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t60" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 181557, + "genome_id" : 0, + "start" : 181524, + "strand" : "+" + }, + "seq" : "TCTATTAGCTTTTTCAAACCTTTCATTATTGTT" + }, + "gene_name" : "PF3D7_0104100", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 181673, + "genome_id" : 0, + "ref_seq" : "TTCATTCTTTTTTTAACGAAAACTATTCATCTCAAAAATATAAGATATTTTATATGACGAATGCCATTGTATTTTTTGTTACGTAAAACCTGACTTCTTCAAGGAAAACACATGCG", + "start" : 181557, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 181557, + "genome_id" : 0, + "start" : 181524, + "strand" : "+" + }, + "seq" : "AGCTTAGGCAAAAATTGGTGAAAATG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t3" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 992371, + "genome_id" : 0, + "start" : 992338, + "strand" : "+" + }, + "seq" : "TGCCTATCATTAATGGAAAATATCCTCATTATA" + }, + "gene_name" : "PF3D7_1023700", + "insert_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 992544, + "genome_id" : 0, + "ref_seq" : "TTTTTAAAAAAAAAAATTATGATATAAAATCTTCAATTAATAAAAGATCTATCCAGTTCTTTAAAGACACTAATATAGATCATTATATAGCATATGAATATTATAAGGAGGACCGTACGGAATTTATATTAACTATTATGAATGAAAAAAATATTACTCATCAAGAAACTCAA", + "start" : 992371, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 992371, + "genome_id" : 0, + "start" : 992338, + "strand" : "+" + }, + "seq" : "TCCCTTTCAACTTTTTCATTTCAAGACT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t61" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 407379, + "genome_id" : 0, + "start" : 407346, + "strand" : "+" + }, + "seq" : "TCGTCTTTCTGTTCATTATCCATATAATCTTTT" + }, + "gene_name" : "PF3D7_1410300", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 407571, + "genome_id" : 0, + "ref_seq" : "TCTCCTTCCTTTTCATTCTTTACTTTATTTCTATTAATACACAACTCTCCTTGAGTTAAGAGATTTACGATATTATCAATATTGTTTTCTTTCATATACTTCAACTTTTTACTATTCATTTTTAAAAGATAATTAACCAAGTTACTCATGTTTGTATTAGATGGTATGTTCCCAATTTTTTCGTCTTTTCTT", + "start" : 407379, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 407379, + "genome_id" : 0, + "start" : 407346, + "strand" : "+" + }, + "seq" : "TGAACTCTTTAAATTATCCTTTTTGAATATCCA" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t93" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1102389, + "genome_id" : 0, + "start" : 1102362, + "strand" : "+" + }, + "seq" : "CGTAGAGGTGTTGATGTTAATATGGAG" + }, + "gene_name" : "PF3D7_0424400", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1102578, + "genome_id" : 0, + "ref_seq" : "GAAGAAATAAATAAAATAATTTATACAAACGAATTTAATAATTATGAAGATAAAATATATGAAGATGTCAAATATATTAAAGAACAGGAAAATGAAATGTACTTGAGAGATGGAATTGAAGAGTTACATATGGATGAACCAAGTGGGGATGTATATTTTGATGATCAAGATGATTATATATTTTTAGAT", + "start" : 1102389, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1102389, + "genome_id" : 0, + "start" : 1102362, + "strand" : "+" + }, + "seq" : "CATCCAAACATACATCCTCTTTTTGTTC" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t30" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2114975, + "genome_id" : 0, + "start" : 2114942, + "strand" : "+" + }, + "seq" : "TGTATCTATAGTCGATTTTGTTATTCTAAGCAT" + }, + "gene_name" : "PF3D7_1352900", + "insert_location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2115142, + "genome_id" : 0, + "ref_seq" : "ATCATTAAGTAAAAAATTTACGGTATCGACATTAACAGTGTAATAATTTCTTCCTAAATTTAAATGTTCTATATAATTCAAATTTAATACGGTATTTAACCTTTCTTCAAGTATTATCATTGCATTAATTTGAAACATAAGTAAAAAATTATTAGCACTTCTAAAAT", + "start" : 2114975, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_13_v3", + "end" : 2114975, + "genome_id" : 0, + "start" : 2114942, + "strand" : "+" + }, + "seq" : "ACATTTTATTGTTGTTAGAATACCTCTAGTTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t84" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 63166, + "genome_id" : 0, + "start" : 63135, + "strand" : "+" + }, + "seq" : "ACATTCTATTAAAAACTTTGGGTACTCCTAA" + }, + "gene_name" : "PF3D7_1200700", + "insert_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 63280, + "genome_id" : 0, + "ref_seq" : "TATAATTTCACCTTTTGAATTACATATGTCTGTATTCAAAAATTTTATATCTCTACTCCATATATTTATCTTTACACCCAAAAACAAAGCAATGAAAAAAACAACCCTTTCATA", + "start" : 63166, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 63166, + "genome_id" : 0, + "start" : 63135, + "strand" : "+" + }, + "seq" : "ACACATTTATCTTATTTACCCGTATCTCATATA" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t72" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 141778, + "genome_id" : 0, + "start" : 141751, + "strand" : "+" + }, + "seq" : "GATACACGTGATGAATACCATATAGCC" + }, + "gene_name" : "PF3D7_0402300", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 141945, + "genome_id" : 0, + "ref_seq" : "CTTTCAAATTATATAAAGACAGAACTAAGAAATATAAACCTGCAAGAAATAAAAAACAATATAATAAAAATATTTAAAGAATTCAAATCTGCACACAAAGAAATTAAAAAAGAATCAGAACAAATTAATAAAGAATTTACCAAAATGGATGTCGTCATAAATCAATT", + "start" : 141778, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 141778, + "genome_id" : 0, + "start" : 141751, + "strand" : "+" + }, + "seq" : "AGATCAAGCATTTGTCTGTCTATATCTCTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t22" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1399544, + "genome_id" : 0, + "start" : 1399515, + "strand" : "+" + }, + "seq" : "GGTCAAACTCATTCTGAATTAAATCCTGA" + }, + "gene_name" : "PF3D7_1035300", + "insert_location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1399711, + "genome_id" : 0, + "ref_seq" : "AACATCAGAACATAGTAAAGATTTAAATAATAATGATTCAAAAAATGAATCTAGTGATATTATTTCAGTAAATAATAAATCAAATAAAGTACAAAATCATTTTGAATCATTATCAGATTTAGAATTACTTGAAAATTCCTCACAAGATAATTTAGACAAAGATACAA", + "start" : 1399544, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_10_v3", + "end" : 1399544, + "genome_id" : 0, + "start" : 1399515, + "strand" : "+" + }, + "seq" : "GTTTTTGATTAGGAAAAGGTTCTGTTGAAA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t63" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748230, + "genome_id" : 0, + "start" : 748200, + "strand" : "+" + }, + "seq" : "AGGTCTAGGAAATAAAGGAGTATTACCATG" + }, + "gene_name" : "PF3D7_0417200", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748436, + "genome_id" : 0, + "ref_seq" : "GAAATGTAATTCCCTAGATATGAAATATTTTTGTGCAGTTACAACATATGTGAATGAATCAAAATATGAAAAATTGAAATATAAGAGATGTAAATATTTAAACAAAGAAACTGTGGATAATGTAAATGATATGCCTAATTCTAAAAAATTACAAAATGTTGTAGTTATGGGAAGAACAAGCTGGGAAAGCATTCCAAAAAAATTTA", + "start" : 748230, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 748230, + "genome_id" : 0, + "start" : 748200, + "strand" : "+" + }, + "seq" : "ACAATATAACATTTATCCTATTGCTTAAAGGTT" + }, + "target_attributes" : + [ + "Included", + "DrugResistance" + ], + "target_name" : "t25" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 85440, + "genome_id" : 0, + "start" : 85407, + "strand" : "+" + }, + "seq" : "ACCCATAGAAATGTTAAATGATATTTTTCTTCT" + }, + "gene_name" : "PF3D7_0301400", + "insert_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 85646, + "genome_id" : 0, + "ref_seq" : "AACTTTTTAACACTATCATTATAATTATGTCTTTTATTTTCATATTTTTCTTTATAATAATTTATATCCTTTAATTTTTCTTTCATCAAATTTAACCATTTATCATTTAAATTCTCTTTTTCCACAGCTCCAGCATTTTTATTTATATCATCTACAACTACATCTTCCTTCACATAATTATTTATATAAAAATTATTATCATCTAA", + "start" : 85440, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 85440, + "genome_id" : 0, + "start" : 85407, + "strand" : "+" + }, + "seq" : "GAAGAAGTATTAAATGAAGAATTTTCAGATGCT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t14" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 109912, + "genome_id" : 0, + "start" : 109879, + "strand" : "+" + }, + "seq" : "TTTTAAAACTGGCAAATTATTTATTTCTGTCAT" + }, + "gene_name" : "PF3D7_0401900", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 110087, + "genome_id" : 0, + "ref_seq" : "AATATTTGTATATATTCTAGTAAACACTTTAGGTACACCTGCAAGTACCTCAACATCTGAATTATATAAATCTTTAGAAAAACAACTAATATCCTTACTCGATATATTTATTTTTATACCAAGAATAACAGCCATATAAACCAAAACTCTCTCAAATACATGTGATACAGGTAAA", + "start" : 109912, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 109912, + "genome_id" : 0, + "start" : 109879, + "strand" : "+" + }, + "seq" : "CATGAAACCGAAAACCCATTTTTCTTA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t20" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 729975, + "genome_id" : 0, + "start" : 729943, + "strand" : "+" + }, + "seq" : "AATAAGAAATATGTCTTACAAGGAGATGTTTT" + }, + "gene_name" : "PF3D7_0716700", + "insert_location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 730088, + "genome_id" : 0, + "ref_seq" : "TTTTATGTGAAATTTTAAATAAAGAGAAATTGTTTGTGCACACATCTATTTTGGGATATATATCTAATCGTTTATGTTACGATATAAAAAAATATAGATGTTCATTATTGAAG", + "start" : 729975, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_07_v3", + "end" : 729975, + "genome_id" : 0, + "start" : 729943, + "strand" : "+" + }, + "seq" : "AAACATTATGTAGTCAACATATGAAGGAAA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t43" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 534941, + "genome_id" : 0, + "start" : 534908, + "strand" : "+" + }, + "seq" : "TGTATGTGTGTTGATTGTAATTATAAGAATTGT" + }, + "gene_name" : "PF3D7_0113800", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 535110, + "genome_id" : 0, + "ref_seq" : "AATACTCCGTCAGATATTCAAAATGAATGTATTTGTTCAAAAATAAATGAAGATAGAAATAATGATATGATAAACATATCTGAAATATATTATCGTTTCATTAAATTTATAACAATGATTGAAATATATTTGTGTGTAATAGAGGAAATTAAAAGGGAAGAATGGGAAA", + "start" : 534941, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 534941, + "genome_id" : 0, + "start" : 534908, + "strand" : "+" + }, + "seq" : "CTACAAAAATTATGAAAAAGTTTGGTTCCTTTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t9" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 685601, + "genome_id" : 0, + "start" : 685583, + "strand" : "+" + }, + "seq" : "CACGCGAACCAAACAACG" + }, + "gene_name" : "PF3D7_0916400", + "insert_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 685792, + "genome_id" : 0, + "ref_seq" : "ACAAAGGAACAAGATAATTTTTTCCATTTTTATAAAAGTAATATATATGATATGGAAAATAGAACCTGTAATAATAATATATTACAATATTGTGTTATGAATAATAAATCATATTTATTTCATAATATATCATCCAAAAAAAATATATATATAAAAAAAAAGAATCATCAGTTTTCTTTATTCATATATTC", + "start" : 685601, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 685601, + "genome_id" : 0, + "start" : 685583, + "strand" : "+" + }, + "seq" : "GGGCGAAATTCTATGAATGTATTATTAATAGAA" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t56" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 470492, + "genome_id" : 0, + "start" : 470459, + "strand" : "+" + }, + "seq" : "TGAACATGAAGAATATTGACATGAAACATTATA" + }, + "gene_name" : "PF3D7_0211700", + "insert_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 470676, + "genome_id" : 0, + "ref_seq" : "ATACACATAAGAAAAAAAAAATTTATTTATTCTTACAAAAAGAATATAAAAACAAAATTTTGGGATTTATAAATTTTTATAAACATATAACACACAAAATAAAAAAGAAACAAGAAAATGTTCATGATAAAATCACTTTTTTAAAATGTCTAAAGGAACTCTTTTTTGTCACACATACAAATAA", + "start" : 470492, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 470492, + "genome_id" : 0, + "start" : 470459, + "strand" : "+" + }, + "seq" : "GTATGTATTATACCCTCCATTTGATTATTCTCT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t12" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 145449, + "genome_id" : 0, + "start" : 145416, + "strand" : "+" + }, + "seq" : "TGTTCGATATGTTTAAATATATGATTCTCGAAA" + }, + "gene_name" : "PF3D7_0103300", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 145622, + "genome_id" : 0, + "ref_seq" : "AAACTTTTTTTATTTTTTTTGTCAATAGATAAATGATCAATATTTTCTATATTTAATCTATCAAGTATTTTTATATATCTATTATTTCTTTCTTCGATGGATAAATTATAAGAATCAATATCCTTTCTTTCATCAACAAACTTTTTTATTGTTAACTCCATTTTTTTATTTAA", + "start" : 145449, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 145449, + "genome_id" : 0, + "start" : 145416, + "strand" : "+" + }, + "seq" : "CCAATATGTCAAGGTATATTAAAGTATGGTATC" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t1" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 339168, + "genome_id" : 0, + "start" : 339139, + "strand" : "+" + }, + "seq" : "TGAGATAATCCTCCTGGAATATTTGTCAT" + }, + "gene_name" : "PF3D7_0806300", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 339357, + "genome_id" : 0, + "ref_seq" : "ATCATTACTATTCTTTATCCATATATATGTTGTTATATCAGTTGCACCTGAGGGTGGATTCAAACCTCTTGCTTGTATAATATATGCACGTACTACTAAATTACGTGTTAATCTATATTCTCTTACTAAATCATCACATTTCTTTATCATTTCTTTTTTTAAATACATTGTCTTTTCATCATACACATT", + "start" : 339168, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 339168, + "genome_id" : 0, + "start" : 339139, + "strand" : "+" + }, + "seq" : "CTGAAGCGGTTGGATATTTGAAATATATATGT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t48" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1100656, + "genome_id" : 0, + "start" : 1100629, + "strand" : "+" + }, + "seq" : "CCCAAAACGGTTAATACTGAAGTTAGA" + }, + "gene_name" : "PF3D7_0424400", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1100831, + "genome_id" : 0, + "ref_seq" : "AATGTTCTAAGATCTGATGGAAAAATATCTGATCAAGGTTCTCAGAAAAGTCCTCCTAAGGAACTTTCTAATAAACAAATGACTCCTGCTCAACGTAAGAATGTGCCACATTTTGTTGAAAGAAGAGGCTATGGAAATAGTCATGTTAGGGGTAACGCACTTAAAAAAATTAGTA", + "start" : 1100656, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 1100656, + "genome_id" : 0, + "start" : 1100629, + "strand" : "+" + }, + "seq" : "AGAAGAAGGACTTTTATAATTATCATCACCAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t29" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 179903, + "genome_id" : 0, + "start" : 179874, + "strand" : "+" + }, + "seq" : "AACAACAAGCTTTGTCGCTAAAATTAATT" + }, + "gene_name" : "PF3D7_0104100", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 180115, + "genome_id" : 0, + "ref_seq" : "CTTTCGATACAGGACATATAGATCATAATATAAACGAATATGAAAAACATTTTACAATTTTAAAAGAATCTTTTTTTCATAAGTCATTAAAATTTATGGATTATATATGGATTGTTATAATGAAACGAGAAAATAATACATTTTTAAATAGAATAAGAACTGAACAAGTCAAAAAATCGTTATTAATAACAGGTATTATAAACGAAAATATT", + "start" : 179903, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 179903, + "genome_id" : 0, + "start" : 179874, + "strand" : "+" + }, + "seq" : "TCTGATACCTATAGCTTCCATATTTTCATATTT" + }, + "target_attributes" : + [ + "Excluded", + "Microhaplotype" + ], + "target_name" : "t2" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 120215, + "genome_id" : 0, + "start" : 120188, + "strand" : "+" + }, + "seq" : "GTCCTTATCACATCCTCCATTGTTTAC" + }, + "gene_name" : "PF3D7_1403200", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 120351, + "genome_id" : 0, + "ref_seq" : "CTTACAATGTTCTTCGCATTCGAAATTTTTTTCAGGATTACTTGAAAAGCCTTCTGGACAATTACAATATTCATATCCATGAGTATTCTTACAAACACCTTTTCCACAATTTAAAAAACATTTTTCTTCATTTAAA", + "start" : 120215, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 120215, + "genome_id" : 0, + "start" : 120188, + "strand" : "+" + }, + "seq" : "ACAGAAAGAATGGTTTAGAAATGTACGAAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t90" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 534215, + "genome_id" : 0, + "start" : 534182, + "strand" : "+" + }, + "seq" : "TTCAGATGTGATAAATATATGTGACATTTGTAA" + }, + "gene_name" : "PF3D7_0113800", + "insert_location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 534368, + "genome_id" : 0, + "ref_seq" : "TGATAAAAAAAGAAAATGTAACAATCTACCTTGTGATTGTATCTTATGTAAAAAAAAGCACAATGTTTGTTATTGTAATATGTGTAAAAAGAAAGAAAAAAATATGAGAGAAGATTTATCGGTTGTAAAATATAATGAATATCCGATTAGTGT", + "start" : 534215, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_01_v3", + "end" : 534215, + "genome_id" : 0, + "start" : 534182, + "strand" : "+" + }, + "seq" : "AAAAATATAAGAGATTCAAAGGGTCAGAC" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t8" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 336468, + "genome_id" : 0, + "start" : 336438, + "strand" : "+" + }, + "seq" : "AATACATGAATATGATTAACAACGAACCCA" + }, + "gene_name" : "PF3D7_0806200", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 336647, + "genome_id" : 0, + "ref_seq" : "TAAATTTACAGAAAAATTTAGATTTAATCATATGGCTAAAAAAGAATATAAAAGAAGGAGAAGCTTTAATTTCTGATATACCCACATCAAGTTTTTTAAGGTGTACTACAAATTATAAATTTGTATTGCATCCACAATATGAAGATAGTAACTTGAGAAAGAGGGTTCAAGATTATTAT", + "start" : 336468, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 336468, + "genome_id" : 0, + "start" : 336438, + "strand" : "+" + }, + "seq" : "ACTAAAAGGAAGACAAGCTGAAAACAT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t47" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 102326, + "genome_id" : 0, + "start" : 102298, + "strand" : "+" + }, + "seq" : "ACTTGTCGCTATACCTTCATCTATTGAA" + }, + "gene_name" : "PF3D7_0801300", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 102500, + "genome_id" : 0, + "ref_seq" : "TTAATTTTCTCAAGTAACATATTTTTGTCTTGACTACTTTCATCTGTAAATGGAACGACTACTCTTTGCTTACCTGCAAAAAGGACAACTGACATATGAGCCTTATCCTTACTTACATTCGAATTAAAGACCATAGATTCTAAAAATGGTATAGTTCCTTTTAACCAATAATCC", + "start" : 102326, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 102326, + "genome_id" : 0, + "start" : 102298, + "strand" : "+" + }, + "seq" : "TGTTGAAGAGTCAAGTTTTGTTCAGAA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t46" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1437114, + "genome_id" : 0, + "start" : 1437081, + "strand" : "+" + }, + "seq" : "CATCATAATCATCTAATGATGTTAATCCTTGTA" + }, + "gene_name" : "PF3D7_0936300", + "insert_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1437303, + "genome_id" : 0, + "ref_seq" : "CTAAAACCTGACAGCTTTGTACAGTTATATTTACCCAATTAGAATGTTCAAACATATTTAAGTGTTGCCATTCTTCAAATAATTTTTTTTCATATTCAGTTTTTGGTTGGTTTTTAAATTCTTTTGATACTGTACCTTCTGCGGATGGTATAGGGAAGTTAAAAATTTTATTACGTACTTTGTTTGATT", + "start" : 1437114, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1437114, + "genome_id" : 0, + "start" : 1437081, + "strand" : "+" + }, + "seq" : "GCACCATCATTAAATTTAGAAGAAACCC" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t59" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 279663, + "genome_id" : 0, + "start" : 279635, + "strand" : "+" + }, + "seq" : "CGGATAAATGTTTAGTTATTAGCCAGGT" + }, + "gene_name" : "PF3D7_1407700", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 279786, + "genome_id" : 0, + "ref_seq" : "GAGTAATAGTGATTCATATAAGGTAAATTGTATTAATTTCTCTGAAGGATTTTGTTGCTGTCATCCAATAAATAATTTAGCACTATTATATGGAGAGTATCAACAAAATCAAGAATCAAAAAT", + "start" : 279663, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 279663, + "genome_id" : 0, + "start" : 279635, + "strand" : "+" + }, + "seq" : "CATTACTTATGGGAAGTTTCGGTAATTTCATA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t92" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1178894, + "genome_id" : 0, + "start" : 1178862, + "strand" : "+" + }, + "seq" : "GAACGTTGAGAAATTACCTTTAGAAGATTACT" + }, + "gene_name" : "PF3D7_0929400", + "insert_location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1179078, + "genome_id" : 0, + "ref_seq" : "ACAAATTATCCTTAGCCCCAGATATGGTAAAGACATATCACTGTTATAAATTAGGAAAGCAAGCAGCTGAATTATTAGAATCTATCATTTTAAAGAAAAAGTTCGTAAGATTTAGAGTTACTGATGCTATTGATGTATATGATTTCTTTTATATAAAGAAAGTTTTATCCAGTCGTATTAAGAA", + "start" : 1178894, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_09_v3", + "end" : 1178894, + "genome_id" : 0, + "start" : 1178862, + "strand" : "+" + }, + "seq" : "GCTCTTTTGTCTTGTAAAAATTCATTATATTCT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t57" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 654002, + "genome_id" : 0, + "start" : 653972, + "strand" : "+" + }, + "seq" : "TCACCTAACGGTATATTTTTATCTCGTACA" + }, + "gene_name" : "PF3D7_0316200", + "insert_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 654175, + "genome_id" : 0, + "ref_seq" : "ATATTTTTATAATTTCCTTTCATCTTATTTTTTTCTTTATATTTTTTTTTTTCATATGTAAGATTTATATAATCACTTTCGCTTTTTCTAACCCTTTTGAACTTTTTAAATGTACTTCGTTCATTATTTCTAATTCTCGTAAACACAAGAATAAATATTTTGATATATCTTAT", + "start" : 654002, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 654002, + "genome_id" : 0, + "start" : 653972, + "strand" : "+" + }, + "seq" : "TTATGTATTTTTCAAAAATCGGCACGTTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t18" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 943258, + "genome_id" : 0, + "start" : 943227, + "strand" : "+" + }, + "seq" : "ACCCTACTTATACAAAGAGATAAAGAAGTAG" + }, + "gene_name" : "PF3D7_1223400", + "insert_location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 943428, + "genome_id" : 0, + "ref_seq" : "AATCAACTATAATTAAAAATAGTGGAATTATTGAAAACTTTGGAGATATTGATTATATCTTTACGGATAAAACAGGAACACTAACAGAAAATGTCATGGTGCTTAAAGTTATACATATAGGTTTTGATGTTATACATGCAGAAAATGAAAAAAATTCCATACAAGGTAAT", + "start" : 943258, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_12_v3", + "end" : 943258, + "genome_id" : 0, + "start" : 943227, + "strand" : "+" + }, + "seq" : "AATTCCCTTTTTGTTTGGTTTCCATATT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t75" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 802525, + "genome_id" : 0, + "start" : 802494, + "strand" : "+" + }, + "seq" : "AAGCATCTGAACATTAAAGTTCAAACAAATA" + }, + "gene_name" : "PF3D7_0418000", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 802713, + "genome_id" : 0, + "ref_seq" : "TAAATTATTATAGAAAGATAGAAGTTATTTTATATGAATGGTTATATTTTCATTATAATAATGTATATAACACCAAAGTAAAAAAACAAAAATTTATATTTACCCAACAAAAAAAAGACATATCAAAACATAACAAGTTATATCTTCAGTATGATCAAAATAAAAGAAACTCTGAAATAGAACATACA", + "start" : 802525, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 802525, + "genome_id" : 0, + "start" : 802494, + "strand" : "+" + }, + "seq" : "GCACATCGAATAATCTTCTTTGTGATT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t27" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 549993, + "genome_id" : 0, + "start" : 549962, + "strand" : "+" + }, + "seq" : "CATAAAAGAGGAAATCCACATACAATGGATA" + }, + "gene_name" : "PF3D7_0810800", + "insert_location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 550218, + "genome_id" : 0, + "ref_seq" : "AACTAACAAATTATGATAATCTAGTTTATGATATAAAAAATTATTTAGAACAAAGATTAAATTTTCTTGTATTAAATGGAATACCTCGTTATAGGATACTATTTGATATTGGATTAGGATTTGCGAAGAAACATGATCAATCTATTAAACTCTTACAAAATATACATGTATATGATGAGTATCCACTTTTTATTGGATATTCAAGAAAAAGATTTATTGCCCATT", + "start" : 549993, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_08_v3", + "end" : 549993, + "genome_id" : 0, + "start" : 549962, + "strand" : "+" + }, + "seq" : "GTGTATTTATTACAACATTTTGATCATTCATGC" + }, + "target_attributes" : + [ + "Included", + "DrugResistance" + ], + "target_name" : "t49" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 618396, + "genome_id" : 0, + "start" : 618367, + "strand" : "+" + }, + "seq" : "GGGACACTACAGACAAAAATAAATGATCT" + }, + "gene_name" : "PF3D7_0315200", + "insert_location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 618581, + "genome_id" : 0, + "ref_seq" : "AAAAAGAGATTATAGAAGTGGAAAGAAGACATATATAATACAAGCTCTACAATATGCATTAACATATTATAGCAAACTTTCAAATAGAAAGGAAGCACCTAAAGTAACCATGTTATTTACAGATGGAAATGATTCCTATGAATCAGAAAAGGGATTACAGGATATTGCATTATTATATAGAAAAG", + "start" : 618396, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_03_v3", + "end" : 618396, + "genome_id" : 0, + "start" : 618367, + "strand" : "+" + }, + "seq" : "AGAAACTCCTACTACCAATAATTTGACATTTT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t17" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 805822, + "genome_id" : 0, + "start" : 805795, + "strand" : "+" + }, + "seq" : "TTGGAAAATTTGAGAATCCTATGTGCT" + }, + "gene_name" : "PF3D7_0220100", + "insert_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 805942, + "genome_id" : 0, + "ref_seq" : "TTAATTATGAAGACAGTCTCACGACTTCATGTTATATTGATGAAAACAAATCCGATTCATCCTATGAAACTGAAGAAAATGTAAACTATAATAATAAAATGGGTAAACGCAAAAATTTAG", + "start" : 805822, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 805822, + "genome_id" : 0, + "start" : 805795, + "strand" : "+" + }, + "seq" : "TTCGATTTGCCTACAATTTGTGATTCTA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t13" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 544718, + "genome_id" : 0, + "start" : 544686, + "strand" : "+" + }, + "seq" : "AACCCAGATAATCATTTATTAAATACAGACAC" + }, + "gene_name" : "PF3D7_0412300", + "insert_location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 544861, + "genome_id" : 0, + "ref_seq" : "ATATATTTTACATAATAACAATCCTTCATGTAATGATTATAATTTAAATAATCTTTCATTTAATATAAATAAATATATTAATGAAGAAAAAGGCAAAAATAAAAAAACAAATCAACATATATCAGAACAATTTTTATTTCCTA", + "start" : 544718, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_04_v3", + "end" : 544718, + "genome_id" : 0, + "start" : 544686, + "strand" : "+" + }, + "seq" : "CTGCAGCACACATTATAACTAAATGTG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t24" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 150105, + "genome_id" : 0, + "start" : 150075, + "strand" : "+" + }, + "seq" : "CCGAAAATAGAACTCCATATGTTCATTACC" + }, + "gene_name" : "PF3D7_1404300", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 150294, + "genome_id" : 0, + "ref_seq" : "ATAATAATAGTAATATAAAGAATTATTCAGCTGTAGATATATTCTCACCCAAAAAAACTGGAAAGGAATGTATTAAATGTCTCCCAGATAATTTTTGTGAATGCGAATGTAGTTGTAAAAATAAAACAGGTTTTTCAATGAAATATAGACATGCCAGTAAGGGATCTAAAGGATATAGTAAAAAAATGA", + "start" : 150105, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 150105, + "genome_id" : 0, + "start" : 150075, + "strand" : "+" + }, + "seq" : "GTCTGGAACGAGAAGATGTCTTTG" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t91" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 109807, + "genome_id" : 0, + "start" : 109776, + "strand" : "+" + }, + "seq" : "CCACCATTTCTTCATTTTAATTTTGAATGGT" + }, + "gene_name" : "PF3D7_0202100", + "insert_location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 109982, + "genome_id" : 0, + "ref_seq" : "AACTTATGTTCATGAGCTAATTTCCCACAAATACTCCATAACGAACTTTTCATTTTATTAAATTTATCTCTCAAAAGAGAATGACTATAATGCCATATTAAATACATATCTTTCCTTTCTAATTTTCCTGGTAATTCTATTATCATTCTTTCTAAATCTTCTTCTGTAACTTTTC", + "start" : 109807, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_02_v3", + "end" : 109807, + "genome_id" : 0, + "start" : 109776, + "strand" : "+" + }, + "seq" : "ACCATTTGGATTAAAACCTTCAGATTTAAATA" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t10" + }, + { + "forward_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3214351, + "genome_id" : 0, + "start" : 3214318, + "strand" : "+" + }, + "seq" : "TGTTAAAATATTTTCCAAAGAATTCAATTAGCG" + }, + "gene_name" : "PF3D7_1478000", + "insert_location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3214478, + "genome_id" : 0, + "ref_seq" : "ATCGTTTTGAATTGTTAGAATTTAAAATGACGGAGGATTGTTATACAAAAATGTGGTTTGATTTTATGAGTGATTTTGGAATAGCTACAATGAATGAAACCGAACATACTAGATCTTTTTATGGATT", + "start" : 3214351, + "strand" : "+" + }, + "reverse_primer" : + { + "location" : + { + "chrom" : "Pf3D7_14_v3", + "end" : 3214351, + "genome_id" : 0, + "start" : 3214318, + "strand" : "+" + }, + "seq" : "TCAATTGATGGTTGCCTTTCGATT" + }, + "target_attributes" : + [ + "Included", + "Microhaplotype" + ], + "target_name" : "t100" + } + ], + "targeted_genomes" : + [ + { + "chromosomes" : + [ + "Pf3D7_01_v3", + "Pf3D7_02_v3", + "Pf3D7_03_v3", + "Pf3D7_04_v3", + "Pf3D7_05_v3", + "Pf3D7_06_v3", + "Pf3D7_07_v3", + "Pf3D7_08_v3", + "Pf3D7_09_v3", + "Pf3D7_10_v3", + "Pf3D7_11_v3", + "Pf3D7_12_v3", + "Pf3D7_13_v3", + "Pf3D7_14_v3", + "Pf3D7_API_v3", + "Pf3D7_MIT_v3" + ], + "genome_version" : "2020-09-01", + "gff_url" : "https://plasmodb.org/common/downloads/release-65/Pfalciparum3D7/gff/data/PlasmoDB-65_Pfalciparum3D7.gff", + "name" : "3D7", + "taxon_id" : + [ + 5833 + ], + "url" : "https://plasmodb.org/common/downloads/release-65/Pfalciparum3D7/fasta/data/PlasmoDB-65_Pfalciparum3D7_Genome.fasta" + } + ] +} diff --git a/tests/test_pmo_engine/test_pmo_reader.py b/tests/test_pmo_engine/test_pmo_reader.py index 5cef258..d8d4eb4 100755 --- a/tests/test_pmo_engine/test_pmo_reader.py +++ b/tests/test_pmo_engine/test_pmo_reader.py @@ -102,6 +102,48 @@ def test_combine_multiple_pmos(self): self.assertEqual(expected_pmo, combined_pmo) + def test_combine_multiple_pmos_fail_dup_specimen_names(self): + # the two files below have same specimen_names but have different meta so will fail when trying to combine + pmo_data_list = PMOReader.read_in_pmos( + [ + os.path.join( + os.path.dirname(self.working_dir), + "data/minimum_pmo_example_2_for_spec_dup_testing.json", + ), + os.path.join( + os.path.dirname(self.working_dir), "data/minimum_pmo_example_2.json" + ), + ] + ) + self.assertRaises(Exception, PMOReader.combine_multiple_pmos, pmo_data_list) + + def test_combine_multiple_pmos_fail_dup_library_sample_names(self): + # the two files below have same library sample names so will fail for duplicated library_sample_names + pmo_data_list_2 = PMOReader.read_in_pmos( + [ + os.path.join( + os.path.dirname(self.working_dir), + "data/minimum_pmo_example_2_for_library_sample_dup_testing.json", + ), + os.path.join( + os.path.dirname(self.working_dir), "data/minimum_pmo_example_2.json" + ), + ] + ) + self.assertRaises(Exception, PMOReader.combine_multiple_pmos, pmo_data_list_2) + + def test_combine_multiple_pmos_fail_for_combine_only_one_file(self): + # will fail for only having 1 PMO + pmo_data_list_2 = PMOReader.read_in_pmos( + [ + os.path.join( + os.path.dirname(self.working_dir), + "data/minimum_pmo_example_2_for_library_sample_dup_testing.json", + ) + ] + ) + self.assertRaises(Exception, PMOReader.combine_multiple_pmos, pmo_data_list_2) + if __name__ == "__main__": unittest.main() From 52ad50b26abaf8b3f0cc8ccc476127bb0e189bce Mon Sep 17 00:00:00 2001 From: kathryn1995 Date: Fri, 21 Nov 2025 18:26:47 -0800 Subject: [PATCH 26/31] Add function to count targets per panel --- src/pmotools/pmo_engine/pmo_processor.py | 21 ++++ tests/test_pmo_engine/test_pmo_processor.py | 118 ++++++++++++++++++++ 2 files changed, 139 insertions(+) diff --git a/src/pmotools/pmo_engine/pmo_processor.py b/src/pmotools/pmo_engine/pmo_processor.py index 44288e6..cf90d20 100644 --- a/src/pmotools/pmo_engine/pmo_processor.py +++ b/src/pmotools/pmo_engine/pmo_processor.py @@ -402,6 +402,27 @@ def count_library_samples_per_target( drop=True ) + @staticmethod + def count_targets_per_panel(pmodata) -> pd.DataFrame: + """ + Count the targets per panel. + + :param pmodata: the pmo to count from + :return: counts for each panel + """ + # how many targets in each panel + panels = [] + target_count = [] + for panel in pmodata["panel_info"]: + panel_targets = 0 + panels.append(panel["panel_name"]) + for reaction in panel["reactions"]: + panel_targets += len(reaction["panel_targets"]) + target_count.append(panel_targets) + return pd.DataFrame( + data={"panel_name": panels, "panel_target_count": target_count} + ) + @staticmethod def list_library_sample_names_per_specimen_name( pmodata, diff --git a/tests/test_pmo_engine/test_pmo_processor.py b/tests/test_pmo_engine/test_pmo_processor.py index b6e0fba..4d03a6e 100755 --- a/tests/test_pmo_engine/test_pmo_processor.py +++ b/tests/test_pmo_engine/test_pmo_processor.py @@ -873,6 +873,124 @@ def test_get_panel_names(self): names = PMOProcessor.get_panel_names(pmo_data_combined) self.assertEqual(["heomev1"], names) + def test_count_targets_per_panel_single_panel_single_reaction(self): + """Test count_targets_per_panel with a single panel containing one reaction""" + # Create a simple PMO with one panel and one reaction + test_pmo = { + "panel_info": [ + { + "panel_name": "test_panel_1", + "reactions": [ + { + "reaction_name": "reaction_1", + "panel_targets": [0, 1, 2, 3, 4], + } + ], + } + ] + } + + result = PMOProcessor.count_targets_per_panel(test_pmo) + + expected_data = {"panel_name": ["test_panel_1"], "panel_target_count": [5]} + expected_df = pd.DataFrame(expected_data) + + pd.testing.assert_frame_equal(result, expected_df) + + def test_count_targets_per_panel_single_panel_multiple_reactions(self): + """Test count_targets_per_panel with a single panel containing multiple reactions""" + # Create a PMO with one panel and multiple reactions + test_pmo = { + "panel_info": [ + { + "panel_name": "test_panel_1", + "reactions": [ + {"reaction_name": "reaction_1", "panel_targets": [0, 1, 2]}, + {"reaction_name": "reaction_2", "panel_targets": [3, 4, 5, 6]}, + {"reaction_name": "reaction_3", "panel_targets": [7, 8]}, + ], + } + ] + } + + result = PMOProcessor.count_targets_per_panel(test_pmo) + + expected_data = { + "panel_name": ["test_panel_1"], + "panel_target_count": [9], # 3 + 4 + 2 = 9 total targets + } + expected_df = pd.DataFrame(expected_data) + + pd.testing.assert_frame_equal(result, expected_df) + + def test_count_targets_per_panel_multiple_panels(self): + """Test count_targets_per_panel with multiple panels""" + # Create a PMO with multiple panels + test_pmo = { + "panel_info": [ + { + "panel_name": "panel_A", + "reactions": [ + {"reaction_name": "reaction_1", "panel_targets": [0, 1, 2, 3]} + ], + }, + { + "panel_name": "panel_B", + "reactions": [ + {"reaction_name": "reaction_1", "panel_targets": [4, 5]}, + { + "reaction_name": "reaction_2", + "panel_targets": [6, 7, 8, 9, 10], + }, + ], + }, + { + "panel_name": "panel_C", + "reactions": [ + {"reaction_name": "reaction_1", "panel_targets": [11]} + ], + }, + ] + } + + result = PMOProcessor.count_targets_per_panel(test_pmo) + + expected_data = { + "panel_name": ["panel_A", "panel_B", "panel_C"], + "panel_target_count": [4, 7, 1], # 4, (2+5), 1 + } + expected_df = pd.DataFrame(expected_data) + + pd.testing.assert_frame_equal(result, expected_df) + + def test_count_targets_per_panel_with_real_data_structure(self): + """Test count_targets_per_panel with realistic PMO data structure""" + # Create a realistic PMO structure similar to the real data + # Based on the real data structure with one panel containing 100 targets + test_pmo = { + "panel_info": [ + { + "panel_name": "heomev1", + "reactions": [ + { + "panel_targets": list(range(100)), # targets 0-99 + "reaction_name": "full", + } + ], + } + ] + } + + result = PMOProcessor.count_targets_per_panel(test_pmo) + + expected_data = { + "panel_name": ["heomev1"], + "panel_target_count": [100], # targets 0-99 = 100 total + } + expected_df = pd.DataFrame(expected_data) + + pd.testing.assert_frame_equal(result, expected_df) + if __name__ == "__main__": unittest.main() From a20cc2d41e27cd4df775322df9308820eba5074b Mon Sep 17 00:00:00 2001 From: Nicholas Hathaway Date: Mon, 24 Nov 2025 13:44:49 -0800 Subject: [PATCH 27/31] moved to update traveler info to pmo_builder; change checking of date to use the datetime library; --- .../pmo_builder/functions_to_update_meta.py | 125 ++++++++++ src/pmotools/pmo_engine/pmo_processor.py | 105 -------- .../test_functions_to_update_meta.py | 228 ++++++++++++++++++ tests/test_pmo_engine/test_pmo_processor.py | 207 ---------------- 4 files changed, 353 insertions(+), 312 deletions(-) create mode 100644 src/pmotools/pmo_builder/functions_to_update_meta.py create mode 100755 tests/test_pmo_builder/test_functions_to_update_meta.py diff --git a/src/pmotools/pmo_builder/functions_to_update_meta.py b/src/pmotools/pmo_builder/functions_to_update_meta.py new file mode 100644 index 0000000..7291f09 --- /dev/null +++ b/src/pmotools/pmo_builder/functions_to_update_meta.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 + +import pandas as pd +from pmotools.pmo_engine.pmo_processor import PMOProcessor +from datetime import datetime + + +class PMOUpdater(object): + @staticmethod + def check_if_date_yyyy_mm_or_yyyy_mm_dd(date_string: str) -> bool: + """ + Checks if a string is in YYYY-MM or YYYY-MM-DD format. + :param date_string: the string to be checked + """ + try: + datetime.strptime(date_string, "%Y-%m-%d") + return True # Matches YYYY-MM-DD + except ValueError: + try: + datetime.strptime(date_string, "%Y-%m") + return True # Matches YYYY-MM + except ValueError: + return False # Does not match either format + + @staticmethod + def update_specimen_meta_with_traveler_info( + pmo, + traveler_info: pd.DataFrame, + specimen_name_col: str = "specimen_name", + travel_country_col: str = "travel_country", + travel_start_col: str = "travel_start_date", + travel_end_col: str = "travel_end_date", + bed_net_usage_col: str = None, + geo_admin1_col: str = None, + geo_admin2_col: str = None, + geo_admin3_col: str = None, + lat_lon_col: str = None, + replace_current_traveler_info: bool = False, + ): + """ + Update a PMO's specimen's metadata with travel info + :param pmo: the PMO to update, will directly modify this PMO + :param traveler_info: the traveler info + :param specimen_name_col: the specimen name column within the traveler input table + :param travel_country_col: the column name containing the traveled to country + :param travel_start_col: the column name containing the traveled start date, format YYYY-MM-DD or YYYY-MM + :param travel_end_col: the column name containing the traveled end date, format YYYY-MM-DD or YYYY-MM + :param bed_net_usage_col: (Optional) a number between 0 - 1 for rough frequency of bednet usage while traveling + :param geo_admin1_col: (Optional) the column name containing the traveled to country admin level 1 info + :param geo_admin2_col: (Optional) the column name containing the traveled to country admin level 2 info + :param geo_admin3_col: (Optional) the column name containing the traveled to country admin level 3 info + :param lat_lon_col: (Optional) the latitude and longitude column name containing the region traveled to latitude and longitude + :param replace_current_traveler_info: whether to replace current travel info + :return: a reference to the updated PMO + """ + required_cols = [ + specimen_name_col, + travel_country_col, + travel_start_col, + travel_end_col, + ] + if bed_net_usage_col is not None: + required_cols.append(bed_net_usage_col) + if geo_admin1_col is not None: + required_cols.append(geo_admin1_col) + if geo_admin2_col is not None: + required_cols.append(geo_admin2_col) + if geo_admin3_col is not None: + required_cols.append(geo_admin3_col) + if lat_lon_col is not None: + required_cols.append(lat_lon_col) + + if not set(required_cols).issubset(traveler_info.columns): + raise Exception( + "missing traveler_info columns: " + ",".join(required_cols), + " columns in table: " + ",".join(traveler_info.columns), + ) + + specimen_names_in_pmo = set(PMOProcessor.get_specimen_names(pmo)) + specimen_names_in_traveler_info = set( + traveler_info[specimen_name_col].astype(str).tolist() + ) + + # check to see if provided traveler info for a specimen that cannot be found in PMO + missing_traveler_specs = specimen_names_in_traveler_info - specimen_names_in_pmo + + if missing_traveler_specs: + raise ValueError( + f"Provided traveler info for the following specimens but they are missing from the PMO: {sorted(missing_traveler_specs)}" + ) + traveler_info_records = traveler_info[required_cols].to_dict(orient="records") + spec_indexs = PMOProcessor.get_index_key_of_specimen_names(pmo) + + # prep traveler info lists, clear the list if we are replacing or start an empty list to append to if none exist already + for specimen_name in specimen_names_in_traveler_info: + if ( + replace_current_traveler_info + or "travel_out_six_month" + not in pmo["specimen_info"][spec_indexs[specimen_name]] + ): + pmo["specimen_info"][spec_indexs[specimen_name]][ + "travel_out_six_month" + ] = [] + + for travel_rec in traveler_info_records: + specimen_name = str(travel_rec[specimen_name_col]) + # Validate date formats + for date_col in (travel_start_col, travel_end_col): + val = travel_rec[date_col] + if pd.isna(val): + raise ValueError( + f"Missing required date value in column '{date_col}' for specimen '{specimen_name}'" + ) + val_str = str(val) + if not PMOUpdater.check_if_date_yyyy_mm_or_yyyy_mm_dd(val_str): + raise ValueError( + f"Invalid date format in '{date_col}' for specimen '{specimen_name}': '{val_str}'. " + f"Expected YYYY-MM or YYYY-MM-DD" + ) + # add in travel_rec + travel_rec.pop(specimen_name_col, None) + pmo["specimen_info"][spec_indexs[specimen_name]][ + "travel_out_six_month" + ].append(travel_rec) + return pmo diff --git a/src/pmotools/pmo_engine/pmo_processor.py b/src/pmotools/pmo_engine/pmo_processor.py index 57dcf5c..291f748 100644 --- a/src/pmotools/pmo_engine/pmo_processor.py +++ b/src/pmotools/pmo_engine/pmo_processor.py @@ -3,7 +3,6 @@ import os from typing import NamedTuple import copy -import re import pandas as pd from collections import defaultdict @@ -1482,107 +1481,3 @@ def extract_panels_insert_bed_loc( ) bed_loc_out[panel_id] = bed_loc_out_per_panel return bed_loc_out - - @staticmethod - def update_specimen_meta_with_traveler_info( - pmo, - traveler_info: pd.DataFrame, - specimen_name_col: str = "specimen_name", - travel_country_col: str = "travel_country", - travel_start_col: str = "travel_start_date", - travel_end_col: str = "travel_end_date", - bed_net_usage_col: str = None, - geo_admin1_col: str = None, - geo_admin2_col: str = None, - geo_admin3_col: str = None, - lat_lon_col: str = None, - replace_current_traveler_info: bool = False, - ): - """ - Update a PMO's specimen's metadata with travel info - :param pmo: the PMO to update, will directly modify this PMO - :param traveler_info: the traveler info - :param specimen_name_col: the specimen name column within the traveler input table - :param travel_country_col: the column name containing the traveled to country - :param travel_start_col: the column name containing the traveled start date, format YYYY-MM-DD or YYYY-MM - :param travel_end_col: the column name containing the traveled end date, format YYYY-MM-DD or YYYY-MM - :param bed_net_usage_col: a number between 0 - 1 for rough frequency of bednet usage while traveling - :param geo_admin1_col: the column name containing the traveled to country admin level 1 info - :param geo_admin2_col: the column name containing the traveled to country admin level 2 info - :param geo_admin3_col: the column name containing the traveled to country admin level 3 info - :param lat_lon_col: the latitude and longitude column name containing the region traveled to latitude and longitude - :param replace_current_traveler_info: whether to replace current travel info - :return: a reference to the updated PMO - """ - required_cols = [ - specimen_name_col, - travel_country_col, - travel_start_col, - travel_end_col, - ] - if bed_net_usage_col is not None: - required_cols.append(bed_net_usage_col) - if geo_admin1_col is not None: - required_cols.append(geo_admin1_col) - if geo_admin2_col is not None: - required_cols.append(geo_admin2_col) - if geo_admin3_col is not None: - required_cols.append(geo_admin3_col) - if lat_lon_col is not None: - required_cols.append(lat_lon_col) - - if not set(required_cols).issubset(traveler_info.columns): - raise Exception( - "missing traveler_info columns: " + ",".join(required_cols), - " columns in table: " + ",".join(traveler_info.columns), - ) - - specimen_names_in_pmo = set(PMOProcessor.get_specimen_names(pmo)) - specimen_names_in_traveler_info = set( - traveler_info[specimen_name_col].astype(str).tolist() - ) - - # check to see if provided traveler info for a specimen that cannot be found in PMO - missing_traveler_specs = specimen_names_in_traveler_info - specimen_names_in_pmo - - if missing_traveler_specs: - raise ValueError( - f"Provided traveler info for the following specimens but they are missing from the PMO: {sorted(missing_traveler_specs)}" - ) - # Matches YYYY-MM or YYYY-MM-DD - date_regex = re.compile(r"^\d{4}-\d{2}(-\d{2})?$") - traveler_info_records = traveler_info[required_cols].to_dict(orient="records") - spec_indexs = PMOProcessor.get_index_key_of_specimen_names(pmo) - - # prep traveler info lists, clear the list if we are replacing or start an empty list to append to if none exist already - for specimen_name in specimen_names_in_traveler_info: - if ( - replace_current_traveler_info - or "travel_out_six_month" - not in pmo["specimen_info"][spec_indexs[specimen_name]] - ): - pmo["specimen_info"][spec_indexs[specimen_name]][ - "travel_out_six_month" - ] = [] - - for travel_rec in traveler_info_records: - specimen_name = str(travel_rec[specimen_name_col]) - # Validate date formats - for date_col in (travel_start_col, travel_end_col): - val = travel_rec[date_col] - if pd.isna(val): - raise ValueError( - f"Missing required date value in column '{date_col}' for specimen '{specimen_name}'" - ) - val_str = str(val) - if not date_regex.match(val_str): - raise ValueError( - f"Invalid date format in '{date_col}' for specimen '{specimen_name}': '{val_str}'. " - f"Expected YYYY-MM or YYYY-MM-DD" - ) - # add in travel_rec - travel_rec.pop(specimen_name_col, None) - pmo["specimen_info"][spec_indexs[specimen_name]][ - "travel_out_six_month" - ].append(travel_rec) - return pmo diff --git a/tests/test_pmo_builder/test_functions_to_update_meta.py b/tests/test_pmo_builder/test_functions_to_update_meta.py new file mode 100755 index 0000000..138213b --- /dev/null +++ b/tests/test_pmo_builder/test_functions_to_update_meta.py @@ -0,0 +1,228 @@ +#!/usr/bin/env python3 + +import os +import unittest +import pandas as pd +from pmotools.pmo_builder.functions_to_update_meta import PMOUpdater + + +class TestPMOUpdater(unittest.TestCase): + def setUp(self): + self.working_dir = os.path.dirname(os.path.abspath(__file__)) + + def test_check_if_date_yyyy_mm_or_yyyy_mm_dd(self): + self.assertFalse(PMOUpdater.check_if_date_yyyy_mm_or_yyyy_mm_dd("2023/11/24")) + self.assertFalse(PMOUpdater.check_if_date_yyyy_mm_or_yyyy_mm_dd("11-24-2023")) + self.assertFalse(PMOUpdater.check_if_date_yyyy_mm_or_yyyy_mm_dd("invalid-date")) + + self.assertTrue(PMOUpdater.check_if_date_yyyy_mm_or_yyyy_mm_dd("2023-11-24")) + self.assertTrue(PMOUpdater.check_if_date_yyyy_mm_or_yyyy_mm_dd("2023-11")) + + def test_update_specimen_meta_with_traveler_info(self): + test_pmo = { + "specimen_info": [{"specimen_name": "spec1"}, {"specimen_name": "spec2"}], + } + traveler_info = pd.DataFrame( + { + "specimen_name": ["spec1", "spec1", "spec2"], + "travel_country": ["Kenya", "Kenya", "Tanzania"], + "travel_start_date": ["2024-01", "2024-04", "2024-02-15"], + "travel_end_date": ["2024-02", "2024-06", "2024-02-27"], + } + ) + + PMOUpdater.update_specimen_meta_with_traveler_info(test_pmo, traveler_info) + test_out_pmo = { + "specimen_info": [ + { + "specimen_name": "spec1", + "travel_out_six_month": [ + { + "travel_country": "Kenya", + "travel_start_date": "2024-01", + "travel_end_date": "2024-02", + }, + { + "travel_country": "Kenya", + "travel_start_date": "2024-04", + "travel_end_date": "2024-06", + }, + ], + }, + { + "specimen_name": "spec2", + "travel_out_six_month": [ + { + "travel_country": "Tanzania", + "travel_start_date": "2024-02-15", + "travel_end_date": "2024-02-27", + } + ], + }, + ] + } + self.assertEqual(test_out_pmo, test_pmo) + + def test_update_specimen_meta_with_traveler_info_raises(self): + test_pmo = { + "specimen_info": [{"specimen_name": "spec1"}, {"specimen_name": "spec2"}], + } + traveler_info = pd.DataFrame( + { + "specimen_name": ["spec1", "spec2"], + "travel_country": ["Kenya", "Tanzania"], + "travel_start_date": ["24-01", "2024-02"], # BAD: "24-01" + "travel_end_date": ["2024-02-05", "2024-03"], + } + ) + + with self.assertRaises(ValueError): + PMOUpdater.update_specimen_meta_with_traveler_info(test_pmo, traveler_info) + + def test_update_specimen_meta_with_traveler_info_with_optional(self): + test_pmo = { + "specimen_info": [{"specimen_name": "spec1"}, {"specimen_name": "spec2"}], + } + traveler_info = pd.DataFrame( + { + "specimen_name": ["spec1", "spec2"], + "travel_country": ["Kenya", "Tanzania"], + "travel_start_date": ["2024-01", "2024-02"], + "travel_end_date": ["2024-01-20", "2024-02-15"], + "bed_net": [0.50, 0.0], + "admin1": ["Nairobi", "Dar es Salaam"], + "admin2": ["SubCounty1", "SubCounty2"], + "admin3": ["Ward1", "Ward2"], + "latlon": ["-1.2921,36.8219", "-6.7924,39.2083"], + } + ) + + PMOUpdater.update_specimen_meta_with_traveler_info( + test_pmo, + traveler_info, + bed_net_usage_col="bed_net", + geo_admin1_col="admin1", + geo_admin2_col="admin2", + geo_admin3_col="admin3", + lat_lon_col="latlon", + ) + test_out_pmo = { + "specimen_info": [ + { + "specimen_name": "spec1", + "travel_out_six_month": [ + { + "travel_country": "Kenya", + "travel_start_date": "2024-01", + "travel_end_date": "2024-01-20", + "bed_net": 0.5, + "admin1": "Nairobi", + "admin2": "SubCounty1", + "admin3": "Ward1", + "latlon": "-1.2921,36.8219", + } + ], + }, + { + "specimen_name": "spec2", + "travel_out_six_month": [ + { + "travel_country": "Tanzania", + "travel_start_date": "2024-02", + "travel_end_date": "2024-02-15", + "bed_net": 0.0, + "admin1": "Dar es Salaam", + "admin2": "SubCounty2", + "admin3": "Ward2", + "latlon": "-6.7924,39.2083", + } + ], + }, + ] + } + self.assertEqual(test_out_pmo, test_pmo) + + def test_update_specimen_meta_with_traveler_info_with_optional_replace_old(self): + test_pmo = { + "specimen_info": [ + { + "specimen_name": "spec1", + "travel_out_six_month": [ + { + "travel_country": "Kenya", + "travel_start_date": "2024-01", + "travel_end_date": "2024-02", + }, + { + "travel_country": "Kenya", + "travel_start_date": "2024-04", + "travel_end_date": "2024-06", + }, + ], + }, + {"specimen_name": "spec2"}, + ], + } + traveler_info = pd.DataFrame( + { + "specimen_name": ["spec1", "spec2"], + "travel_country": ["Kenya", "Tanzania"], + "travel_start_date": ["2024-01", "2024-02"], + "travel_end_date": ["2024-01-20", "2024-02-15"], + "bed_net": [0.50, 0.0], + "admin1": ["Nairobi", "Dar es Salaam"], + "admin2": ["SubCounty1", "SubCounty2"], + "admin3": ["Ward1", "Ward2"], + "latlon": ["-1.2921,36.8219", "-6.7924,39.2083"], + } + ) + + PMOUpdater.update_specimen_meta_with_traveler_info( + test_pmo, + traveler_info, + bed_net_usage_col="bed_net", + geo_admin1_col="admin1", + geo_admin2_col="admin2", + geo_admin3_col="admin3", + lat_lon_col="latlon", + replace_current_traveler_info=True, + ) + test_out_pmo = { + "specimen_info": [ + { + "specimen_name": "spec1", + "travel_out_six_month": [ + { + "travel_country": "Kenya", + "travel_start_date": "2024-01", + "travel_end_date": "2024-01-20", + "bed_net": 0.5, + "admin1": "Nairobi", + "admin2": "SubCounty1", + "admin3": "Ward1", + "latlon": "-1.2921,36.8219", + } + ], + }, + { + "specimen_name": "spec2", + "travel_out_six_month": [ + { + "travel_country": "Tanzania", + "travel_start_date": "2024-02", + "travel_end_date": "2024-02-15", + "bed_net": 0.0, + "admin1": "Dar es Salaam", + "admin2": "SubCounty2", + "admin3": "Ward2", + "latlon": "-6.7924,39.2083", + } + ], + }, + ] + } + self.assertEqual(test_out_pmo, test_pmo) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_pmo_engine/test_pmo_processor.py b/tests/test_pmo_engine/test_pmo_processor.py index e7fd833..b6e0fba 100755 --- a/tests/test_pmo_engine/test_pmo_processor.py +++ b/tests/test_pmo_engine/test_pmo_processor.py @@ -873,213 +873,6 @@ def test_get_panel_names(self): names = PMOProcessor.get_panel_names(pmo_data_combined) self.assertEqual(["heomev1"], names) - def test_update_specimen_meta_with_traveler_info(self): - test_pmo = { - "specimen_info": [{"specimen_name": "spec1"}, {"specimen_name": "spec2"}], - } - traveler_info = pd.DataFrame( - { - "specimen_name": ["spec1", "spec1", "spec2"], - "travel_country": ["Kenya", "Kenya", "Tanzania"], - "travel_start_date": ["2024-01", "2024-04", "2024-02-15"], - "travel_end_date": ["2024-02", "2024-06", "2024-02-27"], - } - ) - - PMOProcessor.update_specimen_meta_with_traveler_info(test_pmo, traveler_info) - test_out_pmo = { - "specimen_info": [ - { - "specimen_name": "spec1", - "travel_out_six_month": [ - { - "travel_country": "Kenya", - "travel_start_date": "2024-01", - "travel_end_date": "2024-02", - }, - { - "travel_country": "Kenya", - "travel_start_date": "2024-04", - "travel_end_date": "2024-06", - }, - ], - }, - { - "specimen_name": "spec2", - "travel_out_six_month": [ - { - "travel_country": "Tanzania", - "travel_start_date": "2024-02-15", - "travel_end_date": "2024-02-27", - } - ], - }, - ] - } - self.assertEqual(test_out_pmo, test_pmo) - - def test_update_specimen_meta_with_traveler_info_raises(self): - test_pmo = { - "specimen_info": [{"specimen_name": "spec1"}, {"specimen_name": "spec2"}], - } - traveler_info = pd.DataFrame( - { - "specimen_name": ["spec1", "spec2"], - "travel_country": ["Kenya", "Tanzania"], - "travel_start_date": ["24-01", "2024-02"], # BAD: "24-01" - "travel_end_date": ["2024-02-05", "2024-03"], - } - ) - - with self.assertRaises(ValueError): - PMOProcessor.update_specimen_meta_with_traveler_info( - test_pmo, traveler_info - ) - - def test_update_specimen_meta_with_traveler_info_with_optional(self): - test_pmo = { - "specimen_info": [{"specimen_name": "spec1"}, {"specimen_name": "spec2"}], - } - traveler_info = pd.DataFrame( - { - "specimen_name": ["spec1", "spec2"], - "travel_country": ["Kenya", "Tanzania"], - "travel_start_date": ["2024-01", "2024-02"], - "travel_end_date": ["2024-01-20", "2024-02-15"], - "bed_net": [0.50, 0.0], - "admin1": ["Nairobi", "Dar es Salaam"], - "admin2": ["SubCounty1", "SubCounty2"], - "admin3": ["Ward1", "Ward2"], - "latlon": ["-1.2921,36.8219", "-6.7924,39.2083"], - } - ) - - PMOProcessor.update_specimen_meta_with_traveler_info( - test_pmo, - traveler_info, - bed_net_usage_col="bed_net", - geo_admin1_col="admin1", - geo_admin2_col="admin2", - geo_admin3_col="admin3", - lat_lon_col="latlon", - ) - test_out_pmo = { - "specimen_info": [ - { - "specimen_name": "spec1", - "travel_out_six_month": [ - { - "travel_country": "Kenya", - "travel_start_date": "2024-01", - "travel_end_date": "2024-01-20", - "bed_net": 0.5, - "admin1": "Nairobi", - "admin2": "SubCounty1", - "admin3": "Ward1", - "latlon": "-1.2921,36.8219", - } - ], - }, - { - "specimen_name": "spec2", - "travel_out_six_month": [ - { - "travel_country": "Tanzania", - "travel_start_date": "2024-02", - "travel_end_date": "2024-02-15", - "bed_net": 0.0, - "admin1": "Dar es Salaam", - "admin2": "SubCounty2", - "admin3": "Ward2", - "latlon": "-6.7924,39.2083", - } - ], - }, - ] - } - self.assertEqual(test_out_pmo, test_pmo) - - def test_update_specimen_meta_with_traveler_info_with_optional_replace_old(self): - test_pmo = { - "specimen_info": [ - { - "specimen_name": "spec1", - "travel_out_six_month": [ - { - "travel_country": "Kenya", - "travel_start_date": "2024-01", - "travel_end_date": "2024-02", - }, - { - "travel_country": "Kenya", - "travel_start_date": "2024-04", - "travel_end_date": "2024-06", - }, - ], - }, - {"specimen_name": "spec2"}, - ], - } - traveler_info = pd.DataFrame( - { - "specimen_name": ["spec1", "spec2"], - "travel_country": ["Kenya", "Tanzania"], - "travel_start_date": ["2024-01", "2024-02"], - "travel_end_date": ["2024-01-20", "2024-02-15"], - "bed_net": [0.50, 0.0], - "admin1": ["Nairobi", "Dar es Salaam"], - "admin2": ["SubCounty1", "SubCounty2"], - "admin3": ["Ward1", "Ward2"], - "latlon": ["-1.2921,36.8219", "-6.7924,39.2083"], - } - ) - - PMOProcessor.update_specimen_meta_with_traveler_info( - test_pmo, - traveler_info, - bed_net_usage_col="bed_net", - geo_admin1_col="admin1", - geo_admin2_col="admin2", - geo_admin3_col="admin3", - lat_lon_col="latlon", - replace_current_traveler_info=True, - ) - test_out_pmo = { - "specimen_info": [ - { - "specimen_name": "spec1", - "travel_out_six_month": [ - { - "travel_country": "Kenya", - "travel_start_date": "2024-01", - "travel_end_date": "2024-01-20", - "bed_net": 0.5, - "admin1": "Nairobi", - "admin2": "SubCounty1", - "admin3": "Ward1", - "latlon": "-1.2921,36.8219", - } - ], - }, - { - "specimen_name": "spec2", - "travel_out_six_month": [ - { - "travel_country": "Tanzania", - "travel_start_date": "2024-02", - "travel_end_date": "2024-02-15", - "bed_net": 0.0, - "admin1": "Dar es Salaam", - "admin2": "SubCounty2", - "admin3": "Ward2", - "latlon": "-6.7924,39.2083", - } - ], - }, - ] - } - self.assertEqual(test_out_pmo, test_pmo) - if __name__ == "__main__": unittest.main() From 1fcc76d5288fc37b3c7d196a2d79d6d2508ca222 Mon Sep 17 00:00:00 2001 From: kathryn1995 Date: Mon, 24 Nov 2025 13:54:53 -0800 Subject: [PATCH 28/31] length of unique targets in panel incase duplicates across reactions --- src/pmotools/pmo_engine/pmo_processor.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pmotools/pmo_engine/pmo_processor.py b/src/pmotools/pmo_engine/pmo_processor.py index cf90d20..07ab55b 100644 --- a/src/pmotools/pmo_engine/pmo_processor.py +++ b/src/pmotools/pmo_engine/pmo_processor.py @@ -414,11 +414,11 @@ def count_targets_per_panel(pmodata) -> pd.DataFrame: panels = [] target_count = [] for panel in pmodata["panel_info"]: - panel_targets = 0 + panel_targets = [] panels.append(panel["panel_name"]) for reaction in panel["reactions"]: - panel_targets += len(reaction["panel_targets"]) - target_count.append(panel_targets) + panel_targets.extend(reaction["panel_targets"]) + target_count.append(len(set(panel_targets))) return pd.DataFrame( data={"panel_name": panels, "panel_target_count": target_count} ) From b0b9685e3adac976fb9e9f70a1bfa845f856e7aa Mon Sep 17 00:00:00 2001 From: Nicholas Hathaway Date: Mon, 24 Nov 2025 17:22:21 -0800 Subject: [PATCH 29/31] added several exporter functions to go from PMO to various tables; --- src/pmotools/cli.py | 81 ++- src/pmotools/pmo_engine/pmo_exporter.py | 642 ++++++++++++++++++ src/pmotools/pmo_engine/pmo_processor.py | 441 ------------ ..._library_sample_names_per_specimen_name.py | 4 +- .../scripts/pmo_to_tables/__init__.py | 0 .../export_library_sample_meta_table.py | 60 ++ .../export_panel_info_meta_table.py | 60 ++ .../export_project_info_meta_table.py | 60 ++ .../export_sequencing_info_meta_table.py | 60 ++ .../export_specimen_meta_table.py | 60 ++ .../export_specimen_travel_meta_table.py | 60 ++ .../export_target_info_meta_table.py | 60 ++ .../extract_allele_table.py | 4 +- .../extract_insert_of_panels.py | 5 +- .../extract_refseq_of_inserts_of_panels.py | 5 +- tests/test_pmo_engine/test_pmo_exporter.py | 277 ++++++++ tests/test_pmo_engine/test_pmo_processor.py | 124 ---- 17 files changed, 1415 insertions(+), 588 deletions(-) create mode 100644 src/pmotools/pmo_engine/pmo_exporter.py create mode 100644 src/pmotools/scripts/pmo_to_tables/__init__.py create mode 100644 src/pmotools/scripts/pmo_to_tables/export_library_sample_meta_table.py create mode 100644 src/pmotools/scripts/pmo_to_tables/export_panel_info_meta_table.py create mode 100644 src/pmotools/scripts/pmo_to_tables/export_project_info_meta_table.py create mode 100644 src/pmotools/scripts/pmo_to_tables/export_sequencing_info_meta_table.py create mode 100644 src/pmotools/scripts/pmo_to_tables/export_specimen_meta_table.py create mode 100644 src/pmotools/scripts/pmo_to_tables/export_specimen_travel_meta_table.py create mode 100644 src/pmotools/scripts/pmo_to_tables/export_target_info_meta_table.py rename src/pmotools/scripts/{extractors_from_pmo => pmo_to_tables}/extract_allele_table.py (97%) rename src/pmotools/scripts/{extract_info_from_pmo => pmo_to_tables}/extract_insert_of_panels.py (94%) rename src/pmotools/scripts/{extract_info_from_pmo => pmo_to_tables}/extract_refseq_of_inserts_of_panels.py (90%) create mode 100755 tests/test_pmo_engine/test_pmo_exporter.py diff --git a/src/pmotools/cli.py b/src/pmotools/cli.py index 855e48f..ce368ac 100644 --- a/src/pmotools/cli.py +++ b/src/pmotools/cli.py @@ -37,7 +37,7 @@ from pmotools.scripts.extractors_from_pmo.extract_pmo_with_read_filter import ( extract_pmo_with_read_filter, ) -from pmotools.scripts.extractors_from_pmo.extract_allele_table import ( +from pmotools.scripts.pmo_to_tables.extract_allele_table import ( extract_for_allele_table, ) @@ -66,13 +66,37 @@ ) # panel info subset -from pmotools.scripts.extract_info_from_pmo.extract_insert_of_panels import ( +from pmotools.scripts.pmo_to_tables.extract_insert_of_panels import ( extract_insert_of_panels, ) -from pmotools.scripts.extract_info_from_pmo.extract_refseq_of_inserts_of_panels import ( +from pmotools.scripts.pmo_to_tables.extract_refseq_of_inserts_of_panels import ( extract_refseq_of_inserts_of_panels, ) +# pmo to tables + +from pmotools.scripts.pmo_to_tables.export_specimen_meta_table import ( + export_specimen_meta_table, +) +from pmotools.scripts.pmo_to_tables.export_library_sample_meta_table import ( + export_library_sample_meta_table, +) +from pmotools.scripts.pmo_to_tables.export_project_info_meta_table import ( + export_project_info_meta_table, +) +from pmotools.scripts.pmo_to_tables.export_sequencing_info_meta_table import ( + export_sequencing_info_meta_table, +) +from pmotools.scripts.pmo_to_tables.export_specimen_travel_meta_table import ( + export_specimen_travel_meta_table, +) +from pmotools.scripts.pmo_to_tables.export_target_info_meta_table import ( + export_target_info_meta_table, +) +from pmotools.scripts.pmo_to_tables.export_panel_info_meta_table import ( + export_panel_info_meta_table, +) + @dataclass(frozen=True) class PmoCommand: @@ -115,17 +139,6 @@ class PmoCommand: "extract_pmo_with_read_filter": PmoCommand( extract_pmo_with_read_filter, "Extract with a read filter" ), - "extract_allele_table": PmoCommand( - extract_for_allele_table, - "Extract allele tables for tools like dcifer or moire", - ), - "extract_insert_of_panels": PmoCommand( - extract_insert_of_panels, "Extract inserts of panels from a PMO" - ), - "extract_refseq_of_inserts_of_panels": PmoCommand( - extract_refseq_of_inserts_of_panels, - "Extract ref_seq of panel inserts from a PMO", - ), }, "working_with_multiple_pmos": { "combine_pmos": PmoCommand( @@ -160,6 +173,46 @@ class PmoCommand: validate_pmo, "Validate a PMO file against a JSON Schema" ) }, + "pmo_to_table": { + "export_specimen_meta_table": PmoCommand( + export_specimen_meta_table, "export the specimen meta table from a PMO file" + ), + "export_library_sample_meta_table": PmoCommand( + export_library_sample_meta_table, + "export the library_sample meta table from a PMO file", + ), + "export_project_info_meta_table": PmoCommand( + export_project_info_meta_table, + "export the project_info meta table from a PMO file", + ), + "export_sequencing_info_meta_table": PmoCommand( + export_sequencing_info_meta_table, + "export the sequencing_info meta table from a PMO file", + ), + "export_specimen_travel_meta_table": PmoCommand( + export_specimen_travel_meta_table, + "export the specimen travel_info meta table from a PMO file", + ), + "export_target_info_meta_table": PmoCommand( + export_target_info_meta_table, + "export the target info meta table from a PMO file", + ), + "export_panel_info_meta_table": PmoCommand( + export_panel_info_meta_table, + "export the panel info meta table from a PMO file", + ), + "extract_allele_table": PmoCommand( + extract_for_allele_table, + "Extract allele tables for tools like dcifer or moire", + ), + "extract_insert_of_panels": PmoCommand( + extract_insert_of_panels, "Extract inserts of panels from a PMO" + ), + "extract_refseq_of_inserts_of_panels": PmoCommand( + extract_refseq_of_inserts_of_panels, + "Extract ref_seq of panel inserts from a PMO", + ), + }, } diff --git a/src/pmotools/pmo_engine/pmo_exporter.py b/src/pmotools/pmo_engine/pmo_exporter.py new file mode 100644 index 0000000..1a39282 --- /dev/null +++ b/src/pmotools/pmo_engine/pmo_exporter.py @@ -0,0 +1,642 @@ +#!/usr/bin/env python3 +import copy +import json +import os +from collections import defaultdict +from typing import NamedTuple +import pandas as pd + +from pmotools.pmo_engine.pmo_checker import PMOChecker +from pmotools.pmo_engine.pmo_processor import PMOProcessor + +from pmotools import __version__ as __pmotools_version__ + +bed_loc_tuple = NamedTuple( + "bed_loc", + [ + ("chrom", str), + ("start", int), + ("end", int), + ("name", str), + ("score", float), + ("strand", str), + ("ref_seq", str), + ("extra_info", str), + ], +) + + +class PMOExporter(object): + """ + A collection of functions to export information out of a PMO + """ + + @staticmethod + def is_primitive(x) -> bool: + return isinstance(x, (str, int, float, bool)) or x is None + + @staticmethod + def is_primitive_list(x) -> bool: + return isinstance(x, (list, tuple)) and all( + PMOExporter.is_primitive(i) for i in x + ) + + @staticmethod + def is_exportable(x) -> bool: + return PMOExporter.is_primitive(x) or PMOExporter.is_primitive_list(x) + + @staticmethod + def export_specimen_travel_meta_table( + pmodata, separator: str = "," + ) -> pd.DataFrame: + """ + Export the specimen meta information of a PMO to a dataframe + Currently avoiding exporting values of complex object types like TravelInfo or Parasite densities, best to export such values in their own tables + :param pmodata: the pmo export the information from + :param separator: the separator to use for list values + :return: a pandas dataframe of the specimen metadata + """ + rows = [] + for specimen in pmodata["specimen_info"]: + if "travel_out_six_month" in specimen: + for travel_meta in specimen["travel_out_six_month"]: + export_row = {"specimen_name": specimen["specimen_name"]} + for key, value in travel_meta.items(): + if PMOExporter.is_primitive(value): + export_row[key] = value + elif PMOExporter.is_primitive_list(value): + export_row[key] = separator.join(str(v) for v in value) + rows.append(export_row) + return pd.DataFrame(rows) + + @staticmethod + def export_specimen_meta_table(pmodata, separator: str = ",") -> pd.DataFrame: + """ + Export the specimen meta information of a PMO to a dataframe + Currently avoiding exporting values of complex object types like TravelInfo or Parasite densities, best to export such values in their own tables + :param pmodata: the pmo export the information from + :param separator: the separator to use for list values + :return: a pandas dataframe of the specimen metadata + """ + rows = [] + for specimen in pmodata["specimen_info"]: + export_row = {} + for key, value in specimen.items(): + if "project_id" == key: + export_row["project_name"] = pmodata["project_info"][value][ + "project_name" + ] + elif PMOExporter.is_primitive(value): + export_row[key] = value + elif PMOExporter.is_primitive_list(value): + export_row[key] = separator.join(str(v) for v in value) + rows.append(export_row) + return pd.DataFrame(rows) + + @staticmethod + def export_library_sample_meta_table(pmodata, separator: str = ",") -> pd.DataFrame: + """ + Export the library_sample meta information of a PMO to a dataframe + :param pmodata: the pmo export the information from + :param separator: the separator to use for list values + :return: a pandas dataframe of the library_sample metadata + """ + rows = [] + for library_sample in pmodata["library_sample_info"]: + export_row = {} + for key, value in library_sample.items(): + if "sequencing_info_id" == key: + export_row["sequencing_info_name"] = pmodata["sequencing_info"][ + value + ]["sequencing_info_name"] + elif "specimen_id" == key: + export_row["specimen_name"] = pmodata["specimen_info"][value][ + "specimen_name" + ] + elif "panel_id" == key: + export_row["panel_name"] = pmodata["panel_info"][value][ + "panel_name" + ] + elif PMOExporter.is_primitive(value): + export_row[key] = value + elif PMOExporter.is_primitive_list(value): + export_row[key] = separator.join(str(v) for v in value) + rows.append(export_row) + return pd.DataFrame(rows) + + @staticmethod + def export_sequencing_info_meta_table( + pmodata, separator: str = "," + ) -> pd.DataFrame: + """ + Export the sequencing_info meta information of a PMO to a dataframe + :param pmodata: the pmo export the information from + :param separator: the separator to use for list values + :return: a pandas dataframe of the sequencing_info metadata + """ + rows = [] + for sequencing_info in pmodata["sequencing_info"]: + export_row = {} + for key, value in sequencing_info.items(): + if PMOExporter.is_primitive(value): + export_row[key] = value + elif PMOExporter.is_primitive_list(value): + export_row[key] = separator.join(str(v) for v in value) + rows.append(export_row) + return pd.DataFrame(rows) + + @staticmethod + def export_project_info_meta_table(pmodata, separator: str = ",") -> pd.DataFrame: + """ + Export the project_info meta information of a PMO to a dataframe + :param pmodata: the pmo export the information from + :param separator: the separator to use for list values + :return: a pandas dataframe of the project_info metadata + """ + rows = [] + for project_info in pmodata["project_info"]: + export_row = {} + for key, value in project_info.items(): + if PMOExporter.is_primitive(value): + export_row[key] = value + elif PMOExporter.is_primitive_list(value): + export_row[key] = separator.join(str(v) for v in value) + rows.append(export_row) + return pd.DataFrame(rows) + + @staticmethod + def export_panel_info_meta_table(pmodata, separator: str = ",") -> pd.DataFrame: + """ + Export the panel meta information of a PMO to a dataframe + :param pmodata: the pmo export the information from + :param separator: the separator to use for list values + :return: a pandas dataframe of the panel metadata + """ + rows = [] + for panel_info in pmodata["panel_info"]: + export_row = {} + for key, value in panel_info.items(): + if PMOExporter.is_primitive(value): + export_row[key] = value + elif PMOExporter.is_primitive_list(value): + export_row[key] = separator.join(str(v) for v in value) + reactions_for_target = defaultdict(list) + for reaction in panel_info["reactions"]: + for target_id in reaction["panel_targets"]: + reactions_for_target[ + pmodata["target_info"][target_id]["target_name"] + ].append(reaction["reaction_name"]) + for target, reactions in reactions_for_target.items(): + export_row_per_target = copy.deepcopy(export_row) + export_row_per_target["target_name"] = target + export_row_per_target["reaction_name"] = separator.join(reactions) + rows.append(export_row_per_target) + return pd.DataFrame(rows) + + @staticmethod + def export_target_info_meta_table(pmodata, separator: str = ",") -> pd.DataFrame: + """ + Export the target meta information of a PMO to a dataframe + :param pmodata: the pmo export the information from + :param separator: the separator to use for list values + :return: a pandas dataframe of the panel metadata + """ + rows = [] + for panel_info in pmodata["target_info"]: + export_row = {} + for key, value in panel_info.items(): + if "forward_primer" == key: + export_row["forward_primer_seq"] = panel_info["forward_primer"][ + "seq" + ] + elif "reverse_primer" == key: + export_row["reverse_primer_seq"] = panel_info["reverse_primer"][ + "seq" + ] + elif PMOExporter.is_primitive(value): + export_row[key] = value + elif PMOExporter.is_primitive_list(value): + export_row[key] = separator.join(str(v) for v in value) + rows.append(export_row) + return pd.DataFrame(rows) + + @staticmethod + def write_bed_locs(bed_locs: list[bed_loc_tuple], fnp, add_header: bool = False): + """ + Write out a list of bed_loc_tuple to a file, will auto overwrite it + :param bed_locs: a list of bed_loc_tuple + :param fnp: output file path, will be overwritten if it exists + :param add_header: add header of #chrom,start end,name,score,strand,ref_seq,extra_info, starts with comment so tools will treat it as a comment line + """ + with open(fnp, "w") as f: + if add_header: + f.write( + "\t".join( + [ + "#chrom", + "start", + "end", + "name", + "score", + "strand", + "ref_seq", + "extra_info", + ] + ) + ) + for bed_loc in bed_locs: + f.write( + "\t".join( + [ + bed_loc.chrom, + str(bed_loc.start), + str(bed_loc.end), + bed_loc.name, + str(bed_loc.score), + bed_loc.strand, + str(bed_loc.ref_seq), + bed_loc.extra_info, + ] + ) + ) + f.write("\n") + + @staticmethod + def extract_targets_insert_bed_loc( + pmodata, select_target_ids: list[int] = None, sort_output: bool = True + ): + """ + Extract out of a PMO the insert location for targets, will add ref seq if loaded into PMO + :param pmodata: the PMO to extract from + :param select_target_ids: a list of target ids to select, if None will select all targets + :param sort_output: whether to sort output by genomic location + :return: a list of target inserts, with named tuples with fields: chrom, start, end, name, score, strand, extra_info, ref_seq + """ + # bed_loc = NamedTuple("bed_loc", [("chrom", str), ("start", int), ("end", int), ("name", str), ("score", float), ("strand", str), ("extra_info", str), ("ref_seq", str)]) + bed_loc_out = [] + if select_target_ids is None: + select_target_ids = list(range(len(pmodata["target_info"]))) + for target_id in select_target_ids: + tar = pmodata["target_info"][target_id] + if "insert_location" not in tar: + raise Exception( + "no insert_location in pmodata for target id " + + str(target_id) + + " target_name " + + str(tar["target_name"]) + + ", cannot extract insert_location" + ) + genome_info = pmodata["targeted_genomes"][ + tar["insert_location"]["genome_id"] + ] + genome_name_version = ( + genome_info["name"] + "_" + genome_info["genome_version"] + ) + extra_info = ( + str("[") + str("genome_name_version=") + genome_name_version + ";]" + ) + strand = ( + "+" + if "strand" not in tar["insert_location"] + else tar["insert_location"]["strand"] + ) + ref_seq = ( + "" + if "ref_seq" not in tar["insert_location"] + else tar["insert_location"]["ref_seq"] + ) + bed_loc_out.append( + bed_loc_tuple( + tar["insert_location"]["chrom"], + tar["insert_location"]["start"], + tar["insert_location"]["end"], + tar["target_name"], + tar["insert_location"]["end"] - tar["insert_location"]["start"], + strand, + ref_seq, + extra_info, + ) + ) + if sort_output: + return sorted(bed_loc_out, key=lambda bed: (bed.chrom, bed.start, bed.end)) + return bed_loc_out + + @staticmethod + def extract_panels_insert_bed_loc( + pmodata, select_panel_ids: list[int] = None, sort_output: bool = True + ): + """ + Extract out of a PMO the insert location for panels, will add ref seq if loaded into PMO + :param pmodata: the PMO to extract from + :param select_panel_ids: a list of panels ids to select, if None will select all panels + :param sort_output: whether to sort output by genomic location + :return: a list of target inserts, with named tuples with fields: chrom, start, end, name, score, strand, extra_info, ref_seq + """ + bed_loc_out = {} + if select_panel_ids is None: + select_panel_ids = list(range(len(pmodata["panel_info"]))) + for panel_id in select_panel_ids: + bed_loc_out_per_panel = [] + for reaction_id in range(len(pmodata["panel_info"][panel_id]["reactions"])): + for target_id in pmodata["panel_info"][panel_id]["reactions"][ + reaction_id + ]["panel_targets"]: + tar = pmodata["target_info"][target_id] + if "insert_location" not in tar: + raise Exception( + "no insert_location in pmodata for target id " + + str(target_id) + + " target_name " + + str(tar["target_name"]) + + ", cannot extract insert_location" + ) + genome_info = pmodata["targeted_genomes"][ + tar["insert_location"]["genome_id"] + ] + genome_name_version = ( + genome_info["name"] + "_" + genome_info["genome_version"] + ) + extra_info = ( + str("[") + + "genome_name_version=" + + genome_name_version + + ";" + + "panel=" + + pmodata["panel_info"][panel_id]["panel_name"] + + ";" + + "reaction=" + + pmodata["panel_info"][panel_id]["reactions"][reaction_id][ + "reaction_name" + ] + + ";" + + "]" + ) + strand = ( + "+" + if "strand" not in tar["insert_location"] + else tar["insert_location"]["strand"] + ) + ref_seq = ( + "" + if "ref_seq" not in tar["insert_location"] + else tar["insert_location"]["ref_seq"] + ) + bed_loc_out_per_panel.append( + bed_loc_tuple( + tar["insert_location"]["chrom"], + tar["insert_location"]["start"], + tar["insert_location"]["end"], + tar["target_name"], + tar["insert_location"]["end"] + - tar["insert_location"]["start"], + strand, + ref_seq, + extra_info, + ) + ) + if sort_output: + return sorted( + bed_loc_out_per_panel, + key=lambda bed: (bed.chrom, bed.start, bed.end), + ) + bed_loc_out[panel_id] = bed_loc_out_per_panel + return bed_loc_out + + @staticmethod + def extract_alleles_per_sample_table( + pmodata, + additional_specimen_info_fields: list[str] = None, + additional_library_sample_info_fields: list[str] = None, + additional_microhap_fields: list[str] = None, + additional_representative_info_fields: list[str] = None, + default_base_col_names: list[str] = [ + "library_sample_name", + "target_name", + "mhap_id", + ], + jsonschema_fnp=os.path.join( + os.path.dirname( + os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + ), + "schemas/", + f"portable_microhaplotype_object_v{__pmotools_version__}.schema.json", + ), + validate_pmo: bool = False, + ) -> pd.DataFrame: + """ + Create a pd.Dataframe of sample, target and allele. Can optionally add on any other additional fields + + :param pmodata: the data to write from + :param additional_specimen_info_fields: any additional fields to write from the specimen_info object + :param additional_library_sample_info_fields: any additional fields to write from the library_samples object + :param additional_microhap_fields: any additional fields to write from the microhap object + :param additional_representative_info_fields: any additional fields to write from the representative_microhaplotype_sequences object + :param default_base_col_names: The default column name for the sample, locus and allele + :param jsonschema_fnp: path to the jsonschema schema file to validate the PMO against + :param validate_pmo: whether to validate the PMO with a jsonschema + :return: pandas dataframe + """ + + # check input + if validate_pmo: + with open(jsonschema_fnp) as f: + checker = PMOChecker(json.load(f)) + checker.validate_pmo_json(pmodata) + + # Check to see if at least 1 sample has supplied meta field + # samples without this meta field will have NA + if additional_specimen_info_fields is not None: + # Find meta fields that have at least some data + meta_fields_with_data = { + metafield + for metafield in additional_specimen_info_fields + for specimen_data in pmodata["specimen_info"] + if metafield in specimen_data + } + + # Determine meta fields with no samples having data + meta_fields_with_no_samples = ( + set(additional_specimen_info_fields) - meta_fields_with_data + ) + + if meta_fields_with_no_samples: + raise Exception( + f"No specimen_info have data for fields: {', '.join(meta_fields_with_no_samples)}" + ) + # Check to see if at least 1 sample has supplied meta field + # samples without this meta field will have NA + if additional_library_sample_info_fields is not None: + # Find meta fields that have at least some data + meta_fields_with_data = { + metafield + for metafield in additional_library_sample_info_fields + for library_data in pmodata["library_sample_info"] + if metafield in library_data + } + # Determine meta fields with no samples having data + meta_fields_with_no_samples = ( + set(additional_library_sample_info_fields) - meta_fields_with_data + ) + + if meta_fields_with_no_samples: + raise Exception( + f"No library_sample_info have data for fields: {', '.join(meta_fields_with_no_samples)}" + ) + + # Check to see if at least 1 haplotype has this field + # samples without this meta field will have NA + if additional_microhap_fields is not None: + # Find meta fields that have at least some data + additional_microhap_fields_with_data = { + additional_microhap_field + for additional_microhap_field in additional_microhap_fields + for detected_microhaplotypes in pmodata["detected_microhaplotypes"] + for library_samples_data in detected_microhaplotypes["library_samples"] + for target_data in library_samples_data["target_results"] + for microhap_data in target_data["mhaps"] + if additional_microhap_field in microhap_data + } + # Determine meta fields with no samples having data + additional_microhap_fields_with_no_samples = ( + set(additional_microhap_fields) - additional_microhap_fields_with_data + ) + + if additional_microhap_fields_with_no_samples: + raise Exception( + f"No detected_microhaplotypes have data for fields: {', '.join(additional_microhap_fields_with_no_samples)}" + ) + # Check to see if at least 1 haplotype has this field + # samples without this meta field will have NA + if additional_representative_info_fields is not None: + # Find meta fields that have at least some data + additional_microhap_fields_with_data = { + additional_microhap_field + for additional_microhap_field in additional_representative_info_fields + for target_data in pmodata["representative_microhaplotypes"]["targets"] + for microhap_data in target_data["microhaplotypes"] + if additional_microhap_field in microhap_data + } + # Determine meta fields with no samples having data + additional_microhap_fields_with_no_samples = ( + set(additional_representative_info_fields) + - additional_microhap_fields_with_data + ) + + if additional_microhap_fields_with_no_samples: + raise Exception( + f"No representative_microhaplotype_sequences have data for fields: {', '.join(additional_microhap_fields_with_no_samples)}" + ) + + if len(default_base_col_names) != 3: + raise Exception( + "Must have 3 default columns for allele counts, not {}".format( + len(default_base_col_names) + ) + ) + + rows = [] + specimen_info = pmodata["specimen_info"] + target_info = pmodata["target_info"] + library_sample_info = pmodata["library_sample_info"] + detected_microhaps = pmodata["detected_microhaplotypes"] + rep_haps = pmodata["representative_microhaplotypes"]["targets"] + bioinformatics_run_names = PMOProcessor.get_bioinformatics_run_names(pmodata) + for bio_run_for_detected_microhaps in detected_microhaps: + bioinformatics_run_id = bio_run_for_detected_microhaps[ + "bioinformatics_run_id" + ] + for sample_data in bio_run_for_detected_microhaps["library_samples"]: + library_sample_id = sample_data["library_sample_id"] + specimen_id = library_sample_info[library_sample_id]["specimen_id"] + library_meta = library_sample_info[library_sample_id] + specimen_meta = specimen_info[specimen_id] + for target_data in sample_data["target_results"]: + target_name = target_info[ + rep_haps[target_data["mhaps_target_id"]]["target_id"] + ]["target_name"] + for microhap_data in target_data["mhaps"]: + allele_id = microhap_data["mhap_id"] + # print(rep_haps[target_data["mhaps_target_id"]]) + rep_hap_meta = rep_haps[target_data["mhaps_target_id"]][ + "microhaplotypes" + ][allele_id] + row = { + "bioinformatics_run_name": bioinformatics_run_names[ + bioinformatics_run_id + ], + default_base_col_names[0]: library_meta[ + "library_sample_name" + ], + default_base_col_names[1]: target_name, + default_base_col_names[2]: allele_id, + } + if additional_library_sample_info_fields is not None: + for field in additional_library_sample_info_fields: + row[field] = library_meta.get(field, "NA") + if additional_specimen_info_fields is not None: + for field in additional_specimen_info_fields: + row[field] = specimen_meta.get(field, "NA") + if additional_microhap_fields is not None: + for field in additional_microhap_fields: + row[field] = microhap_data.get(field, "NA") + if additional_representative_info_fields is not None: + for field in additional_representative_info_fields: + row[field] = rep_hap_meta.get(field, "NA") + rows.append(row) + # Build and return DataFrame + return pd.DataFrame(rows) + + @staticmethod + def list_library_sample_names_per_specimen_name( + pmodata, + select_specimen_ids: list[int] = None, + select_specimen_names: list[str] = None, + ) -> pd.DataFrame: + """ + List all the library_sample_names per specimen_name + :param pmodata: the PMO + :param select_specimen_ids: a list of specimen_ids to select, if None, all specimen_ids are used + :param select_specimen_names: a list of specimen_names to select, if None, all specimen_names are used + :return: a pandas dataframe with 3 columns, specimen_id, library_sample_id, and library_sample_id_count(the number of library_sample_ids per specimen_id) + """ + if select_specimen_ids is not None and select_specimen_names is not None: + raise ValueError( + "Cannot specify both select_specimen_ids and select_specimen_names" + ) + lib_samples_per_spec = defaultdict(list[str]) + if select_specimen_names is not None: + select_specimen_ids = PMOProcessor.get_index_of_specimen_names( + pmodata, select_specimen_names + ) + for lib_sample in pmodata["library_sample_info"]: + if ( + select_specimen_ids is None + or lib_sample["specimen_id"] in select_specimen_ids + ): + lib_samples_per_spec[ + pmodata["specimen_info"][lib_sample["specimen_id"]]["specimen_name"] + ].append(lib_sample["library_sample_name"]) + + specimens_not_list = [] + for specimen in pmodata["specimen_info"]: + if specimen["specimen_name"] not in lib_samples_per_spec: + specimens_not_list.append(specimen["specimen_name"]) + + # Prepare the data for DataFrame creation + data = [] + for specimen_name, library_sample_names in lib_samples_per_spec.items(): + for library_sample_name in library_sample_names: + data.append( + { + "specimen_name": specimen_name, + "library_sample_name": library_sample_name, + "library_sample_count": len(library_sample_names), + } + ) + + # Create the DataFrame + df = pd.DataFrame( + data, + columns=["specimen_name", "library_sample_name", "library_sample_count"], + ) + return df diff --git a/src/pmotools/pmo_engine/pmo_processor.py b/src/pmotools/pmo_engine/pmo_processor.py index 07ab55b..8047912 100644 --- a/src/pmotools/pmo_engine/pmo_processor.py +++ b/src/pmotools/pmo_engine/pmo_processor.py @@ -1,28 +1,8 @@ #!/usr/bin/env python3 -import json import os -from typing import NamedTuple import copy -import pandas import pandas as pd from collections import defaultdict -from pmotools.pmo_engine.pmo_checker import PMOChecker - -from pmotools import __version__ as __pmotools_version__ - -bed_loc_tuple = NamedTuple( - "bed_loc", - [ - ("chrom", str), - ("start", int), - ("end", int), - ("name", str), - ("score", float), - ("strand", str), - ("ref_seq", str), - ("extra_info", str), - ], -) class PMOProcessor: @@ -423,61 +403,6 @@ def count_targets_per_panel(pmodata) -> pd.DataFrame: data={"panel_name": panels, "panel_target_count": target_count} ) - @staticmethod - def list_library_sample_names_per_specimen_name( - pmodata, - select_specimen_ids: list[int] = None, - select_specimen_names: list[str] = None, - ) -> pandas.DataFrame: - """ - List all the library_sample_names per specimen_name - :param pmodata: the PMO - :param select_specimen_ids: a list of specimen_ids to select, if None, all specimen_ids are used - :param select_specimen_names: a list of specimen_names to select, if None, all specimen_names are used - :return: a pandas dataframe with 3 columns, specimen_id, library_sample_id, and library_sample_id_count(the number of library_sample_ids per specimen_id) - """ - if select_specimen_ids is not None and select_specimen_names is not None: - raise ValueError( - "Cannot specify both select_specimen_ids and select_specimen_names" - ) - lib_samples_per_spec = defaultdict(list[str]) - if select_specimen_names is not None: - select_specimen_ids = PMOProcessor.get_index_of_specimen_names( - pmodata, select_specimen_names - ) - for lib_sample in pmodata["library_sample_info"]: - if ( - select_specimen_ids is None - or lib_sample["specimen_id"] in select_specimen_ids - ): - lib_samples_per_spec[ - pmodata["specimen_info"][lib_sample["specimen_id"]]["specimen_name"] - ].append(lib_sample["library_sample_name"]) - - specimens_not_list = [] - for specimen in pmodata["specimen_info"]: - if specimen["specimen_name"] not in lib_samples_per_spec: - specimens_not_list.append(specimen["specimen_name"]) - - # Prepare the data for DataFrame creation - data = [] - for specimen_name, library_sample_names in lib_samples_per_spec.items(): - for library_sample_name in library_sample_names: - data.append( - { - "specimen_name": specimen_name, - "library_sample_name": library_sample_name, - "library_sample_count": len(library_sample_names), - } - ) - - # Create the DataFrame - df = pd.DataFrame( - data, - columns=["specimen_name", "library_sample_name", "library_sample_count"], - ) - return df - @staticmethod def count_specimen_per_meta_fields(pmodata) -> pd.DataFrame: """ @@ -628,190 +553,6 @@ def extract_allele_counts_freq_from_pmo( ["bioinformatics_run_id", "target_name", "mhap_id"] ).reset_index(drop=True) - @staticmethod - def extract_alleles_per_sample_table( - pmodata, - additional_specimen_info_fields: list[str] = None, - additional_library_sample_info_fields: list[str] = None, - additional_microhap_fields: list[str] = None, - additional_representative_info_fields: list[str] = None, - default_base_col_names: list[str] = [ - "library_sample_name", - "target_name", - "mhap_id", - ], - jsonschema_fnp=os.path.join( - os.path.dirname( - os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - ), - "schemas/", - f"portable_microhaplotype_object_v{__pmotools_version__}.schema.json", - ), - validate_pmo: bool = False, - ) -> pd.DataFrame: - """ - Create a pd.Dataframe of sample, target and allele. Can optionally add on any other additional fields - - :param pmodata: the data to write from - :param additional_specimen_info_fields: any additional fields to write from the specimen_info object - :param additional_library_sample_info_fields: any additional fields to write from the library_samples object - :param additional_microhap_fields: any additional fields to write from the microhap object - :param additional_representative_info_fields: any additional fields to write from the representative_microhaplotype_sequences object - :param default_base_col_names: The default column name for the sample, locus and allele - :param jsonschema_fnp: path to the jsonschema schema file to validate the PMO against - :param validate_pmo: whether to validate the PMO with a jsonschema - :return: pandas dataframe - """ - - # check input - if validate_pmo: - with open(jsonschema_fnp) as f: - checker = PMOChecker(json.load(f)) - checker.validate_pmo_json(pmodata) - - # Check to see if at least 1 sample has supplied meta field - # samples without this meta field will have NA - if additional_specimen_info_fields is not None: - # Find meta fields that have at least some data - meta_fields_with_data = { - metafield - for metafield in additional_specimen_info_fields - for specimen_data in pmodata["specimen_info"] - if metafield in specimen_data - } - - # Determine meta fields with no samples having data - meta_fields_with_no_samples = ( - set(additional_specimen_info_fields) - meta_fields_with_data - ) - - if meta_fields_with_no_samples: - raise Exception( - f"No specimen_info have data for fields: {', '.join(meta_fields_with_no_samples)}" - ) - # Check to see if at least 1 sample has supplied meta field - # samples without this meta field will have NA - if additional_library_sample_info_fields is not None: - # Find meta fields that have at least some data - meta_fields_with_data = { - metafield - for metafield in additional_library_sample_info_fields - for library_data in pmodata["library_sample_info"] - if metafield in library_data - } - # Determine meta fields with no samples having data - meta_fields_with_no_samples = ( - set(additional_library_sample_info_fields) - meta_fields_with_data - ) - - if meta_fields_with_no_samples: - raise Exception( - f"No library_sample_info have data for fields: {', '.join(meta_fields_with_no_samples)}" - ) - - # Check to see if at least 1 haplotype has this field - # samples without this meta field will have NA - if additional_microhap_fields is not None: - # Find meta fields that have at least some data - additional_microhap_fields_with_data = { - additional_microhap_field - for additional_microhap_field in additional_microhap_fields - for detected_microhaplotypes in pmodata["detected_microhaplotypes"] - for library_samples_data in detected_microhaplotypes["library_samples"] - for target_data in library_samples_data["target_results"] - for microhap_data in target_data["mhaps"] - if additional_microhap_field in microhap_data - } - # Determine meta fields with no samples having data - additional_microhap_fields_with_no_samples = ( - set(additional_microhap_fields) - additional_microhap_fields_with_data - ) - - if additional_microhap_fields_with_no_samples: - raise Exception( - f"No detected_microhaplotypes have data for fields: {', '.join(additional_microhap_fields_with_no_samples)}" - ) - # Check to see if at least 1 haplotype has this field - # samples without this meta field will have NA - if additional_representative_info_fields is not None: - # Find meta fields that have at least some data - additional_microhap_fields_with_data = { - additional_microhap_field - for additional_microhap_field in additional_representative_info_fields - for target_data in pmodata["representative_microhaplotypes"]["targets"] - for microhap_data in target_data["microhaplotypes"] - if additional_microhap_field in microhap_data - } - # Determine meta fields with no samples having data - additional_microhap_fields_with_no_samples = ( - set(additional_representative_info_fields) - - additional_microhap_fields_with_data - ) - - if additional_microhap_fields_with_no_samples: - raise Exception( - f"No representative_microhaplotype_sequences have data for fields: {', '.join(additional_microhap_fields_with_no_samples)}" - ) - - if len(default_base_col_names) != 3: - raise Exception( - "Must have 3 default columns for allele counts, not {}".format( - len(default_base_col_names) - ) - ) - - rows = [] - specimen_info = pmodata["specimen_info"] - target_info = pmodata["target_info"] - library_sample_info = pmodata["library_sample_info"] - detected_microhaps = pmodata["detected_microhaplotypes"] - rep_haps = pmodata["representative_microhaplotypes"]["targets"] - bioinformatics_run_names = PMOProcessor.get_bioinformatics_run_names(pmodata) - for bio_run_for_detected_microhaps in detected_microhaps: - bioinformatics_run_id = bio_run_for_detected_microhaps[ - "bioinformatics_run_id" - ] - for sample_data in bio_run_for_detected_microhaps["library_samples"]: - library_sample_id = sample_data["library_sample_id"] - specimen_id = library_sample_info[library_sample_id]["specimen_id"] - library_meta = library_sample_info[library_sample_id] - specimen_meta = specimen_info[specimen_id] - for target_data in sample_data["target_results"]: - target_name = target_info[ - rep_haps[target_data["mhaps_target_id"]]["target_id"] - ]["target_name"] - for microhap_data in target_data["mhaps"]: - allele_id = microhap_data["mhap_id"] - # print(rep_haps[target_data["mhaps_target_id"]]) - rep_hap_meta = rep_haps[target_data["mhaps_target_id"]][ - "microhaplotypes" - ][allele_id] - row = { - "bioinformatics_run_name": bioinformatics_run_names[ - bioinformatics_run_id - ], - default_base_col_names[0]: library_meta[ - "library_sample_name" - ], - default_base_col_names[1]: target_name, - default_base_col_names[2]: allele_id, - } - if additional_library_sample_info_fields is not None: - for field in additional_library_sample_info_fields: - row[field] = library_meta.get(field, "NA") - if additional_specimen_info_fields is not None: - for field in additional_specimen_info_fields: - row[field] = specimen_meta.get(field, "NA") - if additional_microhap_fields is not None: - for field in additional_microhap_fields: - row[field] = microhap_data.get(field, "NA") - if additional_representative_info_fields is not None: - for field in additional_representative_info_fields: - row[field] = rep_hap_meta.get(field, "NA") - rows.append(row) - # Build and return DataFrame - return pd.DataFrame(rows) - @staticmethod def filter_pmo_by_library_sample_ids(pmodata, library_sample_ids: set[int]): """ @@ -1320,185 +1061,3 @@ def extract_from_pmo_with_read_filter(pmodata, read_filter: float): ) pmo_out["detected_microhaplotypes"].append(extracted_microhaps_for_id) return pmo_out - - @staticmethod - def write_bed_locs(bed_locs: list[bed_loc_tuple], fnp, add_header: bool = False): - """ - Write out a list of bed_loc_tuple to a file, will auto overwrite it - :param bed_locs: a list of bed_loc_tuple - :param fnp: output file path, will be overwritten if it exists - :param add_header: add header of #chrom,start end,name,score,strand,ref_seq,extra_info, starts with comment so tools will treat it as a comment line - """ - with open(fnp, "w") as f: - if add_header: - f.write( - "\t".join( - [ - "#chrom", - "start", - "end", - "name", - "score", - "strand", - "ref_seq", - "extra_info", - ] - ) - ) - for bed_loc in bed_locs: - f.write( - "\t".join( - [ - bed_loc.chrom, - str(bed_loc.start), - str(bed_loc.end), - bed_loc.name, - str(bed_loc.score), - bed_loc.strand, - str(bed_loc.ref_seq), - bed_loc.extra_info, - ] - ) - ) - f.write("\n") - - @staticmethod - def extract_targets_insert_bed_loc( - pmodata, select_target_ids: list[int] = None, sort_output: bool = True - ): - """ - Extract out of a PMO the insert location for targets, will add ref seq if loaded into PMO - :param pmodata: the PMO to extract from - :param select_target_ids: a list of target ids to select, if None will select all targets - :param sort_output: whether to sort output by genomic location - :return: a list of target inserts, with named tuples with fields: chrom, start, end, name, score, strand, extra_info, ref_seq - """ - # bed_loc = NamedTuple("bed_loc", [("chrom", str), ("start", int), ("end", int), ("name", str), ("score", float), ("strand", str), ("extra_info", str), ("ref_seq", str)]) - bed_loc_out = [] - if select_target_ids is None: - select_target_ids = list(range(len(pmodata["target_info"]))) - for target_id in select_target_ids: - tar = pmodata["target_info"][target_id] - if "insert_location" not in tar: - raise Exception( - "no insert_location in pmodata for target id " - + str(target_id) - + " target_name " - + str(tar["target_name"]) - + ", cannot extract insert_location" - ) - genome_info = pmodata["targeted_genomes"][ - tar["insert_location"]["genome_id"] - ] - genome_name_version = ( - genome_info["name"] + "_" + genome_info["genome_version"] - ) - extra_info = ( - str("[") + str("genome_name_version=") + genome_name_version + ";]" - ) - strand = ( - "+" - if "strand" not in tar["insert_location"] - else tar["insert_location"]["strand"] - ) - ref_seq = ( - "" - if "ref_seq" not in tar["insert_location"] - else tar["insert_location"]["ref_seq"] - ) - bed_loc_out.append( - bed_loc_tuple( - tar["insert_location"]["chrom"], - tar["insert_location"]["start"], - tar["insert_location"]["end"], - tar["target_name"], - tar["insert_location"]["end"] - tar["insert_location"]["start"], - strand, - ref_seq, - extra_info, - ) - ) - if sort_output: - return sorted(bed_loc_out, key=lambda bed: (bed.chrom, bed.start, bed.end)) - return bed_loc_out - - @staticmethod - def extract_panels_insert_bed_loc( - pmodata, select_panel_ids: list[int] = None, sort_output: bool = True - ): - """ - Extract out of a PMO the insert location for panels, will add ref seq if loaded into PMO - :param pmodata: the PMO to extract from - :param select_panel_ids: a list of panels ids to select, if None will select all panels - :param sort_output: whether to sort output by genomic location - :return: a list of target inserts, with named tuples with fields: chrom, start, end, name, score, strand, extra_info, ref_seq - """ - bed_loc_out = {} - if select_panel_ids is None: - select_panel_ids = list(range(len(pmodata["panel_info"]))) - for panel_id in select_panel_ids: - bed_loc_out_per_panel = [] - for reaction_id in range(len(pmodata["panel_info"][panel_id]["reactions"])): - for target_id in pmodata["panel_info"][panel_id]["reactions"][ - reaction_id - ]["panel_targets"]: - tar = pmodata["target_info"][target_id] - if "insert_location" not in tar: - raise Exception( - "no insert_location in pmodata for target id " - + str(target_id) - + " target_name " - + str(tar["target_name"]) - + ", cannot extract insert_location" - ) - genome_info = pmodata["targeted_genomes"][ - tar["insert_location"]["genome_id"] - ] - genome_name_version = ( - genome_info["name"] + "_" + genome_info["genome_version"] - ) - extra_info = ( - str("[") - + "genome_name_version=" - + genome_name_version - + ";" - + "panel=" - + pmodata["panel_info"][panel_id]["panel_name"] - + ";" - + "reaction=" - + pmodata["panel_info"][panel_id]["reactions"][reaction_id][ - "reaction_name" - ] - + ";" - + "]" - ) - strand = ( - "+" - if "strand" not in tar["insert_location"] - else tar["insert_location"]["strand"] - ) - ref_seq = ( - "" - if "ref_seq" not in tar["insert_location"] - else tar["insert_location"]["ref_seq"] - ) - bed_loc_out_per_panel.append( - bed_loc_tuple( - tar["insert_location"]["chrom"], - tar["insert_location"]["start"], - tar["insert_location"]["end"], - tar["target_name"], - tar["insert_location"]["end"] - - tar["insert_location"]["start"], - strand, - ref_seq, - extra_info, - ) - ) - if sort_output: - return sorted( - bed_loc_out_per_panel, - key=lambda bed: (bed.chrom, bed.start, bed.end), - ) - bed_loc_out[panel_id] = bed_loc_out_per_panel - return bed_loc_out diff --git a/src/pmotools/scripts/extract_info_from_pmo/list_library_sample_names_per_specimen_name.py b/src/pmotools/scripts/extract_info_from_pmo/list_library_sample_names_per_specimen_name.py index f34e5dd..de5a1cd 100755 --- a/src/pmotools/scripts/extract_info_from_pmo/list_library_sample_names_per_specimen_name.py +++ b/src/pmotools/scripts/extract_info_from_pmo/list_library_sample_names_per_specimen_name.py @@ -3,7 +3,7 @@ import sys -from pmotools.pmo_engine.pmo_processor import PMOProcessor +from pmotools.pmo_engine.pmo_exporter import PMOExporter from pmotools.pmo_engine.pmo_reader import PMOReader from pmotools.utils.small_utils import Utils @@ -46,7 +46,7 @@ def list_library_sample_names_per_specimen_name(): pmo = PMOReader.read_in_pmo(args.file) # count fields - info_df = PMOProcessor.list_library_sample_names_per_specimen_name(pmo) + info_df = PMOExporter.list_library_sample_names_per_specimen_name(pmo) # output info_df.to_csv( diff --git a/src/pmotools/scripts/pmo_to_tables/__init__.py b/src/pmotools/scripts/pmo_to_tables/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/pmotools/scripts/pmo_to_tables/export_library_sample_meta_table.py b/src/pmotools/scripts/pmo_to_tables/export_library_sample_meta_table.py new file mode 100644 index 0000000..b624799 --- /dev/null +++ b/src/pmotools/scripts/pmo_to_tables/export_library_sample_meta_table.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +import argparse +import sys + + +from pmotools.pmo_engine.pmo_exporter import PMOExporter +from pmotools.pmo_engine.pmo_reader import PMOReader +from pmotools.utils.small_utils import Utils + + +def parse_args_export_library_sample_meta_table(): + parser = argparse.ArgumentParser() + parser.add_argument("--file", type=str, required=True, help="PMO file") + parser.add_argument( + "--output", type=str, default="STDOUT", required=False, help="output file" + ) + parser.add_argument( + "--delim", + default="tab", + type=str, + required=False, + help="the delimiter of the output text file, examples input tab,comma but can also be the actual delimiter", + ) + parser.add_argument( + "--overwrite", action="store_true", help="If output file exists, overwrite it" + ) + + return parser.parse_args() + + +def export_library_sample_meta_table(): + args = parse_args_export_library_sample_meta_table() + + # check files + output_delim, output_extension = Utils.process_delimiter_and_output_extension( + args.delim, gzip=args.output.endswith(".gz") + ) + args.output = ( + args.output + if "STDOUT" == args.output + else Utils.appendStrAsNeeded(args.output, output_extension) + ) + Utils.inputOutputFileCheck(args.file, args.output, args.overwrite) + + # read in PMO + pmo = PMOReader.read_in_pmo(args.file) + + # count fields + info_df = PMOExporter.export_library_sample_meta_table(pmo) + + # output + info_df.to_csv( + sys.stdout if "STDOUT" == args.output else args.output, + sep=output_delim, + index=False, + ) + + +if __name__ == "__main__": + export_library_sample_meta_table() diff --git a/src/pmotools/scripts/pmo_to_tables/export_panel_info_meta_table.py b/src/pmotools/scripts/pmo_to_tables/export_panel_info_meta_table.py new file mode 100644 index 0000000..a54fc18 --- /dev/null +++ b/src/pmotools/scripts/pmo_to_tables/export_panel_info_meta_table.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +import argparse +import sys + + +from pmotools.pmo_engine.pmo_exporter import PMOExporter +from pmotools.pmo_engine.pmo_reader import PMOReader +from pmotools.utils.small_utils import Utils + + +def parse_args_export_panel_info_meta_table(): + parser = argparse.ArgumentParser() + parser.add_argument("--file", type=str, required=True, help="PMO file") + parser.add_argument( + "--output", type=str, default="STDOUT", required=False, help="output file" + ) + parser.add_argument( + "--delim", + default="tab", + type=str, + required=False, + help="the delimiter of the output text file, examples input tab,comma but can also be the actual delimiter", + ) + parser.add_argument( + "--overwrite", action="store_true", help="If output file exists, overwrite it" + ) + + return parser.parse_args() + + +def export_panel_info_meta_table(): + args = parse_args_export_panel_info_meta_table() + + # check files + output_delim, output_extension = Utils.process_delimiter_and_output_extension( + args.delim, gzip=args.output.endswith(".gz") + ) + args.output = ( + args.output + if "STDOUT" == args.output + else Utils.appendStrAsNeeded(args.output, output_extension) + ) + Utils.inputOutputFileCheck(args.file, args.output, args.overwrite) + + # read in PMO + pmo = PMOReader.read_in_pmo(args.file) + + # count fields + info_df = PMOExporter.export_panel_info_meta_table(pmo) + + # output + info_df.to_csv( + sys.stdout if "STDOUT" == args.output else args.output, + sep=output_delim, + index=False, + ) + + +if __name__ == "__main__": + export_panel_info_meta_table() diff --git a/src/pmotools/scripts/pmo_to_tables/export_project_info_meta_table.py b/src/pmotools/scripts/pmo_to_tables/export_project_info_meta_table.py new file mode 100644 index 0000000..9fbc64d --- /dev/null +++ b/src/pmotools/scripts/pmo_to_tables/export_project_info_meta_table.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +import argparse +import sys + + +from pmotools.pmo_engine.pmo_exporter import PMOExporter +from pmotools.pmo_engine.pmo_reader import PMOReader +from pmotools.utils.small_utils import Utils + + +def parse_args_export_project_info_meta_table(): + parser = argparse.ArgumentParser() + parser.add_argument("--file", type=str, required=True, help="PMO file") + parser.add_argument( + "--output", type=str, default="STDOUT", required=False, help="output file" + ) + parser.add_argument( + "--delim", + default="tab", + type=str, + required=False, + help="the delimiter of the output text file, examples input tab,comma but can also be the actual delimiter", + ) + parser.add_argument( + "--overwrite", action="store_true", help="If output file exists, overwrite it" + ) + + return parser.parse_args() + + +def export_project_info_meta_table(): + args = parse_args_export_project_info_meta_table() + + # check files + output_delim, output_extension = Utils.process_delimiter_and_output_extension( + args.delim, gzip=args.output.endswith(".gz") + ) + args.output = ( + args.output + if "STDOUT" == args.output + else Utils.appendStrAsNeeded(args.output, output_extension) + ) + Utils.inputOutputFileCheck(args.file, args.output, args.overwrite) + + # read in PMO + pmo = PMOReader.read_in_pmo(args.file) + + # count fields + info_df = PMOExporter.export_project_info_meta_table(pmo) + + # output + info_df.to_csv( + sys.stdout if "STDOUT" == args.output else args.output, + sep=output_delim, + index=False, + ) + + +if __name__ == "__main__": + export_project_info_meta_table() diff --git a/src/pmotools/scripts/pmo_to_tables/export_sequencing_info_meta_table.py b/src/pmotools/scripts/pmo_to_tables/export_sequencing_info_meta_table.py new file mode 100644 index 0000000..2c7334f --- /dev/null +++ b/src/pmotools/scripts/pmo_to_tables/export_sequencing_info_meta_table.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +import argparse +import sys + + +from pmotools.pmo_engine.pmo_exporter import PMOExporter +from pmotools.pmo_engine.pmo_reader import PMOReader +from pmotools.utils.small_utils import Utils + + +def parse_args_export_sequencing_info_meta_table(): + parser = argparse.ArgumentParser() + parser.add_argument("--file", type=str, required=True, help="PMO file") + parser.add_argument( + "--output", type=str, default="STDOUT", required=False, help="output file" + ) + parser.add_argument( + "--delim", + default="tab", + type=str, + required=False, + help="the delimiter of the output text file, examples input tab,comma but can also be the actual delimiter", + ) + parser.add_argument( + "--overwrite", action="store_true", help="If output file exists, overwrite it" + ) + + return parser.parse_args() + + +def export_sequencing_info_meta_table(): + args = parse_args_export_sequencing_info_meta_table() + + # check files + output_delim, output_extension = Utils.process_delimiter_and_output_extension( + args.delim, gzip=args.output.endswith(".gz") + ) + args.output = ( + args.output + if "STDOUT" == args.output + else Utils.appendStrAsNeeded(args.output, output_extension) + ) + Utils.inputOutputFileCheck(args.file, args.output, args.overwrite) + + # read in PMO + pmo = PMOReader.read_in_pmo(args.file) + + # count fields + info_df = PMOExporter.export_sequencing_info_meta_table(pmo) + + # output + info_df.to_csv( + sys.stdout if "STDOUT" == args.output else args.output, + sep=output_delim, + index=False, + ) + + +if __name__ == "__main__": + export_sequencing_info_meta_table() diff --git a/src/pmotools/scripts/pmo_to_tables/export_specimen_meta_table.py b/src/pmotools/scripts/pmo_to_tables/export_specimen_meta_table.py new file mode 100644 index 0000000..5a45012 --- /dev/null +++ b/src/pmotools/scripts/pmo_to_tables/export_specimen_meta_table.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +import argparse +import sys + + +from pmotools.pmo_engine.pmo_exporter import PMOExporter +from pmotools.pmo_engine.pmo_reader import PMOReader +from pmotools.utils.small_utils import Utils + + +def parse_args_export_specimen_meta_table(): + parser = argparse.ArgumentParser() + parser.add_argument("--file", type=str, required=True, help="PMO file") + parser.add_argument( + "--output", type=str, default="STDOUT", required=False, help="output file" + ) + parser.add_argument( + "--delim", + default="tab", + type=str, + required=False, + help="the delimiter of the output text file, examples input tab,comma but can also be the actual delimiter", + ) + parser.add_argument( + "--overwrite", action="store_true", help="If output file exists, overwrite it" + ) + + return parser.parse_args() + + +def export_specimen_meta_table(): + args = parse_args_export_specimen_meta_table() + + # check files + output_delim, output_extension = Utils.process_delimiter_and_output_extension( + args.delim, gzip=args.output.endswith(".gz") + ) + args.output = ( + args.output + if "STDOUT" == args.output + else Utils.appendStrAsNeeded(args.output, output_extension) + ) + Utils.inputOutputFileCheck(args.file, args.output, args.overwrite) + + # read in PMO + pmo = PMOReader.read_in_pmo(args.file) + + # count fields + info_df = PMOExporter.export_specimen_meta_table(pmo) + + # output + info_df.to_csv( + sys.stdout if "STDOUT" == args.output else args.output, + sep=output_delim, + index=False, + ) + + +if __name__ == "__main__": + export_specimen_meta_table() diff --git a/src/pmotools/scripts/pmo_to_tables/export_specimen_travel_meta_table.py b/src/pmotools/scripts/pmo_to_tables/export_specimen_travel_meta_table.py new file mode 100644 index 0000000..3594cc8 --- /dev/null +++ b/src/pmotools/scripts/pmo_to_tables/export_specimen_travel_meta_table.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +import argparse +import sys + + +from pmotools.pmo_engine.pmo_exporter import PMOExporter +from pmotools.pmo_engine.pmo_reader import PMOReader +from pmotools.utils.small_utils import Utils + + +def parse_args_export_specimen_travel_meta_table(): + parser = argparse.ArgumentParser() + parser.add_argument("--file", type=str, required=True, help="PMO file") + parser.add_argument( + "--output", type=str, default="STDOUT", required=False, help="output file" + ) + parser.add_argument( + "--delim", + default="tab", + type=str, + required=False, + help="the delimiter of the output text file, examples input tab,comma but can also be the actual delimiter", + ) + parser.add_argument( + "--overwrite", action="store_true", help="If output file exists, overwrite it" + ) + + return parser.parse_args() + + +def export_specimen_travel_meta_table(): + args = parse_args_export_specimen_travel_meta_table() + + # check files + output_delim, output_extension = Utils.process_delimiter_and_output_extension( + args.delim, gzip=args.output.endswith(".gz") + ) + args.output = ( + args.output + if "STDOUT" == args.output + else Utils.appendStrAsNeeded(args.output, output_extension) + ) + Utils.inputOutputFileCheck(args.file, args.output, args.overwrite) + + # read in PMO + pmo = PMOReader.read_in_pmo(args.file) + + # count fields + info_df = PMOExporter.export_specimen_travel_meta_table(pmo) + + # output + info_df.to_csv( + sys.stdout if "STDOUT" == args.output else args.output, + sep=output_delim, + index=False, + ) + + +if __name__ == "__main__": + export_specimen_travel_meta_table() diff --git a/src/pmotools/scripts/pmo_to_tables/export_target_info_meta_table.py b/src/pmotools/scripts/pmo_to_tables/export_target_info_meta_table.py new file mode 100644 index 0000000..05d6d4f --- /dev/null +++ b/src/pmotools/scripts/pmo_to_tables/export_target_info_meta_table.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +import argparse +import sys + + +from pmotools.pmo_engine.pmo_exporter import PMOExporter +from pmotools.pmo_engine.pmo_reader import PMOReader +from pmotools.utils.small_utils import Utils + + +def parse_args_export_target_info_meta_table(): + parser = argparse.ArgumentParser() + parser.add_argument("--file", type=str, required=True, help="PMO file") + parser.add_argument( + "--output", type=str, default="STDOUT", required=False, help="output file" + ) + parser.add_argument( + "--delim", + default="tab", + type=str, + required=False, + help="the delimiter of the output text file, examples input tab,comma but can also be the actual delimiter", + ) + parser.add_argument( + "--overwrite", action="store_true", help="If output file exists, overwrite it" + ) + + return parser.parse_args() + + +def export_target_info_meta_table(): + args = parse_args_export_target_info_meta_table() + + # check files + output_delim, output_extension = Utils.process_delimiter_and_output_extension( + args.delim, gzip=args.output.endswith(".gz") + ) + args.output = ( + args.output + if "STDOUT" == args.output + else Utils.appendStrAsNeeded(args.output, output_extension) + ) + Utils.inputOutputFileCheck(args.file, args.output, args.overwrite) + + # read in PMO + pmo = PMOReader.read_in_pmo(args.file) + + # count fields + info_df = PMOExporter.export_target_info_meta_table(pmo) + + # output + info_df.to_csv( + sys.stdout if "STDOUT" == args.output else args.output, + sep=output_delim, + index=False, + ) + + +if __name__ == "__main__": + export_target_info_meta_table() diff --git a/src/pmotools/scripts/extractors_from_pmo/extract_allele_table.py b/src/pmotools/scripts/pmo_to_tables/extract_allele_table.py similarity index 97% rename from src/pmotools/scripts/extractors_from_pmo/extract_allele_table.py rename to src/pmotools/scripts/pmo_to_tables/extract_allele_table.py index 3a61d83..549028c 100755 --- a/src/pmotools/scripts/extractors_from_pmo/extract_allele_table.py +++ b/src/pmotools/scripts/pmo_to_tables/extract_allele_table.py @@ -8,6 +8,8 @@ from pmotools.utils.small_utils import Utils from pmotools.pmo_engine.pmo_checker import PMOChecker from pmotools.pmo_engine.pmo_processor import PMOProcessor +from pmotools.pmo_engine.pmo_exporter import PMOExporter + from pmotools import __version__ as __pmotools_version__ @@ -132,7 +134,7 @@ def extract_for_allele_table(): args.representative_haps_fields, "," ) - allele_table = PMOProcessor.extract_alleles_per_sample_table( + allele_table = PMOExporter.extract_alleles_per_sample_table( pmodata, additional_specimen_info_fields=args.specimen_info_meta_fields, additional_library_sample_info_fields=args.library_sample_info_meta_fields, diff --git a/src/pmotools/scripts/extract_info_from_pmo/extract_insert_of_panels.py b/src/pmotools/scripts/pmo_to_tables/extract_insert_of_panels.py similarity index 94% rename from src/pmotools/scripts/extract_info_from_pmo/extract_insert_of_panels.py rename to src/pmotools/scripts/pmo_to_tables/extract_insert_of_panels.py index 1687c41..b0da163 100755 --- a/src/pmotools/scripts/extract_info_from_pmo/extract_insert_of_panels.py +++ b/src/pmotools/scripts/pmo_to_tables/extract_insert_of_panels.py @@ -1,8 +1,7 @@ #!/usr/bin/env python3 import argparse - -from pmotools.pmo_engine.pmo_processor import PMOProcessor +from pmotools.pmo_engine.pmo_exporter import PMOExporter from pmotools.pmo_engine.pmo_reader import PMOReader from pmotools.utils.small_utils import Utils @@ -35,7 +34,7 @@ def extract_insert_of_panels(): pmo = PMOReader.read_in_pmo(args.file) # get panel insert locations - panel_bed_locs = PMOProcessor.extract_panels_insert_bed_loc(pmo) + panel_bed_locs = PMOExporter.extract_panels_insert_bed_loc(pmo) # write with Utils.smart_open_write(args.output) as f: diff --git a/src/pmotools/scripts/extract_info_from_pmo/extract_refseq_of_inserts_of_panels.py b/src/pmotools/scripts/pmo_to_tables/extract_refseq_of_inserts_of_panels.py similarity index 90% rename from src/pmotools/scripts/extract_info_from_pmo/extract_refseq_of_inserts_of_panels.py rename to src/pmotools/scripts/pmo_to_tables/extract_refseq_of_inserts_of_panels.py index 49c0112..f335334 100755 --- a/src/pmotools/scripts/extract_info_from_pmo/extract_refseq_of_inserts_of_panels.py +++ b/src/pmotools/scripts/pmo_to_tables/extract_refseq_of_inserts_of_panels.py @@ -1,8 +1,7 @@ #!/usr/bin/env python3 import argparse - -from pmotools.pmo_engine.pmo_processor import PMOProcessor +from pmotools.pmo_engine.pmo_exporter import PMOExporter from pmotools.pmo_engine.pmo_reader import PMOReader from pmotools.utils.small_utils import Utils @@ -30,7 +29,7 @@ def extract_refseq_of_inserts_of_panels(): pmo = PMOReader.read_in_pmo(args.file) # get panel insert locations - panel_bed_locs = PMOProcessor.extract_panels_insert_bed_loc(pmo) + panel_bed_locs = PMOExporter.extract_panels_insert_bed_loc(pmo) # write with Utils.smart_open_write(args.output) as f: diff --git a/tests/test_pmo_engine/test_pmo_exporter.py b/tests/test_pmo_engine/test_pmo_exporter.py new file mode 100755 index 0000000..84acb43 --- /dev/null +++ b/tests/test_pmo_engine/test_pmo_exporter.py @@ -0,0 +1,277 @@ +#!/usr/bin/env python3 +import hashlib +import os +import tempfile +import unittest +import json +import pandas as pd +from pmotools.pmo_engine.pmo_exporter import PMOExporter + + +def md5sum_of_fnp(filename): + with open(filename, "rb") as f: + return hashlib.md5(f.read()).hexdigest() + + +class TestPMOExporter(unittest.TestCase): + def setUp(self): + self.working_dir = os.path.dirname(os.path.abspath(__file__)) + self.test_dir = tempfile.TemporaryDirectory() + with open( + os.path.join( + os.path.dirname(self.working_dir), "data/combined_pmo_example.json" + ) + ) as f: + self.combined_pmo_data = json.load(f) + with open( + os.path.join( + os.path.dirname(self.working_dir), "data/minimum_pmo_example.json" + ) + ) as f: + self.minimum_pmo_data = json.load(f) + + def tearDown(self): + self.test_dir.cleanup() + + def test_list_library_sample_names_per_specimen_name(self): + id_counts = PMOExporter.list_library_sample_names_per_specimen_name( + self.minimum_pmo_data + ) + id_counts_check_data = { + "specimen_name": ["8025874217", "8025874266"], + "library_sample_name": ["8025874217_lib_name", "8025874266_lib_name"], + "library_sample_count": [1, 1], + } + id_counts_check_df = pd.DataFrame(id_counts_check_data) + pd.testing.assert_frame_equal(id_counts, id_counts_check_df) + + with open( + os.path.join( + os.path.dirname(self.working_dir), "data/minimum_pmo_example_2.json" + ) + ) as f: + pmo_data_2 = json.load(f) + id_counts_2 = PMOExporter.list_library_sample_names_per_specimen_name( + pmo_data_2 + ) + id_counts_check_data_2 = { + "specimen_name": ["5tbx", "XUC009"], + "library_sample_name": ["5tbx_lib_name", "XUC009_lib_name"], + "library_sample_count": [1, 1], + } + id_counts_check_df_2 = pd.DataFrame(id_counts_check_data_2) + pd.testing.assert_frame_equal(id_counts_check_df_2, id_counts_2) + + def test_extract_targets_insert_bed_loc(self): + all_target_inserts = PMOExporter.extract_targets_insert_bed_loc( + self.combined_pmo_data, sort_output=True + ) + output1_fnp = os.path.join(self.test_dir.name, "all_target_inserts_test1.bed") + PMOExporter.write_bed_locs(all_target_inserts, output1_fnp) + self.assertEqual("b7e477fe327ad7ae85f78ddaa66c313c", md5sum_of_fnp(output1_fnp)) + + all_target_inserts_8_6_10 = PMOExporter.extract_targets_insert_bed_loc( + self.combined_pmo_data, [8, 6, 10, 20], sort_output=False + ) + output2_fnp = os.path.join( + self.test_dir.name, "all_target_inserts_test2_8_6_10.bed" + ) + PMOExporter.write_bed_locs(all_target_inserts_8_6_10, output2_fnp) + self.assertEqual("9be1da64a4794489e08eca11c240d879", md5sum_of_fnp(output2_fnp)) + + all_target_inserts_8_6_10_sorted = PMOExporter.extract_targets_insert_bed_loc( + self.combined_pmo_data, [8, 6, 10, 20], sort_output=True + ) + output3_fnp = os.path.join( + self.test_dir.name, "all_target_inserts_test2_8_6_10_sorted.bed" + ) + PMOExporter.write_bed_locs(all_target_inserts_8_6_10_sorted, output3_fnp) + self.assertEqual("1831cc6a6f9f2bc4036d1dfad90771a1", md5sum_of_fnp(output3_fnp)) + + def test_extract_panels_insert_bed_loc(self): + all_target_inserts = PMOExporter.extract_panels_insert_bed_loc( + self.combined_pmo_data, sort_output=True + ) + output_fnp = os.path.join(self.test_dir.name, "all_panel_inserts_test1.bed") + PMOExporter.write_bed_locs(all_target_inserts, output_fnp) + self.assertEqual("52b1f79a3a89f8265573fa54b5a7ce57", md5sum_of_fnp(output_fnp)) + + def test_extract_alleles_per_sample_table(self): + allele_data = PMOExporter.extract_alleles_per_sample_table( + self.combined_pmo_data + ).sort_values( + by=[ + "bioinformatics_run_name", + "library_sample_name", + "target_name", + "mhap_id", + ] + ) + output_fnp = os.path.join( + self.test_dir.name, "extracted_alleles_per_sample_table_no_extra_args.csv" + ) + allele_data.to_csv(output_fnp, index=False) + self.assertEqual("2898d87133e2e381612f3c0dea70122f", md5sum_of_fnp(output_fnp)) + + allele_data_with_seq_reads = PMOExporter.extract_alleles_per_sample_table( + self.combined_pmo_data, + additional_microhap_fields=["reads"], + additional_representative_info_fields=["seq"], + ).sort_values( + by=[ + "bioinformatics_run_name", + "library_sample_name", + "target_name", + "mhap_id", + ] + ) + output_fnp = os.path.join( + self.test_dir.name, + "extracted_alleles_per_sample_table_no_extra_args_with_seq_reads.csv", + ) + allele_data_with_seq_reads.to_csv(output_fnp, index=False) + self.assertEqual("744c1c0233066f030881c8b595b9ad5c", md5sum_of_fnp(output_fnp)) + + allele_data_with_seq_reads_panel_id_collection_country = ( + PMOExporter.extract_alleles_per_sample_table( + self.combined_pmo_data, + additional_microhap_fields=["reads"], + additional_representative_info_fields=["seq"], + additional_library_sample_info_fields=["panel_id"], + additional_specimen_info_fields=["collection_country"], + ).sort_values( + by=[ + "bioinformatics_run_name", + "library_sample_name", + "target_name", + "mhap_id", + ] + ) + ) + output_fnp = os.path.join( + self.test_dir.name, + "extracted_alleles_per_sample_table_no_extra_args_with_seq_reads_panel_id_collection_country.csv", + ) + allele_data_with_seq_reads_panel_id_collection_country.to_csv( + output_fnp, index=False + ) + self.assertEqual("c425004244e6af1386b6e7776da76fed", md5sum_of_fnp(output_fnp)) + + def test_export_specimen_meta_table(self): + spec_table = PMOExporter.export_specimen_meta_table(self.minimum_pmo_data) + spec_table.to_csv(os.path.join(self.test_dir.name, "specimen_meta_table.csv")) + self.assertEqual( + "8f94b8b774696e26c4ff6c8086e616a4", + md5sum_of_fnp(os.path.join(self.test_dir.name, "specimen_meta_table.csv")), + ) + + def test_export_target_info_meta_table(self): + target_info_table = PMOExporter.export_target_info_meta_table( + self.minimum_pmo_data + ) + target_info_table.to_csv( + os.path.join(self.test_dir.name, "target_info_table.csv") + ) + self.assertEqual( + "cb0319482c9da5f9d8b22fba955ce1c8", + md5sum_of_fnp(os.path.join(self.test_dir.name, "target_info_table.csv")), + ) + + def test_export_panel_info_meta_table(self): + panel_info_table = PMOExporter.export_panel_info_meta_table( + self.minimum_pmo_data + ) + panel_info_table.to_csv( + os.path.join(self.test_dir.name, "panel_info_table.csv") + ) + self.assertEqual( + "e5127ecaf7fe7950395d6f3d45f1c82a", + md5sum_of_fnp(os.path.join(self.test_dir.name, "panel_info_table.csv")), + ) + + def test_export_library_sample_meta_table(self): + library_sample_table = PMOExporter.export_library_sample_meta_table( + self.minimum_pmo_data + ) + library_sample_table.to_csv( + os.path.join(self.test_dir.name, "library_sample_table.csv") + ) + self.assertEqual( + "7c433a74d215708e9339b5f6dece0bf3", + md5sum_of_fnp(os.path.join(self.test_dir.name, "library_sample_table.csv")), + ) + + def test_export_sequencing_info_meta_table(self): + sequencing_info_table = PMOExporter.export_sequencing_info_meta_table( + self.minimum_pmo_data + ) + sequencing_info_table.to_csv( + os.path.join(self.test_dir.name, "sequencing_info_table.csv") + ) + self.assertEqual( + "1cc6fb83227752454cfc3ba63eac503b", + md5sum_of_fnp( + os.path.join(self.test_dir.name, "sequencing_info_table.csv") + ), + ) + + def test_export_project_info_meta_table(self): + project_info_table = PMOExporter.export_project_info_meta_table( + self.minimum_pmo_data + ) + project_info_table.to_csv( + os.path.join(self.test_dir.name, "project_info_table.csv") + ) + print(project_info_table) + self.assertEqual( + "e533098411cbd96de2733668e8475ab8", + md5sum_of_fnp(os.path.join(self.test_dir.name, "project_info_table.csv")), + ) + + def test_export_specimen_travel_meta_table(self): + test_pmo_with_travel_info = { + "specimen_info": [ + { + "specimen_name": "spec1", + "travel_out_six_month": [ + { + "travel_country": "Kenya", + "travel_start_date": "2024-01", + "travel_end_date": "2024-02", + }, + { + "travel_country": "Kenya", + "travel_start_date": "2024-04", + "travel_end_date": "2024-06", + }, + ], + }, + { + "specimen_name": "spec2", + "travel_out_six_month": [ + { + "travel_country": "Tanzania", + "travel_start_date": "2024-02-15", + "travel_end_date": "2024-02-27", + } + ], + }, + ] + } + specimen_trable_info_table = PMOExporter.export_specimen_travel_meta_table( + test_pmo_with_travel_info + ) + specimen_trable_info_table.to_csv( + os.path.join(self.test_dir.name, "specimen_trable_info_table.csv") + ) + print(specimen_trable_info_table) + self.assertEqual( + "0305350d655184aa385d3d1ddc9b3600", + md5sum_of_fnp( + os.path.join(self.test_dir.name, "specimen_trable_info_table.csv") + ), + ) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_pmo_engine/test_pmo_processor.py b/tests/test_pmo_engine/test_pmo_processor.py index 4d03a6e..3b4348b 100755 --- a/tests/test_pmo_engine/test_pmo_processor.py +++ b/tests/test_pmo_engine/test_pmo_processor.py @@ -41,35 +41,6 @@ def setUp(self): def tearDown(self): self.test_dir.cleanup() - def test_list_library_sample_names_per_specimen_name(self): - id_counts = PMOProcessor.list_library_sample_names_per_specimen_name( - self.minimum_pmo_data - ) - id_counts_check_data = { - "specimen_name": ["8025874217", "8025874266"], - "library_sample_name": ["8025874217_lib_name", "8025874266_lib_name"], - "library_sample_count": [1, 1], - } - id_counts_check_df = pd.DataFrame(id_counts_check_data) - pd.testing.assert_frame_equal(id_counts, id_counts_check_df) - - with open( - os.path.join( - os.path.dirname(self.working_dir), "data/minimum_pmo_example_2.json" - ) - ) as f: - pmo_data_2 = json.load(f) - id_counts_2 = PMOProcessor.list_library_sample_names_per_specimen_name( - pmo_data_2 - ) - id_counts_check_data_2 = { - "specimen_name": ["5tbx", "XUC009"], - "library_sample_name": ["5tbx_lib_name", "XUC009_lib_name"], - "library_sample_count": [1, 1], - } - id_counts_check_df_2 = pd.DataFrame(id_counts_check_data_2) - pd.testing.assert_frame_equal(id_counts_check_df_2, id_counts_2) - def test_count_targets_per_library_sample(self): targets_per_sample_counts = PMOProcessor.count_targets_per_library_sample( self.minimum_pmo_data @@ -338,101 +309,6 @@ def test_extract_allele_counts_freq_from_pmo(self): "cb34c7e1357e2e35024a89464b63f06c", ) - def test_extract_targets_insert_bed_loc(self): - all_target_inserts = PMOProcessor.extract_targets_insert_bed_loc( - self.combined_pmo_data, sort_output=True - ) - output1_fnp = os.path.join(self.test_dir.name, "all_target_inserts_test1.bed") - PMOProcessor.write_bed_locs(all_target_inserts, output1_fnp) - self.assertEqual("b7e477fe327ad7ae85f78ddaa66c313c", md5sum_of_fnp(output1_fnp)) - - all_target_inserts_8_6_10 = PMOProcessor.extract_targets_insert_bed_loc( - self.combined_pmo_data, [8, 6, 10, 20], sort_output=False - ) - output2_fnp = os.path.join( - self.test_dir.name, "all_target_inserts_test2_8_6_10.bed" - ) - PMOProcessor.write_bed_locs(all_target_inserts_8_6_10, output2_fnp) - self.assertEqual("9be1da64a4794489e08eca11c240d879", md5sum_of_fnp(output2_fnp)) - - all_target_inserts_8_6_10_sorted = PMOProcessor.extract_targets_insert_bed_loc( - self.combined_pmo_data, [8, 6, 10, 20], sort_output=True - ) - output3_fnp = os.path.join( - self.test_dir.name, "all_target_inserts_test2_8_6_10_sorted.bed" - ) - PMOProcessor.write_bed_locs(all_target_inserts_8_6_10_sorted, output3_fnp) - self.assertEqual("1831cc6a6f9f2bc4036d1dfad90771a1", md5sum_of_fnp(output3_fnp)) - - def test_extract_panels_insert_bed_loc(self): - all_target_inserts = PMOProcessor.extract_panels_insert_bed_loc( - self.combined_pmo_data, sort_output=True - ) - output_fnp = os.path.join(self.test_dir.name, "all_panel_inserts_test1.bed") - PMOProcessor.write_bed_locs(all_target_inserts, output_fnp) - self.assertEqual("52b1f79a3a89f8265573fa54b5a7ce57", md5sum_of_fnp(output_fnp)) - - def test_extract_alleles_per_sample_table(self): - allele_data = PMOProcessor.extract_alleles_per_sample_table( - self.combined_pmo_data - ).sort_values( - by=[ - "bioinformatics_run_name", - "library_sample_name", - "target_name", - "mhap_id", - ] - ) - output_fnp = os.path.join( - self.test_dir.name, "extracted_alleles_per_sample_table_no_extra_args.csv" - ) - allele_data.to_csv(output_fnp, index=False) - self.assertEqual("2898d87133e2e381612f3c0dea70122f", md5sum_of_fnp(output_fnp)) - - allele_data_with_seq_reads = PMOProcessor.extract_alleles_per_sample_table( - self.combined_pmo_data, - additional_microhap_fields=["reads"], - additional_representative_info_fields=["seq"], - ).sort_values( - by=[ - "bioinformatics_run_name", - "library_sample_name", - "target_name", - "mhap_id", - ] - ) - output_fnp = os.path.join( - self.test_dir.name, - "extracted_alleles_per_sample_table_no_extra_args_with_seq_reads.csv", - ) - allele_data_with_seq_reads.to_csv(output_fnp, index=False) - self.assertEqual("744c1c0233066f030881c8b595b9ad5c", md5sum_of_fnp(output_fnp)) - - allele_data_with_seq_reads_panel_id_collection_country = ( - PMOProcessor.extract_alleles_per_sample_table( - self.combined_pmo_data, - additional_microhap_fields=["reads"], - additional_representative_info_fields=["seq"], - additional_library_sample_info_fields=["panel_id"], - additional_specimen_info_fields=["collection_country"], - ).sort_values( - by=[ - "bioinformatics_run_name", - "library_sample_name", - "target_name", - "mhap_id", - ] - ) - ) - output_fnp = os.path.join( - self.test_dir.name, - "extracted_alleles_per_sample_table_no_extra_args_with_seq_reads_panel_id_collection_country.csv", - ) - allele_data_with_seq_reads_panel_id_collection_country.to_csv( - output_fnp, index=False - ) - self.assertEqual("c425004244e6af1386b6e7776da76fed", md5sum_of_fnp(output_fnp)) - def test_extract_from_pmo_with_read_filter(self): pmo_data_filtered = PMOProcessor.extract_from_pmo_with_read_filter( self.combined_pmo_data, 1000 From 58e5e3abd2da8e4b6740ef4d219b066ab76de1fd Mon Sep 17 00:00:00 2001 From: Nicholas Hathaway Date: Mon, 24 Nov 2025 17:34:02 -0800 Subject: [PATCH 30/31] clarify overwrite warning message; --- src/pmotools/utils/small_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pmotools/utils/small_utils.py b/src/pmotools/utils/small_utils.py index bfaaf3e..5701017 100644 --- a/src/pmotools/utils/small_utils.py +++ b/src/pmotools/utils/small_utils.py @@ -284,7 +284,7 @@ def outputfile_check(output_file: str, overwrite: bool = False): raise Exception( "Output file " + output_file - + " already exists, use --overwrite to overwrite it" + + " already exists, use overwrite=T (or --overwrite if running from command line interface) to overwrite it" ) @staticmethod From 3794d237ec8d489319cffe8cccf7f5be073e7420 Mon Sep 17 00:00:00 2001 From: Nicholas Hathaway Date: Mon, 24 Nov 2025 19:18:31 -0800 Subject: [PATCH 31/31] changed name of file; --- .../pmo_builder/{functions_to_update_meta.py => pmo_updater.py} | 0 .../{test_functions_to_update_meta.py => test_pmo_updater.py} | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename src/pmotools/pmo_builder/{functions_to_update_meta.py => pmo_updater.py} (100%) rename tests/test_pmo_builder/{test_functions_to_update_meta.py => test_pmo_updater.py} (99%) diff --git a/src/pmotools/pmo_builder/functions_to_update_meta.py b/src/pmotools/pmo_builder/pmo_updater.py similarity index 100% rename from src/pmotools/pmo_builder/functions_to_update_meta.py rename to src/pmotools/pmo_builder/pmo_updater.py diff --git a/tests/test_pmo_builder/test_functions_to_update_meta.py b/tests/test_pmo_builder/test_pmo_updater.py similarity index 99% rename from tests/test_pmo_builder/test_functions_to_update_meta.py rename to tests/test_pmo_builder/test_pmo_updater.py index 138213b..e707187 100755 --- a/tests/test_pmo_builder/test_functions_to_update_meta.py +++ b/tests/test_pmo_builder/test_pmo_updater.py @@ -3,7 +3,7 @@ import os import unittest import pandas as pd -from pmotools.pmo_builder.functions_to_update_meta import PMOUpdater +from pmotools.pmo_builder.pmo_updater import PMOUpdater class TestPMOUpdater(unittest.TestCase):