0. 结论

在使用TopHat2匹配双端测序结果后,建议根据成对reads的map基因组位置唯一、方向正确和距离合适的标准,筛选得到的匹配结果。比如,TopHat2可能生成accepted_hits.bam文件,处理方法如下:

Filter TopHat Outputs
1
2
3
4
5
6
7
8
9
10
11
# 首先查看bam文件头部有多少行
$ samtools view -H accepted_hits.bam | wc -l
86

# 筛选成对且成功map到基因组唯一位置的reads,按照上一条输出结果,调整“NR <= 86”
$ samtools view -h accepted_hits.bam | \
    awk '{if (NR <= 86) print $0}; {if($5 == 50 && ($2 == 163 || $2 == 147 || $2 == 83 || $2 == 99)) print $0}' | \
    samtools view -b - > accepted_filtered.bam

$ samtools view accepted_filtered.bam | wc -l
79143942

1. TopHat输出sam文件的第五列

TopHat文档没有解释其输出bam文件(比如accepted_hits.bam)的第五列的意义。按照Bowtie2输出结果来看,是表示映射质量指标Mapping Quality scores(MAPQ),具体计算参考公式$\eqref{eq:1}$。

同时在一台电脑上使用多个版本的Python,可以通过pyenv控制和管理。

1. 安装方法

1
2
3
4
5
6
7
8
9
$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv

# 写入路径信息
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc

# 重新载入
$ source ~/.bashrc

1. 基本数据类型

1.1 算术类型

类型 解释 说明 注意事项 本地字节数
short 有符号短整数 完整形式signed short intsingedint可以省略 最左边一位表示符号,0为正数,1为负数 2
unsigned short 无符号短整数 完整形式unsigned short intint可以省略 全部位占满 2
int 有符号整数 完整形式signed intsinged可以省略 最左边一位表示符号,0为正数,1为负数 4
unsigned int 无符号整数   全部位占满 4
long 有符号长整数 完整形式为signed long intsingedint可以省略 最左边一位表示符号,0为正数,1为负数 8
unsigned long 无符号长整数 完整形式为unsigned short intint可以省略 全部位占满 8
long long 无符号长长整数 完整形式为signed long long intsingedint可以省略 C99特有 8
unsigned long long 有符号长长整数 完整形式为unsigned long long intint可以省略 C99特有 8
char 字符 实质是“小整数”(可能比短整数占用字节更少) 分为charsinged charunsigned char。使用单引号标记常量,比如'A'为65) 1
_Bool 布尔型整数 实质是无符号整数 只能赋值0或1,赋值_Bool类型变量为非零值会导致赋值为1 1
float 单精度浮点数     4
double 双精度浮点数     8
long double 扩展精度浮点数     16
  • 强制编辑器处理常量为长整数(十进制、八进制和十六进制),1135L;强制处理为无符号,1135U;混合使用,1135ULUL顺序和大小写不重要。 C99中增加了ll或者LL后缀,强制long long int型整数,可以与uU连用。避免无符号和有符号整数混用,特别是无符号和有符号整数比较,会产生意想不到的后果

  • 强制编辑器处理常量为单精度浮点数,11.3f11.3会被认为是double型;强制为双精度,11.3L或者11.3l(这里看出使用L更好,因为l会被误认为数字1)。

  • 强制类型转化表达式的一般形式为:(int) floatNumber。C语言把(type)视为一元运算符,所以其等级高于二元运算符。

  • 类型定义一般形式为:typedef int Newint;,注意结尾的。区别与使用宏定义类型,函数体内定义的typdef变量在函数体外无法使用,而宏可以作用于任何对应位置。

  • sizeof运算符一般形式为:sizeof(type),比如sizeof(long int)计算int类型占用多少个字节。sizeof表达式的类型是size_t(无符号整数),所以安全的方法是强制转换为unsigned long型,比如(unsigned long) sizeof(int)。括号不是强制需要,加上括号防止因为优先级不同而引起歧义。可以应用与常量、变量或者表达式。