8de67388be9a67cb94ba95615b7643b4ddc385da braney Thu Sep 24 17:48:19 2026 -0700 quickLift: give a lifted maf block the reference's own bases, refs #38249 Inside a chain block the two assemblies run in step but need not agree base for base, and the first row of a lifted block still carried the other assembly's letters. The details page showed hg19's base in the human row of a block lifted onto hg38. quickLiftMafs now reads the reference sequence once over the span of the lifted blocks and writes it into that row, leaving the gaps where they are. The lifted blocks are also sorted by position now. On a chain that turns the alignment over they came back last to first, and the details page listed them in that order. diff --git src/hg/hgc/mafClick.c src/hg/hgc/mafClick.c index 7c22ecaecae..e9b28d7f1e5 100644 --- src/hg/hgc/mafClick.c +++ src/hg/hgc/mafClick.c @@ -578,31 +578,32 @@ else { struct sqlConnection *srcConn = hAllocConn(liftDb); struct sqlConnection *srcConn2 = hAllocConn(liftDb); someMafs = mafLoadInRegion2(srcConn, srcConn2, table, range->chrom, range->start, range->end, fileName); hFreeConn(&srcConn); hFreeConn(&srcConn2); } srcList = slCat(srcList, someMafs); } // the reference row has to be named the way the code below goes looking for it char refSrc[512]; safef(refSrc, sizeof refSrc, "%s.%s", hubConnectSkipHubPrefix(database), seqName); -return quickLiftMafs(chainHash, srcList, liftDb, refSrc, hChromSize(database, seqName)); +return quickLiftMafs(chainHash, srcList, liftDb, database, seqName, refSrc, + hChromSize(database, seqName)); } static void mafOrAxtClick2(struct sqlConnection *conn, struct sqlConnection *conn2, struct trackDb *tdb, char *axtOtherDb, char *fileName) /* Display details for MAF or AXT tracks. */ { if (issueBotWarning) { char *ip = getenv("REMOTE_ADDR"); botDelayMessage(ip, botDelayMillis); } if (winEnd - winStart > 30000) { printf("Zoom so that window is 30,000 bases or less to see alignments and conservation statistics\n"); } else