+ changed interface array_function to array_class
[qpalma.git] / QPalmaDP / qpalma_dp.cpp
index 171aa05..cb6cb8c 100644 (file)
@@ -1,4 +1,6 @@
 #include "qpalma_dp.h"
+#include <cstring>
+using namespace std;
 
 /*[splice_align, est_align, weightMatch, alignmentscores, dnaest] = ...
   myalign([nr_paths], dna, est, {h}, matchmatrix, donor, acceptor, remove_duplicate_scores, ...
@@ -24,27 +26,29 @@ Alignment::Alignment() {
 
 Alignment::~Alignment() {}
 
-void Alignment::setQualityMatrix(double* qualityMat, int length){}
+void Alignment::setQualityMatrix(double* qMat, int length){
+   qualityMatrix = new double[length];
+   for(int i=0; i<length; i++)
+      qualityMatrix[i] = qMat[i];
+}
 void Alignment::getSpliceAlign(){}
 void Alignment::getEstAlign(){}
 void Alignment::getWeightMatch(){}
 void Alignment::getTotalScores(){}
 void Alignment::getDNAEST(){}
 
-void Alignment::myalign(int nr_paths, char* dna, int dna_len, char* est,
-      int est_len, struct penalty_struct h, double* matchmatrix, int mm_len,
+void Alignment::myalign(int nr_paths_p, char* dna, int dna_len_p, char* est,
+      int est_len_p, struct penalty_struct h, double* matchmatrix, int mm_len,
       double* donor, int d_len, double* acceptor, int a_len,
       bool remove_duplicate_scores, bool print_matrix) {
 
-  
-  /***************************************************************************/
-  // variables 
-  /***************************************************************************/
-  const int mlen = 6; // score matrix: length of 6 for "- A C G T N"
-  int arg = 0 ; // counter variable
-  int failure ; // 
+   printf("Entering myalign...\n");
+
+   mlen = 6; // score matrix: length of 6 for "- A C G T N"
+   dna_len =  dna_len_p;
+   est_len =  est_len_p;
+   nr_paths = nr_paths_p;
 
-  penalty_struct* functions;
 #if 0
   /***************************************************************************/
   // 3. h (cell array)
@@ -99,23 +103,33 @@ void Alignment::myalign(int nr_paths, char* dna, int dna_len, char* est,
       matrices[z] = new Pre_score[dna_len * est_len];
   }
   
-  fill_matrix(nr_paths, matrices, est_len, dna_len, est, dna, functions, matchmatrix, donor, acceptor, remove_duplicate_scores, nr_donor_sites, donor_sites, max_score_positions);
+  printf("calling fill_matrix...\n");
+
+  fill_matrix(nr_paths, matrices, est_len, dna_len, est, dna, &h, matchmatrix, donor, acceptor, remove_duplicate_scores, nr_donor_sites, donor_sites, max_score_positions);
   
+  printf("after call to fill_matrix...\n");
   /***************************************************************************/ 
   // return arguments etc.
   /***************************************************************************/
   int result_length; //Eine Variable fuer alle Matrizen
 
-  int* splice_align = new int[(dna_len-1)*nr_paths];
-  int* est_align = new int[(est_len-1)*nr_paths];
-  int* mmatrix_param = new int[(mlen*mlen)*nr_paths];
-  double alignmentscores[nr_paths]; //alignment score for each path/matrix
+  printf("before init of splice_align and rest...\n");
+
+  splice_align = new int[(dna_len-1)*nr_paths];
+  est_align = new int[(est_len-1)*nr_paths];
+  mmatrix_param = new int[(mlen*mlen)*nr_paths];
+  alignmentscores = new double[nr_paths]; //alignment score for each path/matrix
 
-  //memset((char*)splice_align, -1, (dna_len-1)*nr_paths*sizeof(int)); // fills splice_align with zeros
-  //memset((char*)est_align, -1, (est_len-1)*nr_paths*sizeof(int)); // fills est_align with zeros
-  //memset((char*)mmatrix_param, 0, mlen*mlen*nr_paths*sizeof(int)); //fills mmatrix_param with zeros
-  //memset(alignmentscores, -1, nr_paths*sizeof(double)); //fills alignmentscores with zeros
+  printf("Lengths are %d %d %d...\n",dna_len,est_len,mlen);
+  printf("before memset...\n");
+
+  memset((char*)splice_align, -1, (dna_len-1)*nr_paths*sizeof(int)); // fills splice_align with zeros
+  memset((char*)est_align, -1, (est_len-1)*nr_paths*sizeof(int)); // fills est_align with zeros
+  memset((char*)mmatrix_param, 0, mlen*mlen*nr_paths*sizeof(int)); //fills mmatrix_param with zeros
+  memset(alignmentscores, -1, nr_paths*sizeof(double)); //fills alignmentscores with zeros
   
+  printf("after memset...\n");
+
   for (int z=0; z<nr_paths; z++) {      
     result_length = 0 ;
     
@@ -166,4 +180,31 @@ void Alignment::myalign(int nr_paths, char* dna, int dna_len, char* est,
     }
     
   } //end of z
+
+  printf("Leaving myalign...\n");
 }
+
+void Alignment::getAlignmentResults(int* s_align, int* e_align,
+      int* mmatrix_p, double* alignscores) {
+
+   printf("Entering getAlignmentResults...\n");
+   uint splice_align_size = (dna_len-1)*nr_paths;
+   uint est_align_size = (est_len-1)*nr_paths;
+   uint mmatrix_param_size = (mlen*mlen)*nr_paths;
+   uint alignmentscores_size = nr_paths; //alignment score for each path/matrix
+
+   for(int idx=0; idx<splice_align_size; idx++)
+      s_align[idx] = splice_align[idx];
+
+   for(int idx=0; idx<est_align_size; idx++)
+      e_align[idx] =  est_align[idx];
+
+   for(int idx=0; idx<mmatrix_param_size; idx++)
+      mmatrix_p[idx] = mmatrix_param[idx];
+
+   for(int idx=0; idx<alignmentscores_size; idx++)
+      alignscores[idx] = alignmentscores[idx];
+   
+   printf("Leaving getAlignmentResults...\n");
+}
+