/* Function: ReadAlignment() * * Purpose: Given a seqfile name and format, hand it off to appropriate * parser. * * Currently, squid can parse alignments from the following * interleaved multiple sequence alignment formats: * MSF (U. of Wisconsin GCG package MSF format) * SELEX (NeXagen/CU Boulder SELEX format) * CLUSTAL (Des Higgins' CLUSTALV and CLUSTALW programs) * and can sequentially read: * FASTA (aka UCSC's "a2m") * * Return: 1 on success; 0 on failure. * Returned data should be freed by caller with FreeAlignment() */ int ReadAlignment(char *seqfile, int format, char ***ret_aseqs, struct aliinfo_s *ret_ainfo) { switch (format) { case kMSF: if (! ReadInterleaved(seqfile, skip_MSF, parse_MSF, dataline_MSF, ret_aseqs, ret_ainfo)) return 0; break; case kSelex: if (! ReadSELEX(seqfile, ret_aseqs, ret_ainfo)) return 0; break; case kClustal: if (! ReadInterleaved(seqfile, skip_clustal, parse_clustal, dataline_clustal, ret_aseqs, ret_ainfo)) return 0; break; case kPearson: ReadAlignedFASTA(seqfile, NULL, ret_aseqs, ret_ainfo); break; default: squid_errno = SQERR_FORMAT; return 0; } return 1; }
/* Function: MSAFileRead() * Date: SRE, Fri May 28 16:01:43 1999 [St. Louis] * * Purpose: Read the next msa from an open alignment file. * This is a wrapper around format-specific calls. * * Args: afp - open alignment file * * Returns: next alignment, or NULL if out of alignments */ MSA * MSAFileRead(MSAFILE *afp) { MSA *msa = NULL; switch (afp->format) { case MSAFILE_STOCKHOLM: msa = ReadStockholm(afp); break; case MSAFILE_MSF: msa = ReadMSF(afp); break; case MSAFILE_A2M: msa = ReadA2M(afp); break; case MSAFILE_CLUSTAL: msa = ReadClustal(afp); break; case MSAFILE_SELEX: msa = ReadSELEX(afp); break; case MSAFILE_PHYLIP: msa = ReadPhylip(afp); break; default: Die("MSAFILE corrupted: bad format index"); } return msa; }