Пример #1
0
/* Initialise: set up global data storage */
void Initialise(char *datafn)
{
   ParmBuf pbuf;
   int s;
   Boolean eSep;

   CreateHeap(&iStack,"inBuf",     MSTAK, 1, 0.5, 100000, LONG_MAX);
   CreateHeap(&dStack,"seqStack",  MSTAK, 1, 0.5, 100000, LONG_MAX);
   CreateHeap(&cStack,"clustStack",MSTAK, 1, 0.5, 100000, LONG_MAX);

   /* Peek at first data file to get observation format */
   if((pbuf = OpenBuffer(&iStack, datafn, 0, UNDEFF, FALSE_dup, FALSE_dup))==NULL)
      HError(2550,"Initialise: Config parameters invalid");
   GetBufferInfo(pbuf, &info);
   CloseBuffer(pbuf);
   ResetHeap(&iStack);

   /* set/validate stream widths */
   if(swidth[0] > 0)
      CheckStreamWidths(info);
   else
      ZeroStreamWidths(1,swidth);

   /* Create an observation to hold the input parameters */
   SetStreamWidths(info.tgtPK,info.tgtVecSize,swidth,&eSep);
   obs = MakeObservation(&gstack,swidth,info.tgtPK,FALSE,eSep);

   if (segLab != NULL)
      segId = GetLabId(segLab,TRUE);

   /* Create sequences to hold all data*/
   for (s=1;s<=swidth[0];s++)
      dSeq[s] = CreateSequence(&dStack,4096);
}
Пример #2
0
cFourFractals::cFourFractals(const cFractalContainer *par, const cParameterContainer *generalPar)
{
	fourFractals = new cFractal*[NUMBER_OF_FRACTALS];
	for (int i = 0; i < NUMBER_OF_FRACTALS; i++)
	{
		fourFractals[i] = new cFractal(&par->at(i));
		fourFractals[i]->formula = (fractal::enumFractalFormula) generalPar->Get<int>("formula", i + 1);
		formulaWeight[i] = generalPar->Get<double>("formula_weight", i + 1);
	}

	maxN = generalPar->Get<int>("N");
	CreateSequence(generalPar);

	if (generalPar->Get<bool>("hybrid_fractal_enable"))
	{
		DEType[0] = fractal::deltaDE;
	}
	else
	{
		for(int f = 0; f < NUMBER_OF_FRACTALS; f++)
		{
			fractal::enumFractalFormula formula = fourFractals[f]->formula;
			for (int i = 0; i < fractalList.size(); i++)
			{
				if (fractalList[i].internalID == formula)
				{
					DEType[f] = fractalList[i].DEType;
				}
			}
		}
	}
}
Пример #3
0
/* Converts a multiple alignment (possibly with gaps) to a bunch of
 * aligned single-letter seqeunces.  Also reorders aligned residues.
 */
SequenceAlignment *GetSequenceAlignment(MultipleAlignment *ma) {
	SequenceAlignment *out = (SequenceAlignment *) malloc(sizeof(SequenceAlignment));
	int chain, block, chain2;
	int *indices = (int*) calloc(ma->numChains, sizeof(int));
	out->numSeqs = ma->numChains;
	out->seqs = (Sequence**) malloc(sizeof(Sequence*) * ma->numChains);

	for (chain=0; chain<ma->numChains; chain++) {
		out->seqs[chain] = CreateSequence(ma->chains[chain]->pdb->idString);
	}
	for (block=0; block < ma->numBlocks; block++) {
		int first = ma->blocks[block].first;
		int last = ma->blocks[block].last;
		for (chain=0; chain<ma->numChains; chain++) {
			int find = first;
			int index;
			while (find <= last && !ma->residues[chain].res[find].exists) find++;
			if (find > last) break;
			index = ma->residues[chain].res[find].index;
			while (indices[chain] < index) {
				for (chain2=0; chain2<ma->numChains; chain2++) {
					if (chain2 != chain) {
						AddCharacter(out->seqs[chain2], '-');
					}
					else {
						AddCharacter(out->seqs[chain2], ma->chains[chain2]->res[indices[chain2]++].residue);
					}
				}
			}
		}
		while (first <= last) {
			for (chain=0; chain<ma->numChains; chain++) {
				if (ma->residues[chain].res[first].exists) {
					AddCharacter(out->seqs[chain], ma->chains[chain]->res[indices[chain]++].residue);
				}
				else {
					AddCharacter(out->seqs[chain], '-');
				}
			}
			first++;
		}
	}
	for (chain=0; chain<ma->numChains; chain++) {
		while (indices[chain] < ma->chains[chain]->length) {
			for (chain2=0; chain2<ma->numChains; chain2++) {
				if (chain2 != chain) {
					AddCharacter(out->seqs[chain2], '-');
				}
				else {
					AddCharacter(out->seqs[chain2], ma->chains[chain2]->res[indices[chain2]++].residue);
				}
			}
		}
	}
	free(indices);
	Reorder(out);
	return out;
}
Пример #4
0
List *OrderedList::SelectOrder(ListComparator Compare, BOOL Reverse)
{
	if (Compare == NULL || Compare == Unsorted)
		return(&MasterList);

	OrderSequence *TheSeq = FindSequence(Compare, Reverse);	// Find existing Seq?

	if (TheSeq == NULL)										// No - create new one
		TheSeq = CreateSequence(Compare, Reverse);

	if (TheSeq == NULL)										// Failed - argh!
		return(NULL);

	if (!TheSeq->Cached)									// Needs sorting?
		SortSequence(TheSeq);

	TheSeq->UsageCount++;									// Increment the usage count

	return(&TheSeq->Sequence);
}