86 originalMultiple =
NULL;
104 UpdateAlignList::const_iterator u, ue = updates.end();
105 for (u=updates.begin(); u!=ue; ++u) {
106 if (u->GetObject().IsSetSeqannot() && u->GetObject().GetSeqannot().GetData().IsAlign()) {
107 CSeq_annot::C_Data::TAlign::const_iterator
108 s, se = u->GetObject().GetSeqannot().GetData().GetAlign().end();
109 for (s=u->GetObject().GetSeqannot().GetData().GetAlign().begin(); s!=se; ++s) {
115 }
else if (updateAlignments.size() > 0) {
116 master = updateAlignments.front()->GetMaster();
118 SequenceSet::SequenceList::const_iterator q, qe = sSet->
sequences.end();
119 for (q=sSet->
sequences.begin(); q!=qe; ++q) {
120 if ((*q)->identifier->MatchesSeqId(
121 (*s)->GetSegs().IsDendiag() ?
122 (*s)->GetSegs().GetDendiag().front()->GetIds().front().GetObject() :
123 (*s)->GetSegs().GetDenseg().GetIds().front().GetObject()
131 ERRORMSG(
"AlignmentManager::AlignmentManager() - "
132 <<
"can't determine master sequence for updates");
138 pairwise.front() = alignment;
141 updateAlignments.push_back(multiple);
187 const vector < unsigned int >& rowOrder)
192 if (newAlignmentSet) {
196 ERRORMSG(
"Couldn't create pairwise alignments from the current multiple!\n"
197 <<
"Alignment data in output file will be left unchanged.");
230 TRACEMSG(
"PSSM changed - zero blocks before or after");
235 ¤tPSSM = multiple->
GetPSSM().GetPSSM();
236 TRACEMSG(
"checking for PSSM changes... ");
239 originalPSSM.
GetPssm().
GetByRow() != currentPSSM.GetPssm().GetByRow() ||
249 CPssmFinalData::TScores::const_iterator
252 c = currentPSSM.GetPssm().GetFinalData().GetScores().begin();
253 for (; o!=oe; ++o, ++c) {
274 return ((currentAlignments.size() > 0) ? currentAlignments.front() :
NULL);
280 AlignmentManager::PairwiseAlignmentList::const_iterator
a, ae = alignments.end();
281 for (
a=alignments.begin();
a!=ae; ++
a) {
282 if ((*a)->masterToDependent[masterResidue] == -1)
return false;
290 AlignmentManager::PairwiseAlignmentList::const_iterator
a, ae = alignments.end();
291 for (
a=alignments.begin();
a!=ae; ++
a) {
292 if (((*a)->masterToDependent[masterTo] - (*a)->masterToDependent[masterFrom]) != (masterTo - masterFrom))
301 AlignmentManager::PairwiseAlignmentList::const_iterator
a, ae = alignments.end();
302 for (
a=alignments.begin();
a!=ae; ++
a) {
303 if ((*a)->blockStructure[masterTo] != (*a)->blockStructure[masterFrom])
312 PairwiseAlignmentList::const_iterator
a, ae = alignments.end();
317 BlockMultipleAlignment::SequenceList::iterator s = sequenceList->begin();
318 *(s++) = alignments.front()->master;
319 for (
a=alignments.begin();
a!=ae; ++
a) {
320 *(s++) = (*a)->dependent;
321 if ((*a)->master != sequenceList->front()) {
322 ERRORMSG(
"AlignmentManager::CreateMultipleFromPairwiseWithIBM() -\n"
323 <<
"all pairwise alignments must have the same master sequence");
332 int masterFrom = 0, masterTo;
347 for (masterTo=masterFrom+1;
358 newBlock->
width = masterTo - masterFrom + 1;
361 for (
a=alignments.begin(),
row=1;
a!=ae; ++
a, ++
row) {
363 (*a)->masterToDependent[masterFrom],
364 (*a)->masterToDependent[masterTo]);
372 masterFrom = masterTo + 1;
377 ERRORMSG(
"AlignmentManager::CreateMultipleFromPairwiseWithIBM() - error finalizing alignment");
381 return multipleAlignment;
385 BlockMultipleAlignment::UngappedAlignedBlockList::const_iterator&
b,
386 BlockMultipleAlignment::UngappedAlignedBlockList::const_iterator& be,
389 unsigned int i = 0, c, highlighted = 0;
393 for (c=0; c<(*b)->width; ++c, ++
i) {
394 seqIndexes[
i] =
range->from + c;
395 if (countHighlights) {
409 if (!multiple)
return;
412 BlockMultipleAlignment::UngappedAlignedBlockList::const_iterator
b, be =
blocks.end();
415 nResidues += (*b)->width;
416 if (nResidues == 0) {
417 WARNINGMSG(
"Can't realign dependents with no aligned residues!");
422 const Molecule *masterMol, *dependentMol;
423 if (!masterSeq || !(masterMol = masterSeq->
molecule)) {
424 WARNINGMSG(
"Can't realign dependents to non-structured master!");
428 int *masterSeqIndexes =
new int[nResidues], *dependentSeqIndexes =
new int[nResidues];
431 if ((highlightedOnly ? nHighlightedAligned : nResidues) < 3) {
432 WARNINGMSG(
"Can't realign dependents using < 3 residues!");
433 delete[] masterSeqIndexes;
434 delete[] dependentSeqIndexes;
438 double *weights =
new double[nResidues];
441 typedef const Vector * CVP;
442 CVP *masterCoords =
new CVP[nResidues], *dependentCoords =
new CVP[nResidues];
443 if (!masterMol->
GetAlphaCoords(nResidues, masterSeqIndexes, masterCoords)) {
451 unsigned int nStructureAlignments = 0;
452 for (
unsigned int i=1;
i<multiple->
NRows(); ++
i) {
454 if (!dependentSeq || !(dependentMol = dependentSeq->molecule))
continue;
458 if (dependentMol->
GetAlphaCoords(nResidues, dependentSeqIndexes, dependentCoords) < 3) {
459 ERRORMSG(
"can't realign dependent " << dependentSeq->identifier->pdbID <<
", not enough coordinates in aligned region");
467 for (
int j=0; j<nResidues; ++j) {
468 if (!masterCoords[j] || !dependentCoords[j] || (highlightedOnly && masterSeqIndexes[j] < 0)) {
476 WARNINGMSG(
"Can't realign dependent #" << (
i+1) <<
" using < 3 residues!");
480 INFOMSG(
"realigning dependent " << dependentSeq->identifier->pdbID <<
" against master " << masterSeq->
identifier->
pdbID
481 <<
" using coordinates of " << nWeighted <<
" residues");
482 (
const_cast<StructureObject*
>(dependentObj))->RealignStructure(nResidues, masterCoords, dependentCoords, weights,
i);
483 ++nStructureAlignments;
490 delete[] masterSeqIndexes;
491 delete[] dependentSeqIndexes;
492 delete[] masterCoords;
493 delete[] dependentCoords;
505 (*sequences)[
i] = (*a)->dependent;
522 ERRORMSG(
"AlignmentManager::ShowHideCallbackFunction() - wrong size list");
529 AlignmentSet::AlignmentList::const_iterator
533 if ((*a)->master->molecule) {
535 if ((*a)->master->molecule->GetParentOfType(&
object))
540 for (
int i=0;
a!=ae; ++
a, ++
i) {
541 if ((*a)->dependent->molecule) {
542 if ((*a)->dependent->molecule->GetParentOfType(&
object))
557 ERRORMSG(
"AlignmentManager::NewMultipleWithRows() - wrong size visibility vector");
567 alignments.push_back(*
a);
576 if (!sequence)
return false;
578 if (currentAlignment)
579 return currentAlignment->
IsAligned(sequence, seqIndex);
586 if (!sequence)
return false;
588 if (currentAlignment) {
601 if (currentAlignment)
622 ERRORMSG(
"AlignmentManager::RealignDependentSequences() - wrong multiple alignment");
625 if (dependentsToRealign.size() == 0)
return;
630 if (multiple->
ExtractRows(dependentsToRealign, &alignments)) {
633 TRACEMSG(
"adding to update window");
645 if (currentAlignments.size() == 0)
return;
650 unsigned int nRowsAddedToMultiple;
651 bool foundSingle =
false;
653 singleList.push_back(single);
655 options, currentAlignments.front(), &singleList, &newAlignments, &nRowsAddedToMultiple,
sequenceViewer)) {
661 Threader::AlignmentList::const_iterator
n,
ne = newAlignments.end();
662 for (
n=newAlignments.begin();
n!=
ne; ++
n)
663 replacedList.push_back(*
n);
666 replacedList.push_back((*a)->Clone());
669 "AlignmentManager::ThreadUpdate() - threaded alignment not found in update viewer!");
673 if (nRowsAddedToMultiple > 0)
681 if (currentAlignments.size() == 0)
return;
685 unsigned int nRowsAddedToMultiple;
694 if (nRowsAddedToMultiple > 0)
696 RowsAdded(nRowsAddedToMultiple, currentAlignments.front());
702 if (updatesToMerge.size() == 0)
return;
704 if (currentUpdates.size() == 0)
return;
707 ViewerBase::AlignmentList::const_iterator u, ue = currentUpdates.end();
711 for (u=currentUpdates.begin(); u!=ue; ++u) {
712 if (updatesToMerge.find(*u) != updatesToMerge.end()) {
718 vector < unsigned int > rowOrder(newMultiple->
NRows());
719 for (
unsigned int i=0;
i<newMultiple->
NRows(); ++
i) rowOrder[
i] =
i;
740 ERRORMSG(
"Must have an alignment in the sequence viewer to merge with");
748 int nSuccessfulMerges = 0;
750 for (u=currentUpdates.begin(); u!=ue; ++u) {
751 if (*u == newMultiple)
continue;
753 if (updatesToMerge.find(*u) != updatesToMerge.end()) {
756 nSuccessfulMerges += (*u)->NRows() - 1;
758 for (
unsigned int i=0;
i<(*u)->NRows(); ++
i) {
759 string status = (*u)->GetRowStatusLine(
i);
760 if (status.size() > 0)
761 status +=
"; merge failed!";
763 status =
"Merge failed!";
764 (*u)->SetRowStatusLine(
i, status);
770 updatesToKeep.push_back(keep);
775 if (nSuccessfulMerges > 0) {
779 if (mergeToNeighbor && nSuccessfulMerges == 1) {
782 BlockMultipleAlignment::UngappedAlignedBlockList::const_iterator
b, be =
blocks.end();
783 int rowScore, bestScore = 0;
784 unsigned int col,
row, lastRow = multiple->
NRows() - 1;
790 for (col=0; col<(*b)->width; ++col) {
792 mergeSeq->
sequenceString[(*b)->GetRangeOfRow(lastRow)->from + col],
797 if (
row == 0 || rowScore > bestScore) {
799 bestScore = rowScore;
802 INFOMSG(
"Closest row is #" << (where+1) <<
", "
825 updateSequences->clear();
827 if (currentUpdates.size() == 0)
return;
828 ViewerBase::AlignmentList::const_iterator u, ue = currentUpdates.end();
829 for (u=currentUpdates.begin(); u!=ue; ++u)
830 updateSequences->push_back((*u)->GetSequenceOfRow(1));
839 return (chains->size() > 0);
847 ERRORMSG(
"AlignmentManager::ReplaceUpdatesInASN() - can't get StructureSet");
855 if (!multiple)
return;
858 vector < unsigned int > rowsToRemove;
859 for (
unsigned int i=1;
i<multiple->
NRows(); ++
i)
861 rowsToRemove.push_back(
i);
863 if (rowsToRemove.size() > 0) {
872 ERRORMSG(
"AlignmentManager::PurgeSequence() - ExtractRows failed!");
879 ERRORMSG(
"AlignmentManager::PurgeSequence() - can't get SequenceDisplay!");
887 if (currentUpdates.size() == 0)
return;
888 ViewerBase::AlignmentList::const_iterator u, ue = currentUpdates.end();
890 for (u=currentUpdates.begin(); u!=ue; ++u)
891 if ((*u)->GetSequenceOfRow(1)->identifier == identifier)
break;
895 for (u=currentUpdates.begin(); u!=ue; ++u) {
896 if ((*u)->GetSequenceOfRow(1)->identifier != identifier) {
898 updatesToKeep.push_back(keep);
910 if (!currentMultiple)
return;
913 if (currentUpdates.size() == 0)
918 int nRowsAddedToMultiple;
921 currentUpdates, &newAlignmentsList, &nRowsAddedToMultiple,
sequenceViewer)) {
927 if (nRowsAddedToMultiple > 0)
937 if (!currentMultiple)
return;
942 int nRowsAddedToMultiple;
943 bool foundSingle =
false;
945 singleList.push_back(single);
947 currentMultiple, singleList, &newAlignments, &nRowsAddedToMultiple,
sequenceViewer)) {
953 BlockAligner::AlignmentList::const_iterator
n,
ne = newAlignments.end();
954 for (
n=newAlignments.begin();
n!=
ne; ++
n)
955 replacedList.push_back(*
n);
958 replacedList.push_back((*a)->Clone());
961 "AlignmentManager::BlockAlignUpdate() - changed alignment not found in update viewer!");
965 if (nRowsAddedToMultiple > 0)
982 bool anyChanges =
false;
987 newAlignments->clear();
988 UpdateViewer::AlignmentList::const_iterator
t, te = toExtend.end();
989 for (
t=toExtend.begin();
t!=te; ++
t) {
991 newAlignments->push_back(p);
995 if (pairBlocks.size() == 0)
998 typedef list < ExtendInfo > ExtendList;
1000 ExtendMap extendMap;
1004 for (
unsigned int mb=0; mb<multBlocks.size(); ++mb) {
1005 const Block::Range *multRange = multBlocks[mb]->GetRangeOfRow(0);
1006 for (
unsigned int pb=0;
pb<pairBlocks.size(); ++
pb) {
1007 const Block::Range *pairRange = pairBlocks[
pb]->GetRangeOfRow(0);
1009 if (pairRange->
from > multRange->
from && pairRange->
from <= multRange->
to &&
1012 ExtendList& el = extendMap[ub];
1013 el.resize(el.size() + 1);
1014 el.back().multBlock = mb;
1015 el.back().pairBlock =
pb;
1016 el.back().extendPairBlockLeft =
true;
1017 el.back().nResidues = pairRange->
from - multRange->
from;
1018 TRACEMSG(
"block " << (
pb+1) <<
" wants to be extended to the left");
1021 if (pairRange->
to < multRange->
to && pairRange->
to >= multRange->
from &&
1024 ExtendList& el = extendMap[ub];
1025 el.resize(el.size() + 1);
1026 el.back().multBlock = mb;
1027 el.back().pairBlock =
pb;
1028 el.back().extendPairBlockLeft =
false;
1029 el.back().nResidues = multRange->
to - pairRange->
to;
1030 TRACEMSG(
"block " << (
pb+1) <<
" wants to be extended to the right");
1035 ExtendMap::const_iterator u, ue = extendMap.end();
1036 for (u=extendMap.begin(); u!=ue; ++u) {
1039 if (u->second.size() == 2 && (u->second.back().multBlock - u->second.front().multBlock > 1)) {
1040 TRACEMSG(
"can't extend with intervening block(s) in multiple between blocks "
1041 << (u->second.front().pairBlock+1) <<
" and " << (u->second.back().pairBlock+1));
1045 ExtendList::const_iterator e, ee;
1049 if (u->first->MinResidues() == u->first->width && u->second.size() == 2 &&
1050 u->second.front().multBlock == u->second.back().multBlock)
1052 ExtendList& modList =
const_cast<ExtendList&
>(u->second);
1053 modList.front().nResidues = u->first->width;
1054 modList.erase(++(modList.begin()));
1059 int available = u->first->MinResidues(), totalShifts = 0;
1060 for (e=u->second.begin(), ee=u->second.end(); e!=ee; ++e)
1061 totalShifts += e->nResidues;
1063 TRACEMSG(
"inadequate residues to the "
1064 << (u->second.front().extendPairBlockLeft ?
"left" :
"right")
1065 <<
" of block " << (u->second.front().pairBlock+1) <<
"; no extension performed");
1071 for (e=u->second.begin(), ee=u->second.end(); e!=ee; ++e) {
1073 (e->extendPairBlockLeft ?
1074 pairBlocks[e->pairBlock]->GetRangeOfRow(0)->from :
1075 pairBlocks[e->pairBlock]->GetRangeOfRow(0)->to),
1077 TRACEMSG(
"extending " << (e->extendPairBlockLeft ?
"left" :
"right")
1078 <<
" side of block " << (e->pairBlock+1) <<
" by " << e->nResidues <<
" residues");
1079 if (p->
MoveBlockBoundary(alnIdx, alnIdx + (e->extendPairBlockLeft ? -e->nResidues : e->nResidues)))
1082 ERRORMSG(
"MoveBlockBoundary() failed!");
1088 vector < int > mergeIndexes;
1089 for (
unsigned int pb=0;
pb<pairBlocks.size(); ++
pb) {
1090 const Block::Range *pairRange = pairBlocks[
pb]->GetRangeOfRow(0);
1091 if (prevRange && prevRange->
to == pairRange->
from - 1 && multiple.
IsAligned(0
U, prevRange->
to)) {
1097 if (pAlnIdx1 == pAlnIdx2 - 1 &&
1100 TRACEMSG(
"merging blocks " <<
pb <<
" and " << (
pb+1));
1102 mergeIndexes.push_back(pAlnIdx1);
1105 prevRange = pairRange;
1107 for (
unsigned int i=0;
i<mergeIndexes.size(); ++
i) {
1123 if (!currentMultiple)
return;
1126 if (currentUpdates.size() == 0)
1140 if (!currentMultiple)
return;
1146 singleList.push_back(single);
1148 if (newAlignments.size() != 1) {
1149 ERRORMSG(
"AlignmentManager::ExtendUpdate() - returned alignment list size != 1!");
1155 bool foundSingle =
false;
1158 replacedList.push_back(newAlignments.front());
1161 replacedList.push_back((*a)->Clone());
1164 ERRORMSG(
"AlignmentManager::ExtendUpdate() - changed alignment not found in update viewer!");
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
static int GetAlignedResidueIndexes(BlockMultipleAlignment::UngappedAlignedBlockList::const_iterator &b, BlockMultipleAlignment::UngappedAlignedBlockList::const_iterator &be, int row, int *seqIndexes, bool countHighlights=false, const BlockMultipleAlignment *multiple=NULL)
static bool NoBlockBoundariesBetween(int masterFrom, int masterTo, const AlignmentManager::PairwiseAlignmentList &alignments)
static bool AlignedToAllDependents(int masterResidue, const AlignmentManager::PairwiseAlignmentList &alignments)
static bool CreateNewPairwiseAlignmentsByBlockExtension(const BlockMultipleAlignment &multiple, const UpdateViewer::AlignmentList &toExtend, UpdateViewer::AlignmentList *newAlignments)
static bool NoDependentInsertionsBetween(int masterFrom, int masterTo, const AlignmentManager::PairwiseAlignmentList &alignments)
void NewAlignments(const SequenceSet *sSet, const AlignmentSet *aSet)
const SequenceSet * sequenceSet
void BlockAlignUpdate(BlockMultipleAlignment *single)
void ShowSequenceViewer(bool showNow) const
void ExtendAllUpdates(void)
bool IsInAlignment(const Sequence *sequence) const
void RealignAllDependentStructures(bool highlightedOnly) const
AlignmentManager(const SequenceSet *sSet, const AlignmentSet *aSet)
void CalculateRowScoresWithThreader(double weightPSSM)
std::vector< unsigned int > originalRowOrder
void PurgeSequence(const MoleculeIdentifier *identifier)
UpdateViewer * updateViewer
void RealignDependentSequences(BlockMultipleAlignment *multiple, const std::vector< unsigned int > &dependentsToRealign)
BlockMultipleAlignment * CreateMultipleFromPairwiseWithIBM(const PairwiseAlignmentList &alignments)
void BlockAlignAllUpdates(void)
void ExtendUpdate(BlockMultipleAlignment *single)
const Vector * GetAlignmentColor(const Sequence *sequence, unsigned int seqIndex, StyleSettings::eColorScheme colorScheme) const
void ShowHideCallbackFunction(const std::vector< bool > &itemsEnabled)
void ShowUpdateWindow(void) const
virtual ~AlignmentManager(void)
void GetUpdateSequences(std::list< const Sequence * > *updateSequences) const
std::map< BlockMultipleAlignment *, bool > UpdateMap
void GetAlignmentSetDependentVisibilities(std::vector< bool > *visibilities) const
std::list< ncbi::CRef< ncbi::objects::CUpdate_align > > UpdateAlignList
SequenceViewer * sequenceViewer
bool GetStructureProteins(std::vector< const Sequence * > *chains) const
BlockMultipleAlignment * originalMultiple
unsigned int NUpdates(void) const
void ThreadUpdate(const ThreaderOptions &options, BlockMultipleAlignment *single)
void SavePairwiseFromMultiple(const BlockMultipleAlignment *multiple, const std::vector< unsigned int > &rowOrder)
const BlockMultipleAlignment * GetCurrentMultipleAlignment(void) const
std::vector< bool > dependentsVisible
BlockAligner * blockAligner
void ReplaceUpdatesInASN(ncbi::objects::CCdd::TPending &newUpdates) const
bool IsAligned(const Sequence *sequence, unsigned int seqIndex) const
void NewMultipleWithRows(const std::vector< bool > &visibilities)
void MergeUpdates(const UpdateMap &updates, bool mergeToNeighbor)
const AlignmentSet * alignmentSet
std::list< const MasterDependentAlignment * > PairwiseAlignmentList
void GetAlignmentSetDependentSequences(std::vector< const Sequence * > *sequences) const
void ThreadAllUpdates(const ThreaderOptions &options)
static AlignmentSet * CreateFromMultiple(const BlockMultipleAlignment *multiple, SeqAnnotList *newAsnAlignmentData, const SequenceSet &sequenceSet, const std::vector< unsigned int > *rowOrder=NULL)
bool CreateNewPairwiseAlignmentsByBlockAlignment(BlockMultipleAlignment *multiple, const AlignmentList &toRealign, AlignmentList *newAlignments, int *nRowsAddedToMultiple, SequenceViewer *sequenceViewer)
std::list< BlockMultipleAlignment * > AlignmentList
BlockMultipleAlignment * Clone(void) const
std::vector< const Sequence * > SequenceList
const UnalignedBlock * GetUnalignedBlockBefore(const UngappedAlignedBlock *aBlock) const
bool MoveBlockBoundary(unsigned int columnFrom, unsigned int columnTo)
ncbi::CRef< ncbi::objects::CUpdate_align > updateOrigin
const Vector * GetAlignmentColor(const Sequence *sequence, unsigned int seqIndex, StyleSettings::eColorScheme colorScheme) const
const BLAST_Matrix * GetPSSM(void) const
const Sequence * GetMaster(void) const
std::vector< const UngappedAlignedBlock * > UngappedAlignedBlockList
void RemovePSSM(void) const
bool ExtractRows(const std::vector< unsigned int > &slavesToRemove, AlignmentList *pairwiseAlignments)
const Sequence * GetSequenceOfRow(unsigned int row) const
unsigned int GetAlignedBlockNumber(unsigned int alignmentIndex) const
void GetUngappedAlignedBlocks(UngappedAlignedBlockList *blocks) const
unsigned int GetAlignmentIndex(unsigned int row, unsigned int seqIndex, eUnalignedJustification justification)
unsigned int NRows(void) const
bool HasNoAlignedBlocks(void) const
bool UpdateBlockMapAndColors(bool clearRowInfo=true)
const SequenceList * GetSequences(void) const
bool MergeBlocks(unsigned int fromAlignmentIndex, unsigned int toAlignmentIndex)
bool IsAligned(unsigned int row, unsigned int seqIndex) const
bool AddUnalignedBlocks(void)
bool AddAlignedBlockAtEnd(UngappedAlignedBlock *newBlock)
bool MergeAlignment(const BlockMultipleAlignment *newAlignment)
const UnalignedBlock * GetUnalignedBlockAfter(const UngappedAlignedBlock *aBlock) const
void SetRangeOfRow(unsigned int row, int from, int to)
void PostRedrawMolecule(const Molecule *molecule)
void PostRedrawAllStructures(void)
void UnPostRedrawSequenceViewer(ViewerBase *viewer)
void RemoveSequenceViewer(const ViewerBase *sequenceViewer)
void AddSequenceViewer(ViewerBase *sequenceViewer)
void PostRedrawAllSequenceViewers(void)
static const int VALUE_NOT_SET
std::string ToString(void) const
int GetAlphaCoords(int nResidues, const int *seqIndexes, const Vector **coords) const
void GetProteinSequences(SequenceList *seqs) const
void RowsAdded(unsigned int nRowsAddedToMultiple, BlockMultipleAlignment *multiple, int where=-1)
void RowsRemoved(const std::vector< unsigned int > &rowsRemoved, const BlockMultipleAlignment *multiple)
void CreateSequenceWindow(bool showNow)
void DisplayAlignment(BlockMultipleAlignment *multipleAlignment)
void DisplaySequences(const SequenceList *sequenceList)
const Molecule * molecule
const MoleculeIdentifier * identifier
unsigned int Length(void) const
int GetOrSetMMDBLink(void) const
void Show(const StructureBase *entity, bool isShown)
bool GetParentOfType(const T **ptr, bool warnIfNotFound=true) const
static const unsigned int eRowOrderData
void InitStructureAlignments(int masterMMDBID)
void ReplaceAlignmentSet(AlignmentSet *newAlignmentSet)
void RemoveStructureAlignments(void)
ShowHideManager * showHideManager
void ReplaceUpdates(ncbi::objects::CCdd::TPending &newUpdates)
void SetDataChanged(unsigned int what) const
StyleManager * styleManager
static const unsigned int ePSSMData
std::list< BlockMultipleAlignment * > AlignmentList
bool Realign(const ThreaderOptions &options, BlockMultipleAlignment *masterMultiple, const AlignmentList *originalAlignments, AlignmentList *newAlignments, unsigned int *nRowsAddedToMultiple, SequenceViewer *sequenceViewer)
bool CalculateScores(const BlockMultipleAlignment *multiple, double weightPSSM)
void SavePendingStructures(void)
void ReplaceAlignments(const AlignmentList &alignmentList)
void AddAlignments(const AlignmentList &alignmentList)
std::list< BlockMultipleAlignment * > AlignmentList
void CreateUpdateWindow(void)
void SetInitialState(void)
std::list< BlockMultipleAlignment * > AlignmentList
SequenceDisplay * GetCurrentDisplay(void)
bool EditorIsOn(void) const
const AlignmentList & GetCurrentAlignments(void) const
Include a standard set of the NCBI C++ Toolkit most basic headers.
struct parameters_t * pb[]
EDiagSev SetDiagPostLevel(EDiagSev post_sev=eDiag_Error)
Set the threshold severity for posting the messages.
@ eDiag_Info
Informational message.
@ eDiag_Warning
Warning message.
#define END_SCOPE(ns)
End the previously defined scope.
#define BEGIN_SCOPE(ns)
Define a new scope.
TNumRows GetNumRows(void) const
Get the NumRows member data.
bool IsSetFinalData(void) const
Final representation for the PSSM Check if a value has been assigned to FinalData data member.
TH GetH(void) const
Get the H member data.
TKappa GetKappa(void) const
Get the Kappa member data.
const TScores & GetScores(void) const
Get the Scores member data.
TScalingFactor GetScalingFactor(void) const
Get the ScalingFactor member data.
const TFinalData & GetFinalData(void) const
Get the FinalData member data.
TNumColumns GetNumColumns(void) const
Get the NumColumns member data.
TByRow GetByRow(void) const
Get the ByRow member data.
const TPssm & GetPssm(void) const
Get the Pssm member data.
TLambda GetLambda(void) const
Get the Lambda member data.
unsigned int
A callback function used to compare two keys in a database.
where boath are integers</td > n< td ></td > n</tr > n< tr > n< td > tse</td > n< td > optional</td > n< td > String</td > n< td class=\"description\"> TSE option controls what blob is smart and slim</td> n<td> orig</td> n</tr> n<tr> n<td> last_modified</td> n<td> optional</td> n<td> Integer</td> n<td class=\"description\"> The blob last modification If provided then the exact match will be requested with n the Cassandra storage corresponding field value</td> n<td> Positive integer Not provided means that the most recent match will be selected</td> n<td></td> n</tr> n<tr> n<td> use_cache</td> n<td> optional</td> n<td> String</td> n<td class=\"description\"> The option controls if the Cassandra LMDB cache and or database should be used It n affects the seq id resolution step and the blob properties lookup step The following n options are available
if(yy_accept[yy_current_state])
Messenger * GlobalMessenger(void)
range(_Ty, _Ty) -> range< _Ty >
const struct ncbi::grid::netcache::search::fields::SIZE size
bool ne(T x_, T y_, T round_)
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
#define row(bind, expected)
static DP_BlockInfo * blocks
static int GetBLOSUM62Score(char a, char b)