问题及解决方法
- IGV.js 完全本地化是为了合规,不使用外网的情况下查看基因组。
- 不联网需要下载 genomes.json 文件及其中的内容之外,还需要修改 igv.js本身,防止5s超时后才显示网页内容。修改的关键词是:
genomes.json
,改为本地的。 - 这时搜索功能障碍,可以搜索定位
chr1:12345
这样的位点,不能搜索EGFR
这样的基因字符串。还是要修改js文件,具体方法见下文。
版本号: igv.version() #'2.15.10'
怎么本地支持搜索?
1. 需要修改的地方
(1) 线索1a:该函数的返回值是什么类型的?
function searchWebService(browser, locus, searchConfig){ //57722
//
const result = await igvxhr.loadString(path, options);
//
}
(2) 线索1b: 先看参数类型
igvxhr.loadString(path, options); // line 57728
debug wjl: 1 EGFR https://igv.org/genomes/locus.php?genome=hg38&name=EGFR {timeout: 5000}
参数
cocus: EGFR
path: https://igv.org/genomes/locus.php?genome=hg38&name=EGFR
options: {timeout: 5000}
(3) 线索1c: 返回值
不确定,只能根据代码推测
return this._loadStringFromUrl(path, options)
async _loadStringFromUrl(url, options) {
options = options || {};
options.responseType = "arraybuffer";
const data = await this.load(url, options);
return arrayBufferToString(data)
}
this.load(url, options); 中引用的是
return this._loadURL(url, options) //18672
xhr.send(sendData); //18825
(4) 线索1d: ajax 的请求链接
url: 'https://igv.org/genomes/locus.php?genome=$GENOME$&name=$FEATURE$', //57547
https://igv.org/genomes/locus.php?genome=hg38&name=EGFR
2. 从下文代码找线索,需要什么数据?
(1) 线索2a: 下一行怎么使用该数据?
const locusObject = processSearchResult(browser, result, searchConfig);
找到最相关的 const locusObject = {chr, start, end}; //57796
const result = //手动设置,确认格式 //57731
这里很关键
(2) 线索2b: 该函数调用 parseSearchResults
function processSearchResult(browser, result, searchConfig) { //57750
if ('plain' === searchConfig.type) {
console.log("debug wjl: 4", result, searchConfig ) // ===>>>>debug 11223344
results = parseSearchResults(browser, result);
}
(3) 线索2c: 这是最终格式
* Parse the igv line-oriented (non json) search results.
* Example
* EGFR chr7:55,086,724-55,275,031 refseq
function parseSearchResults(browser, data) { //57827
}
(4) 这个格式怎么修改? 就是 refseq的第13,3,5和第6列。
$ zcat ref/hg38/ncbiRefSeq.txt.gz | awk '{print $13"\t"$3":"$5"-"$6"\trefseq"}' | grep "EGFR" | head -n1
EGFR chr7:55019016-55156939 refseq
(5) 回退到上一步
57843行 line="EGFR\tchr7:55019016-55156939\trefseq"
57731 const result = "EGFR\tchr7:55019016-55156939\trefseq"
57547 url: 'https://igv.org/genomes/locus.php?genome=$GENOME$&name=$FEATURE$',
(6) 设置一个支持cors的、返回字符串的服务器,返回值是
zcat /home/wangjl/soft/scIGV/ref/hg38/ncbiRefSeq.txt.gz | awk '{print $13"\t"$3":"$5"-"$6"\trefseq"}' | grep "CCND1\t" | head -n 1
其他关键技术点:文章来源:https://www.toymoban.com/news/detail-646481.html
- flask 在后台执行 linux 命令
- flask返回支持cors的字符串
- 支持cors和range的bam大文件服务器
幸运的是,这些之前都解决过。文章来源地址https://www.toymoban.com/news/detail-646481.html
到了这里,关于IGV.js 的完全本地化运行探索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!