/************************************************************************** * Generate logos for a motif * Warning, this may modify the path and motif arguments. **************************************************************************/ static void generate_motif_logos(OPTIONS_T *options, STR_T *path, MOTIF_T *motif) { int path_len; char name[MAX_MOTIF_ID_LENGTH + 1]; copy_and_sanatise_name(name, get_motif_id(motif), MAX_MOTIF_ID_LENGTH); name[MAX_MOTIF_ID_LENGTH] = '\0'; path_len = str_len(path); str_appendf(path, "logo%s", name); CL_create1(motif, FALSE, FALSE, "MEME (no SSC)", str_internal(path), options->eps, options->png); if (options->rc) { str_truncate(path, path_len); str_appendf(path, "logo_rc%s", name); reverse_complement_motif(motif); CL_create1(motif, FALSE, FALSE, "MEME (no SSC)", str_internal(path), options->eps, options->png); } str_truncate(path, path_len); }
void generate_ceq_logos(char *meme_path, char *output_dir) { int i, dir_len, prefix_len, path_len; ARRAY_T *background; BOOLEAN_T has_reverse_strand; char *path, *alphabet; double logo_height, logo_width; ARRAYLST_T *motifs; MOTIF_T *motif; motifs = arraylst_create(); logo_height = LOGOHEIGHT; //make the path dir_len = strlen(output_dir); prefix_len = strlen(LOGO_PREFIX); path_len = dir_len + 1 + prefix_len + MAX_MOTIF_ID_LENGTH + 1; path = malloc(sizeof(char)*path_len); strncpy(path, output_dir, path_len); if (path[dir_len-1] != '/') { path[dir_len] = '/'; path[++dir_len] = '\0'; } strncpy(path+dir_len, LOGO_PREFIX, path_len - dir_len); // Read all motifs into an array. read_meme_file2(meme_path, NULL, // bg file name DEFAULT_PSEUDOCOUNTS, REQUIRE_PSPM, motifs, NULL,//motif occurrences &has_reverse_strand, &background); // global alphabet is set by read_meme_file alphabet = get_alphabet(FALSE); if (create_output_directory(output_dir, TRUE, (verbosity >= NORMAL_VERBOSE))) { // Failed to create output directory. exit(1); } for(i = 0; i < arraylst_size(motifs); i++) { motif = (MOTIF_T*)arraylst_get(i, motifs); logo_width = get_motif_length(motif); if (logo_width > MAXLOGOWIDTH) logo_width = MAXLOGOWIDTH; copy_and_sanatise_name(path+(dir_len+prefix_len), get_motif_id(motif), path_len - (dir_len + prefix_len)); CL_create2( motif, // motif "", // no title NULL, // no second motif "", // no x-axis label FALSE, // no error bars FALSE, // ssc logo_height, // logo height (cm) logo_width, // logo width (cm) alphabet, // alphabet 0, // no offset to second motif path, // output file path "MEME (no SSC)" // program name ); } free_motifs(motifs); free_array(background); // not used free(path); }