コード例 #1
0
ファイル: fastq_validator.c プロジェクト: hjanime/irap
// return 0 on sucess, 1 otherwise
inline int validate_entry(char *hdr,char *hdr2,char *seq,char *qual,unsigned long linenum,const char* filename) {
  
  // Sequence identifier
  if ( hdr[0]!='@' ) {
    fprintf(stderr,"Error in file %s, line %lu: sequence identifier should start with an @ - %s\n",filename,linenum,hdr);
    return 1;
  }  
  if ( hdr[1]=='\0' || hdr[1]=='\n' || hdr[1]=='\r') {
    fprintf(stderr,"Error in file %s, line %lu: sequence identifier should be longer than 1\n",filename,linenum);
    return 1;
  }
  // sequence
  unsigned int slen=0;
  while ( seq[slen]!='\0' && seq[slen]!='\n' && seq[slen]!='\r' ) {
    // check content: ACGT acgt nN 0123....include the .?
    if ( seq[slen]!='A' && seq[slen]!='C' && seq[slen]!='G' && seq[slen]!='T' &&
	 seq[slen]!='a' && seq[slen]!='c' && seq[slen]!='g' && seq[slen]!='t' &&
	 seq[slen]!='0' && seq[slen]!='1' && seq[slen]!='2' && seq[slen]!='3' &&
	 seq[slen]!='n' && seq[slen]!='N' && seq[slen]!='.' ) {
      fprintf(stderr,"Error in file %s, line %lu: invalid character '%c' (hex. code:'%x'), expected ACGTacgt0123nN.\n",filename,linenum+1,seq[slen],seq[slen]);
      return 1;
    }
    slen++;
  }
  // check len
  if (slen < MIN_READ_LENGTH ) {
    fprintf(stderr,"Error in file %s, line %lu: read length too small - %u\n",filename,linenum+1,slen);
    return 1;
  }
  // hdr2=+
  // be tolerant
  //if (hdr2[1]!='\0' && hdr2[1]!='\n' && hdr2[1]!='\r') {
  //  fprintf(stderr,"Error in file %s, line %lu:  header2 wrong. The line should contain only '+' followed by a newline.\n",filename,linenum+2);
  //  return 1;
  //}  
  if (hdr2[0]!='+') {
    fprintf(stderr,"Error in file %s, line %lu:  header2 wrong. The line should contain only '+' followed by a newline or read name (header1).\n",filename,linenum+2);
    return 1;
  }
  // length of hdr2 should be 1 or be the same has the hdr1
  // ignore the + sign
  hdr2=&hdr2[1];
  hdr=&hdr[1];
  if (hdr2[0]!='\0' && hdr2[0]!='\r' ) {
    if ( !compare_headers(&hdr[1],&hdr2[1]) ) {
      fprintf(stderr,"Error in file %s, line %lu:  header2 differs from header1\nheader 1 \"%s\"\nheader 2 \"%s\"\n",filename,linenum,hdr,hdr2);
      return 1;
    }
  }
  // qual length==slen
  unsigned int qlen=0;
  while ( qual[qlen]!='\0' && qual[qlen]!='\n' && qual[qlen]!='\r') {
    qlen++;    
  }  
  if ( qlen!=slen ) {
    fprintf(stderr,"Error in file %s, line %lu: sequence and quality don't have the same length %u!=%u\n",filename,linenum+3,slen,qlen);
    return 1;
  }
  return 0;
}
コード例 #2
0
bool TCPStreamDialog::compareHeaders(segment *seg)
{
    return (compare_headers(&graph_.src_address, &graph_.dst_address,
                         graph_.src_port, graph_.dst_port,
                         &seg->ip_src, &seg->ip_dst,
                         seg->th_sport, seg->th_dport,
                            COMPARE_CURR_DIR));
}