/* Copyright 2009 Andreas Biegert This file is part of the CS-BLAST package. The CS-BLAST package is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. The CS-BLAST package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef CS_CONTEXT_PROFILE_H_ #define CS_CONTEXT_PROFILE_H_ #include "profile-inl.h" #include "count_profile-inl.h" #include "profile_column.h" namespace cs { // Simple struct for working with RGB color values. struct Color { Color(double r = 1.0, double g = 1.0, double b = 1.0) : red(r), green(g), blue(b) {} Color(std::string coldef) { std::vector tokens; Tokenize(coldef, ',', &tokens); red = atof(tokens[0].c_str()); green = atof(tokens[1].c_str()); blue = atof(tokens[2].c_str()); } std::string ToString() const { return strprintf("%4.2f,%4.2f,%4.2f", red, green, blue); } bool operator< (const Color& rhs) const { if (red != rhs.red) return (red < rhs.red); if (green != rhs.green) return (green < rhs.green); return (blue < rhs.blue); } friend std::ostream& operator<< (std::ostream& out, const Color& c) { out << c.ToString(); return out; } double red, green, blue; }; template struct ContextProfile { // Default construction ContextProfile(); // Constructs a context profile with 'len' columns explicit ContextProfile(size_t len); // Construction from serialized profile read from input stream. explicit ContextProfile(FILE* fin); // Constructs a context profile from normalized values in given profile 'p'. explicit ContextProfile(const Profile& p); // Construct a context profile by copying subprofile starting at index 'start' // for 'len' columns and normalizing afterwards. ContextProfile(const Profile& p, size_t start, size_t len); // Compares context profiles bool operator < (const ContextProfile& other) const { return prior < other.prior; } // Initializes count profile with a serialized profile read from stream. void Read(FILE* fin); // Initializes count profile with a serialized profile read from stream. void Write(FILE* fin) const; // Returns number of columns. size_t length() const; std::string name; // optional name of this context profile double prior; // prior probability bool is_log; // flag indicating if profile is in log-space Profile probs; // profile probabilities (includes ANY) ProfileColumn pc; // predicted pseudocounts (always in lin-space) Color color; // RGB color for profile logos }; // Prints context profile probabilities in human-readable format for debugging. template std::ostream& operator<< (std::ostream& out, const ContextProfile& cp); // Transforms probabilites in context profile to log-space and sets 'is_log' flag. template void TransformToLog(ContextProfile& cp); // Transforms probabilites in context profile to lin-space and sets 'is_log' flag. template void TransformToLin(ContextProfile& cp); } // namespace cs #endif // CS_CONTEXT_PROFILE_H_