+++ /dev/null
-/**
- * Author: Mark Larkin
- *
- * Copyright (c) 2007 Des Higgins, Julie Thompson and Toby Gibson.
- *
- * @author Mark Larkin, Conway Institute, UCD. mark.larkin@ucd.ie
- *
- * Changes:
- *
- * 2007-12-03, Andreas Wilm (UCD): replaced gets with fgets, and
- * got rid of some compiler warning
- *
- */
-#ifdef HAVE_CONFIG_H
- #include "config.h"
-#endif
-#include <iostream>
-#include <algorithm>
-#include "Utility.h"
-#include "general/userparams.h"
-
-namespace clustalw
-{
-
-/** constructor
- */
-Utility::Utility()
-{
- quiet=false;
-}
-
-
-/**
- * Removes trailing blanks from a string
- */
-void Utility::rTrim(string *str)
-{
- string::reverse_iterator rit = str->rbegin();
-
- while(rit != str->rend() && isspace(*rit))
- {
- str->erase((++rit).base());
- }
-}
-
-/**
- * Removes trailing blanks from a string
- * @param str String to remove trailing blanks from.
- * @return Pointer to the processed string
- */
-char * Utility::rTrim(char *str)
-{
- register int p;
-
- p = strlen(str) - 1;
-
- while (isspace(str[p]))
- {
- p--;
- }
-
- str[p + 1] = EOS;
-
- return str;
-}
-
-/**
- * Replace blanks in a string with underscores. Also replaces , ; : ( or ) with _.
- * @param str String to process.
- * @return Pointer to the processed string
- */
-char * Utility::blankToUnderscore(char *str)
-{
- int i, p;
-
- p = strlen(str) - 1;
-
- for (i = 0; i <= p; i++)
- if ((str[i] == ' ') || (str[i] == ';') || (str[i] == ',') || (str[i] ==
- '(') || (str[i] == ')') || (str[i] == ':'))
- {
- str[i] = '_';
- }
-
- return str;
-}
-
-/**
- * Replace blanks in a string with underscores. Also replaces , ; : ( or ) with _.
- * @param str String to process.
- * @return Pointer to the processed string
- */
-string Utility::blankToUnderscore(string str)
-{
- int i, p;
-
- p = str.size() - 1;
-
- for (i = 0; i <= p; i++)
- if ((str[i] == ' ') || (str[i] == ';') || (str[i] == ',') || (str[i] ==
- '(') || (str[i] == ')') || (str[i] == ':'))
- {
- str[i] = '_';
- }
-
- return str;
-}
-
-/**
- *
- * @param instr
- * @return
- */
-char Utility::getChoice(string instr)
-{
- cout << instr << ": ";
- cout.flush();
- char choice;
- cin.get(choice);
- // We only want one character, so we ignore the rest.
- if(choice != '\n')
- {
- cin.ignore(150, '\n');
- }
- cin.clear();
- if(isalpha(choice) || isNumeric(choice))
- {
- return choice;
- }
- else if(choice == '\n')
- {
- return '\n';
- }
- else
- {
- return ' ';
- }
-}
-
-bool Utility::isNumeric(char ch)
-{
- if(ch >= '0' && ch <= '9')
- {
- return true;
- }
- return false;
-}
-
-
-/**
- *
- * @param instr
- * @param outstr
- */
-void Utility::getStr(string instr, string& outstr)
-{
- cout << instr << ": ";
- cout.flush();
- string temp;
- getline(cin, temp, '\n');
- outstr = temp;
- cin.clear();
-}
-
-/**
- *
- * @param instr
- * @param minx
- * @param maxx
- * @param def
- * @return
- */
-double Utility::getReal(const char *instr, double minx, double maxx, double def)
-{
- int status;
- float ret;
- char line[MAXLINE];
-
- while (true)
- {
- fprintf(stdout, "%s (%.1f-%.1f) [%.1f]: ", instr, minx, maxx, def);
- //gets(line);
- fgets(line, MAXLINE, stdin);
- status = sscanf(line, "%f", &ret);
- if (status == EOF)
- {
- return def;
- }
- if (ret > maxx)
- {
- fprintf(stderr, "ERROR: Max. value=%.1f\n\n", maxx);
- continue;
- }
- if (ret < minx)
- {
- fprintf(stderr, "ERROR: Min. value=%.1f\n\n", minx);
- continue;
- }
- break;
- }
- return (double)ret;
-}
-
-/**
- *
- * @param instr
- * @param minx
- * @param maxx
- * @param def
- * @return
- */
-int Utility::getInt(const char *instr, int minx, int maxx, int def)
-{
- int ret, status;
- char line[MAXLINE];
-
- while (true)
- {
- fprintf(stdout, "%s (%d..%d) [%d]: ", instr, minx, maxx, def);
- //gets(line);
- fgets(line, MAXLINE, stdin);
- status = sscanf(line, "%d", &ret);
- if (status == EOF)
- {
- return def;
- }
- if (ret > maxx)
- {
- fprintf(stderr, "ERROR: Max. value=%d\n\n", maxx);
- continue;
- }
- if (ret < minx)
- {
- fprintf(stderr, "ERROR: Min. value=%d\n\n", minx);
- continue;
- }
- break;
- }
- return ret;
-}
-
-/**
- *
- * @param line
- * @param code
- * @return
- */
-bool Utility::lineType(char *line, const char *code)
-{
- // AW: introduced sanity check
- int n;
- if (strlen(line)<strlen(code))
- n=strlen(line);
- else
- n=strlen(code);
-
- return (strncmp(line, code, strlen(code)) == 0);
-}
-
-/**
- *
- * @param line
- * @return
- */
-bool Utility::blankLine(char *line)
-{
- int i;
-
- for (i = 0; line[i] != '\n' && line[i] != EOS; i++)
- {
- if (isdigit(line[i]) || isspace(line[i]) || (line[i] == '*') ||
- (line[i] == ':') || (line[i] == '.'))
- ;
- else
- {
- return false;
- }
- }
- return true;
-}
-
-/**
- *
- * @param str
- * @param path
- */
-void Utility::getPath(string str, string *path)
-{
- int i;
- string _temp;
- _temp = str;
-
- for (i = _temp.length() - 1; i > - 1; --i)
- {
- if (str[i] == DIRDELIM)
- {
- i = - 1;
- break;
- }
- if (str[i] == '.')
- {
- break;
- }
- }
-
- if (i < 0)
- {
- _temp += ".";
- }
- else
- {
- _temp = _temp.substr(0, i + 1);
- }
- *path = _temp;
-}
-
-/**
- *
- * @param title
- * @param prompt
- * @return
- *
- *
- */
-char Utility::promptForYesNo(char *title, const char *prompt)
-{
- cout << "\n" << title << "\n";
- string promptMessage = string(prompt) + "(y/n) ? [y]";
-
- string answer;
- getStr(promptMessage, answer);
-
- if(!answer.empty())
- {
- if ((answer[0] != 'n') && (answer[0] != 'N'))
- {
- return ('y');
- }
- }
- return ('n');
-}
-
-/**
- *
- * @param title
- * @param prompt
- * @return
- *
- */
-char Utility::promptForYesNo(const char *title, const char *prompt)
-{
- cout << "\n" << title << "\n";
- string promptMessage = string(prompt) + "(y/n) ? [y]";
-
- string answer;
- getStr(promptMessage, answer);
-
- if(!answer.empty())
- {
- if ((answer[0] != 'n') && (answer[0] != 'N'))
- {
- return ('y');
- }
- }
- return ('n');
-}
-
-/**
- *
- * @param msg
- */
-void Utility::error( char *msg,...)
-{
- va_list ap;
-
- va_start(ap, msg);
- fprintf(stderr, "\n\nERROR: ");
- vfprintf(stderr, msg, ap);
- fprintf(stderr, "\n\n");
- va_end(ap);
-}
-
-/**
- *
- * @param msg
- */
-void Utility::warning( char *msg,...)
-{
- va_list ap;
-
- va_start(ap, msg);
- fprintf(stderr, "\n\nWARNING: ");
- vfprintf(stderr, msg, ap);
- fprintf(stderr, "\n\n");
- va_end(ap);
-}
-
-/**
- *
- * @param msg
- */
-void Utility::error( const char *msg,...)
-{
- va_list ap;
-
- va_start(ap, msg);
- fprintf(stderr, "\n\nERROR: ");
- vfprintf(stderr, msg, ap);
- fprintf(stderr, "\n\n");
- va_end(ap);
-}
-
-/**
- *
- * @param msg
- */
-void Utility::warning( const char *msg,...)
-{
- va_list ap;
-
- va_start(ap, msg);
- fprintf(stderr, "\n\nWARNING: ");
- vfprintf(stderr, msg, ap);
- fprintf(stderr, "\n\n");
- va_end(ap);
-}
-
-/**
- *
- * @param msg
- */
-void Utility::info( char *msg,...)
-{
- va_list ap;
- va_start(ap, msg);
-
- if(! quiet)
- {
- fprintf(stdout, "\n");
- vfprintf(stdout, msg, ap);
- va_end(ap);
- }
-}
-
-/**
- *
- * @param msg
- */
-void Utility::info(const char *msg,...)
-{
- va_list ap;
- if(! quiet)
- {
- va_start(ap, msg);
- fprintf(stdout, "\n");
- vfprintf(stdout, msg, ap);
- va_end(ap);
- }
-}
-
-
-
-/**
- *
- */
-void Utility::myname( char *myname)
-{
- strcpy(myname, "clustalw\0");
-}
-
-
-
-/**
- * Change:
- * Mark 25-1-2007. I made this change to get around the problem of having to keep track
- * of output indexes in the alignment stage. This function returns the next unique id.
- */
-unsigned long Utility::getUniqueSequenceIdentifier()
-{
- static unsigned long nextSequenceIdentifier = MinIdentifier;
- return nextSequenceIdentifier++;
-}
-
-void Utility::setInfoLabelPtr(QLabel* ptrToLabelObj)
-{
- // Dont do anything. This is here to allow the function to be added to QTUtility.
- // Polymorphism wont work with different functions in the classes.
-}
-
-
-double Utility::average(std::vector<double>& v)
-{
- double tmp = 0.0;
- std::vector<double>::iterator i;
-
- if (v.size() == 0)
- return 0.0;
-
- for (i=v.begin(); i != v.end(); i++)
- tmp += *i;
- return (tmp / v.size());
-}
-
-double Utility::stdDev(std::vector<double>& v)
-{
- std::vector<double>::iterator i;
- double tmp = 0.0;
- double avg = average(v);
-
- if (v.size() == 0)
- return 0.0;
-
- for(i=v.begin(); i != v.end(); ++i)
- tmp += (*i - avg) * (*i - avg);
- return sqrt(tmp / v.size());
-}
-
-double Utility::median(std::vector<double> v)
-{
- // From Moo & Koenig, "Accelerated C++:
- typedef vector<double>::size_type vec_sz;
- vec_sz size = v.size();
-
- if (v.size() == 0)
- return 0.0;
-
- std::sort(v.begin(), v.end());
- vec_sz mid = size/2;
- return size % 2 == 0 ? (v[mid] + v[mid-1]) / 2 : v[mid];
-}
-
-}
-