WSTester updated to work plus hopefully all the other changes that need to go into...
[jabaws.git] / binaries / src / ViennaRNA / RNAforester / src / algebra.h
diff --git a/binaries/src/ViennaRNA/RNAforester/src/algebra.h b/binaries/src/ViennaRNA/RNAforester/src/algebra.h
new file mode 100644 (file)
index 0000000..0c38270
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+  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 _ALGEBRA_H_
+#define _ALGEBRA_H_
+
+/** Algebra is a virtual class (interface) for algebra used by the Alignment template classes.
+ *  This is in the spirit of the Algebraic Dynamic Programming (ADP) approach where a Dynamic Programming
+ *  algorithm is seperated into a grammar and an algebra.
+ */
+template<class R, class L>
+class Algebra
+{
+public:
+    virtual R empty() const =0;                                                                /**< Result for the empty tree alignment */
+    virtual R replace(L a,R down, L b, R over) const =0;       /**< Result for the tree edit function 'replace' */    
+    virtual R del(L a,R down, R over) const =0;                                /**< Result for the tree edit function 'delete' */    
+    virtual R insert(R down,L b,R over) const =0;                      /**< Result for the tree edit function 'insert' */ 
+    virtual R choice(R a,R b) const =0;                                                /**< The choice function. Commonly used functions are 'min' and 'max' */ 
+    virtual R worst_score() const =0;                                          /**< The worst_score with respect to choice is specified by this function */
+
+    virtual ~Algebra() {};
+}; 
+
+/** Extended Algebra for aligning RNA secondary structure trees where basepair replacements
+ *  are considered as a single edit operation.
+ */
+template<class R, class L>
+class RNA_Algebra : public Algebra<R,L>
+{
+public:
+       /** Result for the replacement of a basepair */
+       virtual R replacepair(L la, L lb, R down, L ra, L rb, R over) const =0;
+};
+
+/** Algebra for the tree edit model */
+template<class R, class L>
+class SZAlgebra
+{
+public:
+    virtual R empty() const =0;                                                                /**< Result for the empty tree alignment */
+    virtual R replace(L a,R down, L b) const =0;                       /**< Result for the tree edit function 'replace' */    
+    virtual R del(L a,R down) const =0;                                                /**< Result for the tree edit function 'delete' */    
+    virtual R insert(R down,L b) const =0;                                     /**< Result for the tree edit function 'insert' */ 
+    virtual R choice(R a,R b) const =0;                                                /**< The choice function. Commonly used functions are 'min' and 'max' */ 
+    virtual R worst_score() const =0;                                          /**< The worst_score with respect to choice is specified by this function */
+
+    virtual ~SZAlgebra() {};
+}; 
+
+#endif
+
+
+
+
+