struct slName *vgImageFileGenes(struct sqlConnection *conn, int imageFile) /* Return alphabetical list of all genes associated with image file. */ { struct hash *uniqHash = hashNew(0); struct slInt *imageList, *image; struct slName *geneList = NULL, *gene; imageList = visiGeneImagesForFile(conn, imageFile); for (image = imageList; image != NULL; image = image->next) { struct slName *oneList, *next; oneList = visiGeneGeneName(conn, image->val); for (gene = oneList; gene != NULL; gene = next) { next = gene->next; if (hashLookup(uniqHash, gene->name)) freeMem(gene); else { hashAdd(uniqHash, gene->name, NULL); slAddHead(&geneList, gene); } } } slFreeList(&imageList); hashFree(&uniqHash); slSort(&geneList, slNameCmp); return geneList; }
void doId(struct sqlConnection *conn) /* Set up Gene Pix on given ID. */ { int id = cartInt(cart, hgpDoId); struct slName *genes = visiGeneGeneName(conn, id); if (genes == NULL) { cartRemove(cart, hgpListSpec); cartRemove(cart, hgpId); } else { cartSetInt(cart, hgpId, id); cartSetString(cart, hgpListSpec, genes->name); } slFreeList(&genes); doDefault(conn, FALSE); }