コード例 #1
0
void Docking::dockingSearchTest(double R, double beta1, double gamma1, double beta2, double gamma2,vector <pair<double, ScoreConfiguration> >& scores)
{
	RotationMatrix rotationMatrixGamma1, rotationMatrixBeta1;
	RotationMatrix rotationMatrixGamma2, rotationMatrixBeta2;

	rotationMatrixGamma1.calculateMatrix(receptor_.getOrder(), RotationAngle( 0, gamma1) );
	rotationMatrixBeta1.calculateMatrix(receptor_.getOrder(), RotationAngle( beta1, 0.0) );
	rotationMatrixGamma2.calculateMatrix(receptor_.getOrder(), RotationAngle( 0, gamma2) );
	rotationMatrixBeta2.calculateMatrix(receptor_.getOrder(), RotationAngle( beta2, 0.0));
	
	rotReceptor_ = new Protein[1];
	rotLigand_   = new Protein[alphaSize_];

	receptor_.rotateTo(rotReceptor_[0], rotationMatrixGamma1);
	rotReceptor_[0].rotate(rotationMatrixBeta1);
	
	ligand_.rotateTo  (rotLigand_[0], rotationMatrixGamma2);
	rotLigand_[0].rotate(rotationMatrixBeta2);

	Protein *transTmp; 
	if (R > 0)
	{
		transTmp = new Protein;
		char buffer[100];
		sprintf(buffer, "%s/%d/%.6lf.dat", translationPath_.c_str(), receptor_.getOrder(), R);
		TranslationMatrix translationmatrix(buffer);
		rotReceptor_[0].translateTo(*transTmp, translationmatrix);
	}else
	{
		transTmp = &rotReceptor_[0];
	}

	set <pair<double, ScoreConfiguration> > bestScores;
	scores.clear();
	double minScore = 10000000.0, maxScore = -10000000.0;
	for (int j = 1; j < alphaSize_; ++j)
	{
		rotLigand_[0].rotateTo(rotLigand_[j], ((2.0*PI)/alphaSize_) * j);
		double tmpScore = scoreIt(*transTmp, rotLigand_[j], penalty_);
		printf("%lf \n", tmpScore);

		bestScores.insert(make_pair(tmpScore,ScoreConfiguration(R, ((2.0*PI)/alphaSize_) * j, beta1, gamma1, beta2, gamma2)));

		minScore = min(minScore, tmpScore);
		maxScore = max(maxScore, tmpScore);
		while ((int)bestScores.size() > scoresSize_)
		{
			bestScores.erase(bestScores.begin());
		}
	}
	printf("For R:%lf min score is %lf; max score is %lf\n",R, minScore, maxScore);
	for (set <pair<double, ScoreConfiguration> >::iterator itr = bestScores.begin(); itr != bestScores.end(); ++itr)
	{
		scores.push_back(*itr);
	}

	if (R>0) delete transTmp;
}
コード例 #2
0
void Docking::dockingSearch(vector <pair<double, ScoreConfiguration> >& scores, vector<double> RadiusSet, vector<double>& MaxScoresRadius)
{
	int raSize = 20*(1<<(tessellationOrder_*2))+1;

	set <pair<double, ScoreConfiguration> > bestScores;

	preDockingCalculateRotations();
	//precalculation of all rotations

	Protein *transTmp = new Protein;

	//printf("Starting docking search...\n");
	//scores.clear();
	

	for (unsigned int radiusIndex = 0; radiusIndex < RadiusSet.size(); ++radiusIndex)
	{
		double R = RadiusSet[radiusIndex];
		double minScore = 10000000.0, maxScore = -10000000.0;


		char buffer[100];
		sprintf(buffer, "%s/%d/%.6lf.dat", translationPath_.c_str(), receptor_.getOrder(), R);
		TranslationMatrix translationmatrix(buffer);
		for (int i = 0; i < raSize; ++i)
		{
			rotReceptor_[i].translateTo(*transTmp, translationmatrix);
			for (int j = 0; j < raSize*alphaSize_; ++j)
			{
				double tmpScore = scoreIt(*transTmp, rotLigand_[j], penalty_);
				bestScores.insert(make_pair(tmpScore,
						ScoreConfiguration(R, (j%alphaSize_) * (2.0*PI/alphaSize_), rotationAngles_[i].beta,
								rotationAngles_[i].gamma, rotationAngles_[j/alphaSize_].beta, rotationAngles_[j/alphaSize_].gamma)));

				minScore = min(minScore, tmpScore);
				maxScore = max(maxScore, tmpScore);
			}
			while ((int)bestScores.size() > scoresSize_)
			{
				bestScores.erase(bestScores.begin());
			}
		}
		printf("For R:%lf min score is %lf; max score is %lf\n",R, minScore, maxScore);
		MaxScoresRadius.push_back(R);
		MaxScoresRadius.push_back(maxScore);
	}

	for (set <pair<double, ScoreConfiguration> >::iterator itr = bestScores.begin(); itr != bestScores.end(); ++itr)
	{
		scores.push_back(*itr);
	}

	delete transTmp;
	

}
コード例 #3
0
ファイル: camera.cpp プロジェクト: mahu/pilse
//
// translate
//
void	camera::translate(math3d::vector const& v)
{
/*   	matrix tmp;

    	tmp[math3d::matrix::da] = v[math3d::vector::x];
    	tmp[math3d::matrix::db] = v[math3d::vector::y];
    	tmp[math3d::matrix::dc] = v[math3d::vector::z];
*/

	worldMatrix_ *= translationmatrix(v);
	worldMatrixInvers_ = inverse(worldMatrix_);
}
コード例 #4
0
void Docking::dockingSearch(vector <pair<double, ScoreConfiguration> >& scores)
{
	int raSize = 20*(1<<(tessellationOrder_*2));

	set <pair<double, ScoreConfiguration> > bestScores;

	preDockingCalculateRotations();

	Protein *transTmp = new Protein;

	
	scores.clear();
        

	for (double R = radiusStart_; R < radiusEnd_; R += 0.5)
	{
		double minScore = 10000000.0, maxScore = -10000000.0;

		printf("R: %lf\n", R);
		char buffer[100];
		sprintf(buffer, "%s/%d/%.6lf.dat", translationPath_.c_str(), receptor_.getOrder(), R);
		TranslationMatrix translationmatrix(buffer);
		for (int i = 0; i < raSize; ++i)
		{
			rotReceptor_[i].translateTo(*transTmp, translationmatrix);
			for (int j = 0; j < raSize*alphaSize_; ++j)
			{
				double tmpScore = scoreIt(*transTmp, rotLigand_[j], penalty_);
				bestScores.insert(make_pair(tmpScore,ScoreConfiguration(R,(j%alphaSize_)*(2.0*PI/alphaSize_),rotationAngles_[i].beta,rotationAngles_[i].gamma,rotationAngles_[j/alphaSize_].beta, rotationAngles_[j/alphaSize_].gamma)));

				minScore = min(minScore, tmpScore);
				maxScore = max(maxScore, tmpScore);
			}
			while ((int)bestScores.size() > scoresSize_)
			{
				bestScores.erase(bestScores.begin());
			}
		}
		printf("For this R: min score is %lf; max score is %lf\n", minScore, maxScore);
		printf("OK\n");
	}

	for (set <pair<double, ScoreConfiguration> >::iterator itr = bestScores.begin(); itr != bestScores.end(); ++itr)
	{
		scores.push_back(*itr);
	}

	freeMemory();
	delete transTmp;
	
}
コード例 #5
0
void Docking::setConfiguration(const ScoreConfiguration& scoreConfiguration, Protein &newReceptor, Protein &newLigand) const
{
	// rotate receptor
    RotationMatrix rotationMatrix;
    rotationMatrix.calculateMatrix(receptor_.getOrder(), RotationAngle(0.0, scoreConfiguration.gamma2));
	receptor_.rotateTo(newReceptor, rotationMatrix);
    rotationMatrix.calculateMatrix(receptor_.getOrder(), RotationAngle(scoreConfiguration.beta2, 0.0));
	newReceptor.rotate(rotationMatrix);

	// translate
	char buffer[100];
//	sprintf(buffer, "%s/%d/%.6lf.dat", "data/trans", receptor_.getOrder(), scoreConfiguration.R);
	sprintf(buffer, "%s/%d/%.6lf.dat", translationPath_.c_str(), receptor_.getOrder(), scoreConfiguration.R);
	TranslationMatrix translationmatrix(buffer);
	newReceptor.translate(translationmatrix);

    rotationMatrix.calculateMatrix(receptor_.getOrder(), RotationAngle(0.0, scoreConfiguration.gamma1));
	ligand_.rotateTo(newLigand, rotationMatrix);
    rotationMatrix.calculateMatrix(receptor_.getOrder(), RotationAngle(scoreConfiguration.beta1, 0.0));
	newLigand.rotate(rotationMatrix);
    rotationMatrix.calculateMatrix(receptor_.getOrder(), RotationAngle(0.0, scoreConfiguration.alpha));
	newLigand.rotate(rotationMatrix);
}
コード例 #6
0
void Docking::dockingQsearch(vector <pair<double, ScoreConfiguration> >& scores, vector<double> RadiusSet, vector<double>& MaxScoresRadius)
{
	int raSize = 20*(1<<(tessellationOrder_*2))+1;

	set <pair<double, ScoreConfiguration> > bestScores;

	preDockingCalculateQRotations();
	//precalculation of all rotations
	trigonometricCash();

	calculateCoeffMapping( );

	Protein *transReceptor = new Protein;

	//printf("Starting docking search...\n");

	//scores.clear();
	vector<double> qCoeffPlusPlus, qCoeffMinusMinus;
	int order = receptor_.getOrder();
	qCoeffPlusPlus.resize(order, 0.0);
	qCoeffMinusMinus.resize(order, 0.0);

	vector<double> qCoeffPlus;
	qCoeffPlus.resize((2* order - 1), 0.0); 
	vector<double> qCoeffMinus;
	qCoeffMinus.resize((2* order - 1), 0.0);
	int timeFlag = 0;

	//vector<int> translationIndexes;
	//receptor_.calculateTranslationIndexes( translationIndexes );

	for (unsigned int radiusIndex = 0; radiusIndex < RadiusSet.size(); ++radiusIndex)
	{
		double R = RadiusSet[radiusIndex];
		double minScore = 10000000.0, maxScore = -10000000.0;

		char buffer[100];
		sprintf(buffer, "%s/%d/%.6lf.dat", translationPath_.c_str(), receptor_.getOrder(), R);
		TranslationMatrix translationmatrix(buffer);
		for (int i = 0; i < raSize; ++i)
		{
			/*clock_t start,end;
			start = clock ();*/
			//rotReceptor_[i].translateTo(*transReceptor, translationmatrix, translationIndexes);
			rotReceptor_[i].translateTo(*transReceptor, translationmatrix);
			/*end = clock ();
			if (timeFlag == 0) printf("Finished translation in about %d ms. \n",(end-start));
			start = clock ();*/
			for (int j = 0; j < raSize; ++j)
			{
				/*calculateQcoeffPlusPlus(qCoeffPlusPlus,qCoeffPlus, *transReceptor, qRotLigand_[j] );
				calculateQcoeffMinusMinus(qCoeffMinusMinus,qCoeffMinus, *transReceptor, qRotLigand_[j] );*/
				calculateQcoeffs(qCoeffPlusPlus, qCoeffPlus, qCoeffMinusMinus, qCoeffMinus,*transReceptor, qRotLigand_[j]);
				double maxScoreAlfa = - 100000.0;
				double maxAlfa = 0.0;				
				for (int k = 0; k < alphaSize_; ++k)
				{
					int index_alfa = k*order;
					double tmpScore = qCoeffPlusPlus[0];
					for (int m = 1; m <= (order-1); ++m)
					{
						tmpScore += (qCoeffPlusPlus[m] * cosValue_->at(index_alfa+m) ) + (qCoeffMinusMinus[m] * sinValue_->at(index_alfa+m) );
					}

					if (tmpScore > maxScoreAlfa){
						maxScoreAlfa = tmpScore;
						maxAlfa = k*(2.0*PI/alphaSize_);
					}					

					if ( (i+1 == raSize)&&(j+1==raSize)&& (k==0) ){
					printf("R:%lf ,b1:%lf, g1:%lf, a2:%lf, b2:%lf, g2:%lf score:%lf \n",R, k*(2.0*PI/alphaSize_),rotationAngles_[i].beta,rotationAngles_[i].gamma,rotationAngles_[j].beta, rotationAngles_[j].gamma,tmpScore); 
					}
					minScore = min(minScore, tmpScore);
					maxScore = max(maxScore, tmpScore);
				}
				bestScores.insert(make_pair( maxScoreAlfa,ScoreConfiguration(R, maxAlfa ,rotationAngles_[i].beta, rotationAngles_[i].gamma, rotationAngles_[j].beta, rotationAngles_[j].gamma )));				

			}
			while ((int)bestScores.size() > scoresSize_)
			{
				bestScores.erase(bestScores.begin());
			}
			/*end = clock ();
			if (timeFlag == 0){
				printf("Finished rotation in about %d ms. \n", (end-start)/100);
				timeFlag = 1;
			}*/
		}
		printf("For R:%lf min score is %E; max score is %E\n",R, minScore, maxScore);
		MaxScoresRadius.push_back(R);
		MaxScoresRadius.push_back(maxScore);
	}

	for (set <pair<double, ScoreConfiguration> >::iterator itr = bestScores.begin(); itr != bestScores.end(); ++itr)
	{
		scores.push_back(*itr);
	}

	delete transReceptor;
	
}
コード例 #7
0
void Docking::dockingQsearchTest(double R, double beta1, double gamma1, double beta2, double gamma2,vector <pair<double, ScoreConfiguration> >& scores)
{
	RotationMatrix rotationMatrixGamma1, rotationMatrixBeta1;
	RotationMatrix rotationMatrixGamma2, rotationMatrixBeta2;

	rotationMatrixGamma1.calculateMatrix(receptor_.getOrder(), RotationAngle( 0, gamma1) );
	rotationMatrixBeta1.calculateMatrix(receptor_.getOrder(), RotationAngle( beta1, 0.0) );
	rotationMatrixGamma2.calculateMatrix(receptor_.getOrder(), RotationAngle( 0, gamma2) );
	rotationMatrixBeta2.calculateMatrix(receptor_.getOrder(), RotationAngle( beta2, 0.0));
	
	rotReceptor_ = new Protein[1];
	qRotLigand_   = new Protein[1];

	receptor_.rotateTo(rotReceptor_[0], rotationMatrixGamma1);
	rotReceptor_[0].rotate(rotationMatrixBeta1);
	
	ligand_.rotateTo  (qRotLigand_[0], rotationMatrixGamma2);
	qRotLigand_[0].rotate(rotationMatrixBeta2);
	qRotLigand_[0].qTransition(penalty_); 

	Protein *transReceptor; 
	if (R > 0)
	{
		transReceptor = new Protein;
		char buffer[100];
		sprintf(buffer, "%s/%d/%.6lf.dat", translationPath_.c_str(), receptor_.getOrder(), R);
		TranslationMatrix translationmatrix(buffer);
		vector<int> translationIndexes;
		rotReceptor_[0].calculateTranslationIndexes( translationIndexes );
		rotReceptor_[0].translateTo(*transReceptor, translationmatrix, translationIndexes);	
	}else
	{
		transReceptor = &rotReceptor_[0];
	}

	set <pair<double, ScoreConfiguration> > bestScores;
	scores.clear();
	double minScore = 10000000.0, maxScore = -10000000.0;

	vector<double> qCoeffPlusPlus, qCoeffMinusMinus;
	int order = receptor_.getOrder();
	qCoeffPlusPlus.resize(order, 0.0);
	qCoeffMinusMinus.resize(order, 0.0);

	trigonometricCash();
	calculateCoeffMapping( );

	vector<double> qCoeffPlus;
	qCoeffPlus.resize((2* order - 1), 0.0); 
	vector<double> qCoeffMinus;
	qCoeffMinus.resize((2* order - 1), 0.0);
	//calculateQcoeffPlusPlus(qCoeffPlusPlus, qCoeffPlus ,*transReceptor, qRotLigand_[0] );
	//calculateQcoeffMinusMinus(qCoeffMinusMinus,qCoeffMinus, *transReceptor, qRotLigand_[0] );

	calculateQcoeffs(qCoeffPlusPlus, qCoeffPlus, qCoeffMinusMinus, qCoeffMinus,*transReceptor, qRotLigand_[0]);
	
	printf("Q Coeff plus plus : \n");
	for(int i = 0 ; i < qCoeffPlusPlus.size(); ++i) printf("%lf \n",qCoeffPlusPlus[i]);

	printf("Q Coeff minus minus : \n");
	for(int i = 0 ; i < qCoeffMinusMinus.size(); ++i) printf("%lf \n",qCoeffMinusMinus[i]);

	printf("Alfa function: \n");
	for (int j = 1; j < alphaSize_; ++j)
	{
		double tmpScore = qCoeffPlusPlus[0];
		int index_alfa = j*order;
		for (int m = 1; m <= (order-1); ++m)
		{
			double alfa2angle = j*((2.0*PI)/alphaSize_);
			//tmpScore += (qCoeffPlusPlus[m] * cos(m*alfa2angle) ) + (qCoeffMinusMinus[m] * sin(m*alfa2angle) );
			tmpScore += (qCoeffPlusPlus[m] * cosValue_->at(index_alfa+m) ) + (qCoeffMinusMinus[m] * sinValue_->at(index_alfa+m) );
		}
		printf("%lf \n", tmpScore);

		bestScores.insert(make_pair(tmpScore,ScoreConfiguration(R, ((2.0*PI)/alphaSize_) * j, beta1, gamma1, beta2, gamma2)));

		minScore = min(minScore, tmpScore);
		maxScore = max(maxScore, tmpScore);
		while ((int)bestScores.size() > scoresSize_)
		{
			bestScores.erase(bestScores.begin());
		}
	}

	printf("For R:%lf min score is %lf; max score is %lf\n",R, minScore, maxScore);
	for (set <pair<double, ScoreConfiguration> >::iterator itr = bestScores.begin(); itr != bestScores.end(); ++itr)
	{
		scores.push_back(*itr);
	}

	if (R>0) delete transReceptor;
}