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) > 300ENDn
表示区域的终止位置,示例用法var(end) < 500POSn
表示区域的中心点的位置,示例用法var(position1) < 500SIZEn
表示区域的长度,示例用法var(size1) < 5mbREVn
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 即可。
扫描关注微信号,更多精彩内容等着你!
