start breaking save out from Mussa::analyze()
[mussa.git] / alg / mussa.cpp
index dc86cba1b8bc97230d1e7e4faa01c5cc543e9046..1c35273afffc485217abedf4b37bb8c86fd4bcf2 100644 (file)
@@ -416,47 +416,19 @@ Mussa::load_mupa_file(fs::path para_file_path)
 void
 Mussa::analyze()
 {
-  time_t t1, t2, begin, end;
-  double seqloadtime, seqcomptime, nwaytime, savetime, totaltime;
-
-  begin = time(NULL);
-
-  t1 = time(NULL);
-        
   if (the_seqs.size() < 2) {
     throw mussa_analysis_error("you need to have at least 2 sequences to "
                                "do an analysis.");
   }
   //cout << "nway ana: seq_num = " << the_seqs.size() << endl;
 
-  t2 = time(NULL);
-  seqloadtime = difftime(t2, t1);
-
-  t1 = time(NULL);
   seqcomp();
-  t2 = time(NULL);
-  seqcomptime = difftime(t2, t1);
-
-  t1 = time(NULL);
   the_paths.setup(window, threshold);
   nway();
-  t2 = time(NULL);
-  nwaytime = difftime(t2, t1);
-
-  t1 = time(NULL);
-  save();
-  t2 = time(NULL);
-  savetime = difftime(t2, t1);
-
-  end = time(NULL);
-  totaltime = difftime(end, begin);
-
-  //cout << "seqload\tseqcomp\tnway\tsave\ttotal\n";
-  //cout << seqloadtime << "\t";
-  //cout << seqcomptime << "\t";
-  //cout << nwaytime << "\t";
-  //cout << savetime << "\t";
-  //cout << totaltime << "\n";
+  // FIXME: once we implement a save feature we should remove this
+  if (not analysis_name.empty()) {
+    save();
+  }
 }
 
 void
@@ -527,62 +499,59 @@ Mussa::nway()
 }
 
 void
-Mussa::save()
+Mussa::save(fs::path save_path)
 {
-  string save_name;
   fs::path flp_filepath;
   fs::fstream save_file;
   ostringstream append_info;
   int dir_create_status;
 
-  if (not analysis_name.empty()) {
-    // not sure why, but gotta close file each time since can't pass 
-    // file streams
-    save_name = analysis_name;
-
-    // gotta do bit with adding win & thres if to be appended
-    if (win_append)
-    {
-      append_info.str("");
-      append_info <<  "_w" << window;
-      save_name += append_info.str();
-    }
+  if (save_path.empty()) {
+    if (not analysis_name.empty()) {
+      std::string save_name = analysis_name;
+       // gotta do bit with adding win & thres if to be appended
+       if (win_append) {
+        append_info.str("");
+        append_info <<  "_w" << window;
+        save_name += append_info.str();
+      }
 
-    if (thres_append)
-    {
-      append_info.str("");
-      append_info <<  "_t" << threshold;
-      save_name += append_info.str();
+      if (thres_append) {
+        append_info.str("");
+        append_info <<  "_t" << threshold;
+        save_name += append_info.str();
+      }
+      save_path = save_name;
+    } else {
+      throw mussa_save_error("Need filename or analysis name to save");
     }
-    fs::path save_path( save_name);
+  }
 
-    if (not fs::exists(save_path)) {
-      fs::create_directory(save_path);
-    }
-    // save sequence and annots to a special mussa file
-    save_file.open(save_path / (save_name+".museq"), ios::out);
-    save_file << "<Mussa_Sequence>" << endl;
+  if (not fs::exists(save_path)) {
+    fs::create_directory(save_path);
+  }
+  // save sequence and annots to a special mussa file
+  save_file.open(save_path / (save_path.leaf()+".museq"), ios::out);
+  save_file << "<Mussa_Sequence>" << endl;
 
-    for(vector<Sequence>::size_type i = 0; i < the_seqs.size(); i++)
-    {
-      the_seqs[i]->save(save_file);
-    }
+  for(vector<Sequence>::size_type i = 0; i < the_seqs.size(); i++)
+  {
+    the_seqs[i]->save(save_file);
+  }
 
-    save_file << "</Mussa_Sequence>" << endl;
-    save_file.close();
+  save_file << "</Mussa_Sequence>" << endl;
+  save_file.close();
 
-    // save nway paths to its mussa save file
-    the_paths.save(save_path / (save_name + ".muway"));
+  // save nway paths to its mussa save file
+  the_paths.save(save_path / (save_path.leaf()+ ".muway"));
 
-    for(vector<Sequence>::size_type i = 0; i < the_seqs.size(); i++)
-      for(vector<Sequence>::size_type i2 = i+1; i2 < the_seqs.size(); i2++)
-      {
-        append_info.str("");
-        append_info <<  "_sp_" << i << "v" << i2;
-        all_comps[i][i2].save(save_path/(save_name+append_info.str()+".flp"));
-      }
-  } else {
-    throw mussa_error("Can't save analysis without an analysis name");
+  for(vector<Sequence>::size_type i = 0; i < the_seqs.size(); i++) {
+    for(vector<Sequence>::size_type i2 = i+1; i2 < the_seqs.size(); i2++)
+    {
+      append_info.str("");
+      append_info <<  "_sp_" << i << "v" << i2;
+      all_comps[i][i2].save(save_path/(save_path.leaf()+append_info.str()+".flp"));
+    }
   }
   dirty = false;
 }