rc_t print_headers( const samdump_opts * opts, input_files * ifs ) { rc_t rc = 0; switch( opts->header_mode ) { case hm_dump : rc = print_org_headers( opts, ifs ); break; case hm_recalc : rc = print_headers_by_recalculating( opts, ifs ); break; case hm_file : rc = print_headers_from_file( opts ); break; case hm_none : break; /* to not let the compiler complain about not handled enum */ } /* attach header comments from the commandline */ if ( rc == 0 && opts->hdr_comments != NULL ) { uint32_t count; rc = VNameListCount( opts->hdr_comments, &count ); if ( rc == 0 && count > 0 ) { uint32_t i; for ( i = 0; i < count && rc == 0; ++i ) { const char * s; rc = VNameListGet( opts->hdr_comments, i, &s ); if ( rc == 0 && s != NULL ) rc = KOutMsg( "@CO\t%s\n", s ); } } } return rc; }
static rc_t ref_walker_prepare( struct ref_walker * self ) { rc_t rc = 0; if ( self == NULL ) rc = RC( rcApp, rcNoTarg, rcConstructing, rcParam, rcNull ); else { uint32_t s_count = 0; rc = VNameListCount ( self->sources, &s_count ); if ( rc == 0 && s_count > 0 ) { uint32_t r_count = count_ref_regions( &self->regions ); if ( r_count == 0 ) { uint32_t idx; for ( idx = 0; idx < s_count && rc == 0; ++idx ) { const char * name = NULL; rc = VNameListGet ( self->sources, idx, &name ); if ( rc == 0 && name != NULL ) rc = ref_walker_prepare_1_src( self, name ); } } } check_ref_regions( &self->regions ); self->prepared = ( rc == 0 ); } return rc; }
static rc_t print_spotgroups( VNamelist * spotgroups, bool from_stats ) { uint32_t count; rc_t rc = VNameListCount( spotgroups, &count ); if ( rc == 0 && count > 0 ) { uint32_t i; for ( i = 0; i < count && rc == 0; ++i ) { const char * s; rc = VNameListGet( spotgroups, i, &s ); if ( rc == 0 && s != NULL ) { if ( from_stats ) { if ( cmp_pchar( s, "default" ) != 0 ) rc = KOutMsg( "@RG\tID:%s\n", s ); } else { rc = KOutMsg( "%s\n", s ); } } } } return rc; }
static rc_t SaveToFile( struct KFile * f, const VNamelist * nl, const char * delim ) { uint32_t count; rc_t rc = VNameListCount ( nl, &count ); if ( rc == 0 && count > 0 ) { uint32_t idx; uint64_t pos = 0; for ( idx = 0; idx < count && rc == 0; ++idx ) { const char * s; rc = VNameListGet ( nl, idx, &s ); if ( rc == 0 && s != NULL ) { size_t num_writ; rc = KFileWriteAll ( f, pos, s, string_size ( s ), &num_writ ); if ( rc == 0 ) { pos += num_writ; rc = KFileWriteAll ( f, pos, delim, string_size ( delim ), &num_writ ); if ( rc == 0 ) pos += num_writ; } } } if ( rc == 0 ) rc = KFileSetSize ( f, pos ); } return rc; }
LIB_EXPORT rc_t CC VNamelistIndexOf( VNamelist *self, const char* s, uint32_t *found ) { rc_t rc; if ( self == NULL ) rc = RC ( rcCont, rcNamelist, rcSearching, rcSelf, rcNull ); else { if ( s == NULL ) rc = RC( rcCont, rcNamelist, rcSearching, rcString, rcNull ); else if ( s[0] == 0 ) rc = RC( rcCont, rcNamelist, rcSearching, rcString, rcEmpty ); else if ( found == NULL ) rc = RC( rcCont, rcNamelist, rcSearching, rcParam, rcNull ); else { uint32_t count; rc = VNameListCount ( self, &count ); if ( rc == 0 ) { uint32_t idx; size_t n1 = string_size ( s ); for ( idx = 0; idx < count; ++idx ) { const char * name; rc = VNameListGet ( self, idx, &name ); if ( rc == 0 ) { size_t n2 = string_size ( name ); if ( string_cmp ( s, n1, name, n2, (uint32_t) ( ( n1 < n2 ) ? n2 : n1 ) ) == 0 ) { *found = idx; return 0; } } } rc = RC( rcCont, rcNamelist, rcSearching, rcString, rcNotFound ); } } } return rc; }
static rc_t foreach_path( visit_ctx * octx, on_path_t func ) { rc_t rc = 0; uint32_t idx; octx->terminate = false; for ( idx = 0; idx < octx->options->path_count && rc == 0 && !octx->terminate; ++idx ) { rc = VNameListGet ( octx->options->paths, idx, &octx->path ); if ( rc != 0 ) { PLOGERR( klogErr, ( klogErr, rc, "VNameListGet( $(idx) ) failed in $(func)", "idx=%u,func=%s", idx, __func__ ) ); } else if ( octx->path != NULL ) { rc = foreach_path_obj( octx, func ); } } return rc; }
static rc_t ref_walker_walk_ref_range( struct ref_walker * self, ref_walker_data * rwd ) { ReferenceIterator * ref_iter; rc_t rc = AlignMgrMakeReferenceIterator ( self->amgr, &ref_iter, &self->cb_block, self->min_mapq ); /* align/iterator.h */ if ( rc == 0 ) { /* construct the reference iterator */ uint32_t idx, count; uint32_t reflist_options = ref_walker_make_reflist_options( self ); /* above */ Vector cur_id_vector; VectorInit ( &cur_id_vector, 0, 12 ); rc = VNameListCount ( self->sources, &count ); for ( idx = 0; idx < count && rc == 0; ++idx ) { const char * src_name = NULL; rc = VNameListGet ( self->sources, idx, &src_name ); if ( rc == 0 && src_name != NULL ) { const VDatabase *db; rc = VDBManagerOpenDBRead ( self->vmgr, &db, self->vschema, "%s", src_name ); if ( rc == 0 ) { const ReferenceList * ref_list; rc = ReferenceList_MakeDatabase( &ref_list, db, reflist_options, 0, NULL, 0 ); if ( rc == 0 ) { const ReferenceObj * ref_obj; rc = ReferenceList_Find( ref_list, &ref_obj, rwd->ref_name, string_size( rwd->ref_name ) ); if ( rc == 0 ) { INSDC_coord_len len; rc = ReferenceObj_SeqLength( ref_obj, &len ); if ( rc == 0 ) { if ( rwd->ref_start == 0 ) rwd->ref_start = 1; if ( ( rwd->ref_end == 0 )||( rwd->ref_end > len + 1 ) ) rwd->ref_end = ( len - rwd->ref_start ) + 1; if ( self->primary_alignments ) rc = ref_walker_add_iterator( self, rwd->ref_name, rwd->ref_start, rwd->ref_end, src_name, &cur_id_vector, db, ref_obj, ref_iter, TBL_PRIM, primary_align_ids ); if ( rc == 0 && self->secondary_alignments ) rc = ref_walker_add_iterator( self, rwd->ref_name, rwd->ref_start, rwd->ref_end, src_name, &cur_id_vector, db, ref_obj, ref_iter, TBL_SEC, secondary_align_ids ); if ( rc == 0 && self->evidence_alignments ) rc = ref_walker_add_iterator( self, rwd->ref_name, rwd->ref_start, rwd->ref_end, src_name, &cur_id_vector, db, ref_obj, ref_iter, TBL_EV, evidence_align_ids ); } ReferenceObj_Release( ref_obj ); } ReferenceList_Release( ref_list ); } VDatabaseRelease( db ); } } } if ( rc == 0 ) { /* walk the reference iterator */ struct ReferenceObj const * ref_obj; rc = ReferenceIteratorNextReference( ref_iter, NULL, NULL, &ref_obj ); if ( rc == 0 && ref_obj != NULL ) { if ( self->use_seq_name ) rc = ReferenceObj_Name( ref_obj, &rwd->ref_name ); else rc = ReferenceObj_SeqId( ref_obj, &rwd->ref_name ); if ( rc == 0 ) { INSDC_coord_zero first_pos; INSDC_coord_len len; rc_t rc_w = ReferenceIteratorNextWindow ( ref_iter, &first_pos, &len ); while ( rc == 0 && rc_w == 0 ) { rc_t rc_p = ReferenceIteratorNextPos ( ref_iter, !self->no_skip ); if ( rc_p == 0 ) { rc = ReferenceIteratorPosition ( ref_iter, &rwd->pos, &rwd->depth, &rwd->bin_ref_base ); if ( rwd->depth > 0 && rc == 0 ) { rc_t rc_sg = 0; rwd->ascii_ref_base = _4na_to_ascii( rwd->bin_ref_base, false ); if ( self->on_enter_ref_pos != NULL ) rc = self->on_enter_ref_pos( rwd ); while ( rc_sg == 0 && rc == 0 ) { rc_sg = ReferenceIteratorNextSpotGroup ( ref_iter, &rwd->spot_group, &rwd->spot_group_len ); if ( rc_sg == 0 ) { rc_t rc_pr = 0; if ( self->on_enter_spot_group != NULL ) rc = self->on_enter_spot_group( rwd ); while ( rc == 0 && rc_pr == 0 ) { const PlacementRecord * rec; rc_pr = ReferenceIteratorNextPlacement ( ref_iter, &rec ); if ( rc_pr == 0 && self->on_alignment != NULL ) rc = ref_walker_walk_alignment( self, ref_iter, rec, rwd ); } if ( self->on_exit_spot_group != NULL ) rc = self->on_exit_spot_group( rwd ); } } if ( self->on_exit_ref_pos != NULL ) rc = self->on_exit_ref_pos( rwd ); } rc = Quitting(); } } } } } /* free cur_id_vector */ ReferenceIteratorRelease ( ref_iter ); } return rc; }
static rc_t print_headers_from_file( const samdump_opts * opts ) { KDirectory * dir; rc_t rc = KDirectoryNativeDir ( &dir ); if ( rc != 0 ) { (void)PLOGERR( klogErr, ( klogErr, rc, "cant created native directory for file '$(t)'", "t=%s", opts->header_file ) ); } else { const struct KFile * f; rc = KDirectoryOpenFileRead ( dir, &f, "%s", opts->header_file ); if ( rc != 0 ) { (void)PLOGERR( klogErr, ( klogErr, rc, "cant open file '$(t)'", "t=%s", opts->header_file ) ); } else { VNamelist * headers; rc = VNamelistMake ( &headers, 25 ); if ( rc != 0 ) { (void)PLOGERR( klogErr, ( klogErr, rc, "cant create container for file '$(t)'", "t=%s", opts->header_file ) ); } else { rc = LoadKFileToNameList( f, headers ); if ( rc != 0 ) { (void)PLOGERR( klogErr, ( klogErr, rc, "cant load file '$(t)' into container", "t=%s", opts->header_file ) ); } else { uint32_t count; rc = VNameListCount ( headers, &count ); if ( rc != 0 ) { (void)PLOGERR( klogErr, ( klogErr, rc, "cant get count for container of '$(t)'", "t=%s", opts->header_file ) ); } else { uint32_t i; for ( i = 0; i < count && rc == 0; ++i ) { const char * line; rc = VNameListGet ( headers, i, &line ); if ( rc != 0 ) { (void)PLOGERR( klogErr, ( klogErr, rc, "cant get line #$(t) from container", "t=%u", i ) ); } else { rc = KOutMsg( "%s\n", line ); } } } } VNamelistRelease ( headers ); } KFileRelease ( f ); } KDirectoryRelease ( dir ); } return rc; }
rc_t perform_cgi_request( struct cgi_request * request, struct KStream ** reply_stream, uint32_t * rslt_code ) { rc_t rc; if ( request == NULL || reply_stream == NULL || rslt_code == NULL ) rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull ); else { ver_t http_vers = 0x01010000; KClientHttpRequest * kns_req; *reply_stream = NULL; rc = KNSManagerMakeClientRequest( request->kns_mgr, &kns_req, http_vers, NULL, "%s", request->url ); if ( rc != 0 ) ErrMsg( "KNSManagerMakeClientRequest( '%s' ) -> %R", request->url, rc ); else { uint32_t count; rc = VNameListCount( request->params, &count ); if ( rc != 0 ) ErrMsg( "VNameListCount() -> %R", rc ); else { uint32_t idx; for ( idx = 0; idx < count && rc == 0; ++idx ) { const char * s; rc = VNameListGet( request->params, idx, &s ); if ( rc != 0 ) ErrMsg( "VNameListGet( #%d ) -> %R", idx, rc ); else { rc = KClientHttpRequestAddPostParam( kns_req, "%s", s ); if ( rc != 0 ) ErrMsg( "KClientHttpRequestAddPostParam( '%s' ) -> %R", s, rc ); } } if ( rc == 0 ) { KClientHttpResult * kns_rslt; rc = KClientHttpRequestPOST( kns_req, &kns_rslt ); if ( rc != 0 ) ErrMsg( "KClientHttpRequestPOST() -> %R", rc ); else { rc = KClientHttpResultStatus( kns_rslt, rslt_code, NULL, 0, NULL ); if ( rc != 0 ) ErrMsg( "KClientHttpResultStatus() -> %R", rc ); else { rc = KClientHttpResultGetInputStream( kns_rslt, reply_stream ); if ( rc != 0 ) ErrMsg( "KClientHttpResultGetInputStream() -> %R", rc ); } KClientHttpResultRelease( kns_rslt ); } } } KClientHttpRequestRelease( kns_req ); } } return rc; }
void report_options( samdump_opts * opts ) { rc_t rc; uint32_t len; KOutMsg( "dump unaligned reads : %s\n", opts->dump_unaligned_reads ? "YES" : "NO" ); KOutMsg( "dump unaligned only : %s\n", opts->dump_unaligned_only ? "YES" : "NO" ); KOutMsg( "dump prim. alignments : %s\n", opts->dump_primary_alignments ? "YES" : "NO" ); KOutMsg( "dump sec. alignments : %s\n", opts->dump_secondary_alignments ? "YES" : "NO" ); KOutMsg( "dump cga-tools-mode : %s\n", opts->dump_cga_tools_mode ? "YES" : "NO" ); KOutMsg( "dump cg-evidence : %s\n", opts->dump_cg_evidence ? "YES" : "NO" ); KOutMsg( "dump cg-ev-dnb : %s\n", opts->dump_cg_ev_dnb ? "YES" : "NO" ); KOutMsg( "dump cg-sam : %s\n", opts->dump_cg_sam ? "YES" : "NO" ); KOutMsg( "merge cg-cigar : %s\n", opts->merge_cg_cigar ? "YES" : "NO" ); KOutMsg( "use long cigar : %s\n", opts->use_long_cigar ? "YES" : "NO" ); KOutMsg( "print seqid : %s\n", opts->use_seqid_as_refname ? "YES" : "NO" ); KOutMsg( "print READ with '=' : %s\n", opts->print_matches_as_equal_sign ? "YES" : "NO" ); KOutMsg( "reverse unaligned rd : %s\n", opts->reverse_unaligned_reads ? "YES" : "NO" ); KOutMsg( "add spotgrp to qname : %s\n", opts->print_spot_group_in_name ? "YES" : "NO" ); KOutMsg( "print id in col. XI : %s\n", opts->print_alignment_id_in_column_xi ? "YES" : "NO" ); KOutMsg( "report matecache : %s\n", opts->report_cache ? "YES" : "NO" ); KOutMsg( "print cg-names : %s\n", opts->print_cg_names ? "YES" : "NO" ); switch( opts->header_mode ) { case hm_none : KOutMsg( "header-mode : dont print\n" ); break; case hm_recalc : KOutMsg( "header-mode : recalculate\n" ); break; case hm_dump : KOutMsg( "header-mode : print meta-data\n" ); break; default : KOutMsg( "header-mode : unknown\n" ); break; } switch( opts->cigar_treatment ) { case ct_unchanged : KOutMsg( "cigar-treatment : unchanged\n" ); break; case ct_cg_style : KOutMsg( "cigar-treatment : transform cg to 'cg-style\n" ); break; case ct_cg_merge : KOutMsg( "cigar-treatment : transform cg to valid SAM\n" ); break; default : KOutMsg( "cigar-treatment : unknow'\n" ); break; } switch( opts->output_compression ) { case oc_none : KOutMsg( "output-compression : none\n" ); break; case oc_gzip : KOutMsg( "output-compression : gzip\n" ); break; case oc_bzip2 : KOutMsg( "output-compression : bzip2\n" ); break; default : KOutMsg( "output-compression : unknown\n" ); break; } switch( opts->output_format ) { case of_sam : KOutMsg( "output-format : SAM\n" ); break; case of_fasta : KOutMsg( "output-format : FASTA\n" ); break; case of_fastq : KOutMsg( "output-format : FASTQ\n" ); break; default : KOutMsg( "output-format : unknown\n" ); break; } switch( opts->dump_mode ) { case dm_one_ref_at_a_time : KOutMsg( "dump-mode : one ref at a time\n" ); break; case dm_prepare_all_refs : KOutMsg( "dump-mode : prepare all refs\n" ); break; default : KOutMsg( "dump-mode : unknown\n" ); break; } KOutMsg( "number of regions : %u\n", opts->region_count ); if ( opts->region_count > 0 ) foreach_reference( &opts->regions, report_reference_cb, NULL ); if ( opts->qname_prefix == NULL ) KOutMsg( "qname-prefix : NONE\n" ); else KOutMsg( "qname-prefix : '%s'\n", opts->qname_prefix ); if ( opts->qual_quant == NULL ) KOutMsg( "quality-quantization : NONE\n" ); else KOutMsg( "quality-quantization : '%s'\n", opts->qual_quant ); if ( opts->hdr_comments != NULL ) { rc = VNameListCount( opts->hdr_comments, &len ); if ( rc == 0 && len > 0 ) { uint32_t i; KOutMsg( "header-comments-count : %u\n", len ); for ( i = 0; i < len; ++i ) { const char * s; rc = VNameListGet( opts->hdr_comments, i, &s ); if ( rc == 0 && s != NULL ) KOutMsg( "header-comment[ %u ] : '%s'\n", i, s ); } } } if ( opts->input_files != NULL ) { rc = VNameListCount( opts->input_files, &len ); if ( rc == 0 && len > 0 ) { uint32_t i; KOutMsg( "input-file-count : %u\n", len ); for ( i = 0; i < len; ++i ) { const char * s; rc = VNameListGet( opts->input_files, i, &s ); if ( rc == 0 && s != NULL ) KOutMsg( "input-file[ %u ] : '%s'\n", i, s ); } } } len = VectorLength( &opts->mp_dist ); if ( len > 0 ) { uint32_t i; KOutMsg( "matepair-dist-filters : %u\n", len ); for ( i = 0; i < len; ++i ) { range *r = VectorGet( &opts->mp_dist, i ); if ( r != NULL ) KOutMsg( "matepair-dist[ %u ] : '%u ... %u'\n", i, r->start, r->end ); } } KOutMsg( "mate-gap-cache-limit : %u\n", opts->mape_gap_cache_limit ); KOutMsg( "test-row limit : %u\n", opts->test_rows ); KOutMsg( "outputfile : %s\n", opts->outputfile ); KOutMsg( "outputbuffer-size : %u\n", opts->output_buffer_size ); KOutMsg( "cursor-cache-size : %u\n", opts->cursor_cache_size ); KOutMsg( "use min-mapq : %s\n", opts->use_min_mapq ? "YES" : "NO" ); KOutMsg( "min-mapq : %i\n", opts->min_mapq ); }