├── .DS_Store ├── ComputeDistance.py ├── Edmonds.py ├── Kruskal.py ├── LICENSE ├── LSA.tree.R ├── LSAfunction.R ├── README.md ├── Readfile.py ├── SC1_py_sctree.py ├── SC2_RR_dataTransfer.R ├── SC3_RR_Permutation.R ├── SC4_RR_LSA_tree.R ├── SP1_SCT_UTIL.py ├── SP2_LSA_FUNC.R ├── dataTransfer.R ├── example ├── .DS_Store ├── outputDNA │ ├── CNV.tree.txt │ ├── LSA.tree.pdf │ ├── gene.LSA.txt │ ├── parallel.LSA.txt │ ├── segmental.LSA.txt │ └── singlecell.tree.pdf ├── outputDNAT │ ├── CNV.tree.txt │ ├── LSA.tree.pdf │ ├── segmental.LSA.txt │ └── singlecell.tree.pdf ├── outputRNA │ ├── CNV.tree.txt │ ├── LSA.tree.pdf │ ├── gene.LSA.txt │ ├── segmental.LSA.txt │ └── singlecell.tree.pdf ├── outputRNAT │ ├── CNV.tree.txt │ ├── LSA.tree.pdf │ ├── gene.LSA.txt │ ├── parallel.LSA.txt │ ├── segmental.LSA.txt │ └── singlecell.tree.pdf ├── run.example.sh ├── scDNA.CNV.txt └── scRNA.CNV.txt ├── gencode_v19_gene_pos.txt ├── gencode_v38_gene_pos.txt ├── hg19.band.bed ├── hg38.band.bed ├── mdmst.py ├── pathwaygene.txt ├── permutationCNA.R └── scTree.py /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KChen-lab/MEDALT/c95765f3080e09d5f78cb95a13f169330051b27c/.DS_Store -------------------------------------------------------------------------------- /ComputeDistance.py: -------------------------------------------------------------------------------- 1 | import copy 2 | 3 | 4 | def matrixbuilder(node): 5 | matrix = [] 6 | for node1 in node: 7 | temp = [] 8 | for node2 in node: 9 | temp.append(dist(node[node1], node[node2])) 10 | matrix.append(temp) 11 | return node.keys(), matrix 12 | 13 | 14 | def dist(node1, node2): 15 | d = 0 16 | for i in range(0, len(node1)): 17 | d = d+ disthelper(node1[i], node2[i]) 18 | return d 19 | 20 | def disthelper(node1, node2): 21 | if 0 in node1 or 0 in node2: 22 | return zerodisthelper(node1, node2) 23 | return distcalc(node1, node2) 24 | 25 | 26 | def distcalc(node1, node2): 27 | assert len(node1) == len(node2) 28 | if len(node1) == 1: 29 | return abs(node1[0] - node2[0]) 30 | else: 31 | d = 0 32 | newlist = copy.deepcopy(node1) 33 | for i in range(0, len(node2)): 34 | newlist[i] -= node2[i] 35 | while newlist: 36 | if newlist[0] == 0: 37 | newlist.pop(0) 38 | elif newlist[0] > 0: 39 | k = 0 40 | for i in range(0, len(newlist)): 41 | if newlist[i] > 0: 42 | k = i 43 | else: 44 | break 45 | for i in range(0, k + 1): 46 | newlist[i] -= 1 47 | d += 1 48 | elif newlist[0] < 0: 49 | k = 0 50 | for i in range(0, len(newlist)): 51 | if newlist[i] < 0: 52 | k = i 53 | else: 54 | break 55 | for i in range(0, k + 1): 56 | newlist[i] += 1 57 | d += 1 58 | return abs(d) 59 | 60 | 61 | def zerodisthelper(node1, node2): 62 | n1 = copy.deepcopy(node1) 63 | n2 = copy.deepcopy(node2) 64 | dist = 0 65 | temp1 = [] 66 | temp2 = [] 67 | while n1: 68 | x1 = n1.pop() 69 | x2 = n2.pop() 70 | if x1 == 0: 71 | if x2 == 0: 72 | temp1.append(x1) 73 | temp2.append(x2) 74 | else: 75 | return 1000000 76 | else: 77 | temp1.append(x1) 78 | temp2.append(x2) 79 | return distcalc(temp1, temp2) 80 | -------------------------------------------------------------------------------- /Edmonds.py: -------------------------------------------------------------------------------- 1 | from Readfile import * 2 | from ComputeDistance import * 3 | from copy import * 4 | from mdmst import * 5 | 6 | class Tree: 7 | def __init__(self, name, out_edge, in_edge): 8 | self.name = name # name of node 9 | self.out_edge = out_edge # dictionary of node name - distance pair 10 | self.in_edge = in_edge # dictionary of node name - distance pair 11 | 12 | def get_out_degree(self): 13 | return len(self.out_edge) 14 | 15 | def get_in_degree(self): 16 | return len(self.in_edge) 17 | 18 | 19 | def create_tree(nodes, node_name_list,root): 20 | tree_node_dict = {} 21 | for node in node_name_list: 22 | temp_out_edge = {} 23 | temp_in_edge = {} 24 | for other_node in node_name_list: 25 | if not node == other_node: 26 | temp_out_edge[other_node] = dist(nodes[node], nodes[other_node]) 27 | temp_in_edge[other_node] = dist(nodes[other_node], nodes[node]) 28 | tree_node_dict[node] = temp_out_edge 29 | return tree_node_dict 30 | -------------------------------------------------------------------------------- /Kruskal.py: -------------------------------------------------------------------------------- 1 | # Python program for Kruskal's algorithm to find 2 | # Minimum Spanning Tree of a given connected, 3 | # undirected and weighted graph 4 | 5 | from collections import defaultdict 6 | 7 | 8 | # Class to represent a graph 9 | class Graph: 10 | 11 | def __init__(self, vertices): 12 | self.V = vertices # No. of vertices 13 | self.graph = [] # default dictionary 14 | # to store graph 15 | 16 | # function to add an edge to graph 17 | def addEdge(self, u, v, w): 18 | self.graph.append([u, v, w]) 19 | 20 | # A utility function to find set of an element i 21 | 22 | # (uses path compression technique) 23 | def find(self, parent, i): 24 | if parent[i] == i: 25 | return i 26 | return self.find(parent, parent[i]) 27 | 28 | # A function that does union of two sets of x and y 29 | 30 | # (uses union by rank) 31 | def union(self, parent, rank, x, y): 32 | xroot = self.find(parent, x) 33 | yroot = self.find(parent, y) 34 | 35 | # Attach smaller rank tree under root of 36 | # high rank tree (Union by Rank) 37 | if rank[xroot] < rank[yroot]: 38 | parent[xroot] = yroot 39 | elif rank[xroot] > rank[yroot]: 40 | parent[yroot] = xroot 41 | 42 | # If ranks are same, then make one as root 43 | # and increment its rank by one 44 | else: 45 | parent[yroot] = xroot 46 | rank[xroot] += 1 47 | 48 | # The main function to construct MST using Kruskal's 49 | # algorithm 50 | def KruskalMST(self): 51 | 52 | result = [] # This will store the resultant MST 53 | 54 | i = 0 # An index variable, used for sorted edges 55 | e = 0 # An index variable, used for result[] 56 | 57 | # Step 1: Sort all the edges in non-decreasing 58 | # order of their 59 | # weight. If we are not allowed to change the 60 | # given graph, we can create a copy of graph 61 | self.graph = sorted(self.graph, key=lambda item: item[2]) 62 | 63 | parent = []; 64 | rank = [] 65 | 66 | # Create V subsets with single elements 67 | for node in range(self.V): 68 | parent.append(node) 69 | rank.append(0) 70 | 71 | # Number of edges to be taken is equal to V-1 72 | while e < self.V - 1: 73 | 74 | # Step 2: Pick the smallest edge and increment 75 | # the index for next iteration 76 | u, v, w = self.graph[i] 77 | i = i + 1 78 | x = self.find(parent, u) 79 | y = self.find(parent, v) 80 | 81 | # If including this edge does't cause cycle, 82 | # include it in result and increment the index 83 | # of result for next edge 84 | if x != y: 85 | e = e + 1 86 | result.append([u, v, w]) 87 | self.union(parent, rank, x, y) 88 | # Else discard the edge 89 | 90 | # print the contents of result[] to display the built MST 91 | print "Following are the edges in the constructed MST" 92 | for u, v, weight in result: 93 | # print str(u) + " -- " + str(v) + " == " + str(weight) 94 | print ("%d -- %d == %d" % (u, v, weight)) 95 | 96 | # Driver code -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 KChen-lab 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 | -------------------------------------------------------------------------------- /LSA.tree.R: -------------------------------------------------------------------------------- 1 | #main R function to perform linegae speciation analysis 2 | #input: 1. the path of R script LSAfunction.R 3 | # 2. input copy number profile from scDNA-seq or scRNA-seq 4 | # 3. the infer tree file based on integer copy number profile 5 | # 4. integer copy number matrix 6 | # 5. output path of results 7 | # 6. datatype "D" (DNA-seq) or "R" (RNA-seq) 8 | # 7. genome version: hg19 or hg38 9 | # 8. optional. If you have the permutation tree, input the path 10 | 11 | 12 | #Check the installation of dependency packages: HelloRangers and igraph 13 | r = getOption("repos") 14 | r["CRAN"] = "http://cran.us.r-project.org" 15 | options(repos = r) 16 | if (!"HelloRanges" %in% installed.packages()){ 17 | if (!requireNamespace("BiocManager", quietly = TRUE)) 18 | install.packages("BiocManager") 19 | BiocManager::install("HelloRanges") 20 | } 21 | if (!"igraph" %in% installed.packages()){ 22 | install.packages("igraph") 23 | } 24 | library(HelloRanges) 25 | library(igraph) 26 | 27 | #read input 28 | args<-commandArgs(T) 29 | datapath=args[1] 30 | inputfile=args[2] 31 | treeName=args[3] 32 | CNVfile=args[4] 33 | outpath = args[5] 34 | datatype=args[6] 35 | hg=args[7] 36 | if (length(args)==8){ 37 | permutationPath=args[8] 38 | } 39 | source(paste(datapath,"/LSAfunction.R",sep="")) 40 | set.seed(1234) 41 | 42 | #Plot cell tree figure 43 | print.noquote("Visualization MEDALT!") 44 | celltree=read.csv(treeName,sep="\t") 45 | nodes=data.frame(id=union(as.character(celltree[,1]),as.character(celltree[,2])),size=5) 46 | nodes$color="lightblue" 47 | nodes$color[nodes$id==setdiff(as.character(celltree[,1]),as.character(celltree[,2]))]="black" 48 | net <- graph_from_data_frame(d=celltree, vertices=nodes, directed=T) 49 | pdf(file=paste(outpath,"/singlecell.tree.pdf",sep=""),width = 5,height = 5,useDingbats = F) 50 | plot(net, vertex.frame.color=NA,vertex.color=nodes$color,edge.arrow.size=.2,vertex.label=NA) 51 | dev.off() 52 | 53 | #read input copy number data 54 | data = read.csv(inputfile,sep="\t",header = TRUE) 55 | 56 | #read reference genome file 57 | if (hg=="hg19"){ 58 | reference=read.csv(paste(datapath,"/gencode_v19_gene_pos.txt",sep=""),sep="\t",header=F) 59 | refer.band=read.csv(paste(datapath,"/hg19.band.bed",sep=""),sep="\t",header = F) 60 | } 61 | if (hg=="hg38"){ 62 | reference=read.csv(paste(datapath,"/gencode_v38_gene_pos.txt",sep=""),sep="\t",header=F) 63 | refer.band=read.csv(paste(datapath,"/hg38.band.bed",sep=""),sep="\t",header = F) 64 | } 65 | 66 | #generate the genome position data at arm and band level 67 | chrom=as.character(unique(refer.band[,1])) 68 | arm.band=c() 69 | band.region=c() 70 | for (i in chrom){ 71 | subrefer=refer.band[refer.band[,1]==i,] 72 | parm=subrefer[grep("p",subrefer[,4]),]#p arm region 73 | qarm=subrefer[grep("q",subrefer[,4]),]#q arm region 74 | armregion=data.frame(chr=i,start=c(parm[1,2],qarm[1,2]),end=c(parm[dim(parm)[1],3],qarm[dim(qarm)[1],3]),band=c("p","q")) 75 | arm.band=rbind(arm.band,armregion) 76 | subband=do.call(rbind,strsplit(as.character(subrefer[,4]),split="[.]")) 77 | bandname=unique(subband[,1]) 78 | pos=sapply(bandname,function(x,subband,subrefer){ 79 | k=which(subband[,1]==x) 80 | start=subrefer[min(k),2] 81 | end=subrefer[max(k),3] 82 | return(c(start,end)) 83 | },subband,subrefer) 84 | subregion=data.frame(chr=i,start=pos[1,],end=pos[2,],band=bandname) 85 | band.region=rbind(band.region,subregion) 86 | } 87 | arm.band$length=arm.band$end-arm.band$start 88 | band.region$length=band.region$end-band.region$start 89 | refer.band$ID=paste(as.character(refer.band$V1),as.character(refer.band$V4),sep=":") 90 | 91 | #generate the bin position based on input copy number data 92 | print.noquote("LSA segmentation!") 93 | if (datatype=="D"){ 94 | region=data[,1:2] 95 | region[,1]=paste("chr",region[,1],sep="") 96 | region$end=region[,2] 97 | colnames(region)=c("chrom","chrompos","end") 98 | }else if (datatype=="R"){ 99 | data=round(data*2) 100 | index=match(row.names(data),as.character(reference[,1])) 101 | newdata=cbind(reference[index[!is.na(index)],2:3],data[!is.na(index),]) 102 | rownames(newdata)=rownames(data)[!is.na(index)] 103 | newdata=newdata[as.character(newdata[,1])!="chrM"&as.character(newdata[,1])!="chrY",] 104 | newdata[,1]=as.character(newdata[,1]) 105 | newdata[newdata[,1]=="chrX",1]="chr23" 106 | region=newdata[,1:2] 107 | region[,3]=region[,2] 108 | colnames(region)=c("chrom","chrompos","end") 109 | cnv=t(data) 110 | data=newdata 111 | } 112 | write.table(region,"region.bed",col.names = F,row.names = F,sep="\t",quote = F) 113 | 114 | ##correspond input genomic bin to genome band ID 115 | code=bedtools_intersect(paste("-a ",datapath,"/",hg,".band.bed -b region.bed",sep="")) 116 | ans <- eval(code) 117 | ans=as.data.frame(ans) 118 | ans$ID=paste(ans$seqnames,":",ans$name,sep="") 119 | ans$ID1=paste(ans$seqnames,"_",ans$end,sep = "") 120 | region$ID1=paste(region$chrom,"_",region$chrompos,sep="") 121 | ID=unique(ans$ID) 122 | 123 | #generate copy number matrix based on genome bandID 124 | newCNV=do.call(cbind,lapply(ID, function(id,data,ans,region){ 125 | chrID=ans$ID1[ans$ID==id] 126 | index=match(chrID,region$ID1) 127 | if (length(index)==1){ 128 | return(as.numeric(data[index,3:dim(data)[2]])) 129 | }else{ 130 | return(round(apply(data[index,3:dim(data)[2]],2,mean))) 131 | } 132 | },data=data,ans=ans,region)) 133 | colnames(newCNV)=ID 134 | 135 | #perform lineage speciation analysis 136 | print.noquote("Calculating CFL") 137 | 138 | #calculate the depth, the number of children nodes for each cell 139 | cell=union(as.character(celltree[,1]),as.character(celltree[,2])) 140 | cell=data.frame(cell=cell) 141 | cell$depth=sapply(as.character(cell$cell),depthFunction,cellTree=celltree) 142 | cell$subtreesize=sapply(as.character(cell$cell),subtreeSize,cellTree=celltree) 143 | 144 | #perform lineage speciation analysis for cells that the number of children is no less than 5. 145 | cell1=cell[cell$subtreesize>=5,] 146 | cell1=cell1[cell1$cell!="root",] 147 | 148 | #calculte CFL at genomic bin level 149 | Gscore=lapply(as.character(cell1$cell),lineageScore,newCNV,celltree) 150 | names(Gscore)=as.character(cell1$cell) 151 | 152 | #read genes from 11 oncogenic pathway for estimation of gene level 153 | pathwaygene=read.csv(paste(datapath,"/pathwaygene.txt",sep=""),sep="\t") 154 | index=match(pathwaygene$name,reference[,1]) 155 | pathwaygene=data.frame(chr=reference[index[!is.na(index)],2],start=reference[index[!is.na(index)],3],end=reference[index[!is.na(index)],4],name=pathwaygene$name[!is.na(index)],pathway=pathwaygene$pathway[!is.na(index)]) 156 | 157 | #Gene level copy number profile 158 | if (datatype=="D"){ 159 | cnv=read.csv(CNVfile,sep="\t") 160 | oncogenicCNV=do.call(cbind,lapply(1:dim(pathwaygene)[1],geneCNAfunction,pathwaygene=pathwaygene,ancestorCNV=cnv,generegion=region)) 161 | colnames(oncogenicCNV)=as.character(pathwaygene$name) 162 | rownames(oncogenicCNV)=rownames(cnv) 163 | }else if (datatype == "R"){ 164 | data=data[,3:dim(data)[2]] 165 | index=match(as.character(pathwaygene$name),rownames(data)) 166 | oncogenicCNV=t(data[index[!is.na(index)],]) 167 | oncogenicCNV=round(oncogenicCNV) 168 | colnames(oncogenicCNV)=as.character(pathwaygene$name)[!is.na(index)] 169 | } 170 | index=apply(oncogenicCNV,2,function(x){ 171 | if (NA %in% x){ 172 | return(0) 173 | }else{ 174 | return(1) 175 | } 176 | }) 177 | oncogenicCNV=oncogenicCNV[,index==1] 178 | 179 | #Calculate CFL at gene level 180 | geneGscore=lapply(as.character(cell1$cell),lineageScore,oncogenicCNV,celltree) 181 | names(geneGscore)=as.character(cell1$cell) 182 | realres=list(cell=cell1,bandGscore=Gscore,geneGscore=geneGscore) 183 | 184 | #do calculation for permutation dataset 185 | print.noquote("Calculating permutation CFL") 186 | if (length(args) < 8){ 187 | #if there was no permutation tree, calculate CFL in permutation dataset based on real tree structure 188 | times=500 189 | permuteres=lapply(1:times,function(j,data,ID,ans,datatype,pathwaygene,generegion,reference,celltree){ 190 | score=permuteScore(data,ID,ans,datatype,pathwaygene,generegion=region,reference,celltree) 191 | return(score) 192 | },data,ID,ans,datatype,pathwaygene,generegion=region,reference,celltree) 193 | }else if (length(args)==8){ 194 | #if there are permutation trees, calculate CFL in permutation dataset based on permuted tree structure 195 | permutefile=list.files(permutationPath) 196 | permutefile=permutefile[grep("celltree",permutefile)] 197 | times=length(permutefile) 198 | print.noquote(paste("There are ",length(permutefile)," permutation trees.")) 199 | if (length(permutefile)>0){ 200 | permuteres=lapply(permutefile,permuteTreeScore,ID,ans,datatype,pathwaygene,generegion=region,reference,permutationPath) 201 | } 202 | } 203 | 204 | #Estimate emperical p value 205 | print.noquote("Estimate emperical p value") 206 | realcell=realres$cell 207 | realband=realres$bandGscore 208 | realgene=realres$geneGscore 209 | pvalue=lapply(1:dim(realcell)[1],significanceLevel,realband,realgene,permuteres,realcell) 210 | if (length(args) < 8){ 211 | #estimate emperical p value at genomic bin and gene level 212 | #if there is no permutation tree, default cutoff of pvalue is 0.01. 213 | bandsig=CollectAsso(pvalue,cutoff=0.01,celltree,realcell)$bandres 214 | genesig=CollectAsso(pvalue,cutoff=0.01,celltree,realcell)$generes 215 | }else if (length(args)==8){ 216 | #if there are permutation trees, default cutoff of pvalue is 0.05. 217 | bandsig=CollectAsso(pvalue,cutoff=0.05,celltree,realcell)$bandres 218 | genesig=CollectAsso(pvalue,cutoff=0.05,celltree,realcell)$generes 219 | } 220 | bandsig=do.call(rbind,lapply(unique(as.character(bandsig$cell)),mergeCNA,bandsig,band.region,arm.band,refer.band)) 221 | bandsig=unique(bandsig) 222 | genesig=unique(genesig) 223 | LSAres=list() 224 | if (!is.null(bandsig)){ 225 | index=match(as.character(bandsig$cell),as.character(realcell$cell)) 226 | bandsig$subtreesize=realcell$subtreesize[index] 227 | cellsig=do.call(rbind,lapply(as.character(unique(bandsig$cell)),CombineRegion,bandsig,refer.band)) 228 | LSAres$bandLSA=cellsig 229 | paraBand=table(as.character(bandsig$region)) 230 | paraBand=paraBand[paraBand>1]#CNAs of genomic bin associated with more than one independent lineages 231 | if (length(paraBand)>0){ 232 | paraBandsig=GenePara(bandsig,permuteres,type="band",realcell)#parallel evolution test 233 | if (!is.null(paraBandsig)){ 234 | LSAres$paraBand=paraBandsig 235 | } 236 | } 237 | } 238 | if (!is.null(genesig)){ 239 | index=match(as.character(genesig$cell),as.character(realcell$cell)) 240 | genesig$subtreesize=realcell$subtreesize[index] 241 | LSAres$geneLSA=genesig 242 | paraGene=table(as.character(genesig$region)) 243 | paraGene=paraGene[paraGene>1]#gene associated with more than one independent lieage 244 | if (length(paraGene)>0){ 245 | paraGenesig=GenePara(genesig,permuteres,type="gene",realcell)#parallele evolution estimation 246 | LSAres$paraGene=paraGenesig 247 | } 248 | } 249 | print.noquote("Estimate parallel evolution") 250 | 251 | #collect all significant results 252 | allsig=c() 253 | if ("geneLSA" %in% names(LSAres)){ 254 | geneLSA=LSAres$geneLSA 255 | geneLSA$CNA="AMP" 256 | geneLSA$CNA[geneLSA$Score<0]="DEL" 257 | allsig=rbind(allsig,geneLSA) 258 | write.table(geneLSA,paste(outpath,"/gene.LSA.txt",sep=""),col.names = T,row.names=F,sep="\t",quote=F) 259 | }else{ 260 | print.noquote("No LSA is identified at gene level!") 261 | } 262 | if ("bandLSA" %in% names(LSAres)){ 263 | bandLSA=LSAres$bandLSA 264 | bandLSA$CNA="AMP" 265 | bandLSA$CNA[bandLSA$Score<0]="DEL" 266 | allsig=rbind(allsig,bandLSA) 267 | write.table(bandLSA,paste(outpath,"/segmental.LSA.txt",sep=""),col.names=T,row.names=F,quote=F,sep="\t") 268 | }else{ 269 | print.noquote("No segmental LSA is identified!") 270 | } 271 | 272 | #collect all parallel evolution events 273 | paraEvent=c() 274 | if ("paraBand" %in% names(LSAres)){ 275 | paraEvent=rbind(paraEvent,LSAres$paraBand) 276 | } 277 | if ("paraGene" %in% names(LSAres)){ 278 | paraEvent=rbind(paraEvent,LSAres$paraGene) 279 | } 280 | if (!is.null(paraEvent)){ 281 | paraEvent=paraEvent[!is.na(paraEvent$pvalue),] 282 | if (dim(paraEvent)[1]!=0){ 283 | write.table(paraEvent,paste(outpath,"/parallel.LSA.txt",sep=""),col.names=T,row.names=F,sep="\t",quote=FALSE) 284 | } 285 | } 286 | 287 | #plot LSA Tree 288 | if (!is.null(allsig)){ 289 | LSAnetwork=CNAconnect(allsig,celltree) 290 | nodes=data.frame(id=union(LSAnetwork[,1],LSAnetwork[,2]),size=5) 291 | tab=table(as.character(allsig$cell)) 292 | index=match(nodes$id,names(tab)) 293 | nodes$size[!is.na(index)]=nodes$size[!is.na(index)]*tab[index[!is.na(index)]]/5#define node size 294 | nodes$size[nodes$size<=5]=5 295 | nodes$color="gray" 296 | nodes$color[!is.na(index)]=rainbow(length(unique(allsig$cell))) 297 | annotation=c() 298 | for (i in 1:dim(nodes)[1]){ 299 | if (as.character(nodes$id[i]) %in% as.character(allsig$cell)){ 300 | CNA=allsig[as.character(allsig$cell)==as.character(nodes$id[i]),] 301 | CNA=CNA[order(CNA$pvalue),] 302 | CNA=paste(as.character(CNA$region),as.character(CNA$CNA),sep=":") 303 | CNA1=CNA[1] 304 | if (length(CNA)>1){ 305 | for (j in 2:min(3,length(CNA))){ 306 | CNA1=paste(CNA1,CNA[j],sep=";") 307 | } 308 | } 309 | annotation[i]=CNA1 310 | } 311 | } 312 | nodes$annotation=annotation 313 | nodes$size=nodes$size/max(nodes$size)*30 314 | links=data.frame(from=LSAnetwork[,1],to=LSAnetwork[,2],weight=as.numeric(LSAnetwork[,3])) 315 | pdf(file=paste(outpath,"/LSA.tree.pdf",sep=""),width = 6,height = 6,useDingbats = F) 316 | net <- graph_from_data_frame(d=links, vertices=nodes, directed=T) 317 | plot(net, layout=layout_as_tree,vertex.frame.color=NA,vertex.color=nodes$color,edge.arrow.size=.2,vertex.label.cex=0.5,vertex.label=nodes$annotation) 318 | dev.off() 319 | } 320 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Description 2 | =========== 3 | This package performs lineage tracing using copy number profile from single cell sequencing technology. It will infer: 4 | * An rooted directed minimal spanning tree (RDMST) to represent aneuploidy evolution of tumor cells. 5 | * The focal and broad copy number alterations associated with lineage expansion. 6 | 7 | 8 | System requirements and dependency 9 | ================================== 10 | This package runs on Python 2.7. 11 | 12 | It also requires R/3.5 13 | to run and has dependency on the R packages: 14 | 15 | igraph and HelloRanges. 16 | 17 | 18 | 19 | Installation 20 | ============ 21 | Please download and copy the distribution to your specific location. If you are cloning from github, ensure that you have git-lfs installed. 22 | 23 | For example, if the downloaded distribuition is MEDALT.tar.gz. 24 | Type 'tar zxvf MEDALT.tar.gz' 25 | 26 | Then, run scTree.py in the resulting folder. 27 | 28 | Usage 29 | ===== 30 | ``` 31 | Options: 32 | --version show program's version number and exit 33 | -h, --help Show this help message and exit. 34 | -P PATH, --path=PATH 35 | the path of MEDALT package 36 | -I INPUT, --input=INPUT 37 | the input file is single cell copy number matrix estimated from scDNA-seq or scRNA-seq 38 | -D DATATYPE, --datatype=DATATYPE 39 | the input file type either D (scDNA-seq) or R (scRNA-seq) 40 | -G GENOME, --genome=GENOME 41 | Genome version "hg19" or "hg38" 42 | -O OUTPATH, --outpath=OUTPATH 43 | the output path. 44 | -W WINDOWS, --windows=WINDOWS 45 | The size of smoothing windows if your inputfile is from scRNA-seq. 46 | The value is the number of genes which will be merge. Default value is 30. 47 | -R PERMUTATION, --permutation=PERMUTATION 48 | Performing tree reconstruction based on permutation data (T) or not (F) to estimate background distribution. 49 | If T, both permuted copy number matrix and reconstructed tree using permuted data will be used. Otherwise (F), only permuted copy number matrix will be used. 50 | Default value is F due to time cost. 51 | 52 | ``` 53 | 54 | Input files 55 | =========== 56 | 57 | Single cell copy number input files: 58 | 59 | Two kinds of input files are allowed in MEDALT: 60 | 61 | (1) Integer copy number profile from scDNA-seq 62 | 63 | (2) Inferred copy number profile from scRNA-seq 64 | 65 | *scDNA-seq input* 66 | 67 | chr pos cell1 cell2 cell3 ...... 68 | 1 977836 2 3 1 ...... 69 | 1 1200863 3 3 1 ...... 70 | 71 | *scRNA-seq input* 72 | 73 | cell1 cell2 cell3 ...... 74 | gene1 0.5 1.5 2.1 ...... 75 | gene2 1.1 1.8 0.6 ...... 76 | 77 | >For scRNA-seq input, the copy number is inferred relative copy number (relative to normal cells) instead of integer copy number. If value close to 1, it means diploid. Value close to 0.5 means copy number = 1. Value close to 1.5 means copy number = 3. We directly incorporate inferCNV result as input. 78 | 79 | Run MEDALT package 80 | ============ 81 | 82 | Python scTree.py [-O ] [-W ] [-R ] –P –I -D -G 83 | [...] contains optional parameters. 84 | The mandatory arguments are -P, -I, -D and -G. 85 | The input file type (-D) is either "D" (DNA) or "R" (RNA). 86 | The genome version (-G) is either "hg19" or "hg38". 87 | >By default, we estimate background using by-chromosome permuted single cell copy number matrix rather than reconstructing a tree from permuted matrix due to time cost. You can change the setting by -R T. The default value of smoothing window size (-W) is 30, which defines the smoothing window as 30 adjacent genes for scRNA-seq data. 88 | 89 | 90 | Examples 91 | ======== 92 | Try MEDALT in the package directory on the different example datasets 93 | 94 | **Example 1: Input integer copy number profile from scDNA-seq data** 95 | 96 | python scTree.py -P ./ -I ./example/scDNA.CNV.txt -D D -G hg19 -O ./example/outputDNA 97 | 98 | **Example 2: Input inferred relative copy number profile from scRNA-seq data** 99 | 100 | python scTree.py -P ./ -I ./example/scRNA.CNV.txt -D R -G hg19 -O ./example/outputRNA 101 | 102 | >In order to save time, we don't reconstruct trees based on permutation data. You can set -R T 103 | to reconstruct permuted tree. 104 | 105 | Output files 106 | ============ 107 | 108 | Three text files: 109 | 110 | (1) CNV.tree.txt which is an rooted directed tree including three columns: parent node, child node and distance 111 | 112 | (2) segmental.LSA.txt which includes broad CNAs significantly associated with lineage expansion 113 | 114 | (3) gene.LSA.txt which includes focal (gene) CNAs significantly associated with lineage expansion 115 | 116 | *LSA output* 117 | 118 | region Score pvalue adjustp cell depth subtreesize CNA 119 | chr10:q26.3 -0.89 0.001 0.007 t4c17 2 38 DEL 120 | chr7:q11 0.58 0.007 0.017 t4c17 2 38 AMP 121 | chr7:p15.3 0.57 0.001 0.005 t4c14 4 14 AMP 122 | chr10:q24.2 -0.85 0.019 0.248 t4c14 4 14 DEL 123 | 124 | region: genomic loci which have CNA are associated with lineage expansion; 125 | Score: average cumulative fold level (CFL) in the lineage; 126 | pvalue: emprival p value of LSA; 127 | adjustp: corrected p value after FDR corrected; 128 | cell: the cell node that corresponding associated lineage rooted at; 129 | depth: the depth of cell in MEDALT tree 130 | subtreesize: the size of corresponding lineage 131 | CNA: direction of copy number alteration, amplification (AMP) or deletion (DEL) 132 | 133 | > If there is parallel evolution event, the results will be saved in a separate file. 134 | 135 | Two figures: 136 | 137 | (1) singlecell.tree.pdf which is a visualization of MEDALT by igraph. You also can input CNV.tree.txt into Cytoscape to generate preferred visualization. 138 | 139 | (2) LSA.tree.pdf which is a visualization of identified CNAs by igraph. 140 | 141 | > In LSA figure, we only show top 3 events for each lineage. You can check more details in segmental or gene level LSA file. 142 | 143 | 144 | Developer 145 | ========= 146 | Fang Wang (fwang9@mdanderson.org), Qihan Wang (Chuck.Wang@rice.du) 147 | 148 | Draft date 149 | ========== 150 | April. 06, 2020 151 | -------------------------------------------------------------------------------- /Readfile.py: -------------------------------------------------------------------------------- 1 | # Returns a dictionary mapping node names to list of list of integers representing list of copy number list 2 | def read(filename): 3 | nodes = {} 4 | charlist=[] 5 | chromosome=[] 6 | CNV={} 7 | for ele in range(1,23): 8 | chromosome.append("chr"+str(ele)) 9 | chromosome.append("chrX") 10 | chromosome.append("chrY") 11 | data=open(filename) 12 | line=next(data) 13 | line=line[0:-1].split("\t") 14 | segDist={} 15 | k=0 16 | for ele in line: 17 | ele=ele.split("_")[0] 18 | segDist.setdefault(ele,[]).append(k) 19 | k=k+1 20 | for ele in chromosome: 21 | if segDist.has_key(ele): 22 | charlist.append((min(segDist[ele]),max(segDist[ele])+1)) 23 | if segDist.has_key("chr23"): 24 | charlist.append((min(segDist["chr23"]),max(segDist["chr23"])+1)) 25 | if segDist.has_key("chr24"): 26 | charlist.append((min(segDist["chr24"]),max(segDist["chr24"])+1)) 27 | for line in data: 28 | array = line.split() 29 | name = array.pop(0) 30 | snip = [] 31 | CNVvalue = [] 32 | for (a,b) in charlist: 33 | snip.append(map(int, array[a:b])) 34 | CNVvalue.extend(map(int, array[a:b])) 35 | nodes[name] = snip 36 | CNV[name]=list(set(CNVvalue)) 37 | data.close() 38 | root = 'NA' 39 | for ele in CNV.keys(): 40 | if CNV[ele] == [2]: 41 | root=ele 42 | if root == "NA": 43 | snip=[] 44 | for (a,b) in charlist: 45 | snip.append([2]*(b-a)) 46 | nodes['root']=snip 47 | root='root' 48 | return nodes,root 49 | -------------------------------------------------------------------------------- /SC1_py_sctree.py: -------------------------------------------------------------------------------- 1 | # required packages 2 | import os,sys 3 | import numpy as np 4 | import pandas as pd 5 | from datetime import datetime as dt_ 6 | from SP1_SCT_UTIL import * 7 | 8 | def main(): 9 | ### Initialing variables ##################################################################### 10 | ############################################################################################## 11 | sys.setrecursionlimit(20000) 12 | usage = "usage: python %prog <-P path> <-I input> <-D datatype>" 13 | description = """Input integer copy number profile, diploid conversion should be done prior to this run. 14 | Columns correspond to cell IDs and Rows correspond to genomic regions (scDNA) or genes (scRNA).""" 15 | op = OptionParser(version="%prog 1.0", description=description, usage=usage, add_help_option=False) 16 | op.add_option("-h", "--help",action="help", 17 | help="Show this help message and exit.") 18 | op.add_option("-P", "--Path",dest="Path",type="str", 19 | help="Path to the script") 20 | op.add_option("-I", "--Input",dest="Input",type="str", 21 | help="Input file") 22 | op.add_option("-G", "--Genome",dest="Genome",type="str", 23 | help="Genome version hg19 or hg38") 24 | op.add_option("-O", "--Output",dest="Output",type="str", 25 | help="Output path. Default: input name + runtime") 26 | op.add_option("-D", "--Datatype",dest="Datatype",type="str", 27 | help="The type of input data. Either D (DNA-seq) or R (RNA-seq).") 28 | op.add_option("-W", "--Windows",dest="Windows",type="str", 29 | help="the number of genes to merge when the input data type is R. Default 30.") 30 | op.add_option("-R", "--Permutation",dest="Permutation",type="str", 31 | help="""Whether reconstructed permuted tree (T) or not (F). 32 | If not, permuted copy number profile will be used to perform LSA. 33 | Default value is F due to time cost.""") 34 | 35 | (options,args) = op.parse_args() 36 | # check input parameters. Package path, input file, data type and genome version are required. 37 | if not options.Path or not options.Input or not options.Datatype or not options.Genome: 38 | op.print_help() ; sys.exit(1) 39 | 40 | # get the input parameters 41 | PCKAGE_PATH = options.Path 42 | IN_CNV_PATH = options.Input 43 | IN_CNV_FILE = IN_CNV_PATH.split("/")[-1][:-4] 44 | NUCLEC_ACID = options.Datatype 45 | REF__GENOME = options.Genome 46 | GENE_BIN_SZ = options.Windows if options.Windows else "30" 47 | rt = dt_.now() ; rt = f"{rt.year}_{rt.month:0>2}{rt.day:0>2}_{rt.hour:0>2}{rt.minute:0>2}" 48 | OUTPUT_PATH = options.Output if options.Output else f"{IN_CNV_PATH[:-4]}_{rt}" 49 | if not options.Permutation: permutation = "F" 50 | else: permutation = options.Permutation 51 | 52 | # get the input parameters 53 | PCKAGE_PATH = getPath(PCKAGE_PATH).replace("//", "/") 54 | IN_CNV_PATH = getPath(IN_CNV_PATH).replace("//", "/") 55 | OUTPUT_PATH = getPath(OUTPUT_PATH).replace("//", "/") 56 | GENPOS_PATH = f"{PCKAGE_PATH}/genomes/gencode_v{REF__GENOME[-2:]}_gene_pos.txt" 57 | BANDBD_PATH = f"{PCKAGE_PATH}/genomes/{REF__GENOME}.band.bed" 58 | 59 | # supplementary files paths 60 | DE_DUP_PATH = f"1_{IN_CNV_FILE}_dedup.csv" 61 | DUPREF_PATH = f"1_{IN_CNV_FILE}_dup_ref.csv" 62 | SEGCNV_PATH = f"2_{IN_CNV_FILE}_bin_{GENE_BIN_SZ}.csv" 63 | SCTREE_PATH = f"3_CNV.tree.txt" 64 | os.system("mkdir -p " + OUTPUT_PATH) 65 | 66 | 67 | ### Data reforming ########################################################################### 68 | ### change the input copy number profile to the matrix format used to infer Tree ### 69 | ### if the data type = R, estimate integer copy number by averaging adjacent genes. ### 70 | ### Default number of genes is 30. ### 71 | ############################################################################################## 72 | # import cell CNV data 73 | print("\n#####################################################") 74 | print("### now running SC1_py_sctree.py ###") 75 | print("#####################################################\n") 76 | os.chdir(OUTPUT_PATH) 77 | print(f"All intermediate files and output files will be stored in {OUTPUT_PATH}") 78 | print("reading data") 79 | df_ori = pd.read_csv(IN_CNV_PATH, sep="\t", index_col=0) 80 | df_ori.columns = df_ori.columns.str.replace("[\ \-\.]", "_", regex=True) 81 | 82 | # deduplication 83 | cel_dup = df_ori.T.duplicated(keep="first") 84 | cel_uni = cel_dup[~cel_dup].index.tolist() # unique cell list 85 | cel_dup = cel_dup[ cel_dup].index.tolist() # duplicated cell list 86 | # find duplication relationship 87 | print("running deduplication") 88 | dup_relationship = {"par_cell":[], "dup_cell":[]} 89 | for dup_cell in cel_dup: 90 | for uni_cell in cel_uni: 91 | if df_ori[uni_cell].equals(df_ori[dup_cell]): # find cells of origin 92 | dup_relationship["par_cell"].append(uni_cell) 93 | dup_relationship["dup_cell"].append(dup_cell) 94 | break 95 | cell_dup_ref = pd.DataFrame(dup_relationship) 96 | if cell_dup_ref.shape[0]>0: 97 | # save duplication information 98 | df_ded = df_ori.loc[:,cel_uni] 99 | #df_ded = df_ded.iloc[:,np.random.choice(range(df_ded.shape[1]), size=min(df_ded.shape[1], 100), replace=False)] 100 | print(f"""{df_ded.shape[1]}/{df_ori.shape[1]} cells remained after deduplication. 101 | duplication relationship is stored in {DUPREF_PATH} and 102 | dedup-data saved in {DE_DUP_PATH}, which will be used in the following analysis""") 103 | df_ded.to_csv(DE_DUP_PATH, sep="\t") 104 | cell_dup_ref.to_csv(DUPREF_PATH, sep="\t") 105 | else: 106 | print("no duplicating cells found, good!") 107 | DE_DUP_PATH = IN_CNV_PATH 108 | df_ded = df_ori 109 | 110 | print(f"converting CN profile to segmental CN level:\n") 111 | command = f"Rscript {PCKAGE_PATH}/SC2_RR_dataTransfer.R {OUTPUT_PATH} {DE_DUP_PATH} {NUCLEC_ACID} {SEGCNV_PATH}" # input DNA 112 | if NUCLEC_ACID == "R": command = f"{command} {GENPOS_PATH} {GENE_BIN_SZ}" # input RNA 113 | os.system(command) ; print(command) 114 | 115 | ### MEDLAT tree inference #################################################################### 116 | ### reformed segmental data will be used to infer MEDLAT single cell tree ### 117 | ### where a diploid cell will be used as the root (imputed if not existing) ### 118 | ############################################################################################## 119 | nodes, root = read_CNV(SEGCNV_PATH) 120 | node_list = nodes.keys() 121 | 122 | #calculation of MED distance 123 | print("\n#####################################################") 124 | print("### going back to SC1_py_sctree.py ###") 125 | print("#####################################################\n") 126 | print("initializing tree") 127 | tree_dict = create_tree(nodes, node_list, root, df_cor=None, len_threshold=30) 128 | # set df_cor to None and leave proximity to True if no spatial coordinate information is provided 129 | # this will automatically calculate pairwise MED instead of only connecting cells within close proximity 130 | 131 | print("computing rdmst") 132 | tree = compute_rdmst(tree_dict, root)[0] 133 | with open(SCTREE_PATH,'w') as write: 134 | write.write("\t".join(["stt", "end", "len"])+"\n") # header line 135 | for in_node in tree.keys(): 136 | for ot_node in tree[in_node].keys(): 137 | write.write("\t".join([in_node, ot_node, str(tree[in_node][ot_node])])+"\n") 138 | print(f"MEDALT inferrence finish, weighted tree saved to:{SCTREE_PATH}") 139 | 140 | #Permutation process for lineage speciation analysis (LSA) 141 | ### LSA test ################################################################################# 142 | ### lineage speciation analysis can be done with/without permutation. ### 143 | ### with permutation (T), both copy number profiles and single cells labels are shuffled ### 144 | ### to repeat above inference process and be used to estimate LSA result significance. ### 145 | ### otherwise (permu==F), only shuffle single cell labels to estimate significance. ### 146 | ############################################################################################## 147 | if permutation == "T": 148 | PERMUT_PATH = OUTPUT_PATH + "/permutation" 149 | print("Reconstructing tree based on permutation data.") 150 | print("This will take a long time! Please have some coffee.") 151 | 152 | #permute copy number profile 153 | step_3_cmd = f"Rscript {PCKAGE_PATH}/SC3_RR_Permutation.R {SCTREE_PATH} " 154 | step_3_cmd = step_3_cmd + f"{IN_CNV_PATH} {NUCLEC_ACID} {OUTPUT_PATH}/permutation" 155 | if datatype == "D": 156 | os.system(step_3_cmd) 157 | elif datatype == "R": 158 | os.system(step_3_cmd + " "+ GENE_BIN_SZ + " " + REF__GENOME) 159 | 160 | #Infer permutation tree 161 | for j in range(1,101): 162 | permutefile=permutationPath+"/permute."+str(j)+".CNV.txt" 163 | (nodes,root) = read(permutefile) 164 | node_name_list = nodes.keys() 165 | g = create_tree(nodes, node_name_list,root) 166 | result = compute_rdmst(g, root) 167 | permuteTree=permutefile+".celltree.txt" 168 | write=open(permuteTree,'w') 169 | tree=result[0] 170 | out1="from"+"\t"+"to"+"\t"+"dist" 171 | write.write(out1) 172 | for ele in tree.keys(): 173 | out=ele 174 | for value in tree[ele].keys(): 175 | out1=out+"\t"+value+"\t"+str(tree[ele][value]) 176 | print >> write,out1 177 | write.close() 178 | print("Pemutation tree finish.") 179 | elif permutation == "F": PERMUT_PATH = "" 180 | 181 | #Identifying CNAs associated with cellular lineage expansion. 182 | print("Performing LSA.") 183 | cmd = f"Rscript {PCKAGE_PATH}/SC4_RR_LSA_tree.R {PCKAGE_PATH} {IN_CNV_PATH} {OUTPUT_PATH} {SCTREE_PATH} {SEGCNV_PATH} {NUCLEC_ACID} {REF__GENOME} {PERMUT_PATH}" 184 | print(cmd) 185 | os.system(cmd) 186 | print("All is done!") 187 | 188 | 189 | if __name__ == "__main__": 190 | 191 | try: 192 | main() 193 | except KeyboardInterrupt: 194 | sys.stderr.write("User interrupt me, see you!\n") 195 | sys.exit(0) 196 | -------------------------------------------------------------------------------- /SC2_RR_dataTransfer.R: -------------------------------------------------------------------------------- 1 | ####transfer format of input data 2 | ##Input integer copy number profile with header from scDNA-seq, separeted by tab. 3 | ##The row in DNA input data is chromosomal segment. The range of chromosome is from 1 to 23. 4 | ##The first column is chromosome, the second column is the start position of bin, and the following columns are sequenced cells. 5 | DNAinput <- function(in_file, outfile){ 6 | cnv_mtx <- read.csv(in_file, sep="") 7 | regions <- table(cnv_mtx[,1]) 8 | rgn_seq <- c() 9 | for (i in 1:length(regions)){ 10 | rgn_seq=c(rgn_seq,c(1:regions[i])) 11 | } 12 | row.names(cnv_mtx)=paste("chr",cnv_mtx[,1],"_",rgn_seq,sep="") 13 | CNV=cnv_mtx[,3:dim(cnv_mtx)[2]] 14 | CNV=t(CNV) 15 | write.table(CNV, outfile, sep="\t", col.names=TRUE, row.names=TRUE, quote=FALSE) 16 | #return(paste(in_file,".CNV.txt",sep="")) 17 | } 18 | 19 | #### transfer format of input data 20 | ## Input the expression data inferred from InferCNV: infercnv_obj@expr.data 21 | ## input the reference for gene position information: geneName chromosome start end 22 | ## bin_siz means the size of bin which is defined by the number of gene 23 | RNAinput <- function(in_file, ref_pth, bin_siz, outfile){ 24 | cnv_mtx=read.csv(in_file,sep="") # "" to cope with any kinds of \t, \s 25 | if(!is.numeric(cnv_mtx[,1])){ # if the first col is gene name 26 | rownames(cnv_mtx)=cnv_mtx[,1] # make it row names 27 | cnv_mtx = cnv_mtx[,-1]} # then remove it from the mtx 28 | 29 | cnv_mtx <- round(cnv_mtx) # round cn profile 30 | ref_gen <- read.csv(ref_pth, sep="\t", header=F) # reference genes 31 | idx_gen <- match(row.names(cnv_mtx), as.character(ref_gen[,1])) # use only matched genes 32 | newdata <- cbind(ref_gen[idx_gen[!is.na(idx_gen)],2:3], # chr & start 33 | cnv_mtx[ !is.na(idx_gen) ,]) 34 | cat(paste0("", dim(newdata)[1], "/", dim(cnv_mtx)[1], " genes matched in ref_seq.\n")) 35 | 36 | newdata[,1] <- gsub("chr", "", as.character(newdata[,1])) 37 | #newdata[,1] <- gsub("X", "23", newdata[,1]) 38 | newdata <- newdata[newdata[,1]!="M" & newdata[,1]!="Y",] 39 | 40 | seg_dat <- c() ; chr_rgn <- c() 41 | for (i in unique(newdata[,1])){ # within each chr 42 | sub_seg <- c() 43 | subdata <- newdata[newdata[,1]==i,] 44 | subdata <- subdata[order(as.numeric(subdata[,2])),] # sort by chr coor 45 | bin_num <- round(dim(subdata)[1]/bin_siz) # n bins in this chr 46 | if(bin_num>0){ 47 | # take the mean for 1:(n-1) bin 48 | for (j in 1:max(1, bin_num-1)){ 49 | sub_bin <- subdata[((j-1)*bin_siz+1):(j*bin_siz), -1:-2] 50 | sub_seg <- rbind(sub_seg, apply(sub_bin, 2, mean)) 51 | chr_rgn <- c(chr_rgn, paste(i,"_", j, sep=""))} 52 | # take the mean for last bin 53 | lastbin <- ((bin_num-1)*bin_siz+1):dim(subdata)[1] # mean last bin 54 | sub_seg <- rbind(sub_seg, apply(subdata[lastbin,-1:-2],2,mean)) 55 | chr_rgn <- c(chr_rgn, paste(i, "_", bin_num, sep="")) 56 | # attach to overall data 57 | seg_dat <- rbind(seg_dat, sub_seg) 58 | }else{ 59 | sub_seg <- apply(subdata[,-1:-2],2,mean) 60 | chr_rgn <- c(chr_rgn, i) 61 | seg_dat <- rbind(seg_dat, sub_seg) 62 | }} 63 | 64 | row.names(seg_dat) <- paste("chr", chr_rgn, sep="") 65 | seg_dat=t(round(seg_dat)) # eventually wants to make it integer 66 | write.table(seg_dat, outfile, sep="\t", col.names=TRUE, row.names=TRUE, quote=FALSE) 67 | cat(paste0("saved file: ", outfile, "\n"))} 68 | 69 | ################################################################# 70 | ## main run ## 71 | ################################################################# 72 | cat("\n#####################################################\n") 73 | cat( "### now running SC2_RR_dataTransfer.R ###") 74 | cat("\n#####################################################\n\n") 75 | cmd_arg <- commandArgs(T) 76 | outpath <- cmd_arg[1] 77 | in_file <- cmd_arg[2] 78 | nt_type <- cmd_arg[3] 79 | outfile <- cmd_arg[4] 80 | ref_pth <- cmd_arg[5] 81 | if (nt_type == "R"){ bin_siz <- cmd_arg[6] } 82 | setwd(outpath) 83 | 84 | if (nt_type=="D"){ 85 | DNAinput(in_file, outfile) 86 | }else if (nt_type == "R"){ 87 | bin_siz <- as.numeric(bin_siz) 88 | RNAinput(in_file, ref_pth=ref_pth, bin_siz=bin_siz, outfile=outfile) 89 | }else{ 90 | cat("invalid specified datatype, should be either D or R\n")} -------------------------------------------------------------------------------- /SC3_RR_Permutation.R: -------------------------------------------------------------------------------- 1 | #R function for permutation process 2 | #input: 1. the path of R script LSAfunction.R 3 | # 2. copy number profile matrix 4 | # 3. datatype "D" (DNA-seq) or "R" (RNA-seq) 5 | # 4. set the path which store the tree corresponding to permutation datasets 6 | # 5. the number of genes to estimate copy number of genomic bin if you set datatype as R 7 | # defaul 30 genes 8 | 9 | args<-commandArgs(T) 10 | datapath=args[1] 11 | inputfile=args[2] 12 | datatype=args[3] 13 | permutationPath=args[4] 14 | if (length(args)==6){ 15 | delt=args[5] 16 | hg=args[6] 17 | if (hg == "hg19"){ 18 | reference=read.csv(paste(datapath,"/gencode_v19_gene_pos.txt",sep=""),sep="\t",header=F) 19 | }else{ 20 | reference=read.csv(paste(datapath,"/gencode_v38_gene_pos.txt",sep=""),sep="\t",header=F) 21 | 22 | } 23 | } 24 | set.seed(1234) 25 | source(paste(datapath,"/LSAfunction.R",sep="")) 26 | cat("\n#####################################################\n") 27 | cat( "### now running SC3_RR_Permutation.R ###") 28 | cat("\n#####################################################\n\n") 29 | data = read.csv(inputfile,sep="\t",header = TRUE) 30 | 31 | #refernce genome to check if input data are ordered 32 | #this is only used for RNA-seq data 33 | if (datatype=="R"){ 34 | data=round(data*2)#integer copy number 35 | } 36 | for (j in 1:100){ 37 | 38 | #permute copy number profile from DNA-seq data 39 | if (datatype=="D"){ 40 | region=data[,1:2] 41 | region[,1]=paste("chr",region[,1],sep="") 42 | region$end=region[,2] 43 | colnames(region)=c("chrom","chrompos","end") 44 | region$ID1=paste(region$chrom,"_",region$chrompos,sep="") 45 | permuteCNV=permuteSeg(data,region) 46 | write.table(permuteCNV,paste(permutationPath,"/permute.",j,".CNV.txt",sep=""),col.names = T, row.names=T,quote=F,sep="\t") 47 | }else if (datatype=="R"){ 48 | 49 | #Permutate the copy number profile by genes from the same chromosome into different cells 50 | permuteCNV=permuteGene(data,reference) 51 | 52 | #calculate copy number of genomic bin 53 | regionCNV=BinCNV(reference,permuteCNV,as.numeric(delt)) 54 | write.table(permuteCNV,paste(permutationPath,"/permute.",j,".gene.CNV.txt",sep=""),col.names = T, row.names=T,quote=F,sep="\t") 55 | write.table(t(regionCNV),paste(permutationPath,"/permute.",j,".CNV.txt",sep=""),col.names = T, row.names=T,quote=F,sep="\t") 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /SC4_RR_LSA_tree.R: -------------------------------------------------------------------------------- 1 | #main R function to perform linegae speciation analysis 2 | #input: 1. the path of R script LSAfunction.R 3 | # 2. input copy number profile from scDNA-seq or scRNA-seq 4 | # 3. the infer tree file based on integer copy number profile 5 | # 4. integer copy number matrix 6 | # 5. output path of results 7 | # 6. nuc_type "D" (DNA-seq) or "R" (RNA-seq) 8 | # 7. genome version: hg19 or hg38 9 | # 8. optional. If you have the permutation tree, input the path 10 | 11 | suppressWarnings(suppressMessages({ 12 | library(HelloRanges) 13 | library(igraph) 14 | library(stringr) 15 | })) 16 | 17 | args<-commandArgs(T) 18 | PKG_PATH <- args[1] # path to the package 19 | CNV_PATH <- args[2] # path to original raw input CNV 20 | OUT_PATH <- args[3] # path to output dir 21 | SCT_PATH <- args[4] # path to single cell tree 22 | CNV_FILE <- args[5] # path to dataTransfer-ed CNV 23 | nuc_type <- args[6] # nucleic acid type 24 | ref__seq <- args[7] # human genome version 25 | if (length(args)==8){ permPATH=args[8] } 26 | source(paste(PKG_PATH,"/SP2_LSA_FUNC.R",sep="")) 27 | set.seed(1234) ; setwd(OUT_PATH) 28 | 29 | REF_PATH <- paste0(PKG_PATH, "genomes/gencode_v", gsub("[^[:digit:]]", "", ref__seq), "_gene_pos.txt") 30 | ONC_PATH <- paste0(PKG_PATH, "genomes/pathwaygene.txt") 31 | BANDPATH <- paste(PKG_PATH, "genomes/", ref__seq, ".band.bed", sep="") 32 | 33 | 34 | ### single cell tree retrieval ############################################################### 35 | ### retrieve single cell tree inferred from the SC1_py_sctree.py ### 36 | ### then visualize the graph and find nodes/cells of interest to do LSA ### 37 | ############################################################################################## 38 | cat("\n#####################################################\n") 39 | cat( "### now running SC4_RR_LSA_tree.R ###") 40 | cat("\n#####################################################\n\n") 41 | cat("Visualizing MEDALT\n") 42 | # read in edges 43 | sct_edges=read.csv(SCT_PATH, sep="\t", colClasses=c("character", "character", "integer")) # read edges 44 | sct_nodes=data.frame(id=union(sct_edges$stt, sct_edges$end), size=3, color="lightgreen") # initialize nodes 45 | rownames(sct_nodes) <- sct_nodes$id # set rownames to be cell_id 46 | 47 | # find the root 48 | root_node <- setdiff(sct_edges$stt, sct_edges$end) 49 | root_coor <- which(sct_nodes$id==root_node) 50 | sct_nodes$color[root_coor]="black" 51 | # make graph obj 52 | sct_graph <- graph_from_data_frame(d=sct_edges, vertices=sct_nodes, directed=T) # igraph obj 53 | 54 | # use nodes' distance from root to color them 55 | sct_nodes$dist <- as.integer(t(distances(sct_graph, v=V(sct_graph)[root_coor], to=V(sct_graph), weights=sct_edges$len))) 56 | sct_nodes$dpth <- as.integer(t(distances(sct_graph, v=V(sct_graph)[root_coor], to=V(sct_graph), weights=rep(1, nrow(sct_edges))))) 57 | rt_pal <- colorRampPalette(c("#fb8072", "#80b1d3")) 58 | rt_col <- c("black", rt_pal(max(sct_nodes$dist))) ; sct_nodes$dist_col <- rt_col[sct_nodes$dist+1] 59 | rt_col <- c("black", rt_pal(max(sct_nodes$dpth))) ; sct_nodes$dpth_col <- rt_col[sct_nodes$dpth+1] 60 | 61 | # use edge "betweenness" to set the width of edges 62 | eg_btw <- edge.betweenness(sct_graph)/20 63 | eg_pal <- colorRampPalette(c("#3B3B3B", "#9C9C9C")) 64 | eg_col <- eg_pal(max(sct_edges$len)+1) 65 | 66 | graph_size <- 14 67 | options(repr.plot.width=graph_size, repr.plot.height=graph_size) 68 | sctlayout <- layout_with_kk(sct_graph, weights=(sct_edges$len+500)) 69 | pdf(file=paste(OUT_PATH, "/", "3_scTree_visualization.pdf", sep=""), width=graph_size, height=graph_size) # , res=300, units="in", compression="lzw" 70 | plot(sct_graph, layout=sctlayout, 71 | edge.arrow.size=.2, edge.width=sct_edges$dist+8, edge.label=sct_edges$len, edge.color="#7f7f7f", 72 | vertex.label=NA, vertex.color=sct_nodes$dpth_col, vertex.size=sct_nodes$size, 73 | vertex.frame.width=3, vertex.frame.color="black") 74 | try(dev.off(), silent=TRUE) 75 | 76 | # calculate the depth, the number of children nodes for each cell 77 | cell_pem <- data.frame(cells=sct_nodes$id, 78 | depth=sct_nodes$dpth, 79 | child=sapply(sct_nodes$id, child, cellTree=sct_edges)) 80 | 81 | # perform lineage speciation analysis for cells that the number of children is no less than 5. 82 | cell_pem <- cell_pem[cell_pem$child >= 5 & cell_pem$cells != root_node,] ### cells for permutation 83 | 84 | 85 | ### onco-gene & chr regions retrieval ######################################################## 86 | ### from hg19/hg38, get the overlap of data CNV with onco-genes/chr-regions ### 87 | ############################################################################################## 88 | ref_gene <- read.csv(REF_PATH, sep="\t", header=F, colClasses=c("character", "character", "integer", "integer")) 89 | colnames(ref_gene) <- c("gene", "chr", "stt", "end") 90 | ref_gene <- ref_gene[grep("chr[^YM]", ref_gene$chr),] 91 | #ref_gene$chr <- gsub("chr[xX]", "chr23", ref_gene$chr) 92 | 93 | CNV_gene <- read.csv(CNV_PATH, sep="\t", header = TRUE) 94 | if(!is.numeric(CNV_gene[,1])){ 95 | rownames(CNV_gene)=CNV_gene[,1] 96 | CNV_gene = CNV_gene[,-1]} 97 | CNV_gene <- CNV_gene[,intersect(sct_nodes$id, colnames(CNV_gene))] 98 | 99 | cat("LSA segmentation!\n") 100 | if (nuc_type=="D"){ 101 | gene_loc <- CNV_gene[,1:2] 102 | gene_loc[,1] <- paste("chr",gene_loc[,1],sep="") 103 | gene_loc$end <- gene_loc[,2] 104 | gene_loc <- gene_loc[!duplicated(gene_loc),] 105 | colnames(gene_loc) <- c("chr","stt","end") 106 | }else if (nuc_type=="R"){ 107 | CNV_gene <- round(CNV_gene) 108 | gene_idx <- match(row.names(CNV_gene), ref_gene$gene) # subset to genes matched in ref_gene 109 | CNV_subs <- cbind(ref_gene[gene_idx[!is.na(gene_idx)], c("chr", "stt")], 110 | CNV_gene[ !is.na(gene_idx) ,]) # concat 2 dfs 111 | rownames(CNV_subs) <- rownames(CNV_gene)[!is.na(gene_idx)] 112 | 113 | gene_loc <- CNV_subs[,c(1,2,2)] 114 | colnames(gene_loc)=c("chr","stt","end") 115 | CNV_gene <- CNV_subs ; rm(CNV_subs)} ##################### CNV_gene is CNV_subs from now on 116 | 117 | write.table(gene_loc, paste0(OUT_PATH, "/4_gene_loc.bed"), col.names=F, row.names=F, sep="\t", quote=F) # for next bed-tool intersect 118 | 119 | onc_pth <- read.csv(ONC_PATH, sep="\t") 120 | colnames(onc_pth) <- c('chr', 'stt', 'end', 'name', 'pathway') 121 | onc_pth <- onc_pth[onc_pth$name %in% ref_gene$gene,] # onco genes in data 122 | idx_onc <- match(onc_pth$name, ref_gene$gene) # correct gene location 123 | onc_pth[,c("chr", "stt", "end")] <- ref_gene[idx_onc,c("chr", "stt", "end")] 124 | 125 | #Gene level copy number profile 126 | if (nuc_type=="D"){ 127 | CNV__DNA <- read.csv(CNV_FILE,sep="\t") 128 | CNV_onco <- do.call(cbind,lapply(1:dim(onc_pth)[1], geneCNAfunction, onc_pth, CNV__DNA, gene_loc)) 129 | colnames(CNV_onco) <- as.character(onc_pth$name) 130 | rownames(CNV_onco) <- rownames(CNV__DNA) 131 | }else if (nuc_type == "R"){ 132 | CNV_gene <- CNV_gene[, 3:dim(CNV_gene)[2]] # get rid of chr & loc, remaining only cell barcodes in columns 133 | idx_onco <- match(onc_pth$name, rownames(CNV_gene)) 134 | CNV_onco <- t(CNV_gene[idx_onco[!is.na(idx_onco)],]) 135 | CNV_onco <- round(CNV_onco) 136 | colnames(CNV_onco) <- onc_pth$name[!is.na(idx_onco)]} 137 | 138 | index_NA <- apply(CNV_onco, 2, find_NAs) # get rid off NAs 139 | CNV_onco <- CNV_onco[, index_NA==1] 140 | rownames(CNV_onco) <- str_replace_all(rownames(CNV_onco), "\\.", "_") 141 | 142 | ref_band = read.csv(BANDPATH, sep="\t", header = F, 143 | colClasses=c("character", "integer", "integer", "character")) 144 | colnames(ref_band) <- c("chr", "stt", "end", "band") 145 | 146 | chrom = unique(ref_band[,1]) 147 | chr__arm = c() 148 | band_reg = c() 149 | for (i in chrom){ # get band information of all chr 150 | sub__ref <- ref_band[ref_band[,1]==i,] 151 | chr_parm <- sub__ref[grep("p",sub__ref[,4]),] # find the p arm region 152 | chr_qarm <- sub__ref[grep("q",sub__ref[,4]),] # find the q arm region 153 | arm_coor <- data.frame(chr=i, # put p/q arm info to a dataframe 154 | start=c(head(chr_parm,1)[,2], head(chr_qarm,1)[,2]), 155 | end=c(tail(chr_parm,1)[,3], tail(chr_qarm,1)[,3]), band=c("p","q")) 156 | chr__arm <- rbind(chr__arm, arm_coor) 157 | sub.band <- do.call(rbind, strsplit(sub__ref[,4], split="[.]")) 158 | bandname <- unique(sub.band[,1]) 159 | arm_posi <- sapply(bandname, get_arm_position, sub.band, sub__ref) 160 | sub_regn <- data.frame(chr=i, start=arm_posi[1,], end=arm_posi[2,], band=bandname) 161 | band_reg <- rbind(band_reg, sub_regn)} 162 | 163 | chr__arm$length <- chr__arm$end - chr__arm$start 164 | band_reg$length <- band_reg$end - band_reg$start 165 | ref_band$ID <- paste(ref_band$chr, ref_band$band, sep=":") 166 | 167 | bed_command = bedtools_intersect(paste0("-a ", PKG_PATH, "/genomes/", ref__seq, ".band.bed ", 168 | "-b ", paste0(OUT_PATH, "/4_gene_loc.bed"))) 169 | bed_outs <- as.data.frame( eval(bed_command) ) 170 | bed_outs$ID <- paste(bed_outs$seqnames, ":", bed_outs$name, sep="") # band id: chr_band 171 | bed_outs$ID1 <- paste(bed_outs$seqnames, "_", bed_outs$end, sep="") # band id: chr_location 172 | gene_loc$ID1 <- paste(gene_loc$chr, "_", gene_loc$stt, sep="") 173 | bed_outs <- bed_outs[!duplicated(bed_outs),] 174 | ID=unique(bed_outs$ID) 175 | 176 | ### get CN matrix for chr band 177 | CNV_band = do.call(cbind, lapply(ID, subsetCNV, CNV_gene=CNV_gene, bed_outs=bed_outs, gene_loc=gene_loc)) 178 | colnames(CNV_band)=ID 179 | 180 | ### perform LSA ############################################################################## 181 | ############################################################################################## 182 | ### perform LSA analysis 183 | geneGscore <- lapply(cell_pem$cells, lineageScore, CNV_onco, sct_edges) 184 | names(geneGscore) <- cell_pem$cells 185 | 186 | #calculte CFL at genomic bin level 187 | bandGscore=lapply(cell_pem$cells, lineageScore, CNV_band, sct_edges) 188 | names(bandGscore)=cell_pem$cells 189 | 190 | ### run permutation to estimate significance of LSA results ################################## 191 | ############################################################################################## 192 | # do calculation for permutation dataset 193 | cat("Calculating permutation CFL\n") 194 | t0 <- Sys.time() ; tt <- Sys.time() 195 | arg_8 <- length(args) < 8 196 | if (arg_8){ # if no permutation tree, calculate CFL based on real tree structure 197 | times=200 ; rpfeq=times%/%10 198 | permuteres=lapply(1:times, denovo_perm_score, 199 | CNV_gene, ID, bed_outs, nuc_type, onc_pth, gene_loc, ref_gene, sct_edges) 200 | } else { # permutation trees exist, calculate CFL based on permuted tree structure 201 | permutefile <- list.files(permPATH) 202 | permutefile <- permutefile[grep("celltree", permutefile)] 203 | cat(paste("There are ", length(permutefile), " permutation trees.")) 204 | if (length(permutefile)>0){ 205 | permuteres = lapply(permutefile, permuteTreeScore, ID, bed_outs, nuc_type, onc_pth, gene_loc, ref_gene, permPATH)}} 206 | 207 | cat(paste("runtime:", Sys.time()-t0, "\n")) 208 | 209 | #Estimate emperical p value 210 | cat("Estimate emperical p value\n") 211 | p_value <- lapply(1:nrow(cell_pem), significanceLevel, bandGscore, geneGscore, permuteres, cell_pem) 212 | pcutoff <- 0.01 213 | gene_sig <- CollectAsso(p_value, pcutoff, sct_edges, cell_pem)$generes # at genomic bin and gene level 214 | band_sig <- CollectAsso(p_value, pcutoff, sct_edges, cell_pem)$bandres # estimate emperical p value 215 | gene_sig <- unique(gene_sig) 216 | band_sig <- do.call(rbind, lapply(unique(as.character(band_sig$cell)), mergeCNA, band_sig, band_reg, chr__arm, ref_band)) 217 | band_sig <- unique(band_sig) 218 | 219 | LSAres=list() 220 | if (!is.null(gene_sig)){ 221 | index <- match(gene_sig$cell, cell_pem$cells) 222 | gene_sig$child <- cell_pem$child[index] 223 | LSAres$geneLSA <- gene_sig 224 | paraGene <- table(as.character(gene_sig$region)) 225 | paraGene <- paraGene[paraGene>1] #gene associated with more than one independent lieage 226 | if (length(paraGene)>0){ 227 | paraGenesig <- GenePara(gene_sig, permuteres, type="gene", cell_pem)#parallele evolution estimation 228 | if (!is.null(paraGenesig)){ LSAres$paraGene <- paraGenesig }}} 229 | 230 | if (!is.null(band_sig)){ 231 | index <- match(band_sig$cell, cell_pem$cells) 232 | band_sig$child <- cell_pem$child[index] 233 | LSAres$bandLSA <- do.call(rbind, lapply(unique(band_sig$cell), CombineRegion, band_sig, ref_band)) 234 | paraBand <- table(as.character(band_sig$region)) 235 | paraBand <- paraBand[paraBand>1] #CNAs of genomic bin associated with >1 independent lineages 236 | if (length(paraBand)>0){ 237 | paraBandsig <- GenePara(band_sig, permuteres, type="band", cell_pem) #parallel evolution test 238 | if (!is.null(paraBandsig)){ LSAres$paraBand <- paraBandsig }}} 239 | 240 | cat("Estimate parallel evolution\n") 241 | all_LSA=c() 242 | if ("geneLSA" %in% names(LSAres)){ 243 | geneLSA <- LSAres$geneLSA 244 | geneLSA$CNA[geneLSA$Score>0] <- "AMP" 245 | geneLSA$CNA[geneLSA$Score<0] <- "DEL" 246 | all_LSA <- rbind(all_LSA, geneLSA) 247 | write.table(geneLSA, paste(OUT_PATH, "/5_LSA_gene.tsv", sep=""), col.names=T, row.names=F, sep="\t", quote=F) 248 | }else{ cat("No LSA is identified at gene level!\n") } 249 | 250 | if ("bandLSA" %in% names(LSAres)){ 251 | bandLSA=LSAres$bandLSA 252 | bandLSA$CNA[bandLSA$Score>0]="AMP" 253 | bandLSA$CNA[bandLSA$Score<0]="DEL" 254 | all_LSA <- rbind(all_LSA, bandLSA) 255 | write.table(bandLSA, paste(OUT_PATH,"/5_LSA_band.tsv", sep=""), col.names=T, row.names=F, sep="\t", quote=F) 256 | }else{ cat("No segmental LSA is identified!\n") } 257 | 258 | paraEvent=c() 259 | if ("paraBand" %in% names(LSAres)){ paraEvent=rbind(paraEvent,LSAres$paraBand) } 260 | if ("paraGene" %in% names(LSAres)){ paraEvent=rbind(paraEvent,LSAres$paraGene) } 261 | if (!is.null(paraEvent)){ 262 | paraEvent <- paraEvent[!is.na(paraEvent$pvalue),] 263 | if (dim(paraEvent)[1]!=0){ 264 | write.table(paraEvent, paste(OUT_PATH,"/5_LSA_parallel.tsv",sep=""), col.names=T, row.names=F, sep="\t", quote=FALSE) }} 265 | 266 | ### embed LSA result back to scTree for result interpretation ################################ 267 | ############################################################################################## 268 | LSA_to_plot = list() 269 | if ("geneLSA" %in% ls()) {LSA_to_plot[["geneLSA"]] <- geneLSA} 270 | if ("bandLSA" %in% ls()) {LSA_to_plot[["bandLSA"]] <- bandLSA} 271 | if ("all_LSA" %in% ls()) {LSA_to_plot[["all_LSA"]] <- all_LSA} 272 | 273 | for (LSA_name in names(LSA_to_plot)){ 274 | LSA_use <- LSA_to_plot[[LSA_name]] 275 | sct_nodes$CNA_gene_count <- 0 # set 0 to all CNA_gene_counts 276 | lsa_n_cna <- table(LSA_use$cell) # n_cna in each lsa node 277 | sct_nodes[names(lsa_n_cna), "CNA_gene_count"] <- lsa_n_cna 278 | 279 | sct_nodes$CNA_gene_annot <- "" 280 | for (cell_i in names(lsa_n_cna)){ 281 | CNA <- LSA_use[LSA_use$cell==cell_i,] # get CNAs for single cells 282 | CNA <- CNA[order(-sign(CNA$Score)*log(CNA$adjustp)),] # sort CNAs by significance & change direction 283 | nl_coor <- seq(1,nrow(CNA),3) # CNA counts by 3 284 | CNA$CNA[nl_coor] <- gsub("^", "\n", CNA$CNA[nl_coor]) # insert new lines 285 | cna <- paste(CNA$CNA, str_pad(CNA$region, 7, "left", "_"), sep="_", collapse=" ; ") # concatenate all CNAs 286 | sct_nodes[cell_i, "CNA_gene_annot"] <- paste0(cell_i, ":", nrow(CNA), cna)} # record to single cell tree graph 287 | sct_nodes[root_node, "CNA_gene_count"] <- max(sct_nodes$CNA_gene_count) 288 | 289 | cna_edges <- sct_edges[sct_edges$end %in% cell_pem$cells,] 290 | cna_nodes <- sct_nodes[union(cna_edges$stt, cna_edges$end),] 291 | cna_graph <- graph_from_data_frame(d=cna_edges, vertices=cna_nodes, directed=T) 292 | 293 | # plot CNA graph 294 | plot_size <- 16 295 | try(dev.off(), silent=TRUE) 296 | pdf(file=paste(OUT_PATH, "/5_scTree_", LSA_name, "_CNA_RT.pdf", sep=""), width=graph_size, height=graph_size) # , res=300, units="in", compression="lzw" 297 | plot(cna_graph, layout=layout_as_tree, 298 | edge.arrow.size=.2, edge.width=cna_edges$dist+8, edge.label=cna_edges$dist, edge.color="#9c9c9c", 299 | vertex.frame.width=3, vertex.frame.color="black", vertex.label=cna_nodes$CNA_gene_annot, vertex.color=cna_nodes$color, vertex.size=sqrt(cna_nodes$CNA_gene_count)*2) 300 | try(dev.off(), silent=TRUE) 301 | 302 | # plot CNA graph 303 | plot_size <- 16 304 | options(repr.plot.width=plot_size, repr.plot.height=plot_size) 305 | pdf(file=paste(OUT_PATH, "/5_scTree_", LSA_name, "_CNA_KK_cna.pdf", sep=""), width=graph_size, height=graph_size) # , res=300, units="in", compression="lzw" 306 | plot(cna_graph, layout=sctlayout[match(union(cna_edges$stt, cna_edges$end), rownames(sct_nodes)),], 307 | edge.arrow.size=.2, edge.width=cna_edges$dist+8, edge.label=cna_edges$dist, edge.color="#9c9c9c", 308 | vertex.frame.width=3, vertex.frame.color="black", vertex.label=cna_nodes$CNA_gene_annot, vertex.color=cna_nodes$color, vertex.size=sqrt(cna_nodes$CNA_gene_count)*2) 309 | try(dev.off(), silent=TRUE) 310 | 311 | # plot CNA graph 312 | plot_size <- 16 313 | options(repr.plot.width=plot_size, repr.plot.height=plot_size) 314 | pdf(file=paste(OUT_PATH, "/5_scTree_", LSA_name, "_CNA_KK_sct.pdf", sep=""), width=graph_size, height=graph_size) # , res=300, units="in", compression="lzw" 315 | plot(sct_graph, layout=sctlayout, 316 | edge.arrow.size=.2, edge.width=sct_edges$dist+8, edge.label=sct_edges$dist, edge.color="#9c9c9c", 317 | vertex.frame.width=3, vertex.frame.color="black", vertex.label=sct_nodes$CNA_gene_annot, vertex.color=sct_nodes$color, vertex.size=sqrt(sct_nodes$CNA_gene_count)*2) 318 | try(dev.off(), silent=TRUE) 319 | 320 | 321 | 322 | 323 | } -------------------------------------------------------------------------------- /SP1_SCT_UTIL.py: -------------------------------------------------------------------------------- 1 | ############################################################################################################################## 2 | # Returns a dictionary mapping node names to list of list of integers representing list of copy number list 3 | ############################################################################################################################## 4 | def read_CNV(in_seg_path): 5 | df = pd.read_csv(in_seg_path, sep="\t") # read data 6 | 7 | chr_scan = [f"chr{i}" for i in range(1,25)] + ["chrX", "chrY"] # def candidate chrs 8 | chr_exis = df.columns.str.replace("_.*$", "", regex=True) # find existing chrs 9 | chr_locs={} 10 | for chr_i in chr_scan: 11 | chr_segs = sum(chr_exis==chr_i) # chr seg number 12 | if chr_segs>0: chr_locs[chr_i]=chr_segs # attach it to the dict 13 | cell_lst = list(df.index) # cell ids 14 | node_dic = {i:[] for i in cell_lst} # to store node info 15 | cnvs_dic = {i:set() for i in cell_lst} # to keep track of CNs 16 | for chr_i in chr_locs: 17 | seg_i = chr_exis==chr_i 18 | for cel_j in cell_lst: 19 | node_dic[cel_j] = node_dic[cel_j] +[list(df.loc[cel_j, seg_i])]# concat chr bin CNs and append 20 | cnvs_dic[cel_j] = cnvs_dic[cel_j] | set(df.loc[cel_j, seg_i]) # keep track of CNV in each cell 21 | 22 | root = False 23 | for cel_j in cell_lst: 24 | if cnvs_dic[cel_j]=={2}: root = cel_j 25 | if not root: 26 | print(f"No diploid found, inputating a root cell.") 27 | root='root' 28 | node_dic[root] = [[2]*chr_locs[i] for i in chr_locs.keys()] 29 | return node_dic, root 30 | 31 | ############################################################################################################################## 32 | 33 | ############################################################################################################################## 34 | def getPath(path): 35 | abs_path = os.getcwd().split("/") 36 | for i,ele in enumerate(path.split("/")): 37 | if ele == ".": 38 | pass 39 | elif ele == "..": 40 | abs_path = abs_path[:-1] 41 | elif (ele == "") & (i == 0): 42 | abs_path = path.split("/") 43 | break 44 | else: 45 | abs_path = abs_path + [ele] 46 | return "/".join(abs_path) 47 | 48 | 49 | ############################################################################################################################## 50 | 51 | ############################################################################################################################## 52 | #class Tree: 53 | # def __init__(self, name, ot_edge, in_edge): 54 | # self.name = name # name of node 55 | # self.ot_edge = ot_edge # dictionary of node name - distance pair 56 | # self.in_edge = in_edge # dictionary of node name - distance pair 57 | # 58 | # def get_out_degree(self): 59 | # return len(self.ot_edge) 60 | # 61 | # def get_in_degree(self): 62 | # return len(self.in_edge) 63 | # 64 | ############################################################################################################################### 65 | 66 | ############################################################################################################################## 67 | def create_tree(nodes, node_list, root, proximity=True, len_threshold=30, df_cor=None): 68 | print("{:4d} cells to run.".format((len(node_list))), end="") 69 | blk = 5 ; sep = max(5,len(node_list)//blk) 70 | tp0 = dt_.now() ; tpt = dt_.now() # for timing 71 | tree_node_dict = {} 72 | for idx, A_node in enumerate(node_list, 1): 73 | pct = min(1, idx/len(node_list)) ; ext = 1/pct-1 # used to report runtime 74 | nwl = "\n" if (idx-1)%sep==0 else "\r" # used to report runtime 75 | dtt = dt_.now()-tp0 ; rmt = str(dtt*ext)[2:-5] ; dtt=str(dtt)[2:-5] # used to report runtime 76 | print(f"""{nwl} iter {idx:4d}, {pct*100:5.1f}% , { 77 | ""}elapse {dtt}, expected in {rmt}""", end="") # used to report runtime 78 | 79 | out_edge = {} ; candidates = list(set(node_list)^set([A_node])) 80 | for B_node in candidates: 81 | if df_cor is not None: 82 | physical_dist = ((df_cor.loc[A_node, "coor_x"] - df_cor.loc[B_node, "coor_x"])**2+(df_cor.loc[A_node, "coor_y"] - df_cor.loc[B_node, "coor_y"])**2) 83 | proximity = True if physical_dist 0: 138 | for i in range(0, len(diff)): 139 | if diff[i] > 0: diff[i] = diff[i] - 1 140 | else: break 141 | d = d+1 142 | elif diff[0] < 0: 143 | for i in range(0, len(diff)): 144 | if diff[i] < 0: diff[i] = diff[i] + 1 145 | else: break 146 | d = d+1 147 | return d 148 | 149 | 150 | 151 | ############################################################################################################################## 152 | 153 | ############################################################################################################################## 154 | def graph_rank_dist(g, startnode): 155 | dist = {} 156 | 157 | for node in g: 158 | dist[node] = float('inf') 159 | dist[startnode] = 0 160 | 161 | queue = deque([startnode]) 162 | 163 | while queue: 164 | node = queue.popleft() 165 | for nbr in g[node]: 166 | if dist[nbr] == float('inf'): 167 | dist[nbr] = dist[node] + 1 168 | queue.append(nbr) 169 | return dist 170 | 171 | 172 | 173 | ############################################################################################################################## 174 | 175 | ############################################################################################################################## 176 | # inner psutil function 177 | def pc_mem(): 178 | process = psutil.Process(os.getpid()) 179 | mem_info = process.memory_info() 180 | return round(mem_info.rss/1024/1024/1024, 2) 181 | 182 | ############################################################################################################################## 183 | 184 | ############################################################################################################################## 185 | def compute_rdmst(g, root): 186 | st_mem = pc_mem() ; t0 = dt_.now() ; ts = dt_.now() 187 | print("Inferring single cell evolution tree:", end="") 188 | rdmst = rdmst_recursor(g, root, 0, t0, ts, st_mem) 189 | print(f"\rtotal time elapse {dt_.now()-t0}{' '*20}") 190 | 191 | rdmst_weight = 0 192 | for node in rdmst: 193 | for nbr in rdmst[node]: 194 | rdmst[node][nbr] = g[node][nbr] 195 | rdmst_weight += rdmst[node][nbr] 196 | return (rdmst, rdmst_weight) 197 | 198 | 199 | ############################################################################################################################## 200 | 201 | ############################################################################################################################## 202 | def rdmst_recursor(g__inputed, root_node, recurr_idx, t0, ts, st_mem): 203 | recurr_idx = recurr_idx + 1 # record how many recursions have taken place 204 | if recurr_idx%5==0: 205 | nwl = "\n" if (recurr_idx-5)%100==0 else "\r" 206 | print(f"""{nwl}{recurr_idx:4d} loops shrunk, avg_span: {str(dt_.now()-ts)[3:-5] 207 | } elapse: {str(dt_.now()-t0)[:-5]}, mem: {pc_mem()-st_mem:3.2f} GB.""", end="") 208 | ts = dt_.now() 209 | g_reversed = reverse__graph(g__inputed) # reverse graph direction 210 | g_rev_cont = contract_graph(g_reversed, root_node) # contract each node by min_length 211 | g_rdst_min = get_rdst_graph(g_rev_cont, root_node) # get the 0_length nodes 212 | loop_in_gr = find_graphloop(g_rdst_min) # find loops in the graph 213 | 214 | if not loop_in_gr: 215 | print(f"\nall {recurr_idx:4d} loops contracted, now recovering tree:") 216 | return reverse__graph(g_rdst_min) 217 | else: 218 | g_contract = reverse__graph(g_rev_cont) 219 | g___pruned, loop_nodes = prune____graph(g_contract, loop_in_gr) 220 | del g_reversed, g_rev_cont, g__inputed, g_rdst_min 221 | g_new_rdst = rdmst_recursor(g___pruned, root_node, recurr_idx, t0, ts, st_mem) # recursion at here 222 | g_expanded = expand___graph(g_contract, g_new_rdst, loop_in_gr, loop_nodes) 223 | print(f"\r{recurr_idx:4d} layer remaining.", end="") 224 | return g_expanded 225 | 226 | 227 | ############################################################################################################################## 228 | 229 | ############################################################################################################################## 230 | def reverse__graph(g): 231 | rev_graph = {} 232 | for node in g: 233 | rev_graph[node] = {} 234 | for a_node in g: 235 | for b_node in g[a_node]: 236 | rev_graph[b_node][a_node] = g[a_node][b_node] 237 | return rev_graph 238 | 239 | 240 | ############################################################################################################################## 241 | 242 | ############################################################################################################################## 243 | def contract_graph(in_graph, root): 244 | rg = in_graph.copy() 245 | for node in rg: 246 | if not node == root: 247 | minimum = min(rg[node].values()) 248 | for in_nbr in rg[node]: 249 | rg[node][in_nbr] -= minimum 250 | return rg 251 | 252 | 253 | ############################################################################################################################## 254 | 255 | ############################################################################################################################## 256 | def get_rdst_graph(rg, root): 257 | candidate = {} 258 | for node in rg: 259 | candidate[node] = {} 260 | for node in rg: 261 | if not node == root: 262 | minimum = min(rg[node].values()) 263 | for in_nbr in rg[node]: 264 | if candidate[node] == {}: 265 | if rg[node][in_nbr] == minimum: 266 | candidate[node][in_nbr] = minimum 267 | return candidate 268 | 269 | 270 | ############################################################################################################################## 271 | 272 | ############################################################################################################################## 273 | def find_graphloop(rdst_candidate): 274 | node_unvisited = [] 275 | for node in rdst_candidate: 276 | node_unvisited.append(node) 277 | while node_unvisited != []: 278 | start_node = node_unvisited.pop() 279 | stack = [] 280 | trail = [] 281 | stack.append(start_node) 282 | while len(stack) != 0: 283 | node = stack.pop(-1) 284 | for nbr in rdst_candidate[node]: 285 | if nbr in trail: 286 | return tuple(trail[trail.index(nbr):]) 287 | else: 288 | stack.append(nbr) 289 | trail.append(nbr) 290 | if nbr in node_unvisited: 291 | node_unvisited.remove(nbr) 292 | return False 293 | 294 | 295 | ############################################################################################################################## 296 | 297 | ############################################################################################################################## 298 | def prune____graph(g, cycle): 299 | loop_nodes = max(g.keys()) + "1" 300 | contracted_graph = {} 301 | contracted_graph[loop_nodes] = {} 302 | for node in g: 303 | if not node in cycle: 304 | contracted_graph[node] = {} 305 | for node in g: 306 | for nbr in g[node]: 307 | if node in cycle: 308 | if nbr in cycle: pass ############## node in, nbr in cycle ########################################################### 309 | else: ############################# node in, nbr out cycle ########################################################### 310 | if nbr in contracted_graph[loop_nodes]: 311 | contracted_graph[loop_nodes][nbr] = min(contracted_graph[loop_nodes][nbr], g[node][nbr]) 312 | else: 313 | contracted_graph[loop_nodes][nbr] = g[node][nbr] 314 | else: 315 | if nbr in cycle: ##################### node out, nbr in cycle ########################################################### 316 | if loop_nodes in contracted_graph[node]: 317 | contracted_graph[node][loop_nodes] = min(contracted_graph[node][loop_nodes], g[node][nbr]) 318 | else: 319 | contracted_graph[node][loop_nodes] = g[node][nbr] 320 | else: ################################ node out, nbr out cycle ########################################################### 321 | contracted_graph[node][nbr] = g[node][nbr] 322 | return contracted_graph, loop_nodes 323 | 324 | 325 | ############################################################################################################################## 326 | 327 | ############################################################################################################################## 328 | def expand___graph(g_contract, g_new_rdst, loop_node, loop_repr): 329 | restored_graph = {} 330 | for node in g_contract: 331 | restored_graph[node] = {} 332 | for node in g_new_rdst: 333 | for nbr in g_new_rdst[node]: 334 | if node == loop_repr: 335 | minimum = float('inf') 336 | for orig in loop_node: 337 | if nbr in g_contract[orig]: 338 | if g_contract[orig][nbr] < minimum: 339 | minimum = g_contract[orig][nbr] 340 | point = orig 341 | restored_graph[point][nbr] = minimum 342 | else: 343 | if nbr == loop_repr: 344 | minimum = float('inf') 345 | for orig_nbr in g_contract[node]: 346 | if orig_nbr in loop_node: 347 | if g_contract[node][orig_nbr] < minimum: 348 | minimum = g_contract[node][orig_nbr] 349 | start_pt = orig_nbr 350 | restored_graph[node][start_pt] = minimum 351 | else: 352 | restored_graph[node][nbr] = g_contract[node][nbr] 353 | for index in range(len(loop_node) - 1): 354 | restored_graph[loop_node[index + 1]][loop_node[index]] = g_contract[loop_node[index + 1]][loop_node[index]] 355 | restored_graph[loop_node[0]][loop_node[-1]] = g_contract[loop_node[0]][loop_node[-1]] 356 | index = loop_node.index(start_pt) 357 | if index == len(loop_node) - 1: 358 | restored_graph[loop_node[0]].pop(loop_node[index]) 359 | else: 360 | restored_graph[loop_node[index + 1]].pop(loop_node[index]) 361 | return restored_graph 362 | 363 | 364 | ############################################################################################################################## 365 | 366 | ############################################################################################################################## 367 | 368 | from datetime import datetime as dt_ 369 | from optparse import OptionParser 370 | from collections import * 371 | import psutil 372 | 373 | import copy 374 | import pickle 375 | import os,sys 376 | import subprocess 377 | import numpy as np 378 | import pandas as pd 379 | import igraph as ig 380 | import matplotlib.pyplot as plt 381 | sys.setrecursionlimit(20000) -------------------------------------------------------------------------------- /dataTransfer.R: -------------------------------------------------------------------------------- 1 | ####transfer format of input data 2 | ##Input integer copy number profile with header from scDNA-seq, separeted by tab. 3 | ##The row in DNA input data is chromosomal segment. The range of chromosome is from 1 to 23. 4 | ##The first column is chromosome, the second column is the start position of bin, and the following columns are sequenced cells. 5 | DNAinput <- function(inputfile){ 6 | data=read.csv(inputfile,sep="\t") 7 | region=table(data[,1]) 8 | regionseq=c() 9 | for (i in 1:length(region)){ 10 | regionseq=c(regionseq,c(1:region[i])) 11 | } 12 | row.names(data)=paste("chr",data[,1],"_",regionseq,sep="") 13 | CNV=data[,3:dim(data)[2]] 14 | CNV=t(CNV) 15 | write.table(CNV, paste(inputfile,".CNV.txt",sep=""), sep = "\t",col.names = TRUE, row.names = TRUE, quote = FALSE) 16 | #return(paste(inputfile,".CNV.txt",sep="")) 17 | } 18 | 19 | ####transfer format of input data 20 | ##Input the expression data inferred from InferCNV: infercnv_obj@expr.data 21 | ##input the reference for gene position information: geneName chromosome start end 22 | ##delt means the size of bin which is defined by the number of gene 23 | RNAinput <- function(inputfile, reference, delt){ 24 | data=read.csv(inputfile,sep="\t") 25 | data=round(data*2) 26 | geneInfo=read.csv(reference,sep="\t",header=F) 27 | index=match(row.names(data),as.character(geneInfo[,1])) 28 | newdata=cbind(geneInfo[index[!is.na(index)],2:4],data[!is.na(index),]) 29 | ll=nchar(as.character(newdata[,1])) 30 | chromo=data.frame(chr=as.character(newdata[,1]),ll=ll) 31 | chro=apply(chromo,1,function(x){ 32 | return(substr(x[1],start=4,stop=x[2])) 33 | }) 34 | chro[chro=="X"]=23 35 | newdata[,1]=chro 36 | newdata=newdata[newdata[,1]!="M"&newdata[,1]!="Y",] 37 | chrom=c(1:23) 38 | chrom=intersect(chrom,chro) 39 | segdata=c() 40 | chrregion=c() 41 | for (i in chrom){ 42 | subseg=c() 43 | subdata=newdata[newdata[,1]==i,] 44 | subdata=subdata[order(as.numeric(as.character(subdata[,2]))),] 45 | kk=dim(subdata)[1]/delt 46 | intekk=round(kk) 47 | if (intekk >1){ 48 | for (j in 1:(intekk-1)){ 49 | sub1=subdata[((j-1)*delt+1):(j*delt),4:dim(subdata)[2]] 50 | subseg=rbind(subseg,apply(sub1,2,mean)) 51 | chrregion=c(chrregion,paste(i,"_",j,sep="")) 52 | } 53 | subseg=rbind(subseg,apply(subdata[((intekk-1)*delt+1):dim(subdata)[1],4:dim(subdata)[2]],2,mean)) 54 | chrregion=c(chrregion,paste(i,"_",intekk,sep="")) 55 | }else{ 56 | subseg=apply(subdata[,4:dim(subdata)[2]],2,mean) 57 | chrregion=c(chrregion,paste(i,"_",1,sep="")) 58 | } 59 | segdata=rbind(segdata,subseg) 60 | } 61 | row.names(segdata)=paste("chr",chrregion,sep="") 62 | segdata=t(round(segdata)) 63 | write.table(segdata, paste(inputfile,".CNV.txt",sep=""), sep = "\t",col.names = TRUE, row.names = TRUE, quote = FALSE) 64 | #return(paste(inputfile,".CNV.txt",sep="")) 65 | } 66 | 67 | args<-commandArgs(T) 68 | inputfile=args[1] 69 | datatype=args[2] 70 | if (datatype=="D"){ 71 | DNAinput(inputfile) 72 | }else if (datatype == "R"){ 73 | datapath=args[3] 74 | delt = args[4] 75 | RNAinput(inputfile,reference=paste(datapath,"/gencode_v19_gene_pos.txt",sep=""),delt=as.numeric(delt)) 76 | } 77 | -------------------------------------------------------------------------------- /example/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KChen-lab/MEDALT/c95765f3080e09d5f78cb95a13f169330051b27c/example/.DS_Store -------------------------------------------------------------------------------- /example/outputDNA/CNV.tree.txt: -------------------------------------------------------------------------------- 1 | from to dist 2 | t4c14 t4c47 5 3 | t4c14 t4c48 3 4 | t4c14 t4c16 5 5 | t4c14 t4c24 2 6 | t4c14 t4c39 2 7 | t4c14 t4c21 2 8 | t4c17 t4c1 2 9 | t4c17 t4c46 2 10 | t4c17 t4c33 6 11 | t4c17 t4c37 6 12 | t4c17 t4c36 3 13 | t4c17 t4c34 4 14 | t4c17 t4c53 3 15 | t4c17 t4c19 5 16 | t4c17 t4c26 4 17 | t4c17 t4c29 3 18 | t4c11 t4c30 6 19 | t4c36 t4c28 3 20 | t4c36 t4c23 4 21 | t4c51 t4c50 0 22 | t4c39 t4c38 3 23 | t4c39 t4c11 2 24 | t4c39 t4c13 2 25 | t4c52 t4c5 0 26 | t4c52 t4c4 0 27 | t4c52 t4c7 0 28 | t4c52 t4c6 0 29 | t4c52 t4c49 0 30 | t4c52 t4c51 0 31 | t4c46 t4c22 4 32 | t4c44 t4c40 6 33 | t4c48 t4c25 5 34 | t4c25 t4c31 7 35 | t4c21 t4c12 4 36 | t4c23 t4c44 6 37 | t4c1 t4c42 3 38 | t4c1 t4c43 2 39 | t4c1 t4c41 3 40 | t4c1 t4c35 2 41 | t4c1 t4c14 2 42 | t4c3 t4c2 0 43 | t4c3 t4c9 0 44 | t4c3 t4c15 6 45 | t4c3 t4c17 1 46 | t4c3 t4c52 0 47 | t4c3 t4c20 9 48 | t4c8 t4c3 0 49 | t4c43 t4c18 4 50 | t4c53 t4c32 5 51 | t4c53 t4c27 4 52 | t4c53 t4c45 5 53 | -------------------------------------------------------------------------------- /example/outputDNA/LSA.tree.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KChen-lab/MEDALT/c95765f3080e09d5f78cb95a13f169330051b27c/example/outputDNA/LSA.tree.pdf -------------------------------------------------------------------------------- /example/outputDNA/gene.LSA.txt: -------------------------------------------------------------------------------- 1 | region Score pvalue adjustp cell depth subtreesize CNA 2 | CHEK2 -0.9375 0.00199600798403194 0.00199600798403194 t4c23 3 16 DEL 3 | CSNK1E -1 0.00199600798403194 0.00199600798403194 t4c23 3 16 DEL 4 | DMC1 -1 0.00199600798403194 0.00199600798403194 t4c23 3 16 DEL 5 | EP300 -1 0.00199600798403194 0.00199600798403194 t4c23 3 16 DEL 6 | MAPK1 -1 0.00199600798403194 0.00199600798403194 t4c23 3 16 DEL 7 | MRPL40 -1 0.00199600798403194 0.00199600798403194 t4c23 3 16 DEL 8 | NF2 -0.9375 0.00199600798403194 0.00199600798403194 t4c23 3 16 DEL 9 | RBX1 -1 0.00199600798403194 0.00199600798403194 t4c23 3 16 DEL 10 | TOP3B -1 0.00199600798403194 0.00199600798403194 t4c23 3 16 DEL 11 | XRCC6 -1 0.00199600798403194 0.00199600798403194 t4c23 3 16 DEL 12 | ZNRF3 -0.9375 0.00199600798403194 0.00199600798403194 t4c23 3 16 DEL 13 | -------------------------------------------------------------------------------- /example/outputDNA/parallel.LSA.txt: -------------------------------------------------------------------------------- 1 | region lineage pvalue 2 | chr14:q 2 0.48502994011976 3 | -------------------------------------------------------------------------------- /example/outputDNA/segmental.LSA.txt: -------------------------------------------------------------------------------- 1 | region Score pvalue adjustp cell depth subtreesize CNA 2 | chr7:q11.22 0.605263157894737 0.00399201596806387 0.00992301112061591 t4c17 2 38 AMP 3 | chr10:p11.22 -0.868421052631579 0.00199600798403194 0.00723552894211577 t4c17 2 38 DEL 4 | chr10:p11.1 -0.842105263157895 0.00199600798403194 0.00723552894211577 t4c17 2 38 DEL 5 | chr10:q -0.879699248120301 0.00199600798403194 0.00723552894211577 t4c17 2 38 DEL 6 | chr7:q21.13 0.55 0.00399201596806387 0.0151002343139807 t4c1 3 20 AMP 7 | chr7:q31.33 0.55 0.00199600798403194 0.0151002343139807 t4c1 3 20 AMP 8 | chr7:q35-36.1 0.55 0.00399201596806387 0.0151002343139807 t4c1 3 20 AMP 9 | chr10:p13 -0.9 0.00598802395209581 0.104191616766467 t4c1 3 20 DEL 10 | chr10:q25.1 -0.9 0.00598802395209581 0.104191616766467 t4c1 3 20 DEL 11 | chr19:p13.12-12 1.06666666666667 0.00465735196274118 0.0156685227021413 t4c1 3 20 AMP 12 | chr14:q 0.647058823529412 0.00657508512386991 0.0179112601725868 t4c1 3 20 AMP 13 | chr19:q 0.97 0.00379241516966068 0.0156380238272555 t4c1 3 20 AMP 14 | chr19:q12 -0.6 0.00199600798403194 0.173652694610778 t4c36 3 5 DEL 15 | chr7:p22.3 0.642857142857143 0.00199600798403194 0.00526220286699329 t4c14 4 14 AMP 16 | chr7:p15.3 0.571428571428571 0.00199600798403194 0.00526220286699329 t4c14 4 14 AMP 17 | chr7:q22.2-22.3 0.642857142857143 0.00598802395209581 0.0133578995854445 t4c14 4 14 AMP 18 | chr7:q34 0.642857142857143 0.00199600798403194 0.00526220286699329 t4c14 4 14 AMP 19 | chr7:q36.2 0.642857142857143 0.00199600798403194 0.00526220286699329 t4c14 4 14 AMP 20 | chr14:q 0.828571428571429 0.00279441117764471 0.00688134221068353 t4c14 4 14 AMP 21 | chr10:q22 -0.952380952380952 0.00465735196274118 0.173652694610778 t4c14 4 14 DEL 22 | chr7:p21 0.607142857142857 0.00199600798403194 0.00526220286699329 t4c14 4 14 AMP 23 | chr7:q31 0.642857142857143 0.00199600798403194 0.00526220286699329 t4c14 4 14 AMP 24 | chr7:p14.3 1 0.00199600798403194 0.0289421157684631 t4c39 5 5 AMP 25 | chr7:q36.3 1 0.00199600798403194 0.0289421157684631 t4c39 5 5 AMP 26 | -------------------------------------------------------------------------------- /example/outputDNA/singlecell.tree.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KChen-lab/MEDALT/c95765f3080e09d5f78cb95a13f169330051b27c/example/outputDNA/singlecell.tree.pdf -------------------------------------------------------------------------------- /example/outputDNAT/CNV.tree.txt: -------------------------------------------------------------------------------- 1 | from to dist 2 | t4c14 t4c47 5 3 | t4c14 t4c48 3 4 | t4c14 t4c16 5 5 | t4c14 t4c24 2 6 | t4c14 t4c39 2 7 | t4c14 t4c21 2 8 | t4c17 t4c1 2 9 | t4c17 t4c46 2 10 | t4c17 t4c33 6 11 | t4c17 t4c37 6 12 | t4c17 t4c36 3 13 | t4c17 t4c34 4 14 | t4c17 t4c53 3 15 | t4c17 t4c19 5 16 | t4c17 t4c26 4 17 | t4c17 t4c29 3 18 | t4c11 t4c30 6 19 | t4c36 t4c28 3 20 | t4c36 t4c23 4 21 | t4c51 t4c50 0 22 | t4c39 t4c38 3 23 | t4c39 t4c11 2 24 | t4c39 t4c13 2 25 | t4c52 t4c5 0 26 | t4c52 t4c4 0 27 | t4c52 t4c7 0 28 | t4c52 t4c6 0 29 | t4c52 t4c49 0 30 | t4c52 t4c51 0 31 | t4c46 t4c22 4 32 | t4c44 t4c40 6 33 | t4c48 t4c25 5 34 | t4c25 t4c31 7 35 | t4c21 t4c12 4 36 | t4c23 t4c44 6 37 | t4c1 t4c42 3 38 | t4c1 t4c43 2 39 | t4c1 t4c41 3 40 | t4c1 t4c35 2 41 | t4c1 t4c14 2 42 | t4c3 t4c2 0 43 | t4c3 t4c9 0 44 | t4c3 t4c15 6 45 | t4c3 t4c17 1 46 | t4c3 t4c52 0 47 | t4c3 t4c20 9 48 | t4c8 t4c3 0 49 | t4c43 t4c18 4 50 | t4c53 t4c32 5 51 | t4c53 t4c27 4 52 | t4c53 t4c45 5 53 | -------------------------------------------------------------------------------- /example/outputDNAT/LSA.tree.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KChen-lab/MEDALT/c95765f3080e09d5f78cb95a13f169330051b27c/example/outputDNAT/LSA.tree.pdf -------------------------------------------------------------------------------- /example/outputDNAT/segmental.LSA.txt: -------------------------------------------------------------------------------- 1 | region Score pvalue adjustp cell depth subtreesize CNA 2 | chr19:q12 0.736842105263158 0.0388349514563107 0.177823198773633 t4c17 2 38 AMP 3 | chr14:q22 0.631578947368421 0.0485436893203883 0.177823198773633 t4c17 2 38 AMP 4 | chr7:q11 0.578947368421053 0.0242718446601942 0.177823198773633 t4c17 2 38 AMP 5 | chr7:q21.13 0.55 0.0446428571428571 0.380129179331307 t4c1 3 20 AMP 6 | chr7:q31.33 0.55 0.0357142857142857 0.380129179331307 t4c1 3 20 AMP 7 | chr7:q35-36.1 0.55 0.0446428571428571 0.380129179331307 t4c1 3 20 AMP 8 | chr19:q12 -0.6 0.0413793103448276 1 t4c36 3 5 DEL 9 | chr7:q31.31 0.642857142857143 0.0347826086956522 0.228715874620829 t4c14 4 14 AMP 10 | chr7:q34 0.642857142857143 0.0434782608695652 0.228715874620829 t4c14 4 14 AMP 11 | chr10:q22.3 -1 0.0347826086956522 0.857391304347826 t4c14 4 14 DEL 12 | chr14:q13.1 0.928571428571429 0.0434782608695652 0.228715874620829 t4c14 4 14 AMP 13 | chr14:q23 0.928571428571429 0.0260869565217391 0.228715874620829 t4c14 4 14 AMP 14 | chr7:p21.1-15.3 1 0.0344827586206897 0.393103448275862 t4c39 5 5 AMP 15 | chr7:p14.3 1 0.0206896551724138 0.393103448275862 t4c39 5 5 AMP 16 | -------------------------------------------------------------------------------- /example/outputDNAT/singlecell.tree.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KChen-lab/MEDALT/c95765f3080e09d5f78cb95a13f169330051b27c/example/outputDNAT/singlecell.tree.pdf -------------------------------------------------------------------------------- /example/outputRNA/CNV.tree.txt: -------------------------------------------------------------------------------- 1 | from to dist 2 | HNSCC5_p5_P5_F11 HNSCC5_p9_HNSCC5_P9_E08 1 3 | HNSCC5_p5_P5_F11 HNSCC5_p9_HNSCC5_P9_E09 1 4 | HNSCC5_p9_HNSCC5_P9_D05 HNSCC5_p15_HNSCC5_P15_A09 1 5 | HNSCC5_p9_HNSCC5_P9_D05 HNSCC5_p13_P13_C06 1 6 | HNSCC5_p9_HNSCC5_P9_D05 HNSCC5_p5_P5_E03 1 7 | HNSCC5_p9_HNSCC5_P9_D05 HNSCC5_p7_HNSCC5_P7_G05 0 8 | HNSCC5_p9_HNSCC5_P9_D05 HNSCC5_p14_HNSCC5_P14_LN_C01 0 9 | HNSCC5_p9_HNSCC5_P9_E09 HNSCC5_p9_HNSCC5_P9_C12 2 10 | HNSCC5_p7_HNSCC5_P7_A04 HNSCC5_p5_P5_A08 0 11 | HNSCC5_p5_P5_E03 HNSCC5_p5_P5_F11 1 12 | HNSCC5_p5_P5_E03 HNSCC5_p7_HNSCC5_P7_A12 1 13 | HNSCC5_p5_P5_E03 HNSCC5_p7_HNSCC5_P7_G04 0 14 | HNSCC5_p15_HNSCC5_P15_E07 HNSCC5_p3_HNSCC5_P3_H01 0 15 | HNSCC5_p9_HNSCC5_P9_G07 HNSCC5_p7_HNSCC5_P7_A04 1 16 | HNSCC5_p9_HNSCC5_P9_B10 HNSCC5_p9_HNSCC5_P9_E10 1 17 | HNSCC5_p9_HNSCC5_P9_B10 HNSCC5_p3_HNSCC5_P3_A04 2 18 | HNSCC5_p9_HNSCC5_P9_B10 HNSCC5_p7_HNSCC5_P7_B09 1 19 | HNSCC5_p7_HNSCC5_P7_D10 HNSCC5_p14_HNSCC5_P14_LN_G06 0 20 | HNSCC5_p7_HNSCC5_P7_D10 HNSCC5_p3_HNSCC5_P3_C11 1 21 | HNSCC5_p7_HNSCC5_P7_D10 HNSCC5_p14_HNSCC5_P14_LN_G09 1 22 | HNSCC5_p5_P5_B05 HNSCC5_p13_P13_E03 1 23 | HNSCC5_p14_HNSCC5_P14_LN_G09 HNSCC5_p15_HNSCC5_P15_G03 0 24 | HNSCC5_p13_P13_E03 HNSCC5_p9_HNSCC5_P9_B09 1 25 | HNSCC5_p13_P13_E03 HNSCC5_p9_HNSCC5_P9_B10 1 26 | HNSCC5_p13_P13_G08 HNSCC5_p7_HNSCC5_P7_D10 1 27 | HNSCC5_p13_P13_G08 HNSCC5_p9_HNSCC5_P9_D08 2 28 | HNSCC5_p13_P13_G08 HNSCC5_p14_HNSCC5_P14_LN_A09 1 29 | HNSCC5_p13_P13_G08 HNSCC5_p13_P13_C07 1 30 | HNSCC5_p13_P13_G08 HNSCC5_p15_HNSCC5_P15_A11 0 31 | HNSCC5_p13_P13_G08 HNSCC5_p7_HNSCC5_P7_C10 0 32 | HNSCC5_p14_HNSCC5_P14_LN_A09 HNSCC5_p13_P13_A05 1 33 | HNSCC5_p14_HNSCC5_P14_LN_A09 HNSCC5_p15_HNSCC5_P15_B08 1 34 | HNSCC5_p15_HNSCC5_P15_A09 HNSCC5_p5_P5_E11 1 35 | HNSCC5_p13_P13_G05 HNSCC5_p13_P13_H09 0 36 | HNSCC5_p7_HNSCC5_P7_A12 HNSCC5_p14_HNSCC5_P14_LN_B06 1 37 | HNSCC5_p5_P5_E11 HNSCC5_p14_HNSCC5_P14_LN_A07 1 38 | HNSCC5_p5_P5_H06 HNSCC5_p5_P5_B05 1 39 | HNSCC5_p13_P13_F10 HNSCC5_p9_HNSCC5_P9_D05 1 40 | HNSCC5_p13_P13_F10 HNSCC5_p14_HNSCC5_P14_LN_C09 0 41 | HNSCC5_p13_P13_F10 HNSCC5_p13_P13_H01 0 42 | HNSCC5_p13_P13_F10 HNSCC5_p3_HNSCC5_P3_G07 2 43 | HNSCC5_p15_HNSCC5_P15_B12 HNSCC5_p15_HNSCC5_P15_E07 0 44 | HNSCC5_p15_HNSCC5_P15_B12 HNSCC5_p13_P13_G08 1 45 | HNSCC5_p15_HNSCC5_P15_B12 HNSCC5_p5_P5_H06 1 46 | HNSCC5_p9_HNSCC5_P9_B09 HNSCC5_p13_P13_G05 0 47 | HNSCC5_p14_HNSCC5_P14_LN_B06 HNSCC5_p9_HNSCC5_P9_F10 0 48 | HNSCC5_p14_HNSCC5_P14_LN_B06 HNSCC5_p9_HNSCC5_P9_G07 1 49 | HNSCC5_p3_HNSCC5_P3_G07 HNSCC5_p9_HNSCC5_P9_H03 2 50 | HNSCC5_p13_P13_A05 HNSCC5_p13_P13_F10 1 51 | root HNSCC5_p15_HNSCC5_P15_B12 2 52 | -------------------------------------------------------------------------------- /example/outputRNA/LSA.tree.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KChen-lab/MEDALT/c95765f3080e09d5f78cb95a13f169330051b27c/example/outputRNA/LSA.tree.pdf -------------------------------------------------------------------------------- /example/outputRNA/gene.LSA.txt: -------------------------------------------------------------------------------- 1 | region Score pvalue adjustp cell depth subtreesize CNA 2 | PRKDC 0.833333333333333 0.00998003992015968 0.149700598802395 HNSCC5_p7_HNSCC5_P7_A12 8 6 AMP 3 | -------------------------------------------------------------------------------- /example/outputRNA/segmental.LSA.txt: -------------------------------------------------------------------------------- 1 | region Score pvalue adjustp cell depth subtreesize CNA 2 | chr7:q22.3 -0.6 0.00199600798403194 0.0307955517536356 HNSCC5_p5_P5_H06 2 10 DEL 3 | chr7:q33 -0.9 0.00199600798403194 0.0307955517536356 HNSCC5_p5_P5_H06 2 10 DEL 4 | chr7:q31-32 -0.75 0.00199600798403194 0.0307955517536356 HNSCC5_p5_P5_H06 2 10 DEL 5 | chr7:q31-32 -0.75 0.00199600798403194 0.0307955517536356 HNSCC5_p5_P5_H06 2 10 DEL 6 | chr12:q24.12-24.13 1 0.00199600798403194 0.107784431137725 HNSCC5_p7_HNSCC5_P7_D10 3 5 AMP 7 | chr12:q24.23 1 0.00399201596806387 0.143712574850299 HNSCC5_p7_HNSCC5_P7_D10 3 5 AMP 8 | chr7:p22.1 0.518518518518518 0.00798403193612774 0.287425149700599 HNSCC5_p14_HNSCC5_P14_LN_A09 3 27 AMP 9 | chr7:q22.1 -0.555555555555556 0.00399201596806387 0.0538922155688623 HNSCC5_p5_P5_B05 3 9 DEL 10 | chr7:p22.3 0.64 0.00798403193612774 0.215568862275449 HNSCC5_p13_P13_A05 4 25 AMP 11 | chr7:p15.2 0.52 0.00998003992015968 0.215568862275449 HNSCC5_p13_P13_A05 4 25 AMP 12 | chr7:p15.3 0.541666666666667 0.00798403193612774 0.123182207014542 HNSCC5_p13_P13_F10 5 24 AMP 13 | chr7:p21 0.541666666666667 0.00798403193612774 0.123182207014542 HNSCC5_p13_P13_F10 5 24 AMP 14 | chr12:p13.32 -1.94736842105263 0.00399201596806387 0.431137724550898 HNSCC5_p9_HNSCC5_P9_D05 6 19 DEL 15 | chr8:q11 0.916666666666667 0.00798403193612774 0.12125748502994 HNSCC5_p7_HNSCC5_P7_A12 8 6 AMP 16 | -------------------------------------------------------------------------------- /example/outputRNA/singlecell.tree.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KChen-lab/MEDALT/c95765f3080e09d5f78cb95a13f169330051b27c/example/outputRNA/singlecell.tree.pdf -------------------------------------------------------------------------------- /example/outputRNAT/CNV.tree.txt: -------------------------------------------------------------------------------- 1 | from to dist 2 | HNSCC5_p5_P5_F11 HNSCC5_p9_HNSCC5_P9_H03 1 3 | HNSCC5_p5_P5_F11 HNSCC5_p3_HNSCC5_P3_A04 0 4 | HNSCC5_p5_P5_F11 HNSCC5_p5_P5_E03 0 5 | HNSCC5_p5_P5_F11 HNSCC5_p7_HNSCC5_P7_A04 1 6 | HNSCC5_p5_P5_F11 HNSCC5_p9_HNSCC5_P9_E08 0 7 | HNSCC5_p9_HNSCC5_P9_D05 HNSCC5_p15_HNSCC5_P15_E07 0 8 | HNSCC5_p9_HNSCC5_P9_D05 HNSCC5_p3_HNSCC5_P3_H01 0 9 | HNSCC5_p15_HNSCC5_P15_B08 HNSCC5_p14_HNSCC5_P14_LN_A09 0 10 | HNSCC5_p15_HNSCC5_P15_B08 HNSCC5_p13_P13_A05 1 11 | HNSCC5_p7_HNSCC5_P7_A04 HNSCC5_p9_HNSCC5_P9_F10 1 12 | HNSCC5_p7_HNSCC5_P7_A04 HNSCC5_p7_HNSCC5_P7_G04 1 13 | HNSCC5_p9_HNSCC5_P9_D08 HNSCC5_p9_HNSCC5_P9_E10 1 14 | HNSCC5_p9_HNSCC5_P9_G07 HNSCC5_p5_P5_A08 2 15 | HNSCC5_p7_HNSCC5_P7_B09 HNSCC5_p5_P5_B05 0 16 | HNSCC5_p9_HNSCC5_P9_B10 HNSCC5_p13_P13_G08 0 17 | HNSCC5_p7_HNSCC5_P7_D10 HNSCC5_p14_HNSCC5_P14_LN_G09 0 18 | HNSCC5_p3_HNSCC5_P3_H01 HNSCC5_p15_HNSCC5_P15_A09 0 19 | HNSCC5_p3_HNSCC5_P3_H01 HNSCC5_p5_P5_E11 0 20 | HNSCC5_p14_HNSCC5_P14_LN_G06 HNSCC5_p7_HNSCC5_P7_D10 0 21 | HNSCC5_p14_HNSCC5_P14_LN_G06 HNSCC5_p3_HNSCC5_P3_C11 1 22 | HNSCC5_p14_HNSCC5_P14_LN_G06 HNSCC5_p15_HNSCC5_P15_G03 1 23 | HNSCC5_p14_HNSCC5_P14_LN_G06 HNSCC5_p13_P13_H09 1 24 | HNSCC5_p13_P13_G05 HNSCC5_p9_HNSCC5_P9_B09 0 25 | HNSCC5_p9_HNSCC5_P9_E10 HNSCC5_p14_HNSCC5_P14_LN_C01 1 26 | HNSCC5_p7_HNSCC5_P7_A12 HNSCC5_p9_HNSCC5_P9_G07 1 27 | HNSCC5_p7_HNSCC5_P7_A12 HNSCC5_p14_HNSCC5_P14_LN_B06 0 28 | HNSCC5_p15_HNSCC5_P15_G03 HNSCC5_p9_HNSCC5_P9_C12 2 29 | HNSCC5_p15_HNSCC5_P15_G03 HNSCC5_p9_HNSCC5_P9_E09 1 30 | HNSCC5_p13_P13_F10 HNSCC5_p5_P5_H06 0 31 | HNSCC5_p13_P13_F10 HNSCC5_p13_P13_H01 0 32 | HNSCC5_p15_HNSCC5_P15_B12 HNSCC5_p9_HNSCC5_P9_D05 0 33 | HNSCC5_p9_HNSCC5_P9_F10 HNSCC5_p7_HNSCC5_P7_A12 0 34 | HNSCC5_p7_HNSCC5_P7_G04 HNSCC5_p13_P13_G05 1 35 | HNSCC5_p7_HNSCC5_P7_G04 HNSCC5_p9_HNSCC5_P9_D08 1 36 | HNSCC5_p7_HNSCC5_P7_G05 HNSCC5_p13_P13_E03 1 37 | HNSCC5_p7_HNSCC5_P7_G05 HNSCC5_p14_HNSCC5_P14_LN_C09 1 38 | HNSCC5_p7_HNSCC5_P7_G05 HNSCC5_p14_HNSCC5_P14_LN_A07 1 39 | HNSCC5_p7_HNSCC5_P7_G05 HNSCC5_p15_HNSCC5_P15_B12 0 40 | HNSCC5_p7_HNSCC5_P7_G05 HNSCC5_p5_P5_F11 1 41 | HNSCC5_p7_HNSCC5_P7_C10 HNSCC5_p14_HNSCC5_P14_LN_G06 1 42 | HNSCC5_p7_HNSCC5_P7_C10 HNSCC5_p15_HNSCC5_P15_B08 1 43 | HNSCC5_p7_HNSCC5_P7_C10 HNSCC5_p15_HNSCC5_P15_A11 0 44 | HNSCC5_p7_HNSCC5_P7_C10 HNSCC5_p9_HNSCC5_P9_B10 0 45 | HNSCC5_p14_HNSCC5_P14_LN_C09 HNSCC5_p13_P13_F10 1 46 | HNSCC5_p14_HNSCC5_P14_LN_C09 HNSCC5_p13_P13_C07 0 47 | HNSCC5_p14_HNSCC5_P14_LN_C09 HNSCC5_p7_HNSCC5_P7_B09 0 48 | HNSCC5_p9_HNSCC5_P9_H03 HNSCC5_p3_HNSCC5_P3_G07 2 49 | HNSCC5_p13_P13_A05 HNSCC5_p13_P13_C06 1 50 | HNSCC5_p14_HNSCC5_P14_LN_C01 HNSCC5_p7_HNSCC5_P7_C10 0 51 | root HNSCC5_p7_HNSCC5_P7_G05 2 52 | -------------------------------------------------------------------------------- /example/outputRNAT/LSA.tree.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KChen-lab/MEDALT/c95765f3080e09d5f78cb95a13f169330051b27c/example/outputRNAT/LSA.tree.pdf -------------------------------------------------------------------------------- /example/outputRNAT/gene.LSA.txt: -------------------------------------------------------------------------------- 1 | region Score pvalue adjustp cell depth subtreesize CNA 2 | FZD6 1.42 0.0099009900990099 0.0185643564356436 HNSCC5_p7_HNSCC5_P7_G05 1 50 AMP 3 | NSMCE2 1.6 0.0099009900990099 0.0185643564356436 HNSCC5_p7_HNSCC5_P7_G05 1 50 AMP 4 | RHEB -0.96 0.0099009900990099 0.0495049504950495 HNSCC5_p7_HNSCC5_P7_G05 1 50 DEL 5 | NBN 1.29411764705882 0.00925925925925926 0.0462962962962963 HNSCC5_p5_P5_F11 2 34 AMP 6 | STK3 1.47058823529412 0.00925925925925926 0.0462962962962963 HNSCC5_p5_P5_F11 2 34 AMP 7 | PRKDC 0.857142857142857 0.00649350649350649 0.0324675324675325 HNSCC5_p14_HNSCC5_P14_LN_C09 2 7 AMP 8 | PRKDC 0.8 0.00645161290322581 0.0483870967741935 HNSCC5_p9_HNSCC5_P9_F10 4 5 AMP 9 | -------------------------------------------------------------------------------- /example/outputRNAT/parallel.LSA.txt: -------------------------------------------------------------------------------- 1 | region lineage pvalue 2 | chr8:p11.21 2 0.0099009900990099 3 | chr8:q11 2 0.0099009900990099 4 | PRKDC 2 0.0099009900990099 5 | -------------------------------------------------------------------------------- /example/outputRNAT/segmental.LSA.txt: -------------------------------------------------------------------------------- 1 | region Score pvalue adjustp cell depth subtreesize CNA 2 | chr7:q36.1 -0.86 0.0099009900990099 0.0557582073996873 HNSCC5_p7_HNSCC5_P7_G05 1 50 DEL 3 | chr12:p13.32 -1.68 0.0099009900990099 0.0557582073996873 HNSCC5_p7_HNSCC5_P7_G05 1 50 DEL 4 | chr8:q 1.33866666666667 0.0099009900990099 0.0311589982527665 HNSCC5_p7_HNSCC5_P7_G05 1 50 AMP 5 | chr7:q34 -0.735294117647059 0.00925925925925926 0.0619212962962963 HNSCC5_p5_P5_F11 2 34 DEL 6 | chr7:q36.2 -1.11764705882353 0.00925925925925926 0.0619212962962963 HNSCC5_p5_P5_F11 2 34 DEL 7 | chr8:p23.1-21.3 -0.715686274509804 0.00925925925925926 0.0619212962962963 HNSCC5_p5_P5_F11 2 34 DEL 8 | chr8:q21.3 1.29411764705882 0.00925925925925926 0.0412808641975309 HNSCC5_p5_P5_F11 2 34 AMP 9 | chr8:q22 1.41176470588235 0.00925925925925926 0.0412808641975309 HNSCC5_p5_P5_F11 2 34 AMP 10 | chr8:p11.21 0.857142857142857 0.00649350649350649 0.0386002886002886 HNSCC5_p14_HNSCC5_P14_LN_C09 2 7 AMP 11 | chr8:q11 0.928571428571429 0.00649350649350649 0.0386002886002886 HNSCC5_p14_HNSCC5_P14_LN_C09 2 7 AMP 12 | chr12:p13.31 -1.78571428571429 0.037037037037037 0.283068783068783 HNSCC5_p7_HNSCC5_P7_A04 3 28 DEL 13 | chr8:p11.21 0.6 0.00645161290322581 0.0575268817204301 HNSCC5_p9_HNSCC5_P9_F10 4 5 AMP 14 | chr8:q11 0.9 0.00645161290322581 0.0575268817204301 HNSCC5_p9_HNSCC5_P9_F10 4 5 AMP 15 | chr8:p21.2 -0.681818181818182 0.00925925925925926 0.0762108262108262 HNSCC5_p7_HNSCC5_P7_G04 4 22 DEL 16 | chr8:p12 -0.545454545454545 0.00925925925925926 0.0762108262108262 HNSCC5_p7_HNSCC5_P7_G04 4 22 DEL 17 | chr12:q24.12-24.13 0.8125 0.0136054421768707 0.0808767951625095 HNSCC5_p14_HNSCC5_P14_LN_G06 9 8 AMP 18 | -------------------------------------------------------------------------------- /example/outputRNAT/singlecell.tree.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KChen-lab/MEDALT/c95765f3080e09d5f78cb95a13f169330051b27c/example/outputRNAT/singlecell.tree.pdf -------------------------------------------------------------------------------- /example/run.example.sh: -------------------------------------------------------------------------------- 1 | python scTree.py -P ./ -I ./example/scDNA.CNV.txt -O ./example/outputDNA -D D -G hg19 2 | python scTree.py -P ./ -I ./example/scRNA.CNV.txt -O ./example/outputRNA -D R -G hg19 3 | 4 | python scTree.py -P ./ -I ./example/scDNA.CNV.txt -O ./example/outputDNAT -D D -R T -G hg19 5 | python scTree.py -P ./ -I ./example/scRNA.CNV.txt -O ./example/outputRNAT -D R -R T -G hg19 6 | -------------------------------------------------------------------------------- /example/scDNA.CNV.txt: -------------------------------------------------------------------------------- 1 | chrom chrompos t4c1 t4c2 t4c3 t4c4 t4c5 t4c6 t4c7 t4c8 t4c9 t4c11 t4c12 t4c13 t4c14 t4c15 t4c16 t4c17 t4c18 t4c19 t4c20 t4c21 t4c22 t4c23 t4c24 t4c25 t4c26 t4c27 t4c28 t4c29 t4c30 t4c31 t4c32 t4c33 t4c34 t4c35 t4c36 t4c37 t4c38 t4c39 t4c40 t4c41 t4c42 t4c43 t4c44 t4c45 t4c46 t4c47 t4c48 t4c49 t4c50 t4c51 t4c52 t4c53 2 | 7 1442131 2 2 2 2 2 2 2 2 2 3 2 3 2 3 3 2 2 2 3 1 3 2 3 3 2 2 2 2 3 2 3 2 2 2 2 3 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 3 | 7 9450325 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 2 3 1 3 2 3 3 2 2 2 2 3 2 3 2 2 2 2 3 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 4 | 7 11214368 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 2 3 1 3 2 3 3 2 2 2 2 3 2 2 2 2 2 2 3 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 5 | 7 13376650 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 2 3 1 3 2 3 3 2 2 2 2 3 2 2 2 2 2 2 3 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 6 | 7 20279741 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 2 3 1 3 2 3 3 2 2 2 2 3 2 2 2 2 2 2 3 3 3 2 3 2 2 2 2 2 2 2 2 2 2 2 2 7 | 7 20712518 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 2 3 1 3 2 3 3 2 2 2 2 3 2 2 2 2 2 2 3 3 3 2 3 2 2 2 2 2 2 2 2 2 2 2 2 8 | 7 21585891 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 2 3 2 3 2 3 3 2 2 2 2 3 2 2 2 2 2 2 3 3 3 2 3 2 2 2 2 2 2 2 2 2 2 2 2 9 | 7 22016696 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 2 3 2 3 2 3 3 2 2 2 2 3 2 2 2 2 2 2 3 3 3 2 3 2 2 2 2 2 2 2 2 2 2 2 2 10 | 7 25386457 2 2 2 2 2 2 2 2 2 3 2 3 2 3 3 2 2 2 2 2 3 2 2 3 2 2 2 2 3 2 2 2 2 2 2 3 3 3 2 3 2 2 2 2 2 2 2 2 2 2 2 2 11 | 7 31068824 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 2 2 2 3 2 2 3 2 2 2 3 3 2 2 2 2 2 2 3 3 3 2 3 2 2 2 2 2 2 2 2 2 2 2 2 12 | 7 31492544 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 2 2 2 3 2 2 3 2 2 2 3 3 2 2 2 2 2 2 3 3 3 2 3 2 2 2 2 2 2 2 2 2 2 2 2 13 | 7 32919262 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 2 2 3 2 2 3 2 2 2 3 3 2 2 2 2 2 2 2 3 3 2 3 2 2 2 2 2 2 2 2 2 2 2 2 14 | 7 33620856 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 2 2 3 2 2 3 2 2 2 3 3 2 2 2 2 2 2 2 3 3 2 3 2 2 2 2 2 2 2 2 2 2 2 2 15 | 7 43407374 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 2 2 3 2 2 3 2 2 2 3 2 2 2 3 2 2 2 3 3 3 2 3 2 2 2 2 2 2 2 2 2 2 2 2 16 | 7 43854174 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 2 2 3 2 3 3 2 2 2 3 2 2 2 3 2 2 2 3 3 3 2 3 2 2 2 2 2 2 2 2 2 2 2 2 17 | 7 44142128 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 2 2 3 2 3 3 2 2 2 3 2 2 2 3 2 2 2 3 3 3 2 3 2 2 2 2 2 2 2 2 2 2 2 2 18 | 7 46003236 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 2 2 3 2 3 3 2 2 2 3 2 2 2 3 2 2 2 3 3 3 2 3 2 2 2 2 2 2 2 2 2 2 2 2 19 | 7 52584397 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 3 2 3 2 3 3 2 2 2 3 2 2 2 2 2 2 2 3 3 3 2 3 2 2 2 2 2 2 2 2 2 2 2 2 20 | 7 62189671 2 2 2 2 2 2 2 2 2 3 2 3 2 3 3 2 3 3 3 2 3 2 3 3 2 3 2 3 1 3 2 3 2 2 2 3 3 3 4 3 2 3 1 3 2 3 2 2 2 2 2 2 21 | 7 65263325 2 2 2 2 2 2 2 2 2 3 2 3 2 3 3 2 3 3 3 2 3 2 3 3 2 3 2 3 1 3 3 3 3 2 2 3 3 3 4 3 2 3 1 3 2 3 2 2 2 2 2 3 22 | 7 67678007 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 3 3 3 2 3 2 3 3 2 3 2 3 2 3 3 3 3 2 2 3 3 3 4 3 2 3 2 3 2 3 2 2 2 2 2 3 23 | 7 68818400 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 3 3 3 2 3 2 3 3 2 3 2 3 2 3 3 3 3 2 2 2 3 3 4 3 2 3 2 3 2 3 2 2 2 2 2 3 24 | 7 78571269 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 3 2 3 2 2 2 3 3 2 2 2 3 2 2 2 3 2 2 2 2 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 25 | 7 81367105 2 2 2 2 2 2 2 2 2 3 2 3 2 2 1 2 3 2 3 2 2 2 3 3 2 2 2 3 2 2 2 3 2 2 2 3 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 26 | 7 83515136 2 2 2 2 2 2 2 2 2 3 2 3 2 2 1 2 3 2 3 2 2 2 3 3 2 2 2 3 2 2 2 3 2 2 2 3 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 27 | 7 89402877 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 3 2 3 2 2 2 3 3 2 2 2 3 2 3 2 3 2 2 2 3 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 28 | 7 94302101 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 3 3 3 2 3 2 3 3 2 2 2 3 2 3 2 3 2 2 2 3 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 29 | 7 97186682 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 3 3 3 2 3 2 3 3 3 2 2 3 2 3 2 3 3 2 2 3 3 3 1 3 2 2 2 3 2 1 2 2 2 2 2 2 30 | 7 99145316 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 3 3 3 2 3 2 3 3 3 2 2 3 2 3 2 3 3 2 2 3 3 3 1 3 2 2 1 3 2 1 2 2 2 2 2 2 31 | 7 103267181 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 3 2 3 2 3 3 3 2 2 3 2 3 2 3 3 2 2 3 3 3 2 3 2 2 2 3 2 3 2 2 2 2 2 2 32 | 7 103934873 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 3 2 3 2 3 3 3 2 2 3 2 3 2 3 3 2 2 3 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 33 | 7 105534938 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 3 2 3 2 3 3 3 2 2 3 2 3 2 3 3 2 2 3 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 34 | 7 108421090 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 3 2 3 2 3 3 3 2 2 3 2 3 2 3 3 2 2 3 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 35 | 7 111046828 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 3 2 2 2 3 3 3 2 2 3 2 3 2 3 2 2 2 3 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 36 | 7 114138248 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 3 2 2 2 3 3 3 2 2 3 2 3 2 3 2 2 2 3 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 37 | 7 114989526 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 3 2 2 2 3 3 3 2 2 3 2 3 2 3 2 2 2 3 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 38 | 7 119933346 2 2 2 2 2 2 2 2 2 3 2 3 2 2 3 2 2 3 2 2 2 2 3 3 3 2 2 3 2 3 2 3 2 2 2 3 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 39 | 7 124916230 2 2 2 2 2 2 2 2 2 3 3 3 2 2 3 2 2 3 2 2 2 2 3 3 3 2 1 3 2 3 2 2 2 2 2 2 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 40 | 7 125772649 2 2 2 2 2 2 2 2 2 3 3 3 2 2 3 2 2 3 2 2 2 2 3 3 3 2 1 3 2 3 2 2 2 2 2 2 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 41 | 7 126199063 2 2 2 2 2 2 2 2 2 3 3 3 2 2 3 2 2 2 2 2 2 2 3 3 3 2 1 3 2 3 2 2 2 2 2 2 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 42 | 7 135629456 2 2 2 2 2 2 2 2 2 3 3 3 2 2 3 2 2 2 3 2 3 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 43 | 7 140852004 2 2 2 2 2 2 2 2 2 3 3 3 2 2 3 2 2 2 3 2 3 2 2 3 2 2 2 3 2 3 2 2 2 2 2 2 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 44 | 7 144983959 2 2 2 2 2 2 2 2 2 3 3 3 2 2 3 2 2 2 3 2 3 2 2 3 2 2 2 3 3 3 2 2 3 2 2 2 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 45 | 7 147166986 2 2 2 2 2 2 2 2 2 3 3 3 2 2 3 2 2 2 3 2 3 2 2 3 2 2 2 3 3 3 2 2 3 2 2 2 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 46 | 7 147382874 2 2 2 2 2 2 2 2 2 3 3 3 2 2 3 2 2 2 3 2 3 2 2 3 2 2 2 3 3 3 2 2 3 2 2 2 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 47 | 7 147824892 2 2 2 2 2 2 2 2 2 3 3 3 2 2 3 2 2 2 3 2 3 2 2 3 2 2 2 3 3 3 2 2 3 2 2 2 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 48 | 7 148277194 2 2 2 2 2 2 2 2 2 3 3 3 2 2 3 2 2 2 3 2 3 2 2 3 2 2 2 3 3 3 2 2 3 2 2 2 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 49 | 7 151684207 2 2 2 2 2 2 2 2 2 3 3 3 2 2 3 2 2 2 3 2 3 2 2 3 2 2 2 3 3 3 2 2 3 2 2 2 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 50 | 7 154573031 2 2 2 2 2 2 2 2 2 3 1 3 2 2 3 2 2 2 3 1 3 2 2 3 2 2 1 2 3 3 2 2 3 2 2 2 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 51 | 7 156947501 2 2 2 2 2 2 2 2 2 3 1 3 2 2 3 2 2 2 3 1 3 2 2 2 2 2 1 2 3 2 2 2 3 2 2 2 3 3 2 3 2 2 2 2 2 3 2 2 2 2 2 2 52 | 10 13929871 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 53 | 10 17482138 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 54 | 10 23038973 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 55 | 10 27790906 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 56 | 10 28007837 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 57 | 10 32053366 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 58 | 10 32741013 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 59 | 10 33241644 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 60 | 10 38000333 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 61 | 10 42919625 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 62 | 10 53244584 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 63 | 10 53460078 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 64 | 10 54329691 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 65 | 10 55638959 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 66 | 10 56724658 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 67 | 10 58248591 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 68 | 10 59768236 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 69 | 10 63452189 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 70 | 10 64525295 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 71 | 10 66303923 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 72 | 10 68034399 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 73 | 10 71480987 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 74 | 10 72994037 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 75 | 10 74791121 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 76 | 10 75257905 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 77 | 10 75999391 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 78 | 10 78190920 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 79 | 10 78843317 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 0 1 2 2 2 2 1 80 | 10 79693923 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 0 1 2 2 2 2 1 81 | 10 80555698 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 0 1 2 2 2 2 1 82 | 10 81865217 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 0 1 2 2 2 2 1 83 | 10 84094631 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 0 1 2 2 2 2 1 84 | 10 85818835 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 0 1 2 2 2 2 1 85 | 10 86270947 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 0 1 2 2 2 2 1 86 | 10 90321394 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 0 1 2 2 2 2 1 87 | 10 90744037 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 0 1 2 2 2 2 1 88 | 10 94330257 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 0 1 2 2 2 2 1 89 | 10 100428020 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 2 2 2 2 1 90 | 10 100900807 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 2 2 2 2 1 91 | 10 110422980 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 92 | 10 114590504 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 93 | 10 114808814 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 94 | 10 115866755 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 95 | 10 117406193 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 96 | 10 118916500 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 97 | 10 120175475 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 98 | 10 124825129 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 99 | 10 128326184 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 100 | 10 133881461 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 1 101 | 10 134314867 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 1 102 | 14 24400311 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 2 2 2 2 3 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 103 | 14 24682402 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 2 2 2 2 3 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 104 | 14 25140942 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 2 2 2 2 3 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 105 | 14 32444218 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 1 3 3 3 3 3 2 3 2 3 3 3 3 2 2 2 2 2 2 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 106 | 14 33754508 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 1 3 3 3 3 3 2 3 2 3 3 3 3 2 2 2 2 2 2 3 2 1 2 2 2 2 2 3 3 2 2 2 2 3 107 | 14 35099460 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 1 3 3 3 3 3 2 3 2 3 3 3 3 2 2 2 2 2 3 3 2 1 2 2 2 3 2 3 3 2 2 2 2 3 108 | 14 36057768 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 1 3 3 3 3 3 2 3 2 3 3 2 3 2 2 2 2 2 3 3 2 1 2 2 2 3 2 3 3 2 2 2 2 3 109 | 14 37385073 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 1 3 3 3 3 3 2 3 2 3 3 2 3 2 2 2 2 2 3 3 2 1 2 2 2 3 2 3 3 2 2 2 2 3 110 | 14 38717725 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 2 2 2 2 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 111 | 14 40102545 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 2 2 2 2 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 112 | 14 40768601 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 2 2 2 2 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 113 | 14 41428243 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 2 2 2 2 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 114 | 14 42081113 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 2 2 2 2 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 115 | 14 43827551 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 2 2 2 3 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 116 | 14 44708281 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 2 2 2 3 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 117 | 14 45170285 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 2 2 2 3 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 118 | 14 50070292 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 3 2 2 3 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 119 | 14 51439718 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 3 2 2 3 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 120 | 14 51872573 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 3 2 2 3 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 121 | 14 52087750 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 3 2 2 3 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 122 | 14 52985738 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 3 2 2 3 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 123 | 14 54770506 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 3 2 2 3 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 124 | 14 54992372 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 3 2 2 3 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 125 | 14 55434836 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 2 3 3 3 3 3 2 2 3 2 3 3 2 2 2 2 2 3 2 3 3 2 2 2 2 3 126 | 14 59658207 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 2 2 3 2 3 3 3 3 3 2 2 3 2 3 3 2 2 2 2 2 2 2 3 3 2 2 2 2 3 127 | 14 61686900 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 2 2 3 2 3 3 3 3 3 2 2 3 2 3 3 2 2 3 2 2 2 2 3 3 2 2 2 2 3 128 | 14 63646246 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 2 2 3 2 3 3 3 3 3 2 2 3 2 3 3 2 2 3 2 2 2 2 3 3 2 2 2 2 3 129 | 14 64099101 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 2 2 3 2 3 3 3 3 3 2 2 3 2 3 3 2 2 3 2 2 2 2 3 3 2 2 2 2 3 130 | 14 65683621 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 2 2 3 2 3 2 3 3 3 2 2 3 2 3 3 2 2 3 2 2 2 2 3 3 2 2 2 2 3 131 | 14 66353915 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 2 2 3 2 3 2 3 3 3 2 2 3 2 3 3 2 2 3 2 2 2 2 3 3 2 2 2 2 3 132 | 14 69877546 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 2 2 3 2 3 2 3 3 2 2 2 3 2 3 3 2 2 3 2 2 2 2 3 3 2 2 2 2 3 133 | 14 70529752 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 2 2 3 2 3 2 2 3 2 2 2 3 2 3 3 2 2 3 2 2 2 2 3 3 2 2 2 2 3 134 | 14 72566789 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 2 2 3 2 3 2 2 3 2 2 2 3 2 3 3 2 2 3 2 2 2 2 3 3 2 2 2 2 3 135 | 14 76421763 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 2 2 3 2 3 2 2 3 2 2 2 3 2 3 3 2 2 3 2 2 2 2 3 3 2 2 2 2 3 136 | 14 76842855 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 2 2 3 2 3 2 2 3 2 2 2 3 2 2 3 2 2 3 2 2 2 2 3 3 2 2 2 2 3 137 | 14 77289801 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 2 2 3 2 3 2 2 3 2 2 2 3 2 2 3 2 2 3 2 2 2 2 3 3 2 2 2 2 3 138 | 14 77521515 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 2 2 3 2 3 2 2 3 2 2 2 3 2 2 3 2 2 3 2 2 2 2 3 3 2 2 2 2 3 139 | 14 77736323 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 2 2 3 2 3 2 2 3 2 2 2 3 2 2 3 2 2 3 2 2 2 2 3 3 2 2 2 2 3 140 | 14 79689180 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 2 1 3 3 3 3 2 2 1 2 3 2 2 3 2 2 2 3 2 2 3 2 2 2 2 2 2 2 3 3 2 2 2 2 3 141 | 14 80774693 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 2 1 3 3 3 3 2 2 1 2 3 2 2 3 2 2 2 3 2 2 3 2 2 2 2 2 2 2 3 3 2 2 2 2 3 142 | 14 83992800 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 2 1 3 3 3 3 3 2 2 2 3 2 3 3 2 2 2 3 2 2 3 2 2 2 2 2 2 2 3 3 2 2 2 2 3 143 | 14 86322553 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 2 1 3 3 3 3 3 2 2 2 3 2 3 3 2 2 2 3 2 2 3 2 2 2 2 2 2 2 3 3 2 2 2 2 3 144 | 14 88950035 2 2 2 2 2 2 2 2 2 3 3 2 3 2 3 2 2 2 1 3 3 3 3 3 2 2 2 3 2 3 3 2 2 2 3 2 2 3 2 2 2 2 2 2 2 3 3 2 2 2 2 3 145 | 14 94713051 2 2 2 2 2 2 2 2 2 3 3 2 3 2 3 2 2 3 1 3 3 3 3 3 2 1 2 3 2 3 3 2 2 2 2 2 2 3 2 2 2 2 2 2 2 3 3 2 2 2 2 2 146 | 14 95138062 2 2 2 2 2 2 2 2 2 3 3 2 3 2 3 2 2 3 1 3 3 3 3 3 2 1 2 3 2 3 3 2 2 2 2 2 2 3 2 2 2 2 2 2 2 3 3 2 2 2 2 2 147 | 14 96414165 2 2 2 2 2 2 2 2 2 3 3 2 3 2 3 2 2 3 1 3 3 3 3 3 2 1 2 3 2 3 3 2 2 2 2 2 2 3 2 2 2 2 2 2 2 3 3 2 2 2 2 2 148 | 14 96840186 2 2 2 2 2 2 2 2 2 3 3 2 3 2 3 2 2 3 1 3 3 3 3 3 2 1 2 3 2 3 3 2 2 2 2 2 2 3 2 2 2 2 2 2 2 3 3 2 2 2 2 2 149 | 14 99784441 2 2 2 2 2 2 2 2 2 3 3 2 3 2 3 2 2 3 1 3 3 3 3 3 2 2 2 3 2 3 3 2 2 2 2 3 2 3 2 2 2 2 2 2 2 3 3 2 2 2 2 2 150 | 14 101075469 2 2 2 2 2 2 2 2 2 3 3 2 3 2 3 2 2 3 1 3 3 3 3 3 2 2 2 3 2 3 3 2 2 2 2 3 3 3 2 2 2 2 2 2 2 3 3 2 2 2 2 2 151 | 14 105783636 2 2 2 2 2 2 2 2 2 3 1 2 3 2 3 2 2 3 1 3 3 3 3 3 2 2 2 3 2 3 3 2 2 2 2 3 3 3 2 2 2 2 1 2 2 3 3 2 2 2 2 2 152 | 19 741862 1 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 2 153 | 19 1441011 1 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 2 154 | 19 2864879 1 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 2 155 | 19 3117056 1 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 2 156 | 19 3359333 1 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 2 157 | 19 3595053 1 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 2 158 | 19 3829254 1 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 2 159 | 19 4568928 1 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 2 160 | 19 4814289 1 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 2 161 | 19 6731174 1 2 2 2 2 2 2 2 2 1 1 3 1 3 1 2 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 162 | 19 9166901 1 2 2 2 2 2 2 2 2 1 1 3 1 3 1 2 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 163 | 19 9908698 1 2 2 2 2 2 2 2 2 1 1 3 1 3 1 2 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 164 | 19 11386546 1 2 2 2 2 2 2 2 2 3 1 3 1 3 1 2 2 3 2 1 1 3 1 2 3 1 3 2 3 3 3 2 3 2 3 2 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 165 | 19 14376689 3 2 2 2 2 2 2 2 2 3 3 4 3 2 3 2 3 3 4 3 1 3 3 2 3 3 3 2 3 3 3 2 3 4 3 2 2 3 4 3 3 3 3 3 1 3 3 2 2 2 2 3 166 | 19 18009144 3 2 2 2 2 2 2 2 2 3 3 4 3 2 3 2 3 3 4 3 3 3 3 3 3 3 3 3 3 3 3 2 3 4 3 2 3 3 4 3 3 3 3 3 3 3 3 2 2 2 2 3 167 | 19 18504732 3 2 2 2 2 2 2 2 2 3 3 4 3 2 3 2 3 3 4 3 3 3 3 3 3 3 3 3 3 3 3 2 3 4 3 2 3 3 4 3 3 3 3 3 3 3 3 2 2 2 2 3 168 | 19 19203998 3 2 2 2 2 2 2 2 2 3 3 4 3 2 3 2 3 3 4 3 3 3 3 3 3 3 3 3 3 3 3 2 3 4 3 2 3 3 4 3 3 3 3 3 3 3 3 2 2 2 2 3 169 | 19 19667901 3 2 2 2 2 2 2 2 2 3 3 4 3 2 3 2 3 3 4 3 3 3 3 3 3 3 3 3 3 3 3 2 3 4 3 2 3 3 4 3 3 3 3 3 3 3 3 2 2 2 2 3 170 | 19 22853055 3 2 2 2 2 2 2 2 2 3 3 4 3 2 3 2 3 3 4 3 3 3 3 3 2 3 3 3 3 3 3 2 3 4 3 2 3 3 4 3 3 3 3 3 3 3 3 2 2 2 2 3 171 | 19 23870955 3 2 2 2 2 2 2 2 2 3 3 4 3 2 3 2 3 3 4 3 3 3 3 3 2 3 3 3 3 3 3 2 3 4 3 2 3 3 4 3 3 3 3 3 3 3 3 2 2 2 2 3 172 | 19 29571681 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 1 3 3 2 3 3 3 3 2 3 3 3 4 3 2 3 3 1 3 2 3 1 2 3 3 2 2 2 2 2 3 173 | 19 30015777 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 1 3 3 2 3 3 3 3 2 3 3 3 4 3 2 3 3 1 3 2 3 1 2 3 3 2 2 2 2 2 3 174 | 19 31109935 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 1 3 3 2 3 3 3 3 2 3 3 3 4 3 2 3 3 1 3 2 3 1 2 3 3 2 2 2 2 2 3 175 | 19 32782661 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 1 3 3 2 3 3 3 3 2 3 3 3 4 3 2 3 3 1 3 2 3 1 2 3 3 2 2 2 2 2 3 176 | 19 33745174 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 2 3 3 3 3 3 2 2 2 2 2 3 177 | 19 34619056 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 2 3 3 3 3 3 2 2 2 2 2 3 178 | 19 35091188 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 2 3 3 3 3 3 2 2 2 2 2 3 179 | 19 36727529 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 180 | 19 37264808 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 181 | 19 37501094 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 182 | 19 38263424 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 183 | 19 38980921 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 184 | 19 39959542 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 185 | 19 40198836 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 186 | 19 41956811 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 4 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 187 | 19 43850819 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 4 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 188 | 19 46715221 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 4 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 189 | 19 47436999 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 4 3 3 3 3 3 2 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 190 | 19 48174470 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 191 | 19 49463207 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 192 | 19 49963555 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 193 | 19 50443966 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 194 | 19 50742253 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 195 | 19 51447483 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 196 | 19 51893501 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 197 | 19 53324047 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 198 | 19 53837140 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 199 | 19 54101729 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 200 | 19 54369505 3 2 2 2 2 2 2 2 2 3 3 3 3 2 3 2 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 201 | 19 57376292 3 2 2 2 2 2 2 2 2 3 3 3 3 2 1 2 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 2 3 4 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 202 | -------------------------------------------------------------------------------- /hg19.band.bed: -------------------------------------------------------------------------------- 1 | chr1 0 2300000 p36.33 2 | chr1 2300000 5400000 p36.32 3 | chr1 5400000 7200000 p36.31 4 | chr1 7200000 9200000 p36.23 5 | chr1 9200000 12700000 p36.22 6 | chr1 12700000 16200000 p36.21 7 | chr1 16200000 20400000 p36.13 8 | chr1 20400000 23900000 p36.12 9 | chr1 23900000 28000000 p36.11 10 | chr1 28000000 30200000 p35.3 11 | chr1 30200000 32400000 p35.2 12 | chr1 32400000 34600000 p35.1 13 | chr1 34600000 40100000 p34.3 14 | chr1 40100000 44100000 p34.2 15 | chr1 44100000 46800000 p34.1 16 | chr1 46800000 50700000 p33 17 | chr1 50700000 56100000 p32.3 18 | chr1 56100000 59000000 p32.2 19 | chr1 59000000 61300000 p32.1 20 | chr1 61300000 68900000 p31.3 21 | chr1 68900000 69700000 p31.2 22 | chr1 69700000 84900000 p31.1 23 | chr1 84900000 88400000 p22.3 24 | chr1 88400000 92000000 p22.2 25 | chr1 92000000 94700000 p22.1 26 | chr1 94700000 99700000 p21.3 27 | chr1 99700000 102200000 p21.2 28 | chr1 102200000 107200000 p21.1 29 | chr1 107200000 111800000 p13.3 30 | chr1 111800000 116100000 p13.2 31 | chr1 116100000 117800000 p13.1 32 | chr1 117800000 120600000 p12 33 | chr1 120600000 121500000 p11.2 34 | chr1 121500000 125000000 p11.1 35 | chr1 125000000 128900000 q11 36 | chr1 128900000 142600000 q12 37 | chr1 142600000 147000000 q21.1 38 | chr1 147000000 150300000 q21.2 39 | chr1 150300000 155000000 q21.3 40 | chr1 155000000 156500000 q22 41 | chr1 156500000 159100000 q23.1 42 | chr1 159100000 160500000 q23.2 43 | chr1 160500000 165500000 q23.3 44 | chr1 165500000 167200000 q24.1 45 | chr1 167200000 170900000 q24.2 46 | chr1 170900000 172900000 q24.3 47 | chr1 172900000 176000000 q25.1 48 | chr1 176000000 180300000 q25.2 49 | chr1 180300000 185800000 q25.3 50 | chr1 185800000 190800000 q31.1 51 | chr1 190800000 193800000 q31.2 52 | chr1 193800000 198700000 q31.3 53 | chr1 198700000 207200000 q32.1 54 | chr1 207200000 211500000 q32.2 55 | chr1 211500000 214500000 q32.3 56 | chr1 214500000 224100000 q41 57 | chr1 224100000 224600000 q42.11 58 | chr1 224600000 227000000 q42.12 59 | chr1 227000000 230700000 q42.13 60 | chr1 230700000 234700000 q42.2 61 | chr1 234700000 236600000 q42.3 62 | chr1 236600000 243700000 q43 63 | chr1 243700000 249250621 q44 64 | chr2 0 4400000 p25.3 65 | chr2 4400000 7100000 p25.2 66 | chr2 7100000 12200000 p25.1 67 | chr2 12200000 16700000 p24.3 68 | chr2 16700000 19200000 p24.2 69 | chr2 19200000 24000000 p24.1 70 | chr2 24000000 27900000 p23.3 71 | chr2 27900000 30000000 p23.2 72 | chr2 30000000 32100000 p23.1 73 | chr2 32100000 36600000 p22.3 74 | chr2 36600000 38600000 p22.2 75 | chr2 38600000 41800000 p22.1 76 | chr2 41800000 47800000 p21 77 | chr2 47800000 52900000 p16.3 78 | chr2 52900000 55000000 p16.2 79 | chr2 55000000 61300000 p16.1 80 | chr2 61300000 64100000 p15 81 | chr2 64100000 68600000 p14 82 | chr2 68600000 71500000 p13.3 83 | chr2 71500000 73500000 p13.2 84 | chr2 73500000 75000000 p13.1 85 | chr2 75000000 83300000 p12 86 | chr2 83300000 90500000 p11.2 87 | chr2 90500000 93300000 p11.1 88 | chr2 93300000 96800000 q11.1 89 | chr2 96800000 102700000 q11.2 90 | chr2 102700000 106000000 q12.1 91 | chr2 106000000 107500000 q12.2 92 | chr2 107500000 110200000 q12.3 93 | chr2 110200000 114400000 q13 94 | chr2 114400000 118800000 q14.1 95 | chr2 118800000 122400000 q14.2 96 | chr2 122400000 129900000 q14.3 97 | chr2 129900000 132500000 q21.1 98 | chr2 132500000 135100000 q21.2 99 | chr2 135100000 136800000 q21.3 100 | chr2 136800000 142200000 q22.1 101 | chr2 142200000 144100000 q22.2 102 | chr2 144100000 148700000 q22.3 103 | chr2 148700000 149900000 q23.1 104 | chr2 149900000 150500000 q23.2 105 | chr2 150500000 154900000 q23.3 106 | chr2 154900000 159800000 q24.1 107 | chr2 159800000 163700000 q24.2 108 | chr2 163700000 169700000 q24.3 109 | chr2 169700000 178000000 q31.1 110 | chr2 178000000 180600000 q31.2 111 | chr2 180600000 183000000 q31.3 112 | chr2 183000000 189400000 q32.1 113 | chr2 189400000 191900000 q32.2 114 | chr2 191900000 197400000 q32.3 115 | chr2 197400000 203300000 q33.1 116 | chr2 203300000 204900000 q33.2 117 | chr2 204900000 209000000 q33.3 118 | chr2 209000000 215300000 q34 119 | chr2 215300000 221500000 q35 120 | chr2 221500000 225200000 q36.1 121 | chr2 225200000 226100000 q36.2 122 | chr2 226100000 231000000 q36.3 123 | chr2 231000000 235600000 q37.1 124 | chr2 235600000 237300000 q37.2 125 | chr2 237300000 243199373 q37.3 126 | chr3 0 2800000 p26.3 127 | chr3 2800000 4000000 p26.2 128 | chr3 4000000 8700000 p26.1 129 | chr3 8700000 11800000 p25.3 130 | chr3 11800000 13300000 p25.2 131 | chr3 13300000 16400000 p25.1 132 | chr3 16400000 23900000 p24.3 133 | chr3 23900000 26400000 p24.2 134 | chr3 26400000 30900000 p24.1 135 | chr3 30900000 32100000 p23 136 | chr3 32100000 36500000 p22.3 137 | chr3 36500000 39400000 p22.2 138 | chr3 39400000 43700000 p22.1 139 | chr3 43700000 44100000 p21.33 140 | chr3 44100000 44200000 p21.32 141 | chr3 44200000 50600000 p21.31 142 | chr3 50600000 52300000 p21.2 143 | chr3 52300000 54400000 p21.1 144 | chr3 54400000 58600000 p14.3 145 | chr3 58600000 63700000 p14.2 146 | chr3 63700000 69800000 p14.1 147 | chr3 69800000 74200000 p13 148 | chr3 74200000 79800000 p12.3 149 | chr3 79800000 83500000 p12.2 150 | chr3 83500000 87200000 p12.1 151 | chr3 87200000 87900000 p11.2 152 | chr3 87900000 91000000 p11.1 153 | chr3 91000000 93900000 q11.1 154 | chr3 93900000 98300000 q11.2 155 | chr3 98300000 100000000 q12.1 156 | chr3 100000000 100900000 q12.2 157 | chr3 100900000 102800000 q12.3 158 | chr3 102800000 106200000 q13.11 159 | chr3 106200000 107900000 q13.12 160 | chr3 107900000 111300000 q13.13 161 | chr3 111300000 113500000 q13.2 162 | chr3 113500000 117300000 q13.31 163 | chr3 117300000 119000000 q13.32 164 | chr3 119000000 121900000 q13.33 165 | chr3 121900000 123800000 q21.1 166 | chr3 123800000 125800000 q21.2 167 | chr3 125800000 129200000 q21.3 168 | chr3 129200000 133700000 q22.1 169 | chr3 133700000 135700000 q22.2 170 | chr3 135700000 138700000 q22.3 171 | chr3 138700000 142800000 q23 172 | chr3 142800000 148900000 q24 173 | chr3 148900000 152100000 q25.1 174 | chr3 152100000 155000000 q25.2 175 | chr3 155000000 157000000 q25.31 176 | chr3 157000000 159000000 q25.32 177 | chr3 159000000 160700000 q25.33 178 | chr3 160700000 167600000 q26.1 179 | chr3 167600000 170900000 q26.2 180 | chr3 170900000 175700000 q26.31 181 | chr3 175700000 179000000 q26.32 182 | chr3 179000000 182700000 q26.33 183 | chr3 182700000 184500000 q27.1 184 | chr3 184500000 186000000 q27.2 185 | chr3 186000000 187900000 q27.3 186 | chr3 187900000 192300000 q28 187 | chr3 192300000 198022430 q29 188 | chr4 0 4500000 p16.3 189 | chr4 4500000 6000000 p16.2 190 | chr4 6000000 11300000 p16.1 191 | chr4 11300000 15200000 p15.33 192 | chr4 15200000 17800000 p15.32 193 | chr4 17800000 21300000 p15.31 194 | chr4 21300000 27700000 p15.2 195 | chr4 27700000 35800000 p15.1 196 | chr4 35800000 41200000 p14 197 | chr4 41200000 44600000 p13 198 | chr4 44600000 48200000 p12 199 | chr4 48200000 50400000 p11 200 | chr4 50400000 52700000 q11 201 | chr4 52700000 59500000 q12 202 | chr4 59500000 66600000 q13.1 203 | chr4 66600000 70500000 q13.2 204 | chr4 70500000 76300000 q13.3 205 | chr4 76300000 78900000 q21.1 206 | chr4 78900000 82400000 q21.21 207 | chr4 82400000 84100000 q21.22 208 | chr4 84100000 86900000 q21.23 209 | chr4 86900000 88000000 q21.3 210 | chr4 88000000 93700000 q22.1 211 | chr4 93700000 95100000 q22.2 212 | chr4 95100000 98800000 q22.3 213 | chr4 98800000 101100000 q23 214 | chr4 101100000 107700000 q24 215 | chr4 107700000 114100000 q25 216 | chr4 114100000 120800000 q26 217 | chr4 120800000 123800000 q27 218 | chr4 123800000 128800000 q28.1 219 | chr4 128800000 131100000 q28.2 220 | chr4 131100000 139500000 q28.3 221 | chr4 139500000 141500000 q31.1 222 | chr4 141500000 146800000 q31.21 223 | chr4 146800000 148500000 q31.22 224 | chr4 148500000 151100000 q31.23 225 | chr4 151100000 155600000 q31.3 226 | chr4 155600000 161800000 q32.1 227 | chr4 161800000 164500000 q32.2 228 | chr4 164500000 170100000 q32.3 229 | chr4 170100000 171900000 q33 230 | chr4 171900000 176300000 q34.1 231 | chr4 176300000 177500000 q34.2 232 | chr4 177500000 183200000 q34.3 233 | chr4 183200000 187100000 q35.1 234 | chr4 187100000 191154276 q35.2 235 | chr5 0 4500000 p15.33 236 | chr5 4500000 6300000 p15.32 237 | chr5 6300000 9800000 p15.31 238 | chr5 9800000 15000000 p15.2 239 | chr5 15000000 18400000 p15.1 240 | chr5 18400000 23300000 p14.3 241 | chr5 23300000 24600000 p14.2 242 | chr5 24600000 28900000 p14.1 243 | chr5 28900000 33800000 p13.3 244 | chr5 33800000 38400000 p13.2 245 | chr5 38400000 42500000 p13.1 246 | chr5 42500000 46100000 p12 247 | chr5 46100000 48400000 p11 248 | chr5 48400000 50700000 q11.1 249 | chr5 50700000 58900000 q11.2 250 | chr5 58900000 62900000 q12.1 251 | chr5 62900000 63200000 q12.2 252 | chr5 63200000 66700000 q12.3 253 | chr5 66700000 68400000 q13.1 254 | chr5 68400000 73300000 q13.2 255 | chr5 73300000 76900000 q13.3 256 | chr5 76900000 81400000 q14.1 257 | chr5 81400000 82800000 q14.2 258 | chr5 82800000 92300000 q14.3 259 | chr5 92300000 98200000 q15 260 | chr5 98200000 102800000 q21.1 261 | chr5 102800000 104500000 q21.2 262 | chr5 104500000 109600000 q21.3 263 | chr5 109600000 111500000 q22.1 264 | chr5 111500000 113100000 q22.2 265 | chr5 113100000 115200000 q22.3 266 | chr5 115200000 121400000 q23.1 267 | chr5 121400000 127300000 q23.2 268 | chr5 127300000 130600000 q23.3 269 | chr5 130600000 136200000 q31.1 270 | chr5 136200000 139500000 q31.2 271 | chr5 139500000 144500000 q31.3 272 | chr5 144500000 149800000 q32 273 | chr5 149800000 152700000 q33.1 274 | chr5 152700000 155700000 q33.2 275 | chr5 155700000 159900000 q33.3 276 | chr5 159900000 168500000 q34 277 | chr5 168500000 172800000 q35.1 278 | chr5 172800000 176600000 q35.2 279 | chr5 176600000 180915260 q35.3 280 | chr6 0 2300000 p25.3 281 | chr6 2300000 4200000 p25.2 282 | chr6 4200000 7100000 p25.1 283 | chr6 7100000 10600000 p24.3 284 | chr6 10600000 11600000 p24.2 285 | chr6 11600000 13400000 p24.1 286 | chr6 13400000 15200000 p23 287 | chr6 15200000 25200000 p22.3 288 | chr6 25200000 27000000 p22.2 289 | chr6 27000000 30400000 p22.1 290 | chr6 30400000 32100000 p21.33 291 | chr6 32100000 33500000 p21.32 292 | chr6 33500000 36600000 p21.31 293 | chr6 36600000 40500000 p21.2 294 | chr6 40500000 46200000 p21.1 295 | chr6 46200000 51800000 p12.3 296 | chr6 51800000 52900000 p12.2 297 | chr6 52900000 57000000 p12.1 298 | chr6 57000000 58700000 p11.2 299 | chr6 58700000 61000000 p11.1 300 | chr6 61000000 63300000 q11.1 301 | chr6 63300000 63400000 q11.2 302 | chr6 63400000 70000000 q12 303 | chr6 70000000 75900000 q13 304 | chr6 75900000 83900000 q14.1 305 | chr6 83900000 84900000 q14.2 306 | chr6 84900000 88000000 q14.3 307 | chr6 88000000 93100000 q15 308 | chr6 93100000 99500000 q16.1 309 | chr6 99500000 100600000 q16.2 310 | chr6 100600000 105500000 q16.3 311 | chr6 105500000 114600000 q21 312 | chr6 114600000 118300000 q22.1 313 | chr6 118300000 118500000 q22.2 314 | chr6 118500000 126100000 q22.31 315 | chr6 126100000 127100000 q22.32 316 | chr6 127100000 130300000 q22.33 317 | chr6 130300000 131200000 q23.1 318 | chr6 131200000 135200000 q23.2 319 | chr6 135200000 139000000 q23.3 320 | chr6 139000000 142800000 q24.1 321 | chr6 142800000 145600000 q24.2 322 | chr6 145600000 149000000 q24.3 323 | chr6 149000000 152500000 q25.1 324 | chr6 152500000 155500000 q25.2 325 | chr6 155500000 161000000 q25.3 326 | chr6 161000000 164500000 q26 327 | chr6 164500000 171115067 q27 328 | chr7 0 2800000 p22.3 329 | chr7 2800000 4500000 p22.2 330 | chr7 4500000 7300000 p22.1 331 | chr7 7300000 13800000 p21.3 332 | chr7 13800000 16500000 p21.2 333 | chr7 16500000 20900000 p21.1 334 | chr7 20900000 25500000 p15.3 335 | chr7 25500000 28000000 p15.2 336 | chr7 28000000 28800000 p15.1 337 | chr7 28800000 35000000 p14.3 338 | chr7 35000000 37200000 p14.2 339 | chr7 37200000 43300000 p14.1 340 | chr7 43300000 45400000 p13 341 | chr7 45400000 49000000 p12.3 342 | chr7 49000000 50500000 p12.2 343 | chr7 50500000 54000000 p12.1 344 | chr7 54000000 58000000 p11.2 345 | chr7 58000000 59900000 p11.1 346 | chr7 59900000 61700000 q11.1 347 | chr7 61700000 67000000 q11.21 348 | chr7 67000000 72200000 q11.22 349 | chr7 72200000 77500000 q11.23 350 | chr7 77500000 86400000 q21.11 351 | chr7 86400000 88200000 q21.12 352 | chr7 88200000 91100000 q21.13 353 | chr7 91100000 92800000 q21.2 354 | chr7 92800000 98000000 q21.3 355 | chr7 98000000 103800000 q22.1 356 | chr7 103800000 104500000 q22.2 357 | chr7 104500000 107400000 q22.3 358 | chr7 107400000 114600000 q31.1 359 | chr7 114600000 117400000 q31.2 360 | chr7 117400000 121100000 q31.31 361 | chr7 121100000 123800000 q31.32 362 | chr7 123800000 127100000 q31.33 363 | chr7 127100000 129200000 q32.1 364 | chr7 129200000 130400000 q32.2 365 | chr7 130400000 132600000 q32.3 366 | chr7 132600000 138200000 q33 367 | chr7 138200000 143100000 q34 368 | chr7 143100000 147900000 q35 369 | chr7 147900000 152600000 q36.1 370 | chr7 152600000 155100000 q36.2 371 | chr7 155100000 159138663 q36.3 372 | chr8 0 2200000 p23.3 373 | chr8 2200000 6200000 p23.2 374 | chr8 6200000 12700000 p23.1 375 | chr8 12700000 19000000 p22 376 | chr8 19000000 23300000 p21.3 377 | chr8 23300000 27400000 p21.2 378 | chr8 27400000 28800000 p21.1 379 | chr8 28800000 36500000 p12 380 | chr8 36500000 38300000 p11.23 381 | chr8 38300000 39700000 p11.22 382 | chr8 39700000 43100000 p11.21 383 | chr8 43100000 45600000 p11.1 384 | chr8 45600000 48100000 q11.1 385 | chr8 48100000 52200000 q11.21 386 | chr8 52200000 52600000 q11.22 387 | chr8 52600000 55500000 q11.23 388 | chr8 55500000 61600000 q12.1 389 | chr8 61600000 62200000 q12.2 390 | chr8 62200000 66000000 q12.3 391 | chr8 66000000 68000000 q13.1 392 | chr8 68000000 70500000 q13.2 393 | chr8 70500000 73900000 q13.3 394 | chr8 73900000 78300000 q21.11 395 | chr8 78300000 80100000 q21.12 396 | chr8 80100000 84600000 q21.13 397 | chr8 84600000 86900000 q21.2 398 | chr8 86900000 93300000 q21.3 399 | chr8 93300000 99000000 q22.1 400 | chr8 99000000 101600000 q22.2 401 | chr8 101600000 106200000 q22.3 402 | chr8 106200000 110500000 q23.1 403 | chr8 110500000 112100000 q23.2 404 | chr8 112100000 117700000 q23.3 405 | chr8 117700000 119200000 q24.11 406 | chr8 119200000 122500000 q24.12 407 | chr8 122500000 127300000 q24.13 408 | chr8 127300000 131500000 q24.21 409 | chr8 131500000 136400000 q24.22 410 | chr8 136400000 139900000 q24.23 411 | chr8 139900000 146364022 q24.3 412 | chr9 0 2200000 p24.3 413 | chr9 2200000 4600000 p24.2 414 | chr9 4600000 9000000 p24.1 415 | chr9 9000000 14200000 p23 416 | chr9 14200000 16600000 p22.3 417 | chr9 16600000 18500000 p22.2 418 | chr9 18500000 19900000 p22.1 419 | chr9 19900000 25600000 p21.3 420 | chr9 25600000 28000000 p21.2 421 | chr9 28000000 33200000 p21.1 422 | chr9 33200000 36300000 p13.3 423 | chr9 36300000 38400000 p13.2 424 | chr9 38400000 41000000 p13.1 425 | chr9 41000000 43600000 p12 426 | chr9 43600000 47300000 p11.2 427 | chr9 47300000 49000000 p11.1 428 | chr9 49000000 50700000 q11 429 | chr9 50700000 65900000 q12 430 | chr9 65900000 68700000 q13 431 | chr9 68700000 72200000 q21.11 432 | chr9 72200000 74000000 q21.12 433 | chr9 74000000 79200000 q21.13 434 | chr9 79200000 81100000 q21.2 435 | chr9 81100000 84100000 q21.31 436 | chr9 84100000 86900000 q21.32 437 | chr9 86900000 90400000 q21.33 438 | chr9 90400000 91800000 q22.1 439 | chr9 91800000 93900000 q22.2 440 | chr9 93900000 96600000 q22.31 441 | chr9 96600000 99300000 q22.32 442 | chr9 99300000 102600000 q22.33 443 | chr9 102600000 108200000 q31.1 444 | chr9 108200000 111300000 q31.2 445 | chr9 111300000 114900000 q31.3 446 | chr9 114900000 117700000 q32 447 | chr9 117700000 122500000 q33.1 448 | chr9 122500000 125800000 q33.2 449 | chr9 125800000 130300000 q33.3 450 | chr9 130300000 133500000 q34.11 451 | chr9 133500000 134000000 q34.12 452 | chr9 134000000 135900000 q34.13 453 | chr9 135900000 137400000 q34.2 454 | chr9 137400000 141213431 q34.3 455 | chr10 0 3000000 p15.3 456 | chr10 3000000 3800000 p15.2 457 | chr10 3800000 6600000 p15.1 458 | chr10 6600000 12200000 p14 459 | chr10 12200000 17300000 p13 460 | chr10 17300000 18600000 p12.33 461 | chr10 18600000 18700000 p12.32 462 | chr10 18700000 22600000 p12.31 463 | chr10 22600000 24600000 p12.2 464 | chr10 24600000 29600000 p12.1 465 | chr10 29600000 31300000 p11.23 466 | chr10 31300000 34400000 p11.22 467 | chr10 34400000 38000000 p11.21 468 | chr10 38000000 40200000 p11.1 469 | chr10 40200000 42300000 q11.1 470 | chr10 42300000 46100000 q11.21 471 | chr10 46100000 49900000 q11.22 472 | chr10 49900000 52900000 q11.23 473 | chr10 52900000 61200000 q21.1 474 | chr10 61200000 64500000 q21.2 475 | chr10 64500000 70600000 q21.3 476 | chr10 70600000 74900000 q22.1 477 | chr10 74900000 77700000 q22.2 478 | chr10 77700000 82000000 q22.3 479 | chr10 82000000 87900000 q23.1 480 | chr10 87900000 89500000 q23.2 481 | chr10 89500000 92900000 q23.31 482 | chr10 92900000 94100000 q23.32 483 | chr10 94100000 97000000 q23.33 484 | chr10 97000000 99300000 q24.1 485 | chr10 99300000 101900000 q24.2 486 | chr10 101900000 103000000 q24.31 487 | chr10 103000000 104900000 q24.32 488 | chr10 104900000 105800000 q24.33 489 | chr10 105800000 111900000 q25.1 490 | chr10 111900000 114900000 q25.2 491 | chr10 114900000 119100000 q25.3 492 | chr10 119100000 121700000 q26.11 493 | chr10 121700000 123100000 q26.12 494 | chr10 123100000 127500000 q26.13 495 | chr10 127500000 130600000 q26.2 496 | chr10 130600000 135534747 q26.3 497 | chr11 0 2800000 p15.5 498 | chr11 2800000 10700000 p15.4 499 | chr11 10700000 12700000 p15.3 500 | chr11 12700000 16200000 p15.2 501 | chr11 16200000 21700000 p15.1 502 | chr11 21700000 26100000 p14.3 503 | chr11 26100000 27200000 p14.2 504 | chr11 27200000 31000000 p14.1 505 | chr11 31000000 36400000 p13 506 | chr11 36400000 43500000 p12 507 | chr11 43500000 48800000 p11.2 508 | chr11 48800000 51600000 p11.12 509 | chr11 51600000 53700000 p11.11 510 | chr11 53700000 55700000 q11 511 | chr11 55700000 59900000 q12.1 512 | chr11 59900000 61700000 q12.2 513 | chr11 61700000 63400000 q12.3 514 | chr11 63400000 65900000 q13.1 515 | chr11 65900000 68400000 q13.2 516 | chr11 68400000 70400000 q13.3 517 | chr11 70400000 75200000 q13.4 518 | chr11 75200000 77100000 q13.5 519 | chr11 77100000 85600000 q14.1 520 | chr11 85600000 88300000 q14.2 521 | chr11 88300000 92800000 q14.3 522 | chr11 92800000 97200000 q21 523 | chr11 97200000 102100000 q22.1 524 | chr11 102100000 102900000 q22.2 525 | chr11 102900000 110400000 q22.3 526 | chr11 110400000 112500000 q23.1 527 | chr11 112500000 114500000 q23.2 528 | chr11 114500000 121200000 q23.3 529 | chr11 121200000 123900000 q24.1 530 | chr11 123900000 127800000 q24.2 531 | chr11 127800000 130800000 q24.3 532 | chr11 130800000 135006516 q25 533 | chr12 0 3300000 p13.33 534 | chr12 3300000 5400000 p13.32 535 | chr12 5400000 10100000 p13.31 536 | chr12 10100000 12800000 p13.2 537 | chr12 12800000 14800000 p13.1 538 | chr12 14800000 20000000 p12.3 539 | chr12 20000000 21300000 p12.2 540 | chr12 21300000 26500000 p12.1 541 | chr12 26500000 27800000 p11.23 542 | chr12 27800000 30700000 p11.22 543 | chr12 30700000 33300000 p11.21 544 | chr12 33300000 35800000 p11.1 545 | chr12 35800000 38200000 q11 546 | chr12 38200000 46400000 q12 547 | chr12 46400000 49100000 q13.11 548 | chr12 49100000 51500000 q13.12 549 | chr12 51500000 54900000 q13.13 550 | chr12 54900000 56600000 q13.2 551 | chr12 56600000 58100000 q13.3 552 | chr12 58100000 63100000 q14.1 553 | chr12 63100000 65100000 q14.2 554 | chr12 65100000 67700000 q14.3 555 | chr12 67700000 71500000 q15 556 | chr12 71500000 75700000 q21.1 557 | chr12 75700000 80300000 q21.2 558 | chr12 80300000 86700000 q21.31 559 | chr12 86700000 89000000 q21.32 560 | chr12 89000000 92600000 q21.33 561 | chr12 92600000 96200000 q22 562 | chr12 96200000 101600000 q23.1 563 | chr12 101600000 103800000 q23.2 564 | chr12 103800000 109000000 q23.3 565 | chr12 109000000 111700000 q24.11 566 | chr12 111700000 112300000 q24.12 567 | chr12 112300000 114300000 q24.13 568 | chr12 114300000 116800000 q24.21 569 | chr12 116800000 118100000 q24.22 570 | chr12 118100000 120700000 q24.23 571 | chr12 120700000 125900000 q24.31 572 | chr12 125900000 129300000 q24.32 573 | chr12 129300000 133851895 q24.33 574 | chr13 0 4500000 p13 575 | chr13 4500000 10000000 p12 576 | chr13 10000000 16300000 p11.2 577 | chr13 16300000 17900000 p11.1 578 | chr13 17900000 19500000 q11 579 | chr13 19500000 23300000 q12.11 580 | chr13 23300000 25500000 q12.12 581 | chr13 25500000 27800000 q12.13 582 | chr13 27800000 28900000 q12.2 583 | chr13 28900000 32200000 q12.3 584 | chr13 32200000 34000000 q13.1 585 | chr13 34000000 35500000 q13.2 586 | chr13 35500000 40100000 q13.3 587 | chr13 40100000 45200000 q14.11 588 | chr13 45200000 45800000 q14.12 589 | chr13 45800000 47300000 q14.13 590 | chr13 47300000 50900000 q14.2 591 | chr13 50900000 55300000 q14.3 592 | chr13 55300000 59600000 q21.1 593 | chr13 59600000 62300000 q21.2 594 | chr13 62300000 65700000 q21.31 595 | chr13 65700000 68600000 q21.32 596 | chr13 68600000 73300000 q21.33 597 | chr13 73300000 75400000 q22.1 598 | chr13 75400000 77200000 q22.2 599 | chr13 77200000 79000000 q22.3 600 | chr13 79000000 87700000 q31.1 601 | chr13 87700000 90000000 q31.2 602 | chr13 90000000 95000000 q31.3 603 | chr13 95000000 98200000 q32.1 604 | chr13 98200000 99300000 q32.2 605 | chr13 99300000 101700000 q32.3 606 | chr13 101700000 104800000 q33.1 607 | chr13 104800000 107000000 q33.2 608 | chr13 107000000 110300000 q33.3 609 | chr13 110300000 115169878 q34 610 | chr14 0 3700000 p13 611 | chr14 3700000 8100000 p12 612 | chr14 8100000 16100000 p11.2 613 | chr14 16100000 17600000 p11.1 614 | chr14 17600000 19100000 q11.1 615 | chr14 19100000 24600000 q11.2 616 | chr14 24600000 33300000 q12 617 | chr14 33300000 35300000 q13.1 618 | chr14 35300000 36600000 q13.2 619 | chr14 36600000 37800000 q13.3 620 | chr14 37800000 43500000 q21.1 621 | chr14 43500000 47200000 q21.2 622 | chr14 47200000 50900000 q21.3 623 | chr14 50900000 54100000 q22.1 624 | chr14 54100000 55500000 q22.2 625 | chr14 55500000 58100000 q22.3 626 | chr14 58100000 62100000 q23.1 627 | chr14 62100000 64800000 q23.2 628 | chr14 64800000 67900000 q23.3 629 | chr14 67900000 70200000 q24.1 630 | chr14 70200000 73800000 q24.2 631 | chr14 73800000 79300000 q24.3 632 | chr14 79300000 83600000 q31.1 633 | chr14 83600000 84900000 q31.2 634 | chr14 84900000 89800000 q31.3 635 | chr14 89800000 91900000 q32.11 636 | chr14 91900000 94700000 q32.12 637 | chr14 94700000 96300000 q32.13 638 | chr14 96300000 101400000 q32.2 639 | chr14 101400000 103200000 q32.31 640 | chr14 103200000 104000000 q32.32 641 | chr14 104000000 107349540 q32.33 642 | chr15 0 3900000 p13 643 | chr15 3900000 8700000 p12 644 | chr15 8700000 15800000 p11.2 645 | chr15 15800000 19000000 p11.1 646 | chr15 19000000 20700000 q11.1 647 | chr15 20700000 25700000 q11.2 648 | chr15 25700000 28100000 q12 649 | chr15 28100000 30300000 q13.1 650 | chr15 30300000 31200000 q13.2 651 | chr15 31200000 33600000 q13.3 652 | chr15 33600000 40100000 q14 653 | chr15 40100000 42800000 q15.1 654 | chr15 42800000 43600000 q15.2 655 | chr15 43600000 44800000 q15.3 656 | chr15 44800000 49500000 q21.1 657 | chr15 49500000 52900000 q21.2 658 | chr15 52900000 59100000 q21.3 659 | chr15 59100000 59300000 q22.1 660 | chr15 59300000 63700000 q22.2 661 | chr15 63700000 67200000 q22.31 662 | chr15 67200000 67300000 q22.32 663 | chr15 67300000 67500000 q22.33 664 | chr15 67500000 72700000 q23 665 | chr15 72700000 75200000 q24.1 666 | chr15 75200000 76600000 q24.2 667 | chr15 76600000 78300000 q24.3 668 | chr15 78300000 81700000 q25.1 669 | chr15 81700000 85200000 q25.2 670 | chr15 85200000 89100000 q25.3 671 | chr15 89100000 94300000 q26.1 672 | chr15 94300000 98500000 q26.2 673 | chr15 98500000 102531392 q26.3 674 | chr16 0 7900000 p13.3 675 | chr16 7900000 10500000 p13.2 676 | chr16 10500000 12600000 p13.13 677 | chr16 12600000 14800000 p13.12 678 | chr16 14800000 16800000 p13.11 679 | chr16 16800000 21200000 p12.3 680 | chr16 21200000 24200000 p12.2 681 | chr16 24200000 28100000 p12.1 682 | chr16 28100000 34600000 p11.2 683 | chr16 34600000 36600000 p11.1 684 | chr16 36600000 38600000 q11.1 685 | chr16 38600000 47000000 q11.2 686 | chr16 47000000 52600000 q12.1 687 | chr16 52600000 56700000 q12.2 688 | chr16 56700000 57400000 q13 689 | chr16 57400000 66700000 q21 690 | chr16 66700000 70800000 q22.1 691 | chr16 70800000 72900000 q22.2 692 | chr16 72900000 74100000 q22.3 693 | chr16 74100000 79200000 q23.1 694 | chr16 79200000 81700000 q23.2 695 | chr16 81700000 84200000 q23.3 696 | chr16 84200000 87100000 q24.1 697 | chr16 87100000 88700000 q24.2 698 | chr16 88700000 90354753 q24.3 699 | chr17 0 3300000 p13.3 700 | chr17 3300000 6500000 p13.2 701 | chr17 6500000 10700000 p13.1 702 | chr17 10700000 16000000 p12 703 | chr17 16000000 22200000 p11.2 704 | chr17 22200000 24000000 p11.1 705 | chr17 24000000 25800000 q11.1 706 | chr17 25800000 31800000 q11.2 707 | chr17 31800000 38100000 q12 708 | chr17 38100000 38400000 q21.1 709 | chr17 38400000 40900000 q21.2 710 | chr17 40900000 44900000 q21.31 711 | chr17 44900000 47400000 q21.32 712 | chr17 47400000 50200000 q21.33 713 | chr17 50200000 57600000 q22 714 | chr17 57600000 58300000 q23.1 715 | chr17 58300000 61100000 q23.2 716 | chr17 61100000 62600000 q23.3 717 | chr17 62600000 64200000 q24.1 718 | chr17 64200000 67100000 q24.2 719 | chr17 67100000 70900000 q24.3 720 | chr17 70900000 74800000 q25.1 721 | chr17 74800000 75300000 q25.2 722 | chr17 75300000 81195210 q25.3 723 | chr18 0 2900000 p11.32 724 | chr18 2900000 7100000 p11.31 725 | chr18 7100000 8500000 p11.23 726 | chr18 8500000 10900000 p11.22 727 | chr18 10900000 15400000 p11.21 728 | chr18 15400000 17200000 p11.1 729 | chr18 17200000 19000000 q11.1 730 | chr18 19000000 25000000 q11.2 731 | chr18 25000000 32700000 q12.1 732 | chr18 32700000 37200000 q12.2 733 | chr18 37200000 43500000 q12.3 734 | chr18 43500000 48200000 q21.1 735 | chr18 48200000 53800000 q21.2 736 | chr18 53800000 56200000 q21.31 737 | chr18 56200000 59000000 q21.32 738 | chr18 59000000 61600000 q21.33 739 | chr18 61600000 66800000 q22.1 740 | chr18 66800000 68700000 q22.2 741 | chr18 68700000 73100000 q22.3 742 | chr18 73100000 78077248 q23 743 | chr19 0 6900000 p13.3 744 | chr19 6900000 13900000 p13.2 745 | chr19 13900000 14000000 p13.13 746 | chr19 14000000 16300000 p13.12 747 | chr19 16300000 20000000 p13.11 748 | chr19 20000000 24400000 p12 749 | chr19 24400000 26500000 p11 750 | chr19 26500000 28600000 q11 751 | chr19 28600000 32400000 q12 752 | chr19 32400000 35500000 q13.11 753 | chr19 35500000 38300000 q13.12 754 | chr19 38300000 38700000 q13.13 755 | chr19 38700000 43400000 q13.2 756 | chr19 43400000 45200000 q13.31 757 | chr19 45200000 48000000 q13.32 758 | chr19 48000000 51400000 q13.33 759 | chr19 51400000 53600000 q13.41 760 | chr19 53600000 56300000 q13.42 761 | chr19 56300000 59128983 q13.43 762 | chr20 0 5100000 p13 763 | chr20 5100000 9200000 p12.3 764 | chr20 9200000 12100000 p12.2 765 | chr20 12100000 17900000 p12.1 766 | chr20 17900000 21300000 p11.23 767 | chr20 21300000 22300000 p11.22 768 | chr20 22300000 25600000 p11.21 769 | chr20 25600000 27500000 p11.1 770 | chr20 27500000 29400000 q11.1 771 | chr20 29400000 32100000 q11.21 772 | chr20 32100000 34400000 q11.22 773 | chr20 34400000 37600000 q11.23 774 | chr20 37600000 41700000 q12 775 | chr20 41700000 42100000 q13.11 776 | chr20 42100000 46400000 q13.12 777 | chr20 46400000 49800000 q13.13 778 | chr20 49800000 55000000 q13.2 779 | chr20 55000000 56500000 q13.31 780 | chr20 56500000 58400000 q13.32 781 | chr20 58400000 63025520 q13.33 782 | chr21 0 2800000 p13 783 | chr21 2800000 6800000 p12 784 | chr21 6800000 10900000 p11.2 785 | chr21 10900000 13200000 p11.1 786 | chr21 13200000 14300000 q11.1 787 | chr21 14300000 16400000 q11.2 788 | chr21 16400000 24000000 q21.1 789 | chr21 24000000 26800000 q21.2 790 | chr21 26800000 31500000 q21.3 791 | chr21 31500000 35800000 q22.11 792 | chr21 35800000 37800000 q22.12 793 | chr21 37800000 39700000 q22.13 794 | chr21 39700000 42600000 q22.2 795 | chr21 42600000 48129895 q22.3 796 | chr22 0 3800000 p13 797 | chr22 3800000 8300000 p12 798 | chr22 8300000 12200000 p11.2 799 | chr22 12200000 14700000 p11.1 800 | chr22 14700000 17900000 q11.1 801 | chr22 17900000 22200000 q11.21 802 | chr22 22200000 23500000 q11.22 803 | chr22 23500000 25900000 q11.23 804 | chr22 25900000 29600000 q12.1 805 | chr22 29600000 32200000 q12.2 806 | chr22 32200000 37600000 q12.3 807 | chr22 37600000 41000000 q13.1 808 | chr22 41000000 44200000 q13.2 809 | chr22 44200000 48400000 q13.31 810 | chr22 48400000 49400000 q13.32 811 | chr22 49400000 51304566 q13.33 812 | chr23 0 4300000 p22.33 813 | chr23 4300000 6000000 p22.32 814 | chr23 6000000 9500000 p22.31 815 | chr23 9500000 17100000 p22.2 816 | chr23 17100000 19300000 p22.13 817 | chr23 19300000 21900000 p22.12 818 | chr23 21900000 24900000 p22.11 819 | chr23 24900000 29300000 p21.3 820 | chr23 29300000 31500000 p21.2 821 | chr23 31500000 37600000 p21.1 822 | chr23 37600000 42400000 p11.4 823 | chr23 42400000 46400000 p11.3 824 | chr23 46400000 49800000 p11.23 825 | chr23 49800000 54800000 p11.22 826 | chr23 54800000 58100000 p11.21 827 | chr23 58100000 60600000 p11.1 828 | chr23 60600000 63000000 q11.1 829 | chr23 63000000 64600000 q11.2 830 | chr23 64600000 67800000 q12 831 | chr23 67800000 71800000 q13.1 832 | chr23 71800000 73900000 q13.2 833 | chr23 73900000 76000000 q13.3 834 | chr23 76000000 84600000 q21.1 835 | chr23 84600000 86200000 q21.2 836 | chr23 86200000 91800000 q21.31 837 | chr23 91800000 93500000 q21.32 838 | chr23 93500000 98300000 q21.33 839 | chr23 98300000 102600000 q22.1 840 | chr23 102600000 103700000 q22.2 841 | chr23 103700000 108700000 q22.3 842 | chr23 108700000 116500000 q23 843 | chr23 116500000 120900000 q24 844 | chr23 120900000 128700000 q25 845 | chr23 128700000 130400000 q26.1 846 | chr23 130400000 133600000 q26.2 847 | chr23 133600000 138000000 q26.3 848 | chr23 138000000 140300000 q27.1 849 | chr23 140300000 142100000 q27.2 850 | chr23 142100000 147100000 q27.3 851 | chr23 147100000 155270560 q28 852 | -------------------------------------------------------------------------------- /hg38.band.bed: -------------------------------------------------------------------------------- 1 | chr1 0 2300000 p36.33 2 | chr1 2300000 5300000 p36.32 3 | chr1 5300000 7100000 p36.31 4 | chr1 7100000 9100000 p36.23 5 | chr1 9100000 12500000 p36.22 6 | chr1 12500000 15900000 p36.21 7 | chr1 15900000 20100000 p36.13 8 | chr1 20100000 23600000 p36.12 9 | chr1 23600000 27600000 p36.11 10 | chr1 27600000 29900000 p35.3 11 | chr1 29900000 32300000 p35.2 12 | chr1 32300000 34300000 p35.1 13 | chr1 34300000 39600000 p34.3 14 | chr1 39600000 43700000 p34.2 15 | chr1 43700000 46300000 p34.1 16 | chr1 46300000 50200000 p33 17 | chr1 50200000 55600000 p32.3 18 | chr1 55600000 58500000 p32.2 19 | chr1 58500000 60800000 p32.1 20 | chr1 60800000 68500000 p31.3 21 | chr1 68500000 69300000 p31.2 22 | chr1 69300000 84400000 p31.1 23 | chr1 84400000 87900000 p22.3 24 | chr1 87900000 91500000 p22.2 25 | chr1 91500000 94300000 p22.1 26 | chr1 94300000 99300000 p21.3 27 | chr1 99300000 101800000 p21.2 28 | chr1 101800000 106700000 p21.1 29 | chr1 106700000 111200000 p13.3 30 | chr1 111200000 115500000 p13.2 31 | chr1 115500000 117200000 p13.1 32 | chr1 117200000 120400000 p12 33 | chr1 120400000 121700000 p11.2 34 | chr1 121700000 123400000 p11.1 35 | chr1 123400000 125100000 q11 36 | chr1 125100000 143200000 q12 37 | chr1 143200000 147500000 q21.1 38 | chr1 147500000 150600000 q21.2 39 | chr1 150600000 155100000 q21.3 40 | chr1 155100000 156600000 q22 41 | chr1 156600000 159100000 q23.1 42 | chr1 159100000 160500000 q23.2 43 | chr1 160500000 165500000 q23.3 44 | chr1 165500000 167200000 q24.1 45 | chr1 167200000 170900000 q24.2 46 | chr1 170900000 173000000 q24.3 47 | chr1 173000000 176100000 q25.1 48 | chr1 176100000 180300000 q25.2 49 | chr1 180300000 185800000 q25.3 50 | chr1 185800000 190800000 q31.1 51 | chr1 190800000 193800000 q31.2 52 | chr1 193800000 198700000 q31.3 53 | chr1 198700000 207100000 q32.1 54 | chr1 207100000 211300000 q32.2 55 | chr1 211300000 214400000 q32.3 56 | chr1 214400000 223900000 q41 57 | chr1 223900000 224400000 q42.11 58 | chr1 224400000 226800000 q42.12 59 | chr1 226800000 230500000 q42.13 60 | chr1 230500000 234600000 q42.2 61 | chr1 234600000 236400000 q42.3 62 | chr1 236400000 243500000 q43 63 | chr1 243500000 248956422 q44 64 | chr2 0 4400000 p25.3 65 | chr2 4400000 6900000 p25.2 66 | chr2 6900000 12000000 p25.1 67 | chr2 12000000 16500000 p24.3 68 | chr2 16500000 19000000 p24.2 69 | chr2 19000000 23800000 p24.1 70 | chr2 23800000 27700000 p23.3 71 | chr2 27700000 29800000 p23.2 72 | chr2 29800000 31800000 p23.1 73 | chr2 31800000 36300000 p22.3 74 | chr2 36300000 38300000 p22.2 75 | chr2 38300000 41500000 p22.1 76 | chr2 41500000 47500000 p21 77 | chr2 47500000 52600000 p16.3 78 | chr2 52600000 54700000 p16.2 79 | chr2 54700000 61000000 p16.1 80 | chr2 61000000 63900000 p15 81 | chr2 63900000 68400000 p14 82 | chr2 68400000 71300000 p13.3 83 | chr2 71300000 73300000 p13.2 84 | chr2 73300000 74800000 p13.1 85 | chr2 74800000 83100000 p12 86 | chr2 83100000 91800000 p11.2 87 | chr2 91800000 93900000 p11.1 88 | chr2 93900000 96000000 q11.1 89 | chr2 96000000 102100000 q11.2 90 | chr2 102100000 105300000 q12.1 91 | chr2 105300000 106700000 q12.2 92 | chr2 106700000 108700000 q12.3 93 | chr2 108700000 112200000 q13 94 | chr2 112200000 118100000 q14.1 95 | chr2 118100000 121600000 q14.2 96 | chr2 121600000 129100000 q14.3 97 | chr2 129100000 131700000 q21.1 98 | chr2 131700000 134300000 q21.2 99 | chr2 134300000 136100000 q21.3 100 | chr2 136100000 141500000 q22.1 101 | chr2 141500000 143400000 q22.2 102 | chr2 143400000 147900000 q22.3 103 | chr2 147900000 149000000 q23.1 104 | chr2 149000000 149600000 q23.2 105 | chr2 149600000 154000000 q23.3 106 | chr2 154000000 158900000 q24.1 107 | chr2 158900000 162900000 q24.2 108 | chr2 162900000 168900000 q24.3 109 | chr2 168900000 177100000 q31.1 110 | chr2 177100000 179700000 q31.2 111 | chr2 179700000 182100000 q31.3 112 | chr2 182100000 188500000 q32.1 113 | chr2 188500000 191100000 q32.2 114 | chr2 191100000 196600000 q32.3 115 | chr2 196600000 202500000 q33.1 116 | chr2 202500000 204100000 q33.2 117 | chr2 204100000 208200000 q33.3 118 | chr2 208200000 214500000 q34 119 | chr2 214500000 220700000 q35 120 | chr2 220700000 224300000 q36.1 121 | chr2 224300000 225200000 q36.2 122 | chr2 225200000 230100000 q36.3 123 | chr2 230100000 234700000 q37.1 124 | chr2 234700000 236400000 q37.2 125 | chr2 236400000 242193529 q37.3 126 | chr3 0 2800000 p26.3 127 | chr3 2800000 4000000 p26.2 128 | chr3 4000000 8100000 p26.1 129 | chr3 8100000 11600000 p25.3 130 | chr3 11600000 13200000 p25.2 131 | chr3 13200000 16300000 p25.1 132 | chr3 16300000 23800000 p24.3 133 | chr3 23800000 26300000 p24.2 134 | chr3 26300000 30800000 p24.1 135 | chr3 30800000 32000000 p23 136 | chr3 32000000 36400000 p22.3 137 | chr3 36400000 39300000 p22.2 138 | chr3 39300000 43600000 p22.1 139 | chr3 43600000 44100000 p21.33 140 | chr3 44100000 44200000 p21.32 141 | chr3 44200000 50600000 p21.31 142 | chr3 50600000 52300000 p21.2 143 | chr3 52300000 54400000 p21.1 144 | chr3 54400000 58600000 p14.3 145 | chr3 58600000 63800000 p14.2 146 | chr3 63800000 69700000 p14.1 147 | chr3 69700000 74100000 p13 148 | chr3 74100000 79800000 p12.3 149 | chr3 79800000 83500000 p12.2 150 | chr3 83500000 87100000 p12.1 151 | chr3 87100000 87800000 p11.2 152 | chr3 87800000 90900000 p11.1 153 | chr3 90900000 94000000 q11.1 154 | chr3 94000000 98600000 q11.2 155 | chr3 98600000 100300000 q12.1 156 | chr3 100300000 101200000 q12.2 157 | chr3 101200000 103100000 q12.3 158 | chr3 103100000 106500000 q13.11 159 | chr3 106500000 108200000 q13.12 160 | chr3 108200000 111600000 q13.13 161 | chr3 111600000 113700000 q13.2 162 | chr3 113700000 117600000 q13.31 163 | chr3 117600000 119300000 q13.32 164 | chr3 119300000 122200000 q13.33 165 | chr3 122200000 124100000 q21.1 166 | chr3 124100000 126100000 q21.2 167 | chr3 126100000 129500000 q21.3 168 | chr3 129500000 134000000 q22.1 169 | chr3 134000000 136000000 q22.2 170 | chr3 136000000 139000000 q22.3 171 | chr3 139000000 143100000 q23 172 | chr3 143100000 149200000 q24 173 | chr3 149200000 152300000 q25.1 174 | chr3 152300000 155300000 q25.2 175 | chr3 155300000 157300000 q25.31 176 | chr3 157300000 159300000 q25.32 177 | chr3 159300000 161000000 q25.33 178 | chr3 161000000 167900000 q26.1 179 | chr3 167900000 171200000 q26.2 180 | chr3 171200000 176000000 q26.31 181 | chr3 176000000 179300000 q26.32 182 | chr3 179300000 183000000 q26.33 183 | chr3 183000000 184800000 q27.1 184 | chr3 184800000 186300000 q27.2 185 | chr3 186300000 188200000 q27.3 186 | chr3 188200000 192600000 q28 187 | chr3 192600000 198295559 q29 188 | chr4 0 4500000 p16.3 189 | chr4 4500000 6000000 p16.2 190 | chr4 6000000 11300000 p16.1 191 | chr4 11300000 15000000 p15.33 192 | chr4 15000000 17700000 p15.32 193 | chr4 17700000 21300000 p15.31 194 | chr4 21300000 27700000 p15.2 195 | chr4 27700000 35800000 p15.1 196 | chr4 35800000 41200000 p14 197 | chr4 41200000 44600000 p13 198 | chr4 44600000 48200000 p12 199 | chr4 48200000 50000000 p11 200 | chr4 50000000 51800000 q11 201 | chr4 51800000 58500000 q12 202 | chr4 58500000 65500000 q13.1 203 | chr4 65500000 69400000 q13.2 204 | chr4 69400000 75300000 q13.3 205 | chr4 75300000 78000000 q21.1 206 | chr4 78000000 81500000 q21.21 207 | chr4 81500000 83200000 q21.22 208 | chr4 83200000 86000000 q21.23 209 | chr4 86000000 87100000 q21.3 210 | chr4 87100000 92800000 q22.1 211 | chr4 92800000 94200000 q22.2 212 | chr4 94200000 97900000 q22.3 213 | chr4 97900000 100100000 q23 214 | chr4 100100000 106700000 q24 215 | chr4 106700000 113200000 q25 216 | chr4 113200000 119900000 q26 217 | chr4 119900000 122800000 q27 218 | chr4 122800000 127900000 q28.1 219 | chr4 127900000 130100000 q28.2 220 | chr4 130100000 138500000 q28.3 221 | chr4 138500000 140600000 q31.1 222 | chr4 140600000 145900000 q31.21 223 | chr4 145900000 147500000 q31.22 224 | chr4 147500000 150200000 q31.23 225 | chr4 150200000 154600000 q31.3 226 | chr4 154600000 160800000 q32.1 227 | chr4 160800000 163600000 q32.2 228 | chr4 163600000 169200000 q32.3 229 | chr4 169200000 171000000 q33 230 | chr4 171000000 175400000 q34.1 231 | chr4 175400000 176600000 q34.2 232 | chr4 176600000 182300000 q34.3 233 | chr4 182300000 186200000 q35.1 234 | chr4 186200000 190214555 q35.2 235 | chr5 0 4400000 p15.33 236 | chr5 4400000 6300000 p15.32 237 | chr5 6300000 9900000 p15.31 238 | chr5 9900000 15000000 p15.2 239 | chr5 15000000 18400000 p15.1 240 | chr5 18400000 23300000 p14.3 241 | chr5 23300000 24600000 p14.2 242 | chr5 24600000 28900000 p14.1 243 | chr5 28900000 33800000 p13.3 244 | chr5 33800000 38400000 p13.2 245 | chr5 38400000 42500000 p13.1 246 | chr5 42500000 46100000 p12 247 | chr5 46100000 48800000 p11 248 | chr5 48800000 51400000 q11.1 249 | chr5 51400000 59600000 q11.2 250 | chr5 59600000 63600000 q12.1 251 | chr5 63600000 63900000 q12.2 252 | chr5 63900000 67400000 q12.3 253 | chr5 67400000 69100000 q13.1 254 | chr5 69100000 74000000 q13.2 255 | chr5 74000000 77600000 q13.3 256 | chr5 77600000 82100000 q14.1 257 | chr5 82100000 83500000 q14.2 258 | chr5 83500000 93000000 q14.3 259 | chr5 93000000 98900000 q15 260 | chr5 98900000 103400000 q21.1 261 | chr5 103400000 105100000 q21.2 262 | chr5 105100000 110200000 q21.3 263 | chr5 110200000 112200000 q22.1 264 | chr5 112200000 113800000 q22.2 265 | chr5 113800000 115900000 q22.3 266 | chr5 115900000 122100000 q23.1 267 | chr5 122100000 127900000 q23.2 268 | chr5 127900000 131200000 q23.3 269 | chr5 131200000 136900000 q31.1 270 | chr5 136900000 140100000 q31.2 271 | chr5 140100000 145100000 q31.3 272 | chr5 145100000 150400000 q32 273 | chr5 150400000 153300000 q33.1 274 | chr5 153300000 156300000 q33.2 275 | chr5 156300000 160500000 q33.3 276 | chr5 160500000 169000000 q34 277 | chr5 169000000 173300000 q35.1 278 | chr5 173300000 177100000 q35.2 279 | chr5 177100000 181538259 q35.3 280 | chr6 0 2300000 p25.3 281 | chr6 2300000 4200000 p25.2 282 | chr6 4200000 7100000 p25.1 283 | chr6 7100000 10600000 p24.3 284 | chr6 10600000 11600000 p24.2 285 | chr6 11600000 13400000 p24.1 286 | chr6 13400000 15200000 p23 287 | chr6 15200000 25200000 p22.3 288 | chr6 25200000 27100000 p22.2 289 | chr6 27100000 30500000 p22.1 290 | chr6 30500000 32100000 p21.33 291 | chr6 32100000 33500000 p21.32 292 | chr6 33500000 36600000 p21.31 293 | chr6 36600000 40500000 p21.2 294 | chr6 40500000 46200000 p21.1 295 | chr6 46200000 51800000 p12.3 296 | chr6 51800000 53000000 p12.2 297 | chr6 53000000 57200000 p12.1 298 | chr6 57200000 58500000 p11.2 299 | chr6 58500000 59800000 p11.1 300 | chr6 59800000 62600000 q11.1 301 | chr6 62600000 62700000 q11.2 302 | chr6 62700000 69200000 q12 303 | chr6 69200000 75200000 q13 304 | chr6 75200000 83200000 q14.1 305 | chr6 83200000 84200000 q14.2 306 | chr6 84200000 87300000 q14.3 307 | chr6 87300000 92500000 q15 308 | chr6 92500000 98900000 q16.1 309 | chr6 98900000 100000000 q16.2 310 | chr6 100000000 105000000 q16.3 311 | chr6 105000000 114200000 q21 312 | chr6 114200000 117900000 q22.1 313 | chr6 117900000 118100000 q22.2 314 | chr6 118100000 125800000 q22.31 315 | chr6 125800000 126800000 q22.32 316 | chr6 126800000 130000000 q22.33 317 | chr6 130000000 130900000 q23.1 318 | chr6 130900000 134700000 q23.2 319 | chr6 134700000 138300000 q23.3 320 | chr6 138300000 142200000 q24.1 321 | chr6 142200000 145100000 q24.2 322 | chr6 145100000 148500000 q24.3 323 | chr6 148500000 152100000 q25.1 324 | chr6 152100000 155200000 q25.2 325 | chr6 155200000 160600000 q25.3 326 | chr6 160600000 164100000 q26 327 | chr6 164100000 170805979 q27 328 | chr7 0 2800000 p22.3 329 | chr7 2800000 4500000 p22.2 330 | chr7 4500000 7200000 p22.1 331 | chr7 7200000 13700000 p21.3 332 | chr7 13700000 16500000 p21.2 333 | chr7 16500000 20900000 p21.1 334 | chr7 20900000 25500000 p15.3 335 | chr7 25500000 27900000 p15.2 336 | chr7 27900000 28800000 p15.1 337 | chr7 28800000 34900000 p14.3 338 | chr7 34900000 37100000 p14.2 339 | chr7 37100000 43300000 p14.1 340 | chr7 43300000 45400000 p13 341 | chr7 45400000 49000000 p12.3 342 | chr7 49000000 50500000 p12.2 343 | chr7 50500000 53900000 p12.1 344 | chr7 53900000 58100000 p11.2 345 | chr7 58100000 60100000 p11.1 346 | chr7 60100000 62100000 q11.1 347 | chr7 62100000 67500000 q11.21 348 | chr7 67500000 72700000 q11.22 349 | chr7 72700000 77900000 q11.23 350 | chr7 77900000 86700000 q21.11 351 | chr7 86700000 88500000 q21.12 352 | chr7 88500000 91500000 q21.13 353 | chr7 91500000 93300000 q21.2 354 | chr7 93300000 98400000 q21.3 355 | chr7 98400000 104200000 q22.1 356 | chr7 104200000 104900000 q22.2 357 | chr7 104900000 107800000 q22.3 358 | chr7 107800000 115000000 q31.1 359 | chr7 115000000 117700000 q31.2 360 | chr7 117700000 121400000 q31.31 361 | chr7 121400000 124100000 q31.32 362 | chr7 124100000 127500000 q31.33 363 | chr7 127500000 129600000 q32.1 364 | chr7 129600000 130800000 q32.2 365 | chr7 130800000 132900000 q32.3 366 | chr7 132900000 138500000 q33 367 | chr7 138500000 143400000 q34 368 | chr7 143400000 148200000 q35 369 | chr7 148200000 152800000 q36.1 370 | chr7 152800000 155200000 q36.2 371 | chr7 155200000 159345973 q36.3 372 | chr8 0 2300000 p23.3 373 | chr8 2300000 6300000 p23.2 374 | chr8 6300000 12800000 p23.1 375 | chr8 12800000 19200000 p22 376 | chr8 19200000 23500000 p21.3 377 | chr8 23500000 27500000 p21.2 378 | chr8 27500000 29000000 p21.1 379 | chr8 29000000 36700000 p12 380 | chr8 36700000 38500000 p11.23 381 | chr8 38500000 39900000 p11.22 382 | chr8 39900000 43200000 p11.21 383 | chr8 43200000 45200000 p11.1 384 | chr8 45200000 47200000 q11.1 385 | chr8 47200000 51300000 q11.21 386 | chr8 51300000 51700000 q11.22 387 | chr8 51700000 54600000 q11.23 388 | chr8 54600000 60600000 q12.1 389 | chr8 60600000 61300000 q12.2 390 | chr8 61300000 65100000 q12.3 391 | chr8 65100000 67100000 q13.1 392 | chr8 67100000 69600000 q13.2 393 | chr8 69600000 72000000 q13.3 394 | chr8 72000000 74600000 q21.11 395 | chr8 74600000 74700000 q21.12 396 | chr8 74700000 83500000 q21.13 397 | chr8 83500000 85900000 q21.2 398 | chr8 85900000 92300000 q21.3 399 | chr8 92300000 97900000 q22.1 400 | chr8 97900000 100500000 q22.2 401 | chr8 100500000 105100000 q22.3 402 | chr8 105100000 109500000 q23.1 403 | chr8 109500000 111100000 q23.2 404 | chr8 111100000 116700000 q23.3 405 | chr8 116700000 118300000 q24.11 406 | chr8 118300000 121500000 q24.12 407 | chr8 121500000 126300000 q24.13 408 | chr8 126300000 130400000 q24.21 409 | chr8 130400000 135400000 q24.22 410 | chr8 135400000 138900000 q24.23 411 | chr8 138900000 145138636 q24.3 412 | chr9 0 2200000 p24.3 413 | chr9 2200000 4600000 p24.2 414 | chr9 4600000 9000000 p24.1 415 | chr9 9000000 14200000 p23 416 | chr9 14200000 16600000 p22.3 417 | chr9 16600000 18500000 p22.2 418 | chr9 18500000 19900000 p22.1 419 | chr9 19900000 25600000 p21.3 420 | chr9 25600000 28000000 p21.2 421 | chr9 28000000 33200000 p21.1 422 | chr9 33200000 36300000 p13.3 423 | chr9 36300000 37900000 p13.2 424 | chr9 37900000 39000000 p13.1 425 | chr9 39000000 40000000 p12 426 | chr9 40000000 42200000 p11.2 427 | chr9 42200000 43000000 p11.1 428 | chr9 43000000 45500000 q11 429 | chr9 45500000 61500000 q12 430 | chr9 61500000 65000000 q13 431 | chr9 65000000 69300000 q21.11 432 | chr9 69300000 71300000 q21.12 433 | chr9 71300000 76600000 q21.13 434 | chr9 76600000 78500000 q21.2 435 | chr9 78500000 81500000 q21.31 436 | chr9 81500000 84300000 q21.32 437 | chr9 84300000 87800000 q21.33 438 | chr9 87800000 89200000 q22.1 439 | chr9 89200000 91200000 q22.2 440 | chr9 91200000 93900000 q22.31 441 | chr9 93900000 96500000 q22.32 442 | chr9 96500000 99800000 q22.33 443 | chr9 99800000 105400000 q31.1 444 | chr9 105400000 108500000 q31.2 445 | chr9 108500000 112100000 q31.3 446 | chr9 112100000 114900000 q32 447 | chr9 114900000 119800000 q33.1 448 | chr9 119800000 123100000 q33.2 449 | chr9 123100000 127500000 q33.3 450 | chr9 127500000 130600000 q34.11 451 | chr9 130600000 131100000 q34.12 452 | chr9 131100000 133100000 q34.13 453 | chr9 133100000 134500000 q34.2 454 | chr9 134500000 138394717 q34.3 455 | chrX 0 4400000 p22.33 456 | chrX 4400000 6100000 p22.32 457 | chrX 6100000 9600000 p22.31 458 | chrX 9600000 17400000 p22.2 459 | chrX 17400000 19200000 p22.13 460 | chrX 19200000 21900000 p22.12 461 | chrX 21900000 24900000 p22.11 462 | chrX 24900000 29300000 p21.3 463 | chrX 29300000 31500000 p21.2 464 | chrX 31500000 37800000 p21.1 465 | chrX 37800000 42500000 p11.4 466 | chrX 42500000 47600000 p11.3 467 | chrX 47600000 50100000 p11.23 468 | chrX 50100000 54800000 p11.22 469 | chrX 54800000 58100000 p11.21 470 | chrX 58100000 61000000 p11.1 471 | chrX 61000000 63800000 q11.1 472 | chrX 63800000 65400000 q11.2 473 | chrX 65400000 68500000 q12 474 | chrX 68500000 73000000 q13.1 475 | chrX 73000000 74700000 q13.2 476 | chrX 74700000 76800000 q13.3 477 | chrX 76800000 85400000 q21.1 478 | chrX 85400000 87000000 q21.2 479 | chrX 87000000 92700000 q21.31 480 | chrX 92700000 94300000 q21.32 481 | chrX 94300000 99100000 q21.33 482 | chrX 99100000 103300000 q22.1 483 | chrX 103300000 104500000 q22.2 484 | chrX 104500000 109400000 q22.3 485 | chrX 109400000 117400000 q23 486 | chrX 117400000 121800000 q24 487 | chrX 121800000 129500000 q25 488 | chrX 129500000 131300000 q26.1 489 | chrX 131300000 134500000 q26.2 490 | chrX 134500000 138900000 q26.3 491 | chrX 138900000 141200000 q27.1 492 | chrX 141200000 143000000 q27.2 493 | chrX 143000000 148000000 q27.3 494 | chrX 148000000 156040895 q28 495 | chrY 0 300000 p11.32 496 | chrY 300000 600000 p11.31 497 | chrY 600000 10300000 p11.2 498 | chrY 10300000 10400000 p11.1 499 | chrY 10400000 10600000 q11.1 500 | chrY 10600000 12400000 q11.21 501 | chrY 12400000 17100000 q11.221 502 | chrY 17100000 19600000 q11.222 503 | chrY 19600000 23800000 q11.223 504 | chrY 23800000 26600000 q11.23 505 | chrY 26600000 57227415 q12 506 | chr10 0 3000000 p15.3 507 | chr10 3000000 3800000 p15.2 508 | chr10 3800000 6600000 p15.1 509 | chr10 6600000 12200000 p14 510 | chr10 12200000 17300000 p13 511 | chr10 17300000 18300000 p12.33 512 | chr10 18300000 18400000 p12.32 513 | chr10 18400000 22300000 p12.31 514 | chr10 22300000 24300000 p12.2 515 | chr10 24300000 29300000 p12.1 516 | chr10 29300000 31100000 p11.23 517 | chr10 31100000 34200000 p11.22 518 | chr10 34200000 38000000 p11.21 519 | chr10 38000000 39800000 p11.1 520 | chr10 39800000 41600000 q11.1 521 | chr10 41600000 45500000 q11.21 522 | chr10 45500000 48600000 q11.22 523 | chr10 48600000 51100000 q11.23 524 | chr10 51100000 59400000 q21.1 525 | chr10 59400000 62800000 q21.2 526 | chr10 62800000 68800000 q21.3 527 | chr10 68800000 73100000 q22.1 528 | chr10 73100000 75900000 q22.2 529 | chr10 75900000 80300000 q22.3 530 | chr10 80300000 86100000 q23.1 531 | chr10 86100000 87700000 q23.2 532 | chr10 87700000 91100000 q23.31 533 | chr10 91100000 92300000 q23.32 534 | chr10 92300000 95300000 q23.33 535 | chr10 95300000 97500000 q24.1 536 | chr10 97500000 100100000 q24.2 537 | chr10 100100000 101200000 q24.31 538 | chr10 101200000 103100000 q24.32 539 | chr10 103100000 104000000 q24.33 540 | chr10 104000000 110100000 q25.1 541 | chr10 110100000 113100000 q25.2 542 | chr10 113100000 117300000 q25.3 543 | chr10 117300000 119900000 q26.11 544 | chr10 119900000 121400000 q26.12 545 | chr10 121400000 125700000 q26.13 546 | chr10 125700000 128800000 q26.2 547 | chr10 128800000 133797422 q26.3 548 | chr11 0 2800000 p15.5 549 | chr11 2800000 11700000 p15.4 550 | chr11 11700000 13800000 p15.3 551 | chr11 13800000 16900000 p15.2 552 | chr11 16900000 22000000 p15.1 553 | chr11 22000000 26200000 p14.3 554 | chr11 26200000 27200000 p14.2 555 | chr11 27200000 31000000 p14.1 556 | chr11 31000000 36400000 p13 557 | chr11 36400000 43400000 p12 558 | chr11 43400000 48800000 p11.2 559 | chr11 48800000 51000000 p11.12 560 | chr11 51000000 53400000 p11.11 561 | chr11 53400000 55800000 q11 562 | chr11 55800000 60100000 q12.1 563 | chr11 60100000 61900000 q12.2 564 | chr11 61900000 63600000 q12.3 565 | chr11 63600000 66100000 q13.1 566 | chr11 66100000 68700000 q13.2 567 | chr11 68700000 70500000 q13.3 568 | chr11 70500000 75500000 q13.4 569 | chr11 75500000 77400000 q13.5 570 | chr11 77400000 85900000 q14.1 571 | chr11 85900000 88600000 q14.2 572 | chr11 88600000 93000000 q14.3 573 | chr11 93000000 97400000 q21 574 | chr11 97400000 102300000 q22.1 575 | chr11 102300000 103000000 q22.2 576 | chr11 103000000 110600000 q22.3 577 | chr11 110600000 112700000 q23.1 578 | chr11 112700000 114600000 q23.2 579 | chr11 114600000 121300000 q23.3 580 | chr11 121300000 124000000 q24.1 581 | chr11 124000000 127900000 q24.2 582 | chr11 127900000 130900000 q24.3 583 | chr11 130900000 135086622 q25 584 | chr12 0 3200000 p13.33 585 | chr12 3200000 5300000 p13.32 586 | chr12 5300000 10000000 p13.31 587 | chr12 10000000 12600000 p13.2 588 | chr12 12600000 14600000 p13.1 589 | chr12 14600000 19800000 p12.3 590 | chr12 19800000 21100000 p12.2 591 | chr12 21100000 26300000 p12.1 592 | chr12 26300000 27600000 p11.23 593 | chr12 27600000 30500000 p11.22 594 | chr12 30500000 33200000 p11.21 595 | chr12 33200000 35500000 p11.1 596 | chr12 35500000 37800000 q11 597 | chr12 37800000 46000000 q12 598 | chr12 46000000 48700000 q13.11 599 | chr12 48700000 51100000 q13.12 600 | chr12 51100000 54500000 q13.13 601 | chr12 54500000 56200000 q13.2 602 | chr12 56200000 57700000 q13.3 603 | chr12 57700000 62700000 q14.1 604 | chr12 62700000 64700000 q14.2 605 | chr12 64700000 67300000 q14.3 606 | chr12 67300000 71100000 q15 607 | chr12 71100000 75300000 q21.1 608 | chr12 75300000 79900000 q21.2 609 | chr12 79900000 86300000 q21.31 610 | chr12 86300000 88600000 q21.32 611 | chr12 88600000 92200000 q21.33 612 | chr12 92200000 95800000 q22 613 | chr12 95800000 101200000 q23.1 614 | chr12 101200000 103500000 q23.2 615 | chr12 103500000 108600000 q23.3 616 | chr12 108600000 111300000 q24.11 617 | chr12 111300000 111900000 q24.12 618 | chr12 111900000 113900000 q24.13 619 | chr12 113900000 116400000 q24.21 620 | chr12 116400000 117700000 q24.22 621 | chr12 117700000 120300000 q24.23 622 | chr12 120300000 125400000 q24.31 623 | chr12 125400000 128700000 q24.32 624 | chr12 128700000 133275309 q24.33 625 | chr13 0 4600000 p13 626 | chr13 4600000 10100000 p12 627 | chr13 10100000 16500000 p11.2 628 | chr13 16500000 17700000 p11.1 629 | chr13 17700000 18900000 q11 630 | chr13 18900000 22600000 q12.11 631 | chr13 22600000 24900000 q12.12 632 | chr13 24900000 27200000 q12.13 633 | chr13 27200000 28300000 q12.2 634 | chr13 28300000 31600000 q12.3 635 | chr13 31600000 33400000 q13.1 636 | chr13 33400000 34900000 q13.2 637 | chr13 34900000 39500000 q13.3 638 | chr13 39500000 44600000 q14.11 639 | chr13 44600000 45200000 q14.12 640 | chr13 45200000 46700000 q14.13 641 | chr13 46700000 50300000 q14.2 642 | chr13 50300000 54700000 q14.3 643 | chr13 54700000 59000000 q21.1 644 | chr13 59000000 61800000 q21.2 645 | chr13 61800000 65200000 q21.31 646 | chr13 65200000 68100000 q21.32 647 | chr13 68100000 72800000 q21.33 648 | chr13 72800000 74900000 q22.1 649 | chr13 74900000 76700000 q22.2 650 | chr13 76700000 78500000 q22.3 651 | chr13 78500000 87100000 q31.1 652 | chr13 87100000 89400000 q31.2 653 | chr13 89400000 94400000 q31.3 654 | chr13 94400000 97500000 q32.1 655 | chr13 97500000 98700000 q32.2 656 | chr13 98700000 101100000 q32.3 657 | chr13 101100000 104200000 q33.1 658 | chr13 104200000 106400000 q33.2 659 | chr13 106400000 109600000 q33.3 660 | chr13 109600000 114364328 q34 661 | chr14 0 3600000 p13 662 | chr14 3600000 8000000 p12 663 | chr14 8000000 16100000 p11.2 664 | chr14 16100000 17200000 p11.1 665 | chr14 17200000 18200000 q11.1 666 | chr14 18200000 24100000 q11.2 667 | chr14 24100000 32900000 q12 668 | chr14 32900000 34800000 q13.1 669 | chr14 34800000 36100000 q13.2 670 | chr14 36100000 37400000 q13.3 671 | chr14 37400000 43000000 q21.1 672 | chr14 43000000 46700000 q21.2 673 | chr14 46700000 50400000 q21.3 674 | chr14 50400000 53600000 q22.1 675 | chr14 53600000 55000000 q22.2 676 | chr14 55000000 57600000 q22.3 677 | chr14 57600000 61600000 q23.1 678 | chr14 61600000 64300000 q23.2 679 | chr14 64300000 67400000 q23.3 680 | chr14 67400000 69800000 q24.1 681 | chr14 69800000 73300000 q24.2 682 | chr14 73300000 78800000 q24.3 683 | chr14 78800000 83100000 q31.1 684 | chr14 83100000 84400000 q31.2 685 | chr14 84400000 89300000 q31.3 686 | chr14 89300000 91400000 q32.11 687 | chr14 91400000 94200000 q32.12 688 | chr14 94200000 95800000 q32.13 689 | chr14 95800000 100900000 q32.2 690 | chr14 100900000 102700000 q32.31 691 | chr14 102700000 103500000 q32.32 692 | chr14 103500000 107043718 q32.33 693 | chr15 0 4200000 p13 694 | chr15 4200000 9700000 p12 695 | chr15 9700000 17500000 p11.2 696 | chr15 17500000 19000000 p11.1 697 | chr15 19000000 20500000 q11.1 698 | chr15 20500000 25500000 q11.2 699 | chr15 25500000 27800000 q12 700 | chr15 27800000 30000000 q13.1 701 | chr15 30000000 30900000 q13.2 702 | chr15 30900000 33400000 q13.3 703 | chr15 33400000 39800000 q14 704 | chr15 39800000 42500000 q15.1 705 | chr15 42500000 43300000 q15.2 706 | chr15 43300000 44500000 q15.3 707 | chr15 44500000 49200000 q21.1 708 | chr15 49200000 52600000 q21.2 709 | chr15 52600000 58800000 q21.3 710 | chr15 58800000 59000000 q22.1 711 | chr15 59000000 63400000 q22.2 712 | chr15 63400000 66900000 q22.31 713 | chr15 66900000 67000000 q22.32 714 | chr15 67000000 67200000 q22.33 715 | chr15 67200000 72400000 q23 716 | chr15 72400000 74900000 q24.1 717 | chr15 74900000 76300000 q24.2 718 | chr15 76300000 78000000 q24.3 719 | chr15 78000000 81400000 q25.1 720 | chr15 81400000 84700000 q25.2 721 | chr15 84700000 88500000 q25.3 722 | chr15 88500000 93800000 q26.1 723 | chr15 93800000 98000000 q26.2 724 | chr15 98000000 101991189 q26.3 725 | chr16 0 7800000 p13.3 726 | chr16 7800000 10400000 p13.2 727 | chr16 10400000 12500000 p13.13 728 | chr16 12500000 14700000 p13.12 729 | chr16 14700000 16700000 p13.11 730 | chr16 16700000 21200000 p12.3 731 | chr16 21200000 24200000 p12.2 732 | chr16 24200000 28500000 p12.1 733 | chr16 28500000 35300000 p11.2 734 | chr16 35300000 36800000 p11.1 735 | chr16 36800000 38400000 q11.1 736 | chr16 38400000 47000000 q11.2 737 | chr16 47000000 52600000 q12.1 738 | chr16 52600000 56000000 q12.2 739 | chr16 56000000 57300000 q13 740 | chr16 57300000 66600000 q21 741 | chr16 66600000 70800000 q22.1 742 | chr16 70800000 72800000 q22.2 743 | chr16 72800000 74100000 q22.3 744 | chr16 74100000 79200000 q23.1 745 | chr16 79200000 81600000 q23.2 746 | chr16 81600000 84100000 q23.3 747 | chr16 84100000 87000000 q24.1 748 | chr16 87000000 88700000 q24.2 749 | chr16 88700000 90338345 q24.3 750 | chr17 0 3400000 p13.3 751 | chr17 3400000 6500000 p13.2 752 | chr17 6500000 10800000 p13.1 753 | chr17 10800000 16100000 p12 754 | chr17 16100000 22700000 p11.2 755 | chr17 22700000 25100000 p11.1 756 | chr17 25100000 27400000 q11.1 757 | chr17 27400000 33500000 q11.2 758 | chr17 33500000 39800000 q12 759 | chr17 39800000 40200000 q21.1 760 | chr17 40200000 42800000 q21.2 761 | chr17 42800000 46800000 q21.31 762 | chr17 46800000 49300000 q21.32 763 | chr17 49300000 52100000 q21.33 764 | chr17 52100000 59500000 q22 765 | chr17 59500000 60200000 q23.1 766 | chr17 60200000 63100000 q23.2 767 | chr17 63100000 64600000 q23.3 768 | chr17 64600000 66200000 q24.1 769 | chr17 66200000 69100000 q24.2 770 | chr17 69100000 72900000 q24.3 771 | chr17 72900000 76800000 q25.1 772 | chr17 76800000 77200000 q25.2 773 | chr17 77200000 83257441 q25.3 774 | chr18 0 2900000 p11.32 775 | chr18 2900000 7200000 p11.31 776 | chr18 7200000 8500000 p11.23 777 | chr18 8500000 10900000 p11.22 778 | chr18 10900000 15400000 p11.21 779 | chr18 15400000 18500000 p11.1 780 | chr18 18500000 21500000 q11.1 781 | chr18 21500000 27500000 q11.2 782 | chr18 27500000 35100000 q12.1 783 | chr18 35100000 39500000 q12.2 784 | chr18 39500000 45900000 q12.3 785 | chr18 45900000 50700000 q21.1 786 | chr18 50700000 56200000 q21.2 787 | chr18 56200000 58600000 q21.31 788 | chr18 58600000 61300000 q21.32 789 | chr18 61300000 63900000 q21.33 790 | chr18 63900000 69100000 q22.1 791 | chr18 69100000 71000000 q22.2 792 | chr18 71000000 75400000 q22.3 793 | chr18 75400000 80373285 q23 794 | chr19 0 6900000 p13.3 795 | chr19 6900000 12600000 p13.2 796 | chr19 12600000 13800000 p13.13 797 | chr19 13800000 16100000 p13.12 798 | chr19 16100000 19900000 p13.11 799 | chr19 19900000 24200000 p12 800 | chr19 24200000 26200000 p11 801 | chr19 26200000 28100000 q11 802 | chr19 28100000 31900000 q12 803 | chr19 31900000 35100000 q13.11 804 | chr19 35100000 37800000 q13.12 805 | chr19 37800000 38200000 q13.13 806 | chr19 38200000 42900000 q13.2 807 | chr19 42900000 44700000 q13.31 808 | chr19 44700000 47500000 q13.32 809 | chr19 47500000 50900000 q13.33 810 | chr19 50900000 53100000 q13.41 811 | chr19 53100000 55800000 q13.42 812 | chr19 55800000 58617616 q13.43 813 | chr20 0 5100000 p13 814 | chr20 5100000 9200000 p12.3 815 | chr20 9200000 12000000 p12.2 816 | chr20 12000000 17900000 p12.1 817 | chr20 17900000 21300000 p11.23 818 | chr20 21300000 22300000 p11.22 819 | chr20 22300000 25700000 p11.21 820 | chr20 25700000 28100000 p11.1 821 | chr20 28100000 30400000 q11.1 822 | chr20 30400000 33500000 q11.21 823 | chr20 33500000 35800000 q11.22 824 | chr20 35800000 39000000 q11.23 825 | chr20 39000000 43100000 q12 826 | chr20 43100000 43500000 q13.11 827 | chr20 43500000 47800000 q13.12 828 | chr20 47800000 51200000 q13.13 829 | chr20 51200000 56400000 q13.2 830 | chr20 56400000 57800000 q13.31 831 | chr20 57800000 59700000 q13.32 832 | chr20 59700000 64444167 q13.33 833 | chr21 0 3100000 p13 834 | chr21 3100000 7000000 p12 835 | chr21 7000000 10900000 p11.2 836 | chr21 10900000 12000000 p11.1 837 | chr21 12000000 13000000 q11.1 838 | chr21 13000000 15000000 q11.2 839 | chr21 15000000 22600000 q21.1 840 | chr21 22600000 25500000 q21.2 841 | chr21 25500000 30200000 q21.3 842 | chr21 30200000 34400000 q22.11 843 | chr21 34400000 36400000 q22.12 844 | chr21 36400000 38300000 q22.13 845 | chr21 38300000 41200000 q22.2 846 | chr21 41200000 46709983 q22.3 847 | chr22 0 4300000 p13 848 | chr22 4300000 9400000 p12 849 | chr22 9400000 13700000 p11.2 850 | chr22 13700000 15000000 p11.1 851 | chr22 15000000 17400000 q11.1 852 | chr22 17400000 21700000 q11.21 853 | chr22 21700000 23100000 q11.22 854 | chr22 23100000 25500000 q11.23 855 | chr22 25500000 29200000 q12.1 856 | chr22 29200000 31800000 q12.2 857 | chr22 31800000 37200000 q12.3 858 | chr22 37200000 40600000 q13.1 859 | chr22 40600000 43800000 q13.2 860 | chr22 43800000 48100000 q13.31 861 | chr22 48100000 49100000 q13.32 862 | chr22 49100000 50818468 q13.33 863 | -------------------------------------------------------------------------------- /mdmst.py: -------------------------------------------------------------------------------- 1 | from collections import * 2 | from copy import * 3 | 4 | def reverse_g(g): 5 | rev_graph = {} 6 | for node in g: 7 | rev_graph[node] = {} 8 | for a_node in g: 9 | for b_node in g[a_node]: 10 | rev_graph[b_node][a_node] = g[a_node][b_node] 11 | return rev_graph 12 | 13 | def update_dege(rg, root): 14 | for node in rg: 15 | if not node == root: 16 | min = float('inf') 17 | for in_nbr in rg[node]: 18 | if rg[node][in_nbr] < min: 19 | min = rg[node][in_nbr] 20 | for in_nbr in rg[node]: 21 | rg[node][in_nbr] -= min 22 | 23 | 24 | def compute_rdst_candidate(rg, root): 25 | candidate = {} 26 | for node in rg: 27 | candidate[node] = {} 28 | for node in rg: 29 | if not node == root: 30 | min = float('inf') 31 | for in_nbr in rg[node]: 32 | if rg[node][in_nbr] < min: 33 | min = rg[node][in_nbr] 34 | for in_nbr in rg[node]: 35 | if candidate[node] == {}: 36 | if rg[node][in_nbr] == min: 37 | candidate[node][in_nbr] = min 38 | return candidate 39 | 40 | 41 | def get_cycle(rdst_candidate): 42 | node_unvisited = [] 43 | for node in rdst_candidate: 44 | node_unvisited.append(node) 45 | while not node_unvisited == []: 46 | start_node = node_unvisited.pop() 47 | stack = [] 48 | trail = [] 49 | stack.append(start_node) 50 | while not len(stack) == 0: 51 | node = stack.pop(-1) 52 | for nbr in rdst_candidate[node]: 53 | if nbr in trail: 54 | return tuple(trail[trail.index(nbr):]) 55 | else: 56 | stack.append(nbr) 57 | trail.append(nbr) 58 | if nbr in node_unvisited: 59 | node_unvisited.remove(nbr) 60 | return False 61 | 62 | 63 | def contract_cycle(g, cycle): 64 | cstar = max(g.keys()) + "1" 65 | contracted_graph = {} 66 | contracted_graph[cstar] = {} 67 | for node in g: 68 | if not node in cycle: 69 | contracted_graph[node] = {} 70 | for node in g: 71 | for nbr in g[node]: 72 | if node in cycle: 73 | if nbr in cycle: 74 | pass 75 | else: 76 | if nbr in contracted_graph[cstar]: 77 | contracted_graph[cstar][nbr] = min(contracted_graph[cstar][nbr], g[node][nbr]) 78 | else: 79 | contracted_graph[cstar][nbr] = g[node][nbr] 80 | else: 81 | if nbr in cycle: 82 | if cstar in contracted_graph[node]: 83 | contracted_graph[node][cstar] = min(contracted_graph[node][cstar], g[node][nbr]) 84 | else: 85 | contracted_graph[node][cstar] = g[node][nbr] 86 | else: 87 | contracted_graph[node][nbr] = g[node][nbr] 88 | return contracted_graph, cstar 89 | 90 | 91 | def expand_graph(g, rdst_candidate, cycle, cstar): 92 | restored_graph = {} 93 | for node in g: 94 | restored_graph[node] = {} 95 | for node in rdst_candidate: 96 | for nbr in rdst_candidate[node]: 97 | if node == cstar: 98 | min = float('inf') 99 | for orig in cycle: 100 | if nbr in g[orig]: 101 | if g[orig][nbr] < min: 102 | min = g[orig][nbr] 103 | point = orig 104 | restored_graph[point][nbr] = min 105 | else: 106 | if nbr == cstar: 107 | min = float('inf') 108 | for orig_nbr in g[node]: 109 | if orig_nbr in cycle: 110 | if g[node][orig_nbr] < min: 111 | min = g[node][orig_nbr] 112 | start_pt = orig_nbr 113 | restored_graph[node][start_pt] = min 114 | else: 115 | restored_graph[node][nbr] = g[node][nbr] 116 | for index in range(len(cycle) - 1): 117 | restored_graph[cycle[index + 1]][cycle[index]] = g[cycle[index + 1]][cycle[index]] 118 | restored_graph[cycle[0]][cycle[-1]] = g[cycle[0]][cycle[-1]] 119 | index = cycle.index(start_pt) 120 | if index == len(cycle) - 1: 121 | restored_graph[cycle[0]].pop(cycle[index]) 122 | else: 123 | restored_graph[cycle[index + 1]].pop(cycle[index]) 124 | return restored_graph 125 | 126 | 127 | def bfs(g, startnode): 128 | dist = {} 129 | 130 | for node in g: 131 | dist[node] = float('inf') 132 | dist[startnode] = 0 133 | 134 | queue = deque([startnode]) 135 | 136 | while queue: 137 | node = queue.popleft() 138 | for nbr in g[node]: 139 | if dist[nbr] == float('inf'): 140 | dist[nbr] = dist[node] + 1 141 | queue.append(nbr) 142 | return dist 143 | 144 | 145 | def compute_rdmst(g, root): 146 | 147 | if root not in g: 148 | print "The root node does not exist" 149 | return 150 | 151 | distances = bfs(g, root) 152 | for node in g: 153 | if distances[node] == float('inf'): 154 | print "The root does not reach every other node in the graph" 155 | return 156 | 157 | rdmst = compute_rdmst_helper(g, root) 158 | 159 | rdmst_weight = 0 160 | for node in rdmst: 161 | for nbr in rdmst[node]: 162 | rdmst[node][nbr] = g[node][nbr] 163 | rdmst_weight += rdmst[node][nbr] 164 | 165 | return (rdmst,rdmst_weight) 166 | 167 | 168 | def compute_rdmst_helper(g, root): 169 | 170 | rgraph = reverse_g(g) 171 | update_dege(rgraph, root) 172 | rdst_candidate = compute_rdst_candidate(rgraph, root) 173 | cycle = get_cycle(rdst_candidate) 174 | 175 | if not cycle: 176 | return reverse_g(rdst_candidate) 177 | else: 178 | g_copy = deepcopy(rgraph) 179 | g_copy = reverse_g(g_copy) 180 | (contracted_g, cstar) = contract_cycle(g_copy, cycle) 181 | new_rdst_candidate = compute_rdmst_helper(contracted_g, root) 182 | rdmst = expand_graph(reverse_g(rgraph), new_rdst_candidate, cycle, cstar) 183 | 184 | return rdmst 185 | -------------------------------------------------------------------------------- /pathwaygene.txt: -------------------------------------------------------------------------------- 1 | chr start end name pathway 2 | chr1 120454175 120612317 NOTCH2 Notch 3 | chr1 11166587 11322608 MTOR PI3K 4 | chr1 16174358 16266950 SPEN Notch 5 | chr1 46505811 46596345 PIK3R3 PI3K 6 | chr1 197170591 197447585 CRB1 Hippo 7 | chr1 214522038 214725024 PTPN14 Hippo 8 | chr1 243651534 244006584 AKT3 PI3K 9 | chr1 8071778 8086393 ERRFI1 RTK/RAS 10 | chr1 40361095 40367687 MYCL MYC 11 | chr1 51434366 51440306 CDKN2C cellcycle 12 | chr1 115247084 115259515 NRAS RTK/RAS 13 | chr1 155867598 155880706 RIT1 RTK/RAS 14 | chr1 156785541 156851642 NTRK1 RTK/RAS 15 | chr1 204485506 204527248 MDM4 p53 16 | chr1 227058272 227083804 PSEN2 Notch 17 | chr2 212240441 213403352 ERBB4 RTK/RAS 18 | chr2 225334866 225450114 CUL3 Nrf2 19 | chr2 29415639 30144477 ALK RTK/RAS 20 | chr2 39208689 39347604 SOS1 RTK/RAS 21 | chr2 85360582 85537511 TCF7L1 Wnt 22 | chr2 148602085 148688396 ACVR2A TGFB 23 | chr2 178095030 178128859 NFE2L2 Nrf2 24 | chr2 202899309 202903160 FZD7 Wnt 25 | chr2 230222344 230579286 DNER Notch 26 | chr2 16080559 16087129 MYCN MYC 27 | chr2 70142172 70170077 MXD1 MYC 28 | chr2 74379724 74405441 MOB1A Hippo 29 | chr2 208627309 208634143 FZD5 Wnt 30 | chr3 138371539 138426463 PIK3CB PI3K 31 | chr3 1134341 1445294 CNTN6 Notch 32 | chr3 20081523 20195896 KAT2B Notch 33 | chr3 30647993 30735634 TGFBR2 TGFB 34 | chr3 119540799 119813264 GSK3B Wnt 35 | chr3 178866310 178957881 PIK3CA PI3K 36 | chr3 12625099 12705700 RAF1 RTK/RAS 37 | chr3 41240914 41281944 CTNNB1 Wnt 38 | chr4 55524094 55606881 KIT RTK/RAS 39 | chr4 142944312 143767688 INPP4B PI3K 40 | chr4 155155526 155312449 DCHS2 Hippo 41 | chr4 71768056 71842460 MOB1B Hippo 42 | chr4 126237566 126414087 FAT4 Hippo 43 | chr4 140637544 141075233 MAML3 Notch 44 | chr4 153242409 153456185 FBXW7 Notch 45 | chr4 187508936 187644987 FAT1 Hippo 46 | chr4 1795038 1810599 FGFR3 RTK/RAS 47 | chr4 2249159 2263739 MXD4 MYC 48 | chr4 55095255 55148145 PDGFRA RTK/RAS 49 | chr4 154701741 154710228 SFRP2 Wnt 50 | chr5 167719064 167899308 WWC1 Hippo 51 | chr5 38938021 39074510 RICTOR PI3K 52 | chr5 86564069 86687743 RASA1 RTK/RAS 53 | chr5 112043201 112181936 APC Wnt 54 | chr5 67511583 67597649 PIK3R1 PI3K 55 | chr5 133450388 133483920 TCF7 Wnt 56 | chr5 150883652 150948505 FAT2 Hippo 57 | chr5 176513872 176525143 FGFR4 RTK/RAS 58 | chr5 176732500 176739292 MXD3 MYC 59 | chr6 41902670 42016632 CCND3 cellcycle 60 | chr6 20402136 20493945 E2F3 cellcycle 61 | chr6 117609529 117747018 ROS1 RTK/RAS 62 | chr6 32162619 32191844 NOTCH4 Notch 63 | chr6 36644236 36655116 CDKN1A cellcycle 64 | chr6 149979288 150037561 LATS1 Hippo 65 | chr7 92234234 92463231 CDK6 cellcycle 66 | chr7 116312412 116438440 MET RTK/RAS 67 | chr7 140433811 140624564 BRAF RTK/RAS 68 | chr7 6414125 6443598 RAC1 RTK/RAS 69 | chr7 55086713 55270769 EGFR RTK/RAS 70 | chr7 37945533 37956525 SFRP4 Wnt 71 | chr7 72848108 72850450 FZD9 Wnt 72 | chr7 73007523 73038870 MLXIPL MYC 73 | chr7 90893782 90898132 FZD1 Wnt 74 | chr7 148395932 148498202 CUL1 Notch 75 | chr7 151163097 151217010 RHEB PI3K 76 | chr8 99466858 99837899 STK3 Hippo 77 | chr8 38268655 38325363 FGFR1 RTK/RAS 78 | chr8 41119475 41166990 SFRP1 Wnt 79 | chr8 104310660 104345094 FZD6 Wnt 80 | chr8 28351721 28431785 FZD3 Wnt 81 | chr8 120428551 120436678 NOV Notch 82 | chr8 128748314 128753680 MYC MYC 83 | chr9 140500091 140509812 ARRDC1 Notch 84 | chr9 4985085 5128183 JAK2 RTK/RAS 85 | chr9 82186687 82341797 TLE4 Wnt 86 | chr9 84198597 84304450 TLE1 Wnt 87 | chr9 87283372 87430623 NTRK2 RTK/RAS 88 | chr9 133589267 133763062 ABL1 RTK/RAS 89 | chr9 135766734 135820020 TSC1 PI3K 90 | chr9 21967750 21974826 CDKN2A cellcycle 91 | chr9 22002901 22009312 CDKN2B cellcycle 92 | chr9 101867370 101916474 TGFBR1 TGFB 93 | chr9 126118445 126141034 CRB2 Hippo 94 | chr9 139388884 139440238 NOTCH1 Notch 95 | chrX 20168028 20284750 RPS6KA3 p53 96 | chrX 47420498 47425374 ARAF RTK/RAS 97 | chrX 63404996 63425624 AMER1 Wnt 98 | chrX 153639853 153650065 TAZ Hippo 99 | chr10 89623194 89731687 PTEN PI3K 100 | chr10 114710008 114927437 TCF7L2 Wnt 101 | chr10 123237843 123353481 FGFR2 RTK/RAS 102 | chr10 35927176 35930362 FZD8 Wnt 103 | chr10 43572516 43622952 RET RTK/RAS 104 | chr10 99526507 99531756 SFRP5 Wnt 105 | chr10 111967362 112047123 MXI1 MYC 106 | chr11 92085261 92629636 FAT3 Hippo 107 | chr11 68080076 68216743 LRP5 Wnt 108 | chr11 69455872 69469242 CCND1 cellcycle 109 | chr11 108093558 108239826 ATM p53 110 | chr11 119076985 119178859 CBL RTK/RAS 111 | chr11 532241 535567 HRAS RTK/RAS 112 | chr11 6642554 6677080 DCHS1 Hippo 113 | chr11 86656716 86666440 FZD4 Wnt 114 | chr11 101981191 102104154 YAP1 Hippo 115 | chr12 69201951 69239324 MDM2 p53 116 | chr12 389222 498621 KDM5A Notch 117 | chr12 12268958 12419811 LRP6 Wnt 118 | chr12 56360552 56366573 CDK2 cellcycle 119 | chr12 56473808 56497291 ERBB3 RTK/RAS 120 | chr12 118587605 118628367 TAOK3 Hippo 121 | chr12 122516633 122631894 MLXIP MYC 122 | chr12 124808956 125052010 NCOR2 Notch 123 | chr12 4382901 4414522 CCND2 cellcycle 124 | chr12 12870203 12875317 CDKN1B cellcycle 125 | chr12 25357722 25403865 KRAS RTK/RAS 126 | chr12 52345450 52390863 ACVR1B TGFB 127 | chr12 58141509 58146230 CDK4 cellcycle 128 | chr12 65444403 65515346 WIF1 Wnt 129 | chr12 112856701 112924727 PTPN11 RTK/RAS 130 | chr12 130647003 130650285 FZD10 Wnt 131 | chr13 21547174 21635722 LATS2 Hippo 132 | chr13 48877882 49056026 RB1 cellcycle 133 | chr13 28577410 28674729 FLT3 RTK/RAS 134 | chr14 51100297 51135071 SAV1 Hippo 135 | chr14 65472818 65569262 MAX MYC 136 | chr14 105235685 105259938 AKT1 PI3K 137 | chr14 105607317 105635161 JAG2 Notch 138 | chr15 66679210 66783882 MAP2K1 RTK/RAS 139 | chr15 67358194 67487533 SMAD3 TGFB 140 | chr15 70340128 70387124 TLE3 Wnt 141 | chr15 88419987 88799962 NTRK3 RTK/RAS 142 | chr15 99191767 99507759 IGF1R RTK/RAS 143 | chr15 41952609 42062141 MGA MYC 144 | chr16 337439 402676 AXIN1 Wnt 145 | chr16 3775054 3930121 CREBBP Notch 146 | chr16 2097895 2138721 TSC2 PI3K 147 | chr16 29985187 29999726 TAOK2 Hippo 148 | chr17 78518624 78940173 RPTOR PI3K 149 | chr17 15933407 16097953 NCOR1 Notch 150 | chr17 27717942 27878921 TAOK1 Hippo 151 | chr17 29421944 29549782 NF1 RTK/RAS 152 | chr17 37844336 37884915 ERBB2 RTK/RAS 153 | chr17 56429860 56494943 RNF43 Wnt 154 | chr17 80200536 80231594 CSNK1D Hippo 155 | chr17 2287353 2304258 MNT MYC 156 | chr17 7571719 7578811 TP53 p53 157 | chr17 40719077 40725221 MLX MYC 158 | chr17 42634811 42638630 FZD2 Wnt 159 | chr17 63524680 63557740 AXIN2 Wnt 160 | chr18 45359465 45456970 SMAD2 TGFB 161 | chr18 48556582 48611412 SMAD4 TGFB 162 | chr19 2997635 3029165 TLE2 Wnt 163 | chr19 40736223 40771258 AKT2 PI3K 164 | chr19 1205797 1228434 STK11 PI3K 165 | chr19 4090318 4124126 MAP2K2 RTK/RAS 166 | chr19 10596795 10613481 KEAP1 Nrf2 167 | chr19 15270443 15311792 NOTCH3 Notch 168 | chr19 18263987 18281343 PIK3R2 PI3K 169 | chr19 30302900 30315224 CCNE1 cellcycle 170 | chr19 49843851 49864752 TEAD2 Hippo 171 | chr19 52693054 52729678 PPP2R1A PI3K 172 | chr20 43595114 43708618 STK4 Hippo 173 | chr20 32263291 32274210 E2F1 cellcycle 174 | chr22 29279754 29453476 ZNRF3 Wnt 175 | chr22 22113945 22221970 MAPK1 RTK/RAS 176 | chr22 29083730 29137822 CHEK2 p53 177 | chr22 29999544 30079904 NF2 Hippo 178 | chr22 41488613 41576081 EP300 Notch 179 | chr22 38686696 38713413 CSNK1E Hippo 180 | chr1 62901974 62917475 USP1 DDR 181 | chr1 91726322 91870426 HFM1 DDR 182 | chr1 2115898 2126214 FAAP20 DDR 183 | chr1 11734536 11741271 MAD2L2 DDR 184 | chr1 28218034 28241308 RPA2 DDR 185 | chr1 40974390 40981722 EXO5 DDR 186 | chr1 45265896 45271667 PLK3 DDR 187 | chr1 45794913 45805629 MUTYH DDR 188 | chr1 46713366 46744145 RAD54L DDR 189 | chr1 68150859 68154021 GADD45A DDR 190 | chr1 114447240 114456708 DCLRE1B DDR 191 | chr1 115110177 115124265 BCAS2 DDR 192 | chr1 155232658 155243320 CLK2 DDR 193 | chr1 202300784 202311094 UBE2T DDR 194 | chr1 226548391 226595801 PARP1 DDR 195 | chr1 231473681 231490775 SPRTN DDR 196 | chr1 242011492 242053241 EXO1 DDR 197 | chr2 28111575 28561768 BRE DDR 198 | chr2 216974019 217071016 XRCC5 DDR 199 | chr2 225334866 225450114 CUL3 DDR 200 | chr2 17935124 17967187 GEN1 DDR 201 | chr2 47630205 47710367 MSH2 DDR 202 | chr2 58386377 58468515 FANCL DDR 203 | chr2 152266396 152333860 RIF1 DDR 204 | chr2 190648810 190742355 PMS1 DDR 205 | chr2 215590369 215674435 BARD1 DDR 206 | chr2 10262694 10271546 RRM2 DDR 207 | chr2 17845078 17935096 SMC6 DDR 208 | chr2 48010220 48034092 MSH6 DDR 209 | chr2 68694690 68807294 APLF DDR 210 | chr2 75185774 75196859 POLE4 DDR 211 | chr2 100016937 100106518 REV1 DDR 212 | chr2 128014865 128051670 ERCC3 DDR 213 | chr2 209100950 209119027 IDH1 DDR 214 | chr2 219940045 220025587 NHEJ1 DDR 215 | chr3 10068070 10141344 FANCD2 DDR 216 | chr3 47627377 47823405 SMARCC1 DDR 217 | chr3 48488113 48507054 ATRIP DDR 218 | chr3 121150272 121264853 POLQ DDR 219 | chr3 142168076 142297668 ATR DDR 220 | chr3 148747850 148804341 HLTF DDR 221 | chr3 186507680 186524290 RFC4 DDR 222 | chr3 193853930 193856401 HES1 DDR 223 | chr3 196195653 196230639 RNF168 DDR 224 | chr3 4344987 4356086 SETMAR DDR 225 | chr3 8918879 9005159 RAD18 DDR 226 | chr3 9791627 9799091 OGG1 DDR 227 | chr3 14186646 14220172 XPC DDR 228 | chr3 37034840 37092337 MLH1 DDR 229 | chr3 39093476 39138162 WDR48 DDR 230 | chr3 48198667 48229801 CDC25A DDR 231 | chr3 48506918 48509044 TREX1 DDR 232 | chr3 51976320 51982883 PARP3 DDR 233 | chr3 73045893 73118352 PPP4R2 DDR 234 | chr3 129149786 129159022 MBD4 DDR 235 | chr3 133319448 133380737 TOPBP1 DDR 236 | chr4 2073684 2243891 POLN DDR 237 | chr4 178230990 178284092 NEIL3 DDR 238 | chr4 2470794 2517586 RNF4 DDR 239 | chr4 39289068 39368001 RFC1 DDR 240 | chr4 95128758 95212443 SMARCAD1 DDR 241 | chr4 1341053 1381837 UVSSA DDR 242 | chr4 84328495 84377036 HELQ DDR 243 | chr4 84382091 84406290 FAM175A DDR 244 | chr4 155456148 155471585 PLRG1 DDR 245 | chr4 174252526 174254920 HMGB2 DDR 246 | chr5 68530621 68573257 CDK7 DDR 247 | chr5 68665123 68710628 RAD17 DDR 248 | chr5 74807574 74901645 POLK DDR 249 | chr5 79950466 80172634 MSH3 DDR 250 | chr5 82373227 82606888 XRCC4 DDR 251 | chr5 137620953 137667566 CDC25C DDR 252 | chr5 176332005 176433443 UIMC1 DDR 253 | chr5 34905364 34915731 RAD1 DDR 254 | chr5 60169658 60240905 ERCC8 DDR 255 | chr5 70330950 70363497 GTF2H2 DDR 256 | chr5 86690078 86708721 CCNH DDR 257 | chr5 131892615 131980313 RAD50 DDR 258 | chr5 133706866 133727799 UBE2B DDR 259 | chr6 80714321 80752244 TTK DDR 260 | chr6 30667583 30685458 MDC1 DDR 261 | chr6 37321747 37362514 RNF8 DDR 262 | chr6 100956069 101329248 ASCC3 DDR 263 | chr6 111620233 111804918 REV3L DDR 264 | chr6 146205942 146285233 SHPRH DDR 265 | chr6 158589378 158620376 GTF2H5 DDR 266 | chr6 21593971 21598850 SOX4 DDR 267 | chr6 24650204 24667115 TDP2 DDR 268 | chr6 30875976 30881880 GTF2H4 DDR 269 | chr6 35420137 35434881 FANCE DDR 270 | chr6 43543877 43588260 POLH DDR 271 | chr6 44355250 44418161 CDC5L DDR 272 | chr7 6010555 6048659 PMS2 DDR 273 | chr7 7676193 7758238 RPA3 DDR 274 | chr7 73645831 73668788 RFC2 DDR 275 | chr7 2281856 2290780 NUDT1 DDR 276 | chr7 40172341 40174251 MPLKIP DDR 277 | chr7 44111660 44122139 POLM DDR 278 | chr7 44154278 44163107 POLD2 DDR 279 | chr7 48002884 48019222 HUS1 DDR 280 | chr7 75956107 75988342 YWHAG DDR 281 | chr7 152343582 152373250 XRCC2 DDR 282 | chr7 154735399 154794682 PAXIP1 DDR 283 | chr8 95384187 95449180 RAD54B DDR 284 | chr8 30890777 31031277 WRN DDR 285 | chr8 42195972 42229331 POLB DDR 286 | chr8 48685668 48872743 PRKDC DDR 287 | chr8 54879113 54935016 TCEA1 DDR 288 | chr8 90945563 90996899 NBN DDR 289 | chr8 126104082 126379367 NSMCE2 DDR 290 | chr8 11627171 11644854 NEIL2 DDR 291 | chr8 21964382 21966932 NUDT18 DDR 292 | chr8 48920994 48974454 UBE2V2 DDR 293 | chr8 103216728 103251059 RRM2B DDR 294 | chr8 145736666 145743210 RECQL4 DDR 295 | chr9 72873877 72969789 SMC5 DDR 296 | chr9 97861335 98079536 FANCC DDR 297 | chr9 32972603 33001574 APTX DDR 298 | chr9 35073834 35080013 FANCG DDR 299 | chr9 86595636 86618989 RMI1 DDR 300 | chr9 92219926 92221470 GADD45G DDR 301 | chr9 100437190 100459691 XPA DDR 302 | chr9 110045516 110094475 RAD23B DDR 303 | chr9 116169514 116172955 POLE3 DDR 304 | chr9 131037657 131051268 SWI5 DDR 305 | chrX 24711949 25015103 POLA1 DDR 306 | chrX 76760355 77041755 ATRX DDR 307 | chrX 14861528 14891191 FANCB DDR 308 | chrX 55026755 55034306 APEX2 DDR 309 | chrX 96138906 96140466 RPA4 DDR 310 | chrX 118708429 118718392 UBE2A DDR 311 | chrX 151995870 151999301 CETN2 DDR 312 | chrX 152710177 152711945 TREX2 DDR 313 | chrX 154299694 154351349 BRCC3 DDR 314 | chr10 123716602 123734743 NSMCE4A DDR 315 | chr10 50662525 50747169 ERCC6 DDR 316 | chr10 51026320 51371371 PARG DDR 317 | chr10 89623194 89731687 PTEN DDR 318 | chr10 99218080 99258366 MMS19 DDR 319 | chr10 115594482 115613975 DCLRE1A DDR 320 | chr10 131265447 131565884 MGMT DDR 321 | chr10 14946609 14996431 DCLRE1C DDR 322 | chr10 70173820 70231730 DNA2 DDR 323 | chr10 98064084 98098321 DNTT DDR 324 | chr10 103338638 103348027 POLL DDR 325 | chr11 18343815 18388590 GTF2H1 DDR 326 | chr11 43902356 43941825 ALKBH3 DDR 327 | chr11 61066918 61100684 DDB1 DDR 328 | chr11 74303574 74354105 POLD3 DDR 329 | chr11 108093558 108239826 ATM DDR 330 | chr11 4115914 4160155 RRM1 DDR 331 | chr11 9595227 9611314 WEE1 DDR 332 | chr11 22644078 22647387 FANCF DDR 333 | chr11 47236492 47260769 DDB2 DDR 334 | chr11 60658018 60674061 PRPF19 DDR 335 | chr11 61560108 61564716 FEN1 DDR 336 | chr11 65479472 65487077 KAT5 DDR 337 | chr11 65627871 65633914 MUS81 DDR 338 | chr11 67118235 67121067 POLD4 DDR 339 | chr11 67159422 67165883 RAD9A DDR 340 | chr11 74459912 74553458 RNF169 DDR 341 | chr11 107879407 107978488 CUL5 DDR 342 | chr11 118964583 118966177 H2AFX DDR 343 | chr11 125495030 125527042 CHEK1 DDR 344 | chr12 1020901 1058888 RAD52 DDR 345 | chr12 56618124 56623638 NABP2 DDR 346 | chr12 21621843 21654603 RECQL DDR 347 | chr12 124118285 124147151 GTF2H3 DDR 348 | chr12 54574141 54582778 SMUG1 DDR 349 | chr12 93802087 93836026 UBE2N DDR 350 | chr12 102513948 102542785 PARPBP DDR 351 | chr12 104359592 104382656 TDG DDR 352 | chr12 104697509 104698983 EID3 DDR 353 | chr12 109525992 109531293 ALKBH2 DDR 354 | chr12 109535398 109548798 UNG DDR 355 | chr12 110940004 110969891 RAD9B DDR 356 | chr12 118454465 118470044 RFC5 DDR 357 | chr12 133200347 133264110 POLE DDR 358 | chr13 24995068 25086948 PARP4 DDR 359 | chr13 31032052 31191734 HMGB1 DDR 360 | chr13 32889616 32973809 BRCA2 DDR 361 | chr13 34392205 34540695 RFC3 DDR 362 | chr13 113862506 113919392 CUL4A DDR 363 | chr13 48611702 48615638 NUDT15 DDR 364 | chr13 103498190 103528351 ERCC5 DDR 365 | chr13 108859789 108867130 LIG4 DDR 366 | chr14 75480466 75518235 MLH3 DDR 367 | chr14 45605141 45636395 FANCM DDR 368 | chr14 61201458 61435398 MNAT1 DDR 369 | chr14 68286495 68938393 RAD51B DDR 370 | chr14 90422245 90511108 TDP1 DDR 371 | chr14 20811772 20826063 PARP2 DDR 372 | chr14 20923289 20925931 APEX1 DDR 373 | chr14 50110269 50155098 POLE2 DDR 374 | chr14 78138748 78174356 ALKBH1 DDR 375 | chr14 94640648 94694183 PPP4R4 DDR 376 | chr14 104163953 104181823 XRCC3 DDR 377 | chr15 28356182 28567298 HERC2 DDR 378 | chr15 41271077 41408444 INO80 DDR 379 | chr15 43699411 43785354 TP53BP1 DDR 380 | chr15 48623291 48635566 DUT DDR 381 | chr15 79165122 79190081 MORF4L1 DDR 382 | chr15 91260557 91358692 BLM DDR 383 | chr15 29560352 29562020 NSMCE3 DDR 384 | chr15 31196054 31203991 FAN1 DDR 385 | chr15 40987326 41024356 RAD51 DDR 386 | chr15 75639330 75647592 NEIL1 DDR 387 | chr15 89164526 89175512 AEN DDR 388 | chr15 89787193 89860362 FANCI DDR 389 | chr15 89859535 89878026 POLG DDR 390 | chr16 2089815 2097870 NTHL1 DDR 391 | chr16 27236314 27280113 NSMCE1 DDR 392 | chr16 127017 135850 MPG DDR 393 | chr16 14014013 14046205 ERCC4 DDR 394 | chr16 28962317 28977786 NFATC2IP DDR 395 | chr16 1543351 1560460 TELO2 DDR 396 | chr16 1823228 1826239 EME2 DDR 397 | chr16 3631181 3661607 SLX4 DDR 398 | chr16 11439294 11445620 RMI2 DDR 399 | chr16 23614482 23652678 PALB2 DDR 400 | chr16 29465821 29469545 SLX1B DDR 401 | chr16 30087296 30096698 PPP4C DDR 402 | chr16 30205163 30208887 SLX1A DDR 403 | chr16 89803958 89883065 FANCA DDR 404 | chr17 59756546 59940920 BRIP1 DDR 405 | chr17 73622924 73663269 RECQL5 DDR 406 | chr17 1247833 1303556 YWHAE DDR 407 | chr17 1733272 1802848 RPA1 DDR 408 | chr17 7571719 7578811 TP53 DDR 409 | chr17 8043787 8055753 PER1 DDR 410 | chr17 15879873 15903006 ZSWIM7 DDR 411 | chr17 18174741 18218406 TOP3A DDR 412 | chr17 33307516 33330191 LIG3 DDR 413 | chr17 33426810 33446888 RAD51D DDR 414 | chr17 34245083 34257303 RDM1 DDR 415 | chr17 41196311 41276132 BRCA1 DDR 416 | chr17 48450580 48458820 EME1 DDR 417 | chr17 56769933 56772741 RAD51C DDR 418 | chr17 78388966 78404171 ENDOV DDR 419 | chr17 79506910 79519429 FAAP100 DDR 420 | chr18 9546788 9614605 PPP4R1 DDR 421 | chr18 13726658 13764555 RNMT DDR 422 | chr18 20513294 20606449 RBBP8 DDR 423 | chr18 657603 673499 TYMS DDR 424 | chr18 51795848 51824604 POLI DDR 425 | chr19 11071597 11172958 SMARCA4 DDR 426 | chr19 48618701 48673860 LIG1 DDR 427 | chr19 4402659 4443394 CHAF1A DDR 428 | chr19 7684410 7694439 XAB2 DDR 429 | chr19 11485382 11487627 SWSAP1 DDR 430 | chr19 13056627 13064457 RAD23A DDR 431 | chr19 17378184 17390162 BABAM1 DDR 432 | chr19 33463122 33468401 FAAP24 DDR 433 | chr19 44047463 44079730 XRCC1 DDR 434 | chr19 45854648 45873845 ERCC2 DDR 435 | chr19 45910590 45927177 ERCC1 DDR 436 | chr19 50364459 50370822 PNKP DDR 437 | chr19 50887579 50921275 POLD1 DDR 438 | chr20 43514239 43537173 YWHAB DDR 439 | chr20 3767418 3786768 CDC25B DDR 440 | chr20 5095598 5100647 PCNA DDR 441 | chr20 55904830 55919049 SPO11 DDR 442 | chr20 62289162 62327606 RTEL1 DDR 443 | chr22 29083730 29137822 CHEK2 DDR 444 | chr22 38914953 38964414 DMC1 DDR 445 | chr22 19419424 19423601 MRPL40 DDR 446 | chr22 22311396 22337240 TOP3B DDR 447 | chr22 41347350 41369019 RBX1 DDR 448 | chr22 42017166 42060052 XRCC6 DDR -------------------------------------------------------------------------------- /permutationCNA.R: -------------------------------------------------------------------------------- 1 | #R function for permutation process 2 | #input: 1. the path of R script LSAfunction.R 3 | # 2. copy number profile matrix 4 | # 3. datatype "D" (DNA-seq) or "R" (RNA-seq) 5 | # 4. set the path which store the tree corresponding to permutation datasets 6 | # 5. the number of genes to estimate copy number of genomic bin if you set datatype as R 7 | # defaul 30 genes 8 | 9 | args<-commandArgs(T) 10 | datapath=args[1] 11 | inputfile=args[2] 12 | datatype=args[3] 13 | permutationPath=args[4] 14 | if (length(args)==6){ 15 | delt=args[5] 16 | hg=args[6] 17 | if (hg == "hg19"){ 18 | reference=read.csv(paste(datapath,"/gencode_v19_gene_pos.txt",sep=""),sep="\t",header=F) 19 | }else{ 20 | reference=read.csv(paste(datapath,"/gencode_v38_gene_pos.txt",sep=""),sep="\t",header=F) 21 | 22 | } 23 | } 24 | set.seed(1234) 25 | source(paste(datapath,"/LSAfunction.R",sep="")) 26 | data = read.csv(inputfile,sep="\t",header = TRUE) 27 | 28 | #refernce genome to check if input data are ordered 29 | #this is only used for RNA-seq data 30 | if (datatype=="R"){ 31 | data=round(data*2)#integer copy number 32 | } 33 | for (j in 1:100){ 34 | 35 | #permute copy number profile from DNA-seq data 36 | if (datatype=="D"){ 37 | region=data[,1:2] 38 | region[,1]=paste("chr",region[,1],sep="") 39 | region$end=region[,2] 40 | colnames(region)=c("chrom","chrompos","end") 41 | region$ID1=paste(region$chrom,"_",region$chrompos,sep="") 42 | permuteCNV=permuteSeg(data,region) 43 | write.table(permuteCNV,paste(permutationPath,"/permute.",j,".CNV.txt",sep=""),col.names = T, row.names=T,quote=F,sep="\t") 44 | }else if (datatype=="R"){ 45 | 46 | #Permutate the copy number profile by genes from the same chromosome into different cells 47 | permuteCNV=permuteGene(data,reference) 48 | 49 | #calculate copy number of genomic bin 50 | regionCNV=BinCNV(reference,permuteCNV,as.numeric(delt)) 51 | write.table(permuteCNV,paste(permutationPath,"/permute.",j,".gene.CNV.txt",sep=""),col.names = T, row.names=T,quote=F,sep="\t") 52 | write.table(t(regionCNV),paste(permutationPath,"/permute.",j,".CNV.txt",sep=""),col.names = T, row.names=T,quote=F,sep="\t") 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /scTree.py: -------------------------------------------------------------------------------- 1 | 2 | from optparse import OptionParser 3 | from Readfile import * 4 | from Edmonds import * 5 | import os,sys 6 | import subprocess 7 | #get the absolute path of input file 8 | def getPath(path): 9 | path1=path.split("/") 10 | if path1[0] == ".": 11 | if (len(path1)==1): 12 | newpath=os.getcwd() 13 | else: 14 | newpath=os.getcwd() 15 | for ele in path1: 16 | if ele !=".": 17 | newpath=newpath+"/"+ele 18 | elif path1[0]=="..": 19 | i = 0 20 | for ele in path1: 21 | if ele == "..": 22 | i=i+1 23 | path2=os.getcwd() 24 | path2=path2.split("/") 25 | newpath="/"+path2[0] 26 | if len(path2)-i > 1: 27 | for j in range(1,len(path2)-i): 28 | newpath=newpath+"/"+path2[j] 29 | for j in range(i,len(path1)): 30 | newpath=newpath+"/"+path1[j] 31 | else: 32 | newpath=path 33 | return newpath 34 | 35 | 36 | def main(): 37 | usage = "usage: python %prog <-P path> <-I input> <-D datatype>" 38 | description = "Input integer copy number profile. Columns correspond to chromosomal position. Rows correspond to cells." 39 | op = OptionParser(version="%prog 1.0",description=description,usage=usage,add_help_option=False) 40 | op.add_option("-h","--help",action="help", 41 | help="Show this help message and exit.") 42 | op.add_option("-P","--Path",dest="Path",type="str", 43 | help="Path to script") 44 | op.add_option("-I","--Input",dest="Input",type="str", 45 | help="Input file") 46 | op.add_option("-G","--Genome",dest="Genome",type="str", 47 | help="Genome version hg19 or hg38") 48 | op.add_option("-O","--Output",dest="Output",type="str", 49 | help="Output path") 50 | op.add_option("-D","--Datatype",dest="Datatype",type="str", 51 | help="The type of input data. Either D (DNA-seq) or R (RNA-seq).") 52 | op.add_option("-W","--Windows",dest="Windows",type="str", 53 | help="the number of genes you want to merge when you input copy number profile inferred from scRNA-seq. Default 30.") 54 | op.add_option("-R","--Permutation",dest="Permutation",type="str", 55 | help="Whether reconstructed permuted tree (T) or not (F). If not, permuted copy number profile will be used to perform LSA. Default value is F due to time cost.") 56 | 57 | (options,args) = op.parse_args() 58 | # check input parameters. Package path, input file, data type and genome version are required. 59 | if not options.Path or not options.Input or not options.Datatype or not options.Genome: 60 | op.print_help() 61 | sys.exit(1) 62 | 63 | # get the input parameters 64 | currentPath=os.getcwd() 65 | scTreepath=options.Path 66 | scTreepath=getPath(scTreepath) 67 | filename=options.Input 68 | filename=getPath(filename) 69 | hg=options.Genome 70 | if not options.Output: 71 | outpath=currentPath 72 | else: 73 | outpath=options.Output 74 | outpath=getPath(outpath) 75 | os.system("mkdir -p "+outpath) 76 | os.chdir(outpath) 77 | datatype=options.Datatype 78 | os.system("mkdir temp") 79 | writename=outpath+"/CNV.tree.txt" 80 | os.chdir(outpath+"/temp") 81 | if not options.Permutation: 82 | permutation = "F" 83 | else: 84 | permutation=options.Permutation 85 | print "Transfer data to segmental level" 86 | 87 | #change the input copy number profile to the matrix format used to infer Tree 88 | #if the data type = R, estimate integer copy number profile by merging the number of adjacent genes. 89 | #Default number of genes is 30. 90 | if datatype == "D": 91 | os.system("Rscript "+scTreepath+"dataTransfer.R "+filename+" "+datatype) 92 | elif datatype == "R": 93 | if not options.Windows: 94 | print "The number of genes which are merger into the bin is default value 30. If you want change it please specify the value through -W" 95 | delt = str(30) 96 | else: 97 | delt=options.Windows 98 | os.system("Rscript "+scTreepath+"dataTransfer.R "+filename+" "+datatype+" "+scTreepath+" "+delt) 99 | else: 100 | print "Please provide the correct inputfile type through -D either 'D' or 'R'." 101 | CNVfile=filename+".CNV.txt" 102 | print "Inferring MEDALT." 103 | 104 | #Identifying root node from input file. 105 | #If a diploidy genome is not input, will add an extra diploidy node as root 106 | (nodes,root) = read(CNVfile) 107 | node_name_list = nodes.keys() 108 | 109 | #calculation of MED distance 110 | g = create_tree(nodes, node_name_list,root) 111 | 112 | #Inference of tree and output 113 | result = compute_rdmst(g, root) 114 | write=open(writename,'w') 115 | tree=result[0] 116 | out1="from"+"\t"+"to"+"\t"+"dist" 117 | print >> write, out1 118 | for ele in tree.keys(): 119 | out=ele 120 | for value in tree[ele].keys(): 121 | out1=out+"\t"+value+"\t"+str(tree[ele][value]) 122 | print >> write,out1 123 | write.close() 124 | print "MEDALT inferrence finish." 125 | 126 | #Permutation process for lineage speciation analysis (LSA) 127 | #Permutate the copy number profile by chromosome into different cells 128 | #if permutation == T, tree corresonds to each permuted data will be inferred by above algorithm 129 | # we infer 100 permutation tree due to the cost of time 130 | #if permutation == F, just the permutation datasets rather than permutation tree are used to estimate the significance. 131 | # we permute 500 times. 132 | #This process is done by R code. 133 | if permutation == "T": 134 | permutationPath=outpath+"/temp" 135 | print "Reconstructing tree based on permutation data." 136 | print "This will take a long time! Please have some coffee." 137 | 138 | #permute copy number profile 139 | if datatype == "D": 140 | os.system("Rscript "+scTreepath+"permutationCNA.R "+scTreepath+" "+filename+" "+datatype+" "+permutationPath) 141 | elif datatype == "R": 142 | os.system("Rscript "+scTreepath+"permutationCNA.R "+scTreepath+" "+filename+" "+datatype+" "+permutationPath+" "+delt+" "+hg) 143 | 144 | #Infer permutation tree 145 | for j in range(1,101): 146 | permutefile=permutationPath+"/permute."+str(j)+".CNV.txt" 147 | (nodes,root) = read(permutefile) 148 | node_name_list = nodes.keys() 149 | g = create_tree(nodes, node_name_list,root) 150 | result = compute_rdmst(g, root) 151 | permuteTree=permutefile+".celltree.txt" 152 | write=open(permuteTree,'w') 153 | tree=result[0] 154 | out1="from"+"\t"+"to"+"\t"+"dist" 155 | print >> write, out1 156 | for ele in tree.keys(): 157 | out=ele 158 | for value in tree[ele].keys(): 159 | out1=out+"\t"+value+"\t"+str(tree[ele][value]) 160 | print >> write,out1 161 | write.close() 162 | print "Pemutation tree finish." 163 | print "Performing LSA." 164 | 165 | #Identifying CNAs associated with cellular lineage expansion. 166 | os.system("Rscript "+scTreepath+"LSA.tree.R "+scTreepath+" "+filename+" "+writename+" "+CNVfile+" "+outpath+" "+datatype+" "+hg+" "+permutationPath) 167 | elif permutation == "F": 168 | print "Performing LSA." 169 | os.system("Rscript "+scTreepath+"LSA.tree.R "+scTreepath+" "+filename+" "+writename+" "+CNVfile+" "+outpath+" "+datatype+" "+hg) 170 | os.chdir(outpath) 171 | print "Done!" 172 | os.system("rm -r temp") 173 | os.system("rm "+CNVfile) 174 | 175 | if __name__ == "__main__": 176 | 177 | try: 178 | main() 179 | except KeyboardInterrupt: 180 | sys.stderr.write("User interrupt me, see you!\n") 181 | sys.exit(0) 182 | --------------------------------------------------------------------------------