/**
* \file plot_layouts.h
*
* \brief Secondary structure plot layout algorithms
*
* c Ronny Lorenz
* The ViennaRNA Package
*/
#ifndef __VIENNA_RNA_PACKAGE_PLOT_LAYOUTS_H__
#define __VIENNA_RNA_PACKAGE_PLOT_LAYOUTS_H__
#include "data_structures.h"
#include "naview.h"
#ifndef PI
#define PI 3.141592654
#endif
#define PIHALF PI/2.
/**
* \brief Definition of Plot type simple
*
* This is the plot type definition for several RNA structure plotting functions telling
* them to use Simple plotting algorithm
*
* \see rna_plot_type, PS_rna_plot_a(), PS_rna_plot(), svg_rna_plot(), gmlRNA(), ssv_rna_plot(), xrna_plot()
*/
#define VRNA_PLOT_TYPE_SIMPLE 0
/**
* \brief Definition of Plot type Naview
*
* This is the plot type definition for several RNA structure plotting functions telling
* them to use Naview plotting algorithm
*
* \see rna_plot_type, PS_rna_plot_a(), PS_rna_plot(), svg_rna_plot(), gmlRNA(), ssv_rna_plot(), xrna_plot()
*/
#define VRNA_PLOT_TYPE_NAVIEW 1
/**
* \brief Definition of Plot type Circular
*
* This is the plot type definition for several RNA structure plotting functions telling
* them to produce a Circular plot
*
* \see rna_plot_type, PS_rna_plot_a(), PS_rna_plot(), svg_rna_plot(), gmlRNA(), ssv_rna_plot(), xrna_plot()
*/
#define VRNA_PLOT_TYPE_CIRCULAR 2
/**
* \brief Switch for changing the secondary structure layout algorithm
*
* Current possibility are 0 for a simple radial drawing or 1 for the modified
* radial drawing taken from the \e naview program of \ref bruccoleri_88 "Bruccoleri & Heinrich (1988)".
*
* \note To provide thread safety please do not rely on this global variable in future implementations
* but pass a plot type flag directly to the function that decides which layout algorithm it may use!
*
* \see #VRNA_PLOT_TYPE_SIMPLE, #VRNA_PLOT_TYPE_NAVIEW, #VRNA_PLOT_TYPE_CIRCULAR
*
*/
extern int rna_plot_type;
/**
* \brief Calculate nucleotide coordinates for secondary structure plot the Simple way
*
* \see make_pair_table(), rna_plot_type, simple_circplot_coordinates(), naview_xy_coordinates(), PS_rna_plot_a(),
* PS_rna_plot, svg_rna_plot()
*
* \param pair_table The pair table of the secondary structure
* \param X a pointer to an array with enough allocated space to hold the x coordinates
* \param Y a pointer to an array with enough allocated space to hold the y coordinates
* \return length of sequence on success, 0 otherwise
*/
int simple_xy_coordinates(short *pair_table,
float *X,
float *Y);
/**
* \brief Calculate nucleotide coordinates for Circular Plot
*
* This function calculates the coordinates of nucleotides mapped in equal distancies onto a unit circle.
*
* \note In order to draw nice arcs using quadratic bezier curves that connect base pairs one may calculate
* a second tangential point \f$P^t\f$ in addition to the actual R2 coordinates.
* the simplest way to do so may be to compute a radius scaling factor \f$rs\f$ in the interval \f$[0,1]\f$ that
* weights the proportion of base pair span to the actual length of the sequence. This scaling factor
* can then be used to calculate the coordinates for \f$P^t\f$, i.e. \f$ P^{t}_x[i] = X[i] * rs\f$
* and \f$P^{t}_y[i] = Y[i] * rs\f$.
*
* \see make_pair_table(), rna_plot_type, simple_xy_coordinates(), naview_xy_coordinates(), PS_rna_plot_a(),
* PS_rna_plot, svg_rna_plot()
*
* \param pair_table The pair table of the secondary structure
* \param x a pointer to an array with enough allocated space to hold the x coordinates
* \param y a pointer to an array with enough allocated space to hold the y coordinates
* \return length of sequence on success, 0 otherwise
*/
int simple_circplot_coordinates(short *pair_table,
float *x,
float *y);
#endif