Пример #1
0
static void validateTag(char *database,struct trackDb *tdb,char *type,char *tag,
                        boolean firstIsDigitWarning)
// Determines if tag is conforming to rules:
// 1) must exist
// 2) cannot be all numeric.
// 3) Contains only letters, numbers, '_', '-'
// 4) Begins with a letter
// Aborts on 1-3 and optionally warns on 4
{
char *c = tag;
if (*c == '\0')
    errAbort("Track %s.%s has no '%s' tag",database,tdb->track,type);

if (!isalpha(*c))
    {
    if (countLeadingDigits(tag) == strlen(tag))
        errAbort("Track %s.%s has all numeric '%s' tag '%s'",database,tdb->track,type,tag);
    if (!firstIsDigitWarning)
        return;
    warn("Track %s.%s has non-conforming '%s' tag '%s' (begins with digit)",
         database,tdb->track,type,tag);
    }
for (c++;*c != '\0';c++)
    {
    if (!isalnum(*c) && *c != '_' && *c != '-')
        errAbort("Track %s.%s has non-conforming '%s' tag '%s' (contains unsupported characters)",
                database,tdb->track,type,tag);
    }
}
Пример #2
0
Файл: bam.c Проект: bowhan/kent
int cigarWidth(char *cigar, int cigarSize)
/* Return width of alignment as encoded in cigar format string. */
{
int tLength=0;
char *s, *end = cigar + cigarSize;
s = cigar;
while (s < end)
    {
    int digCount = countLeadingDigits(s);
    if (digCount <= 0)
        errAbort("expecting number got %s in cigarWidth", s);
    int n = atoi(s);
    s += digCount;
    char op = *s++;
    switch (op)
	{
	case 'M': // match or mismatch (gapless aligned block)
	    tLength += n;
	    break;
	case 'I': // inserted in query
	    break;
	case 'D': // deleted from query
	case 'N': // long deletion from query (intron as opposed to small del)
	    tLength += n;
	    break;
	case 'S': // skipped query bases at beginning or end ("soft clipping")
	case 'H': // skipped query bases not stored in record's query sequence ("hard clipping")
	case 'P': // P="silent deletion from padded reference sequence" -- ignore these.
	    break;
	default:
	    errAbort("cigarWidth: unrecognized CIGAR op %c -- update me", op);
	}
    }
return tLength;
}
Пример #3
0
struct dyString *unrepFileName(char *fileName, boolean isSingle)
/* Return string with Rep# in fileName replaced with "Merged" */
{
char *s = strstr(fileName, "Rep");
struct dyString *dy = dyStringNew(0);
if (s == NULL)
    {
    if (isSingle)
        dyStringAppend(dy, fileName);
    else
        errAbort("No 'Rep' in fileName %s", fileName);
    }
else
    {
    char *pastRep = s + strlen("Rep");
    int digitCount = countLeadingDigits(pastRep);
    if (digitCount < 1)
        errAbort("No digits after 'Rep' in filename %s", fileName);
    pastRep += digitCount;
    dyStringAppendN(dy, fileName, s-fileName);
    dyStringAppend(dy, "Merged");
    int len = strlen(pastRep);
    if (!isSingle && endsWith(pastRep, ".gz"))
        len -= strlen(".gz");
    dyStringAppendN(dy, pastRep, len);
    }
return dy;
}
Пример #4
0
INLINE boolean isAllDigits(char *s)
{
return (isNotEmpty(s) && countLeadingDigits(s) == strlen(s));
}