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
}
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;
}