void liftAcross(char *liftAcross, char *srcFile, char *dstOut) /* liftAcross - convert one coordinate system to another, no overlapping items. */ { struct hash *lftHash = readLift(liftAcross); struct genePred *gpList = genePredExtLoadAll(srcFile); struct genePred *gp = NULL; FILE *out = mustOpen(dstOut, "w"); if (bedOut) bedRegionOutput(lftHash); int genePredItemCount = 0; for (gp = gpList; gp != NULL; gp = gp->next) { struct liftSpec *lsFound = hashFindVal(lftHash, gp->chrom); if (lsFound) { struct genePred *gpLifted = liftGenePred(gp, lsFound); struct genePred *gpl; for (gpl = gpLifted; gpl != NULL; gpl = gpl->next) genePredTabOut(gpl, out); genePredFreeList(&gpLifted); } else { genePredTabOut(gp, out); } ++genePredItemCount; } /* lftHash and gpList are left allocated to disappear at exit */ verbose(2,"#\tgene pred item count: %d\n", genePredItemCount); }
void liftUp(char *destFile, char *liftFile, char *howSpec, int sourceCount, char *sources[]) /* liftUp - change coordinates of .psl, .agp, or .out file * to parent coordinate system. */ { struct liftSpec *lifts = NULL; struct hash *liftHash; char *destType = optionVal("type", destFile); if (sameWord(howSpec, "carry")) how = carryMissing; else if (sameWord(howSpec, "warn")) how = warnMissing; else if (sameWord(howSpec, "drop")) how = silentDrop; else if (sameWord(howSpec, "error")) how = errorMissing; else usage(); if (how == carryMissing && sameString("/dev/null", liftFile)) verbose(1, "Carrying input -- ignoring /dev/null liftFile\n"); else { lifts = readLifts(liftFile); verbose(1, "Got %d lifts in %s\n", slCount(lifts), liftFile); } if (endsWith(destType, ".out")) { rmChromPart(lifts); liftHash = hashLift(lifts, FALSE); liftOut(destFile, liftHash, sourceCount, sources); } else if (endsWith(destType, ".pslx") || endsWith(destType, ".xa") || endsWith(destType, ".psl")) { rmChromPart(lifts); liftHash = hashLift(lifts, TRUE); liftPsl(destFile, liftHash, sourceCount, sources, optionExists("pslQ") || optionExists("pslq"), !endsWith(destType, ".psl") ); } else if (endsWith(destType, ".agp")) { liftHash = hashLift(lifts, FALSE); liftAgp(destFile, liftHash, sourceCount, sources); } else if (endsWith(destType, ".gap")) { liftHash = hashLift(lifts, TRUE); liftGap(destFile, liftHash, sourceCount, sources); } else if (endsWith(destType, ".gl")) { rmChromPart(lifts); liftHash = hashLift(lifts, FALSE); liftGl(destFile, liftHash, sourceCount, sources); } else if (endsWith(destType, ".gff") || endsWith(destType, ".gtf")) { rmChromPart(lifts); liftHash = hashLift(lifts, TRUE); liftGff(destFile, liftHash, sourceCount, sources); } else if (endsWith(destType, ".gdup")) { rmChromPart(lifts); liftHash = hashLift(lifts, FALSE); liftGdup(destFile, liftHash, sourceCount, sources); } else if (endsWith(destType, ".bed")) { rmChromPart(lifts); liftHash = hashLift(lifts, TRUE); liftBed(destFile, liftHash, sourceCount, sources); } else if (endsWith(destType, ".bed8")) { rmChromPart(lifts); liftHash = hashLift(lifts, TRUE); liftBed8(destFile, liftHash, sourceCount, sources); } else if (endsWith(destType, ".gp") || endsWith(destType, ".genepred")) { rmChromPart(lifts); liftHash = hashLift(lifts, TRUE); if (extGenePred) liftGenePredExt(destFile, liftHash, sourceCount, sources); else liftGenePred(destFile, liftHash, sourceCount, sources); } else if (endsWith(destType, ".bscore")) { rmChromPart(lifts); liftHash = hashLift(lifts, TRUE); liftBScore(destFile, liftHash, sourceCount, sources, optionExists("pslQ") || optionExists("pslq")); } else if (endsWith(destType, ".tab")) { rmChromPart(lifts); liftHash = hashLift(lifts, TRUE); liftBlast(destFile, liftHash, sourceCount, sources); } else if (strstr(destType, "gold")) { rmChromPart(lifts); liftHash = hashLift(lifts, FALSE); liftAgp(destFile, liftHash, sourceCount, sources); } else if (strstr(destType, ".axt")) { rmChromPart(lifts); liftHash = hashLift(lifts, FALSE); liftAxt(destFile, liftHash, sourceCount, sources, optionExists("axtQ") || optionExists("axtq")); } else if (strstr(destType, ".chain")) { rmChromPart(lifts); liftHash = hashLift(lifts, TRUE); liftChain(destFile, liftHash, sourceCount, sources, optionExists("chainQ") || optionExists("chainq")); } else if (strstr(destType, ".net")) { rmChromPart(lifts); liftHash = hashLift(lifts, FALSE); liftNet(destFile, liftHash, sourceCount, sources, optionExists("netQ") || optionExists("netq")); } else if (strstr(destType, ".wab")) { rmChromPart(lifts); liftHash = hashLift(lifts, FALSE); liftWab(destFile, liftHash, sourceCount, sources, optionExists("wabaQ") || optionExists("wabaq")); } else { errAbort("Unknown file suffix for %s\n", destType); } }