IGV提供了BLAT,用于进行序列搜索,但可惜我一直用不上,因为它默认是调用了UCSC的CGI工具,将我们的输入序列发送到https://genome.ucsc.edu/cgi-bin/hgBlat处理,处理后返回JSON文件用于展示。因此,除非我们自己搭建一个UCSC类似的网站,否则,无法用到IGV的这个功能。

我觉得肯定不只是我一个人有这个问题,所以我就去谷歌上用关键词 “custom genome BLAT IGV” 进行检索, 果然发现有很多人都有类似的需求,我找到最早一条是2016年,但是距今6年了,仍旧没有一个直观有条理的文章介绍应该怎么做。于是就有了这篇文章。

之所以没有一篇合适的教程,是因为很多人(包括我在内)都冲着自建UCSC的网页服务,然而这条路非常的艰难。但是经过我的检索和测试后,我发现,我们实际上只需要做到向服务器发送一条请求,然后得到包含所需信息的JSON即可。

本篇教程要求

  • Windows10的WSL或者Linux虚拟机或者有管理员权限的Linux服务器(ubuntu系统)

  • IGV ≥ 2.10.3

配置BLAT

我们可以用其他工具代替BLAT,只要保证返回的输出结果是PSL格式或者能转成PSL格式即可。

首先,安装BLAT

wget https://users.soe.ucsc.edu/~kent/src/blatSrc35.zip
unzip blatSrc35.zipexport MACHTYPE=x86_64
mkdir -p ~/bin/$MACHTYPE# 软件安装在$HOME/bin/x86_64下
make -j 

接着,将fa转成2bit格式,方便blat调用

# 家目录
mkdir genomes
cd genoems
mkdir twoBit
# 设置参考基因组组, 例如Athaliana
ref=Athaliana.fa
$HOME/bin/x86_64/faToTwoBit $ref twoBit/Athaliana.2bit

配置Apache CGI

在安装了blat之后,下一个问题就是如何让服务器调用。这里我使用的是Apache的CGI服务。CGI全称是Common Gateway Interface,公共网关接口,根据维基百科的定义,CGI就是用于让服务器执行外部程序,特别是处理用户的请求

In computing, Common Gateway Interface (CGI) is an interface specification that enables web servers to execute an external program, typically to process user requests.[1]

首先,我们需要安装Apache。Ubuntu就是运行如下的命令

sudo apt install apache2

默认apache的配置文件在 /etc/apache2下,没有启用CGI模块,因此我们需要先启动这个模块

#该目录记录的是哪些模块被启用了
cd /etc/apache2/mods-enabled
# 添加cgi.load
sudo ln -s ../mods-available/cgi.load .

重新加载即可

sudo service apache2 reload

为了测试CGI服务器是否打开,我们创建一个 hw.sh 进行测试,将其复制到 /usr/lib/cgi-bin

#!/bin/bash
printf "Content-type: text/html\n\n"
printf "Hello World!\n"

通过curl向我们的网页服务器发送一个请求,会返回 Hello World!.

# 启用cgi-bin
$ curl http://127.0.0.1/cgi-bin/hw.sh
Hello World!

在确认CGI服务器启动之后,那么就可以将我用Python编写用于处理BLAT请求的CGI脚本,我将其命名为 myBlat ,复制到/usr/lib/cgi-bin下。

该代码比较简陋,没有考虑多个参考基因组的情况,也没有各种报错检测,但至少能运行了

#!/usr/bin/env python3
import os
import json
import cgitb
import cgi
import tempfile
import subprocesscgitb.enable(display=0, logdir="/tmp/logdir")form = cgi.FieldStorage()
seq = form.getvalue("userSeq")
db = form.getvalue("db")# 需要改成你实际的blat路径
blat = "/home/xzg/bin/x86_64/blat"
# 需要改成你实际的参考位置
ref = "/home/xzg/genomes/twoBit/Athaliana/Athaliana.2bit"fd1, fa_file = tempfile.mkstemp(suffix=".fa")
fd2, psl_file = tempfile.mkstemp(suffix=".psl")with open(fa_file,"w") as f:f.write(f">query\n{seq}\n")process = subprocess.Popen([blat, ref, fa_file, psl_file],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
stdout,stderr = process.communicate()psl_ret = [line for line in open(psl_file, "r") ]
psl_rec = [line.strip().split('\t') for line in psl_ret[5:] ]print("Context-type: application/json\n")data =  {"track": "blat","genome": "ath","fields": ["matches", "misMatches", "repMatches", "nCount", "qNumInsert", "qBaseInsert", \"tNumInsert", "tBaseInsert", "strand", "qName", "qSize", "qStart", "qEnd", "tName", \"tSize", "tEnd", "blockCount", "blockSizes", "qStarts", "tStarts"],"blat" : psl_rec
}print(json.dumps(data))

配置IGV

最后,我们回到IGV,选择View里的Preferences

然后选择Adanved, 修改其中的Blat url

http://127.0.0.1/cgi-bin/myBlat?userSeq=$SEQUENCE&type=DNA&db=$DB&output=json

需要注意的是 127.0.0.1 , 因为我用的是WSL,所以网页服务架设在localhost。如果使用的是虚拟机,或者用的是内网服务器,那么该地址,应该是虚拟机或者内网服务器的IP地址。

此外,我们可以注意到这里面有两个$开头的变量,SEQUENCE和DB,分别对应我们输入的序列,以及我们当前参考基因组的名字,Athaliana.fa.

BLAT运行后返回如下界面,点击对应的行,就可以跳转到对应联配中。

如何在IGV上使用BLAT搜索非模式物种相关推荐

  1. 如何在IGV上使用BLAT搜索非模式物种(续)

    在如何在IGV上使用BLAT搜索非模式物种中,我们讨论如何用Apache的CGI服务器,来响应IGV发送的BLAT请求.考虑到我们大部分的时候都是个人使用,并不需要Apache这种重量级的Web服务器 ...

  2. 基于 bioMart 构建绵羊(非常见物种) OrgDb 包/数据库

    OrgDb (organism database)文件主要用于基因注释.ID转换.GO富集分析等,Bioconductor - BiocViews 仅提供部分物种正式发布的 OrgDb 包.此外还可通 ...

  3. 如何在 GitHub 上高效搜索开源项目(转载)

    如何在 GitHub 上高效搜索开源项目 查看全文 http://www.taodudu.cc/news/show-1347360.html 相关文章: Mybatis.cfg配置标签的顺序问题 To ...

  4. 如何在GitHub上搜索提交消息?

    本文翻译自:How to search for a commit message on GitHub? 不是在Git仓库中 ,而是在GitHub中 - 我如何只搜索特定仓库/分支的提交消息? #1楼 ...

  5. 如何在StackOverflow上获得第一个标签徽章-以及为什么它很重要。

    by Angelos Chalaris 通过安吉洛斯·查拉利斯(Angelos Chalaris) 如何在StackOverflow上获得第一个标签徽章-以及为什么它很重要. (How to get ...

  6. 如何在 FPGA 上实现双线性插值的计算?

    作者 | 殷庆瑜 责编 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 本文主要讨论了如何在FPGA上实现双线性插值的计算.Interp和Resize是Yolo_v2,Yolo_v3和Fas ...

  7. 如何在QEMU上执行iOS并启动一个交互式bash shell,内含整个安装流程并且提供了相关工具(二)

    我们在上一篇文章中介绍如何在QEMU上执行iOS并启动一个交互式bash shell,在第这篇文章中,我们将详细介绍为实现这些目标所进行的一些具体的项目研究. 本文的研究项目是以该项目为基础进行的,我 ...

  8. 机器学习之网格搜索技术,如何在Auto-sklearn中应用网格搜索技术

    文章目录 一,机器学习中的网格搜索技术是怎么回事 二,通俗解释 三,在一般情况下使用网格搜索技术 四,GridSearchCV网格搜索技术的原理 五,如何在Auto-sklearn中使用网格搜索技术 ...

  9. 如何在iPhone上设置和使用Siri

    Siri has a bad reputation among many, but it's perfectly usable for most tasks, and if you're knee-d ...

  10. 如何在CPU上优化GEMM矩阵乘法

    如何在CPU上优化GEMM矩阵乘法 How to optimize GEMM on CPU (TL;DR) TVM 提供抽象接口,允许用户分别描述算法和算法的实现组织(所谓的调度).通常,在高性能调度 ...

最新文章

  1. Spring Boot 监听 Redis Key 失效事件实现定时任务
  2. 留着肯定有用,让你脱胎成技术大神的JAVA开发技巧
  3. Worktile 技术架构概要
  4. java中replace函数
  5. 姚期智:中国金融科技发展的真正挑战是什么?如何解决? 本文作者:温晓桦 2017-09-17 18:31 导语:“在金融科技里面,计算机科学的用途已经从台后走到了台中,对核心金融体系的运作上产生一定的
  6. 布道微服务_10注册中心与RPC框架的选型
  7. 读书笔记:如何投论文
  8. 传说之下地图素材_文旅黄陵——轩辕黄帝传说故事(十一) 杜康酿酒的传说...
  9. C# 静态类和非静态类(实例类)
  10. html ie7高度,在HTML,IE6和IE7中工作的HTML垂直和水平居中的实用解决方案
  11. 知识图谱入门2-2:用户输入->知识库的查询语句
  12. System Center Configuration Manager 2016 域准备篇(Part2)
  13. 一篇文章彻底搞懂什么是电厂智能巡检系统?
  14. FreeBSD 下玩 FC 游戏
  15. js找出两个数组中的重复项
  16. w ndows无法完成格式化,windows无法完成格式化怎么办【图文教程】
  17. 《黑白团团队》第九次团队作业:Beta冲刺第一天
  18. PHP抓取页面中a标签的href属性值以及a中间内容
  19. 第九周-求一元二次函数的根
  20. linux安装卸载软件

热门文章

  1. 看完《二舅》,我更内耗了
  2. 大鱼吃小鱼小游戏完整版
  3. YDOOK:STM32: CH340G 芯片介绍 USB 转串口芯片
  4. linux smb无密码错误,smb无法登录提示用户名密码不正确错误排查
  5. jquery学习总结
  6. 计算机硬件环境指啥,硬件环境指的是什么呢?
  7. radius服务器无响应,radius认证(radius认证超时)
  8. 服务器抓不到mrcp协议,MRCP协议学习笔记-语音识别资源的概括和全部Methods
  9. 将一个大文件分割为若干个小文件的方法
  10. 我的Android进阶之旅------报 error: Apostrophe not preceded by \ 的错误解决办法