Antonie
dnamisc.hh
Go to the documentation of this file.
00001 #pragma once
00002 #include <string>
00003 #include <vector>
00004 #include <functional>
00005 #include <stdlib.h>
00006 #include <sstream> 
00007 #include "antonie.hh"
00008 
00009 extern const char* g_gitHash;
00010 
00012 double qToErr(unsigned int i);
00013 
00015 double getGCContent(const std::string& str);
00016 
00017 
00019 template<typename T>
00020 class Clusterer
00021 {
00022 public:
00024   explicit Clusterer(int limit) : d_limit(limit)
00025   {}
00026 
00028   void feed(const T& t)
00029   {
00030     if(d_clusters.empty() || t.pos - d_clusters.rbegin()->getEnd() > d_limit) {
00031       d_clusters.push_back(cluster());
00032     }
00033     d_clusters.rbegin()->d_members.push_back(t);
00034   }
00035 
00037   struct cluster
00038   {
00039     int getBegin()
00040     {
00041       return d_members.begin()->pos;
00042     }
00043     int getEnd()
00044     {
00045       return d_members.rbegin()->pos;
00046     }
00047     int getMiddle()
00048     {
00049       return (getBegin()+getEnd())/2;
00050     }
00051 
00052     std::vector<T> d_members; 
00053   };
00054 
00056   std::vector<cluster> d_clusters;
00057 private:
00058   unsigned int d_limit;
00059 };
00060 
00061 typedef std::function<void(void)> acgt_t;
00062 inline void acgtDo(char c, acgt_t aDo, acgt_t cDo, acgt_t gDo, acgt_t tDo)
00063 {
00064   switch(c) {
00065   case 'A':
00066     aDo();
00067     break;
00068   case 'C':
00069     cDo();
00070     break;
00071   case 'G':
00072     gDo();
00073     break;
00074   case 'T':
00075     tDo();
00076     break;
00077   }
00078 }
00079 
00080 typedef std::function<void(void)> acgt_t;
00081 inline void acgtxDo(char c, acgt_t aDo, acgt_t cDo, acgt_t gDo, acgt_t tDo, acgt_t xDo)
00082 {
00083   switch(c) {
00084   case 'A':
00085     aDo();
00086     break;
00087   case 'C':
00088     cDo();
00089     break;
00090   case 'G':
00091     gDo();
00092     break;
00093   case 'T':
00094     tDo();
00095     break;
00096   case 'X':
00097     xDo();
00098     break;
00099   }
00100 }
00101 
00102 
00104 template<typename T>
00105 const typename T::value_type& pickRandom(const T& t)
00106 {
00107   return t[rand() % t.size()];
00108 }
00109 
00116 template<typename T>
00117 std::string jsonVector(const std::vector<T>& v, const std::string& name, 
00118                   std::function<double(dnapos_t)> yAdjust = [](dnapos_t d){return 1.0*d;},
00119                   std::function<double(int)> xAdjust = [](int i){return 1.0*i;})
00120 {
00121   std::ostringstream ret;
00122   ret << "var "<<name<<"=[";
00123   for(auto iter = v.begin(); iter != v.end(); ++iter) {
00124     if(iter != v.begin())
00125       ret<<',';
00126     ret << '[' << xAdjust(iter - v.begin()) <<','<< yAdjust(*iter)<<']';
00127   }
00128   ret <<"];\n";
00129   return ret.str();
00130 }
00131 
00132 
00133 template<typename T>
00134 std::string jsonVectorD(const std::vector<T>& v, 
00135                   std::function<double(double)> yAdjust = [](double d){return d;},
00136                   std::function<double(int)> xAdjust = [](int i){return 1.0*i;})
00137 {
00138   std::ostringstream ret;
00139   ret<<"[";
00140   for(auto iter = v.begin(); iter != v.end(); ++iter) {
00141     if(iter != v.begin())
00142       ret<<',';
00143     ret << '[' << std::fixed<< xAdjust(iter - v.begin()) <<','<< std::scientific << yAdjust(*iter)<<']';
00144   }
00145   ret <<"]";
00146   return ret.str();
00147 }
00148 
00150 uint32_t kmerMapper(const std::string& str, int offset, int unsigned len);
 All Classes Files Functions Variables Typedefs Friends Defines