#ifndef __VIENNA_RNA_PACKAGE_PS_DOT_H__
#define __VIENNA_RNA_PACKAGE_PS_DOT_H__
#include "data_structures.h"
#include "plot_layouts.h"
#ifdef __GNUC__
#define DEPRECATED(func) func __attribute__ ((deprecated))
#else
#define DEPRECATED(func) func
#endif
/**
* \file PS_dot.h
* \brief Various functions for plotting RNA secondary structures, dot-plots and other
* visualizations
*/
/* write PostScript drawing of structure to file with annotation */
int PS_rna_plot_snoop_a(char *string,
char *structure,
char *ssfile,
int *relative_access,
const char *seqs[]);
/**
* \brief Produce a secondary structure graph in PostScript and write it to 'filename'.
*
* Note that this function has changed from previous versions
* and now expects the structure to be plotted in dot-bracket notation as an
* argument. It does not make use of the global #base_pair array anymore.
*
* \param string The RNA sequence
* \param structure The secondary structure in dot-bracket notation
* \param file The filename of the postscript output
* \return 1 on success, 0 otherwise
*/
int PS_rna_plot(char *string,
char *structure,
char *file);
/**
* \brief Produce a secondary structure graph in PostScript including additional
* annotation macros and write it to 'filename'
*
* Same as PS_rna_plot() but adds extra PostScript macros for various
* annotations (see generated PS code). The 'pre' and 'post'
* variables contain PostScript code that is verbatim copied in the
* resulting PS file just before and after the structure plot.
* If both arguments ('pre' and 'post') are NULL, no additional macros will
* be printed into the PostScript.
*
* \param string The RNA sequence
* \param structure The secondary structure in dot-bracket notation
* \param file The filename of the postscript output
* \param pre PostScript code to appear before the secondary structure plot
* \param post PostScript code to appear after the secondary structure plot
* \return 1 on success, 0 otherwise
*/
int PS_rna_plot_a(char *string,
char *structure,
char *file,
char *pre,
char *post);
int PS_rna_plot_a_gquad(char *string,
char *structure,
char *ssfile,
char *pre,
char *post);
/**
* \brief Produce a secondary structure graph in Graph Meta Language (gml) and write it to a file
*
* If 'option' is an uppercase letter the RNA sequence is used to label nodes, if 'option' equals
* \a 'X' or \a 'x' the resulting file will coordinates for an initial layout of the graph.
*
* \param string The RNA sequence
* \param structure The secondary structure in dot-bracket notation
* \param ssfile The filename of the gml output
* \param option The option flag
* \return 1 on success, 0 otherwise
*/
int gmlRNA( char *string,
char *structure,
char *ssfile,
char option);
/**
* \brief Produce a secondary structure graph in SStructView format
*
* Write coord file for SStructView
*
* \param string The RNA sequence
* \param structure The secondary structure in dot-bracket notation
* \param ssfile The filename of the ssv output
* \return 1 on success, 0 otherwise
*/
int ssv_rna_plot( char *string,
char *structure,
char *ssfile);
/**
* \brief Produce a secondary structure plot in SVG format and write it to a file
*
* \param string The RNA sequence
* \param structure The secondary structure in dot-bracket notation
* \param ssfile The filename of the svg output
* \return 1 on success, 0 otherwise
*/
int svg_rna_plot( char *string,
char *structure,
char *ssfile);
/**
* \brief Produce a secondary structure plot for further editing in XRNA
*
* \param string The RNA sequence
* \param structure The secondary structure in dot-bracket notation
* \param ssfile The filename of the xrna output
* \return 1 on success, 0 otherwise
*/
int xrna_plot(char *string,
char *structure,
char *ssfile);
int PS_color_dot_plot(char *string,
cpair *pi,
char *filename);
int PS_color_dot_plot_turn( char *seq,
cpair *pi,
char *filename,
int winSize);
/**
* \brief Produce a postscript dot-plot from two pair lists
*
* This function reads two plist structures (e.g. base pair probabilities and a secondary structure)
* as produced by assign_plist_from_pr() and assign_plist_from_db() and produces a postscript
* "dot plot" that is written to 'filename'.\n
* Using base pair probabilities in the first and mfe structure in the second plist, the resulting
* "dot plot" represents each base pairing probability by a square of corresponding area in a upper
* triangle matrix. The lower part of the matrix contains the minimum free energy structure.
*
* \see assign_plist_from_pr(), assign_plist_from_db()
*
* \param seq The RNA sequence
* \param filename A filename for the postscript output
* \param pl The base pair probability pairlist
* \param mf The mfe secondary structure pairlist
* \param comment A comment
* \return 1 if postscript was successfully written, 0 otherwise
*/
int PS_dot_plot_list( char *seq,
char *filename,
plist *pl,
plist *mf,
char *comment);
int PS_dot_plot_turn( char *seq,
struct plist *pl,
char *filename,
int winSize);
int PS_color_aln( const char *structure,
const char *filename,
const char *seqs[],
const char *names[]);
/**
* PS_color_aln for duplexes
*/
int aliPS_color_aln(const char *structure,
const char *filename,
const char *seqs[],
const char *names[]);
/**
* Wrapper to PS_dot_plot_list
*
* \brief Produce postscript dot-plot
*
* Reads base pair probabilities produced by pf_fold() from the
* global array #pr and the pair list #base_pair produced by
* fold() and produces a postscript "dot plot" that is written to
* 'filename'. The "dot plot" represents each base pairing
* probability by a square of corresponding area in a upper triangle
* matrix. The lower part of the matrix contains the minimum free energy
* \note DO NOT USE THIS FUNCTION ANYMORE SINCE IT IS NOT THREADSAFE
*
* \deprecated This function is deprecated and will be removed soon! Use \ref PS_dot_plot_list() instead!
*/
DEPRECATED(int PS_dot_plot( char *string,
char *file));
#endif