+#ifdef USE_MPI
+//***************************************************************************************************************
+int Bellerophon::print(MPI_File& out, MPI_File& outAcc) {
+ try {
+
+ int pid;
+ MPI_Comm_rank(MPI_COMM_WORLD, &pid); //find out who we are
+
+ if (pid == 0) {
+ string outString = "";
+
+ //sorted "best" preference scores for all seqs
+ vector<Preference> best = getBestPref();
+
+ int above1 = 0;
+ int ninetyfive = best.size() * 0.05;
+ float cutoffScore = best[ninetyfive].score;
+
+ if (m->control_pressed) { return numSeqs; }
+
+ outString = "Name\tScore\tLeft\tRight\n";
+ MPI_Status status;
+ int olength = outString.length();
+ char* buf5 = new char[olength];
+ memcpy(buf5, outString.c_str(), olength);
+
+ MPI_File_write_shared(out, buf5, olength, MPI_CHAR, &status);
+
+ delete buf5;
+
+ //output prefenence structure to .chimeras file
+ for (int i = 0; i < best.size(); i++) {
+
+ if (m->control_pressed) { return numSeqs; }
+
+ outString = best[i].name + "\t" + toString(best[i].score) + "\t" + best[i].leftParent + "\t" + best[i].rightParent + "\n";
+
+ MPI_Status status;
+ int length = outString.length();
+ char* buf2 = new char[length];
+ memcpy(buf2, outString.c_str(), length);
+
+ MPI_File_write_shared(out, buf2, length, MPI_CHAR, &status);
+
+ delete buf2;
+
+ //calc # of seqs with preference above 95%tile
+ if (best[i].score >= cutoffScore) {
+ above1++;
+ string outAccString = "";
+ outAccString += best[i].name + "\n";
+
+ MPI_Status statusAcc;
+ length = outAccString.length();
+ char* buf = new char[length];
+ memcpy(buf, outAccString.c_str(), length);
+
+ MPI_File_write_shared(outAcc, buf, length, MPI_CHAR, &statusAcc);
+
+ delete buf;