rules
是circos
中的一種黑魔法,可以在不改變數據的情況下,對展現形式進行調整。rules
代表規則,本質上就是編程語言中的條件判斷語句, 首先給定一個條件,當符合條件時,執行具體的行為。
基本示例如下:
<rule>
condition ?= var(intrachr)
show ?= no
</rule>
condition
定義的就是條件,示例中的show = no
就是條件滿足時需要執行的事情。
在定義condition
時,有以下3種形式
1. condition = 1
這種寫法表示條件永遠成立,直接執行后面的行為即可
2. ?var
通過var
獲取對應字段的值, 這里的字段分成兩種,一種是數據文件中的值,比如plots
對應的數據文件都會有value
值,另外一種是系統內置的,會自動計算的值,比如自動計算區間的長度,用size
表示,常用字段有以下幾種, 其中的n
用于區分多個區域,比如link
連接2個區域,第一個區域為1,第二個區域為2; 當只有一個區域時,比如highlights
, plots
中,就不需要添加n
了
CHRn
返回染色體的名字,示例用法var(chr) eq "hs1"
STARTn
返回區域的起始位置, ?示例用法var(start) > 300
ENDn
表示區域的終止位置,示例用法var(end) < 500
POSn
表示區域的中心點的位置,示例用法var(position1) < 500
SIZEn
表示區域的長度,示例用法var(size1) < 5mb
REVn
links
獨有的字段,判斷某個區域是否反向,如果起始位置大于終止位置,代表是反向的,返回值為1,否則返回值為0, 示例用法condition = var(rev1)
INV
links
獨有的字段,如果一個link連接的兩個區域方向不同,一個正向,一個反向,返回值為1,其他情況返回值為0,示例用法condition = var(inv)
INTERCHR
links
獨有的字段,如果一個link連接的兩個區域位于兩條染色體上,返回值為1,其他情況返回值為0,示例用法condition = var(interchr)
INTRACHR
links
獨有的字段 ,如果一個link連接的兩個區域位于同一條染色體上,返回值為1,其他情況返回值為0,示例用法condition = var(intrachr)
對于數據文件而言,可以在其中添加對應的系統屬性,也可以添加自定義的屬性,下面的例子展示了如何訪問數據文件中定義的color
和thickness
屬性
<rule>
condition ?= var(color) ne “grey” && var(thickness) == 2
z = 5
</rule>
&&
符號代表與的意思,只有兩個條件同時滿足時,才符合這個condition
的條件。
3. 函數
共有下面9種函數
conf
conf
用于獲取配置文件中設定的參數的值,示例conf(plots,color_alt)
, 返回值為plots
這個block中,設定的color_alt
參數的值on
on
用于判斷是否在某條染色體或者某段區間上,用法示例on(hs1)
within
within
和on
的作用類似,用法示例within(hs2,40Mb,80Mb)
between
links
獨有的函數,判斷·是否在兩條染色體之間,用法示例between(hs2,hs3)
fromto
links
獨有的函數,判斷連線的方向,用法示例fromto(hs2,hs3)
tofrom
和tofrom
類似,只不過方向相反,用法示例tofrom(hs2,hs3)
from
links
獨有的函數,判斷連線的起始位置,用法示例from(hs1)
to
links
獨有的函數,判斷連線的終止位置,用法示例to(hs1)
chrlen
返回染色體的長度,用法示例chrlen(hs1)
了解了條件如何定義之后,就需要看條件符合時,可以執行哪些行為。要定義一個rules
的行為,必須結合其上下文環境。從下面的結構圖可以看到,rules
可以出現在ideogram
, highligjts
, plots
, links
這4種block 中。行為本質上就是可以調整的屬性值,所以對于不同的block
, 其屬性值不同。
由于不同block
下對應的參數特別多,就不具體展開了。對于每個block
下對應屬性的詳細信息,可以翻閱之前的文章。
掌握了條件和行為的定義之后,理解單個rule
的作用就沒有問題了。但是rules
是由多個rule
構成,當多個rule
放在一起是,其條件判斷是怎么樣的呢?
看一個例子
對于value = 1
的點而言,其顏色最終是什么呢?
答案是red
, 因為只要遇到第一個符合條件的rule
之后,就不在判斷后續的其他rules
了。所以最終的顏色是紅色。這種條件判斷的邏輯實際上是由flow
這個參數控制的
有個參數控制了多個rule
存在時條件判斷的邏輯,這個參數就是flow
。flow
的取值有以下6種
continues if true
continues if false
stop if true
stop if false
restart if true
restart if false
默認值為continues if false
, 只有當不符合當前條件時,才會判斷是否符合下一個條件,對于上面的示例,如果想要點變成藍色,只需要設置flow = continues if true
即可。
掃描關注微信號,更多精彩內容等著你!