--- /dev/null
+/////////////////////////////////////////////////////////////////
+// ProjectPairwise
+//
+// Program for projecting multiple alignments to all pairwise
+// alignments.
+/////////////////////////////////////////////////////////////////
+
+#include "SafeVector.h"
+#include "MultiSequence.h"
+#include <string>
+#include <sstream>
+#include <iomanip>
+#include <iostream>
+#include <list>
+#include <set>
+#include <limits>
+#include <cstdio>
+#include <cstdlib>
+#include <cerrno>
+#include <iomanip>
+
+bool compressGaps = true;
+
+/////////////////////////////////////////////////////////////////
+// main()
+//
+// Main program.
+/////////////////////////////////////////////////////////////////
+
+int main (int argc, char **argv){
+
+ // check arguments
+ if (argc < 2){
+ cerr << "Usage: project ALIGNMENT [-nocompressgaps]" << endl;
+ exit (1);
+ }
+
+ for (int i = 2; i < argc; i++){
+ if (strcmp (argv[i], "-nocompressgaps") == 0)
+ compressGaps = false;
+ else {
+ cerr << "Unrecognized option: " << argv[i] << endl;
+ exit (1);
+ }
+ }
+
+ MultiSequence *align = new MultiSequence (string (argv[1])); assert (align);
+
+ int N = align->GetNumSequences();
+ for (int i = 0; i < N; i++){
+ for (int j = i+1; j < N; j++){
+ string name = align->GetSequence(i)->GetHeader() + "-" + align->GetSequence(j)->GetHeader() + ".fasta";
+ ofstream outfile (name.c_str());
+
+ if (compressGaps){
+ set<int> s;
+ s.insert (i); s.insert (j);
+ MultiSequence *proj = align->Project (s);
+ proj->WriteMFA (outfile);
+ delete proj;
+ }
+ else {
+ align->GetSequence(i)->WriteMFA (outfile, 60);
+ align->GetSequence(j)->WriteMFA (outfile, 60);
+ }
+ outfile.close();
+ }
+ }
+
+ delete align;
+}