Пример #1
0
/*return the ordered table of index of base*/ 
size_t *qsortTable(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) {
	size_t *index, i;
	void **p, *data;
	if(size == 0 || nitems == 0)
		return NULL;
	index = (size_t*) malloc(nitems*sizeof(size_t*));
	p = (void**) malloc(nitems*sizeof(void*));
	data = (void*) malloc(nitems*size);
	memcpy(data, base, nitems*size);
	for(i=0; i<nitems; i++)
		p[i] = (((char*)data)+i*size);
	comparisonFunction = compar;
	qsort(p, nitems, sizeof(void*), compareIndirect);
	for(i=0; i<nitems; i++)
		index[i] = (size_t)((((char*)p[i])-((char*)data))/size);
	monfree((void*)data);
	monfree((void*)p);
	return index;
}
Пример #2
0
double score(TypeSetOfSequences *dec) {
	TypeNumber n, *present, *total;
	TypePosition p;
	double score;
	int *out;
	TypeSymbol c;

	present =(TypeNumber*) monmalloc(dec->cardinal*sizeof(TypeNumber));
	total =(TypeNumber*) monmalloc(dec->cardinal*sizeof(TypeNumber));
	out =(int*) monmalloc(dec->cardinal*sizeof(int));
	for(c=0; c<dec->cardinal; c++) {
		present[c] = -1;
		total[c] = 0;
		out[c] = 0;
	}
	for(n=0; n<dec->number; n++) {
		for(p=0; p<dec->size[n]; p++)
			if(dec->sequence[n][p]<dec->cardinal && !out[dec->sequence[n][p]]) {
				if(present[dec->sequence[n][p]] == n)
					out[dec->sequence[n][p]] = 1;
				else {
					present[dec->sequence[n][p]] = n;
					total[dec->sequence[n][p]]++;
				}
			}
	}
	score = 0;
	for(c=0; c<dec->cardinal; c++)
		if(!out[c])
//			score += (total[c]*(total[c]-1))/2;
			score += (pow(total[c], 1)*(total[c]-1));
	monfree((void*)out);
	monfree((void*)total);
	monfree((void*)present);
	return score;
}
Пример #3
0
double scorebis(TypeSetOfSequences *dec) {
	TypeNumber n, *last, *present;
	TypePosition p, *total;
	double score;

	TypeSymbol c;

	last =(TypeNumber*) monmalloc(dec->cardinal*sizeof(TypeNumber));
	present =(TypeNumber*) monmalloc(dec->cardinal*sizeof(TypeNumber));
	total =(TypePosition*) monmalloc(dec->cardinal*sizeof(TypePosition));
	for(c=0; c<dec->cardinal; c++) {
		present[c] = 0;
		total[c] = 0;
		last[c] = -1;
	}
	for(n=0; n<dec->number; n++) {
		for(p=0; p<dec->size[n]; p++)
			if(dec->sequence[n][p]<dec->cardinal) {
				if(last[dec->sequence[n][p]] != n) {
					last[dec->sequence[n][p]] = n;
					present[dec->sequence[n][p]]++;
				}
				total[dec->sequence[n][p]]++;
			}
	}
	score = 0;
	for(c=0; c<dec->cardinal; c++)
		if(total[c]>1 && total[c] <3* present[c])
			score += (pow(total[c], 0.5));
//			score += pow(((double)present[c])/((double)total[c]), 20.);
//	score /= dec->cardinal;
	monfree((void*)last);
	monfree((void*)total);
	monfree((void*)present);
	return score;
}
Пример #4
0
int main(int argc, char **argv) {
	TypePosition orderstart=1, orderend=10;
	char option[256], inputFileName[SIZE_BUFFER_CHAR], outputFileName[SIZE_BUFFER_CHAR], bufferOutput[SIZE_BUFFER_CHAR], *table, 
	outputFormat = 'r', typeDec = 'l', typeAlphabet = '?', typeCalc = 'g';
	TypeSetOfSequences *set;
	TypeAlignment aln, atmp;
	int fixed = 0;
	double threshold = 0.001, tmin = 0.00000000001, tmax=0.1, tstep = 0.00001;
	double thre;
	TypeNumber n;
	TypeDistance distA, distB, distC;
	TypePosition l, tot;
	double corrAB, corrAC;
	TypeSetOfSequences *dec;
	TypeMarkovModel *model;
		
	FILE *fi, *fo;
	int i = 1, typeDist = 0;

	for(i=0; i<256; i++)
		option[i] = 0;
	for(i=1; i<argc && *(argv[i]) == '-'; i++) {
		int j;
		for(j=1; argv[i][j] != '\0'; j++)
			option[argv[i][j]] = 1;
		if(option['f']) {
			option['f'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%c", &outputFormat) == 1)
				i++;
		}
		if(option['s']) {
			option['s'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%c", &typeAlphabet) == 1)
				i++;
		}
		if(option['c']) {
			option['c'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%c", &typeCalc) == 1)
				i++;
		}
		if(option['m']) {
			option['m'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%d", &typeDist) == 1)
				i++;
			if(typeDist >= MAX_FUNC)
				typeDist = 0;
		}
		if(option['t']) {
			option['t'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%lf", &threshold) == 1)
				i++;
		}
		if(option['h']) {
			printf("%s\n", HELPMESSAGE);
			exitProg(ExitOk, NULL);
		}
	}
	if (i>=argc || sscanf(argv[i++], "%s", inputFileName) != 1) exitProg(ErrorArgument, HELPMESSAGE);
	if (i>=argc || sscanf(argv[i++], "%s", outputFileName) != 1) exitProg(ErrorArgument, HELPMESSAGE);

	switch(typeAlphabet) {
		case 'd':
			table = (char*) monmalloc((strlen(DNA)+1)*sizeof(char));
			strcpy(table, DNA);
			break;
		case 'r':
			table = (char*) monmalloc((strlen(RNA)+1)*sizeof(char));
			strcpy(table, RNA);
			break;
		case 'p':
			table = (char*) monmalloc((strlen(PRO)+1)*sizeof(char));
			strcpy(table, PRO);
			break;
		case '?':
		default:
			table = (char*) monmalloc(sizeof(char));
			table[0] = '\0';
	}
	if(fi = fopen(inputFileName, "r")) {
		aln = readAlignement(fi, table, typeAlphabet == '?');
		switch(typeAlphabet) {
			case 'd':
			case 'r':
				aln.ambiguity = getXNAAmbiguity();
				break;
			case 'p':
				aln.ambiguity = getProteinAmbiguity();
				break;
			case '?':
			default:
				aln.ambiguity.number = 0;
		}
		aln.cardinal -= aln.ambiguity.number;
		fclose(fi);
	} else {
		exitProg(ErrorReading, inputFileName);
	}
	if(!(fo = fopen(outputFileName, "w")))
		exitProg(ErrorWriting, outputFileName);
	fixAlignmentAmbiguity(&aln);
	set=toSequences(&aln);
	model = estimateMarkovModel(set);
	distA = computeWholeDistancePairAln(aln, computeNorm1Aln);
	dec = getDecodedFromThreshold(set, threshold, model);
	distB = computeWholeDistanceDec(dec);
	corrAB = computeCorrelation(distA, distB);
//printf("%lE\n", corrAB);
	monfree((void*)distB.table);
	for(n=0; n<dec->number; n++)
		monfree((void*) dec->sequence[n]);
	monfree((void*) dec->sequence);
	monfree((void*) dec->size);
	monfree((void*) dec);
	distC = computeMSMDistance(set);
	corrAC = computeCorrelation(distA, distC);
	monfree((void*)distC.table);
	monfree((void*)distA.table);
	fprintf(fo, "%lE\t%lE\n", corrAB, corrAC);
	fprintf(stdout, "%lE\t%lE\n", corrAB, corrAC);
	monfree((void*)set->size);
	for(n=0; n<set->number; n++)
		monfree((void*)set->sequence[n]);
	monfree((void*)set->sequence);
	monfree((void*)set);
	fclose(fo);
/*	sprintf(bufferOutput, "%s_Ali.nex", outputFileName);
	if(!(fo = fopen(bufferOutput, "w")))
		exitProg(ErrorWriting, bufferOutput);
	printDistanceNexus(fo, distA);
	fclose(fo);
	sprintf(bufferOutput, "%s_New.nex", outputFileName);
	if(!(fo = fopen(bufferOutput, "w")))
		exitProg(ErrorWriting, bufferOutput);
	printDistanceNexus(fo, distB);
	fclose(fo);
*/

	exitProg(ExitOk,NULL);
	return 0;
}
Пример #5
0
/* weptyp: uwep->otyp or 0 */
void
cutworm(struct monst *mtmp, xchar x, xchar y, uchar weptyp)
{
	struct wseg *wtmp, *wtmp2;
	struct monst *mtmp2;
	int tmp, tmp2;

	if (mtmp->mx == x && mtmp->my == y)	/* hit headon */
		return;

	/* cutting goes best with axe or sword */
	tmp = rnd(20);
	if (weptyp == LONG_SWORD || weptyp == TWO_HANDED_SWORD ||
	    weptyp == AXE)
		tmp += 5;
	if (tmp < 12)
		return;

	/* if tail then worm just loses a tail segment */
	tmp = mtmp->wormno;
	wtmp = wsegs[tmp];
	if (wtmp->wx == x && wtmp->wy == y) {
		wsegs[tmp] = wtmp->nseg;
		remseg(wtmp);
		return;
	}

	/* cut the worm in two halves */
	mtmp2 = newmonst(0);
	*mtmp2 = *mtmp;
	mtmp2->mxlth = mtmp2->mnamelth = 0;

	/* sometimes the tail end dies */
	if (rn2(3) || !getwn(mtmp2)) {
		monfree(mtmp2);
		tmp2 = 0;
	} else {
		tmp2 = mtmp2->wormno;
		wsegs[tmp2] = wsegs[tmp];
		wgrowtime[tmp2] = 0;
	}
	do {
		if (wtmp->nseg->wx == x && wtmp->nseg->wy == y) {
			if (tmp2)
				wheads[tmp2] = wtmp;
			wsegs[tmp] = wtmp->nseg->nseg;
			remseg(wtmp->nseg);
			wtmp->nseg = 0;
			if (tmp2) {
				pline("You cut the worm in half.");
				mtmp2->mhpmax = mtmp2->mhp =
				    d(mtmp2->data->mlevel, 8);
				mtmp2->mx = wtmp->wx;
				mtmp2->my = wtmp->wy;
				mtmp2->nmon = fmon;
				fmon = mtmp2;
				pmon(mtmp2);
			} else {
				pline("You cut off part of the worm's tail.");
				remseg(wtmp);
			}
			mtmp->mhp /= 2;
			return;
		}
		wtmp2 = wtmp->nseg;
		if (!tmp2)
			remseg(wtmp);
		wtmp = wtmp2;
	} while (wtmp->nseg);
	panic("Cannot find worm segment");
}
Пример #6
0
int main(int argc, char **argv) {		
	TypePosition orderstart=1, orderend=10, length = 10;
	char option[256], inputFileName[SIZE_BUFFER_CHAR], outputFileName[SIZE_BUFFER_CHAR], bufferOutput[SIZE_BUFFER_CHAR], *table, 
	outputFormat = 'r', typeDec = 'l', typeAlphabet = 'd', typeCalc = 'g';
	TypeSetOfSequences set;
	int fixed = 0, flagThre = 1;
	double threshold = 0.001, tmin = -25, tmax = -3, tprec = 0.5;
/*	TypeDistFunction *distfunc[MAX_FUNC]=
	{computeProba, computeKullbackLeiber1, computePham, computeCommon, computeCommonBis, computeGillesPham, computeMatchesBis, computeMatches, computeAlex, computeAlexBis};
*/		
	FILE *fi, *fo;
	int i = 1, typeDist = 0;

	for(i=0; i<256; i++)
		option[i] = 0;
	for(i=1; i<argc && *(argv[i]) == '-'; i++) {
		int j;
		for(j=1; argv[i][j] != '\0'; j++)
			option[argv[i][j]] = 1;
		if(option['f']) {
			option['f'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%c", &outputFormat) == 1)
				i++;
		}
		if(option['s']) {
			option['s'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%c", &typeAlphabet) == 1)
				i++;
		}
		if(option['c']) {
			option['c'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%c", &typeCalc) == 1)
				i++;
		}
		if(option['m']) {
			option['m'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%d", &typeDist) == 1)
				i++;
			if(typeDist >= MAX_FUNC)
				typeDist = 0;
		}
		if(option['t']) {
			option['t'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%lf", &threshold) == 1)
				i++;
			flagThre = 1;
		}
		if(option['l']) {
			option['l'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%ld", &length) == 1)
				i++;
			flagThre = 0;
		}
		if(option['h']) {
			printf("%s\n", HELPMESSAGE);
			exitProg(ExitOk, NULL);
		}
	}
	if (i>=argc || sscanf(argv[i++], "%s", inputFileName) != 1) exitProg(ErrorArgument, HELPMESSAGE);
	if (i>=argc || sscanf(argv[i++], "%s", outputFileName) != 1) exitProg(ErrorArgument, HELPMESSAGE);

	switch(typeAlphabet) {
		case 'd':
			table = (char*) monmalloc((strlen(DNA)+1)*sizeof(char));
			strcpy(table, DNA);
			break;
		case 'r':
			table = (char*) monmalloc((strlen(RNA)+1)*sizeof(char));
			strcpy(table, RNA);
			break;
		case 'p':
			table = (char*) monmalloc((strlen(PRO)+1)*sizeof(char));
			strcpy(table, PRO);
			break;
		case '?':
		default:
			table = (char*) monmalloc(sizeof(char));
			table[0] = '\0';
	}
	if(fi = fopen(inputFileName, "r")) {
		set = readSequencesFasta(fi, table, typeAlphabet == '?');
		switch(typeAlphabet) {
			case 'd':
			case 'r':
				set.ambiguity = getXNAAmbiguity();
				break;
			case 'p':
				set.ambiguity = getProteinAmbiguity();
				break;
			case '?':
			default:
				set.ambiguity.number = 0;
		}
		set.cardinal -= set.ambiguity.number;
		fclose(fi);
	} else {
		exitProg(ErrorReading, inputFileName);
	}
	
	if(fo = fopen(outputFileName, "w")) {
		TypeSetOfSequences *dec;
		TypeDistance dist;
		double tmid, t, smax, tres, sc,  scl, scr;
		TypeNumber n;
		TypeCodeScheme *scheme;
		TypeMarkovModel *model;

		fixSequencesAmbiguity(&set);
		scheme = (TypeCodeScheme*) monmalloc(sizeof(TypeCodeScheme));
		scheme->suffixTree = getSuffixTree(&set);
		scheme->code = (TypePosition*) monmalloc(scheme->suffixTree->size*sizeof(TypePosition));
		scheme->buffSize = INC_SIZE_CODE;
		scheme->lengthCode = (TypePosition*) monmalloc(scheme->buffSize*sizeof(TypePosition));
		model = estimateMarkovModel(&set);
		while((tmax-tmin)>4*tprec) {
			tmid = (tmax+tmin)/2.;
			scheme->cardCode = 0;
			buildCodeThreshold(exp(tmid-3.*tprec/2.), scheme->suffixTree->root, 0, 1., model, scheme);
			dec = getDecodedFromScheme(scheme);
			scl = score(dec);
			for(n=0; n<dec->number; n++)
				monfree((void*) dec->sequence[n]);
			monfree((void*) dec->sequence);
			monfree((void*) dec->size);
			monfree((void*) dec);
			scheme->cardCode = 0;
			buildCodeThreshold(exp(tmid+3.*tprec/2.), scheme->suffixTree->root, 0, 1., model, scheme);
			dec = getDecodedFromScheme(scheme);
			scr = score(dec);
			for(n=0; n<dec->number; n++)
				monfree((void*) dec->sequence[n]);
			monfree((void*) dec->sequence);
			monfree((void*) dec->size);
				monfree((void*) dec);
			if(scl>scr)
				tmax = tmid+3.*tprec/2.;
			else
				tmin = tmid-3.*tprec/2.;
		}
		if(scl>scr) {
			smax = scl;
			tres = exp(tmid-3.*tprec/2.);
		} else {
			smax = scr;
			tres = exp(tmid+3.*tprec/2.);
		}
		scheme->cardCode = 0;
		buildCodeThreshold(exp(tmid), scheme->suffixTree->root, 0, 1., model, scheme);
		dec = getDecodedFromScheme(scheme);
		sc = score(dec);
		for(n=0; n<dec->number; n++)
			monfree((void*) dec->sequence[n]);
		monfree((void*) dec->sequence);
		monfree((void*) dec->size);
		monfree((void*) dec);
		if(sc>smax) {
			smax = scl;
			tres = exp(tmid);
		}
printf("%.4lE\t%lf\n", tres, smax);
		scheme->cardCode = 0;
		buildCodeThreshold(tres, scheme->suffixTree->root, 0, 1., model, scheme);
		dec = getDecodedFromScheme(scheme);
		freeModel(model);
		freeScheme(scheme);
		dist = computeWholeDistanceDec(dec);
		switch(outputFormat) {
			case 't':
				printDistanceTable(fo, dist);
				break;
			case 'r':
				printDistanceRaw(fo, dist);
				break;
			case 'p':
				printDistancePhylip(fo, dist);
				break;
			case 'n':
				printDistanceNexus(fo, dist);
		}
		fclose(fo);
	} else {
		exitProg(ErrorWriting, outputFileName);
	}
	exitProg(ExitOk,NULL);
	return 0;
}
Пример #7
0
int main(int argc, char **argv) {
	TypePosition orderstart=1, orderend=10;
	char option[256], inputFileName[SIZE_BUFFER_CHAR], outputFileName[SIZE_BUFFER_CHAR], bufferOutput[SIZE_BUFFER_CHAR], *table, 
	outputFormat = 'r', typeDec = 'l', typeAlphabet = '?', typeCalc = 'g', type = 't';
	TypeSetOfSequences *set, seq;
	TypeAlignment aln, atmp;
	int fixed = 0;
	double threshold = 0.001, tmin = 1E-20, tmax=0.1, tstep = 0.00001, qmin = -25, qmax = -3, qprec = 0.5;
	double thre;
	TypeNumber n;
	TypeDistance distA, distB;
	TypePosition l, tot, lmax = 50;
	TypeSuffixTree *suffixTree;
	TypeMarkovModel *model;
	TypeCodeScheme *scheme;
/*	TypeDistFunction *distfunc[MAX_FUNC]=
	{computeProba, computeKullbackLeiber1, computePham, computeCommon, computeCommonBis, computeGillesPham, computeMatchesBis, computeMatches, computeAlex, computeAlexBis};
*/		
	FILE *fi, *fo;
	int i = 1, typeDist = 0;

	for(i=0; i<256; i++)
		option[i] = 0;
	for(i=1; i<argc && *(argv[i]) == '-'; i++) {
		int j;
		for(j=1; argv[i][j] != '\0'; j++)
			option[argv[i][j]] = 1;
		if(option['f']) {
			option['f'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%c", &outputFormat) == 1)
				i++;
		}
		if(option['s']) {
			option['s'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%c", &typeAlphabet) == 1)
				i++;
		}
		if(option['c']) {
			option['c'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%c", &typeCalc) == 1)
				i++;
		}
		if(option['m']) {
			option['m'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%lf", &tmin) == 1)
				i++;
			if(typeDist >= MAX_FUNC)
				typeDist = 0;
		}
		if(option['t']) {
			option['t'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%lf", &threshold) == 1)
				i++;
		}
		if(option['y']) {
			option['y'] = 0;
			if((i+1)<argc && sscanf(argv[i+1], "%c", &type) == 1)
				i++;
		}
	if(option['h']) {
			printf("%s\n", HELPMESSAGE);
			exitProg(ExitOk, NULL);
		}
	}
	if (i>=argc || sscanf(argv[i++], "%s", inputFileName) != 1) exitProg(ErrorArgument, HELPMESSAGE);
	if (i>=argc || sscanf(argv[i++], "%s", outputFileName) != 1) exitProg(ErrorArgument, HELPMESSAGE);

	switch(typeAlphabet) {
		case 'd':
			table = (char*) monmalloc((strlen(DNA)+1)*sizeof(char));
			strcpy(table, DNA);
			break;
		case 'r':
			table = (char*) monmalloc((strlen(RNA)+1)*sizeof(char));
			strcpy(table, RNA);
			break;
		case 'p':
			table = (char*) monmalloc((strlen(PRO)+1)*sizeof(char));
			strcpy(table, PRO);
			break;
		case '?':
		default:
			table = (char*) monmalloc(sizeof(char));
			table[0] = '\0';
	}
	if(fi = fopen(inputFileName, "r")) {
		aln = readAlignement(fi, table, typeAlphabet == '?');
		switch(typeAlphabet) {
			case 'd':
			case 'r':
				aln.ambiguity = getXNAAmbiguity();
				break;
			case 'p':
				aln.ambiguity = getProteinAmbiguity();
				break;
			case '?':
			default:
				aln.ambiguity.number = 0;
		}
		aln.cardinal -= aln.ambiguity.number;
		fclose(fi);
	} else {
		exitProg(ErrorReading, inputFileName);
	}
	fixAlignmentAmbiguity(&aln);
	set=toSequences(&aln);

	if(!(fo = fopen(outputFileName, "w")))
		exitProg(ErrorWriting, outputFileName);
	distA = computeWholeDistancePairAln(aln, computeNorm1Aln);
	scheme = (TypeCodeScheme*) monmalloc(sizeof(TypeCodeScheme));
	scheme->suffixTree = getSuffixTree(set);
	scheme->code = (TypePosition*) monmalloc(scheme->suffixTree->size*sizeof(TypePosition));
	scheme->buffSize = INC_SIZE_CODE;
	scheme->lengthCode = (TypePosition*) monmalloc(scheme->buffSize*sizeof(TypePosition));
	if(type == 't') {
		int l;
		model = estimateMarkovModel(set);
//		for(thre=tmin; thre<=tmax; thre *= 10.0) {
		for(l=tmin; l<=-1; l++) {
			double t;
			int k;
			thre = pow(10.0, (double) l);
			for(k=0; k<10; k++) {
//			for(t=thre; t<thre*10; t+=thre) {
				double corr, sc;
				TypeSetOfSequences *dec;
				t = ((double)k+1.)*thre;
				scheme->cardCode = 0;
				buildCodeThreshold(t, scheme->suffixTree->root, 0, 1., model, scheme);
//printLengthDistribution(stdout, scheme->lengthCode,scheme->cardCode);
				dec = getDecodedFromScheme(scheme);
//printf("cardinal dec = %ld\n", dec->cardinal);
				distB = computeWholeDistanceDec(dec);
				corr = computeCorrelation(distA, distB);
				monfree((void*)distB.table);
				sc = score(dec);
				printf("%lE\t%lf\t%.2lf\n", t, corr, sc);
				fprintf(fo, "%lE\t%lf\t%.2lf\n", t, corr, sc);
				for(n=0; n<dec->number; n++)
					monfree((void*) dec->sequence[n]);
				monfree((void*) dec->sequence);
				monfree((void*) dec->size);
				monfree((void*) dec);
			}
		}
		fprintf(stdout, "\n\n%.4lE\n\n", findMode(set, qmin, qmax, qprec, scheme, model));
		freeModel(model);
	} else {
		for(l = lmax; l>=1; l--) {
			double corr;
			TypeSetOfSequences *dec;
			scheme->cardCode = 0;
			buildCodeLength(l, scheme->suffixTree->root, 0, scheme);
//printLengthDistribution(stdout, scheme->lengthCode,scheme->cardCode);
			dec = getDecodedFromScheme(scheme);
//printf("cardinal dec = %ld\n", dec->cardinal);
			distB = computeWholeDistanceDec(dec);
			corr = computeCorrelation(distA, distB);
			monfree((void*)distB.table);
			fprintf(fo, "%ld\t%lf\n", l, corr);
			fprintf(stdout, "%ld\t%lf\n", l, corr);
			for(n=0; n<dec->number; n++)
				monfree((void*) dec->sequence[n]);
			monfree((void*) dec->sequence);
			monfree((void*) dec->size);
			monfree((void*) dec);
		}
	}
		
	freeScheme(scheme);
	monfree((void*)distA.table);
	fprintf(stdout, "\n\n%ld\n\n", totalLength(*set));
	monfree((void*)set->size);
	for(n=0; n<set->number; n++)
		monfree((void*)set->sequence[n]);
	monfree((void*)set->sequence);
	monfree((void*)set);
	fclose(fo);
/*	sprintf(bufferOutput, "%s_Ali.nex", outputFileName);
	if(!(fo = fopen(bufferOutput, "w")))
		exitProg(ErrorWriting, bufferOutput);
	printDistanceNexus(fo, distA);
	fclose(fo);
	sprintf(bufferOutput, "%s_New.nex", outputFileName);
	if(!(fo = fopen(bufferOutput, "w")))
		exitProg(ErrorWriting, bufferOutput);
	printDistanceNexus(fo, distB);
	fclose(fo);
*/
;
	exitProg(ExitOk,NULL);
	return 0;
}
Пример #8
0
double findMode(TypeSetOfSequences *set, double tmin, double tmax, double tprec, TypeCodeScheme *scheme, TypeMarkovModel *model) {
	double tmid, t, smax, tres, sc,  scl, scr;
	TypeNumber n;
//	TypeCodeScheme *scheme;
	TypeSetOfSequences *dec;
	
/*	scheme = (TypeCodeScheme*) monmalloc(sizeof(TypeCodeScheme));
	scheme->suffixTree = getSuffixTree(set);
	scheme->code = (TypePosition*) monmalloc(scheme->suffixTree->size*sizeof(TypePosition));
	scheme->buffSize = INC_SIZE_CODE;
	scheme->lengthCode = (TypePosition*) monmalloc(scheme->buffSize*sizeof(TypePosition));
*/	while((tmax-tmin)>4*tprec) {
		tmid = (tmax+tmin)/2.;
		scheme->cardCode = 0;
		buildCodeThreshold(exp(tmid-3.*tprec/2.), scheme->suffixTree->root, 0, 1., model, scheme);
		dec = getDecodedFromScheme(scheme);
		scl = score(dec);
		for(n=0; n<dec->number; n++)
			monfree((void*) dec->sequence[n]);
		monfree((void*) dec->sequence);
		monfree((void*) dec->size);
		monfree((void*) dec);
		scheme->cardCode = 0;
		buildCodeThreshold(exp(tmid+3.*tprec/2.), scheme->suffixTree->root, 0, 1., model, scheme);
		dec = getDecodedFromScheme(scheme);
		scr = score(dec);
		for(n=0; n<dec->number; n++)
			monfree((void*) dec->sequence[n]);
		monfree((void*) dec->sequence);
		monfree((void*) dec->size);
		monfree((void*) dec);
		if(scl>scr)
			tmax = tmid+3.*tprec/2.;
		else
			tmin = tmid-3.*tprec/2.;
	}
	if(scl>scr) {
		smax = scl;
		tres = exp(tmid-3.*tprec/2.);
	} else {
		smax = scr;
		tres = exp(tmid+3.*tprec/2.);
	}
	scheme->cardCode = 0;
	buildCodeThreshold(exp(tmid), scheme->suffixTree->root, 0, 1., model, scheme);
	dec = getDecodedFromScheme(scheme);
	sc = score(dec);
	for(n=0; n<dec->number; n++)
		monfree((void*) dec->sequence[n]);
	monfree((void*) dec->sequence);
	monfree((void*) dec->size);
	monfree((void*) dec);
	if(sc>smax) {
		smax = scl;
		tres = exp(tmid);
	}
//	freeScheme(scheme);
	return tres;
}