問題及解決方法
- 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: EGFRpath: https://igv.org/genomes/locus.php?genome=hg38&name=EGFRoptions: {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) //18672xhr.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}; //57796const result = //手動設置,確認格式 //57731
這里很關鍵
(2) 線索2b: 該函數調用 parseSearchResults
function processSearchResult(browser, result, searchConfig) { //57750
if ('plain' === searchConfig.type) {console.log("debug wjl: 4", result, searchConfig ) // ===>>>>debug 11223344results = parseSearchResults(browser, result);
}
(3) 線索2c: 這是最終格式
* Parse the igv line-oriented (non json) search results.* Example* EGFR chr7:55,086,724-55,275,031 refseqfunction 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" | head -n 1
其他關鍵技術點:
- flask 在后臺執行 linux 命令
- flask返回支持cors的字符串
- 支持cors和range的bam大文件服務器
幸運的是,這些之前都解決過。