mergeAfterEachSequence(
true),
77freezeIsolatedBlocks(
true),
79loopLengthMultiplier(1.5),
82terminalResidueCutoff(-1)
92 staticChar2Int charMap;
94 if(charMap.size() == 0) {
99Char2Int::const_iterator c = charMap.find((
unsigned char)
toupper(
r));
100 return((c != charMap.end()) ? c->second : -1);
116alignmentManager(parentAlnMgr)
122ContactMap::iterator c, ce =
contacts.end();
129 if(multiple->
NRows() == 1) {
131 for(
unsigned intres=0; res<multiple->
GetMaster()->Length(); ++res)
136 TRACEMSG(
"Created Seq_Mtf (PSSM) from BLOSUM62 scores");
142 ERRORMSG(
"Can't create Seq_Mtf with no aligned blocks");
147 TRACEMSG(
"converting PSSM scores to Seq_Mtf");
149 for(
unsigned intc=0; c<multiple->
GetMaster()->Length(); ++c)
159 static const unsigned intMIN_LOOP_MAX = 2;
160 static const unsigned intEXTENSION_MAX = 10;
167corDef->
lll.
llmn[0] = corDef->
lll.
llmn[alignedBlocks.size()] =
168corDef->
lll.
llmx[0] = corDef->
lll.
llmx[alignedBlocks.size()] =
169corDef->
lll.
lrfs[0] = corDef->
lll.
lrfs[alignedBlocks.size()] = 0;
172BlockMultipleAlignment::UngappedAlignedBlockList::const_iterator
173 b= alignedBlocks.begin(), be = alignedBlocks.end();
174 unsigned int n,
max;
175 for(
n=1, ++
b;
b!=be; ++
n, ++
b) {
178 max= (
unsigned int) (loopLengthMultiplier * uaBlock->
width);
179 if(
max< MIN_LOOP_MAX)
max= MIN_LOOP_MAX;
190 for(
n=0,
b=alignedBlocks.begin();
b!=be; ++
b, ++
n) {
191range = (*b)->GetRangeOfRow(0);
192mid = (range->
from+ range->
to) / 2;
199corDef->
sll.
nomx[0] = corDef->
sll.
nomn[0] + EXTENSION_MAX;
204corDef->
sll.
comx[alignedBlocks.size() - 1] = corDef->
sll.
comn[alignedBlocks.size() - 1] + EXTENSION_MAX;
205 if(corDef->
sll.
rfpt[alignedBlocks.size() - 1] + corDef->
sll.
comx[alignedBlocks.size() - 1] >=
207corDef->
sll.
comx[alignedBlocks.size() - 1] =
212 unsigned intnUnaligned, extN;
213 for(
n=0,
b=alignedBlocks.begin();
b!=be; ++
b, ++
n) {
214range = (*b)->GetRangeOfRow(0);
216nUnaligned = range->
from- prevRange->
to- 1;
217extN = nUnaligned / 2;
219corDef->
sll.
comx[
n- 1] = corDef->
sll.
comn[
n- 1] + nUnaligned - extN;
225corDef->
fll.
n= 0;
243 for(
i=0;
i<dependentSeq->
Length(); ++
i)
248BlockMultipleAlignment::UngappedAlignedBlockList::const_iterator
249m, me = multipleABlocks.end(), p, pe = pairwiseABlocks.end();
251 for(
i=0, m=multipleABlocks.begin(); m!=me; ++
i, ++m) {
252multipleRange = (*m)->GetRangeOfRow(0);
253 for(p=pairwiseABlocks.begin(); p!=pe; ++p) {
254pairwiseRange = (*p)->GetRangeOfRow(0);
255 if(pairwiseRange->
from<= multipleRange->
from&& pairwiseRange->
to>= multipleRange->
to) {
256 intmasterCenter = (multipleRange->
from+ multipleRange->
to) / 2;
258 int offset= masterCenter - pairwiseRange->
from;
259pairwiseRange = (*p)->GetRangeOfRow(1);
270 if(terminalCutoff >= 0) {
271 if(qrySeq->
sac.
mn[0] == -1) {
274}
else if(pairwiseABlocks.size() > 0) {
275 const Block::Range*nextQryBlock = pairwiseABlocks.front()->GetRangeOfRow(1);
276qrySeq->
sac.
mn[0] = nextQryBlock->
from- 1 - terminalCutoff;
278 if(qrySeq->
sac.
mn[0] < 0) qrySeq->
sac.
mn[0] = 0;
279 INFOMSG(
"new N-terminal block constrained to query loc >= "<< qrySeq->
sac.
mn[0] + 1);
281 if(qrySeq->
sac.
mx[multipleABlocks.size() - 1] == -1) {
284}
else if(pairwiseABlocks.size() > 0) {
285 const Block::Range*prevQryBlock = pairwiseABlocks.back()->GetRangeOfRow(1);
286qrySeq->
sac.
mx[multipleABlocks.size() - 1] = prevQryBlock->
to+ 1 + terminalCutoff;
288 if(qrySeq->
sac.
mx[multipleABlocks.size() - 1] >= qrySeq->
n||
289qrySeq->
sac.
mx[multipleABlocks.size() - 1] < 0)
290qrySeq->
sac.
mx[multipleABlocks.size() - 1] = qrySeq->
n- 1;
291 INFOMSG(
"new C-terminal block constrained to query loc <= " 292<< qrySeq->
sac.
mx[multipleABlocks.size() - 1] + 1);
303 unsigned int i, Count=0;
304 boolInsideStr =
false;
306 for(
i=0;
i<Str.size(); ++
i) {
307 if(!InsideStr && (Str[
i] !=
' ')) {
311 if(Str[
i] ==
' ') {
319 while(!InFile.eof()) {
320InFile.getline(Str,
sizeof(Str));
332 const char*FileName =
"ContactPotential";
335 unsigned int i, j, k;
338 static const unsigned intkNumDistances = 6;
339 static const unsigned intkPeptideIndex = 20;
344 ERRORMSG(
"Threader::CreateRcxPtl() - can't open "<<
Path<<
" for reading");
351 for(
i=0;
i<kNumDistances; ++
i) {
353 if(InFile->eof())
goto error;
355InFile->getline(ResName,
sizeof(ResName),
' ');
356 if(InFile->eof())
goto error;
359 if(InFile->eof())
goto error;
368InFile->getline(ResName,
sizeof(ResName),
' ');
369 if(InFile->eof())
goto error;
370 for(j=0; j<kNumDistances; ++j) {
372 if(InFile->eof())
goto error;
378 for(
i=0;
i<kNumDistances; ++
i) {
381pmf->
rrt[
i][j][k] = pmf->
rre[
i][j][k] + pmf->
re[
i][j] + pmf->
re[
i][k];
389 ERRORMSG(
"Threader::CreateRcxPtl() - error parsing "<< FileName);
401 unsigned intNumTrajectoryPoints;
403 static const unsigned intkNumTempSteps = 3;
407gsp->
nrs= nRandomStarts;
408gsp->
nts= kNumTempSteps;
471 if(gsp->
als== 0) {
472NumTrajectoryPoints = 1;
474NumTrajectoryPoints = 0;
475 for(
unsigned int i=0;
i<kNumTempSteps; ++
i) {
476NumTrajectoryPoints += gsp->
nti[
i] * (gsp->
nac[
i] + gsp->
nlc[
i]);
478NumTrajectoryPoints *= gsp->
nrs;
479NumTrajectoryPoints += gsp->
nrs;
481gsp->
ntp= NumTrajectoryPoints;
486 #define NO_VIRTUAL_COORDINATE(coord) \ 487 do { coord->type = Threader::MISSING_COORDINATE; return; } while (0) 494Residue::AtomInfoMap::const_iterator
a, ae = res->
GetAtomInfos().end();
497 if(
a->second->atomicNumber == 6) {
498 if(
a->second->code ==
" C ")
499 C= atomSet->
GetAtom(ap,
true,
true);
500 else if(
a->second->code ==
" CA ")
501CA = atomSet->
GetAtom(ap,
true,
true);
502 else if(
a->second->code ==
" CB ")
503 CB= atomSet->
GetAtom(ap,
true,
true);
504}
else if(
a->second->atomicNumber == 7 &&
a->second->code ==
" N ")
505 N= atomSet->
GetAtom(ap,
true,
true);
506 if(
C&& CA &&
CB&&
N)
break;
515toCB =
CB->site - CA->site;
520 VectorCaN, CaC, cross, bisect;
521CaN =
N->site - CA->site;
522CaC =
C->site - CA->site;
529cross = vector_cross(CaN, CaC);
531toCB = 0.816497 * cross - 0.57735 * bisect;
536coord->
coord= CA->site + 2.4 * toCB;
540Molecule::DisulfideMap::const_iterator ds = mol->
disulfideMap.find(res->
id);
543(ds->second - 1) * 2;
554*atom1 = atomSet->
GetAtom(ap1,
true,
true),
555*atom2 = atomSet->
GetAtom(ap2,
true,
true);
558coord->
coord= (atom1->
site+ atom2->site) / 2;
566virtualCoordinates->resize(2 * mol->
residues.size() - 1);
567Molecule::ResidueMap::const_iterator
r, re = mol->
residues.end();
573prevResidue,
r->second, &((*virtualCoordinates)[
i++]));
574prevResidue =
r->second;
576 r->second, &((*virtualCoordinates)[
i++]));
583 doubledist = (p2 - p1).length();
607 unsigned int i, j, bin;
610 for(
i=0;
i<coords.size(); ++
i) {
612 WARNINGMSG(
"Threader::CreateFldMtf() - unable to determine virtual coordinate for " 613<< ((
i%2 == 0) ?
"sidechain ":
"peptide ") << (
i/2));
617 for(j=
i+10; j<coords.size(); ++j) {
624(coords[
i].disulfideWith == (
int)j || coords[j].disulfideWith == (
int)
i)
632resResContacts->resize(resResContacts->size() + 1);
633resResContacts->back().vc1 =
i;
634resResContacts->back().vc2 = j;
635resResContacts->back().distanceBin = bin;
639resPepContacts->resize(resPepContacts->size() + 1);
640resPepContacts->back().distanceBin = bin;
643resPepContacts->back().vc1 =
i;
644resPepContacts->back().vc2 = j;
646resPepContacts->back().vc2 =
i;
647resPepContacts->back().vc1 = j;
659Threader::ContactList::const_iterator c;
660 for(
i=0, c=resResContacts.begin();
i<resResContacts.size(); ++
i, ++c) {
661fldMtf->
rrc.
r1[
i] = c->vc1 / 2;
662fldMtf->
rrc.
r2[
i] = c->vc2 / 2;
663fldMtf->
rrc.
d[
i] = c->distanceBin;
665 for(
i=0, c=resPepContacts.begin();
i<resPepContacts.size(); ++
i, ++c) {
666fldMtf->
rpc.
r1[
i] = c->vc1 / 2;
667fldMtf->
rpc.
p2[
i] = c->vc2 / 2;
668fldMtf->
rpc.
d[
i] = c->distanceBin;
682Molecule::ResidueMap::const_iterator
r1,
r2, re = mol->
residues.end();
689a1 = atomSet->
GetAtom(ap1,
true,
true);
692 for(
r2=
r1, j=
i;
r2!=re; ++
r2, ++j) {
695fldMtf->
mll[
i][j] = 0;
701a2 = atomSet->
GetAtom(ap2,
true,
true);
703fldMtf->
mll[
i][j] = fldMtf->
mll[j][
i] =
704(!a1 || !a2) ? 0 : (
int) (((a2->
site- a1->
site).length() - 2.7) / 3.4);
712 if(!masterSequence)
return NULL;
717ContactMap::iterator c = mol ?
contacts.find(mol) :
contacts.find(masterSequence);
718 if(c !=
contacts.end())
returnc->second;
732 const AtomSet*atomSet =
object->coordSets.front()->atomSet;
740 GetContacts(virtualCoordinates, &resResContacts, &resPepContacts);
743fldMtf =
NewFldMtf(mol->
residues.size(), resResContacts.size(), resPepContacts.size());
744resPepContacts.sort();
759 if(corDef->
sll.
n!= thdTbl->
nsc|| (
int)nResult >= thdTbl->
n) {
760 ERRORMSG(
"CreateAlignmentFromThdTbl() - inconsistent Thd_Tbl");
767 for(
intblock=0; block<corDef->
sll.
n; ++block) {
770corDef->
sll.
rfpt[block] - thdTbl->
no[block][nResult],
771corDef->
sll.
rfpt[block] + thdTbl->
co[block][nResult]);
773thdTbl->
al[block][nResult] - thdTbl->
no[block][nResult],
774thdTbl->
al[block][nResult] + thdTbl->
co[block][nResult]);
775aBlock->
width= thdTbl->
no[block][nResult] + 1 + thdTbl->
co[block][nResult];
777 ERRORMSG(
"CreateAlignmentFromThdTbl() - error adding block");
785 ERRORMSG(
"CreateAlignmentFromThdTbl() - error finishing alignment");
795 if(!corDef || !masterCorDef || !qrySeq ||
796corDef->
sll.
n!= masterCorDef->
sll.
n|| corDef->
sll.
n!= qrySeq->
sac.
n) {
797 ERRORMSG(
"FreezeIsolatedBlocks() - bad parameters");
802 for(
int i=0;
i<corDef->
sll.
n; ++
i) {
809 if(qrySeq->
sac.
mn[
i] < 0 || qrySeq->
sac.
mx[
i] < 0)
continue;
813 booladjacentLeft = (
i> 0 && (qrySeq->
sac.
mn[
i- 1] < 0 || qrySeq->
sac.
mx[
i- 1] < 0));
814 booladjacentRight = (
i< corDef->
sll.
n- 1 &&
815(qrySeq->
sac.
mn[
i+ 1] < 0 || qrySeq->
sac.
mx[
i+ 1] < 0));
821 if(!adjacentRight) {
832 unsigned int*nRowsAddedToMultiple,
SequenceViewer*sequenceViewer)
834*nRowsAddedToMultiple = 0;
835 if(!masterMultiple || !originalAlignments || !newAlignments || originalAlignments->size() == 0)
839 static const unsigned intzscs = 0;
846 float*trajectory =
NULL;
847 boolretval =
false;
849AlignmentList::const_iterator p, pe = originalAlignments->end();
851 #ifdef DEBUG_THREADER 858 ERRORMSG(
"Can't use contact potential on non-structured master, or alpha-only (virtual bond) models!");
866trajectory =
new float[gibScd->
ntp];
870 #ifdef DEBUG_THREADER 871pFile = fopen(
"Seq_Mtf.debug.txt",
"w");
881 #ifdef DEBUG_THREADER 882pFile = fopen(
"Fld_Mtf.debug.txt",
"w");
887 for(p=originalAlignments->begin(); p!=pe; ) {
889 if((*p)->NRows() != 2 || (*p)->GetMaster() != masterMultiple->
GetMaster()) {
890 ERRORMSG(
"Threader::Realign() - bad pairwise alignment");
896 unsigned intsuccess = 0;
900 #ifdef DEBUG_THREADER 901pFile = fopen(
"Qry_Seq.debug.txt",
"w");
909 #ifdef DEBUG_THREADER 910pFile = fopen(
"Cor_Def.debug.txt",
"w");
919 INFOMSG(
"threading "<< (*p)->GetSequenceOfRow(1)->identifier->ToString());
920success =
atd(fldMtf, corDef, qrySeq, rcxPtl, gibScd, thdTbl, seqMtf,
926 #ifdef DEBUG_THREADER 927pFile = fopen(
"Thd_Tbl.debug.txt",
"w");
932 for(
int i=0;
i<thdTbl->
n; ++
i) {
935 if(thdTbl->
tf[
i] <= 0)
continue;
938sequences->front() = (*p)->GetMaster();
939sequences->back() = (*p)->GetSequenceOfRow(1);
941 if(!newAlignment)
continue;
955newAlignment =
NULL;
956++(*nRowsAddedToMultiple);
962newAlignments->push_back(newAlignment);
969newAlignment = (*p)->
Clone();
974newAlignments->push_back(newAlignment);
997 if(trajectory)
delete[] trajectory;
1003 unsigned int row,
constvector < int >& residueNumbers,
const Seq_Mtf*seqMtf)
1006BlockMultipleAlignment::UngappedAlignedBlockList::const_iterator
b, be = aBlocks.end();
1010 for(
b=aBlocks.begin();
b!=be; ++
b) {
1011masterRange = (*b)->GetRangeOfRow(0);
1012dependentRange = (*b)->GetRangeOfRow(
row);
1013 for(
i=0;
i<(*b)->width; ++
i)
1014 if(residueNumbers[dependentRange->
from+
i] >= 0)
1015score += seqMtf->
ww[masterRange->
from+
i][residueNumbers[dependentRange->
from+
i]];
1023 unsigned int row,
constvector < int >& residueNumbers,
const Fld_Mtf*fldMtf,
const Rcx_Ptl*rcxPtl)
1026 intseqIndex1, seqIndex2, resNum1, resNum2, dist,
i;
1030 for(
i=0;
i<fldMtf->
rrc.
n; ++
i) {
1032 if(seqIndex1 < 0)
continue;
1034 if(seqIndex2 < 0)
continue;
1036resNum1 = residueNumbers[seqIndex1];
1037resNum2 = residueNumbers[seqIndex2];
1038 if(resNum1 < 0 || resNum2 < 0)
continue;
1040dist = fldMtf->
rrc.
d[
i];
1041score += rcxPtl->
rre[dist][resNum1][resNum2] + rcxPtl->
re[dist][resNum1] + rcxPtl->
re[dist][resNum2];
1045 for(
i=0;
i<fldMtf->
rpc.
n; ++
i) {
1047 if(seqIndex1 < 0)
continue;
1054resNum1 = residueNumbers[seqIndex1];
1055 if(resNum1 < 0)
continue;
1058dist = fldMtf->
rpc.
d[
i];
1059score += rcxPtl->
rre[dist][resNum1][resNum2] + rcxPtl->
re[dist][resNum1] + rcxPtl->
re[dist][resNum2];
1072vector < int > residueNumbers;
1073 boolretval =
false;
1079 ERRORMSG(
"Can't use contact potential on non-structured master, or alpha-only (virtual bond) models!");
1097residueNumbers.resize(seq->
Length());
1098 for(
unsigned int i=0;
i<seq->
Length(); ++
i)
1103scorePSSM = (weightPSSM > 0.0) ?
1105scoreContacts = (weightPSSM < 1.0) ?
1112oss <<
"PSSM+Contact score (PSSM x"<< weightPSSM <<
"): "<< score;
1129 ERRORMSG(
"Can't use contact potential on non-structured master, or alpha-only (virtual bond) models!");
1140BlockMultipleAlignment::UngappedAlignedBlockList::const_iterator
b, be = aBlocks.end(),
n;
1141 unsigned intnViolations = 0,
row;
1144 for(
b=aBlocks.begin();
b!=be; ++
b) {
1147 if(
n== be)
break;
1153thisRange = (*b)->GetRangeOfRow(
row);
1154nextRange = (*n)->GetRangeOfRow(
row);
1160 if(fldMtf->
mll[thisRange->
to][nextRange->
from] < minimumLoop)
1161minimumLoop = fldMtf->
mll[thisRange->
to][nextRange->
from];
1168thisRange = (*b)->GetRangeOfRow(
row);
1169nextRange = (*n)->GetRangeOfRow(
row);
1171 if(nextRange->
from- thisRange->
to- 1 < minimumLoop) {
1172(*violations)[
row].push_back(make_pair(thisRange->
to, nextRange->
from));
1186 unsigned intnBlocksToAlign = 0;
1193BlockMultipleAlignment::UngappedAlignedBlockList::const_iterator
1194m, me = multipleABlocks.end(), p, pe = pairwiseABlocks.end();
1196 for(m=multipleABlocks.begin(); m!=me; ++m) {
1197multipleRange = (*m)->GetRangeOfRow(0);
1198 boolrealignBlock =
true;
1199 for(p=pairwiseABlocks.begin(); p!=pe; ++p) {
1200pairwiseRange = (*p)->GetRangeOfRow(0);
1201 if(pairwiseRange->
from<= multipleRange->
from&& pairwiseRange->
to>= multipleRange->
to) {
1202realignBlock =
false;
1206 if(realignBlock) ++nBlocksToAlign;
1209 if(nBlocksToAlign <= 1)
1213 return(
int) (exp(1.5 + 0.25432 * nBlocksToAlign) + 0.5);
const AtomCoord * GetAtom(const AtomPntr &atom, bool getAny=false, bool suppressWarning=false) const
BlockMultipleAlignment * Clone(void) const
std::vector< const Sequence * > SequenceList
const UnalignedBlock * GetUnalignedBlockBefore(const UngappedAlignedBlock *aBlock) const
void SetRowDouble(unsigned int row, double value) const
const BLAST_Matrix * GetPSSM(void) const
void SetRowStatusLine(unsigned int row, const std::string &value) const
const Sequence * GetMaster(void) const
std::vector< const UngappedAlignedBlock * > UngappedAlignedBlockList
const Sequence * GetSequenceOfRow(unsigned int row) const
void GetUngappedAlignedBlocks(UngappedAlignedBlockList *blocks) const
unsigned int NRows(void) const
bool HasNoAlignedBlocks(void) const
bool UpdateBlockMapAndColors(bool clearRowInfo=true)
int GetAlignedDependentIndex(unsigned int masterSeqIndex, unsigned int dependentRow) const
bool IsAligned(unsigned int row, unsigned int seqIndex) const
bool AddUnalignedBlocks(void)
bool AddAlignedBlockAtEnd(UngappedAlignedBlock *newBlock)
bool MergeAlignment(const BlockMultipleAlignment *newAlignment)
void SetRangeOfRow(unsigned int row, int from, int to)
CNcbiOstrstreamToString class helps convert CNcbiOstrstream to a string Sample usage:
std::string ToString(void) const
DisulfideMap disulfideMap
const MoleculeIdentifier * identifier
static const int NO_ALPHA_ID
const AtomInfoMap & GetAtomInfos(void) const
const Molecule * molecule
const MoleculeIdentifier * identifier
unsigned int Length(void) const
bool GetParentOfType(const T **ptr, bool warnIfNotFound=true) const
bool mergeAfterEachSequence
int terminalResidueCutoff
bool freezeIsolatedBlocks
double loopLengthMultiplier
std::vector< VirtualCoordinate > VirtualCoordinateList
std::list< BlockMultipleAlignment * > AlignmentList
Cor_Def * CreateCorDef(const BlockMultipleAlignment *multiple, double loopLengthMultiplier)
std::vector< IntervalList > GeometryViolationsForRow
bool Realign(const ThreaderOptions &options, BlockMultipleAlignment *masterMultiple, const AlignmentList *originalAlignments, AlignmentList *newAlignments, unsigned int *nRowsAddedToMultiple, SequenceViewer *sequenceViewer)
AlignmentManager * alignmentManager
Threader(AlignmentManager *parentAlnMgr)
static const unsigned int SCALING_FACTOR
static const std::string ThreaderResidues
unsigned int GetGeometryViolations(const BlockMultipleAlignment *multiple, GeometryViolationsForRow *violations)
Gib_Scd * CreateGibScd(bool fast, unsigned int nRandomStarts)
Seq_Mtf * CreateSeqMtf(const BlockMultipleAlignment *multiple, double weightPSSM)
Qry_Seq * CreateQrySeq(const BlockMultipleAlignment *multiple, const BlockMultipleAlignment *pairwise, int terminalCutoff)
static unsigned int EstimateNRandomStarts(const BlockMultipleAlignment *coreAlignment, const BlockMultipleAlignment *toBeThreaded)
bool CalculateScores(const BlockMultipleAlignment *multiple, double weightPSSM)
Fld_Mtf * CreateFldMtf(const Sequence *masterSequence)
Rcx_Ptl * CreateRcxPtl(double weightContacts)
std::list< Contact > ContactList
bool EditorIsOn(void) const
static void ReadToRowOfEnergies(ifstream &InFile, unsigned int NumResTypes)
ThreaderOptions globalThreaderOptions
static void GetVirtualResidue(const AtomSet *atomSet, const Molecule *mol, const Residue *res, Threader::VirtualCoordinate *coord)
static void GetVirtualPeptide(const AtomSet *atomSet, const Molecule *mol, const Residue *res1, const Residue *res2, Threader::VirtualCoordinate *coord)
static bool FreezeIsolatedBlocks(Cor_Def *corDef, const Cor_Def *masterCorDef, const Qry_Seq *qrySeq)
static const unsigned int NUM_RES_TYPES
static unsigned int CountWords(char *chs)
bool operator<(const Threader::Contact &c1, const Threader::Contact &c2)
static int LookupThreaderResidueNumberFromCharacterAbbrev(char r)
static double CalculatePSSMScore(const BlockMultipleAlignment::UngappedAlignedBlockList &aBlocks, unsigned int row, const vector< int > &residueNumbers, const Seq_Mtf *seqMtf)
unsigned int LookupNCBIStdaaNumberFromThreaderResidueNumber(char r)
static void TranslateContacts(const Threader::ContactList &resResContacts, const Threader::ContactList &resPepContacts, Fld_Mtf *fldMtf)
static void GetVirtualCoordinates(const Molecule *mol, const AtomSet *atomSet, Threader::VirtualCoordinateList *virtualCoordinates)
static void GetMinimumLoopLengths(const Molecule *mol, const AtomSet *atomSet, Fld_Mtf *fldMtf)
static const unsigned int MAX_DISTANCE_BIN
static BlockMultipleAlignment * CreateAlignmentFromThdTbl(const Thd_Tbl *thdTbl, unsigned int nResult, const Cor_Def *corDef, BlockMultipleAlignment::SequenceList *sequences, AlignmentManager *alignmentManager)
static double CalculateContactScore(const BlockMultipleAlignment *multiple, unsigned int row, const vector< int > &residueNumbers, const Fld_Mtf *fldMtf, const Rcx_Ptl *rcxPtl)
static void GetContacts(const Threader::VirtualCoordinateList &coords, Threader::ContactList *resResContacts, Threader::ContactList *resPepContacts)
static unsigned int BinDistance(const Vector &p1, const Vector &p2)
#define NO_VIRTUAL_COORDINATE(coord)
Include a standard set of the NCBI C++ Toolkit most basic headers.
string Path(const string &dir, const string &file)
static void cleanup(void)
#define END_SCOPE(ns)
End the previously defined scope.
#define BEGIN_SCOPE(ns)
Define a new scope.
IO_PREFIX::ifstream CNcbiIfstream
Portable alias for ifstream.
static string DoubleToString(double value, int precision=-1, TNumToStringFlags flags=0)
Convert double to string.
unsigned int
A callback function used to compare two keys in a database.
const struct ncbi::grid::netcache::search::fields::SIZE size
The NCBI C++/STL use hints.
std::istream & in(std::istream &in_, double &x_)
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
static Threader::GeometryViolationsForRow violations
static const sljit_gpr r1
static const sljit_gpr r2
#define row(bind, expected)
static int GetBLOSUM62Score(char a, char b)
unsigned char LookupNCBIStdaaNumberFromCharacter(char r)
Gib_Scd * NewGibScd(int NumTempSteps)
Fld_Mtf * FreeFldMtf(Fld_Mtf *mtf)
Thd_Tbl * NewThdTbl(int NumResults, int NumCoreElements)
Rcx_Ptl * NewRcxPtl(int NumResTypes, int NumDistances, int PeptideIndex)
Rcx_Ptl * FreeRcxPtl(Rcx_Ptl *pmf)
Cor_Def * FreeCorDef(Cor_Def *cdf)
Seq_Mtf * NewSeqMtf(int NumResidues, int AlphabetSize)
void PrintCorDef(Cor_Def *cdf, FILE *pFile)
int atd(Fld_Mtf *mtf, Cor_Def *cdf, Qry_Seq *qsq, Rcx_Ptl *pmf, Gib_Scd *gsp, Thd_Tbl *ttb, Seq_Mtf *psm, float *trg, int zscs, double ScalingFactor, float PSSM_Weight)
void PrintThdTbl(Thd_Tbl *ttb, FILE *pFile)
int ThrdRound(double Num)
Fld_Mtf * NewFldMtf(int NumResidues, int NumResResContacts, int NumResPepContacts)
void PrintFldMtf(Fld_Mtf *mtf, FILE *pFile)
Qry_Seq * FreeQrySeq(Qry_Seq *qsq)
Gib_Scd * FreeGibScd(Gib_Scd *gsp)
Thd_Tbl * FreeThdTbl(Thd_Tbl *ttb)
Seq_Mtf * FreeSeqMtf(Seq_Mtf *psm)
void PrintSeqMtf(Seq_Mtf *psm, FILE *pFile)
Cor_Def * NewCorDef(int NumBlocks)
Qry_Seq * NewQrySeq(int NumResidues, int NumBlocks)
void PrintQrySeq(Qry_Seq *qsq, FILE *pFile)
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