00001 #include "featureinfo.h" 00002 #include "featuredata.h" 00003 #include <cassert> 00004 #include <sstream> 00005 00006 std::string FeatureInfo::getPosInfo( TR_DNA pos ) 00007 { 00008 if ( pos < m_data->startPos() || pos > m_data->endPos() ) 00009 return std::string(); 00010 00011 return myInfoPos(pos); 00012 } 00013 00014 std::string FeatureInfo::getRangeInfo( TR_DNA begin, TR_DNA end ) 00015 { 00016 if ( end < m_data->startPos() || begin > m_data->endPos() ) 00017 return std::string(); 00018 00019 return myInfoRange(begin, end); 00020 } 00021 00022 std::string FeatureInfo::myInfoPos( TR_DNA pos ) 00023 { 00024 return std::string(); 00025 } 00026 00027 std::string FeatureInfo::myInfoRange( TR_DNA begin, TR_DNA end ) 00028 { 00029 return std::string(); 00030 } 00031 00032 //DnpData 00033 std::string DnpInfo::myInfoPos( TR_DNA pos ) 00034 { 00035 assert( pos == dnpData()->startPos() ); 00036 assert( pos == dnpData()->endPos() ); 00037 00038 ostringstream os; 00039 00040 os<<"DNP ID: "<<dnpData()->get_dnpID(); 00041 00042 return os.str(); 00043 } 00044 00045 std::string DnpInfo::myInfoRange( TR_DNA begin, TR_DNA end ) 00046 { 00047 //Sanity check 00048 assert( dnpData()->startPos() == dnpData()->endPos() ); 00049 ostringstream os; 00050 os.str(""); 00051 if ( dnpData()->startPos() >= begin && dnpData()->startPos() <= end) { 00052 os<<"DNP ID: "<<dnpData()->get_dnpID()<<" at pos "<<dnpData()->startPos(); 00053 00054 } 00055 00056 return os.str(); 00057 } 00058 00059 DnpData * DnpInfo::dnpData() 00060 { 00061 return dynamic_cast<DnpData *>( m_data ); 00062 } 00063 00064 //DnaStrData 00065 std::string DnaStrInfo::myInfoPos( TR_DNA pos ) 00066 { 00067 assert( pos >= 0 ); 00068 00069 assert( pos < dnaStrData()->dnaVector.stlVector().size() ); 00070 00071 ostringstream os; 00072 00073 os<<"Base: "<<dnaStrData()->dnaVector.stlVector()[ pos ]; 00074 00075 return os.str(); 00076 } 00077 00078 DnaStrData * DnaStrInfo::dnaStrData() 00079 { 00080 return dynamic_cast<DnaStrData *>( m_data ); 00081 } 00082 00083 //QualityData 00084 std::string QualityInfo::myInfoPos( TR_DNA pos ) 00085 { 00086 assert( pos >= 0 ); 00087 00088 assert( pos < qualityData()->qualityVector.stlVector().size() ); 00089 00090 ostringstream os; 00091 00092 os<<"Qual: "<<qualityData()->qualityVector.stlVector()[ pos ]; 00093 00094 return os.str(); 00095 } 00096 00097 QualityData * QualityInfo::qualityData() 00098 { 00099 return dynamic_cast<QualityData *>( m_data ); 00100 }