Example #1
0
static
rc_t CC CGEvidenceIntervals20_Read(const CGEvidenceIntervals15* cself, TEvidenceIntervalsData* data)
{
    rc_t rc = 0;

    CG_LINE_START(cself->file, b, len, p);
    if( b == NULL || len == 0) {
        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcDone);
        break;
    }
    /*DEBUG_MSG(10, ("evidenceIntervals: '%.*s'\n", len, b));*/
    CG_LINE_NEXT_FIELD(b, len, p);
    rc = str2buf(b, p - b, data->interval_id, sizeof(data->interval_id));
    CG_LINE_NEXT_FIELD(b, len, p);
    rc = str2buf(b, p - b, data->chr, sizeof(data->chr));
    CG_LINE_NEXT_FIELD(b, len, p);
    rc = str2i32(b, p - b, &data->offset);
    CG_LINE_NEXT_FIELD(b, len, p);
    rc = str2u32(b, p - b, &data->length);
    CG_LINE_NEXT_FIELD(b, len, p);
    rc = str2u16(b, p - b, &data->ploidy);
    CG_LINE_NEXT_FIELD(b, len, p);
    rc = str2buf(b, p - b, data->allele_indexes, sizeof(data->allele_indexes));
    CG_LINE_NEXT_FIELD(b, len, p);
    rc = str2i32(b, p - b, &data->scoreVAF);
    data->score = data->scoreVAF; /***TODO: do we need re-calculation? ***/
    CG_LINE_NEXT_FIELD(b, len, p);
    rc = str2i32(b, p - b, &data->scoreEAF);
    CG_LINE_NEXT_FIELD(b, len, p);
    rc = str2buf(b, p - b, data->allele[0], sizeof(data->allele[0]));
    data->allele_length[0] = p - b;
    CG_LINE_NEXT_FIELD(b, len, p);
    rc = str2buf(b, p - b, data->allele[1], sizeof(data->allele[1]));
    data->allele_length[1] = p - b;
    CG_LINE_NEXT_FIELD(b, len, p);
    rc = str2buf(b, p - b, data->allele[2], sizeof(data->allele[2]));
    data->allele_length[2] = p - b;
    CG_LINE_NEXT_FIELD(b, len, p);
    rc = str2buf(b, p - b, data->allele[3], sizeof(data->allele[3]));
    data->allele_length[3] = p - b;
    CG_LINE_NEXT_FIELD(b, len, p);
    rc = str2buf(b, p - b, data->allele_alignment[1], sizeof(data->allele_alignment[1]));
    data->allele_alignment_length[1] = p - b;
    CG_LINE_NEXT_FIELD(b, len, p);
    rc = str2buf(b, p - b, data->allele_alignment[2], sizeof(data->allele_alignment[2]));
    data->allele_alignment_length[2] = p - b;
    CG_LINE_LAST_FIELD(b, len, p);
    rc = str2buf(b, p - b, data->allele_alignment[3], sizeof(data->allele_alignment[3]));
    data->allele_alignment_length[3] = p - b;
    ((CGEvidenceIntervals15*)cself)->records++;
    DEBUG_MSG(10, (
                  "evidenceIntervals: '%s'\t'%s'\t%i\t%u\t%u\t%s\t%u\t%u\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\n",
                  data->interval_id, data->chr, data->offset, data->length, data->ploidy,
                  data->allele_indexes, data->scoreVAF, data->scoreEAF,
                  data->allele[0], data->allele[1], data->allele[2], data->allele[3],
                  data->allele_alignment[1], data->allele_alignment[2], data->allele_alignment[3]));
    CG_LINE_END();
    return rc;
}
Example #2
0
static
rc_t CC CGReads15_Header(const CGReads15* cself, const char* buf, const size_t len)
{
    rc_t rc = 0;
    size_t slen;
    CGReads15* self = (CGReads15*)cself;

    if( strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0 ) {
        rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id));
    } else if( strncmp("BATCH_FILE_NUMBER\t", buf, slen = 18) == 0 ) {
        rc = str2u32(&buf[slen], len - slen, &self->batch_file_number);
        if( self->batch_file_number < 1 ) {
            rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcOutofrange);
        }
    } else if( strncmp("BATCH_OFFSET\t", buf, slen = 13) == 0 ) {
        rc = str2u64(&buf[slen], len - slen, &self->batch_offset);
    } else if( strncmp("FIELD_SIZE\t", buf, slen = 11) == 0 ) {
        rc = str2u32(&buf[slen], len - slen, &self->field_size);
    } else if( strncmp("GENERATED_AT\t", buf, slen = 13) == 0 ) {
        rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at));
    } else if( strncmp("GENERATED_BY\t", buf, slen = 13) == 0 ) {
        rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by));
    } else if( strncmp("LANE\t", buf, slen = 5) == 0 ) {
        rc = str2buf(&buf[slen], len - slen, self->lane, sizeof(self->lane));
    } else if( strncmp("LIBRARY\t", buf, slen = 8) == 0 ) {
        rc = str2buf(&buf[slen], len - slen, self->library, sizeof(self->library));
    } else if( strncmp("SAMPLE\t", buf, slen = 7) == 0 ) {
        rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample));
    } else if( strncmp("SLIDE\t", buf, slen = 6) == 0 ) {
        rc = str2buf(&buf[slen], len - slen, self->slide, sizeof(self->slide));
    } else if( strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0 ) {
        rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version));
    } else {
        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
    }
    return rc;
}
Example #3
0
static rc_t CC CGReads25_Header(const CGReads15* cself,
    const char* buf, const size_t len)
{
    rc_t rc = 0;
    size_t slen = 0;
    CGReads15* self = (CGReads15*)cself;

    /* from SRA-2617 files */
    if      (strncmp("APPROVAL\t", buf, slen = 9) == 0) {
    }
    else if (strncmp("TITLE\t", buf, slen = 6) == 0) {
    }
    else if (strncmp("ADDRESS\t", buf, slen = 8) == 0) {
    }

    /* From Table 1: Header Metadata Present in all Data Files */
    else if (strncmp("CUSTOMER_SAMPLE_ID\t", buf, slen = 19) == 0) {
    }
    else if (strncmp("SAMPLE_SOURCE\t", buf, slen = 14) == 0) {
    }
    else if (strncmp("REPORTED_GENDER\t", buf, slen = 16) == 0) {
    }
    else if (strncmp("CALLED_GENDER\t", buf, slen = 14) == 0) {
    }
    else if (strncmp("TUMOR_STATUS\t", buf, slen = 13) == 0) {
    }
    else if (strncmp("LIBRARY_TYPE\t", buf, slen = 13) == 0) {
    }
    else if (strncmp("LIBRARY_SOURCE\t", buf, slen = 13) == 0) {
    }

    else if (strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0) {
        rc = str2buf(&buf[slen], len - slen,
            self->assembly_id, sizeof(self->assembly_id));
    }
    else if (strncmp("BATCH_FILE_NUMBER\t", buf, slen = 18) == 0) {
        rc = str2u32(&buf[slen], len - slen, &self->batch_file_number);
        if (self->batch_file_number < 1) {
            rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcOutofrange);
        }
    }
    else if (strncmp("BATCH_OFFSET\t", buf, slen = 13) == 0) {
        rc = str2u64(&buf[slen], len - slen, &self->batch_offset);
    }
    else if (strncmp("FIELD_SIZE\t", buf, slen = 11) == 0) {
        rc = str2u32(&buf[slen], len - slen, &self->field_size);
    }
    else if (strncmp("GENERATED_AT\t", buf, slen = 13) == 0) {
        rc = str2buf(&buf[slen], len - slen,
            self->generated_at, sizeof(self->generated_at));
    }
    else if (strncmp("GENERATED_BY\t", buf, slen = 13) == 0) {
        rc = str2buf(&buf[slen], len - slen,
            self->generated_by, sizeof(self->generated_by));
    }
    else if (strncmp("LANE\t", buf, slen = 5) == 0) {
        rc = str2buf(&buf[slen], len - slen,
            self->lane, sizeof(self->lane));
    }
    else if (strncmp("LIBRARY\t", buf, slen = 8) == 0) {
        rc = str2buf(&buf[slen], len - slen,
            self->library, sizeof(self->library));
    }
    else if (strncmp("SAMPLE\t", buf, slen = 7) == 0) {
        rc = str2buf(&buf[slen], len - slen,
            self->sample, sizeof(self->sample));
    }
    else if (strncmp("SLIDE\t", buf, slen = 6) == 0) {
        rc = str2buf(&buf[slen], len - slen, self->slide, sizeof(self->slide));
    }
    else if (strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0) {
        rc = str2buf(&buf[slen], len - slen,
            self->software_version, sizeof(self->software_version));
    }
    else {
        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
    }

    return rc;
}
Example #4
0
int main(int argc, char* argv[])
{
	int o, rc;

	memset(&im, 0, sizeof(im));

	strcpy(im.outputfile, DEFAULT_OUTPUT_FILE);
	strcpy(im.version, DEFAULT_VERSION);
	memcpy(im.magic, MAGIC_HEADER, MAGIC_LENGTH);
	im.flash_baseaddr = DEFAULT_FLASH_BASE;

	while ((o = getopt(argc, argv, "f:hm:o:p:v:z")) != -1)
	{
		switch (o) {
		case 'f':
			if (optarg)
				if (str2u32(optarg, &im.flash_baseaddr)) {
					ERROR("Invalid flash start address %s\n", optarg);
					return -1;
				}
			break;
		case 'h':
			usage(argv[0]);
			return -1;
		case 'm':
			if (optarg) {
				if (strlen(optarg) != MAGIC_LENGTH) {
					ERROR("Invalid magic %s\n", optarg);
					return -1;
				}

				memcpy(im.magic, optarg, MAGIC_LENGTH);
			}
			break;
		case 'o':
			if (optarg)
				strncpy(im.outputfile, optarg, sizeof(im.outputfile));
			break;
		case 'p':
			if (optarg) {
				if (image_layout_add_partition(optarg))
					return -1;
			}
			break;
		case 'v':
			if (optarg)
				strncpy(im.version, optarg, sizeof(im.version));
			break;
		case 'z':
			zero_part_baseaddr = 1;
			break;
		}
	}

	rc = image_layout_verify();
	if (rc)	{
		ERROR("Failed validating firmware layout - error code: %d\n",
				rc);
		return -4;
	}

	print_image_info();

	rc = build_image();
	if (rc)	{
		ERROR("Failed building image file '%s' - error code: %d\n",
				im.outputfile, rc);
		return -5;
	}

	return 0;
}
Example #5
0
static int image_layout_add_partition(const char *part_desc)
{
	part_data_t *d;
	char memaddr[16];
	char entryaddr[16];
	char offset[16];
	char length[16];
	int t;

	if (im.part_count >= MAX_SECTIONS) {
		ERROR("Too many partitions specified\n");
		return (-1);
	}

	d = &im.parts[im.part_count];
	t = sscanf(part_desc, "%15[0-9a-zA-Z]:%15[0-9a-fA-Fx]:%15[0-9a-fA-Fx]:%15[0-9a-fA-Fx]:%15[0-9a-fA-Fx]:%256s",
			d->partition_name,
			offset,
			length,
			memaddr,
			entryaddr,
			d->filename);

	if (t != 6) {
		ERROR("Bad partition parameter %d, '%s'\n", t, part_desc);
		return (-1);
	}

	if (strlen(d->partition_name) == 0) {
		ERROR("No partition name specified in '%s'\n", part_desc);
		return (-1);
	}

	if (str2u32(offset, &d->partition_offset)) {
		ERROR("Bad offset value '%s'\n", offset);
		return (-1);
	}

	if (str2u32(length, &d->partition_length)) {
		ERROR("Bad length value '%s'\n", length);
		return (-1);
	}

	if (d->partition_length == 0) {
		int flen;
		flen = filelength(d->filename);
		if (flen < 0) {
			ERROR("Unable to determine size of '%s'\n",
					d->filename);
			return (-1);
		}
		d->partition_length = flen;
	}

	if (str2u32(memaddr, &d->partition_memaddr)) {
		ERROR("Bad memaddr vaule '%s'\n", memaddr);
		return (-1);
	}

	if (str2u32(entryaddr, &d->partition_entryaddr)) {
		ERROR("Bad entry address value '%s'\n", entryaddr);
		return (-1);
	}

	im.part_count++;
	d->partition_index = im.part_count;

	return 0;
}
    // Reads a LAMMPS input file.
    void LAMMPS_Data::read_data(string path) {
        fstream fid(path);
        if (!fid) {
            cout << "Error opening output file " << path << "!\n";  
        }
        int section=0;    
        while (fid) {
            auto line = split(read_line(fid));
            if (line.empty()) continue;
            else if (line[0]=="Masses")    section=1;
            else if (line[0]=="Pair")      section=2;
            else if (line[0]=="Bond")      section=3;
            else if (line[0]=="Angle")     section=4;
            else if (line[0]=="Dihedral")  section=5;
            else if (line[0]=="Atoms")     section=6;
            else if (line[0]=="Bonds")     section=7;
            else if (line[0]=="Angles")    section=8;
            else if (line[0]=="Dihedrals") section=9;

            switch (section) {
            case 1: 
                if (line.size()==2) { 
                    //_system.atom_types.push_back(str2u32(line[0]));
                    //_system.masses.push_back(str2dbl(line[1]));
                }
                break;
            case 6:
                Atom newatom;
                if (line.size() >= 6) { 
                    newatom.molecule   = str2u32(line[1]);
                    newatom.type       = str2u32(line[2]);
                    _system.atoms.push_back(newatom);
                }

                break;
            case 7:
                if (_system.connect.empty()) {
                    _system.connect.assign(_system.atoms.size(), vector<int>(0));
                }
                if (line.size()==4) {
                    Bond newbond;
                    //newbond.id    = str2u32(line[0]);
                    //newbond.type  = str2u32(line[1]);
                    newbond.atom1 = str2u32(line[2])-1;
                    newbond.atom2 = str2u32(line[3])-1;
                    //_system.bonds.push_back(newbond);
                    _system.connect[newbond.atom1].push_back(newbond.atom2);
                    _system.connect[newbond.atom2].push_back(newbond.atom1);
                }
                break;
            case 8: break; // No need to keep going.
            default: continue;       
            };
        }
        // Report total number of bonds.
        int num_bonds = 0;
        for (auto c=_system.connect.cbegin(); c!=_system.connect.cend(); ++c) {
            num_bonds += c->size();
        }
        cout << "Read " << num_bonds/2 << " bonds from the input file.\n";            
    }
    // Reads a LAMMPS dump output file, in atom format.
    void LAMMPS_Data::read_dump(string path) {
        fstream fid(path);
        if (!fid) cout << "Error opening output file " << path << "!\n";
        else      cout << "Opened dump " << path << ".\n";

        SnapshotDump *step=NULL;
        while (fid) {
            auto line = trim(read_line(fid));
            if (line.empty()) continue;
            else if (line=="ITEM: TIMESTEP") {
                _dump.push_back(SnapshotDump());
                step = &_dump.back(); 
                step->timestep = str2u32(trim(read_line(fid)));
            }
            else if (line=="ITEM: NUMBER OF ATOMS") {
                if (!step) { 
                    cout << "Error: NUMBER OF ATOMS specified before TIMESTEP\n";
                    exit(1);
                }
                unsigned n = str2u32(trim(read_line(fid)));
                step->scaled_coordinates.assign(n, Coord());
            }
            else if (line.find("ITEM: BOX BOUNDS")==0) {
                if (!step) { 
                    cout << "Error: BOX BOUNDS specified before TIMESTEP\n";
                    exit(1);
                }
                auto xb  = split(read_line(fid));
                auto yb  = split(read_line(fid));
                auto zb  = split(read_line(fid));
                step->dx = fabs(str2dbl(xb.at(1))-str2dbl(xb.at(0)));
                step->dy = fabs(str2dbl(yb.at(1))-str2dbl(yb.at(0)));                                
                step->dz = fabs(str2dbl(zb.at(1))-str2dbl(zb.at(0)));
            }
            // The only thing left should be the ATOMS data.
            else {
                auto pieces = split(line);
                if (pieces.size() < 4) continue;
                if (pieces[0]=="ITEM:" && pieces[1]=="ATOMS") {
                    vector<string> var(pieces.begin()+2, pieces.end());
                    // Search for coordinate and tag columns.
                    step->xc = step->yc = step->zc = step->zc = -1;
                    step->xs = step->ys = step->zs = 0;
                    for (size_t i=0; i<var.size(); ++i) {
                        if (var[i]=="x")  {step->xc=i;}
                        if (var[i]=="xs") {step->xc=i; step->xs=1; }
                        if (var[i]=="y")  {step->yc=i;}
                        if (var[i]=="ys") {step->yc=i; step->ys=1; }
                        if (var[i]=="z")  {step->zc=i;}
                        if (var[i]=="zs") {step->zc=i; step->zs=1; }
                        if (var[i]=="id")  step->tc=i;
                    }
                    if (step->xc<0 || step->yc<0 || step->zc<0) {
                        cout << "Error: coordinate column not found\n";
                        exit(1);
                    }
                    if (step->tc<0) {
                        cout << "Error: atom tag column not found.\n";
                        exit(1);
                    }
                   continue;
                }
                if (!step) { 
                    cout << "Error: data encountered before TIMESTEP\n";
                    exit(1);
                }
                auto maxc=max(step->tc,max(step->xc,max(step->yc,step->zc)));
                auto minc=min(step->tc,min(step->xc,min(step->yc,step->zc)));
                if (maxc >= (int)pieces.size()) {
                    cout << "Not enough columns in dump data.\n";
                    exit(1);
                }
                if (minc < 0) {
                    cout << "Missing data column in dump data.\n";
                    exit(1);
                }
                unsigned id = str2u32(pieces[step->tc])-1;
                if (step->scaled_coordinates.size() <= id) {
                    cout << "Error: invalid atom id found " << id << "\n";
                    exit(1);
                }
                Coord &r = step->scaled_coordinates[id];
                r.x = str2dbl(pieces[step->xc]);
                r.y = str2dbl(pieces[step->yc]);
                r.z = str2dbl(pieces[step->zc]);

                // Store coordinates scaled no matter what the input is.
                if (!step->xs) r.x = to_scaled(r.x, step->dx);
                if (!step->ys) r.y = to_scaled(r.y, step->dy);
                if (!step->zs) r.z = to_scaled(r.z, step->dz);
            }
        }
    }
static
rc_t CC CGEvidenceDnbs_Read(const CGEvidenceDnbs15* cself, const char* interval_id, TEvidenceDnbsData* data, int score_allele_num)
{
    rc_t rc = 0;
    TEvidenceDnbsData_dnb* m = NULL;
    static TEvidenceDnbsData_dnb next_rec;
    static char next_interval_id[32] = "";

    /* local copy of unused TEvidenceDnbsData_dnb struct elements */
    char reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
    INSDC_coord_zero mate_offset_in_reference;
    char mate_reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
    uint16_t score_allele[4] = {0, 0, 0, 0}; /* v1.5 has ScoreAllele[012]; v2.0 - [0123] */
    char qual[CG_EVDNC_SPOT_LEN];

    strcpy(data->interval_id, interval_id);
    data->qty = 0;
    /* already read one rec for this interval_id */
    if( next_interval_id[0] != '\0' ) {
        if( strcmp(next_interval_id, interval_id) != 0 ) {
            /* nothing todo since next interval id is different */
            return rc;
        }
        m = &data->dnbs[data->qty++];
        memcpy(m, &next_rec, sizeof(next_rec));
        DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'"
                        "\t%i\tnot_used\t0\tnot_used\t%c\t0\t0\t0\t'%.*s'\t'--'\n",
            data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane,
            m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele,
            m->allele_alignment_length, m->allele_alignment, m->offset_in_reference,
            m->mapping_quality, m->read_len, m->read));
    }
    do {
        int i = 0;
        char tmp[2];
        CG_LINE_START(cself->file, b, len, p);
        if( b == NULL || len == 0 ) {
            next_interval_id[0] = '\0';
            break; /* EOF */
        }
        if( data->qty >= data->max_qty ) {
            TEvidenceDnbsData_dnb* x;
            data->max_qty += 100;
            x = realloc(data->dnbs, sizeof(*(data->dnbs)) * data->max_qty);
            if( x == NULL ) {
                rc = RC(rcRuntime, rcFile, rcReading, rcMemory, rcExhausted);
                break;
            }
            data->dnbs = x;
        }
        m = &data->dnbs[data->qty++];

        /*DEBUG_MSG(10, ("%2hu evidenceDnbs: '%.*s'\n", data->qty, len, b));*/
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2buf(b, p - b, next_interval_id, sizeof(next_interval_id));
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2buf(b, p - b, m->chr, sizeof(m->chr));
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2buf(b, p - b, m->slide, sizeof(m->slide));
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2buf(b, p - b, m->lane, sizeof(m->lane));
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2u32(b, p - b, &m->file_num_in_lane);
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2u64(b, p - b, &m->dnb_offset_in_lane_file);
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2u16(b, p - b, &m->allele_index);
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2buf(b, p - b, tmp, sizeof(tmp));
        if( tmp[0] != 'L' && tmp[0] != 'R' ) {
            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
        }
        m->side = tmp[0];
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2buf(b, p - b, tmp, sizeof(tmp));
        if( tmp[0] != '+' && tmp[0] != '-' ) {
            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
        }
        m->strand = tmp[0];
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2i32(b, p - b, &m->offset_in_allele);
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2buf(b, p - b, m->allele_alignment, sizeof(m->allele_alignment));
        m->allele_alignment_length = p - b;
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2i32(b, p - b, &m->offset_in_reference);
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2buf(b, p - b, reference_alignment, sizeof(reference_alignment));
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2i32(b, p - b, &mate_offset_in_reference);
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2buf(b, p - b, mate_reference_alignment, sizeof(mate_reference_alignment));
        CG_LINE_NEXT_FIELD(b, len, p);
        rc = str2buf(b, p - b, tmp, sizeof(tmp));
        if( tmp[0] < 33 || tmp[0] > 126 ) {
            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
        }
        m->mapping_quality = tmp[0];
        for (i = 0; i < score_allele_num; ++i) {
            CG_LINE_NEXT_FIELD(b, len, p);
            rc = str2u16(b, p - b, &score_allele[i]);
	    if(rc){
		score_allele[i] =0;
		rc =0;
	    }
        }
        CG_LINE_NEXT_FIELD(b, len, p);
        m->read_len = p - b;
        rc = str2buf(b, m->read_len, m->read, sizeof(m->read));
        CG_LINE_LAST_FIELD(b, len, p);
        if( m->read_len != p - b ) {
            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInconsistent);
        } else {
            rc = str2buf(b, p - b, qual, sizeof(qual));
        }
        ((CGEvidenceDnbs15*)cself)->records++;
        if( strcmp(next_interval_id, data->interval_id) != 0 ) {
            if (score_allele_num == 3) {
              DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'"
                            "\t%i\t'%s'\t%i\t'%s'\t%c\t%hu\t%hu\t%hu\t'%.*s'\t'%s'\n",
                data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane,
                m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele,
                m->allele_alignment_length, m->allele_alignment, m->offset_in_reference,
                reference_alignment, mate_offset_in_reference, mate_reference_alignment,
                m->mapping_quality, score_allele[0], score_allele[1], score_allele[2], m->read_len, m->read, qual));
            }
            else if (score_allele_num == 4) {
              DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'"
                            "\t%i\t'%s'\t%i\t'%s'\t%c\t%hu\t%hu\t%hu\t%hu\t'%.*s'\t'%s'\n",
                data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane,
                m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele,
                m->allele_alignment_length, m->allele_alignment, m->offset_in_reference,
                reference_alignment, mate_offset_in_reference, mate_reference_alignment,
                m->mapping_quality, score_allele[0], score_allele[1], score_allele[2], score_allele[3], m->read_len, m->read, qual));
            }
            else { assert(0); }
        }
        CG_LINE_END();
        if( next_interval_id[0] == '\0' ) {
            break;
        }
        if( strcmp(next_interval_id, data->interval_id) != 0 ) {
            /* next record is from next interval, remeber it and stop */
            memcpy(&next_rec, m, sizeof(next_rec));
            data->qty--;
            break;
        }
    } while( rc == 0 );
    return rc;
}