Example #1
0
void sbbs_t::create_sif_dat(char *siffile, char *datfile)
{
	char *buf;
	int file;

	if((buf=(char *)malloc(SIF_MAXBUF))==NULL) {
		errormsg(WHERE,ERR_ALLOC,siffile,SIF_MAXBUF);
		return; 
	}
	memset(buf,SIF_MAXBUF,0);	 /* initialize to null */
	sif(siffile,buf,SIF_MAXBUF);
	if((file=nopen(datfile,O_WRONLY|O_TRUNC|O_CREAT))==-1) {
		free(buf);
		errormsg(WHERE,ERR_OPEN,datfile,O_WRONLY|O_TRUNC|O_CREAT);
		return; 
	}
	write(file,buf,strlen(buf));
	close(file);
	free(buf);
}
// initial step:
// 0) id all indels in full_pr
// 1) convert these into genotype elements (including simple homopolymer normalization)
// 2) reduce to two most popular alleles for all alleles which conflict
// 3) print lots of stuff out for the active region
//
void
starling_pos_processor_base::
get_region_haplotypes(const known_pos_range full_pr,
                      const known_pos_range /*active_pr*/) {

    // only works for the first sample right now:
    static const unsigned sample_no(0);

    //for(unsigned sample_no(0);sample_no<_n_samples;++sample_no)..
    sample_info& sif(sample(sample_no));

    // step 0: identify all candidate indels in full region:
    htype_buffer hdata;

    // iterate through indels in each region, find and iterate through supporting reads for each indel:
    //
    const indel_buffer& ibuff(sif.indel_sync().ibuff());
    typedef indel_buffer::const_iterator ciiter;
    const std::pair<ciiter,ciiter> ipair(ibuff.pos_range_iter(full_pr.begin_pos,full_pr.end_pos));
    for (ciiter i(ipair.first); i!=ipair.second; ++i) {
        const indel_key& ik(i->first);
        const indel_data& id(get_indel_data(i));

        // check that indel really falls into candidate range:
        if (! (full_pr.is_pos_intersect(ik.pos) ||
               full_pr.is_pos_intersect(ik.right_pos()))) continue;

        // only consider candidates:
        if (! sif.indel_sync().is_candidate_indel(_client_opt,ik,id)) continue;

        get_htypes_for_indel(_client_dopt,sif.read_buff,_ref,ik,id,hdata);

        // convert indel to htype_element and insert:
        //  convert_indel_to_htype(ik,id,_ref_seq);
    }

#ifdef DEBUG_HTYPE
    if (! hdata.empty()) hdata.dump(std::cerr);
#endif

#if 0
    // get expanded region for read search:
    const known_pos_range expanded_pr(full_pr.begin_pos-(_client_opt.max_indel_size+XXXMAX_READ_SIZE),full_pr.end_pos);

    // iterate through reads in region:
    for (pos_t pos(begin); pos<end; ++pos) {
        read_segment_iter ri(sif.read_buff.get_pos_read_segment_iter(pos));
        for (read_segment_iter::ret_val r; true; ri.next()) {
            r=ri.get_ptr();
            if (NULL==r.first) break;
            read_segment& rseg(r.first->get_segment(r.second));

            {
                indel_set_t cal_indels;
                get_alignment_indels(cal,opt.max_indel_size,cal_indels);
            }

            //rseg.blah....
        }
    }
#endif

#if 0
    const indel_buffer& ibuff(sif.indel_sync().ibuff());
    const std::pair<ciiter,ciiter> ipair(ibuff.pos_range_iter(full_pr.begin_pos,full_pr.end_pos));
    for (ciiter i(ipair.first); i!=ipair.second; ++i) {
        const indel_key& ik(i->first);
        const indel_data& id(get_indel_data(i));

        // check that indel really falls into candidate range:
        if (! (full_pr.is_pos_intersect(ik.pos()) ||
               full_pr.is_pos_intersect(ik.right_pos()))) continue;

        // only consider candidates:
        if (! sif.indel_sync().is_candidate_indel(_client_opt,ik,id)) continue;

        // convert indel to htype_element and insert:
        convert_indel_to_htype(ik,id,_ref_seq);
    }
#endif


#if 0
    const known_pos_range full_pr(start_pos,start_pos+region_size);
    const known_pos_range active_pr(full_start_pos+region_size/4,start_pos+region_size);
    const pos_t begin(region_size/4);
    const pos_t end(begin+(region_size/2));

    // step 1: identify loci in region:
    const indel_buffer& ibuff(isync.ibuff());
    typedef indel_buffer::const_iterator ciiter;
    const std::pair<ciiter,ciiter> ipair(ibuff.pos_range_iter(pr.begin_pos,pr.end_pos));
    for (ciiter i(ipair.first); i!=ipair.second; ++i) {
        const indel_key& ik(i->first);
        const indel_data& id(get_indel_data(i));
#if 1
        // iterate through reads in region:
        for (pos_t pos(begin); pos<end; ++pos) {
            read_segment_iter ri(sif.read_buff.get_pos_read_segment_iter(pos));
            for (read_segment_iter::ret_val r; true; ri.next()) {
                r=ri.get_ptr();
                if (NULL==r.first) break;
                read_segment& rseg(r.first->get_segment(r.second));

                //rseg.blah....
            }
        }
#endif
    }
#endif
}