/****************************************************************************** * This function creates an instance of a data block reader UDT for reading * priors from a MEME PSP file. *****************************************************************************/ DATA_BLOCK_READER_T *new_prior_reader_from_psp(const char *filename) { PSP_DATA_BLOCK_READER_T *psp_reader = mm_malloc(sizeof(PSP_DATA_BLOCK_READER_T) * 1); psp_reader->at_start_of_line = TRUE; int filename_len = strlen(filename) + 1; psp_reader->filename = mm_malloc(sizeof(char)* filename_len); psp_reader->filename_len = filename_len; strncpy(psp_reader->filename, filename, filename_len); psp_reader->sequence_header = NULL; psp_reader->sequence_header_len = 0; psp_reader->psp_file = fopen(psp_reader->filename, "r"); if (psp_reader->psp_file == NULL) { die( "Unable to open file: %s.\nError message: %s.\n", psp_reader->filename, strerror(errno) ); } DATA_BLOCK_READER_T *reader = new_data_block_reader( (void *) psp_reader, free_prior_reader_from_psp, close_prior_reader_from_psp, reset_prior_reader_from_psp, get_next_data_block_from_prior_reader_from_psp, go_to_next_sequence_in_prior_reader_from_psp, get_seq_name_from_prior_reader_from_psp ); return reader; }
/****************************************************************************** * This function creates an instance of a data block reader UDT for reading * priors from a wiggle file. *****************************************************************************/ DATA_BLOCK_READER_T *new_prior_reader_from_wig( const char *filename, double default_prior ) { WIGGLE_READER_T *raw_reader = new_wiggle_reader(filename); WIG_PRIOR_BLOCK_READER_T *wig_reader = mm_malloc(sizeof(WIG_PRIOR_BLOCK_READER_T) * 1); wig_reader->raw_reader = raw_reader; wig_reader->current_position = 0; wig_reader->default_prior = default_prior; wig_reader->sequence_name = NULL; // Setup "Virtual" function table DATA_BLOCK_READER_T *reader = new_data_block_reader( (void *) wig_reader, free_prior_reader_from_wig, close_prior_reader_from_wig, reset_prior_reader_from_wig, prior_reader_from_wig_is_eof, get_next_data_block_from_wig, unget_data_block_from_wig, go_to_next_sequence_in_wiggle_reader, get_seq_name_from_wig ); return reader; }
/****************************************************************************** * This function creates an instance of a data block reader UDT for reading * sequence segments from a FASTA file. *****************************************************************************/ DATA_BLOCK_READER_T *new_seq_reader_from_fasta( BOOLEAN_T parse_genomic_coord, ALPH_T alph, const char *filename ) { SEQ_READER_FROM_FASTA_T *fasta_reader = mm_malloc(sizeof(SEQ_READER_FROM_FASTA_T) * 1); fasta_reader->at_start_of_line = TRUE; fasta_reader->parse_genomic_coord = parse_genomic_coord; int filename_len = strlen(filename) + 1; fasta_reader->filename = mm_malloc(sizeof(char)* filename_len); fasta_reader->filename_len = filename_len; strncpy(fasta_reader->filename, filename, filename_len); fasta_reader->current_position = 0; fasta_reader->sequence_header = NULL; fasta_reader->sequence_header_len = 0; fasta_reader->sequence_name = NULL; fasta_reader->sequence_name_len = 0; fasta_reader->alphabet = alph; if ( open_file( filename, "r", TRUE, "FASTA", "sequences", &(fasta_reader->fasta_file )) == FALSE) { die("Couldn't open the file %s.\n", filename); } DATA_BLOCK_READER_T *reader = new_data_block_reader( (void *) fasta_reader, free_seq_reader_from_fasta, close_seq_reader_from_fasta, reset_seq_reader_from_fasta, seq_reader_from_fasta_is_eof, get_next_data_block_from_seq_reader_from_fasta, go_to_next_sequence_in_seq_reader_from_fasta, get_seq_name_from_seq_reader_from_fasta ); return reader; }