├── LICENSE
├── README.md
├── condor_overview.png
├── data
├── CRC
│ ├── Snakefile
│ ├── config.yaml
│ └── input
│ │ ├── CRC2-L.csv
│ │ ├── CRC2.csv
│ │ ├── alt_readcounts.csv
│ │ ├── character_matrix.csv
│ │ └── total_readcounts.csv
├── PDAC
│ ├── PDAC_panel.xlsx
│ ├── Snakefile
│ ├── config.yaml
│ └── input
│ │ ├── M04_regions.csv
│ │ ├── M04_variants.csv
│ │ ├── alt_readcounts.csv
│ │ ├── amplicon_readcounts.csv
│ │ ├── character_matrix.csv
│ │ ├── snp_list.txt
│ │ ├── sphyr_cell_names.txt
│ │ ├── sphyr_input.txt
│ │ ├── sphyr_mutation_names.txt
│ │ └── total_readcounts.csv
├── sample
│ ├── overview_B.csv
│ ├── overview_character_matrix.csv
│ ├── overview_character_matrix_without_noise.csv
│ ├── overview_copynumbertree_scarlet.txt
│ ├── overview_multi_state_character_matrix.csv
│ ├── overview_multi_state_tree_node_character_matrix.csv
│ ├── overview_phiscs.txt
│ ├── overview_read_count.csv
│ ├── overview_read_count_without_missing.csv
│ ├── overview_readcounts_scarlet.csv
│ ├── overview_scite.txt
│ ├── overview_sifit.txt
│ ├── overview_sphyr.txt
│ ├── overview_tree.dot
│ ├── overview_tree.newick
│ ├── overview_tree_edgelist.csv
│ ├── overview_tree_without_cells.dot
│ ├── overview_variant_count.csv
│ └── overview_variant_count_without_missing.csv
└── simulation
│ ├── Snakefile
│ └── config.yaml
├── scripts
├── auxiliary.py
└── fix_scarlet_output.py
└── src
├── condor.py
├── evaluate_reads.py
├── simulation_reads.py
└── solveConstrainedDollo.py
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 raphael-group
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ConDoR (constrained Dollo Reconstruction)
2 |
3 | 
4 | Overview of the ConDoR algorithm.
5 | ConDoR takes as input: (a) A clustering of cells based on copy-number profiles and (b) variant and total read counts from scDNA-seq data.
6 | ConDoR employs the Constrained k-Dollo model to construct the (c) constrained k-Dollo phylogeny and the (d) mutation matrix.
7 |
8 | More details about the problem formulation and the algorithm can be found here: https://www.biorxiv.org/content/10.1101/2023.01.05.522408v1.abstract
9 |
10 | ## Contents
11 |
12 | 1. [Pre-requisites](#pre-requisites)
13 | 2. [Usage instcructions](#usage)
14 | * [I/O formats](#io)
15 | * [ConDoR](#condor)
16 |
17 |
18 | ## Pre-requisites
19 | + python3 (>=3.6)
20 | + [numpy](https://numpy.org/doc/)
21 | + [pandas](https://pandas.pydata.org/pandas-docs/stable/index.html)
22 | + [gurobipy](https://www.gurobi.com/documentation/9.0/quickstart_mac/py_python_interface.html)
23 | + [networkx](https://networkx.org/)
24 | + (optional for generating simulation instances) [snakemake (>=5.2.0)](https://snakemake.readthedocs.io)
25 |
26 |
27 | ## Usage instructions
28 |
29 |
30 | ### I/O formats
31 | The input for ConDoR are CSV files containing the total read counts, the variant read counts and the clustering (with or without the mutation matrix).
32 | It is important that the format matches the examples given in `data/sample` that were generated using the following commands.
33 |
34 | ```bash
35 | mkdir data/sample
36 | python src/simulation_reads.py -n 25 -m 25 -p 5 -k 1 -s 0 -d 0.1 -a 0.001 -b 0.001 -o data/sample/overview
37 | ```
38 |
39 |
40 | ### ConDoR
41 |
42 | usage: condor.py [-h] [-i I] [-r R] [-v V] [-s S] [-a A] [-b B] [--ado ADO] [-k K] -o O [-t T]
43 |
44 | optional arguments:
45 | -h, --help show this help message and exit
46 | -i I csv file with mutation matrix and cluster id
47 | -r R csv file with total read count matrix
48 | -v V csv file with variant read count matrix
49 | -s S file containing list of SNPs
50 | -a A false positive error rate [0.001]
51 | -b B false negative error rate [0.001]
52 | --ado ADO precision parameter for ADO
53 | -k K maximum number of losses for an SNV
54 | -o O output prefix
55 | -t T time limit in seconds [1800]
56 |
57 | An example of usage is as follows.
58 |
59 | $ python src/condor.py -i data/sample/overview_character_matrix.csv -a 0.0018 -b 0.001 -k 1 -r data/sample/overview_read_count.csv -v data/sample/overview_variant_count.csv -o data/sample/overview
60 |
--------------------------------------------------------------------------------
/condor_overview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raphael-group/ConDoR/08c116181dc54d7d5a73f3bd4bbc3deca62bf769/condor_overview.png
--------------------------------------------------------------------------------
/data/CRC/Snakefile:
--------------------------------------------------------------------------------
1 | # simulation snakefile
2 | configfile: "config.yaml"
3 |
4 | rule all:
5 | input:
6 | # condor
7 | #expand('condor/CRC2_k{k}_B.csv', filtered_product, seed=seeds, ncells=config['ncells'], ncharacters=config['ncharacters'], nclusters=config['nclusters'], missing=config['missing_rate'], k=config['k']),
8 | expand('condor_reads/CRC2_k{k}_B.csv', k=config['k']),
9 | expand('scarlet/CRC2.edgelist'),
10 |
11 | #rule condor:
12 | # output:
13 | # B='condor/CRC2_k{k}_B.csv',
14 | # input:
15 | # character_matrix='ground_truth/CRC2_k{k}_character_matrix.csv',
16 | # params:
17 | # prefix='condor/CRC2_k{k}',
18 | # fp=config['estimated_fp'],
19 | # fn=config['estimated_fn'],
20 | # log:
21 | # std='condor/CRC2_k{k}.log',
22 | # err='condor/CRC2_k{k}.err.log',
23 | # benchmark: 'condor/CRC2_k{k}.benchmark',
24 | # shell:
25 | # 'python ../../src/condor.py -i {input.character_matrix} -a {params.fp} -b {params.fn} -k {wildcards.k} '
26 | # ' -o {params.prefix} '
27 | # ' > {log.std} 2> {log.err} '
28 |
29 |
30 | rule condor_reads:
31 | output:
32 | B='condor_reads/CRC2_k{k}_B.csv',
33 | input:
34 | character_matrix='input/character_matrix.csv',
35 | total_read_matrix='input/total_readcounts.csv',
36 | variant_read_matrix='input/alt_readcounts.csv',
37 | params:
38 | prefix='condor_reads/CRC2_k{k}',
39 | fp=config['fp'],
40 | fn=config['fn'],
41 | log:
42 | std='condor_reads/CRC2_k{k}.log',
43 | err='condor_reads/CRC2_k{k}.err.log',
44 | benchmark: 'condor_reads/CRC2_k{k}.benchmark',
45 | shell:
46 | 'python ../../src/condor.py -i {input.character_matrix} -a {params.fp} -b {params.fn} -k {wildcards.k} '
47 | ' -r {input.total_read_matrix} -v {input.variant_read_matrix} '
48 | ' -o {params.prefix} '
49 | ' > {log.std} 2> {log.err} '
50 |
51 |
52 | rule scarlet:
53 | output:
54 | Bmatrix= 'scarlet/CRC2.B_ancestor',
55 | input:
56 | readcount= 'input/CRC2.csv',
57 | copynumbertree= 'input/CRC2-L.csv',
58 | params:
59 | python_exec=config['python2_exec'],
60 | scarlet_exec=config['scarlet_exec'],
61 | prefix='scarlet/CRC2'
62 | log:
63 | std='scarlet/CRC2.log',
64 | err='scarlet/CRC2.err.log',
65 | benchmark: 'scarlet/CRC2.benchmark',
66 | shell:
67 | '{params.python_exec} {params.scarlet_exec} {input.readcount} {input.copynumbertree} {params.prefix} '
68 | ' > {log.std} 2> {log.err} ;'
69 |
70 | rule fix_scarlet:
71 | output:
72 | Bmatrix_fixed= 'scarlet/CRC2.B_ancestor_fixed',
73 | input:
74 | Bmatrix= 'scarlet/CRC2.B_ancestor',
75 | character_matrix='input/character_matrix.csv',
76 | params:
77 | prefix='scarlet/CRC2'
78 | shell:
79 | ' python ../../scripts/fix_scarlet_output.py -d {input.character_matrix} -i {params.prefix}.B_ancestor -o {params.prefix}'
80 |
81 | rule scarlet_plot:
82 | input:
83 | Bmatrix='scarlet/CRC2.B_ancestor_fixed',
84 | copynumbertree= 'input/CRC2-L.csv',
85 | output:
86 | tree='scarlet/CRC2.edgelist',
87 | params:
88 | python_exec=config['python2_exec'],
89 | scarlet_plot_exec=config['scarlet_plot_exec'],
90 | prefix='scarlet/CRC2'
91 | log:
92 | std='scarlet/CRC2.plot.log',
93 | err='scarlet/CRC2.plot.err.log',
94 | benchmark: 'scarlet/CRC2.plot.benchmark',
95 | shell:
96 | '{params.python_exec} {params.scarlet_plot_exec} {input.Bmatrix} {input.copynumbertree} ALL {params.prefix} '
97 | ' > {log.std} 2> {log.err} '
98 |
--------------------------------------------------------------------------------
/data/CRC/config.yaml:
--------------------------------------------------------------------------------
1 | #
2 |
3 | fp: 0.001
4 | fn: 0.001
5 |
6 | k:
7 | #- 0
8 | - 1
9 | #- 2
10 |
11 | vaf_threshold: 0.1
12 | read_threshold: 5
13 |
14 | # scarlet parameters
15 | python2_exec: '/n/fs/ragr-data/users/palash/anaconda3/envs/scarlet/bin/python2'
16 | scarlet_exec: '/n/fs/ragr-data/users/palash/scarlet/code/scarlet.py'
17 | scarlet_plot_exec: '/n/fs/ragr-data/users/palash/scarlet/code/plot_tree.py'
18 |
19 |
--------------------------------------------------------------------------------
/data/CRC/input/CRC2-L.csv:
--------------------------------------------------------------------------------
1 | 3,2,FHIT-chr3-60412480,TOX-chr8-59851979,PTPRD-chr9-10074741
2 | 1,3,FHIT-chr3-60412480,LINGO2-chr9-29178757,LRP1B-chr2-141609298,LINGO2-chr9-29117698,STRN-chr2-37105068,NR3C2-chr4-149357051,CIITA-chr16-11002009,LINGO2-chr9-28064983,LINGO2-chr9-28778389,LINGO2-chr9-29123273,PTPRD-chr9-10074741,NR4A3-chr9-102595561
3 | 0,1,
4 |
--------------------------------------------------------------------------------
/data/CRC/input/alt_readcounts.csv:
--------------------------------------------------------------------------------
1 | ,TSHZ3-chr19-31768568,TP53-chr17-7577548,TOX-chr8-59851979,STRN-chr2-37105068,SPEN-chr1-16258997,SPEN-chr1-16202934,PTPRD-chr9-10074741,PRKCB-chr16-24230186,PIK3CG-chr7-106508397,NRAS-chr1-115258747,NR4A3-chr9-102595561,NR3C2-chr4-149357051,MYH11-chr16-15917267,MN1-chr22-28193785,LRP1B-chr2-141609298,LINGO2-chr9-29178757,LINGO2-chr9-29123273,LINGO2-chr9-29117698,LINGO2-chr9-28778389,LINGO2-chr9-28064983,LAMB4-chr7-107732769,IL7R-chr5-35876645,IL21R-chr16-27448836,HELZ-chr17-65119071,FUS-chr16-31193877,FHIT-chr3-60412480,F8-chrX-154157378,EPHB6-chr7-142566125,CIITA-chr16-11002009,CHN1-chr2-175779934,CDK4-chr12-58144548,ATR-chr3-142269072,ATP7B-chr13-52534322,APC-chr5-112175328,APC-chr5-112164646,ALK-chr2-29416591
2 | MA-25,0,4,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,2,0,0,0,0,0,0,0,1,0,0,0,4,0
3 | MA-26,0,1,0,0,0,0,0,0,0,6,0,0,0,1,0,0,0,0,0,0,0,2,0,1,1,0,0,0,0,0,0,0,0,0,1,0
4 | MA-27,5,1440,532,191,5,0,0,15,6,65,1,0,10,534,1,0,22,33,2,0,0,0,36,58,0,0,5,0,0,0,1035,0,2,3,53,0
5 | MA-28,0,67,4,18,148,0,0,1,6,17,0,0,75,4,0,0,329,273,25,8,120,0,14,0,0,0,405,0,0,0,100,2,1,5,134,0
6 | MA-29,0,559,19,0,0,0,0,0,0,104,0,0,17,6,0,2,1,68,0,5,0,0,0,0,9,0,5,0,0,3,40,0,3,0,27,0
7 | MA-30,5,103,102,11,0,1,3,26,0,177,3,0,219,584,0,0,1,221,0,0,0,0,7,18,0,1,0,0,0,49,228,0,47,25,46,1
8 | MA-31,21,47,317,222,1,0,2,0,1,4132,13,1,4,3,0,1,1,34,0,0,0,0,217,0,99,0,2,0,0,25,2,1,555,52,8,2
9 | MA-32,49,24,316,2,3,0,0,0,0,769,21,0,24,1,0,1,0,31,2,0,0,0,6,0,0,2,5,0,0,1,51,0,105,9,18,1
10 | MA-33,0,334,0,4,95,0,6,0,0,474,0,0,0,1,0,0,8,58,189,0,0,2,0,0,5,0,211,0,0,0,1288,2,4,297,90,0
11 | MA-34,5,61,448,230,1,0,98,0,0,407,41,1,12,0,1,2,4,28,0,0,0,2,522,0,13,0,3,1,0,3,158,0,329,68,1477,0
12 | MA-35,1,119,2,32,5,0,187,0,0,1512,0,0,3,0,0,0,13,28,3,2,9,95,7,0,48,0,71,1,0,7,655,0,0,5,1508,0
13 | MA-36,748,71,613,25,0,0,2,19,1,895,0,1,143,7,0,0,42,114,0,1,0,12,46,4,68,151,0,0,0,40,16,2,67,324,24,0
14 | MA-37,0,2632,2,329,2,1,2,0,6,67,1,0,0,3,0,2,21,147,0,21,0,504,2,7,0,0,0,0,0,718,111,0,0,83,1,0
15 | MA-38,82,883,103,16,0,0,46,12,5,3638,4,5,3,118,0,1,0,35,0,0,0,2,5,73,3,0,0,1,0,0,2,0,3,0,34,0
16 | MA-39,0,267,310,3,1,1,60,0,0,78,3,3,38,0,0,0,3,12,0,1,0,0,5,192,2,1,0,0,0,3,48,0,40,1,663,0
17 | MA-40,2,19,18,124,0,1,0,0,29,23,0,0,59,3,0,0,79,1642,0,0,29,0,4,0,2,0,7,1,0,7,330,0,1,30,687,0
18 | MA-41,38,34,52,0,0,0,0,55,0,3,1,0,170,27,0,0,1,42,0,0,0,1,4,0,15,1,0,1,0,14,778,1,1,1,4,0
19 | MA-42,8,816,8,36,0,0,238,0,7,7642,2,1,9,1,0,0,0,645,0,0,0,0,217,9,93,3,0,0,0,0,6,0,13,2,103,0
20 | MA-43,136,8,304,0,2,0,3,97,0,377,9,0,0,0,0,1,4,21,0,0,0,0,7,264,113,173,0,0,0,1,18,2,571,4,20,0
21 | MA-44,1,581,0,0,6,0,0,0,3,1702,0,0,16,0,0,0,2,46,0,0,0,0,4,19,414,0,0,0,0,0,631,0,2,332,77,0
22 | MA-45,0,43,48,14,330,0,1,0,0,31,0,0,0,3,0,0,16,13,0,292,2,87,260,0,128,0,0,0,0,1,3330,0,8,1,65,0
23 | MA-46,5,41,39,33,0,0,92,64,6,416,1,0,2,128,0,0,380,386,0,0,0,0,79,13,109,14,0,0,0,9,5026,0,371,2,18,1
24 | MA-47,0,173,153,7,0,0,0,0,4,70,11,2,0,0,0,0,3,12,0,0,0,0,0,0,21,15,0,1,0,2,107,0,343,109,0,1
25 | MA-48,3,1,117,11,0,0,0,5,0,1338,162,1,17,1,0,2,22,42,0,0,0,0,355,0,38,0,0,0,0,0,111,0,1,904,101,0
26 | MA-84,2,248,90,130,0,0,69,89,0,52,0,0,186,12,0,0,12,3,0,0,0,0,186,0,0,15,0,0,0,0,233,0,3,1,25,0
27 | MA-85,0,9,26,110,7,0,1,0,12,382,0,0,3,102,0,0,4,4,22,0,11,1,214,0,0,0,55,0,0,56,443,0,2,0,1,1
28 | MA-86,2,12,118,0,325,0,5,3,13,383,0,0,15,25,1,0,8,293,142,19,0,2,18,0,0,2,4,2,0,51,562,2,3,183,11,0
29 | MA-87,2,120,908,5,0,0,533,290,0,22,18,0,1,2,0,1,6,6,0,0,0,0,28,0,44,21,0,1,0,225,3,0,2,5,185,0
30 | MA-88,0,617,218,9,0,0,1,0,0,263,1,0,0,0,0,2,3,23,0,0,0,0,3,0,4,0,0,0,0,0,155,0,19,101,1687,0
31 | MA-89,5,318,15,28,0,0,0,344,1,757,9,0,221,13,0,0,1,8,0,0,0,0,18,0,5,2,0,0,0,0,3,0,529,0,102,0
32 | MA-90,0,5,188,1091,14,0,2,0,5,3,41,0,24,439,0,0,44,353,9,0,0,0,582,0,26,2,0,1,0,2,6,0,12,5,2462,1
33 | MA-91,1,74,33,11,624,0,1,0,136,93,2,0,649,464,0,7,2,75,163,1,32,0,5,0,8,0,0,0,0,1,5,0,1,170,6,0
34 | MA-92,0,71,70,21,2,0,94,0,0,382,137,0,2,1,0,0,1,65,0,0,1,0,14,2,0,0,0,0,0,27,0,0,17,2,294,0
35 | MA-93,0,36,67,99,0,0,2,1,1,17,36,0,24,1,0,0,0,8,0,0,0,0,333,116,16,12,0,1,0,1,11,0,14,18,34,2
36 | MA-95,0,721,156,10,0,0,19,1,0,1942,6,0,3,0,0,0,202,240,1,0,1,0,2,0,11,12,1,0,0,0,10,0,29,35,1026,0
37 | MD-10,0,0,0,0,0,1,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,1,0,0,0,0,0,2,3,0,1,0,0,0
38 | MD-11,0,0,0,1,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0
39 | MD-12,0,23,11,6,1,0,0,0,3,3,0,1,1,6,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,0,13,0,0,4,4,1
40 | MD-13,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,2,0,0,0,1,0
41 | MD-3,1,3,1,0,0,0,0,0,8,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,0,0,0,0,2,0
42 | MD-4,1,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
43 | MD-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
44 | MD-7,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,0
45 | MD-8,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
46 | MD-9,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
47 | PA-26,0,158,88,60,0,0,0,0,0,72,1,1,1,20,699,0,0,28,0,0,0,0,591,0,0,0,0,0,0,66,80,2,458,12,21,0
48 | PA-27,0,4,21,1,0,0,1,0,0,3,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,2,0,0,2,10,0
49 | PA-28,1,9,707,21,0,1,0,1,1,51,0,1,154,112,6,2,1,85,1,0,0,0,4,0,0,0,0,0,0,101,18,8,4,105,52,0
50 | PA-29,0,8,15,0,0,0,0,0,1,11,0,0,21,65,11,8,0,1,0,0,0,0,8,0,0,1,0,0,0,52,2,9,25,273,1462,0
51 | PA-31,0,11,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,2,0
52 | PA-32,0,48,73,2,0,0,0,0,0,158,0,0,1,7,2,1,0,128,0,0,0,0,3,0,0,5,0,0,0,0,7,0,3,6,277,0
53 | PA-38,0,2830,37,435,1,0,3,0,1,3209,0,4,47,19,71,0,1,152,0,0,0,2,2,0,2,4,0,0,0,133,150,0,319,182,43,2
54 | PA-39,0,162,1,4,0,0,0,0,0,55,0,1,62,668,93,167,0,333,0,0,0,0,8,0,0,4,0,0,0,774,18,1,0,17,1038,1
55 | PA-40,0,901,21,6,0,0,0,0,0,238,0,2,780,1,1,1,0,147,0,0,0,0,4,0,0,5,2,0,0,3,2,0,17,6,7,0
56 | PA-41,0,151,111,3,0,0,0,0,0,23,0,0,17,38,84,175,0,18,0,0,0,0,215,0,0,16,0,0,0,5,238,0,27,71,9,0
57 | PA-42,0,592,72,150,0,0,0,0,0,957,0,1,6,4,0,106,0,41,0,1,0,0,15,0,0,50,0,0,0,6,119,4,0,2084,39,0
58 | PA-43,0,43,7,87,1,0,0,1,0,61,0,0,10,1,2,1,0,98,2,0,0,0,521,0,0,0,0,0,0,0,5,0,2,1,25,0
59 | PA-46,1,1308,64,23,0,0,0,0,0,487,0,0,0,26,6,1,0,11,0,0,0,1,19,0,1,0,0,0,0,71,197,0,3,1,2,0
60 | PA-47,0,243,12,2,1,0,1,0,0,55,0,0,171,22,6,3,0,60,0,0,0,0,12,1,0,10,0,0,0,9,28,1,8,8,757,0
61 | PA-48,0,44,9,9,0,0,8,0,0,464,4,0,969,3,401,0,0,50,0,0,0,0,9,0,0,11,0,0,0,11,258,0,5,9,74,0
62 | PA-49,0,14,343,5,1,0,0,0,0,160,0,1,6,13,46,6,0,3,1,0,0,0,14,0,0,0,0,0,0,32,9,0,1,1,1052,0
63 | PA-51,0,39,0,77,0,0,0,0,0,177,0,0,252,19,1107,2,0,11,0,0,1,0,23,0,0,42,0,0,1,2,30,0,0,13,471,0
64 | PA-52,2,55,5,8,0,0,0,0,0,14,1,0,51,47,90,11,1,32,0,0,0,0,31,0,0,5,0,1,0,0,598,0,0,6,237,0
65 | PA-53,0,421,27,87,0,0,0,0,0,11,0,0,52,161,0,53,0,50,0,0,0,0,206,0,0,14,0,3,0,4,36,4,1,113,97,0
66 | PA-54,0,2,1,9,0,0,0,0,0,23,0,0,2,0,0,1,0,1,0,0,0,2,1,0,0,0,0,0,0,0,15,0,0,2,3,1
67 | PA-55,0,197,5,370,0,0,0,0,0,1023,0,0,73,2,7,4,0,29,0,0,0,0,82,0,0,4,0,1,0,0,829,0,33,14,4,0
68 | PA-57,0,22,2,185,2,0,0,0,0,160,0,0,25,32,1,3,0,23,1,0,0,0,28,1,0,3,0,0,0,5,1,0,326,58,40,0
69 | PA-58,0,173,60,122,0,0,0,0,3,24,0,1,7,25,43,389,0,116,0,0,0,0,0,0,0,3,1,0,0,119,33,0,5,3,10,1
70 | PA-59,0,223,83,27,1,0,0,0,1,917,0,0,7,38,0,16,0,793,0,0,0,1,0,0,0,0,0,0,0,31,65,0,289,20,2,0
71 | PA-61,0,32,85,30,0,0,2,0,1,17,0,0,37,26,0,14,0,27,0,0,0,0,1,0,0,1,0,0,0,60,42,0,19,0,175,0
72 | PA-62,0,8,0,439,0,0,1,0,0,14,0,0,6,16,3,107,0,71,0,0,0,0,7,0,0,4,0,0,0,11,10,0,0,14,10,0
73 | PA-63,0,254,18,392,0,0,1,2,0,37,0,1,144,121,16,8,0,37,0,1,1,0,96,0,1,3,0,0,0,42,356,0,3,500,1,0
74 | PA-64,0,4357,2,4,0,0,0,0,2,14,0,1,11,57,7,17,0,1,0,0,0,0,2,0,0,13,0,0,0,0,199,0,40,0,4,0
75 | PA-65,0,22,2,6,0,1,0,0,0,69,0,0,989,94,175,15,0,2,0,0,0,0,10,0,0,5,2,0,0,1,29,0,2,0,288,1
76 | PA-68,0,12,2,49,0,0,0,0,0,1939,0,1,3,3,80,21,1,14,0,0,0,0,21,0,0,320,0,0,0,46,72,1,0,23,13,2
77 | PA-70,0,27,44,9,0,2,2,0,1,18,0,1,19,86,6,75,0,3,0,0,0,0,13,1,0,58,0,0,0,161,1,5,0,105,29,0
78 | PA-71,0,162,2,5,0,0,0,0,1,58,0,0,97,680,173,0,1,159,0,0,0,0,465,0,0,2,0,0,0,7,22,0,0,1,303,0
79 | PA-73,0,6,22,101,0,0,0,2,0,10,0,0,1,57,0,1,2,7,0,0,0,0,2,1,0,22,0,0,0,8,12,0,0,0,4,0
80 | PA-74,1,168,15,0,0,0,0,0,8,179,0,1,36,4,0,2,1,147,0,0,0,0,1,0,0,5,3,1,0,168,447,3,1,3,257,0
81 | PA-77,0,542,1,3,0,0,1,0,2,1129,0,0,0,5,0,8,0,12,0,0,0,0,42,0,0,0,0,0,0,422,89,11,0,0,64,0
82 | PD-1,0,1,8,4,0,3088,0,1,4,15,0,6152,2,0,3,0,0,1,0,0,0,0,5,0,0,0,0,203,0,2,4,294,1,5,14,478
83 | PD-14,0,1,0,2,0,8,0,0,0,2,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,0,1,2,17
84 | PD-16,0,1,5,2,0,9,0,1,4,3,0,40,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,5,0,1,1,15,0,1,6,13
85 | PD-17,0,1,3,0,0,20,0,0,0,2,0,54,1,0,0,0,0,1,0,0,0,0,2,0,0,0,0,13,0,1,2,9,0,2,2,21
86 | PD-18,0,3,0,0,0,3051,0,0,0,6,0,6048,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,180,0,0,1,265,0,1,4,425
87 | PD-20,0,3,0,2,0,1,0,0,0,2,0,0,1,0,1,0,0,2,0,0,0,0,2,0,0,2,0,2116,0,2,2,3367,1,0,0,5803
88 | PD-5,0,2,0,0,0,1,1,0,0,2,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,2,1,0,0,0,6
89 | PD-7,4,2,0,0,1,2,0,0,0,2,0,2,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,3,1,0,0,1
90 | PD-8,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,5,0,0,0,4
91 | PD-9,0,17,0,0,0,4,0,0,0,2,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,2,6,0,0,3,10
92 | PDD-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
93 | PDD-10,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,1,0,1,0,0,0
94 | PDD-11,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0
95 | PDD-12,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,15,0,0,0,0,0,0,0
96 | PDD-13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0
97 | PDD-14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0
98 | PDD-15,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5742,0,0,0,0,0,0,0
99 | PDD-16,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
100 | PDD-17,0,0,0,1,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
101 | PDD-18,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
102 | PDD-19,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
103 | PDD-2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0
104 | PDD-20,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
105 | PDD-21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
106 | PDD-22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
107 | PDD-23,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
108 | PDD-24,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
109 | PDD-25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
110 | PDD-26,0,0,0,0,0,0,0,0,5,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
111 | PDD-27,0,0,0,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
112 | PDD-28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
113 | PDD-29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
114 | PDD-3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0
115 | PDD-30,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
116 | PDD-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
117 | PDD-32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
118 | PDD-33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2
119 | PDD-34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
120 | PDD-35,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0
121 | PDD-36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
122 | PDD-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
123 | PDD-38,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
124 | PDD-39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
125 | PDD-4,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
126 | PDD-40,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
127 | PDD-41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
128 | PDD-42,0,0,1,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
129 | PDD-43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
130 | PDD-44,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
131 | PDD-45,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0
132 | PDD-46,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
133 | PDD-47,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
134 | PDD-48,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0
135 | PDD-49,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
136 | PDD-5,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
137 | PDD-50,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
138 | PDD-51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
139 | PDD-52,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
140 | PDD-53,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
141 | PDD-54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
142 | PDD-55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
143 | PDD-56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
144 | PDD-57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
145 | PDD-58,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0
146 | PDD-59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
147 | PDD-6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0
148 | PDD-60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
149 | PDD-61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
150 | PDD-62,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
151 | PDD-63,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
152 | PDD-64,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
153 | PDD-65,0,1,0,0,0,0,0,0,2,0,0,0,0,0,1,0,0,3,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
154 | PDD-66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0
155 | PDD-67,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
156 | PDD-68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0
157 | PDD-69,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
158 | PDD-7,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
159 | PDD-70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
160 | PDD-71,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,3,1,0,0,0,0,0,0
161 | PDD-72,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
162 | PDD-73,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
163 | PDD-74,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
164 | PDD-75,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
165 | PDD-76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0
166 | PDD-77,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0
167 | PDD-78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
168 | PDD-79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
169 | PDD-8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
170 | PDD-80,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
171 | PDD-81,0,0,0,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
172 | PDD-82,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1
173 | PDD-83,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
174 | PDD-84,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
175 | PDD-85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0
176 | PDD-86,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
177 | PDD-87,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
178 | PDD-88,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0
179 | PDD-89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
180 | PDD-9,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
181 | PDD-90,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
182 | PDD-91,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
183 | PDD-92,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
184 | PDD-93,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0
185 | PDD-94,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0
186 | PDD-95,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
187 | PDD-96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
188 |
--------------------------------------------------------------------------------
/data/CRC/input/character_matrix.csv:
--------------------------------------------------------------------------------
1 | ,TSHZ3-chr19-31768568,TP53-chr17-7577548,TOX-chr8-59851979,STRN-chr2-37105068,SPEN-chr1-16258997,SPEN-chr1-16202934,PTPRD-chr9-10074741,PRKCB-chr16-24230186,PIK3CG-chr7-106508397,NRAS-chr1-115258747,NR4A3-chr9-102595561,NR3C2-chr4-149357051,MYH11-chr16-15917267,MN1-chr22-28193785,LRP1B-chr2-141609298,LINGO2-chr9-29178757,LINGO2-chr9-29123273,LINGO2-chr9-29117698,LINGO2-chr9-28778389,LINGO2-chr9-28064983,LAMB4-chr7-107732769,IL7R-chr5-35876645,IL21R-chr16-27448836,HELZ-chr17-65119071,FUS-chr16-31193877,FHIT-chr3-60412480,F8-chrX-154157378,EPHB6-chr7-142566125,CIITA-chr16-11002009,CHN1-chr2-175779934,CDK4-chr12-58144548,ATR-chr3-142269072,ATP7B-chr13-52534322,APC-chr5-112175328,APC-chr5-112164646,ALK-chr2-29416591,cluster_id
2 | MA-25,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,-1,-1,0,0,0,-1,0,0,0,0
3 | MA-26,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0
4 | MA-27,0,1,1,1,0,0,0,0,0,1,0,-1,0,1,0,-1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,3
5 | MA-28,0,1,-1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,1,0,-1,0,1,0,0,0,1,0,2
6 | MA-29,0,1,1,-1,0,0,0,0,-1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,-1,1,0,2
7 | MA-30,0,1,1,1,0,0,-1,1,0,1,-1,-1,1,1,0,0,0,1,0,0,0,0,0,0,0,-1,0,0,0,1,1,0,0,1,1,0,3
8 | MA-31,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,1,-1,0,3
9 | MA-32,1,1,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,-1,0,0,0,0,1,0,1,1,1,0,3
10 | MA-33,0,1,0,0,1,-1,1,0,-1,1,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,-1,1,0,0,-1,1,0,0,1,1,0,2
11 | MA-34,0,1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,-1,0,-1,-1,1,0,1,0,1,0,3
12 | MA-35,0,1,0,1,0,0,1,0,0,1,0,0,0,-1,0,0,1,1,0,0,0,1,-1,0,1,0,1,0,0,-1,1,0,0,0,1,0,2
13 | MA-36,1,1,1,1,0,0,0,1,0,1,0,0,1,0,-1,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,0,0,3
14 | MA-37,-1,1,0,1,0,0,0,0,1,1,0,0,0,-1,-1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,1,-1,0,2
15 | MA-38,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,-1,0,0,0,-1,0,0,0,-1,1,0,3
16 | MA-39,-1,1,1,0,0,0,1,0,0,1,0,0,1,0,-1,-1,-1,1,0,0,0,0,0,1,-1,0,0,0,0,0,1,0,0,0,1,0,3
17 | MA-40,0,1,0,1,0,0,0,0,1,1,0,0,1,-1,0,0,1,1,0,0,1,0,-1,0,0,0,0,0,0,0,1,0,0,0,1,0,2
18 | MA-41,1,1,1,0,0,0,0,1,0,-1,0,0,1,1,0,-1,0,1,0,0,-1,0,-1,-1,1,-1,0,0,0,0,1,0,0,0,-1,0,3
19 | MA-42,1,1,1,1,0,0,1,0,0,1,0,-1,1,0,0,-1,0,1,0,0,0,0,1,1,1,-1,0,0,-1,0,0,0,0,-1,1,0,3
20 | MA-43,1,1,1,-1,0,0,0,1,0,1,0,0,0,-1,0,0,0,1,0,0,0,0,1,1,1,1,-1,0,0,0,1,0,1,0,1,0,3
21 | MA-44,0,1,-1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,-1,1,1,0,0,0,0,0,1,0,0,1,0,0,3
22 | MA-45,0,1,1,0,1,-1,0,0,0,1,0,0,0,0,0,0,1,1,-1,1,0,1,1,0,1,-1,0,0,0,0,1,0,0,0,1,0,2
23 | MA-46,0,1,1,1,0,0,1,1,0,1,-1,0,-1,1,0,0,1,1,0,0,0,-1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,3
24 | MA-47,0,1,1,0,0,0,0,0,0,1,1,0,0,-1,0,-1,0,1,0,0,-1,0,-1,0,1,1,0,0,0,0,1,0,1,1,0,0,3
25 | MA-48,0,-1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,-1,-1,0,1,0,1,0,0,0,0,0,1,0,0,1,0,0,3
26 | MA-84,-1,1,1,1,0,0,1,1,-1,1,0,-1,1,1,0,0,1,-1,0,0,0,0,1,0,-1,1,0,0,0,0,1,0,0,0,1,0,3
27 | MA-85,0,-1,1,1,0,0,-1,0,1,1,0,0,0,1,0,0,-1,-1,1,-1,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,2
28 | MA-86,0,1,1,0,1,0,1,0,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,1,0,0,1,1,0,2
29 | MA-87,0,1,1,-1,0,0,1,1,0,1,1,0,0,0,-1,0,1,-1,0,0,0,0,1,-1,1,1,0,0,0,1,-1,0,0,0,1,0,3
30 | MA-88,-1,1,1,1,0,0,0,0,-1,1,-1,0,-1,-1,0,0,0,1,0,0,0,0,-1,0,0,-1,0,0,0,0,1,0,1,0,1,0,3
31 | MA-89,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,-1,0,0,0,0,1,0,1,0,0,0,0,-1,0,0,1,0,1,0,3
32 | MA-90,-1,-1,1,1,0,0,0,0,0,-1,1,0,1,1,0,0,1,1,1,0,0,0,1,0,1,0,0,-1,0,0,1,0,0,0,1,0,3
33 | MA-91,0,1,1,1,1,0,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,-1,-1,0,0,0,0,0,0,-1,0,0,0,1,0,0,2
34 | MA-92,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,-1,1,0,0,-1,0,0,0,1,0,0,0,0,1,0,3
35 | MA-93,0,1,1,1,0,0,0,-1,0,1,1,0,0,0,0,0,-1,-1,0,0,-1,0,1,1,1,1,0,0,0,-1,0,0,1,1,1,0,3
36 | MA-95,0,1,1,1,0,0,1,0,0,1,0,0,-1,-1,0,0,1,1,0,0,0,-1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,3
37 | MD-10,0,0,0,0,0,0,0,0,0,0,-1,0,-1,0,-1,0,0,0,0,0,0,-1,-1,-1,-1,0,-1,-1,0,0,0,0,0,0,0,0,0
38 | MD-11,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,-1,-1,0,0,0,0,0,0
39 | MD-12,0,1,0,-1,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,-1,0,0,0,0,0,-1,-1,0,0,0,1,0,0,0,0,0,0
40 | MD-13,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,-1,0,-1,0,0,-1,0,-1,0,0,-1,0,0,0,0
41 | MD-3,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,-1,0,-1,-1,0,-1,-1,-1,0,0,0,0,0,0,0,0
42 | MD-4,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,0,0,0,-1,-1,-1,0,-1,0,0,0,-1,0,-1,-1,-1,0,-1,0,0,0,-1,-1,0,0
43 | MD-5,0,0,0,0,0,0,-1,0,0,0,-1,0,-1,0,0,-1,-1,0,-1,0,0,-1,0,0,-1,0,-1,-1,0,0,0,0,-1,0,0,0,0
44 | MD-7,0,0,0,0,0,-1,0,-1,0,0,0,0,0,-1,-1,0,-1,0,-1,0,0,-1,-1,-1,-1,0,0,-1,-1,-1,0,0,0,0,0,0,0
45 | MD-8,-1,0,0,-1,0,0,0,0,0,0,-1,-1,0,0,-1,-1,-1,-1,0,-1,0,-1,0,0,-1,-1,-1,0,-1,-1,0,0,-1,0,0,0,0
46 | MD-9,0,0,-1,-1,0,0,0,0,-1,0,0,0,0,0,0,-1,0,0,0,-1,-1,0,0,0,-1,0,-1,-1,-1,-1,0,0,0,0,0,0,0
47 | PA-26,0,1,1,1,0,0,0,0,0,1,0,-1,0,1,1,-1,0,1,0,0,0,0,1,0,0,-1,0,0,0,1,1,0,1,1,0,0,1
48 | PA-27,0,0,1,0,0,0,-1,-1,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0
49 | PA-28,-1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,-1,0,-1,0,0,0,-1,0,0,1,1,0,0,1,1,0,1
50 | PA-29,0,-1,1,-1,0,0,0,0,0,1,0,0,1,1,0,1,0,-1,0,0,-1,-1,1,-1,0,0,0,0,-1,1,0,0,1,1,1,0,1
51 | PA-31,-1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1
52 | PA-32,0,1,1,0,0,0,0,0,0,1,0,-1,0,-1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1
53 | PA-38,0,1,1,1,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1
54 | PA-39,0,1,0,0,0,0,0,0,0,1,0,-1,1,1,0,1,0,1,0,0,-1,0,1,0,0,0,0,-1,0,1,1,0,0,1,1,0,1
55 | PA-40,0,1,1,0,0,0,0,0,0,1,0,0,1,-1,0,0,0,1,0,0,0,0,-1,0,0,0,0,0,-1,0,0,0,1,0,0,0,1
56 | PA-41,0,1,1,0,0,0,-1,0,-1,1,0,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0,-1,0,0,1,0,1,1,1,0,1
57 | PA-42,-1,1,1,1,0,-1,0,0,0,1,0,0,0,-1,0,1,0,1,0,0,-1,-1,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1
58 | PA-43,0,1,0,1,0,0,0,0,-1,1,0,0,1,0,0,0,0,1,0,0,-1,0,1,0,0,-1,0,0,0,-1,-1,0,0,0,1,0,1
59 | PA-46,0,1,1,1,0,0,0,0,0,1,0,0,-1,1,0,-1,0,0,0,0,0,0,1,-1,0,-1,-1,0,0,1,1,0,-1,0,-1,0,1
60 | PA-47,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,-1,0,1,-1,-1,0,0,0,-1,0,1,0,0,0,-1,1,0,0,1,1,0,1
61 | PA-48,0,1,1,1,0,0,1,0,0,1,0,0,1,-1,1,0,0,1,0,0,0,0,1,0,0,1,-1,0,0,1,1,0,0,1,1,0,1
62 | PA-49,0,1,1,-1,0,0,0,0,0,1,0,0,1,1,1,1,-1,-1,0,-1,0,-1,1,0,0,0,0,0,0,1,1,0,0,0,1,0,1
63 | PA-51,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,-1,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,1
64 | PA-52,0,1,-1,-1,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1
65 | PA-53,0,1,1,1,0,0,0,0,-1,1,0,0,1,1,-1,1,0,1,0,0,0,0,1,0,0,0,-1,0,0,0,1,0,0,1,1,0,1
66 | PA-54,0,-1,0,0,0,0,0,-1,-1,1,0,0,0,0,0,-1,0,0,0,-1,-1,0,0,-1,0,-1,-1,0,0,0,1,0,0,0,0,0,0
67 | PA-55,0,1,0,1,0,0,0,0,0,1,0,0,1,-1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,-1,0,1
68 | PA-57,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,-1,0,1,0,0,0,-1,1,0,0,-1,0,0,0,0,-1,0,1,1,1,0,1
69 | PA-58,0,1,1,1,0,0,0,0,0,1,0,0,1,1,1,1,0,1,0,0,-1,-1,-1,0,0,-1,0,-1,0,1,0,0,0,-1,1,0,1
70 | PA-59,0,1,1,1,0,0,0,0,0,1,0,-1,0,1,0,0,0,1,0,0,0,0,-1,-1,0,0,0,-1,0,1,1,0,1,1,0,0,1
71 | PA-61,0,1,1,1,0,0,0,-1,0,1,0,0,1,1,0,1,0,1,0,0,-1,0,-1,0,0,0,0,0,0,1,1,0,0,0,1,0,1
72 | PA-62,0,-1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,0,0,0,1,0,-1,0,0,0,0,1,1,0,-1,1,1,0,1
73 | PA-63,0,1,0,1,0,0,0,0,0,1,-1,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,-1,1,1,0,0,1,0,0,1
74 | PA-64,0,1,0,0,0,0,0,0,-1,1,0,0,1,1,0,1,0,0,0,0,0,0,-1,0,0,1,0,0,0,0,1,0,1,-1,0,0,1
75 | PA-65,0,1,-1,1,0,0,0,0,-1,1,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,1,0,-1,0,0,1,0,0,0,1,0,1
76 | PA-68,0,1,-1,1,0,0,0,0,0,1,0,0,-1,-1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,0,1
77 | PA-70,0,1,1,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,-1,0,1,-1,0,1,0,0,0,1,0,0,0,1,1,0,1
78 | PA-71,0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,-1,0,1,0,1
79 | PA-73,0,-1,1,1,0,0,0,0,0,-1,0,0,-1,1,0,-1,0,0,0,0,-1,-1,-1,0,0,1,0,0,0,1,1,0,0,0,0,0,1
80 | PA-74,0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,-1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,-1,0,1,0,1
81 | PA-77,0,1,0,-1,0,0,0,0,0,1,0,0,0,0,0,-1,-1,1,0,0,0,-1,1,-1,-1,0,0,-1,0,1,1,0,0,0,1,0,1
82 | PD-1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0
83 | PD-14,-1,0,0,-1,0,1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,-1,0,0,-1,-1,-1,-1,-1,0,-1,-1,0,0,-1,0,0,1,0
84 | PD-16,0,0,0,-1,0,1,-1,0,0,0,0,1,-1,0,0,-1,-1,0,0,0,0,-1,0,-1,0,0,0,1,-1,-1,0,1,-1,0,0,0,0
85 | PD-17,0,0,0,-1,0,1,0,0,-1,0,-1,1,-1,0,0,-1,-1,0,0,-1,0,0,-1,0,0,-1,-1,1,-1,0,0,0,0,0,0,1,0
86 | PD-18,0,-1,0,0,0,1,0,0,0,0,0,1,0,-1,0,-1,0,0,0,0,-1,0,0,-1,0,-1,-1,1,0,-1,0,1,0,0,0,1,0
87 | PD-20,0,-1,0,0,0,0,0,0,-1,0,-1,0,0,-1,0,0,0,0,-1,0,0,0,-1,-1,-1,-1,0,1,0,-1,0,1,-1,0,-1,1,0
88 | PD-5,0,0,0,0,0,0,0,0,-1,0,-1,0,-1,-1,0,0,0,0,0,-1,-1,0,-1,-1,-1,-1,0,0,0,-1,0,0,0,0,-1,0,0
89 | PD-7,0,0,0,-1,0,0,0,0,-1,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,-1,0,-1,0,-1,0,-1,-1,0,0,0,0,-1,0,0
90 | PD-8,-1,0,-1,-1,0,0,-1,0,0,0,0,-1,-1,-1,0,0,0,-1,0,0,0,-1,-1,0,-1,0,0,0,-1,0,0,1,0,0,-1,0,0
91 | PD-9,-1,0,0,-1,0,0,-1,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,-1,0,0,-1,-1,0,-1,-1,0,1,-1,0,0,0,0
92 | PDD-1,0,0,-1,0,0,-1,0,0,0,0,0,0,-1,0,0,0,-1,-1,0,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0
93 | PDD-10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
94 | PDD-11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,-1,0,0,0,1,0,0,0,0,0,0,0,0
95 | PDD-12,0,0,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
96 | PDD-13,-1,0,0,-1,0,0,-1,0,-1,0,0,0,0,-1,-1,0,0,0,0,0,-1,0,-1,-1,-1,-1,0,-1,1,-1,0,0,-1,-1,0,-1,0
97 | PDD-14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-1,1,0,0,0,0,0,0,0,0
98 | PDD-15,0,0,-1,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-1,-1,-1,-1,0,-1,0,0,-1,0,0,1,0,0,0,-1,0,0,0,0
99 | PDD-16,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-1,0,0,0,0,0,0,0,0,0,-1,0,0,0
100 | PDD-17,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,-1,0,0,0
101 | PDD-18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
102 | PDD-19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0
103 | PDD-2,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
104 | PDD-20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
105 | PDD-21,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,0
106 | PDD-22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0
107 | PDD-23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
108 | PDD-24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0
109 | PDD-25,0,-1,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
110 | PDD-26,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
111 | PDD-27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
112 | PDD-28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,-1,0
113 | PDD-29,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0
114 | PDD-3,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
115 | PDD-30,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0
116 | PDD-31,-1,0,0,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,-1,0,0,-1,-1,-1,-1,-1,-1,0,0,0,-1,0,0,0,0
117 | PDD-32,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
118 | PDD-33,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,-1,0,-1,0,0,0,0,-1,0,0,-1,-1,0,0
119 | PDD-34,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0
120 | PDD-35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0
121 | PDD-36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0
122 | PDD-37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
123 | PDD-38,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
124 | PDD-39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
125 | PDD-4,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0
126 | PDD-40,0,0,0,-1,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0
127 | PDD-41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
128 | PDD-42,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,-1,0,-1,0,-1,0,0,0,0,0,-1,0,0,0,0,0,-1,-1,0,0
129 | PDD-43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
130 | PDD-44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0
131 | PDD-45,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
132 | PDD-46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
133 | PDD-47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0
134 | PDD-48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
135 | PDD-49,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
136 | PDD-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
137 | PDD-50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0
138 | PDD-51,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-1,0,0,0,0,0,0,0,-1,0,-1,0,0
139 | PDD-52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,-1,0,0
140 | PDD-53,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0
141 | PDD-54,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0
142 | PDD-55,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,-1,-1,-1,0,0,0,-1,0,0,-1,0,0,0,-1,0,0,0,0,0,0,0,0
143 | PDD-56,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,-1,0,0,0,0,0,0,0,0,0,-1,0,0,0,-1,0,0,0,0,0,0,0,0
144 | PDD-57,0,0,0,0,0,0,0,0,0,0,-1,0,0,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0
145 | PDD-58,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0
146 | PDD-59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0
147 | PDD-6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
148 | PDD-60,0,-1,0,-1,0,-1,-1,0,0,0,0,0,-1,-1,0,-1,-1,-1,0,0,-1,0,-1,0,0,-1,-1,0,0,0,0,-1,0,-1,0,0,0
149 | PDD-61,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,-1,0,0,0,0,-1,0,0,-1,0,0,0,0,-1,0,0,0,0,0,0,0,0,0
150 | PDD-62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,0,0
151 | PDD-63,-1,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0
152 | PDD-64,0,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,-1,-1,0,0
153 | PDD-65,0,0,-1,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
154 | PDD-66,-1,-1,-1,0,-1,-1,-1,-1,0,-1,0,0,-1,-1,0,-1,-1,-1,-1,0,0,0,-1,-1,-1,0,0,0,-1,0,-1,-1,-1,0,0,0,0
155 | PDD-67,-1,-1,0,0,-1,0,0,-1,0,0,0,0,-1,-1,0,-1,0,0,0,0,0,0,-1,0,-1,0,0,-1,0,0,-1,0,0,0,0,0,0
156 | PDD-68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
157 | PDD-69,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0
158 | PDD-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0
159 | PDD-70,0,0,0,0,0,-1,-1,0,0,0,-1,0,-1,0,0,0,-1,-1,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,0,0,0,0,0
160 | PDD-71,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,-1,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0
161 | PDD-72,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0
162 | PDD-73,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,0
163 | PDD-74,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
164 | PDD-75,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,-1,-1,0,0,0,0,0,-1,0,0,0,0,0,0,0
165 | PDD-76,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0
166 | PDD-77,0,-1,0,-1,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
167 | PDD-78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0
168 | PDD-79,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,-1,-1,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0
169 | PDD-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
170 | PDD-80,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
171 | PDD-81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0
172 | PDD-82,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0
173 | PDD-83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,-1,0,-1,0,-1,-1,0,0,0,0,0,0,0
174 | PDD-84,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
175 | PDD-85,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,-1,0,0,-1,0,-1,0,-1,0,0,0,0,0,0,0
176 | PDD-86,0,0,0,0,-1,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
177 | PDD-87,0,-1,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-1,-1,0,0,-1,0,-1,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0
178 | PDD-88,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0
179 | PDD-89,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0
180 | PDD-9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
181 | PDD-90,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,-1,0,0,-1,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
182 | PDD-91,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0
183 | PDD-92,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
184 | PDD-93,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,-1,0,0,0,0,-1,0,0,0,0,0,0,0,0,0
185 | PDD-94,0,-1,0,0,0,0,0,0,0,0,-1,0,0,0,-1,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0
186 | PDD-95,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,-1,-1,0,0,0,0
187 | PDD-96,0,-1,0,0,0,0,0,-1,0,0,-1,0,-1,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0
188 |
--------------------------------------------------------------------------------
/data/CRC/input/total_readcounts.csv:
--------------------------------------------------------------------------------
1 | ,TSHZ3-chr19-31768568,TP53-chr17-7577548,TOX-chr8-59851979,STRN-chr2-37105068,SPEN-chr1-16258997,SPEN-chr1-16202934,PTPRD-chr9-10074741,PRKCB-chr16-24230186,PIK3CG-chr7-106508397,NRAS-chr1-115258747,NR4A3-chr9-102595561,NR3C2-chr4-149357051,MYH11-chr16-15917267,MN1-chr22-28193785,LRP1B-chr2-141609298,LINGO2-chr9-29178757,LINGO2-chr9-29123273,LINGO2-chr9-29117698,LINGO2-chr9-28778389,LINGO2-chr9-28064983,LAMB4-chr7-107732769,IL7R-chr5-35876645,IL21R-chr16-27448836,HELZ-chr17-65119071,FUS-chr16-31193877,FHIT-chr3-60412480,F8-chrX-154157378,EPHB6-chr7-142566125,CIITA-chr16-11002009,CHN1-chr2-175779934,CDK4-chr12-58144548,ATR-chr3-142269072,ATP7B-chr13-52534322,APC-chr5-112175328,APC-chr5-112164646,ALK-chr2-29416591
2 | MA-25,66,843,154,2,1260,689,97,64,61,492,198,1583,118,1373,302,20,65,2,46,52,33,232,19,279,36,3,31,5,3,109,100,199,4,1533,1167,65
3 | MA-26,149,2423,1182,13,2963,8,1,38,97,1129,88,220,117,14,616,26,43,40,14,4,0,1853,45,148,8,94,68,57,163,361,531,18,2,367,456,800
4 | MA-27,81,1441,532,208,753,1359,11,399,1593,65,12,2,650,537,329,9,43,33,161,237,31,90,36,77,11,393,90,151,241,435,1061,67,82,179,54,973
5 | MA-28,12,69,4,199,1131,187,34,885,26,18,210,12,91,60,61,68,432,273,103,318,121,185,20,31,210,45,689,127,2,14,863,450,37,240,188,1087
6 | MA-29,213,559,20,5,73,265,97,481,4,104,543,444,48,16,585,55,40,71,36,109,12,24,26,280,44,40,419,252,16,95,43,781,495,9,80,1092
7 | MA-30,56,107,103,27,104,438,5,102,100,178,5,9,624,594,19,245,163,221,32,35,28,62,184,299,84,4,3843,28,249,104,229,35,915,211,47,328
8 | MA-31,236,52,328,545,5199,233,155,728,427,4143,70,572,451,2404,116,20,30,35,254,129,72,14,224,370,119,113,4489,27,585,45,766,165,895,239,9,4007
9 | MA-32,65,26,614,26,694,1252,944,71,113,774,158,288,42,16,23,16,46,31,46,32,12,140,55,188,148,2,59,71,815,256,95,148,636,40,29,1390
10 | MA-33,94,334,15,43,219,2,44,364,3,474,62,11,331,430,382,27,41,59,212,55,0,265,1,16,9,0,665,1735,1159,0,1295,705,272,444,243,1181
11 | MA-34,124,65,453,273,7892,523,115,51,134,408,235,297,19,121,70,111,30,28,13,59,1916,677,542,81,21,124,7,229,10,6,164,135,2822,974,1481,668
12 | MA-35,802,120,19,68,2056,190,207,212,189,1514,50,63,32,5,28,713,37,28,42,116,353,111,7,219,206,69,82,36,40,7,666,457,1813,2316,1508,11
13 | MA-36,750,72,637,31,4418,66,229,73,840,896,39,25,184,105,8,77,131,115,238,31,13,57,47,16,72,158,38,67,408,133,119,845,800,334,868,1622
14 | MA-37,10,2635,321,354,3926,731,81,452,32,67,274,512,55,4,4,66,127,147,144,43,105,547,17,21,18,34,83,374,308,741,473,109,560,94,1,380
15 | MA-38,574,885,113,647,527,609,53,278,849,3649,28,325,32,118,15,253,31,35,453,148,110,1462,11,74,116,1,890,2432,80,9,195,333,90,2,34,2251
16 | MA-39,4,268,325,28,1715,393,136,197,79,78,50,76,119,327,4,8,10,13,160,894,140,477,69,464,4,216,1238,44,90,296,59,905,1316,767,679,1190
17 | MA-40,2030,20,248,304,137,174,93,1569,50,26,155,96,227,5,568,47,87,1644,26,377,33,94,4,21,17,141,1026,37,27,187,335,350,477,1170,775,858
18 | MA-41,51,35,53,74,6985,33,223,135,87,3,33,62,173,27,31,0,50,42,79,25,0,236,5,2,16,10,216,167,13,155,796,1110,93,120,4,89
19 | MA-42,15,818,29,164,2827,56,300,230,1853,7647,62,8,22,63,44,6,646,645,50,45,206,479,226,23,252,3,560,229,8,22,940,75,1842,10,108,151
20 | MA-43,236,11,305,2,4820,1014,312,127,17,378,91,21,103,8,193,19,17,21,26,126,41,234,24,769,118,173,1,33,15,48,28,108,827,21,30,806
21 | MA-44,365,582,2,40,2227,335,15,544,550,1704,184,124,19,381,154,142,99,46,25,74,28,14,8,33,530,104,109,162,149,83,1200,3894,226,448,923,727
22 | MA-45,65,47,164,259,504,1,199,34,307,31,483,82,99,25,455,39,58,13,5,504,11,115,379,41,349,0,191,135,466,16,5685,1289,1085,19,67,24
23 | MA-46,332,42,178,84,1406,42,166,150,1240,419,2,632,8,774,621,305,394,386,54,163,49,5,80,36,118,17,18,503,361,188,5034,102,1828,66,23,58
24 | MA-47,86,174,163,170,7132,2268,11,222,873,71,32,53,572,0,477,9,12,12,316,63,6,233,2,35,29,102,119,556,16,240,117,1495,469,141,174,411
25 | MA-48,61,4,120,25,900,124,40,2351,67,1340,182,137,22,62,43,128,180,42,45,8,6,61,355,43,65,19,207,223,967,29,680,153,82,1100,1026,1686
26 | MA-84,6,250,91,655,1262,220,84,119,4,54,83,7,422,89,1108,43,13,3,578,18,16,25,227,206,10,33,466,438,248,18,508,412,25,32,74,1864
27 | MA-85,139,9,107,114,410,44,9,26,39,382,78,69,98,791,773,83,6,4,70,1,18,382,214,270,79,123,62,556,342,57,1141,1353,1056,11,112,455
28 | MA-86,558,13,1110,25,1712,1658,13,351,552,388,196,265,31,37,404,23,271,295,161,26,35,124,53,104,48,45,19,168,35,53,573,130,977,213,74,801
29 | MA-87,836,121,909,7,3918,301,693,449,105,22,28,248,13,184,6,99,12,6,52,54,24,264,28,4,65,58,27,22,23,268,3,61,16,74,270,88
30 | MA-88,7,619,223,52,275,767,38,226,1,264,2,1770,3,0,90,17,119,23,66,402,52,155,7,113,558,7,17,71,449,280,161,743,33,1155,1833,740
31 | MA-89,1336,320,42,37,460,149,118,723,220,758,13,33,355,121,32,11,14,9,183,101,32,79,27,32,11,24,1173,360,25,10,63,635,599,151,102,270
32 | MA-90,6,6,216,1099,833,482,161,186,85,3,53,307,26,441,13,139,329,356,89,47,209,712,628,18,161,227,251,9,62,100,33,132,362,1714,2467,5850
33 | MA-91,73,74,100,20,2224,266,60,103,267,93,153,131,727,516,101,35,48,79,330,21,43,2,10,231,96,278,206,63,139,9,443,762,215,183,225,269
34 | MA-92,141,72,148,26,5131,18,258,49,45,382,517,70,29,436,208,15,103,66,66,306,306,7,20,180,27,0,100,17,140,41,3990,1486,1018,194,297,148
35 | MA-93,76,37,150,130,3493,158,252,2,122,17,48,262,392,19,299,60,1,8,91,110,4,33,335,153,100,15,103,30,61,7,224,889,107,53,136,344
36 | MA-95,33,721,161,62,2677,1060,50,18,96,1946,76,27,4,3,85,17,229,240,704,21,326,3,65,27,16,20,2290,20,64,149,155,299,210,588,1030,337
37 | MD-10,794,1773,19,41,768,29,180,313,413,40,2,21,8,123,2,11,34,19,314,26,171,4,9,1,4,23,4,4,42,323,2822,1171,158,457,442,31
38 | MD-11,2,120,547,1519,113,1050,34,604,26,1668,29,11,197,0,90,23,22,49,543,295,34,268,353,67,92,401,16,5,14,4,6,494,545,1835,748,915
39 | MD-12,633,34,139,10,210,620,148,45,673,118,23,979,42,10,31,21,74,54,61,6,18,42,208,122,43,6,5,71,51,16,54,368,841,2971,2065,52
40 | MD-13,356,404,5,367,7844,15,135,133,79,2299,221,850,35,17,57,0,2,7,204,38,245,366,3,510,3,207,114,2,83,6,2815,194,3,25,12,84
41 | MD-3,178,11,48,94,374,460,6,880,1063,392,26,118,13,24,44,34,45,59,2,1,29,1,58,2,1,45,1,9,0,21,18,192,11,16,47,1960
42 | MD-4,290,335,0,8,14,239,0,8,296,477,20,2,30,20,59,0,0,1,31,0,64,123,177,5,61,4,8,2,17,1,461,93,12,8,8,316
43 | MD-5,36,45,26,209,105,1644,6,296,14,44,2,114,5,47,2178,8,8,11,6,24,41,1,23,193,8,129,0,0,144,14,1372,321,1,17,20,62
44 | MD-7,11,237,11,27,75,1,16,1,789,129,50,85,45,9,7,42,3,42,6,71,26,7,0,0,6,26,31,2,4,0,112,250,22,1934,596,2202
45 | MD-8,2,359,103,0,123,48,94,87,52,198,2,1,86,12,6,1,8,5,48,3,11,1,19,23,5,1,10,41,7,7,113,519,2,12,42,91
46 | MD-9,18,1420,1,2,7388,115,120,20,9,250,32,55,468,60,399,0,98,111,30,7,6,11,12,27,3,22,4,9,7,10,141,191,276,60,13,39
47 | PA-26,150,161,159,207,496,452,97,68,54,72,40,3,21,24,873,1,93,38,2730,208,116,20,608,44,82,5,47,12,109,157,100,1894,637,21,1071,267
48 | PA-27,322,38,80,100,53,15,1,7,13,175,30,70,3,13,107,95,32,12,17,86,20,13,101,31,79,678,9,2,9,10,447,201,165,443,291,788
49 | PA-28,9,11,717,97,2654,91,71,23,403,51,454,1779,172,115,97,46,1614,177,508,41,6,121,4,71,26,50,8,163,269,119,29,5901,12,139,57,21
50 | PA-29,103,9,15,8,30,94,32,115,211,11,297,177,25,66,567,17,79,5,16,198,5,4,14,9,67,72,309,301,0,52,41,7120,97,1001,1663,213
51 | PA-31,0,11,0,0,3,3,0,1,1,20,1,1,7,0,0,1,9,4,0,5,0,5,0,0,1,2,1,0,5,2,10,0,7,0,3,9
52 | PA-32,139,51,93,14,322,63,131,1514,156,159,16,10,28,9,77,245,122,128,434,52,71,116,84,65,23,285,229,40,119,41,531,1512,102,260,280,565
53 | PA-38,277,2834,112,1605,135,405,821,40,603,3212,1435,572,259,28,112,19,138,159,1420,20,111,364,11,89,69,68,33,3794,26,137,2376,399,1744,1411,483,4943
54 | PA-39,47,162,34,11,2679,145,62,305,111,57,624,5,88,681,1154,297,690,367,87,467,8,1490,15,81,181,12,141,5,668,777,19,545,922,18,1041,39
55 | PA-40,103,908,29,158,1181,143,43,40,93,239,72,28,951,2,17,223,406,150,160,26,35,12,7,150,124,56,1699,566,6,41,26,1308,110,66,78,4703
56 | PA-41,151,152,125,19,1012,852,7,2086,2,23,101,327,121,40,147,233,23,24,65,139,389,130,217,65,45,299,15,6,292,52,279,144,92,114,33,240
57 | PA-42,5,596,93,155,1314,4,132,21,28,963,55,29,99,8,16,117,46,41,1012,1032,9,2,17,95,58,342,237,14,41,148,149,1666,16,2179,1360,158
58 | PA-43,56,46,298,156,3160,146,45,92,1,62,348,45,11,75,47,47,170,105,475,376,1,22,580,14,40,0,58,75,37,4,8,110,733,259,213,14
59 | PA-46,15,1310,151,62,103,935,240,26,219,489,50,1534,1,27,299,2,276,203,153,821,72,88,23,0,314,4,6,287,118,91,197,362,5,39,8,69
60 | PA-47,79,244,223,19,797,67,87,259,88,55,166,108,196,158,15,4,74,66,10,8,36,118,165,2,253,41,305,1312,26,10,35,227,416,70,787,15
61 | PA-48,154,47,56,43,258,18,17,91,79,464,30,55,974,3,900,15,18,54,123,98,75,51,19,58,168,16,8,221,640,35,259,214,1164,30,118,218
62 | PA-49,35,15,391,9,150,18,123,17,178,164,69,44,12,39,67,47,6,7,1387,5,292,10,35,141,224,281,51,27,17,37,28,90,20,1225,1099,34
63 | PA-51,68,41,65,137,705,168,53,45,33,178,82,73,274,20,1531,3,35,31,318,79,233,49,25,290,43,45,880,621,201,52,149,34,174,995,551,1296
64 | PA-52,2699,60,5,9,432,56,96,26,169,15,579,61,55,49,4093,15,83,102,948,27,353,64,105,30,1505,411,23,272,33,189,600,73,40,340,242,123
65 | PA-53,16,422,31,107,589,24,56,118,4,12,12,1704,131,163,4,58,54,51,469,47,42,305,209,17,859,357,6,7781,1535,12,51,2551,20,158,111,3436
66 | PA-54,58,2,36,228,1149,30,111,9,5,91,16,23,290,100,21,4,114,83,17,10,0,528,85,1,145,8,7,26,14,283,52,200,444,771,1219,852
67 | PA-55,232,197,71,481,1170,62,124,115,132,1023,552,58,80,10,24,172,70,45,65,30,159,224,91,178,161,21,179,43,865,70,882,82,179,30,7,77
68 | PA-57,363,25,135,298,7851,2828,453,267,163,161,20,2065,365,418,15,7,38,38,20,91,678,3,28,51,53,6,800,1365,391,268,10,181,336,325,43,54
69 | PA-58,14,175,107,124,1126,58,273,78,570,24,33,12,39,28,56,412,59,120,102,156,5,8,0,26,61,7,133,8,26,169,504,228,115,8,12,740
70 | PA-59,19,223,93,210,101,99,59,87,52,917,177,8,813,41,52,193,1298,801,22,631,83,209,5,6,154,104,60,5,551,101,66,153,362,25,101,94
71 | PA-61,18,33,110,45,1919,54,467,7,190,17,97,168,42,27,94,55,56,81,229,27,9,616,3,74,2032,28,25,11,250,60,158,129,297,261,182,72
72 | PA-62,23,10,34,458,1640,192,927,21,74,14,1176,17,42,19,291,191,138,147,160,129,157,73,41,404,8,203,1005,237,838,20,14,135,6,25,19,637
73 | PA-63,16,257,241,422,514,41,211,67,251,39,7,206,150,122,155,280,43,63,155,543,302,27,700,435,12,70,59,97,5,54,360,882,455,572,483,1391
74 | PA-64,176,4365,13,14,155,90,495,69,7,14,31,113,15,82,325,57,932,574,70,68,224,193,4,70,93,28,42,536,45,12,218,792,45,1,1055,1856
75 | PA-65,104,24,9,14,15,69,54,98,6,71,1160,67,993,96,226,25,20,18,1300,220,50,30,12,11,312,32,651,10,26,33,35,786,657,43,289,1037
76 | PA-68,1552,12,7,83,47,368,75,1651,12,1941,95,409,3,5,725,560,130,369,117,33,71,77,28,30,124,587,120,167,720,76,94,61,333,32,15,189
77 | PA-70,278,29,46,140,242,24,2227,769,174,22,96,49,31,187,55,165,50,32,34,12,2,165,13,8,139,70,76,401,117,515,396,1562,144,143,31,307
78 | PA-71,228,162,17,17,805,799,156,231,98,58,94,706,110,685,2622,127,148,218,49,46,156,28,494,20,34,161,158,300,795,11,36,504,5,597,307,66
79 | PA-73,95,9,27,124,373,22,375,32,432,10,12,42,3,57,11,4,692,998,61,200,4,4,3,46,12,43,82,15,161,26,16,119,19,30,16,57
80 | PA-74,50,175,90,28,778,751,57,99,1529,188,161,2332,41,14,741,9,226,147,998,203,122,17,38,33,28,12,4640,737,243,461,454,7293,6,178,261,16
81 | PA-77,161,543,32,10,1007,110,27,1416,668,1133,86,375,45,156,306,8,10,52,45,643,32,2,49,4,9,206,137,3,1410,463,340,3861,67,43,99,311
82 | PD-1,529,7858,219,142,7884,3403,367,884,874,7669,4748,7129,142,1870,5520,51,232,578,1099,856,78,842,82,58,313,60,232,1124,77,50,3908,1132,796,1935,460,2130
83 | PD-14,6,7853,23,3,288,62,1,126,19,2365,87,276,50,838,368,3,3,24,26,3,45,20,5,3,2,1,4,840,1,5,154,23,0,554,12,36
84 | PD-16,107,18,82,6,546,17,3,452,817,151,4599,65,4,41,3478,1,7,45,15,11,16,10,25,0,36,56,93,13,7,6,298,69,9,287,151,839
85 | PD-17,72,285,25,4,4267,22,15,244,7,719,1,60,3,966,1642,2,7,91,87,4,11,98,3,27,163,0,4,23,8,39,409,650,55,879,208,61
86 | PD-18,319,9,27,13,7857,3229,150,41,29,4377,56,6296,83,1,15,1,214,414,166,13,1,698,49,2,99,1,5,237,57,0,2779,356,11,202,72,445
87 | PD-20,165,10,185,21,561,37,22,63,2,39,1,219,95,8,97,25,827,1344,8,34,18,32,2,2,0,7,142,2152,16,2,1308,4704,3,49,4,5810
88 | PD-5,523,777,77,1081,1392,47,20,40,1,537,4,343,3,7,27,67,28,51,19,7,5,479,1,8,0,0,4983,18,20,10,7815,467,594,52,0,82
89 | PD-7,1025,618,117,0,7928,548,122,12,1,19,31,8,10,39,150,8,9,12,3,3,40,38,0,35,1,32,9,566,0,0,2555,140,30,524,0,201
90 | PD-8,5,320,1,3,1017,376,7,31,22,29,37,4,7,7,905,22,66,6,27,17,85,5,8,164,6,13,134,61,4,31,433,18,41,52,8,1338
91 | PD-9,2,3486,122,2,1393,711,9,13,319,1061,12,103,51,59,404,62,11,6,38,99,16,73,0,149,207,2,3,94,0,7,7772,18,3,350,11,214
92 | PDD-1,508,45,4,152,597,6,103,159,14,35,164,22,3,33,582,296,3,2,602,4,1042,265,4,6,34,65,164,592,31,1250,1059,51,165,139,72,2876
93 | PDD-10,370,149,12,263,643,64,201,51,469,721,283,2234,589,35,190,19,14,28,31,70,84,462,32,14,14,170,611,135,21,14,1720,13,109,316,286,1658
94 | PDD-11,219,71,523,220,44,79,216,585,428,20,58,819,83,180,21,562,19,4,349,9,31,29,11,400,8,42,914,13,25,252,543,360,1467,160,26,576
95 | PDD-12,85,76,3,257,851,392,57,1362,363,337,65,212,298,5,10,6,91,163,171,187,161,37,12,391,13,304,617,441,371,823,61,13,18,43,35,316
96 | PDD-13,3,17,17,8,64,26,7,23,5,37,51,20,13,9,3,13,13,11,15,37,9,12,1,10,3,4,78,4,27,5,25,17,6,8,32,9
97 | PDD-14,17,245,152,98,514,313,32,435,33,701,485,317,197,225,24,29,27,24,240,643,67,146,14,4,20,75,910,9,200,62,247,261,108,85,102,184
98 | PDD-15,56,54,5,26,236,1507,40,64,21,41,5905,40,112,6,48,33,19,9,6,0,6,201,1,89,12,5,1677,33,5751,571,30,139,3,70,17,253
99 | PDD-16,209,10,27,374,198,30,44,108,179,558,115,464,86,75,49,205,68,85,62,6,43,189,20,8,74,55,479,598,34,229,369,225,39,4,114,354
100 | PDD-17,107,28,21,367,440,167,121,43,225,46,6,605,497,127,15,17,193,208,320,354,50,526,5,846,40,65,1009,472,15,61,40,184,789,8,34,606
101 | PDD-18,232,490,17,12,137,102,40,32,172,131,32,127,361,22,110,48,117,109,156,222,7,111,30,454,48,33,43,519,393,314,288,39,2039,108,96,29
102 | PDD-19,34,17,379,71,521,89,215,824,92,190,67,39,52,114,54,30,1,4,18,15,62,168,39,212,279,89,176,7,277,96,3138,526,1648,233,244,1000
103 | PDD-2,41,43,9,342,1422,17,158,81,18,101,106,239,58,64,406,56,31,15,26,47,2,583,3,94,119,513,775,74,137,780,351,166,863,96,54,38
104 | PDD-20,320,195,1117,245,2415,623,122,422,401,1531,542,45,16,232,9,94,37,53,78,35,88,564,240,247,178,266,119,191,80,224,437,299,413,99,43,255
105 | PDD-21,1,2,0,0,15,0,8,10,4,10,0,5,1,0,1,3,2,4,6,5,0,24,0,0,1,7,3,0,1,1,24,0,0,6,5,2
106 | PDD-22,468,1379,467,19,677,943,166,213,31,1121,389,60,14,21,118,551,94,242,76,71,154,49,43,1047,10,20,225,368,55,149,326,177,382,239,166,506
107 | PDD-23,449,225,529,363,1189,907,659,449,1112,1432,396,2110,1303,16,283,75,106,45,67,71,187,168,31,53,353,419,369,340,252,1847,3107,215,1478,103,236,2963
108 | PDD-24,361,224,67,286,17,158,75,232,86,393,108,331,16,416,46,792,717,498,286,116,62,37,22,85,1,342,77,423,34,261,363,188,378,504,390,148
109 | PDD-25,114,8,471,81,181,1,48,123,116,328,24,359,64,160,156,186,60,55,218,46,41,450,165,315,80,45,674,41,292,240,131,31,921,62,47,175
110 | PDD-26,27,84,10,8,499,21,94,518,1728,124,150,61,475,1145,97,557,512,502,8,1125,3,233,27,83,47,105,81,26,675,669,337,219,117,1015,743,186
111 | PDD-27,415,912,272,695,751,323,95,472,1240,497,244,524,178,296,312,54,365,374,448,29,41,126,46,266,14,25,101,254,980,517,1000,116,551,380,405,1359
112 | PDD-28,26,224,564,940,723,138,84,604,37,26,102,312,84,35,70,15,9,4,254,41,39,61,13,22,30,89,0,1,5,118,47,201,183,175,413,5
113 | PDD-29,1,1,1,0,1,2,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,3,0,0,0,0,0,2,0,0,3,2,0,0,0,1
114 | PDD-3,475,56,101,199,289,177,33,6,24,443,413,152,18,32,48,174,63,133,709,472,33,18,293,182,74,60,418,36,107,823,106,30,276,85,66,386
115 | PDD-30,192,394,33,152,2415,236,60,416,770,477,96,1395,40,0,95,473,87,112,36,523,15,270,320,278,14,246,197,197,3,22,562,450,39,65,113,212
116 | PDD-31,2,28,15,426,12,13,132,39,11,30,800,10,25,1,568,12,590,505,22,76,3,29,12,7,5,3,9,2,3,498,23,43,5,12,60,923
117 | PDD-32,105,726,16,104,905,789,62,250,164,1704,189,647,8,8,504,112,80,258,52,9,117,1412,11,135,88,12,913,354,211,160,844,254,110,90,66,1238
118 | PDD-33,168,86,580,51,106,10,240,11,164,863,100,162,56,21,12,258,27,3,10,4,11,281,13,6,493,8,68,88,12,178,6,168,285,2,7,447
119 | PDD-34,357,4,130,1168,2177,198,174,222,182,92,70,1654,225,211,333,288,36,21,43,6,4,161,17,85,228,10,32,312,47,203,187,402,547,99,57,509
120 | PDD-35,35,20,1212,69,429,222,49,303,744,547,17,141,1464,163,62,899,145,184,176,169,33,38,424,128,138,200,1504,115,894,4,794,174,24,678,399,475
121 | PDD-36,328,257,377,183,275,489,90,348,42,168,105,216,139,140,232,16,322,221,127,320,12,155,4,10,4,790,729,81,26,68,79,289,87,678,612,525
122 | PDD-37,667,241,138,119,16,156,198,78,66,1182,84,394,68,386,95,212,204,251,193,47,9,16,93,177,110,359,529,38,1100,142,138,311,86,20,39,722
123 | PDD-38,65,213,36,517,196,83,95,45,91,392,518,101,9,609,1,295,182,219,10,14,0,33,11,34,99,53,244,1059,89,401,762,49,311,680,479,916
124 | PDD-39,338,120,121,364,29,18,770,32,109,245,644,854,120,195,62,6,124,108,92,41,30,133,406,540,52,194,275,11,861,53,42,47,1694,819,666,44
125 | PDD-4,197,579,345,266,349,258,396,10,35,134,33,2172,35,121,60,147,11,2,1584,139,133,781,13,242,9,44,449,737,31,404,738,496,425,74,44,484
126 | PDD-40,74,60,124,8,1095,2,99,852,123,668,52,499,141,1,19,485,612,431,216,547,42,3360,12,198,39,265,208,21,79,7,1393,4,68,703,743,43
127 | PDD-41,308,27,98,59,11,126,47,172,75,253,92,31,26,23,58,63,31,25,177,58,43,513,51,552,37,164,26,28,67,48,15,262,685,100,70,1315
128 | PDD-42,241,151,29,69,193,80,15,5,68,468,164,62,81,202,83,26,17,7,384,8,121,8,31,612,60,149,523,9,118,287,96,13,997,3,7,210
129 | PDD-43,25,50,664,57,393,505,156,93,20,681,40,366,185,48,12,26,450,471,57,20,6,7,34,13,32,133,56,432,13,291,76,150,68,94,78,609
130 | PDD-44,220,30,963,896,48,98,42,606,723,1140,329,110,18,198,21,274,154,131,325,55,77,96,84,176,107,24,105,39,185,166,1279,1,372,841,735,18
131 | PDD-45,42,108,285,96,70,404,3,35,84,1524,222,199,31,1751,190,77,192,140,796,236,44,545,80,305,184,204,957,1462,194,166,40,300,3315,64,101,323
132 | PDD-46,84,499,639,800,140,67,71,190,543,2058,777,1780,829,177,206,432,203,217,145,28,117,90,88,25,145,179,168,26,138,69,1244,139,704,253,138,1305
133 | PDD-47,15,25,98,181,108,556,77,155,104,90,514,1587,47,109,28,265,86,114,6,371,163,260,32,987,8,60,554,118,20,185,147,11,393,613,424,83
134 | PDD-48,181,334,249,421,413,48,165,90,99,2478,165,78,180,114,144,10,19,27,167,9,105,932,76,192,51,78,179,866,267,18,189,37,20,240,123,252
135 | PDD-49,13,589,18,213,146,153,8,2,32,95,43,579,357,45,72,60,67,68,60,175,4,91,25,1363,71,11,746,2232,385,159,183,41,21,225,110,1738
136 | PDD-5,65,262,181,84,1292,345,177,97,870,2299,153,2167,425,519,71,178,45,27,1060,475,12,401,173,161,53,218,33,927,788,200,1779,371,70,128,12,884
137 | PDD-50,310,458,227,1261,88,64,57,17,36,1002,29,208,38,72,347,132,188,189,150,939,60,28,230,127,97,141,571,53,5,812,1037,60,598,91,27,275
138 | PDD-51,866,574,13,29,327,20,71,19,6,466,27,1669,1352,33,139,21,42,69,17,27,3,141,122,101,0,44,585,22,35,71,27,20,10,35,5,242
139 | PDD-52,946,316,298,265,254,37,117,1098,345,52,26,114,39,1642,115,59,1,10,611,87,53,889,31,320,0,175,1,175,157,487,1853,46,103,113,0,96
140 | PDD-53,791,187,190,501,83,206,17,456,25,130,805,664,24,110,176,132,57,73,25,85,38,166,18,71,35,2,11,19,256,201,484,427,205,185,153,239
141 | PDD-54,70,7,52,201,22,392,22,636,227,986,30,314,123,66,23,11,175,220,151,2,12,98,0,7,46,117,40,86,256,76,12,82,1006,45,14,95
142 | PDD-55,88,32,11,17,411,73,56,28,16,50,234,27,14,8,88,1,9,6,28,61,286,7,12,308,8,20,604,207,6,93,44,396,572,168,96,449
143 | PDD-56,49,160,185,124,63,70,428,22,53,561,16,3,8,489,6,365,160,112,260,17,146,15,23,20,1,36,34,423,9,14,195,431,962,342,307,138
144 | PDD-57,117,20,220,180,90,27,13,110,90,524,6,64,147,8,173,21,79,68,30,296,67,466,37,60,1,6,602,31,141,182,156,45,175,230,321,1076
145 | PDD-58,320,86,92,1207,912,416,670,456,17,78,10,229,454,506,110,210,138,168,823,457,170,128,16,2168,91,128,636,12,72,148,68,67,37,34,2,560
146 | PDD-59,221,206,247,170,37,109,51,287,144,2343,262,123,48,118,85,163,131,234,161,71,18,49,152,287,10,16,439,157,236,846,269,115,490,54,26,639
147 | PDD-6,626,134,16,55,235,129,247,157,252,796,403,67,73,46,17,198,135,166,1323,4,91,74,79,130,97,158,33,127,64,301,32,161,1308,742,317,263
148 | PDD-60,79,7,34,7,27,6,0,126,57,215,31,41,7,6,79,10,0,1,24,23,0,21,1,26,35,10,9,18,38,39,91,6,20,9,15,30
149 | PDD-61,191,52,120,229,11,1,17,621,73,100,27,1406,80,627,6,933,47,54,282,8,82,1040,4,63,35,39,1041,0,29,725,102,280,43,27,32,1605
150 | PDD-62,480,210,284,901,883,183,125,110,72,2263,353,50,17,43,51,421,26,50,3,464,340,446,2,8,132,176,108,96,451,740,1157,42,278,11,8,296
151 | PDD-63,4,232,112,26,1019,8,7,326,247,1595,139,64,74,3,160,8,52,49,33,251,28,221,261,344,28,75,22,15,36,30,100,38,350,5,0,47
152 | PDD-64,17,191,80,22,911,9,4,216,248,1196,118,53,74,1,164,3,57,23,33,191,45,202,151,250,22,66,30,10,40,26,124,62,322,5,8,31
153 | PDD-65,278,45,10,344,268,233,30,222,639,515,248,812,143,6,544,13,15,12,797,132,107,264,38,69,33,101,86,175,346,209,2073,104,1447,220,221,164
154 | PDD-66,0,0,8,29,1,5,3,6,18,3,900,1128,2,0,1115,3,4,0,0,734,1022,106,0,7,0,104,47,72,4,69,10,3,3,116,22,120
155 | PDD-67,3,0,1118,635,7,49,134,2,917,94,72,981,6,4,68,1,201,151,55,46,21,33,0,14,2,72,233,1,360,309,10,311,21,77,140,3215
156 | PDD-68,535,477,41,875,412,246,140,450,60,631,308,507,104,906,197,136,196,204,77,250,10,448,173,511,79,17,812,768,63,361,1665,208,131,608,775,284
157 | PDD-69,1863,71,120,1210,891,293,109,317,165,737,25,591,11,4,88,58,23,47,51,78,38,185,15,85,63,121,3,308,342,144,384,450,169,26,20,150
158 | PDD-7,311,83,256,289,416,205,216,1240,255,512,386,54,21,197,26,46,428,515,399,28,23,1280,171,88,352,64,4,1157,1193,107,299,349,549,134,40,545
159 | PDD-70,25,11,563,550,109,6,3,42,21,410,6,1598,1,62,130,98,2,2,559,463,10,37,24,551,2,136,41,66,3,67,3107,236,514,42,11,1038
160 | PDD-71,32,78,57,75,168,21,261,71,550,651,345,223,78,1,228,410,215,266,271,7,168,64,43,498,3,41,8,44,42,831,292,846,285,91,149,3470
161 | PDD-72,287,116,7,879,1119,184,147,27,110,218,578,756,65,25,17,454,34,61,507,6,3,179,169,7,41,1,426,244,1111,360,237,111,122,73,100,300
162 | PDD-73,332,80,48,211,215,81,35,64,28,827,506,632,433,95,13,104,80,20,22,168,74,82,6,16,0,50,18,25,9,79,688,291,6,333,109,270
163 | PDD-74,15,202,163,103,71,39,32,84,185,34,61,3343,138,147,49,88,62,58,60,330,53,130,21,201,13,17,40,480,166,177,63,33,21,514,447,2506
164 | PDD-75,58,39,99,10,272,23,53,96,1094,659,41,28,3612,34,222,26,58,16,171,122,0,12,0,2,12,452,616,55,21,7,14,621,209,78,251,89
165 | PDD-76,37,1,118,26,1754,112,24,103,113,849,83,664,30,176,15,81,255,228,119,33,3,264,23,499,9,609,15,320,34,93,102,29,51,20,84,352
166 | PDD-77,15,7,385,5,128,84,23,681,119,59,109,29,173,10,284,11,17,33,5,34,59,424,22,100,103,120,783,11,43,13,753,241,83,184,114,85
167 | PDD-78,20,246,24,34,866,679,397,20,167,1279,68,23,26,35,36,67,39,5,118,205,131,118,12,369,16,249,3,199,231,44,550,572,438,234,316,205
168 | PDD-79,86,31,22,2088,1078,6,84,248,34,1737,44,1330,23,7,573,193,256,207,75,6,5,2003,15,62,10,841,45,183,38,684,3121,325,396,210,163,1879
169 | PDD-8,99,40,48,1130,904,91,110,659,34,226,59,18,655,28,534,179,79,28,19,109,42,469,20,107,91,135,21,112,633,376,276,54,34,489,329,2191
170 | PDD-80,269,93,285,168,1446,16,115,109,202,192,1119,1027,9,16,101,53,44,38,54,224,50,169,195,671,53,126,236,361,276,221,172,164,631,462,273,139
171 | PDD-81,25,77,596,470,41,36,33,307,117,255,166,4357,442,47,8,208,45,29,110,174,9,1072,44,7,10,66,179,58,63,249,140,209,196,206,111,214
172 | PDD-82,408,121,101,76,99,93,8,461,129,337,80,374,271,38,724,142,150,111,497,247,59,27,11,71,4,14,1,88,142,56,19,853,33,41,39,1771
173 | PDD-83,22,957,67,342,802,559,35,264,705,682,180,110,96,34,416,13,117,81,5,22,76,317,47,140,4,24,3,373,8,8,198,458,516,69,159,305
174 | PDD-84,219,280,23,538,233,2,97,118,30,344,70,1213,32,200,254,1,164,177,105,299,43,368,21,29,26,84,434,67,597,80,287,55,423,304,147,88
175 | PDD-85,39,24,242,466,33,234,112,189,256,246,18,352,54,2,31,23,42,85,68,49,31,158,0,360,232,5,808,10,118,8,31,34,2382,284,521,424
176 | PDD-86,153,449,1359,814,4,60,11,734,483,3223,4,373,598,41,134,217,20,38,299,28,4,13,148,93,28,163,137,47,105,207,158,395,443,170,95,359
177 | PDD-87,319,1,42,45,334,509,159,195,138,581,85,202,5,18,128,115,7,2,613,460,0,296,7,1032,198,0,6,3,56,79,49,318,256,52,82,349
178 | PDD-88,488,15,558,314,379,457,4,514,41,76,35,16,360,13,15,95,242,81,282,20,21,188,0,376,46,12,298,41,17,85,172,356,345,8,7,275
179 | PDD-89,24,17,118,660,16,52,262,146,0,47,136,281,48,361,91,388,285,254,365,135,0,69,2,29,41,25,90,18,95,101,9,164,246,88,48,896
180 | PDD-9,1102,397,151,251,295,50,448,40,25,615,80,236,105,140,319,8,275,238,58,39,96,357,68,1624,143,94,229,131,317,83,311,657,54,143,169,1223
181 | PDD-90,164,43,188,115,9,60,262,38,2909,375,156,32,211,60,10,76,19,6,755,112,1,624,5,469,47,183,225,40,205,29,146,334,610,501,347,657
182 | PDD-91,23,109,171,517,17,10,387,89,522,89,465,204,292,553,32,12,157,135,100,97,4,768,228,5,8,64,390,36,993,86,55,997,114,963,565,232
183 | PDD-92,49,65,18,270,275,56,1,143,504,67,102,60,237,118,12,212,49,67,348,18,101,793,14,40,110,66,143,206,80,91,229,1104,276,24,46,650
184 | PDD-93,16,55,591,26,29,40,50,51,67,314,160,158,530,53,65,82,70,130,320,3,72,48,6,227,12,234,183,1,45,77,86,1161,675,56,24,188
185 | PDD-94,202,6,381,16,85,427,27,1589,16,414,2,784,73,265,10,570,27,7,11,40,23,26,65,84,20,34,887,76,79,8,46,1841,105,15,35,41
186 | PDD-95,30,113,488,114,108,19,29,857,82,56,70,9,12,77,45,32,145,121,111,40,22,89,62,32,12,88,585,623,0,6,106,6,8,119,58,111
187 | PDD-96,130,6,62,60,127,129,74,9,28,11,1,69,1,12,49,530,229,180,1928,169,9,5,29,113,7,0,7,50,29,83,362,44,124,42,33,760
188 |
--------------------------------------------------------------------------------
/data/PDAC/PDAC_panel.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raphael-group/ConDoR/08c116181dc54d7d5a73f3bd4bbc3deca62bf769/data/PDAC/PDAC_panel.xlsx
--------------------------------------------------------------------------------
/data/PDAC/Snakefile:
--------------------------------------------------------------------------------
1 | # simulation snakefile
2 | configfile: "config.yaml"
3 |
4 | rule all:
5 | input:
6 | # condor
7 | #expand('condor/CRC2_k{k}_B.csv', filtered_product, seed=seeds, ncells=config['ncells'], ncharacters=config['ncharacters'], nclusters=config['nclusters'], missing=config['missing_rate'], k=config['k']),
8 | expand('condor_reads/M04_k{k}_B.csv', k=config['k']),
9 | #expand('sphyr/M04_k{k}.out', k=config['k']),
10 | expand('sphyr/M04_k{k}.dot', k=config['k']),
11 | expand('compass/M04_tree.gv')
12 |
13 | rule compass:
14 | output:
15 | tree_file='compass/M04_tree.gv',
16 | input:
17 | variants_file='input/M04_variants.csv',
18 | regions_file='input/M04_regions.csv',
19 | params:
20 | exec=config['compass_exec'],
21 | nchains=config['nchains'],
22 | chainlength=config['chainlength'],
23 | log:
24 | std='compass/M04.log',
25 | err='compass/M04.err.log',
26 | benchmark: 'compass/M04.benchmark',
27 | shell:
28 | '{params.exec} -i input/M04 -o {output.tree_file} --nchains {params.nchains} --chainlength {params.chainlength} --CNV 1 '
29 | ' > {log.std} 2> {log.err}'
30 |
31 | #rule condor:
32 | # output:
33 | # B='condor/CRC2_k{k}_B.csv',
34 | # input:
35 | # character_matrix='ground_truth/CRC2_k{k}_character_matrix.csv',
36 | # params:
37 | # prefix='condor/CRC2_k{k}',
38 | # fp=config['estimated_fp'],
39 | # fn=config['estimated_fn'],
40 | # log:
41 | # std='condor/CRC2_k{k}.log',
42 | # err='condor/CRC2_k{k}.err.log',
43 | # benchmark: 'condor/CRC2_k{k}.benchmark',
44 | # shell:
45 | # 'python ../../src/condor.py -i {input.character_matrix} -a {params.fp} -b {params.fn} -k {wildcards.k} '
46 | # ' -o {params.prefix} '
47 | # ' > {log.std} 2> {log.err} '
48 |
49 | rule sphyr:
50 | output:
51 | result='sphyr/M04_k{k}.out',
52 | input:
53 | character_matrix='input/sphyr_input.txt',
54 | params:
55 | exec=config['sphyr_exec'],
56 | #lT=7,
57 | lT=10,
58 | fn=config['sphyr_fn'],
59 | fp=config['sphyr_fp'],
60 | nmutations=config['nmutations'],
61 | log:
62 | std='sphyr/M04_k{k}.log',
63 | err='sphyr/M04_k{k}.err.log',
64 | benchmark: 'sphyr/M04_k{k}.benchmark',
65 | shell:
66 | '{params.exec} {input.character_matrix} {output.result}'
67 | ' -a {params.fp} -b {params.fn} -lT {params.lT} -lC {params.nmutations} -k {wildcards.k} -v '
68 | ' > {log.std} 2> {log.err}'
69 |
70 | rule sphyr_viz:
71 | output:
72 | result='sphyr/M04_k{k}.dot',
73 | input:
74 | sphyr_output='sphyr/M04_k{k}.out',
75 | cell_names='input/sphyr_cell_names.txt',
76 | mutation_names='input/sphyr_mutation_names.txt',
77 | params:
78 | exec=config['sphyr_viz_exec'],
79 | log:
80 | err='sphyr/M04_k{k}_viz.err.log',
81 | benchmark: 'sphyr/M04_k{k}_viz.benchmark',
82 | shell:
83 | '{params.exec} {input.sphyr_output} -t {input.cell_names} -c {input.mutation_names} > {output.result} '
84 | ' 2> {log.err} '
85 |
86 |
87 | rule condor_reads:
88 | output:
89 | B='condor_reads/M04_k{k}_B.csv',
90 | input:
91 | character_matrix='input/character_matrix.csv',
92 | total_read_matrix='input/total_readcounts.csv',
93 | variant_read_matrix='input/alt_readcounts.csv',
94 | snp_list='input/snp_list.txt',
95 | params:
96 | prefix='condor_reads/M04_k{k}',
97 | fp=config['fp'],
98 | fn=config['fn'],
99 | ado=config['ado'],
100 | log:
101 | std='condor_reads/M04_k{k}.log',
102 | err='condor_reads/M04_k{k}.err.log',
103 | benchmark: 'condor_reads/M04_k{k}.benchmark',
104 | shell:
105 | 'python ../../src/condor.py -i {input.character_matrix} -a {params.fp} -b {params.fn} -k {wildcards.k} '
106 | ' -r {input.total_read_matrix} -v {input.variant_read_matrix} -s {input.snp_list} --ado {params.ado} '
107 | ' -o {params.prefix} '
108 | ' > {log.std} 2> {log.err} '
109 |
--------------------------------------------------------------------------------
/data/PDAC/config.yaml:
--------------------------------------------------------------------------------
1 | #
2 |
3 | fp: 0.001
4 | fn: 0.001
5 | #fp: 0.01
6 | #fn: 0.01
7 |
8 | ado: 15
9 |
10 | k:
11 | #- 0
12 | - 1
13 | #- 2
14 |
15 | #sphyr parameters
16 | sphyr_exec: '/n/fs/ragr-data/users/palash/SPhyR/build/kDPFC'
17 | sphyr_viz_exec: '/n/fs/ragr-data/users/palash/SPhyR/build/visualize'
18 | sphyr_fp: 0.01
19 | sphyr_fn: 0.1
20 | nmutations: 7
21 |
22 | # compass parameters
23 | nchains: 4
24 | chainlength: 5000
25 | compass_exec: '/n/fs/ragr-data/users/palash/COMPASS/COMPASS'
26 |
--------------------------------------------------------------------------------
/data/PDAC/input/M04_regions.csv:
--------------------------------------------------------------------------------
1 | 13_BRCA2,558,678,1768,4783,1712,749,770,980,1105,848,487,2448,898,476,1996,624,1067,1817,1282,585,2574,1742,2315,824,643,1845,887,884,796,1056,1151,514,1220,457,808,1664,1330,1256,877,1253,636,1282,1794,1224,2071,476,1841,1424,950,878,1943,866,1208,1200,1162,676,822,633,6406,953,3165,1216,1549,1263,292,355,625,1498,3819,812,1952,906,1569,1804,972,1803,1809,2620,1597,1063,3420,1673,792,1634,1129,1143,1651,1163,1637,1005,816,1716,330,650,1239,2483,848,1076,1624,825,536,987,1266,950,1698,1450,1107,965,471,585,936,567,1092,608,893,2309,645,530,759,764,646,822,1603,1620,807,1558,790,1002,2640,893,597,327,1672,1260,1104,631,1024,321,967,1051,987,2390,5047,2262,883,4749,1949,360,751,1695,2531,811,1102,1160,907,775,586,578,1055,755,1254,2917,870,2150,3276,2156,1447,1287,1365,1799,3093,608,515,656,1189,585,510,991,1270,849,818,1205,183,1047,2066,920,1708,0,552,1409,1108,1274,578,1004,1244,685,609,311,513,1402,1181,3767,1442,2981,1821,1028,845,1470,1353,1331,940,754,1166,820,1194,2010,1306,425,627,1190,692,702,1102,1625,2085,872,1697,555,947,1757,570,464,1162,1415,1261,1280,1492,3002,832,760,1269,1427,2245,1290,1420,1424,620,1033,746,718,570,831,2037,3068,1039,545,1785,703,1069,722,1623,718,2250,1026,1306,420,2507,1638,3942,698,629,1478,1013,1107,1958,634,451,1777,1596,357,1933,596,712,1957,1752,1724,336,1149,760,1537,1749,1055,870,1763,1544,1382,1871,1551,932,999,2473,1057,1423,2206,1085,2862,971,740,2353,1608,890,576,1377,839,1631,778,1705,1892,1234,647,1635,1425,735,721,617,952,591,928,812,249,1054,701,1705,1261,1723,1219,790,1592,1194,1105,1310,1957,1833,2883,1014,587,1594,1212,3300,3731,759,702,546,627,1096,1280,447,1900,944,926,1104,1493,367,2161,716,593,1259,982,2897,399,1735,1550,1478,1510,1280,385,368,400,448,1962,1280,4350,1100,4165,254,1357,1509,1176,1095,511,675,1049,2615,885,885,597,1182,1054,719,651,1497,1344,899,661,662,816,1406,842,844,1129,1056,806,1702,481,1915,831,1123,2004,993,4647,807,1184,1493,1551,690,1404,1166,1521,964,621,720,811,651,600,542,1175,597,662,495,1968,2151,1294,951,768,1933,310,570,330,965,2718,778,987,1949,3506,1313,2619,1371,564,1422,2319,1504,2301,1183,2628,879,1181,4864,1037,1489,1864,1261,635,1006,662,1312,1711,2530,653,1363,1067,854,8563,2345,985,1066,710,1120,779,1388,1577,1003,1039,640,423,742,813,2279,908,409,783,955,1396,1597,720,1095,886,497,2765,853,916,1158,603,1688,895,884,974,1399,1759,1225,1482,1076,1052,1159,2808,1313,1089,875,1117,834,606,889,338,741,310,2749,1598,701,2976,1357,698,664,1056,1141,1950,689,667,822,1288,471,248,2927,1688,835,2244,699,1442,695,381,2609,923,3369,907,646,960,2034,982,1332,1075,2240,1653,1277,1784,1796,1020,2327,1358,1711,988,1676,820,1434,1268,956,1451,576,1418,1125,1113,1602,637,847,457,1723,650,1633,3192,513,786,1450,3927,2731,576,2560,1373,728,651,1284,492,809,1153,682,2639,1710,789,785,1325,937,1307,1266,998,975,1552,704,1942,854,1031,2838,872,889,650,1368,1713,797,349,2414,1440,2560,1462,1336,799,1056,1219,516,625,639,1275,683,984,1263,1168,969,2524,1261,897,832,523,390,1010,1866,713,783,1471,903,1206,1013,1113,1285,766,707,722,1624,4549,1038,886,584,2634,854,2784,2095,1768,1282,1594,1028,4095,461,1389,1864,1139,1469,430,810,1859,1393,575,1586,1722,624,877,1151,635,2230,1194,989,1200,851,1307,1208,655,671,985,1266,1483,371,444,2571,1420,2655,1481,1217,1358,1393,1610,1039,765,931,3751,1769,2938,1541,770,2591,1297,1611,1783,969,1398,481,540,954,344,713,743,1394,1176,877,665,852,798,1158,1172,302,1650,605,2692,1390,956,1506,1111,1337,3339,913,818,1212,1871,1110,1659,801,854,1311,736,756,1163,1643,323,807,966,734,926,335,380,911,1407,883,774,203,690,668,624,3143,682,613,582,561,1938,981,4184,1640,1206,1277,2111,898,515,2849,779,905,491,1703,449,779,1553,2024,1287,772,1334,1257,1304,2058,640,2455,1626,2150,1481,539,2499,367,660,1662,1293,657,1794,795,859,959,1120,1384,972,1277,1024,1301,815,619,754,1854,686,1060,928,1414,4560,2375,996,312,1397,1347,1498,741,547,1669,4643,1132,830,1387,663,1137,1023,1086,1560,1185,800,1604,957,1290,1629,1103,2687,2074,1181,929,1219,5277,441,1286,1114,2067,1706,1034,393,1013,1169,3180,1899,1333,801,460,401,426,552,2240,856,2923,750,1109,772,604,742,853,2052,1177,612,540,856,565,555,1136,950,821,1101,1604,941,1115,2234,932,842,682,508,1948,946,1326,1235,3133,2284,656,1088,1230,824,457,1886,1410,1297,1160,1724,557,1491,238,1293,1711,678,573,1460,2864,686,5112,853,1061,1115,1162,578,912,1511,1992,1431,845,828,1057,701,1055,3041,744,1385,1097,910,4811,1140,2050,1037,587,1395,1659,376,857,1026,917,1234,752,713,2157,1344,1359,2750,2187,4431,1378,5371,4359,1053,1988,1807,3376,4880,1826,3405,13631,3151,7408,2682,6770,20508,5761,5503,6973,4419,2747,1637,3340,3885,2983,1439,5959,4278,3205,5832,4204,5464,1808,5166,1713,2995,1508,4570,2649,2545,1445,27261,2623,2337,10421,2550,3916,3122,3502,10302,2747,5309,1640,3346,5151,3710,4243,4669,2501,3240,2353,3096,6489,7603,2406,2132,3536,2014,1897,3691,3402,4524,10432,4435,6035,5175,4776,3139,3598,2141,3468,5254,1880,1481,2037,2534,3778,6080,2070,6889,4783,2307,2029,1621,4111,2059,3960,3417,2605,10391,9320,3622,1582,2640,758,9493,11568,2003,2920,4379,6795,6142,2057,1521,3568,3255,3258,4814,17524,2138,5483,1899,1338,4252,2135,12284,17741,10639,3644,9281,6958,3452,3463,3061,6905,3495,2685,1843,3037,5288,4317,1402,3800,2671,2262,4695,11612,3160,8215,1306,2271,4206,1527,1307,4637,9670,2508,9164,4586,2424,2342,1850,2200,2469,2976,3347,2478,17234,2808,2899,3561,3015,8346,1293,2922,1416,2740,3523,3401,2534,2657,10516,19553,30597,1850,3322,2495,5311,2119,3088,6485,2962,2137,4316,8444,2632,1983,1431,6832,4717,3496,6842,3103,2141,4790,9542,3555,1690,2398,5674,10312,7326,9172,2950,4577,3296,9714,5259,3457,5063,15266,3067,3291,3675,1983,9586,7912,2542,6367,5323,1571,1611,4914,2724,3969,4115,1766,2491,2314,1373,3514,2567,2467,8650,6244,4406,1860,1723,2465,9144,2881,2832,3097,1403,6455,1560,2092,1997,2389,4191,4661,11635,3050,1854,3526,4486,1966,1556,5687,1996,9443,2939,3544,7870,3570,2034,2294,10574,10286,14676,4411,3086,2255,15449,4512,17740,1744,7289,1698,8526,1098,2023,2450,5222,1607,3413,1594,2949,5109,2577,2143,2314,2444,4066,2243,4181,2176,2432,3138,2421,2218,7496,8542,3271,3004,2362,9395,3397,2746,26924,3387,1623,3804,1392,4817,4565,9556,2771,2507,3328,2646,2461,1631,6424,6828,3810,3295,25318,2672,2028,3740,1330,5079,5673,1423,3040,3521,1612,2136,2431,1615,8340,11699,9539,3696,5455,3172,1994,2687,5577,3885,2832,3159,5054,2922,2703,1766,2768,2955,4788,1772,1459,2537,3296,4280,2250,3131,4408,1421,2546,2147,2876,810,2083,2204,4497,2064,4749,1844,6763,4029,11448,11511,2394,889,1947,1338,2322,3064,7069,2426,2260,3554,3591,2776,6915,1808,1574,2072,4866,6745,8018,7696,2769,4635,2061,2202,1465,1277,4277,3761,1215,3922,5824,1162,2408,3702,7828,4719,1359,5846,3998,5858,975,9602,3638,8589,3641,3033,1904,1223,2764,4196,6743,3585,1817,2332,7698,1750,2901,7047,3661,2318,4939,4406,8739,2249,2514,3330,1819,18397,6715,8290,3014,3165,3082,2663,2679,3265,2391,2726,4841,2189,4052,4128,2617,4613,3449,2869,4100,2392,5380,6927,1020,4695,10094,7464,3151,11496,6508,4445,1585,5247,4583,2795,4601,6931,3391,1834,3918,2242,969,3328,4458,3151,4750,3097,2974,2096,11945,6750,4193,2527,2441,5965,4088,1575,2394,3033,8338,20702,2338,4390,2027,1899,11811,4989,2391,1674,2859,2858,4732,3889,2294,4564,1268,4001,2777,5565,10438,4167,8064,2316,1755,3959,3569,1927,5736,4849,5607,1166,6030,3023,5975,3133,18096,1936,2027,1830,2203,1026,1402,6933,2546,2129,1448,1688,4596,4096,5146,5075,4400,3471,2932,11052,7347,2911,1030,1810,4632,2868,3863,2444,3929,2475,2368,5032,7589,4293,5450,1179,2298,11302,1797,1417,6606,1442,2748,9634,3451,3866,7809,2243,4253,1677,5499,2577,2580,1986,4023,5517,2892,4463,3057,2715,2549,1738,9760,17825,4752,10974,2809,2454,5385,5655,2568,9816,4795,6032,1129,2416,2479,3461,5554,3270,6308,5224,6654,1960,3445,2877,4288,5642,9427,3656,1679,3155,1842,4958,3923,1659,5083,1680,4384,2750,1761,3939,2351,7538,9264,4095,1630,3936,3762,5529,8216,1370,4134,2467,2642,5511,5913,2677,2265,3114,9215,3527,3066,2728,2185,1958,2578,2012,2414,2135,3532,4189,2402,8567,1467,2416,5097,4004,4636,3463,3370,9797,4893,13845,3322,2326,16651,3078,4168,1731,1496,7468,2541,2526,8331,1524,3060,1526,1719,17713,8207,1774,3442,2104,4489,3263,1263,3456,2205,8375,2727,4609,3108,3809,3400,1570,2421,7089,1956,1652,2638,12734,2148,2285,5134,2147,3516,2595,4651,2675,1844,3178,7736,3698,2432,3464,2956,2048,5684,9556,7467,11906,5030,5289,3637,1172,1243,3813,3154,2487,3486,2955,2348,4569,3453,7599,6564,9747,10406,3368,10385,9493,3216,2462,3971,2939,9032,2245,2755,5781,13629,2968,2140,2371,5531,7604,4983,11022,9137,3480,1755,1878,1645,2164,10654,4296,4825,7726,5918,2496,3558,1166,2318,1277,2066,6600,2536,2038,4584,4907,1964,3747,2083,6113,866,2441,11898,2153,2283,1350,4999,3127,1884,3914,2511,2383,9426,5601,1651,4341,1481,3118,8692,1912,2168,4257,2582,2653,3947,2545,1716,5666,2782,2550,2218,1488,2066,1884,1306,4098,1277,5467,26912,2257,23101,12152,9814,2968,5552,3683,2461,3116,5303,3494,2615,2409,4663,8011,3794,13303,1881,2148,7301,3391,3757,6899,7454,2891,4216,2214,1358,4776,1575,3240,3601,3892,2131,4229,7457,3044,2327,1951,6407,2779,4233,5533,2364,2458,20117,1744,4242,1679,4507,6318,4276,3448,1963,4816,2693,2397,3953,5453,2201,3344,3514,8312,3388,2787,19538,1646,2069,2438,4740,4669,6928,6056,5688,9682,2501,5729,1189,8460,2267,1450,1203,3257,3508,2249,2174,5207,4380,1697,2676,2841,3357,3966,1774,7785,6035,2307,3699,2144,1494,4418,1222,4884,2218,3323,1078,2735,2856,6279,1821,4414,4341,1631,3037,2709,3941,3712,1504,12576,9167,3053,8386,1946,6969,3490,3351,6561,8625,6326,1612,1189,2047,2971,6307,3509,1975,9162,4957,2183,9482,1703,965,2612,2746,2831,1407,1735,6565,19982,3967,1968,2229,5608,6520,2979,2685,1805,3510,5766,2337,3374,6983,2838,1907,4973,5328,6106,1900,3551,2623,4322,3916,8113,32373,11323,1736,14482,1762,3118,5359,1143,7190,3123,7645,5834,1616,2685,2576,2501,3200,2402,4852,3524,3151,7666,2327,4360,4458,5627,2998,2147,4586,1186,2010,1250,2053,1909,1616,7835,2880,10261,1562,3344,2559,4042,1077,3395,2389,5902,2007,4510,2373,8388,1444,19041,10006,5628,6322,2536,4541,1017,1755,38080,1312,2333,3668,6476,3687,3963,2899,2950,3196,9692,1973,2028,9027,3893,5696,2766,7979,1526,2608,1840,7858,3240,1821,2870,3316,1492,1194,3850,6617,2717,3177,9571,1845,9263,2283,4530,21118,12114,3092,971,5451,7234,2627,6216,20579,2333,4231,10289,1833,1800,2168,2738,1423,3256,2424,2584,2745,5133,2676,4436,1864,2632,3155,9681,17257,3069,6472,4280,3079,9124,3181,4517
2 | 3_TGFBR2,1458,561,1032,1751,1538,725,500,812,765,1671,749,986,1270,537,1934,853,637,1841,663,209,2379,1061,1613,601,441,795,761,984,712,353,885,612,1034,173,702,1978,893,846,779,999,1208,139,1543,1440,920,1347,1598,1437,801,584,1143,1150,1445,794,1074,530,808,831,3067,875,3147,783,1628,753,279,363,815,990,2641,443,1616,775,590,1536,653,1312,278,902,885,1224,2857,1451,937,1462,1438,641,966,1068,1446,1334,1037,1334,622,993,430,805,809,1325,717,1016,951,1252,1604,1169,284,877,815,518,496,676,886,1058,928,805,510,1170,468,638,772,928,428,1076,1821,712,607,1318,689,1065,1053,1635,816,654,1589,1620,1618,384,1208,438,1040,1160,608,2069,4249,127,295,3081,1005,409,797,439,1772,1247,1626,1514,770,601,373,598,150,1067,961,1823,715,1483,886,1711,620,232,783,1464,1768,916,332,1148,1194,918,771,81,834,1690,823,576,1629,820,87,875,1967,1614,457,877,1219,1255,754,1412,965,480,548,557,670,1441,647,3696,1201,2041,1323,1376,542,686,1239,1201,1132,645,744,1231,907,1841,805,669,643,1177,858,837,828,752,864,580,1096,658,1176,324,781,506,1348,1616,560,1076,1679,2036,91,435,682,852,1445,178,860,1374,1202,1199,697,613,558,1061,755,5297,694,646,1332,642,1553,545,1031,389,1022,943,679,996,1666,748,2409,686,554,1706,1245,1268,227,531,475,1685,1071,380,1889,471,1100,2043,964,1746,616,373,1021,1036,1172,551,935,770,1360,1127,1124,1159,773,838,484,1386,888,1031,846,2282,743,928,2253,967,709,916,806,674,1649,910,1294,2195,1546,822,1217,616,883,690,1127,477,291,907,630,731,628,968,1062,411,193,1191,585,2162,1861,1064,1035,1566,1421,932,1256,554,347,1785,3402,2375,787,599,399,677,755,1215,705,1968,903,448,1205,854,547,2070,338,51,1056,443,2104,377,1373,1649,2454,2228,729,814,744,281,988,196,911,1869,877,1742,482,591,688,1529,867,418,812,1013,2171,1167,1038,148,223,1172,1041,625,1450,476,681,1104,830,906,1383,630,959,1161,1023,498,1045,817,440,526,1329,1356,337,2538,584,111,782,1508,1401,945,651,1644,862,362,648,1163,700,995,811,149,656,399,655,1145,1864,957,635,1023,605,361,627,397,963,2374,731,721,516,227,1387,340,845,575,778,1699,880,1514,685,1621,767,1110,2965,38,672,440,1565,961,448,859,1009,1572,1596,1309,1235,1143,1154,5763,1624,1017,974,904,1531,524,1404,1405,68,796,646,666,1049,702,1200,459,552,443,261,262,1449,1003,1825,975,521,2482,725,1197,371,546,1386,448,748,1217,668,1859,1370,1270,746,860,732,2300,875,1133,250,631,1155,569,357,710,610,479,2169,1546,595,1747,658,435,76,409,577,1404,855,967,468,1133,412,413,2178,699,844,143,705,368,1269,793,754,82,2779,231,961,1116,1502,1150,1677,727,1719,1461,1156,1146,1307,819,2281,1248,1861,1051,1431,304,1540,2141,670,801,807,1270,1180,207,1994,623,699,602,242,577,967,2400,517,927,1243,2291,684,704,1674,1485,641,58,1217,643,710,1199,929,2219,1405,360,688,1374,297,0,294,929,743,269,713,1313,2,764,686,899,778,385,743,1940,1105,298,516,270,1918,1423,887,960,652,846,452,666,1225,198,760,1427,1017,1005,324,2243,1037,1459,730,692,1000,660,1577,527,75,1450,804,1047,554,1317,464,597,993,931,2131,3243,962,975,787,1885,530,580,1829,1028,974,891,1301,3241,257,1246,151,879,845,1056,607,1366,918,343,1708,1142,449,737,1451,506,1894,736,465,782,1048,297,399,1023,700,751,1161,1060,333,1232,2303,1370,1911,181,1708,921,0,895,653,1991,1252,2897,376,3111,193,848,2690,1258,832,1134,757,1540,801,717,834,883,1076,676,1268,897,771,910,1443,794,875,1810,600,536,744,1201,692,522,153,797,1157,1717,1285,958,1590,1523,1066,769,682,846,1111,710,1101,1098,1639,692,1307,298,511,691,512,404,1036,1611,1096,1341,662,880,810,549,1769,749,941,294,555,663,2290,5378,1884,180,392,186,701,440,3202,348,696,434,991,244,1165,817,2196,2101,627,1154,1807,537,1530,613,1165,2097,1895,586,772,864,779,466,1239,210,1215,1382,677,302,228,561,665,1071,1169,974,1185,982,886,618,1699,457,973,41,1051,3279,966,900,742,1358,101,362,699,792,984,1183,1139,1088,1970,31,995,1113,621,1042,1221,800,1726,738,881,270,900,845,2201,127,413,675,3900,663,248,1178,1462,912,100,591,736,1029,1458,1513,1287,847,109,775,880,1028,836,1171,2039,887,748,896,1051,242,607,1208,1038,1202,217,1010,925,527,1027,633,714,1191,1239,1015,1510,1537,341,421,543,271,1484,1319,974,918,2694,841,494,655,1236,725,535,1813,1202,1323,1521,826,751,895,690,633,1285,701,632,1979,1401,829,2782,358,979,1753,1382,883,537,1247,2542,1226,243,903,1064,884,774,2521,1082,67,1565,776,3746,1768,1942,1689,972,1178,1161,776,699,1353,623,420,466,738,1512,1291,1125,3040,2677,4693,1300,2952,2440,1706,2580,2378,3852,8746,634,1970,3394,4418,4534,1625,3816,10630,2635,8337,4006,2775,3549,1886,2047,1919,1095,575,5322,959,1708,6846,1964,4825,1665,2456,108,2940,1250,4625,2594,2999,1123,20027,1728,2290,12232,1439,2743,3526,2544,6085,3708,5221,868,4805,6138,1761,2304,6026,3762,2268,1057,2323,3097,6790,1853,1012,2076,4011,1539,1615,2638,3169,12136,2295,2259,4076,5026,2532,973,2354,3179,1705,2519,1296,796,1444,2816,7907,3097,6530,3044,2409,1103,3098,5205,1790,1722,2748,1887,3519,6361,2113,1312,1486,1258,8705,7945,1749,2755,6281,4038,3978,1130,1807,2482,1943,2115,2999,6585,1637,3036,2015,762,4351,1423,6183,9940,2217,1482,4052,7472,4415,1588,2172,2625,922,1470,1727,1707,4815,4379,827,3351,1538,2667,5697,10882,1473,3122,536,2046,2221,2134,2647,2301,5654,1413,3595,2762,1875,1806,910,1801,2282,2512,1710,2541,17027,2679,1468,1168,1931,6096,861,3136,2507,2391,3672,1843,1548,1060,8387,4020,22426,1202,4524,3147,1758,6579,1707,2691,1131,3444,2062,11127,1594,636,1583,4171,2300,2827,2630,2467,1686,995,4399,2408,2183,2010,1841,8978,5191,1997,3254,2768,1957,7020,2912,1874,3058,10727,4037,1973,2284,1287,5004,7819,1845,7004,5553,533,2606,2076,3677,1594,4702,2105,2532,1894,2771,2480,859,2278,4434,2783,3450,5366,1962,1095,4129,877,4022,1112,1733,1926,1359,1261,2009,832,2669,1936,11278,1976,2602,1778,2827,1907,1177,3431,2317,8516,2767,2982,4224,3308,1554,1367,4589,8606,3808,1984,3584,1284,5142,2507,14407,2832,1347,2228,3399,3360,4487,1255,2120,1037,1463,1354,1924,3322,2181,911,1326,1437,1793,3626,1883,3006,4309,2843,3348,549,2657,5111,577,6448,2156,2318,1724,1601,17219,1264,1953,1520,2224,3392,5231,4758,1268,2207,4476,1863,2545,1521,6628,3466,772,2619,19450,1710,1372,2350,3223,2865,2794,1250,1517,1597,1040,1231,1946,2206,5136,9651,8952,1741,1889,1217,2187,2494,7576,2956,2597,3906,2093,548,1688,3381,1701,1726,2877,2455,2837,3194,1331,3491,1289,2432,2149,2782,2560,3036,2786,2333,1567,1334,5299,1427,6317,1494,4150,1904,11165,5598,1577,2942,3811,877,2887,1892,2435,2338,2211,3930,3380,1504,2928,1341,797,2374,7087,3005,3820,3441,1907,6785,1012,2029,1217,1003,3881,4403,2130,1131,2340,1655,1541,1976,7741,4456,1952,6078,2679,3417,1531,2754,1685,3602,2861,2662,1005,2500,1141,1457,4218,1013,1759,1519,3763,1687,1007,2440,4648,1727,2413,4776,3655,4404,1167,1260,935,15579,3147,3016,1870,3744,2355,1766,1915,3605,1945,2858,1848,1657,2459,3234,757,1835,4491,4124,1713,1110,2145,2602,1343,5552,11368,4554,1914,5032,6441,1600,2043,1169,3366,1292,3562,6481,3970,2083,3907,770,726,2038,3241,4693,4721,1093,1566,3467,7383,6403,3573,2456,2021,2643,3848,3113,1982,2432,3774,16427,2306,1231,4312,2199,12451,6119,622,1878,1335,3248,1304,1027,1647,1037,2534,3623,2693,5165,6954,2092,5505,1182,2404,3623,4446,1410,5015,3292,1997,998,5218,1109,3650,2834,12804,938,2725,2117,1580,2647,2023,3185,546,1544,1499,1264,3165,2197,4460,1671,1533,1455,2465,7223,4187,2687,1750,1950,6674,3384,2658,1997,1360,1277,1484,10057,8693,4297,1995,998,1941,3454,1402,905,3712,2077,1404,4618,2804,172,7120,1376,2365,990,3646,2611,2626,1891,4226,2154,2491,2339,2224,1423,2257,2498,5456,9743,2340,3616,1755,1107,1415,2703,1471,4279,4154,5324,2151,991,459,1712,3551,2796,3053,3904,3886,845,2312,2367,2538,1806,13002,2490,2701,3276,1556,2043,1804,3097,3180,1605,3515,2685,1867,2657,2876,3913,3554,4562,2223,1863,2233,4827,7089,1821,4351,746,1488,2126,4583,2526,1156,1749,2222,1579,1382,2828,1223,979,3331,1673,2891,1549,3973,1749,1095,11147,1366,883,5275,4896,2548,2250,2689,13660,2384,16568,3129,942,11016,3133,2500,1215,1058,4080,3180,4438,4620,2094,1360,1260,1630,17089,3844,1480,2539,1760,3205,3115,1563,2266,5059,4615,3981,2915,3380,4568,1927,1171,3055,2191,2568,2110,1415,5102,1753,1278,3343,1474,1436,1678,4193,4312,1496,1547,6710,4463,1943,5633,825,2975,1183,2515,6654,3921,7629,3424,2475,560,3522,2676,2263,1111,1530,2502,1143,3866,2914,4746,9945,5204,3640,3627,10870,9809,1632,1252,3573,2274,7886,1908,2346,6502,9412,1950,915,570,2075,3500,1816,3209,7486,3375,629,1899,1758,1293,14447,3527,4570,2328,2050,3568,2761,2507,1690,3047,3254,2466,1816,1171,3062,1556,2344,1236,1914,2680,2059,1093,6764,3160,1040,1947,2039,1722,1966,3913,3723,1840,4310,4138,1379,2989,3482,2218,4449,2048,1156,1958,4828,2142,1274,1306,1078,2544,2368,784,614,842,2062,2675,2329,1500,1267,3486,8609,1800,11584,8931,3710,4694,2268,792,1535,2911,3575,3083,2205,1615,4032,5147,5603,3328,1668,3395,2013,1884,4028,4405,12922,2887,2615,2795,2935,3015,2068,2268,2603,3309,1349,2109,4036,1531,2929,2752,3997,3306,3765,4170,3425,2007,8135,3228,2500,1568,4729,5584,2658,2575,802,2372,1946,1297,1992,5627,1275,1980,1732,2390,2020,3657,10235,1441,707,1858,3914,7835,3027,7083,7947,3935,1680,2020,1863,2940,1394,1553,1244,4513,6450,1980,2401,4228,4897,1247,966,3080,2077,4166,1604,5646,9686,1130,4177,2316,1934,4199,5391,4675,3889,1992,1873,1192,1309,6129,2821,4587,1776,2471,2292,4186,2125,1675,873,7389,3299,2225,6866,2894,7746,1041,2428,3282,3337,3231,1938,1804,1160,1512,5005,2439,800,4542,2224,667,9744,1857,876,2730,1181,3029,777,2341,5110,6041,3220,1565,1036,2850,2322,2390,1289,1039,2888,4176,1981,1220,2859,2639,2126,3963,2973,3748,2031,1763,3372,2023,3317,3985,17107,7232,3386,10264,1840,2316,6578,2332,3117,2511,2927,4727,2246,3608,3417,2056,5250,1756,4745,2146,958,8820,966,3190,3292,2750,958,2932,4402,3834,1034,1593,2221,1731,1531,3987,3182,6578,1518,4962,1416,4251,834,2400,2067,1245,686,4639,2282,6633,1759,17964,4939,3603,1943,3229,2599,1467,1528,22547,907,973,2735,3040,2799,4076,2470,1569,3437,8987,1365,1632,8615,3185,3773,1498,8514,4615,5323,2031,3679,2964,2070,3233,1311,1775,2462,1668,3074,825,2177,3513,1717,10993,1355,2435,18661,5222,3344,2698,4291,3340,1418,5399,9207,3390,5735,6423,1674,1933,2000,1659,1224,1801,2580,2036,2878,2849,1285,3090,2696,1283,1686,3335,27728,1367,3782,5389,3321,4658,4065,5140
3 | 8_FGFR1,490,207,1085,406,143,382,28,532,291,792,186,809,851,261,755,244,401,654,181,435,1133,837,641,392,337,272,279,248,164,318,195,547,499,430,191,844,579,446,318,275,624,154,852,671,308,423,547,992,512,106,301,8,783,338,381,125,525,187,1866,51,1008,631,296,286,145,318,252,518,274,128,302,384,722,338,563,512,293,480,191,621,993,837,385,977,485,325,248,515,819,632,130,543,224,156,485,611,215,1052,306,196,304,835,595,200,239,417,142,129,473,424,475,533,606,139,166,274,164,542,650,473,172,605,546,387,250,265,273,431,851,1080,243,165,378,1096,394,144,262,145,113,411,305,1538,1811,76,82,992,123,364,137,202,848,49,146,367,226,177,645,363,116,291,263,219,208,650,0,816,301,67,687,436,544,310,133,695,507,273,188,354,333,456,214,729,105,347,143,550,534,539,265,308,728,602,233,463,238,396,223,310,350,667,670,1458,744,909,1838,415,156,172,460,286,422,96,223,349,510,379,935,58,292,354,200,144,573,202,420,247,620,11,355,196,315,218,241,268,144,636,559,193,222,373,277,507,406,87,284,594,402,634,376,146,220,483,240,80,272,227,435,572,527,340,610,254,421,284,415,473,670,319,774,276,169,415,173,290,316,200,409,544,483,126,797,239,497,796,452,455,345,259,275,323,932,427,552,407,378,315,684,624,421,460,150,300,471,750,355,1130,258,384,1094,453,472,313,77,48,892,275,683,1271,578,68,388,485,510,323,236,160,224,301,425,124,424,498,412,519,82,388,464,755,608,494,579,477,887,580,233,304,227,328,1344,1594,384,326,194,263,124,229,157,531,273,80,907,177,103,486,286,199,581,270,1629,556,275,884,525,246,537,490,102,161,416,388,96,393,453,977,468,317,288,421,285,84,428,256,775,275,39,174,341,329,317,266,301,454,601,389,396,15,267,87,489,224,263,335,655,401,154,348,414,276,272,993,323,332,145,565,650,289,80,371,400,156,348,83,57,253,654,245,104,366,13,1197,364,301,303,593,181,135,334,114,192,111,337,722,189,881,462,351,326,239,310,923,226,875,437,911,152,208,1698,354,752,335,519,375,75,150,208,824,363,451,782,122,322,1602,247,623,702,561,667,168,429,881,143,851,289,117,188,332,603,155,624,296,15,265,788,172,643,565,275,566,611,466,203,153,1148,58,185,834,616,664,103,384,212,389,399,959,66,287,197,827,320,328,229,383,435,137,1353,325,239,651,421,237,84,111,194,751,605,368,449,240,59,274,817,525,290,121,374,141,550,482,232,260,812,159,417,693,488,480,123,613,700,746,940,398,1168,327,393,236,780,434,940,250,870,119,355,94,337,630,134,146,428,317,277,310,449,416,366,2014,310,66,690,653,568,445,636,254,456,75,299,274,360,379,227,956,680,148,269,408,255,455,235,210,353,240,353,556,440,476,742,360,369,251,281,1282,475,197,407,455,930,179,299,772,164,148,254,34,658,222,464,303,279,313,146,982,492,381,197,248,205,111,602,179,176,341,254,463,164,94,210,431,236,387,443,1366,523,589,129,946,530,95,687,829,105,234,364,1422,135,462,345,419,389,233,468,493,444,90,827,637,93,419,170,472,218,253,177,508,259,136,148,245,133,356,321,889,461,921,506,393,1408,124,226,520,749,46,951,815,166,1311,279,1470,213,181,998,226,146,435,219,984,99,219,373,102,84,201,478,421,137,624,252,531,343,493,145,793,220,169,354,368,122,92,138,391,558,284,725,692,405,407,392,194,183,234,702,372,321,416,299,454,155,112,345,322,310,1043,388,280,142,358,368,341,523,80,209,112,137,386,814,1612,482,267,507,353,314,126,1255,141,522,348,306,98,225,582,764,922,338,246,257,322,781,121,753,1374,1012,171,279,903,455,233,193,622,552,680,227,302,61,100,346,372,720,359,321,532,331,330,759,519,104,199,104,1311,309,441,228,655,102,213,602,370,398,474,483,201,161,141,396,538,194,277,170,97,531,165,255,172,470,841,791,94,359,456,847,142,175,167,484,657,110,136,460,440,922,482,329,330,358,548,193,354,374,152,98,299,10,357,65,247,423,575,390,461,232,1027,427,202,542,189,310,129,854,535,440,192,79,253,161,66,328,476,463,424,995,315,200,311,670,414,150,366,536,683,399,527,205,390,228,354,291,143,102,1500,374,218,1577,189,673,367,777,514,149,404,672,255,368,811,593,196,333,857,403,450,298,487,1728,362,965,955,554,432,500,640,249,771,157,449,688,255,503,69,622,270,205,1862,726,2442,633,763,209,382,96,2080,54,550,2646,1185,2999,552,946,4669,1122,1794,2224,852,864,873,1362,171,760,1150,2384,397,835,1485,447,1438,401,422,1137,1463,962,2389,623,977,768,3596,899,291,2569,408,410,382,356,2066,364,643,316,1514,3412,1436,355,996,1240,444,181,249,400,1481,401,309,494,1012,171,812,1062,596,6260,220,2977,1243,3434,635,516,761,584,991,498,216,78,368,1043,670,224,2310,272,569,369,564,2711,449,1224,559,256,884,1410,302,284,484,216,1619,2665,149,541,1315,1106,1098,519,461,2515,1402,297,2451,1303,735,936,1260,569,1204,295,204,1566,1411,431,253,3277,1593,1146,117,2167,128,392,1059,525,2673,2003,900,458,130,367,2332,3018,242,1641,471,473,507,513,1591,742,772,452,846,1258,398,561,335,429,1157,797,328,1042,3155,2251,226,982,886,2157,602,2589,840,624,816,482,1027,658,2066,370,4655,264,177,968,2034,1094,1162,1435,220,1979,1217,646,692,192,482,1449,447,1109,1258,461,554,594,1193,1461,1181,870,1503,4907,934,1334,1976,1413,384,1865,1762,456,184,6075,1487,540,1142,862,1949,1942,665,1320,2357,822,1349,658,1098,138,1846,0,972,570,568,1109,756,275,1591,147,1954,1322,741,341,4534,786,801,1003,1175,244,52,693,1921,365,456,349,3881,908,1700,344,2761,513,785,829,1061,5257,1063,965,1026,468,917,205,1533,1715,2352,697,603,207,3488,1017,7099,474,405,983,1245,595,1601,226,525,374,1275,91,329,55,127,214,349,125,343,808,541,307,1060,1436,1155,133,0,1913,541,2171,201,1810,128,545,4660,200,538,760,945,652,312,1030,169,3,3245,1429,483,209,1750,866,175,907,2977,951,685,705,503,1034,1211,549,1320,1026,91,136,1343,816,2097,2598,3536,297,906,493,358,297,2461,166,631,1798,454,683,145,709,250,198,389,768,1903,1657,51,764,474,831,652,451,435,726,744,806,188,577,521,164,1033,376,2382,974,3903,2774,81,472,1275,156,819,540,1249,293,151,911,1221,1085,381,124,267,550,2691,1088,412,1730,806,1560,685,1555,514,585,2482,700,368,551,811,605,227,1003,3468,1925,492,2132,375,1233,781,906,512,1192,787,709,234,853,669,1661,1253,432,105,184,1208,450,880,2112,1391,112,1200,3623,878,1163,122,687,656,4637,2869,1900,182,852,596,141,454,558,475,1193,1587,733,754,724,375,48,2158,253,375,176,125,188,617,1640,5126,2544,1801,1783,514,945,667,294,970,312,381,2548,980,327,860,461,285,1327,1463,1288,879,434,545,1267,1901,1115,2003,469,178,536,861,1450,1037,732,1032,2059,1032,2816,991,146,4440,1063,469,662,1308,1114,401,327,325,598,939,868,1165,1122,1027,491,3207,633,290,1162,1184,918,541,1116,957,283,1831,399,384,1019,1868,364,843,744,625,427,586,442,221,399,809,984,1267,987,1542,1464,427,361,559,2569,555,859,471,487,1350,547,682,233,198,334,342,1973,3209,942,1339,254,471,858,756,188,262,1342,458,1492,657,416,3043,212,1253,580,337,906,1042,347,762,244,557,1056,817,744,874,95,2122,1904,123,1533,832,303,1186,1109,543,1667,1179,3131,589,735,565,503,1032,480,1576,3227,1571,100,884,885,471,356,1221,261,260,714,324,633,931,718,1819,712,1548,1827,407,455,1164,1933,1395,1141,838,528,833,2684,3601,1139,2493,236,316,249,1356,417,125,900,2414,302,542,1330,449,244,465,179,236,1488,1290,119,933,1402,491,454,1072,1216,1375,1022,894,3133,1146,2763,233,776,2589,1600,431,484,298,1766,718,824,1578,352,275,366,581,7328,612,529,1293,216,796,1978,280,416,951,676,824,909,523,1950,96,186,494,133,1161,815,272,1645,809,512,371,355,147,87,1659,1436,192,283,1192,1467,719,1636,802,1218,574,1198,1866,2310,1691,1829,689,210,1743,666,1843,50,345,1532,158,730,948,536,3205,1190,456,1196,3867,2577,949,1425,773,122,2964,486,225,1477,3181,1086,72,729,349,1704,1618,1778,1961,1565,199,145,776,280,1975,1161,1348,411,436,433,361,975,394,398,1061,1506,675,649,2148,901,467,617,755,1629,1927,135,2025,555,115,338,1028,344,1197,1546,1088,319,3091,2458,478,957,1574,1267,1098,1467,548,209,916,293,1377,722,224,1298,191,330,352,343,982,763,497,1440,215,835,1061,345,5377,1811,1202,1947,1746,1256,372,694,797,802,816,80,1524,1922,2018,875,257,1021,1693,517,1330,371,1946,1341,831,457,701,350,866,516,1225,2083,273,715,560,1663,1120,275,1519,741,687,1987,293,1064,3017,1177,1035,460,3056,1914,626,1373,395,772,581,233,468,1988,303,982,64,1430,892,1309,2052,285,291,883,1453,2705,182,2045,1333,392,675,474,888,1814,133,86,1045,2561,903,349,671,1953,2214,475,195,862,606,1498,1046,1367,1074,218,439,540,972,467,1602,1411,832,659,581,235,204,2125,716,1528,669,892,1241,907,937,399,1073,2135,1198,1046,1790,583,1333,590,874,824,1759,1998,594,325,597,1237,1181,704,194,1742,879,589,1526,790,76,699,613,1030,264,404,720,2195,257,595,648,123,772,1412,69,472,921,684,591,1056,1319,1171,696,2017,170,538,716,741,623,205,2082,1257,3263,1690,894,1800,476,736,1878,663,1119,422,2502,1604,669,1172,1181,535,2141,590,1038,583,413,3384,429,357,1304,1728,413,1149,582,1257,289,413,125,230,1562,309,609,1034,1116,796,387,958,313,703,1116,730,649,739,280,1087,1281,4151,708,1454,820,222,1166,289,376,2152,1738,373,507,509,587,854,800,246,1325,3256,216,835,1600,1852,2879,919,1897,97,1230,1273,1339,443,572,470,659,933,1076,746,718,1372,491,2289,266,2397,694,356,3834,1161,2261,476,1128,408,372,1745,3920,638,933,2100,177,568,429,574,691,220,667,377,1398,971,17,827,427,616,125,487,8801,289,853,2373,706,243,884,668
4 | 10_MGMT,22,71,311,373,27,170,69,96,10,124,36,289,37,68,136,9,86,144,20,172,431,126,165,121,5,218,22,58,51,144,166,45,96,3,23,118,161,191,112,93,116,1,65,63,54,70,294,101,14,48,185,55,197,23,167,17,123,22,891,289,219,71,67,101,23,86,46,149,136,85,115,39,165,43,94,167,120,501,117,114,366,317,112,79,68,30,86,23,220,179,2,133,93,1,124,120,116,102,136,45,110,92,69,40,339,254,212,31,24,166,77,136,43,28,78,386,74,63,21,67,110,170,154,176,10,423,225,148,249,71,104,26,24,73,187,50,103,60,123,25,72,102,539,217,89,429,186,21,90,255,95,49,145,517,32,208,65,104,77,94,39,30,150,135,298,277,216,168,107,161,168,17,70,58,130,49,48,59,25,255,31,154,7,60,233,42,98,6,30,81,350,36,221,103,51,72,5,21,43,157,229,723,71,334,371,86,128,44,284,108,23,173,151,47,91,146,180,125,10,47,42,103,57,57,201,309,152,40,52,148,12,138,107,107,78,87,342,0,98,256,77,45,578,25,125,84,18,216,94,35,66,41,79,284,147,125,279,100,199,16,236,64,7,60,135,91,497,24,186,104,54,223,56,95,45,99,78,66,126,52,237,68,75,30,73,65,27,37,34,25,165,96,190,70,309,178,156,142,71,120,72,36,379,290,18,250,71,91,127,104,25,85,160,17,147,24,132,146,112,12,158,189,73,90,21,117,76,161,43,26,74,33,183,556,69,240,129,65,34,63,48,338,259,241,109,94,33,43,427,88,18,56,139,32,96,140,90,100,81,15,184,161,88,90,91,44,123,236,166,14,200,131,143,451,66,45,107,11,263,318,41,14,82,19,143,115,107,219,77,31,59,171,146,45,220,97,65,112,163,70,139,122,56,33,64,40,67,95,76,76,86,37,240,81,265,95,4,114,75,233,132,63,57,183,39,124,63,177,30,27,61,36,110,176,14,74,124,47,43,49,88,119,139,79,74,55,29,32,33,250,117,158,307,495,184,200,200,101,473,224,109,437,79,143,30,135,490,108,257,358,260,95,137,90,53,109,68,162,234,11,61,899,36,53,85,101,95,63,170,70,138,79,92,44,60,54,313,75,179,50,246,267,166,83,81,351,18,87,79,51,37,86,199,72,15,83,201,190,99,81,265,48,134,190,717,84,167,118,27,76,119,23,64,87,103,122,68,223,340,65,120,75,43,175,10,86,61,157,213,56,158,159,22,199,53,92,108,50,626,135,294,74,60,126,120,104,18,148,287,103,91,145,108,154,365,165,227,45,83,73,250,49,148,310,35,136,425,36,249,53,117,64,106,44,123,309,78,97,310,312,164,71,189,109,29,53,136,92,132,169,50,125,181,23,118,19,164,263,83,71,99,247,122,45,100,205,499,12,66,97,55,76,75,79,110,68,392,49,104,174,67,231,169,20,28,39,83,52,142,153,290,198,52,258,88,12,24,112,501,83,54,104,121,201,108,79,23,134,16,209,293,686,182,162,15,401,57,38,205,215,93,265,100,828,199,263,392,56,95,83,139,155,208,57,54,39,52,142,102,4,479,47,139,54,157,298,127,55,23,58,117,155,73,140,234,0,562,231,11,46,109,91,187,282,145,613,59,230,202,8,53,75,153,210,173,140,66,34,93,38,76,123,160,107,97,200,26,40,84,92,38,165,93,264,150,158,63,79,54,211,184,35,140,219,210,162,290,144,151,124,16,65,217,38,288,202,146,12,39,116,158,369,0,107,44,13,274,39,338,107,72,53,201,175,118,685,181,189,198,59,23,50,15,74,75,77,80,26,133,95,88,0,55,181,105,91,35,15,245,266,250,68,24,156,56,26,88,133,118,325,107,209,192,26,25,50,4,24,458,67,83,81,141,68,204,39,4,153,156,67,15,133,68,238,70,16,18,594,3,78,165,41,55,212,73,120,184,74,87,89,2,118,41,123,67,165,43,261,1,10,157,17,356,4,93,69,120,94,404,177,41,123,103,115,31,55,264,112,157,91,2,30,19,26,150,138,197,72,85,24,94,9,49,71,0,23,172,34,57,22,196,33,83,101,367,102,46,137,136,195,34,170,85,184,92,123,22,122,66,358,68,166,33,20,42,33,41,92,379,71,75,90,106,68,334,102,29,176,141,96,97,89,1,3,104,476,71,27,76,75,380,208,191,176,33,140,52,11,247,54,65,156,67,79,132,104,50,184,173,21,29,0,192,304,27,85,97,314,99,187,1057,643,746,7,257,1606,219,626,909,167,173,143,271,100,2,50,359,642,87,605,129,336,46,37,9,242,214,252,40,227,15,1812,144,270,1719,121,13,235,180,9,42,706,48,138,469,64,32,56,705,141,12,48,95,46,204,77,469,259,97,100,39,108,484,433,349,148,40,0,194,67,337,329,106,32,22,191,33,500,53,322,0,201,68,34,92,285,50,25,56,63,1892,0,94,2,41,268,598,126,232,182,169,608,207,90,271,41,327,80,158,124,3,101,177,173,14,1556,653,529,50,524,1356,300,184,180,893,317,14,137,209,218,1083,25,559,182,176,137,1594,68,222,0,125,199,189,352,251,213,42,1112,214,207,25,95,341,7,171,231,703,1265,216,206,62,61,0,222,422,443,459,85,886,136,27,259,617,2192,3,211,167,224,625,304,388,111,170,17,489,17,139,103,449,38,110,1120,152,34,35,1291,198,231,48,171,833,1011,203,55,158,604,364,252,129,478,1040,231,5,307,39,969,374,77,145,140,0,188,235,175,32,140,6,265,3,29,170,125,1,325,256,655,79,32,52,388,0,182,205,32,730,332,5,407,145,280,63,1058,10,204,247,166,273,99,681,127,505,187,292,204,86,114,28,242,372,527,72,267,123,126,312,812,83,9,46,69,222,297,13,387,40,349,80,258,89,244,75,49,290,54,0,282,237,279,349,50,316,104,1125,148,98,229,149,617,53,1218,30,105,190,64,97,253,788,23,13,311,35,5,11,165,413,106,371,3067,9,18,326,128,225,310,109,61,123,175,30,272,163,524,943,979,92,330,52,155,15,832,73,348,246,110,51,97,88,46,215,161,56,140,589,34,98,314,189,74,31,470,250,17,198,0,216,192,72,114,12,398,273,638,866,20,228,47,199,136,265,152,169,80,27,209,113,100,45,9,116,104,179,674,37,37,667,59,381,54,40,373,314,68,64,173,53,118,133,1248,397,79,440,120,133,131,442,8,1032,264,29,45,111,141,847,254,0,421,128,250,273,168,364,474,181,143,426,1101,65,229,85,180,1361,164,506,197,631,232,116,271,45,58,240,127,27,10,62,44,241,469,239,202,32,52,562,34,391,603,161,16,42,587,450,0,30,447,52,180,256,442,10,49,68,69,93,0,75,856,29,53,130,324,235,161,166,296,33,344,254,243,370,124,1742,114,246,38,211,269,220,229,117,485,69,120,38,134,21,354,66,366,372,511,256,364,55,45,222,351,38,372,248,510,74,226,20,130,351,497,0,120,199,12,68,25,606,5,230,10,19,275,202,770,374,29,52,245,680,853,5,51,433,137,142,190,53,166,33,85,444,433,154,294,286,134,539,340,48,41,289,37,354,13,0,543,28,30,37,554,89,277,331,104,3,147,214,227,19,297,201,200,494,101,735,34,397,12,83,314,1094,563,204,22,61,102,72,352,208,256,398,747,12,107,117,73,245,402,105,145,50,168,483,256,9,196,74,181,384,104,63,197,306,343,218,334,135,70,214,1639,156,239,0,153,538,75,250,100,268,32,137,149,600,201,148,133,438,165,76,107,219,15,889,25,117,802,83,29,96,326,872,185,618,52,74,1382,208,11,34,20,270,182,295,132,80,230,121,62,2227,590,41,184,29,0,404,24,186,79,647,244,308,339,737,28,100,206,349,97,185,376,290,135,67,455,174,281,45,91,171,209,209,1452,797,92,564,90,126,83,589,189,30,2103,429,179,122,0,142,151,41,27,131,45,543,1026,282,894,405,364,51,632,958,67,873,6,716,916,24,466,218,170,551,56,70,46,566,331,170,1234,112,204,31,15,30,1551,543,129,695,17,565,43,36,59,507,407,4,83,133,3,51,23,90,98,576,232,45,0,64,19,164,119,329,45,221,365,26,1230,504,14,680,545,266,129,80,113,40,1085,45,237,14,18,166,79,136,0,177,71,167,416,254,42,13,61,122,320,290,16,367,467,12,9,95,264,169,593,7,70,426,236,367,48,25,623,166,187,278,547,227,228,155,72,204,79,412,520,252,196,169,592,304,161,191,40,119,408,673,381,103,47,260,173,188,87,163,280,12,10,269,238,25,36,21,272,9,154,110,174,436,535,203,70,64,557,104,605,539,168,41,125,24,9,603,47,25,89,471,243,84,194,542,592,27,211,644,0,329,73,562,807,40,821,301,47,57,183,1037,89,29,288,141,27,323,157,612,140,91,52,638,3,301,458,1122,212,50,315,61,160,384,486,135,39,134,435,69,3,120,235,433,40,20,162,8,469,382,66,36,28,213,527,66,1045,1016,231,135,167,120,187,427,567,71,37,76,410,289,441,0,401,354,798,94,54,161,52,315,170,49,938,156,266,561,34,104,580,364,366,237,650,160,89,106,345,150,775,176,374,105,135,144,0,361,207,99,214,251,731,410,253,38,123,235,10,141,133,233,358,1128,78,54,109,875,110,331,0,62,134,415,66,1464,1231,283,389,669,550,80,136,1905,157,18,257,143,418,309,125,20,430,1340,133,84,1033,180,131,152,574,1024,186,271,65,4,369,29,149,215,201,135,530,82,383,678,184,589,116,15,1475,863,120,88,351,331,85,298,1923,247,290,160,432,132,209,96,0,83,425,85,187,1,316,150,233,3,308,227,1730,0,7,519,7,448,42,275
5 | 1_SPTA1,36,7,80,215,90,24,138,5,16,82,60,81,26,52,35,14,13,12,0,81,129,41,4,135,1,192,32,11,34,8,32,10,192,104,20,29,64,17,79,28,122,84,18,18,18,39,38,123,40,33,43,64,91,5,0,30,1,25,32,51,69,58,14,5,21,3,104,0,246,10,55,17,85,74,0,6,26,346,36,2,45,138,57,48,17,80,47,25,105,4,53,100,165,61,46,163,193,18,61,28,61,43,80,94,88,9,20,54,132,50,18,42,34,127,11,79,4,11,22,26,14,29,63,52,0,4,75,13,141,41,11,106,59,85,70,18,0,62,39,3,81,55,131,98,24,170,129,13,56,119,123,112,118,157,0,36,53,52,102,61,38,61,0,69,20,95,77,104,59,50,75,12,30,61,31,5,0,39,64,19,9,26,179,49,89,87,82,0,55,39,64,23,38,7,29,25,8,39,69,25,45,131,8,119,46,4,3,87,122,90,14,24,28,37,12,59,23,64,22,26,28,54,62,90,125,56,39,28,41,13,47,10,55,10,28,48,152,50,97,31,33,25,48,78,66,23,10,16,168,6,69,9,71,323,3,17,11,11,28,45,13,30,7,23,8,11,40,33,240,56,26,121,51,23,24,22,4,61,5,41,89,47,7,36,38,52,6,30,2,52,72,31,35,111,99,27,24,20,19,28,16,55,45,10,6,81,27,10,65,10,35,13,23,25,15,6,14,134,12,13,179,24,33,79,1,2,19,54,31,84,52,30,15,118,82,79,25,55,65,74,50,56,151,113,86,66,44,173,108,56,48,80,94,55,5,118,25,44,3,28,82,25,82,27,22,67,82,85,62,34,125,34,98,85,26,4,52,15,56,223,80,2,80,86,73,36,23,23,80,28,19,37,57,41,7,60,75,104,11,6,160,77,30,39,70,69,53,22,41,36,103,5,27,1,88,41,56,81,20,151,82,31,20,38,30,36,38,51,3,27,45,27,14,57,4,63,13,6,68,21,61,20,18,24,16,88,53,52,13,59,0,1,185,156,73,146,87,33,111,81,76,222,105,75,91,133,283,95,44,150,29,12,19,141,44,82,48,212,16,37,42,176,74,102,5,31,56,25,30,90,32,27,11,64,84,0,118,31,18,9,206,64,49,14,110,13,33,33,69,45,54,27,21,73,31,40,2,103,21,16,84,41,53,115,43,17,48,17,19,29,101,3,6,51,192,18,41,142,70,39,17,25,16,1,46,16,40,38,11,29,67,186,1,35,29,98,60,8,135,67,53,26,71,47,37,25,36,54,43,171,63,13,14,18,113,108,86,39,35,12,85,125,54,33,86,62,64,9,54,48,8,34,50,4,29,12,5,8,4,110,189,34,176,16,56,23,0,90,46,23,52,31,92,4,11,45,73,64,62,55,18,121,0,50,72,60,173,71,17,20,20,111,67,16,231,8,179,38,33,83,26,41,71,71,6,37,0,5,44,64,82,19,10,31,21,46,35,38,138,17,52,50,43,82,47,8,59,22,57,45,70,84,35,0,42,150,16,169,34,18,24,110,24,154,3,57,62,48,57,59,33,45,31,41,72,20,30,37,82,5,121,21,6,26,80,30,63,12,71,13,56,49,23,73,104,46,71,84,184,42,19,63,19,119,54,119,36,116,115,35,30,32,100,50,79,91,8,33,31,82,54,45,37,75,52,106,59,7,2,5,66,20,32,62,60,103,39,15,24,61,33,23,122,37,64,10,6,14,77,34,26,22,17,28,24,80,6,10,6,38,18,23,16,118,142,8,18,19,177,26,42,14,57,28,149,130,51,21,81,123,28,18,180,50,135,63,44,28,86,5,94,32,91,40,61,66,23,47,55,87,49,17,14,83,20,62,31,19,91,124,40,55,76,62,17,15,95,24,189,73,23,39,47,46,49,27,28,21,113,5,32,35,45,96,12,21,11,54,11,23,175,74,16,22,21,1,36,100,72,22,16,66,45,115,22,104,130,92,350,45,23,28,86,1,6,51,21,45,165,36,40,40,42,29,48,18,28,8,332,144,10,223,8,49,10,7,9,45,56,45,77,6,6,37,94,42,134,43,20,42,21,15,20,108,75,109,13,254,50,49,47,52,20,9,11,74,96,115,10,41,174,105,109,17,91,4,7,217,123,34,44,32,13,96,70,99,45,39,412,15,245,80,23,39,19,57,112,45,40,24,165,46,96,105,10,37,38,36,51,80,0,100,79,67,49,68,45,48,221,44,6,184,184,20,35,81,214,7,81,197,480,40,32,184,153,550,67,28,189,74,139,4,87,185,18,135,499,160,94,58,32,139,73,283,15,80,235,73,94,17,5,881,165,71,43,232,166,189,95,83,50,170,123,44,473,185,110,191,9,180,127,100,292,107,184,111,137,43,107,220,33,50,242,169,373,87,20,70,163,23,66,313,138,110,64,21,56,374,22,197,132,76,124,135,77,92,215,199,135,173,2,89,448,7,148,268,440,178,45,267,301,358,48,10,164,31,279,276,186,173,39,24,6,142,111,815,200,402,194,43,288,38,92,143,139,20,41,42,200,83,189,77,174,34,169,209,415,271,310,37,119,599,17,35,122,248,67,119,376,90,107,106,42,266,29,47,64,388,239,162,56,206,77,141,376,12,8,173,83,574,83,294,527,1932,16,227,46,663,90,38,226,70,17,498,347,32,90,147,163,761,11,256,121,89,206,256,115,345,149,102,162,94,123,76,86,223,26,515,139,201,521,58,130,206,86,351,114,323,64,100,248,80,126,82,52,142,331,42,77,96,140,85,36,165,589,116,182,41,110,75,150,432,156,212,400,59,137,134,30,295,114,448,386,21,252,46,79,38,214,176,193,135,27,169,121,13,91,1031,185,289,167,30,15,339,283,272,120,161,6,321,42,16,31,202,140,119,42,213,233,116,94,282,237,83,7,100,177,154,33,40,78,377,214,108,147,3,156,278,98,576,130,234,25,61,138,19,135,98,273,85,301,107,202,88,128,73,45,726,102,13,406,158,302,137,212,38,161,37,156,29,45,166,253,485,156,208,264,87,179,3,85,19,35,465,164,57,60,170,51,662,47,117,105,69,124,169,144,28,106,53,44,164,150,88,163,46,80,136,75,226,165,472,182,105,27,20,244,138,135,214,241,72,150,247,112,63,50,76,41,133,184,152,218,155,184,64,0,97,31,120,4,9,100,337,79,112,162,142,299,10,41,262,303,104,140,132,98,72,37,111,14,123,654,154,56,133,23,177,73,184,91,38,77,242,252,234,8,154,115,172,394,222,316,188,53,271,171,70,45,75,83,351,23,195,332,42,224,53,255,137,21,116,141,128,99,242,217,194,327,349,399,239,212,337,25,107,61,143,55,138,46,70,219,81,45,251,265,94,81,243,241,282,105,56,169,419,5,304,54,326,586,17,199,112,36,225,100,54,56,42,40,436,92,232,81,156,493,72,406,536,428,713,75,341,61,80,108,124,282,141,103,27,63,287,192,1124,50,14,36,282,26,10,279,59,39,134,31,113,252,186,218,100,198,159,187,107,42,65,98,23,156,81,217,211,45,69,56,205,307,131,95,79,615,68,227,98,172,36,194,35,103,312,160,83,87,377,119,82,297,133,191,99,113,125,114,91,159,535,842,176,562,61,216,105,102,299,96,384,117,47,201,89,108,219,124,324,32,256,57,31,89,56,666,287,96,0,45,123,340,148,42,381,56,111,140,19,300,132,166,659,114,24,53,192,286,261,41,227,74,258,71,324,13,87,14,444,56,183,70,35,240,393,20,55,51,45,128,209,55,114,304,118,140,99,50,103,505,66,319,51,31,574,26,182,27,108,640,26,177,236,247,77,81,99,170,152,214,34,117,277,109,110,7,57,62,95,40,33,347,95,50,19,332,334,52,49,361,124,35,197,192,64,135,168,120,77,119,270,345,84,124,95,67,39,509,191,306,63,247,45,67,168,43,20,142,71,62,405,261,201,253,179,390,150,639,595,131,61,70,255,76,388,35,166,158,501,161,105,88,135,118,158,298,123,21,159,81,232,168,560,101,51,200,27,5,143,415,197,477,31,282,26,26,310,58,85,248,20,140,58,85,441,34,48,79,344,92,14,73,188,147,326,146,84,212,126,74,134,12,67,43,78,85,119,322,71,77,87,60,90,51,1,46,146,303,174,18,1387,86,902,122,508,62,255,56,68,35,619,18,63,81,518,221,492,427,189,44,386,59,72,143,252,211,48,67,39,58,121,180,148,166,267,127,120,264,150,301,146,62,240,36,13,41,409,10,260,41,58,259,300,185,75,279,25,172,211,73,50,281,108,134,39,93,111,91,86,177,110,305,306,198,124,1131,233,457,72,445,26,40,44,45,211,185,288,563,264,4,217,66,22,109,127,45,159,174,325,24,25,97,162,167,62,208,27,109,48,156,83,458,90,149,226,183,95,110,75,723,234,207,213,227,321,34,190,445,573,263,87,20,22,151,95,227,45,278,100,96,237,18,107,122,55,83,184,52,273,422,337,33,77,204,29,120,110,38,262,348,9,101,207,46,15,58,315,260,130,221,43,91,62,122,1825,880,11,1509,161,247,342,104,228,76,195,11,0,21,64,9,56,77,121,190,12,303,12,348,188,212,30,80,370,138,108,74,202,155,61,116,262,304,137,112,136,144,97,227,42,215,109,158,262,145,206,269,493,474,149,325,136,40,432,288,46,297,172,244,42,112,185,37,38,486,26,250,270,120,21,156,271,0,98,71,400,20,33,58,146,9,57,16,90,13,125,262,59,255,102,133,251,436,194,223,365,169,171,717,797,202,176,371,164,56,62,28,83,174,416,143,143,368,60,74,88,77,75,281,781,109,655,146,85,615,84,180
6 |
--------------------------------------------------------------------------------
/data/PDAC/input/snp_list.txt:
--------------------------------------------------------------------------------
1 | chr10:131506192:C/T
2 | chr10:131506283:C/T
3 | chr1:158612236:A/G
4 |
--------------------------------------------------------------------------------
/data/PDAC/input/sphyr_mutation_names.txt:
--------------------------------------------------------------------------------
1 | BRCA2
2 | TGFBR2_1
3 | TGFBR2_2
4 | FGFR1
5 | MGMT_1
6 | MGMT_2
7 | SPTA1
8 |
--------------------------------------------------------------------------------
/data/sample/overview_B.csv:
--------------------------------------------------------------------------------
1 | ,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24
2 | s0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
3 | s1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
4 | s2,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0
5 | s3,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
6 | s4,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
7 | s5,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
8 | s6,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1
9 | s7,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0
10 | s8,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1
11 | s9,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
12 | s10,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0
13 | s11,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
14 | s12,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0
15 | s13,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
16 | s14,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
17 | s15,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0
18 | s16,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0
19 | s17,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0
20 | s18,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0
21 | s19,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1
22 | s20,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0
23 | s21,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0
24 | s22,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0
25 | s23,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,2,0,0,0,0
26 | s24,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0
27 |
--------------------------------------------------------------------------------
/data/sample/overview_character_matrix.csv:
--------------------------------------------------------------------------------
1 | ,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24,cluster_id
2 | s0,0,0,1,-1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
3 | s1,0,0,-1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,3
4 | s2,0,0,1,0,0,0,0,0,0,1,-1,0,-1,0,1,0,0,-1,0,0,0,0,0,0,0,0
5 | s3,-1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1,0,0,0
6 | s4,0,0,1,0,-1,-1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,-1,0
7 | s5,0,-1,1,0,0,0,0,0,1,0,0,0,0,-1,0,0,0,0,0,0,1,0,0,0,0,3
8 | s6,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,-1,1,3
9 | s7,0,-1,1,-1,0,-1,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,1,0,0,0,0,3
10 | s8,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,3
11 | s9,0,0,0,0,-1,0,0,0,0,0,-1,1,-1,0,-1,0,0,0,0,0,0,0,0,-1,0,0
12 | s10,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,-1,2
13 | s11,0,0,0,-1,0,1,0,0,1,0,-1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
14 | s12,-1,0,1,0,0,-1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
15 | s13,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,-1,0,0,1,0,0,0,0,4
16 | s14,0,0,0,0,0,0,1,0,-1,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0
17 | s15,0,0,1,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0
18 | s16,0,0,-1,0,0,1,0,-1,0,-1,0,0,0,-1,0,-1,1,0,0,0,0,0,0,0,0,0
19 | s17,-1,-1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0
20 | s18,0,0,-1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,-1,1,0,0,0,-1,1,-1,0
21 | s19,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,3
22 | s20,0,0,1,0,0,0,0,0,0,0,0,-1,0,1,0,0,0,0,0,0,1,0,-1,0,0,0
23 | s21,0,0,0,0,0,0,0,0,-1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
24 | s22,0,0,1,0,0,0,0,0,-1,0,0,0,0,1,0,0,0,0,0,0,-1,0,0,0,0,0
25 | s23,0,-1,0,0,-1,0,-1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
26 | s24,0,-1,-1,-1,0,0,0,0,0,0,0,0,1,0,0,0,-1,0,1,0,0,0,0,1,0,0
27 |
--------------------------------------------------------------------------------
/data/sample/overview_character_matrix_without_noise.csv:
--------------------------------------------------------------------------------
1 | ,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24,cluster_id
2 | s0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
3 | s1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,3
4 | s2,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
5 | s3,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
6 | s4,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
7 | s5,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,3
8 | s6,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,3
9 | s7,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,3
10 | s8,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,3
11 | s9,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
12 | s10,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,2
13 | s11,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
14 | s12,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,3
15 | s13,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,4
16 | s14,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
17 | s15,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0
18 | s16,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0
19 | s17,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
20 | s18,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0
21 | s19,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,3
22 | s20,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0
23 | s21,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
24 | s22,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0
25 | s23,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1
26 | s24,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0
27 |
--------------------------------------------------------------------------------
/data/sample/overview_copynumbertree_scarlet.txt:
--------------------------------------------------------------------------------
1 | 0,1,c1,c2,c7,c10,c11,c14,c18,c19,c20,c21,c23
2 | 0,3,c1,c3,c7,c11,c12,c13,c14,c15,c16,c18,c19,c21,c24
3 | 0,2,c1,c3,c4,c11,c12,c14,c16,c19,c21,c24
4 | 3,4,c0,c5,c7,c8,c10,c17,c21,c24
5 |
--------------------------------------------------------------------------------
/data/sample/overview_multi_state_character_matrix.csv:
--------------------------------------------------------------------------------
1 | ,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24,cluster_id
2 | s0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
3 | s1,0,0,1,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,3
4 | s2,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
5 | s3,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
6 | s4,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
7 | s5,0,0,1,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,3
8 | s6,0,0,1,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,1,3
9 | s7,0,0,1,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,1,0,0,0,0,3
10 | s8,0,0,1,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,1,3
11 | s9,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
12 | s10,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,2
13 | s11,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
14 | s12,0,0,1,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,1,0,0,0,0,3
15 | s13,0,0,1,0,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,4
16 | s14,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
17 | s15,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0
18 | s16,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0
19 | s17,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
20 | s18,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0
21 | s19,0,0,1,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,1,3
22 | s20,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0
23 | s21,1,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0,1
24 | s22,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0
25 | s23,0,1,2,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,2,0,0,0,0,1
26 | s24,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0
27 |
--------------------------------------------------------------------------------
/data/sample/overview_multi_state_tree_node_character_matrix.csv:
--------------------------------------------------------------------------------
1 | ,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24,cluster_id
2 | root,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
3 | c2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
4 | c20,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
5 | c23,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
6 | c13,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0
7 | c11,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
8 | d1,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0,1
9 | d3,0,0,1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,3
10 | d2,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,2
11 | c5,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
12 | c14,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
13 | c8,0,0,1,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,3
14 | c16,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
15 | c22,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
16 | c17,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0
17 | c1,0,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0,1
18 | c10,0,0,1,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,1,0,0,0,0,3
19 | d4,0,0,1,0,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,4
20 | c6,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
21 | c4,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0
22 | c18,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0
23 | c19,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0
24 | c9,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
25 | c7,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0
26 | c24,0,0,1,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,1,3
27 | c3,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0
28 | c0,1,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0,1
29 | c21,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0
30 | c15,0,1,2,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,2,0,0,0,0,1
31 | c12,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0
32 |
--------------------------------------------------------------------------------
/data/sample/overview_phiscs.txt:
--------------------------------------------------------------------------------
1 | cell_idx/mut_idx c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24
2 | s0 0 0 1 ? 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
3 | s1 0 0 ? 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 ? 0 0
4 | s2 0 0 1 0 0 0 0 0 0 1 ? 0 ? 0 1 0 0 ? 0 0 0 0 0 0 0
5 | s3 ? 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ? 1 0 0
6 | s4 0 0 1 0 ? ? 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 ?
7 | s5 0 ? 1 0 0 0 0 0 1 0 0 0 0 ? 0 0 0 0 0 0 1 0 0 0 0
8 | s6 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ? 0 ? 0 0 0 ? 1
9 | s7 0 ? 1 ? 0 ? 0 0 0 0 0 0 ? 0 0 0 0 0 0 0 1 0 0 0 0
10 | s8 0 0 0 0 0 0 0 ? ? 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
11 | s9 0 0 0 0 ? 0 0 0 0 0 ? 1 ? 0 ? 0 0 0 0 0 0 0 0 ? 0
12 | s10 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ?
13 | s11 0 0 0 ? 0 1 0 0 1 0 ? 0 0 0 0 0 0 0 0 0 0 0 1 0 0
14 | s12 ? 0 1 0 0 ? 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
15 | s13 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 ? 0 0 1 0 0 0 0
16 | s14 0 0 0 0 0 0 1 0 ? 0 0 ? 0 ? 0 0 0 0 0 0 0 0 0 0 0
17 | s15 0 0 1 0 1 ? 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0
18 | s16 0 0 ? 0 0 1 0 ? 0 ? 0 0 0 ? 0 ? 1 0 0 0 0 0 0 0 0
19 | s17 ? ? 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ? 0 0 0 0 0
20 | s18 0 0 ? 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ? 1 0 0 0 ? 1 ?
21 | s19 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
22 | s20 0 0 1 0 0 0 0 0 0 0 0 ? 0 1 0 0 0 0 0 0 1 0 ? 0 0
23 | s21 0 0 0 0 0 0 0 0 ? 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
24 | s22 0 0 1 0 0 0 0 0 ? 0 0 0 0 1 0 0 0 0 0 0 ? 0 0 0 0
25 | s23 0 ? 0 0 ? 0 ? 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
26 | s24 0 ? ? ? 0 0 0 0 0 0 0 0 1 0 0 0 ? 0 1 0 0 0 0 1 0
27 |
--------------------------------------------------------------------------------
/data/sample/overview_read_count.csv:
--------------------------------------------------------------------------------
1 | ,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24
2 | s0,52,55,39,0,61,48,55,49,45,43,35,59,61,46,50,49,55,58,55,51,56,55,59,48,48
3 | s1,46,47,0,38,60,49,42,42,49,51,38,46,51,50,47,47,59,48,54,48,46,55,0,54,54
4 | s2,70,51,45,51,54,44,53,57,47,40,0,60,0,63,63,57,51,0,35,43,61,39,53,58,53
5 | s3,0,41,46,42,49,50,52,48,51,61,55,49,60,54,51,49,54,38,51,58,47,0,52,54,33
6 | s4,47,60,53,55,0,0,42,48,53,50,49,57,53,58,62,40,54,55,41,49,45,48,50,53,0
7 | s5,48,0,49,46,47,48,56,44,60,47,52,58,54,0,46,56,50,56,48,46,65,63,52,45,46
8 | s6,44,53,57,43,38,63,49,56,55,51,63,54,57,46,50,38,56,0,63,0,50,60,42,0,44
9 | s7,41,0,43,0,63,0,50,47,50,67,59,46,0,45,48,49,42,58,44,65,54,65,52,50,44
10 | s8,38,51,47,48,67,58,53,0,0,43,64,48,62,56,45,52,49,45,45,50,50,39,38,54,52
11 | s9,57,46,46,37,0,55,53,46,42,47,0,56,0,59,0,47,45,54,40,53,52,57,46,0,44
12 | s10,42,50,52,59,52,50,41,49,41,45,47,52,41,49,48,46,56,51,44,51,44,58,54,45,0
13 | s11,52,52,46,0,43,45,51,40,39,55,0,55,49,50,51,41,61,44,39,45,49,56,53,55,57
14 | s12,0,52,40,64,55,0,45,44,48,53,48,50,57,44,48,61,44,45,53,41,45,59,48,53,49
15 | s13,45,54,35,52,58,54,40,64,50,42,53,40,43,59,45,41,48,0,53,55,56,55,50,33,56
16 | s14,49,58,43,52,54,40,52,49,0,37,44,0,55,0,56,38,51,40,51,54,51,43,47,42,49
17 | s15,42,58,52,47,51,0,39,57,46,46,46,50,56,51,51,46,56,44,46,53,48,46,51,49,55
18 | s16,43,54,0,45,38,49,54,0,43,0,54,58,45,0,63,0,35,46,41,46,38,61,45,52,53
19 | s17,0,0,49,63,50,51,47,52,50,49,44,56,45,54,57,57,54,48,48,0,46,53,52,40,54
20 | s18,32,53,0,40,45,47,53,58,44,53,57,57,53,49,47,39,48,0,58,54,51,53,0,48,0
21 | s19,57,53,57,52,47,49,59,53,55,60,46,50,59,66,61,51,49,59,47,47,37,53,49,46,58
22 | s20,44,50,45,56,51,63,42,44,44,50,45,0,47,62,54,46,38,52,48,56,46,47,0,45,45
23 | s21,47,39,55,47,41,33,45,44,0,56,46,49,48,53,53,50,51,46,50,60,35,50,41,46,44
24 | s22,51,51,56,59,36,48,58,49,0,45,50,45,57,43,45,46,48,54,63,57,0,56,50,41,55
25 | s23,50,0,64,35,0,46,0,57,47,41,45,33,48,43,44,54,61,56,42,47,41,39,57,48,52
26 | s24,46,0,0,0,56,51,50,42,57,36,51,57,53,44,46,51,0,54,46,54,49,58,44,47,37
27 |
--------------------------------------------------------------------------------
/data/sample/overview_read_count_without_missing.csv:
--------------------------------------------------------------------------------
1 | ,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24
2 | s0,52,55,39,41,61,48,55,49,45,43,35,59,61,46,50,49,55,58,55,51,56,55,59,48,48
3 | s1,46,47,49,38,60,49,42,42,49,51,38,46,51,50,47,47,59,48,54,48,46,55,41,54,54
4 | s2,70,51,45,51,54,44,53,57,47,40,52,60,43,63,63,57,51,45,35,43,61,39,53,58,53
5 | s3,47,41,46,42,49,50,52,48,51,61,55,49,60,54,51,49,54,38,51,58,47,50,52,54,33
6 | s4,47,60,53,55,34,55,42,48,53,50,49,57,53,58,62,40,54,55,41,49,45,48,50,53,55
7 | s5,48,40,49,46,47,48,56,44,60,47,52,58,54,41,46,56,50,56,48,46,65,63,52,45,46
8 | s6,44,53,57,43,38,63,49,56,55,51,63,54,57,46,50,38,56,65,63,55,50,60,42,42,44
9 | s7,41,50,43,39,63,64,50,47,50,67,59,46,52,45,48,49,42,58,44,65,54,65,52,50,44
10 | s8,38,51,47,48,67,58,53,53,53,43,64,48,62,56,45,52,49,45,45,50,50,39,38,54,52
11 | s9,57,46,46,37,52,55,53,46,42,47,51,56,56,59,51,47,45,54,40,53,52,57,46,42,44
12 | s10,42,50,52,59,52,50,41,49,41,45,47,52,41,49,48,46,56,51,44,51,44,58,54,45,57
13 | s11,52,52,46,47,43,45,51,40,39,55,40,55,49,50,51,41,61,44,39,45,49,56,53,55,57
14 | s12,49,52,40,64,55,41,45,44,48,53,48,50,57,44,48,61,44,45,53,41,45,59,48,53,49
15 | s13,45,54,35,52,58,54,40,64,50,42,53,40,43,59,45,41,48,55,53,55,56,55,50,33,56
16 | s14,49,58,43,52,54,40,52,49,52,37,44,42,55,50,56,38,51,40,51,54,51,43,47,42,49
17 | s15,42,58,52,47,51,52,39,57,46,46,46,50,56,51,51,46,56,44,46,53,48,46,51,49,55
18 | s16,43,54,43,45,38,49,54,61,43,49,54,58,45,38,63,48,35,46,41,46,38,61,45,52,53
19 | s17,39,48,49,63,50,51,47,52,50,49,44,56,45,54,57,57,54,48,48,63,46,53,52,40,54
20 | s18,32,53,57,40,45,47,53,58,44,53,57,57,53,49,47,39,48,43,58,54,51,53,40,48,51
21 | s19,57,53,57,52,47,49,59,53,55,60,46,50,59,66,61,51,49,59,47,47,37,53,49,46,58
22 | s20,44,50,45,56,51,63,42,44,44,50,45,47,47,62,54,46,38,52,48,56,46,47,49,45,45
23 | s21,47,39,55,47,41,33,45,44,43,56,46,49,48,53,53,50,51,46,50,60,35,50,41,46,44
24 | s22,51,51,56,59,36,48,58,49,49,45,50,45,57,43,45,46,48,54,63,57,51,56,50,41,55
25 | s23,50,45,64,35,42,46,45,57,47,41,45,33,48,43,44,54,61,56,42,47,41,39,57,48,52
26 | s24,46,44,42,62,56,51,50,42,57,36,51,57,53,44,46,51,60,54,46,54,49,58,44,47,37
27 |
--------------------------------------------------------------------------------
/data/sample/overview_readcounts_scarlet.csv:
--------------------------------------------------------------------------------
1 | cell_id,c,c0_v,c0_t,c1_v,c1_t,c2_v,c2_t,c3_v,c3_t,c4_v,c4_t,c5_v,c5_t,c6_v,c6_t,c7_v,c7_t,c8_v,c8_t,c9_v,c9_t,c10_v,c10_t,c11_v,c11_t,c12_v,c12_t,c13_v,c13_t,c14_v,c14_t,c15_v,c15_t,c16_v,c16_t,c17_v,c17_t,c18_v,c18_t,c19_v,c19_t,c20_v,c20_t,c21_v,c21_t,c22_v,c22_t,c23_v,c23_t,c24_v,c24_t
2 | s0,0,0,52,0,55,5,39,0,0,0,61,48,48,0,55,0,49,0,45,0,43,0,35,0,59,0,61,0,46,0,50,0,49,0,55,0,58,0,55,0,51,0,56,0,55,59,59,0,48,0,48
3 | s1,3,0,46,0,47,0,0,0,38,0,60,0,49,0,42,0,42,18,49,0,51,0,38,0,46,0,51,0,50,0,47,0,47,0,59,0,48,0,54,0,48,4,46,0,55,0,0,0,54,0,54
4 | s2,0,0,70,0,51,5,45,0,51,0,54,1,44,0,53,0,57,0,47,11,40,0,0,0,60,0,0,0,63,28,63,0,57,0,51,0,0,0,35,0,43,0,61,0,39,0,53,0,58,0,53
5 | s3,0,0,0,0,41,4,46,0,42,0,49,50,50,0,52,1,48,0,51,0,61,0,55,0,49,0,60,0,54,0,51,0,49,0,54,0,38,0,51,0,58,0,47,0,0,52,52,0,54,0,33
6 | s4,0,0,47,0,60,17,53,0,55,0,0,0,0,0,42,0,48,0,53,0,50,0,49,0,57,0,53,0,58,0,62,0,40,8,54,0,55,0,41,0,49,0,45,0,48,50,50,0,53,0,0
7 | s5,3,0,48,0,0,12,49,0,46,0,47,0,48,0,56,0,44,6,60,0,47,0,52,0,58,0,54,0,0,0,46,0,56,0,50,0,56,0,48,0,46,8,65,0,63,0,52,0,45,0,46
8 | s6,3,0,44,0,53,5,57,0,43,0,38,0,63,0,49,0,56,13,55,0,51,0,63,0,54,0,57,0,46,0,50,0,38,0,56,0,0,0,63,0,0,1,50,0,60,0,42,0,0,9,44
9 | s7,3,0,41,0,0,8,43,0,0,0,63,0,0,0,50,0,47,0,50,0,67,2,59,0,46,0,0,0,45,0,48,0,49,0,42,0,58,0,44,0,65,14,54,0,65,0,52,0,50,0,44
10 | s8,3,0,38,0,51,4,47,0,48,0,67,0,58,0,53,0,0,0,0,0,43,0,64,0,48,0,62,0,56,0,45,0,52,0,49,0,45,0,45,0,50,12,50,0,39,0,38,1,54,8,52
11 | s9,0,0,57,0,46,0,46,0,37,0,0,0,55,0,53,0,46,0,42,0,47,0,0,10,56,0,0,0,59,0,0,0,47,0,45,0,54,0,40,0,53,0,52,0,57,0,46,0,0,0,44
12 | s10,2,0,42,0,50,20,52,0,59,0,52,0,50,0,41,0,49,0,41,0,45,0,47,0,52,0,41,15,49,0,48,0,46,0,56,0,51,0,44,0,51,1,44,0,58,0,54,0,45,0,0
13 | s11,0,0,52,0,52,4,46,0,0,0,43,45,45,0,51,0,40,5,39,0,55,0,0,0,55,0,49,0,50,0,51,0,41,0,61,0,44,0,39,0,45,0,49,0,56,53,53,0,55,0,57
14 | s12,3,0,0,0,52,5,40,0,64,0,55,0,0,0,45,0,44,0,48,0,53,15,48,0,50,0,57,0,44,0,48,0,61,0,44,0,45,0,53,0,41,3,45,0,59,0,48,0,53,0,49
15 | s13,4,0,45,0,54,4,35,0,52,0,58,1,54,0,40,0,64,9,50,0,42,0,53,0,40,11,43,0,59,0,45,0,41,0,48,0,0,0,53,0,55,23,56,0,55,0,50,0,33,0,56
16 | s14,0,0,49,1,58,0,43,0,52,0,54,0,40,52,52,0,49,0,0,0,37,0,44,0,0,0,55,0,0,0,56,0,38,0,51,0,40,0,51,0,54,0,51,0,43,0,47,0,42,0,49
17 | s15,0,0,42,0,58,20,52,0,47,37,51,0,0,0,39,0,57,0,46,0,46,0,46,0,50,0,56,0,51,0,51,0,46,0,56,44,44,0,46,0,53,0,48,0,46,0,51,28,49,0,55
18 | s16,0,0,43,0,54,0,0,0,45,0,38,49,49,0,54,0,0,0,43,0,0,0,54,0,58,0,45,0,0,0,63,0,0,14,35,0,46,1,41,4,46,0,38,0,61,0,45,0,52,0,53
19 | s17,0,0,0,0,0,17,49,0,63,0,50,0,51,0,47,0,52,0,50,21,49,0,44,0,56,0,45,0,54,5,57,0,57,0,54,0,48,0,48,0,0,0,46,0,53,0,52,0,40,0,54
20 | s18,0,0,32,0,53,0,0,0,40,0,45,0,47,0,53,6,58,0,44,0,53,0,57,0,57,0,53,0,49,2,47,0,39,0,48,0,0,20,58,0,54,0,51,0,53,0,0,16,48,0,0
21 | s19,3,0,57,0,53,23,57,0,52,0,47,0,49,0,59,0,53,2,55,0,60,0,46,0,50,0,59,0,66,0,61,0,51,0,49,0,59,0,47,0,47,18,37,0,53,0,49,0,46,14,58
22 | s20,0,0,44,0,50,13,45,3,56,0,51,0,63,0,42,0,44,0,44,0,50,0,45,0,0,0,47,9,62,0,54,0,46,0,38,0,52,0,48,0,56,5,46,0,47,0,0,0,45,0,45
23 | s21,1,0,47,0,39,0,55,0,47,0,41,0,33,0,45,1,44,0,0,0,56,0,46,0,49,0,48,17,53,0,53,0,50,0,51,0,46,0,50,0,60,0,35,0,50,0,41,0,46,0,44
24 | s22,0,0,51,0,51,19,56,0,59,0,36,0,48,0,58,0,49,0,0,0,45,0,50,0,45,0,57,16,43,0,45,0,46,0,48,0,54,0,63,0,57,0,0,4,56,0,50,0,41,0,55
25 | s23,1,0,50,0,0,0,64,0,35,0,0,0,46,0,0,0,57,0,47,0,41,0,45,0,33,0,48,28,43,0,44,2,54,0,61,0,56,0,42,0,47,0,41,0,39,0,57,0,48,0,52
26 | s24,0,0,46,0,0,0,0,0,0,0,56,0,51,0,50,0,42,0,57,0,36,0,51,0,57,17,53,0,44,0,46,0,51,0,0,0,54,14,46,0,54,1,49,0,58,0,44,11,47,0,37
27 |
--------------------------------------------------------------------------------
/data/sample/overview_scite.txt:
--------------------------------------------------------------------------------
1 | 0 0 0 3 0 0 0 0 0 0 0 0 3 0 0 0 0 3 0 0 0 0 0 0 0
2 | 0 0 0 0 0 3 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 3 3
3 | 1 3 1 0 1 1 0 1 0 0 1 0 1 0 0 1 3 1 3 1 1 0 1 0 3
4 | 3 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 3
5 | 0 0 0 0 3 0 0 0 0 3 0 0 0 0 0 1 0 0 0 0 0 0 0 3 0
6 | 1 0 0 1 3 0 0 3 0 0 0 1 3 0 0 3 1 0 0 0 0 0 0 0 0
7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 3 0
8 | 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 3 0 1 0 0 0 0 0 0
9 | 0 1 0 0 0 1 1 0 3 0 0 1 0 1 3 0 0 0 0 0 0 3 3 0 0
10 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0
11 | 0 0 3 0 0 0 0 0 0 3 0 3 1 0 0 0 0 0 0 0 0 0 0 0 0
12 | 0 0 0 0 0 0 0 0 0 1 0 0 0 0 3 0 0 0 0 0 3 0 0 0 0
13 | 0 0 3 0 0 0 0 3 0 3 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1
14 | 0 0 0 0 0 3 0 0 0 0 1 0 0 0 3 0 3 0 0 0 1 1 1 1 0
15 | 0 0 1 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0
17 | 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3
18 | 0 0 3 0 0 0 3 0 0 0 0 0 0 3 0 1 0 0 3 0 0 0 0 0 0
19 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
20 | 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0
21 | 0 0 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 0 0 1 1 0 3 0 0
22 | 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23 | 1 3 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 3 0 3 0 0 0 0
24 | 0 0 0 0 0 0 3 0 0 3 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1
25 | 0 0 0 0 3 0 1 0 1 0 3 0 0 0 0 0 0 0 3 1 0 0 0 0 0
26 |
--------------------------------------------------------------------------------
/data/sample/overview_sifit.txt:
--------------------------------------------------------------------------------
1 | 0 0 0 0 3 0 0 0 0 0 0 0 0 3 0 0 0 0 3 0 0 0 0 0 0 0
2 | 1 0 0 0 0 0 3 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 3 3
3 | 2 1 3 1 0 1 1 0 1 0 0 1 0 1 0 0 1 3 1 3 1 1 0 1 0 3
4 | 3 3 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 3
5 | 4 0 0 0 0 3 0 0 0 0 3 0 0 0 0 0 1 0 0 0 0 0 0 0 3 0
6 | 5 1 0 0 1 3 0 0 3 0 0 0 1 3 0 0 3 1 0 0 0 0 0 0 0 0
7 | 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 3 0
8 | 7 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 3 0 1 0 0 0 0 0 0
9 | 8 0 1 0 0 0 1 1 0 3 0 0 1 0 1 3 0 0 0 0 0 0 3 3 0 0
10 | 9 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0
11 | 10 0 0 3 0 0 0 0 0 0 3 0 3 1 0 0 0 0 0 0 0 0 0 0 0 0
12 | 11 0 0 0 0 0 0 0 0 0 1 0 0 0 0 3 0 0 0 0 0 3 0 0 0 0
13 | 12 0 0 3 0 0 0 0 3 0 3 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1
14 | 13 0 0 0 0 0 3 0 0 0 0 1 0 0 0 3 0 3 0 0 0 1 1 1 1 0
15 | 14 0 0 1 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16 | 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0
17 | 16 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3
18 | 17 0 0 3 0 0 0 3 0 0 0 0 0 0 3 0 1 0 0 3 0 0 0 0 0 0
19 | 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
20 | 19 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0
21 | 20 0 0 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 0 0 1 1 0 3 0 0
22 | 21 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23 | 22 1 3 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 3 0 3 0 0 0 0
24 | 23 0 0 0 0 0 0 3 0 0 3 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1
25 | 24 0 0 0 0 3 0 1 0 1 0 3 0 0 0 0 0 0 0 3 1 0 0 0 0 0
26 |
--------------------------------------------------------------------------------
/data/sample/overview_sphyr.txt:
--------------------------------------------------------------------------------
1 | 25
2 | 25
3 | 0 0 1 -1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
4 | 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0
5 | 0 0 1 0 0 0 0 0 0 1 -1 0 -1 0 1 0 0 -1 0 0 0 0 0 0 0
6 | -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 0
7 | 0 0 1 0 -1 -1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 -1
8 | 0 -1 1 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0
9 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 -1 0 0 0 -1 1
10 | 0 -1 1 -1 0 -1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0
11 | 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
12 | 0 0 0 0 -1 0 0 0 0 0 -1 1 -1 0 -1 0 0 0 0 0 0 0 0 -1 0
13 | 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1
14 | 0 0 0 -1 0 1 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 0 0
15 | -1 0 1 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16 | 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 -1 0 0 1 0 0 0 0
17 | 0 0 0 0 0 0 1 0 -1 0 0 -1 0 -1 0 0 0 0 0 0 0 0 0 0 0
18 | 0 0 1 0 1 -1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0
19 | 0 0 -1 0 0 1 0 -1 0 -1 0 0 0 -1 0 -1 1 0 0 0 0 0 0 0 0
20 | -1 -1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0
21 | 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 1 0 0 0 -1 1 -1
22 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
23 | 0 0 1 0 0 0 0 0 0 0 0 -1 0 1 0 0 0 0 0 0 1 0 -1 0 0
24 | 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
25 | 0 0 1 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0
26 | 0 -1 0 0 -1 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
27 | 0 -1 -1 -1 0 0 0 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 1 0
28 |
--------------------------------------------------------------------------------
/data/sample/overview_tree.dot:
--------------------------------------------------------------------------------
1 | digraph N {
2 | overlap="false"
3 | rankdir="TB"
4 | 0 [label="root", style="bold"];
5 | 1 [label="c2_1", style="bold"];
6 | 2 [label="c5_1", style="bold"];
7 | 3 [label="c22_1", style="bold"];
8 | 4 [label="s0", style="bold"];
9 | 5 [label="c20_1", style="bold"];
10 | 6 [label="c8_1", style="bold"];
11 | 7 [label="s1", style="bold"];
12 | 8 [label="c9_1", style="bold"];
13 | 9 [label="c14_1", style="bold"];
14 | 10 [label="s2", style="bold"];
15 | 11 [label="s3", style="bold"];
16 | 12 [label="s4", style="bold"];
17 | 13 [label="s5", style="bold"];
18 | 14 [label="c24_1", style="bold"];
19 | 15 [label="s6", style="bold"];
20 | 16 [label="c10_1", style="bold"];
21 | 17 [label="s7", style="bold"];
22 | 18 [label="s8", style="bold"];
23 | 19 [label="c11_1", style="bold"];
24 | 20 [label="s9", style="bold"];
25 | 21 [label="c13_1", style="bold"];
26 | 22 [label="s10", style="bold"];
27 | 23 [label="s11", style="bold"];
28 | 24 [label="s12", style="bold"];
29 | 25 [label="s13", style="bold"];
30 | 26 [label="c6_1", style="bold"];
31 | 27 [label="s14", style="bold"];
32 | 28 [label="c23_1", style="bold"];
33 | 29 [label="c17_1", style="bold"];
34 | 30 [label="c4_1", style="bold"];
35 | 31 [label="s15", style="bold"];
36 | 32 [label="c19_1", style="bold"];
37 | 33 [label="c16_1", style="bold"];
38 | 34 [label="s16", style="bold"];
39 | 35 [label="s17", style="bold"];
40 | 36 [label="c18_1", style="bold"];
41 | 37 [label="c7_1", style="bold"];
42 | 38 [label="s18", style="bold"];
43 | 39 [label="s19", style="bold"];
44 | 40 [label="c3_1", style="bold"];
45 | 41 [label="s20", style="bold"];
46 | 42 [label="c2_2", style="bold"];
47 | 43 [label="c20_2", style="bold"];
48 | 44 [label="s21", style="bold"];
49 | 45 [label="c21_1", style="bold"];
50 | 46 [label="s22", style="bold"];
51 | 47 [label="c15_1", style="bold"];
52 | 48 [label="s23", style="bold"];
53 | 49 [label="c12_1", style="bold"];
54 | 50 [label="s24", style="bold"];
55 | 0 -> 1 [style="bold"];
56 | 0 -> 19 [style="bold"];
57 | 0 -> 26 [style="bold"];
58 | 1 -> 2 [style="bold"];
59 | 1 -> 5 [style="bold"];
60 | 1 -> 8 [style="bold"];
61 | 1 -> 28 [style="bold"];
62 | 2 -> 3 [style="bold"];
63 | 2 -> 32 [style="bold"];
64 | 3 -> 4 [style="bold"];
65 | 3 -> 11 [style="bold"];
66 | 3 -> 12 [style="bold"];
67 | 3 -> 23 [style="bold"];
68 | 5 -> 6 [style="bold"];
69 | 5 -> 16 [style="bold"];
70 | 5 -> 21 [style="bold"];
71 | 6 -> 7 [style="bold"];
72 | 6 -> 13 [style="bold"];
73 | 6 -> 14 [style="bold"];
74 | 6 -> 25 [style="bold"];
75 | 8 -> 9 [style="bold"];
76 | 9 -> 10 [style="bold"];
77 | 9 -> 35 [style="bold"];
78 | 14 -> 15 [style="bold"];
79 | 14 -> 18 [style="bold"];
80 | 14 -> 39 [style="bold"];
81 | 16 -> 17 [style="bold"];
82 | 16 -> 24 [style="bold"];
83 | 19 -> 20 [style="bold"];
84 | 21 -> 22 [style="bold"];
85 | 21 -> 40 [style="bold"];
86 | 21 -> 42 [style="bold"];
87 | 21 -> 45 [style="bold"];
88 | 26 -> 27 [style="bold"];
89 | 28 -> 29 [style="bold"];
90 | 28 -> 36 [style="bold"];
91 | 29 -> 30 [style="bold"];
92 | 30 -> 31 [style="bold"];
93 | 32 -> 33 [style="bold"];
94 | 33 -> 34 [style="bold"];
95 | 36 -> 37 [style="bold"];
96 | 36 -> 49 [style="bold"];
97 | 37 -> 38 [style="bold"];
98 | 40 -> 41 [style="bold"];
99 | 42 -> 43 [style="bold"];
100 | 43 -> 44 [style="bold"];
101 | 43 -> 47 [style="bold"];
102 | 45 -> 46 [style="bold"];
103 | 47 -> 48 [style="bold"];
104 | 49 -> 50 [style="bold"];
105 | }
--------------------------------------------------------------------------------
/data/sample/overview_tree.newick:
--------------------------------------------------------------------------------
1 | ((((s0,s3,s4,s11),s16),((s1,s5,(s6,s8,s19),s13),(s7,s12),(s10,s20,(s21,s23),s22)),(s2,s17),(s15,(s18,s24))),s9,s14);
--------------------------------------------------------------------------------
/data/sample/overview_tree_edgelist.csv:
--------------------------------------------------------------------------------
1 | root,c2
2 | root,c11
3 | root,c6
4 | c2,c20
5 | c2,c23
6 | c2,c5
7 | c2,c14
8 | c20,c13
9 | c23,c17
10 | c23,c18
11 | c13,d1
12 | c13,d3
13 | c13,d2
14 | c13,c3
15 | c13,c21
16 | c11,s9
17 | d1,c1
18 | d1,c0
19 | d3,c8
20 | d3,c10
21 | d2,s10
22 | c5,c16
23 | c5,c22
24 | c14,c9
25 | c8,d4
26 | c8,c24
27 | c8,s1
28 | c8,s5
29 | c16,c19
30 | c22,s0
31 | c22,s3
32 | c22,s4
33 | c22,s11
34 | c17,c4
35 | c1,c15
36 | c10,s7
37 | c10,s12
38 | d4,s13
39 | c6,s14
40 | c4,s15
41 | c18,c7
42 | c18,c12
43 | c19,s16
44 | c9,s2
45 | c9,s17
46 | c7,s18
47 | c24,s6
48 | c24,s8
49 | c24,s19
50 | c3,s20
51 | c0,s21
52 | c21,s22
53 | c15,s23
54 | c12,s24
55 |
--------------------------------------------------------------------------------
/data/sample/overview_tree_without_cells.dot:
--------------------------------------------------------------------------------
1 | digraph N {
2 | overlap="false"
3 | rankdir="TB"
4 | 0 [label="root", style="bold"];
5 | 1 [label="c2_1", style="bold"];
6 | 2 [label="c5_1", style="bold"];
7 | 3 [label="c22_1", style="bold"];
8 | 4 [label="c20_1", style="bold"];
9 | 5 [label="c8_1", style="bold"];
10 | 6 [label="c9_1", style="bold"];
11 | 7 [label="c14_1", style="bold"];
12 | 8 [label="c24_1", style="bold"];
13 | 9 [label="c10_1", style="bold"];
14 | 10 [label="c11_1", style="bold"];
15 | 11 [label="c13_1", style="bold"];
16 | 12 [label="c6_1", style="bold"];
17 | 13 [label="c23_1", style="bold"];
18 | 14 [label="c17_1", style="bold"];
19 | 15 [label="c4_1", style="bold"];
20 | 16 [label="c19_1", style="bold"];
21 | 17 [label="c16_1", style="bold"];
22 | 18 [label="c18_1", style="bold"];
23 | 19 [label="c7_1", style="bold"];
24 | 20 [label="c3_1", style="bold"];
25 | 21 [label="c2_2", style="bold"];
26 | 22 [label="c20_2", style="bold"];
27 | 23 [label="c21_1", style="bold"];
28 | 24 [label="c15_1", style="bold"];
29 | 25 [label="c12_1", style="bold"];
30 | 0 -> 1 [style="bold"];
31 | 0 -> 10 [style="bold"];
32 | 0 -> 12 [style="bold"];
33 | 1 -> 2 [style="bold"];
34 | 1 -> 4 [style="bold"];
35 | 1 -> 6 [style="bold"];
36 | 1 -> 13 [style="bold"];
37 | 2 -> 3 [style="bold"];
38 | 2 -> 16 [style="bold"];
39 | 4 -> 5 [style="bold"];
40 | 4 -> 9 [style="bold"];
41 | 4 -> 11 [style="bold"];
42 | 5 -> 8 [style="bold"];
43 | 6 -> 7 [style="bold"];
44 | 11 -> 20 [style="bold"];
45 | 11 -> 21 [style="bold"];
46 | 11 -> 23 [style="bold"];
47 | 13 -> 14 [style="bold"];
48 | 13 -> 18 [style="bold"];
49 | 14 -> 15 [style="bold"];
50 | 16 -> 17 [style="bold"];
51 | 18 -> 19 [style="bold"];
52 | 18 -> 25 [style="bold"];
53 | 21 -> 22 [style="bold"];
54 | 22 -> 24 [style="bold"];
55 | }
--------------------------------------------------------------------------------
/data/sample/overview_variant_count.csv:
--------------------------------------------------------------------------------
1 | ,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24
2 | s0,0,0,5,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,0,0
3 | s1,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0
4 | s2,0,0,5,0,0,1,0,0,0,11,0,0,0,0,28,0,0,0,0,0,0,0,0,0,0
5 | s3,0,0,4,0,0,50,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,0,0
6 | s4,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,50,0,0
7 | s5,0,0,12,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0
8 | s6,0,0,5,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,9
9 | s7,0,0,8,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,14,0,0,0,0
10 | s8,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,1,8
11 | s9,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0
12 | s10,0,0,20,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,1,0,0,0,0
13 | s11,0,0,4,0,0,45,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,53,0,0
14 | s12,0,0,5,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,3,0,0,0,0
15 | s13,0,0,4,0,0,1,0,0,9,0,0,0,11,0,0,0,0,0,0,0,23,0,0,0,0
16 | s14,0,1,0,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
17 | s15,0,0,20,0,37,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,28,0
18 | s16,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,14,0,1,4,0,0,0,0,0
19 | s17,0,0,17,0,0,0,0,0,0,21,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0
20 | s18,0,0,0,0,0,0,0,6,0,0,0,0,0,0,2,0,0,0,20,0,0,0,0,16,0
21 | s19,0,0,23,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,14
22 | s20,0,0,13,3,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,5,0,0,0,0
23 | s21,0,0,0,0,0,0,0,1,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0
24 | s22,0,0,19,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,4,0,0,0
25 | s23,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,2,0,0,0,0,0,0,0,0,0
26 | s24,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,14,0,1,0,0,11,0
27 |
--------------------------------------------------------------------------------
/data/sample/overview_variant_count_without_missing.csv:
--------------------------------------------------------------------------------
1 | ,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24
2 | s0,0,0,5,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,0,0
3 | s1,0,0,18,0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0
4 | s2,0,0,5,0,0,1,0,0,0,11,0,0,0,0,28,0,0,0,0,0,0,0,0,0,0
5 | s3,0,0,4,0,0,50,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,0,0
6 | s4,0,0,17,0,0,55,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,50,0,0
7 | s5,0,0,12,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0
8 | s6,0,0,5,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,9
9 | s7,0,0,8,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,14,0,0,0,0
10 | s8,0,0,4,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,12,0,0,1,8
11 | s9,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0
12 | s10,0,0,20,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,1,0,0,0,0
13 | s11,0,0,4,0,0,45,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,53,0,0
14 | s12,0,0,5,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,3,0,0,0,0
15 | s13,0,0,4,0,0,1,0,0,9,0,0,0,11,0,0,0,0,0,0,0,23,0,0,0,0
16 | s14,0,1,0,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
17 | s15,0,0,20,0,37,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,28,0
18 | s16,0,0,4,0,0,49,0,1,0,0,0,0,0,0,0,0,14,0,1,4,0,0,0,0,0
19 | s17,0,0,17,0,0,0,0,0,0,21,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0
20 | s18,0,0,9,0,0,0,0,6,0,0,0,0,0,0,2,0,0,0,20,0,0,0,0,16,0
21 | s19,0,0,23,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,14
22 | s20,0,0,13,3,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,5,0,0,0,0
23 | s21,0,0,0,0,0,0,0,1,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0
24 | s22,0,0,19,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,5,4,0,0,0
25 | s23,0,11,0,0,0,0,0,0,0,0,0,0,0,28,0,2,0,0,0,0,0,0,0,0,0
26 | s24,0,0,13,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,14,0,1,0,0,11,0
27 |
--------------------------------------------------------------------------------
/data/simulation/Snakefile:
--------------------------------------------------------------------------------
1 | # simulation snakefile
2 | configfile: "config.yaml"
3 |
4 | seeds = [ i for i in range(config["nseeds"])]
5 |
6 | import itertools
7 |
8 | def filter_combinator(combinator):
9 | def filtered_combinator(*args, **kwargs):
10 | for wc_comb in combinator(*args, **kwargs):
11 | #if int(wc_comb[1][-1]) >= int(wc_comb[2][-1]):
12 | if int(wc_comb[1][-1]) == int(wc_comb[2][-1]):
13 | yield wc_comb
14 | return filtered_combinator
15 |
16 | filtered_product = filter_combinator(itertools.product)
17 |
18 | rule all:
19 | input:
20 | # simulation
21 | #expand('ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_read_count.csv', filtered_product, seed=seeds, ncells=config['ncells'], ncharacters=config['ncharacters'], nclusters=config['nclusters'], missing=config['missing_rate'], k=config['k']),
22 | #expand('ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_character_matrix.csv', filtered_product, seed=seeds, ncells=config['ncells'], ncharacters=config['ncharacters'], nclusters=config['nclusters'], missing=config['missing_rate'], k=config['k']),
23 | # condor
24 | #expand('condor/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_B.csv', filtered_product, seed=seeds, ncells=config['ncells'], ncharacters=config['ncharacters'], nclusters=config['nclusters'], missing=config['missing_rate'], k=config['k']),
25 | #expand('condor_reads/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_B.csv', filtered_product, seed=seeds, ncells=config['ncells'], ncharacters=config['ncharacters'], nclusters=config['nclusters'], missing=config['missing_rate'], k=config['k']),
26 | # scarlet
27 | #expand('scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.edgelist', filtered_product, seed=seeds, ncells=config['ncells'], ncharacters=config['ncharacters'], nclusters=config['nclusters'], missing=config['missing_rate'], k=config['k']),
28 | # sphyr
29 | #expand('sphyr/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.out', filtered_product, seed=seeds, ncells=config['ncells'], ncharacters=config['ncharacters'], nclusters=config['nclusters'], missing=config['missing_rate'], k=config['k']),
30 | # scite
31 | #expand('scite/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_ml0.newick', filtered_product, seed=seeds, ncells=config['ncells'], ncharacters=config['ncharacters'], nclusters=config['nclusters'], missing=config['missing_rate'], k=config['k']),
32 | # sifit
33 | #expand('sifit/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_mlTree.newick', filtered_product, seed=seeds, ncells=config['ncells'], ncharacters=config['ncharacters'], nclusters=config['nclusters'], missing=config['missing_rate'], k=config['k']),
34 | #expand('sifit/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_character_matrix.tsv', filtered_product, seed=seeds, ncells=config['ncells'], ncharacters=config['ncharacters'], nclusters=config['nclusters'], missing=config['missing_rate'], k=config['k']),
35 | # evaluate
36 | expand('results/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_{method}.csv', filtered_product, seed=seeds, ncells=config['ncells'], ncharacters=config['ncharacters'], nclusters=config['nclusters'], missing=config['missing_rate'], k=config['k'], method=config['eval_methods']),
37 |
38 | rule simulate:
39 | output:
40 | readcount_matrix="ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_read_count.csv",
41 | variantcount_matrix="ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_variant_count.csv",
42 | character_matrix="ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_character_matrix.csv",
43 | #sphyr_file='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_sphyr.txt',
44 | #scite_file='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_scite.txt',
45 | #phiscs_file='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_phiscs.txt',
46 | #sifit_file='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_sifit.txt',
47 | scarlet_file='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_readcounts_scarlet.csv',
48 | scarlet_file2='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_copynumbertree_scarlet.txt',
49 | params:
50 | prefix="ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}",
51 | fn=config['fn'],
52 | fp=config['fp'],
53 | mutation_rate=config['lambda'],
54 | vaf_threshold=config['vaf_threshold'],
55 | read_threshold=config['read_threshold'],
56 | log:
57 | std="ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.log",
58 | err="ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.err.log",
59 | benchmark: "ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.benchmark",
60 | shell:
61 | "python ../../src/simulation_reads.py -s {wildcards.seed} -o {params.prefix} "
62 | " -n {wildcards.ncells} -m {wildcards.ncharacters} -d {wildcards.missing} "
63 | " -p {wildcards.nclusters} -a {params.fp} -b {params.fn} -k {wildcards.k} -l {params.mutation_rate} "
64 | " -v > {log.std} 2> {log.err}"
65 |
66 | rule auxiliary:
67 | output:
68 | cellnames='auxiliary/n{ncells}_m{ncharacters}_cell_names.txt',
69 | genenames='auxiliary/n{ncells}_m{ncharacters}_gene_names.txt',
70 | params:
71 | prefix='auxiliary/n{ncells}_m{ncharacters}'
72 | shell:
73 | "python ../../scripts/auxiliary.py -n {wildcards.ncells} -m {wildcards.ncharacters} -o {params.prefix} "
74 |
75 | rule condor:
76 | output:
77 | B='condor/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_B.csv',
78 | input:
79 | character_matrix='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_character_matrix.csv',
80 | params:
81 | prefix='condor/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}',
82 | fp=config['estimated_fp'],
83 | fn=config['estimated_fn'],
84 | log:
85 | std='condor/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.log',
86 | err='condor/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.err.log',
87 | benchmark: 'condor/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.benchmark',
88 | shell:
89 | 'python ../../src/condor.py -i {input.character_matrix} -a {params.fp} -b {params.fn} -k {wildcards.k} '
90 | ' -o {params.prefix} '
91 | ' > {log.std} 2> {log.err} '
92 |
93 | rule condor_reads:
94 | output:
95 | B='condor_reads/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_B.csv',
96 | input:
97 | character_matrix='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_character_matrix.csv',
98 | total_read_matrix='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_read_count.csv',
99 | variant_read_matrix='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_variant_count.csv',
100 | params:
101 | prefix='condor_reads/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}',
102 | fp=config['estimated_fp'],
103 | fn=config['estimated_fn'],
104 | log:
105 | std='condor_reads/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.log',
106 | err='condor_reads/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.err.log',
107 | benchmark: 'condor_reads/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.benchmark',
108 | shell:
109 | 'python ../../src/condor.py -i {input.character_matrix} -a {params.fp} -b {params.fn} -k {wildcards.k} '
110 | ' -r {input.total_read_matrix} -v {input.variant_read_matrix} '
111 | ' -o {params.prefix} '
112 | ' > {log.std} 2> {log.err} '
113 |
114 | rule scarlet:
115 | output:
116 | Bmatrix= 'scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.B_ancestor',
117 | input:
118 | readcount= 'ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_readcounts_scarlet.csv',
119 | copynumbertree= 'ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_copynumbertree_scarlet.txt',
120 | params:
121 | python_exec=config['python2_exec'],
122 | scarlet_exec=config['scarlet_exec'],
123 | prefix='scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}'
124 | log:
125 | std='scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.log',
126 | err='scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.err.log',
127 | benchmark: 'scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.benchmark',
128 | shell:
129 | '{params.python_exec} {params.scarlet_exec} {input.readcount} {input.copynumbertree} {params.prefix} '
130 | ' > {log.std} 2> {log.err} ;'
131 |
132 | rule fix_scarlet:
133 | output:
134 | Bmatrix_fixed= 'scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.B_ancestor_fixed',
135 | input:
136 | Bmatrix= 'scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.B_ancestor',
137 | character_matrix='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_character_matrix.csv',
138 | params:
139 | prefix='scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}'
140 | shell:
141 | ' python ../../scripts/fix_scarlet_output.py -d {input.character_matrix} -i {params.prefix}.B_ancestor -o {params.prefix}'
142 |
143 | rule scarlet_plot:
144 | input:
145 | Bmatrix='scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.B_ancestor_fixed',
146 | copynumbertree= 'ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_copynumbertree_scarlet.txt',
147 | output:
148 | tree='scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.edgelist',
149 | params:
150 | python_exec=config['python2_exec'],
151 | scarlet_plot_exec=config['scarlet_plot_exec'],
152 | prefix='scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}'
153 | log:
154 | std='scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.plot.log',
155 | err='scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.plot.err.log',
156 | benchmark: 'scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.plot.benchmark',
157 | shell:
158 | '{params.python_exec} {params.scarlet_plot_exec} {input.Bmatrix} {input.copynumbertree} ALL {params.prefix} '
159 | ' > {log.std} 2> {log.err} '
160 |
161 | rule scarlet_star:
162 | output:
163 | #Bmatrix= 'scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_t{tree_idx}.B_ancestor',
164 | LLfile= 'scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_t{tree_idx}.LL',
165 | input:
166 | readcount= 'ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_readcounts_scarlet.csv',
167 | copynumbertree= 'cna_trees/m{ncharacters}_p{nclusters}_t{tree_idx}.txt',
168 | params:
169 | python_exec=config['python2_exec'],
170 | scarlet_exec=config['scarlet_exec'],
171 | prefix='scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_t{tree_idx}'
172 | log:
173 | std='scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_t{tree_idx}.log',
174 | err='scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_t{tree_idx}.err.log',
175 | benchmark: 'scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_t{tree_idx}.benchmark',
176 | shell:
177 | '{params.python_exec} {params.scarlet_exec} {input.readcount} {input.copynumbertree} {params.prefix} '
178 | ' > {log.std} 2> {log.err} ;'
179 |
180 | rule parse_scarlet_star:
181 | output:
182 | Bmatrix='scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.B_ancestor',
183 | copynumbertree='scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_copynumber_tree_scarlet_star.txt',
184 | input:
185 | LLfile='scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_t0.LL',
186 | #Bfile='scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_t0.B_ancestor',
187 | params:
188 | dir='scarlet_star',
189 | cna='cna_trees',
190 | log:
191 | std='scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.log',
192 | err='scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.err.log',
193 | benchmark: 'scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.benchmark',
194 | shell:
195 | 'python ../../src/parse_scarlet_star.py -n {wildcards.ncells} -m {wildcards.ncharacters} -p {wildcards.nclusters} -k {wildcards.k} -d {wildcards.missing} '
196 | ' -s {wildcards.seed} --dir {params.dir} --cna {params.cna} '
197 | ' > {log.std} 2> {log.err} ;'
198 |
199 | rule fix_scarlet_star:
200 | output:
201 | Bmatrix_fixed= 'scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.B_ancestor_fixed',
202 | input:
203 | Bmatrix= 'scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.B_ancestor',
204 | character_matrix='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_character_matrix.csv',
205 | params:
206 | prefix='scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}'
207 | shell:
208 | ' python ../../scripts/fix_scarlet_output.py -d {input.character_matrix} -i {params.prefix}.B_ancestor -o {params.prefix}'
209 |
210 | rule scarlet_star_plot:
211 | input:
212 | Bmatrix='scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.B_ancestor_fixed',
213 | copynumbertree= 'scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_copynumber_tree_scarlet_star.txt',
214 | output:
215 | tree='scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.edgelist',
216 | params:
217 | python_exec=config['python2_exec'],
218 | scarlet_plot_exec=config['scarlet_plot_exec'],
219 | prefix='scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}'
220 | log:
221 | std='scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.plot.log',
222 | err='scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.plot.err.log',
223 | benchmark: 'scarlet_star/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.plot.benchmark',
224 | shell:
225 | '{params.python_exec} {params.scarlet_plot_exec} {input.Bmatrix} {input.copynumbertree} ALL {params.prefix} '
226 | ' > {log.std} 2> {log.err} '
227 |
228 |
229 | rule sphyr:
230 | output:
231 | result='sphyr/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.out',
232 | input:
233 | character_matrix='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_sphyr.txt',
234 | params:
235 | exec=config['sphyr_exec'],
236 | lT=lambda wildcards: int(wildcards.ncharacters) + int(wildcards.nclusters),
237 | fn=config['estimated_fn'],
238 | fp=config['estimated_fp'],
239 | log:
240 | std='sphyr/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.log',
241 | err='sphyr/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.err.log',
242 | benchmark: 'sphyr/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.benchmark',
243 | shell:
244 | '{params.exec} {input.character_matrix} {output.result} '
245 | ' -a {params.fp} -b {params.fn} -lT {params.lT} -lC {wildcards.ncharacters} -k {wildcards.k} -v '
246 | ' > {log.std} 2> {log.err} '
247 |
248 | rule scite:
249 | output:
250 | result='scite/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_ml0.newick',
251 | input:
252 | character_matrix='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_scite.txt',
253 | params:
254 | prefix='scite/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}',
255 | niter=config['scite_niter'],
256 | nrestarts=config['scite_nrestarts'],
257 | exec=config['scite_exec'],
258 | fn=config['estimated_fn'],
259 | fp=config['estimated_fp'],
260 | benchmark: 'scite/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.benchmark',
261 | log:
262 | std='scite/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.log',
263 | err='scite/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.err.log',
264 | shell:
265 | '{params.exec} -i {input.character_matrix} -n {wildcards.ncharacters} -m {wildcards.ncells} -o {params.prefix} -a '
266 | ' -cc 0 -l {params.niter} -r {params.nrestarts} -fd {params.fp} -ad {params.fn} 0 -max_treelist_size 1 '
267 | ' > {log.std} 2> {log.err} '
268 |
269 | rule sifit:
270 | output:
271 | result="sifit/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_mlTree.newick",
272 | input:
273 | character_matrix='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_sifit.txt',
274 | params:
275 | input_prefix='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}',
276 | output_prefix='sifit/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}',
277 | exec=config['sifit_exec'],
278 | niter=config['sifit_niter'],
279 | nrestarts=config['sifit_nrestarts'],
280 | fn=config['estimated_fn'],
281 | fp=config['estimated_fp'],
282 | benchmark: "sifit/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.benchmark",
283 | log:
284 | std = "sifit/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.log",
285 | err = "sifit/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.err.log",
286 | shell:
287 | "java -jar {params.exec} -ipMat {input.character_matrix} -m {wildcards.ncells} -n {wildcards.ncharacters} -df 0 "
288 | " -l {params.niter} -r {params.nrestarts} -fp {params.fp} -fn {params.fn} "
289 | " > {log.std} 2> {log.err}; mv {params.input_prefix}_sifit_mlTree.newick {params.output_prefix}_mlTree.newick"
290 |
291 | def parse_sifit_fn(wc):
292 | with open(f'sifit/n{wc.ncells}_m{wc.ncharacters}_p{wc.nclusters}_k{wc.k}_d{wc.missing}_s{wc.seed}.log', 'r') as inp:
293 | for line in inp:
294 | if line.startswith('best false negative rate'):
295 | return float(line.rstrip('\n').split(' ')[-1])
296 |
297 | def parse_sifit_w(wc):
298 | with open(f'sifit/n{wc.ncells}_m{wc.ncharacters}_p{wc.nclusters}_k{wc.k}_d{wc.missing}_s{wc.seed}.log', 'r') as inp:
299 | for line in inp:
300 | if line.startswith('best LOH parameter'):
301 | return float(line.rstrip('\n').split(' ')[-1])
302 |
303 | def parse_sifit_d(wc):
304 | with open(f'sifit/n{wc.ncells}_m{wc.ncharacters}_p{wc.nclusters}_k{wc.k}_d{wc.missing}_s{wc.seed}.log', 'r') as inp:
305 | for line in inp:
306 | if line.startswith('best deletion parameter'):
307 | return float(line.rstrip('\n').split(' ')[-1])
308 |
309 | rule sifit_ancestral:
310 | output:
311 | sifit_ancestral='sifit/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_character_matrix.tsv',
312 | input:
313 | sifit_newick="sifit/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_mlTree.newick",
314 | sifit_log='sifit/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.log',
315 | cell_names='auxiliary/n{ncells}_m{ncharacters}_cell_names.txt',
316 | gene_names='auxiliary/n{ncells}_m{ncharacters}_gene_names.txt',
317 | character_matrix='ground_truth/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_sifit.txt',
318 | params:
319 | inferred_fn=parse_sifit_fn,
320 | inferred_w=parse_sifit_w,
321 | inferred_d=parse_sifit_d,
322 | fp=config['estimated_fp'],
323 | exec=config['sifit_exec'],
324 | benchmark: "sifit/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.ancestral.benchmark",
325 | log:
326 | std = "sifit/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.ancestral.log",
327 | err = "sifit/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.ancestral.err.log",
328 | shell:
329 | " java -cp {params.exec} SiFit.algorithm.InferAncestralStates -ipMat {input.character_matrix} -tree {input.sifit_newick} "
330 | " -cellNames {input.cell_names} -geneNames {input.gene_names} -expectedMatrix {output.sifit_ancestral} "
331 | " -fp {params.fp} -fn {params.inferred_fn} -w {params.inferred_w} -d {params.inferred_d} -df 0 "
332 | " > {log.std} 2> {log.err}"
333 |
334 |
335 | def get_method_output(wc):
336 | ncells = wc.ncells
337 | ncharacters = wc.ncharacters
338 | nclusters = wc.nclusters
339 | k = wc.k
340 | missing = wc.missing
341 | seed = wc.seed
342 |
343 | if wc.method == 'scite':
344 | return 'scite/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_ml0.newick'
345 | if wc.method == 'sphyr':
346 | return 'sphyr/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.out'
347 | if wc.method == 'condor':
348 | return 'condor/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_B.csv'
349 | if wc.method == 'condorreads':
350 | return 'condor_reads/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_B.csv'
351 | if wc.method == 'sifit':
352 | return 'sifit/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_character_matrix.tsv'
353 | if wc.method == 'scarlet':
354 | return 'scarlet/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}.edgelist'
355 |
356 | rule evaluate:
357 | output:
358 | result='results/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_{method}.csv',
359 | input:
360 | method_output=get_method_output,
361 | params:
362 | sim_dir=config['sim_dir'],
363 | log:
364 | std='results/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_{method}.log',
365 | err='results/n{ncells}_m{ncharacters}_p{nclusters}_k{k}_d{missing}_s{seed}_{method}.err.log',
366 | shell:
367 | "python ../../src/evaluate_reads.py -s {wildcards.seed} --method {wildcards.method} -o {output.result} "
368 | " -n {wildcards.ncells} -m {wildcards.ncharacters} -d {wildcards.missing} "
369 | " -p {wildcards.nclusters} -k {wildcards.k} "
370 | " --dir {params.sim_dir} "
371 | " > {log.std} 2> {log.err} "
372 |
--------------------------------------------------------------------------------
/data/simulation/config.yaml:
--------------------------------------------------------------------------------
1 | # simulation parameters
2 | ncells:
3 | - 25
4 | - 50
5 | - 100
6 | #- 1000
7 |
8 | ncharacters:
9 | - 25
10 | - 50
11 | - 100
12 |
13 | nclusters:
14 | - 3
15 | - 5
16 |
17 | fp: 0.001
18 | fn: 0.001
19 | lambda: 0.8
20 |
21 | missing_rate:
22 | - 0
23 | - 0.1
24 |
25 | k:
26 | - 1
27 | - 2
28 | - 3
29 |
30 | vaf_threshold: 0.1
31 | read_threshold: 5
32 |
33 | estimated_fp: 0.0018
34 | estimated_fn: 0.16
35 |
36 | nseeds: 5
37 |
38 | # scarlet parameters
39 | python2_exec: '/n/fs/ragr-data/users/palash/anaconda3/envs/scarlet/bin/python2'
40 | scarlet_exec: '/n/fs/ragr-data/users/palash/scarlet/code/scarlet.py'
41 | scarlet_plot_exec: '/n/fs/ragr-data/users/palash/scarlet/code/plot_tree.py'
42 |
43 | # sphyr parameters
44 | sphyr_exec: '/n/fs/ragr-data/users/palash/SPhyR/build/kDPFC'
45 |
46 | # scite parameters
47 | scite_nrestarts: 1
48 | scite_niter: 1000000
49 | scite_exec: '/n/fs/ragr-data/users/palash/SCITE/scite'
50 |
51 | # sifit parameters
52 | sifit_nrestarts: 1
53 | sifit_niter: 1000000
54 | sifit_exec: '/n/fs/ragr-data/users/palash/SiFit/SiFit.jar'
55 |
56 | # evaluation parameters
57 | eval_methods:
58 | - condorreads
59 | - sphyr
60 | - scite
61 | - sifit
62 | - scarlet
63 |
64 | sim_dir: '/n/fs/ragr-data/users/palash/constrained-Dollo/data/simulation_reads/'
65 |
--------------------------------------------------------------------------------
/scripts/auxiliary.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 | """
4 | Created on Wed May 28 2022
5 |
6 | @author: Palash Sashittal
7 | """
8 |
9 | import pandas as pd
10 | import sys
11 | import argparse
12 | import math
13 | import numpy as np
14 |
15 | def main(args):
16 |
17 | n = args.n
18 | m = args.m
19 | prefix = args.o
20 | cell_names_string = ' '.join([f'sc{idx}' for idx in range(1,n+1)])
21 |
22 | with open(f'{prefix}_cell_names.txt', 'w') as out:
23 | out.write(cell_names_string)
24 |
25 | with open(f'{prefix}_gene_names.txt', 'w') as out:
26 | for idx in range(m):
27 | out.write(f'{idx}\n')
28 |
29 |
30 | if __name__ == "__main__":
31 | parser = argparse.ArgumentParser()
32 | parser.add_argument('-n', type=int, help='number of samples', required=True)
33 | parser.add_argument('-m', type=int, help='number of SNV mutations', required=True)
34 | parser.add_argument('-o', type=str, help='output prefix', required=True)
35 | args = parser.parse_args(None if sys.argv[1:] else ['-h'])
36 |
37 | main(args)
38 |
--------------------------------------------------------------------------------
/scripts/fix_scarlet_output.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 | """
4 | Created on Wed Jun 14 2022
5 |
6 | @author: Palash Sashittal
7 | """
8 |
9 | import pandas as pd
10 | import sys
11 | import argparse
12 | import itertools
13 | import math
14 | import numpy as np
15 |
16 | import networkx as nx
17 |
18 | def main(args):
19 |
20 | df_B_ancestor = pd.read_csv(args.i, index_col = 0)
21 | df_character_matrix = pd.read_csv(args.d, index_col = 0)
22 |
23 | df_B_ancestor_fixed = df_B_ancestor.copy()
24 | for cell in df_character_matrix.index:
25 | if cell not in df_B_ancestor.index:
26 | cluster_id = df_character_matrix.loc[cell]['cluster_id']
27 | ancestor_data = df_B_ancestor.loc[f'ANC:{cluster_id}']
28 | ancestor_data['CN'] = cluster_id
29 | df_B_ancestor_fixed.loc[cell] = ancestor_data
30 |
31 | df_B_ancestor_fixed.to_csv(f'{args.o}.B_ancestor_fixed')
32 |
33 | if __name__ == "__main__":
34 | parser = argparse.ArgumentParser()
35 | parser.add_argument('-i', type=str, help='possibly incorrect scarlet file', required=True)
36 | parser.add_argument('-d', type=str, help='input character matrix', required=True)
37 | parser.add_argument('-o', type=str, help='output prefix', required=True)
38 | args = parser.parse_args(None if sys.argv[1:] else ['-h'])
39 |
40 | main(args)
--------------------------------------------------------------------------------
/src/condor.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 | """
4 | Created on Wed Mar 5 2021
5 |
6 | @author: Palash Sashittal
7 | """
8 |
9 | import pandas as pd
10 | import sys
11 | import argparse
12 | import itertools
13 | import math
14 | import numpy as np
15 |
16 | from solveConstrainedDollo import solveConstrainedDollo
17 |
18 | def tree_to_newick(T, root=None):
19 | if root is None:
20 | roots = list(filter(lambda p: p[1] == 0, T.in_degree()))
21 | assert 1 == len(roots)
22 | root = roots[0][0]
23 | subgs = []
24 | while len(T[root]) == 1:
25 | root = list(T[root])[0]
26 | for child in T[root]:
27 | while len(T[child]) == 1:
28 | child = list(T[child])[0]
29 | if len(T[child]) > 0:
30 | child_newick = tree_to_newick(T, root=child)
31 | if child_newick != '()':
32 | subgs.append(child_newick)
33 | else:
34 | #if child.startswith('s'):
35 | subgs.append(child)
36 | # return "(" + ','.join(map(str, subgs)) + ")"
37 | if len(subgs) == 1:
38 | return str(subgs[0])
39 | else:
40 | return "(" + ','.join(map(str, subgs)) + ")"
41 |
42 | def main(args):
43 |
44 | df_character_matrix = pd.read_csv(f'{args.i}', index_col = 0)
45 | if args.r is not None:
46 | df_total_readcounts = pd.read_csv(f'{args.r}', index_col = 0)
47 | if args.v is not None:
48 | df_variant_readcounts = pd.read_csv(f'{args.v}', index_col = 0)
49 |
50 | snp_list = []
51 | if args.s is not None:
52 | with open(args.s, 'r') as inp:
53 | for line in inp:
54 | snp_list.append(line.rstrip('\n'))
55 |
56 | k = args.k
57 | fp = args.a
58 | fn = args.b
59 | ado = args.ado
60 |
61 | if args.r is not None:
62 | solver = solveConstrainedDollo(df_character_matrix, df_total_readcounts=df_total_readcounts,
63 | df_variant_readcounts=df_variant_readcounts, k=k, fp=fp, fn=fn,
64 | ado_precision = ado, snp_list=snp_list)
65 | else:
66 | solver = solveConstrainedDollo(df_character_matrix, k=k, fp=fp, fn=fn)
67 |
68 | solver.solveSetInclusion()
69 |
70 | prefix = args.o
71 | solver.writeSolution(f'{prefix}_B.csv')
72 | solver.writeDOT(f'{prefix}_tree.dot')
73 | solver.writeDOT(f'{prefix}_tree_without_cells.dot', withcells=False)
74 |
75 | if solver.solT_cell is not None:
76 | with open(f'{prefix}_tree.newick', 'w') as out:
77 | out.write(tree_to_newick(solver.solT_cell) + ';')
78 |
79 | if __name__ == "__main__":
80 | parser = argparse.ArgumentParser()
81 | parser.add_argument('-i', type=str, help='csv file with mutation matrix and cluster id')
82 | parser.add_argument('-r', type=str, help='csv file with total read count matrix')
83 | parser.add_argument('-v', type=str, help='csv file with variant read count matrix')
84 | # parser.add_argument('--ado', type=float, help='allelic dropout rate [0.15]', default=0.15)
85 | parser.add_argument('-s', type=str, help='file containing list of SNPs')
86 | parser.add_argument('-a', type=float, help='false positive error rate [0.001]', default = 0.001)
87 | parser.add_argument('-b', type=float, help='false negative error rate [0.001]', default = 0.001)
88 | parser.add_argument('--ado', type=float, help='precision parameter for ADO', default=15)
89 | parser.add_argument('-k', type=int, help='maximum number of losses for an SNV', default = 0)
90 | parser.add_argument('-o', type=str, help='output prefix', required=True)
91 | parser.add_argument('-t', type=int, help='time limit in seconds [1800]', default = 1800)
92 |
93 | args = parser.parse_args(None if sys.argv[1:] else ['-h'])
94 |
95 | if args.i is None and (args.r is None and args.v is None):
96 | raise Exception("please provide either the binarized mutation matrix, or the total and variant readcount matrices!")
97 |
98 | main(args)
99 |
--------------------------------------------------------------------------------
/src/evaluate_reads.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 | """
4 | Created on Wed May 5 2022
5 |
6 | @author: Palash Sashittal
7 | """
8 |
9 | import pandas as pd
10 | import sys
11 | import argparse
12 | import itertools
13 | import math
14 | import numpy as np
15 |
16 | import networkx as nx
17 | import ete3
18 | from solveConstrainedDollo import solveConstrainedDollo
19 |
20 | sys.setrecursionlimit(1500)
21 |
22 | def get_scarlet_tree_dataframe(scarlet_fname, scarlet_edgelist_fname):
23 |
24 | df_corrected = pd.read_csv(scarlet_fname, index_col = 0)
25 |
26 | T_scarlet_nx = nx.DiGraph()
27 | with open(scarlet_edgelist_fname, 'r') as inp:
28 | for line in inp:
29 | nodes = line.rstrip('\n').split(',')
30 | parent_node = nodes[0].split(' ')[0]
31 | child_node = nodes[1].split(' ')[0]
32 |
33 | parent_type = parent_node.split(':')[0]
34 | parent_name = parent_node.split(':')[1]
35 | child_type = child_node.split(':')[0]
36 | child_name = child_node.split(':')[1]
37 |
38 | if parent_type == 'ROOT':
39 | parent_node_name = f'r{parent_name}'
40 | elif parent_type == 'MUT':
41 | parent_node_name = f'{parent_name}_1'
42 | else:
43 | parent_node_name = parent_name
44 |
45 | if child_type == 'ROOT':
46 | child_node_name = f'r{child_name}'
47 | elif child_type == 'MUT':
48 | child_node_name = f'{child_name}_1'
49 | else:
50 | child_node_name = child_name
51 |
52 | T_scarlet_nx.add_edge(parent_node_name, child_node_name)
53 |
54 | Tsol = ete3.Tree(tree_to_newick(T_scarlet_nx) + ';')
55 |
56 | return Tsol, df_corrected, T_scarlet_nx
57 |
58 | def get_condor_tree_dataframe(condor_fname, condor_newick):
59 | df_multi = pd.read_csv(condor_fname, index_col = 0)
60 |
61 | df_corrected = df_multi.copy()
62 | df_corrected[df_corrected > 1] = 0
63 |
64 | Tsol = ete3.Tree(condor_newick, format=1)
65 |
66 | df_binary = solveConstrainedDollo.expand_multi_state_to_binary(df_multi)
67 | _, nxtree_condor = solveConstrainedDollo.generate_perfect_phylogeny(df_binary)
68 |
69 | return Tsol, df_corrected, nxtree_condor
70 |
71 | def read_sphyr(fname):
72 |
73 | with open(fname, 'r') as inp:
74 | idx = 0
75 | data = []
76 | for line in inp:
77 | if idx == 0:
78 | n = int(line.split(' ')[0])
79 | elif idx == 1:
80 | m = int(line.split(' ')[0])
81 | else:
82 | data.append(list(map(int, line.split(' '))))
83 | idx += 1
84 |
85 | return pd.DataFrame(data, columns = [f'c{idx}' for idx in range(m)], index = [f's{idx}' for idx in range(n)])
86 |
87 | def tree_to_newick(T, root=None):
88 | if root is None:
89 | roots = list(filter(lambda p: p[1] == 0, T.in_degree()))
90 | assert 1 == len(roots)
91 | root = roots[0][0]
92 | subgs = []
93 | while len(T[root]) == 1:
94 | root = list(T[root])[0]
95 | for child in T[root]:
96 | while len(T[child]) == 1:
97 | child = list(T[child])[0]
98 | if len(T[child]) > 0:
99 | child_newick = tree_to_newick(T, root=child)
100 | if child_newick != '()':
101 | subgs.append(child_newick)
102 | else:
103 | if child.startswith('s'):
104 | subgs.append(child)
105 | # return "(" + ','.join(map(str, subgs)) + ")"
106 | if len(subgs) == 1:
107 | return str(subgs[0])
108 | else:
109 | return "(" + ','.join(map(str, subgs)) + ")"
110 |
111 | def get_sphyr_tree_dataframe(sphyr_fname):
112 |
113 | df_multi = read_sphyr(sphyr_fname)
114 | df_binary = solveConstrainedDollo.expand_multi_state_to_binary(df_multi)
115 | _, nxtree_sphyr = solveConstrainedDollo.generate_perfect_phylogeny(df_binary)
116 |
117 | df_corrected = df_multi.copy()
118 | df_corrected[df_corrected > 1] = 0
119 |
120 | T_sphyr = ete3.Tree(tree_to_newick(nxtree_sphyr)+';', format=1)
121 |
122 | return T_sphyr, df_corrected, nxtree_sphyr
123 |
124 | def get_sifit_tree_dataframe(sifit_fname, sifit_newick):
125 | df_corrected = pd.read_csv(sifit_fname, sep='\t', header=None, index_col = 0)
126 | n = len(df_corrected)
127 | m = len(df_corrected.columns)
128 |
129 | df_corrected.rename(columns={idx: f'c{idx-1}' for idx in range(1,m+1)}, index={f'sc{idx}': f's{idx-1}' for idx in range(1, n+1)}, inplace=True)
130 | df_corrected = df_corrected.loc[[f's{idx}' for idx in range(n)]]
131 | df_corrected = df_corrected.sort_index()
132 |
133 | sifit_newick_string = ''
134 | with open(sifit_newick, 'r') as inp:
135 | for line in inp:
136 | sifit_newick_string += line.rstrip('\n')
137 |
138 | mod_sifit_newick_list = []
139 | for idx, string in enumerate(sifit_newick_string.split('sc')):
140 | if idx == 0:
141 | mod_sifit_newick_list.append(string)
142 | else:
143 | splited_string = string.split(':')
144 | splited_string[0] = str(int(splited_string[0]) - 1)
145 | mod_string = ':'.join(splited_string)
146 | mod_sifit_newick_list.append('s' + mod_string)
147 |
148 | T_sifit = ete3.Tree(''.join(mod_sifit_newick_list))
149 |
150 | return T_sifit, df_corrected
151 |
152 | def get_scite_tree_dataframe(n, m, gv_fname):
153 |
154 | # scite_nx_tree = nx.DiGraph()
155 | # with open(gv_fname, 'r') as inp:
156 | # for line in inp:
157 | # if not line.startswith('digraph') and not line.startswith('node') and not line.startswith('}'):
158 | # data = line.rstrip(';\n').split(' -> ')
159 | # scite_nx_tree.add_edge(data[0], data[1])
160 | # T_scite = ete3.Tree(tree_to_newick(scite_nx_tree) + ';')
161 |
162 | gv_file = open(gv_fname, 'r')
163 | gv_file.readline()
164 | gv_file.readline()
165 |
166 | pi = [-2 for i in range(m+1)]
167 | for _ in range(m):
168 | line = gv_file.readline()
169 | data = line.rstrip(";\n").split()
170 | source = int(data[0]) - 1
171 | target = int(data[2]) - 1
172 | assert 0 <= target < m
173 | parent = -2
174 | if source == m:
175 | parent = -1
176 | else:
177 | parent = source
178 | pi[target] = parent
179 |
180 | samples = [-2 for i in range(n)]
181 | gv_file.readline()
182 |
183 | for _ in range(n):
184 | line = gv_file.readline()
185 | data = line.rstrip(";\n").split()
186 | source = int(data[0]) - 1
187 | target = int(data[2][1:])
188 | parent = -2
189 | if source == n:
190 | parent = -1
191 | else:
192 | parent = source
193 | samples[target] = source
194 |
195 | scite_corrected = []
196 | for p in range(len(samples)):
197 | states = [ 0 for c in range(len(pi)) ]
198 | parent = samples[p]
199 | while parent != -1:
200 | #print p, parent
201 | states[parent] = 1
202 | parent = pi[parent]
203 | scite_corrected.append(states[:len(pi) - 1])
204 |
205 | df_corrected = pd.DataFrame(scite_corrected, columns = [f'c{idx}' for idx in range(m)], index = [f's{idx}' for idx in range(n)])
206 |
207 | df_corrected_modified = df_corrected.copy()
208 | df_corrected_modified.columns = [f'{x}_1' for x in df_corrected.columns]
209 | _, nxtree_scite = solveConstrainedDollo.generate_perfect_phylogeny(df_corrected_modified)
210 | T_scite = ete3.Tree(tree_to_newick(nxtree_scite) + ';')
211 |
212 | return T_scite, df_corrected, nxtree_scite
213 |
214 | def get_descendant_mutations(T, node):
215 | if node not in T.nodes:
216 | return []
217 | if node.startswith('c'):
218 | descendants = [node]
219 | else:
220 | return []
221 | for child in T[node]:
222 | descendants += get_descendant_mutations(T, child)
223 | return descendants
224 |
225 | def get_clustered_mutations(T, node):
226 | if node not in T.nodes:
227 | return []
228 | if node.startswith('c'):
229 | clustered = [node]
230 | if len(list(T[node])) == 1:
231 | child = list(T[node])[0]
232 | if child.startswith('c'):
233 | clustered += get_clustered_mutations(T, child)
234 | else:
235 | return []
236 | return clustered
237 |
238 | def main(args):
239 |
240 | n = args.n
241 | m = args.m
242 | p = args.p
243 | k = args.k
244 | d = args.d
245 | if d == 0:
246 | d = int(d)
247 | s = args.s
248 |
249 | output_fname = args.o
250 |
251 | method = args.method
252 | simulation_dir = args.dir
253 |
254 | if method == 'condor':
255 |
256 | condor_fname = f'{simulation_dir}/condor/n{n}_m{m}_p{p}_k{k}_d{d}_s{s}_B.csv'
257 | condor_newick = f'{simulation_dir}/condor/n{n}_m{m}_p{p}_k{k}_d{d}_s{s}_tree.newick'
258 | Tsol, df_corrected, nxtree_sol = get_condor_tree_dataframe(condor_fname, condor_newick)
259 |
260 | if method == 'condorreads':
261 |
262 | condor_fname = f'{simulation_dir}/condor_reads/n{n}_m{m}_p{p}_k{k}_d{d}_s{s}_B.csv'
263 | condor_newick = f'{simulation_dir}/condor_reads/n{n}_m{m}_p{p}_k{k}_d{d}_s{s}_tree.newick'
264 | Tsol, df_corrected, nxtree_sol = get_condor_tree_dataframe(condor_fname, condor_newick)
265 |
266 | elif method == 'sphyr':
267 |
268 | sphyr_fname = f'{simulation_dir}/sphyr/n{n}_m{m}_p{p}_k{k}_d{d}_s{s}.out'
269 | Tsol, df_corrected, nxtree_sol = get_sphyr_tree_dataframe(sphyr_fname)
270 |
271 | elif method == 'sifit':
272 |
273 | sifit_fname = f'{simulation_dir}/sifit/n{n}_m{m}_p{p}_k{k}_d{d}_s{s}_character_matrix.tsv'
274 | sifit_newick = f'{simulation_dir}/sifit/n{n}_m{m}_p{p}_k{k}_d{d}_s{s}_mlTree.newick'
275 |
276 | Tsol, df_corrected = get_sifit_tree_dataframe(sifit_fname, sifit_newick)
277 |
278 | elif method == 'scite':
279 |
280 | # scite_newick = f'{simulation_dir}/scite/n{n}_m{m}_p{p}_k{k}_d{d}_s{s}_ml0.newick'
281 | scite_gv_fname = f'{simulation_dir}/scite/n{n}_m{m}_p{p}_k{k}_d{d}_s{s}_ml0.gv'
282 | Tsol, df_corrected, nxtree_sol = get_scite_tree_dataframe(n, m, scite_gv_fname)
283 |
284 | elif method == 'scarlet':
285 |
286 | scarlet_fname = f'{simulation_dir}/scarlet/n{n}_m{m}_p{p}_k{k}_d{d}_s{s}.B'
287 | scarlet_edgelist_fname = f'{simulation_dir}/scarlet/n{n}_m{m}_p{p}_k{k}_d{d}_s{s}.edgelist'
288 | Tsol, df_corrected, nxtree_sol = get_scarlet_tree_dataframe(scarlet_fname, scarlet_edgelist_fname)
289 |
290 | # evaluate
291 | gt_fname = f'{simulation_dir}/ground_truth/n{n}_m{m}_p{p}_k{k}_d{d}_s{s}_character_matrix_without_noise.csv'
292 | gt_newick = f'{simulation_dir}/ground_truth/n{n}_m{m}_p{p}_k{k}_d{d}_s{s}_tree.newick'
293 | gt_multi = f'{simulation_dir}/ground_truth/n{n}_m{m}_p{p}_k{k}_d{d}_s{s}_multi_state_character_matrix.csv'
294 | df_character_matrix = pd.read_csv(gt_fname, index_col = 0)
295 | df_character_matrix = df_character_matrix[df_character_matrix.columns[:-1]]
296 | Tground = ete3.Tree(gt_newick, format=1)
297 | df_Bcell = pd.read_csv(gt_multi, index_col = 0)
298 | _, nxtree_gt = solveConstrainedDollo.generate_perfect_phylogeny(solveConstrainedDollo.expand_multi_state_to_binary(df_Bcell[df_Bcell.columns[:-1]]))
299 |
300 | # RF metric
301 | (rf, rf_max, names, edges_t1, edges_t2, discarded_edges_t1, discarded_edges_t2) = Tground.robinson_foulds(Tsol, unrooted_trees=True)
302 | # mutation error
303 | nerror = np.sum(abs(df_corrected - df_character_matrix).values)
304 |
305 | # recall for ancestry and incomparibility
306 | if method != 'sifit':
307 | sol_descendant_dictionary = {}
308 | for mutation_idx in range(m):
309 | sol_descendant_dictionary[f'c{mutation_idx}_1'] = get_descendant_mutations(nxtree_sol, f'c{mutation_idx}_1')
310 |
311 | sol_clustered_dictionary = {}
312 | for mutation_idx in range(m):
313 | sol_clustered_dictionary[f'c{mutation_idx}_1'] = get_clustered_mutations(nxtree_sol, f'c{mutation_idx}_1')
314 |
315 | gt_descendant_dictionary = {}
316 | for mutation_idx in range(m):
317 | gt_descendant_dictionary[f'c{mutation_idx}_1'] = get_descendant_mutations(nxtree_gt, f'c{mutation_idx}_1')
318 |
319 | gt_clustered_dictionary = {}
320 | for mutation_idx in range(m):
321 | gt_clustered_dictionary[f'c{mutation_idx}_1'] = get_clustered_mutations(nxtree_gt, f'c{mutation_idx}_1')
322 |
323 | # confusion_mat = np.zeros((3,3))
324 | # for mutation_idx1, mutation_idx2 in itertools.combinations(range(m), 2):
325 | # mutation1 = f'c{mutation_idx1}_1'
326 | # mutation2 = f'c{mutation_idx2}_1'
327 |
328 | # if mutation2 in sol_descendant_dictionary[mutation1] and mutation1 in sol_descendant_dictionary[mutation2]:
329 | # print('problem sol')
330 | # print(mutation1, mutation2)
331 | # raise ValueError
332 | # break
333 |
334 | # x_idx = 2
335 | # if mutation2 in sol_descendant_dictionary[mutation1]:
336 | # x_idx = 0
337 | # if mutation1 in sol_descendant_dictionary[mutation2]:
338 | # x_idx = 1
339 |
340 | # if mutation2 in gt_descendant_dictionary[mutation1] and mutation1 in gt_descendant_dictionary[mutation2]:
341 | # print('problem gt')
342 | # print(mutation1, mutation2)
343 | # raise ValueError
344 | # break
345 |
346 | # y_idx = 2
347 | # if mutation2 in gt_descendant_dictionary[mutation1]:
348 | # y_idx = 0
349 | # if mutation1 in gt_descendant_dictionary[mutation2]:
350 | # y_idx = 1
351 |
352 | # confusion_mat[x_idx, y_idx] += 1
353 |
354 | confusion_mat = np.zeros((4,4))
355 | for mutation_idx1, mutation_idx2 in itertools.combinations(range(m), 2):
356 | mutation1 = f'c{mutation_idx1}_1'
357 | mutation2 = f'c{mutation_idx2}_1'
358 |
359 | if mutation2 in sol_descendant_dictionary[mutation1] and mutation1 in sol_descendant_dictionary[mutation2]:
360 | print('problem sol')
361 | print(mutation1, mutation2)
362 | break
363 |
364 | x_idx = 3
365 | if mutation1 in sol_clustered_dictionary[mutation2] or mutation2 in sol_clustered_dictionary[mutation1]:
366 | x_idx = 2
367 | else:
368 | if mutation2 in sol_descendant_dictionary[mutation1]:
369 | x_idx = 0
370 | if mutation1 in sol_descendant_dictionary[mutation2]:
371 | x_idx = 1
372 |
373 | if mutation2 in gt_descendant_dictionary[mutation1] and mutation1 in gt_descendant_dictionary[mutation2]:
374 | print('problem gt')
375 | print(mutation1, mutation2)
376 | break
377 |
378 | y_idx = 3
379 | if mutation1 in gt_clustered_dictionary[mutation2] or mutation2 in gt_clustered_dictionary[mutation1]:
380 | y_idx = 2
381 | else:
382 | if mutation2 in gt_descendant_dictionary[mutation1]:
383 | y_idx = 0
384 | if mutation1 in gt_descendant_dictionary[mutation2]:
385 | y_idx = 1
386 |
387 | confusion_mat[x_idx, y_idx] += 1
388 |
389 | ancestry_recall = (confusion_mat[0,0] + confusion_mat[1,1]) / np.sum(confusion_mat[:,:2])
390 | # incomparability_recall = confusion_mat[2,2] / np.sum(confusion_mat[:,2])
391 | incomparability_recall = np.nan
392 | accuracy = np.trace(confusion_mat)/np.sum(confusion_mat)
393 | else:
394 | ancestry_recall = np.nan
395 | incomparability_recall = np.nan
396 | accuracy = np.nan
397 |
398 | df_result = pd.DataFrame([[n, m, p, k, d, s, method, rf, rf_max, nerror, ancestry_recall, incomparability_recall, accuracy]],
399 | columns = ['ncells', 'ncharacters', 'nclusters', 'k', 'dropout', 'seed', 'method',
400 | 'RF', 'RF_max', 'nerror', 'ancestry_recall', 'incomparibility_recall', 'relation_accuracy'])
401 |
402 | df_result.to_csv(f'{output_fname}')
403 |
404 | def str2bool(v):
405 | if isinstance(v, bool):
406 | return v
407 | if v.lower() in ('yes', 'true', 't', 'y', '1'):
408 | return True
409 | elif v.lower() in ('no', 'false', 'f', 'n', '0'):
410 | return False
411 | else:
412 | raise argparse.ArgumentTypeError('Boolean value expected.')
413 |
414 | if __name__ == "__main__":
415 | parser = argparse.ArgumentParser()
416 | parser.add_argument('-n', type=int, help='number of samples [5]', default = 5)
417 | parser.add_argument('-m', type=int, help='number of SNV mutations [5]', default = 5)
418 | parser.add_argument('-p', type=int, help='number of clusters [1]', default = 1)
419 | parser.add_argument('-k', type=int, help='number of SNV losses per character [0]', default = 0)
420 | parser.add_argument('-o', type=str, help='output filename', default='sample.csv')
421 | parser.add_argument('-s', type=int, help='seed [0]', default = 0)
422 | parser.add_argument('-d', type=float, help='missing data rate [0.0]', default=0)
423 | parser.add_argument('--dir', type=str, help='simulation directory', required=True)
424 | parser.add_argument('--method', type=str, help='method for comparison with ground truth', required=True)
425 | parser.add_argument('-v', action='store_true', default=False)
426 | args = parser.parse_args(None if sys.argv[1:] else ['-h'])
427 |
428 | main(args)
--------------------------------------------------------------------------------
/src/simulation_reads.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 | """
4 | Created on Wed Jun 29 2022
5 |
6 | @author: Palash Sashittal
7 | """
8 |
9 | import pandas as pd
10 | import sys
11 | import argparse
12 | import itertools
13 | import math
14 | import numpy as np
15 | from scipy.stats import betabinom
16 |
17 | import networkx as nx
18 |
19 | def writeDOT(T, dot_file):
20 | with open(dot_file, 'w') as output:
21 |
22 | output.write(f'digraph N {{\n')
23 | output.write(f"\toverlap=\"false\"\n")
24 | output.write(f"\trankdir=\"TB\"\n")
25 |
26 | idx_dict = {}
27 | idx = 0
28 | for node in T.nodes:
29 | idx_dict[node] = idx
30 | output.write(f'\t{idx} [label=\"{node}\", style=\"bold\"];\n')
31 | idx += 1
32 |
33 | for edge in T.edges:
34 | output.write(f"\t{idx_dict[edge[0]]} -> {idx_dict[edge[1]]} [style=\"bold\"];\n")
35 |
36 | output.write(f'}}')
37 |
38 | def tree_to_newick(T, root=None):
39 | if root is None:
40 | roots = list(filter(lambda p: p[1] == 0, T.in_degree()))
41 | assert 1 == len(roots)
42 | root = roots[0][0]
43 | subgs = []
44 | while len(T[root]) == 1:
45 | root = list(T[root])[0]
46 | for child in T[root]:
47 | while len(T[child]) == 1:
48 | child = list(T[child])[0]
49 | if len(T[child]) > 0:
50 | child_newick = tree_to_newick(T, root=child)
51 | if child_newick != '()':
52 | subgs.append(child_newick)
53 | else:
54 | if child.startswith('s'):
55 | subgs.append(child)
56 | # return "(" + ','.join(map(str, subgs)) + ")"
57 | if len(subgs) == 1:
58 | return str(subgs[0])
59 | else:
60 | return "(" + ','.join(map(str, subgs)) + ")"
61 |
62 | def main(args):
63 |
64 | np.random.seed(args.s)
65 |
66 | T = nx.DiGraph() # mutation tree
67 | Tc = nx.DiGraph() # copy number tree
68 |
69 | # add root nodes
70 | T.add_node('root')
71 | Tc.add_node(0)
72 |
73 | # build tree
74 | ncharacters = args.m
75 | nmutations = ncharacters
76 | nclusters = args.p
77 | max_losses = args.k
78 | max_cn = args.maxcn
79 | mutation_rate = args.l
80 | nnodes = ncharacters + nclusters
81 |
82 | character_list = [f'c{character_index}' for character_index in range(ncharacters)]
83 | cluster_list = [f'd{cluster_index}' for cluster_index in range(1, nclusters)]
84 | event_order = np.random.permutation(character_list + cluster_list)
85 | loss_counter = np.zeros((ncharacters, 1))
86 | loss_dictionary = {f'd{cluster_index}': [] for cluster_index in range(1, nclusters)}
87 |
88 | B = np.zeros((ncharacters + nclusters, ncharacters + 1), dtype=int)
89 | R = np.zeros((nclusters, ncharacters), dtype=int)
90 | R[0, :] = np.random.randint(max_cn - max_losses - 1, size = ncharacters) + max_losses + 1
91 |
92 | for node_index, event in enumerate(event_order):
93 | nprev_mutations = sum([1 for x in event_order[:node_index] if x.startswith('c')])
94 | node_index += 1
95 |
96 | if event.startswith('d') and nprev_mutations > 0:
97 | while parent_node.startswith('d') or parent_node == 'root':
98 | parent_node_index = np.random.randint(node_index)
99 | parent_node = list(T.nodes)[parent_node_index]
100 | else:
101 | parent_node_index = np.random.randint(node_index)
102 | parent_node = list(T.nodes)[parent_node_index]
103 |
104 | T.add_edge(parent_node, event)
105 | B[node_index, :] = B[parent_node_index, :]
106 | if event.startswith('d'):
107 | cluster_id = int(event.lstrip('d'))
108 | B[node_index, -1] = cluster_id
109 | parent_cluster_id = B[parent_node_index, -1]
110 | Tc.add_edge(parent_cluster_id, cluster_id)
111 | R[cluster_id, :] = R[parent_cluster_id, :]
112 |
113 | for mutation in range(ncharacters):
114 | if B[parent_node_index, mutation] == 1 and loss_counter[mutation] < max_losses:
115 | if np.random.rand() < mutation_rate:
116 | B[node_index, mutation] = loss_counter[mutation] + 2
117 | loss_counter[mutation] += 1
118 | loss_dictionary[event].append(mutation)
119 | R[cluster_id, mutation] -= 1
120 |
121 | elif event.startswith('c'):
122 | mutation = int(event.lstrip('c'))
123 | B[node_index, mutation] = 1
124 |
125 | if args.v:
126 | print(parent_node_index, parent_node, node_index, event)
127 |
128 | # randomize the copy number states for mutations that have never been lost
129 | for mutation in range(nmutations):
130 | if loss_counter[mutation] == 0:
131 | for cluster_id in range(nclusters):
132 | R[cluster_id, mutation] = np.random.randint(max_cn - 1) + 1
133 |
134 | # check that all copy number states are non-zer positive
135 | assert(len(np.where(R == 0)[0]) == 0)
136 |
137 | # check all SNV losses are supported by CNVs
138 | for cn_edge in Tc.edges:
139 | for mutation in loss_dictionary[f'd{cn_edge[1]}']:
140 | assert(R[cn_edge[0], mutation] > R[cn_edge[1], mutation])
141 |
142 | if args.v:
143 | print('-'*50)
144 | print('loss counter')
145 | print('-'*50)
146 | print(loss_counter)
147 | print('-'*50)
148 | print('loss dictionary')
149 | print('-'*50)
150 | print(loss_dictionary)
151 | print('-'*50)
152 | print('copy number states')
153 | print('-'*50)
154 | print(R)
155 |
156 | # assign cells and generate character-state matrix
157 | leaf_indices = []
158 | for idx, node in enumerate(T.nodes):
159 | if len(T[node]) == 0:
160 | leaf_indices.append(idx)
161 | nleaves = len(leaf_indices)
162 |
163 | ncells = args.n
164 | assert(ncells > nclusters)
165 | cell_assignment = np.random.randint(ncharacters, size=ncells-nleaves)
166 | complete_cell_assignment = list(cell_assignment) + leaf_indices
167 | Bcell = B[complete_cell_assignment, :]
168 |
169 | # observed matrix
170 | A = B.copy()
171 | for mutation in range(ncharacters):
172 | A[A[:,mutation] > 1, mutation] = 0
173 | Acell = A[complete_cell_assignment, :]
174 |
175 | # cell tree
176 | celltree = T.copy()
177 | for cell_id, assigned_node_index in enumerate(complete_cell_assignment):
178 | celltree.add_edge(list(T.nodes)[assigned_node_index], f's{cell_id}')
179 |
180 |
181 | # generate read counts
182 | mean_coverage = args.cov
183 | fp_rate = args.a
184 | fn_rate = args.b
185 | ado_precision = args.ado
186 |
187 | Rtotal = np.zeros((ncells, nmutations), dtype=int)
188 | Vcount = np.zeros((ncells, nmutations), dtype=int)
189 | for cell in range(ncells):
190 | for mutation in range(nmutations):
191 | cluster_id = Acell[cell, -1]
192 | nvariant = Acell[cell, mutation]
193 | ntotal = R[cluster_id, mutation]
194 |
195 | latent_vaf = nvariant / ntotal
196 |
197 | nreads = np.random.poisson(mean_coverage)
198 | Rtotal[cell, mutation] = int(nreads)
199 |
200 | post_error_vaf = fp_rate + (1 - fp_rate - fn_rate) * latent_vaf
201 | ado_alpha = post_error_vaf * ado_precision
202 | ado_beta = ado_precision * (1 - post_error_vaf)
203 | nvariant_reads = betabinom.rvs(nreads, ado_alpha, ado_beta)
204 |
205 | Vcount[cell, mutation] = int(nvariant_reads)
206 |
207 | # generate the binarized mutation matrix
208 | vaf_threshold = args.vafthreshold
209 | variant_read_threshold = args.readthreshold
210 | VAF_mat = Vcount / Rtotal
211 | mutation_mat = ((VAF_mat >= vaf_threshold) & (Vcount >= variant_read_threshold)).astype(int)
212 | mutation_mat = np.hstack((mutation_mat, Acell[:,-1][:,np.newaxis]))
213 |
214 | # introduce missing entries
215 | Acell_missing = Acell.copy()
216 | Rtotal_missing = Rtotal.copy()
217 | Vcount_missing = Vcount.copy()
218 | Acell_noisy = mutation_mat.copy()
219 |
220 | missing_rate = args.d
221 | n_entries = ncells * ncharacters
222 | nmissing = math.floor(missing_rate * n_entries)
223 | selected_cell_indices = np.random.randint(ncells, size=nmissing)
224 | selected_character_indices = np.random.randint(ncharacters, size=nmissing)
225 | Acell_missing[selected_cell_indices, selected_character_indices] = -1
226 | Rtotal_missing[selected_cell_indices, selected_character_indices] = 0
227 | Vcount_missing[selected_cell_indices, selected_character_indices] = 0
228 | Acell_noisy[selected_cell_indices, selected_character_indices] = -1
229 |
230 | # write ground truth files
231 | prefix = args.o
232 | with open(f'{prefix}_tree_edgelist.csv', 'w') as out:
233 | for edge in celltree.edges:
234 | out.write(f'{edge[0]},{edge[1]}\n')
235 |
236 | with open(f'{prefix}_tree.newick', 'w') as out:
237 | out.write(tree_to_newick(celltree) + ';')
238 |
239 | writeDOT(celltree, f'{prefix}_tree.dot')
240 |
241 | df_B = pd.DataFrame(B, index=list(T.nodes),
242 | columns = [f'c{idx}' for idx in range(ncharacters)] + ['cluster_id'], dtype=int)
243 | df_Bcell = pd.DataFrame(Bcell, index=[f's{idx}' for idx in range(ncells)],
244 | columns = [f'c{idx}' for idx in range(ncharacters)] + ['cluster_id'], dtype=int)
245 | df_Acell = pd.DataFrame(Acell, index=[f's{idx}' for idx in range(ncells)],
246 | columns = [f'c{idx}' for idx in range(ncharacters)] + ['cluster_id'], dtype=int)
247 | df_Acell_noisy = pd.DataFrame(Acell_noisy, index=[f's{idx}' for idx in range(ncells)],
248 | columns = [f'c{idx}' for idx in range(ncharacters)] + ['cluster_id'], dtype=int)
249 |
250 | df_Rtotal = pd.DataFrame(Rtotal, index=[f's{idx}' for idx in range(ncells)],
251 | columns = [f'c{idx}' for idx in range(ncharacters)], dtype=int)
252 | df_Vcount = pd.DataFrame(Vcount, index=[f's{idx}' for idx in range(ncells)],
253 | columns = [f'c{idx}' for idx in range(ncharacters)], dtype=int)
254 | df_Rtotal_missing = pd.DataFrame(Rtotal_missing, index=[f's{idx}' for idx in range(ncells)],
255 | columns = [f'c{idx}' for idx in range(ncharacters)], dtype=int)
256 | df_Vcount_missing = pd.DataFrame(Vcount_missing, index=[f's{idx}' for idx in range(ncells)],
257 | columns = [f'c{idx}' for idx in range(ncharacters)], dtype=int)
258 |
259 |
260 | df_B.to_csv(f'{prefix}_multi_state_tree_node_character_matrix.csv')
261 | df_Bcell.to_csv(f'{prefix}_multi_state_character_matrix.csv')
262 | df_Acell.to_csv(f'{prefix}_character_matrix_without_noise.csv')
263 | df_Acell_noisy.to_csv(f'{prefix}_character_matrix.csv')
264 |
265 | df_Rtotal.to_csv(f'{prefix}_read_count_without_missing.csv')
266 | df_Vcount.to_csv(f'{prefix}_variant_count_without_missing.csv')
267 | df_Rtotal_missing.to_csv(f'{prefix}_read_count.csv')
268 | df_Vcount_missing.to_csv(f'{prefix}_variant_count.csv')
269 |
270 | # scarlet data format
271 | scarlet_readcount_data = []
272 | scarlet_readcount_data_columns = ['cell_id', 'c']
273 | for mutation in df_Rtotal_missing.columns:
274 | scarlet_readcount_data_columns.append(f'{mutation}_v')
275 | scarlet_readcount_data_columns.append(f'{mutation}_t')
276 |
277 | for cell in df_Rtotal_missing.index:
278 | cell_readcount_data = [cell, df_Acell.loc[cell]['cluster_id']]
279 | for mutation in df_Rtotal_missing.columns:
280 | cell_readcount_data.append(df_Vcount_missing.loc[cell][mutation])
281 | cell_readcount_data.append(df_Rtotal_missing.loc[cell][mutation])
282 | scarlet_readcount_data.append(cell_readcount_data)
283 |
284 | df_scarlet_readcounts = pd.DataFrame(scarlet_readcount_data, columns = scarlet_readcount_data_columns)
285 | df_scarlet_readcounts = df_scarlet_readcounts.set_index('cell_id')
286 | df_scarlet_readcounts.to_csv(f'{prefix}_readcounts_scarlet.csv')
287 |
288 | with open(f'{prefix}_copynumbertree_scarlet.txt', 'w') as out:
289 | for edge in Tc.edges:
290 | edge_data = [edge[0], edge[1]]
291 | for mutation in range(nmutations):
292 | if R[edge[0],mutation] > R[edge[1],mutation]:
293 | edge_data.append(f'c{mutation}')
294 | out.write(','.join(map(str,edge_data)) + '\n')
295 |
296 | # sphyr data format
297 | with open(f'{prefix}_sphyr.txt', 'w') as out:
298 | out.write(f'{len(df_Acell_noisy)}\n')
299 | out.write(f'{len(df_Acell_noisy.columns) - 1}\n')
300 |
301 | for idx, row in df_Acell_noisy.iterrows():
302 | out.write(f"{' '.join(map(str,row.values[:-1]))}\n")
303 |
304 |
305 | # SCITE data format
306 | Acell_noisy_scite = Acell_noisy[:,:-1].T.copy().astype(int)
307 | Acell_noisy_scite[Acell_noisy_scite == -1] = 3
308 | np.savetxt(f"{prefix}_scite.txt", Acell_noisy_scite, delimiter=" ", fmt='%d')
309 |
310 | # SIFIT data format
311 | np.savetxt(f"{prefix}_sifit.txt", np.hstack((np.arange(Acell_noisy_scite.shape[0])[:,None], Acell_noisy_scite)), delimiter=" ", fmt='%d')
312 |
313 | # PhiSCS data format
314 | Acell_noisy_scite_str = Acell_noisy_scite.astype(str)
315 | Acell_noisy_scite_str = np.char.replace(Acell_noisy_scite_str, '3', '?').T
316 | snv_mat_phiscs = np.vstack((np.hstack((np.array([['cell_idx/mut_idx']]), np.array(df_Acell_noisy.columns)[np.newaxis,:-1])),
317 | np.hstack((np.array(df_Acell_noisy.index)[:,np.newaxis], Acell_noisy_scite_str))))
318 | np.savetxt(f"{prefix}_phiscs.txt", snv_mat_phiscs, delimiter="\t", fmt='%s')
319 |
320 | if __name__ == "__main__":
321 | parser = argparse.ArgumentParser()
322 | parser.add_argument('-n', type=int, help='number of samples [5]', default = 5)
323 | parser.add_argument('-m', type=int, help='number of SNV mutations [5]', default = 5)
324 | parser.add_argument('-p', type=int, help='number of clusters [1]', default = 1)
325 | parser.add_argument('-k', type=int, help='number of SNV losses per character [0]', default = 0)
326 | parser.add_argument('-o', type=str, help='output prefix', default='sample')
327 | parser.add_argument('-s', type=int, help='seed [0]', default = 0)
328 | parser.add_argument('-d', type=float, help='missing data rate [0.0]', default=0)
329 | parser.add_argument('--cov', type=int, help='coverage of read count [50]', default = 50)
330 | parser.add_argument('-a', type=float, help='false positive error rate', default = 0)
331 | parser.add_argument('-b', type=float, help='false negative error rate', default = 0)
332 | parser.add_argument('--ado', type=float, help='precision parameter for ado [15]', default = 15)
333 | parser.add_argument('--maxcn', type=float, help='maximum allowed copy number [8]', default = 8)
334 | parser.add_argument('--readthreshold', type=int, help='variant read count threshold for generating the mutation matrix [5]', default=5)
335 | parser.add_argument('--vafthreshold', type=float, help='VAF threshold for generating the mutation matrix [0.1]', default = 0.1)
336 | parser.add_argument('-l', type=float, help='rate of mutation loss [0.8]', default = 0.8)
337 | parser.add_argument('-v', action='store_true', default=False)
338 | args = parser.parse_args(None if sys.argv[1:] else ['-h'])
339 |
340 | main(args)
--------------------------------------------------------------------------------
/src/solveConstrainedDollo.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 | """
4 | Created on Wed May 5 2022
5 |
6 | @author: Palash Sashittal
7 | """
8 |
9 | import gurobipy as gp
10 | import numpy as np
11 | import pandas as pd
12 | import networkx as nx
13 | import itertools
14 | from scipy.stats import betabinom
15 |
16 | # minimum correction tree parsimonious clone reconciliation problem
17 | class solveConstrainedDollo():
18 |
19 | def __init__(self, df_character_matrix, df_total_readcounts = None, df_variant_readcounts = None, snp_list = [],
20 | k = None, fp = None, fn = None, ado_precision = 15, threads = 1, timelimit = None, verbose = True):
21 |
22 | # input character matrix and clustering
23 | self.df_character_matrix = df_character_matrix
24 | self.clustering = self.df_character_matrix['cluster_id'].values
25 | self.A = df_character_matrix.values[:, :-1]
26 | self.snp_list = snp_list
27 | self.mutation_list = list(df_character_matrix.columns[:-1])
28 |
29 | # input data parameters
30 | self.ncells = len(self.df_character_matrix)
31 | self.nclusters = len(self.df_character_matrix['cluster_id'].unique())
32 | self.nmutations = len(self.df_character_matrix.columns) - 1
33 | self.k = k
34 | self.fp = fp
35 | self.fn = fn
36 |
37 | # read count matrices
38 | self.df_total_readcounts = df_total_readcounts
39 | if df_total_readcounts is not None:
40 | self.cell_list = list(df_total_readcounts.index)
41 | self.mutation_list = list(df_total_readcounts.columns)
42 |
43 | bb_alpha = fp * ado_precision
44 | bb_beta = (1 - fp) * ado_precision
45 |
46 | coeff_mat = np.zeros((self.ncells, self.nmutations))
47 | for cell_idx, cell in enumerate(self.cell_list):
48 | for mut_idx, mutation in enumerate(self.mutation_list):
49 | total_reads = df_total_readcounts.loc[cell][mutation]
50 | variant_reads = df_variant_readcounts.loc[cell][mutation]
51 | if total_reads > 0:
52 | #coeff = -np.log(total_reads) - betabinom.logpmf(variant_reads, total_reads, bb_alpha, bb_beta)
53 | coeff = betabinom.logpmf(variant_reads, total_reads, 1, 1) - betabinom.logpmf(variant_reads, total_reads, bb_alpha, bb_beta)
54 | coeff_mat[cell_idx, mut_idx] = coeff
55 | self.coeff_mat = coeff_mat
56 |
57 | # for cell in range(self.ncells):
58 | # for mutation in range(self.nmutations):
59 | # total_reads = df_total_readcounts.values[cell, mutation]
60 | # variant_reads = df_variant_readcounts.values[cell, mutation]
61 | # if total_reads > 0:
62 | # coeff = -np.log(total_reads) - betabinom.logpmf(variant_reads, total_reads, bb_alpha, bb_beta)
63 | # coeff_mat[cell, mutation] = coeff
64 | # self.coeff_mat = coeff_mat
65 | else:
66 | self.coeff_mat = None
67 |
68 | # gurobi parameters
69 | self.threads = threads
70 | self.worklimit = timelimit
71 | self.verbose = verbose
72 |
73 |
74 | self.fpweight = np.log(1 - fp) - np.log(fp)
75 | self.fnweight = np.log(fn) - np.log(1 - fn)
76 |
77 | # solution
78 | # self.B = np.zeros((self.ncells, self.nmutations))
79 | self.solB = None
80 | self.solT_cell = None
81 | self.solT_mut = None
82 |
83 | def solveSetInclusion(self):
84 |
85 | ncells = self.ncells
86 | nmutations = self.nmutations
87 | nclusters = self.nclusters
88 |
89 | print(f'n = {ncells}, m = {nmutations}, p = {nclusters}')
90 |
91 | clustering = self.clustering
92 | k = self.k
93 |
94 | model = gp.Model('solveConstrainedDollo')
95 |
96 | # character matrix variables
97 | b = model.addVars(ncells, nmutations, vtype=gp.GRB.BINARY, name='b')
98 | c = model.addVars(nclusters, nmutations, k, vtype=gp.GRB.BINARY, name='c')
99 |
100 | # 1+ indicator
101 | x = model.addVars(ncells, nmutations, vtype=gp.GRB.CONTINUOUS, lb = 0, ub = 1, name='x')
102 |
103 | # row clustering consistency variables
104 | g = model.addVars(nclusters, nmutations, vtype=gp.GRB.CONTINUOUS, lb=0, ub=1, name='g')
105 | g0 = model.addVars(nclusters, nmutations, vtype=gp.GRB.CONTINUOUS, lb=0, ub=1, name='g0')
106 | g1 = model.addVars(nclusters, nmutations, vtype=gp.GRB.CONTINUOUS, lb=0, ub=1, name='g1')
107 |
108 | # column compatibility variables
109 | y0 = model.addVars(nmutations, nmutations, k, k, vtype=gp.GRB.CONTINUOUS, lb=0, ub=1, name='y0')
110 | y1 = model.addVars(nmutations, nmutations, k, vtype=gp.GRB.CONTINUOUS, lb=0, ub=1, name='y1')
111 | y2 = model.addVars(nmutations, nmutations, k, vtype=gp.GRB.CONTINUOUS, lb=0, ub=1, name='y2')
112 | y3 = model.addVars(nmutations, nmutations, vtype=gp.GRB.CONTINUOUS, lb=0, ub=1, name='y3')
113 | z0 = model.addVars(nmutations, nmutations, k, k, vtype=gp.GRB.CONTINUOUS, lb=0, ub=1, name='z0')
114 | z1 = model.addVars(nmutations, nmutations, k, vtype=gp.GRB.CONTINUOUS, lb=0, ub=1, name='z1')
115 | z2 = model.addVars(nmutations, nmutations, vtype=gp.GRB.CONTINUOUS, lb=0, ub=1, name='z2')
116 |
117 | # encode one-hot-like constraint on b and c
118 | for i in range(ncells):
119 | for j in range(nmutations):
120 | csum = gp.LinExpr()
121 | for s in range(k):
122 | cluster = clustering[i]
123 | csum += c[cluster,j,s]
124 |
125 | if self.mutation_list[j] not in self.snp_list:
126 | model.addConstr(csum + b[i,j] <= 1)
127 | else:
128 | model.addConstr(csum + b[i,j] == 1)
129 | model.addConstr(x[i,j] == b[i,j] + csum)
130 |
131 | # symmetry breaking
132 | for s in range(1,k):
133 | csum1 = gp.LinExpr()
134 | csum2 = gp.LinExpr()
135 | for l in range(nclusters):
136 | for j in range(nmutations):
137 | csum1 += c[l,j,s]
138 | csum2 += c[l,j,s-1]
139 |
140 | model.addConstr(csum2 >= csum1)
141 |
142 | # encode consistency constraints
143 | ## g0 constraints
144 | for l in range(nclusters):
145 | for j in range(nmutations):
146 | xsum = gp.LinExpr()
147 | cluster_size = 0
148 | for i in np.where(clustering == l)[0]:
149 | xsum += x[i,j]
150 | model.addConstr(g0[l,j] >= 1 - x[i,j])
151 | cluster_size += 1
152 | model.addConstr(g0[l,j] <= cluster_size - xsum)
153 |
154 | ## g1 constraints
155 | for l in range(nclusters):
156 | for j in range(nmutations):
157 | bsum = gp.LinExpr()
158 | for i in np.where(clustering == l)[0]:
159 | bsum += b[i,j]
160 | model.addConstr(g1[l,j] >= b[i,j])
161 | model.addConstr(g1[l,j] <= bsum)
162 |
163 | ## g constraints
164 | for l in range(nclusters):
165 | for j in range(nmutations):
166 | model.addConstr(g[l,j] <= g0[l,j])
167 | model.addConstr(g[l,j] <= g1[l,j])
168 | model.addConstr(g[l,j] >= g0[l,j] + g1[l,j] - 1)
169 |
170 | for j in range(nmutations):
171 | gsum = gp.LinExpr()
172 | for l in range(nclusters):
173 | gsum += g[l,j]
174 | model.addConstr(gsum <= 1)
175 |
176 |
177 | # encode set inclusion constraints
178 | ## y constraints (containment)
179 | for j1 in range(nmutations):
180 | for j2 in range(nmutations):
181 | if j1 == j2:
182 | continue
183 | for s1 in range(k):
184 | for s2 in range(k):
185 | for l in range(nclusters):
186 | model.addConstr(y0[j1,j2,s1,s2] <= 1 - c[l,j2,s2] + c[l,j1,s1])
187 |
188 | for j1 in range(nmutations):
189 | for j2 in range(nmutations):
190 | if j1 == j2:
191 | continue
192 | for s2 in range(k):
193 | for l in range(nclusters):
194 | model.addConstr(y1[j1,j2,s2] <= 1 - c[l,j2,s2] + (1 - g0[l,j1]))
195 |
196 | for j1 in range(nmutations):
197 | for j2 in range(nmutations):
198 | if j1 == j2:
199 | continue
200 | for s1 in range(k):
201 | for l in range(nclusters):
202 | csum = gp.LinExpr()
203 | for s in range(k):
204 | csum += c[l,j2,s]
205 | model.addConstr(y2[j1,j2,s1] <= 1 - (g1[l,j2] + csum) + c[l,j1,s1])
206 | # model.addConstr(y2[j1,j2,s1] <= 1 - (1 - g0[l,j2]) + c[l,j1,s1])
207 |
208 |
209 | for j1 in range(nmutations):
210 | for j2 in range(nmutations):
211 | if j1 == j2:
212 | continue
213 | for i in range(ncells):
214 | model.addConstr(y3[j1,j2] <= 1 - x[i,j2] + x[i,j1])
215 |
216 | ## z constraints (disjointness)
217 | for j1 in range(nmutations):
218 | for j2 in range(nmutations):
219 | if j1 >= j2:
220 | continue
221 | for s1 in range(k):
222 | for s2 in range(k):
223 | for l in range(nclusters):
224 | model.addConstr(z0[j1,j2,s1,s2] <= 2 - c[l,j1,s1] - c[l,j2,s2])
225 | # model.addConstr(z1[j1,j2,s1,s2] <= 2 - c[l,j1,s1] - c[l,j2,s2] - (1 - g0[l,j1]))
226 |
227 | for i in range(ncells):
228 | l = clustering[i]
229 | model.addConstr(z2[j1,j2] <= 2 - x[i,j2] - x[i,j1])
230 |
231 | for j1 in range(nmutations):
232 | for j2 in range(nmutations):
233 | if j1 == j2:
234 | continue
235 | for s2 in range(k):
236 | for l in range(nclusters):
237 | csum = gp.LinExpr()
238 | for s in range(k):
239 | csum += c[l,j1,s]
240 | model.addConstr(z1[j1,j2,s2] <= 2 - c[l,j2,s2] - (g1[l,j1] + csum))
241 | # model.addConstr(z1[j1,j2,s2] <= 2 - c[l,j2,s2] - (1 - g0[l,j1]))
242 |
243 | ## avoid conflict
244 | for j1 in range(nmutations):
245 | for j2 in range(nmutations):
246 | if j1 >= j2:
247 | continue
248 | for s1 in range(k):
249 | for s2 in range(k):
250 | model.addConstr(y0[j1,j2,s1,s2] + y0[j2,j1,s2,s1] + z0[j1,j2,s1,s2] >= 1)
251 | # model.addConstr(y1[j1,j2,s1,s2] + y1[j2,j1,s1,s2] + z1[j1,j2,s1,s2] >= 1)
252 | # model.addConstr(y2[j1,j2,s1,s2] + y2[j2,j1,s1,s2] + z1[j1,j2,s1,s2] >= 1)
253 | model.addConstr(y3[j1,j2] + y3[j2,j1] + z2[j1,j2] >= 1)
254 |
255 |
256 | for j1 in range(nmutations):
257 | for j2 in range(nmutations):
258 | if j1 == j2:
259 | continue
260 | for s2 in range(k):
261 | model.addConstr(y1[j1,j2,s2] + y2[j2,j1,s2] + z1[j1,j2,s2] >= 1)
262 |
263 |
264 | # set objective function
265 | obj_sum = gp.LinExpr()
266 | if self.coeff_mat is not None:
267 | for i in range(ncells):
268 | for j in range(nmutations):
269 | if self.df_total_readcounts.values[i,j] > 0:
270 | obj_sum += self.coeff_mat[i,j] * b[i,j]
271 | else:
272 | for i in range(ncells):
273 | for j in range(nmutations):
274 | if self.df_character_matrix.values[i,j] == 0:
275 | obj_sum += self.fnweight * b[i,j]
276 | elif self.df_character_matrix.values[i,j] == 1:
277 | obj_sum += self.fpweight * b[i,j]
278 |
279 | model.setObjective(obj_sum, gp.GRB.MAXIMIZE)
280 |
281 | model.setParam(gp.GRB.Param.Threads, self.threads)
282 | model.setParam(gp.GRB.Param.Method, 4)
283 |
284 | model.setParam(gp.GRB.Param.FeasibilityTol, 1e-6)
285 | model.setParam(gp.GRB.Param.IntFeasTol, 1e-6)
286 | model.setParam(gp.GRB.Param.OptimalityTol, 1e-6)
287 |
288 | # model.write('test_model_turing.lp')
289 |
290 | model.optimize()
291 | if model.status == gp.GRB.OPTIMAL:
292 | nzero_entries = np.sum(self.A == 0)
293 | none_entries = np.sum(self.A == 1)
294 | opt_obj_value = model.getObjective().getValue()
295 | print(f'{nzero_entries}, {none_entries}, {opt_obj_value}')
296 | #print(f'log likelihood: {opt_obj_value + nzero_entries * np.log(1 - self.fn) + none_entries * np.log(self.fp)}')
297 |
298 | # solb = np.zeros((ncells, nmutations))
299 |
300 | # for i in range(ncells):
301 | # for j in range(nmutations):
302 | # solb[i,j] = np.abs(model.getAttr('x', b)[i,j])
303 | #solb = np.rint(np.reshape(model.getAttr('x', b).values(), (ncells, nmutations)))
304 | solb = np.rint(np.reshape(np.array(list(model.getAttr('x', b).values())), (ncells, nmutations)))
305 |
306 | solc = model.getAttr('x', c)
307 | for l in range(nclusters):
308 | for j in range(nmutations):
309 | for s in range(k):
310 | if solc[l,j,s] > 0.5:
311 | for i in np.where(clustering == l)[0]:
312 | solb[i,j] = s + 2
313 |
314 | # df_solb = pd.DataFrame(solb, index = self.df_character_matrix.index,
315 | # columns = self.df_character_matrix.columns[:-1])
316 |
317 | # df_solb.to_csv('new_test_condor_output.csv')
318 | # df_solb.to_csv('newest_test_condor_output.csv')
319 |
320 | df_solb = pd.DataFrame(solb, index = self.df_character_matrix.index,
321 | columns = self.df_character_matrix.columns[:-1], dtype=int)
322 | # print(model.getAttr('x', b))
323 | # print('-'*50)
324 | # print(model.getAttr('x', g))
325 | # print('-'*50)
326 | # print(solc)
327 |
328 | self.solB = df_solb
329 | df_solb_binary = solveConstrainedDollo.expand_multi_state_to_binary(df_solb)
330 | self.solT_mut, self.solT_cell = solveConstrainedDollo.generate_perfect_phylogeny(df_solb_binary)
331 |
332 | def writeSolution(self, fname):
333 | if self.solB is not None:
334 | self.solB.to_csv(fname)
335 |
336 | @staticmethod
337 | def expand_multi_state_to_binary(df_multistate):
338 |
339 | ncells = len(df_multistate)
340 | binarized_mat = None
341 | binary_col_dict = {}
342 | for column in df_multistate.columns:
343 | max_state = df_multistate[column].max()
344 | for s in range(1, max_state+1):
345 | state_col = np.zeros((ncells))
346 | if s == 1:
347 | state_col[df_multistate[column] > 0] = 1
348 | else:
349 | state_col[df_multistate[column] == s] = 1
350 |
351 | binary_col_dict[f'{column}_{s}'] = state_col
352 |
353 | df_binary = pd.DataFrame(binary_col_dict, index = df_multistate.index, dtype=int)
354 | return df_binary
355 |
356 | @staticmethod
357 | def generate_perfect_phylogeny(df_binary):
358 |
359 | solT_mut = nx.DiGraph()
360 | solT_mut.add_node('root')
361 |
362 | solT_cell = nx.DiGraph()
363 | solT_cell.add_node('root')
364 |
365 | df_binary = df_binary[df_binary.sum().sort_values(ascending=False).index]
366 |
367 | for cell_id, row in df_binary.iterrows():
368 | if cell_id == 'root':
369 | continue
370 |
371 | curr_node = 'root'
372 | for column in df_binary.columns[row.values == 1]:
373 | if column in solT_mut[curr_node]:
374 | curr_node = column
375 | else:
376 | if column in solT_mut.nodes:
377 | raise NameError(f'{column} is being repeated')
378 | solT_mut.add_edge(curr_node, column)
379 | solT_cell.add_edge(curr_node, column)
380 | curr_node = column
381 |
382 | solT_cell.add_edge(curr_node, cell_id)
383 |
384 | return solT_mut, solT_cell
385 |
386 | def writeDOT(self, dot_file, withcells=True):
387 | if withcells is True:
388 | writeTree = self.solT_cell
389 | else:
390 | writeTree = self.solT_mut
391 |
392 | with open(dot_file, 'w') as output:
393 |
394 | output.write(f'digraph N {{\n')
395 | output.write(f"\toverlap=\"false\"\n")
396 | output.write(f"\trankdir=\"TB\"\n")
397 |
398 | idx_dict = {}
399 | idx = 0
400 | if writeTree is not None:
401 | for node in writeTree.nodes:
402 | idx_dict[node] = idx
403 | output.write(f'\t{idx} [label=\"{node}\", style=\"bold\"];\n')
404 | idx += 1
405 |
406 | for edge in writeTree.edges:
407 | output.write(f"\t{idx_dict[edge[0]]} -> {idx_dict[edge[1]]} [style=\"bold\"];\n")
408 |
409 | output.write(f'}}')
410 |
--------------------------------------------------------------------------------