WSTester updated to work plus hopefully all the other changes that need to go into...
[jabaws.git] / binaries / src / ViennaRNA / RNAforester / src / ppforest.h
diff --git a/binaries/src/ViennaRNA/RNAforester/src/ppforest.h b/binaries/src/ViennaRNA/RNAforester/src/ppforest.h
new file mode 100644 (file)
index 0000000..0b6bee3
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+  Copyright by Matthias Hoechsmann (C) 2002-2004
+  =====================================                                   
+  You may use, copy and distribute this file freely as long as you
+  - do not change the file,
+  - leave this copyright notice in the file,
+  - do not make any profit with the distribution of this file
+  - give credit where credit is due
+  You are not allowed to copy or distribute this file otherwise
+  The commercial usage and distribution of this file is prohibited
+  Please report bugs and suggestions to <mhoechsm@TechFak.Uni-Bielefeld.DE>
+*/
+
+#ifndef _PPFOREST_H_
+#define _PPFOREST_H_
+
+#include <string>
+#include <iostream>
+
+#include "algebra.h"
+//#include "alignment.h"
+#include "misc.h"
+#include "ppforestbase.h"
+
+using namespace std;
+
+//template<class R,class L,class AL>
+//class Alignment;
+
+/** The template class PPForest<L> is the basic class that is handled by the alignmnent
+ *  algorithms of the RNAforester template library. The template parameter L is the
+ *  datatype of the forest labels.
+ */
+template <class L>
+class PPForest : public PPForestBase
+{
+  template <class R, class LX, class AL>
+  friend class Alignment;
+
+  public:
+  typedef typename PPForestBase::size_type size_type;
+
+private:
+       /** internal function used by '<<' operator to print bracket notation of the forest*/
+       void print(ostream &s,size_type node,bool brackets) const;
+
+       /** Calculate maximal score of csf (i,j) for a certain Algebra.
+       *  It is assumed that a perfect match of the forest obtains the best
+       *  possible score.
+       */
+       template <class R>
+       R maxScore(const Algebra<R,L> &alg, size_type i, size_type j) const;
+       /** Calculate maximal score of csf (i,j) for a certain RNAAlgebra.
+       *  It is assumed that a perfect match of the forest obtains the best
+       *  possible score.
+       */
+       template <class R>
+       R maxScore(const RNA_Algebra<R,L> &alg, size_type i, size_type j) const;
+
+       /** Function showLabel is used by print routines of PPForest */
+//     virtual void showLabel(ostream &s,char c) const {s << c;};
+       virtual void showLabel(ostream &s,L l) const {s << 'X';};
+
+       /** Function makeLabel is used by function buildForest */
+//     virtual void makeLabel(char &a,char c) {a=c;};
+
+       void makeLabel(L &a,char c) {};
+
+
+protected:
+       L *m_lb;        
+
+       void initialize(size_type size);
+
+public:
+       typedef L label_type;
+
+       /** Default Constructor */
+       PPForest() : PPForestBase(), m_lb(NULL) {};
+       /** Construct a PPForest with 'size' nodes */
+       PPForest(size_type size);
+       /** Copy constructor */
+       PPForest(const PPForest<L> &ppf);
+       /** Read PPForest from binary file */
+       PPForest(istream &s);
+
+       virtual ~PPForest();    
+
+       /** returns label of node i */
+       inline L label(size_type i) const {return m_lb[i];};
+
+       /** Calculate maximal score of a forest alignment against itself for a certain Algebra.
+       *  It is assumed that a perfect match of the forest obtains the best
+       *  possible score.
+       */
+       template <class R>
+       inline R maxScore(const Algebra<R,L> &alg) const
+       {
+               return maxScore(alg,0,getMaxLength(0));
+       }  
+
+       /** Calculate maximal score of a forest alignment against itself for a certain RNA_Algebra.
+       *  It is assumed that a perfect match of the forest obtains the best
+       *  possible score.
+       */
+       template <class R>
+       inline R maxScore(const RNA_Algebra<R,L> &alg) const
+       {
+               return maxScore(alg,0,getMaxLength(0));
+       }  
+
+       /** Print forest in GraphViz format */
+       void printDot(ostream &s) const;
+
+       /** Save forest to binary file */
+       void save(ostream &s) const;
+};
+
+/** Stream output operator for PPForest<L> */
+template <class L>
+ostream& operator<< (ostream &s, PPForest<L> &ppf);
+
+#endif
+