示例#1
0
std::string Breakpoint::to_string(RefVector ref) {

	std::stringstream ss;
	ss << "(";
	ss << get_chr(get_coordinates().start.min_pos, ref);
	ss << ":";
	ss << calc_pos(get_coordinates().start.min_pos, ref);
	ss << "-";
	ss << get_chr(get_coordinates().stop.max_pos, ref);
	ss << ":";
	ss << calc_pos(get_coordinates().stop.max_pos, ref);
	ss << " ";
	ss << positions.support.size();
	ss << " ";
	ss << this->sv_debug;
	ss << " ";
	ss << this->get_strand(2);
	ss << "\n";
	int num = 0;
	for (std::map<std::string, read_str>::iterator i = positions.support.begin(); i != positions.support.end() && num < Parameter::Instance()->report_n_reads; i++) {
		ss << "\t";
		ss << (*i).first;
		ss << " ";
		ss << (*i).second.type;
		if ((*i).second.strand.first) {
			ss << "+";
		} else {
			ss << "-";
		}
		if ((*i).second.strand.second) {
			ss << "+";
		} else {
			ss << "-";
		}
		num++;
		ss << "\n";
	}
	ss << " ";
	return ss.str();
}
示例#2
0
void msg_edit::mbeditmenu()
{

    int x, result, page = 0;
    unsigned char ch;

    while ( pass->session->isActive() )
    {

        pass->session->puts ( "\x1b[0m\x1b[2J" );
        pass->session->puts ( ".----------------------------------------------------------------.\r\n" );
        pass->session->puts ( "| Message Forum Editor                                           |\r\n" );
        pass->session->puts ( "`----------------------------------------------------------------'\r\n" );
        x=list_message_bases ( page );
        pass->session->puts ( "\r\n [d]elete, [e]dit, [i]nsert, [m]ove, [q]uit : \x1b[1;44m \x1b[D" );

        get_chr ( pass,ch );

        switch ( toupper ( ch ) )
        {
            case 'D':
                delete_mbase();
                break;
            case 'I':
                insert_mbase();
                break;
            case 'E':
                modify_mbase();
                break;
            case 'M':
                move_mbase();
                break;
                //case 'B':    import_backbone();    break;
            case 'Q':
                return;
            case '[':
                page--;
                if ( page < 0 )
                    page = 0;
                break;
            case ']':
                if ( x )
                    page++;
                break;
            default :
                break;
        }
    }
}
示例#3
0
void msg_edit::mod_mbase ( int mbnum )
{

    mb_list_rec mbl;
    char faka[41]= {0};
    char sigtxt[3][21]= {"None","Short Sig.","Long Sig."};
    std::string TF;
    char rBuffer[200]= {0};

    _mfunc.read_mbaselist ( &mbl, mbnum );
    if ( mbl.sigtype < 0 || mbl.sigtype > 2 ) mbl.sigtype = 0;

    int total_mbases = _mfunc.msg_count();
    int result;
    unsigned char ch;

    while ( pass->session->isActive() )
    {

        faddr2char ( faka,&mbl.aka );
        strcpy ( rBuffer,"" );

        pass->session->puts ( "\x1b[0m\x1b[2J" );
        pass->session->puts ( ".----------------------------------------------------------------.\r\n" );
        pass->session->puts ( "| Message Forum Editor                                           |\r\n" );
        pass->session->puts ( "`----------------------------------------------------------------'\r\n" );
        pass->session->printf ( "  Forum: %d of %d", mbnum+1,total_mbases );

        pass->session->puts ( "\r\n" );
        pass->session->puts ( ".-------------------------." );
        pass->session->puts ( "\r\n" );
        pass->session->printf ( "| [A]. Description        | %s", mbl.mbdisplay );
        pass->session->puts ( "\r\n" );
        pass->session->printf ( "| [B]. Filename           | %s", mbl.mbfile );
        if ( mbl.Type == MSGTYPE_JAM ) TF = "JAM";
        else TF = "SQUISH";
        pass->session->puts ( "\r\n" );
        pass->session->printf ( "| [C]. Message Type       | %s", TF.c_str() );
        pass->session->puts ( "\r\n" );
        pass->session->printf ( "| [D]. Forum Kind         | %s", mbtypes[mbl.Kind] );
        pass->session->puts ( "\r\n" );
        pass->session->printf ( "| [E]. Posting Type       | %s", posttyp[mbl.Pubpriv] );
        pass->session->puts ( "\r\n" );
        pass->session->printf ( "| [F]. Info Filename      | %s", mbl.infofile );
        if ( mbl.Allowalias ) TF = "yes";
        else TF = "no";
        pass->session->puts ( "\r\n" );
        pass->session->printf ( "| [G]. Allow Aliases      | %s", TF.c_str() );
        pass->session->puts ( "\r\n" );
        pass->session->printf ( "| [H]. Post ACS           | " );
        pass->session->puts ( "\r\n" );
        pass->session->printf ( "| [I]. Read ACS           | " );
        pass->session->puts ( "\r\n" );
        pass->session->printf ( "| [J]. Sysop ACS          | " );
        pass->session->puts ( "\r\n" );
        pass->session->printf ( "| [K]. Signature          | %s", sigtxt[mbl.sigtype] );
        pass->session->puts ( "\r\n" );
        pass->session->printf ( "| [L]. Mail address       | %s", faka );

        /*
        mci("%sQuoted (%d)`0F, ",
            ansic(mbl.colors[MSG_QUOTE]),
            mbl.colors[MSG_QUOTE]);
        mci("%sText (%d)`0F,",
            ansic(mbl.colors[MSG_TEXT]),
            mbl.colors[MSG_TEXT]);
        mci("%sTear (%d)`0F,",
            ansic(mbl.colors[MSG_TEAR]),
            mbl.colors[MSG_TEAR]);
        mci("%sOrigin (%d)~SM",
            ansic(mbl.colors[MSG_ORIGIN]),
            mbl.colors[MSG_ORIGIN]);
        */

        pass->session->puts ( "\r\n" );
        pass->session->printf ( "| [M]. Origin Line        | %s", mbl.OriginLine );
        pass->session->puts ( "\r\n" );
        pass->session->puts ( "`-------------------------'\r\n\r\n" );

        pass->session->puts ( " [d]elete, [e]dit, [i]nsert, [m]ove, [q]uit : \x1b[1;44m \x1b[D" );

        get_chr ( pass,ch );
        switch ( toupper ( ch ) )
        {

            case 'A':
                pass->session->puts ( "\r\n\r\n Description: \x1b[1;44m                              \x1b[30D" );
                get_str ( pass,rBuffer );
                if ( strcmp ( rBuffer," " ) == 0 ) break;
                strcpy ( mbl.mbdisplay,rBuffer );
                break;

            case 'B':
                pass->session->puts ( "\r\n\r\n New Filename: \x1b[1;44m                              \x1b[30D" );
                get_str ( pass,rBuffer );
                if ( strcmp ( rBuffer," " ) == 0 ) break;
                strcpy ( mbl.mbfile,rBuffer );
                break;

            case 'C':
                if ( mbl.Type == MSGTYPE_JAM )    mbl.Type = MSGTYPE_SQUISH;
                else                        mbl.Type = MSGTYPE_JAM;
                break;

            case 'D':
                ++mbl.Kind;
                if ( mbl.Kind > 4 )
                    mbl.Kind = 0;
                switch ( mbl.Kind )
                {
                    case LOCAL    :
                        mbl.Pubpriv = PUBLIC;
                        break;
                    case ECHOMAIL :
                        mbl.Pubpriv = PUBLIC;
                        break;
                    case NETMAIL  :
                        mbl.Pubpriv = PRIVATE;
                        break;
                    case EMAIL    :
                        mbl.Pubpriv = PRIVATE;
                        break;
                    case NEWS     :
                        mbl.Pubpriv = PUBLIC;
                        break;
                }
                break;

            case 'E':
                if ( mbl.Pubpriv==PUBLIC )
                {
                    switch ( mbl.Kind )
                    {
                        case LOCAL      :
                            mbl.Pubpriv = PRIVATE;
                            break;
                        case ECHOMAIL :
                            mbl.Pubpriv = PUBLIC;
                            break;
                        case NETMAIL  :
                            mbl.Pubpriv = PRIVATE;
                            break;
                        case EMAIL    :
                            mbl.Pubpriv = PRIVATE;
                            break;
                        case NEWS      :
                            mbl.Pubpriv = PUBLIC;
                            break;
                    }
                }
                else
                {
                    switch ( mbl.Kind )
                    {
                        case LOCAL      :
                            mbl.Pubpriv = PUBLIC;
                            break;
                        case ECHOMAIL :
                            mbl.Pubpriv = PUBLIC;
                            break;
                        case NETMAIL  :
                            mbl.Pubpriv = PRIVATE;
                            break;
                        case EMAIL    :
                            mbl.Pubpriv = PRIVATE;
                            break;
                        case NEWS      :
                            mbl.Pubpriv = PUBLIC;
                            break;
                    }
                }
                break;

            case 'F':
                pass->session->puts ( "\r\n\r\n Info File: \x1b[1;44m                              \x1b[30D" );
                get_str ( pass,rBuffer );
                if ( strcmp ( rBuffer," " ) == 0 ) break;
                strcpy ( mbl.infofile,rBuffer );
                break;

            case 'G':
                mbl.Allowalias = ( mbl.Allowalias ) ?0:1;
                break;

            case 'H':
                ACS ( &mbl.WriteACS,mbl.mbdisplay );
                break;
            case 'I':
                ACS ( &mbl.ReadACS, mbl.mbdisplay );
                break;
            case 'J':
                ACS ( &mbl.SysopACS,mbl.mbdisplay );
                break;

            case 'K':
                mbl.sigtype++;
                if ( mbl.sigtype<0 || mbl.sigtype>2 )
                    mbl.sigtype=0;
                break;

            case 'L':
                edit_aka ( &mbl );
                //mbl.fidoaddr=pick_aka();
                break;

            case 'M':
                pass->session->puts ( "\r\n\r\n Origin Line: \x1b[1;44m                              \x1b[30D" );
                get_str ( pass,rBuffer );
                if ( strcmp ( rBuffer," " ) == 0 ) break;
                strcpy ( mbl.OriginLine,rBuffer );
                break;

            case 'Q':
                _mfunc.save_mbaselist ( &mbl, mbnum );
                _mfunc.save_msgbase ( &mbl );
                return;

        }
    }
}
示例#4
0
// INS_CNV, DUP1, DUP2, DEL, INV
void rsv_gen(FILE *msg, reg_t *rsv_reg)
{
    char msg_line[1024]; _reg_t r;
    char chr[10]; int s,e,len; char type[10]; char xa[1024], ins_chr[10]; int ins_s, ins_e;
    int left=1, offset=0, right;
    while (fgets(msg_line, 1024, msg) != NULL)
    {
        sscanf(msg_line, "%s\t%d\t%d\t%d\t%s\t%[^\n]\n", chr, &s, &e, &len, type, xa);
        switch(type[2])
        {
            case 'S': // INS
                sscanf(xa, "%s\t%d\t%d", ins_chr, &ins_s, &ins_e);
                right = s+offset; //M right
                //fprintf(stdout, "%s\t%d\t%d\t%d\t%s\n", chr, left, right, right-left+1, "MAT");
                r.chr = get_chr(chr), strcpy(r.type, "MAT");
                r.left = left, r.right = right, r.len = right-left+1, r.offset=offset;
                push_reg(rsv_reg, r);

                left=e+offset;    //I left
                right=left+len-1; //I right
                //fprintf(stdout, "%s\t%d\t%d\t%d\t%s\n", chr, left, right, len, "INS"); 
                r.chr = get_chr(chr), strcpy(r.type, "INS_CNV");
                r.left = left, r.right = right, r.len = len, r.offset=offset;
                // ins_reg
                r.ins_chr = get_chr(ins_chr);
                r.ins_left = ins_s, r.ins_right = ins_e;
                push_reg(rsv_reg, r);

                left = e+offset+len;
                offset+=len;
                break;
            case 'P': // DUP (DUP1, DUP2, ...)
                right = s+offset; // M right
                r.chr = get_chr(chr), strcpy(r.type, "MAT");
                r.left = left, r.right = right, r.len = right-left+1, r.offset=offset;
                push_reg(rsv_reg, r);

                left=e+offset;    // P left
                right=left+len-1; // P right
                r.chr = get_chr(chr), strcpy(r.type, type); // DUP1, DUP2, ...
                r.left = left, r.right = right, r.len = len, r.offset=offset;
                // dup_reg
                r.ins_chr = get_chr(chr);
                r.ins_left = s-(len)/atoi(type+3)+1; r.ins_right = s;
                push_reg(rsv_reg, r);

                left = e+offset+len;
                offset+=len;
                break;
            case 'L': // DEL
                right = s+offset;
                //fprintf(stdout, "%s\t%d\t%d\t%d\t%s\n", chr, left, right, right-left+1, "MAT");
                r.chr = get_chr(chr), strcpy(r.type, "MAT");
                r.left = left, r.right = right, r.len = right-left+1, r.offset=offset;
                push_reg(rsv_reg, r);

                left=s+offset;
                offset-=len;
                right=e+offset;
                //fprintf(stdout, "%s\t%d\t%d\t%d\t%s\n", chr, left, right, len, "DEL"); 
                r.chr = get_chr(chr), strcpy(r.type, "DEL");
                r.left = left, r.right = right, r.len = len, r.offset=offset;
                push_reg(rsv_reg, r);
                left=right;
                break;
            case 'V': // INV 
                right=s+offset;  //M right
                //fprintf(stdout, "%s\t%d\t%d\t%d\t%s\n", chr, left, right, right-left+1, "MAT");
                r.chr = get_chr(chr), strcpy(r.type, "MAT");
                r.left = left, r.right = right, r.len = right-left+1, r.offset=offset;
                push_reg(rsv_reg, r);

                left=right+1;    //V left
                right=e+offset-1;//V right
                //fprintf(stdout, "%s\t%d\t%d\t%d\t%s\n", chr, left, right, len, "INV");
                r.chr = get_chr(chr), strcpy(r.type, "INV");
                r.left = left, r.right = right, r.len = len, r.offset=offset;
                r.ins_left = s, r.ins_right = e; // inv_left, inv_right
                push_reg(rsv_reg, r);

                left=e+offset;   //M left
                break;
            default: break;
        }
        //fprintf(stdout, "%s %d %d %d %s\n", chr, s, e, len, type);
    }
    right=CHR_MAX_LEN; len=right-left+1;
    //fprintf(stdout, "%s\t%d\t%d\t%d\t%s\n", chr, left, right, len, "MAT");
    r.chr = get_chr(chr), strcpy(r.type, "MAT");
    r.left = left, r.right = right, r.len = len, r.offset=offset;
    push_reg(rsv_reg, r);
}
示例#5
0
void whole_gen_core(reg_t *rsv_reg, FILE *wgsim, reg_t *who_reg)
{
    int i; 
    char msg_line[1024]; _reg_t r;
    char chr[10]; int s,e,len; char type[10];
    int offset=0, /*next*/left=1, right;
    int cur_rsv_n = 0; _reg_t R_r, w_r; int indel=0;

    reg_t *cur, *next;
    //init cur/next
    cur = (reg_t*)malloc(sizeof(reg_t));
    cur->reg_m = 100;
    cur->reg = (_reg_t*)malloc(100 * sizeof(_reg_t));
    next = (reg_t*)malloc(sizeof(reg_t));
    next->reg_m = 100;
    next->reg = (_reg_t*)malloc(100 * sizeof(_reg_t));
    cur->reg_n = 0;
    next->reg_n = 0;

    // first wgsim-region, stored in next
    fgets(msg_line, 1024, wgsim);
    sscanf(msg_line, "%s\t%d\t%d\t%d\t%s\n", chr, &s, &e, &len, type);
    r.left = s, r.right = e, r.len = len, r.offset=0; r.chr=get_chr(chr), strcpy(r.type, type);
    push_reg(next, r);

    offset = 0;
    while (cur_rsv_n < rsv_reg->reg_n) {
        // clear cur
        cur->reg_n = 0;
        R_r = rsv_reg->reg[cur_rsv_n];
        // find wgsim in the rsv-region, store in cur
        // until one wgsim outbound this rsv-reg, store in next
        if (next->reg_n>0 && R_r.type[2] != 'L') {
            // push next to cur, if necessary
            if (((next->reg[0].type[2] == 'S' || next->reg[0].type[2] == 'P')  && next->reg[0].left <= rsv_reg->reg[cur_rsv_n].right)
                    || (next->reg[0].type[2] == 'L'  && next->reg[0].left < rsv_reg->reg[cur_rsv_n].right)) {
                // split wgsim, if it acrosses two RSV-reg
                if (next->reg[0].type[2] == 'L'&& next->reg[0].right > rsv_reg->reg[cur_rsv_n].right+1) {
                    r.left = next->reg[0].left;
                    r.right = rsv_reg->reg[cur_rsv_n].right+1;
                    r.len = r.right-r.left+1;
                    r.offset = 0;
                    r.chr = next->reg[0].chr, strcpy(r.type, "DEL");
                    push_reg(cur, r);
                    r.left = rsv_reg->reg[cur_rsv_n].right;
                    r.right = next->reg[0].right;
                    r.len = r.right-r.left+1;
                    r.offset = 0;
                    next->reg_n=0;
                    push_reg(next, r);
                    goto UPDATE;
                }
                push_reg(cur, next->reg[0]);
                next->reg_n = 0;
                // push wgsim to cur, if necessary
                // until push wgsim to next, or reach EOF in wgsim
                while (fgets(msg_line, 1024, wgsim) != NULL) {
                    sscanf(msg_line, "%s\t%d\t%d\t%d\t%s\n", chr, &(r.left), &(r.right), &(r.len), r.type);
                    r.chr = get_chr(chr);
                    if (((r.type[2]=='S' || r.type[2]=='P') && r.left <= rsv_reg->reg[cur_rsv_n].right)
                            || (r.type[2]=='L' && r.left < rsv_reg->reg[cur_rsv_n].right)) {
                        // split wgsim, if necessary, same to upper 
                        if (r.type[2] == 'L' && r.right > rsv_reg->reg[cur_rsv_n].right+1) {
                            left = r.left, right = r.right, len = r.len;
                            r.left = left, r.right = rsv_reg->reg[cur_rsv_n].right+1;
                            r.len = r.right-r.left+1;
                            r.offset=0;
                            push_reg(cur, r);
                            r.left = rsv_reg->reg[cur_rsv_n].right;
                            r.right = right;
                            r.len = r.right - r.left + 1;
                            push_reg(next, r);
                            break;
                        }
                        push_reg(cur, r);
                    }
                    else { push_reg(next, r); break; }
                }
            }
        }
UPDATE:
        // split cur_rsv, based on cur, push into whole_reg
        switch (R_r.type[2]) {
            case 'T': // MATCH
                left = R_r.left+offset;
                for (i = 0; i < cur->reg_n; ++i) {
                    // push (left, cur.s) and (cur.s, cur.e) into whole_reg
                    w_r = cur->reg[i];
                    switch (w_r.type[2]){
                        case 'S': // INS
                            // (left, cur.s)
                            r.left = left;
                            r.right = w_r.left+offset;
                            r.len = r.right-r.left+1;
                            r.offset = R_r.offset+offset;
                            r.wgsim_off = offset;
                            r.chr = w_r.chr, strcpy(r.type, R_r.type);
                            push_reg(who_reg, r);
                            // (wgsim)
                            r.left = w_r.right+offset;
                            r.len = w_r.len;
                            r.right = r.left+r.len-1;
                            r.wgsim_off = offset;
                            r.chr = w_r.chr, strcpy(r.type, "INS");
                            push_reg(who_reg, r);
                            // set next-left
                            left = r.right+1;
                            offset += len;
                            break;
                        case 'L': // DEL
                            // (left, cur.s)
                            r.left = left;
                            r.right = w_r.left+offset;
                            r.len = r.right-r.left+1;
                            r.offset = R_r.offset+offset;
                            r.wgsim_off = offset;
                            r.chr = w_r.chr, strcpy(r.type, R_r.type);
                            push_reg(who_reg, r);
                            // (cur.s, cur.e)
                            r.left = w_r.left+offset;
                            r.right = r.left+1;
                            r.len = w_r.len;
                            r.offset = R_r.offset+offset;
                            r.wgsim_off = offset;
                            r.chr = w_r.chr, strcpy(r.type, "DEL");
                            push_reg(who_reg, r);
                            // next left
                            left = r.right;
                            offset -= w_r.len;
                            break;
                        default: break;
                    }
                }
                // push (left, rsv.end) into whole_reg
                r.left = left;
                r.right = R_r.right+offset;
                r.len = r.right-r.left+1;
                r.offset = R_r.offset+offset;
                r.wgsim_off = offset;
                r.chr = R_r.chr, strcpy(r.type, R_r.type);
                push_reg(who_reg, r);
                break;
            case 'V': // INV
                indel = 0;
                for (i = 0; i < cur->reg_n; ++i) { // calculate whole-indels
                    if (cur->reg[i].type[2] == 'S') // INS
                        indel += (cur->reg[i].len);
                    else if (cur->reg[i].type[2] == 'L') // DEL
                        indel -= (cur->reg[i].len);
                    else {fprintf(stderr, "[whole_gen] Error.\n"); exit(0);}
                }
                r.left = R_r.left + offset;
                r.len = R_r.len + indel;
                r.right = r.left + r.len - 1;
                r.offset = R_r.offset + offset;
                r.wgsim_off = offset;
                r.chr = R_r.chr, strcpy(r.type, R_r.type);
                r.ins_left = R_r.ins_left; r.ins_right = R_r.ins_right;
                push_reg(who_reg, r);
                offset += indel;
                break;
            case 'S': // INS
            case 'P': // DUP
                indel = 0;
                for (i = 0; i < cur->reg_n; ++i) { // calculate whole-indels
                    if (cur->reg[i].type[2] == 'S') // INS
                        indel += (cur->reg[i].len);
                    else if (cur->reg[i].type[2] == 'L') // DEL
                        indel -= (cur->reg[i].len);
                    else {fprintf(stderr, "[whole_gen] Error.\n"); exit(0);}
                }
                r.left = R_r.left + offset;
                r.len = R_r.len + indel;
                if (r.len <=0 ) { fprintf(stderr, "[whole_gen] Error: indel >= RSV %s-len.\n", R_r.type); exit(0); }
                r.right = r.left + r.len - 1;
                r.offset = R_r.offset + offset;
                r.wgsim_off = offset;
                r.chr = R_r.chr, strcpy(r.type, R_r.type);
                r.ins_chr = R_r.ins_chr;
                r.ins_left = R_r.ins_left; r.ins_right = R_r.ins_right;
                push_reg(who_reg, r);
                offset += indel;
                break;
            case 'L': // DEL // no split
                r.left = R_r.left+offset;
                r.right = R_r.right+offset;
                r.len = R_r.len;
                r.offset = R_r.offset+offset;
                r.wgsim_off = offset;
                r.chr = R_r.chr, strcpy(r.type, "DEL");
                push_reg(who_reg,r);
            default: break;
        }
        // next rsv-reg
        ++cur_rsv_n;
    }
    free(cur->reg), free(cur); free(next->reg), free(next);
}