454ITS数据按barcode和primer分类程序v1.0
不知道有什么好办法可以让primer允许漏配,现在仅仅是允许错配,还是有一些没有配上,454数据有些primer漏配了一些,下一步解决这个问题
#include <cstdio>
#include <cstdlib>
#include <string>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <getopt.h>
using namespace std; int max_mis = ;
int N = ;
string primer = "";
string* barcode = NULL;
string* barcodeName = NULL;
void usage ()
{
cout << "\nUsage: splitByBarcode [options] <read.fasta> <barcode.txt> <output prefix>\n"
<< " -m <int> allow the max mis num, default " << max_mis << "\n"
<< " -p <string> primer, required "<<endl
<< " -n <int> barcode num, required"<<endl;
exit();
}
struct COMPARE{
int ifCompared;
int posStart;
int posEnd;
};
COMPARE compare(string reads, string barcode, int maxmis,int b,int e);
int main(int argc, char *argv[])
{
if (argc < )
{
usage();
}
int c;
while ((c=getopt(argc,argv,"m:n:p:")) != -)
{
switch (c)
{
case 'm' : max_mis = atoi(optarg);break;
case 'n' : N = atoi(optarg); break;
case 'p' : primer = optarg;break;
default : cout<<"error:"<<(char)c<<endl;usage();
}
}
if(N<=){
cerr<<"please input the required barcode num\n";
exit();
}
if(primer == ""){
cerr<<"please input the required primer\n";
exit();
}
string seq_file = argv[optind++];
string barcode_file = argv[optind++];
string outPrefix = argv[optind++];
string out_file = outPrefix + ".list";
barcode = new string[N];
barcodeName = new string[N]; for(int i=;i<N;i++){
barcodeName[i] = "";
barcode[i] = "";
} ifstream reads;
reads.open(seq_file.c_str());
if(!reads){
cerr<<"fail to open input file"<<seq_file<<endl;
}
ifstream barcode_in;
barcode_in.open(barcode_file.c_str());
if(!barcode_in){
cerr<<"fail to open barcode file" <<barcode_file<<endl;
} string text;
int k=;
while( getline( barcode_in, text, '\n') )
{
int startPos = , endPos;
endPos = text.find("\t");
barcodeName[k] = text.substr(startPos, endPos-startPos+);
startPos = endPos + ;
endPos = text.find("\t",startPos);
barcode[k] = text.substr(startPos, endPos-startPos+);
//cout << barcodeName[k] <<"\t"<< barcodeForward[k] <<"\t"<< barcodeReverse[k] << endl;
k++;
} ofstream splitlist;
splitlist.open(out_file.c_str());
if(!splitlist){
cerr<<"fail to creat output file" << out_file <<endl;
}
int line_num = ;
splitlist<<"barcodeName\tid\tid_line\n";
while( getline( reads, text, '\n') )
{
string seq = "", id = "";
id = text;
getline( reads, text, '\n');
seq = text; COMPARE p1 ,p2;
p1.ifCompared = p2.ifCompared = ;
for(int k=;k<N;k++){
p1 = compare(seq,primer,max_mis,,seq.length()-primer.length()+);
if( p1.ifCompared )
{
p2 = compare(seq,barcode[k],,,p1.posStart);
if ( p2.ifCompared ){
//cout<<seq1<<"\t"<<barcodeForward[k]<<"\t"<<seq2<<"\t"<<barcodeReverse[k]<<endl;
splitlist<<barcodeName[k]<<"\t"<<id<<"\t"<<line_num<<endl;
break;
}
}
}
line_num = line_num + ;
}
delete[] barcode;
delete[] barcodeName;
splitlist.close();
barcode_in.close();
reads.close();
}
COMPARE compare(string reads, string barcode, int maxmis, int b, int e)
{
COMPARE p;
//cout<<b<<"\t"<<e<<endl;
// cout<<barcode<<"\t"<<barcode.length()<<endl;
for(int i=b;i<e;i++)
{
int mismatch = ;
int pos = ;
while(mismatch <= maxmis ){
if(reads[i+pos] != barcode[pos]) mismatch++;
pos++;
if(pos == barcode.length()){
p.posStart = i;
p.posEnd = i+pos;
// cout<<p.posStart<<"\t"<<p.posEnd<<endl;
p.ifCompared = ;
return p;
}
}
}
p.ifCompared = ;
return p;
}
454ITS数据按barcode和primer分类程序v1.0的更多相关文章
- 痞子衡嵌入式:kFlashFile v1.0 - 一个基于Flash的掉电数据存取方案
大家好,我是痞子衡,是正经搞技术的痞子.今天给大家带来的是痞子衡的个人小项目 - kFlashFile. 痞子衡最近在参与一个基于 i.MXRT1170 的项目,项目有个需求,需要在 Flash 里实 ...
- ASP.NET Boilerplate终于发布v1.0了
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:ABP经过2年多的开发,终于发布第一个主要版本了,谨此提醒ABP的使用者. ASP.N ...
- 【JS】heatmap.js v1.0 到 v2.0,详细总结一下:)
前段时间,项目要开发热力图插件,研究了heatmap.js,打算好好总结一下. 本文主要有以下几部分内容: 部分源码理解 如何迁移到v2.0 v2.0官方文档译文 关于heatmap.js介绍,请看这 ...
- 基于Qt5.5.0的sql数据库、SDK_tts文本语音朗读的CET四六级单词背诵系统软件的编写V1.0
作者:小波 QQ:463431476 请关注我的博客园:http://www.cnblogs.com/xiaobo-Linux/ 我的第二款软件:CET四六级单词背诵软件.基于QT5.5.0.sql数 ...
- The P4 Language Specification v1.0.2 Header and Fields
前言 本文参考P4.org网站给出的<The P4 Language Specification v1.0.2>的第二部分首部及字段,仅供学习:). 欢迎交流! Header and Fi ...
- 高性能以太网芯片W5500 数据手册 V1.0(二)
继续给大家介绍W5500 数据手册. 2.4 固定数据长度模式(FDM) 在外设主机不能控制 SCSn 时,可以使用固定数据长度模式. 此时,SCSn 必须连接到低电平(保持接地).与此同 ...
- [Android应用]《花界》V1.0 正式版隆重发布!
http://www.cnblogs.com/qianxudetianxia/archive/2012/04/05/2433669.html 1. 软件说明(1). 花界是一款看花软件:“看花,议花, ...
- 【转】寻找最好的笔记软件:三强篇(EverNote、Mybase、Surfulater) (v1.0) (
原文网址:http://blog.sina.com.cn/s/blog_46dac66f01000b57.html 寻找最好的笔记软件:三强篇(EverNote.Mybase.Surfulater) ...
- 《Ruby语言入门教程v1.0》学习笔记-01
<Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...
随机推荐
- js 去掉数组中重复值,不重复的值保留
这里介绍2中方式:js代码如下 var arr=[1,7,3,2,1,4,12,3,"3",3] function compare(arr) { var result = [], ...
- UWP 图片缩放
给Image外面包裹一个ScrollViewer,你会回来感激我的. 哦,对了,PC上需要按住Ctrl键,滑动鼠标滑轮即可:手机上双指就可以缩放. <ScrollViewer ZoomMode= ...
- GET方式提交中文编码问题以及三种解决方式
GET方式提交在WEB中是非常常用的方式,有时候我们在使用GET方式提交请求不得不提交中文,但是TOMCAT等容器对于GET方式的编码问题总是让人折腾. 先说说流程吧: 我们的内容使用GET方式发送, ...
- springboot+thymeleaf(2)
操作步骤 (1)在pom.xml中引入thymeleaf; (2)如何关闭thymeleaf缓存 (3)编写模板文件.html (4)编写访问模板文件controller 1.在pom.xml中引入t ...
- ubuntu16.04 Qt5.8 如何使用opecv3.2
关于opencv3.2的编译有一大堆教程.可自寻查看.在Qt中使用opencv需要在pro文件中添加 相应的头文件和 动态链接库.如下 INCLUDEPATH += . INCLUDEPATH += ...
- java学习笔记之字符流文件复制
字符文件复制 FileReader fr =new FileReader("b.txt");//绑定源文件 FileWriter fw= new FileWriter(" ...
- Codeforces Round #313 (Div. 2) C
题目链接 题意: 有一个六边形,给你6条边的长度(顺时针给出).每条边都是整数,问你它能够被切割成几个单位长度的正三角形 (题目保证给出的数据能够被切割) 思路: 六边形能够被切割成两种情况: ① ...
- 再谈 SharePoint 大局观
作者:陈希章 发表于 2017年12月21日 前言 我对SharePoint这个产品很有感情,因为曾经有相当长一段时间,在很多个夜深人静.月黑风高的晚上,我都是在和它形影不离,在一个一个项目实践中相爱 ...
- 唐纳德 高德纳给年轻人的建议 Donald Knuth - My advice to young people
From: Donald Knuth - My advice to young people (93/97) 译者: 李秋豪 原文 Donald Knuth (b. 1938), American c ...
- Redis4.0.0 安装及配置 (Linux — Centos7)
本文中的两个配置文件可在这里找到 操作系统:Linux Linux发行版:Centos7 安装 下载地址,点这里Redis4.0.0.tar.gz 或者使用命令: wget http://downlo ...