vector<
int> &feat_frames,
67 const string&allowed_char_set,
constvector<
string> &real_prot,
constvector<
bool> &read_only,
70: wxVScrolledWindow(parent,
id, pos,
size, wxFULL_REPAINT_ON_RESIZE|wxWANTS_CHARS), m_Seq(seq), m_SeqLen(seq_len), m_FeatRanges(feat_ranges), m_FeatTypes(feat_types), m_FeatStrand(feat_strand),
71m_FeatFrames(feat_frames), m_GeneticCode(genetic_code), m_Feat5Partial(feat_partial5),
72m_AllowedCharSet(allowed_char_set), m_RealProt(real_prot), m_read_only(read_only), m_start(start), m_ProtFeatRanges(prot_feat_ranges),
73m_EnableTranslation(
true), m_EnableTranslation1(
true), m_EnableTranslation2(
true), m_EnableComplement(
true), m_EnableFeatures(
true), m_EnableOnTheFly(
true), m_EnableMismatch(
true),
74m_EnableRevTranslation(
true), m_EnableRevTranslation1(
true), m_EnableRevTranslation2(
true), m_Down(
false)
76SetBackgroundStyle(wxBG_STYLE_PAINT);
78SetBackgroundColour(*wxWHITE);
79m_Font = wxFont(9, wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
91m_FeatureStart = pair<int,int>(-1,-1);
92m_FeatureStop = pair<int,int>(-1,-1);
97m_EnableTranslation =
false;
98m_EnableTranslation1 =
false;
99m_EnableTranslation2 =
false;
100m_EnableRevTranslation =
false;
101m_EnableRevTranslation1 =
false;
102m_EnableRevTranslation2 =
false;
103m_EnableComplement =
false;
104m_EnableFeatures =
false;
105m_EnableOnTheFly =
false;
106m_EnableMismatch =
false;
107m_ShowTripletMismatch = -1;
108m_ShowTripletTranslation = -4;
111wxWindow *win = GetParent();
117win = win->GetParent();
124 if(!
m_Seq.empty())
126wxGraphicsContext *gc = wxGraphicsContext::Create();
127gc->SetFont(
m_Font, *wxBLACK);
149 constvector<pair<string,objects::CSeqFeatData::ESubtype> > &feat_types,
150 constvector<objects::CBioseq_Handle::EVectorStrand> &feat_strand,
151 constvector<int> &feat_frames,
153 constvector<bool> &feat_partial5,
154 constvector<string> &real_prot,
155 constunordered_map<
int, vector<vector<pair<TSeqPos,TSeqPos> > > > &prot_feat_ranges)
260 if(
m_FeatStrand[
i] == objects::CBioseq_Handle::eStrand_Minus)
374 if(m_CursorSeq < 0 || m_CursorSeq >=
m_Seq.size() - 1)
376 if(
m_Seq.size() == 2)
378wxMessageBox (
_(
"Unable to delete the whole sequence"),
_(
"Error"), wxOK|wxICON_ERROR);
410 intuc =
tolower(event.GetKeyCode());
411 if( !event.HasModifiers() && uc != WXK_NONE && uc >= 32 && uc < 255 &&
m_AllowedCharSet.find(uc) != string::npos)
423wxSize sz = GetClientSize();
424 intnum_rows =
static_cast<int>(GetVisibleRowsEnd() - GetVisibleRowsBegin());
426 intuc =
event.GetKeyCode();
435 caseWXK_PAGEUP :
m_CursorRow=
static_cast<int>(GetVisibleRowsBegin() - num_rows);
m_CursorSeq= -1;
break;
436 caseWXK_PAGEDOWN :
m_CursorRow=
static_cast<int>(GetVisibleRowsBegin() + num_rows);
m_CursorSeq= -1;
break;
501 int row=
static_cast<int>(GetVisibleRowsBegin());
503 while( y_row < y &&
row<= GetVisibleRowsEnd()+1 )
545 for(
unsigned intk = 0; k < feats_in_row.size(); k++)
547 unsigned int i= feats_in_row[k];
548 autoit = feats_with_exons.
find(
i);
551 if(it != feats_with_exons.
end())
553 for(
unsigned intm = 0; m < it->second.size(); m++)
555 unsigned intj = it->second[m];
596 if(evt.GetModifiers() == wxMOD_SHIFT)
598wxPoint p = evt.GetPosition();
628wxPoint p = evt.GetPosition();
638 intcurrent = p.y - y_row;
648 if( current > y && current < y_trial)
714 for(
size_tk = 0; k < feats_in_row.size(); k++)
718 unsigned int i= feats_in_row[k];
723 if( current > y && current < y_next)
745 if(
m_Down&& evt.Dragging())
749wxPoint p = evt.GetPosition();
792wxPoint p = evt.GetPosition();
863 if(IsShownOnScreen())
884wxAutoBufferedPaintDC dc(
this);
885wxGraphicsContext *gc = wxGraphicsContext::Create( dc );
886 if(gc && !
m_Seq.empty())
889gc->SetFont(
m_Font, *wxBLACK);
900 size_thidden_rows = GetVisibleRowsBegin();
902 size_t row= hidden_rows;
903 intclient_y = GetClientSize().y;
904 size_tseq_pos = start;
906 while(start <
m_Seq.size())
934 while((*pos) + 1 == pos1)
948 while((*pos) - 1 == pos2)
990wxColour backgroundColour = GetBackgroundColour();
991 if(!backgroundColour.Ok())
992backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
993wxSize sz = GetClientSize();
994wxRect windowRect(wxPoint(0,0), sz);
995gc->SetBrush(wxBrush(backgroundColour));
996gc->SetPen(wxPen(backgroundColour, 1));
997gc->DrawRectangle(windowRect.GetX(),windowRect.GetY(),windowRect.GetWidth(),windowRect.GetHeight());
1005wxDouble externalLeading;
1006 if(
m_Seq.size() > 1000)
1008gc->GetTextExtent(wxString(
m_Seq.substr(0,1000)), &width, &height, &descent, &externalLeading);
1013gc->GetTextExtent(wxString(
m_Seq), &width, &height, &descent, &externalLeading);
1014width /=
m_Seq.size();
1016width = ceil(1+width);
1017height = ceil(2+height);
1024 intwidth =
int(GetClientSize().x);
1028 if(num_groups == 0)
1040 unsigned intorig_pos =
static_cast<int>(seq_pos);
1041 intorig_y = y_label;
1044 DrawLabelCell(orig_pos,x,y_label,
row, feats_in_row, feats_with_exons, gc);
1046 for(
unsigned int i=0;
i<substr.size();
i++)
1049 DrawTextCell(wxString(substr[
i]),
i,
row,
static_cast<unsigned int>(seq_pos),x,y, feats_in_row, feats_with_exons, gc);
1066 void CPaintSequence::DrawLabelCell(
unsigned intpos,
intx,
int&y,
int row,
constvector<unsigned int> &feats_in_row,
const map<
unsigned int, vector<unsigned int> > &feats_with_exons, wxGraphicsContext *gc)
const 1077 void CPaintSequence::DrawTextCell(
constwxString &substr,
intcol,
int row,
unsigned intseq_pos,
intx,
int&y,
constvector<unsigned int> &feats_in_row,
const map<
unsigned int, vector<unsigned int> > &feats_with_exons, wxGraphicsContext *gc)
const 1085gc->SetFont(
m_Font, wxColour(255,0,255));
1086gc->DrawText(
label,x,y);
1087gc->SetFont(
m_Font,*wxBLACK);
1093gc->SetPen(wxPen(wxColour(255,0,255)));
1105gc->SetFont(
m_Font, wxColour(237,222,14));
1109gc->SetFont(
m_Font,*wxBLACK);
1115 if(pos1 >= 0 && pos2 >= 0 && seq_pos >= pos1 && seq_pos <= pos2)
1116gc->DrawText(substr,x,y, gc->CreateBrush(*wxLIGHT_GREY_BRUSH));
1118gc->DrawText(substr,x,y);
1119gc->SetFont(
m_Font,*wxBLACK);
1122gc->SetPen( *wxGREY_PEN);
1139 DrawFeatures(
row,seq_pos,x,y,y_base,feats_in_row,feats_with_exons,gc);
1147gc->SetPen( *wxRED_PEN);
1196 if( seq_pos >=
offset+1 && (seq_pos - 1 -
offset) % 3 == 0 )
1198 intprot_pos = (seq_pos - 1 -
offset) / 3 ;
1199 if(gc && prot_pos <
prot.size() && prot_pos >= 0)
1200gc->DrawText (wxString(
prot[prot_pos]),x,y);
1210 if(
m_FeatStrand[
i] == objects::CBioseq_Handle::eStrand_Plus)
1211 for(
unsigned intm = 0; m < ranges.size(); m++)
1213 unsigned intj = ranges[m];
1216 if(seq_pos >= start && seq_pos <= stop )
1221 if( prot_pos % 3 == 1)
1223 if(
i< translation.size() && prot_pos / 3 < translation[
i].size())
1224 prot= translation[
i][prot_pos / 3];
1226 else if(prot_pos % 3 == 0)
1228 else if(prot_pos % 3 == 2)
1234 if(
m_FeatStrand[
i] == objects::CBioseq_Handle::eStrand_Minus)
1235 for(
intm =
static_cast<int>(ranges.size()) - 1; m >= 0; m--)
1237 unsigned intj = ranges[m];
1240 if(seq_pos >= start && seq_pos <= stop )
1245 if( prot_pos % 3 == 1)
1247 if(
i< translation.size() && prot_pos / 3 < translation[
i].size())
1248 prot= translation[
i][prot_pos / 3];
1250 else if(prot_pos % 3 == 0)
1252 else if(prot_pos % 3 == 2)
1266gc->SetPen( *wxGREY_PEN);
1272 void CPaintSequence::DrawOnTheFly(
intx,
int&y,
inty_base,
unsigned intseq_pos,
int i,
const map<
unsigned int, vector<unsigned int> > &feats_with_exons, wxGraphicsContext *gc)
const 1284gc->SetFont(
m_Font, *wxBLUE);
1285gc->DrawText (wxString(
prot),x,y);
1286gc->SetFont(
m_Font,*wxBLACK);
1298 void CPaintSequence::DrawMismatch(
intx,
int&y,
inty_base,
unsigned intseq_pos,
int i,
const map<
unsigned int, vector<unsigned int> > &feats_with_exons, wxGraphicsContext *gc)
const 1311 if(
prot!= translated_prot)
1312gc->SetFont(
m_Font,*wxRED);
1314gc->SetFont(
m_Font, *wxBLUE);
1315gc->DrawText(wxString(
prot),x,y);
1316gc->SetFont(
m_Font,*wxBLACK);
1348 constwxPen* pen = wxBLACK_PEN;
1352default : pen = wxBLACK_PEN;
break;
1363gc->SetFont(
m_Font, wxColour(255,0,255));
1364gc->DrawText(
label,x,y);
1365gc->SetFont(
m_Font,*wxBLACK);
1373 for(
unsigned intk = 0; k < feats_in_row.size(); k++)
1375 unsigned int i= feats_in_row[k];
1382gc->SetFont(
m_Font,*wxBLUE);
1383gc->DrawText(wxString(
label),x,y);
1384gc->SetFont(
m_Font,*wxBLACK);
1396vector<unsigned int> feats_in_row;
1403 introw_end = row_start +
m_NumCols- 1;
1404 if( (row_start >= start && row_end <= stop) ||
1405(start >= row_start && start <= row_end) ||
1406(stop >= row_start && stop <= row_end) )
1408feats_in_row.push_back(
static_cast<unsigned int>(
i));
1412 returnfeats_in_row;
1421gc->DrawText(
_(
"complement"),x,y);
1433gc->SetFont(
m_Font, *wxBLUE);
1434gc->DrawText (
_(
"on-the-fly"),x,y);
1435gc->SetFont(
m_Font, *wxBLACK);
1446gc->DrawText (
_(
"frame +1"),x,y);
1452gc->DrawText (
_(
"frame +2"),x,y);
1458gc->DrawText (
_(
"frame +3"),x,y);
1464gc->DrawText (
_(
"frame -1"),x,y);
1470gc->DrawText (
_(
"frame -2"),x,y);
1476gc->DrawText (
_(
"frame -3"),x,y);
1481 void CPaintSequence::DrawFeatures(
int row,
unsigned intseq_pos,
intx,
int&y,
inty_base,
constvector<unsigned int> &feats_in_row,
const map<
unsigned int, vector<unsigned int> > &feats_with_exons, wxGraphicsContext *gc)
const 1483 for(
unsigned intk = 0; k < feats_in_row.size(); k++)
1485 unsigned int i= feats_in_row[k];
1490 boolfound =
false;
1491 boolstartpoint =
false;
1492 boolendpoint =
false;
1494 if(
f!= feats_with_exons.end())
1496 for(
unsigned intm = 0; m <
f->second.size(); m++)
1498 unsigned intj =
f->second[m];
1502 if(seq_pos >= start && seq_pos <= stop)
1505 if(seq_pos == start)
1507 if(seq_pos == stop)
1518gc->SetBrush(*wxBLACK_BRUSH);
1528 if(
m_FeatStrand[
i] == objects::CBioseq_Handle::eStrand_Plus)
1535gc->DrawLines(3,lines);
1543gc->DrawLines(3,lines);
1559 if(wxTheClipboard->Open())
1567 if(pos1 >= 0 && pos2 >= 0)
1568wxTheClipboard->SetData(
newwxTextDataObject(
m_Seq.substr(pos1, pos2 - pos1 + 1)) );
1569wxTheClipboard->Close();
1581 if(pos1 >= 0 && pos2 >= 0)
1583 if(pos1 == 0 && pos2 ==
m_Seq.size() - 2)
1585wxMessageBox (
_(
"Unable to delete the whole sequence"),
_(
"Error"), wxOK|wxICON_ERROR);
1589 boolread_only =
false;
1591 for(
int i= pos1;
i<= pos2;
i++)
1611str1 =
m_Seq.substr(0, pos1);
1613 if(pos2 + 1 <
m_Seq.size())
1614str2 =
m_Seq.substr(pos2 + 1);
1617 for(
int i= pos1;
i<= pos2;
i++)
1639 if(wxTheClipboard->Open())
1646wxTheClipboard->SetData(
newwxTextDataObject(
result) );
1649wxTheClipboard->Close();
1662 if(wxTheClipboard->Open())
1664 if(wxTheClipboard->IsSupported( wxDF_UNICODETEXT ) &&
m_CursorSeq>= 0)
1666wxTextDataObject
data;
1667wxTheClipboard->GetData(
data);
1668 string str=
data.GetText().ToStdString();
1670 boolallowed =
true;
1671 for(
size_t i=0;
i<
str.size();
i++)
1677 if(!
str.empty() && allowed)
1696wxTheClipboard->Close();
1702 boolfound =
false;
1703 if(wxTheClipboard->Open())
1705 if(wxTheClipboard->IsSupported( wxDF_UNICODETEXT ))
1707wxTextDataObject
data;
1708wxTheClipboard->GetData(
data);
1709 string str=
data.GetText().ToStdString();
1711 boolallowed =
true;
1712 for(
size_t i=0;
i<
str.size();
i++)
1718 if(!
str.empty() && allowed)
1723wxTheClipboard->Close();
1730 boolfound =
false;
1742 returnpair<int,int>(pos1, pos2);
1757 if(choice ==
"+1")
1759 if(choice ==
"+2")
1761 if(choice ==
"+3")
1763 if(choice ==
"-1")
1765 if(choice ==
"-2")
1767 if(choice ==
"-3")
1775 return static_cast<int>(
m_Seq.size() - 1);
1799seq +=
m_Seq.substr(start, stop-start+1);
1803 if(
m_FeatStrand[
i] == objects::CBioseq_Handle::eStrand_Minus)
1807 swap(rev_comp,seq);
1821 if(
m_FeatStrand[
i] == objects::CBioseq_Handle::eStrand_Minus)
1828 if(
m_FeatStrand[
i] == objects::CBioseq_Handle::eStrand_Minus)
1870 if(
offset< 0 && origin <= start && origin - offset >= stop)
1919start =
static_cast<int>(
m_Seq.size() - 2);
1921stop =
static_cast<int>(
m_Seq.size() - 2);
1940vector<TSeqPos> length_before;
1947length_before.push_back(length);
1959vector<unsigned int> ranges;
1965 introw_end = row_start +
m_NumCols- 1;
1966 if( (row_start >= start && row_end <= stop) ||
1967(start >= row_start && start <= row_end) ||
1968(stop >= row_start && stop <= row_end) )
1970ranges.push_back(j);
1980 for(
unsigned intk = 0; k < feats_in_row.size(); k++)
1982 unsigned int i= feats_in_row[k];
1984 if(!ranges.empty())
1985feats_with_exons[
i] = ranges;
1987 returnfeats_with_exons;
void ReportRange(int pos1, int pos2)
void ShowReadOnlyWarning()
void EnableCommit(bool enable)
set< int > & SetHighlights()
vector< vector< pair< TSeqPos, TSeqPos > > > m_FeatRanges
virtual wxCoord OnGetRowHeight(size_t row) const
int m_ShowTripletMismatch
vector< CRef< objects::CGenetic_code > > m_GeneticCode
void EnableRevTranslation1(bool enable)
virtual ~CPaintSequence()
void DrawOnTheFlyLabel(int x, int &y, bool is_exon_present, wxGraphicsContext *gc) const
void EnableOnTheFly(bool enable)
vector< pair< TSeqPos, TSeqPos > > m_FeatWholeRange
void DrawLineNumber(unsigned int seq_pos, int x, int &y, wxGraphicsContext *gc) const
const wxPen * GetColorForFeature(objects::CSeqFeatData::ESubtype subtype) const
bool m_EnableTranslation2
void DrawLabelCell(unsigned int pos, int x, int &y, int row, const vector< unsigned int > &feats_in_row, const map< unsigned int, vector< unsigned int > > &feats_with_exons, wxGraphicsContext *gc) const
vector< bool > m_Feat5Partial
vector< string > m_RealProt
vector< int > m_FeatFrames
void AdjustFeatStartStop(int origin, int offset, int &start, int &stop)
void DrawOffsetTranslation(int x, int y, unsigned int seq_pos, int offset, const string &prot, wxGraphicsContext *gc) const
vector< string > m_Translated
void OnChar(wxKeyEvent &event)
vector< unsigned int > GetFeaturesInRow(int row) const
void ClearScreen(wxGraphicsContext *gc)
void OnCut(wxCommandEvent &event)
vector< bool > m_read_only
virtual void OnEraseBackground(wxEraseEvent &event)
vector< int > & GetSeqLen()
pair< int, int > m_FeatureStart
string * GetFindString(bool is_nuc, bool is_revcomp, const string &choice)
bool m_EnableRevTranslation1
pair< int, int > GetSelection()
void DrawMismatch(int x, int &y, int y_base, unsigned int seq_pos, int i, const map< unsigned int, vector< unsigned int > > &feats_with_exons, wxGraphicsContext *gc) const
void DrawOnTheFly(int x, int &y, int y_base, unsigned int seq_pos, int i, const map< unsigned int, vector< unsigned int > > &feats_with_exons, wxGraphicsContext *gc) const
void DrawTranslation(int x, int &y, unsigned int seq_pos, wxGraphicsContext *gc) const
void EnableMismatch(bool enable)
void DrawMismatchLabel(int x, int &y, bool is_exon_present, wxGraphicsContext *gc) const
void DrawCursor(int col, int row, int x, int &y, wxGraphicsContext *gc) const
void EnableComplement(bool enable)
void DrawTranslationLabels(int row, int x, int &y, wxGraphicsContext *gc) const
void OnMouseDrag(wxMouseEvent &evt)
int FindRowByCoord(int y, int &y_row)
void UpdateFeatures(const vector< vector< pair< TSeqPos, TSeqPos > > > &feat_ranges, const vector< pair< string, objects::CSeqFeatData::ESubtype > > &feat_types, const vector< objects::CBioseq_Handle::EVectorStrand > &feat_strand, const vector< int > &feat_frames, const vector< CRef< objects::CGenetic_code > > &genetic_code, const vector< bool > &feat_partial5, const vector< string > &real_prot, const unordered_map< int, vector< vector< pair< TSeqPos, TSeqPos > > > > &prot_feat_ranges)
void OnPaste(wxCommandEvent &event)
void DrawFeatures(int row, unsigned int seq_pos, int x, int &y, int y_base, const vector< unsigned int > &feats_in_row, const map< unsigned int, vector< unsigned int > > &feats_with_exons, wxGraphicsContext *gc) const
int m_ShowTripletTranslation
void OnKeyDown(wxKeyEvent &event)
void EnableTranslation1(bool enable)
void SetRange(int pos1, int pos2)
void DrawComplement(int x, int &y, unsigned int seq_pos, wxGraphicsContext *gc) const
void OnMouseClick(wxMouseEvent &evt)
void OnCopy(wxCommandEvent &event)
void DrawFeatureLabels(int row, int x, int &y, const vector< unsigned int > &feats_in_row, const map< unsigned int, vector< unsigned int > > &feats_with_exons, wxGraphicsContext *gc) const
void EnableRevTranslation(bool enable)
void MouseToFeature(wxPoint p, int row, int y0)
bool MouseToSeqPos(wxPoint p, int &row, int &y_row)
void DrawTextLine(const string &substr, int &y_label, int row, wxGraphicsContext *gc, size_t &seq_pos)
void NormalizeCursorColRows()
void EnableTranslation2(bool enable)
virtual void OnUpdate()
Notification for the derived class that moment is good for doing its update and drawing stuff.
void AdjustProtFeatRange(int origin, int offset, int i)
void OnResize(wxSizeEvent &)
void EnableTranslation(bool enable)
void AdjustFeatureRange(int origin, int offset)
bool m_EnableRevTranslation2
char TranslateOnTheFly(unsigned int seq_pos, int i, const vector< unsigned int > &ranges, const vector< string > &translation, bool &left, bool &right) const
void Search(const string &val)
bool m_EnableTranslation1
virtual void OnPaint(wxPaintEvent &event)
Painting.
void EnableRevTranslation2(bool enable)
vector< pair< string, objects::CSeqFeatData::ESubtype > > m_FeatTypes
void DrawTextCell(const wxString &substr, int col, int row, unsigned int seq_pos, int x, int &y, const vector< unsigned int > &feats_in_row, const map< unsigned int, vector< unsigned int > > &feats_with_exons, wxGraphicsContext *gc) const
void SetClean(bool clean)
vector< TSeqPos > m_FeatTotalLength
TSeqPos GetFeatureStop(int i, int j)
vector< vector< TSeqPos > > m_FeatLengthBefore
vector< unsigned int > IsExonPresent(int i, int row) const
pair< int, int > m_FeatureStop
unsigned int PosToSegment()
void EnableFeatures(bool enable)
void CalculateFontWidthAndHeight(wxGraphicsContext *gc)
unordered_map< int, vector< vector< pair< TSeqPos, TSeqPos > > > > m_ProtFeatRanges
map< unsigned int, vector< unsigned int > > GetFeatsWithExons(int row, const vector< unsigned int > &feats_in_row) const
vector< objects::CBioseq_Handle::EVectorStrand > m_FeatStrand
void OnMouseDown(wxMouseEvent &evt)
void DrawTripletMismatch(int x, int y, int y_base, int i, wxGraphicsContext *gc) const
bool m_EnableRevTranslation
TSeqPos GetFeatureStart(int i, int j)
void DrawComplementLabel(int row, int x, int &y, wxGraphicsContext *gc) const
static SIZE_TYPE ReverseComplement(const string &src, TCoding src_coding, TSeqPos pos, TSeqPos length, string &dst)
static SIZE_TYPE Complement(const string &src, TCoding src_coding, TSeqPos pos, TSeqPos length, string &dst)
const_iterator end() const
const_iterator find(const key_type &key) const
const_iterator begin() const
const_iterator find(const key_type &key) const
const_iterator end() const
static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)
static const char * str(char *buf, int n)
unsigned int TSeqPos
Type for sequence locations and lengths.
void swap(NCBI_NS_NCBI::pair_base_member< T1, T2 > &pair1, NCBI_NS_NCBI::pair_base_member< T1, T2 > &pair2)
static void Translate(const string &seq, string &prot, const CGenetic_code *code, bool include_stop=true, bool remove_trailing_X=false, bool *alt_start=NULL, bool is_5prime_complete=true, bool is_3prime_complete=true)
Translate a string using a specified genetic code.
@ fIs5PrimePartial
= 0x4 Translate first codon even if not start codon (because sequence is 5' partial)
@ fRemoveTrailingX
= 0x2 Remove trailing Xs from protein
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
static SIZE_TYPE FindNoCase(const CTempString str, const CTempString pattern, SIZE_TYPE start, SIZE_TYPE end, EOccurrence which=eFirst)
Find the pattern in the specified range of a string using a case insensitive search.
static string TruncateSpaces(const string &str, ETrunc where=eTrunc_Both)
Truncate whitespace in a string.
static string & ToLower(string &str)
Convert string to lower case â string& version.
static const char label[]
unsigned int
A callback function used to compare two keys in a database.
const struct ncbi::grid::netcache::search::fields::SIZE size
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
static const GLdouble origin[]
static const int chars_per_group
static const int space_between_groups
BOOL UpdateData(HWND hDlg, CProjBulderApp *pApp, BOOL bGet)
#define row(bind, expected)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4