FastQ数据质量值转换

不同的平台测出来的数据采用的质量编码格式一般会有差异。关于FastQ的格式介绍可以阅读《FastQ格式介绍》

譬如sanger的编码采用的是质量值+33,而Soleax采用的是质量值+64。有时候由于特殊情况需要转换一下编码格式,用perl写有点麻烦而且运行速度也不咋地。下面给大家推荐一款我自己用c++写的程序。

在该程序的第58行,readqual[i]=readqual[i] +31; 由于我们这个程序是把phred33编码格式转换成Soleax64的,新的编码格式里面每个字母的质量需要增加31. 如果用于其他转码用途大家自己根据需要改一下这一行就可以了。

 

  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4. #include <cstdlib>
  5.  
  6. using namespace std;
  7. int main(int argc,char *argv[])
  8. {
  9. ifstream Readsin; // 输入文件句柄
  10. ofstream Readsout; // 输出文件句柄
  11.  
  12. if(argc != 3)//三个参数,这个值是3,还有一个是程序名称
  13. {
  14. cout << "ERROR: illegal argument number: " << argc << endl;
  15. cout << "Usage:\n"
  16. << "\tInput format:\n"
  17. << "\t\tphred33to64 FastaqFile_33 FastaqFile_64 \n" << endl;
  18. exit(0);
  19. }
  20.  
  21. Readsin.open(argv[1]);//参数从1开始,0是名称
  22. Readsout.open(argv[2]);
  23.  
  24. if(!Readsin.good()) // 检查 输入文件是否存在以及被打开
  25. {
  26. cout << "ERROR: illegal input file path: " << argv[1] <<endl;
  27. cout << "Usage:\n"
  28. << "\tInput format:\n"
  29. << "\t\tphred33to64 FastaqFile_33 FastaqFile_64 \n" << endl;
  30. exit(0);
  31. }
  32. if(!Readsin.good()) // 检查 输出文件是否可以被创建
  33. {
  34. cout << "ERROR: illegal input file path: " << argv[2] <<endl;
  35. cout << "Usage:\n"
  36. << "\tInput format:\n"
  37. << "\t\tphred33to64 FastaqFile_33 FastaqFile_64 \n" << endl;
  38. exit(0);
  39. }
  40. //
  41. cout << "Filtering Reads ...." << endl;
  42. string readname;
  43. string readseq;
  44. string readlinker;
  45. string readqual;
  46. int Readslength;
  47. while (Readsin != NULL)
  48. {
  49. getline(Readsin,readname,'\n');
  50. getline(Readsin,readseq,'\n');
  51. getline(Readsin,readlinker,'\n');
  52. getline(Readsin,readqual,'\n');
  53.  
  54. Readslength=readseq.length();
  55.  
  56. for (int i=0;i<Readslength;i++)
  57. {
  58. readqual[i]=readqual[i] +31;//修改31来自定义该软件的转码方式
  59. }
  60. Readsout << readname << endl;
  61. Readsout << readseq << endl;
  62. Readsout << readlinker<<endl;
  63. Readsout << readqual << endl;
  64. }
  65. Readsout.close();
  66. Readsin.close();
  67. return 0;
  68. }

 

发表评论

匿名网友

拖动滑块以完成验证
加载失败